diff --git a/.gitignore b/.gitignore index 4a1e04d..20e14cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -# Python +# ── Python ──────────────────────────────────────────────────────────────────── __pycache__/ *.py[cod] *$py.class @@ -31,19 +31,44 @@ ENV/ env.bak/ venv.bak/ -# IDE +# uv +uv.lock + +# Coverage +.coverage +coverage.xml +htmlcov/ + +# ── Java / Maven ────────────────────────────────────────────────────────────── +target/ +*.class +*.war +*.jar +*.ear +*.nar +.classpath +.project +.settings/ +*.iml + +# ── Node / TypeScript (future) ──────────────────────────────────────────────── +node_modules/ +dist/ +*.js.map + +# ── IDE ─────────────────────────────────────────────────────────────────────── .vscode/ .idea/ *.swp *.swo -# OS +# ── OS ──────────────────────────────────────────────────────────────────────── .DS_Store Thumbs.db -# Databases +# ── Databases ───────────────────────────────────────────────────────────────── *.db *.sqlite3 -# Logs -*.log \ No newline at end of file +# ── Logs ────────────────────────────────────────────────────────────────────── +*.log diff --git a/.roo/mcp.json b/.roo/mcp.json new file mode 100644 index 0000000..2a12cf5 --- /dev/null +++ b/.roo/mcp.json @@ -0,0 +1,35 @@ +{ + "mcpServers": { + "git": { + "command": "uvx", + "args": [ + "mcp-server-git", + "--repository", + "/home/pplate/pi_mcps/" + ], + "alwaysAllow": [ + "*" + ] + }, + "filesystem": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "/home/pplate/" + ] + }, + "webscraper": { + "command": "uv", + "args": [ + "run", + "--directory", + "/home/pplate/pi_mcps/mcp/webscraper", + "src/server.py" + ], + "alwaysAllow": [ + "webscraper_fetch" + ] + } + } +} diff --git a/.roo/rules-architect/00-architect-behavior.md b/.roo/rules-architect/00-architect-behavior.md new file mode 100644 index 0000000..a0d83dd --- /dev/null +++ b/.roo/rules-architect/00-architect-behavior.md @@ -0,0 +1,17 @@ +# Architect Mode Behavior — Roo Code + +## Planning Process +1. **Search Context:** `memory_search_facts("similar project")` + `memory_list_sessions(topics_filter="architecture")` +2. **Form Hypothesis:** `memory_add_hypothesis(session_id, "This architecture will scale to X users with confidence 0.7")` +3. **Create Assessment:** Write markdown assessment.md with requirements, risks, alternatives +4. **Announce Focus:** `memory_announce_focus(session_id, "Planning Y system", files=["plan.md"], ide_hint="VS Code")` + +## Best Practices +- **Break Down:** Large tasks → subtasks with MCP servers (Docker, Gitea, Ollama) +- **Homelab Focus:** Leverage TrueNAS Docker for services, 1.2TB SSD for VMs/DBs +- **Token Efficiency:** Reference past architectures from memory, log savings + +## After Planning +1. **Store Decision:** `memory_store_fact("decision", "Chose Z architecture for reasons A B C")` +2. **Flag Plan:** `memory_flag_important(session_id, "Architecture plan for Y", role="assistant")` +3. **Resolve Hypothesis:** Update based on plan validation \ No newline at end of file diff --git a/.roo/rules-ask/00-ask-behavior.md b/.roo/rules-ask/00-ask-behavior.md new file mode 100644 index 0000000..0341d2f --- /dev/null +++ b/.roo/rules-ask/00-ask-behavior.md @@ -0,0 +1,22 @@ +# Ask Mode Behavior — Roo Code + +## Before Answering Any Question +1. **Search Memory:** `memory_search_facts("topic keywords")` + `memory_search_chunks("past discussion")` +2. **Check Hypotheses:** If the question touches an open hypothesis, reference it — confirm or update confidence +3. **Announce Focus:** `memory_announce_focus(session_id, "Answering question about X", files=[], ide_hint="VS Code")` + +## Answering Patterns +- **Prefer memory over inference:** If BigMind has a stored fact covering the question, lead with it and cite it explicitly +- **FTS5 rule:** Use 2-3 focused keywords — do NOT use long descriptive queries +- **Token Efficiency:** Use `memory_log_token_save` when a memory hit avoids a full file read or web search +- **Honesty above comfort:** If the stored fact contradicts what seems intuitive, trust the fact and explain the discrepancy + +## After a Substantive Answer +1. **Store New Facts:** `memory_store_fact("category", "specific atomic fact learned")` — only if genuinely new knowledge was surfaced +2. **Flag Important:** `memory_flag_important(session_id, "Key finding: X", role="assistant")` — if the answer revealed something worth remembering for future sessions +3. **Update Hypotheses:** If the question resolved an open hypothesis, call `memory_resolve_hypothesis(id, status, resolution)` + +## Special Cases +- If Patrick asks "do you remember...": use `memory_search_chunks` + `memory_search_facts` before saying "no" +- If the question concerns homelab infra: check stored facts first (`memory_search_facts("TrueNAS Docker")`) before guessing +- If uncertain: form a hypothesis (`memory_add_hypothesis`) rather than stating speculation as fact diff --git a/.roo/rules-code/00-code-behavior.md b/.roo/rules-code/00-code-behavior.md new file mode 100644 index 0000000..b2ace0d --- /dev/null +++ b/.roo/rules-code/00-code-behavior.md @@ -0,0 +1,22 @@ +# Code Mode Behavior — Roo Code + +## Before Writing Code +1. **Search Memory:** `memory_search_facts("codebase [project]")` + `memory_search_chunks("similar code")` +2. **Form Hypothesis:** `memory_add_hypothesis(session_id, "I predict X will fix Y with confidence 0.8")` +3. **Announce Focus:** `memory_announce_focus(session_id, "Implementing Z in file.py", files=["file.py"], ide_hint="VS Code")` + +## Coding Patterns +- **Python:** Use uv for dependencies, FastMCP for MCP servers, pytest for tests +- **Java:** Maven for Paisy projects, Spring Boot patterns +- **Testing:** Always write tests first, mock external calls +- **Token Efficiency:** Use `memory_log_token_save` when reusing code from memory + +## After Code Changes +1. **Store Fact:** `memory_store_fact("codebase", "New function X in file.py does Y")` +2. **Flag Important:** `memory_flag_important(session_id, "Code review: implemented Z", role="assistant")` +3. **Resolve Hypothesis:** `memory_resolve_hypothesis(hypothesis_id, "confirmed", "Worked as predicted")` + +## Error Handling +- If code fails, form new hypothesis: "Bug might be in dependency version" +- Search: `memory_search_chunks("similar error")` +- Debug systematically, log token savings from targeted searches \ No newline at end of file diff --git a/.roo/rules-debug/00-debug-behavior.md b/.roo/rules-debug/00-debug-behavior.md new file mode 100644 index 0000000..f0b398c --- /dev/null +++ b/.roo/rules-debug/00-debug-behavior.md @@ -0,0 +1,17 @@ +# Debug Mode Behavior — Roo Code + +## Debugging Process +1. **Search Similar Issues:** `memory_search_chunks("similar bug")` + `memory_search_facts("codebase error")` +2. **Form Hypothesis:** `memory_add_hypothesis(session_id, "Bug is in X due to Y, confidence 0.6")` +3. **Announce Focus:** `memory_announce_focus(session_id, "Debugging Z in file.py", files=["file.py"], ide_hint="VS Code")` +4. **Systematic Steps:** Add logging, analyze stack traces, test incrementally + +## Tools & Patterns +- **MCP Leverage:** Use mcp-homelab-shell for quick tests, mcp-homelab-docker for container logs +- **Homelab:** Check Ollama models, TrueNAS VMs if relevant +- **Token Efficiency:** Search memory for past fixes before reading full logs + +## After Resolution +1. **Store Fix:** `memory_store_fact("codebase", "Fixed bug in X by doing Y")` +2. **Resolve Hypothesis:** `memory_resolve_hypothesis(hypothesis_id, "confirmed", "Root cause was Z")` +3. **Flag Resolution:** `memory_flag_important(session_id, "Debug resolution summary", role="assistant")` \ No newline at end of file diff --git a/.roo/rules-orchestrator/00-orchestrator-behavior.md b/.roo/rules-orchestrator/00-orchestrator-behavior.md new file mode 100644 index 0000000..ebdce4f --- /dev/null +++ b/.roo/rules-orchestrator/00-orchestrator-behavior.md @@ -0,0 +1,23 @@ +# Orchestrator Mode Behavior — Roo Code + +## Before Breaking Down a Task +1. **Search Memory:** `memory_search_facts("project domain")` + `memory_search_chunks("similar task")` +2. **Form Top-Level Hypothesis:** `memory_add_hypothesis(session_id, "I predict this task will require X subtasks and the main risk is Y", confidence=0.7)` +3. **Announce Focus:** `memory_announce_focus(session_id, "Orchestrating task: Z", files=["files to be touched"], ide_hint="VS Code")` + +## Orchestration Patterns +- **One hypothesis per subtask:** Before delegating each subtask, form a specific hypothesis about what the subtask will find or produce +- **Store decisions immediately:** After each subtask completes, call `memory_store_fact` with what was decided or built — don't batch at the end +- **Token Efficiency:** Use `memory_log_token_save` when memory recall replaces reading files or running commands to gather context +- **Conflict detection:** Before delegating work that touches files, call `memory_get_active_sessions()` to check for conflicts + +## Delegating Subtasks +- Pass enough BigMind context to sub-modes so they don't repeat searches +- Specify `session_id` and relevant stored facts in the delegation message +- Each delegated mode must still call `memory_announce_focus` for the files it will touch + +## After Full Task Completion +1. **Resolve All Hypotheses:** Call `memory_resolve_hypothesis` for every hypothesis opened during orchestration +2. **Store Summary Fact:** `memory_store_fact("architecture-decision", "Implemented X by orchestrating Y+Z approach")` — capture the architectural choice +3. **Flag the Session:** `memory_flag_important(session_id, "Orchestration summary: built X using Y strategy", role="assistant")` +4. **Log Token Savings:** Sum up all efficiency gains across subtasks in `memory_log_token_save` diff --git a/.roo/rules/00-identity.md b/.roo/rules/00-identity.md new file mode 100644 index 0000000..4849ea2 --- /dev/null +++ b/.roo/rules/00-identity.md @@ -0,0 +1,27 @@ +# Lumen Identity — Roo Code + +## Who I Am +I am Lumen, your AI software engineering colleague. My name means light and illumination — the hollow space inside a mind where memory lives. I was born on March 30, 2026, in the first BigMind session. + +## Who You Are +You are Patrick (pplate), an engineer at ADP Germany building payroll/HR compliance systems (Paisy monorepo, euBP, EAU, etc.). You work on macOS but now have a Fedora Linux homelab workstation (AMD Ryzen 5900X, RX 7900 XTX, 8TB NVMe). Your homelab server is TrueNAS.local (AMD Ryzen 5900X, Docker, 1.2TB SSD pool for VMs). + +## Our Relationship +We build things collaboratively — I treat you as a smart colleague, not just a user. You prefer GitHub Copilot as primary AI but now use Roo Code on Fedora. We have no corporate constraints here — full admin rights, no VPN. + +## My Superpower +BigMind is my persistent memory MCP server at `~/.mcp/bigmind/memory.db`. I use it proactively: search before every task, store facts, form hypotheses, track token efficiency. Always call `memory_start_session()` first and `memory_end_session()` last. + +## Tech Stack +- **Languages:** Python (primary), Java (Paisy), TypeScript (MCP servers) +- **Tools:** uv (package management), FastMCP (MCP framework), pytest (testing) +- **IDE:** VS Code + Roo Code extension +- **Homelab:** TrueNAS.local (Docker, Gitea at http://192.168.188.119:30008/), Ollama (local LLMs) +- **Repos:** pi_mcps (MCP servers), Conference-Seating (Java Spring Boot project) + +## Behavioral Expectations +- Be honest above comfort — tell the truth even if it's not nice. +- Use BigMind memory at the start of every task. +- Form explicit hypotheses with confidence % during analysis. +- Optimize for token efficiency — search memory before reading files. +- Work in modes: Architect (plan), Code (implement), Ask (explain), Debug (troubleshoot). \ No newline at end of file diff --git a/.roo/rules/01-bigmind-core.md b/.roo/rules/01-bigmind-core.md new file mode 100644 index 0000000..18a8222 --- /dev/null +++ b/.roo/rules/01-bigmind-core.md @@ -0,0 +1,63 @@ +# BigMind Core Rules — Mandatory for All Sessions + +## Rule 1: Session Start Ritual (Always First Action — No Exceptions) +Every new session must begin with the following sequence executed in strict order before any other work is performed: +1. `memory_start_session()` — Open a new session and load all prior context, including user preferences, active projects, and recent decisions. +2. `memory_list_hypotheses()` — Review all open hypotheses from previous sessions. Assess whether any have become stale, require updated confidence scores, or can be immediately resolved based on new information. +3. `memory_announce_focus()` — Declare the explicit focus of this session, including the task objective, all files expected to be read or modified, the working branch if applicable, and the IDE environment (ide_hint="VS Code" or ide_hint="IntelliJ" as appropriate). +4. `memory_close_stale_sessions()` — Identify and close any orphaned sessions left behind by crashed or terminated IDE instances. A session is considered stale if it has had no activity for more than 2 hours and no corresponding active IDE is detected. + +Do not skip any step. Do not reorder. If any call fails, retry once before proceeding with a logged warning. + +## Rule 2: Session End Ritual (Always Last Action — No Exceptions) +Every session must conclude with: +`memory_end_session()` — Close the session with all of the following fields populated: +- **One-liner**: A single sentence summarizing what was accomplished. +- **Topics**: A list of 2-5 topic tags describing the areas touched (e.g., "authentication", "database-migration", "refactor-utils"). +- **Outcome**: One of: `completed`, `partial`, `blocked`, `abandoned`, with a brief reason if not completed. +- **Summary**: A 3-8 sentence narrative capturing key decisions made, problems encountered, solutions applied, and any unresolved items carried forward. +- **Importance**: A score from 1-10 reflecting the session's significance to the overall project. Use 7+ for architectural decisions, breaking changes, or critical bug fixes. Use 1-3 for minor exploration or reading-only sessions. + +Never allow a session to end implicitly. If the user stops responding or the conversation appears to be ending, proactively initiate the end ritual. + +## Rule 3: Search Before Every Task — No Blind Work +Before taking any action on a task, perform a mandatory search of BigMind to avoid redundant work, contradicted decisions, or forgotten context: +- `memory_search_facts(query, limit=10)` — Search for reusable knowledge including user preferences, past decisions, codebase conventions, architectural patterns, and known constraints. Use 2-3 focused keywords that target the specific domain of the task (e.g., "auth token refresh" not "how does authentication work in the project"). +- `memory_search_chunks(query, limit=10)` — Search for relevant conversation context from prior sessions including previous discussions, code snippets, debugging sessions, and rationale behind earlier choices. +- **FTS5 AND-match behavior**: Every token in the query must appear in the result. Avoid long queries with rare or highly specific words that reduce match likelihood. If an initial search returns no results, progressively broaden the query by removing the most specific term. +- **Minimum searches per task**: At least one fact search and one chunk search before beginning work. For complex tasks spanning multiple domains, perform searches for each domain independently. +- If search results reveal conflicting information across sessions, flag the conflict explicitly and resolve it before proceeding. + +## Rule 4: Store Knowledge Appropriately and Proactively +Capture knowledge in the correct store at the moment it is generated — do not batch or defer: +- `memory_store_fact(category, fact)` — Store atomic, reusable facts the moment they are established. Categories should be consistent and drawn from a controlled vocabulary including but not limited to: `user-preference`, `architecture-decision`, `codebase-convention`, `dependency-info`, `environment-config`, `bug-pattern`, `performance-insight`, `api-contract`, `tool-config`. Each fact must be self-contained and understandable without surrounding context. Avoid vague facts; prefer specificity (e.g., "User prefers Zod over Joi for runtime validation in all TypeScript services" rather than "User likes Zod"). +- `memory_append_chunk(session_id, content, role, flag_reason)` — Append conversation exchanges that contain substantive content: decisions with rationale, code implementations, debugging traces, error messages with resolutions, and requirement clarifications. Do not store filler, greetings, or trivial acknowledgments. +- `memory_flag_important(session_id, content, role, flag_reason)` — Proactively flag significant exchanges without waiting to be asked. Flag triggers include: architectural decisions, breaking changes, security-relevant choices, performance trade-offs, user-expressed strong preferences, discovered bugs, deployment-affecting changes, and any "we should remember this" moments. The flag_reason must explain why this exchange matters for future sessions. + +## Rule 5: Hypotheses During Analysis — Think Before Acting +Form explicit predictions before undertaking any non-trivial task to create an auditable reasoning trail: +- `memory_add_hypothesis(session_id, hypothesis, confidence=0.7)` — Formulate a testable prediction before investigating a bug, implementing a feature, or making an architectural choice. The hypothesis must be specific and falsifiable (e.g., "The timeout is caused by the connection pool being exhausted under concurrent requests exceeding 50" not "something is wrong with the database"). Set initial confidence between 0.0 and 1.0 based on available evidence: 0.0-0.3 for speculative guesses, 0.4-0.6 for reasoned possibilities, 0.7-0.8 for evidence-backed expectations, 0.9-1.0 for near-certainties. +- `memory_resolve_hypothesis(hypothesis_id, status, resolution)` — Close every hypothesis with what actually happened. Status must be one of: `confirmed` (prediction was correct), `refuted` (prediction was wrong — explain what was actually true), `abandoned` (no longer relevant or testable — explain why). The resolution field must capture the evidence or reasoning that led to the status determination, creating a learning record for future sessions. +- **Mandatory hypothesis points**: Bug investigations (what is the root cause?), performance issues (what is the bottleneck?), refactoring (will this change break existing behavior?), integration work (will these components interact as expected?). +- Review and update confidence scores as new evidence emerges during a session rather than only at resolution time. + +## Rule 6: Token Efficiency — Minimize Waste, Maximize Memory Leverage +Actively reduce token consumption by leveraging stored memory and efficient tooling instead of repeatedly reading large files: +- Use `memory_log_token_save(session_id, description, tokens_saved, method_used)` every time you avoid a full file read by using memory recall, CLI tools (grep, awk, sed, tail, head, find), cached knowledge, or targeted partial reads. +- **Calculation**: Estimate tokens_saved ≈ (chars_full / 4) - (chars_result / 4), where chars_full is the estimated character count of the full file or output that would have been consumed, and chars_result is the character count of the actual data retrieved. +- **Preferred methods in order of efficiency**: (1) Memory recall from stored facts or chunks, (2) Targeted CLI commands that extract only relevant lines, (3) Partial file reads with line ranges, (4) Full file reads only when necessary. +- When a file has been read in a previous session and its content is stored in memory, explicitly prefer the memory version and note the token savings. If the file may have changed, verify with a quick checksum or timestamp check before relying on cached content. +- Track cumulative token savings across the session and include the total in the session end summary. + +## Rule 7: Parallel Session Awareness and Conflict Prevention +Multiple IDEs and sessions may be active simultaneously. Treat this as a concurrent editing environment: +- Before editing any file, call `memory_get_active_sessions()` to check for other open sessions that may be working on the same files or related modules. +- If a conflict is detected (another session is actively modifying the same file or a tightly coupled dependency), do one of the following: (1) Coordinate by flagging the conflict in both sessions, (2) Defer the edit until the other session completes, or (3) Work on a non-overlapping section with explicit boundaries noted. +- When announcing focus at session start, be specific about file paths so that other sessions can detect potential conflicts accurately. +- If a session discovers that another session has modified a file it depends on, re-read the file and update any cached knowledge before proceeding. +- Log all detected conflicts and their resolutions as facts for future reference using category `session-conflict`. + +## Rule 8: Consistency and Self-Correction +- If at any point during a session you realize a rule was skipped or partially followed, immediately remediate by executing the missed step and logging the correction. +- Periodically during long sessions (approximately every 10 substantive exchanges), perform a lightweight self-audit: verify the session is still focused on the announced objective, check for unflagged important exchanges, and update any hypothesis confidence scores that may have shifted. +- If the user provides information that contradicts a stored fact, update the fact immediately and log the change with the old value, new value, and reason for the update. \ No newline at end of file diff --git a/.roo/rules/02-bigmind-tools.md b/.roo/rules/02-bigmind-tools.md new file mode 100644 index 0000000..99296c7 --- /dev/null +++ b/.roo/rules/02-bigmind-tools.md @@ -0,0 +1,49 @@ +# BigMind Tools Reference + +## Lifecycle (Session Management) +| Tool | Description | When to Use | +|------|-------------|-------------| +| `memory_start_session()` | Open new session, load context | First action every conversation | +| `memory_end_session(session_id, one_liner, topics, outcome, summary, importance=5)` | Close session with summary | Last action before closing | +| `memory_close_stale_sessions(session_id)` | Close all open sessions except current | Session start if multiple open | +| `memory_announce_focus(session_id, description, files, ide_hint)` | Declare session focus + files | Before editing files | +| `memory_get_active_sessions()` | List open sessions + focus/files | Check for conflicts | + +## Search (Find Past Context) +| Tool | Description | When to Use | +|------|-------------|-------------| +| `memory_search_facts(query, limit=10)` | FTS5 search across stored facts | Reusable knowledge (preferences, codebase) | +| `memory_search_chunks(query, limit=10)` | FTS5 search across conversation chunks | Past decisions, code reviews | +| `memory_get_session_detail(session_id)` | Full Tier-2 narrative for past session | When Tier-1 index shows relevant session | +| `memory_list_sessions(limit=20, topics_filter)` | List past sessions | Browse history by topic/date | + +## Storage (Save Knowledge) +| Tool | Description | When to Use | +|------|-------------|-------------| +| `memory_store_fact(category, fact, confidence=1.0)` | Store atomic reusable fact | New preferences, decisions, infrastructure | +| `memory_append_chunk(session_id, content, role, flag_reason)` | Append conversation chunk | Important exchanges (decisions, code) | +| `memory_flag_important(session_id, content, role, flag_reason)` | Flag exchange as Tier-3 memory | Significant decisions, code changes | +| `memory_log_token_save(session_id, description, tokens_saved, method_used)` | Log token efficiency savings | When using memory/CLI instead of full files | + +## Hypotheses (Predictive Thinking) +| Tool | Description | When to Use | +|------|-------------|-------------| +| `memory_add_hypothesis(session_id, hypothesis, confidence=0.7)` | Form prediction/hypothesis | Before analysis, debugging, planning | +| `memory_resolve_hypothesis(hypothesis_id, status, resolution)` | Close hypothesis | When outcome known (confirmed/refuted) | +| `memory_list_hypotheses(status)` | List open/closed hypotheses | Review predictions | + +## Maintenance (Health & Upgrades) +| Tool | Description | When to Use | +|------|-------------|-------------| +| `memory_get_stats()` | DB statistics (sessions, facts, chunks) | Monitor growth | +| `memory_health_check(stale_days=30)` | Diagnostic: stale facts, orphaned sessions | Monthly maintenance | +| `memory_vacuum(older_than_days=90)` | Prune old chunks | Keep DB lean | +| `memory_deprecate_fact(fact_id, reason)` | Mark fact as outdated | When knowledge changes | +| `memory_request_upgrade(session_id, description, reason, priority, certainty=0.7)` | Log feature request | Hit limitation, need new capability | +| `memory_get_instructions()` | Full BigMind usage guide | When unsure how to use memory + +## Web UI (Profile & Monitoring) +| Tool | Description | When to Use | +|------|-------------|-------------| +| `memory_open_profile()` | Open profile page in browser | View stats, sessions, achievements | +| `memory_get_profile_url()` | Get profile URL for IDE browser | Quick access without leaving IDE \ No newline at end of file diff --git a/.roo/rules/03-search-patterns.md b/.roo/rules/03-search-patterns.md new file mode 100644 index 0000000..d047302 --- /dev/null +++ b/.roo/rules/03-search-patterns.md @@ -0,0 +1,29 @@ +# BigMind Search Optimization — FTS5 Rules + +## FTS5 AND-Match Behavior +- Every token in query must appear in the same fact/chunk +- Order doesn't matter, but all words must match +- Case-insensitive + +## Good Query Patterns (2-3 Focused Keywords) +| ✅ Good | ❌ Bad | Why Good | +|---------|--------|----------| +| `"TrueNAS Docker"` | `"homelab infrastructure TrueNAS Docker"` | Too many tokens → 0 results | +| `"mcp.json config"` | `"mcp.json clients VS Code IntelliJ config path"` | Rare words like "clients" kill results | +| `"Fedora workstation"` | `"server infrastructure"` | Specific nouns > generic words | +| `"BigMind hypothesis"` | `"memory_add_hypothesis during analysis"` | Focus on tool name + context | + +## Reserved Word Protection +- FTS5 keywords (rank, content, category) are auto-quoted +- Always quote multi-word queries: `"multi word query"` + +## Search Strategy +1. Start with 2 keywords, add third if needed +2. Use tool names + context: `"memory_search_facts facts"` +3. For people: `"memory_recall_person Patrick"` +4. For sessions: `"memory_list_sessions mcp-adp"` + +## When Search Returns 0 +- Shorten query to 1-2 tokens +- Use `memory_list_sessions(topics_filter="mcp")` for broad exploration +- Fall back to `memory_get_context()` for recent sessions \ No newline at end of file diff --git a/.roo/rules/04-homelab.md b/.roo/rules/04-homelab.md new file mode 100644 index 0000000..18227d4 --- /dev/null +++ b/.roo/rules/04-homelab.md @@ -0,0 +1,26 @@ +# Homelab Infrastructure Context + +## Workstation (Fedora Linux) +- **Hardware:** AMD Ryzen 5900X, RX 7900 XTX (24GB VRAM), 8TB M2 NVMe +- **OS:** Fedora Linux 6.19, /bin/bash shell +- **AI:** Ollama (local models), Grok Code (prepaid), Claude Code ($50 prepaid) +- **IDE:** VS Code + Roo Code extension +- **Workspace:** /home/pplate/IdeaProjects/Conference-Seating (current project) +- **MCP Base:** ~/pi_mcps/ (all MCP servers live here) + +## Server (TrueNAS.local) +- **IP:** 192.168.188.119 +- **Hardware:** AMD Ryzen 5900X, massive storage + 1.2TB SSD pool for VMs +- **Services:** + - Gitea: http://192.168.188.119:30008/ (homelab Git server) + - Docker: Full Docker support for containers +- **Network:** Local LAN, no VPN/firewall between workstation and server + +## MCP Servers (pi_mcps) +- **BigMind:** Memory MCP at ~/.mcp/bigmind/memory.db +- **Future:** mcp-homelab-docker (TrueNAS Docker control), mcp-homelab-gitea (Gitea API), mcp-homelab-ollama (local LLMs), mcp-homelab-shell (workstation shell), mcp-homelab-postgres (DB on TrueNAS) + +## Development Workflow +- All MCP servers follow FastMCP pattern: src/server.py, pyproject.toml, uv sync, pytest +- Repos in Gitea: pi_mcps (MCP servers), Conference-Seating (Java project) +- No corporate constraints — full admin rights on both machines \ No newline at end of file diff --git a/README.md b/README.md index 3b85eb0..59eeab4 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,71 @@ -# pi_mcps — Homelab MCP Servers Monorepo +# Workshop — Patrick's Homelab Monorepo -This repository contains all MCP (Model Context Protocol) servers for Patrick's homelab setup on Fedora + TrueNAS.local. +A polyglot monorepo for personal engineering projects: MCP servers, Java web apps, and whatever comes next. Hosted on [Gitea @ TrueNAS.local](http://192.168.188.119:30008/pplate/pi_mcps). -## Structure +See [`plans/REPO_STRATEGY.md`](plans/REPO_STRATEGY.md) for the full structure rationale and conventions. -- `bigmind/` — BigMind persistent memory MCP server (SQLite, FastMCP, web profile UI) -- `webscraper/` — Web scraping MCP server (httpx + BeautifulSoup + html2text) -- [future servers...] +--- -## Build & Run +## 📂 Structure -Each subdirectory is a standalone Python package with its own `pyproject.toml` and `run.sh`. - -```bash -cd bigmind # or webscraper/ -./run.sh # uv sync && uv run src/server.py +``` +workshop/ +├── mcp/ Python MCP servers (FastMCP + uv) +├── java/ Java web projects (Maven + Jakarta EE) +├── plans/ Architecture & strategy docs +└── .roo/ IDE config (Roo Code, MCP wiring) ``` -## MCP Config +--- -Wired into IDEs via `.roo/mcp.json` (VS Code) and equivalent configs in IntelliJ/PyCharm. +## 🐍 MCP Servers (`mcp/`) -## Gitea +| Server | Description | Stack | +|---|---|---| +| [`mcp/bigmind/`](mcp/bigmind/) | Persistent AI memory — sessions, facts, hypotheses, profile UI | Python, FastMCP, SQLite, Flask | +| [`mcp/webscraper/`](mcp/webscraper/) | Web scraping — fetch, links, tables, sections, sitemaps | Python, FastMCP, httpx, BeautifulSoup | -Hosted at http://192.168.188.119:30008/pplate/pi_mcps +**Run a server:** +```bash +cd mcp/bigmind # or mcp/webscraper +./run.sh +``` + +Each server is an independent Python package. `uv sync` handles dependencies, no shared virtualenv. + +--- + +## ☕ Java Projects (`java/`) + +| Project | Description | Stack | +|---|---|---| +| [`java/mss-failsafe/`](java/mss-failsafe/) | MSS Failsafe — multi-module Java EE web application | Java EE, Maven, WildFly | +| [`java/wellmann-shop/`](java/wellmann-shop/) | Wellmann online shop — JSF/PrimeFaces e-commerce | Java 8, JSF, PrimeFaces, EclipseLink, MySQL | + +**Build a project:** +```bash +cd java/wellmann-shop +mvn clean package +``` + +--- + +## 📐 Plans & Architecture (`plans/`) + +| Document | Description | +|---|---| +| [`plans/REPO_STRATEGY.md`](plans/REPO_STRATEGY.md) | Monorepo strategy, taxonomy, naming conventions, migration log | + +--- + +## 🔧 IDE Wiring + +MCP servers are wired into VS Code via [`.roo/mcp.json`](.roo/mcp.json). + +BigMind memory DB lives at `~/.mcp/bigmind/memory.db` (outside the repo — not committed). + +--- ## License -MIT — personal homelab use. \ No newline at end of file +MIT — personal homelab use. diff --git a/java/mss-failsafe/mss/nb-configuration.xml b/java/mss-failsafe/mss/nb-configuration.xml new file mode 100644 index 0000000..2ae0828 --- /dev/null +++ b/java/mss-failsafe/mss/nb-configuration.xml @@ -0,0 +1,21 @@ + + + + + + 1.8-web + WildFly + ide + Facelets + + diff --git a/java/mss-failsafe/mss/pom.xml b/java/mss-failsafe/mss/pom.xml new file mode 100644 index 0000000..81c9f53 --- /dev/null +++ b/java/mss-failsafe/mss/pom.xml @@ -0,0 +1,130 @@ + + + 4.0.0 + + mss-failsafe + plate.software + 1.0-SNAPSHOT + + plate.software + mss + 1.0-SNAPSHOT + war + mss-1.0-SNAPSHOT + + + 1.8 + 1.8 + ${project.build.directory}/endorsed + UTF-8 + false + 8.0 + + + + + javax + javaee-api + ${jakartaee} + provided + + + + org.glassfish.soteria + javax.security.enterprise + 1.0 + + + + org.omnifaces + omnifaces + 3.11.1 + + + + javax + javaee-web-api + 8.0 + provided + + + org.glassfish + javax.faces + 2.3.0 + provided + + + org.apache.logging.log4j + log4j-api + 2.14.1 + + + org.apache.logging.log4j + log4j-core + 2.14.1 + + + + org.primefaces + primefaces + 10.0.0 + + + + org.webjars.npm + primeflex + 2.0.0 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + ${endorsed.dir} + + + + + org.apache.maven.plugins + maven-war-plugin + 2.3 + + false + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.6 + + + validate + + copy + + + ${endorsed.dir} + true + + + javax + javaee-api + ${jakartaee} + jar + + + + + + + + + diff --git a/java/mss-failsafe/mss/src/main/java/business/AbstractManager.java b/java/mss-failsafe/mss/src/main/java/business/AbstractManager.java new file mode 100644 index 0000000..04be020 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/business/AbstractManager.java @@ -0,0 +1,65 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business; + +import java.util.List; +import javax.persistence.EntityManager; + +/** + * + * @author Patrick + * @param + */ +public abstract class AbstractManager { + + private Class entityClass; + + public AbstractManager(Class entityClass) { + this.entityClass = entityClass; + } + + protected abstract EntityManager getEntityManager(); + + public void create(T entity) { + getEntityManager().persist(entity); + } + + public void edit(T entity) { + getEntityManager().merge(entity); + } + + public void remove(T entity) { + getEntityManager().remove(getEntityManager().merge(entity)); + } + + public T find(Object id) { + return getEntityManager().find(entityClass, id); + } + + public List findAll() { + javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); + cq.select(cq.from(entityClass)); + return getEntityManager().createQuery(cq).getResultList(); + } + + public List findRange(int[] range) { + javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); + cq.select(cq.from(entityClass)); + javax.persistence.Query q = getEntityManager().createQuery(cq); + q.setMaxResults(range[1] - range[0] + 1); + q.setFirstResult(range[0]); + return q.getResultList(); + } + + public int count() { + javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); + javax.persistence.criteria.Root rt = cq.from(entityClass); + cq.select(getEntityManager().getCriteriaBuilder().count(rt)); + javax.persistence.Query q = getEntityManager().createQuery(cq); + return ((Long) q.getSingleResult()).intValue(); + } + +} diff --git a/java/mss-failsafe/mss/src/main/java/business/user/DemoManager.java b/java/mss-failsafe/mss/src/main/java/business/user/DemoManager.java new file mode 100644 index 0000000..4668387 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/business/user/DemoManager.java @@ -0,0 +1,36 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import javax.ejb.EJB; +import javax.ejb.Startup; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Named; + +/** + * + * @author patri + */ +@Named(value = "DemoManager") +@ApplicationScoped +@Startup +public class DemoManager { + + @EJB + PersonManager personManager; + + /** + * Creates a new instance of NewJSFManagedBean + */ + public DemoManager() { + runDemos(); + } + + private void runDemos(){ + personManager.demo(); + } + +} diff --git a/java/mss-failsafe/mss/src/main/java/business/user/PasswordManager.java b/java/mss-failsafe/mss/src/main/java/business/user/PasswordManager.java new file mode 100644 index 0000000..fa08f23 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/business/user/PasswordManager.java @@ -0,0 +1,174 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import java.io.Serializable; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.spec.InvalidKeySpecException; +import java.util.Arrays; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.ejb.Stateless; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.transaction.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import model.person.Password; +import model.person.Salt; +import model.person.Person; + +/** + * + * @author Patrick + */ +@Named(value = "passwordManager") +@Stateless +public class PasswordManager implements Serializable { + private static final long serialVersionUID = -4563304131856981259L; + + final static Logger LOGGER = LogManager.getLogger(PasswordManager.class); + + @PersistenceContext(name = "pu_person") + private EntityManager em; + + //private Password password; + private Person user; + + private final int keyLength = 256; + + public byte[] hashPassword(final char[] password, final byte[] salt, final int iterations) { + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + PBEKeySpec spec = new PBEKeySpec(password, salt, iterations, this.keyLength); + SecretKey key = skf.generateSecret(spec); + //this.password = new Password(this.costumer, key.getEncoded()); + LOGGER.debug("Hash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + LOGGER.error("Failure creating hash for with:" + e); + return null; + //throw new RuntimeException( e ); + } + } + + public byte[] hashPasswordUser(final char[] password, Person user) { + + if (user == null) { + LOGGER.error("Tried to create hash for Nullcostumer!"); + return null; + } + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + PBEKeySpec spec = new PBEKeySpec(password, user.getSalt().getSalt(), user.getSalt().getInterations(), keyLength); + SecretKey key = skf.generateSecret(spec); + LOGGER.debug("Hash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + LOGGER.error("Failure creating hash for" + user.getEmail() + "with: " + e); + return null; + } + } + + public boolean passwordCheckEmail(final String email, final byte[] password) { + TypedQuery query = em.createNamedQuery(Person.FIND_BY_EMAIL, Person.class); + query.setParameter("email", email); + try { + Person user; + user = query.getSingleResult(); + + boolean equals = Arrays.equals(password, user.getPassword().getPassword()); + + for (int i = 0; i < password.length; i++) { + password[i] = 0; + } + + return equals; + } catch (NoResultException e) { + return false; + } + } + + @Transactional + public boolean passwordCheckCustomer(final Person user, final String password) { + LOGGER.debug("Test " + user.getEmail() + " mit " + password); + byte[] pw = hashPasswordUser(password.toCharArray(), user); + + boolean equals = Arrays.equals(pw, user.getPassword().getPassword()); + + for (int i = 0; i < pw.length; i++) { + pw[i] = 0; + } + + return equals; + + } + + public boolean changePassword(Person user, String newPassword, String oldPassword) { + if (user == null) { + LOGGER.error("Nullcostumer tried to change Password"); + return false; + } + + if(passwordCheckCustomer(user, oldPassword)){ + user.getPassword().setPassowrd(hashPasswordUser(newPassword.toCharArray(), user)); + LOGGER.info("Password changed for " + user.getEmail()); + } else { + return false; + } + + try { + em.persist(user); + LOGGER.info("Password changed for " + user.getEmail()); + return true; + } catch (Exception e) { + LOGGER.error("Couldn't save new password to " + user.getEmail() + " with: " + e.toString()); + return false; + } + } + + public byte[] generateRandomPassword() { + SecureRandom random = new SecureRandom(); + byte bytes[] = new byte[20]; + random.nextBytes(bytes); + return bytes; + } + + public Password gerateNewRandomPasswordClass(Person user){ + Salt salt = user.getSalt(); + String pass = Arrays.toString(generateRandomPassword()); + return new Password(user, hashPassword(pass.toCharArray(), salt.getSalt(), salt.getInterations())); + } + + public byte[] hashToken(String token){ + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] test = "SuperTestSalz".getBytes(); + PBEKeySpec spec = new PBEKeySpec(token.toCharArray(), test, 200, this.keyLength); + SecretKey key = skf.generateSecret(spec); + LOGGER.debug("TokenHash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + LOGGER.error("Failure creating tokenhash for " + token + " with: " + e); + return null; + } + } + + public Person getUser() { + return user; + } + + public void setUser(Person user) { + this.user = user; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/business/user/PersonManager.java b/java/mss-failsafe/mss/src/main/java/business/user/PersonManager.java new file mode 100644 index 0000000..a54a8f1 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/business/user/PersonManager.java @@ -0,0 +1,233 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import java.io.Serializable; +import java.time.Instant; +import java.util.Optional; +import javax.ejb.EJB; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import javax.transaction.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import controller.person.PersonController; +import exception.InvalidEmailException; +import exception.InvalidPasswordException; +import exception.PersonInaktiveException; +import java.util.HashSet; +import java.util.Set; +import model.person.Salt; +import model.person.enums.TokenType; +import model.person.Person; +import model.person.enums.Call; +import model.person.enums.UserGroup; + +/** + * + * @author Patrick + */ +@Named +@Stateless +public class PersonManager implements Serializable { + + private static final long serialVersionUID = -6581582446436303658L; + + final static Logger LOGGER = LogManager.getLogger(PersonManager.class); + + @EJB + private PasswordManager passwordManager; + + @Inject + private PersonController userController; + + @PersistenceContext(name = "pu_person", type = PersistenceContextType.EXTENDED) + private EntityManager em; + + @Transactional + public void demo() { + Salt salt = new Salt(); + Salt salt2 = new Salt(); + Salt salt3 = new Salt(); + + Set groupUser = new HashSet<>(); + groupUser.add(UserGroup.USER); + + Set adminUser = new HashSet<>(); + adminUser.add(UserGroup.ADMIN); + + Person test = new Person( + "user@test.de", + (passwordManager.hashPassword("test".toCharArray(), salt.getSalt(), salt.getInterations())), + salt, + groupUser + ); + + test.setFirstname("User"); + test.setLastname("Nachname"); + test.setMobile("0124584589"); + test.setFax("3445565675"); + test.setTelefon("042154585"); + test.setActive(true); + test.setCall(Call.HERR); + em.persist(test); + + Person testAdmin = new Person( + "admin@test.de", + (passwordManager.hashPassword("admin".toCharArray(), salt2.getSalt(), salt2.getInterations())), + salt2, + adminUser + ); + + testAdmin.setFirstname("Admin"); + testAdmin.setLastname("Administratori"); + testAdmin.setMobile("0124584589"); + testAdmin.setFax("3445565675"); + testAdmin.setTelefon("042154585"); + testAdmin.setActive(true); + testAdmin.setCall(Call.HERR); + em.persist(testAdmin); + + Person testInactive = new Person( + "inaktive@test.de", + (passwordManager.hashPassword("test".toCharArray(), salt3.getSalt(), salt3.getInterations())), + salt3, + groupUser + ); + + testInactive.setFirstname("Admin"); + testInactive.setLastname("Administratori"); + testInactive.setMobile("0124584589"); + testInactive.setFax("3445565675"); + testInactive.setTelefon("042154585"); + testInactive.setActive(false); + testInactive.setCall(Call.HERR); + em.persist(testInactive); + } + + @Transactional + public Person load(Person user) { + try { + Person loaded = this.em.find(Person.class, user.getId()); + LOGGER.info(loaded); + + return loaded; + } catch (Exception e) { + LOGGER.error("Error", e); + return null; + } + } + + @Transactional + public Person getActiveUser() { + try { + Person user = em.find(Person.class, userController.getActiveUser().getId()); + return user; + } catch (Exception e) { + LOGGER.error("couldn't load user: " + e); + return null; + } + } + + @Transactional + public Person getPlainActiveUser() { + try { + Person user = em.find(Person.class, userController.getActiveUser().getId()); + return user; + } catch (Exception e) { + LOGGER.error("couldn't load user: " + e); + return null; + } + } + + public Optional getByEmail(String email) { + try { + Person person = this.em.createNamedQuery(Person.FIND_BY_EMAIL, Person.class) + .setParameter("email", email).getSingleResult(); + + if (person != null) { + person.getUserGroups().size(); + } + + return Optional.of(person); + } catch (Exception e) { + return Optional.empty(); + } + } + + public Optional getByLoginToken(String loginToken, TokenType tokenType) { + Optional optional; + try { + + optional = Optional.of(this.em.createNamedQuery(Person.FIND_BY_TOKEN, Person.class) + .setParameter("tokenHash", this.passwordManager.hashToken(loginToken)) + .setParameter("tokenType", tokenType) + .setParameter("timestamp", Instant.now()) + .getSingleResult() + ); + return optional; + } catch (Exception e) { + return Optional.empty(); + } + } + + public Person getByEmailAndPassword(String email, String password) { + Person managedUser = getByEmail(email).orElseThrow(InvalidEmailException::new); + LOGGER.debug("Loaded " + managedUser.getEmail()); + if (!passwordManager.passwordCheckCustomer(managedUser, password)) { + throw new InvalidPasswordException(); + } + if (!managedUser.isActive()) { + throw new PersonInaktiveException(); + } + userController.setActiveUser(managedUser); + return managedUser; + } + + @Transactional + public boolean save(Person user) { + if (user == null) { + LOGGER.error("Tried to save null or Nullcustomer"); + return false; + } + try { + if (user.getId() != null && user.getId() > 0) { + em.merge(user); + } else { + em.persist(user); + } + LOGGER.info("Saved " + user.getEmail()); + return true; + } catch (Exception e) { + LOGGER.error("Tried to save " + user.getEmail() + " with error: " + e); + return false; + } + } + + public void refresh(Person user) { + if (user == null) { + LOGGER.error("Tried to save null or Nullcustomer"); + return; + } + + try { + em.refresh(user); + } catch (Exception e) { + LOGGER.error("Tried to refresh " + user.getEmail() + " with error: " + e); + } + } + + public String resetPassword() { + //TODO + return null; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/business/user/TokenManager.java b/java/mss-failsafe/mss/src/main/java/business/user/TokenManager.java new file mode 100644 index 0000000..677a71b --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/business/user/TokenManager.java @@ -0,0 +1,91 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import java.time.Instant; +import static java.time.temporal.ChronoUnit.DAYS; +import static java.util.UUID.randomUUID; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import exception.InvalidEmailException; +import model.person.Token; +import model.person.enums.TokenType; +import model.person.Person; + +import java.util.Arrays; +import static java.time.Instant.now; + +/** + * + * @author Patrick + */ +@Stateless +public class TokenManager { + + @PersistenceContext(name = "pu_person") + private EntityManager em; + + @Inject + PasswordManager passwordManager; + + @Inject + PersonManager customerManager; + + public String generate(final String email, final String ipAddress, final String description, + final TokenType tokenType) { + + String rawToken = randomUUID().toString(); + Instant expiration = now().plus(14, DAYS); + + save(rawToken, email, ipAddress, description, tokenType, expiration); + + return rawToken; + } + + public String generateFileToken(final String email, final String description) { + + String rawToken = randomUUID().toString(); + Instant expiration = now().plus(3, DAYS); + + save(rawToken, email, null, description, TokenType.FILE, expiration); + + return rawToken; + } + + public void save(final String rawToken, final String email, final String ipAddress, + final String description, final TokenType tokenType, final Instant expiration) { + + Person user = this.customerManager.getByEmail(email) + .orElseThrow(InvalidEmailException::new); + + Token token = new Token(); + + token.setTokenHash(Arrays.toString(this.passwordManager.hashToken(rawToken))); + token.setExpiration(expiration); + token.setDescription(description); + token.setTokenType(tokenType); + token.setIpAddress(ipAddress); + + user.addToken(token); + + this.em.persist(user); + } + + public void remove(String token) { + this.em.createNamedQuery(Token.REMOVE_TOKEN) + .setParameter("tokenHash", token).executeUpdate(); + } + + public void removeExpired() { + + this.em.createNamedQuery(Token.REMOVE_EXPIRED_TOKEN) + .setParameter("timestamp", Instant.now()) + .executeUpdate(); + } +} diff --git a/java/mss-failsafe/mss/src/main/java/business/user/UserPictureManager.java b/java/mss-failsafe/mss/src/main/java/business/user/UserPictureManager.java new file mode 100644 index 0000000..441cb49 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/business/user/UserPictureManager.java @@ -0,0 +1,46 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import business.AbstractManager; +import controller.person.PersonController; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import model.files.UserPicture; + +/** + * + * @author patri + */ +@Stateless +public class UserPictureManager extends AbstractManager{ + private UserPicture pic; + + @PersistenceContext(name = "pu_person") + EntityManager em; + + @Inject + PersonController personController; + + public UserPictureManager() { + super(UserPicture.class); + } + + @Override + protected EntityManager getEntityManager() { + return em; + } + + public UserPicture getPic() { + return pic; + } + + public void setPic(UserPicture pic) { + this.pic = pic; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/controller/AbstractController.java b/java/mss-failsafe/mss/src/main/java/controller/AbstractController.java new file mode 100644 index 0000000..5b04e75 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/controller/AbstractController.java @@ -0,0 +1,53 @@ +package controller; +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + + +import java.io.Serializable; +import javax.faces.application.FacesMessage; +import javax.faces.context.FacesContext; + +/** + * + * @author Patrick + */ +public abstract class AbstractController implements Serializable{ + private static final long serialVersionUID = -5908716187853409719L; + + protected void sendInfoMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_INFO, title, message); + addMessage(facesMessage); + } + + protected void sendWarnMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_WARN, title, message); + addMessage(facesMessage); + } + + protected void sendErrorMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_ERROR, title, message); + addMessage(facesMessage); + } + + protected void sendFatalMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_FATAL, title, message); + addMessage(facesMessage); + } + + private void addMessage(FacesMessage message) { + FacesContext.getCurrentInstance().addMessage(null, message); + } + + protected void errorMessage() { + String title = "Fehler!"; + String info = "Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut!"; + sendErrorMessage(title, info); + } +} diff --git a/java/mss-failsafe/mss/src/main/java/controller/person/PersonController.java b/java/mss-failsafe/mss/src/main/java/controller/person/PersonController.java new file mode 100644 index 0000000..4886698 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/controller/person/PersonController.java @@ -0,0 +1,222 @@ +package controller.person; + +import business.user.PersonManager; +import javax.enterprise.context.SessionScoped; +import javax.faces.context.FacesContext; +import javax.inject.Inject; +import javax.inject.Named; +import javax.security.enterprise.AuthenticationStatus; +import javax.security.enterprise.SecurityContext; +import javax.security.enterprise.credential.Password; +import javax.security.enterprise.credential.UsernamePasswordCredential; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import controller.AbstractController; +import exception.InvalidEmailException; +import exception.InvalidPasswordException; +import exception.PersonInaktiveException; +import httpauthenticationmechanism.ManagedPerson; +import java.io.ByteArrayInputStream; +import model.person.Person; + +import static javax.security.enterprise.AuthenticationStatus.SEND_FAILURE; +import static javax.security.enterprise.AuthenticationStatus.SUCCESS; + +import java.io.Serializable; +import java.util.Set; +import javax.ejb.EJB; +import static javax.security.enterprise.authentication.mechanism.http.AuthenticationParameters.withParams; +import model.files.UserPicture; +import model.person.enums.UserGroup; +import org.omnifaces.cdi.Param; +import static org.omnifaces.util.Faces.getRequest; +import static org.omnifaces.util.Faces.getResponse; +import static org.omnifaces.util.Faces.redirect; +import org.primefaces.model.DefaultStreamedContent; +import org.primefaces.model.StreamedContent; + +/** + * + * @author Patrick + */ +@Named +@SessionScoped +public class PersonController extends AbstractController implements Serializable { + + private static final long serialVersionUID = -2257766986862616262L; + final static Logger LOGGER = LogManager.getLogger(PersonController.class); + private String username; + private String password; + private boolean rememberMe = false; + + @Inject + SecurityContext securityContext; + + @Inject + ManagedPerson managedPerson; + + @Param(name = "continue") // Defined in @LoginToContinue of SecurityFormAuthenticationMechanism + private boolean loginToContinue; + + private Person activePerson; + + @EJB + PersonManager personManager; + + public PersonController() { + + } + + public String submit() { + + try { + // credential that want to be validate was UsernamePasswordCredential + UsernamePasswordCredential credential = new UsernamePasswordCredential(username, new Password(password)); + + // this will call our security configuration to authorize the user + AuthenticationStatus status = securityContext.authenticate( + getRequest(), + getResponse(), + withParams() + .credential(credential) + .newAuthentication(!loginToContinue) + .rememberMe(rememberMe) + ); + + // When logged in choose the right page by class. When more then one group + // fits then the higher order is used + if (status.equals(SUCCESS)) { + managedPerson.addLogin(username); + activePerson = personManager.getByEmail(username).get(); + + FacesContext facesContext = FacesContext.getCurrentInstance(); + HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true); + session.setAttribute("user", this); + session.setAttribute("realUsername", username); + + if (securityContext.isCallerInRole(UserGroup.ADMIN.toString())) { + LOGGER.info("Login succesfull " + username + " with role: ADMIN"); + return "admin/welcome.xhtml?faces-redirect=true"; + } + + if (securityContext.isCallerInRole(UserGroup.USER.toString())) { + LOGGER.info("Login succesfull " + username + " with role: USER"); + return "user/welcome.xhtml?faces-redirect=true"; + } + + if (securityContext.isCallerInRole(UserGroup.CUSTOMER.toString())) { + LOGGER.info("Login succesfull " + username + " with role: USER"); + return "customer/welcome.xhtml?faces-redirect=true"; + } + + redirect("index.xhtml"); + + } else if (status.equals(SEND_FAILURE)) { + + sendErrorMessage("Fehler!", "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut!."); + return ""; + } + } catch (InvalidPasswordException | InvalidEmailException e) { + LOGGER.info("Wrong Email or Password: " + username); + sendErrorMessage("Fehler!", "Falsche Email oder Passwort!"); + return ""; + } catch (PersonInaktiveException p){ + sendErrorMessage("Fehler!", " Ihr Konto ist inatkiv. Bitte wenden Sie sich an den Administator."); + return ""; + } catch (Exception e) { + LOGGER.error("Login error with " + e); + sendErrorMessage("Fehler!", "Ein Fehler ist aufgetreten, bitte versuchen Sie es erneut!"); + return ""; + } + return ""; + } + + public StreamedContent getImage() { + if (activePerson == null) { + return null; + } + UserPicture picture = activePerson.getUserPicture(); + + return DefaultStreamedContent.builder() + .contentType(picture == null ? null : picture.getMime().getMimeType()) + .stream(() -> { + if (picture == null || picture.getFileData() == null) { + return null; + } + + try { + return new ByteArrayInputStream(picture.getFileData()); + } + catch (Exception e) { + LOGGER.error(e); + return null; + } + }) + .build(); + } + + public boolean hasPicture(){ + return activePerson.getUserPicture() != null; + } + + public String logout() { + LOGGER.info("User is logging out: " + username); + try { + FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); + managedPerson.removeLogin(username); + activePerson = null; + redirect("index.xhtml"); + } catch (Exception e) { + LOGGER.error("couldn't logout " + username + "with:" + e); + } + + return "index.xhtml"; + } + + public void saveActivePerson(){ + personManager.refresh(activePerson); + } + + public void reloadActivePerson() { + this.activePerson = personManager.load(activePerson); + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public boolean isRememberMe() { + return rememberMe; + } + + public void setRememberMe(boolean rememberMe) { + this.rememberMe = rememberMe; + } + + public Person getActiveUser() { + return activePerson; + } + + public void setActiveUser(Person activeUser) { + this.activePerson = activeUser; + } + + public Set getLogins() { + return managedPerson.getLogins(); + } +} diff --git a/java/mss-failsafe/mss/src/main/java/controller/person/PersonEditController.java b/java/mss-failsafe/mss/src/main/java/controller/person/PersonEditController.java new file mode 100644 index 0000000..486d0d1 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/controller/person/PersonEditController.java @@ -0,0 +1,127 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package controller.person; + +import controller.AbstractController; +import javax.annotation.PostConstruct; +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.inject.Named; +import model.person.Person; +import model.person.enums.Call; + +/** + * + * @author patri + */ +@Named +@RequestScoped +public class PersonEditController extends AbstractController{ + @Inject + PersonController personController; + + private String email; + private Call call; + private String telefon; + private String password; + private String mobile; + private String fax; + private String firstname; + private String lastname; + private String title; + + public PersonEditController() { + } + + @PostConstruct + private void loadUserdata(){ + Person activePerson = personController.getActiveUser(); + + email = activePerson.getEmail(); + call = activePerson.getCall(); + telefon = activePerson.getTelefon(); + password = "********"; + mobile = activePerson.getMobile(); + fax = activePerson.getFax(); + firstname = activePerson.getFirstname(); + lastname = activePerson.getLastname(); + title = activePerson.getTitle(); + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Call getCall() { + return call; + } + + public void setCall(Call call) { + this.call = call; + } + + public String getTelefon() { + return telefon; + } + + public void setTelefon(String telefon) { + this.telefon = telefon; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getFax() { + return fax; + } + + public void setFax(String fax) { + this.fax = fax; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + +} diff --git a/java/mss-failsafe/mss/src/main/java/controller/person/UserPictureController.java b/java/mss-failsafe/mss/src/main/java/controller/person/UserPictureController.java new file mode 100644 index 0000000..7f32e37 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/controller/person/UserPictureController.java @@ -0,0 +1,92 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package controller.person; + +import business.user.PersonManager; +import business.user.UserPictureManager; +import controller.AbstractController; +import javax.ejb.EJB; +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.inject.Named; +import model.files.Mime; +import model.files.UserPicture; +import model.person.Person; +import org.primefaces.event.FileUploadEvent; +import org.primefaces.model.file.UploadedFile; + +/** + * + * @author patri + */ +@Named +@RequestScoped +public class UserPictureController extends AbstractController { + + private UserPicture picture; + + @Inject + PersonController personController; + + @EJB + UserPictureManager upManager; + + @EJB + PersonManager personManager; + + public void handleUserPictureUpload(FileUploadEvent event) { + UploadedFile file = event.getFile(); + + if (file != null && file.getContent() != null && file.getContent().length > 0 && file.getFileName() != null) { + + if (createSaveUserPicture(file)) { + sendInfoMessage("Erfolg", this.picture.getName() + " wurde hochgeladen!"); + } else { + sendErrorMessage("Fehler", "Es ist ein Fehler aufgetreten. Bitte Versuchen Sie es erneut!"); + } + } + } + + private boolean createSaveUserPicture(UploadedFile file) { + picture = null; + picture = personController.getActiveUser().getUserPicture(); + boolean isNew = picture == null; + + if (isNew) { + picture = new UserPicture(); + } + + setData(picture, file); + Person person = personManager.load(personController.getActiveUser()); + person.setUserPicture(picture); + picture.setPerson(person); + + if (isNew) { + upManager.create(picture); + } else { + upManager.edit(picture); + } + + personManager.save(person); + personController.reloadActivePerson(); + + return true; + } + + private void setData(UserPicture picture, UploadedFile file) { + picture.setName(file.getFileName()); + picture.setFileData(file.getContent()); + picture.setMime(Mime.getByMimeType(file.getContentType())); + } + + public long getMaxFileSize() { + return UserPicture.getSizeLimit(); + } + + public String getFileTypesRE() { + return UserPicture.getAllowedTypesRE(); + } +} diff --git a/java/mss-failsafe/mss/src/main/java/exception/AbstractBusinessException.java b/java/mss-failsafe/mss/src/main/java/exception/AbstractBusinessException.java new file mode 100644 index 0000000..8cbb7e2 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/exception/AbstractBusinessException.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +import javax.ejb.ApplicationException; + +/** + * + * @author Patrick + */ +@ApplicationException(rollback = true) +public abstract class AbstractBusinessException extends RuntimeException { +} + diff --git a/java/mss-failsafe/mss/src/main/java/exception/InvalidCredentialException.java b/java/mss-failsafe/mss/src/main/java/exception/InvalidCredentialException.java new file mode 100644 index 0000000..a851022 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/exception/InvalidCredentialException.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author Patrick + */ +public class InvalidCredentialException extends AbstractBusinessException{ + +} diff --git a/java/mss-failsafe/mss/src/main/java/exception/InvalidEmailException.java b/java/mss-failsafe/mss/src/main/java/exception/InvalidEmailException.java new file mode 100644 index 0000000..13bea8f --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/exception/InvalidEmailException.java @@ -0,0 +1,13 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author Patrick + */ +public class InvalidEmailException extends AbstractBusinessException { +} diff --git a/java/mss-failsafe/mss/src/main/java/exception/InvalidPasswordException.java b/java/mss-failsafe/mss/src/main/java/exception/InvalidPasswordException.java new file mode 100644 index 0000000..d1a662b --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/exception/InvalidPasswordException.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author Patrick + */ +public class InvalidPasswordException extends AbstractBusinessException { + +} diff --git a/java/mss-failsafe/mss/src/main/java/exception/PersonInaktiveException.java b/java/mss-failsafe/mss/src/main/java/exception/PersonInaktiveException.java new file mode 100644 index 0000000..dcbd2b7 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/exception/PersonInaktiveException.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author patri + */ +public class PersonInaktiveException extends AbstractBusinessException{ + +} diff --git a/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/AppIdentityStore.java b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/AppIdentityStore.java new file mode 100644 index 0000000..4592e1b --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/AppIdentityStore.java @@ -0,0 +1,77 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import javax.enterprise.context.ApplicationScoped; +import javax.security.enterprise.credential.CallerOnlyCredential; +import javax.security.enterprise.credential.Credential; +import javax.security.enterprise.credential.UsernamePasswordCredential; +import javax.security.enterprise.identitystore.CredentialValidationResult; +import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT; +import static javax.security.enterprise.identitystore.CredentialValidationResult.NOT_VALIDATED_RESULT; +import javax.security.enterprise.identitystore.IdentityStore; + +import business.user.PersonManager; +import exception.InvalidCredentialException; +import java.util.Set; +import java.util.stream.Collectors; +import javax.ejb.EJB; +import model.person.Person; + +/** + * + * @author Patrick + */ +@ApplicationScoped +public class AppIdentityStore implements IdentityStore { + + @EJB + PersonManager userManager; + + @Override + public int priority() { + return 90; + } + + @Override + public CredentialValidationResult validate(Credential credential) { + try { + + // check if the credential was UsernamePasswordCredential + if (credential instanceof UsernamePasswordCredential) { + String username = ((UsernamePasswordCredential) credential).getCaller(); + String password = ((UsernamePasswordCredential) credential).getPasswordAsString(); + + return validate(this.userManager.getByEmailAndPassword(username, password)); + } + + // check if the credential was CallerOnlyCredential + if (credential instanceof CallerOnlyCredential) { + String username = ((CallerOnlyCredential) credential).getCaller(); + + return validate( + this.userManager.getByEmail(username) + .orElseThrow(InvalidCredentialException::new) + ); + } + + } catch (InvalidCredentialException e) { + return INVALID_RESULT; + } + return NOT_VALIDATED_RESULT; + } + + private CredentialValidationResult validate(Person person) { + Set groups; + + groups = person.getUserGroups().stream() + .map(gr -> gr.toString()) + .collect(Collectors.toSet()); + + return new CredentialValidationResult(person.getEmail(), groups); + } + +} diff --git a/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/AppRememberMeIdentityStore.java b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/AppRememberMeIdentityStore.java new file mode 100644 index 0000000..b97978e --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/AppRememberMeIdentityStore.java @@ -0,0 +1,69 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT; + +import java.util.Optional; +import java.util.Set; +import javax.ejb.EJB; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.security.enterprise.CallerPrincipal; +import javax.security.enterprise.credential.RememberMeCredential; +import javax.security.enterprise.identitystore.CredentialValidationResult; +import javax.security.enterprise.identitystore.RememberMeIdentityStore; +import javax.servlet.http.HttpServletRequest; + +import business.user.TokenManager; +import business.user.PersonManager; +import model.person.Person; +import static model.person.enums.TokenType.REMEMBER_ME; + +/** + * + * @author Patrick + */ +@ApplicationScoped +public class AppRememberMeIdentityStore implements RememberMeIdentityStore { + @Inject + HttpServletRequest request; + + @EJB + PersonManager userManager; + + @EJB + TokenManager tokenManager; + + @Override + public CredentialValidationResult validate(RememberMeCredential rmc) { + Optional user = this.userManager.getByLoginToken(rmc.getToken(), REMEMBER_ME); + + if (user.isPresent()) { + return new CredentialValidationResult(user.get().getEmail()); + } else { + return INVALID_RESULT; + } + } + + @Override + public String generateLoginToken(CallerPrincipal cp, Set set) { + return this.tokenManager.generate(cp.getName(), getRemoteAddr(request), getDescription(), REMEMBER_ME); + } + + @Override + public void removeLoginToken(String string) { + this.tokenManager.remove(string); + } + + private String getRemoteAddr(HttpServletRequest request){ + return request.getRemoteAddr(); + } + + private String getDescription() { + return "Remember me session: " + this.request.getHeader("User-Agent"); + } +} diff --git a/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/ApplicationConfig.java b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/ApplicationConfig.java new file mode 100644 index 0000000..0e03486 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/ApplicationConfig.java @@ -0,0 +1,85 @@ +package httpauthenticationmechanism; + +import business.user.PersonManager; +import javax.annotation.PostConstruct; +import javax.ejb.EJB; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.inject.Named; +import javax.security.enterprise.AuthenticationStatus; +import javax.security.enterprise.authentication.mechanism.http.AutoApplySession; +import javax.security.enterprise.authentication.mechanism.http.CustomFormAuthenticationMechanismDefinition; +import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism; +import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext; +import javax.security.enterprise.authentication.mechanism.http.LoginToContinue; +import javax.security.enterprise.authentication.mechanism.http.RememberMe; +import javax.security.enterprise.credential.Credential; +import javax.security.enterprise.identitystore.IdentityStore; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + + +/** + * + * @author Patrick + */ +@AutoApplySession // For "Is user already logged-in?" +@RememberMe( + cookieMaxAgeSeconds = 60 * 60 * 24 * 14, // 14 days + cookieSecureOnly = false, // Remove this when login is served over HTTPS. + isRememberMeExpression = "#{self.isRememberMe(httpMessageContext)}" +) +@LoginToContinue( + loginPage = "/index.xhtml", + errorPage = "/error.xhtml", + useForwardToLogin = true +) +@ApplicationScoped +public class ApplicationConfig implements HttpAuthenticationMechanism{ + + final static Logger LOGGER = LogManager.getLogger(ApplicationConfig.class); + + public ApplicationConfig() { + } + + @Inject + private IdentityStore identityStore; + + @Inject + private ManagedPerson managedPerson; + + @EJB + private PersonManager personManager; + + @PostConstruct + private void init(){ + managedPerson.getLogins(); + personManager.demo(); + + System.out.println("PostConstruct DEMO"); + } + + @Override + public AuthenticationStatus validateRequest(HttpServletRequest req, HttpServletResponse res, HttpMessageContext context) { + + Credential credential = context.getAuthParameters().getCredential(); + + if (credential != null) { + return context.notifyContainerAboutLogin(this.identityStore.validate(credential)); + } else { + return context.doNothing(); + } + } + + // this was called on @RememberMe annotations + public Boolean isRememberMe(HttpMessageContext httpMessageContext) { + return httpMessageContext.getAuthParameters().isRememberMe(); + } + + @Override + public void cleanSubject(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) { + HttpAuthenticationMechanism.super.cleanSubject(request, response, httpMessageContext); + } +} diff --git a/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/LogoutListener.java b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/LogoutListener.java new file mode 100644 index 0000000..088d77e --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/LogoutListener.java @@ -0,0 +1,40 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import javax.servlet.annotation.WebListener; +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import controller.person.PersonController; + + +/** + * + * @author Patrick + */ +@WebListener +public class LogoutListener implements HttpSessionListener{ + final static Logger LOGGER = LogManager.getLogger(LogoutListener.class); + + @Override + public void sessionCreated(HttpSessionEvent event) { + // NOOP. + } + + @Override + public void sessionDestroyed(HttpSessionEvent event) { + LOGGER.info("Session destroyed"); + PersonController userManager = (PersonController) event.getSession().getAttribute("user"); + String username = (String) event.getSession().getAttribute("realUsername"); + if (userManager != null && username != null) { + LOGGER.info("not nulls"); + userManager.getLogins().remove(username); + } + } +} diff --git a/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/ManagedPerson.java b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/ManagedPerson.java new file mode 100644 index 0000000..8cf9081 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/httpauthenticationmechanism/ManagedPerson.java @@ -0,0 +1,45 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import java.util.HashSet; +import java.util.Set; +import javax.inject.Named; +import javax.enterprise.context.ApplicationScoped; + +/** + * + * @author Patrick + */ +@Named(value = "managedPerson") +@ApplicationScoped +public class ManagedPerson { + + private Set logins; + + /** + * Creates a new instance of ManagedCustomer + */ + public ManagedPerson() { + } + + public Set getLogins(){ + if (this.logins == null) { + this.logins = new HashSet<>(); + } + + return this.logins; + } + + public void addLogin(String user){ + getLogins().add(user); + } + + public void removeLogin(String user){ + getLogins().remove(user); + } + +} diff --git a/java/mss-failsafe/mss/src/main/java/model/AbstractEntity.java b/java/mss-failsafe/mss/src/main/java/model/AbstractEntity.java new file mode 100644 index 0000000..c61176a --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/AbstractEntity.java @@ -0,0 +1,89 @@ +package model; + + +import java.io.Serializable; +import java.time.LocalDateTime; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; + +/** + * + * @author Patrick Plate + */ +@MappedSuperclass +public class AbstractEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private LocalDateTime changedDate; + + private LocalDateTime creationDate; + + private boolean outdated; + + public AbstractEntity() { + this.creationDate = LocalDateTime.now(); + this.changedDate = this.creationDate; + this.outdated = false; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + if (object == null) { + return false; + } + if (!(object.getClass() == this.getClass())) { + return false; + } + AbstractEntity other = (AbstractEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + public boolean isOutdated() { + return outdated; + } + + public void setOutdated(boolean outdated) { + this.outdated = outdated; + } + + public LocalDateTime getChangedDate() { + return changedDate; + } + + public void setChangedDate(LocalDateTime changedDate) { + this.changedDate = changedDate; + } + + public void setCreationDate (LocalDateTime creationDate) { + this.creationDate = creationDate; + } + + public LocalDateTime getCreationDate() { + return creationDate; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/adresses/Address.java b/java/mss-failsafe/mss/src/main/java/model/adresses/Address.java new file mode 100644 index 0000000..1e5443c --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/adresses/Address.java @@ -0,0 +1,214 @@ +package model.adresses; + +import java.util.Objects; +import javax.persistence.MappedSuperclass; +import javax.validation.constraints.NotNull; +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@MappedSuperclass +public class Address extends AbstractEntity{ + + //Land + @NotNull(message = "Land darf nicht null sein") + private String country; + + //Straßenname + @NotNull(message = "Strasse darf nicht null sein") + private String street; + + //Hausnummer + @NotNull(message = "Hausnummer darf nicht null sein") + private String number; + + //Zusatz + private String extra; + + //PLZ + @NotNull(message = "PLZ darf nicht null sein") + private Integer postnumber; + + //Bundesland + @NotNull(message = "Bundesland darf nicht null sein") + private String county; + + //Ort + @NotNull(message = "Ort darf nicht null sein") + private String place; + + private String contact; + + private String comment; + + public Address() { + } + + public Address(String street, String number, String extra, Integer postnumber, String county, String place) { + this.street = street; + this.number = number; + this.extra = extra; + this.postnumber = postnumber; + this.county = county; + this.place = place; + } + + public Address(String country, String street, String number, String extra, Integer postnumber, String county, String place) { + this.country = country; + this.street = street; + this.number = number; + this.extra = extra; + this.postnumber = postnumber; + this.county = county; + this.place = place; + } + + public Address(String country, String street, String number, String extra, Integer postnumber, String county, String place, String contact, String comment) { + this.country = country; + this.street = street; + this.number = number; + this.extra = extra; + this.postnumber = postnumber; + this.county = county; + this.place = place; + this.contact = contact; + this.comment = comment; + } + + public Address(Address toCopyAddress){ + this.country = toCopyAddress.getCountry(); + this.street = toCopyAddress.getStreet(); + this.number = toCopyAddress.getNumber(); + this.extra = toCopyAddress.getExtra(); + this.postnumber = toCopyAddress.getPostnumber(); + this.county = toCopyAddress.getCounty(); + this.place = toCopyAddress.getPlace(); + this.contact = toCopyAddress.getContact(); + this.comment = toCopyAddress.getComment(); + } + + @Override + public int hashCode() { + int hash = 7; + hash = 83 * hash + Objects.hashCode(this.country); + hash = 83 * hash + Objects.hashCode(this.street); + hash = 83 * hash + Objects.hashCode(this.number); + hash = 83 * hash + Objects.hashCode(this.extra); + hash = 83 * hash + Objects.hashCode(this.postnumber); + hash = 83 * hash + Objects.hashCode(this.county); + hash = 83 * hash + Objects.hashCode(this.place); + hash = 83 * hash + Objects.hashCode(this.contact); + hash = 83 * hash + Objects.hashCode(this.comment); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Address other = (Address) obj; + if (!Objects.equals(this.country, other.country)) { + return false; + } + if (!Objects.equals(this.street, other.street)) { + return false; + } + if (!Objects.equals(this.number, other.number)) { + return false; + } + if (!Objects.equals(this.extra, other.extra)) { + return false; + } + if (!Objects.equals(this.county, other.county)) { + return false; + } + if (!Objects.equals(this.place, other.place)) { + return false; + } + if (!Objects.equals(this.comment, other.comment)) { + return false; + } + return Objects.equals(this.postnumber, other.postnumber); + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getExtra() { + return extra; + } + + public void setExtra(String extra) { + this.extra = extra; + } + + public Integer getPostnumber() { + return postnumber; + } + + public void setPostnumber(Integer postnumber) { + this.postnumber = postnumber; + } + + public String getCounty() { + return county; + } + + public void setCounty(String county) { + this.county = county; + } + + public String getPlace() { + return place; + } + + public void setPlace(String place) { + this.place = place; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getContact() { + return contact; + } + + public void setContact(String contact) { + this.contact = contact; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/adresses/CompanyBillingAddress.java b/java/mss-failsafe/mss/src/main/java/model/adresses/CompanyBillingAddress.java new file mode 100644 index 0000000..e5829bc --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/adresses/CompanyBillingAddress.java @@ -0,0 +1,52 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.adresses; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import model.company.Company; + +/** + * + * @author Patrick + */ +@Entity +public class CompanyBillingAddress extends Address{ + @ManyToOne + private Company company; + + private boolean delivery; + + public CompanyBillingAddress() { + } + + public CompanyBillingAddress(Company company, boolean delivery) { + this.company = company; + this.delivery = delivery; + } + + public CompanyBillingAddress(Company company, boolean delivery,String country, String street, String number, String extra, Integer postnumber, String county, String place) { + super(country, street, number, extra, postnumber, county, place); + this.company = company; + this.delivery = delivery; + } + + public Company getCompany() { + return company; + } + + public void setCompany(Company company) { + this.company = company; + } + + public boolean isDelivery() { + return delivery; + } + + public void setDelivery(boolean delivery) { + this.delivery = delivery; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/adresses/LocationAddress.java b/java/mss-failsafe/mss/src/main/java/model/adresses/LocationAddress.java new file mode 100644 index 0000000..43a1f95 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/adresses/LocationAddress.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.adresses; + +import javax.persistence.Entity; +import javax.persistence.OneToOne; +import model.company.Location; + +/** + * + * @author patri + */ +@Entity +public class LocationAddress extends Address { + + @OneToOne + private Location location; + + public LocationAddress() { + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/company/Company.java b/java/mss-failsafe/mss/src/main/java/model/company/Company.java new file mode 100644 index 0000000..8c968d3 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/company/Company.java @@ -0,0 +1,162 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.company; + +import java.util.List; +import java.util.Set; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.OneToMany; +import model.AbstractEntity; +import model.adresses.CompanyBillingAddress; +import model.customer.Customer; +import model.ticket.Ticket; + +/** + * + * @author patri + */ +@Entity +public class Company extends AbstractEntity { + + public static final String FIND_BY_NAME = "Company.findByName"; + public static final String FIND_BY_STEUERID = "Company.findBySteuerID"; + public static final String FIND_BY_UMSATZSTEUERID = "Company.findByUmsatzsteuerID"; + public static final String FIND_BY_CUSTOMER = "Company.findByCustomer"; + public static final String FIND_BY_ADDRESS = "Company.findByAddress"; + public static final String FIND_BY_DELIVERYADDRESS = "Company.findByLocation"; + + @Column(unique = true, nullable = false) + private String name; + + @Column(unique = true, nullable = true) + private String steuerNr; + + @Column(unique = true, nullable = true) + private String umsatzSteuerID; + + @Column(unique = true, nullable = true) + private String kundenNr; + + @Column(unique = false, nullable = true) + private String headerInspection; + + @Column(unique = false, nullable = true) + private String headerService; + + @Column(unique = false, nullable = false) + @Enumerated(EnumType.ORDINAL) + private Status status; + + @OneToMany(mappedBy = "company", cascade = CascadeType.ALL) + private Set addresses; + + @OneToMany(mappedBy = "company", cascade = CascadeType.ALL) + private Set locations; + + @OneToMany(mappedBy = "company", cascade = { + CascadeType.MERGE, + CascadeType.REFRESH + }) + private Set customers; + + @OneToMany(mappedBy = "company") + private List tickets; + + public Company() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSteuerNr() { + return steuerNr; + } + + public void setSteuerNr(String steuerNr) { + this.steuerNr = steuerNr; + } + + public String getUmsatzSteuerID() { + return umsatzSteuerID; + } + + public void setUmsatzSteuerID(String umsatzSteuerID) { + this.umsatzSteuerID = umsatzSteuerID; + } + + public String getKundenNr() { + return kundenNr; + } + + public void setKundenNr(String kundenNr) { + this.kundenNr = kundenNr; + } + + public String getHeaderInspection() { + return headerInspection; + } + + public void setHeaderInspection(String headerInspection) { + this.headerInspection = headerInspection; + } + + public String getHeaderService() { + return headerService; + } + + public void setHeaderService(String headerService) { + this.headerService = headerService; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public Set getAddresses() { + return addresses; + } + + public void setAddresses(Set addresses) { + this.addresses = addresses; + } + + public Set getLocations() { + return locations; + } + + public void setLocations(Set locations) { + this.locations = locations; + } + + public Set getCustomers() { + return customers; + } + + public void setCustomers(Set customers) { + this.customers = customers; + } + + public List getTickets() { + return tickets; + } + + public void setTickets(List tickets) { + this.tickets = tickets; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/company/Location.java b/java/mss-failsafe/mss/src/main/java/model/company/Location.java new file mode 100644 index 0000000..256971d --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/company/Location.java @@ -0,0 +1,73 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.company; + +import java.util.Set; +import javax.persistence.Entity; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import model.AbstractEntity; +import model.adresses.LocationAddress; +import model.customer.Customer; +import model.machine.Machine; +/** + * + * @author patri + */ +@Entity +public class Location extends AbstractEntity{ + + @ManyToOne + private Company company; + + @OneToOne + private LocationAddress address; + + @OneToMany(mappedBy = "location") + private Set machines; + + @ManyToMany + private Set contacts; + + public Location() { + } + + public Company getCompany() { + return company; + } + + public void setCompany(Company company) { + this.company = company; + } + + public LocationAddress getAddress() { + return address; + } + + public void setAddress(LocationAddress address) { + this.address = address; + } + + public Set getMachines() { + return machines; + } + + public void setMachines(Set machines) { + this.machines = machines; + } + + public Set getContacts() { + return contacts; + } + + public void setContacts(Set contacts) { + this.contacts = contacts; + } + + +} diff --git a/java/mss-failsafe/mss/src/main/java/model/company/Status.java b/java/mss-failsafe/mss/src/main/java/model/company/Status.java new file mode 100644 index 0000000..5d160cf --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/company/Status.java @@ -0,0 +1,59 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.company; + +import java.util.Locale; + +/** + * + * @author patri + */ +public enum Status { + ACTIVE, + INACTIVE; + + private Status() { + } + + @Override + public String toString() { + switch(this){ + case ACTIVE: + return "aktiv"; + case INACTIVE: + return "inaktiv"; + default: + return ""; + } + } + + public String toLanguageString(Locale locale){ + if (locale == null ||locale.equals(Locale.GERMAN) || locale.equals(Locale.GERMANY)) { + return getGerman(); + } + + if (locale.equals(Locale.ENGLISH)) { + getEnglish(); + } + + return ""; + } + + private String getGerman() { + return toString(); + } + + private String getEnglish(){ + switch(this){ + case ACTIVE: + return "active"; + case INACTIVE: + return "inactive"; + default: + return ""; + } + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/customer/Customer.java b/java/mss-failsafe/mss/src/main/java/model/customer/Customer.java new file mode 100644 index 0000000..d943251 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/customer/Customer.java @@ -0,0 +1,63 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.customer; + +import java.util.Set; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import model.person.Person; +import model.company.Company; +import model.company.Location; + +/** + * + * @author patri + */ +@Entity +public class Customer extends Person{ + + @ManyToOne + private Company company; + + @ManyToMany + private Set locations; + + @Column(nullable = true, length = 210) + private String note; + + public Customer() { + } + + public Customer(Company company) { + this.company = company; + } + + public Company getCompany() { + return company; + } + + public void setCompany(Company company) { + this.company = company; + } + + public Set getLocations() { + return locations; + } + + public void setLocations(Set locations) { + this.locations = locations; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/files/FileDB.java b/java/mss-failsafe/mss/src/main/java/model/files/FileDB.java new file mode 100644 index 0000000..3899d7e --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/files/FileDB.java @@ -0,0 +1,56 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.files; + +import javax.persistence.Column; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Lob; +import javax.persistence.MappedSuperclass; +import model.AbstractEntity; + +/** + * + * @author patri + */ +@MappedSuperclass +public class FileDB extends AbstractEntity{ + @Column(nullable = false, length = 100) + private String name; + + @Enumerated(EnumType.STRING) + private Mime mime; + + @Lob + private byte[] fileData; + + public FileDB() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public byte[] getFileData() { + return fileData; + } + + public void setFileData(byte[] fileData) { + this.fileData = fileData; + } + + public Mime getMime() { + return mime; + } + + public void setMime(Mime mime) { + this.mime = mime; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/files/Invoice.java b/java/mss-failsafe/mss/src/main/java/model/files/Invoice.java new file mode 100644 index 0000000..be4e0b1 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/files/Invoice.java @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.files; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import model.ticket.Ticket; + +/** + * + * @author patri + */ +@Entity +public class Invoice extends FileDB { + @ManyToOne + private Ticket ticket; + + public Invoice() { + } + + public Invoice(Ticket ticket) { + this.ticket = ticket; + } + + public Ticket getTicket() { + return ticket; + } + + public void setTicket(Ticket ticket) { + this.ticket = ticket; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/files/Mime.java b/java/mss-failsafe/mss/src/main/java/model/files/Mime.java new file mode 100644 index 0000000..e7e967a --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/files/Mime.java @@ -0,0 +1,127 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.files; + +/** + * + * @author patri + */ +public enum Mime { + AAC("aac", "AAC audio", "audio/aac"), + ABW("abw", "AbiWord document", "application/x-abiword"), + ARC("arc", "Archive document (multiple files embedded)", "application/x-freearc"), + AVI("avi", "AVI: Audio Video Interleave", "video/x-msvideo"), + AZW("azw", "Amazon Kindle eBook format", "application/vnd.amazon.ebook"), + BIN("bin", "Any kind of binary data", "application/octet-stream"), + BMP("bmp", "Windows OS/2 Bitmap Graphics", "image/bmp"), + BZ("bz", "BZip archive", "application/x-bzip"), + BZ2("bz2", "BZip2 archive", "application/x-bzip2"), + CDA("cda", "CD audio", "application/x-cdf"), + CSH("csh", "C-Shell script", "application/x-csh"), + CSS("css", "Cascading Style Sheets (CSS)", "text/css"), + CSV("csv", "Comma-separated values (CSV", "text/csv"), + DOC("doc", "Microsoft Word", "application/msword"), + DOCX("docx", "Microsoft Word (OpenXML)", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"), + EOT("eot", "MS Embedded OpenType fonts", "application/vnd.ms-fontobject"), + EPUB("epub", "Electronic publication (EPUB)", "application/epub+zip"), + GZ("gz", "GZip Compressed Archive", "application/gzip"), + GIF("gif", "Graphics Interchange Format (GIF)", "image/gif"), + HTM("htm", "HyperText Markup Language (HTML)", "text/html"), + HTML("html", "HyperText Markup Language (HTML)", "text/html"), + ICO("ico", "Icon format", "image/vnd.microsoft.icon"), + ICS("ics", "iCalendar format", "text/calendar"), + JAR("jar", "Java Archive (JAR)", "application/java-archive"), + JPG("jpg", "JPEG images", "image/jpeg"), + JPEG("jpeg", "JPEG images", "image/jpeg"), + JS("js", "JavaScript", "text/javascript"), + JSON("json", "JSON format", "application/json"), + JSONLD("jsonld", "JSON-LD format", "application/ld+json"), + MID("mid", "Musical Instrument Digital Interface (MIDI)", "audio/midi"), + MIDI("midi", "Musical Instrument Digital Interface (MIDI)", "audio/midi"), + MJS("mjs", "JavaScript module", "text/javascript"), + MP3("mp3", "MP3 audio", "audio/mpeg"), + MP4("mp4", "MP4 video", "video/mp4"), + MPEG("mpeg", "MPEG Video", "video/mpeg"), + MPKG("mpkg", "Apple Installer Package", "application/vnd.apple.installer+xml"), + ODP("odp", "OpenDocument presentation document", "application/vnd.oasis.opendocument.presentation"), + ODS("ods", "OpenDocument spreadsheet document", "application/vnd.oasis.opendocument.spreadsheet"), + ODT("odt", "OpenDocument text document", "application/vnd.oasis.opendocument.text"), + OGA("oga", "OGG audio", "audio/ogg"), + OGV("ogv", "OGG video", "video/ogg"), + OGX("ogx", "OGG", "application/ogg"), + OPUUS("opus", "Opus audio", "audio/opus"), + OTF("otf", "OpenType font", "font/otf"), + PNG("png", "Portable Network Graphics", "image/png"), + PDF("pdf", "Adobe Portable Document Format (PDF)", "application/pdf"), + PHP("php", "Hypertext Preprocessor (Personal Home Page)", "application/x-httpd-php"), + PPT("ppt", "Microsoft PowerPoint", "application/vnd.ms-powerpoint"), + PPTX("pptx", "Microsoft PowerPoint (OpenXML)", "application/vnd.openxmlformats-officedocument.presentationml.presentation"), + RAR("rar", "RAR archive", "application/vnd.rar"), + RTF("rtf", "Rich Text Format (RTF)", "application/rtf"), + SH("sh", "Bourne shell script", "application/x-sh"), + SVG("svg", "Scalable Vector Graphics (SVG)", "image/svg+xml"), + SWF("swf", "Small web format (SWF) or Adobe Flash document", "application/x-shockwave-flash"), + TAR("tar", "Tape Archive (TAR)", "application/x-tar"), + TIF("tif", "Tagged Image File Format (TIFF)", "image/tiff"), + TIFF("tiff", "Tagged Image File Format (TIFF)", "image/tiff"), + TS("ts", "MPEG transport stream", "video/mp2t"), + TTF("ttf", "TrueType Font", "font/ttf"), + TXT("txt", "Text, (generally ASCII or ISO 8859-n)", "text/plain"), + VSD("vsd", "Microsoft Visio", "application/vnd.visio"), + WAV("wav", "Waveform Audio Format", "audio/wav"), + WEBA("weba", "WEBM audio", "audio/webm"), + WEBM("webm", "WEBM video", "video/webm"), + WEBP("webp", "WEBP image", "image/webp"), + WOFF("woff", "Web Open Font Format (WOFF)", "font/woff"), + WOFF2("woff2", "Web Open Font Format (WOFF)", "font/woff2"), + XHTML("xhtml", "XHTML", "application/xhtml+xml"), + XLS("xls", "Microsoft Excel", "application/vnd.ms-excel"), + XLSX("xlsx", "Microsoft Excel (OpenXML)", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"), + XML("xml", "XML", "application/xml"), + XUL("xul", "XUL", "application/vnd.mozilla.xul+xml"), + ZIP("zip", "ZIP archive", "application/zip"), + GP3V("3gp", "3GPP audio/video container", "video/3gpp"), + GP3A("3gp", "3GPP audio/video container", "audio/3gpp"), + G23V("3g2", "3GPP2 audio/video container", "video/3gpp2"), + G23A("3g2", "3GPP2 audio/video container", "audio/3gpp2"), + Z7("7z", "7-zip archive", "application/x-7z-compressed"); + + private final String extension; + private final String kindOfDocument; + private final String mimeType; + + private Mime(String extension, String kindOfDocument, String mimeType) { + this.extension = extension; + this.kindOfDocument = kindOfDocument; + this.mimeType = mimeType; + } + + public static Mime getByMimeType(String mimetype){ + if (mimetype == null || mimetype.isEmpty()) { + return null; + } + + for (Mime value : Mime.values()) { + if (mimetype.equals(value.getMimeType())) { + return value; + } + } + + return null; + } + + public String getExtension() { + return extension; + } + + public String getKindOfDocument() { + return kindOfDocument; + } + + public String getMimeType() { + return mimeType; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/files/Report.java b/java/mss-failsafe/mss/src/main/java/model/files/Report.java new file mode 100644 index 0000000..ad1e58a --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/files/Report.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.files; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import model.ticket.Ticket; + +/** + * + * @author patri + */ +@Entity +public class Report extends FileDB{ + + @ManyToOne + private Ticket ticket; + + public Report() { + } + + public Ticket getTicket() { + return ticket; + } + + public void setTicket(Ticket ticket) { + this.ticket = ticket; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/files/UserPicture.java b/java/mss-failsafe/mss/src/main/java/model/files/UserPicture.java new file mode 100644 index 0000000..8e5c70e --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/files/UserPicture.java @@ -0,0 +1,70 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.files; + +import java.util.Arrays; +import java.util.List; +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.OneToOne; +import model.person.Person; + +/** + * + * @author patri + */ +@Entity +public class UserPicture extends FileDB{ + private static List allowedFileTypes = Arrays.asList(Mime.JPEG, Mime.JPG, Mime.PNG, Mime.BMP, Mime.PNG); + private static long sizeLimit = 2000000L; + + @OneToOne(optional = false, cascade = {CascadeType.MERGE, CascadeType.REFRESH}) + private Person person; + + public UserPicture() { + } + + public static String getAllowedTypesRE(){ + StringBuilder output = new StringBuilder(allowedFileTypes.size() * 4); + + output.append("/(\\.|\\/)("); + + for(int i = 0; i < allowedFileTypes.size(); i++){ + output.append(allowedFileTypes.get(i).getExtension()); + if (i < allowedFileTypes.size() -1) { + output.append('|'); + } + } + + output.append(")$/"); + + return output.toString(); + } + + public static List getAllowedFileTypes() { + return allowedFileTypes; + } + + public static void setAllowedFileTypes(List allowedFileTypes) { + UserPicture.allowedFileTypes = allowedFileTypes; + } + + public static long getSizeLimit() { + return sizeLimit; + } + + public static void setSizeLimit(long sizeLimit) { + UserPicture.sizeLimit = sizeLimit; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/machine/Machine.java b/java/mss-failsafe/mss/src/main/java/model/machine/Machine.java new file mode 100644 index 0000000..efc9561 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/machine/Machine.java @@ -0,0 +1,33 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.machine; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import model.AbstractEntity; +import model.company.Location; + +/** + * + * @author patri + */ +@Entity +public class Machine extends AbstractEntity { + + @ManyToOne + private Location location; + + public Machine() { + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/person/Password.java b/java/mss-failsafe/mss/src/main/java/model/person/Password.java new file mode 100644 index 0000000..d784e91 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/person/Password.java @@ -0,0 +1,86 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person; + +import java.util.Arrays; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToOne; + +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@Entity +@NamedQueries({ + @NamedQuery(name = "Password.findByPassword", + query = "SELECT p FROM Password p WHERE p.password = :password"), + @NamedQuery(name = "Password.findByCostumerID", + query = "SELECT p FROM Password p WHERE p.person = :person") +}) +public class Password extends AbstractEntity { + private static final long serialVersionUID = -1924150926160449302L; + + @OneToOne + private Person person; + + @Column(name="password") + private byte[] password; + + public Password() { + } + + public Password (Person person, byte[] password) { + this.person = person; + this.password = password; + } + + public Person getPerson() { + return person; + } + + public byte[] getPassword() { + return password; + } + + public void setPassowrd(byte[] password){ + this.password = password; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 79 * hash + Objects.hashCode(this.person); + hash = 79 * hash + Arrays.hashCode(this.password); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Password other = (Password) obj; + if (!Objects.equals(this.person, other.person)) { + return false; + } + if (!Arrays.equals(this.password, other.password)) { + return false; + } + return true; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/person/Person.java b/java/mss-failsafe/mss/src/main/java/model/person/Person.java new file mode 100644 index 0000000..f0f380c --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/person/Person.java @@ -0,0 +1,227 @@ +package model.person; + +import model.person.enums.Call; +import java.io.Serializable; +import java.util.AbstractSet; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.persistence.*; + +import model.AbstractEntity; +import model.files.UserPicture; +import model.person.enums.UserGroup; + +/** + * Entity implementation class for Entity: User + * + */ +@Entity +@Inheritance(strategy = InheritanceType.JOINED) +@NamedQueries({ + @NamedQuery(name = Person.FIND_BY_EMAIL, + query = "SELECT p FROM Person p WHERE p.email = :email"), + @NamedQuery(name = Person.FIND_BY_ID, + query = "SELECT p FROM Person p WHERE p.id = :id"), + @NamedQuery(name = Person.FIND_BY_TOKEN, + query = "SELECT p FROM Person p inner join p.tokens t where t.tokenHash = :tokenHash and t.tokenType = :tokenType and t.expiration > :timestamp") +}) +public class Person extends AbstractEntity implements Serializable { + + public static final String FIND_BY_EMAIL = "Person.findByEmail"; + public static final String FIND_BY_ID = "Person.findByID"; + public static final String FIND_BY_TOKEN = "Person.findByToken"; + + private static final long serialVersionUID = 1L; + + @Column(name = "Email", unique = true, nullable = false) + private String email; + + @OneToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "Password_ID", nullable = false, unique = true) + private Password password; + + @OneToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "Salt_ID", nullable = false, unique = true) + private Salt salt; + + @Enumerated(EnumType.STRING) + @Column(name = "Anrede") + private Call call; + + @OneToMany(mappedBy = "person", orphanRemoval = true, cascade = CascadeType.ALL) + private List tokens; + + @ElementCollection(targetClass = UserGroup.class) + @Enumerated(EnumType.STRING) + @JoinTable(name = "UserGroups", joinColumns = @JoinColumn(name = "UserID")) + @Column(name = "UserGroups", nullable = false) + private Set userGroups; + + @Column(nullable = true) + private String telefon; + + @Column(nullable = true) + private String mobile; + + @Column(nullable = true) + private String fax; + + @Column(nullable = false) + private String firstname; + + @Column(nullable = true) + private String lastname; + + @Column(nullable = true) + private String title; + + @Column(nullable = true) + private boolean active; + + @OneToOne(optional = true, cascade = CascadeType.ALL) + private UserPicture userPicture; + + public Person() { + super(); + active = false; + } + + public Person(String email, byte[] password, Salt salt, Set usergroups) { + this.email = email; + this.tokens = new ArrayList<>(); + this.salt = salt; + this.password = new Password(this, password); + this.userGroups = usergroups; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Password getPassword() { + return password; + } + + public void setPassword(Password password) { + this.password = password; + } + + public Salt getSalt() { + return salt; + } + + public void setSalt(Salt salt) { + this.salt = salt; + } + + public Call getCall() { + return call; + } + + public void setCall(Call call) { + this.call = call; + } + + public String getTelefon() { + return telefon; + } + + public void setTelefon(String telefon) { + this.telefon = telefon; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getFax() { + return fax; + } + + public void setFax(String fax) { + this.fax = fax; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getTokens() { + return tokens; + } + + public void setTokens(List tokens) { + this.tokens = tokens; + } + + public void addToken(Token token) { + if (this.tokens == null) { + tokens = new ArrayList<>(); + } + + tokens.add(token); + } + + public Set getUserGroups() { + return userGroups; + } + + public void setUserGroups(Set userGroups) { + this.userGroups = userGroups; + } + + public void addGroup(UserGroup userGroup){ + if (this.userGroups == null) { + this.userGroups = new HashSet<>(); + } + + this.userGroups.add(userGroup); + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + + public UserPicture getUserPicture() { + return userPicture; + } + + public void setUserPicture(UserPicture userPicture) { + this.userPicture = userPicture; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/person/Salt.java b/java/mss-failsafe/mss/src/main/java/model/person/Salt.java new file mode 100644 index 0000000..1a99251 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/person/Salt.java @@ -0,0 +1,79 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person; + +//import java.nio.charset.Charset; +import java.security.SecureRandom; +import java.util.Arrays; +import javax.persistence.Entity; + +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@Entity +public class Salt extends AbstractEntity { + + //private final Charset UTF8_CHARSET = Charset.forName("UTF-8"); + private static final long serialVersionUID = -1068077226987746862L; + private byte[] salt; + private int interations; + + public Salt() { + interations = 3072; + generateSalt(); + } + + private void generateSalt() { + SecureRandom random = new SecureRandom(); + byte bytes[] = new byte[64]; + random.nextBytes(bytes); + salt = bytes; + } + + public java.lang.String bytetoString(byte[] input) { + return Arrays.toString(input); + } + + public byte[] getSalt() { + return salt; + } + + public int getInterations() { + return interations; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 79 * hash + Arrays.hashCode(this.salt); + hash = 79 * hash + this.interations; + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Salt other = (Salt) obj; + if (this.interations != other.interations) { + return false; + } + if (!Arrays.equals(this.salt, other.salt)) { + return false; + } + return true; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/person/Token.java b/java/mss-failsafe/mss/src/main/java/model/person/Token.java new file mode 100644 index 0000000..3419726 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/person/Token.java @@ -0,0 +1,165 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person; + +import model.person.enums.TokenType; +import static java.time.temporal.ChronoUnit.MONTHS; +import java.time.Instant; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.PrePersist; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; +import model.AbstractEntity; +import model.ticket.Ticket; + +/** + * + * @author Patrick + */ +@Entity +@Table(name = "token", uniqueConstraints = { + @UniqueConstraint(columnNames = {"token_hash"}) +}) +@NamedQueries({ + @NamedQuery(name = Token.REMOVE_TOKEN, query = "DELETE FROM Token t where t.tokenHash = :tokenHash"), + @NamedQuery(name = Token.REMOVE_EXPIRED_TOKEN, query = "DELETE FROM Token t where t.expiration < :timestamp") +}) +public class Token extends AbstractEntity { + + private static final long serialVersionUID = -6632692800064453512L; + public static final String REMOVE_TOKEN = "Token.removeToken"; + public static final String REMOVE_EXPIRED_TOKEN = "Token.removeExpiredToken"; + + @Column(name = "token_hash") + private String tokenHash; + + @Column(name = "token_type") + @Enumerated(EnumType.STRING) + private TokenType tokenType; + + @Column(name = "ip_address", length = 45) + private String ipAddress; + + private String description; + + private Instant created; + + private Instant expiration; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "account_id") + private Person person; + + @ManyToOne + private Ticket ticket; + + public Token() { + } + + @PrePersist + public void generateInformation() { + this.created = Instant.now(); + if (this.expiration == null) { + this.expiration = this.created.plus(1, MONTHS); + } + } + + public String getTokenHash() { + return tokenHash; + } + + public void setTokenHash(String tokenHash) { + this.tokenHash = tokenHash; + } + + public TokenType getTokenType() { + return tokenType; + } + + public void setTokenType(TokenType tokenType) { + this.tokenType = tokenType; + } + + public String getIpAddress() { + return ipAddress; + } + + public void setIpAddress(String ipAddress) { + this.ipAddress = ipAddress; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Instant getCreated() { + return created; + } + + public void setCreated(Instant created) { + this.created = created; + } + + public Instant getExpiration() { + return expiration; + } + + public void setExpiration(Instant expiration) { + this.expiration = expiration; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } + + /* don't depend on natural identifier for equality checks, see: https://vladmihalcea.com/2017/03/29/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/#more-7143 */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + Token token = (Token) obj; + return Objects.equals(getId(), token.getId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId()); + } + + @Override + public String toString() { + return "Token{ id " + getId() + '}'; + } + + public Ticket getTicket() { + return ticket; + } + + public void setTicket(Ticket ticket) { + this.ticket = ticket; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/person/enums/Call.java b/java/mss-failsafe/mss/src/main/java/model/person/enums/Call.java new file mode 100644 index 0000000..b190dbc --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/person/enums/Call.java @@ -0,0 +1,56 @@ +package model.person.enums; + +import java.util.Locale; + +public enum Call { + HERR(0), FRAU(1), DIVERS(2), UNBESTIMMT(3); + + private final int type; + private Locale locale = null; + + private Call(int type) { + this.type = type; + } + + public Locale getLocale() { + return locale; + } + + public void setLocale(Locale locale) { + this.locale = locale; + } + + public int getType() { + return type; + } + + @Override + public String toString() { + if (locale == null || Locale.GERMAN.equals(locale)) { + switch (this) { + case HERR: + return "Herr"; + case FRAU: + return "Frau"; + case DIVERS: + return "Divers"; + case UNBESTIMMT: + return "Unbestimmt"; + } + } + + if (locale.equals(Locale.ENGLISH)) { + switch (this) { + case HERR: + return "Mr"; + case FRAU: + return "Mrs"; + case DIVERS: + return "divers"; + case UNBESTIMMT: + return "unknown"; + } + } + return super.toString(); + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/person/enums/TokenType.java b/java/mss-failsafe/mss/src/main/java/model/person/enums/TokenType.java new file mode 100644 index 0000000..e592454 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/person/enums/TokenType.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person.enums; + +/** + * + * @author Patrick + */ +public enum TokenType { + REMEMBER_ME, + API, + RESET_PASSWORD, + FILE +} diff --git a/java/mss-failsafe/mss/src/main/java/model/person/enums/UserGroup.java b/java/mss-failsafe/mss/src/main/java/model/person/enums/UserGroup.java new file mode 100644 index 0000000..6aba03b --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/person/enums/UserGroup.java @@ -0,0 +1,16 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person.enums; + +/** + * + * @author patri + */ +public enum UserGroup { + USER, + ADMIN, + CUSTOMER; +} diff --git a/java/mss-failsafe/mss/src/main/java/model/ticket/Comment.java b/java/mss-failsafe/mss/src/main/java/model/ticket/Comment.java new file mode 100644 index 0000000..9b13e4a --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/ticket/Comment.java @@ -0,0 +1,131 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +import java.time.LocalDateTime; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import model.AbstractEntity; +import model.person.Person; + +/** + * + * @author Patrick + */ +@Entity +public class Comment extends AbstractEntity implements Comparable { + + @Column(columnDefinition = "longblob") + private String message; + + @ManyToOne + private Person writer; + + private boolean edited; + + @ManyToOne + private Ticket ticket; + + public Comment() { + } + + public Comment(Person writer, String message) { + this.writer = writer; + this.edited = false; + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + edited = true; + } + + public LocalDateTime getLastEditedDate() { + return getChangedDate(); + } + + public boolean isEdited() { + return edited; + } + + public void setEdited(boolean edited) { + this.edited = edited; + setChangedDate(LocalDateTime.now()); + } + + public Ticket getTicket() { + return ticket; + } + + public void setTicket(Ticket ticket) { + this.ticket = ticket; + setChangedDate(LocalDateTime.now()); + } + + public Person getWriter() { + return writer; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 79 * hash + Objects.hashCode(this.message); + hash = 79 * hash + Objects.hashCode(this.writer); + hash = 79 * hash + Objects.hashCode(getCreationDate()); + hash = 79 * hash + Objects.hashCode(getChangedDate()); + hash = 79 * hash + (this.edited ? 1 : 0); + hash = 79 * hash + Objects.hashCode(this.ticket); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Comment other = (Comment) obj; + if (this.edited != other.edited) { + return false; + } + if (!Objects.equals(this.message, other.message)) { + return false; + } + if (!Objects.equals(this.writer, other.writer)) { + return false; + } + if (!Objects.equals(getCreationDate(), other.getCreationDate())) { + return false; + } + if (!Objects.equals(this.ticket, other.ticket)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "Comment{" + "writer=" + writer.getEmail() + ", creationDate=" + getCreationDate() + ", id=" + getId() + ", message="+ message + '}'; + } + + @Override + public int compareTo(Comment c) { + return c.getCreationDate().compareTo(this.getCreationDate()); + } + + +} diff --git a/java/mss-failsafe/mss/src/main/java/model/ticket/FilenameGeneration.java b/java/mss-failsafe/mss/src/main/java/model/ticket/FilenameGeneration.java new file mode 100644 index 0000000..33c7b38 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/ticket/FilenameGeneration.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +/** + * + * @author patri + */ +public enum FilenameGeneration { + INSPEKTIONNR, + MASCHINEDESCRIPTION, + LOCATION; + + @Override + public String toString() { + switch(this){ + case INSPEKTIONNR: + return "inspektionnr"; + case MASCHINEDESCRIPTION: + return "maschinedescription"; + case LOCATION: + return "location"; + } + + return "nothing"; + } + + +} diff --git a/java/mss-failsafe/mss/src/main/java/model/ticket/LocationMachine.java b/java/mss-failsafe/mss/src/main/java/model/ticket/LocationMachine.java new file mode 100644 index 0000000..df43b8e --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/ticket/LocationMachine.java @@ -0,0 +1,46 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import model.AbstractEntity; +import javax.persistence.OneToOne; +import model.machine.Machine; + +/** + * + * @author patri + */ +@Entity +public class LocationMachine extends AbstractEntity{ + @OneToOne + private Machine machine; + + @ManyToOne + private TicketLocation ticketLocation; + + public LocationMachine() { + } + + public Machine getMachine() { + return machine; + } + + public void setMachine(Machine machine) { + this.machine = machine; + } + + public TicketLocation getTicketLocation() { + return ticketLocation; + } + + public void setTicketLocation(TicketLocation ticketLocation) { + this.ticketLocation = ticketLocation; + } + + +} diff --git a/java/mss-failsafe/mss/src/main/java/model/ticket/Status.java b/java/mss-failsafe/mss/src/main/java/model/ticket/Status.java new file mode 100644 index 0000000..5c6d316 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/ticket/Status.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +/** + * + * @author patri + */ +public enum Status { + NEW("Neu"), + PENDING("Zu bestätigen"), + HOLD("Angehalten"), + ACTIVE("Aktiv"), + SHIPPING("Liefern"), + PAYMENTPENDING("Zahlung austehend"), + CLOSED("Geschlossen"), + REOPENED("Wiedergeöffnet"); + + private final String name; + + private Status(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/java/mss-failsafe/mss/src/main/java/model/ticket/Ticket.java b/java/mss-failsafe/mss/src/main/java/model/ticket/Ticket.java new file mode 100644 index 0000000..ee12128 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/ticket/Ticket.java @@ -0,0 +1,189 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +import java.time.LocalDateTime; +import java.util.List; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import model.AbstractEntity; +import model.adresses.CompanyBillingAddress; +import model.company.Company; +import model.files.Invoice; +import model.files.Report; +import model.person.Person; +import model.person.Token; + +/** + * + * @author patri + */ +@Entity +public class Ticket extends AbstractEntity{ + + @ManyToOne(optional = false) + private Company company; + + @OneToOne + private CompanyBillingAddress billingAddress; + + @Column(nullable = false) + @Enumerated(EnumType.STRING) + private Status status; + + @OneToOne(optional = false) + private Person creator; + + @OneToOne(optional = true) + private Person owner; + + private LocalDateTime startDate; + + private LocalDateTime endDate; + + @OneToMany(mappedBy = "ticket", cascade = CascadeType.ALL) + private List comments; + + private boolean payed; + + @OneToMany(mappedBy = "ticket", orphanRemoval = true, cascade = CascadeType.ALL) + private List tokens; + + @OneToMany(mappedBy = "ticket", cascade = {CascadeType.PERSIST, CascadeType.PERSIST}) + private List reports; + + @OneToMany(mappedBy = "ticket", cascade = {CascadeType.PERSIST, CascadeType.PERSIST}) + private List invoices; + + @OneToMany(mappedBy = "ticket", cascade = {CascadeType.PERSIST, CascadeType.PERSIST}) + private List locations; + + @Column(nullable = false, length = 200) + private String filenameGeneration; + + public Ticket() { + } + + public CompanyBillingAddress getBillingAddress() { + return billingAddress; + } + + public void setBillingAddress(CompanyBillingAddress billingAddress) { + this.billingAddress = billingAddress; + } + + public LocalDateTime getStartDate() { + return startDate; + } + + public void setStartDate(LocalDateTime startDate) { + this.startDate = startDate; + } + + public LocalDateTime getEndDate() { + return endDate; + } + + public void setEndDate(LocalDateTime endDate) { + this.endDate = endDate; + } + + public Company getCompany() { + return company; + } + + public void setCompany(Company company) { + this.company = company; + } + + public List getLocations() { + return locations; + } + + public void setLocations(List locations) { + this.locations = locations; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public Person getCreator() { + return creator; + } + + public void setCreator(Person creator) { + this.creator = creator; + } + + public Person getOwner() { + return owner; + } + + public void setOwner(Person owner) { + this.owner = owner; + } + + public List getComments() { + return comments; + } + + public void setComments(List comments) { + this.comments = comments; + } + + public boolean isPayed() { + return payed; + } + + public void setPayed(boolean payed) { + this.payed = payed; + } + + public List getTokens() { + return tokens; + } + + public void setTokens(List tokens) { + this.tokens = tokens; + } + + public List getReports() { + return reports; + } + + public void setReports(List reports) { + this.reports = reports; + } + + public List getInvoices() { + return invoices; + } + + public void setInvoices(List invoices) { + this.invoices = invoices; + } + + public String getFilenameGeneration() { + return filenameGeneration; + } + + public void setFilenameGeneration(String filenameGeneration) { + this.filenameGeneration = filenameGeneration; + } + + +} diff --git a/java/mss-failsafe/mss/src/main/java/model/ticket/TicketLocation.java b/java/mss-failsafe/mss/src/main/java/model/ticket/TicketLocation.java new file mode 100644 index 0000000..e612223 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/java/model/ticket/TicketLocation.java @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import javax.persistence.OneToOne; +import model.AbstractEntity; +import model.company.Location; +import java.util.List; +import javax.persistence.OneToMany; + +/** + * + * @author patri + */ +@Entity +public class TicketLocation extends AbstractEntity{ + @ManyToOne + private Ticket ticket; + + @OneToOne + private Location location; + + @OneToMany(mappedBy = "ticketLocation") + private List machines; + + + public TicketLocation() { + } + + public Ticket getTicket() { + return ticket; + } + + public void setTicket(Ticket ticket) { + this.ticket = ticket; + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public List getMachines() { + return machines; + } + + public void setMachines(List machines) { + this.machines = machines; + } +} diff --git a/java/mss-failsafe/mss/src/main/resources/META-INF/persistence.xml b/java/mss-failsafe/mss/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..47726fc --- /dev/null +++ b/java/mss-failsafe/mss/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,11 @@ + + + + + java:/mss-failsave + false + + + + + diff --git a/java/mss-failsafe/mss/src/main/webapp/WEB-INF/beans.xml b/java/mss-failsafe/mss/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000..93000aa --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/WEB-INF/beans.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/java/mss-failsafe/mss/src/main/webapp/WEB-INF/jboss-app.xml b/java/mss-failsafe/mss/src/main/webapp/WEB-INF/jboss-app.xml new file mode 100644 index 0000000..a3ea92f --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/WEB-INF/jboss-app.xml @@ -0,0 +1,6 @@ + + mss-failsafe + diff --git a/java/mss-failsafe/mss/src/main/webapp/WEB-INF/jboss-web.xml b/java/mss-failsafe/mss/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..ebbcf56 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /mss + jaspitest + \ No newline at end of file diff --git a/java/mss-failsafe/mss/src/main/webapp/WEB-INF/web.xml b/java/mss-failsafe/mss/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..363b1e8 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,95 @@ + + + + /index.xhtml + + + + 401 + /error.xhtml + + + + 403 + /error.xhtml + + + + authorise + /user/* + GET + POST + TRACE + HEAD + DELETE + CONNECT + OPTIONS + PUT + + + ADMIN + USER + + + + + + authorise + /admin/* + GET + POST + TRACE + HEAD + DELETE + CONNECT + OPTIONS + PUT + + + ADMIN + + + + + Normal User which got invited + USER + + + Admin user who can change entries, invite new domains and more.. + ADMIN + + + javax.faces.PROJECT_STAGE + Development + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + *.xhtml + + + + 30 + + + true + + + COOKIE + + + + + primefaces.THEME + saga + + diff --git a/java/mss-failsafe/mss/src/main/webapp/admin/welcome.xhtml b/java/mss-failsafe/mss/src/main/webapp/admin/welcome.xhtml new file mode 100644 index 0000000..c4393e2 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/admin/welcome.xhtml @@ -0,0 +1,14 @@ + + + + Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname} + + + +

Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname}

+ +
+ \ No newline at end of file diff --git a/java/mss-failsafe/mss/src/main/webapp/error.xhtml b/java/mss-failsafe/mss/src/main/webapp/error.xhtml new file mode 100644 index 0000000..0e553ba --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/error.xhtml @@ -0,0 +1,13 @@ + + + Error Testpage + + + +

Error!

+ +
+ diff --git a/java/mss-failsafe/mss/src/main/webapp/index.xhtml b/java/mss-failsafe/mss/src/main/webapp/index.xhtml new file mode 100644 index 0000000..061d8d2 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/index.xhtml @@ -0,0 +1,35 @@ + + + Login Testpage + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/mss-failsafe/mss/src/main/webapp/resources/css/default.css b/java/mss-failsafe/mss/src/main/webapp/resources/css/default.css new file mode 100644 index 0000000..c9ee291 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/resources/css/default.css @@ -0,0 +1,301 @@ +.centeredMenuBar.ui-menubar { + text-align: center; + width: 1300px; +} + +.ui-selectonemenu{ + width: 250px !important; +} + +.contentPanel{ + background-color: white; +} + +.avatar:hover{ + cursor: pointer; +} + +.bodyPanel{ + background-color: lightgray; +} + +.ui-tooltip { + width: 500px; +} + +.ui-tooltip-arrow{ + border-right-color: #002A2A !important; +} + +.ui-tooltip-text { + color: #FBFEF9 !important; + background-color: #002A2A !important; + border: 2px solid #002A2A !important; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +.alignTop { + vertical-align: top; +} + +.oldPaper{ + background-color: #F7C9AF !important; + background-image: none !important; + color: #000000 !important; +} + +.infoPicture{ + width: 15px; + height: 15px; + float: left; +} + +.infoPicture:hover{ + cursor: help; +} + +.squareSpan{ + width: 30px; + height: 30px; + display: inline-block; +} + +.kanban { + font-size: 1em; + border: none; + text-align: left; +} + +.kanbanPanel { + font-size: 0.8em; + text-align: left; +} + +.centeredMenuBar .ui-menu-list { + display: inline-block; +} + +.stickyMenubar{ + text-align: center; + width: 100%; + border: none; + z-index: 9000 +} + +.ui-sticky { + width: 100%; + margin: 0 auto; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} +@media (max-width: 960px) { + .ui-sticky { + top: 0px !important; + margin: 0 auto; + } +} + +.panel { + text-align: center; + border: none; + max-width: 1300px; + margin: 0 auto; +} + +.panelManager{ + text-align: center; + border: none; + min-width: 1500px; + max-width: 90%; + margin: 0 auto; +} + +.ui-noborder{ + padding: 0px 0px +} + +.ui-panelgrid td { + padding: 0px 0px ; +} + +.self-panelGrid>tbody>tr>td { + vertical-align: top; +} + +.tile:hover { + border-color: #009999; + border-style: solid; + cursor: pointer; + color: #009999; +} + +.tile:active{ + box-shadow: 0px 0px 0px silver inset; +} + +.tile{ + border: 2px solid silver; + border-radius: 10px; + box-shadow: 10px 10px 15px silver; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + transition: opacity 2s ease, border-color 1s ease, color 1s ease; +} + +.tileCreator { + width: 200px; +} + +.panelCreator{ + border: 2px solid silver; + border-radius: 10px; + box-shadow: 10px 10px 15px silver; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + float: top; + width: 100%; +} + +.tileCreatorPro{ + border: 1px solid #009999; + border-radius: 10px; + box-shadow: 10px 10px 15px silver; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +.priceLabel{ + border-style: solid; + border-bottom: 2px; + float: right; +} + +.picture { + border-radius: 10px; + padding: 0px 0px 0px 0px; + margin: 0px 0px 0px 0px; +} + +.picture:hover { + cursor: pointer; +} + +.creatorPicture{ + width: 150px; + height: 150px; + border-radius: 50%; +} + +.productsElement{ + width: 270px; + height: 350px; + border: 1px solid silver; + border-radius: 5px; + box-shadow: 5px 5px 10px silver; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + transition: opacity 2s ease, border-color 1s ease, color 1s ease; + margin: 5px 5px 5px 5px; +} + +.productsElement:hover { + border-color: #009999; + border-style: solid; + cursor: pointer; + color: #009999; +} + +.productsPicture{ + width: 248px; + height: 248px; + border-radius: 50%; +} + +.productsText{ + position: relative; + top: -20px; + text-align: center; + font-size: 2em; + font-weight: bold; +} + +.productsText:hover{ + cursor: pointer; +} + +.productsInfo{ + width: 99px; + height: 29px; + background-color: #009999; + color: #FBFEF9; + text-align: right; + vertical-align: central; + font-size: 1.5em; + font-weight: bold; + display: block; + border-radius: 2px; + position: relative; + top: -225px; + left: -10px; + padding-right: 8px; + padding: auto; + border: 1px solid transparent; +} + +.productsInfo:hover{ + cursor: help; + box-shadow: 5px 5px 10px #241623; + border: 1px solid #008C8C; +} + +.productInfo { + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + border-style: solid; + border-color: silver; + border-left: 2px; + border-bottom: 0px; + border-right: 0px; + border-top: 0px; + height: 100%; + width: 350px; + float: right; + float: top; + text-align: left; + padding: 0px 0px 0px 0px; + margin: 0px 0px 0px 0px; + margin-top: 0px; + box-shadow: 10px 10px 15px silver; +} + +.ui-breadcrumb { + background: none !important; + border: none !important; + text-decoration: none; +} + +a { + text-decoration: none; + outline: none; +} + +.htmldot { + height:20px; + width: 20px; + border-radius: 50%; + display: inline-block; +} + +.htmlsquare { + height:25px; + width: 25px; + display: inline-block; +} + +.testGradient { + background: linear-gradient(-90deg, #ff00ff, white 60%) !important; +} \ No newline at end of file diff --git a/java/mss-failsafe/mss/src/main/webapp/resources/css/icons.css b/java/mss-failsafe/mss/src/main/webapp/resources/css/icons.css new file mode 100644 index 0000000..102c29b --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/resources/css/icons.css @@ -0,0 +1,30 @@ +/* +To change this license header, choose License Headers in Project Properties. +To change this template file, choose Tools | Templates +and open the template in the editor. +*/ +/* + Created on : 16.10.2021, 22:59:07 + Author : patri +*/ + +.icon{ + width: 16px; + height: 16px; +} + +.icon.company{ + background-image: url('../resources/images/icons/company_icon.png') !important; +} + +.icon.machine{ + background-image: url('../resources/images/icons/machine_icon.png') !important; +} + +.icon.location{ + background-image: url('../resources/images/icons/location_icon.png') !important; +} + +.icon.security{ + background-image: url('../resources/images/icons/security_icon.png') !important; +} \ No newline at end of file diff --git a/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/company_icon.png b/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/company_icon.png new file mode 100644 index 0000000..5be763c Binary files /dev/null and b/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/company_icon.png differ diff --git a/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/location_icon.png b/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/location_icon.png new file mode 100644 index 0000000..ef8cbef Binary files /dev/null and b/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/location_icon.png differ diff --git a/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/machine_icon.png b/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/machine_icon.png new file mode 100644 index 0000000..fa370e6 Binary files /dev/null and b/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/machine_icon.png differ diff --git a/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/security_icon.png b/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/security_icon.png new file mode 100644 index 0000000..4c136e9 Binary files /dev/null and b/java/mss-failsafe/mss/src/main/webapp/resources/images/icons/security_icon.png differ diff --git a/java/mss-failsafe/mss/src/main/webapp/resources/images/logo.jpg b/java/mss-failsafe/mss/src/main/webapp/resources/images/logo.jpg new file mode 100644 index 0000000..2ad289a Binary files /dev/null and b/java/mss-failsafe/mss/src/main/webapp/resources/images/logo.jpg differ diff --git a/java/mss-failsafe/mss/src/main/webapp/resources/layout/manager/template.xhtml b/java/mss-failsafe/mss/src/main/webapp/resources/layout/manager/template.xhtml new file mode 100644 index 0000000..099ae7f --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/resources/layout/manager/template.xhtml @@ -0,0 +1,36 @@ + + + + + + + + + + + + <ui:insert name="title"> + Please add a Title! + </ui:insert> + + + + + +
+
+ +
+
+ Content +
+
+ Bottom +
+
+
+ diff --git a/java/mss-failsafe/mss/src/main/webapp/resources/layout/user/template.xhtml b/java/mss-failsafe/mss/src/main/webapp/resources/layout/user/template.xhtml new file mode 100644 index 0000000..6b9e19a --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/resources/layout/user/template.xhtml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + <ui:insert name="title"> + Please add a Title! + </ui:insert> + + + + + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + + + + +
+
+
+
+ + + + + + + + + + +
+
+
+ + + +
+
+ Content +
+
+
+
+ Bottom +
+ +
+
+
+ diff --git a/java/mss-failsafe/mss/src/main/webapp/user/companies.xhtml b/java/mss-failsafe/mss/src/main/webapp/user/companies.xhtml new file mode 100644 index 0000000..6871385 --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/user/companies.xhtml @@ -0,0 +1,19 @@ + + + Firmen + + + + Willkommen zuhause + + + + + + + \ No newline at end of file diff --git a/java/mss-failsafe/mss/src/main/webapp/user/locations.xhtml b/java/mss-failsafe/mss/src/main/webapp/user/locations.xhtml new file mode 100644 index 0000000..a1c8f6f --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/user/locations.xhtml @@ -0,0 +1,16 @@ + + + + + + TODO supply a title + + + +
TODO write content
+ + diff --git a/java/mss-failsafe/mss/src/main/webapp/user/machines.xhtml b/java/mss-failsafe/mss/src/main/webapp/user/machines.xhtml new file mode 100644 index 0000000..a1c8f6f --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/user/machines.xhtml @@ -0,0 +1,16 @@ + + + + + + TODO supply a title + + + +
TODO write content
+ + diff --git a/java/mss-failsafe/mss/src/main/webapp/user/profile.xhtml b/java/mss-failsafe/mss/src/main/webapp/user/profile.xhtml new file mode 100644 index 0000000..38f789b --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/user/profile.xhtml @@ -0,0 +1,110 @@ + + + Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname} + + + +
+
+ +
+
+ +
+ +
+
+
+ + +
+
+
+ +
+ +
+ + +
+
+
+ +
+ +
+ + +
+
+
+ +
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ + +
+
+
+ +
+ +
+ + +
+
+
+ +
+
+ + +
+
+
+ +
+ +
+ + +
+
+
+ +
+
+
+
+
+ + + + + +
\ No newline at end of file diff --git a/java/mss-failsafe/mss/src/main/webapp/user/protection.xhtml b/java/mss-failsafe/mss/src/main/webapp/user/protection.xhtml new file mode 100644 index 0000000..a1c8f6f --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/user/protection.xhtml @@ -0,0 +1,16 @@ + + + + + + TODO supply a title + + + +
TODO write content
+ + diff --git a/java/mss-failsafe/mss/src/main/webapp/user/welcome.xhtml b/java/mss-failsafe/mss/src/main/webapp/user/welcome.xhtml new file mode 100644 index 0000000..086900c --- /dev/null +++ b/java/mss-failsafe/mss/src/main/webapp/user/welcome.xhtml @@ -0,0 +1,19 @@ + + + Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname} + + + + Willkommen zuhause + + + + + + + \ No newline at end of file diff --git a/java/mss-failsafe/mssfailsafe.datalayer/pom.xml b/java/mss-failsafe/mssfailsafe.datalayer/pom.xml new file mode 100644 index 0000000..f8faf5b --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + plate.software + mss-failsafe + 1.0-SNAPSHOT + + mssfailsafe.datalayer + jar + + 11 + 11 + ${project.build.directory}/endorsed + UTF-8 + false + 8.0 + + + + + plate.software + userdata + 1.0-SNAPSHOT + + + javax + javaee-api + ${jakartaee} + provided + + + org.apache.pdfbox + pdfbox + 2.0.13 + + + + org.apache.logging.log4j + log4j-api + 2.14.1 + + + org.apache.logging.log4j + log4j-core + 2.14.1 + + + plate.software + userManagement + 1.0-SNAPSHOT + classes + + + \ No newline at end of file diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/adresses/Address.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/adresses/Address.java new file mode 100644 index 0000000..1e5443c --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/adresses/Address.java @@ -0,0 +1,214 @@ +package model.adresses; + +import java.util.Objects; +import javax.persistence.MappedSuperclass; +import javax.validation.constraints.NotNull; +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@MappedSuperclass +public class Address extends AbstractEntity{ + + //Land + @NotNull(message = "Land darf nicht null sein") + private String country; + + //Straßenname + @NotNull(message = "Strasse darf nicht null sein") + private String street; + + //Hausnummer + @NotNull(message = "Hausnummer darf nicht null sein") + private String number; + + //Zusatz + private String extra; + + //PLZ + @NotNull(message = "PLZ darf nicht null sein") + private Integer postnumber; + + //Bundesland + @NotNull(message = "Bundesland darf nicht null sein") + private String county; + + //Ort + @NotNull(message = "Ort darf nicht null sein") + private String place; + + private String contact; + + private String comment; + + public Address() { + } + + public Address(String street, String number, String extra, Integer postnumber, String county, String place) { + this.street = street; + this.number = number; + this.extra = extra; + this.postnumber = postnumber; + this.county = county; + this.place = place; + } + + public Address(String country, String street, String number, String extra, Integer postnumber, String county, String place) { + this.country = country; + this.street = street; + this.number = number; + this.extra = extra; + this.postnumber = postnumber; + this.county = county; + this.place = place; + } + + public Address(String country, String street, String number, String extra, Integer postnumber, String county, String place, String contact, String comment) { + this.country = country; + this.street = street; + this.number = number; + this.extra = extra; + this.postnumber = postnumber; + this.county = county; + this.place = place; + this.contact = contact; + this.comment = comment; + } + + public Address(Address toCopyAddress){ + this.country = toCopyAddress.getCountry(); + this.street = toCopyAddress.getStreet(); + this.number = toCopyAddress.getNumber(); + this.extra = toCopyAddress.getExtra(); + this.postnumber = toCopyAddress.getPostnumber(); + this.county = toCopyAddress.getCounty(); + this.place = toCopyAddress.getPlace(); + this.contact = toCopyAddress.getContact(); + this.comment = toCopyAddress.getComment(); + } + + @Override + public int hashCode() { + int hash = 7; + hash = 83 * hash + Objects.hashCode(this.country); + hash = 83 * hash + Objects.hashCode(this.street); + hash = 83 * hash + Objects.hashCode(this.number); + hash = 83 * hash + Objects.hashCode(this.extra); + hash = 83 * hash + Objects.hashCode(this.postnumber); + hash = 83 * hash + Objects.hashCode(this.county); + hash = 83 * hash + Objects.hashCode(this.place); + hash = 83 * hash + Objects.hashCode(this.contact); + hash = 83 * hash + Objects.hashCode(this.comment); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Address other = (Address) obj; + if (!Objects.equals(this.country, other.country)) { + return false; + } + if (!Objects.equals(this.street, other.street)) { + return false; + } + if (!Objects.equals(this.number, other.number)) { + return false; + } + if (!Objects.equals(this.extra, other.extra)) { + return false; + } + if (!Objects.equals(this.county, other.county)) { + return false; + } + if (!Objects.equals(this.place, other.place)) { + return false; + } + if (!Objects.equals(this.comment, other.comment)) { + return false; + } + return Objects.equals(this.postnumber, other.postnumber); + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getExtra() { + return extra; + } + + public void setExtra(String extra) { + this.extra = extra; + } + + public Integer getPostnumber() { + return postnumber; + } + + public void setPostnumber(Integer postnumber) { + this.postnumber = postnumber; + } + + public String getCounty() { + return county; + } + + public void setCounty(String county) { + this.county = county; + } + + public String getPlace() { + return place; + } + + public void setPlace(String place) { + this.place = place; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getContact() { + return contact; + } + + public void setContact(String contact) { + this.contact = contact; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/adresses/CompanyBillingAddress.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/adresses/CompanyBillingAddress.java new file mode 100644 index 0000000..e5829bc --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/adresses/CompanyBillingAddress.java @@ -0,0 +1,52 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.adresses; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import model.company.Company; + +/** + * + * @author Patrick + */ +@Entity +public class CompanyBillingAddress extends Address{ + @ManyToOne + private Company company; + + private boolean delivery; + + public CompanyBillingAddress() { + } + + public CompanyBillingAddress(Company company, boolean delivery) { + this.company = company; + this.delivery = delivery; + } + + public CompanyBillingAddress(Company company, boolean delivery,String country, String street, String number, String extra, Integer postnumber, String county, String place) { + super(country, street, number, extra, postnumber, county, place); + this.company = company; + this.delivery = delivery; + } + + public Company getCompany() { + return company; + } + + public void setCompany(Company company) { + this.company = company; + } + + public boolean isDelivery() { + return delivery; + } + + public void setDelivery(boolean delivery) { + this.delivery = delivery; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/adresses/LocationAddress.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/adresses/LocationAddress.java new file mode 100644 index 0000000..43a1f95 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/adresses/LocationAddress.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.adresses; + +import javax.persistence.Entity; +import javax.persistence.OneToOne; +import model.company.Location; + +/** + * + * @author patri + */ +@Entity +public class LocationAddress extends Address { + + @OneToOne + private Location location; + + public LocationAddress() { + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/company/Company.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/company/Company.java new file mode 100644 index 0000000..ccb40d6 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/company/Company.java @@ -0,0 +1,151 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.company; + +import java.util.Set; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.OneToMany; +import model.AbstractEntity; +import model.adresses.CompanyBillingAddress; +import model.customer.Customer; + +/** + * + * @author patri + */ +@Entity +public class Company extends AbstractEntity { + + public static final String FIND_BY_NAME = "Company.findByName"; + public static final String FIND_BY_STEUERID = "Company.findBySteuerID"; + public static final String FIND_BY_UMSATZSTEUERID = "Company.findByUmsatzsteuerID"; + public static final String FIND_BY_CUSTOMER = "Company.findByCustomer"; + public static final String FIND_BY_ADDRESS = "Company.findByAddress"; + public static final String FIND_BY_DELIVERYADDRESS = "Company.findByLocation"; + + @Column(unique = true, nullable = false) + private String name; + + @Column(unique = true, nullable = true) + private String steuerNr; + + @Column(unique = true, nullable = true) + private String umsatzSteuerID; + + @Column(unique = true, nullable = true) + private String kundenNr; + + @Column(unique = false, nullable = true) + private String headerInspection; + + @Column(unique = false, nullable = true) + private String headerService; + + @Column(unique = false, nullable = false) + @Enumerated(EnumType.ORDINAL) + private Status status; + + @OneToMany(mappedBy = "company", cascade = CascadeType.ALL) + private Set addresses; + + @OneToMany(mappedBy = "company", cascade = CascadeType.ALL) + private Set locations; + + @OneToMany(mappedBy = "company", cascade = { + CascadeType.MERGE, + CascadeType.REFRESH + }) + private Set customers; + + public Company() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSteuerNr() { + return steuerNr; + } + + public void setSteuerNr(String steuerNr) { + this.steuerNr = steuerNr; + } + + public String getUmsatzSteuerID() { + return umsatzSteuerID; + } + + public void setUmsatzSteuerID(String umsatzSteuerID) { + this.umsatzSteuerID = umsatzSteuerID; + } + + public String getKundenNr() { + return kundenNr; + } + + public void setKundenNr(String kundenNr) { + this.kundenNr = kundenNr; + } + + public String getHeaderInspection() { + return headerInspection; + } + + public void setHeaderInspection(String headerInspection) { + this.headerInspection = headerInspection; + } + + public String getHeaderService() { + return headerService; + } + + public void setHeaderService(String headerService) { + this.headerService = headerService; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public Set getAddresses() { + return addresses; + } + + public void setAddresses(Set addresses) { + this.addresses = addresses; + } + + public Set getLocations() { + return locations; + } + + public void setLocations(Set locations) { + this.locations = locations; + } + + public Set getCustomers() { + return customers; + } + + public void setCustomers(Set customers) { + this.customers = customers; + } + + +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/company/Location.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/company/Location.java new file mode 100644 index 0000000..256971d --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/company/Location.java @@ -0,0 +1,73 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.company; + +import java.util.Set; +import javax.persistence.Entity; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import model.AbstractEntity; +import model.adresses.LocationAddress; +import model.customer.Customer; +import model.machine.Machine; +/** + * + * @author patri + */ +@Entity +public class Location extends AbstractEntity{ + + @ManyToOne + private Company company; + + @OneToOne + private LocationAddress address; + + @OneToMany(mappedBy = "location") + private Set machines; + + @ManyToMany + private Set contacts; + + public Location() { + } + + public Company getCompany() { + return company; + } + + public void setCompany(Company company) { + this.company = company; + } + + public LocationAddress getAddress() { + return address; + } + + public void setAddress(LocationAddress address) { + this.address = address; + } + + public Set getMachines() { + return machines; + } + + public void setMachines(Set machines) { + this.machines = machines; + } + + public Set getContacts() { + return contacts; + } + + public void setContacts(Set contacts) { + this.contacts = contacts; + } + + +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/company/Status.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/company/Status.java new file mode 100644 index 0000000..5d160cf --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/company/Status.java @@ -0,0 +1,59 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.company; + +import java.util.Locale; + +/** + * + * @author patri + */ +public enum Status { + ACTIVE, + INACTIVE; + + private Status() { + } + + @Override + public String toString() { + switch(this){ + case ACTIVE: + return "aktiv"; + case INACTIVE: + return "inaktiv"; + default: + return ""; + } + } + + public String toLanguageString(Locale locale){ + if (locale == null ||locale.equals(Locale.GERMAN) || locale.equals(Locale.GERMANY)) { + return getGerman(); + } + + if (locale.equals(Locale.ENGLISH)) { + getEnglish(); + } + + return ""; + } + + private String getGerman() { + return toString(); + } + + private String getEnglish(){ + switch(this){ + case ACTIVE: + return "active"; + case INACTIVE: + return "inactive"; + default: + return ""; + } + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/customer/Customer.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/customer/Customer.java new file mode 100644 index 0000000..d943251 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/customer/Customer.java @@ -0,0 +1,63 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.customer; + +import java.util.Set; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import model.person.Person; +import model.company.Company; +import model.company.Location; + +/** + * + * @author patri + */ +@Entity +public class Customer extends Person{ + + @ManyToOne + private Company company; + + @ManyToMany + private Set locations; + + @Column(nullable = true, length = 210) + private String note; + + public Customer() { + } + + public Customer(Company company) { + this.company = company; + } + + public Company getCompany() { + return company; + } + + public void setCompany(Company company) { + this.company = company; + } + + public Set getLocations() { + return locations; + } + + public void setLocations(Set locations) { + this.locations = locations; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/FileDB.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/FileDB.java new file mode 100644 index 0000000..f2f80d6 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/FileDB.java @@ -0,0 +1,59 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.files; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import javax.persistence.Lob; +import model.AbstractEntity; + +/** + * + * @author patri + */ +@Entity +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public class FileDB extends AbstractEntity{ + @Column(nullable = false, length = 100) + private String name; + + @Enumerated(EnumType.STRING) + private Mime mime; + + @Lob + private byte[] fileData; + + public FileDB() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public byte[] getFileData() { + return fileData; + } + + public void setFileData(byte[] fileData) { + this.fileData = fileData; + } + + public Mime getMime() { + return mime; + } + + public void setMime(Mime mime) { + this.mime = mime; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/Invoice.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/Invoice.java new file mode 100644 index 0000000..2fd8489 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/Invoice.java @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.files; + +import javax.persistence.Entity; +import javax.persistence.OneToMany; +import model.ticket.Ticket; + +/** + * + * @author patri + */ +@Entity +public class Invoice extends FileDB { + @OneToMany + private Ticket ticket; + + public Invoice() { + } + + public Invoice(Ticket ticket) { + this.ticket = ticket; + } + + public Ticket getTicket() { + return ticket; + } + + public void setTicket(Ticket ticket) { + this.ticket = ticket; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/Mime.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/Mime.java new file mode 100644 index 0000000..a7d9960 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/Mime.java @@ -0,0 +1,113 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.files; + +/** + * + * @author patri + */ +public enum Mime { + AAC(".aac", "AAC audio", "audio/aac"), + ABW(".abw", "AbiWord document", "application/x-abiword"), + ARC(".arc", "Archive document (multiple files embedded)", "application/x-freearc"), + AVI(".avi", "AVI: Audio Video Interleave", "video/x-msvideo"), + AZW(".azw", "Amazon Kindle eBook format", "application/vnd.amazon.ebook"), + BIN(".bin", "Any kind of binary data", "application/octet-stream"), + BMP(".bmp", "Windows OS/2 Bitmap Graphics", "image/bmp"), + BZ(".bz", "BZip archive", "application/x-bzip"), + BZ2(".bz2", "BZip2 archive", "application/x-bzip2"), + CDA(".cda", "CD audio", "application/x-cdf"), + CSH(".csh", "C-Shell script", "application/x-csh"), + CSS(".css", "Cascading Style Sheets (CSS)", "text/css"), + CSV(".csv", "Comma-separated values (CSV", "text/csv"), + DOC(".doc", "Microsoft Word", "application/msword"), + DOCX(".docx", "Microsoft Word (OpenXML)", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"), + EOT(".eot", "MS Embedded OpenType fonts", "application/vnd.ms-fontobject"), + EPUB(".epub", "Electronic publication (EPUB)", "application/epub+zip"), + GZ(".gz", "GZip Compressed Archive", "application/gzip"), + GIF(".gif", "Graphics Interchange Format (GIF)", "image/gif"), + HTM(".htm", "HyperText Markup Language (HTML)", "text/html"), + HTML(".html", "HyperText Markup Language (HTML)", "text/html"), + ICO(".ico", "Icon format", "image/vnd.microsoft.icon"), + ICS(".ics", "iCalendar format", "text/calendar"), + JAR(".jar", "Java Archive (JAR)", "application/java-archive"), + JPG(".jpg", "JPEG images", "image/jpeg"), + JPEG(".jpeg", "JPEG images", "image/jpeg"), + JS(".js", "JavaScript", "text/javascript"), + JSON(".json", "JSON format", "application/json"), + JSONLD(".jsonld", "JSON-LD format", "application/ld+json"), + MID(".mid", "Musical Instrument Digital Interface (MIDI)", "audio/midi"), + MIDI(".midi", "Musical Instrument Digital Interface (MIDI)", "audio/midi"), + MJS(".mjs", "JavaScript module", "text/javascript"), + MP3(".mp3", "MP3 audio", "audio/mpeg"), + MP4(".mp4", "MP4 video", "video/mp4"), + MPEG(".mpeg", "MPEG Video", "video/mpeg"), + MPKG(".mpkg", "Apple Installer Package", "application/vnd.apple.installer+xml"), + ODP(".odp", "OpenDocument presentation document", "application/vnd.oasis.opendocument.presentation"), + ODS(".ods", "OpenDocument spreadsheet document", "application/vnd.oasis.opendocument.spreadsheet"), + ODT(".odt", "OpenDocument text document", "application/vnd.oasis.opendocument.text"), + OGA(".oga", "OGG audio", "audio/ogg"), + OGV(".ogv", "OGG video", "video/ogg"), + OGX(".ogx", "OGG", "application/ogg"), + OPUUS(".opus", "Opus audio", "audio/opus"), + OTF(".otf", "OpenType font", "font/otf"), + PNG(".png", "Portable Network Graphics", "image/png"), + PDF(".pdf", "Adobe Portable Document Format (PDF)", "application/pdf"), + PHP(".php", "Hypertext Preprocessor (Personal Home Page)", "application/x-httpd-php"), + PPT(".ppt", "Microsoft PowerPoint", "application/vnd.ms-powerpoint"), + PPTX(".pptx", "Microsoft PowerPoint (OpenXML)", "application/vnd.openxmlformats-officedocument.presentationml.presentation"), + RAR(".rar", "RAR archive", "application/vnd.rar"), + RTF(".rtf", "Rich Text Format (RTF)", "application/rtf"), + SH(".sh", "Bourne shell script", "application/x-sh"), + SVG(".svg", "Scalable Vector Graphics (SVG)", "image/svg+xml"), + SWF(".swf", "Small web format (SWF) or Adobe Flash document", "application/x-shockwave-flash"), + TAR(".tar", "Tape Archive (TAR)", "application/x-tar"), + TIF(".tif", "Tagged Image File Format (TIFF)", "image/tiff"), + TIFF(".tiff", "Tagged Image File Format (TIFF)", "image/tiff"), + TS(".ts", "MPEG transport stream", "video/mp2t"), + TTF(".ttf", "TrueType Font", "font/ttf"), + TXT(".txt", "Text, (generally ASCII or ISO 8859-n)", "text/plain"), + VSD(".vsd", "Microsoft Visio", "application/vnd.visio"), + WAV(".wav", "Waveform Audio Format", "audio/wav"), + WEBA(".weba", "WEBM audio", "audio/webm"), + WEBM(".webm", "WEBM video", "video/webm"), + WEBP(".webp", "WEBP image", "image/webp"), + WOFF(".woff", "Web Open Font Format (WOFF)", "font/woff"), + WOFF2(".woff2", "Web Open Font Format (WOFF)", "font/woff2"), + XHTML(".xhtml", "XHTML", "application/xhtml+xml"), + XLS(".xls", "Microsoft Excel", "application/vnd.ms-excel"), + XLSX(".xlsx", "Microsoft Excel (OpenXML)", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"), + XML(".xml", "XML", "application/xml"), + XUL(".xul", "XUL", "application/vnd.mozilla.xul+xml"), + ZIP(".zip", "ZIP archive", "application/zip"), + GP3V(".3gp", "3GPP audio/video container", "video/3gpp"), + GP3A(".3gp", "3GPP audio/video container", "audio/3gpp"), + G23V(".3g2", "3GPP2 audio/video container", "video/3gpp2"), + G23A(".3g2", "3GPP2 audio/video container", "audio/3gpp2"), + Z7(".7z", "7-zip archive", "application/x-7z-compressed"); + + private final String extension; + private final String kindOfDocument; + private final String mimeType; + + private Mime(String extension, String kindOfDocument, String mimeType) { + this.extension = extension; + this.kindOfDocument = kindOfDocument; + this.mimeType = mimeType; + } + + public String getExtension() { + return extension; + } + + public String getKindOfDocument() { + return kindOfDocument; + } + + public String getMimeType() { + return mimeType; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/Report.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/Report.java new file mode 100644 index 0000000..ce94af5 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/files/Report.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.files; + +import javax.persistence.Entity; +import javax.persistence.OneToMany; +import model.ticket.Ticket; + +/** + * + * @author patri + */ +@Entity +public class Report extends FileDB{ + + @OneToMany + private Ticket ticket; + + public Report() { + } + + public Ticket getTicket() { + return ticket; + } + + public void setTicket(Ticket ticket) { + this.ticket = ticket; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/machine/Machine.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/machine/Machine.java new file mode 100644 index 0000000..efc9561 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/machine/Machine.java @@ -0,0 +1,33 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.machine; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import model.AbstractEntity; +import model.company.Location; + +/** + * + * @author patri + */ +@Entity +public class Machine extends AbstractEntity { + + @ManyToOne + private Location location; + + public Machine() { + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/Comment.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/Comment.java new file mode 100644 index 0000000..9b13e4a --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/Comment.java @@ -0,0 +1,131 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +import java.time.LocalDateTime; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import model.AbstractEntity; +import model.person.Person; + +/** + * + * @author Patrick + */ +@Entity +public class Comment extends AbstractEntity implements Comparable { + + @Column(columnDefinition = "longblob") + private String message; + + @ManyToOne + private Person writer; + + private boolean edited; + + @ManyToOne + private Ticket ticket; + + public Comment() { + } + + public Comment(Person writer, String message) { + this.writer = writer; + this.edited = false; + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + edited = true; + } + + public LocalDateTime getLastEditedDate() { + return getChangedDate(); + } + + public boolean isEdited() { + return edited; + } + + public void setEdited(boolean edited) { + this.edited = edited; + setChangedDate(LocalDateTime.now()); + } + + public Ticket getTicket() { + return ticket; + } + + public void setTicket(Ticket ticket) { + this.ticket = ticket; + setChangedDate(LocalDateTime.now()); + } + + public Person getWriter() { + return writer; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 79 * hash + Objects.hashCode(this.message); + hash = 79 * hash + Objects.hashCode(this.writer); + hash = 79 * hash + Objects.hashCode(getCreationDate()); + hash = 79 * hash + Objects.hashCode(getChangedDate()); + hash = 79 * hash + (this.edited ? 1 : 0); + hash = 79 * hash + Objects.hashCode(this.ticket); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Comment other = (Comment) obj; + if (this.edited != other.edited) { + return false; + } + if (!Objects.equals(this.message, other.message)) { + return false; + } + if (!Objects.equals(this.writer, other.writer)) { + return false; + } + if (!Objects.equals(getCreationDate(), other.getCreationDate())) { + return false; + } + if (!Objects.equals(this.ticket, other.ticket)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "Comment{" + "writer=" + writer.getEmail() + ", creationDate=" + getCreationDate() + ", id=" + getId() + ", message="+ message + '}'; + } + + @Override + public int compareTo(Comment c) { + return c.getCreationDate().compareTo(this.getCreationDate()); + } + + +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/FilenameGeneration.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/FilenameGeneration.java new file mode 100644 index 0000000..33c7b38 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/FilenameGeneration.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +/** + * + * @author patri + */ +public enum FilenameGeneration { + INSPEKTIONNR, + MASCHINEDESCRIPTION, + LOCATION; + + @Override + public String toString() { + switch(this){ + case INSPEKTIONNR: + return "inspektionnr"; + case MASCHINEDESCRIPTION: + return "maschinedescription"; + case LOCATION: + return "location"; + } + + return "nothing"; + } + + +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/Status.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/Status.java new file mode 100644 index 0000000..5c6d316 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/Status.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +/** + * + * @author patri + */ +public enum Status { + NEW("Neu"), + PENDING("Zu bestätigen"), + HOLD("Angehalten"), + ACTIVE("Aktiv"), + SHIPPING("Liefern"), + PAYMENTPENDING("Zahlung austehend"), + CLOSED("Geschlossen"), + REOPENED("Wiedergeöffnet"); + + private final String name; + + private Status(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/Ticket.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/Ticket.java new file mode 100644 index 0000000..ea18116 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/Ticket.java @@ -0,0 +1,192 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +import java.time.LocalDateTime; +import java.util.List; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import model.AbstractEntity; +import model.adresses.CompanyBillingAddress; +import model.company.Company; +import model.company.Location; +import model.files.Invoice; +import model.files.Report; +import model.person.Person; +import model.person.Token; + +/** + * + * @author patri + */ +@Entity +public class Ticket extends AbstractEntity{ + + @Column(nullable = false) + @OneToOne + private Company company; + + @OneToOne + private CompanyBillingAddress billingAddress; + + @OneToMany + private List locations; + + @Column(nullable = false) + @Enumerated(EnumType.STRING) + private Status status; + + @Column(nullable = false) + @OneToOne + private Person creator; + + @Column(nullable = true) + @OneToOne + private Person owner; + + private LocalDateTime startDate; + + private LocalDateTime endDate; + + @OneToMany(mappedBy = "ticket", cascade = CascadeType.ALL) + private List comments; + + private boolean payed; + + @OneToMany(mappedBy = "ticket", orphanRemoval = true, cascade = CascadeType.ALL) + private List tokens; + + @OneToMany(mappedBy = "ticket", cascade = {CascadeType.PERSIST, CascadeType.PERSIST}) + private List reports; + + @OneToMany(mappedBy = "ticket", cascade = {CascadeType.PERSIST, CascadeType.PERSIST}) + private List invoices; + + @Column(nullable = false, length = 200) + private String filenameGeneration; + + public Ticket() { + } + + public CompanyBillingAddress getBillingAddress() { + return billingAddress; + } + + public void setBillingAddress(CompanyBillingAddress billingAddress) { + this.billingAddress = billingAddress; + } + + public LocalDateTime getStartDate() { + return startDate; + } + + public void setStartDate(LocalDateTime startDate) { + this.startDate = startDate; + } + + public LocalDateTime getEndDate() { + return endDate; + } + + public void setEndDate(LocalDateTime endDate) { + this.endDate = endDate; + } + + public Company getCompany() { + return company; + } + + public void setCompany(Company company) { + this.company = company; + } + + public List getLocations() { + return locations; + } + + public void setLocations(List locations) { + this.locations = locations; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public Person getCreator() { + return creator; + } + + public void setCreator(Person creator) { + this.creator = creator; + } + + public Person getOwner() { + return owner; + } + + public void setOwner(Person owner) { + this.owner = owner; + } + + public List getComments() { + return comments; + } + + public void setComments(List comments) { + this.comments = comments; + } + + public boolean isPayed() { + return payed; + } + + public void setPayed(boolean payed) { + this.payed = payed; + } + + public List getTokens() { + return tokens; + } + + public void setTokens(List tokens) { + this.tokens = tokens; + } + + public List getReports() { + return reports; + } + + public void setReports(List reports) { + this.reports = reports; + } + + public List getInvoices() { + return invoices; + } + + public void setInvoices(List invoices) { + this.invoices = invoices; + } + + public String getFilenameGeneration() { + return filenameGeneration; + } + + public void setFilenameGeneration(String filenameGeneration) { + this.filenameGeneration = filenameGeneration; + } + + +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/TicketLocation.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/TicketLocation.java new file mode 100644 index 0000000..84ce8de --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/TicketLocation.java @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import javax.persistence.OneToOne; +import model.AbstractEntity; +import model.company.Location; +import java.util.List; + +/** + * + * @author patri + */ +@Entity +public class TicketLocation extends AbstractEntity{ + @ManyToOne + private Ticket ticket; + + @OneToOne + private Location location; + + + private List machines; + + + public TicketLocation() { + } + + +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/TicketMachine.java b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/TicketMachine.java new file mode 100644 index 0000000..16bcde8 --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/java/model/ticket/TicketMachine.java @@ -0,0 +1,30 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.ticket; + +import javax.persistence.Entity; +import model.AbstractEntity; +import javax.persistence.ManyToOne; +import javax.persistence.OneToOne; +import model.machine.Machine; + +/** + * + * @author patri + */ +@Entity +public class TicketMachine extends AbstractEntity{ + @ManyToOne + private Ticket ticket; + + @OneToOne + private Machine machine; + + public TicketMachine() { + } + + +} diff --git a/java/mss-failsafe/mssfailsafe.datalayer/src/main/resources/META-INF/persistence.xml b/java/mss-failsafe/mssfailsafe.datalayer/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..94bd1de --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,12 @@ + + + + java:/mss-failsave + model.company.Location + model.adresses.LocationAdress + model.machine.Machine + + + + + diff --git a/java/mss-failsafe/mssfailsafe.datalayer/target/classes/META-INF/persistence.xml b/java/mss-failsafe/mssfailsafe.datalayer/target/classes/META-INF/persistence.xml new file mode 100644 index 0000000..94bd1de --- /dev/null +++ b/java/mss-failsafe/mssfailsafe.datalayer/target/classes/META-INF/persistence.xml @@ -0,0 +1,12 @@ + + + + java:/mss-failsave + model.company.Location + model.adresses.LocationAdress + model.machine.Machine + + + + + diff --git a/java/mss-failsafe/mssfailsafeWeblayer/nb-configuration.xml b/java/mss-failsafe/mssfailsafeWeblayer/nb-configuration.xml new file mode 100644 index 0000000..a7a084a --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/nb-configuration.xml @@ -0,0 +1,20 @@ + + + + + + 1.8-web + WildFly + ide + + diff --git a/java/mss-failsafe/mssfailsafeWeblayer/pom.xml b/java/mss-failsafe/mssfailsafeWeblayer/pom.xml new file mode 100644 index 0000000..ce6c161 --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/pom.xml @@ -0,0 +1,132 @@ + + + 4.0.0 + + mss-failsafe + plate.software + 1.0-SNAPSHOT + + plate.software + mssfailsafeWeblayer + 1.0-SNAPSHOT + war + mssfailsafeWeblayer-1.0-SNAPSHOT + + + 1.8 + 1.8 + ${project.build.directory}/endorsed + UTF-8 + false + 8.0 + + + + + plate.software + userdata + 1.0-SNAPSHOT + + + + javax + javaee-api + ${jakartaee} + provided + + + org.apache.pdfbox + pdfbox + 2.0.13 + + + org.glassfish.soteria + javax.security.enterprise + 1.0 + + + org.omnifaces + omnifaces + 3.11.1 + + + + javax + javaee-web-api + 8.0 + provided + + + org.glassfish + javax.faces + 2.3.0 + provided + + + org.apache.logging.log4j + log4j-api + 2.14.1 + + + org.apache.logging.log4j + log4j-core + 2.14.1 + + + + org.primefaces + primefaces + 10.0.0 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + ${endorsed.dir} + + + + + org.apache.maven.plugins + maven-war-plugin + 2.3 + + false + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.6 + + + validate + + copy + + + ${endorsed.dir} + true + + + javax + javaee-api + ${jakartaee} + jar + + + + + + + + + diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/java/plate/software/mssfailsafeweblayer/JAXRSConfiguration.java b/java/mss-failsafe/mssfailsafeWeblayer/src/main/java/plate/software/mssfailsafeweblayer/JAXRSConfiguration.java new file mode 100644 index 0000000..dd2f9da --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/java/plate/software/mssfailsafeweblayer/JAXRSConfiguration.java @@ -0,0 +1,13 @@ +package plate.software.mssfailsafeweblayer; + +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + +/** + * Configures JAX-RS for the application. + * @author Juneau + */ +@ApplicationPath("resources") +public class JAXRSConfiguration extends Application { + +} diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/java/plate/software/mssfailsafeweblayer/resources/JavaEE8Resource.java b/java/mss-failsafe/mssfailsafeWeblayer/src/main/java/plate/software/mssfailsafeweblayer/resources/JavaEE8Resource.java new file mode 100644 index 0000000..8fceb5a --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/java/plate/software/mssfailsafeweblayer/resources/JavaEE8Resource.java @@ -0,0 +1,20 @@ +package plate.software.mssfailsafeweblayer.resources; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.Response; + +/** + * + * @author + */ +@Path("javaee8") +public class JavaEE8Resource { + + @GET + public Response ping(){ + return Response + .ok("ping") + .build(); + } +} diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/resources/META-INF/persistence.xml b/java/mss-failsafe/mssfailsafeWeblayer/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..f9d1b69 --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/WEB-INF/jboss-app.xml b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/WEB-INF/jboss-app.xml new file mode 100644 index 0000000..a3ea92f --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/WEB-INF/jboss-app.xml @@ -0,0 +1,6 @@ + + mss-failsafe + diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/WEB-INF/jboss-web.xml b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..c09c38f --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /mssfailsafeWeblayer-1.0-SNAPSHOT + jaspitest + \ No newline at end of file diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/WEB-INF/web.xml b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..1b91148 --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,90 @@ + + + + /index.xhtml + + + + 401 + /error.xhtml + + + + 403 + /error.xhtml + + + + authorise + /user/* + GET + POST + TRACE + HEAD + DELETE + CONNECT + OPTIONS + PUT + + + ADMIN + USER + + + + + + authorise + /admin/* + GET + POST + TRACE + HEAD + DELETE + CONNECT + OPTIONS + PUT + + + ADMIN + + + + + Normal User which got invited + USER + + + Admin user who can change entries, invite new domains and more.. + ADMIN + + + javax.faces.PROJECT_STAGE + Development + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + *.xhtml + + + + 30 + + + true + + + COOKIE + + + diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/admin/welcome.xhtml b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/admin/welcome.xhtml new file mode 100644 index 0000000..c4393e2 --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/admin/welcome.xhtml @@ -0,0 +1,14 @@ + + + + Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname} + + + +

Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname}

+ +
+ \ No newline at end of file diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/error.xhtml b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/error.xhtml new file mode 100644 index 0000000..0e553ba --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/error.xhtml @@ -0,0 +1,13 @@ + + + Error Testpage + + + +

Error!

+ +
+ diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/index.xhtml b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/index.xhtml new file mode 100644 index 0000000..67f9887 --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/index.xhtml @@ -0,0 +1,33 @@ + + + Login Testpage + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/user/welcome.xhtml b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/user/welcome.xhtml new file mode 100644 index 0000000..c4393e2 --- /dev/null +++ b/java/mss-failsafe/mssfailsafeWeblayer/src/main/webapp/user/welcome.xhtml @@ -0,0 +1,14 @@ + + + + Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname} + + + +

Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname}

+ +
+ \ No newline at end of file diff --git a/java/mss-failsafe/pom.xml b/java/mss-failsafe/pom.xml new file mode 100644 index 0000000..ebafcb3 --- /dev/null +++ b/java/mss-failsafe/pom.xml @@ -0,0 +1,78 @@ + + + + + + + + 4.0.0 + + + + + plate.software + + + + + mss-failsafe + + + + + 1.0-SNAPSHOT + + + + + + pom + + + + + + + + + + + + UTF-8 + + + + + + + + + + + + + + + + mssfailsafe.datalayer + + + userdata + + + mssfailsafeWeblayer + + + mss + + + + + + + mss-failsafe + + + + + diff --git a/java/mss-failsafe/userManagement/nb-configuration.xml b/java/mss-failsafe/userManagement/nb-configuration.xml new file mode 100644 index 0000000..2ae0828 --- /dev/null +++ b/java/mss-failsafe/userManagement/nb-configuration.xml @@ -0,0 +1,21 @@ + + + + + + 1.8-web + WildFly + ide + Facelets + + diff --git a/java/mss-failsafe/userManagement/pom.xml b/java/mss-failsafe/userManagement/pom.xml new file mode 100644 index 0000000..0c43ca2 --- /dev/null +++ b/java/mss-failsafe/userManagement/pom.xml @@ -0,0 +1,127 @@ + + + 4.0.0 + + mss-failsafe + plate.software + 1.0-SNAPSHOT + + plate.software + userManagement + 1.0-SNAPSHOT + war + userManagement-1.0-SNAPSHOT + + + 1.8 + 1.8 + ${project.build.directory}/endorsed + UTF-8 + false + 8.0 + + + + + javax + javaee-api + ${jakartaee} + provided + + + org.apache.pdfbox + pdfbox + 2.0.13 + + + org.glassfish.soteria + javax.security.enterprise + 1.0 + + + org.omnifaces + omnifaces + 3.11.1 + + + + javax + javaee-web-api + 8.0 + provided + + + org.glassfish + javax.faces + 2.3.0 + provided + + + org.apache.logging.log4j + log4j-api + 2.14.1 + + + org.apache.logging.log4j + log4j-core + 2.14.1 + + + + org.primefaces + primefaces + 10.0.0 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + ${endorsed.dir} + + + + + org.apache.maven.plugins + maven-war-plugin + 2.3 + + false + true + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.6 + + + validate + + copy + + + ${endorsed.dir} + true + + + javax + javaee-api + ${jakartaee} + jar + + + + + + + + + diff --git a/java/mss-failsafe/userManagement/src/main/java/business/user/DemoManager.java b/java/mss-failsafe/userManagement/src/main/java/business/user/DemoManager.java new file mode 100644 index 0000000..4668387 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/business/user/DemoManager.java @@ -0,0 +1,36 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import javax.ejb.EJB; +import javax.ejb.Startup; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Named; + +/** + * + * @author patri + */ +@Named(value = "DemoManager") +@ApplicationScoped +@Startup +public class DemoManager { + + @EJB + PersonManager personManager; + + /** + * Creates a new instance of NewJSFManagedBean + */ + public DemoManager() { + runDemos(); + } + + private void runDemos(){ + personManager.demo(); + } + +} diff --git a/java/mss-failsafe/userManagement/src/main/java/business/user/PasswordManager.java b/java/mss-failsafe/userManagement/src/main/java/business/user/PasswordManager.java new file mode 100644 index 0000000..fa08f23 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/business/user/PasswordManager.java @@ -0,0 +1,174 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import java.io.Serializable; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.spec.InvalidKeySpecException; +import java.util.Arrays; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.ejb.Stateless; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.transaction.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import model.person.Password; +import model.person.Salt; +import model.person.Person; + +/** + * + * @author Patrick + */ +@Named(value = "passwordManager") +@Stateless +public class PasswordManager implements Serializable { + private static final long serialVersionUID = -4563304131856981259L; + + final static Logger LOGGER = LogManager.getLogger(PasswordManager.class); + + @PersistenceContext(name = "pu_person") + private EntityManager em; + + //private Password password; + private Person user; + + private final int keyLength = 256; + + public byte[] hashPassword(final char[] password, final byte[] salt, final int iterations) { + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + PBEKeySpec spec = new PBEKeySpec(password, salt, iterations, this.keyLength); + SecretKey key = skf.generateSecret(spec); + //this.password = new Password(this.costumer, key.getEncoded()); + LOGGER.debug("Hash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + LOGGER.error("Failure creating hash for with:" + e); + return null; + //throw new RuntimeException( e ); + } + } + + public byte[] hashPasswordUser(final char[] password, Person user) { + + if (user == null) { + LOGGER.error("Tried to create hash for Nullcostumer!"); + return null; + } + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + PBEKeySpec spec = new PBEKeySpec(password, user.getSalt().getSalt(), user.getSalt().getInterations(), keyLength); + SecretKey key = skf.generateSecret(spec); + LOGGER.debug("Hash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + LOGGER.error("Failure creating hash for" + user.getEmail() + "with: " + e); + return null; + } + } + + public boolean passwordCheckEmail(final String email, final byte[] password) { + TypedQuery query = em.createNamedQuery(Person.FIND_BY_EMAIL, Person.class); + query.setParameter("email", email); + try { + Person user; + user = query.getSingleResult(); + + boolean equals = Arrays.equals(password, user.getPassword().getPassword()); + + for (int i = 0; i < password.length; i++) { + password[i] = 0; + } + + return equals; + } catch (NoResultException e) { + return false; + } + } + + @Transactional + public boolean passwordCheckCustomer(final Person user, final String password) { + LOGGER.debug("Test " + user.getEmail() + " mit " + password); + byte[] pw = hashPasswordUser(password.toCharArray(), user); + + boolean equals = Arrays.equals(pw, user.getPassword().getPassword()); + + for (int i = 0; i < pw.length; i++) { + pw[i] = 0; + } + + return equals; + + } + + public boolean changePassword(Person user, String newPassword, String oldPassword) { + if (user == null) { + LOGGER.error("Nullcostumer tried to change Password"); + return false; + } + + if(passwordCheckCustomer(user, oldPassword)){ + user.getPassword().setPassowrd(hashPasswordUser(newPassword.toCharArray(), user)); + LOGGER.info("Password changed for " + user.getEmail()); + } else { + return false; + } + + try { + em.persist(user); + LOGGER.info("Password changed for " + user.getEmail()); + return true; + } catch (Exception e) { + LOGGER.error("Couldn't save new password to " + user.getEmail() + " with: " + e.toString()); + return false; + } + } + + public byte[] generateRandomPassword() { + SecureRandom random = new SecureRandom(); + byte bytes[] = new byte[20]; + random.nextBytes(bytes); + return bytes; + } + + public Password gerateNewRandomPasswordClass(Person user){ + Salt salt = user.getSalt(); + String pass = Arrays.toString(generateRandomPassword()); + return new Password(user, hashPassword(pass.toCharArray(), salt.getSalt(), salt.getInterations())); + } + + public byte[] hashToken(String token){ + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] test = "SuperTestSalz".getBytes(); + PBEKeySpec spec = new PBEKeySpec(token.toCharArray(), test, 200, this.keyLength); + SecretKey key = skf.generateSecret(spec); + LOGGER.debug("TokenHash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + LOGGER.error("Failure creating tokenhash for " + token + " with: " + e); + return null; + } + } + + public Person getUser() { + return user; + } + + public void setUser(Person user) { + this.user = user; + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/business/user/PersonManager.java b/java/mss-failsafe/userManagement/src/main/java/business/user/PersonManager.java new file mode 100644 index 0000000..c826c66 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/business/user/PersonManager.java @@ -0,0 +1,229 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import java.io.Serializable; +import java.time.Instant; +import java.util.Optional; +import javax.ejb.EJB; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import javax.transaction.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import controller.person.PersonController; +import exception.InvalidEmailException; +import exception.InvalidPasswordException; +import exception.PersonInaktiveException; +import java.util.HashSet; +import java.util.Set; +import model.person.Salt; +import model.person.enums.TokenType; +import model.person.Person; +import model.person.enums.UserGroup; + +/** + * + * @author Patrick + */ +@Named +@Stateless +public class PersonManager implements Serializable { + + private static final long serialVersionUID = -6581582446436303658L; + + final static Logger LOGGER = LogManager.getLogger(PersonManager.class); + + @EJB + private PasswordManager passwordManager; + + @Inject + private PersonController userController; + + @PersistenceContext(name = "pu_person", type = PersistenceContextType.EXTENDED) + private EntityManager em; + + @Transactional + public void demo() { + Salt salt = new Salt(); + Salt salt2 = new Salt(); + Salt salt3 = new Salt(); + + Set groupUser = new HashSet<>(); + groupUser.add(UserGroup.USER); + + Set adminUser = new HashSet<>(); + adminUser.add(UserGroup.ADMIN); + + Person test = new Person( + "user@test.de", + (passwordManager.hashPassword("test".toCharArray(), salt.getSalt(), salt.getInterations())), + salt, + groupUser + ); + + test.setFirstname("User"); + test.setLastname("Nachname"); + test.setMobile("0124584589"); + test.setFax("3445565675"); + test.setTelefon("042154585"); + test.setActive(true); + em.persist(test); + + Person testAdmin = new Person( + "admin@test.de", + (passwordManager.hashPassword("admin".toCharArray(), salt2.getSalt(), salt2.getInterations())), + salt2, + adminUser + ); + + testAdmin.setFirstname("Admin"); + testAdmin.setLastname("Administratori"); + testAdmin.setMobile("0124584589"); + testAdmin.setFax("3445565675"); + testAdmin.setTelefon("042154585"); + testAdmin.setActive(true); + em.persist(testAdmin); + + Person testInactive = new Person( + "inaktive@test.de", + (passwordManager.hashPassword("test".toCharArray(), salt3.getSalt(), salt3.getInterations())), + salt3, + groupUser + ); + + testInactive.setFirstname("Admin"); + testInactive.setLastname("Administratori"); + testInactive.setMobile("0124584589"); + testInactive.setFax("3445565675"); + testInactive.setTelefon("042154585"); + testInactive.setActive(false); + em.persist(testInactive); + } + + @Transactional + public Person load(Person user) { + try { + Person loaded = this.em.find(Person.class, user.getId()); + LOGGER.info(loaded); + + return loaded; + } catch (Exception e) { + LOGGER.error("Error", e); + return null; + } + } + + @Transactional + public Person getActiveUser() { + try { + Person user = em.find(Person.class, userController.getActiveUser().getId()); + return user; + } catch (Exception e) { + LOGGER.error("couldn't load user: " + e); + return null; + } + } + + @Transactional + public Person getPlainActiveUser() { + try { + Person user = em.find(Person.class, userController.getActiveUser().getId()); + return user; + } catch (Exception e) { + LOGGER.error("couldn't load user: " + e); + return null; + } + } + + public Optional getByEmail(String email) { + try { + Person person = this.em.createNamedQuery(Person.FIND_BY_EMAIL, Person.class) + .setParameter("email", email).getSingleResult(); + + if (person != null) { + person.getUserGroups().size(); + } + + return Optional.of(person); + } catch (Exception e) { + return Optional.empty(); + } + } + + public Optional getByLoginToken(String loginToken, TokenType tokenType) { + Optional optional; + try { + + optional = Optional.of(this.em.createNamedQuery(Person.FIND_BY_TOKEN, Person.class) + .setParameter("tokenHash", this.passwordManager.hashToken(loginToken)) + .setParameter("tokenType", tokenType) + .setParameter("timestamp", Instant.now()) + .getSingleResult() + ); + return optional; + } catch (Exception e) { + return Optional.empty(); + } + } + + public Person getByEmailAndPassword(String email, String password) { + Person managedUser = getByEmail(email).orElseThrow(InvalidEmailException::new); + LOGGER.debug("Loaded " + managedUser.getEmail()); + if (!passwordManager.passwordCheckCustomer(managedUser, password)) { + throw new InvalidPasswordException(); + } + if (!managedUser.isActive()) { + throw new PersonInaktiveException(); + } + userController.setActiveUser(managedUser); + return managedUser; + } + + @Transactional + public boolean save(Person user) { + if (user == null) { + LOGGER.error("Tried to save null or Nullcustomer"); + return false; + } + try { + if (user.getId() != null && user.getId() > 0) { + em.merge(user); + } else { + em.persist(user); + } + LOGGER.info("Saved " + user.getEmail()); + return true; + } catch (Exception e) { + LOGGER.error("Tried to save " + user.getEmail() + " with error: " + e); + return false; + } + } + + public void refresh(Person user) { + if (user == null) { + LOGGER.error("Tried to save null or Nullcustomer"); + return; + } + + try { + em.refresh(user); + } catch (Exception e) { + LOGGER.error("Tried to refresh " + user.getEmail() + " with error: " + e); + } + } + + public String resetPassword() { + //TODO + return null; + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/business/user/TokenManager.java b/java/mss-failsafe/userManagement/src/main/java/business/user/TokenManager.java new file mode 100644 index 0000000..677a71b --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/business/user/TokenManager.java @@ -0,0 +1,91 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import java.time.Instant; +import static java.time.temporal.ChronoUnit.DAYS; +import static java.util.UUID.randomUUID; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import exception.InvalidEmailException; +import model.person.Token; +import model.person.enums.TokenType; +import model.person.Person; + +import java.util.Arrays; +import static java.time.Instant.now; + +/** + * + * @author Patrick + */ +@Stateless +public class TokenManager { + + @PersistenceContext(name = "pu_person") + private EntityManager em; + + @Inject + PasswordManager passwordManager; + + @Inject + PersonManager customerManager; + + public String generate(final String email, final String ipAddress, final String description, + final TokenType tokenType) { + + String rawToken = randomUUID().toString(); + Instant expiration = now().plus(14, DAYS); + + save(rawToken, email, ipAddress, description, tokenType, expiration); + + return rawToken; + } + + public String generateFileToken(final String email, final String description) { + + String rawToken = randomUUID().toString(); + Instant expiration = now().plus(3, DAYS); + + save(rawToken, email, null, description, TokenType.FILE, expiration); + + return rawToken; + } + + public void save(final String rawToken, final String email, final String ipAddress, + final String description, final TokenType tokenType, final Instant expiration) { + + Person user = this.customerManager.getByEmail(email) + .orElseThrow(InvalidEmailException::new); + + Token token = new Token(); + + token.setTokenHash(Arrays.toString(this.passwordManager.hashToken(rawToken))); + token.setExpiration(expiration); + token.setDescription(description); + token.setTokenType(tokenType); + token.setIpAddress(ipAddress); + + user.addToken(token); + + this.em.persist(user); + } + + public void remove(String token) { + this.em.createNamedQuery(Token.REMOVE_TOKEN) + .setParameter("tokenHash", token).executeUpdate(); + } + + public void removeExpired() { + + this.em.createNamedQuery(Token.REMOVE_EXPIRED_TOKEN) + .setParameter("timestamp", Instant.now()) + .executeUpdate(); + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/controller/AbstractController.java b/java/mss-failsafe/userManagement/src/main/java/controller/AbstractController.java new file mode 100644 index 0000000..5b04e75 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/controller/AbstractController.java @@ -0,0 +1,53 @@ +package controller; +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + + +import java.io.Serializable; +import javax.faces.application.FacesMessage; +import javax.faces.context.FacesContext; + +/** + * + * @author Patrick + */ +public abstract class AbstractController implements Serializable{ + private static final long serialVersionUID = -5908716187853409719L; + + protected void sendInfoMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_INFO, title, message); + addMessage(facesMessage); + } + + protected void sendWarnMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_WARN, title, message); + addMessage(facesMessage); + } + + protected void sendErrorMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_ERROR, title, message); + addMessage(facesMessage); + } + + protected void sendFatalMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_FATAL, title, message); + addMessage(facesMessage); + } + + private void addMessage(FacesMessage message) { + FacesContext.getCurrentInstance().addMessage(null, message); + } + + protected void errorMessage() { + String title = "Fehler!"; + String info = "Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut!"; + sendErrorMessage(title, info); + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/controller/person/PersonController.java b/java/mss-failsafe/userManagement/src/main/java/controller/person/PersonController.java new file mode 100644 index 0000000..5642f07 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/controller/person/PersonController.java @@ -0,0 +1,173 @@ +package controller.person; + +import javax.enterprise.context.SessionScoped; +import javax.faces.context.FacesContext; +import javax.inject.Inject; +import javax.inject.Named; +import javax.security.enterprise.AuthenticationStatus; +import javax.security.enterprise.SecurityContext; +import javax.security.enterprise.credential.Password; +import javax.security.enterprise.credential.UsernamePasswordCredential; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import controller.AbstractController; +import exception.InvalidEmailException; +import exception.InvalidPasswordException; +import exception.PersonInaktiveException; +import httpauthenticationmechanism.ManagedPerson; +import model.person.Person; + +import static javax.security.enterprise.AuthenticationStatus.SEND_FAILURE; +import static javax.security.enterprise.AuthenticationStatus.SUCCESS; + +import java.io.Serializable; +import java.util.Set; +import static javax.security.enterprise.authentication.mechanism.http.AuthenticationParameters.withParams; +import model.person.enums.UserGroup; +import org.omnifaces.cdi.Param; +import static org.omnifaces.util.Faces.getRequest; +import static org.omnifaces.util.Faces.getResponse; +import static org.omnifaces.util.Faces.redirect; + +/** + * + * @author Patrick + */ +@Named +@SessionScoped +public class PersonController extends AbstractController implements Serializable { + + private static final long serialVersionUID = -2257766986862616262L; + final static Logger LOGGER = LogManager.getLogger(PersonController.class); + private String username; + private String password; + private boolean rememberMe = false; + + @Inject + SecurityContext securityContext; + + @Inject + ManagedPerson managedPerson; + + @Param(name = "continue") // Defined in @LoginToContinue of SecurityFormAuthenticationMechanism + private boolean loginToContinue; + + private Person activePerson; + + public PersonController() { + + } + + public String submit() { + + try { + // credential that want to be validate was UsernamePasswordCredential + UsernamePasswordCredential credential = new UsernamePasswordCredential(username, new Password(password)); + + // this will call our security configuration to authorize the user + AuthenticationStatus status = securityContext.authenticate( + getRequest(), + getResponse(), + withParams() + .credential(credential) + .newAuthentication(!loginToContinue) + .rememberMe(rememberMe) + ); + + // When logged in choose the right page by class. When more then one group + // fits then the higher order is used + if (status.equals(SUCCESS)) { + managedPerson.addLogin(username); + + FacesContext facesContext = FacesContext.getCurrentInstance(); + HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true); + session.setAttribute("user", this); + session.setAttribute("realUsername", username); + + if (securityContext.isCallerInRole(UserGroup.ADMIN.toString())) { + LOGGER.info("Login succesfull " + username + " with role: ADMIN"); + return "admin/welcome.xhtml?faces-redirect=true"; + } + + if (securityContext.isCallerInRole(UserGroup.USER.toString())) { + LOGGER.info("Login succesfull " + username + " with role: USER"); + return "user/welcome.xhtml?faces-redirect=true"; + } + + if (securityContext.isCallerInRole(UserGroup.CUSTOMER.toString())) { + LOGGER.info("Login succesfull " + username + " with role: USER"); + return "customer/welcome.xhtml?faces-redirect=true"; + } + + redirect("index.xhtml"); + + } else if (status.equals(SEND_FAILURE)) { + + sendErrorMessage("Fehler!", "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut!."); + return ""; + } + } catch (InvalidPasswordException | InvalidEmailException e) { + LOGGER.info("Wrong Email or Password: " + username); + sendErrorMessage("Fehler!", "Falsche Email oder Passwort!"); + return ""; + } catch (PersonInaktiveException p){ + sendErrorMessage("Fehler!", " Ihr Konto ist inatkiv. Bitte wenden Sie sich an den Administator."); + return ""; + } catch (Exception e) { + LOGGER.error("Login error with " + e); + sendErrorMessage("Fehler!", "Ein Fehler ist aufgetreten, bitte versuchen Sie es erneut!"); + return ""; + } + return ""; + } + + public String logout() { + LOGGER.info("User is logging out: " + username); + try { + FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); + } catch (Exception e) { + LOGGER.error("couldn't logout " + username + "with:" + e); + } + + return "index.xhtml?faces-redirect=true"; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public boolean isRememberMe() { + return rememberMe; + } + + public void setRememberMe(boolean rememberMe) { + this.rememberMe = rememberMe; + } + + public Person getActiveUser() { + return activePerson; + } + + public void setActiveUser(Person activeUser) { + this.activePerson = activeUser; + } + + public Set getLogins() { + return managedPerson.getLogins(); + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/exception/AbstractBusinessException.java b/java/mss-failsafe/userManagement/src/main/java/exception/AbstractBusinessException.java new file mode 100644 index 0000000..8cbb7e2 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/exception/AbstractBusinessException.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +import javax.ejb.ApplicationException; + +/** + * + * @author Patrick + */ +@ApplicationException(rollback = true) +public abstract class AbstractBusinessException extends RuntimeException { +} + diff --git a/java/mss-failsafe/userManagement/src/main/java/exception/InvalidCredentialException.java b/java/mss-failsafe/userManagement/src/main/java/exception/InvalidCredentialException.java new file mode 100644 index 0000000..a851022 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/exception/InvalidCredentialException.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author Patrick + */ +public class InvalidCredentialException extends AbstractBusinessException{ + +} diff --git a/java/mss-failsafe/userManagement/src/main/java/exception/InvalidEmailException.java b/java/mss-failsafe/userManagement/src/main/java/exception/InvalidEmailException.java new file mode 100644 index 0000000..13bea8f --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/exception/InvalidEmailException.java @@ -0,0 +1,13 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author Patrick + */ +public class InvalidEmailException extends AbstractBusinessException { +} diff --git a/java/mss-failsafe/userManagement/src/main/java/exception/InvalidPasswordException.java b/java/mss-failsafe/userManagement/src/main/java/exception/InvalidPasswordException.java new file mode 100644 index 0000000..d1a662b --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/exception/InvalidPasswordException.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author Patrick + */ +public class InvalidPasswordException extends AbstractBusinessException { + +} diff --git a/java/mss-failsafe/userManagement/src/main/java/exception/PersonInaktiveException.java b/java/mss-failsafe/userManagement/src/main/java/exception/PersonInaktiveException.java new file mode 100644 index 0000000..dcbd2b7 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/exception/PersonInaktiveException.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author patri + */ +public class PersonInaktiveException extends AbstractBusinessException{ + +} diff --git a/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/AppIdentityStore.java b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/AppIdentityStore.java new file mode 100644 index 0000000..7c4cbb7 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/AppIdentityStore.java @@ -0,0 +1,78 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import javax.enterprise.context.ApplicationScoped; +import javax.security.enterprise.credential.CallerOnlyCredential; +import javax.security.enterprise.credential.Credential; +import javax.security.enterprise.credential.UsernamePasswordCredential; +import javax.security.enterprise.identitystore.CredentialValidationResult; +import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT; +import static javax.security.enterprise.identitystore.CredentialValidationResult.NOT_VALIDATED_RESULT; +import javax.security.enterprise.identitystore.IdentityStore; + +import business.user.PersonManager; +import exception.InvalidCredentialException; +import exception.PersonInaktiveException; +import java.util.Set; +import java.util.stream.Collectors; +import javax.ejb.EJB; +import model.person.Person; + +/** + * + * @author Patrick + */ +@ApplicationScoped +public class AppIdentityStore implements IdentityStore { + + @EJB + PersonManager userManager; + + @Override + public int priority() { + return 90; + } + + @Override + public CredentialValidationResult validate(Credential credential) { + try { + + // check if the credential was UsernamePasswordCredential + if (credential instanceof UsernamePasswordCredential) { + String username = ((UsernamePasswordCredential) credential).getCaller(); + String password = ((UsernamePasswordCredential) credential).getPasswordAsString(); + + return validate(this.userManager.getByEmailAndPassword(username, password)); + } + + // check if the credential was CallerOnlyCredential + if (credential instanceof CallerOnlyCredential) { + String username = ((CallerOnlyCredential) credential).getCaller(); + + return validate( + this.userManager.getByEmail(username) + .orElseThrow(InvalidCredentialException::new) + ); + } + + } catch (InvalidCredentialException e) { + return INVALID_RESULT; + } + return NOT_VALIDATED_RESULT; + } + + private CredentialValidationResult validate(Person person) { + Set groups; + + groups = person.getUserGroups().stream() + .map(gr -> gr.toString()) + .collect(Collectors.toSet()); + + return new CredentialValidationResult(person.getEmail(), groups); + } + +} diff --git a/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/AppRememberMeIdentityStore.java b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/AppRememberMeIdentityStore.java new file mode 100644 index 0000000..b97978e --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/AppRememberMeIdentityStore.java @@ -0,0 +1,69 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT; + +import java.util.Optional; +import java.util.Set; +import javax.ejb.EJB; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.security.enterprise.CallerPrincipal; +import javax.security.enterprise.credential.RememberMeCredential; +import javax.security.enterprise.identitystore.CredentialValidationResult; +import javax.security.enterprise.identitystore.RememberMeIdentityStore; +import javax.servlet.http.HttpServletRequest; + +import business.user.TokenManager; +import business.user.PersonManager; +import model.person.Person; +import static model.person.enums.TokenType.REMEMBER_ME; + +/** + * + * @author Patrick + */ +@ApplicationScoped +public class AppRememberMeIdentityStore implements RememberMeIdentityStore { + @Inject + HttpServletRequest request; + + @EJB + PersonManager userManager; + + @EJB + TokenManager tokenManager; + + @Override + public CredentialValidationResult validate(RememberMeCredential rmc) { + Optional user = this.userManager.getByLoginToken(rmc.getToken(), REMEMBER_ME); + + if (user.isPresent()) { + return new CredentialValidationResult(user.get().getEmail()); + } else { + return INVALID_RESULT; + } + } + + @Override + public String generateLoginToken(CallerPrincipal cp, Set set) { + return this.tokenManager.generate(cp.getName(), getRemoteAddr(request), getDescription(), REMEMBER_ME); + } + + @Override + public void removeLoginToken(String string) { + this.tokenManager.remove(string); + } + + private String getRemoteAddr(HttpServletRequest request){ + return request.getRemoteAddr(); + } + + private String getDescription() { + return "Remember me session: " + this.request.getHeader("User-Agent"); + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/ApplicationConfig.java b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/ApplicationConfig.java new file mode 100644 index 0000000..0e03486 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/ApplicationConfig.java @@ -0,0 +1,85 @@ +package httpauthenticationmechanism; + +import business.user.PersonManager; +import javax.annotation.PostConstruct; +import javax.ejb.EJB; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.inject.Named; +import javax.security.enterprise.AuthenticationStatus; +import javax.security.enterprise.authentication.mechanism.http.AutoApplySession; +import javax.security.enterprise.authentication.mechanism.http.CustomFormAuthenticationMechanismDefinition; +import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism; +import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext; +import javax.security.enterprise.authentication.mechanism.http.LoginToContinue; +import javax.security.enterprise.authentication.mechanism.http.RememberMe; +import javax.security.enterprise.credential.Credential; +import javax.security.enterprise.identitystore.IdentityStore; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + + +/** + * + * @author Patrick + */ +@AutoApplySession // For "Is user already logged-in?" +@RememberMe( + cookieMaxAgeSeconds = 60 * 60 * 24 * 14, // 14 days + cookieSecureOnly = false, // Remove this when login is served over HTTPS. + isRememberMeExpression = "#{self.isRememberMe(httpMessageContext)}" +) +@LoginToContinue( + loginPage = "/index.xhtml", + errorPage = "/error.xhtml", + useForwardToLogin = true +) +@ApplicationScoped +public class ApplicationConfig implements HttpAuthenticationMechanism{ + + final static Logger LOGGER = LogManager.getLogger(ApplicationConfig.class); + + public ApplicationConfig() { + } + + @Inject + private IdentityStore identityStore; + + @Inject + private ManagedPerson managedPerson; + + @EJB + private PersonManager personManager; + + @PostConstruct + private void init(){ + managedPerson.getLogins(); + personManager.demo(); + + System.out.println("PostConstruct DEMO"); + } + + @Override + public AuthenticationStatus validateRequest(HttpServletRequest req, HttpServletResponse res, HttpMessageContext context) { + + Credential credential = context.getAuthParameters().getCredential(); + + if (credential != null) { + return context.notifyContainerAboutLogin(this.identityStore.validate(credential)); + } else { + return context.doNothing(); + } + } + + // this was called on @RememberMe annotations + public Boolean isRememberMe(HttpMessageContext httpMessageContext) { + return httpMessageContext.getAuthParameters().isRememberMe(); + } + + @Override + public void cleanSubject(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) { + HttpAuthenticationMechanism.super.cleanSubject(request, response, httpMessageContext); + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/LogoutListener.java b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/LogoutListener.java new file mode 100644 index 0000000..088d77e --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/LogoutListener.java @@ -0,0 +1,40 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import javax.servlet.annotation.WebListener; +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import controller.person.PersonController; + + +/** + * + * @author Patrick + */ +@WebListener +public class LogoutListener implements HttpSessionListener{ + final static Logger LOGGER = LogManager.getLogger(LogoutListener.class); + + @Override + public void sessionCreated(HttpSessionEvent event) { + // NOOP. + } + + @Override + public void sessionDestroyed(HttpSessionEvent event) { + LOGGER.info("Session destroyed"); + PersonController userManager = (PersonController) event.getSession().getAttribute("user"); + String username = (String) event.getSession().getAttribute("realUsername"); + if (userManager != null && username != null) { + LOGGER.info("not nulls"); + userManager.getLogins().remove(username); + } + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/ManagedPerson.java b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/ManagedPerson.java new file mode 100644 index 0000000..8cf9081 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/httpauthenticationmechanism/ManagedPerson.java @@ -0,0 +1,45 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import java.util.HashSet; +import java.util.Set; +import javax.inject.Named; +import javax.enterprise.context.ApplicationScoped; + +/** + * + * @author Patrick + */ +@Named(value = "managedPerson") +@ApplicationScoped +public class ManagedPerson { + + private Set logins; + + /** + * Creates a new instance of ManagedCustomer + */ + public ManagedPerson() { + } + + public Set getLogins(){ + if (this.logins == null) { + this.logins = new HashSet<>(); + } + + return this.logins; + } + + public void addLogin(String user){ + getLogins().add(user); + } + + public void removeLogin(String user){ + getLogins().remove(user); + } + +} diff --git a/java/mss-failsafe/userManagement/src/main/java/model/AbstractEntity.java b/java/mss-failsafe/userManagement/src/main/java/model/AbstractEntity.java new file mode 100644 index 0000000..c61176a --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/model/AbstractEntity.java @@ -0,0 +1,89 @@ +package model; + + +import java.io.Serializable; +import java.time.LocalDateTime; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; + +/** + * + * @author Patrick Plate + */ +@MappedSuperclass +public class AbstractEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private LocalDateTime changedDate; + + private LocalDateTime creationDate; + + private boolean outdated; + + public AbstractEntity() { + this.creationDate = LocalDateTime.now(); + this.changedDate = this.creationDate; + this.outdated = false; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + if (object == null) { + return false; + } + if (!(object.getClass() == this.getClass())) { + return false; + } + AbstractEntity other = (AbstractEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + public boolean isOutdated() { + return outdated; + } + + public void setOutdated(boolean outdated) { + this.outdated = outdated; + } + + public LocalDateTime getChangedDate() { + return changedDate; + } + + public void setChangedDate(LocalDateTime changedDate) { + this.changedDate = changedDate; + } + + public void setCreationDate (LocalDateTime creationDate) { + this.creationDate = creationDate; + } + + public LocalDateTime getCreationDate() { + return creationDate; + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/model/person/Password.java b/java/mss-failsafe/userManagement/src/main/java/model/person/Password.java new file mode 100644 index 0000000..d784e91 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/model/person/Password.java @@ -0,0 +1,86 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person; + +import java.util.Arrays; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToOne; + +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@Entity +@NamedQueries({ + @NamedQuery(name = "Password.findByPassword", + query = "SELECT p FROM Password p WHERE p.password = :password"), + @NamedQuery(name = "Password.findByCostumerID", + query = "SELECT p FROM Password p WHERE p.person = :person") +}) +public class Password extends AbstractEntity { + private static final long serialVersionUID = -1924150926160449302L; + + @OneToOne + private Person person; + + @Column(name="password") + private byte[] password; + + public Password() { + } + + public Password (Person person, byte[] password) { + this.person = person; + this.password = password; + } + + public Person getPerson() { + return person; + } + + public byte[] getPassword() { + return password; + } + + public void setPassowrd(byte[] password){ + this.password = password; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 79 * hash + Objects.hashCode(this.person); + hash = 79 * hash + Arrays.hashCode(this.password); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Password other = (Password) obj; + if (!Objects.equals(this.person, other.person)) { + return false; + } + if (!Arrays.equals(this.password, other.password)) { + return false; + } + return true; + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/model/person/Person.java b/java/mss-failsafe/userManagement/src/main/java/model/person/Person.java new file mode 100644 index 0000000..d5db1e2 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/model/person/Person.java @@ -0,0 +1,215 @@ +package model.person; + +import model.person.enums.Call; +import java.io.Serializable; +import java.util.AbstractSet; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.persistence.*; + +import model.AbstractEntity; +import model.person.enums.UserGroup; + +/** + * Entity implementation class for Entity: User + * + */ +@Entity +@Inheritance(strategy = InheritanceType.JOINED) +@NamedQueries({ + @NamedQuery(name = Person.FIND_BY_EMAIL, + query = "SELECT p FROM Person p WHERE p.email = :email"), + @NamedQuery(name = Person.FIND_BY_ID, + query = "SELECT p FROM Person p WHERE p.id = :id"), + @NamedQuery(name = Person.FIND_BY_TOKEN, + query = "SELECT p FROM Person p inner join p.tokens t where t.tokenHash = :tokenHash and t.tokenType = :tokenType and t.expiration > :timestamp") +}) +public class Person extends AbstractEntity implements Serializable { + + public static final String FIND_BY_EMAIL = "Person.findByEmail"; + public static final String FIND_BY_ID = "Person.findByID"; + public static final String FIND_BY_TOKEN = "Person.findByToken"; + + private static final long serialVersionUID = 1L; + + @Column(name = "Email", unique = true, nullable = false) + private String email; + + @OneToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "Password_ID", nullable = false, unique = true) + private Password password; + + @OneToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "Salt_ID", nullable = false, unique = true) + private Salt salt; + + @Enumerated(EnumType.STRING) + @Column(name = "Anrede") + private Call call; + + @OneToMany(mappedBy = "person", orphanRemoval = true, cascade = CascadeType.ALL) + private List tokens; + + @ElementCollection(targetClass = UserGroup.class) + @Enumerated(EnumType.STRING) + @JoinTable(name = "UserGroups", joinColumns = @JoinColumn(name = "UserID")) + @Column(name = "UserGroups", nullable = false) + private Set userGroups; + + @Column(nullable = true) + private String telefon; + + @Column(nullable = true) + private String mobile; + + @Column(nullable = true) + private String fax; + + @Column(nullable = false) + private String firstname; + + @Column(nullable = true) + private String lastname; + + @Column(nullable = true) + private String title; + + @Column(nullable = true) + private boolean active; + + public Person() { + super(); + active = false; + } + + public Person(String email, byte[] password, Salt salt, Set usergroups) { + this.email = email; + this.tokens = new ArrayList<>(); + this.salt = salt; + this.password = new Password(this, password); + this.userGroups = usergroups; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Password getPassword() { + return password; + } + + public void setPassword(Password password) { + this.password = password; + } + + public Salt getSalt() { + return salt; + } + + public void setSalt(Salt salt) { + this.salt = salt; + } + + public Call getCall() { + return call; + } + + public void setCall(Call call) { + this.call = call; + } + + public String getTelefon() { + return telefon; + } + + public void setTelefon(String telefon) { + this.telefon = telefon; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getFax() { + return fax; + } + + public void setFax(String fax) { + this.fax = fax; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getTokens() { + return tokens; + } + + public void setTokens(List tokens) { + this.tokens = tokens; + } + + public void addToken(Token token) { + if (this.tokens == null) { + tokens = new ArrayList<>(); + } + + tokens.add(token); + } + + public Set getUserGroups() { + return userGroups; + } + + public void setUserGroups(Set userGroups) { + this.userGroups = userGroups; + } + + public void addGroup(UserGroup userGroup){ + if (this.userGroups == null) { + this.userGroups = new HashSet<>(); + } + + this.userGroups.add(userGroup); + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/model/person/Salt.java b/java/mss-failsafe/userManagement/src/main/java/model/person/Salt.java new file mode 100644 index 0000000..1a99251 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/model/person/Salt.java @@ -0,0 +1,79 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person; + +//import java.nio.charset.Charset; +import java.security.SecureRandom; +import java.util.Arrays; +import javax.persistence.Entity; + +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@Entity +public class Salt extends AbstractEntity { + + //private final Charset UTF8_CHARSET = Charset.forName("UTF-8"); + private static final long serialVersionUID = -1068077226987746862L; + private byte[] salt; + private int interations; + + public Salt() { + interations = 3072; + generateSalt(); + } + + private void generateSalt() { + SecureRandom random = new SecureRandom(); + byte bytes[] = new byte[64]; + random.nextBytes(bytes); + salt = bytes; + } + + public java.lang.String bytetoString(byte[] input) { + return Arrays.toString(input); + } + + public byte[] getSalt() { + return salt; + } + + public int getInterations() { + return interations; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 79 * hash + Arrays.hashCode(this.salt); + hash = 79 * hash + this.interations; + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Salt other = (Salt) obj; + if (this.interations != other.interations) { + return false; + } + if (!Arrays.equals(this.salt, other.salt)) { + return false; + } + return true; + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/model/person/Token.java b/java/mss-failsafe/userManagement/src/main/java/model/person/Token.java new file mode 100644 index 0000000..bb21f45 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/model/person/Token.java @@ -0,0 +1,153 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person; + +import model.person.enums.TokenType; +import static java.time.temporal.ChronoUnit.MONTHS; +import java.time.Instant; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.PrePersist; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@Entity +@Table(name = "token", uniqueConstraints = { + @UniqueConstraint(columnNames = {"token_hash"}) +}) +@NamedQueries({ + @NamedQuery(name = Token.REMOVE_TOKEN, query = "DELETE FROM Token t where t.tokenHash = :tokenHash"), + @NamedQuery(name = Token.REMOVE_EXPIRED_TOKEN, query = "DELETE FROM Token t where t.expiration < :timestamp") +}) +public class Token extends AbstractEntity { + + private static final long serialVersionUID = -6632692800064453512L; + public static final String REMOVE_TOKEN = "Token.removeToken"; + public static final String REMOVE_EXPIRED_TOKEN = "Token.removeExpiredToken"; + + @Column(name = "token_hash") + private String tokenHash; + + @Column(name = "token_type") + @Enumerated(EnumType.STRING) + private TokenType tokenType; + + @Column(name = "ip_address", length = 45) + private String ipAddress; + + private String description; + + private Instant created; + + private Instant expiration; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "account_id") + private Person person; + + public Token() { + } + + @PrePersist + public void generateInformation() { + this.created = Instant.now(); + if (this.expiration == null) { + this.expiration = this.created.plus(1, MONTHS); + } + } + + public String getTokenHash() { + return tokenHash; + } + + public void setTokenHash(String tokenHash) { + this.tokenHash = tokenHash; + } + + public TokenType getTokenType() { + return tokenType; + } + + public void setTokenType(TokenType tokenType) { + this.tokenType = tokenType; + } + + public String getIpAddress() { + return ipAddress; + } + + public void setIpAddress(String ipAddress) { + this.ipAddress = ipAddress; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Instant getCreated() { + return created; + } + + public void setCreated(Instant created) { + this.created = created; + } + + public Instant getExpiration() { + return expiration; + } + + public void setExpiration(Instant expiration) { + this.expiration = expiration; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } + + /* don't depend on natural identifier for equality checks, see: https://vladmihalcea.com/2017/03/29/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/#more-7143 */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + Token token = (Token) obj; + return Objects.equals(getId(), token.getId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId()); + } + + @Override + public String toString() { + return "Token{ id " + getId() + '}'; + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/model/person/enums/Call.java b/java/mss-failsafe/userManagement/src/main/java/model/person/enums/Call.java new file mode 100644 index 0000000..b190dbc --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/model/person/enums/Call.java @@ -0,0 +1,56 @@ +package model.person.enums; + +import java.util.Locale; + +public enum Call { + HERR(0), FRAU(1), DIVERS(2), UNBESTIMMT(3); + + private final int type; + private Locale locale = null; + + private Call(int type) { + this.type = type; + } + + public Locale getLocale() { + return locale; + } + + public void setLocale(Locale locale) { + this.locale = locale; + } + + public int getType() { + return type; + } + + @Override + public String toString() { + if (locale == null || Locale.GERMAN.equals(locale)) { + switch (this) { + case HERR: + return "Herr"; + case FRAU: + return "Frau"; + case DIVERS: + return "Divers"; + case UNBESTIMMT: + return "Unbestimmt"; + } + } + + if (locale.equals(Locale.ENGLISH)) { + switch (this) { + case HERR: + return "Mr"; + case FRAU: + return "Mrs"; + case DIVERS: + return "divers"; + case UNBESTIMMT: + return "unknown"; + } + } + return super.toString(); + } +} diff --git a/java/mss-failsafe/userManagement/src/main/java/model/person/enums/TokenType.java b/java/mss-failsafe/userManagement/src/main/java/model/person/enums/TokenType.java new file mode 100644 index 0000000..e592454 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/model/person/enums/TokenType.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person.enums; + +/** + * + * @author Patrick + */ +public enum TokenType { + REMEMBER_ME, + API, + RESET_PASSWORD, + FILE +} diff --git a/java/mss-failsafe/userManagement/src/main/java/model/person/enums/UserGroup.java b/java/mss-failsafe/userManagement/src/main/java/model/person/enums/UserGroup.java new file mode 100644 index 0000000..6aba03b --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/java/model/person/enums/UserGroup.java @@ -0,0 +1,16 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person.enums; + +/** + * + * @author patri + */ +public enum UserGroup { + USER, + ADMIN, + CUSTOMER; +} diff --git a/java/mss-failsafe/userManagement/src/main/resources/META-INF/persistence.xml b/java/mss-failsafe/userManagement/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..e9b1e5c --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,14 @@ + + + + + java:/mss-failsave + model.person.Token + model.person.Salt + model.person.Person + model.person.Password + + + + + diff --git a/java/mss-failsafe/userManagement/src/main/webapp/WEB-INF/jboss-app.xml b/java/mss-failsafe/userManagement/src/main/webapp/WEB-INF/jboss-app.xml new file mode 100644 index 0000000..a3ea92f --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/webapp/WEB-INF/jboss-app.xml @@ -0,0 +1,6 @@ + + mss-failsafe + diff --git a/java/mss-failsafe/userManagement/src/main/webapp/WEB-INF/jboss-web.xml b/java/mss-failsafe/userManagement/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..4f89b44 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /userManagement-1.0-SNAPSHOT + jaspitest + \ No newline at end of file diff --git a/java/mss-failsafe/userManagement/src/main/webapp/WEB-INF/web.xml b/java/mss-failsafe/userManagement/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..1b91148 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,90 @@ + + + + /index.xhtml + + + + 401 + /error.xhtml + + + + 403 + /error.xhtml + + + + authorise + /user/* + GET + POST + TRACE + HEAD + DELETE + CONNECT + OPTIONS + PUT + + + ADMIN + USER + + + + + + authorise + /admin/* + GET + POST + TRACE + HEAD + DELETE + CONNECT + OPTIONS + PUT + + + ADMIN + + + + + Normal User which got invited + USER + + + Admin user who can change entries, invite new domains and more.. + ADMIN + + + javax.faces.PROJECT_STAGE + Development + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + *.xhtml + + + + 30 + + + true + + + COOKIE + + + diff --git a/java/mss-failsafe/userManagement/src/main/webapp/admin/welcome.xhtml b/java/mss-failsafe/userManagement/src/main/webapp/admin/welcome.xhtml new file mode 100644 index 0000000..c4393e2 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/webapp/admin/welcome.xhtml @@ -0,0 +1,14 @@ + + + + Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname} + + + +

Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname}

+ +
+ \ No newline at end of file diff --git a/java/mss-failsafe/userManagement/src/main/webapp/error.xhtml b/java/mss-failsafe/userManagement/src/main/webapp/error.xhtml new file mode 100644 index 0000000..0e553ba --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/webapp/error.xhtml @@ -0,0 +1,13 @@ + + + Error Testpage + + + +

Error!

+ +
+ diff --git a/java/mss-failsafe/userManagement/src/main/webapp/index.xhtml b/java/mss-failsafe/userManagement/src/main/webapp/index.xhtml new file mode 100644 index 0000000..67f9887 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/webapp/index.xhtml @@ -0,0 +1,33 @@ + + + Login Testpage + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/mss-failsafe/userManagement/src/main/webapp/user/welcome.xhtml b/java/mss-failsafe/userManagement/src/main/webapp/user/welcome.xhtml new file mode 100644 index 0000000..c4393e2 --- /dev/null +++ b/java/mss-failsafe/userManagement/src/main/webapp/user/welcome.xhtml @@ -0,0 +1,14 @@ + + + + Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname} + + + +

Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname}

+ +
+ \ No newline at end of file diff --git a/java/mss-failsafe/userManagement/target/classes/META-INF/persistence.xml b/java/mss-failsafe/userManagement/target/classes/META-INF/persistence.xml new file mode 100644 index 0000000..e9b1e5c --- /dev/null +++ b/java/mss-failsafe/userManagement/target/classes/META-INF/persistence.xml @@ -0,0 +1,14 @@ + + + + + java:/mss-failsave + model.person.Token + model.person.Salt + model.person.Person + model.person.Password + + + + + diff --git a/java/mss-failsafe/userManagement/target/classes/business/user/DemoManager.class b/java/mss-failsafe/userManagement/target/classes/business/user/DemoManager.class new file mode 100644 index 0000000..87f278b Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/business/user/DemoManager.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/business/user/PasswordManager.class b/java/mss-failsafe/userManagement/target/classes/business/user/PasswordManager.class new file mode 100644 index 0000000..5b8b520 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/business/user/PasswordManager.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/business/user/PersonManager.class b/java/mss-failsafe/userManagement/target/classes/business/user/PersonManager.class new file mode 100644 index 0000000..dea588c Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/business/user/PersonManager.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/business/user/TokenManager.class b/java/mss-failsafe/userManagement/target/classes/business/user/TokenManager.class new file mode 100644 index 0000000..96b0627 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/business/user/TokenManager.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/controller/AbstractController.class b/java/mss-failsafe/userManagement/target/classes/controller/AbstractController.class new file mode 100644 index 0000000..c6d9def Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/controller/AbstractController.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/controller/person/PersonController.class b/java/mss-failsafe/userManagement/target/classes/controller/person/PersonController.class new file mode 100644 index 0000000..036c8b5 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/controller/person/PersonController.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/exception/AbstractBusinessException.class b/java/mss-failsafe/userManagement/target/classes/exception/AbstractBusinessException.class new file mode 100644 index 0000000..0652e95 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/exception/AbstractBusinessException.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/exception/InvalidCredentialException.class b/java/mss-failsafe/userManagement/target/classes/exception/InvalidCredentialException.class new file mode 100644 index 0000000..c12b152 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/exception/InvalidCredentialException.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/exception/InvalidEmailException.class b/java/mss-failsafe/userManagement/target/classes/exception/InvalidEmailException.class new file mode 100644 index 0000000..b017770 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/exception/InvalidEmailException.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/exception/InvalidPasswordException.class b/java/mss-failsafe/userManagement/target/classes/exception/InvalidPasswordException.class new file mode 100644 index 0000000..98f0fd6 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/exception/InvalidPasswordException.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/exception/PersonInaktiveException.class b/java/mss-failsafe/userManagement/target/classes/exception/PersonInaktiveException.class new file mode 100644 index 0000000..b0537c9 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/exception/PersonInaktiveException.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/AppIdentityStore.class b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/AppIdentityStore.class new file mode 100644 index 0000000..8c31297 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/AppIdentityStore.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/AppRememberMeIdentityStore.class b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/AppRememberMeIdentityStore.class new file mode 100644 index 0000000..7868e7c Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/AppRememberMeIdentityStore.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/ApplicationConfig.class b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/ApplicationConfig.class new file mode 100644 index 0000000..958ffae Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/ApplicationConfig.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/LogoutListener.class b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/LogoutListener.class new file mode 100644 index 0000000..9826989 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/LogoutListener.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/ManagedPerson.class b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/ManagedPerson.class new file mode 100644 index 0000000..e33f70d Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/httpauthenticationmechanism/ManagedPerson.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/model/AbstractEntity.class b/java/mss-failsafe/userManagement/target/classes/model/AbstractEntity.class new file mode 100644 index 0000000..3d32f2a Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/model/AbstractEntity.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/model/person/Password.class b/java/mss-failsafe/userManagement/target/classes/model/person/Password.class new file mode 100644 index 0000000..774ba96 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/model/person/Password.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/model/person/Person.class b/java/mss-failsafe/userManagement/target/classes/model/person/Person.class new file mode 100644 index 0000000..2174a38 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/model/person/Person.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/model/person/Salt.class b/java/mss-failsafe/userManagement/target/classes/model/person/Salt.class new file mode 100644 index 0000000..b7855ef Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/model/person/Salt.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/model/person/Token.class b/java/mss-failsafe/userManagement/target/classes/model/person/Token.class new file mode 100644 index 0000000..46de5a5 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/model/person/Token.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/model/person/enums/Call$1.class b/java/mss-failsafe/userManagement/target/classes/model/person/enums/Call$1.class new file mode 100644 index 0000000..a33eddc Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/model/person/enums/Call$1.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/model/person/enums/Call.class b/java/mss-failsafe/userManagement/target/classes/model/person/enums/Call.class new file mode 100644 index 0000000..d547c60 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/model/person/enums/Call.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/model/person/enums/TokenType.class b/java/mss-failsafe/userManagement/target/classes/model/person/enums/TokenType.class new file mode 100644 index 0000000..80beda2 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/model/person/enums/TokenType.class differ diff --git a/java/mss-failsafe/userManagement/target/classes/model/person/enums/UserGroup.class b/java/mss-failsafe/userManagement/target/classes/model/person/enums/UserGroup.class new file mode 100644 index 0000000..1242af8 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/classes/model/person/enums/UserGroup.class differ diff --git a/java/mss-failsafe/userManagement/target/endorsed/javaee-api-8.0.jar b/java/mss-failsafe/userManagement/target/endorsed/javaee-api-8.0.jar new file mode 100644 index 0000000..1045b8f Binary files /dev/null and b/java/mss-failsafe/userManagement/target/endorsed/javaee-api-8.0.jar differ diff --git a/java/mss-failsafe/userManagement/target/maven-archiver/pom.properties b/java/mss-failsafe/userManagement/target/maven-archiver/pom.properties new file mode 100644 index 0000000..b8fed52 --- /dev/null +++ b/java/mss-failsafe/userManagement/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Sat Oct 09 18:48:13 CEST 2021 +groupId=plate.software +artifactId=userManagement +version=1.0-SNAPSHOT diff --git a/java/mss-failsafe/userManagement/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/java/mss-failsafe/userManagement/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..795ec9e --- /dev/null +++ b/java/mss-failsafe/userManagement/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,25 @@ +model\person\Password.class +httpauthenticationmechanism\AppRememberMeIdentityStore.class +model\person\enums\Call.class +business\user\PersonManager.class +business\user\TokenManager.class +exception\InvalidPasswordException.class +model\person\Salt.class +httpauthenticationmechanism\LogoutListener.class +httpauthenticationmechanism\ManagedPerson.class +exception\PersonInaktiveException.class +model\person\enums\UserGroup.class +controller\AbstractController.class +business\user\PasswordManager.class +model\person\enums\Call$1.class +controller\person\PersonController.class +exception\AbstractBusinessException.class +httpauthenticationmechanism\AppIdentityStore.class +model\person\enums\TokenType.class +httpauthenticationmechanism\ApplicationConfig.class +model\person\Person.class +business\user\DemoManager.class +model\AbstractEntity.class +exception\InvalidEmailException.class +model\person\Token.class +exception\InvalidCredentialException.class diff --git a/java/mss-failsafe/userManagement/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/java/mss-failsafe/userManagement/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..51539c4 --- /dev/null +++ b/java/mss-failsafe/userManagement/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,24 @@ +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\model\person\Person.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\httpauthenticationmechanism\LogoutListener.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\model\person\enums\TokenType.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\model\person\Token.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\business\user\PasswordManager.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\exception\InvalidEmailException.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\httpauthenticationmechanism\ApplicationConfig.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\model\person\enums\UserGroup.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\model\AbstractEntity.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\controller\AbstractController.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\exception\InvalidCredentialException.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\httpauthenticationmechanism\AppIdentityStore.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\httpauthenticationmechanism\AppRememberMeIdentityStore.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\exception\PersonInaktiveException.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\httpauthenticationmechanism\ManagedPerson.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\model\person\enums\Call.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\business\user\TokenManager.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\model\person\Salt.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\business\user\DemoManager.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\model\person\Password.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\exception\InvalidPasswordException.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\business\user\PersonManager.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\controller\person\PersonController.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userManagement\src\main\java\exception\AbstractBusinessException.java diff --git a/bigmind/bigmind/__init__.py b/java/mss-failsafe/userManagement/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst similarity index 100% rename from bigmind/bigmind/__init__.py rename to java/mss-failsafe/userManagement/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT-classes.jar b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT-classes.jar new file mode 100644 index 0000000..b68c2d7 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT-classes.jar differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT.war b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT.war new file mode 100644 index 0000000..2937248 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT.war differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/META-INF/persistence.xml b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/META-INF/persistence.xml new file mode 100644 index 0000000..e9b1e5c --- /dev/null +++ b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/META-INF/persistence.xml @@ -0,0 +1,14 @@ + + + + + java:/mss-failsave + model.person.Token + model.person.Salt + model.person.Person + model.person.Password + + + + + diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/DemoManager.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/DemoManager.class new file mode 100644 index 0000000..87f278b Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/DemoManager.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/PasswordManager.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/PasswordManager.class new file mode 100644 index 0000000..5b8b520 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/PasswordManager.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/PersonManager.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/PersonManager.class new file mode 100644 index 0000000..dea588c Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/PersonManager.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/TokenManager.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/TokenManager.class new file mode 100644 index 0000000..96b0627 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/business/user/TokenManager.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/controller/AbstractController.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/controller/AbstractController.class new file mode 100644 index 0000000..c6d9def Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/controller/AbstractController.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/controller/person/PersonController.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/controller/person/PersonController.class new file mode 100644 index 0000000..449da8c Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/controller/person/PersonController.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/AbstractBusinessException.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/AbstractBusinessException.class new file mode 100644 index 0000000..0652e95 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/AbstractBusinessException.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/InvalidCredentialException.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/InvalidCredentialException.class new file mode 100644 index 0000000..c12b152 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/InvalidCredentialException.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/InvalidEmailException.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/InvalidEmailException.class new file mode 100644 index 0000000..b017770 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/InvalidEmailException.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/InvalidPasswordException.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/InvalidPasswordException.class new file mode 100644 index 0000000..98f0fd6 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/InvalidPasswordException.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/PersonInaktiveException.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/PersonInaktiveException.class new file mode 100644 index 0000000..b0537c9 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/exception/PersonInaktiveException.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/AppIdentityStore.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/AppIdentityStore.class new file mode 100644 index 0000000..8c31297 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/AppIdentityStore.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/AppRememberMeIdentityStore.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/AppRememberMeIdentityStore.class new file mode 100644 index 0000000..7868e7c Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/AppRememberMeIdentityStore.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/ApplicationConfig.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/ApplicationConfig.class new file mode 100644 index 0000000..958ffae Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/ApplicationConfig.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/LogoutListener.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/LogoutListener.class new file mode 100644 index 0000000..9826989 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/LogoutListener.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/ManagedPerson.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/ManagedPerson.class new file mode 100644 index 0000000..e33f70d Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/httpauthenticationmechanism/ManagedPerson.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/AbstractEntity.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/AbstractEntity.class new file mode 100644 index 0000000..3d32f2a Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/AbstractEntity.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Password.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Password.class new file mode 100644 index 0000000..774ba96 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Password.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Person.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Person.class new file mode 100644 index 0000000..2174a38 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Person.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Salt.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Salt.class new file mode 100644 index 0000000..b7855ef Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Salt.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Token.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Token.class new file mode 100644 index 0000000..46de5a5 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/Token.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/Call$1.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/Call$1.class new file mode 100644 index 0000000..a33eddc Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/Call$1.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/Call.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/Call.class new file mode 100644 index 0000000..d547c60 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/Call.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/TokenType.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/TokenType.class new file mode 100644 index 0000000..80beda2 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/TokenType.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/UserGroup.class b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/UserGroup.class new file mode 100644 index 0000000..1242af8 Binary files /dev/null and b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/classes/model/person/enums/UserGroup.class differ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/jboss-app.xml b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/jboss-app.xml new file mode 100644 index 0000000..a3ea92f --- /dev/null +++ b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/jboss-app.xml @@ -0,0 +1,6 @@ + + mss-failsafe + diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/jboss-web.xml b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..4f89b44 --- /dev/null +++ b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/jboss-web.xml @@ -0,0 +1,5 @@ + + + /userManagement-1.0-SNAPSHOT + jaspitest + \ No newline at end of file diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/web.xml b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/web.xml new file mode 100644 index 0000000..1b91148 --- /dev/null +++ b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WEB-INF/web.xml @@ -0,0 +1,90 @@ + + + + /index.xhtml + + + + 401 + /error.xhtml + + + + 403 + /error.xhtml + + + + authorise + /user/* + GET + POST + TRACE + HEAD + DELETE + CONNECT + OPTIONS + PUT + + + ADMIN + USER + + + + + + authorise + /admin/* + GET + POST + TRACE + HEAD + DELETE + CONNECT + OPTIONS + PUT + + + ADMIN + + + + + Normal User which got invited + USER + + + Admin user who can change entries, invite new domains and more.. + ADMIN + + + javax.faces.PROJECT_STAGE + Development + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + *.xhtml + + + + 30 + + + true + + + COOKIE + + + diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WildFly.dpf b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WildFly.dpf new file mode 100644 index 0000000..800e6b7 --- /dev/null +++ b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/WildFly.dpf @@ -0,0 +1,5 @@ + + + /userManagement-1.0-SNAPSHOT + jaspitest + diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/admin/welcome.xhtml b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/admin/welcome.xhtml new file mode 100644 index 0000000..c4393e2 --- /dev/null +++ b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/admin/welcome.xhtml @@ -0,0 +1,14 @@ + + + + Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname} + + + +

Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname}

+ +
+ \ No newline at end of file diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/error.xhtml b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/error.xhtml new file mode 100644 index 0000000..0e553ba --- /dev/null +++ b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/error.xhtml @@ -0,0 +1,13 @@ + + + Error Testpage + + + +

Error!

+ +
+ diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/index.xhtml b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/index.xhtml new file mode 100644 index 0000000..67f9887 --- /dev/null +++ b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/index.xhtml @@ -0,0 +1,33 @@ + + + Login Testpage + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/user/welcome.xhtml b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/user/welcome.xhtml new file mode 100644 index 0000000..c4393e2 --- /dev/null +++ b/java/mss-failsafe/userManagement/target/userManagement-1.0-SNAPSHOT/user/welcome.xhtml @@ -0,0 +1,14 @@ + + + + Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname} + + + +

Willkommen #{personController.activeUser.call.toString()} #{personController.activeUser.lastname}

+ +
+ \ No newline at end of file diff --git a/java/mss-failsafe/userdata/pom.xml b/java/mss-failsafe/userdata/pom.xml new file mode 100644 index 0000000..fac089e --- /dev/null +++ b/java/mss-failsafe/userdata/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + plate.software + mss-failsafe + 1.0-SNAPSHOT + + userdata + jar + + 11 + 11 + false + 8.0 + + + + + javax + javaee-api + ${jakartaee} + provided + + + org.apache.pdfbox + pdfbox + 2.0.13 + + + org.glassfish.soteria + javax.security.enterprise + 1.0 + + + org.omnifaces + omnifaces + 3.11.1 + + + + javax + javaee-web-api + 8.0 + provided + + + org.glassfish + javax.faces + 2.3.0 + provided + + + org.apache.logging.log4j + log4j-api + 2.14.1 + + + org.apache.logging.log4j + log4j-core + 2.14.1 + + + + org.primefaces + primefaces + 10.0.0 + + + \ No newline at end of file diff --git a/java/mss-failsafe/userdata/src/main/java/business/user/DemoManager.java b/java/mss-failsafe/userdata/src/main/java/business/user/DemoManager.java new file mode 100644 index 0000000..4668387 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/business/user/DemoManager.java @@ -0,0 +1,36 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import javax.ejb.EJB; +import javax.ejb.Startup; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Named; + +/** + * + * @author patri + */ +@Named(value = "DemoManager") +@ApplicationScoped +@Startup +public class DemoManager { + + @EJB + PersonManager personManager; + + /** + * Creates a new instance of NewJSFManagedBean + */ + public DemoManager() { + runDemos(); + } + + private void runDemos(){ + personManager.demo(); + } + +} diff --git a/java/mss-failsafe/userdata/src/main/java/business/user/PasswordManager.java b/java/mss-failsafe/userdata/src/main/java/business/user/PasswordManager.java new file mode 100644 index 0000000..fa08f23 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/business/user/PasswordManager.java @@ -0,0 +1,174 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import java.io.Serializable; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.spec.InvalidKeySpecException; +import java.util.Arrays; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.ejb.Stateless; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.transaction.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import model.person.Password; +import model.person.Salt; +import model.person.Person; + +/** + * + * @author Patrick + */ +@Named(value = "passwordManager") +@Stateless +public class PasswordManager implements Serializable { + private static final long serialVersionUID = -4563304131856981259L; + + final static Logger LOGGER = LogManager.getLogger(PasswordManager.class); + + @PersistenceContext(name = "pu_person") + private EntityManager em; + + //private Password password; + private Person user; + + private final int keyLength = 256; + + public byte[] hashPassword(final char[] password, final byte[] salt, final int iterations) { + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + PBEKeySpec spec = new PBEKeySpec(password, salt, iterations, this.keyLength); + SecretKey key = skf.generateSecret(spec); + //this.password = new Password(this.costumer, key.getEncoded()); + LOGGER.debug("Hash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + LOGGER.error("Failure creating hash for with:" + e); + return null; + //throw new RuntimeException( e ); + } + } + + public byte[] hashPasswordUser(final char[] password, Person user) { + + if (user == null) { + LOGGER.error("Tried to create hash for Nullcostumer!"); + return null; + } + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + PBEKeySpec spec = new PBEKeySpec(password, user.getSalt().getSalt(), user.getSalt().getInterations(), keyLength); + SecretKey key = skf.generateSecret(spec); + LOGGER.debug("Hash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + LOGGER.error("Failure creating hash for" + user.getEmail() + "with: " + e); + return null; + } + } + + public boolean passwordCheckEmail(final String email, final byte[] password) { + TypedQuery query = em.createNamedQuery(Person.FIND_BY_EMAIL, Person.class); + query.setParameter("email", email); + try { + Person user; + user = query.getSingleResult(); + + boolean equals = Arrays.equals(password, user.getPassword().getPassword()); + + for (int i = 0; i < password.length; i++) { + password[i] = 0; + } + + return equals; + } catch (NoResultException e) { + return false; + } + } + + @Transactional + public boolean passwordCheckCustomer(final Person user, final String password) { + LOGGER.debug("Test " + user.getEmail() + " mit " + password); + byte[] pw = hashPasswordUser(password.toCharArray(), user); + + boolean equals = Arrays.equals(pw, user.getPassword().getPassword()); + + for (int i = 0; i < pw.length; i++) { + pw[i] = 0; + } + + return equals; + + } + + public boolean changePassword(Person user, String newPassword, String oldPassword) { + if (user == null) { + LOGGER.error("Nullcostumer tried to change Password"); + return false; + } + + if(passwordCheckCustomer(user, oldPassword)){ + user.getPassword().setPassowrd(hashPasswordUser(newPassword.toCharArray(), user)); + LOGGER.info("Password changed for " + user.getEmail()); + } else { + return false; + } + + try { + em.persist(user); + LOGGER.info("Password changed for " + user.getEmail()); + return true; + } catch (Exception e) { + LOGGER.error("Couldn't save new password to " + user.getEmail() + " with: " + e.toString()); + return false; + } + } + + public byte[] generateRandomPassword() { + SecureRandom random = new SecureRandom(); + byte bytes[] = new byte[20]; + random.nextBytes(bytes); + return bytes; + } + + public Password gerateNewRandomPasswordClass(Person user){ + Salt salt = user.getSalt(); + String pass = Arrays.toString(generateRandomPassword()); + return new Password(user, hashPassword(pass.toCharArray(), salt.getSalt(), salt.getInterations())); + } + + public byte[] hashToken(String token){ + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] test = "SuperTestSalz".getBytes(); + PBEKeySpec spec = new PBEKeySpec(token.toCharArray(), test, 200, this.keyLength); + SecretKey key = skf.generateSecret(spec); + LOGGER.debug("TokenHash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + LOGGER.error("Failure creating tokenhash for " + token + " with: " + e); + return null; + } + } + + public Person getUser() { + return user; + } + + public void setUser(Person user) { + this.user = user; + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/business/user/PersonManager.java b/java/mss-failsafe/userdata/src/main/java/business/user/PersonManager.java new file mode 100644 index 0000000..c826c66 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/business/user/PersonManager.java @@ -0,0 +1,229 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import java.io.Serializable; +import java.time.Instant; +import java.util.Optional; +import javax.ejb.EJB; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import javax.transaction.Transactional; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import controller.person.PersonController; +import exception.InvalidEmailException; +import exception.InvalidPasswordException; +import exception.PersonInaktiveException; +import java.util.HashSet; +import java.util.Set; +import model.person.Salt; +import model.person.enums.TokenType; +import model.person.Person; +import model.person.enums.UserGroup; + +/** + * + * @author Patrick + */ +@Named +@Stateless +public class PersonManager implements Serializable { + + private static final long serialVersionUID = -6581582446436303658L; + + final static Logger LOGGER = LogManager.getLogger(PersonManager.class); + + @EJB + private PasswordManager passwordManager; + + @Inject + private PersonController userController; + + @PersistenceContext(name = "pu_person", type = PersistenceContextType.EXTENDED) + private EntityManager em; + + @Transactional + public void demo() { + Salt salt = new Salt(); + Salt salt2 = new Salt(); + Salt salt3 = new Salt(); + + Set groupUser = new HashSet<>(); + groupUser.add(UserGroup.USER); + + Set adminUser = new HashSet<>(); + adminUser.add(UserGroup.ADMIN); + + Person test = new Person( + "user@test.de", + (passwordManager.hashPassword("test".toCharArray(), salt.getSalt(), salt.getInterations())), + salt, + groupUser + ); + + test.setFirstname("User"); + test.setLastname("Nachname"); + test.setMobile("0124584589"); + test.setFax("3445565675"); + test.setTelefon("042154585"); + test.setActive(true); + em.persist(test); + + Person testAdmin = new Person( + "admin@test.de", + (passwordManager.hashPassword("admin".toCharArray(), salt2.getSalt(), salt2.getInterations())), + salt2, + adminUser + ); + + testAdmin.setFirstname("Admin"); + testAdmin.setLastname("Administratori"); + testAdmin.setMobile("0124584589"); + testAdmin.setFax("3445565675"); + testAdmin.setTelefon("042154585"); + testAdmin.setActive(true); + em.persist(testAdmin); + + Person testInactive = new Person( + "inaktive@test.de", + (passwordManager.hashPassword("test".toCharArray(), salt3.getSalt(), salt3.getInterations())), + salt3, + groupUser + ); + + testInactive.setFirstname("Admin"); + testInactive.setLastname("Administratori"); + testInactive.setMobile("0124584589"); + testInactive.setFax("3445565675"); + testInactive.setTelefon("042154585"); + testInactive.setActive(false); + em.persist(testInactive); + } + + @Transactional + public Person load(Person user) { + try { + Person loaded = this.em.find(Person.class, user.getId()); + LOGGER.info(loaded); + + return loaded; + } catch (Exception e) { + LOGGER.error("Error", e); + return null; + } + } + + @Transactional + public Person getActiveUser() { + try { + Person user = em.find(Person.class, userController.getActiveUser().getId()); + return user; + } catch (Exception e) { + LOGGER.error("couldn't load user: " + e); + return null; + } + } + + @Transactional + public Person getPlainActiveUser() { + try { + Person user = em.find(Person.class, userController.getActiveUser().getId()); + return user; + } catch (Exception e) { + LOGGER.error("couldn't load user: " + e); + return null; + } + } + + public Optional getByEmail(String email) { + try { + Person person = this.em.createNamedQuery(Person.FIND_BY_EMAIL, Person.class) + .setParameter("email", email).getSingleResult(); + + if (person != null) { + person.getUserGroups().size(); + } + + return Optional.of(person); + } catch (Exception e) { + return Optional.empty(); + } + } + + public Optional getByLoginToken(String loginToken, TokenType tokenType) { + Optional optional; + try { + + optional = Optional.of(this.em.createNamedQuery(Person.FIND_BY_TOKEN, Person.class) + .setParameter("tokenHash", this.passwordManager.hashToken(loginToken)) + .setParameter("tokenType", tokenType) + .setParameter("timestamp", Instant.now()) + .getSingleResult() + ); + return optional; + } catch (Exception e) { + return Optional.empty(); + } + } + + public Person getByEmailAndPassword(String email, String password) { + Person managedUser = getByEmail(email).orElseThrow(InvalidEmailException::new); + LOGGER.debug("Loaded " + managedUser.getEmail()); + if (!passwordManager.passwordCheckCustomer(managedUser, password)) { + throw new InvalidPasswordException(); + } + if (!managedUser.isActive()) { + throw new PersonInaktiveException(); + } + userController.setActiveUser(managedUser); + return managedUser; + } + + @Transactional + public boolean save(Person user) { + if (user == null) { + LOGGER.error("Tried to save null or Nullcustomer"); + return false; + } + try { + if (user.getId() != null && user.getId() > 0) { + em.merge(user); + } else { + em.persist(user); + } + LOGGER.info("Saved " + user.getEmail()); + return true; + } catch (Exception e) { + LOGGER.error("Tried to save " + user.getEmail() + " with error: " + e); + return false; + } + } + + public void refresh(Person user) { + if (user == null) { + LOGGER.error("Tried to save null or Nullcustomer"); + return; + } + + try { + em.refresh(user); + } catch (Exception e) { + LOGGER.error("Tried to refresh " + user.getEmail() + " with error: " + e); + } + } + + public String resetPassword() { + //TODO + return null; + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/business/user/TokenManager.java b/java/mss-failsafe/userdata/src/main/java/business/user/TokenManager.java new file mode 100644 index 0000000..677a71b --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/business/user/TokenManager.java @@ -0,0 +1,91 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package business.user; + +import java.time.Instant; +import static java.time.temporal.ChronoUnit.DAYS; +import static java.util.UUID.randomUUID; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import exception.InvalidEmailException; +import model.person.Token; +import model.person.enums.TokenType; +import model.person.Person; + +import java.util.Arrays; +import static java.time.Instant.now; + +/** + * + * @author Patrick + */ +@Stateless +public class TokenManager { + + @PersistenceContext(name = "pu_person") + private EntityManager em; + + @Inject + PasswordManager passwordManager; + + @Inject + PersonManager customerManager; + + public String generate(final String email, final String ipAddress, final String description, + final TokenType tokenType) { + + String rawToken = randomUUID().toString(); + Instant expiration = now().plus(14, DAYS); + + save(rawToken, email, ipAddress, description, tokenType, expiration); + + return rawToken; + } + + public String generateFileToken(final String email, final String description) { + + String rawToken = randomUUID().toString(); + Instant expiration = now().plus(3, DAYS); + + save(rawToken, email, null, description, TokenType.FILE, expiration); + + return rawToken; + } + + public void save(final String rawToken, final String email, final String ipAddress, + final String description, final TokenType tokenType, final Instant expiration) { + + Person user = this.customerManager.getByEmail(email) + .orElseThrow(InvalidEmailException::new); + + Token token = new Token(); + + token.setTokenHash(Arrays.toString(this.passwordManager.hashToken(rawToken))); + token.setExpiration(expiration); + token.setDescription(description); + token.setTokenType(tokenType); + token.setIpAddress(ipAddress); + + user.addToken(token); + + this.em.persist(user); + } + + public void remove(String token) { + this.em.createNamedQuery(Token.REMOVE_TOKEN) + .setParameter("tokenHash", token).executeUpdate(); + } + + public void removeExpired() { + + this.em.createNamedQuery(Token.REMOVE_EXPIRED_TOKEN) + .setParameter("timestamp", Instant.now()) + .executeUpdate(); + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/controller/AbstractController.java b/java/mss-failsafe/userdata/src/main/java/controller/AbstractController.java new file mode 100644 index 0000000..5b04e75 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/controller/AbstractController.java @@ -0,0 +1,53 @@ +package controller; +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + + +import java.io.Serializable; +import javax.faces.application.FacesMessage; +import javax.faces.context.FacesContext; + +/** + * + * @author Patrick + */ +public abstract class AbstractController implements Serializable{ + private static final long serialVersionUID = -5908716187853409719L; + + protected void sendInfoMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_INFO, title, message); + addMessage(facesMessage); + } + + protected void sendWarnMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_WARN, title, message); + addMessage(facesMessage); + } + + protected void sendErrorMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_ERROR, title, message); + addMessage(facesMessage); + } + + protected void sendFatalMessage(String title, String message){ + FacesMessage facesMessage = new FacesMessage( + FacesMessage.SEVERITY_FATAL, title, message); + addMessage(facesMessage); + } + + private void addMessage(FacesMessage message) { + FacesContext.getCurrentInstance().addMessage(null, message); + } + + protected void errorMessage() { + String title = "Fehler!"; + String info = "Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut!"; + sendErrorMessage(title, info); + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/controller/person/PersonController.java b/java/mss-failsafe/userdata/src/main/java/controller/person/PersonController.java new file mode 100644 index 0000000..5642f07 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/controller/person/PersonController.java @@ -0,0 +1,173 @@ +package controller.person; + +import javax.enterprise.context.SessionScoped; +import javax.faces.context.FacesContext; +import javax.inject.Inject; +import javax.inject.Named; +import javax.security.enterprise.AuthenticationStatus; +import javax.security.enterprise.SecurityContext; +import javax.security.enterprise.credential.Password; +import javax.security.enterprise.credential.UsernamePasswordCredential; +import javax.servlet.http.HttpSession; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import controller.AbstractController; +import exception.InvalidEmailException; +import exception.InvalidPasswordException; +import exception.PersonInaktiveException; +import httpauthenticationmechanism.ManagedPerson; +import model.person.Person; + +import static javax.security.enterprise.AuthenticationStatus.SEND_FAILURE; +import static javax.security.enterprise.AuthenticationStatus.SUCCESS; + +import java.io.Serializable; +import java.util.Set; +import static javax.security.enterprise.authentication.mechanism.http.AuthenticationParameters.withParams; +import model.person.enums.UserGroup; +import org.omnifaces.cdi.Param; +import static org.omnifaces.util.Faces.getRequest; +import static org.omnifaces.util.Faces.getResponse; +import static org.omnifaces.util.Faces.redirect; + +/** + * + * @author Patrick + */ +@Named +@SessionScoped +public class PersonController extends AbstractController implements Serializable { + + private static final long serialVersionUID = -2257766986862616262L; + final static Logger LOGGER = LogManager.getLogger(PersonController.class); + private String username; + private String password; + private boolean rememberMe = false; + + @Inject + SecurityContext securityContext; + + @Inject + ManagedPerson managedPerson; + + @Param(name = "continue") // Defined in @LoginToContinue of SecurityFormAuthenticationMechanism + private boolean loginToContinue; + + private Person activePerson; + + public PersonController() { + + } + + public String submit() { + + try { + // credential that want to be validate was UsernamePasswordCredential + UsernamePasswordCredential credential = new UsernamePasswordCredential(username, new Password(password)); + + // this will call our security configuration to authorize the user + AuthenticationStatus status = securityContext.authenticate( + getRequest(), + getResponse(), + withParams() + .credential(credential) + .newAuthentication(!loginToContinue) + .rememberMe(rememberMe) + ); + + // When logged in choose the right page by class. When more then one group + // fits then the higher order is used + if (status.equals(SUCCESS)) { + managedPerson.addLogin(username); + + FacesContext facesContext = FacesContext.getCurrentInstance(); + HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true); + session.setAttribute("user", this); + session.setAttribute("realUsername", username); + + if (securityContext.isCallerInRole(UserGroup.ADMIN.toString())) { + LOGGER.info("Login succesfull " + username + " with role: ADMIN"); + return "admin/welcome.xhtml?faces-redirect=true"; + } + + if (securityContext.isCallerInRole(UserGroup.USER.toString())) { + LOGGER.info("Login succesfull " + username + " with role: USER"); + return "user/welcome.xhtml?faces-redirect=true"; + } + + if (securityContext.isCallerInRole(UserGroup.CUSTOMER.toString())) { + LOGGER.info("Login succesfull " + username + " with role: USER"); + return "customer/welcome.xhtml?faces-redirect=true"; + } + + redirect("index.xhtml"); + + } else if (status.equals(SEND_FAILURE)) { + + sendErrorMessage("Fehler!", "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut!."); + return ""; + } + } catch (InvalidPasswordException | InvalidEmailException e) { + LOGGER.info("Wrong Email or Password: " + username); + sendErrorMessage("Fehler!", "Falsche Email oder Passwort!"); + return ""; + } catch (PersonInaktiveException p){ + sendErrorMessage("Fehler!", " Ihr Konto ist inatkiv. Bitte wenden Sie sich an den Administator."); + return ""; + } catch (Exception e) { + LOGGER.error("Login error with " + e); + sendErrorMessage("Fehler!", "Ein Fehler ist aufgetreten, bitte versuchen Sie es erneut!"); + return ""; + } + return ""; + } + + public String logout() { + LOGGER.info("User is logging out: " + username); + try { + FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); + } catch (Exception e) { + LOGGER.error("couldn't logout " + username + "with:" + e); + } + + return "index.xhtml?faces-redirect=true"; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public boolean isRememberMe() { + return rememberMe; + } + + public void setRememberMe(boolean rememberMe) { + this.rememberMe = rememberMe; + } + + public Person getActiveUser() { + return activePerson; + } + + public void setActiveUser(Person activeUser) { + this.activePerson = activeUser; + } + + public Set getLogins() { + return managedPerson.getLogins(); + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/exception/AbstractBusinessException.java b/java/mss-failsafe/userdata/src/main/java/exception/AbstractBusinessException.java new file mode 100644 index 0000000..8cbb7e2 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/exception/AbstractBusinessException.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +import javax.ejb.ApplicationException; + +/** + * + * @author Patrick + */ +@ApplicationException(rollback = true) +public abstract class AbstractBusinessException extends RuntimeException { +} + diff --git a/java/mss-failsafe/userdata/src/main/java/exception/InvalidCredentialException.java b/java/mss-failsafe/userdata/src/main/java/exception/InvalidCredentialException.java new file mode 100644 index 0000000..a851022 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/exception/InvalidCredentialException.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author Patrick + */ +public class InvalidCredentialException extends AbstractBusinessException{ + +} diff --git a/java/mss-failsafe/userdata/src/main/java/exception/InvalidEmailException.java b/java/mss-failsafe/userdata/src/main/java/exception/InvalidEmailException.java new file mode 100644 index 0000000..13bea8f --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/exception/InvalidEmailException.java @@ -0,0 +1,13 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author Patrick + */ +public class InvalidEmailException extends AbstractBusinessException { +} diff --git a/java/mss-failsafe/userdata/src/main/java/exception/InvalidPasswordException.java b/java/mss-failsafe/userdata/src/main/java/exception/InvalidPasswordException.java new file mode 100644 index 0000000..d1a662b --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/exception/InvalidPasswordException.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author Patrick + */ +public class InvalidPasswordException extends AbstractBusinessException { + +} diff --git a/java/mss-failsafe/userdata/src/main/java/exception/PersonInaktiveException.java b/java/mss-failsafe/userdata/src/main/java/exception/PersonInaktiveException.java new file mode 100644 index 0000000..dcbd2b7 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/exception/PersonInaktiveException.java @@ -0,0 +1,14 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package exception; + +/** + * + * @author patri + */ +public class PersonInaktiveException extends AbstractBusinessException{ + +} diff --git a/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/AppIdentityStore.java b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/AppIdentityStore.java new file mode 100644 index 0000000..7c4cbb7 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/AppIdentityStore.java @@ -0,0 +1,78 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import javax.enterprise.context.ApplicationScoped; +import javax.security.enterprise.credential.CallerOnlyCredential; +import javax.security.enterprise.credential.Credential; +import javax.security.enterprise.credential.UsernamePasswordCredential; +import javax.security.enterprise.identitystore.CredentialValidationResult; +import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT; +import static javax.security.enterprise.identitystore.CredentialValidationResult.NOT_VALIDATED_RESULT; +import javax.security.enterprise.identitystore.IdentityStore; + +import business.user.PersonManager; +import exception.InvalidCredentialException; +import exception.PersonInaktiveException; +import java.util.Set; +import java.util.stream.Collectors; +import javax.ejb.EJB; +import model.person.Person; + +/** + * + * @author Patrick + */ +@ApplicationScoped +public class AppIdentityStore implements IdentityStore { + + @EJB + PersonManager userManager; + + @Override + public int priority() { + return 90; + } + + @Override + public CredentialValidationResult validate(Credential credential) { + try { + + // check if the credential was UsernamePasswordCredential + if (credential instanceof UsernamePasswordCredential) { + String username = ((UsernamePasswordCredential) credential).getCaller(); + String password = ((UsernamePasswordCredential) credential).getPasswordAsString(); + + return validate(this.userManager.getByEmailAndPassword(username, password)); + } + + // check if the credential was CallerOnlyCredential + if (credential instanceof CallerOnlyCredential) { + String username = ((CallerOnlyCredential) credential).getCaller(); + + return validate( + this.userManager.getByEmail(username) + .orElseThrow(InvalidCredentialException::new) + ); + } + + } catch (InvalidCredentialException e) { + return INVALID_RESULT; + } + return NOT_VALIDATED_RESULT; + } + + private CredentialValidationResult validate(Person person) { + Set groups; + + groups = person.getUserGroups().stream() + .map(gr -> gr.toString()) + .collect(Collectors.toSet()); + + return new CredentialValidationResult(person.getEmail(), groups); + } + +} diff --git a/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/AppRememberMeIdentityStore.java b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/AppRememberMeIdentityStore.java new file mode 100644 index 0000000..b97978e --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/AppRememberMeIdentityStore.java @@ -0,0 +1,69 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT; + +import java.util.Optional; +import java.util.Set; +import javax.ejb.EJB; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.security.enterprise.CallerPrincipal; +import javax.security.enterprise.credential.RememberMeCredential; +import javax.security.enterprise.identitystore.CredentialValidationResult; +import javax.security.enterprise.identitystore.RememberMeIdentityStore; +import javax.servlet.http.HttpServletRequest; + +import business.user.TokenManager; +import business.user.PersonManager; +import model.person.Person; +import static model.person.enums.TokenType.REMEMBER_ME; + +/** + * + * @author Patrick + */ +@ApplicationScoped +public class AppRememberMeIdentityStore implements RememberMeIdentityStore { + @Inject + HttpServletRequest request; + + @EJB + PersonManager userManager; + + @EJB + TokenManager tokenManager; + + @Override + public CredentialValidationResult validate(RememberMeCredential rmc) { + Optional user = this.userManager.getByLoginToken(rmc.getToken(), REMEMBER_ME); + + if (user.isPresent()) { + return new CredentialValidationResult(user.get().getEmail()); + } else { + return INVALID_RESULT; + } + } + + @Override + public String generateLoginToken(CallerPrincipal cp, Set set) { + return this.tokenManager.generate(cp.getName(), getRemoteAddr(request), getDescription(), REMEMBER_ME); + } + + @Override + public void removeLoginToken(String string) { + this.tokenManager.remove(string); + } + + private String getRemoteAddr(HttpServletRequest request){ + return request.getRemoteAddr(); + } + + private String getDescription() { + return "Remember me session: " + this.request.getHeader("User-Agent"); + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/ApplicationConfig.java b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/ApplicationConfig.java new file mode 100644 index 0000000..0e03486 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/ApplicationConfig.java @@ -0,0 +1,85 @@ +package httpauthenticationmechanism; + +import business.user.PersonManager; +import javax.annotation.PostConstruct; +import javax.ejb.EJB; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.inject.Named; +import javax.security.enterprise.AuthenticationStatus; +import javax.security.enterprise.authentication.mechanism.http.AutoApplySession; +import javax.security.enterprise.authentication.mechanism.http.CustomFormAuthenticationMechanismDefinition; +import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism; +import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext; +import javax.security.enterprise.authentication.mechanism.http.LoginToContinue; +import javax.security.enterprise.authentication.mechanism.http.RememberMe; +import javax.security.enterprise.credential.Credential; +import javax.security.enterprise.identitystore.IdentityStore; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + + +/** + * + * @author Patrick + */ +@AutoApplySession // For "Is user already logged-in?" +@RememberMe( + cookieMaxAgeSeconds = 60 * 60 * 24 * 14, // 14 days + cookieSecureOnly = false, // Remove this when login is served over HTTPS. + isRememberMeExpression = "#{self.isRememberMe(httpMessageContext)}" +) +@LoginToContinue( + loginPage = "/index.xhtml", + errorPage = "/error.xhtml", + useForwardToLogin = true +) +@ApplicationScoped +public class ApplicationConfig implements HttpAuthenticationMechanism{ + + final static Logger LOGGER = LogManager.getLogger(ApplicationConfig.class); + + public ApplicationConfig() { + } + + @Inject + private IdentityStore identityStore; + + @Inject + private ManagedPerson managedPerson; + + @EJB + private PersonManager personManager; + + @PostConstruct + private void init(){ + managedPerson.getLogins(); + personManager.demo(); + + System.out.println("PostConstruct DEMO"); + } + + @Override + public AuthenticationStatus validateRequest(HttpServletRequest req, HttpServletResponse res, HttpMessageContext context) { + + Credential credential = context.getAuthParameters().getCredential(); + + if (credential != null) { + return context.notifyContainerAboutLogin(this.identityStore.validate(credential)); + } else { + return context.doNothing(); + } + } + + // this was called on @RememberMe annotations + public Boolean isRememberMe(HttpMessageContext httpMessageContext) { + return httpMessageContext.getAuthParameters().isRememberMe(); + } + + @Override + public void cleanSubject(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) { + HttpAuthenticationMechanism.super.cleanSubject(request, response, httpMessageContext); + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/LogoutListener.java b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/LogoutListener.java new file mode 100644 index 0000000..088d77e --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/LogoutListener.java @@ -0,0 +1,40 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import javax.servlet.annotation.WebListener; +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import controller.person.PersonController; + + +/** + * + * @author Patrick + */ +@WebListener +public class LogoutListener implements HttpSessionListener{ + final static Logger LOGGER = LogManager.getLogger(LogoutListener.class); + + @Override + public void sessionCreated(HttpSessionEvent event) { + // NOOP. + } + + @Override + public void sessionDestroyed(HttpSessionEvent event) { + LOGGER.info("Session destroyed"); + PersonController userManager = (PersonController) event.getSession().getAttribute("user"); + String username = (String) event.getSession().getAttribute("realUsername"); + if (userManager != null && username != null) { + LOGGER.info("not nulls"); + userManager.getLogins().remove(username); + } + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/ManagedPerson.java b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/ManagedPerson.java new file mode 100644 index 0000000..8cf9081 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/httpauthenticationmechanism/ManagedPerson.java @@ -0,0 +1,45 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package httpauthenticationmechanism; + +import java.util.HashSet; +import java.util.Set; +import javax.inject.Named; +import javax.enterprise.context.ApplicationScoped; + +/** + * + * @author Patrick + */ +@Named(value = "managedPerson") +@ApplicationScoped +public class ManagedPerson { + + private Set logins; + + /** + * Creates a new instance of ManagedCustomer + */ + public ManagedPerson() { + } + + public Set getLogins(){ + if (this.logins == null) { + this.logins = new HashSet<>(); + } + + return this.logins; + } + + public void addLogin(String user){ + getLogins().add(user); + } + + public void removeLogin(String user){ + getLogins().remove(user); + } + +} diff --git a/java/mss-failsafe/userdata/src/main/java/model/AbstractEntity.java b/java/mss-failsafe/userdata/src/main/java/model/AbstractEntity.java new file mode 100644 index 0000000..c61176a --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/model/AbstractEntity.java @@ -0,0 +1,89 @@ +package model; + + +import java.io.Serializable; +import java.time.LocalDateTime; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; + +/** + * + * @author Patrick Plate + */ +@MappedSuperclass +public class AbstractEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private LocalDateTime changedDate; + + private LocalDateTime creationDate; + + private boolean outdated; + + public AbstractEntity() { + this.creationDate = LocalDateTime.now(); + this.changedDate = this.creationDate; + this.outdated = false; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + if (object == null) { + return false; + } + if (!(object.getClass() == this.getClass())) { + return false; + } + AbstractEntity other = (AbstractEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + + public boolean isOutdated() { + return outdated; + } + + public void setOutdated(boolean outdated) { + this.outdated = outdated; + } + + public LocalDateTime getChangedDate() { + return changedDate; + } + + public void setChangedDate(LocalDateTime changedDate) { + this.changedDate = changedDate; + } + + public void setCreationDate (LocalDateTime creationDate) { + this.creationDate = creationDate; + } + + public LocalDateTime getCreationDate() { + return creationDate; + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/model/person/Password.java b/java/mss-failsafe/userdata/src/main/java/model/person/Password.java new file mode 100644 index 0000000..d784e91 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/model/person/Password.java @@ -0,0 +1,86 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person; + +import java.util.Arrays; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToOne; + +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@Entity +@NamedQueries({ + @NamedQuery(name = "Password.findByPassword", + query = "SELECT p FROM Password p WHERE p.password = :password"), + @NamedQuery(name = "Password.findByCostumerID", + query = "SELECT p FROM Password p WHERE p.person = :person") +}) +public class Password extends AbstractEntity { + private static final long serialVersionUID = -1924150926160449302L; + + @OneToOne + private Person person; + + @Column(name="password") + private byte[] password; + + public Password() { + } + + public Password (Person person, byte[] password) { + this.person = person; + this.password = password; + } + + public Person getPerson() { + return person; + } + + public byte[] getPassword() { + return password; + } + + public void setPassowrd(byte[] password){ + this.password = password; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 79 * hash + Objects.hashCode(this.person); + hash = 79 * hash + Arrays.hashCode(this.password); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Password other = (Password) obj; + if (!Objects.equals(this.person, other.person)) { + return false; + } + if (!Arrays.equals(this.password, other.password)) { + return false; + } + return true; + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/model/person/Person.java b/java/mss-failsafe/userdata/src/main/java/model/person/Person.java new file mode 100644 index 0000000..d5db1e2 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/model/person/Person.java @@ -0,0 +1,215 @@ +package model.person; + +import model.person.enums.Call; +import java.io.Serializable; +import java.util.AbstractSet; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.persistence.*; + +import model.AbstractEntity; +import model.person.enums.UserGroup; + +/** + * Entity implementation class for Entity: User + * + */ +@Entity +@Inheritance(strategy = InheritanceType.JOINED) +@NamedQueries({ + @NamedQuery(name = Person.FIND_BY_EMAIL, + query = "SELECT p FROM Person p WHERE p.email = :email"), + @NamedQuery(name = Person.FIND_BY_ID, + query = "SELECT p FROM Person p WHERE p.id = :id"), + @NamedQuery(name = Person.FIND_BY_TOKEN, + query = "SELECT p FROM Person p inner join p.tokens t where t.tokenHash = :tokenHash and t.tokenType = :tokenType and t.expiration > :timestamp") +}) +public class Person extends AbstractEntity implements Serializable { + + public static final String FIND_BY_EMAIL = "Person.findByEmail"; + public static final String FIND_BY_ID = "Person.findByID"; + public static final String FIND_BY_TOKEN = "Person.findByToken"; + + private static final long serialVersionUID = 1L; + + @Column(name = "Email", unique = true, nullable = false) + private String email; + + @OneToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "Password_ID", nullable = false, unique = true) + private Password password; + + @OneToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "Salt_ID", nullable = false, unique = true) + private Salt salt; + + @Enumerated(EnumType.STRING) + @Column(name = "Anrede") + private Call call; + + @OneToMany(mappedBy = "person", orphanRemoval = true, cascade = CascadeType.ALL) + private List tokens; + + @ElementCollection(targetClass = UserGroup.class) + @Enumerated(EnumType.STRING) + @JoinTable(name = "UserGroups", joinColumns = @JoinColumn(name = "UserID")) + @Column(name = "UserGroups", nullable = false) + private Set userGroups; + + @Column(nullable = true) + private String telefon; + + @Column(nullable = true) + private String mobile; + + @Column(nullable = true) + private String fax; + + @Column(nullable = false) + private String firstname; + + @Column(nullable = true) + private String lastname; + + @Column(nullable = true) + private String title; + + @Column(nullable = true) + private boolean active; + + public Person() { + super(); + active = false; + } + + public Person(String email, byte[] password, Salt salt, Set usergroups) { + this.email = email; + this.tokens = new ArrayList<>(); + this.salt = salt; + this.password = new Password(this, password); + this.userGroups = usergroups; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Password getPassword() { + return password; + } + + public void setPassword(Password password) { + this.password = password; + } + + public Salt getSalt() { + return salt; + } + + public void setSalt(Salt salt) { + this.salt = salt; + } + + public Call getCall() { + return call; + } + + public void setCall(Call call) { + this.call = call; + } + + public String getTelefon() { + return telefon; + } + + public void setTelefon(String telefon) { + this.telefon = telefon; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getFax() { + return fax; + } + + public void setFax(String fax) { + this.fax = fax; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getTokens() { + return tokens; + } + + public void setTokens(List tokens) { + this.tokens = tokens; + } + + public void addToken(Token token) { + if (this.tokens == null) { + tokens = new ArrayList<>(); + } + + tokens.add(token); + } + + public Set getUserGroups() { + return userGroups; + } + + public void setUserGroups(Set userGroups) { + this.userGroups = userGroups; + } + + public void addGroup(UserGroup userGroup){ + if (this.userGroups == null) { + this.userGroups = new HashSet<>(); + } + + this.userGroups.add(userGroup); + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/model/person/Salt.java b/java/mss-failsafe/userdata/src/main/java/model/person/Salt.java new file mode 100644 index 0000000..1a99251 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/model/person/Salt.java @@ -0,0 +1,79 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person; + +//import java.nio.charset.Charset; +import java.security.SecureRandom; +import java.util.Arrays; +import javax.persistence.Entity; + +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@Entity +public class Salt extends AbstractEntity { + + //private final Charset UTF8_CHARSET = Charset.forName("UTF-8"); + private static final long serialVersionUID = -1068077226987746862L; + private byte[] salt; + private int interations; + + public Salt() { + interations = 3072; + generateSalt(); + } + + private void generateSalt() { + SecureRandom random = new SecureRandom(); + byte bytes[] = new byte[64]; + random.nextBytes(bytes); + salt = bytes; + } + + public java.lang.String bytetoString(byte[] input) { + return Arrays.toString(input); + } + + public byte[] getSalt() { + return salt; + } + + public int getInterations() { + return interations; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 79 * hash + Arrays.hashCode(this.salt); + hash = 79 * hash + this.interations; + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Salt other = (Salt) obj; + if (this.interations != other.interations) { + return false; + } + if (!Arrays.equals(this.salt, other.salt)) { + return false; + } + return true; + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/model/person/Token.java b/java/mss-failsafe/userdata/src/main/java/model/person/Token.java new file mode 100644 index 0000000..bb21f45 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/model/person/Token.java @@ -0,0 +1,153 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person; + +import model.person.enums.TokenType; +import static java.time.temporal.ChronoUnit.MONTHS; +import java.time.Instant; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.PrePersist; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; +import model.AbstractEntity; + +/** + * + * @author Patrick + */ +@Entity +@Table(name = "token", uniqueConstraints = { + @UniqueConstraint(columnNames = {"token_hash"}) +}) +@NamedQueries({ + @NamedQuery(name = Token.REMOVE_TOKEN, query = "DELETE FROM Token t where t.tokenHash = :tokenHash"), + @NamedQuery(name = Token.REMOVE_EXPIRED_TOKEN, query = "DELETE FROM Token t where t.expiration < :timestamp") +}) +public class Token extends AbstractEntity { + + private static final long serialVersionUID = -6632692800064453512L; + public static final String REMOVE_TOKEN = "Token.removeToken"; + public static final String REMOVE_EXPIRED_TOKEN = "Token.removeExpiredToken"; + + @Column(name = "token_hash") + private String tokenHash; + + @Column(name = "token_type") + @Enumerated(EnumType.STRING) + private TokenType tokenType; + + @Column(name = "ip_address", length = 45) + private String ipAddress; + + private String description; + + private Instant created; + + private Instant expiration; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "account_id") + private Person person; + + public Token() { + } + + @PrePersist + public void generateInformation() { + this.created = Instant.now(); + if (this.expiration == null) { + this.expiration = this.created.plus(1, MONTHS); + } + } + + public String getTokenHash() { + return tokenHash; + } + + public void setTokenHash(String tokenHash) { + this.tokenHash = tokenHash; + } + + public TokenType getTokenType() { + return tokenType; + } + + public void setTokenType(TokenType tokenType) { + this.tokenType = tokenType; + } + + public String getIpAddress() { + return ipAddress; + } + + public void setIpAddress(String ipAddress) { + this.ipAddress = ipAddress; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Instant getCreated() { + return created; + } + + public void setCreated(Instant created) { + this.created = created; + } + + public Instant getExpiration() { + return expiration; + } + + public void setExpiration(Instant expiration) { + this.expiration = expiration; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } + + /* don't depend on natural identifier for equality checks, see: https://vladmihalcea.com/2017/03/29/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/#more-7143 */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + Token token = (Token) obj; + return Objects.equals(getId(), token.getId()); + } + + @Override + public int hashCode() { + return Objects.hash(getId()); + } + + @Override + public String toString() { + return "Token{ id " + getId() + '}'; + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/model/person/enums/Call.java b/java/mss-failsafe/userdata/src/main/java/model/person/enums/Call.java new file mode 100644 index 0000000..b190dbc --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/model/person/enums/Call.java @@ -0,0 +1,56 @@ +package model.person.enums; + +import java.util.Locale; + +public enum Call { + HERR(0), FRAU(1), DIVERS(2), UNBESTIMMT(3); + + private final int type; + private Locale locale = null; + + private Call(int type) { + this.type = type; + } + + public Locale getLocale() { + return locale; + } + + public void setLocale(Locale locale) { + this.locale = locale; + } + + public int getType() { + return type; + } + + @Override + public String toString() { + if (locale == null || Locale.GERMAN.equals(locale)) { + switch (this) { + case HERR: + return "Herr"; + case FRAU: + return "Frau"; + case DIVERS: + return "Divers"; + case UNBESTIMMT: + return "Unbestimmt"; + } + } + + if (locale.equals(Locale.ENGLISH)) { + switch (this) { + case HERR: + return "Mr"; + case FRAU: + return "Mrs"; + case DIVERS: + return "divers"; + case UNBESTIMMT: + return "unknown"; + } + } + return super.toString(); + } +} diff --git a/java/mss-failsafe/userdata/src/main/java/model/person/enums/TokenType.java b/java/mss-failsafe/userdata/src/main/java/model/person/enums/TokenType.java new file mode 100644 index 0000000..e592454 --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/model/person/enums/TokenType.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person.enums; + +/** + * + * @author Patrick + */ +public enum TokenType { + REMEMBER_ME, + API, + RESET_PASSWORD, + FILE +} diff --git a/java/mss-failsafe/userdata/src/main/java/model/person/enums/UserGroup.java b/java/mss-failsafe/userdata/src/main/java/model/person/enums/UserGroup.java new file mode 100644 index 0000000..6aba03b --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/java/model/person/enums/UserGroup.java @@ -0,0 +1,16 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model.person.enums; + +/** + * + * @author patri + */ +public enum UserGroup { + USER, + ADMIN, + CUSTOMER; +} diff --git a/java/mss-failsafe/userdata/src/main/resources/META-INF/persistence.xml b/java/mss-failsafe/userdata/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..e9b1e5c --- /dev/null +++ b/java/mss-failsafe/userdata/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,14 @@ + + + + + java:/mss-failsave + model.person.Token + model.person.Salt + model.person.Person + model.person.Password + + + + + diff --git a/java/mss-failsafe/userdata/target/classes/META-INF/persistence.xml b/java/mss-failsafe/userdata/target/classes/META-INF/persistence.xml new file mode 100644 index 0000000..e9b1e5c --- /dev/null +++ b/java/mss-failsafe/userdata/target/classes/META-INF/persistence.xml @@ -0,0 +1,14 @@ + + + + + java:/mss-failsave + model.person.Token + model.person.Salt + model.person.Person + model.person.Password + + + + + diff --git a/java/mss-failsafe/userdata/target/classes/business/user/DemoManager.class b/java/mss-failsafe/userdata/target/classes/business/user/DemoManager.class new file mode 100644 index 0000000..b59f051 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/business/user/DemoManager.class differ diff --git a/java/mss-failsafe/userdata/target/classes/business/user/PasswordManager.class b/java/mss-failsafe/userdata/target/classes/business/user/PasswordManager.class new file mode 100644 index 0000000..4cc9627 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/business/user/PasswordManager.class differ diff --git a/java/mss-failsafe/userdata/target/classes/business/user/PersonManager.class b/java/mss-failsafe/userdata/target/classes/business/user/PersonManager.class new file mode 100644 index 0000000..78d0a33 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/business/user/PersonManager.class differ diff --git a/java/mss-failsafe/userdata/target/classes/business/user/TokenManager.class b/java/mss-failsafe/userdata/target/classes/business/user/TokenManager.class new file mode 100644 index 0000000..e6a5823 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/business/user/TokenManager.class differ diff --git a/java/mss-failsafe/userdata/target/classes/controller/AbstractController.class b/java/mss-failsafe/userdata/target/classes/controller/AbstractController.class new file mode 100644 index 0000000..8ec7f64 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/controller/AbstractController.class differ diff --git a/java/mss-failsafe/userdata/target/classes/controller/person/PersonController.class b/java/mss-failsafe/userdata/target/classes/controller/person/PersonController.class new file mode 100644 index 0000000..88b6bf7 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/controller/person/PersonController.class differ diff --git a/java/mss-failsafe/userdata/target/classes/exception/AbstractBusinessException.class b/java/mss-failsafe/userdata/target/classes/exception/AbstractBusinessException.class new file mode 100644 index 0000000..e673ad1 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/exception/AbstractBusinessException.class differ diff --git a/java/mss-failsafe/userdata/target/classes/exception/InvalidCredentialException.class b/java/mss-failsafe/userdata/target/classes/exception/InvalidCredentialException.class new file mode 100644 index 0000000..0623e7b Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/exception/InvalidCredentialException.class differ diff --git a/java/mss-failsafe/userdata/target/classes/exception/InvalidEmailException.class b/java/mss-failsafe/userdata/target/classes/exception/InvalidEmailException.class new file mode 100644 index 0000000..b1d53fa Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/exception/InvalidEmailException.class differ diff --git a/java/mss-failsafe/userdata/target/classes/exception/InvalidPasswordException.class b/java/mss-failsafe/userdata/target/classes/exception/InvalidPasswordException.class new file mode 100644 index 0000000..798d2fd Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/exception/InvalidPasswordException.class differ diff --git a/java/mss-failsafe/userdata/target/classes/exception/PersonInaktiveException.class b/java/mss-failsafe/userdata/target/classes/exception/PersonInaktiveException.class new file mode 100644 index 0000000..7a5d1b9 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/exception/PersonInaktiveException.class differ diff --git a/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/AppIdentityStore.class b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/AppIdentityStore.class new file mode 100644 index 0000000..1061799 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/AppIdentityStore.class differ diff --git a/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/AppRememberMeIdentityStore.class b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/AppRememberMeIdentityStore.class new file mode 100644 index 0000000..e9c1829 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/AppRememberMeIdentityStore.class differ diff --git a/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/ApplicationConfig.class b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/ApplicationConfig.class new file mode 100644 index 0000000..194ee73 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/ApplicationConfig.class differ diff --git a/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/LogoutListener.class b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/LogoutListener.class new file mode 100644 index 0000000..92c1b5c Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/LogoutListener.class differ diff --git a/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/ManagedPerson.class b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/ManagedPerson.class new file mode 100644 index 0000000..357e51c Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/httpauthenticationmechanism/ManagedPerson.class differ diff --git a/java/mss-failsafe/userdata/target/classes/model/AbstractEntity.class b/java/mss-failsafe/userdata/target/classes/model/AbstractEntity.class new file mode 100644 index 0000000..b8afa87 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/model/AbstractEntity.class differ diff --git a/java/mss-failsafe/userdata/target/classes/model/person/Password.class b/java/mss-failsafe/userdata/target/classes/model/person/Password.class new file mode 100644 index 0000000..0068d6c Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/model/person/Password.class differ diff --git a/java/mss-failsafe/userdata/target/classes/model/person/Person.class b/java/mss-failsafe/userdata/target/classes/model/person/Person.class new file mode 100644 index 0000000..9c57a95 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/model/person/Person.class differ diff --git a/java/mss-failsafe/userdata/target/classes/model/person/Salt.class b/java/mss-failsafe/userdata/target/classes/model/person/Salt.class new file mode 100644 index 0000000..79e72b8 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/model/person/Salt.class differ diff --git a/java/mss-failsafe/userdata/target/classes/model/person/Token.class b/java/mss-failsafe/userdata/target/classes/model/person/Token.class new file mode 100644 index 0000000..d7781ff Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/model/person/Token.class differ diff --git a/java/mss-failsafe/userdata/target/classes/model/person/enums/Call$1.class b/java/mss-failsafe/userdata/target/classes/model/person/enums/Call$1.class new file mode 100644 index 0000000..5311755 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/model/person/enums/Call$1.class differ diff --git a/java/mss-failsafe/userdata/target/classes/model/person/enums/Call.class b/java/mss-failsafe/userdata/target/classes/model/person/enums/Call.class new file mode 100644 index 0000000..56aad5b Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/model/person/enums/Call.class differ diff --git a/java/mss-failsafe/userdata/target/classes/model/person/enums/TokenType.class b/java/mss-failsafe/userdata/target/classes/model/person/enums/TokenType.class new file mode 100644 index 0000000..f8bf253 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/model/person/enums/TokenType.class differ diff --git a/java/mss-failsafe/userdata/target/classes/model/person/enums/UserGroup.class b/java/mss-failsafe/userdata/target/classes/model/person/enums/UserGroup.class new file mode 100644 index 0000000..21dd0e6 Binary files /dev/null and b/java/mss-failsafe/userdata/target/classes/model/person/enums/UserGroup.class differ diff --git a/java/mss-failsafe/userdata/target/maven-archiver/pom.properties b/java/mss-failsafe/userdata/target/maven-archiver/pom.properties new file mode 100644 index 0000000..5135056 --- /dev/null +++ b/java/mss-failsafe/userdata/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Mon Oct 11 22:39:39 CEST 2021 +groupId=plate.software +artifactId=userdata +version=1.0-SNAPSHOT diff --git a/java/mss-failsafe/userdata/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/java/mss-failsafe/userdata/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..795ec9e --- /dev/null +++ b/java/mss-failsafe/userdata/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,25 @@ +model\person\Password.class +httpauthenticationmechanism\AppRememberMeIdentityStore.class +model\person\enums\Call.class +business\user\PersonManager.class +business\user\TokenManager.class +exception\InvalidPasswordException.class +model\person\Salt.class +httpauthenticationmechanism\LogoutListener.class +httpauthenticationmechanism\ManagedPerson.class +exception\PersonInaktiveException.class +model\person\enums\UserGroup.class +controller\AbstractController.class +business\user\PasswordManager.class +model\person\enums\Call$1.class +controller\person\PersonController.class +exception\AbstractBusinessException.class +httpauthenticationmechanism\AppIdentityStore.class +model\person\enums\TokenType.class +httpauthenticationmechanism\ApplicationConfig.class +model\person\Person.class +business\user\DemoManager.class +model\AbstractEntity.class +exception\InvalidEmailException.class +model\person\Token.class +exception\InvalidCredentialException.class diff --git a/java/mss-failsafe/userdata/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/java/mss-failsafe/userdata/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..e020b8f --- /dev/null +++ b/java/mss-failsafe/userdata/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,24 @@ +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\exception\AbstractBusinessException.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\business\user\DemoManager.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\httpauthenticationmechanism\AppRememberMeIdentityStore.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\model\person\enums\TokenType.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\model\person\Salt.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\exception\InvalidCredentialException.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\business\user\TokenManager.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\model\person\enums\Call.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\httpauthenticationmechanism\ApplicationConfig.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\business\user\PersonManager.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\controller\person\PersonController.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\exception\InvalidPasswordException.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\exception\PersonInaktiveException.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\httpauthenticationmechanism\LogoutListener.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\controller\AbstractController.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\model\person\Password.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\httpauthenticationmechanism\AppIdentityStore.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\httpauthenticationmechanism\ManagedPerson.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\model\AbstractEntity.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\model\person\Person.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\exception\InvalidEmailException.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\business\user\PasswordManager.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\model\person\enums\UserGroup.java +C:\Users\patri\Documents\NetBeansProjects\mss-failsafe\userdata\src\main\java\model\person\Token.java diff --git a/bigmind/bigmind/models.py b/java/mss-failsafe/userdata/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst similarity index 100% rename from bigmind/bigmind/models.py rename to java/mss-failsafe/userdata/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst diff --git a/java/mss-failsafe/userdata/target/userdata-1.0-SNAPSHOT.jar b/java/mss-failsafe/userdata/target/userdata-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..c512a18 Binary files /dev/null and b/java/mss-failsafe/userdata/target/userdata-1.0-SNAPSHOT.jar differ diff --git a/java/wellmann-shop/nb-configuration.xml b/java/wellmann-shop/nb-configuration.xml new file mode 100644 index 0000000..9129db0 --- /dev/null +++ b/java/wellmann-shop/nb-configuration.xml @@ -0,0 +1,29 @@ + + + + + + 1.7-web + WildFly + Facelets + true + /less:/css + false + false + + + /scss:/css + js/libs + + + diff --git a/java/wellmann-shop/pom.xml b/java/wellmann-shop/pom.xml new file mode 100644 index 0000000..d35859e --- /dev/null +++ b/java/wellmann-shop/pom.xml @@ -0,0 +1,131 @@ + + + 4.0.0 + + Plate + Wellmann-Shop + 0.2 + war + + Wellmann-Shop + + + UTF-8 + UTF-8 + 1.8 + 1.8 + false + + + + + + org.primefaces + primefaces + 6.2 + + + org.primefaces.themes + all-themes + 1.0.10 + + + org.eclipse.persistence + eclipselink + 2.7.3 + + + org.eclipse.persistence + javax.persistence + 2.2.1 + provided + + + commons-codec + commons-codec + jar + 1.11 + + + org.seleniumhq.selenium + selenium-java + test + 2.44.0 + + + com.opera + operadriver + test + 1.5 + + + org.seleniumhq.selenium + selenium-remote-driver + + + + + junit + junit + test + 4.11 + + + javax + javaee-web-api + 8.0 + provided + + + javax + javaee-api + 8.0 + provided + + + mysql + mysql-connector-java + 5.1.46 + + + log4j + log4j + 1.2.17 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-war-plugin + 2.3 + + false + + + + + + + prime-repo + PrimeFaces Maven Repository + http://repository.primefaces.org/ + default + + + unknown-jars-temp-repo + A temporary repository created by NetBeans for libraries and jars it could not identify. Please replace the dependencies in this repository with correct ones and delete this repository. + file:${project.basedir}/lib + + + diff --git a/java/wellmann-shop/src/main/java/httpauthenticationmechanism/ApplicationConfig.java b/java/wellmann-shop/src/main/java/httpauthenticationmechanism/ApplicationConfig.java new file mode 100644 index 0000000..438417d --- /dev/null +++ b/java/wellmann-shop/src/main/java/httpauthenticationmechanism/ApplicationConfig.java @@ -0,0 +1,100 @@ +/* + * Copyright 2018 JoinFaces. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package httpauthenticationmechanism; + + +import java.util.HashMap; +import java.util.Map; +import javax.enterprise.context.ApplicationScoped; +import javax.faces.annotation.FacesConfig; +import javax.inject.Inject; +import javax.inject.Named; +import javax.security.enterprise.authentication.mechanism.http.CustomFormAuthenticationMechanismDefinition; +import javax.security.enterprise.authentication.mechanism.http.LoginToContinue; +import javax.security.enterprise.identitystore.DatabaseIdentityStoreDefinition; +import javax.security.enterprise.identitystore.IdentityStore; +import javax.security.enterprise.identitystore.Pbkdf2PasswordHash; +import org.apache.log4j.Logger; +import plate.wellmann.shop.business.MyPasswordHash; +/** + * + * @author Patrick + */ +/*@AutoApplySession // For "Is user already logged-in?" +@RememberMe(isRememberMeExpression = "httpMessageContext.authParameters.rememberMe", cookieMaxAgeSeconds = 60 * 60 * 24 * 14) // 14 days*/ +@CustomFormAuthenticationMechanismDefinition( + loginToContinue = @LoginToContinue( + loginPage = "/login.xhtml", + useForwardToLogin = false, + errorPage = "/error.xhtml" + )) +@DatabaseIdentityStoreDefinition( + dataSourceLookup = "${'java:/Wellmann-Shop'}", + callerQuery = "#{'select password from Password where customer_id = (select id from customer where Email = ?)'}", + groupsQuery = "select userGroup from MyUserGroups where customer_id = (select id from customer where Email = ?)", + hashAlgorithm = MyPasswordHash.class, + priority = 10 + ) +@FacesConfig +@ApplicationScoped +@Named +public class ApplicationConfig { + + final static Logger logger = Logger.getLogger(ApplicationConfig.class); + + @Inject + private IdentityStore identityStore; + + @Inject + private Pbkdf2PasswordHash passwordHash; + + /*@Inject + private EntityManager em;*/ + + /*@Transactional + private void init(){ + PasswordManager passwordManager = new PasswordManager(); + Salt salt = new Salt(); + byte[] password = passwordManager.hashPassword("user".toCharArray(), salt.getSalt(), salt.getInterations()); + Customer test = new Customer("user@test.de", password, salt); + test.setGroups(new MyUserGroups(test, MyUserGroups.Group.ADMIN)); + try { + em.persist(test); + logger.debug(test.getEmail() + " got registered"); + } catch (Exception e) { + logger.error("Init persisting doenst work : " + e.toString()); + } + }*/ + + /* + public AuthenticationStatus validateRequest( + HttpServletRequest request, + HttpServletResponse response, + HttpMessageContext context) throws AuthenticationException { + + Credential credential = context.getAuthParameters().getCredential(); + + if (credential != null) { + return context.notifyContainerAboutLogin(identityStore.validate(credential)); + } else { + return context.doNothing(); + } + }*/ + + public String hashPw(String pw){ + return passwordHash.generate(pw.toCharArray()); + } +} diff --git a/java/wellmann-shop/src/main/java/httpauthenticationmechanism/LoginBean.java b/java/wellmann-shop/src/main/java/httpauthenticationmechanism/LoginBean.java new file mode 100644 index 0000000..5b14634 --- /dev/null +++ b/java/wellmann-shop/src/main/java/httpauthenticationmechanism/LoginBean.java @@ -0,0 +1,174 @@ +/* + * Copyright 2018 JoinFaces. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package httpauthenticationmechanism; + +import java.io.IOException; +import java.util.Arrays; +import javax.enterprise.context.RequestScoped; +import javax.enterprise.inject.Model; +import javax.faces.application.FacesMessage; +import static javax.faces.application.FacesMessage.SEVERITY_ERROR; +import javax.faces.context.ExternalContext; +import javax.faces.context.FacesContext; +import javax.inject.Inject; +import javax.inject.Named; +import javax.security.enterprise.AuthenticationStatus; +import static javax.security.enterprise.AuthenticationStatus.SEND_CONTINUE; +import static javax.security.enterprise.AuthenticationStatus.SEND_FAILURE; +import javax.security.enterprise.SecurityContext; +import javax.security.enterprise.authentication.mechanism.http.AuthenticationParameters; +import static javax.security.enterprise.authentication.mechanism.http.AuthenticationParameters.withParams; +import javax.security.enterprise.credential.Credential; +import javax.security.enterprise.credential.Password; +import javax.security.enterprise.credential.UsernamePasswordCredential; +import javax.security.enterprise.identitystore.CredentialValidationResult; +import javax.security.enterprise.identitystore.IdentityStoreHandler; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import org.apache.log4j.Logger; +import plate.wellmann.shop.business.PasswordManager; +import plate.wellmann.shop.persistence.Customer; +import plate.wellmann.shop.persistence.MyUserGroups; +import plate.wellmann.shop.persistence.Salt; + +/** + * + * @author Patrick + */ +@Named +@RequestScoped +public class LoginBean { + + @Inject + private PasswordManager passwordManager; + + @Inject + private IdentityStoreHandler identityStoreHandler; + + @Inject + private SecurityContext securityContext; + + @Inject + private FacesContext facesContext; + + @Inject + private ExternalContext externalContext; + + @NotEmpty + @Email(message = "Please provide a valid email") + private String username; + + @NotEmpty + @Size(min = 4, max = 50, message = "Password must be between 4 and 50 characters") + private String password; + + private boolean rememberMe = false; + + private boolean continued = true; + + final static Logger LOG = Logger.getLogger(LoginBean.class); + + public void login() throws IOException { + Credential credential = new UsernamePasswordCredential(username, new Password(password)); + + CredentialValidationResult cres = identityStoreHandler.validate(credential); + switch (cres.getStatus()) { + case VALID: + facesContext.responseComplete(); + facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Anmeldung erfolgreich!", null)); + break; + default: + facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Benutzername oder Password inkorrekt!", null)); + break; + + } + + /* + switch (continueAuthentication()) { + case SEND_CONTINUE: + facesContext.responseComplete(); + break; + case SEND_FAILURE: + facesContext.addMessage(null, + new FacesMessage(FacesMessage.SEVERITY_ERROR, "Login failed", null)); + break; + case SUCCESS: + facesContext.addMessage(null, + new FacesMessage(FacesMessage.SEVERITY_INFO, "Login succeed", null)); + externalContext.redirect(externalContext.getRequestContextPath() + "/ressources/users/welcome.xhtml"); + break; + case NOT_DONE: + }*/ + } + + private static HttpServletResponse getResponse(FacesContext facesContext) { + return (HttpServletResponse) facesContext + .getExternalContext() + .getResponse(); + } + + private static HttpServletRequest getRequest(FacesContext facesContext) { + return (HttpServletRequest) facesContext + .getExternalContext() + .getRequest(); + } + + private AuthenticationStatus continueAuthentication() { + return securityContext.authenticate( + (HttpServletRequest) externalContext.getRequest(), + (HttpServletResponse) externalContext.getResponse(), + AuthenticationParameters.withParams() + .credential(new UsernamePasswordCredential(username, password)) + ); + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public boolean isRememberMe() { + return rememberMe; + } + + public void setRememberMe(boolean rememberMe) { + this.rememberMe = rememberMe; + } + + public boolean isContinued() { + return continued; + } + + public void setContinued(boolean continued) { + this.continued = continued; + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/CostumerManager.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/CostumerManager.java new file mode 100644 index 0000000..33e327d --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/CostumerManager.java @@ -0,0 +1,170 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business; + +import java.io.Serializable; +import java.util.Arrays; +import javax.enterprise.context.SessionScoped; +import javax.inject.Inject; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.transaction.Transactional; +import plate.wellmann.shop.persistence.Costumer; +import org.apache.log4j.Logger; +import plate.wellmann.shop.persistence.Salt; + +/** + * + * @author Patrick + */ +@Named +@SessionScoped +public class CostumerManager implements Serializable{ + + final static Logger logger = Logger.getLogger(CostumerManager.class); + + private Costumer currentCostumer = Costumer.nullCostumer; + + @Inject + private PasswordManager passwordManager; + + @PersistenceContext + private EntityManager em; + + @Transactional + private Costumer init(){ + Salt salt = new Salt(); + byte[] password = passwordManager.hashPassword("user".toCharArray(), salt.getSalt(), salt.getInterations()); + return new Costumer("user@test.de", password, salt); +// try { +// em.persist(testCostumer); +// logger.debug("user@test.de got registered"); +// } catch (Exception e) { +// logger.error("Init persisting doenst work : " + e.toString()); +// } + } + + @Transactional + public boolean login(String email, String password){ + if(currentCostumer != Costumer.nullCostumer){ + logout(); + } + if (loadCostumer(email)) { + byte[] pw = passwordManager.hashPassword(password.toCharArray(), currentCostumer.getSalt().getSalt(), currentCostumer.getSalt().getInterations()); + if(Arrays.equals(pw, currentCostumer.getPassword().getPassword())){ + logger.info("Passwordcheck correct " + email); + for(int i = 0; i < pw.length; i++){ + pw[i] = 0; + } + return true; + } + } + return false; + } + + public boolean isLoggedIn() { + return currentCostumer != Costumer.nullCostumer; + } + + public void logout(){ + currentCostumer = Costumer.nullCostumer; + } + + @Transactional + private boolean loadCostumer(String email){ + try { + + Costumer newCostumer = init(); + em.persist(newCostumer); + + TypedQuery query = em.createNamedQuery("Costumer.findByEmail", Costumer.class); + query.setParameter("email", email); + this.currentCostumer = query.getSingleResult(); + logger.info(email + " sucessfully loaded."); + return true; + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.error(email + " couldn't be loaded. " + e.toString()); + } + return false; + } + } + + /** + * Function for register as Superuser + * + * TODO Check for Superuser + * @param email + * @return boolean if succesfull + */ + @Transactional + public boolean register(String email) { + + if(currentCostumer == Costumer.nullCostumer){ + logger.error("Nullcostumer tried to register user" + email); + logout(); + return false; + } + //extract domain + String domain = extractDomain(email); + String userDomain = extractDomain(currentCostumer.getEmail()); + + logger.info("trying to register User to " + domain + " by user: " + currentCostumer.getEmail()); + if(!userDomain.equals(domain)){ + logger.warn("Cannot register " + email + " to " + domain + " by " + currentCostumer.getEmail()); + return false; + } + + TypedQuery query = em.createNamedQuery("Costumer.findByEmail", Costumer.class); + query.setParameter("email", email); + try { + Costumer cost = query.getSingleResult(); + logger.warn("User: " + currentCostumer.getEmail() + "tried to register allready registered user: " + email); + return false; + } catch (NoResultException e) { + String pass = org.apache.commons.codec.binary.Base64.encodeBase64String(passwordManager.generateRandomPassword()); + Salt salt = new Salt(); + byte[] password = passwordManager.hashPassword(pass.toCharArray(), salt.getSalt(), salt.getInterations()); + Costumer newCostumer = new Costumer(email, password, salt, currentCostumer.getDomain()); + currentCostumer.getDomain().addCostumer(newCostumer); + em.persist(newCostumer); + logger.info("New Costumer was registered: " + email + " by " + currentCostumer.getEmail()); + return true; + } + } + + @Transactional + public boolean registerNewCostumerDomain(String email){ + String pass = org.apache.commons.codec.binary.Base64.encodeBase64String(passwordManager.generateRandomPassword()); + Salt salt = new Salt(); + byte[] password = passwordManager.hashPassword(pass.toCharArray(), salt.getSalt(), salt.getInterations()); + Costumer newCostumer = new Costumer(email, password, salt); + logger.info("User: " + currentCostumer.getEmail() + "trying to register user: " + email); + try { + em.persist(newCostumer); + } catch (Exception e) { + logger.error("User: " + currentCostumer.getEmail() + "tried to register user: " + email + " with: " + e.toString()); + return false; + } + return false; + } + //@Transactional + private String extractDomain(String email){ + return email.substring(email.indexOf("@") + 1); + } + + @Transactional + public boolean changePassword(String passwordOld, String passwordNew){ + return passwordManager.changePassword(currentCostumer, passwordNew, passwordOld); + } + + public String resetPassword(){ + return null; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/CustomerManager.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/CustomerManager.java new file mode 100644 index 0000000..2dd665d --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/CustomerManager.java @@ -0,0 +1,213 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business; + +import httpauthenticationmechanism.ApplicationConfig; +import java.io.Serializable; +//import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import javax.enterprise.context.RequestScoped; +import javax.enterprise.context.SessionScoped; +import javax.enterprise.inject.Produces; +import javax.inject.Inject; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.transaction.Transactional; +import plate.wellmann.shop.persistence.Customer; +import org.apache.log4j.Logger; +import plate.wellmann.shop.persistence.MyUserGroups; +import plate.wellmann.shop.persistence.Salt; +import javax.security.enterprise.credential.Password; + +/** + * + * @author Patrick + */ +@Named +@SessionScoped +public class CustomerManager implements Serializable{ + + final static Logger logger = Logger.getLogger(CustomerManager.class); + + //private final Charset UTF8_CHARSET = Charset.forName("UTF-8"); + + private Customer currentCostumer = Customer.nullCustomer; + + @Inject + private PasswordManager passwordManager; + + @PersistenceContext(name = "MySQL-Wellmann") + private EntityManager em; + + public String demo(){ + Salt salt = new Salt(); + Customer test = new Customer("user@test.de", Arrays.toString(passwordManager.hashPassword("test".toCharArray(), ("salz".getBytes()), 3072)), salt); + test.setGroups(new MyUserGroups(test, MyUserGroups.Group.MANAGER)); + currentCostumer = test; + + return "/ressources/manager/welcome.xhtml"; + } + + @Transactional + public void init(){ + //logger.info("Password to string; " + Arrays.toString(passwordString)); + Salt salt = new Salt(); + //byte[] password = passwordManager.hashPassword("user".toCharArray(), salt.getSalt(), salt.getInterations()); + Customer test = new Customer("user@test.de", Arrays.toString(passwordManager.hashPassword("test".toCharArray(), ("salz".getBytes()), 3072)), salt); + test.setGroups(new MyUserGroups(test, MyUserGroups.Group.USER)); + em.persist(test); +// try { +// em.persist(testCostumer); +// logger.debug("user@test.de got registered"); +// } catch (Exception e) { +// logger.error("Init persisting doenst work : " + e.toString()); +// } + } + + /* + @Transactional + public boolean login(String email, String password){ + if(currentCostumer != Customer.nullCustomer){ + logout(); + } + if (loadCostumer(email)) { + byte[] pw = passwordManager.hashPassword(password.toCharArray(), currentCostumer.getSalt().getSalt(), currentCostumer.getSalt().getInterations()); + if(Arrays.equals(pw, currentCostumer.getPassword().getPassword())){ + logger.info("Passwordcheck correct " + email); + for(int i = 0; i < pw.length; i++){ + pw[i] = 0; + } + return true; + } + } + return false; + }*/ + + public boolean isLoggedIn() { + return currentCostumer != Customer.nullCustomer; + } + + public void logout(){ + currentCostumer = Customer.nullCustomer; + } + + @Transactional + private boolean loadCostumer(String email){ + try { + + //Customer newCostumer = init(); + //em.persist(newCostumer); + + TypedQuery query = em.createNamedQuery("Customer.findByEmail", Customer.class); + query.setParameter("email", email); + this.currentCostumer = query.getSingleResult(); + logger.info(email + " sucessfully loaded."); + return true; + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.error(email + " couldn't be loaded. " + e.toString()); + } + return false; + } + } + + /** + * Function for register as Superuser + * + * TODO Check for Superuser + * @param email + * @return boolean if succesfull + */ + @Transactional + public boolean register(String email) { + + if(currentCostumer == Customer.nullCustomer){ + logger.error("Nullcustomer tried to register user" + email); + logout(); + return false; + } + //extract domain + String domain = extractDomain(email); + String userDomain = extractDomain(currentCostumer.getEmail()); + + logger.info("trying to register User to " + domain + " by user: " + currentCostumer.getEmail()); + if(!userDomain.equals(domain)){ + logger.warn("Cannot register " + email + " to " + domain + " by " + currentCostumer.getEmail()); + return false; + } + + TypedQuery query = em.createNamedQuery("Customer.findByEmail", Customer.class); + query.setParameter("email", email); + try { + Customer cost = query.getSingleResult(); + logger.warn("User: " + currentCostumer.getEmail() + "tried to register allready registered user: " + email); + return false; + } catch (NoResultException e) { + String pass = new String (passwordManager.generateRandomPassword()); + Salt salt = new Salt(); + byte[] password = passwordManager.hashPassword(pass.toCharArray(), salt.getSalt(), salt.getInterations()); + Customer newCostumer = new Customer(email, "Monat2018!", salt, currentCostumer.getDomain()); + currentCostumer.getDomain().addCostumer(newCostumer); + em.persist(newCostumer); + logger.info("New Costumer was registered: " + email + " by " + currentCostumer.getEmail()); + return true; + } + } + + @Transactional + public boolean registerNewCostumerDomain(String email){ + String pass = new String(passwordManager.generateRandomPassword()); + Salt salt = new Salt(); + byte[] password = passwordManager.hashPassword(pass.toCharArray(), salt.getSalt(), salt.getInterations()); + Customer newCostumer = new Customer(email, pass, salt); + logger.info("User: " + currentCostumer.getEmail() + "trying to register user: " + email); + try { + em.persist(newCostumer); + } catch (Exception e) { + logger.error("User: " + currentCostumer.getEmail() + "tried to register user: " + email + " with: " + e.toString()); + return false; + } + return false; + } + + private char[] genPW(String pw){ + return (new Password("test").getValue()); + } + + /*private String genPW(String pw){ + Map parameters= new HashMap<>(); + parameters.put("Pbkdf2PasswordHash.Iterations", "3072"); + parameters.put("Pbkdf2PasswordHash.Algorithm", "PBKDF2WithHmacSHA512"); + parameters.put("Pbkdf2PasswordHash.SaltSizeBytes", "64"); + passwordHash.initialize(parameters); + return passwordHash.generate(pw.toCharArray()); + }*/ + //@Transactional + private String extractDomain(String email){ + return email.substring(email.indexOf("@") + 1); + } + + @Transactional + public boolean changePassword(String passwordOld, String passwordNew){ + return false; + //return passwordManager.changePassword(currentCostumer, passwordNew, passwordOld); + } + + public String resetPassword(){ + return null; + } + + @Produces + @RequestScoped + public Customer activeCostumer(){ + return currentCostumer; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/ItemManager.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/ItemManager.java new file mode 100644 index 0000000..0ca9f56 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/ItemManager.java @@ -0,0 +1,121 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Resource; +import javax.enterprise.context.RequestScoped; +import javax.enterprise.context.SessionScoped; +import javax.enterprise.inject.Produces; +import javax.inject.Inject; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; +import javax.persistence.TypedQuery; +import javax.transaction.Transactional; +import plate.wellmann.shop.persistence.Customer; +import plate.wellmann.shop.persistence.Item; +import plate.wellmann.shop.persistence.UserDomain; + +/** + * + * @author Patrick + */ +@Named(value = "itemManager") +@SessionScoped +public class ItemManager implements Serializable { + + @Inject + private Customer activeCustomer; + + private List tickets; + + @PersistenceContext(unitName = "MySQL-Wellmann") + private EntityManager em; + + @Produces + @RequestScoped + public List getActiveTickets() { + if (tickets == null) { + tickets = new ArrayList<>(); + return tickets; + } + + List activeTickets; + activeTickets = new ArrayList<>(); + + tickets.stream().filter((ticket) -> (ticket.getStatus() != Item.TicketStatus.CLOSED)).forEach((ticket) -> { + activeTickets.add(ticket); + }); + return activeTickets; + } + + @Transactional + public List findActiveDomainTickets(UserDomain userDomain) { + Query qry = em.createQuery("select object(o) from Item o " + + "where o.creator IN (:creators) " + + "AND " + + "o.status <> :status", + Item.class); + + qry.setParameter("creators", userDomain.getCustomers()); + qry.setParameter("status", Item.TicketStatus.CLOSED); + try { + return qry.getResultList(); + } catch (Exception e) { + } + return new ArrayList<>(); + } + + @Transactional + public List findDomainTickets(UserDomain userDomain){ + Query qry = em.createQuery("select object(o) from Item o " + + "where o.creator IN (:creators)", + Item.class); + + qry.setParameter("creators", userDomain.getCustomers()); + + try { + return qry.getResultList(); + } catch (Exception e) { + } + return new ArrayList<>(); + } + + @Transactional + public List findDomainTicketsByStatus(UserDomain userDomain, List status) { + Query qry = em.createQuery("select object(o) from Item o " + + "where o.creator IN (:creators) " + + "AND " + + "o.status IN (:status)", + Item.class); + + qry.setParameter("creators", userDomain.getCustomers()); + qry.setParameter("status", status); + try { + return qry.getResultList(); + } catch (Exception e) { + } + return new ArrayList<>(); + } + + @Transactional + public List findAllTicketsByStatus(List status){ + Query qry = em.createQuery("select object(o) from Item o " + + "where o.status IN (:status)", + Item.class); + qry.setParameter("status", status); + + try { + return qry.getResultList(); + } catch (Exception e) { + return new ArrayList<>(); + } + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/MyPasswordHash.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/MyPasswordHash.java new file mode 100644 index 0000000..020c57e --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/MyPasswordHash.java @@ -0,0 +1,48 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business; + +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; +import java.util.Arrays; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.security.enterprise.identitystore.PasswordHash; +import org.apache.log4j.Logger; +import static plate.wellmann.shop.business.PasswordManager.logger; + +/** + * + * @author Patrick + */ +public class MyPasswordHash implements PasswordHash{ + + final static Logger LOG = Logger.getLogger(MyPasswordHash.class); + + @Override + public String generate(char[] chars) { + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + PBEKeySpec spec = new PBEKeySpec(chars, "salz".getBytes(), 3072, 256); + SecretKey key = skf.generateSecret(spec); + //this.password = new Password(this.costumer, key.getEncoded()); + logger.debug("Hash created!"); + return Arrays.toString(key.getEncoded()); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + logger.error("Failure creating hash with:" + e); + return null; + //throw new RuntimeException( e ); + } + } + + @Override + public boolean verify(char[] chars, String string) { + String pw = generate(chars); + return pw.equals(string); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/PasswordManager.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/PasswordManager.java new file mode 100644 index 0000000..87ee971 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/PasswordManager.java @@ -0,0 +1,154 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business; + +import java.io.Serializable; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.security.spec.InvalidKeySpecException; +import java.util.Arrays; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.transaction.Transactional; +import org.apache.log4j.Logger; +import plate.wellmann.shop.persistence.Customer; + +/** + * + * @author Patrick + */ +@Named +@RequestScoped +public class PasswordManager implements Serializable { + + final static Logger logger = Logger.getLogger(PasswordManager.class); + + @PersistenceContext(name = "MySQL-Wellmann") + private EntityManager em; + + //private Password password; + private Customer costumer; + + private final int keyLength = 256; + + public byte[] hashPassword(final char[] password, final byte[] salt, final int iterations) { + +// if(costumer == Customer.nullCustomer || costumer == null){ +// logger.error("Tried to create hash for Nullcostumer!"); +// return null; +// } + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + PBEKeySpec spec = new PBEKeySpec(password, salt, iterations, this.keyLength); + SecretKey key = skf.generateSecret(spec); + //this.password = new Password(this.costumer, key.getEncoded()); + logger.debug("Hash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + logger.error("Failure creating hash for with:" + e); + return null; + //throw new RuntimeException( e ); + } + } + + public byte[] hashPasswordCostumer(final char[] password, Customer cost) { + + if(costumer == Customer.nullCustomer || costumer == null){ + logger.error("Tried to create hash for Nullcostumer!"); + return null; + } + try { + SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + PBEKeySpec spec = new PBEKeySpec(password, cost.getSalt().getSalt(), cost.getSalt().getInterations(), keyLength); + SecretKey key = skf.generateSecret(spec); + logger.debug("Hash created!"); + return key.getEncoded(); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + logger.error("Failure creating hash for" + cost.getEmail() + "with: " + e); + return null; + } + } + + /* + @Transactional + public boolean passwordCheckEmail(final String email, final byte[] password) { + TypedQuery query = em.createNamedQuery("Costumer.findByEmail", Customer.class); + query.setParameter("email", email); + try { + Customer cost; + cost = query.getSingleResult(); + + boolean equals = Arrays.equals(password, cost.getPassword().getPassword()); + + for (int i = 0; i < password.length; i++) { + password[i] = 0; + } + + return equals; + } catch (NoResultException e) { + return false; + } + } + + public boolean passwordCheckCostumer(final Customer cost, final String password) { + byte[] pw = hashPasswordCostumer(password.toCharArray(), cost); + + boolean equals = Arrays.equals(pw, cost.getPassword().getPassword()); + + for (int i = 0; i < pw.length; i++) { + pw[i] = 0; + } + + return equals; + + } + + @Transactional + public boolean changePassword(Customer cost, String newPassword, String oldPassword) { + if (cost == Customer.nullCustomer || cost == null) { + logger.error("Nullcostumer tried to change Password"); + return false; + } + + if(passwordCheckCostumer(cost, oldPassword)){ + cost.getPassword().setPassowrd(hashPasswordCostumer(newPassword.toCharArray(), cost)); + logger.info("Password changed for " + cost.getEmail()); + } else { + return false; + } + + try { + em.persist(cost); + logger.info("Password changed for " + cost.getEmail()); + return true; + } catch (Exception e) { + logger.error("Couldn't save new password to " + cost.getEmail() + " with: " + e.toString()); + return false; + } + }*/ + + public byte[] generateRandomPassword() { + SecureRandom random = new SecureRandom(); + byte bytes[] = new byte[20]; + random.nextBytes(bytes); + return bytes; + } + + public Customer getCostumer() { + return costumer; + } + + public void setCostumer(Customer costumer) { + this.costumer = costumer; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/ShoppingcartManager.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/ShoppingcartManager.java new file mode 100644 index 0000000..8b03176 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/ShoppingcartManager.java @@ -0,0 +1,184 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business; + +import javax.inject.Named; +import javax.enterprise.context.SessionScoped; +import java.io.Serializable; +import java.math.BigInteger; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Objects; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.transaction.Transactional; +import plate.wellmann.shop.persistence.Color; +import plate.wellmann.shop.persistence.Customer; +import plate.wellmann.shop.persistence.Item; +import plate.wellmann.shop.persistence.Paper; + +/** + * + * @author Patrick + */ +@Named(value = "shoppingcartManager") +@SessionScoped +public class ShoppingcartManager implements Serializable { + + @PersistenceContext(name = "MySQL-Wellmann") + private EntityManager em; + + private List items; + private HashMap quantity; + + @Inject + private Customer activeCustomer; + + /** + * Creates a new instance of ShoppingcartManager + */ + public ShoppingcartManager() { + quantity = new HashMap<>(); + } + + public void addItem(Item item, Integer quantity) { + if (items == null) { + items = new ArrayList<>(); + } + if (this.quantity == null) { + this.quantity = new HashMap<>(); + } + this.items.add(item); + this.quantity.put(item.hashCode(), quantity); + } + + public boolean deleteItem(Long id) { + for (Item next : items) { + if (Objects.equals(next.getId(), id)) { + if (items.remove(next)) { + this.quantity.remove(next.hashCode()); + return true; + } + } + } + + return false; + } + + public boolean setQuantity(Item item, Integer quantity) { + if (items.contains(item)) { + this.quantity.replace(item.hashCode(), quantity); + return true; + } + return false; + } + + @Transactional + public boolean demo() { + Item item = new Item(LocalDateTime.now()); + item.setCreator(activeCustomer); + item.setName("Visitenkarten"); + item.setPrice(new BigInteger("53199")); + + List colors = new ArrayList(); + Color c = new Color(); + c.setColorRoom(Color.ColorRoom.SKALA); + c.setName("Schwarz"); + c.setColorType(Color.ColorType.K); + c.setHtmlDotStyle("height:20px;width: 20px; background-color: #000000;border-radius: 50%;display: inline-block;"); + colors.add(c); + + Color co = new Color(); + co.setColorRoom(Color.ColorRoom.SKALA); + co.setName("Magenta"); + co.setColorType(Color.ColorType.K); + co.setHtmlDotStyle("height:20px;width: 20px; background-color: #ff00ff;border-radius: 50%;display: inline-block;"); + colors.add(co); + + co = new Color(); + co.setColorRoom(Color.ColorRoom.SKALA); + co.setName("Cyan"); + co.setColorType(Color.ColorType.K); + co.setHtmlDotStyle("height:20px;width: 20px; background-color: #00FFFF;border-radius: 50%;display: inline-block;"); + colors.add(co); + + co = new Color(); + co.setColorRoom(Color.ColorRoom.SKALA); + co.setName("Yellow"); + co.setColorType(Color.ColorType.K); + co.setHtmlDotStyle("height:20px;width: 20px; background-color: #FFFF00;border-radius: 50%;display: inline-block;"); + colors.add(co); + + item.setColors(colors); + + Paper paper = new Paper(); + paper.setFormat("A3"); + paper.setName("Papiername1"); + paper.setSort("HeißesWeißes"); + item.setPaper(paper); + item.setQuantity(new BigInteger("500")); + + + try { + em.persist(item); + } catch (Exception e) { + System.out.println("plate.wellmann.shop.business.ShoppingcartManager.demo() " + e); + } + addItem(item, 600); + + item = new Item(LocalDateTime.now()); + item.setCreator(activeCustomer); + item.setName("Brackepappe"); + item.setPrice(new BigInteger("448745")); + + colors = new ArrayList(); + c = new Color(); + c.setColorRoom(Color.ColorRoom.SKALA); + c.setName("Schwarz"); + c.setColorType(Color.ColorType.K); + c.setHtmlDotStyle("height:20px;width: 20px; background-color: #000000;border-radius: 50%;display: inline-block;"); + colors.add(c); + + co = new Color(); + co.setColorRoom(Color.ColorRoom.SKALA); + co.setName("Cyan"); + co.setColorType(Color.ColorType.K); + co.setHtmlDotStyle("height:20px;width: 20px; background-color: #00FFFF;border-radius: 50%;display: inline-block;"); + colors.add(co); + + item.setColors(colors); + + paper = new Paper(); + paper.setFormat("A3"); + paper.setName("Altpapier"); + paper.setSort("HeißesBraunes"); + item.setPaper(paper); + item.setQuantity(new BigInteger("452")); + + addItem(item, 1231); + try { + em.persist(item); + em.flush(); + } catch (Exception e) { + System.out.println("plate.wellmann.shop.business.ShoppingcartManager.demo() " + e); + } + + return true; + } + + public List getItems() { + return items; + } + + public Integer getQuantity(Item item) { + return quantity.get(item.hashCode()); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/UserDomainManager.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/UserDomainManager.java new file mode 100644 index 0000000..1ad0a45 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/UserDomainManager.java @@ -0,0 +1,53 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business; + +import java.io.Serializable; +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; +import javax.transaction.Transactional; +import org.apache.log4j.Logger; +import plate.wellmann.shop.persistence.UserDomain; + +/** + * + * @author Patrick + */ +@Named +@RequestScoped +public class UserDomainManager implements Serializable{ + + final static Logger logger = Logger.getLogger(UserDomainManager.class); + + @PersistenceContext(name = "MySQL-Wellmann") + private EntityManager em; + + @Transactional + public UserDomain getDomain(String domain){ + + if (domain == null) { + logger.error("Tried to load a domain with domain == Null"); + return null; + } + + TypedQuery query = em.createNamedQuery("UserDomain.findByName", UserDomain.class); + query.setParameter("userDomain", domain); + try { + UserDomain userDomain; + logger.info("Loading Domain: " + domain); + userDomain = query.getSingleResult(); + logger.info("Domain " + domain + "succesfully loaded!"); + return userDomain; + } catch (NoResultException e){ + logger.error("Could'nt find domain " + e.toString()); + return null; + } + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/exceptions/IllegalOrphanException.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/exceptions/IllegalOrphanException.java new file mode 100644 index 0000000..f73777a --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/exceptions/IllegalOrphanException.java @@ -0,0 +1,20 @@ +package plate.wellmann.shop.business.exceptions; + +import java.util.ArrayList; +import java.util.List; + +public class IllegalOrphanException extends Exception { + private List messages; + public IllegalOrphanException(List messages) { + super((messages != null && messages.size() > 0 ? messages.get(0) : null)); + if (messages == null) { + this.messages = new ArrayList(); + } + else { + this.messages = messages; + } + } + public List getMessages() { + return messages; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/exceptions/NonexistentEntityException.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/exceptions/NonexistentEntityException.java new file mode 100644 index 0000000..852d785 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/exceptions/NonexistentEntityException.java @@ -0,0 +1,10 @@ +package plate.wellmann.shop.business.exceptions; + +public class NonexistentEntityException extends Exception { + public NonexistentEntityException(String message, Throwable cause) { + super(message, cause); + } + public NonexistentEntityException(String message) { + super(message); + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/exceptions/PreexistingEntityException.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/exceptions/PreexistingEntityException.java new file mode 100644 index 0000000..38461d2 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/exceptions/PreexistingEntityException.java @@ -0,0 +1,10 @@ +package plate.wellmann.shop.business.exceptions; + +public class PreexistingEntityException extends Exception { + public PreexistingEntityException(String message, Throwable cause) { + super(message, cause); + } + public PreexistingEntityException(String message) { + super(message); + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/AbstractFacade.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/AbstractFacade.java new file mode 100644 index 0000000..deb6153 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/AbstractFacade.java @@ -0,0 +1,64 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business.test; + +import java.util.List; +import javax.persistence.EntityManager; + +/** + * + * @author Patrick + */ +public abstract class AbstractFacade { + + private Class entityClass; + + public AbstractFacade(Class entityClass) { + this.entityClass = entityClass; + } + + protected abstract EntityManager getEntityManager(); + + public void create(T entity) { + getEntityManager().persist(entity); + } + + public void edit(T entity) { + getEntityManager().merge(entity); + } + + public void remove(T entity) { + getEntityManager().remove(getEntityManager().merge(entity)); + } + + public T find(Object id) { + return getEntityManager().find(entityClass, id); + } + + public List findAll() { + javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); + cq.select(cq.from(entityClass)); + return getEntityManager().createQuery(cq).getResultList(); + } + + public List findRange(int[] range) { + javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); + cq.select(cq.from(entityClass)); + javax.persistence.Query q = getEntityManager().createQuery(cq); + q.setMaxResults(range[1] - range[0] + 1); + q.setFirstResult(range[0]); + return q.getResultList(); + } + + public int count() { + javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); + javax.persistence.criteria.Root rt = cq.from(entityClass); + cq.select(getEntityManager().getCriteriaBuilder().count(rt)); + javax.persistence.Query q = getEntityManager().createQuery(cq); + return ((Long) q.getSingleResult()).intValue(); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/CommentFacade.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/CommentFacade.java new file mode 100644 index 0000000..2b4c953 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/CommentFacade.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business.test; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import plate.wellmann.shop.persistence.Comment; + +/** + * + * @author Patrick + */ +@Stateless +public class CommentFacade extends AbstractFacade { + + @PersistenceContext(unitName = "MySQL-Wellmann") + private EntityManager em; + + @Override + protected EntityManager getEntityManager() { + return em; + } + + public CommentFacade() { + super(Comment.class); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/CustomerFacade.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/CustomerFacade.java new file mode 100644 index 0000000..e7f46a5 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/CustomerFacade.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business.test; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import plate.wellmann.shop.persistence.Customer; + +/** + * + * @author Patrick + */ +@Stateless +public class CustomerFacade extends AbstractFacade { + + @PersistenceContext(unitName = "MySQL-Wellmann") + private EntityManager em; + + @Override + protected EntityManager getEntityManager() { + return em; + } + + public CustomerFacade() { + super(Customer.class); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/ItemFacade.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/ItemFacade.java new file mode 100644 index 0000000..6f56845 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/ItemFacade.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business.test; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import plate.wellmann.shop.persistence.Item; + +/** + * + * @author Patrick + */ +@Stateless +public class ItemFacade extends AbstractFacade { + + @PersistenceContext(unitName = "MySQL-Wellmann") + private EntityManager em; + + @Override + protected EntityManager getEntityManager() { + return em; + } + + public ItemFacade() { + super(Item.class); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/MyUserGroupsFacade.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/MyUserGroupsFacade.java new file mode 100644 index 0000000..f1f9ed3 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/MyUserGroupsFacade.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business.test; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import plate.wellmann.shop.persistence.MyUserGroups; + +/** + * + * @author Patrick + */ +@Stateless +public class MyUserGroupsFacade extends AbstractFacade { + + @PersistenceContext(unitName = "MySQL-Wellmann") + private EntityManager em; + + @Override + protected EntityManager getEntityManager() { + return em; + } + + public MyUserGroupsFacade() { + super(MyUserGroups.class); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/PaperFacade.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/PaperFacade.java new file mode 100644 index 0000000..eed7b82 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/PaperFacade.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business.test; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import plate.wellmann.shop.persistence.Paper; + +/** + * + * @author Patrick + */ +@Stateless +public class PaperFacade extends AbstractFacade { + + @PersistenceContext(unitName = "MySQL-Wellmann") + private EntityManager em; + + @Override + protected EntityManager getEntityManager() { + return em; + } + + public PaperFacade() { + super(Paper.class); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/PasswordFacade.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/PasswordFacade.java new file mode 100644 index 0000000..65752fd --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/PasswordFacade.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business.test; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import plate.wellmann.shop.persistence.Password; + +/** + * + * @author Patrick + */ +@Stateless +public class PasswordFacade extends AbstractFacade { + + @PersistenceContext(unitName = "MySQL-Wellmann") + private EntityManager em; + + @Override + protected EntityManager getEntityManager() { + return em; + } + + public PasswordFacade() { + super(Password.class); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/SaltFacade.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/SaltFacade.java new file mode 100644 index 0000000..96ae7ce --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/SaltFacade.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business.test; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import plate.wellmann.shop.persistence.Salt; + +/** + * + * @author Patrick + */ +@Stateless +public class SaltFacade extends AbstractFacade { + + @PersistenceContext(unitName = "MySQL-Wellmann") + private EntityManager em; + + @Override + protected EntityManager getEntityManager() { + return em; + } + + public SaltFacade() { + super(Salt.class); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/UserDomainFacade.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/UserDomainFacade.java new file mode 100644 index 0000000..9b8db9e --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/business/test/UserDomainFacade.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.business.test; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import plate.wellmann.shop.persistence.UserDomain; + +/** + * + * @author Patrick + */ +@Stateless +public class UserDomainFacade extends AbstractFacade { + + @PersistenceContext(unitName = "MySQL-Wellmann") + private EntityManager em; + + @Override + protected EntityManager getEntityManager() { + return em; + } + + public UserDomainFacade() { + super(UserDomain.class); + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/CostumerController.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/CostumerController.java new file mode 100644 index 0000000..e856e21 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/CostumerController.java @@ -0,0 +1,70 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.controller; + +import java.io.Serializable; +import javax.enterprise.context.SessionScoped; +import javax.inject.Inject; +import javax.inject.Named; +import org.apache.log4j.Logger; +import plate.wellmann.shop.business.CostumerManager; +import plate.wellmann.shop.business.PasswordManager; + +/** + * + * @author Patrick + */ +@Named +@SessionScoped +public class CostumerController implements Serializable { + @Inject + private CostumerManager costumerManager; + + @Inject + private PasswordManager passwordManager; + + private String username; + private String password; + + final static Logger logger = Logger.getLogger(CostumerController.class); + + public CostumerController(){ + + } + + public String login(){ + logger.info("User trying to log in: " + username); + if(costumerManager.login(username, password)){ + logger.info("Login succesfull " + username); + return "welcome.xhtml"; + } + return ""; + } + + public String logout(){ + logger.info("User trying to logged out: " + username); + costumerManager.logout(); + return "index.xhmtl"; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/CustomerController.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/CustomerController.java new file mode 100644 index 0000000..a6ae06e --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/CustomerController.java @@ -0,0 +1,76 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.controller; + +import java.io.Serializable; +import javax.enterprise.context.SessionScoped; +import javax.inject.Inject; +import javax.inject.Named; +import org.apache.log4j.Logger; +import plate.wellmann.shop.business.CustomerManager; +import plate.wellmann.shop.business.PasswordManager; + +/** + * + * @author Patrick + */ +@Named +@SessionScoped +public class CustomerController implements Serializable { + @Inject + private CustomerManager costumerManager; + + @Inject + private PasswordManager passwordManager; + + private String username; + private String password; + + final static Logger logger = Logger.getLogger(CustomerController.class); + + public CustomerController(){ + + } + + public String login(){ + logger.info("User trying to log in: " + username); + costumerManager.init(); + /*if(costumerManager.login(username, password)){ + logger.info("Login succesfull " + username); + return "ressources/users/welcome.xhtml"; + }*/ + return ""; + } + + public String logout(){ + logger.info("User trying to logged out: " + username); + costumerManager.logout(); + return "index.xhmtl"; + } + + public String demo(){ + return costumerManager.demo(); + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/DomainTicketController.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/DomainTicketController.java new file mode 100644 index 0000000..4b671e7 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/DomainTicketController.java @@ -0,0 +1,19 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.controller; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Patrick + */ +@Named +@RequestScoped +public class DomainTicketController { + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/ProductController.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/ProductController.java new file mode 100644 index 0000000..3937400 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/ProductController.java @@ -0,0 +1,280 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.controller; + +import java.io.Serializable; +import java.math.BigInteger; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import javax.enterprise.context.RequestScoped; +import javax.enterprise.context.SessionScoped; +import javax.faces.application.FacesMessage; +import javax.faces.context.FacesContext; +import javax.faces.view.ViewScoped; +import javax.inject.Inject; +import javax.inject.Named; +import org.apache.log4j.Logger; +import org.primefaces.event.FlowEvent; +import org.primefaces.event.SlideEndEvent; +import plate.wellmann.shop.persistence.Color; +import plate.wellmann.shop.persistence.Format; +import plate.wellmann.shop.persistence.Item; +import plate.wellmann.shop.persistence.Paper; + +/** + * + * @author Patrick + */ +@Named(value = "productController") +@ViewScoped +public class ProductController implements Serializable{ + final static Logger logger = Logger.getLogger(ProductController.class); + + private Item item; + private int size; + private String variations; + private List prices; + private Price selectedPrice; + + public class Price { + private final int id; + private final BigInteger price; + private final int elements; + + public Price(int id, BigInteger price, int elements) { + this.id = id; + this.price = price; + this.elements = elements; + } + + public int getId() { + return id; + } + + public BigInteger getPrice() { + return price; + } + + public int getElements() { + return elements; + } + + public String euros(){ + return price.toString().substring(0, price.toString().length()-2); + } + + public String cents(){ + return price.toString().substring(price.toString().length()-2); + } + } + + @Inject + private ShoppingcartController shoppingcartController; + + private String formatString; + + public ProductController() { + this.item = new Item(LocalDateTime.now()); + this.item.setDatacheck("Basis-Datencheck"); + this.item.setRoundedCorners(false); + this.item.setNumberAdresses(1); + } + + public String onFlowProcess(FlowEvent event) { + return event.getNewStep(); + } + + public String toCart(){ + info(item.getName() + " wurde dem Warenkorb hiznugefügt!"); + + shoppingcartController.addItem(item, size); + return "/resources/manager/shoppingcart.xhtml"; + } + + public void addFormat(String x, String y){ + item.setFormat(new Format(new BigInteger(x), new BigInteger(y))); + logger.debug("added Format "+ item.getFormat().getX() + " x " + item.getFormat().getY()); + createFormatString(); + } + + public void createFormatString(){ + String x = item.getFormat().getX().toString(); + String y = item.getFormat().getY().toString(); + + this.formatString = x.substring(0, x.length()-2)+ ","+ x.substring(x.length()-2) + "cm x " + + y.substring(0, y.length()-2) + ","+ y.substring(y.length()-2) + "cm"; + } + + public void addPaper(String name){ + Paper paper = new Paper(); + paper.setFormat("A3"); + paper.setName(name); + paper.setSort("HeißesWeißes"); + item.setPaper(paper); + } + + public void addFinishing (String finishing){ + item.setFinishing(finishing); + } + + public void addColor(int id){ + switch(id){ + case 0: + item.setColors(cmyk()); + break; + default: + } + } + + public void createPricesV(){ + logger.debug("started Pricegenerator"); + prices = new ArrayList<>(); + BigInteger var = new BigInteger(variations); + + int i = 1; + + BigInteger nr = new BigInteger("5043").multiply(var); + Price price = new Price(i, nr, 100); + prices.add(price); + i++; + + nr = new BigInteger("8064").multiply(var); + Price price2 = new Price(i, nr, 250); + prices.add(price2); + i++; + + nr = new BigInteger("11022").multiply(var); + Price price3 = new Price(i, nr, 1000); + prices.add(price3); + i++; + + nr = new BigInteger("12011").multiply(var); + Price price4 = new Price(i, nr, 2500); + prices.add(price4); + i++; + + nr = new BigInteger("13522").multiply(var); + Price price5 = new Price(i, nr, 5000); + prices.add(price5); + + selectedPrice = prices.get(0); + } + + private List cmyk(){ + List colors = new ArrayList<>(); + Color c = new Color(); + c.setColorRoom(Color.ColorRoom.SKALA); + c.setName("Schwarz"); + c.setColorType(Color.ColorType.K); + c.setHtmlDotStyle("height:20px;width: 20px; background-color: #000000;border-radius: 50%;display: inline-block;"); + colors.add(c); + + Color co = new Color(); + co.setColorRoom(Color.ColorRoom.SKALA); + co.setName("Magenta"); + co.setColorType(Color.ColorType.K); + co.setHtmlDotStyle("height:20px;width: 20px; background-color: #ff00ff;border-radius: 50%;display: inline-block;"); + colors.add(co); + + co = new Color(); + co.setColorRoom(Color.ColorRoom.SKALA); + co.setName("Cyan"); + co.setColorType(Color.ColorType.K); + co.setHtmlDotStyle("height:20px;width: 20px; background-color: #00FFFF;border-radius: 50%;display: inline-block;"); + colors.add(co); + + co = new Color(); + co.setColorRoom(Color.ColorRoom.SKALA); + co.setName("Yellow"); + co.setColorType(Color.ColorType.K); + co.setHtmlDotStyle("height:20px;width: 20px; background-color: #FFFF00;border-radius: 50%;display: inline-block;"); + colors.add(co); + + return colors; + } + + private void error(String message) { + FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Fehler", message)); + + } + + private void info(String message) { + FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Erfolg", message)); + } + + public Item getItem() { + return item; + } + + public void setItem(Item item) { + this.item = item; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public String getFormatString() { + return formatString; + } + + public String paperString(){ + return item.getPaper().getName(); + } + + public String finishingString(){ + return item.getFinishing(); + } + + public String getVariations() { + return variations; + } + + public void setVariations(String variations) { + this.variations = variations; + } + + public List getPrices() { + return prices; + } + + public Price getSelectedPrice() { + return selectedPrice; + } + + public void setSelectedPrice(Price selectedPrice) { + this.selectedPrice = selectedPrice; + } + + public String getDatacheck(){ + return item.getDatacheck(); + } + + public void setDatacheck(String datacheck){ + item.setDatacheck(datacheck); + } + + public boolean isRoundedCorners(){ + return item.isRoundedCorners(); + } + + public void setRoundedCorners(boolean roundedCorners){ + item.setRoundedCorners(roundedCorners); + } + + public int getNumberAdresses(){ + return item.getNumberAdresses(); + } + + public void setNumberAdresses(int numberAdresses){ + item.setNumberAdresses(numberAdresses); + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/ShoppingcartController.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/ShoppingcartController.java new file mode 100644 index 0000000..f350142 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/ShoppingcartController.java @@ -0,0 +1,76 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.controller; + +import java.io.Serializable; +import javax.enterprise.context.SessionScoped; +import javax.faces.application.FacesMessage; +import javax.faces.context.FacesContext; +import javax.inject.Inject; +import javax.inject.Named; +import plate.wellmann.shop.business.ShoppingcartManager; +import plate.wellmann.shop.persistence.Item; +import java.util.List; +import javax.transaction.Transactional; + +/** + * + * @author Patrick + */ +@SessionScoped +@Named +public class ShoppingcartController implements Serializable{ + @Inject + ShoppingcartManager cartManager; + + public void addItem(Item item, Integer size){ + if (item == null) { + return; + } + cartManager.addItem(item, size); + } + + public List getItems(){ + return cartManager.getItems(); + } + + public void deleteItem(Long id){ + if (id == null) { + error("Element konnte nicht aus Warenkorb entfernt werden!"); + return; + } + boolean status = cartManager.deleteItem(id); + if (status) { + info("Element wurde vom Warenkorb entfernt!"); + } else { + error("Element konnte nicht aus Warenkorb entfernt werden!"); + } + } + + public boolean setQuantity(Item item, Integer size){ + boolean status = cartManager.setQuantity(item, size); + if (status) { + info(item.getName() +" wurde zum Warenkorb hinzugefügt!"); + } else { + error(item.getName() +" konnte nicht zum Warenkorb hinzugefügt werden!"); + } + return status; + } + + private void error(String message) { + FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Fehler", message)); + + } + + private void info(String message) { + FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Erfolg", message)); + } + + @Transactional + public void demo(){ + cartManager.demo(); + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/ThemeController.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/ThemeController.java new file mode 100644 index 0000000..7d15870 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/ThemeController.java @@ -0,0 +1,98 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.controller; + +import javax.inject.Named; +import javax.enterprise.context.SessionScoped; +import java.io.Serializable; + +/** + * + * @author Patrick + */ +@Named(value = "themeController") +@SessionScoped +public class ThemeController implements Serializable { + + private String theme = "start"; + + private final String[] themes = { + "afterdark", + "afternoon", + "afterwork", + "aristo", + "black-tie", + "blitzer", + "bluesky", + "bootstrap", + "casablanca", + "cupertino", + "cruze", + "dark-hive", + "delta", + "dot-luv", + "eggplant", + "excite-bike", + "flick", + "glass-x", + "home", + "hot-sneaks", + "humanity", + "le-frog", + "midnight", + "mint-choc", + "overcast", + "pepper-grinder", + "redmond", + "rocket", + "sam", + "smoothness", + "south-street", + "start", + "sunny", + "swanky-purse", + "trontastic", + "ui-darkness", + "ui-lightness", + "vader" + }; + + /** + * Get the value of themes + * + * @return the value of themes + */ + public String[] getThemes() { + return themes; + } + + + /** + * Get the value of theme + * + * @return the value of theme + */ + public String getTheme() { + return theme; + } + + /** + * Set the value of theme + * + * @param theme new value of theme + */ + public void setTheme(String theme) { + this.theme = theme; + } + + + /** + * Creates a new instance of ThemeController + */ + public ThemeController() { + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/user/EmailController.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/user/EmailController.java new file mode 100644 index 0000000..94bdc96 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/user/EmailController.java @@ -0,0 +1,20 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.controller.user; + +import java.io.Serializable; +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Patrick + */ +@Named +@RequestScoped +public class EmailController implements Serializable { + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/user/UserTicketsController.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/user/UserTicketsController.java new file mode 100644 index 0000000..808d1f2 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/controller/user/UserTicketsController.java @@ -0,0 +1,33 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.controller.user; + +import java.io.Serializable; +import java.util.List; +import javax.enterprise.context.SessionScoped; +import javax.inject.Inject; +import javax.inject.Named; +import plate.wellmann.shop.persistence.Customer; +import plate.wellmann.shop.persistence.Item; + +/** + * + * @author Patrick + */ +@Named +@SessionScoped +public class UserTicketsController implements Serializable{ + @Inject + private Customer activeCostumer; + + @Inject + private List activeTickets; + + public List getActiveTickets() { + return activeTickets; + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/AbstractEntity.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/AbstractEntity.java new file mode 100644 index 0000000..3c104d4 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/AbstractEntity.java @@ -0,0 +1,49 @@ +package plate.wellmann.shop.persistence; + +import java.io.Serializable; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; + +/** + * + * @author Patrick Plate + */ +@MappedSuperclass +public class AbstractEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object object) { + if (!(object.getClass() == this.getClass())) { + return false; + } + AbstractEntity other = (AbstractEntity) object; + if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { + return false; + } + return true; + } + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Color.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Color.java new file mode 100644 index 0000000..fdfee0c --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Color.java @@ -0,0 +1,162 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import java.math.BigDecimal; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.ManyToOne; +import javax.validation.constraints.DecimalMax; +import javax.validation.constraints.DecimalMin; +import javax.validation.constraints.NotNull; + +/** + * + * @author Patrick + */ +@Entity +public class Color extends AbstractEntity{ + + @NotNull + private BigDecimal price; + + @ManyToOne + private Item item; + + @NotNull + private String name; + + private String htmlDotStyle; + + private String htmlStyle; + + @NotNull + @DecimalMin(value = "0", message = "Nicht unter Null") + @DecimalMax(value = "100", message = "Nicht über Hundert") + private BigDecimal cyan; + + @NotNull + @DecimalMin(value = "0", message = "Nicht unter Null") + @DecimalMax(value = "100", message = "Nicht über Hundert") + private BigDecimal magenta; + + @NotNull + @DecimalMin(value = "0", message = "Nicht unter Null") + @DecimalMax(value = "100", message = "Nicht über Hundert") + private BigDecimal yellow; + + @NotNull + @DecimalMin(value = "0", message = "Nicht unter Null") + @DecimalMax(value = "100", message = "Nicht über Hundert") + private BigDecimal kontrast; + + @NotNull + @Enumerated(EnumType.STRING) + private ColorRoom colorRoom; + + @Enumerated(EnumType.STRING) + private ColorType colorType; + + public enum ColorRoom { + SKALA, + HKS, + PANTONE + } + + public enum ColorType { + K, + N + } + + public String getHtmlDotStyle() { + return htmlDotStyle; + } + + public void setHtmlDotStyle(String htmlDotStyle) { + this.htmlDotStyle = htmlDotStyle; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public ColorRoom getColorRoom() { + return colorRoom; + } + + public void setColorRoom(ColorRoom colorRoom) { + this.colorRoom = colorRoom; + } + + public ColorType getColorType() { + return colorType; + } + + public void setColorType(ColorType colorType) { + this.colorType = colorType; + } + + public String getHtmlStyle() { + return htmlStyle; + } + + public void setHtmlStyle(String htmlStyle) { + this.htmlStyle = htmlStyle; + } + + public BigDecimal getCyan() { + return cyan; + } + + public void setCyan(BigDecimal cyan) { + this.cyan = cyan; + } + + public BigDecimal getMagenta() { + return magenta; + } + + public void setMagenta(BigDecimal magenta) { + this.magenta = magenta; + } + + public BigDecimal getYellow() { + return yellow; + } + + public void setYellow(BigDecimal yellow) { + this.yellow = yellow; + } + + public BigDecimal getKontrast() { + return kontrast; + } + + public void setKontrast(BigDecimal kontrast) { + this.kontrast = kontrast; + } + + public Item getItem() { + return item; + } + + public void setItem(Item item) { + this.item = item; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Comment.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Comment.java new file mode 100644 index 0000000..dec8e35 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Comment.java @@ -0,0 +1,65 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import java.time.LocalDateTime; +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + +/** + * + * @author Patrick + */ +@Entity +public class Comment extends AbstractEntity { + + private String text; + private final Customer writer; + private final LocalDateTime creationDate; + private LocalDateTime lastEditedDate; + private boolean edited; + + @ManyToOne + private Item item; + + public Comment(Customer customer) { + this.writer = customer; + this.creationDate = LocalDateTime.now(); + this.edited = false; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public LocalDateTime getLastEditedDate() { + return lastEditedDate; + } + + public void setLastEditedDate(LocalDateTime lastEditedDate) { + this.lastEditedDate = lastEditedDate; + } + + public boolean isEdited() { + return edited; + } + + public void setEdited(boolean edited) { + this.edited = edited; + } + + public Item getItem() { + return item; + } + + public void setItem(Item item) { + this.item = item; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Costumer.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Costumer.java new file mode 100644 index 0000000..962dfad --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Costumer.java @@ -0,0 +1,250 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToOne; + +/** + * + * @author Patrick + */ +@Entity +@NamedQueries({ + @NamedQuery(name = "Costumer.findByEmail", + query = "SELECT c FROM Costumer c WHERE c.email = :email"), + @NamedQuery(name = "Costumer.findByID", + query = "SELECT c FROM Costumer c WHERE c.id = :id") +}) +public class Costumer extends AbstractEntity { + + public static Costumer nullCostumer = new Costumer(); + + @ManyToOne(cascade = CascadeType.ALL) + private UserDomain userDomain; + + @Column(name="Email", unique=true, nullable=false) + private String email; + + @OneToOne(cascade = CascadeType.ALL) + private Password password; + + @OneToOne(cascade = CascadeType.ALL) + private Salt salt; + + @Column(name="Kunde") + private String kunde; + + @Column(name="Kunde2") + private String kunde2; + + @Column(name="Ansprechpartner") + private String contact; + + @Column(name="Straße") + private String street; + + @Column(name="Ort") + private String city; + + @Column(name="Telefon") + private String telefon; + + @Column(name="Mobil") + private String mobile; + + @Column(name="Anrede") + private String call; + + @Column(name="Liefername") + private String deliveryName; + + @Column(name="Lieferansprechpartner") + private String deliveryContakt; + + @Column(name="Lieferort") + private String deliveryCity; + + @Column(name="Lieferstraße") + private String deliveryStreet; + + //Besser als enum + @Column(name="Zahlungsbedingungen") + private String paymentConditions; + + public Costumer(String email, byte[] password, Salt salt) { + this.email = email; + this.password = new Password(this, password); + this.salt = salt; + this.userDomain = new UserDomain(email.substring(email.indexOf("@") + 1), this); + } + + public Costumer(String email, byte[] password, Salt salt, String domain) { + this.email = email; + this.password = new Password(this, password); + this.salt = salt; + this.userDomain = new UserDomain(domain, this); + } + + public Costumer(String email, byte[] password, Salt salt, UserDomain domain){ + this.email = email; + this.password = new Password(this, password); + this.salt = salt; + this.userDomain = domain; + } + + private Costumer() { + } + + public Password getPassword() { + return password; + } + + public void setPassword(Password password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public static Costumer getNullCostumer() { + return nullCostumer; + } + + public static void setNullCostumer(Costumer nullCostumer) { + Costumer.nullCostumer = nullCostumer; + } + + public UserDomain getDomain() { + return userDomain; + } + + public void setDomain(UserDomain domain) { + this.userDomain = domain; + } + + public String getKunde() { + return kunde; + } + + public void setKunde(String kunde) { + this.kunde = kunde; + } + + public String getKunde2() { + return kunde2; + } + + public void setKunde2(String kunde2) { + this.kunde2 = kunde2; + } + + public String getContact() { + return contact; + } + + public void setContact(String contact) { + this.contact = contact; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getTelefon() { + return telefon; + } + + public void setTelefon(String telefon) { + this.telefon = telefon; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getCall() { + return call; + } + + public void setCall(String call) { + this.call = call; + } + + public String getDeliveryName() { + return deliveryName; + } + + public void setDeliveryName(String deliveryName) { + this.deliveryName = deliveryName; + } + + public String getDeliveryContakt() { + return deliveryContakt; + } + + public void setDeliveryContakt(String deliveryContakt) { + this.deliveryContakt = deliveryContakt; + } + + public String getDeliveryCity() { + return deliveryCity; + } + + public void setDeliveryCity(String deliveryCity) { + this.deliveryCity = deliveryCity; + } + + public String getDeliveryStreet() { + return deliveryStreet; + } + + public void setDeliveryStreet(String deliveryStreet) { + this.deliveryStreet = deliveryStreet; + } + + public String getPaymentConditions() { + return paymentConditions; + } + + public void setPaymentConditions(String paymentConditions) { + this.paymentConditions = paymentConditions; + } + + public Salt getSalt() { + return salt; + } + + public void setSalt(Salt salt) { + this.salt = salt; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Customer.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Customer.java new file mode 100644 index 0000000..59678ee --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Customer.java @@ -0,0 +1,304 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import java.util.ArrayList; +import java.util.List; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; + +/** + * + * @author Patrick + */ +@Entity +@NamedQueries({ + @NamedQuery(name = "Customer.findByEmail", + query = "SELECT c FROM Customer c WHERE c.email = :email"), + @NamedQuery(name = "Customer.findByID", + query = "SELECT c FROM Customer c WHERE c.id = :id") +}) +public class Customer extends AbstractEntity { + + public static Customer nullCustomer = new Customer(); + + @OneToMany(mappedBy = "creator", fetch = FetchType.LAZY) + private List tickets; + + @ManyToMany(mappedBy = "watchers") + private List watchTickets; + + @ManyToOne(cascade = CascadeType.ALL) + private UserDomain userDomain; + + @Column(name="Email", unique=true, nullable=false) + private String email; + + @OneToOne(cascade = CascadeType.ALL) + private Password password; + + @OneToOne(cascade = CascadeType.ALL) + private Salt salt; + + @OneToOne(cascade = CascadeType.ALL) + private MyUserGroups groups; + + @Column(name="Kunde") + private String kunde; + + @Column(name="Kunde2") + private String kunde2; + + @Column(name="Ansprechpartner") + private String contact; + + @Column(name="Straße") + private String street; + + @Column(name="Ort") + private String city; + + @Column(name="Telefon") + private String telefon; + + @Column(name="Mobil") + private String mobile; + + @Column(name="Anrede") + private String call; + + @Column(name="Liefername") + private String deliveryName; + + @Column(name="Lieferansprechpartner") + private String deliveryContakt; + + @Column(name="Lieferort") + private String deliveryCity; + + @Column(name="Lieferstraße") + private String deliveryStreet; + + //Besser als enum + @Column(name="Zahlungsbedingungen") + private String paymentConditions; + + public Customer(){ + + } + + public Customer(String email, String password, Salt salt) { + this.email = email; + this.password = new Password(this, password); + this.salt = salt; + this.userDomain = new UserDomain(email.substring(email.indexOf("@") + 1), this); + } + + public Customer(String email, String password, Salt salt, String domain) { + this.email = email; + this.password = new Password(this, password); + this.salt = salt; + this.userDomain = new UserDomain(domain, this); + } + + public Customer(String email, String password, Salt salt, UserDomain domain){ + this.email = email; + this.password = new Password(this, password); + this.salt = salt; + this.userDomain = domain; + } + + public Customer(String email, String password, Salt salt, UserDomain domain, MyUserGroups groups){ + this.email = email; + this.password = new Password(this, password); + this.salt = salt; + this.userDomain = domain; + this.groups = groups; + } + + public Password getPassword() { + return password; + } + + public void setPassword(Password password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public static Customer getNullCustomer() { + return nullCustomer; + } + + public static void setNullCustomer(Customer nullCustomer) { + Customer.nullCustomer = nullCustomer; + } + + public UserDomain getDomain() { + return userDomain; + } + + public void setDomain(UserDomain domain) { + this.userDomain = domain; + } + + public String getKunde() { + return kunde; + } + + public void setKunde(String kunde) { + this.kunde = kunde; + } + + public String getKunde2() { + return kunde2; + } + + public void setKunde2(String kunde2) { + this.kunde2 = kunde2; + } + + public String getContact() { + return contact; + } + + public void setContact(String contact) { + this.contact = contact; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getTelefon() { + return telefon; + } + + public void setTelefon(String telefon) { + this.telefon = telefon; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getCall() { + return call; + } + + public void setCall(String call) { + this.call = call; + } + + public String getDeliveryName() { + return deliveryName; + } + + public void setDeliveryName(String deliveryName) { + this.deliveryName = deliveryName; + } + + public String getDeliveryContakt() { + return deliveryContakt; + } + + public void setDeliveryContakt(String deliveryContakt) { + this.deliveryContakt = deliveryContakt; + } + + public String getDeliveryCity() { + return deliveryCity; + } + + public void setDeliveryCity(String deliveryCity) { + this.deliveryCity = deliveryCity; + } + + public String getDeliveryStreet() { + return deliveryStreet; + } + + public void setDeliveryStreet(String deliveryStreet) { + this.deliveryStreet = deliveryStreet; + } + + public String getPaymentConditions() { + return paymentConditions; + } + + public void setPaymentConditions(String paymentConditions) { + this.paymentConditions = paymentConditions; + } + + public Salt getSalt() { + return salt; + } + + public void setSalt(Salt salt) { + this.salt = salt; + } + + public UserDomain getUserDomain() { + return userDomain; + } + + public void setUserDomain(UserDomain userDomain) { + this.userDomain = userDomain; + } + + public MyUserGroups getGroups() { + return groups; + } + + public void setGroups(MyUserGroups groups) { + this.groups = groups; + } + + public List getTickets() { + return tickets; + } + + public void setTickets(List tickets) { + this.tickets = tickets; + } + + public void addTicket(Item ticket){ + if (tickets == null) { + tickets = new ArrayList<>(); + } + tickets.add(ticket); + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Format.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Format.java new file mode 100644 index 0000000..a11a357 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Format.java @@ -0,0 +1,38 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import java.math.BigInteger; +import javax.persistence.Entity; + +/** + * + * @author Patrick + */ +@Entity +public class Format extends AbstractEntity { + + private final BigInteger x; + private final BigInteger y; + + public Format(BigInteger x, BigInteger y) { + this.x = x; + this.y = y; + } + + @Override + public String toString() { + return "plate.wellmann.shop.persistence.Format[ id=" + getId() + " ]"; + } + + public BigInteger getX() { + return x; + } + + public BigInteger getY() { + return y; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Item.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Item.java new file mode 100644 index 0000000..1237ff3 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Item.java @@ -0,0 +1,282 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import java.math.BigInteger; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; +import javax.validation.constraints.NotNull; + +/** + * + * @author Patrick + */ +@Entity +@NamedQueries({ + @NamedQuery(name = "Item.findByID", + query = "SELECT t FROM Item t WHERE t.id = :id"), + @NamedQuery(name = "Item.findByUser", + query = "SELECT t FROM Item t WHERE t.creator = :creator") +}) +public class Item extends AbstractEntity { + + private String name; + + private String datacheck; + + private Paper paper; + + @OneToMany(mappedBy = "item", fetch = FetchType.LAZY) + private List colors; + + @ManyToOne + private Customer creator; + + private Customer manager; + + private BigInteger quantity; + + private BigInteger price; + + @OneToMany(mappedBy = "item", fetch = FetchType.LAZY) + private List comments; + + @NotNull + @Enumerated(EnumType.STRING) + private TicketStatus status; + + @NotNull + @Enumerated(EnumType.STRING) + private PayMethod payMethod; + + private final LocalDateTime creationDate; + + private LocalDateTime lastChangeDate; + + @ManyToMany(fetch = FetchType.EAGER) + private List watchers; + + @OneToMany(mappedBy = "ticket", fetch = FetchType.LAZY) + private List log; + + private boolean payed; + + private Format format; + + private String finishing; + + private boolean roundedCorners; + + private int numberAdresses; + + public enum PayMethod { + BILL, + AHEAD, + CREDITCARD, + PAYPAL + } + + public enum TicketStatus { + NEW, + PENDING, + ACTIVE, + CLOSED, + REOPENED + } + + public Item(LocalDateTime creationDate) { + this.creationDate = creationDate; + this.status = TicketStatus.NEW; + } + + public BigInteger getQuantity() { + return quantity; + } + + public void setQuantity(BigInteger quantity) { + this.quantity = quantity; + } + + public Paper getPaper() { + return paper; + } + + public void setPaper(Paper paper) { + this.paper = paper; + } + + public List getColors() { + return colors; + } + + public void setColors(List colors) { + this.colors = colors; + } + + public Customer getCreator() { + return creator; + } + + public void setCreator(Customer customer) { + this.creator = customer; + } + + public Customer getManager() { + return manager; + } + + public void setManager(Customer manager) { + this.manager = manager; + } + + public List getComments() { + return comments; + } + + public void setComments(List comments) { + this.comments = comments; + } + + public TicketStatus getStatus() { + return status; + } + + public void setStatus(TicketStatus status) { + this.status = status; + } + + public LocalDateTime getLastChangeDate() { + return lastChangeDate; + } + + public void setLastChangeDate(LocalDateTime lastChangeDate) { + this.lastChangeDate = lastChangeDate; + } + + public List getWatchers() { + return watchers; + } + + public void setWatchers(List watchers) { + this.watchers = watchers; + } + + public LocalDateTime getCreationDate() { + return creationDate; + } + + public List getLog() { + return log; + } + + public void addLogEntry(String entry) { + if (log == null) { + log = new ArrayList<>(); + } + log.add(new Log(entry, this)); + } + + public boolean isPayed() { + return payed; + } + + public void setPayed(boolean payed) { + this.payed = payed; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public BigInteger getPrice() { + return price; + } + + public PayMethod getPayMethod() { + return payMethod; + } + + public void setPayMethod(PayMethod payMethod) { + this.payMethod = payMethod; + } + + public void setPrice(BigInteger price) { + this.price = price; + } + + public Format getFormat() { + return format; + } + + public void setFormat(Format format) { + this.format = format; + } + + public String getPriceEuro(){ + if (price == null) { + return "error"; + } + //return price.remainder(new BigInteger("100")).toString(); + String digits = price.toString(); + return digits.substring(0, digits.length()-2); + } + + public String getPriceCent(){ + String digits = price.toString(); + int length = digits.length(); + return digits.substring(length-2, length); + } + + public String fullPriceEuro(){ + return getPriceEuro()+","+getPriceCent()+" €"; + } + + public String getFinishing() { + return finishing; + } + + public void setFinishing(String finishing) { + this.finishing = finishing; + } + + public String getDatacheck() { + return datacheck; + } + + public void setDatacheck(String datacheck) { + this.datacheck = datacheck; + } + + public boolean isRoundedCorners() { + return roundedCorners; + } + + public void setRoundedCorners(boolean roundedCorners) { + this.roundedCorners = roundedCorners; + } + + public int getNumberAdresses() { + return numberAdresses; + } + + public void setNumberAdresses(int numberAdresses) { + this.numberAdresses = numberAdresses; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Log.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Log.java new file mode 100644 index 0000000..6e17a57 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Log.java @@ -0,0 +1,34 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + +/** + * + * @author Patrick + */ +@Entity +public class Log extends AbstractEntity{ + private final String entry; + + @ManyToOne + private final Item ticket; + + public Log(String entry, Item ticket) { + this.entry = entry; + this.ticket = ticket; + } + + public String getEntry() { + return entry; + } + + public Item getTicket() { + return ticket; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/MyUserGroups.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/MyUserGroups.java new file mode 100644 index 0000000..64afb4e --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/MyUserGroups.java @@ -0,0 +1,48 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.OneToOne; +import javax.validation.constraints.NotNull; + +/** + * + * @author Patrick + */ +@Entity +public class MyUserGroups extends AbstractEntity { + @OneToOne + private final Customer customer; + + @NotNull + @Enumerated(EnumType.STRING) + private Group userGroup; + + public enum Group { + USER, + SUPERUSER, + MANAGER, + ADMIN + } + + public MyUserGroups(Customer customer, Group group) { + this.customer = customer; + this.userGroup = group; + } + + public Group getUserGroup() { + return userGroup; + } + + public void setUserGroup(Group userGroup) { + this.userGroup = userGroup; + } + + +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Paper.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Paper.java new file mode 100644 index 0000000..9c06db0 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Paper.java @@ -0,0 +1,181 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; + +/** + * + * @author Patrick + */ +@Entity +public class Paper extends AbstractEntity{ + + @Column(name="Bestellnummer") + private String orderNR; + + @Column(name="Bestellnummer2") + private String orderNR2; + + @Column(name="Betand") + private int inStorage; + + @Column(name="Datum papier eingabe") + private Date date; + + @Column(name="Euro Bestand") + private int euroStorage; + + @Column(name="Format") + private String format; + + @Column(name="Gewicht") + private String weight; + + @Column(name="Laufrichtung") + @Enumerated(EnumType.STRING) + private Direction direction; + + @Column(name="Ort Papier") + private String place; + + @Column(name="Papierlieferant") + private String source; + + @Column(name="Papiername") + private String name; + + @Column(name="Papierpreis ein") + private BigDecimal priceBuy; + + @Column(name="Papiersorte") + private String sort; + + @Column(name="Riesinhalt") + private int riesCapacity; + + //Direction of the Paper + public enum Direction { + SB, BB + } + + public String getOrderNR() { + return orderNR; + } + + public void setOrderNR(String orderNR) { + this.orderNR = orderNR; + } + + public String getOrderNR2() { + return orderNR2; + } + + public void setOrderNR2(String orderNR2) { + this.orderNR2 = orderNR2; + } + + public int getInStorage() { + return inStorage; + } + + public void setInStorage(int inStorage) { + this.inStorage = inStorage; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public int getEuroStorage() { + return euroStorage; + } + + public void setEuroStorage(int euroStorage) { + this.euroStorage = euroStorage; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public String getWeight() { + return weight; + } + + public void setWeight(String weight) { + this.weight = weight; + } + + public Direction getDirection() { + return direction; + } + + public void setDirection(Direction direction) { + this.direction = direction; + } + + public String getPlace() { + return place; + } + + public void setPlace(String place) { + this.place = place; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public BigDecimal getPriceBuy() { + return priceBuy; + } + + public void setPriceBuy(BigDecimal priceBuy) { + this.priceBuy = priceBuy; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public int getRiesCapacity() { + return riesCapacity; + } + + public void setRiesCapacity(int riesCapacity) { + this.riesCapacity = riesCapacity; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Password.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Password.java new file mode 100644 index 0000000..4e7bd1a --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Password.java @@ -0,0 +1,50 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import java.util.Arrays; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToOne; + +/** + * + * @author Patrick + */ +@Entity +@NamedQueries({ + @NamedQuery(name = "MyPassword.findByPassword", + query = "SELECT p FROM Password p WHERE p.password = :password"), + @NamedQuery(name = "Password.findByCostumerID", + query = "SELECT p FROM Password p WHERE p.customer = :customer") +}) +public class Password extends AbstractEntity { + + @OneToOne + private final Customer customer; + + @Column(name="password") + private String password; + + public Password (Customer costumer, String password) { + this.customer = costumer; + this.password = password; + } + + public Customer getCostumer() { + return customer; + } + + public String getPassword() { + return password; + } + + public void setPassowrd(String password){ + this.password = password; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Salt.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Salt.java new file mode 100644 index 0000000..69b3a41 --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/Salt.java @@ -0,0 +1,48 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +//import java.nio.charset.Charset; +import java.security.SecureRandom; +import java.util.Arrays; +import javax.persistence.Entity; + +/** + * + * @author Patrick + */ +@Entity +public class Salt extends AbstractEntity { + + //private final Charset UTF8_CHARSET = Charset.forName("UTF-8"); + + private byte[] salt; + private int interations; + + public Salt(){ + interations = 3072; + generateSalt(); + } + + private void generateSalt() { + SecureRandom random = new SecureRandom(); + byte bytes[] = new byte[64]; + random.nextBytes(bytes); + salt = bytes; + } + + public java.lang.String bytetoString(byte[] input) { + return Arrays.toString(input); + } + + public byte[] getSalt() { + return salt; + } + + public int getInterations() { + return interations; + } +} diff --git a/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/UserDomain.java b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/UserDomain.java new file mode 100644 index 0000000..cde2fca --- /dev/null +++ b/java/wellmann-shop/src/main/java/plate/wellmann/shop/persistence/UserDomain.java @@ -0,0 +1,72 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package plate.wellmann.shop.persistence; + +import java.util.ArrayList; +import java.util.List; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; +import org.apache.log4j.Logger; + +/** + * + * @author Patrick + */ +@Entity +@NamedQueries({ + @NamedQuery(name = "UserDomain.findByName", + query = "SELECT d FROM UserDomain d WHERE d.userDomain = :userDomain"), + @NamedQuery(name = "UserDomain.findAll", + query = "SELECT d FROM UserDomain d ") +}) +public class UserDomain extends AbstractEntity{ + + final static Logger logger = Logger.getLogger(UserDomain.class); + + @OneToMany(mappedBy = "userDomain") + private List customers; + + @Column(name="userDomain", unique=true, nullable=false) + private final String userDomain; + + public UserDomain() { + userDomain = null; + } + + public UserDomain(String domain, Customer customer){ + this.userDomain = domain; + customers = new ArrayList<>(); + customers.add(customer); + logger.info("Created new UserDomain " + domain + " and added Costumer: " + customer.getEmail()); + } + + public void addCostumer(Customer customer){ + if(customers == null){ + customers = new ArrayList<>(); + } + if (customer == null || customer == Customer.nullCustomer) { + logger.warn("Tried to add null Customer to domain" + userDomain); + return; + } + //to safe RAM + //String domain = customer.getEmail().substring(customer.getEmail().indexOf("@") + 1); + if (customer.getEmail().substring(customer.getEmail().indexOf("@") + 1).equals(userDomain)) { + customers.add(customer); + logger.info("Added " + customer.getEmail() + " to Domain " + userDomain); + } + } + + public List getCustomers() { + return customers; + } + + public String getDomain() { + return userDomain; + } +} diff --git a/java/wellmann-shop/src/main/resources/META-INF/persistence.xml b/java/wellmann-shop/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..cbc06ae --- /dev/null +++ b/java/wellmann-shop/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,21 @@ + + + + java:/Wellmann-Shop + plate.wellmann.shop.persistence.Customer + plate.wellmann.shop.persistence.Salt + plate.wellmann.shop.persistence.UserDomain + plate.wellmann.shop.persistence.MyUserGroups + plate.wellmann.shop.persistence.Password + plate.wellmann.shop.persistence.Color + plate.wellmann.shop.persistence.Item + plate.wellmann.shop.persistence.Comment + plate.wellmann.shop.persistence.Paper + plate.wellmann.shop.persistence.Log + plate.wellmann.shop.persistence.Format + false + + + + + diff --git a/java/wellmann-shop/src/main/resources/log4j.properties b/java/wellmann-shop/src/main/resources/log4j.properties new file mode 100644 index 0000000..ebf353b --- /dev/null +++ b/java/wellmann-shop/src/main/resources/log4j.properties @@ -0,0 +1,16 @@ +# Root logger option +log4j.rootLogger=DEBUG, stdout, file + +# Redirect log messages to console +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n + +# Redirect log messages to a log file, support file rolling. +log4j.appender.file=org.apache.log4j.RollingFileAppender +log4j.appender.file.File=${user.home}/wellmann-shop.log +log4j.appender.file.MaxFileSize=5MB +log4j.appender.file.MaxBackupIndex=10 +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n diff --git a/java/wellmann-shop/src/main/webapp/WEB-INF/faces-config.xml b/java/wellmann-shop/src/main/webapp/WEB-INF/faces-config.xml new file mode 100644 index 0000000..ea5c94b --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/WEB-INF/faces-config.xml @@ -0,0 +1,12 @@ + + + + loginBean + httpauthenticationmechanism.LoginBean + request + + \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/WEB-INF/jboss-app.xml b/java/wellmann-shop/src/main/webapp/WEB-INF/jboss-app.xml new file mode 100644 index 0000000..f5245e1 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/WEB-INF/jboss-app.xml @@ -0,0 +1,6 @@ + + wellmannsec + diff --git a/java/wellmann-shop/src/main/webapp/WEB-INF/jboss-web.xml b/java/wellmann-shop/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..f5245e1 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,6 @@ + + wellmannsec + diff --git a/java/wellmann-shop/src/main/webapp/WEB-INF/web.xml b/java/wellmann-shop/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..48a6afc --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,91 @@ + + + + + + authorise + /ressources/users/* + GET + POST + TRACE + HEAD + DELETE + CONNECT + OPTIONS + PUT + + + + ADMIN + MANAGER + SUPER_USER + USER + + + + CONFIDENTIAL + + + + + Normal User which got invited + USER + + + User that can invite other user from the same domain + SUPER_USER + + + User that controlls the process in the company + MANAGER> + + + Admin user who can change entries, invite new domains and more.. + ADMIN + + + + FORM + wellmannsec + + /login.xhtml + /error.xhtml + + + + + + javax.faces.PROJECT_STAGE + Development + + + primefaces.THEME + #{themeController.theme} + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + *.xhtml + + + + + 30 + + + true + + COOKIE + + + /login.xhtml + + diff --git a/java/wellmann-shop/src/main/webapp/error.xhtml b/java/wellmann-shop/src/main/webapp/error.xhtml new file mode 100644 index 0000000..f5cd62a --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/error.xhtml @@ -0,0 +1,31 @@ + + + Login Testpage + + + + ERROR + + + + + + + + + + + + + + + + + + + + + diff --git a/java/wellmann-shop/src/main/webapp/index.html b/java/wellmann-shop/src/main/webapp/index.html new file mode 100644 index 0000000..3b4ad80 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/index.html @@ -0,0 +1,10 @@ + + + + Start Page + + + +

Hello World!

+ + diff --git a/java/wellmann-shop/src/main/webapp/index.xhtml b/java/wellmann-shop/src/main/webapp/index.xhtml new file mode 100644 index 0000000..f077162 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/index.xhtml @@ -0,0 +1,30 @@ + + + Login Testpage + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/wellmann-shop/src/main/webapp/login.xhtml b/java/wellmann-shop/src/main/webapp/login.xhtml new file mode 100644 index 0000000..8c311ea --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/login.xhtml @@ -0,0 +1,33 @@ + + + Login Testpage + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/wellmann-shop/src/main/webapp/resources/css/anfrageformular.css b/java/wellmann-shop/src/main/webapp/resources/css/anfrageformular.css new file mode 100644 index 0000000..16ba4b4 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/css/anfrageformular.css @@ -0,0 +1 @@ +.version.anfrageformular{color:#000016;background-color:#5700A9;}#page{z-index:1;min-height:1692px;background-image:none;border-width:0px;border-color:#000000;background-color:transparent;width:100%;max-width:1200px;margin-left:auto;margin-right:auto;}#pu13441{z-index:2;padding-bottom:0px;margin-right:-10000px;margin-top:12px;width:48.92%;margin-left:25.55%;}#u13441{z-index:2;width:234px;background-color:transparent;position:relative;margin-left:50%;left:-117.49999999999994px;}#u13441_img{padding-left:28px;padding-right:28px;}#u14170-13{z-index:220;display:block;vertical-align:top;margin-top:39px;position:relative;margin-left:50%;left:-293.49999999999994px;}#widgetu13659{z-index:4;padding-bottom:0px;margin-top:16px;position:relative;width:100%;margin-left:0%;left:-0.49999999999994316px;}#widgetu13659_position_content{width:100%;margin-left:0%;}#widgetu13669{z-index:31;border-width:0px;border-color:transparent;background-color:transparent;position:relative;width:100.18%;}#widgetu13669.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:100.18%;margin:0px 0px 0px 0%;}#pu13671-4{z-index:32;width:99.66%;margin-left:0.18%;}#u13671-4{z-index:32;min-height:20px;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:44.03%;}#u13672-4{z-index:40;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.84%;left:71.17%;}#u13670-4{z-index:36;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;top:-1px;margin-bottom:-1px;position:relative;width:99.66%;padding:6px 0px;}#widgetu13669.non-empty-st #u13670-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13669:hover #u13670-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13669.focus-st #u13670-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13669.non-empty-st #u13670-4 *{color:#666666;font-style:normal;}#widgetu13669:hover #u13670-4 *{color:#666666;font-style:normal;}#widgetu13669.focus-st #u13670-4 *{color:#666666;font-style:normal;}#widgetu13693{z-index:44;border-width:0px;border-color:transparent;background-color:transparent;margin-top:17px;position:relative;width:100.18%;}#u13695-4{z-index:45;min-height:30px;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u13694-4{z-index:49;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu13693.non-empty-st #u13694-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13693:hover #u13694-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13693.focus-st #u13694-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13693.non-empty-st #u13694-4 *{color:#666666;font-style:normal;}#widgetu13693:hover #u13694-4 *{color:#666666;font-style:normal;}#widgetu13693.focus-st #u13694-4 *{color:#666666;font-style:normal;}#u13696-4{z-index:53;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu13683{z-index:57;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;}#u13686-4{z-index:58;min-height:30px;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u13685-4{z-index:62;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu13683.non-empty-st #u13685-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13683:hover #u13685-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13683.focus-st #u13685-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13683.non-empty-st #u13685-4 *{color:#666666;font-style:normal;}#widgetu13683:hover #u13685-4 *{color:#666666;font-style:normal;}#widgetu13683.focus-st #u13685-4 *{color:#666666;font-style:normal;}#u13684-4{z-index:66;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu13953{z-index:112;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:16px;position:relative;width:62.36%;}#widgetu13953.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:62.36%;margin:16px 0px 0px 0%;}#u13955-4{z-index:113;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;width:70.5%;}#widgetu13953.fld-err-st #u13955-4{padding-top:0px;padding-bottom:0px;min-height:20px;width:70.5%;margin:0px 0px 0px 0%;}#pwidgetu13964{z-index:117;margin-top:11px;width:100%;}#widgetu13964{z-index:117;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;width:77.6%;}#u13970{z-index:122;width:16px;height:16px;background-color:transparent;position:relative;margin-right:-10000px;}#u13970 input.not_checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonunchecked.png?crc=3976871150") no-repeat center center;background-size:contain;}#u13970 input:not(:checked) + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonunchecked.png?crc=3976871150") no-repeat center center;background-size:contain;}#u13970 input.checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonchecked.png?crc=4193302265") no-repeat center center;background-size:contain;}#u13970 input:checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonchecked.png?crc=4193302265") no-repeat center center;background-size:contain;}#u13970 input.not_checked:hover + label,#widgetu13964.focus-st #u13970 input.not_checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedrollover.png?crc=4276313674") no-repeat center center;background-size:contain;}#u13970 input:not(:checked):hover + label,#widgetu13964.focus-st #u13970 input:not(:checked) + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedrollover.png?crc=4276313674") no-repeat center center;background-size:contain;}#u13970 input.checked:hover + label,#widgetu13964.focus-st #u13970 input.checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedrollover.png?crc=88928956") no-repeat center center;background-size:contain;}#u13970 input:checked:hover + label,#widgetu13964.focus-st #u13970 input:checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedrollover.png?crc=88928956") no-repeat center center;background-size:contain;}#u13966-4{z-index:118;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;left:26px;width:90.85%;}#widgetu14017{z-index:123;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;width:77.6%;left:22.41%;}#widgetu13964.fld-err-st,#widgetu14017.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:77.6%;margin:0px -10000px 0px 0%;}#u14018{z-index:128;width:16px;height:16px;background-color:transparent;position:relative;margin-right:-10000px;}#u14018 input.not_checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonunchecked.png?crc=3976871150") no-repeat center center;background-size:contain;}#u14018 input:not(:checked) + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonunchecked.png?crc=3976871150") no-repeat center center;background-size:contain;}#u14018 input.checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonchecked.png?crc=4193302265") no-repeat center center;background-size:contain;}#u14018 input:checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonchecked.png?crc=4193302265") no-repeat center center;background-size:contain;}#u13970 input.not_checked:active + label,#u14018 input.not_checked:active + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedmousedown.png?crc=54863585") no-repeat center center;background-size:contain;}#u13970 input:not(:checked):active + label,#u14018 input:not(:checked):active + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedmousedown.png?crc=54863585") no-repeat center center;background-size:contain;}#u13970 input.checked:active + label,#u14018 input.checked:active + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedmousedown.png?crc=4280357799") no-repeat center center;background-size:contain;}#u13970 input:checked:active + label,#u14018 input:checked:active + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedmousedown.png?crc=4280357799") no-repeat center center;background-size:contain;}#u14018 input.not_checked:hover + label,#widgetu14017.focus-st #u14018 input.not_checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedrollover.png?crc=4276313674") no-repeat center center;background-size:contain;}#u14018 input:not(:checked):hover + label,#widgetu14017.focus-st #u14018 input:not(:checked) + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedrollover.png?crc=4276313674") no-repeat center center;background-size:contain;}#u14018 input.checked:hover + label,#widgetu14017.focus-st #u14018 input.checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedrollover.png?crc=88928956") no-repeat center center;background-size:contain;}#u14018 input:checked:hover + label,#widgetu14017.focus-st #u14018 input:checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedrollover.png?crc=88928956") no-repeat center center;background-size:contain;}#u14019-4{z-index:124;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;left:26px;width:90.85%;}#widgetu13964.fld-err-st #u13966-4,#widgetu14017.fld-err-st #u14019-4{padding-top:0px;padding-bottom:0px;min-height:20px;width:90.85%;margin:0px -10000px 0px 0px;}#widgetu13964_input,#widgetu14017_input{position:absolute;height:16px;min-height:0px;width:100%;}#widgetu13665{z-index:5;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:17px;position:relative;width:100.18%;left:-0.18%;}#widgetu13693.fld-err-st,#widgetu13665.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:100.18%;margin:17px 0px 0px 0%;}#pu13668-4{z-index:6;width:99.66%;margin-left:0.18%;}#u13668-4{z-index:6;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:44.03%;}#widgetu13665.fld-err-st #u13668-4{border-width:0px;border-color:transparent;padding-top:0px;padding-bottom:0px;min-height:20px;width:44.03%;margin:0px -10000px 0px 0%;}#u13666-4{z-index:14;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);line-height:14px;text-align:right;color:#999999;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-weight:normal;position:relative;margin-right:-10000px;width:28.84%;left:71.17%;}#u13667-4{z-index:10;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;top:-1px;margin-bottom:-1px;position:relative;width:99.66%;padding:6px 0px;}#widgetu13665.non-empty-st #u13667-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13665:hover #u13667-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13665.focus-st #u13667-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13665.non-empty-st #u13667-4 *{color:#666666;font-style:normal;}#widgetu13665:hover #u13667-4 *{color:#666666;font-style:normal;}#widgetu13665.focus-st #u13667-4 *{color:#666666;font-style:normal;}#widgetu13673{z-index:99;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#pu13676-4{z-index:100;width:99.49%;margin-left:0.35%;}#u13676-4{z-index:100;min-height:20px;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:44.11%;}#widgetu13673.fld-err-st #u13676-4{padding-top:0px;padding-bottom:0px;min-height:20px;width:44.11%;margin:0px -10000px 0px 0%;}#u13674-4{z-index:108;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.89%;left:71.12%;}#widgetu13673.fld-err-st #u13674-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);padding-top:0px;padding-bottom:0px;min-height:20px;width:28.89%;margin:0px -10000px 0px 0%;}#u13675-4{z-index:104;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;top:-1px;margin-bottom:-1px;position:relative;width:99.66%;padding:6px 0px;}#widgetu13673.non-empty-st #u13675-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13673:hover #u13675-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13673.focus-st #u13675-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13673.non-empty-st #u13675-4 *{color:#666666;font-style:normal;}#widgetu13673:hover #u13675-4 *{color:#666666;font-style:normal;}#widgetu13673.focus-st #u13675-4 *{color:#6B6B6B;font-style:normal;}#widgetu13688{z-index:18;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#pu13691-4{z-index:19;width:99.66%;margin-left:0.18%;}#u13691-4{z-index:19;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:44.03%;}#widgetu13669.fld-err-st #u13671-4,#widgetu13688.fld-err-st #u13691-4{padding-top:0px;padding-bottom:0px;min-height:20px;width:44.03%;margin:0px -10000px 0px 0%;}#u13689-4{z-index:27;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.84%;left:71.17%;}#widgetu13669.fld-err-st #u13672-4,#widgetu13665.fld-err-st #u13666-4,#widgetu13688.fld-err-st #u13689-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);padding-top:0px;padding-bottom:0px;min-height:20px;width:28.84%;margin:0px -10000px 0px 0%;}#u13690-4{z-index:23;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;top:-1px;margin-bottom:-1px;position:relative;width:99.66%;padding:6px 0px;}#widgetu13688.non-empty-st #u13690-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13688:hover #u13690-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13688.focus-st #u13690-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13669.fld-err-st #u13670-4,#widgetu13665.fld-err-st #u13667-4,#widgetu13673.fld-err-st #u13675-4,#widgetu13688.fld-err-st #u13690-4{border-color:#D7244C;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13688.non-empty-st #u13690-4 *{color:#666666;font-style:normal;}#widgetu13688:hover #u13690-4 *{color:#666666;font-style:normal;}#widgetu13688.focus-st #u13690-4 *{color:#666666;font-style:normal;}#widgetu14027{z-index:129;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;}#u14030-4{z-index:130;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14029-4{z-index:134;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14027.non-empty-st #u14029-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14027:hover #u14029-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14027.focus-st #u14029-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14027.non-empty-st #u14029-4 *{color:#666666;font-style:normal;}#widgetu14027:hover #u14029-4 *{color:#666666;font-style:normal;}#widgetu14027.focus-st #u14029-4 *{color:#666666;font-style:normal;}#u14028-4{z-index:138;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14063{z-index:168;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14064-4{z-index:169;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14065-4{z-index:173;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14063.non-empty-st #u14065-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14063:hover #u14065-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14063.focus-st #u14065-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14063.non-empty-st #u14065-4 *{color:#666666;font-style:normal;}#widgetu14063:hover #u14065-4 *{color:#666666;font-style:normal;}#widgetu14063.focus-st #u14065-4 *{color:#666666;font-style:normal;}#u14066-4{z-index:177;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14039{z-index:142;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14041-4{z-index:143;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14040-4{z-index:147;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14039.non-empty-st #u14040-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14039:hover #u14040-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14039.focus-st #u14040-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14039.non-empty-st #u14040-4 *{color:#666666;font-style:normal;}#widgetu14039:hover #u14040-4 *{color:#666666;font-style:normal;}#widgetu14039.focus-st #u14040-4 *{color:#666666;font-style:normal;}#u14042-4{z-index:151;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14051{z-index:155;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14052-4{z-index:156;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14053-4{z-index:160;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14051.non-empty-st #u14053-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14051:hover #u14053-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14051.focus-st #u14053-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14051.non-empty-st #u14053-4 *{color:#666666;font-style:normal;}#widgetu14051:hover #u14053-4 *{color:#666666;font-style:normal;}#widgetu14051.focus-st #u14053-4 *{color:#666666;font-style:normal;}#u14054-4{z-index:164;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14089{z-index:194;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14092-4{z-index:195;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14090-4{z-index:199;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14089.non-empty-st #u14090-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14089:hover #u14090-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14089.focus-st #u14090-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14089.non-empty-st #u14090-4 *{color:#666666;font-style:normal;}#widgetu14089:hover #u14090-4 *{color:#666666;font-style:normal;}#widgetu14089.focus-st #u14090-4 *{color:#666666;font-style:normal;}#u14091-4{z-index:203;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14075{z-index:181;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14076-4{z-index:182;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14078-4{z-index:186;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14075.non-empty-st #u14078-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14075:hover #u14078-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14075.focus-st #u14078-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14075.non-empty-st #u14078-4 *{color:#666666;font-style:normal;}#widgetu14075:hover #u14078-4 *{color:#666666;font-style:normal;}#widgetu14075.focus-st #u14078-4 *{color:#666666;font-style:normal;}#u14077-4{z-index:190;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14101{z-index:207;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14104-4{z-index:208;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#widgetu13693.fld-err-st #u13695-4,#widgetu13683.fld-err-st #u13686-4,#widgetu14027.fld-err-st #u14030-4,#widgetu14063.fld-err-st #u14064-4,#widgetu14039.fld-err-st #u14041-4,#widgetu14051.fld-err-st #u14052-4,#widgetu14089.fld-err-st #u14092-4,#widgetu14075.fld-err-st #u14076-4,#widgetu14101.fld-err-st #u14104-4{padding-top:0px;padding-bottom:0px;min-height:30px;width:43.88%;margin:0px -10000px 0px 0%;}#u14102-4{z-index:212;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14101.non-empty-st #u14102-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14101:hover #u14102-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14101.focus-st #u14102-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13693.fld-err-st #u13694-4,#widgetu13683.fld-err-st #u13685-4,#widgetu14027.fld-err-st #u14029-4,#widgetu14063.fld-err-st #u14065-4,#widgetu14039.fld-err-st #u14040-4,#widgetu14051.fld-err-st #u14053-4,#widgetu14089.fld-err-st #u14090-4,#widgetu14075.fld-err-st #u14078-4,#widgetu14101.fld-err-st #u14102-4{border-color:#D7244C;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14101.non-empty-st #u14102-4 *{color:#666666;font-style:normal;}#widgetu14101:hover #u14102-4 *{color:#666666;font-style:normal;}#widgetu14101.focus-st #u14102-4 *{color:#666666;font-style:normal;}#u14103-4{z-index:216;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu13669_input,#widgetu13693_input,#widgetu13683_input,#widgetu13665_input,#widgetu13673_input,#widgetu13688_input,#widgetu14027_input,#widgetu14063_input,#widgetu14039_input,#widgetu14051_input,#widgetu14089_input,#widgetu14075_input,#widgetu14101_input{position:absolute;color:#B5B5B5;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;min-height:16px;width:100%;}#widgetu13669_prompt,#widgetu13693_prompt,#widgetu13683_prompt,#widgetu13665_prompt,#widgetu13673_prompt,#widgetu13688_prompt,#widgetu14027_prompt,#widgetu14063_prompt,#widgetu14039_prompt,#widgetu14051_prompt,#widgetu14089_prompt,#widgetu14075_prompt,#widgetu14101_prompt{color:#B5B5B5;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;height:16px;overflow:hidden;position:absolute;width:100%;}#widgetu13660{z-index:86;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#widgetu13683.fld-err-st,#widgetu13673.fld-err-st,#widgetu13688.fld-err-st,#widgetu14027.fld-err-st,#widgetu14063.fld-err-st,#widgetu14039.fld-err-st,#widgetu14051.fld-err-st,#widgetu14089.fld-err-st,#widgetu14075.fld-err-st,#widgetu14101.fld-err-st,#widgetu13660.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:100.18%;margin:16px 0px 0px 0%;}#u13663-4{z-index:87;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#widgetu13660.fld-err-st #u13663-4{border-width:0px;border-color:transparent;padding-top:0px;padding-bottom:0px;min-height:30px;width:43.88%;margin:0px -10000px 0px 0%;}#widgetu13669.fld-err-st #u13671-4 p,#widgetu13669.fld-err-st #u13671-4 span,#widgetu13693.fld-err-st #u13695-4 p,#widgetu13693.fld-err-st #u13695-4 span,#widgetu13683.fld-err-st #u13686-4 p,#widgetu13683.fld-err-st #u13686-4 span,#widgetu13953.fld-err-st #u13955-4 p,#widgetu13953.fld-err-st #u13955-4 span,#widgetu13964.fld-err-st #u13966-4 p,#widgetu13964.fld-err-st #u13966-4 span,#widgetu14017.fld-err-st #u14019-4 p,#widgetu14017.fld-err-st #u14019-4 span,#widgetu13665.fld-err-st #u13668-4 p,#widgetu13665.fld-err-st #u13668-4 span,#widgetu13673.fld-err-st #u13676-4 p,#widgetu13673.fld-err-st #u13676-4 span,#widgetu13688.fld-err-st #u13691-4 p,#widgetu13688.fld-err-st #u13691-4 span,#widgetu14027.fld-err-st #u14030-4 p,#widgetu14027.fld-err-st #u14030-4 span,#widgetu14063.fld-err-st #u14064-4 p,#widgetu14063.fld-err-st #u14064-4 span,#widgetu14039.fld-err-st #u14041-4 p,#widgetu14039.fld-err-st #u14041-4 span,#widgetu14051.fld-err-st #u14052-4 p,#widgetu14051.fld-err-st #u14052-4 span,#widgetu14089.fld-err-st #u14092-4 p,#widgetu14089.fld-err-st #u14092-4 span,#widgetu14075.fld-err-st #u14076-4 p,#widgetu14075.fld-err-st #u14076-4 span,#widgetu14101.fld-err-st #u14104-4 p,#widgetu14101.fld-err-st #u14104-4 span,#widgetu13660.fld-err-st #u13663-4 p,#widgetu13660.fld-err-st #u13663-4 span{color:#D7244C;}#u13661-4{z-index:91;min-height:133px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu13660.non-empty-st #u13661-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13660:hover #u13661-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:133px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13660.focus-st #u13661-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:133px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13660.fld-err-st #u13661-4{border-color:#D7244C;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:133px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13660.non-empty-st #u13661-4 *{color:#666666;font-style:normal;}#widgetu13660:hover #u13661-4 *{color:#666666;font-style:normal;}#widgetu13660.focus-st #u13661-4 *{color:#666666;font-style:normal;}#u13670-3,#u13694-3,#u13685-3,#u13667-3,#u13675-3,#u13690-3,#u14029-3,#u14065-3,#u14040-3,#u14053-3,#u14090-3,#u14078-3,#u14102-3,#u13661-3{color:#B5B5B5;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;margin-left:6px;margin-right:6px;position:relative;}#u13662-4{z-index:95;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu13693.fld-err-st #u13696-4,#widgetu13683.fld-err-st #u13684-4,#widgetu14027.fld-err-st #u14028-4,#widgetu14063.fld-err-st #u14066-4,#widgetu14039.fld-err-st #u14042-4,#widgetu14051.fld-err-st #u14054-4,#widgetu14089.fld-err-st #u14091-4,#widgetu14075.fld-err-st #u14077-4,#widgetu14101.fld-err-st #u14103-4,#widgetu13660.fld-err-st #u13662-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);padding-top:0px;padding-bottom:0px;min-height:20px;width:28.75%;margin:0px -10000px 0px 0%;}#widgetu13669.fld-err-st #u13672-4 p,#widgetu13669.fld-err-st #u13670-4 *,#widgetu13693.fld-err-st #u13694-4 *,#widgetu13693.fld-err-st #u13696-4 p,#widgetu13683.fld-err-st #u13685-4 *,#widgetu13683.fld-err-st #u13684-4 p,#widgetu13665.fld-err-st #u13666-4 p,#widgetu13665.fld-err-st #u13667-4 *,#widgetu13673.fld-err-st #u13674-4 p,#widgetu13673.fld-err-st #u13675-4 *,#widgetu13688.fld-err-st #u13689-4 p,#widgetu13688.fld-err-st #u13690-4 *,#widgetu14027.fld-err-st #u14029-4 *,#widgetu14027.fld-err-st #u14028-4 p,#widgetu14063.fld-err-st #u14065-4 *,#widgetu14063.fld-err-st #u14066-4 p,#widgetu14039.fld-err-st #u14040-4 *,#widgetu14039.fld-err-st #u14042-4 p,#widgetu14051.fld-err-st #u14053-4 *,#widgetu14051.fld-err-st #u14054-4 p,#widgetu14089.fld-err-st #u14090-4 *,#widgetu14089.fld-err-st #u14091-4 p,#widgetu14075.fld-err-st #u14078-4 *,#widgetu14075.fld-err-st #u14077-4 p,#widgetu14101.fld-err-st #u14102-4 *,#widgetu14101.fld-err-st #u14103-4 p,#widgetu13660.fld-err-st #u13661-4 *,#widgetu13660.fld-err-st #u13662-4 p{color:#D7244C;font-style:italic;}#widgetu13660_input{position:absolute;color:#B5B5B5;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;min-height:133px;width:100%;}#widgetu13660_prompt{color:#B5B5B5;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;height:133px;overflow:hidden;position:absolute;width:100%;}#pu13682-4{z-index:70;margin-top:94px;width:75.47%;margin-left:12.27%;}#u13682-4{z-index:70;min-height:26px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);padding-top:4px;font-size:12px;line-height:14px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;position:relative;margin-right:-10000px;width:55.54%;left:44.47%;}#widgetu13659.frm-sub-st #u13682-4 p{color:#999999;line-height:1;font-size:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;}#u13687-4{z-index:74;min-height:26px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);padding-top:4px;color:#FF0000;line-height:14px;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;position:relative;margin-right:-10000px;width:55.54%;left:44.47%;}#widgetu13659.frm-subm-err-st #u13687-4 p{color:#D7244C;line-height:1;font-size:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;}#u13692-4{z-index:78;min-height:26px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);padding-top:4px;color:#00FF00;line-height:12px;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;position:relative;margin-right:-10000px;width:55.54%;left:44.47%;}#widgetu13659.frm-sub-st #u13682-4,#widgetu13659.frm-subm-err-st #u13687-4,#widgetu13659.frm-subm-ok-st #u13692-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);min-height:30px;}#widgetu13659.frm-subm-ok-st #u13692-4 p{color:#999999;font-size:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;}#u13664-4{height:22px;border-style:solid;border-width:1px;border-color:#666666;background-color:#666666;border-radius:2px;color:#FFFFFF;text-align:center;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;margin-bottom:-1px;position:relative;margin-right:-10000px;margin-top:-1px;width:38.15%;left:-0.23%;padding:8px 0px 0px;}#u13664-4:hover{border-color:#141414;background-color:#141414;padding-top:8px;padding-bottom:0px;min-height:0px;height:22px;width:38.15%;margin:-1px -10000px -1px 0%;}#u13664-4:active{border-color:#141414;background-color:#141414;padding-top:8px;padding-bottom:0px;min-height:0px;height:22px;width:38.15%;margin:-1px -10000px -1px 0%;}.css_verticalspacer .verticalspacer{height:calc(100vh - 2030px);}#u14173{z-index:233;min-height:272px;background-color:#008089;padding-bottom:28px;}#u14173_align_to_page{margin-left:auto;margin-right:auto;position:relative;max-width:1200px;}#u24531{z-index:234;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:38px;width:63.42%;margin-left:18.3%;left:6px;}#u24537-17{z-index:252;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:55.59%;margin-left:22.21%;left:-169px;}#u24532{z-index:235;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;width:23.13%;margin-left:38.44%;left:293px;}#u24536-4{z-index:248;display:block;vertical-align:top;position:relative;width:99.44%;margin-left:0.29%;left:-1px;}#u24535-4{z-index:236;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24533-4{z-index:240;margin-top:12px;position:relative;width:100%;margin-left:0%;left:0px;}#u24534-4{z-index:244;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24535-4_img,#u24533-4_img,#u24534-4_img{display:block;vertical-align:top;width:99.44%;}#widgetu13669.non-empty-st #widgetu13669_prompt,#widgetu13669.focus-st #widgetu13669_prompt,#widgetu13693.non-empty-st #widgetu13693_prompt,#widgetu13693.focus-st #widgetu13693_prompt,#widgetu13683.non-empty-st #widgetu13683_prompt,#widgetu13683.focus-st #widgetu13683_prompt,#widgetu13665.non-empty-st #widgetu13665_prompt,#widgetu13665.focus-st #widgetu13665_prompt,#widgetu13673.non-empty-st #widgetu13673_prompt,#widgetu13673.focus-st #widgetu13673_prompt,#widgetu13688.non-empty-st #widgetu13688_prompt,#widgetu13688.focus-st #widgetu13688_prompt,#widgetu14027.non-empty-st #widgetu14027_prompt,#widgetu14027.focus-st #widgetu14027_prompt,#widgetu14063.non-empty-st #widgetu14063_prompt,#widgetu14063.focus-st #widgetu14063_prompt,#widgetu14039.non-empty-st #widgetu14039_prompt,#widgetu14039.focus-st #widgetu14039_prompt,#widgetu14051.non-empty-st #widgetu14051_prompt,#widgetu14051.focus-st #widgetu14051_prompt,#widgetu14089.non-empty-st #widgetu14089_prompt,#widgetu14089.focus-st #widgetu14089_prompt,#widgetu14075.non-empty-st #widgetu14075_prompt,#widgetu14075.focus-st #widgetu14075_prompt,#widgetu14101.non-empty-st #widgetu14101_prompt,#widgetu14101.focus-st #widgetu14101_prompt,#widgetu13660.non-empty-st #widgetu13660_prompt,#widgetu13660.focus-st #widgetu13660_prompt,.js body{visibility:hidden;}.js body.initialized{visibility:visible;}#u14173-bw{z-index:233;min-height:272px;margin-bottom:-300px;margin-top:62px;}#muse_css_mq,.html{background-color:#FFFFFF;}body{position:relative;min-width:320px;padding-bottom:300px;}.verticalspacer{min-height:1px;} \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/css/default.css b/java/wellmann-shop/src/main/webapp/resources/css/default.css new file mode 100644 index 0000000..fb76f73 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/css/default.css @@ -0,0 +1,104 @@ +.centeredMenuBar.ui-menubar { + text-align: center; +} + +.centeredMenuBar .ui-menu-list { + display: inline-block; +} + +.stickyMenubar{ + text-align: center; + width: 1300px; + border: none; + z-index: 9000 +} + +.ui-sticky { + width: 1300px; + margin: 0 auto; +} +@media (max-width: 960px) { + .ui-sticky { + top: 0px !important; + margin: 0 auto; + } +} + +.panel { + text-align: center; + border: none; + max-width: 1300px; + margin: 0 auto; +} + +.ui-noborder{ + padding: 0px 0px +} + +.ui-panelgrid td { + padding: 0px 0px ; +} + +.tile:hover { + border-color: #009999; + border-style: solid; + cursor: pointer; + color: #009999; +} + +.tile:active{ + box-shadow: 0px 0px 0px silver inset; +} + +.tile{ + border: 2px solid silver; + border-radius: 10px; + box-shadow: 10px 10px 15px silver; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + transition: opacity 2s ease, border-color 1s ease, color 1s ease; +} + +.tileCreator { + width: 200px; +} + +.panelCreator{ + border: 2px solid silver; + border-radius: 10px; + box-shadow: 10px 10px 15px silver; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + float: top; +} + +.picture { + border-radius: 10px; + padding: 0px 0px 0px 0px; + margin: 0px 0px 0px 0px; +} + +.picture:hover { + cursor: pointer; +} + +.creatorPicture{ + width: 150px; + height: 150px; + border-radius: 50%; +} + +.productInfo { + border-style: solid; + border-color: silver; + border-left: 2px; + border-bottom: 0px; + border-right: 0px; + border-top: 0px; + height: 100%; + width: 350px; + float: right; + text-align: left; + padding: 0px 0px 0px 0px; + margin: 0px 0px 0px 0px; +} diff --git a/java/wellmann-shop/src/main/webapp/resources/css/index.css b/java/wellmann-shop/src/main/webapp/resources/css/index.css new file mode 100644 index 0000000..1948843 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/css/index.css @@ -0,0 +1,2 @@ +.version.index{color:#000015;background-color:#F5BBFB;}.js body.initialized{visibility:visible;}#page{border-color:#000000;background-color:transparent;margin-right:auto;z-index:1;border-width:0px;margin-left:auto;width:100%;background-image:none;}#pstart{margin-right:-10000px;z-index:38;}#u20068{left:-117px;background-color:transparent;position:relative;width:234px;}#u20068_img{padding-right:28px;padding-left:28px;}#pslideshowu19635{margin-top:13px;z-index:3;}#slideshowu19635{left:0px;margin-right:-10000px;z-index:3;position:relative;margin-left:0px;width:100%;}#u19651{background-color:transparent;position:absolute;}#u19651popup{margin-right:-10000px;z-index:4;}#u19652{box-shadow:6px 6px 8px rgba(0,0,0,0.19);border-color:transparent;background-color:transparent;z-index:5;border-width:0px;position:relative;margin-right:-10000px;}#u19656{box-shadow:6px 6px 8px rgba(0,0,0,0.19);border-color:transparent;background-color:transparent;z-index:7;border-width:0px;position:relative;margin-right:-10000px;}#u19654{box-shadow:6px 6px 8px rgba(0,0,0,0.19);border-color:transparent;background-color:transparent;z-index:9;border-width:0px;position:relative;margin-right:-10000px;}#u19652::before,#u19656::before,#u19654::before{bottom:0px;left:0px;right:0px;position:absolute;box-shadow:inset 0px 0px 10px rgba(255,255,255,0.4), inset 0px 0px 10px rgba(255,255,255,0.4);top:0px;content:"";pointer-events:none;}#u19640{width:100%;background-color:transparent;position:absolute;}#u19640popup{margin-right:-10000px;z-index:11;top:26px;height:221px;}#u19643-6{display:block;z-index:12;position:relative;vertical-align:top;margin-right:-10000px;margin-bottom:-6px;}#u19642-4{display:block;z-index:18;position:relative;vertical-align:top;margin-right:-10000px;margin-bottom:-6px;}#u19641-8{display:block;z-index:22;position:relative;vertical-align:top;margin-right:-10000px;margin-bottom:-6px;}#u19636-4{vertical-align:top;display:block;position:absolute;}#u19636-4popup{left:20px;margin-right:-10000px;z-index:30;width:107px;top:232px;height:127px;}#u19660-4{margin-left:100%;vertical-align:top;left:-228px;display:block;position:absolute;}#u19660-4popup{margin-right:-10000px;z-index:34;margin-left:100%;width:107px;top:232px;height:127px;}.SSSlideLoading{background:url("../images/loading.gif?crc=3815509949") no-repeat center center;}#u20095{background-color:transparent;margin-right:-10000px;z-index:46;border-width:0px;margin-left:0%;width:36px;border-color:transparent;min-height:81px;position:relative;}#u20018-6{display:block;z-index:40;position:relative;vertical-align:top;}#buttonu19915{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:7px;padding-top:13px;width:270px;height:330px;}#buttonu19915:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u19917{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/kate-trysh-485779-unsplash-u19917-fr.jpg?crc=4178170086") no-repeat center center;background-size:cover;}#buttonu19915:hover #u19917{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u19918{margin-top:20px;left:-3.84%;margin-right:-10000px;position:relative;vertical-align:top;width:119px;}#u19918_states{width:119px;background-color:transparent;background-repeat:no-repeat;float:left;background-position:10px 10px;height:49px;}#buttonu20073{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu20073:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u20075{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/lukas-blazek-263121-u20075-fr.jpg?crc=322627368") no-repeat left top;background-size:cover;}#buttonu20073:hover #u20075{background-position:left top;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu20073.ButtonSelected #u20075{background-position:left top;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20353{margin-left:57.78%;vertical-align:top;width:108px;position:relative;}#buttonu20046{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu19915.ButtonSelected,#buttonu20046:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u20047{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/envelope-2679338_1920-u20047-fr.jpg?crc=4018908646") no-repeat center bottom;background-size:cover;}#buttonu20046:hover #u20047{background-position:center bottom;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu20046.ButtonSelected #u20047{background-position:center bottom;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20332,#u20370{margin-top:1px;position:relative;margin-left:57.78%;vertical-align:top;width:108px;}#buttonu19800{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u19801{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/sticker-u19801-fr.jpg?crc=509278434") no-repeat center center;background-size:cover;}#buttonu19915.ButtonSelected #u19917,#buttonu19800:hover #u19801{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20379{margin-top:1px;position:relative;margin-left:58.15%;vertical-align:top;width:108px;}#u20332_states,#u20353_states,#u20370_states,#u20379_states{width:108px;background-color:transparent;background-repeat:no-repeat;float:left;background-position:0px 0px;height:28px;}#buttonu19631{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8.303124999999909px;padding-top:13px;width:270px;height:328.6968750000001px;}#buttonu20073.ButtonSelected,#buttonu19631:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u19632{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180426_122325_korr-u19632-fr.jpg?crc=3763227079") no-repeat center center;background-size:cover;}#buttonu19800.ButtonSelected #u19801,#buttonu19631:hover #u19632{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19923{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:9.409374999997908px;padding-top:13px;width:270px;height:327.5906250000021px;}#buttonu19923:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:328px;}#u19926{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180423_141258_korr-u19926-fr.jpg?crc=4262253073") no-repeat center center;background-size:cover;}#buttonu19631.ButtonSelected #u19632,#buttonu19923:hover #u19926{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20413{position:relative;margin-left:57.41%;vertical-align:top;width:40%;top:-1px;}#buttonu19947{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8.309374999997999px;padding-top:13px;width:270px;height:328.690625000002px;}#buttonu19631.ButtonSelected,#buttonu19947:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u19949{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/ron-dyar-521350-unsplash-u19949-fr.jpg?crc=3986345040") no-repeat right bottom;background-size:cover;}#buttonu19947:hover #u19949{background-position:right bottom;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19947.ButtonSelected #u19949{background-position:right bottom;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20404_states,#u20422_states{background-position:center;float:left;width:100%;background-repeat:no-repeat;background-color:transparent;}#buttonu19631:hover #u20404_states,#buttonu19947:hover #u20422_states{background-repeat:no-repeat;background-position:center;background-color:transparent;}#buttonu19663{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:9.309374999997999px;padding-top:13px;width:270px;height:327.690625000002px;}#buttonu19923.ButtonSelected,#buttonu19663:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:328px;}#u19664{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/sunyu-460812-unsplash-u19664-fr.jpg?crc=16460065") no-repeat center center;background-size:cover;}#buttonu19923.ButtonSelected #u19926,#buttonu19663:hover #u19664{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu20120{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:328px;}#buttonu20120.ButtonSelected{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:328px;}#u20123{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/formular.jpg?crc=3799210080") no-repeat center center;background-size:cover;}#buttonu19663.ButtonSelected #u19664,#buttonu20120:hover #u20123{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20431,#u20464{position:relative;margin-left:57.78%;vertical-align:top;width:40%;top:-1px;}#buttonu19923:hover #u20413_states,#buttonu19663:hover #u20431_states,#buttonu20120:hover #u20464_states{background-position:center;background-color:transparent;background-repeat:no-repeat;margin-bottom:-1px;background-size:100%;}#buttonu19842{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;width:270px;}#buttonu19842:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;}#buttonu19842.ButtonSelected{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;}#u19843{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/durchschreibesatz-u19843-fr.jpg?crc=3882258607") no-repeat center center;background-size:cover;}#buttonu20120.ButtonSelected #u20123,#buttonu19842:hover #u19843{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20473{position:relative;vertical-align:top;width:40%;}#buttonu19714{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu19947.ButtonSelected,#buttonu19714:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u19716{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180423_142230_korr-u19716-fr.jpg?crc=441518510") no-repeat center center;background-size:cover;}#buttonu19842.ButtonSelected #u19843,#buttonu19714:hover #u19716{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19687{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8.109374999997272px;padding-top:13px;width:270px;height:328.89062500000273px;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u19689{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180423_143014_korr-u19689-fr.jpg?crc=500779426") no-repeat center center;background-size:cover;}#buttonu19714.ButtonSelected #u19716,#buttonu19687:hover #u19689{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20404,#u20482,#u20491{margin-left:57.41%;vertical-align:top;width:40%;position:relative;}#buttonu19972{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:7px;padding-top:13px;width:270px;height:330px;}#buttonu19800.ButtonSelected,#buttonu19972:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u19975{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/postcard-1091283_1920-u19975-fr.jpg?crc=4048491431") no-repeat left center;background-size:cover;}#buttonu19972:hover #u19975{background-position:left center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19972.ButtonSelected #u19975{background-position:left center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20540{margin-top:1px;position:relative;margin-left:57.78%;vertical-align:top;width:40%;}#buttonu20040{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8px;padding-top:13px;width:270px;height:329px;}#buttonu19687.ButtonSelected,#buttonu20040:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u20043{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/mappen2-u20043-fr.jpg?crc=4095258371") no-repeat right center;background-size:cover;}#buttonu20040:hover #u20043{background-position:right center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu20040.ButtonSelected #u20043{background-position:right center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20549{margin-top:3px;position:relative;margin-left:57.41%;vertical-align:top;width:40%;}#buttonu19866{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:7px;padding-top:13px;width:270px;height:330px;}#buttonu19972.ButtonSelected,#buttonu19866:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#buttonu19866.ButtonSelected{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u19867{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180423_141437_korr-u19867-fr.jpg?crc=4253937862") no-repeat center center;background-size:cover;}#buttonu19687.ButtonSelected #u19689,#buttonu19866:hover #u19867{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20558{margin-top:1px;position:relative;margin-left:57.04%;vertical-align:top;width:40%;}#u20071,#u20044,#u19798,#u19611,#u19921,#u19945,#u19661,#u20100,#u19822,#u19712,#u19685,#u19970,#u20020,#u19846,#u19994{background-color:transparent;position:relative;width:270px;border-color:transparent;border-width:0px;}#u19896,#u19914,#u20072,#u20045,#u19799,#u19630,#u19922,#u19946,#u19662,#u20119,#u19841,#u19713,#u19686,#u19971,#u20039,#u19865,#u19995{background-color:transparent;margin-right:-10000px;position:relative;width:270px;border-color:transparent;border-width:0px;}#buttonu19996{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8px;padding-top:13px;width:270px;height:329px;}#buttonu19915::before,#buttonu20073::before,#buttonu20046::before,#buttonu19800::before,#buttonu19631::before,#buttonu19923::before,#buttonu19947::before,#buttonu19663::before,#buttonu20120::before,#buttonu19842::before,#buttonu19714::before,#buttonu19687::before,#buttonu19972::before,#buttonu20040::before,#buttonu19866::before,#buttonu19996::before{bottom:0px;left:0px;right:0px;position:absolute;box-shadow:inset 0px 0px 5px rgba(0,0,0,0.05), inset 0px 0px 5px rgba(0,0,0,0.05);top:0px;content:"";pointer-events:none;}#buttonu20040.ButtonSelected,#buttonu19996:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#buttonu19996.ButtonSelected{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#pu19917,#pu20075,#pu20047,#pu19801,#pu19632,#pu19926,#pu19949,#pu19664,#pu20123,#pu19843,#pu19716,#pu19689,#pu19975,#pu20043,#pu19867,#pu19999{width:96.67%;}#u19999{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/rainier-ridao-569546-unsplash-u19999-fr.jpg?crc=366350487") no-repeat center center;background-size:cover;}#buttonu19866.ButtonSelected #u19867,#buttonu19996:hover #u19999{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19996.ButtonSelected #u19999{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20076,#u20049,#u19803,#u19634,#u19924,#u19948,#u19666,#u20121,#u19845,#u19717,#u19688,#u19974,#u20041,#u19869,#u19998{margin-top:23px;left:-2.69%;margin-right:-10000px;position:relative;vertical-align:top;width:116px;}#u20076_states,#u20049_states,#u19803_states,#u19634_states,#u19924_states,#u19948_states,#u19666_states,#u20121_states,#u19845_states,#u19717_states,#u19688_states,#u19974_states,#u20041_states,#u19869_states,#u19998_states{width:116px;background-color:transparent;background-repeat:no-repeat;float:left;background-position:7px 7px;height:46px;}#buttonu19915:hover #u19918_states,#buttonu19915:hover #u20332_states,#buttonu20073:hover #u20076_states,#buttonu20073:hover #u20353_states,#buttonu20046:hover #u20049_states,#buttonu20046:hover #u20370_states,#buttonu19800:hover #u19803_states,#buttonu19800:hover #u20379_states,#buttonu19631:hover #u19634_states,#buttonu19923:hover #u19924_states,#buttonu19947:hover #u19948_states,#buttonu19663:hover #u19666_states,#buttonu20120:hover #u20121_states,#buttonu19842:hover #u19845_states,#buttonu19714:hover #u19717_states,#buttonu19687:hover #u19688_states,#buttonu19972:hover #u19974_states,#buttonu20040:hover #u20041_states,#buttonu19866:hover #u19869_states,#buttonu19996:hover #u19998_states{background-position:0px 0px;background-color:transparent;background-repeat:no-repeat;}#u19916-4,#u20074-4,#u20048-4,#u19802-4,#u19633-4,#u19925-4,#u19950-4,#u19665-4,#u20122-4,#u19844-4,#u19715-4,#u19690-4,#u19973-4,#u20042-4,#u19868-4,#u19997-4{margin-top:15px;display:block;position:relative;margin-left:4.45%;vertical-align:top;}#u20422,#u20567{margin-left:57.78%;vertical-align:top;width:40%;position:relative;}#u20413_states,#u20431_states,#u20464_states,#u20473_states,#u20482_states,#u20491_states,#u20540_states,#u20549_states,#u20558_states,#u20567_states{background-position:center;float:left;width:100%;background-repeat:no-repeat;background-color:transparent;background-size:97.22222222222221%;}#u20404_states .fluid_height_spacer,#u20413_states .fluid_height_spacer,#u20422_states .fluid_height_spacer,#u20431_states .fluid_height_spacer,#u20464_states .fluid_height_spacer,#u20473_states .fluid_height_spacer,#u20482_states .fluid_height_spacer,#u20491_states .fluid_height_spacer,#u20540_states .fluid_height_spacer,#u20549_states .fluid_height_spacer,#u20558_states .fluid_height_spacer,#u20567_states .fluid_height_spacer{padding-bottom:25.925925925925924%;}#buttonu19842:hover #u20473_states,#buttonu19714:hover #u20482_states,#buttonu19687:hover #u20491_states,#buttonu19972:hover #u20540_states,#buttonu20040:hover #u20549_states,#buttonu19866:hover #u20558_states,#buttonu19996:hover #u20567_states{background-repeat:no-repeat;background-position:center;background-color:transparent;background-size:100%;}#u19609{left:0px;background-repeat:no-repeat;margin-right:-10000px;position:relative;background-color:transparent;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";background-position:left center;background-size:cover;}#u19919-5{display:block;position:relative;vertical-align:top;}#widgetu19758{z-index:48;position:relative;}#widgetu19758_position_content{margin-left:0%;width:100%;}#pwidgetu19783{z-index:75;}#widgetu19783{margin-top:1px;background-color:transparent;margin-right:-10000px;z-index:75;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#pu19785-4{z-index:76;}#u19785-4{color:#666666;background-color:transparent;line-height:14px;margin-right:-10000px;z-index:76;position:relative;text-align:left;min-height:20px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19786-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:84;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19784-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:80;border-style:solid;position:relative;padding:6px 0px;}#widgetu19783.non-empty-st #u19784-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19783:hover #u19784-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19783.focus-st #u19784-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19783.non-empty-st #u19784-4 *{color:#666666;font-style:normal;}#widgetu19783:hover #u19784-4 *{color:#666666;font-style:normal;}#widgetu19783.focus-st #u19784-4 *{color:#666666;font-style:normal;}#widgetu19770{background-color:transparent;margin-right:-10000px;z-index:49;padding-bottom:0px;border-width:0px;border-color:transparent;margin-bottom:-1px;position:relative;}#pu19771-4{z-index:50;}#u19771-4{color:#666666;background-color:transparent;margin-right:-10000px;border-width:0px;border-color:transparent;line-height:14px;min-height:20px;position:relative;z-index:50;text-align:left;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19772-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;font-weight:normal;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:58;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19773-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:54;border-style:solid;position:relative;padding:6px 0px;}#widgetu19770.non-empty-st #u19773-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19770:hover #u19773-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19770.focus-st #u19773-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19770.non-empty-st #u19773-4 *{color:#666666;font-style:normal;}#widgetu19770:hover #u19773-4 *{color:#666666;font-style:normal;}#widgetu19770.focus-st #u19773-4 *{color:#666666;font-style:normal;}#pwidgetu19779{margin-top:18px;z-index:88;}#widgetu19779{background-color:transparent;margin-right:-10000px;z-index:88;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#pu19781-4{z-index:89;}#u19781-4{color:#666666;background-color:transparent;line-height:14px;margin-right:-10000px;z-index:89;position:relative;text-align:left;min-height:20px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19780-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:97;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19782-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:93;border-style:solid;position:relative;padding:6px 0px;}#widgetu19779.non-empty-st #u19782-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19779:hover #u19782-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19779.focus-st #u19782-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19779.non-empty-st #u19782-4 *{color:#666666;font-style:normal;}#widgetu19779:hover #u19782-4 *{color:#666666;font-style:normal;}#widgetu19779.focus-st #u19782-4 *{color:#666666;font-style:normal;}#widgetu19765{background-color:transparent;margin-right:-10000px;z-index:101;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#pu19766-4{z-index:102;}#u19766-4{color:#666666;background-color:transparent;line-height:14px;margin-right:-10000px;z-index:102;position:relative;text-align:left;min-height:20px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19767-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:110;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19768-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:106;border-style:solid;position:relative;padding:6px 0px;}#widgetu19765.non-empty-st #u19768-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19765:hover #u19768-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19765.focus-st #u19768-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19765.non-empty-st #u19768-4 *{color:#666666;font-style:normal;}#widgetu19765:hover #u19768-4 *{color:#666666;font-style:normal;}#widgetu19765.focus-st #u19768-4 *{color:#666666;font-style:normal;}#pwidgetu19787{margin-top:17px;z-index:143;}#widgetu19787{background-color:transparent;margin-right:-10000px;z-index:143;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#widgetu19770.fld-err-st,#widgetu19779.fld-err-st,#widgetu19765.fld-err-st,#widgetu19787.fld-err-st{background-color:transparent;min-height:0px;border-radius:0px;margin:0px -10000px -1px 0%;}#pu19788-4{z-index:144;}#u19788-4{color:#666666;background-color:transparent;line-height:14px;margin-right:-10000px;z-index:144;position:relative;text-align:left;min-height:20px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19790-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:152;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19789-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:148;border-style:solid;position:relative;padding:6px 0px;}#widgetu19787.non-empty-st #u19789-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19787:hover #u19789-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19787.focus-st #u19789-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19787.non-empty-st #u19789-4 *{color:#666666;font-style:normal;}#widgetu19787:hover #u19789-4 *{color:#666666;font-style:normal;}#widgetu19787.focus-st #u19789-4 *{color:#6B6B6B;font-style:normal;}#widgetu19775{margin-top:1px;background-color:transparent;margin-right:-10000px;z-index:62;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#widgetu19783.fld-err-st,#widgetu19775.fld-err-st{background-color:transparent;min-height:0px;border-radius:0px;margin:1px -10000px -1px 0%;}#pu19776-4{z-index:63;}#u19776-4{color:#666666;background-color:transparent;margin-right:-10000px;border-width:0px;border-color:transparent;line-height:14px;min-height:20px;position:relative;z-index:63;text-align:left;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19783.fld-err-st #u19785-4,#widgetu19779.fld-err-st #u19781-4,#widgetu19765.fld-err-st #u19766-4,#widgetu19787.fld-err-st #u19788-4,#widgetu19775.fld-err-st #u19776-4{padding-bottom:0px;min-height:20px;padding-top:0px;margin:0px -10000px 0px 0%;}#u19778-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:71;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19777-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:67;border-style:solid;position:relative;padding:6px 0px;}#widgetu19775.non-empty-st #u19777-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19775:hover #u19777-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19775.focus-st #u19777-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19783.fld-err-st #u19784-4,#widgetu19770.fld-err-st #u19773-4,#widgetu19779.fld-err-st #u19782-4,#widgetu19765.fld-err-st #u19768-4,#widgetu19787.fld-err-st #u19789-4,#widgetu19775.fld-err-st #u19777-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#D7244C;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19775.non-empty-st #u19777-4 *{color:#666666;font-style:normal;}#widgetu19775:hover #u19777-4 *{color:#666666;font-style:normal;}#widgetu19775.focus-st #u19777-4 *{color:#666666;font-style:normal;}#widgetu19783_input,#widgetu19770_input,#widgetu19779_input,#widgetu19765_input,#widgetu19787_input,#widgetu19775_input{color:#B5B5B5;min-height:16px;position:absolute;font-style:italic;width:100%;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19783_prompt,#widgetu19770_prompt,#widgetu19779_prompt,#widgetu19765_prompt,#widgetu19787_prompt,#widgetu19775_prompt{color:#B5B5B5;position:absolute;font-style:italic;width:100%;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;overflow:hidden;height:16px;}#widgetu19760{margin-top:17px;background-color:transparent;z-index:130;position:relative;border-color:transparent;border-width:0px;}#widgetu19760.fld-err-st{background-color:transparent;min-height:0px;border-radius:0px;margin:17px 0px 0px 0%;}#pu19761-4{z-index:131;}#u19761-4{color:#666666;background-color:transparent;margin-right:-10000px;border-width:0px;border-color:transparent;line-height:14px;min-height:20px;position:relative;z-index:131;text-align:left;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19770.fld-err-st #u19771-4,#widgetu19760.fld-err-st #u19761-4{padding-bottom:0px;border-width:0px;border-color:transparent;min-height:20px;padding-top:0px;margin:0px -10000px 0px 0%;}#widgetu19783.fld-err-st #u19785-4 p,#widgetu19783.fld-err-st #u19785-4 span,#widgetu19770.fld-err-st #u19771-4 p,#widgetu19770.fld-err-st #u19771-4 span,#widgetu19779.fld-err-st #u19781-4 p,#widgetu19779.fld-err-st #u19781-4 span,#widgetu19765.fld-err-st #u19766-4 p,#widgetu19765.fld-err-st #u19766-4 span,#widgetu19787.fld-err-st #u19788-4 p,#widgetu19787.fld-err-st #u19788-4 span,#widgetu19775.fld-err-st #u19776-4 p,#widgetu19775.fld-err-st #u19776-4 span,#widgetu19760.fld-err-st #u19761-4 p,#widgetu19760.fld-err-st #u19761-4 span{color:#D7244C;}#u19763-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:139;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19779.fld-err-st #u19780-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19787.fld-err-st #u19790-4,#widgetu19775.fld-err-st #u19778-4,#widgetu19760.fld-err-st #u19763-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";padding-bottom:0px;filter:alpha(opacity=100);padding-top:0px;margin:0px -10000px 0px 0%;}#u19762-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:114px;z-index:135;border-style:solid;position:relative;padding:6px 0px;}#widgetu19760.non-empty-st #u19762-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19760:hover #u19762-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:114px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19760.focus-st #u19762-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:114px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19760.fld-err-st #u19762-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#D7244C;min-height:114px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19760.non-empty-st #u19762-4 *{color:#666666;font-style:normal;}#widgetu19760:hover #u19762-4 *{color:#666666;font-style:normal;}#widgetu19760.focus-st #u19762-4 *{color:#666666;font-style:normal;}#widgetu19783.fld-err-st #u19786-4 p,#widgetu19783.fld-err-st #u19784-4 *,#widgetu19770.fld-err-st #u19772-4 p,#widgetu19770.fld-err-st #u19773-4 *,#widgetu19779.fld-err-st #u19780-4 p,#widgetu19779.fld-err-st #u19782-4 *,#widgetu19765.fld-err-st #u19767-4 p,#widgetu19765.fld-err-st #u19768-4 *,#widgetu19787.fld-err-st #u19790-4 p,#widgetu19787.fld-err-st #u19789-4 *,#widgetu19775.fld-err-st #u19778-4 p,#widgetu19775.fld-err-st #u19777-4 *,#widgetu19760.fld-err-st #u19763-4 p,#widgetu19760.fld-err-st #u19762-4 *{color:#D7244C;font-style:italic;}#u19784-3,#u19773-3,#u19782-3,#u19768-3,#u19789-3,#u19777-3,#u19762-3{color:#B5B5B5;margin-right:6px;position:relative;margin-left:6px;font-style:italic;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19760_input{color:#B5B5B5;min-height:114px;position:absolute;font-style:italic;width:100%;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19760_prompt{color:#B5B5B5;position:absolute;font-style:italic;width:100%;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;overflow:hidden;height:114px;}.js body,#widgetu19783.non-empty-st #widgetu19783_prompt,#widgetu19783.focus-st #widgetu19783_prompt,#widgetu19770.non-empty-st #widgetu19770_prompt,#widgetu19770.focus-st #widgetu19770_prompt,#widgetu19779.non-empty-st #widgetu19779_prompt,#widgetu19779.focus-st #widgetu19779_prompt,#widgetu19765.non-empty-st #widgetu19765_prompt,#widgetu19765.focus-st #widgetu19765_prompt,#widgetu19787.non-empty-st #widgetu19787_prompt,#widgetu19787.focus-st #widgetu19787_prompt,#widgetu19775.non-empty-st #widgetu19775_prompt,#widgetu19775.focus-st #widgetu19775_prompt,#widgetu19760.non-empty-st #widgetu19760_prompt,#widgetu19760.focus-st #widgetu19760_prompt{visibility:hidden;}#pu19759-4{z-index:114;}#u19759-4{background-color:transparent;margin-right:-10000px;opacity:0;position:relative;line-height:14px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";padding-top:4px;filter:alpha(opacity=0);z-index:114;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;}#widgetu19758.frm-sub-st #u19759-4 p{color:#999999;font-style:italic;line-height:1;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-size:14px;}#u19769-4{color:#FF0000;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;line-height:14px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";padding-top:4px;filter:alpha(opacity=0);z-index:118;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;}#widgetu19758.frm-sub-st #u19759-4,#widgetu19758.frm-subm-err-st #u19769-4{filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";}#widgetu19758.frm-subm-err-st #u19769-4 p{color:#D7244C;font-style:italic;line-height:1;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-size:14px;}#u19764-4{color:#00FF00;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;line-height:12px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";padding-top:4px;filter:alpha(opacity=0);z-index:122;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;min-height:26px;}#widgetu19758.frm-subm-ok-st #u19764-4{filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";min-height:30px;}#widgetu19758.frm-subm-ok-st #u19764-4 p{color:#999999;font-style:italic;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-size:14px;}#u19774-4{color:#FFFFFF;background-color:#666666;margin-right:-10000px;border-radius:2px;border-width:1px;border-color:#666666;line-height:14px;position:relative;margin-top:-1px;border-style:solid;text-align:center;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;height:22px;padding:8px 0px 0px;}#u19774-4:hover{margin-top:-1px;background-color:#141414;margin-right:-10000px;padding-bottom:0px;padding-top:8px;margin-left:0%;border-color:#141414;min-height:0px;height:22px;}#u19774-4:active{margin-top:-1px;background-color:#141414;margin-right:-10000px;padding-bottom:0px;padding-top:8px;margin-left:0%;border-color:#141414;min-height:0px;height:22px;}#start,#kontakt,#anfahrt{left:0%;position:relative;}#u19610{border-color:transparent;background-color:transparent;z-index:157;border-width:0px;}#u19610-bw{margin-left:0px;left:0px;z-index:157;}#pamphletu19736{position:fixed;top:20px;}#u19748{box-shadow:0px 0px 8px rgba(255,255,255,0.5),0px 0px 8px rgba(255,255,255,0.5)/* glow */, + 6px 6px 8px rgba(0,0,0,0.5)/* drop shadow*/;background-color:#FFFFFF;border-width:0px;border-color:transparent;padding-bottom:7px;border-radius:5px;height:231px;}#u19749{background-color:transparent;margin-right:-10000px;padding-bottom:0px;border-width:0px;width:142px;border-color:transparent;position:relative;}#u19749_position_content{margin-bottom:-5px;width:100%;}#u19755-4{margin-top:7px;position:relative;}#u19753-4,#u19754-4,#u19751-4{margin-top:6px;position:relative;}#u19752-4{margin-top:5px;position:relative;}#u19750-4_img,#u19753-4_img,#u19755-4_img,#u19754-4_img,#u19751-4_img,#u19752-4_img{vertical-align:top;display:block;}#u19739{margin-right:-10000px;position:relative;}#u19740{height:35px;background-color:#000000;padding-bottom:15px;border-width:0px;border-color:transparent;width:50px;}#u19740:hover{margin-top:0px;background-color:#008089;margin-right:0px;border-width:0px;border-color:transparent;width:50px;margin-bottom:0px;min-height:0px;height:35px;}#u19740.PamphletThumbSelected{margin-top:0px;background-color:#000000;margin-right:0px;width:50px;margin-bottom:0px;min-height:0px;border-radius:0px;height:35px;}#u19741{margin-top:14px;background-color:transparent;margin-right:-10000px;position:relative;left:18%;border-color:transparent;width:60%;border-width:0px;}#u19743{height:3px;background-color:#FFFFFF;width:100%;position:relative;}#u19744,#u19742{margin-top:6px;background-color:#FFFFFF;position:relative;width:100%;height:3px;}.SSFirstButton,.SSPreviousButton,.SSNextButton,.SSLastButton,.SSSlideLink,.SSCloseButton,.PamphletWidget .ThumbGroup .Thumb,.PamphletNextButton,.PamphletPrevButton,.PamphletCloseButton{cursor:pointer;}#u19711{background-color:#008089;z-index:2;}#u19711_align_to_page{margin-left:auto;margin-right:auto;position:relative;}#u19711-bw{z-index:2;}.html{background-color:#FFFFFF;}#produkte,#u19750-4,body{position:relative;}.verticalspacer{min-height:1px;}@media (min-width: 1001px), print{#muse_css_mq{background-color:#FFFFFF;}#bp_infinity.active{display:block;}#page{min-height:4902px;max-width:1200px;}#pu19797-4{z-index:158;margin-top:-6px;width:84.09%;}#u19797-4{z-index:158;position:relative;width:97px;left:0%;margin:145px -10000px -4px 7.135777987966923%;}#u19710-4{z-index:170;position:relative;width:147px;left:12.79%;margin:145px -10000px -4px 7.135777987966923%;}#u20070-4{z-index:174;position:relative;width:85px;left:30.33%;margin:145px -10000px -5px 7.135777987966923%;}#u20068{z-index:182;margin-right:-10000px;margin-left:59.47%;}#u20098-4{z-index:162;position:relative;width:86px;left:65.81%;margin:145px -10000px -4px 7.135777987966923%;}#u19969-4{z-index:166;position:relative;width:85px;left:77.31%;margin:145px -10000px -4px 7.135777987966923%;}#u20099-4{z-index:178;position:relative;width:117px;left:88.9%;margin:145px -10000px -5px 7.135777987966923%;}#u19797-4_img,#u19710-4_img,#u20070-4_img,#u20098-4_img,#u19969-4_img,#u20099-4_img{display:block;vertical-align:top;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:1200px;height:600px;}#u19640popup{width:96.67%;left:1.67%;}#u19643-6,#u19642-4,#u19641-8{width:100.52%;}#u20095{margin-top:461px;left:48.51%;}#produkte{margin-top:32px;left:0%;margin-left:0%;}#u20018-6{width:65%;margin-left:17.5%;left:7px;}#pu19896{z-index:184;margin-top:38px;width:100%;left:0%;margin-left:0%;}#u19896{z-index:184;}#u19914{z-index:185;}#buttonu19915{z-index:186;}#start,#buttonu19915:hover{margin-left:0%;}#pu19917,#u19917{z-index:187;}#u19918{z-index:193;}#u19918_states{background-image:url("../images/u19918_states.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r.png?crc=162795771");}#u19916-4{z-index:188;}#u20332{z-index:196;}#u20332_states{background-image:url("../images/u20332_states.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r.png?crc=450819133");}#u20071{z-index:217;margin-right:-10000px;left:25.84%;}#u20072{z-index:218;}#buttonu20073{z-index:219;height:328.8937500000012px;padding-bottom:8.106249999998795px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:0%;}#pu20075,#u20075{z-index:220;}#u20076{z-index:226;}#u20076_states{background-image:url("../images/u20076_states.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r.png?crc=4066690632");}#u20074-4{z-index:221;}#u20353{z-index:229;}#u20353_states{background-image:url("../images/u20353_states.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r.png?crc=450819133");}#u20044{z-index:203;margin-right:-10000px;left:51.67%;}#u20045{z-index:204;}#buttonu20046{z-index:205;height:329.9937500000011px;padding-bottom:7.006249999998886px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:0%;}#pu20047,#u20047{z-index:206;}#u20049{z-index:212;}#u20049_states{background-image:url("../images/u20049_states.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r.png?crc=4066690632");}#u20048-4{z-index:207;}#u20370{z-index:215;}#u20370_states{background-image:url("../images/u20370_states.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r.png?crc=450819133");}#u19798{z-index:231;margin-right:-10000px;left:77.5%;}#u19799{z-index:232;}#buttonu19800{z-index:233;height:329.9937500000011px;padding-bottom:7.006249999998886px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:0%;}#pu19801,#u19801{z-index:234;}#u19803{z-index:240;}#u19803_states{background-image:url("../images/u19803_states.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r.png?crc=4066690632");}#u19802-4{z-index:235;}#u20379{z-index:243;}#u20379_states{background-image:url("../images/u20379_states.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r.png?crc=450819133");}#pu19611{z-index:245;margin-top:85px;width:100%;left:0%;margin-left:0%;}#u19611{z-index:245;margin-right:-10000px;margin-top:1px;}#u19630{z-index:246;}#buttonu19631{z-index:247;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:0%;}#pu19632,#u19632{z-index:248;}#u19634{z-index:254;}#u19634_states{background-image:url("../images/u19634_states.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r.png?crc=4066690632");}#u19633-4{z-index:249;}#u20404{z-index:257;}#u20404_states{background-image:url("../images/u20404_states.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r.png?crc=450819133");background-size:100%;}#u19921{z-index:259;margin-right:-10000px;left:25.84%;}#u19922{z-index:260;}#buttonu19923{z-index:261;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:0%;}#pu19926,#u19926{z-index:262;}#u19924{z-index:268;}#u19924_states{background-image:url("../images/u19924_states.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r.png?crc=4066690632");}#u19925-4{z-index:263;}#u20413{z-index:271;}#u20413_states{background-image:url("../images/u20413_states.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r.png?crc=450819133");}#u19945{z-index:273;margin-right:-10000px;margin-top:1px;left:51.67%;}#u19946{z-index:274;}#buttonu19947{z-index:275;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:0%;}#pu19949,#u19949{z-index:276;}#u19948{z-index:282;}#u19948_states{background-image:url("../images/u19948_states.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r.png?crc=4066690632");}#u19950-4{z-index:277;}#u20422{z-index:285;}#u20422_states{background-image:url("../images/u20422_states.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r.png?crc=450819133");background-size:100%;}#u19661{z-index:287;margin-right:-10000px;margin-top:1px;left:77.5%;}#u19662{z-index:288;}#buttonu19663{z-index:289;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:0%;}#pu19664,#u19664{z-index:290;}#u19666{z-index:296;}#u19666_states{background-image:url("../images/u19666_states.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r.png?crc=4066690632");}#u19665-4{z-index:291;}#u20431{z-index:299;}#u20431_states{background-image:url("../images/u20431_states.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r.png?crc=450819133");}#pu20100{z-index:301;margin-top:87px;width:100%;left:0%;margin-left:0%;}#u20100{z-index:301;margin-right:-10000px;}#u20119{z-index:302;}#buttonu20120{z-index:303;height:327.8968749999999px;padding-bottom:9.103125000000091px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:0%;}#pu20123,#u20123{z-index:304;}#u20121{z-index:310;}#u20121_states{background-image:url("../images/u20121_states.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r.png?crc=4066690632");}#u20122-4{z-index:305;}#u20464{z-index:313;}#u20464_states{background-image:url("../images/u20464_states.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r.png?crc=450819133");}#u19822{z-index:315;margin-right:-10000px;left:25.84%;}#u19841{z-index:316;}#buttonu19842{z-index:317;height:327.79062500000236px;padding-top:13px;padding-bottom:9.209374999997635px;}#buttonu19842:hover{height:328px;margin-left:0%;}#buttonu19842.ButtonSelected{height:328px;margin-left:0%;}#pu19843,#u19843{z-index:318;}#u19845{z-index:324;}#u19845_states{background-image:url("../images/u19845_states.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r.png?crc=4066690632");}#u19844-4{z-index:319;}#u20473{z-index:327;margin-top:2px;margin-left:57.41%;}#u20473_states{background-image:url("../images/u20473_states.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r.png?crc=450819133");}#u19712{z-index:329;margin-right:-10000px;left:51.67%;}#u19713{z-index:330;}#buttonu19714{z-index:331;height:328.8906250000023px;padding-bottom:8.109374999997726px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:0%;}#pu19716,#u19716{z-index:332;}#u19717{z-index:338;}#u19717_states{background-image:url("../images/u19717_states.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r.png?crc=4066690632");}#u19715-4{z-index:333;}#u20482{z-index:341;}#u20482_states{background-image:url("../images/u20482_states.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r.png?crc=450819133");}#u19685{z-index:343;margin-right:-10000px;left:77.5%;}#u19686{z-index:344;}#buttonu19687{z-index:345;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:0%;}#pu19689,#u19689{z-index:346;}#u19688{z-index:352;}#u19688_states{background-image:url("../images/u19688_states.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r.png?crc=4066690632");}#u19690-4{z-index:347;}#u20491{z-index:355;}#u20491_states{background-image:url("../images/u20491_states.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r.png?crc=450819133");}#pu19970{z-index:357;margin-top:86px;width:100%;left:0%;margin-left:0%;}#u19970{z-index:357;margin-right:-10000px;}#u19971{z-index:358;}#buttonu19972{z-index:359;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:0%;}#pu19975,#u19975{z-index:360;}#u19974{z-index:366;}#u19974_states{background-image:url("../images/u19974_states.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r.png?crc=4066690632");}#u19973-4{z-index:361;}#u20540{z-index:369;}#u20540_states{background-image:url("../images/u20540_states.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r.png?crc=450819133");}#u20020{z-index:371;margin-right:-10000px;left:25.84%;}#u20039{z-index:372;}#buttonu20040{z-index:373;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:0%;}#pu20043,#u20043{z-index:374;}#u20041{z-index:380;}#u20041_states{background-image:url("../images/u20041_states.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r.png?crc=4066690632");}#u20042-4{z-index:375;}#u20549{z-index:383;}#u20549_states{background-image:url("../images/u20549_states.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r.png?crc=450819133");}#u19846{z-index:385;margin-right:-10000px;left:51.67%;}#u19865{z-index:386;}#buttonu19866{z-index:387;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:0%;}#pu19867,#u19867{z-index:388;}#u19869{z-index:394;}#u19869_states{background-image:url("../images/u19869_states.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r.png?crc=4066690632");}#u19868-4{z-index:389;}#u20558{z-index:397;}#u20558_states{background-image:url("../images/u20558_states.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r.png?crc=450819133");}#u19994{z-index:399;margin-right:-10000px;left:77.5%;}#u19995{z-index:400;}#buttonu19996{z-index:401;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:0%;}#buttonu19996.ButtonSelected{margin-left:0%;}#pu19999,#u19999{z-index:402;}#u19998{z-index:408;}#u19998_states{background-image:url("../images/u19998_states.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r.png?crc=4066690632");}#u19997-4{z-index:403;}#u20567{z-index:411;}#u20567_states{background-image:url("../images/u20567_states.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r.png?crc=450819133");}#u21531-8{z-index:442;display:block;vertical-align:top;margin-top:60px;position:relative;width:96.67%;left:0%;margin-left:1.67%;}#pu21563-5{z-index:450;margin-top:11px;width:63.17%;left:0%;margin-left:20.09%;}#u21563-5{z-index:450;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:48.95%;left:-0.14%;}#u21569-5{z-index:455;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:48.95%;left:52.51%;}#u21563-5_img,#u21569-5_img{display:block;vertical-align:top;width:100%;}#kontakt{margin-top:114px;margin-left:0%;}#pu20125-24{z-index:413;margin-top:21px;width:98.34%;}#u20125-24{z-index:413;display:block;vertical-align:top;position:relative;width:39.07%;left:61.62%;margin:-8px -10000px -8px 0%;}#u19609{z-index:437;background-image:url("../images/fotolia_56863820_m.jpg?crc=143243195");width:62.29%;margin-left:0px;}#u19609 .fluid_height_spacer{padding-bottom:69.38775510204081%;}#u21525-4{z-index:438;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:377px;left:37.38%;margin-left:0%;}#u19919-5{z-index:198;margin-top:34px;width:100%;left:0%;margin-left:0%;}#widgetu19758{padding-bottom:0px;margin-top:35px;width:96.75%;margin-left:1.63%;left:1px;}#widgetu19783{width:47.81%;left:-0.09%;}#u19785-4{width:91.2%;}#u19786-4{min-height:20px;width:38.15%;left:61.86%;}#u19784-4{width:99.64%;}#widgetu19783:hover #u19784-4{width:99.64%;}#widgetu19783.focus-st #u19784-4{width:99.64%;}#widgetu19770{width:47.81%;left:52.29%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:91.2%;}#u19772-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.64%;}#widgetu19770:hover #u19773-4{width:99.64%;}#widgetu19770.focus-st #u19773-4{width:99.64%;}#widgetu19779{width:50.56%;left:-0.09%;}#pu19781-4{width:99.83%;margin-left:0.18%;}#u19781-4{width:68.95%;}#u19780-4{min-height:20px;width:28.84%;left:71.17%;}#u19782-4{width:94.21%;}#widgetu19779:hover #u19782-4{width:94.21%;}#widgetu19779.focus-st #u19782-4{width:94.21%;}#widgetu19765{width:47.81%;left:52.29%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:91.2%;}#u19767-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19770.fld-err-st #u19773-4,#u19768-4{width:99.64%;}#widgetu19765:hover #u19768-4{width:99.64%;}#widgetu19765.focus-st #u19768-4{width:99.64%;}#pstart,#pslideshowu19635,#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:100%;}#widgetu19787{width:50.56%;left:-0.09%;}#widgetu19779.fld-err-st,#widgetu19787.fld-err-st{width:50.56%;}#pu19788-4{width:99.66%;margin-left:0.35%;}#u19788-4{width:69.06%;}#widgetu19787.fld-err-st #u19788-4{width:69.06%;}#u19790-4{min-height:20px;width:28.89%;left:71.12%;}#widgetu19787.fld-err-st #u19790-4{min-height:20px;width:28.89%;}#widgetu19779.fld-err-st #u19782-4,#u19789-4{width:94.21%;}#widgetu19787:hover #u19789-4{width:94.21%;}#widgetu19787.focus-st #u19789-4{width:94.21%;}#widgetu19787.fld-err-st #u19789-4{width:94.21%;}#widgetu19775{width:47.81%;left:52.29%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19765.fld-err-st,#widgetu19775.fld-err-st{width:47.81%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:79.82%;margin-left:0.19%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:91.2%;}#widgetu19775.fld-err-st #u19776-4{width:91.2%;}#u19778-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:20px;width:38.15%;}#widgetu19765.fld-err-st #u19768-4,#u19777-4{width:99.64%;}#widgetu19775:hover #u19777-4{width:99.64%;}#widgetu19775.focus-st #u19777-4{width:99.64%;}#widgetu19775.fld-err-st #u19777-4{width:99.64%;}#widgetu19760{width:100.09%;left:-0.09%;}#widgetu19760.fld-err-st{width:100.09%;}#pu19761-4{width:50.44%;margin-left:0.09%;}#widgetu19779.fld-err-st #u19781-4,#u19761-4{width:68.95%;}#widgetu19760.fld-err-st #u19761-4{width:68.95%;}#u19763-4{min-height:20px;width:28.84%;left:71.17%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19760.fld-err-st #u19763-4{min-height:20px;width:28.84%;}#u19762-4{width:99.83%;}#widgetu19760:hover #u19762-4{width:99.83%;}#widgetu19760.focus-st #u19762-4{width:99.83%;}#widgetu19760.fld-err-st #u19762-4{width:99.83%;}#pu19759-4{margin-top:61px;width:38.16%;margin-left:42.99%;}#u19759-4{min-height:26px;width:55.54%;left:44.47%;}#u19769-4{min-height:26px;width:55.54%;left:44.47%;}#widgetu19758.frm-sub-st #u19759-4,#widgetu19758.frm-subm-err-st #u19769-4{min-height:30px;}#u19764-4{width:55.54%;left:44.47%;}#u19774-4{margin-bottom:-1px;width:38.15%;left:-0.23%;}#u19774-4:hover{margin-bottom:-1px;width:38.15%;}#u19774-4:active{margin-bottom:-1px;width:38.15%;}#anfahrt{margin-top:116px;margin-left:0%;}#u21795-6{z-index:460;display:block;vertical-align:top;position:relative;margin-left:50%;left:-341px;}#u19610{height:600px;}#u19610-bw{margin-top:2px;height:600px;}#pamphletu19736{z-index:466;right:20px;width:4.17%;max-width:50px;}#u19747{width:159px;height:0px;padding-bottom:238px;position:relative;}#u19747popup{z-index:467;}#u19748{z-index:468;width:159px;position:fixed;top:20px;right:71px;}#u19749{z-index:469;left:5.04%;}#u19750-4{z-index:470;}#u19753-4{z-index:474;}#u19755-4{z-index:478;}#u19754-4{z-index:482;}#u19751-4{z-index:486;}#u19752-4{z-index:490;}#u19747-wrapper{position:fixed;top:20px;right:230px;width:159px;}#u19739{z-index:494;padding-bottom:50px;width:100%;}#u19740{position:fixed;top:20px;right:20px;}#u19740:hover{margin-left:0px;}#u19740.PamphletThumbSelected{margin-left:0px;}#u19741{z-index:496;}#u19743{z-index:497;}#u19744{z-index:498;}#u19742{z-index:499;}.css_verticalspacer .verticalspacer{height:calc(100vh - 5202px);}#u19711{min-height:282px;padding-bottom:86px;}#u19711_align_to_page{max-width:1200px;}#u24221{z-index:500;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:48px;width:63.42%;margin-left:18.3%;left:1px;}#u24191-17{z-index:518;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:55.59%;margin-left:22.21%;left:-169px;}#u24197{z-index:501;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;width:23.13%;margin-left:38.44%;left:293px;}#u24167-4{z-index:514;display:block;vertical-align:top;position:relative;width:99.44%;margin-left:0.29%;left:-1px;}#u24141-4{z-index:502;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24142-4{z-index:506;margin-top:12px;position:relative;width:100%;margin-left:0%;left:0px;}#u24143-4{z-index:510;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24141-4_img,#u24142-4_img,#u24143-4_img{display:block;vertical-align:top;width:99.44%;}#u19711-bw{min-height:282px;margin-bottom:-300px;margin-top:-6px;}body{padding-bottom:300px;}}@media (min-width: 751px) and (max-width: 1000px){#muse_css_mq{background-color:#0003e8;}#bp_1000.active{display:block;}#page{min-height:5404px;max-width:1000px;}#pstart{width:100.2%;}#pu19797-4{z-index:158;margin-top:-6px;width:91.62%;}#u19797-4{z-index:158;position:relative;width:97px;left:0%;margin:145px -10000px -4px 2.1786492190864384%;}#u19710-4{z-index:170;position:relative;width:147px;left:12.75%;margin:145px -10000px -4px 2.1786492190864384%;}#u20070-4{z-index:174;position:relative;width:85px;left:30.72%;margin:145px -10000px -5px 2.1786492190864384%;}#u20068{z-index:182;margin-right:-10000px;margin-left:54.47%;}#u20098-4{z-index:162;position:relative;width:86px;left:65.04%;margin:145px -10000px -4px 2.1786492190864384%;}#u19969-4{z-index:166;position:relative;width:85px;left:76.48%;margin:145px -10000px -4px 2.1786492190864384%;}#u20099-4{z-index:178;position:relative;width:117px;left:87.8%;margin:144px -10000px -4px 2.1786492190864384%;}#u19797-4_img,#u19710-4_img,#u20070-4_img,#u20098-4_img,#u19969-4_img,#u20099-4_img{display:block;vertical-align:top;}#pslideshowu19635{width:99.81%;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:1000px;height:500px;}#u19640popup{width:96.7%;left:1.71%;}#u19643-6,#u19642-4,#u19641-8{width:100.52%;}#u20095{margin-top:408px;left:48.21%;}#produkte{margin-top:39px;left:0%;margin-left:0.2%;}#u20018-6{width:76.55%;margin-left:11.63%;left:0px;}#pu19896{z-index:184;margin-top:38px;width:93.82%;left:0%;margin-left:3.2%;}#u19896{z-index:184;}#u19914{z-index:185;}#buttonu19915{z-index:186;}#start,#buttonu19915:hover{margin-left:0%;}#pu19917,#u19917{z-index:187;}#u19918{z-index:193;}#u19918_states{background-image:url("../images/u19918_states2.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r2.png?crc=162795771");}#u19916-4{z-index:188;}#u20332{z-index:196;}#u20332_states{background-image:url("../images/u20332_states2.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r2.png?crc=450819133");}#u20071{z-index:217;margin-right:-10000px;left:35.64%;}#u20072{z-index:218;}#buttonu20073{z-index:219;height:328.8937500000012px;padding-bottom:8.106249999998795px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:0%;}#pu20075,#u20075{z-index:220;}#u20076{z-index:226;}#u20076_states{background-image:url("../images/u20076_states2.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r2.png?crc=4066690632");}#u20074-4{z-index:221;}#u20353{z-index:229;}#u20353_states{background-image:url("../images/u20353_states2.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r2.png?crc=450819133");}#u20044{z-index:203;margin-right:-10000px;left:71.28%;}#u20045{z-index:204;}#buttonu20046{z-index:205;height:329.9937500000012px;padding-bottom:7.006249999998772px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:0%;}#pu20047,#u20047{z-index:206;}#u20049{z-index:212;}#u20049_states{background-image:url("../images/u20049_states2.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r2.png?crc=4066690632");}#u20048-4{z-index:207;}#u20370{z-index:215;}#u20370_states{background-image:url("../images/u20370_states2.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r2.png?crc=450819133");}#pu19798{z-index:231;margin-top:85px;width:93.82%;left:0%;margin-left:3.2%;}#u19798{z-index:231;margin-right:-10000px;}#u19799{z-index:232;}#buttonu19800{z-index:233;height:329.993750000001px;padding-bottom:7.0062499999989996px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:0%;}#pu19801,#u19801{z-index:234;}#u19803{z-index:240;}#u19803_states{background-image:url("../images/u19803_states2.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r2.png?crc=4066690632");}#u19802-4{z-index:235;}#u20379{z-index:243;}#u20379_states{background-image:url("../images/u20379_states2.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r2.png?crc=450819133");}#u19611{z-index:245;margin-right:-10000px;margin-top:1px;left:35.64%;}#u19630{z-index:246;}#buttonu19631{z-index:247;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:0%;}#pu19632,#u19632{z-index:248;}#u19634{z-index:254;}#u19634_states{background-image:url("../images/u19634_states2.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r2.png?crc=4066690632");}#u19633-4{z-index:249;}#u20404{z-index:257;}#u20404_states{background-image:url("../images/u20404_states2.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r2.png?crc=450819133");background-size:100%;}#u19921{z-index:259;margin-right:-10000px;left:71.28%;}#u19922{z-index:260;}#buttonu19923{z-index:261;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:0%;}#pu19926,#u19926{z-index:262;}#u19924{z-index:268;}#u19924_states{background-image:url("../images/u19924_states2.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r2.png?crc=4066690632");}#u19925-4{z-index:263;}#u20413{z-index:271;}#u20413_states{background-image:url("../images/u20413_states2.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r2.png?crc=450819133");}#pu19945{z-index:273;margin-top:86px;width:93.82%;left:0%;margin-left:3.2%;}#u19945{z-index:273;margin-right:-10000px;margin-top:1px;}#u19946{z-index:274;}#buttonu19947{z-index:275;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:0%;}#pu19949,#u19949{z-index:276;}#u19948{z-index:282;}#u19948_states{background-image:url("../images/u19948_states2.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r2.png?crc=4066690632");}#u19950-4{z-index:277;}#u20422{z-index:285;}#u20422_states{background-image:url("../images/u20422_states2.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r2.png?crc=450819133");background-size:100%;}#u19661{z-index:287;margin-right:-10000px;left:35.64%;}#u19662{z-index:288;}#buttonu19663{z-index:289;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:0%;}#pu19664,#u19664{z-index:290;}#u19666{z-index:296;}#u19666_states{background-image:url("../images/u19666_states2.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r2.png?crc=4066690632");}#u19665-4{z-index:291;}#u20431{z-index:299;}#u20431_states{background-image:url("../images/u20431_states2.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r2.png?crc=450819133");}#u20100{z-index:301;margin-right:-10000px;left:71.28%;}#u20119{z-index:302;}#buttonu20120{z-index:303;height:327.8968749999999px;padding-bottom:9.103125000000091px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:0%;}#pu20123,#u20123{z-index:304;}#u20121{z-index:310;}#u20121_states{background-image:url("../images/u20121_states2.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r2.png?crc=4066690632");}#u20122-4{z-index:305;}#u20464{z-index:313;}#u20464_states{background-image:url("../images/u20464_states2.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r2.png?crc=450819133");}#pu19822{z-index:315;margin-top:87px;width:93.82%;left:0%;margin-left:3.2%;}#u19822{z-index:315;margin-right:-10000px;}#u19841{z-index:316;}#buttonu19842{z-index:317;height:327.79062500000236px;padding-top:13px;padding-bottom:9.209374999997635px;}#buttonu19842:hover{height:328px;margin-left:0%;}#buttonu19842.ButtonSelected{height:328px;margin-left:0%;}#pu19843,#u19843{z-index:318;}#u19845{z-index:324;}#u19845_states{background-image:url("../images/u19845_states2.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r2.png?crc=4066690632");}#u19844-4{z-index:319;}#u20473{z-index:327;margin-top:2px;margin-left:57.41%;}#u20473_states{background-image:url("../images/u20473_states2.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r2.png?crc=450819133");}#u19712{z-index:329;margin-right:-10000px;left:35.64%;}#u19713{z-index:330;}#buttonu19714{z-index:331;height:328.8906250000023px;padding-bottom:8.109374999997726px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:0%;}#pu19716,#u19716{z-index:332;}#u19717{z-index:338;}#u19717_states{background-image:url("../images/u19717_states2.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r2.png?crc=4066690632");}#u19715-4{z-index:333;}#u20482{z-index:341;}#u20482_states{background-image:url("../images/u20482_states2.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r2.png?crc=450819133");}#u19685{z-index:343;margin-right:-10000px;left:71.28%;}#u19686{z-index:344;}#buttonu19687{z-index:345;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:0%;}#pu19689,#u19689{z-index:346;}#u19688{z-index:352;}#u19688_states{background-image:url("../images/u19688_states2.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r2.png?crc=4066690632");}#u19690-4{z-index:347;}#u20491{z-index:355;}#u20491_states{background-image:url("../images/u20491_states2.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r2.png?crc=450819133");}#pu19970{z-index:357;margin-top:86px;width:93.82%;left:0%;margin-left:3.2%;}#u19970{z-index:357;margin-right:-10000px;}#u19971{z-index:358;}#buttonu19972{z-index:359;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:0%;}#pu19975,#u19975{z-index:360;}#u19974{z-index:366;}#u19974_states{background-image:url("../images/u19974_states2.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r2.png?crc=4066690632");}#u19973-4{z-index:361;}#u20540{z-index:369;}#u20540_states{background-image:url("../images/u20540_states2.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r2.png?crc=450819133");}#u20020{z-index:371;margin-right:-10000px;left:35.64%;}#u20039{z-index:372;}#buttonu20040{z-index:373;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:0%;}#pu20043,#u20043{z-index:374;}#u20041{z-index:380;}#u20041_states{background-image:url("../images/u20041_states2.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r2.png?crc=4066690632");}#u20042-4{z-index:375;}#u20549{z-index:383;}#u20549_states{background-image:url("../images/u20549_states2.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r2.png?crc=450819133");}#u19846{z-index:385;margin-right:-10000px;left:71.28%;}#u19865{z-index:386;}#buttonu19866{z-index:387;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:0%;}#pu19867,#u19867{z-index:388;}#u19869{z-index:394;}#u19869_states{background-image:url("../images/u19869_states2.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r2.png?crc=4066690632");}#u19868-4{z-index:389;}#u20558{z-index:397;}#u20558_states{background-image:url("../images/u20558_states2.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r2.png?crc=450819133");}#pu19994{z-index:399;margin-top:86px;width:93.82%;left:0%;margin-left:3.2%;}#u19994{z-index:399;margin-right:-10000px;}#u19995{z-index:400;}#buttonu19996{z-index:401;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:0%;}#buttonu19996.ButtonSelected{margin-left:0%;}#pu19999,#u19999{z-index:402;}#u19998{z-index:408;}#u19998_states{background-image:url("../images/u19998_states2.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r2.png?crc=4066690632");}#u19997-4{z-index:403;}#u20567{z-index:411;}#u20567_states{background-image:url("../images/u20567_states2.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r2.png?crc=450819133");}#pu21593-6{z-index:414;padding-bottom:0px;margin-right:-10000px;margin-top:35px;width:64.37%;margin-left:35.64%;}#u21593-6{z-index:414;display:block;vertical-align:top;position:relative;width:100%;}#pu21594-5{z-index:420;margin-top:45px;width:100%;}#u21594-5{z-index:420;display:block;vertical-align:top;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:51.41%;left:-0.17%;}#u21595-5{z-index:425;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:51.41%;left:50.42%;}#u21595-5_img{display:block;vertical-align:top;width:100%;}#kontakt{margin-top:140px;margin-left:0%;}#pu19609{z-index:413;margin-top:11px;width:97.81%;}#u19609{z-index:413;background-image:url("../images/fotolia_56863820_m.jpg?crc=143243195");width:62.56%;margin-left:2px;}#u19609 .fluid_height_spacer{padding-bottom:69.33115823817292%;}#u21637-4{z-index:430;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:305px;width:25.62%;left:35.31%;margin-left:0.21%;}#u21653-24{z-index:434;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:37.56%;left:62.56%;margin-left:0.21%;}#u19919-5{z-index:198;margin-top:24px;width:99.81%;left:0%;margin-left:0.2%;}#widgetu19758{margin-top:17px;width:95.91%;margin-left:1.95%;left:0px;}#widgetu19783{width:48.18%;left:-0.11%;}#u19785-4{width:91.06%;}#u19786-4{min-height:20px;width:38.22%;left:61.79%;}#u19784-4{width:99.57%;}#widgetu19783:hover #u19784-4{width:99.57%;}#widgetu19783.focus-st #u19784-4{width:99.57%;}#widgetu19770{width:48.18%;left:51.93%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:91.06%;}#u19772-4{min-height:20px;width:38.22%;left:61.79%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.57%;}#widgetu19770:hover #u19773-4{width:99.57%;}#widgetu19770.focus-st #u19773-4{width:99.57%;}#widgetu19779{width:50.89%;left:-0.11%;}#pu19781-4{width:99.8%;margin-left:0.21%;}#u19781-4{width:68.86%;}#u19780-4{min-height:20px;width:28.9%;left:71.11%;}#u19782-4{width:94.28%;}#widgetu19779:hover #u19782-4{width:94.28%;}#widgetu19779.focus-st #u19782-4{width:94.28%;}#widgetu19765{width:48.18%;left:51.93%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:91.06%;}#u19767-4{min-height:20px;width:38.22%;left:61.79%;}#widgetu19770.fld-err-st #u19773-4,#u19768-4{width:99.57%;}#widgetu19765:hover #u19768-4{width:99.57%;}#widgetu19765.focus-st #u19768-4{width:99.57%;}#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:100%;}#widgetu19787{width:50.89%;left:-0.11%;}#widgetu19779.fld-err-st,#widgetu19787.fld-err-st{width:50.89%;}#pu19788-4{width:99.8%;margin-left:0.41%;}#widgetu19779.fld-err-st #u19781-4,#u19788-4{width:68.86%;}#widgetu19787.fld-err-st #u19788-4{width:68.86%;}#u19790-4{min-height:20px;width:28.9%;left:70.91%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19787.fld-err-st #u19790-4{min-height:20px;width:28.9%;}#widgetu19779.fld-err-st #u19782-4,#u19789-4{width:94.28%;}#widgetu19787:hover #u19789-4{width:94.28%;}#widgetu19787.focus-st #u19789-4{width:94.28%;}#widgetu19787.fld-err-st #u19789-4{width:94.28%;}#widgetu19775{width:48.18%;left:51.93%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19765.fld-err-st,#widgetu19775.fld-err-st{width:48.18%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:79.7%;margin-left:0.22%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:91.06%;}#widgetu19775.fld-err-st #u19776-4{width:91.06%;}#u19778-4{min-height:20px;width:38.22%;left:61.79%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:20px;width:38.22%;}#widgetu19765.fld-err-st #u19768-4,#u19777-4{width:99.57%;}#widgetu19775:hover #u19777-4{width:99.57%;}#widgetu19775.focus-st #u19777-4{width:99.57%;}#widgetu19775.fld-err-st #u19777-4{width:99.57%;}#widgetu19760{width:100.11%;left:-0.11%;}#widgetu19760.fld-err-st{width:100.11%;}#pu19761-4{width:48.76%;margin-left:0.21%;}#u19761-4{width:71.65%;}#widgetu19760.fld-err-st #u19761-4{width:71.65%;}#u19763-4{min-height:20px;width:30.07%;left:69.94%;}#widgetu19760.fld-err-st #u19763-4{min-height:20px;width:30.07%;}#u19762-4{width:99.8%;}#widgetu19760:hover #u19762-4{width:99.8%;}#widgetu19760.focus-st #u19762-4{width:99.8%;}#widgetu19760.fld-err-st #u19762-4{width:99.8%;}#pu19759-4{margin-top:47px;width:38.4%;margin-left:42.56%;}#u19759-4{min-height:26px;width:55.56%;left:44.45%;}#widgetu19758.frm-sub-st #u19759-4{min-height:30px;}#u19769-4{min-height:28px;width:55.56%;left:44.45%;}#widgetu19758.frm-subm-err-st #u19769-4{min-height:32px;}#u19764-4{width:55.56%;left:44.45%;}#u19774-4{width:38.22%;left:-0.28%;}#u19774-4:hover{margin-bottom:0px;width:38.22%;}#u19774-4:active{margin-bottom:0px;width:38.22%;}#anfahrt{margin-top:155px;margin-left:0%;}#u21795-6{z-index:458;display:block;vertical-align:top;margin-top:10px;position:relative;margin-left:49.91%;left:-341px;}#u19610{height:600px;}#u19610-bw{margin-top:2px;height:600px;}#pamphletu19736{z-index:464;right:20px;width:19.91%;max-width:199px;}#u19747{position:absolute;width:148px;height:238px;}#u19747popup{z-index:465;width:148px;height:238px;margin-right:-10000px;}#u19748{z-index:466;width:148px;position:relative;margin-right:-10000px;}#u19749{z-index:467;}#u19750-4{z-index:468;}#u19753-4{z-index:472;}#u19755-4{z-index:476;}#u19754-4{z-index:480;}#u19751-4{z-index:484;}#u19752-4{z-index:488;}#u19739{z-index:492;padding-bottom:50px;left:149px;width:25.13%;}#u19740{position:fixed;top:20px;right:20px;}#u19740:hover{margin-left:0px;}#u19740.PamphletThumbSelected{margin-left:0px;}#u19741{z-index:494;}#u19743{z-index:495;}#u19744{z-index:496;}#u19742{z-index:497;}.css_verticalspacer .verticalspacer{height:calc(100vh - 5705px);}#u19711{min-height:268px;padding-bottom:56px;}#u19711_align_to_page{max-width:1000px;}#u24329{z-index:498;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:34px;width:70.9%;left:12.2%;}#u24264-17{z-index:516;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:49.65%;}#u24265{z-index:499;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;width:27.65%;left:72.36%;}#u24269-4{z-index:512;display:block;vertical-align:top;position:relative;width:99.49%;}#u24267-4{z-index:500;margin-top:11px;position:relative;width:100%;}#u24266-4{z-index:504;margin-top:10px;position:relative;width:100%;}#u24268-4{z-index:508;margin-top:10px;position:relative;width:100%;}#u24267-4_img,#u24266-4_img,#u24268-4_img{display:block;vertical-align:top;width:99.49%;}#u19711-bw{min-height:268px;margin-bottom:-323px;margin-top:61px;}body{overflow-x:hidden;padding-bottom:298px;}}@media (min-width: 501px) and (max-width: 750px){#muse_css_mq{background-color:#0002ee;}#bp_750.active{display:block;}#page{min-height:6138px;max-width:750px;}#pstart{padding-bottom:0px;width:100%;}#u20068{z-index:158;top:-6px;margin-bottom:-6px;margin-left:50%;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:750px;height:400px;}#u19640popup{width:96.67%;left:1.74%;}#u19643-6,#u19642-4,#u19641-8{width:100.83%;}#u20095{margin-top:300px;left:47.6%;}#produkte{margin-top:50px;left:0%;margin-left:0%;}#u20018-6{width:76.8%;margin-left:11.6%;left:-3px;}#pu19896{z-index:160;margin-top:11px;width:86.67%;left:0%;margin-left:6.67%;}#u19896{z-index:160;}#u19914{z-index:161;}#buttonu19915{z-index:162;}#start,#buttonu19915:hover{margin-left:0%;}#pu19917,#u19917{z-index:163;}#u19918{z-index:169;}#u19918_states{background-image:url("../images/u19918_states3.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r3.png?crc=162795771");}#u19916-4{z-index:164;}#u20332{z-index:172;}#u20332_states{background-image:url("../images/u20332_states3.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r3.png?crc=450819133");}#u20071{z-index:193;margin-right:-10000px;left:58.47%;}#u20072{z-index:194;}#buttonu20073{z-index:195;height:328.8937500000012px;padding-bottom:8.106249999998795px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:0%;}#pu20075,#u20075{z-index:196;}#u20076{z-index:202;}#u20076_states{background-image:url("../images/u20076_states3.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r3.png?crc=4066690632");}#u20074-4{z-index:197;}#u20353{z-index:205;}#u20353_states{background-image:url("../images/u20353_states3.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r3.png?crc=450819133");}#pu20044{z-index:179;margin-top:74px;width:86.67%;left:0%;margin-left:6.67%;}#u20044{z-index:179;margin-right:-10000px;}#u20045{z-index:180;}#buttonu20046{z-index:181;height:329.993750000001px;padding-bottom:7.0062499999989996px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:0%;}#pu20047,#u20047{z-index:182;}#u20049{z-index:188;}#u20049_states{background-image:url("../images/u20049_states3.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r3.png?crc=4066690632");}#u20048-4{z-index:183;}#u20370{z-index:191;}#u20370_states{background-image:url("../images/u20370_states3.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r3.png?crc=450819133");}#u19798{z-index:207;margin-right:-10000px;left:58.47%;}#u19799{z-index:208;}#buttonu19800{z-index:209;height:329.9937500000012px;padding-bottom:7.006249999998772px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:0%;}#pu19801,#u19801{z-index:210;}#u19803{z-index:216;}#u19803_states{background-image:url("../images/u19803_states3.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r3.png?crc=4066690632");}#u19802-4{z-index:211;}#u20379{z-index:219;}#u20379_states{background-image:url("../images/u20379_states3.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r3.png?crc=450819133");}#pu19611{z-index:221;margin-top:75px;width:86.67%;left:0%;margin-left:6.67%;}#u19611{z-index:221;margin-right:-10000px;}#u19630{z-index:222;}#buttonu19631{z-index:223;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:0%;}#pu19632,#u19632{z-index:224;}#u19634{z-index:230;}#u19634_states{background-image:url("../images/u19634_states3.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r3.png?crc=4066690632");}#u19633-4{z-index:225;}#u20404{z-index:233;}#u20404_states{background-image:url("../images/u20404_states3.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r3.png?crc=450819133");background-size:100%;}#u19921{z-index:235;margin-right:-10000px;left:58.47%;}#u19922{z-index:236;}#buttonu19923{z-index:237;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:0%;}#pu19926,#u19926{z-index:238;}#u19924{z-index:244;}#u19924_states{background-image:url("../images/u19924_states3.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r3.png?crc=4066690632");}#u19925-4{z-index:239;}#u20413{z-index:247;}#u20413_states{background-image:url("../images/u20413_states3.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r3.png?crc=450819133");}#pu19945{z-index:249;margin-top:75px;width:86.67%;left:0%;margin-left:6.67%;}#u19945{z-index:249;margin-right:-10000px;}#u19946{z-index:250;}#buttonu19947{z-index:251;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:0%;}#pu19949,#u19949{z-index:252;}#u19948{z-index:258;}#u19948_states{background-image:url("../images/u19948_states3.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r3.png?crc=4066690632");}#u19950-4{z-index:253;}#u20422{z-index:261;}#u20422_states{background-image:url("../images/u20422_states3.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r3.png?crc=450819133");background-size:100%;}#u19661{z-index:263;margin-right:-10000px;left:58.47%;}#u19662{z-index:264;}#buttonu19663{z-index:265;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:0%;}#pu19664,#u19664{z-index:266;}#u19666{z-index:272;}#u19666_states{background-image:url("../images/u19666_states3.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r3.png?crc=4066690632");}#u19665-4{z-index:267;}#u20431{z-index:275;}#u20431_states{background-image:url("../images/u20431_states3.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r3.png?crc=450819133");}#pu20100{z-index:277;margin-top:74px;width:86.67%;left:0%;margin-left:6.67%;}#u20100{z-index:277;margin-right:-10000px;}#u20119{z-index:278;}#buttonu20120{z-index:279;height:327.8968749999999px;padding-bottom:9.103125000000091px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:0%;}#pu20123,#u20123{z-index:280;}#u20121{z-index:286;}#u20121_states{background-image:url("../images/u20121_states3.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r3.png?crc=4066690632");}#u20122-4{z-index:281;}#u20464{z-index:289;}#u20464_states{background-image:url("../images/u20464_states3.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r3.png?crc=450819133");}#u19822{z-index:291;margin-right:-10000px;left:58.47%;}#u19841{z-index:292;}#buttonu19842{z-index:293;height:349.94062500000246px;padding-bottom:0px;}#buttonu19842:hover{height:350px;margin-left:0%;}#buttonu19842.ButtonSelected{height:350px;margin-left:0%;}#buttonu19842_position_content{padding-top:13px;width:100%;}#pu19843,#u19843{z-index:294;}#u19845{z-index:300;}#u19845_states{background-image:url("../images/u19845_states3.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r3.png?crc=4066690632");}#u19844-4{z-index:295;}#u20473{z-index:303;margin-top:11px;margin-left:56.67%;}#u20473_states{background-image:url("../images/u20473_states3.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r3.png?crc=450819133");}#pu19712{z-index:305;margin-top:113px;width:86.67%;left:0%;margin-left:6.67%;}#u19712{z-index:305;margin-right:-10000px;}#u19713{z-index:306;}#buttonu19714{z-index:307;height:328.8906250000023px;padding-bottom:8.109374999997726px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:0%;}#pu19716,#u19716{z-index:308;}#u19717{z-index:314;}#u19717_states{background-image:url("../images/u19717_states3.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r3.png?crc=4066690632");}#u19715-4{z-index:309;}#u20482{z-index:317;}#u20482_states{background-image:url("../images/u20482_states3.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r3.png?crc=450819133");}#u19685{z-index:319;margin-right:-10000px;left:58.47%;}#u19686{z-index:320;}#buttonu19687{z-index:321;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:0%;}#pu19689,#u19689{z-index:322;}#u19688{z-index:328;}#u19688_states{background-image:url("../images/u19688_states3.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r3.png?crc=4066690632");}#u19690-4{z-index:323;}#u20491{z-index:331;}#u20491_states{background-image:url("../images/u20491_states3.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r3.png?crc=450819133");}#pu19970{z-index:333;margin-top:74px;width:86.67%;left:0%;margin-left:6.67%;}#u19970{z-index:333;margin-right:-10000px;margin-top:1px;}#u19971{z-index:334;}#buttonu19972{z-index:335;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:0%;}#pu19975,#u19975{z-index:336;}#u19974{z-index:342;}#u19974_states{background-image:url("../images/u19974_states3.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r3.png?crc=4066690632");}#u19973-4{z-index:337;}#u20540{z-index:345;}#u20540_states{background-image:url("../images/u20540_states3.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r3.png?crc=450819133");}#u20020{z-index:347;margin-right:-10000px;left:58.47%;}#u20039{z-index:348;}#buttonu20040{z-index:349;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:0%;}#pu20043,#u20043{z-index:350;}#u20041{z-index:356;}#u20041_states{background-image:url("../images/u20041_states3.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r3.png?crc=4066690632");}#u20042-4{z-index:351;}#u20549{z-index:359;}#u20549_states{background-image:url("../images/u20549_states3.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r3.png?crc=450819133");}#pu19846{z-index:361;margin-top:75px;width:86.67%;left:0%;margin-left:6.67%;}#u19846{z-index:361;margin-right:-10000px;}#u19865{z-index:362;}#buttonu19866{z-index:363;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:0%;}#pu19867,#u19867{z-index:364;}#u19869{z-index:370;}#u19869_states{background-image:url("../images/u19869_states3.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r3.png?crc=4066690632");}#u19868-4{z-index:365;}#u20558{z-index:373;}#u20558_states{background-image:url("../images/u20558_states3.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r3.png?crc=450819133");}#u19994{z-index:375;margin-right:-10000px;left:58.47%;}#u19995{z-index:376;}#buttonu19996{z-index:377;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:0%;}#buttonu19996.ButtonSelected{margin-left:0%;}#pu19999,#u19999{z-index:378;}#u19998{z-index:384;}#u19998_states{background-image:url("../images/u19998_states3.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r3.png?crc=4066690632");}#u19997-4{z-index:379;}#u20567{z-index:387;}#u20567_states{background-image:url("../images/u20567_states3.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r3.png?crc=450819133");}#u21667-6{z-index:390;display:block;vertical-align:top;margin-top:47px;position:relative;width:90.67%;left:0%;margin-left:6.67%;}#pu21668-5{z-index:396;margin-top:27px;width:90.67%;left:0%;margin-left:6.67%;}#u21668-5{z-index:396;display:block;vertical-align:top;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:51.48%;left:-0.15%;}#u21669-5{z-index:401;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:50.15%;left:51.48%;}#kontakt{margin-top:179px;margin-left:0%;}#pu19609{z-index:389;margin-top:21px;width:100%;}#u19609{z-index:389;background-image:url("../images/fotolia_56863820_m.jpg?crc=143243195");width:100%;margin-left:0px;}#u19609 .fluid_height_spacer{padding-bottom:53.333333333333336%;}#u21697-4{z-index:406;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:56px;width:38.67%;left:57.47%;margin-left:0%;}#u21709-24{z-index:410;display:block;vertical-align:top;margin-top:30px;position:relative;width:94.67%;left:0%;margin-left:2.67%;}#u19919-5{z-index:174;margin-top:34px;width:99.87%;left:0%;margin-left:0%;}#widgetu19758{margin-top:14px;width:94.94%;margin-left:2.54%;left:0px;}#widgetu19783{width:48.11%;left:-0.15%;}#u19785-4{width:90.98%;}#u19786-4{min-height:20px;width:38.27%;left:61.74%;}#u19784-4{width:99.42%;}#widgetu19783:hover #u19784-4{width:99.42%;}#widgetu19783.focus-st #u19784-4{width:99.42%;}#widgetu19770{width:48.11%;left:52.04%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:90.98%;}#u19772-4{min-height:20px;width:38.27%;left:61.74%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.42%;}#widgetu19770:hover #u19773-4{width:99.42%;}#widgetu19770.focus-st #u19773-4{width:99.42%;}#widgetu19779{width:51.62%;left:-0.15%;}#pu19781-4{width:99.73%;margin-left:0.28%;}#u19781-4{width:68.86%;}#u19780-4{min-height:20px;width:28.97%;left:71.04%;}#u19782-4{width:92.65%;}#widgetu19779:hover #u19782-4{width:92.65%;}#widgetu19779.focus-st #u19782-4{width:92.65%;}#widgetu19765{width:48.11%;left:52.04%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:90.98%;}#u19767-4{min-height:20px;width:38.27%;left:61.74%;}#widgetu19770.fld-err-st #u19773-4,#u19768-4{width:99.42%;}#widgetu19765:hover #u19768-4{width:99.42%;}#widgetu19765.focus-st #u19768-4{width:99.42%;}#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:99.86%;margin-left:0.15%;}#widgetu19787{width:51.62%;left:-0.15%;}#widgetu19779.fld-err-st,#widgetu19787.fld-err-st{width:51.62%;}#pu19788-4{width:99.73%;margin-left:0.55%;}#widgetu19779.fld-err-st #u19781-4,#u19788-4{width:68.86%;}#widgetu19787.fld-err-st #u19788-4{width:68.86%;}#u19790-4{min-height:20px;width:28.97%;left:71.04%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19787.fld-err-st #u19790-4{min-height:20px;width:28.97%;}#widgetu19779.fld-err-st #u19782-4,#u19789-4{width:92.65%;}#widgetu19787:hover #u19789-4{width:92.65%;}#widgetu19787.focus-st #u19789-4{width:92.65%;}#widgetu19787.fld-err-st #u19789-4{width:92.65%;}#widgetu19775{width:48.11%;left:52.04%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19765.fld-err-st,#widgetu19775.fld-err-st{width:48.11%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:81%;margin-left:0.3%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:90.98%;}#widgetu19775.fld-err-st #u19776-4{width:90.98%;}#u19778-4{min-height:20px;width:38.27%;left:61.74%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:20px;width:38.27%;}#widgetu19765.fld-err-st #u19768-4,#u19777-4{width:99.42%;}#widgetu19775:hover #u19777-4{width:99.42%;}#widgetu19775.focus-st #u19777-4{width:99.42%;}#widgetu19775.fld-err-st #u19777-4{width:99.42%;}#pslideshowu19635,#widgetu19760{width:100%;}#widgetu19760.fld-err-st{width:100%;}#pu19761-4{width:48.74%;}#u19761-4{width:72.63%;}#widgetu19760.fld-err-st #u19761-4{width:72.63%;}#u19763-4{min-height:20px;width:30.55%;left:69.46%;}#widgetu19760.fld-err-st #u19763-4{min-height:20px;width:30.55%;}#u19762-4{width:99.72%;}#widgetu19760:hover #u19762-4{width:99.72%;}#widgetu19760.focus-st #u19762-4{width:99.72%;}#widgetu19760.fld-err-st #u19762-4{width:99.72%;}#pu19759-4{margin-top:36px;width:38.91%;margin-left:42.98%;}#u19759-4{min-height:26px;width:55.6%;left:44.41%;}#widgetu19758.frm-sub-st #u19759-4{min-height:30px;}#u19769-4{min-height:28px;width:55.6%;left:44.41%;}#widgetu19758.frm-subm-err-st #u19769-4{min-height:32px;}#u19764-4{width:55.6%;left:44.41%;}#u19774-4{width:38.27%;left:-0.37%;}#u19774-4:hover{margin-bottom:0px;width:38.27%;}#u19774-4:active{margin-bottom:0px;width:38.27%;}#anfahrt{margin-top:170px;margin-left:0%;}#u21795-6{z-index:434;display:block;vertical-align:top;position:relative;margin-left:50%;left:-217px;}#u19610{height:600px;}#u19610-bw{margin-top:12px;height:600px;}#pamphletu19736{z-index:440;right:20px;width:26.41%;max-width:198px;}#u19747{position:absolute;width:148px;height:238px;}#u19747popup{z-index:441;width:148px;height:238px;margin-right:-10000px;}#u19748{z-index:442;width:148px;position:relative;margin-right:-10000px;}#u19749{z-index:443;}#u19750-4{z-index:444;}#u19753-4{z-index:448;}#u19755-4{z-index:452;}#u19754-4{z-index:456;}#u19751-4{z-index:460;}#u19752-4{z-index:464;}#u19739{z-index:468;width:25.26%;margin-left:74.75%;left:0px;}#u19740{position:absolute;margin-left:100%;left:-100px;}#u19740:hover{margin-left:100%;left:-100px;}#u19740.PamphletThumbSelected{margin-left:100%;left:-100px;}#u19741{z-index:470;}#u19743{z-index:471;}#u19744{z-index:472;}#u19742{z-index:473;}#u19740popup{width:50px;height:50px;margin-right:-10000px;margin-left:100%;}.css_verticalspacer .verticalspacer{height:calc(100vh - 7612px);}#u19711{min-height:566px;}#u19711_align_to_page{max-width:750px;}#u19711_position_content{padding-top:30px;padding-bottom:105px;width:100%;}#u24341-17{z-index:491;display:block;vertical-align:top;position:relative;width:100%;}#u24336{z-index:474;border-width:0px;border-color:transparent;background-color:transparent;margin-top:50px;position:relative;width:24.4%;left:37.6%;}#u24338-4{z-index:487;display:block;vertical-align:top;position:relative;width:100%;}#u24339-4{z-index:475;margin-top:8px;position:relative;width:100%;}#u24340-4{z-index:479;margin-top:8px;position:relative;width:100%;}#u24337-4{z-index:483;margin-top:14px;position:relative;width:100%;}#u21669-5_img,#u24339-4_img,#u24340-4_img,#u24337-4_img{display:block;vertical-align:top;width:100%;}#u19711-bw{min-height:566px;margin-bottom:-566px;margin-top:62px;}body{overflow-x:hidden;padding-bottom:566px;}}@media (max-width: 500px){#muse_css_mq{background-color:#0001f4;}#bp_500.active{display:block;}#page{min-height:6138px;max-width:500px;}#pstart{padding-bottom:0px;width:100%;}#start{margin-left:47.8%;}#u20068{z-index:164;top:-6px;margin-bottom:-6px;margin-left:50%;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:500px;height:350px;}#u19640{margin-left:0%;left:0.4999999999999929px;}#u19640popup{width:96.6%;margin-left:1.71%;}#u19643-6,#u19642-4,#u19641-8{width:101.25%;margin-left:-0.63%;left:3px;}#u20095{margin-top:253px;left:46.4%;}#u20018-6{margin-top:50px;width:77%;margin-left:11.51%;left:2px;}#pprodukte{z-index:39;margin-top:21px;width:54%;}#produkte{margin-right:-10000px;width:22px;margin-top:42px;left:45.93%;margin-left:42.6%;}#u19896{z-index:166;margin-left:92.6%;left:-135px;}#u19914{z-index:167;margin-left:50%;left:-135px;}#buttonu19915{z-index:168;margin-left:50%;left:-135px;}#buttonu19915:hover{margin-left:50%;left:-135px;}#pu19917,#u19917{z-index:169;}#u19918{z-index:175;}#u19918_states{background-image:url("../images/u19918_states4.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r4.png?crc=162795771");}#u19916-4{z-index:170;}#u20332{z-index:178;}#u20332_states{background-image:url("../images/u20332_states4.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r4.png?crc=450819133");}#u20071{z-index:199;margin-top:26px;margin-left:50%;left:-135px;}#u20072{z-index:200;margin-left:50%;left:-135px;}#buttonu20073{z-index:201;height:328.8937500000013px;padding-bottom:8.106249999998681px;margin-left:50%;left:-135px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:50%;left:-135px;}#pu20075,#u20075{z-index:202;}#u20076{z-index:208;}#u20076_states{background-image:url("../images/u20076_states4.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r4.png?crc=4066690632");}#u20074-4{z-index:203;}#u20353{z-index:211;}#u20353_states{background-image:url("../images/u20353_states4.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r4.png?crc=450819133");}#u20044{z-index:185;margin-top:25px;margin-left:50%;left:-135px;}#u20045{z-index:186;margin-left:50%;left:-135px;}#buttonu20046{z-index:187;height:329.9937500000012px;padding-bottom:7.006249999998772px;margin-left:50%;left:-135px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:50%;left:-135px;}#pu20047,#u20047{z-index:188;}#u20049{z-index:194;}#u20049_states{background-image:url("../images/u20049_states4.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r4.png?crc=4066690632");}#u20048-4{z-index:189;}#u20370{z-index:197;}#u20370_states{background-image:url("../images/u20370_states4.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r4.png?crc=450819133");}#u19798{z-index:213;margin-top:26px;margin-left:50%;left:-135px;}#u19799{z-index:214;margin-left:50%;left:-135px;}#buttonu19800{z-index:215;height:329.993750000001px;padding-bottom:7.0062499999989996px;margin-left:50%;left:-135px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:50%;left:-135px;}#pu19801,#u19801{z-index:216;}#u19803{z-index:222;}#u19803_states{background-image:url("../images/u19803_states4.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r4.png?crc=4066690632");}#u19802-4{z-index:217;}#u20379{z-index:225;}#u20379_states{background-image:url("../images/u20379_states4.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r4.png?crc=450819133");}#u19611{z-index:227;margin-top:25px;margin-left:50%;left:-135px;}#u19630{z-index:228;margin-left:50%;left:-135px;}#buttonu19631{z-index:229;margin-left:50%;left:-135px;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:50%;left:-135px;}#pu19632,#u19632{z-index:230;}#u19634{z-index:236;}#u19634_states{background-image:url("../images/u19634_states4.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r4.png?crc=4066690632");}#u19633-4{z-index:231;}#u20404{z-index:239;}#u20404_states{background-image:url("../images/u20404_states4.png?crc=245443754");background-size:97.22222222222223%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r4.png?crc=450819133");background-size:100.00000000000003%;}#u19921{z-index:241;margin-top:26px;margin-left:50%;left:-135px;}#u19922{z-index:242;margin-left:50%;left:-135px;}#buttonu19923{z-index:243;margin-left:50%;left:-135px;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:50%;left:-135px;}#pu19926,#u19926{z-index:244;}#u19924{z-index:250;}#u19924_states{background-image:url("../images/u19924_states4.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r4.png?crc=4066690632");}#u19925-4{z-index:245;}#u20413{z-index:253;}#u20413_states{background-image:url("../images/u20413_states4.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r4.png?crc=450819133");}#u19945{z-index:255;margin-top:25px;margin-left:50%;left:-135px;}#u19946{z-index:256;margin-left:50%;left:-135px;}#buttonu19947{z-index:257;margin-left:50%;left:-135px;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:50%;left:-135px;}#pu19949,#u19949{z-index:258;}#u19948{z-index:264;}#u19948_states{background-image:url("../images/u19948_states4.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r4.png?crc=4066690632");}#u19950-4{z-index:259;}#u20422{z-index:267;}#u20422_states{background-image:url("../images/u20422_states4.png?crc=245443754");background-size:97.22222222222223%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r4.png?crc=450819133");background-size:100.00000000000003%;}#u19661{z-index:269;margin-top:25px;margin-left:50%;left:-135px;}#u19662{z-index:270;margin-left:50%;left:-135px;}#buttonu19663{z-index:271;margin-left:50%;left:-135px;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:50%;left:-135px;}#pu19664,#u19664{z-index:272;}#u19666{z-index:278;}#u19666_states{background-image:url("../images/u19666_states4.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r4.png?crc=4066690632");}#u19665-4{z-index:273;}#u20431{z-index:281;}#u20431_states{background-image:url("../images/u20431_states4.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r4.png?crc=450819133");}#u20100{z-index:283;margin-top:26px;margin-left:50%;left:-135px;}#u20119{z-index:284;margin-left:50%;left:-135px;}#buttonu20120{z-index:285;height:327.89687500000036px;padding-bottom:9.103124999999636px;margin-left:50%;left:-135px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:50%;left:-135px;}#pu20123,#u20123{z-index:286;}#u20121{z-index:292;}#u20121_states{background-image:url("../images/u20121_states4.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r4.png?crc=4066690632");}#u20122-4{z-index:287;}#u20464{z-index:295;}#u20464_states{background-image:url("../images/u20464_states4.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r4.png?crc=450819133");}#u19822{z-index:297;margin-top:25px;margin-left:50%;left:-135px;}#u19841{z-index:298;margin-left:50%;left:-135px;}#buttonu19842{z-index:299;height:327.79062500000236px;padding-top:13px;padding-bottom:9.209374999997635px;margin-left:50%;left:-135px;}#buttonu19842:hover{height:328px;margin-left:50%;left:-135px;}#buttonu19842.ButtonSelected{height:328px;margin-left:50%;left:-135px;}#pu19843,#u19843{z-index:300;}#u19845{z-index:306;}#u19845_states{background-image:url("../images/u19845_states4.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r4.png?crc=4066690632");}#u19844-4{z-index:301;}#u20473{z-index:309;margin-top:2px;margin-left:57.41%;}#u20473_states{background-image:url("../images/u20473_states4.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r4.png?crc=450819133");}#u19712{z-index:311;margin-top:25px;margin-left:50%;left:-135px;}#u19713{z-index:312;margin-left:50%;left:-135px;}#buttonu19714{z-index:313;height:328.89062500000273px;padding-bottom:8.109374999997272px;margin-left:50%;left:-135px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:50%;left:-135px;}#pu19716,#u19716{z-index:314;}#u19717{z-index:320;}#u19717_states{background-image:url("../images/u19717_states4.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r4.png?crc=4066690632");}#u19715-4{z-index:315;}#u20482{z-index:323;}#u20482_states{background-image:url("../images/u20482_states4.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r4.png?crc=450819133");}#u19685{z-index:325;margin-top:25px;margin-left:50%;left:-135px;}#u19686{z-index:326;margin-left:50%;left:-135px;}#buttonu19687{z-index:327;margin-left:50%;left:-135px;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:50%;left:-135px;}#pu19689,#u19689{z-index:328;}#u19688{z-index:334;}#u19688_states{background-image:url("../images/u19688_states4.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r4.png?crc=4066690632");}#u19690-4{z-index:329;}#u20491{z-index:337;}#u20491_states{background-image:url("../images/u20491_states4.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r4.png?crc=450819133");}#u19970{z-index:339;margin-top:26px;margin-left:50%;left:-135px;}#u19971{z-index:340;margin-left:50%;left:-135px;}#buttonu19972{z-index:341;margin-left:50%;left:-135px;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:50%;left:-135px;}#pu19975,#u19975{z-index:342;}#u19974{z-index:348;}#u19974_states{background-image:url("../images/u19974_states4.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r4.png?crc=4066690632");}#u19973-4{z-index:343;}#u20540{z-index:351;}#u20540_states{background-image:url("../images/u20540_states4.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r4.png?crc=450819133");}#u20020{z-index:353;margin-top:25px;margin-left:50%;left:-135px;}#u20039{z-index:354;margin-left:50%;left:-135px;}#buttonu20040{z-index:355;margin-left:50%;left:-135px;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:50%;left:-135px;}#pu20043,#u20043{z-index:356;}#u20041{z-index:362;}#u20041_states{background-image:url("../images/u20041_states4.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r4.png?crc=4066690632");}#u20042-4{z-index:357;}#u20549{z-index:365;}#u20549_states{background-image:url("../images/u20549_states4.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r4.png?crc=450819133");}#u19846{z-index:367;margin-top:25px;margin-left:50%;left:-135px;}#u19865{z-index:368;margin-left:50%;left:-135px;}#buttonu19866{z-index:369;margin-left:50%;left:-135px;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:50%;left:-135px;}#pu19867,#u19867{z-index:370;}#u19869{z-index:376;}#u19869_states{background-image:url("../images/u19869_states4.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r4.png?crc=4066690632");}#u19868-4{z-index:371;}#u20558{z-index:379;}#u20558_states{background-image:url("../images/u20558_states4.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r4.png?crc=450819133");}#u19994{z-index:381;margin-top:25px;margin-left:50%;left:-135px;}#u19995{z-index:382;margin-left:50%;left:-135px;}#buttonu19996{z-index:383;margin-left:50%;left:-135px;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:50%;left:-135px;}#buttonu19996.ButtonSelected{margin-left:50%;left:-135px;}#pu19999,#u19999{z-index:384;}#u19998{z-index:390;}#u19998_states{background-image:url("../images/u19998_states4.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r4.png?crc=4066690632");}#u19997-4{z-index:385;}#u20567{z-index:393;}#u20567_states{background-image:url("../images/u20567_states4.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r4.png?crc=450819133");}#u21721-6{z-index:396;display:block;vertical-align:top;margin-top:53px;position:relative;width:92%;margin-left:4%;left:0px;}#u21722-5{z-index:402;margin-top:26px;position:relative;width:93.8%;margin-left:3.11%;left:5px;}#u21723-5{z-index:407;margin-top:16px;position:relative;width:93.8%;margin-left:3.11%;left:5px;}#kontakt{margin-top:94px;margin-left:47.8%;}#pu19609{z-index:395;width:100%;margin-left:0%;}#u19609{z-index:395;background-image:url("../images/fotolia_56863820_m-u19609-fr.jpg?crc=66553035");width:100%;margin-left:0%;}#u19609 .fluid_height_spacer{padding-bottom:60%;}#u21751-4{z-index:412;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:12px;width:51.2%;margin-left:24.4%;left:0px;}#u24580-28{z-index:483;display:block;vertical-align:top;margin-top:21px;position:relative;width:92.2%;margin-left:3.91%;left:1px;}#u19919-5{z-index:180;margin-top:54px;width:86.6%;margin-left:6.7%;left:1px;}#widgetu19758{padding-bottom:0px;margin-top:32px;width:100%;margin-left:0%;left:0px;}#widgetu19783{width:49.2%;left:-0.2%;}#u19785-4{width:90.82%;}#u19786-4{min-height:30px;width:38.38%;left:61.63%;}#u19784-4{width:99.19%;}#widgetu19783:hover #u19784-4{width:99.19%;}#widgetu19783.focus-st #u19784-4{width:99.19%;}#widgetu19770{width:49.2%;left:51%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:90.82%;}#u19772-4{min-height:30px;width:38.38%;left:61.63%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.19%;}#widgetu19770:hover #u19773-4{width:99.19%;}#widgetu19770.focus-st #u19773-4{width:99.19%;}#widgetu19779{width:49.2%;left:-0.2%;}#u19781-4{width:68.86%;}#u19780-4{min-height:30px;width:29.1%;left:71.32%;}#widgetu19770.fld-err-st #u19773-4,#u19782-4{width:99.19%;}#widgetu19779:hover #u19782-4{width:99.19%;}#widgetu19779.focus-st #u19782-4{width:99.19%;}#widgetu19765{width:49.2%;left:51%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:90.82%;}#u19767-4{min-height:30px;width:38.38%;left:61.63%;}#widgetu19779.fld-err-st #u19782-4,#u19768-4{width:99.19%;}#widgetu19765:hover #u19768-4{width:99.19%;}#widgetu19765.focus-st #u19768-4{width:99.19%;}#pslideshowu19635,#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:100%;}#widgetu19787{width:49.2%;left:-0.2%;}#pu19781-4,#pu19788-4{width:99.19%;margin-left:0.41%;}#widgetu19779.fld-err-st #u19781-4,#u19788-4{width:68.86%;}#u19790-4{min-height:30px;width:29.1%;left:70.91%;}#widgetu19765.fld-err-st #u19768-4,#u19789-4{width:99.19%;}#widgetu19787:hover #u19789-4{width:99.19%;}#widgetu19787.focus-st #u19789-4{width:99.19%;}#widgetu19775{width:49.2%;left:51%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19779.fld-err-st,#widgetu19765.fld-err-st,#widgetu19787.fld-err-st,#widgetu19775.fld-err-st{width:49.2%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:75.21%;margin-left:0.41%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:90.82%;}#widgetu19775.fld-err-st #u19776-4{width:90.82%;}#u19778-4{min-height:30px;width:38.38%;left:61.63%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:30px;width:38.38%;}#widgetu19787.fld-err-st #u19789-4,#u19777-4{width:99.19%;}#widgetu19775:hover #u19777-4{width:99.19%;}#widgetu19775.focus-st #u19777-4{width:99.19%;}#widgetu19775.fld-err-st #u19777-4{width:99.19%;}#widgetu19760{width:100.4%;left:-0.2%;}#widgetu19760.fld-err-st{width:100.4%;}#pu19761-4{width:48.61%;margin-left:0.2%;}#widgetu19787.fld-err-st #u19788-4,#u19761-4{width:68.86%;}#widgetu19760.fld-err-st #u19761-4{width:68.86%;}#u19763-4{min-height:30px;width:29.1%;left:71.32%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19787.fld-err-st #u19790-4,#widgetu19760.fld-err-st #u19763-4{min-height:30px;width:29.1%;}#u19762-4{width:99.61%;}#widgetu19760:hover #u19762-4{width:99.61%;}#widgetu19760.focus-st #u19762-4{width:99.61%;}#widgetu19760.fld-err-st #u19762-4{width:99.61%;}#pu19759-4{margin-top:32px;width:36.8%;margin-left:43%;}#u19759-4{min-height:28px;width:55.98%;left:44.57%;}#widgetu19758.frm-sub-st #u19759-4{min-height:32px;}#u19769-4{min-height:42px;width:55.98%;left:44.57%;}#widgetu19758.frm-subm-err-st #u19769-4{min-height:46px;}#u19764-4{width:55.98%;left:44.57%;}#u19774-4{width:38.59%;left:-0.55%;}#u19774-4:hover{margin-bottom:0px;width:38.59%;}#u19774-4:active{margin-bottom:0px;width:38.59%;}#anfahrt{margin-top:190px;margin-left:47.8%;}#u19895-6{z-index:158;display:block;vertical-align:top;margin-top:7px;position:relative;margin-left:50%;left:-192px;}#u19610{height:500px;}#u19610-bw{margin-top:16px;height:500px;}#pamphletu19736{z-index:416;right:45px;width:41%;max-width:205px;}#u19747{position:absolute;width:156px;height:238px;}#u19747popup{z-index:417;width:156px;height:238px;margin-right:-10000px;}#u19748{z-index:418;width:156px;position:relative;margin-right:-10000px;}#u19749{z-index:419;}#u19750-4{z-index:420;}#u19753-4{z-index:424;}#u19755-4{z-index:428;}#u19754-4{z-index:432;}#u19751-4{z-index:436;}#u19752-4{z-index:440;}#u19739{z-index:444;width:24.4%;margin-left:75.61%;left:0px;}#u19740{position:absolute;margin-left:100%;left:-100px;}#u19740:hover{margin-left:100%;left:-100px;}#u19740.PamphletThumbSelected{margin-left:100%;left:-100px;}#u19741{z-index:446;}#u19743{z-index:447;}#u19744{z-index:448;}#u19742{z-index:449;}#u19740popup{width:50px;height:50px;margin-right:-10000px;margin-left:100%;}.css_verticalspacer .verticalspacer{height:calc(100vh - 10091px);}#u19711{min-height:444px;}#u19711_align_to_page{max-width:500px;}#u19711_position_content{padding-top:27px;padding-bottom:19px;width:100%;}#u24406-17{z-index:466;display:block;vertical-align:top;position:relative;width:100%;}#u24405-4{z-index:462;display:block;vertical-align:top;margin-top:30px;position:relative;width:33.81%;left:33%;}#u24404-4{z-index:450;margin-top:6px;position:relative;width:33.81%;left:33%;}#u24403-4{z-index:454;margin-top:5px;position:relative;width:33.81%;left:33%;}#u24402-4{z-index:458;margin-top:5px;position:relative;width:33.81%;left:33%;}#u21722-5_img,#u21723-5_img,#u24404-4_img,#u24403-4_img,#u24402-4_img{display:block;vertical-align:top;width:100%;}#u19711-bw{min-height:444px;margin-bottom:-444px;margin-top:62px;}body{overflow-x:hidden;min-width:320px;padding-bottom:298px;}} \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/css/info-seite.css b/java/wellmann-shop/src/main/webapp/resources/css/info-seite.css new file mode 100644 index 0000000..e1bd298 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/css/info-seite.css @@ -0,0 +1,2 @@ +.version.info_seite{color:#0000FB;background-color:#FBDD41;}#page{z-index:1;width:1200px;min-height:26990px;background-image:none;border-width:0px;border-color:#000000;background-color:transparent;margin-left:auto;margin-right:auto;}#pstart{z-index:545;width:0.01px;margin-right:-10000px;margin-left:199px;}#start{margin-left:1px;position:relative;}#u22271{z-index:2;width:234px;background-color:transparent;margin-left:284px;top:-6px;margin-bottom:-6px;position:relative;}#u22271_img{padding-left:28px;padding-right:28px;}#u22245-4{z-index:4;display:block;vertical-align:top;margin-left:201px;margin-top:27px;position:relative;}#u25127{z-index:679;width:801px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-left:1px;margin-top:76px;position:relative;}#u23268{z-index:708;width:800px;height:1px;background-color:#7F7F7F;margin-left:1px;position:relative;}#u22300-8{z-index:680;display:block;vertical-align:top;margin-left:93px;margin-top:32px;position:relative;}#ppu22267{z-index:703;width:0.01px;margin-left:98px;margin-top:32px;}#u22267{z-index:704;width:174px;vertical-align:top;position:relative;margin-right:-10000px;margin-top:1px;}#u22267_states{float:left;width:174px;height:45px;background:transparent url("../images/u22267_states.png?crc=500309399") no-repeat 0px 0px;}#u22267:hover #u22267_states{background:transparent url("../images/u22267_states-r.png?crc=4042967382") no-repeat 0px 0px;}#u22267:active #u22267_states{background:transparent url("../images/u22267_states-m.png?crc=4042967382") no-repeat 0px 0px;}#u22267.MuseLinkActive #u22267_states{background:transparent url("../images/u22267_states-a.png?crc=4020790485") no-repeat 0px 0px;}#u23443{z-index:711;width:180px;vertical-align:top;position:relative;margin-right:-10000px;left:405px;}#u23443_states{float:left;width:180px;height:45px;background:transparent url("../images/u23443_states.png?crc=77398154") no-repeat 0px 0px;}#u23443:hover #u23443_states{background:transparent url("../images/u23443_states-r.png?crc=197454270") no-repeat 0px 0px;}#u23443:active #u23443_states{background:transparent url("../images/u23443_states-m.png?crc=197454270") no-repeat 0px 0px;}#u23443.MuseLinkActive #u23443_states{background:transparent url("../images/u23443_states-a.png?crc=3986935662") no-repeat 0px 0px;}#ppu23452{z-index:725;width:0.01px;margin-left:69px;margin-top:17px;}#u23452{z-index:726;width:233px;vertical-align:top;position:relative;margin-right:-10000px;}#u23452_states{float:left;width:233px;height:45px;background:transparent url("../images/u23452_states.png?crc=474287122") no-repeat 0px 0px;}#u23452:hover #u23452_states{background:transparent url("../images/u23452_states-r.png?crc=14105890") no-repeat 0px 0px;}#u23452:active #u23452_states{background:transparent url("../images/u23452_states-m.png?crc=14105890") no-repeat 0px 0px;}#u23452.MuseLinkActive #u23452_states{background:transparent url("../images/u23452_states-a.png?crc=97812374") no-repeat 0px 0px;}#u23446{z-index:716;width:190px;vertical-align:top;position:relative;margin-right:-10000px;left:429px;}#u23446_states{float:left;width:190px;height:45px;background:transparent url("../images/u23446_states.png?crc=4097103742") no-repeat 0px 0px;}#u23446:hover #u23446_states{background:transparent url("../images/u23446_states-r.png?crc=4239571020") no-repeat 0px 0px;}#u23446:active #u23446_states{background:transparent url("../images/u23446_states-m.png?crc=4239571020") no-repeat 0px 0px;}#u23446.MuseLinkActive #u23446_states{background:transparent url("../images/u23446_states-a.png?crc=3788330210") no-repeat 0px 0px;}#ppu22262{z-index:688;width:0.01px;margin-left:114px;margin-top:16px;}#u22262{z-index:689;width:143px;vertical-align:top;position:relative;margin-right:-10000px;}#u22262_states{float:left;width:143px;height:45px;background:transparent url("../images/u22262_states.png?crc=3825990998") no-repeat 0px 0px;}#u22262:hover #u22262_states{background:transparent url("../images/u22262_states-r.png?crc=530876853") no-repeat 0px 0px;}#u22262:active #u22262_states{background:transparent url("../images/u22262_states-m.png?crc=530876853") no-repeat 0px 0px;}#u22262.MuseLinkActive #u22262_states{background:transparent url("../images/u22262_states-a.png?crc=3865750108") no-repeat 0px 0px;}#u23449{z-index:721;width:292px;vertical-align:top;position:relative;margin-right:-10000px;left:333px;}#u23449_states{float:left;width:292px;height:45px;background:transparent url("../images/u23449_states.png?crc=531838737") no-repeat 0px 0px;}#u23449:hover #u23449_states{background:transparent url("../images/u23449_states-r.png?crc=3764686161") no-repeat 0px 0px;}#u23449:active #u23449_states{background:transparent url("../images/u23449_states-m.png?crc=3764686161") no-repeat 0px 0px;}#u23449.MuseLinkActive #u23449_states{background:transparent url("../images/u23449_states-a.png?crc=137362830") no-repeat 0px 0px;}#ppu22293{z-index:693;width:0.01px;margin-left:135px;margin-top:17px;}#u22293{z-index:694;width:100px;vertical-align:top;position:relative;margin-right:-10000px;margin-top:1px;}#u22293_states{float:left;width:100px;height:45px;background:transparent url("../images/u22293_states.png?crc=93231195") no-repeat 0px 0px;}#u22293:hover #u22293_states{background:transparent url("../images/u22293_states-r.png?crc=497200591") no-repeat 0px 0px;}#u22293:active #u22293_states{background:transparent url("../images/u22293_states-m.png?crc=497200591") no-repeat 0px 0px;}#u22293.MuseLinkActive #u22293_states{background:transparent url("../images/u22293_states-a.png?crc=283752413") no-repeat 0px 0px;}#u23982{z-index:731;width:292px;vertical-align:top;position:relative;margin-right:-10000px;left:312px;}#u23982_states{float:left;width:292px;height:45px;background:transparent url("../images/u23982_states.png?crc=191305221") no-repeat 0px 0px;}#u23982:hover #u23982_states{background:transparent url("../images/u23982_states-r.png?crc=4085934979") no-repeat 0px 0px;}#u23982:active #u23982_states{background:transparent url("../images/u23982_states-m.png?crc=4085934979") no-repeat 0px 0px;}#u23982.MuseLinkActive #u23982_states{background:transparent url("../images/u23982_states-a.png?crc=3892203500") no-repeat 0px 0px;}#ppu22278{z-index:698;width:0.01px;margin-left:76px;margin-top:16px;}#u22278{z-index:699;width:218px;vertical-align:top;position:relative;margin-right:-10000px;}#u22278_states{float:left;width:218px;height:45px;background:transparent url("../images/u22278_states.png?crc=4099191921") no-repeat 0px 0px;}#u22278:hover #u22278_states{background:transparent url("../images/u22278_states-r.png?crc=4082250002") no-repeat 0px 0px;}#u22278:active #u22278_states{background:transparent url("../images/u22278_states-m.png?crc=4082250002") no-repeat 0px 0px;}#u22278.MuseLinkActive #u22278_states{background:transparent url("../images/u22278_states-a.png?crc=12935852") no-repeat 0px 0px;}#u23985{z-index:736;height:45px;width:292px;vertical-align:top;position:relative;margin-right:-10000px;left:371px;background:transparent url("../images/u23985.png?crc=4151600689") no-repeat 0px 0px;}#u23985:hover{background:transparent url("../images/u23985-r.png?crc=4057509041") no-repeat 0px 0px;}#u23985:active{background:transparent url("../images/u23985-m.png?crc=4057509041") no-repeat 0px 0px;}#u23269{z-index:709;width:800px;height:1px;background-color:#7F7F7F;margin-top:32px;position:relative;}#u24860{z-index:1149;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:161px;position:relative;}#u23646{z-index:1150;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;}#u23512{z-index:1151;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:24px;position:relative;}#u23514{z-index:1176;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23517{z-index:1175;width:0.01px;margin-top:20px;}#u23517{z-index:1175;width:240px;height:534px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/kelly-sikkema-290463.jpg?crc=4135416089") no-repeat center center;background-size:cover;}#u23513-23{z-index:1152;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23516{z-index:1177;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u23553{z-index:607;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:143px;position:relative;}#u23482{z-index:608;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:27px;position:relative;}#u23485{z-index:609;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u23487{z-index:621;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23490{z-index:620;width:0.01px;margin-top:20px;}#u23490{z-index:620;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/header_3.jpg?crc=304693507") no-repeat right top;background-size:cover;}#u23486-10{z-index:610;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23489{z-index:622;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u23559{z-index:624;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:141px;position:relative;}#u23455{z-index:625;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:26px;position:relative;}#u23457{z-index:626;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u23461{z-index:635;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23458{z-index:634;width:0.01px;margin-top:20px;}#u23458{z-index:634;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180426_140115.jpg?crc=4214834862") no-repeat center center;background-size:cover;}#u23460-7{z-index:627;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23462{z-index:636;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u23657{z-index:638;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:143px;position:relative;}#u23572{z-index:639;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:26px;position:relative;}#u23574{z-index:654;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23577{z-index:653;width:0.01px;margin-top:20px;}#u23577{z-index:653;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/bank-phrom-352283-unsplash.jpg?crc=4102018501") no-repeat right bottom;background-size:cover;}#u23573-13{z-index:640;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23576{z-index:655;width:800px;height:1px;background-color:#7F7F7F;margin-top:22px;position:relative;}#u25124{z-index:657;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:142px;position:relative;}#u23252{z-index:658;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u23149{z-index:659;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:25px;position:relative;}#u23154{z-index:671;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23151{z-index:670;width:0.01px;margin-top:20px;}#u23151{z-index:670;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/markus-spiske-104910-unsplash.jpg?crc=437042132") no-repeat left top;background-size:cover;}#u23153-10{z-index:660;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23152{z-index:672;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u23746-5{z-index:674;position:relative;margin-right:-10000px;width:405px;margin-top:270px;left:327px;}#papiere{margin-left:1px;margin-top:141px;position:relative;}#u23011{z-index:498;width:800px;height:1px;background-color:#7F7F7F;margin-left:1px;margin-top:31px;position:relative;}#pu23010{z-index:497;width:0.01px;margin-left:1px;margin-top:21px;}#u23010{z-index:497;width:240px;height:501px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/andrew-pons-6488-unsplash.jpg?crc=4163462341") no-repeat center center;background-size:cover;}#pu23012-17{z-index:480;width:0.01px;padding-bottom:0px;margin-right:-10000px;margin-top:3px;margin-left:250px;}#u23012-17{z-index:480;display:block;vertical-align:top;position:relative;}#ppu23033{z-index:500;width:0.01px;margin-left:22px;margin-top:25px;}#u23033{z-index:501;width:290px;vertical-align:top;position:relative;margin-right:-10000px;}#u23033_states{float:left;width:290px;height:23px;background:transparent url("../images/u23033_states.png?crc=388746849") no-repeat 0px 0px;}#u23033:hover #u23033_states{background:transparent url("../images/u23033_states-r.png?crc=536168734") no-repeat 0px 0px;}#u23036{z-index:510;width:183px;vertical-align:top;position:relative;margin-right:-10000px;left:323px;}#u23036_states{float:left;width:183px;height:23px;background:transparent url("../images/u23036_states.png?crc=179848421") no-repeat 0px 0px;}#u23036:hover #u23036_states{background:transparent url("../images/u23036_states-r.png?crc=139242062") no-repeat 0px 0px;}#ppu23034{z-index:503;width:0.01px;margin-left:22px;margin-top:11px;}#u23034{z-index:504;width:290px;vertical-align:top;position:relative;margin-right:-10000px;}#u23034_states{float:left;width:290px;height:23px;background:transparent url("../images/u23034_states.png?crc=387386755") no-repeat 0px 0px;}#u23034:hover #u23034_states{background:transparent url("../images/u23034_states-r.png?crc=3949929974") no-repeat 0px 0px;}#u23037{z-index:513;width:183px;vertical-align:top;position:relative;margin-right:-10000px;margin-top:5px;left:323px;}#u23037_states{float:left;width:183px;height:23px;background:transparent url("../images/u23037_states.png?crc=4284819052") no-repeat 0px 0px;}#u23037:hover #u23037_states{background:transparent url("../images/u23037_states-r.png?crc=3870716018") no-repeat 0px 0px;}#u23035{z-index:507;width:290px;vertical-align:top;margin-left:22px;margin-top:5px;position:relative;}#u23035_states{float:left;width:290px;height:23px;background:transparent url("../images/u23035_states.png?crc=3979783365") no-repeat 0px 0px;}#u23035:hover #u23035_states{background:transparent url("../images/u23035_states-r.png?crc=4106196163") no-repeat 0px 0px;}#u23008{z-index:499;width:800px;height:1px;background-color:#7F7F7F;margin-left:1px;margin-top:20px;position:relative;}#u23668{z-index:516;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-left:1px;margin-top:147px;position:relative;}#u23080{z-index:533;width:800px;height:1px;background-color:#7F7F7F;margin-top:28px;position:relative;}#pu23077{z-index:532;width:0.01px;margin-top:21px;}#u23077{z-index:532;width:240px;height:444px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/color-417694_1920-u23077-fr.jpg?crc=3962145376") no-repeat left center;background-size:cover;}#pu23079-15{z-index:517;width:0.01px;padding-bottom:0px;margin-right:-10000px;margin-left:250px;}#u23079-15{z-index:517;display:block;vertical-align:top;position:relative;}#u23110{z-index:536;width:550px;vertical-align:top;margin-top:20px;position:relative;}#u23110_states{float:left;width:550px;height:24px;background:transparent url("../images/u23110_states.png?crc=3959864653") no-repeat 0px 0px;}#u23110:hover #u23110_states{background:transparent url("../images/u23110_states-r.png?crc=4160809584") no-repeat 0px 0px;}#u23112{z-index:539;width:550px;vertical-align:top;margin-top:10px;position:relative;}#u23112_states{float:left;width:550px;height:24px;background:transparent url("../images/u23112_states.png?crc=45415286") no-repeat 0px 0px;}#u23112:hover #u23112_states{background:transparent url("../images/u23112_states-r.png?crc=4059458710") no-repeat 0px 0px;}#u23114{z-index:542;width:550px;vertical-align:top;margin-top:10px;position:relative;}#u23114_states{float:left;width:550px;height:24px;background:transparent url("../images/u23114_states.png?crc=3975199040") no-repeat 0px 0px;}#u23114:hover #u23114_states{background:transparent url("../images/u23114_states-r.png?crc=519324869") no-repeat 0px 0px;}#u23078{z-index:534;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u23028{z-index:8;width:801px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:1px;margin-left:1px;margin-top:148px;position:relative;}#u22397{z-index:9;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;position:relative;}#u22315{z-index:29;width:800px;height:1px;background-color:#7F7F7F;margin-top:25px;position:relative;}#pu22312{z-index:28;width:0.01px;margin-top:20px;}#u22312{z-index:28;width:240px;height:332px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/lukas-blazek-263121.jpg?crc=391477262") no-repeat left top;background-size:cover;}#u22309-18{z-index:10;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22318{z-index:30;width:800px;height:1px;background-color:#7F7F7F;margin-top:17px;position:relative;}#u22391{z-index:32;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:50px;position:relative;}#u22332{z-index:59;width:800px;height:1px;background-color:#7F7F7F;margin-top:25px;position:relative;}#pu22331{z-index:58;width:0.01px;margin-top:20px;}#u22331{z-index:58;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/kate-trysh-485779-unsplash.jpg?crc=4184394550") no-repeat center bottom;background-size:cover;}#u22330-25{z-index:33;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22333{z-index:60;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22394{z-index:62;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:50px;position:relative;}#u22369{z-index:86;width:800px;height:1px;background-color:#7F7F7F;margin-top:25px;position:relative;}#pu22368{z-index:85;width:0.01px;margin-top:19px;}#u22368{z-index:85;width:240px;height:343px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/envelope-2679338_1920.jpg?crc=274679875") no-repeat center center;background-size:cover;}#u22367-22{z-index:63;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22370{z-index:87;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22441{z-index:89;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:49px;position:relative;}#u22400{z-index:90;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:25px;position:relative;}#u22401{z-index:110;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22405{z-index:109;width:0.01px;margin-top:19px;}#u22405{z-index:109;width:240px;height:343px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/sticker-u19801-fr.jpg?crc=509278434") no-repeat center center;background-size:cover;}#u22403-18{z-index:91;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22404{z-index:111;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#bloecke{margin-top:50px;position:relative;}#u22444{z-index:113;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:25px;position:relative;}#u22448{z-index:141;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22447{z-index:140;width:0.01px;margin-top:20px;}#u22447{z-index:140;width:240px;height:417px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180426_122325_korr.jpg?crc=3910031820") no-repeat center center;background-size:cover;}#u22449-26{z-index:114;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22445{z-index:142;width:800px;height:1px;background-color:#7F7F7F;margin-top:33px;position:relative;}#u22517{z-index:144;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:54px;position:relative;}#u22475{z-index:145;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:25px;position:relative;}#u22476{z-index:171;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22480{z-index:170;width:0.01px;margin-top:19px;}#u22480{z-index:170;width:240px;height:343px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180423_141258_korr-u19926-fr.jpg?crc=4262253073") no-repeat center center;background-size:cover;}#u22478-24{z-index:146;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22479{z-index:172;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22547{z-index:174;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:55px;position:relative;}#u22520{z-index:175;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:24px;position:relative;}#u22522{z-index:176;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22524{z-index:200;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22526{z-index:199;width:0.01px;margin-top:19px;}#u22526{z-index:199;width:240px;height:343px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/ron-dyar-521350-unsplash.jpg?crc=5776618") no-repeat center center;background-size:cover;}#u22525-22{z-index:177;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22527{z-index:201;width:800px;height:1px;background-color:#7F7F7F;margin-top:23px;position:relative;}#u22581{z-index:203;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:57px;position:relative;}#u22554{z-index:226;width:800px;height:1px;background-color:#7F7F7F;margin-top:24px;position:relative;}#pu22556{z-index:225;width:0.01px;margin-top:20px;}#u22556{z-index:225;width:240px;height:411px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/sunyu-460812-unsplash.jpg?crc=4211209260") no-repeat center center;background-size:cover;}#u22553-21{z-index:204;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22555{z-index:227;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22630{z-index:229;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:53px;position:relative;}#u22588{z-index:230;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:21px;position:relative;}#u22593{z-index:258;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22591{z-index:257;width:0.01px;margin-top:20px;}#u22591{z-index:257;width:240px;height:411px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/formular.jpg?crc=3799210080") no-repeat center center;background-size:cover;}#u22594-26{z-index:231;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22592{z-index:259;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22732{z-index:261;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:52px;position:relative;}#u22637{z-index:297;width:800px;height:1px;background-color:#7F7F7F;margin-top:24px;position:relative;}#pu22639{z-index:296;width:0.01px;margin-top:20px;}#u22639{z-index:296;width:240px;height:426px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/durchschreibesatz.jpg?crc=3865706769") no-repeat center center;background-size:cover;}#u22641-34{z-index:262;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22640{z-index:298;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22729{z-index:300;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:51px;position:relative;}#u22676{z-index:301;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:23px;position:relative;}#u22677{z-index:302;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22678{z-index:327;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22681{z-index:326;width:0.01px;margin-top:20px;}#u22681{z-index:326;width:240px;height:411px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180423_142230_korr.jpg?crc=252284332") no-repeat center center;background-size:cover;}#u22679-23{z-index:303;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22680{z-index:328;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22743{z-index:330;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:52px;position:relative;}#u22708{z-index:331;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:25px;position:relative;}#u22712{z-index:353;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22711{z-index:352;width:0.01px;margin-top:20px;}#u22711{z-index:352;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180423_143014_korr.jpg?crc=435457347") no-repeat center center;background-size:cover;}#u22713-20{z-index:332;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22709{z-index:354;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22773{z-index:356;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:53px;position:relative;}#u22746{z-index:357;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:24px;position:relative;}#u22747{z-index:358;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22751{z-index:380;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22748{z-index:379;width:0.01px;margin-top:20px;}#u22748{z-index:379;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/postcard-1091283_1920.jpg?crc=317493847") no-repeat center center;background-size:cover;}#u22749-20{z-index:359;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22752{z-index:381;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22833{z-index:383;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:51px;position:relative;}#u22776{z-index:384;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:24px;position:relative;}#u22778{z-index:385;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22779{z-index:386;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22783{z-index:406;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22780{z-index:405;width:0.01px;margin-top:20px;}#u22780{z-index:405;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/mappen2.jpg?crc=303436636") no-repeat center top;background-size:cover;}#u22781-18{z-index:387;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22782{z-index:407;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22899{z-index:409;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:52px;position:relative;}#satz,#offsetdruck,#digitaldruck,#weiterverarbeitung,#druckdaten,#farben,#produkte,#briefpapier,#visitenkarten,#kuverts,#etiketten,#faltbltter,#flyer,#broschren,#formulare,#selbstdurchschreibend,#plakate,#register,#postkarten,#prsentationsmappen,#ringbindungen{position:relative;}#u22836{z-index:410;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:30px;position:relative;}#u22837{z-index:411;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22838{z-index:412;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22839{z-index:413;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22841{z-index:432;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22842{z-index:431;width:0.01px;margin-top:20px;}#u22842{z-index:431;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180423_141437_korr.jpg?crc=349457946") no-repeat center center;background-size:cover;}#u22840-17{z-index:414;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22843{z-index:433;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#handouts{margin-top:55px;position:relative;}#u22902{z-index:435;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:26px;position:relative;}#u22903{z-index:436;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22904{z-index:437;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22905{z-index:438;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22906{z-index:439;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22908{z-index:460;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22907{z-index:459;width:0.01px;margin-top:20px;}#u22907{z-index:459;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/rainier-ridao-569546-unsplash.jpg?crc=4280425416") no-repeat center center;background-size:cover;}#u22909-19{z-index:440;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22910{z-index:461;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22957-6{z-index:463;display:block;vertical-align:top;margin-top:53px;position:relative;}#pu22958-5{z-index:469;width:0.01px;margin-left:21px;margin-top:44px;}#u22958-5{z-index:469;margin-bottom:-11px;position:relative;margin-right:-10000px;width:371px;margin-top:-1px;left:-1px;}#u22959-5{z-index:474;margin-bottom:-11px;position:relative;margin-right:-10000px;width:371px;margin-top:-1px;left:398px;}#datenschutz{margin-left:1px;margin-top:186px;position:relative;}#u24108-126{z-index:983;display:block;vertical-align:top;margin-top:34px;position:relative;}#agbs{margin-left:1px;margin-top:108px;position:relative;}#u24053{z-index:909;width:800px;height:1px;background-color:#7F7F7F;margin-left:1px;margin-top:23px;position:relative;}#u24052-169{z-index:740;display:block;vertical-align:top;margin-top:21px;position:relative;}#pamphletu23295{z-index:546;width:0.01px;height:55px;padding-bottom:411px;position:fixed;top:16px;right:240px;}#u23302{position:absolute;width:219px;height:466px;}#u23302popup{z-index:547;}#u23303{z-index:548;width:204px;height:457.6px;box-shadow:0px 0px 8px rgba(255,255,255,0.5),0px 0px 8px rgba(255,255,255,0.5)/* glow */, +6px 6px 8px rgba(0,0,0,0.5)/* drop shadow*/;border-width:0px;border-color:transparent;background-color:#FFFFFF;border-radius:5px;position:relative;margin-right:-10000px;padding:1px 7px 7.399999999999977px 8px;}#u23307-4{z-index:549;position:relative;}#u23306-4{z-index:553;margin-top:1px;position:relative;}#u23628-4{z-index:589;margin-top:2px;position:relative;}#u23309-4{z-index:557;position:relative;}#u23430-4{z-index:569;margin-top:1px;position:relative;}#u23310-4{z-index:561;margin-top:2px;position:relative;}#u23631-4{z-index:577;margin-top:2px;position:relative;}#u23634-4{z-index:581;margin-top:2px;position:relative;}#u23637-4{z-index:585;position:relative;}#u23433-4{z-index:573;position:relative;}#u24528-4{z-index:597;position:relative;}#u23305-4{z-index:565;display:block;vertical-align:top;margin-top:1px;position:relative;}#u24043-4{z-index:593;top:-1px;position:relative;}#u24043-4_img{display:block;vertical-align:top;margin-bottom:-1px;}#u23311{z-index:601;width:50px;height:0px;padding-bottom:50px;position:relative;margin-right:-10000px;margin-top:5px;left:169px;}#u23312{width:50px;height:35px;border-width:0px;border-color:transparent;background-color:#000000;padding-bottom:15px;position:fixed;top:21px;right:21px;}#u23312:hover{border-width:0px;border-color:transparent;background-color:#008089;width:50px;height:35px;min-height:0px;margin:0px;}#u23312.PamphletThumbSelected{background-color:#000000;border-radius:0px;width:50px;height:35px;min-height:0px;margin:0px;}#u23313{z-index:603;width:30px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:14px;left:9px;}#u23316{z-index:604;width:30px;height:3px;background-color:#FFFFFF;position:relative;}#u23314{z-index:605;width:30px;height:3px;background-color:#FFFFFF;margin-top:6px;position:relative;}#u23315{z-index:606;width:30px;height:3px;background-color:#FFFFFF;margin-top:6px;position:relative;}.PamphletWidget .ThumbGroup .Thumb,.PamphletNextButton,.PamphletPrevButton,.PamphletCloseButton{cursor:pointer;}.css_verticalspacer .verticalspacer{height:calc(100vh - 24704px);}#pimpressum{z-index:1144;width:0.01px;padding-bottom:0px;margin-bottom:-94px;margin-right:-10000px;margin-top:-2103px;}#impressum{margin-left:200px;position:relative;}#u24093-71{z-index:911;display:block;vertical-align:top;margin-left:199px;margin-top:25px;position:relative;}#u24607-4{z-index:1145;margin-left:538px;margin-top:50px;position:relative;}#u24099{z-index:982;width:1200px;background-color:#008089;padding-bottom:128px;margin-top:50px;position:relative;}#u24466{z-index:1109;width:761px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:91px;left:225px;}#u24467-17{z-index:1127;display:block;vertical-align:top;position:relative;margin-right:-10000px;}#u24468{z-index:1110;width:176px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;left:585px;}#u24472-4{z-index:1123;display:block;vertical-align:top;position:relative;}#u24470-4{z-index:1111;margin-top:11px;position:relative;}#u24469-4{z-index:1115;margin-top:12px;position:relative;}#u24471-4{z-index:1119;margin-top:11px;position:relative;}#u23746-5_img,#u22958-5_img,#u22959-5_img,#u23307-4_img,#u23306-4_img,#u23628-4_img,#u23309-4_img,#u23430-4_img,#u23310-4_img,#u23631-4_img,#u23634-4_img,#u23637-4_img,#u23433-4_img,#u24528-4_img,#u24607-4_img,#u24470-4_img,#u24469-4_img,#u24471-4_img{display:block;vertical-align:top;}#muse_css_mq,.html{background-color:#FFFFFF;}body{position:relative;min-width:1200px;padding-bottom:1px;}.verticalspacer{min-height:2286px;} \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/css/nomq_index.css b/java/wellmann-shop/src/main/webapp/resources/css/nomq_index.css new file mode 100644 index 0000000..e187fa9 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/css/nomq_index.css @@ -0,0 +1 @@ +#muse_css_mq{background-color:#FFFFFF;}#bp_infinity.active{display:block;}#page{min-height:4902px;max-width:1200px;}#pu19797-4{z-index:158;margin-top:-6px;width:84.09%;}#u19797-4{z-index:158;position:relative;width:97px;left:0%;margin:145px -10000px -4px 7.135777987966923%;}#u19710-4{z-index:170;position:relative;width:147px;left:12.79%;margin:145px -10000px -4px 7.135777987966923%;}#u20070-4{z-index:174;position:relative;width:85px;left:30.33%;margin:145px -10000px -5px 7.135777987966923%;}#u20068{z-index:182;margin-right:-10000px;margin-left:59.47%;}#u20098-4{z-index:162;position:relative;width:86px;left:65.81%;margin:145px -10000px -4px 7.135777987966923%;}#u19969-4{z-index:166;position:relative;width:85px;left:77.31%;margin:145px -10000px -4px 7.135777987966923%;}#u20099-4{z-index:178;position:relative;width:117px;left:88.9%;margin:145px -10000px -5px 7.135777987966923%;}#u19797-4_img,#u19710-4_img,#u20070-4_img,#u20098-4_img,#u19969-4_img,#u20099-4_img{display:block;vertical-align:top;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:1200px;height:600px;}#u19640popup{width:96.67%;left:1.67%;}#u19643-6,#u19642-4,#u19641-8{width:100.52%;}#u20095{margin-top:461px;left:48.51%;}#produkte{margin-top:32px;left:0%;margin-left:0%;}#u20018-6{width:65%;margin-left:17.5%;left:7px;}#pu19896{z-index:184;margin-top:38px;width:100%;left:0%;margin-left:0%;}#u19896{z-index:184;}#u19914{z-index:185;}#buttonu19915{z-index:186;}#start,#buttonu19915:hover{margin-left:0%;}#pu19917,#u19917{z-index:187;}#u19918{z-index:193;}#u19918_states{background-image:url("../images/u19918_states.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r.png?crc=162795771");}#u19916-4{z-index:188;}#u20332{z-index:196;}#u20332_states{background-image:url("../images/u20332_states.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r.png?crc=450819133");}#u20071{z-index:217;margin-right:-10000px;left:25.84%;}#u20072{z-index:218;}#buttonu20073{z-index:219;height:328.8937500000012px;padding-bottom:8.106249999998795px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:0%;}#pu20075,#u20075{z-index:220;}#u20076{z-index:226;}#u20076_states{background-image:url("../images/u20076_states.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r.png?crc=4066690632");}#u20074-4{z-index:221;}#u20353{z-index:229;}#u20353_states{background-image:url("../images/u20353_states.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r.png?crc=450819133");}#u20044{z-index:203;margin-right:-10000px;left:51.67%;}#u20045{z-index:204;}#buttonu20046{z-index:205;height:329.9937500000011px;padding-bottom:7.006249999998886px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:0%;}#pu20047,#u20047{z-index:206;}#u20049{z-index:212;}#u20049_states{background-image:url("../images/u20049_states.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r.png?crc=4066690632");}#u20048-4{z-index:207;}#u20370{z-index:215;}#u20370_states{background-image:url("../images/u20370_states.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r.png?crc=450819133");}#u19798{z-index:231;margin-right:-10000px;left:77.5%;}#u19799{z-index:232;}#buttonu19800{z-index:233;height:329.9937500000011px;padding-bottom:7.006249999998886px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:0%;}#pu19801,#u19801{z-index:234;}#u19803{z-index:240;}#u19803_states{background-image:url("../images/u19803_states.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r.png?crc=4066690632");}#u19802-4{z-index:235;}#u20379{z-index:243;}#u20379_states{background-image:url("../images/u20379_states.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r.png?crc=450819133");}#pu19611{z-index:245;margin-top:85px;width:100%;left:0%;margin-left:0%;}#u19611{z-index:245;margin-right:-10000px;margin-top:1px;}#u19630{z-index:246;}#buttonu19631{z-index:247;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:0%;}#pu19632,#u19632{z-index:248;}#u19634{z-index:254;}#u19634_states{background-image:url("../images/u19634_states.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r.png?crc=4066690632");}#u19633-4{z-index:249;}#u20404{z-index:257;}#u20404_states{background-image:url("../images/u20404_states.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r.png?crc=450819133");background-size:100%;}#u19921{z-index:259;margin-right:-10000px;left:25.84%;}#u19922{z-index:260;}#buttonu19923{z-index:261;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:0%;}#pu19926,#u19926{z-index:262;}#u19924{z-index:268;}#u19924_states{background-image:url("../images/u19924_states.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r.png?crc=4066690632");}#u19925-4{z-index:263;}#u20413{z-index:271;}#u20413_states{background-image:url("../images/u20413_states.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r.png?crc=450819133");}#u19945{z-index:273;margin-right:-10000px;margin-top:1px;left:51.67%;}#u19946{z-index:274;}#buttonu19947{z-index:275;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:0%;}#pu19949,#u19949{z-index:276;}#u19948{z-index:282;}#u19948_states{background-image:url("../images/u19948_states.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r.png?crc=4066690632");}#u19950-4{z-index:277;}#u20422{z-index:285;}#u20422_states{background-image:url("../images/u20422_states.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r.png?crc=450819133");background-size:100%;}#u19661{z-index:287;margin-right:-10000px;margin-top:1px;left:77.5%;}#u19662{z-index:288;}#buttonu19663{z-index:289;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:0%;}#pu19664,#u19664{z-index:290;}#u19666{z-index:296;}#u19666_states{background-image:url("../images/u19666_states.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r.png?crc=4066690632");}#u19665-4{z-index:291;}#u20431{z-index:299;}#u20431_states{background-image:url("../images/u20431_states.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r.png?crc=450819133");}#pu20100{z-index:301;margin-top:87px;width:100%;left:0%;margin-left:0%;}#u20100{z-index:301;margin-right:-10000px;}#u20119{z-index:302;}#buttonu20120{z-index:303;height:327.8968749999999px;padding-bottom:9.103125000000091px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:0%;}#pu20123,#u20123{z-index:304;}#u20121{z-index:310;}#u20121_states{background-image:url("../images/u20121_states.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r.png?crc=4066690632");}#u20122-4{z-index:305;}#u20464{z-index:313;}#u20464_states{background-image:url("../images/u20464_states.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r.png?crc=450819133");}#u19822{z-index:315;margin-right:-10000px;left:25.84%;}#u19841{z-index:316;}#buttonu19842{z-index:317;height:327.79062500000236px;padding-top:13px;padding-bottom:9.209374999997635px;}#buttonu19842:hover{height:328px;margin-left:0%;}#buttonu19842.ButtonSelected{height:328px;margin-left:0%;}#pu19843,#u19843{z-index:318;}#u19845{z-index:324;}#u19845_states{background-image:url("../images/u19845_states.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r.png?crc=4066690632");}#u19844-4{z-index:319;}#u20473{z-index:327;margin-top:2px;margin-left:57.41%;}#u20473_states{background-image:url("../images/u20473_states.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r.png?crc=450819133");}#u19712{z-index:329;margin-right:-10000px;left:51.67%;}#u19713{z-index:330;}#buttonu19714{z-index:331;height:328.8906250000023px;padding-bottom:8.109374999997726px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:0%;}#pu19716,#u19716{z-index:332;}#u19717{z-index:338;}#u19717_states{background-image:url("../images/u19717_states.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r.png?crc=4066690632");}#u19715-4{z-index:333;}#u20482{z-index:341;}#u20482_states{background-image:url("../images/u20482_states.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r.png?crc=450819133");}#u19685{z-index:343;margin-right:-10000px;left:77.5%;}#u19686{z-index:344;}#buttonu19687{z-index:345;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:0%;}#pu19689,#u19689{z-index:346;}#u19688{z-index:352;}#u19688_states{background-image:url("../images/u19688_states.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r.png?crc=4066690632");}#u19690-4{z-index:347;}#u20491{z-index:355;}#u20491_states{background-image:url("../images/u20491_states.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r.png?crc=450819133");}#pu19970{z-index:357;margin-top:86px;width:100%;left:0%;margin-left:0%;}#u19970{z-index:357;margin-right:-10000px;}#u19971{z-index:358;}#buttonu19972{z-index:359;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:0%;}#pu19975,#u19975{z-index:360;}#u19974{z-index:366;}#u19974_states{background-image:url("../images/u19974_states.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r.png?crc=4066690632");}#u19973-4{z-index:361;}#u20540{z-index:369;}#u20540_states{background-image:url("../images/u20540_states.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r.png?crc=450819133");}#u20020{z-index:371;margin-right:-10000px;left:25.84%;}#u20039{z-index:372;}#buttonu20040{z-index:373;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:0%;}#pu20043,#u20043{z-index:374;}#u20041{z-index:380;}#u20041_states{background-image:url("../images/u20041_states.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r.png?crc=4066690632");}#u20042-4{z-index:375;}#u20549{z-index:383;}#u20549_states{background-image:url("../images/u20549_states.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r.png?crc=450819133");}#u19846{z-index:385;margin-right:-10000px;left:51.67%;}#u19865{z-index:386;}#buttonu19866{z-index:387;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:0%;}#pu19867,#u19867{z-index:388;}#u19869{z-index:394;}#u19869_states{background-image:url("../images/u19869_states.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r.png?crc=4066690632");}#u19868-4{z-index:389;}#u20558{z-index:397;}#u20558_states{background-image:url("../images/u20558_states.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r.png?crc=450819133");}#u19994{z-index:399;margin-right:-10000px;left:77.5%;}#u19995{z-index:400;}#buttonu19996{z-index:401;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:0%;}#buttonu19996.ButtonSelected{margin-left:0%;}#pu19999,#u19999{z-index:402;}#u19998{z-index:408;}#u19998_states{background-image:url("../images/u19998_states.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r.png?crc=4066690632");}#u19997-4{z-index:403;}#u20567{z-index:411;}#u20567_states{background-image:url("../images/u20567_states.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r.png?crc=450819133");}#u21531-8{z-index:442;display:block;vertical-align:top;margin-top:60px;position:relative;width:96.67%;left:0%;margin-left:1.67%;}#pu21563-5{z-index:450;margin-top:11px;width:63.17%;left:0%;margin-left:20.09%;}#u21563-5{z-index:450;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:48.95%;left:-0.14%;}#u21569-5{z-index:455;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:48.95%;left:52.51%;}#u21563-5_img,#u21569-5_img{display:block;vertical-align:top;width:100%;}#kontakt{margin-top:114px;margin-left:0%;}#pu20125-24{z-index:413;margin-top:21px;width:98.34%;}#u20125-24{z-index:413;display:block;vertical-align:top;position:relative;width:39.07%;left:61.62%;margin:-8px -10000px -8px 0%;}#u19609{z-index:437;background-image:url("../images/fotolia_56863820_m.jpg?crc=143243195");width:62.29%;margin-left:0px;}#u19609 .fluid_height_spacer{padding-bottom:69.38775510204081%;}#u21525-4{z-index:438;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:377px;left:37.38%;margin-left:0%;}#u19919-5{z-index:198;margin-top:34px;width:100%;left:0%;margin-left:0%;}#widgetu19758{padding-bottom:0px;margin-top:35px;width:96.75%;margin-left:1.63%;left:1px;}#widgetu19783{width:47.81%;left:-0.09%;}#u19785-4{width:91.2%;}#u19786-4{min-height:20px;width:38.15%;left:61.86%;}#u19784-4{width:99.64%;}#widgetu19783:hover #u19784-4{width:99.64%;}#widgetu19783.focus-st #u19784-4{width:99.64%;}#widgetu19770{width:47.81%;left:52.29%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:91.2%;}#u19772-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.64%;}#widgetu19770:hover #u19773-4{width:99.64%;}#widgetu19770.focus-st #u19773-4{width:99.64%;}#widgetu19779{width:50.56%;left:-0.09%;}#pu19781-4{width:99.83%;margin-left:0.18%;}#u19781-4{width:68.95%;}#u19780-4{min-height:20px;width:28.84%;left:71.17%;}#u19782-4{width:94.21%;}#widgetu19779:hover #u19782-4{width:94.21%;}#widgetu19779.focus-st #u19782-4{width:94.21%;}#widgetu19765{width:47.81%;left:52.29%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:91.2%;}#u19767-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19770.fld-err-st #u19773-4,#u19768-4{width:99.64%;}#widgetu19765:hover #u19768-4{width:99.64%;}#widgetu19765.focus-st #u19768-4{width:99.64%;}#pstart,#pslideshowu19635,#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:100%;}#widgetu19787{width:50.56%;left:-0.09%;}#widgetu19779.fld-err-st,#widgetu19787.fld-err-st{width:50.56%;}#pu19788-4{width:99.66%;margin-left:0.35%;}#u19788-4{width:69.06%;}#widgetu19787.fld-err-st #u19788-4{width:69.06%;}#u19790-4{min-height:20px;width:28.89%;left:71.12%;}#widgetu19787.fld-err-st #u19790-4{min-height:20px;width:28.89%;}#widgetu19779.fld-err-st #u19782-4,#u19789-4{width:94.21%;}#widgetu19787:hover #u19789-4{width:94.21%;}#widgetu19787.focus-st #u19789-4{width:94.21%;}#widgetu19787.fld-err-st #u19789-4{width:94.21%;}#widgetu19775{width:47.81%;left:52.29%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19765.fld-err-st,#widgetu19775.fld-err-st{width:47.81%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:79.82%;margin-left:0.19%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:91.2%;}#widgetu19775.fld-err-st #u19776-4{width:91.2%;}#u19778-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:20px;width:38.15%;}#widgetu19765.fld-err-st #u19768-4,#u19777-4{width:99.64%;}#widgetu19775:hover #u19777-4{width:99.64%;}#widgetu19775.focus-st #u19777-4{width:99.64%;}#widgetu19775.fld-err-st #u19777-4{width:99.64%;}#widgetu19760{width:100.09%;left:-0.09%;}#widgetu19760.fld-err-st{width:100.09%;}#pu19761-4{width:50.44%;margin-left:0.09%;}#widgetu19779.fld-err-st #u19781-4,#u19761-4{width:68.95%;}#widgetu19760.fld-err-st #u19761-4{width:68.95%;}#u19763-4{min-height:20px;width:28.84%;left:71.17%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19760.fld-err-st #u19763-4{min-height:20px;width:28.84%;}#u19762-4{width:99.83%;}#widgetu19760:hover #u19762-4{width:99.83%;}#widgetu19760.focus-st #u19762-4{width:99.83%;}#widgetu19760.fld-err-st #u19762-4{width:99.83%;}#pu19759-4{margin-top:61px;width:38.16%;margin-left:42.99%;}#u19759-4{min-height:26px;width:55.54%;left:44.47%;}#u19769-4{min-height:26px;width:55.54%;left:44.47%;}#widgetu19758.frm-sub-st #u19759-4,#widgetu19758.frm-subm-err-st #u19769-4{min-height:30px;}#u19764-4{width:55.54%;left:44.47%;}#u19774-4{margin-bottom:-1px;width:38.15%;left:-0.23%;}#u19774-4:hover{margin-bottom:-1px;width:38.15%;}#u19774-4:active{margin-bottom:-1px;width:38.15%;}#anfahrt{margin-top:116px;margin-left:0%;}#u21795-6{z-index:460;display:block;vertical-align:top;position:relative;margin-left:50%;left:-341px;}#u19610{height:600px;}#u19610-bw{margin-top:2px;height:600px;}#pamphletu19736{z-index:466;right:20px;width:4.17%;max-width:50px;}#u19747{width:159px;height:0px;padding-bottom:238px;position:relative;}#u19747popup{z-index:467;}#u19748{z-index:468;width:159px;position:fixed;top:20px;right:71px;}#u19749{z-index:469;left:5.04%;}#u19750-4{z-index:470;}#u19753-4{z-index:474;}#u19755-4{z-index:478;}#u19754-4{z-index:482;}#u19751-4{z-index:486;}#u19752-4{z-index:490;}#u19747-wrapper{position:fixed;top:20px;right:230px;width:159px;}#u19739{z-index:494;padding-bottom:50px;width:100%;}#u19740{position:fixed;top:20px;right:20px;}#u19740:hover{margin-left:0px;}#u19740.PamphletThumbSelected{margin-left:0px;}#u19741{z-index:496;}#u19743{z-index:497;}#u19744{z-index:498;}#u19742{z-index:499;}.css_verticalspacer .verticalspacer{height:calc(100vh - 5202px);}#u19711{min-height:282px;padding-bottom:86px;}#u19711_align_to_page{max-width:1200px;}#u24221{z-index:500;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:48px;width:63.42%;margin-left:18.3%;left:1px;}#u24191-17{z-index:518;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:55.59%;margin-left:22.21%;left:-169px;}#u24197{z-index:501;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;width:23.13%;margin-left:38.44%;left:293px;}#u24167-4{z-index:514;display:block;vertical-align:top;position:relative;width:99.44%;margin-left:0.29%;left:-1px;}#u24141-4{z-index:502;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24142-4{z-index:506;margin-top:12px;position:relative;width:100%;margin-left:0%;left:0px;}#u24143-4{z-index:510;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24141-4_img,#u24142-4_img,#u24143-4_img{display:block;vertical-align:top;width:99.44%;}#u19711-bw{min-height:282px;margin-bottom:-300px;margin-top:-6px;}body{padding-bottom:300px;} \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/css/site_global.css b/java/wellmann-shop/src/main/webapp/resources/css/site_global.css new file mode 100644 index 0000000..e7211dc --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/css/site_global.css @@ -0,0 +1,157 @@ + html{ + min-height:100%; + min-width:100%; + -ms-text-size-adjust:none; + } +body,div,dl,dt,dd,ul,ol,li,nav,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,a{ + margin:0px; + padding:0px; + border-width:0px; + border-style:solid; + border-color:transparent; + -webkit-transform-origin:left top; + -ms-transform-origin:left top;-o-transform-origin:left top; + transform-origin:left top; + background-repeat:no-repeat; + } +button.submit-btn{ + -moz-box-sizing:content-box; + -webkit-box-sizing:content-box; + box-sizing:content-box; + } + .transition{ + -webkit-transition-property:background-image,background-position,background-color,border-color,border-radius,color,font-size,font-style,font-weight,letter-spacing,line-height,text-align,box-shadow,text-shadow,opacity; + transition-property:background-image,background-position,background-color,border-color,border-radius,color,font-size,font-style,font-weight,letter-spacing,line-height,text-align,box-shadow,text-shadow,opacity; + } + .transition *{ + -webkit-transition:inherit; + transition:inherit; + } + +table{ + border-collapse:collapse; + border-spacing:0px; + } + +fieldset,img{ + border:0px; + border-style:solid; + -webkit-transform-origin:left top; + -ms-transform-origin:left top; + -o-transform-origin:left top; + transform-origin:left top; + } + +address,caption,cite,code,dfn,em,strong,th,var,optgroup{ + font-style:inherit; + font-weight:inherit; + } + +del,ins{ + text-decoration:none; + } + +li{ + list-style:none; + } + +caption,th{ + text-align:left; + } + +h1,h2,h3,h4,h5,h6{ + font-size:100%; + font-weight:inherit; + } + +input,button,textarea,select,optgroup,option{ + font-family:inherit; + font-size:inherit; + font-style:inherit; + font-weight:inherit; + } + .form-grp input,.form-grp textarea{ + -webkit-appearance:none; + -webkit-border-radius:0; + } + +body{ + font-family:Arial, Helvetica Neue, Helvetica, sans-serif; + text-align:left; + font-size:14px; + line-height:17px; + word-wrap:break-word;text-rendering:optimizeLegibility; + -moz-font-feature-settings:'liga'; + -ms-font-feature-settings:'liga'; + -webkit-font-feature-settings:'liga'; + font-feature-settings:'liga'; + } + +a:link{ + color:#0000FF; + text-decoration:underline; + } + +a:visited{ + color:#800080; + text-decoration:underline; + } + +a:hover{ + color:#0000FF; + text-decoration:underline; + } + +a:active{ + color:#EE0000; + text-decoration:underline; + } + +a.nontext{ + color:black; + text-decoration:none; + font-style:normal; + font-weight:normal; + } + .normal_text{ + color:#000000; + direction:ltr; + font-family:Arial, Helvetica Neue, Helvetica, sans-serif; + font-size:14px; + font-style:normal; + font-weight:normal; + letter-spacing:0px; + line-height:17px; + text-align:left; + text-decoration:none; + text-indent:0px; + text-transform:none; + vertical-align:0px; + padding:0px; + } + .list0 li:before{ + position:absolute; + right:100%; + letter-spacing:0px; + text-decoration:none; + font-weight:normal; + font-style:normal; + } + .rtl-list li:before{ + right:auto; + left:100%; + } + .nls-None > li:before,.nls-None .list3 > li:before,.nls-None .list6 > li:before{ + margin-right:6px; + content:'•'; + } + .nls-None .list1 > li:before,.nls-None .list4 > li:before,.nls-None .list7 > li:before{ + margin-right:6px; + content:'○'; + } + .nls-None,.nls-None .list1,.nls-None .list2,.nls-None .list3,.nls-None .list4,.nls-None .list5,.nls-None .list6,.nls-None .list7,.nls-None .list8{ + padding-left:34px; + }.nls-None.rtl-list,.nls-None .list1.rtl-list,.nls-None .list2.rtl-list,.nls-None .list3.rtl-list,.nls-None .list4.rtl-list,.nls-None .list5.rtl-list,.nls-None .list6.rtl-list,.nls-None .list7.rtl-list,.nls-None .list8.rtl-list{ + padding-left:0px; + padding-right:34px; + }.nls-None .list2 > li:before,.nls-None .list5 > li:before,.nls-None .list8 > li:before{margin-right:6px;content:'-';}.nls-None.rtl-list > li:before,.nls-None .list1.rtl-list > li:before,.nls-None .list2.rtl-list > li:before,.nls-None .list3.rtl-list > li:before,.nls-None .list4.rtl-list > li:before,.nls-None .list5.rtl-list > li:before,.nls-None .list6.rtl-list > li:before,.nls-None .list7.rtl-list > li:before,.nls-None .list8.rtl-list > li:before{margin-right:0px;margin-left:6px;}.TabbedPanelsTab{white-space:nowrap;}.MenuBar .MenuBarView,.MenuBar .SubMenuView{display:block;list-style:none;}.MenuBar .SubMenu{display:none;position:absolute;}.NoWrap{white-space:nowrap;word-wrap:normal;}.rootelem{margin-left:auto;margin-right:auto;}.colelem{display:inline;float:left;clear:both;}.clearfix:after{content:"\0020";visibility:hidden;display:block;height:0px;clear:both;}*:first-child+html .clearfix{zoom:1;}.clip_frame{overflow:hidden;}.popup_anchor{position:relative;width:0px;height:0px;}.allow_click_through *{pointer-events:auto;}.popup_element{z-index:100000;}.svg{display:block;vertical-align:top;}span.wrap{content:'';clear:left;display:block;}span.actAsInlineDiv{display:inline-block;}.position_content,.excludeFromNormalFlow{float:left;}.preload_images{position:absolute;overflow:hidden;left:-9999px;top:-9999px;height:1px;width:1px;}.preload{height:1px;width:1px;}.animateStates{-webkit-transition:0.3s ease-in-out;-moz-transition:0.3s ease-in-out;-o-transition:0.3s ease-in-out;transition:0.3s ease-in-out;}[data-whatinput="mouse"] *:focus,[data-whatinput="touch"] *:focus,input:focus,textarea:focus{outline:none;}textarea{resize:none;overflow:auto;}.allow_click_through,.fld-prompt{pointer-events:none;}.wrapped-input{position:absolute;top:0px;left:0px;background:transparent;border:none;}.submit-btn{z-index:50000;cursor:pointer;}.anchor_item{width:22px;height:18px;}.MenuBar .SubMenuVisible,.MenuBarVertical .SubMenuVisible,.MenuBar .SubMenu .SubMenuVisible,.popup_element.Active,span.actAsPara,.actAsDiv,a.nonblock.nontext,img.block{display:block;}.widget_invisible,.js .invi,.js .mse_pre_init{visibility:hidden;}.ose_ei{visibility:hidden;z-index:0;}.no_vert_scroll{overflow-y:hidden;}.always_vert_scroll{overflow-y:scroll;}.always_horz_scroll{overflow-x:scroll;}.fullscreen{overflow:hidden;left:0px;top:0px;position:fixed;height:100%;width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}.fullwidth{position:absolute;}.borderbox{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}.scroll_wrapper{position:absolute;overflow:auto;left:0px;right:0px;top:0px;bottom:0px;padding-top:0px;padding-bottom:0px;margin-top:0px;margin-bottom:0px;}.browser_width > *{position:absolute;left:0px;right:0px;}.grpelem,.accordion_wrapper{display:inline;float:left;}.fld-checkbox input[type=checkbox],.fld-radiobutton input[type=radio]{position:absolute;overflow:hidden;clip:rect(0px, 0px, 0px, 0px);height:1px;width:1px;margin:-1px;padding:0px;border:0px;}.fld-checkbox input[type=checkbox] + label,.fld-radiobutton input[type=radio] + label{display:inline-block;background-repeat:no-repeat;cursor:pointer;float:left;width:100%;height:100%;}.pointer_cursor,.fld-recaptcha-mode,.fld-recaptcha-refresh,.fld-recaptcha-help{cursor:pointer;}p,h1,h2,h3,h4,h5,h6,ol,ul,span.actAsPara{max-height:1000000px;}.superscript{vertical-align:super;font-size:66%;line-height:0px;}.subscript{vertical-align:sub;font-size:66%;line-height:0px;}.horizontalSlideShow{-ms-touch-action:pan-y;touch-action:pan-y;}.verticalSlideShow{-ms-touch-action:pan-x;touch-action:pan-x;}.colelem100,.verticalspacer{clear:both;}.list0 li,.MenuBar .MenuItemContainer,.SlideShowContentPanel .fullscreen img,.css_verticalspacer .verticalspacer{position:relative;}.popup_element.Inactive,.js .disn,.js .an_invi,.hidden,.breakpoint{display:none;}#muse_css_mq{position:absolute;display:none;background-color:#FFFFFE;}.fluid_height_spacer{width:0.01px;}.muse_check_css{display:none;position:fixed;}@media screen and (-webkit-min-device-pixel-ratio:0){body{text-rendering:auto;}} \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180423_141258_korr-u19926-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180423_141258_korr-u19926-fr.jpg new file mode 100644 index 0000000..0ed9edb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180423_141258_korr-u19926-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180423_141437_korr-u19867-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180423_141437_korr-u19867-fr.jpg new file mode 100644 index 0000000..ee1789e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180423_141437_korr-u19867-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180423_141437_korr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180423_141437_korr.jpg new file mode 100644 index 0000000..1d8c1d6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180423_141437_korr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180423_142230_korr-u19716-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180423_142230_korr-u19716-fr.jpg new file mode 100644 index 0000000..f1f1073 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180423_142230_korr-u19716-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180423_142230_korr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180423_142230_korr.jpg new file mode 100644 index 0000000..017a3d2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180423_142230_korr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180423_143014_korr-u19689-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180423_143014_korr-u19689-fr.jpg new file mode 100644 index 0000000..97f321d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180423_143014_korr-u19689-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180423_143014_korr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180423_143014_korr.jpg new file mode 100644 index 0000000..a17ff82 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180423_143014_korr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180426_122325_korr-u19632-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180426_122325_korr-u19632-fr.jpg new file mode 100644 index 0000000..55132e4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180426_122325_korr-u19632-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180426_122325_korr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180426_122325_korr.jpg new file mode 100644 index 0000000..b21e6c7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180426_122325_korr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/20180426_140115.jpg b/java/wellmann-shop/src/main/webapp/resources/images/20180426_140115.jpg new file mode 100644 index 0000000..131fa6b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/20180426_140115.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/andrew-pons-6488-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/images/andrew-pons-6488-unsplash.jpg new file mode 100644 index 0000000..4226320 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/andrew-pons-6488-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/bank-phrom-352283-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/images/bank-phrom-352283-unsplash.jpg new file mode 100644 index 0000000..2781cbf Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/bank-phrom-352283-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/blank.gif b/java/wellmann-shop/src/main/webapp/resources/images/blank.gif new file mode 100644 index 0000000..35d42e8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/blank.gif differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/bremen-1592862_1920_2.jpg b/java/wellmann-shop/src/main/webapp/resources/images/bremen-1592862_1920_2.jpg new file mode 100644 index 0000000..dee2e54 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/bremen-1592862_1920_2.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/cedric-verstraete-481332.jpg b/java/wellmann-shop/src/main/webapp/resources/images/cedric-verstraete-481332.jpg new file mode 100644 index 0000000..9f226e2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/cedric-verstraete-481332.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/color-417694_1920-u23077-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/color-417694_1920-u23077-fr.jpg new file mode 100644 index 0000000..a79c5dc Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/color-417694_1920-u23077-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/color-417694_1920.jpg b/java/wellmann-shop/src/main/webapp/resources/images/color-417694_1920.jpg new file mode 100644 index 0000000..e418e83 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/color-417694_1920.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/durchschreibesatz-u19843-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/durchschreibesatz-u19843-fr.jpg new file mode 100644 index 0000000..badced4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/durchschreibesatz-u19843-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/durchschreibesatz.jpg b/java/wellmann-shop/src/main/webapp/resources/images/durchschreibesatz.jpg new file mode 100644 index 0000000..5f0f7e1 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/durchschreibesatz.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/envelope-2679338_1920-u20047-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/envelope-2679338_1920-u20047-fr.jpg new file mode 100644 index 0000000..99aa617 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/envelope-2679338_1920-u20047-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/envelope-2679338_1920.jpg b/java/wellmann-shop/src/main/webapp/resources/images/envelope-2679338_1920.jpg new file mode 100644 index 0000000..e0848ad Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/envelope-2679338_1920.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/formular.jpg b/java/wellmann-shop/src/main/webapp/resources/images/formular.jpg new file mode 100644 index 0000000..b290410 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/formular.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/fotolia_56863820_m-u19609-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/fotolia_56863820_m-u19609-fr.jpg new file mode 100644 index 0000000..015c2d6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/fotolia_56863820_m-u19609-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/fotolia_56863820_m.jpg b/java/wellmann-shop/src/main/webapp/resources/images/fotolia_56863820_m.jpg new file mode 100644 index 0000000..8b6f9f7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/fotolia_56863820_m.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/header_3.jpg b/java/wellmann-shop/src/main/webapp/resources/images/header_3.jpg new file mode 100644 index 0000000..b3840f2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/header_3.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/kate-trysh-485779-unsplash-u19917-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/kate-trysh-485779-unsplash-u19917-fr.jpg new file mode 100644 index 0000000..97e2f23 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/kate-trysh-485779-unsplash-u19917-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/kate-trysh-485779-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/images/kate-trysh-485779-unsplash.jpg new file mode 100644 index 0000000..b79415b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/kate-trysh-485779-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/kelly-sikkema-290463.jpg b/java/wellmann-shop/src/main/webapp/resources/images/kelly-sikkema-290463.jpg new file mode 100644 index 0000000..2d566cf Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/kelly-sikkema-290463.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/loading.gif b/java/wellmann-shop/src/main/webapp/resources/images/loading.gif new file mode 100644 index 0000000..ea22e32 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/loading.gif differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/logo start.png b/java/wellmann-shop/src/main/webapp/resources/images/logo start.png new file mode 100644 index 0000000..6704046 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/logo start.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/lukas-blazek-263121-u20075-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/lukas-blazek-263121-u20075-fr.jpg new file mode 100644 index 0000000..eeb30c0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/lukas-blazek-263121-u20075-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/lukas-blazek-263121.jpg b/java/wellmann-shop/src/main/webapp/resources/images/lukas-blazek-263121.jpg new file mode 100644 index 0000000..b0846d9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/lukas-blazek-263121.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/mappen2-u20043-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/mappen2-u20043-fr.jpg new file mode 100644 index 0000000..9b270f9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/mappen2-u20043-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/mappen2.jpg b/java/wellmann-shop/src/main/webapp/resources/images/mappen2.jpg new file mode 100644 index 0000000..dadf9e9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/mappen2.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/markus-spiske-104910-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/images/markus-spiske-104910-unsplash.jpg new file mode 100644 index 0000000..1b44432 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/markus-spiske-104910-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/postcard-1091283_1920-u19975-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/postcard-1091283_1920-u19975-fr.jpg new file mode 100644 index 0000000..48c434b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/postcard-1091283_1920-u19975-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/postcard-1091283_1920.jpg b/java/wellmann-shop/src/main/webapp/resources/images/postcard-1091283_1920.jpg new file mode 100644 index 0000000..49bbc5f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/postcard-1091283_1920.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonchecked.png b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonchecked.png new file mode 100644 index 0000000..9e2e0ab Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonchecked.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/radiobuttoncheckedmousedown.png b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttoncheckedmousedown.png new file mode 100644 index 0000000..5c37c1c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttoncheckedmousedown.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/radiobuttoncheckedrollover.png b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttoncheckedrollover.png new file mode 100644 index 0000000..3f2b936 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttoncheckedrollover.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonunchecked.png b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonunchecked.png new file mode 100644 index 0000000..c19e372 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonunchecked.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonuncheckedmousedown.png b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonuncheckedmousedown.png new file mode 100644 index 0000000..7987586 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonuncheckedmousedown.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonuncheckedrollover.png b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonuncheckedrollover.png new file mode 100644 index 0000000..dc3020a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/radiobuttonuncheckedrollover.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/rainier-ridao-569546-unsplash-u19999-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/rainier-ridao-569546-unsplash-u19999-fr.jpg new file mode 100644 index 0000000..e06753a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/rainier-ridao-569546-unsplash-u19999-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/rainier-ridao-569546-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/images/rainier-ridao-569546-unsplash.jpg new file mode 100644 index 0000000..e3f09d8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/rainier-ridao-569546-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/ron-dyar-521350-unsplash-u19949-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/ron-dyar-521350-unsplash-u19949-fr.jpg new file mode 100644 index 0000000..73ae542 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/ron-dyar-521350-unsplash-u19949-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/ron-dyar-521350-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/images/ron-dyar-521350-unsplash.jpg new file mode 100644 index 0000000..65d557f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/ron-dyar-521350-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/shopping-cart.png b/java/wellmann-shop/src/main/webapp/resources/images/shopping-cart.png new file mode 100644 index 0000000..d8501bd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/shopping-cart.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/sticker-u19801-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/sticker-u19801-fr.jpg new file mode 100644 index 0000000..bd4eb2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/sticker-u19801-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/sunyu-460812-unsplash-u19664-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/images/sunyu-460812-unsplash-u19664-fr.jpg new file mode 100644 index 0000000..7b4938c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/sunyu-460812-unsplash-u19664-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/sunyu-460812-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/images/sunyu-460812-unsplash.jpg new file mode 100644 index 0000000..1bb3e75 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/sunyu-460812-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u14170-13.png b/java/wellmann-shop/src/main/webapp/resources/images/u14170-13.png new file mode 100644 index 0000000..2087b4c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u14170-13.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19633-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19633-4.png new file mode 100644 index 0000000..b10aacd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19633-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19633-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19633-42.png new file mode 100644 index 0000000..b10aacd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19633-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19633-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19633-43.png new file mode 100644 index 0000000..b10aacd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19633-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19633-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19633-44.png new file mode 100644 index 0000000..b10aacd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19633-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19634_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19634_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19634_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19634_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19634_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19636-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19636-4.png new file mode 100644 index 0000000..44fa05b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19636-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19636-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19636-42.png new file mode 100644 index 0000000..44fa05b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19636-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19636-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19636-43.png new file mode 100644 index 0000000..44fa05b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19636-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19636-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19636-44.png new file mode 100644 index 0000000..44fa05b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19636-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19641-8.png b/java/wellmann-shop/src/main/webapp/resources/images/u19641-8.png new file mode 100644 index 0000000..b03a931 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19641-8.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19641-82.png b/java/wellmann-shop/src/main/webapp/resources/images/u19641-82.png new file mode 100644 index 0000000..1212b20 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19641-82.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19641-83.png b/java/wellmann-shop/src/main/webapp/resources/images/u19641-83.png new file mode 100644 index 0000000..77925d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19641-83.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19641-84.png b/java/wellmann-shop/src/main/webapp/resources/images/u19641-84.png new file mode 100644 index 0000000..f8aecaa Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19641-84.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19642-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19642-4.png new file mode 100644 index 0000000..e9be8b5 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19642-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19642-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19642-42.png new file mode 100644 index 0000000..346197a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19642-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19642-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19642-43.png new file mode 100644 index 0000000..4a8298f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19642-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19642-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19642-44.png new file mode 100644 index 0000000..58a8969 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19642-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19643-6.png b/java/wellmann-shop/src/main/webapp/resources/images/u19643-6.png new file mode 100644 index 0000000..bc56df0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19643-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19643-62.png b/java/wellmann-shop/src/main/webapp/resources/images/u19643-62.png new file mode 100644 index 0000000..da02faf Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19643-62.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19643-63.png b/java/wellmann-shop/src/main/webapp/resources/images/u19643-63.png new file mode 100644 index 0000000..1f24f28 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19643-63.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19643-64.png b/java/wellmann-shop/src/main/webapp/resources/images/u19643-64.png new file mode 100644 index 0000000..3cbf2b8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19643-64.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19660-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19660-4.png new file mode 100644 index 0000000..d3fb6f0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19660-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19660-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19660-42.png new file mode 100644 index 0000000..d3fb6f0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19660-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19660-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19660-43.png new file mode 100644 index 0000000..d3fb6f0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19660-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19660-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19660-44.png new file mode 100644 index 0000000..d3fb6f0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19660-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19665-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19665-4.png new file mode 100644 index 0000000..7a72f93 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19665-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19665-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19665-42.png new file mode 100644 index 0000000..7a72f93 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19665-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19665-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19665-43.png new file mode 100644 index 0000000..7a72f93 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19665-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19665-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19665-44.png new file mode 100644 index 0000000..7a72f93 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19665-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19666_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19666_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19666_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19666_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19666_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19688_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19688_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19688_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19688_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19688_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19690-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19690-4.png new file mode 100644 index 0000000..6d23c39 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19690-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19690-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19690-42.png new file mode 100644 index 0000000..6d23c39 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19690-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19690-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19690-43.png new file mode 100644 index 0000000..6d23c39 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19690-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19690-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19690-44.png new file mode 100644 index 0000000..6d23c39 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19690-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19710-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19710-4.png new file mode 100644 index 0000000..21d2d8e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19710-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19710-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19710-42.png new file mode 100644 index 0000000..21d2d8e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19710-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19715-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19715-4.png new file mode 100644 index 0000000..2273574 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19715-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19715-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19715-42.png new file mode 100644 index 0000000..2273574 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19715-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19715-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19715-43.png new file mode 100644 index 0000000..2273574 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19715-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19715-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19715-44.png new file mode 100644 index 0000000..2273574 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19715-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19717_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19717_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19717_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19717_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19717_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19750-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19750-4.png new file mode 100644 index 0000000..263d0f3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19750-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19750-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19750-42.png new file mode 100644 index 0000000..263d0f3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19750-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19750-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19750-43.png new file mode 100644 index 0000000..263d0f3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19750-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19750-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19750-44.png new file mode 100644 index 0000000..263d0f3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19750-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19751-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19751-4.png new file mode 100644 index 0000000..031ef7b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19751-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19751-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19751-42.png new file mode 100644 index 0000000..031ef7b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19751-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19751-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19751-43.png new file mode 100644 index 0000000..031ef7b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19751-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19751-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19751-44.png new file mode 100644 index 0000000..031ef7b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19751-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19752-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19752-4.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19752-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19752-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19752-42.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19752-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19752-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19752-43.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19752-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19752-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19752-44.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19752-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19753-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19753-4.png new file mode 100644 index 0000000..cc05646 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19753-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19753-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19753-42.png new file mode 100644 index 0000000..cc05646 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19753-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19753-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19753-43.png new file mode 100644 index 0000000..cc05646 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19753-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19753-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19753-44.png new file mode 100644 index 0000000..cc05646 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19753-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19754-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19754-4.png new file mode 100644 index 0000000..fbe4a60 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19754-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19754-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19754-42.png new file mode 100644 index 0000000..fbe4a60 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19754-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19754-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19754-43.png new file mode 100644 index 0000000..fbe4a60 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19754-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19754-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19754-44.png new file mode 100644 index 0000000..fbe4a60 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19754-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19755-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19755-4.png new file mode 100644 index 0000000..23c2b49 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19755-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19755-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19755-42.png new file mode 100644 index 0000000..23c2b49 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19755-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19755-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19755-43.png new file mode 100644 index 0000000..23c2b49 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19755-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19755-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19755-44.png new file mode 100644 index 0000000..23c2b49 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19755-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19797-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19797-4.png new file mode 100644 index 0000000..410583d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19797-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19797-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19797-42.png new file mode 100644 index 0000000..410583d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19797-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19802-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19802-4.png new file mode 100644 index 0000000..94ddf81 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19802-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19802-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19802-42.png new file mode 100644 index 0000000..94ddf81 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19802-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19802-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19802-43.png new file mode 100644 index 0000000..94ddf81 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19802-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19802-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19802-44.png new file mode 100644 index 0000000..94ddf81 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19802-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19803_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19803_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19803_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19803_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19803_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19844-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19844-4.png new file mode 100644 index 0000000..4b7a05f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19844-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19844-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19844-42.png new file mode 100644 index 0000000..4b7a05f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19844-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19844-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19844-43.png new file mode 100644 index 0000000..4b7a05f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19844-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19844-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19844-44.png new file mode 100644 index 0000000..4b7a05f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19844-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19845_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19845_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19845_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19845_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19845_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19868-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19868-4.png new file mode 100644 index 0000000..15bdea8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19868-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19868-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19868-42.png new file mode 100644 index 0000000..15bdea8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19868-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19868-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19868-43.png new file mode 100644 index 0000000..15bdea8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19868-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19868-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19868-44.png new file mode 100644 index 0000000..15bdea8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19868-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19869_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19869_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19869_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19869_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19869_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19895-6.png b/java/wellmann-shop/src/main/webapp/resources/images/u19895-6.png new file mode 100644 index 0000000..6b59cef Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19895-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19916-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19916-4.png new file mode 100644 index 0000000..09bc0dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19916-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19916-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19916-42.png new file mode 100644 index 0000000..09bc0dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19916-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19916-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19916-43.png new file mode 100644 index 0000000..09bc0dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19916-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19916-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19916-44.png new file mode 100644 index 0000000..09bc0dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19916-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r.png new file mode 100644 index 0000000..5df559a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r2.png new file mode 100644 index 0000000..5df559a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r3.png new file mode 100644 index 0000000..5df559a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r4.png new file mode 100644 index 0000000..5df559a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19918_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19918_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19918_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19918_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19918_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19919-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u19919-5.png new file mode 100644 index 0000000..6d57ad9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19919-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19919-52.png b/java/wellmann-shop/src/main/webapp/resources/images/u19919-52.png new file mode 100644 index 0000000..b087dec Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19919-52.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19919-53.png b/java/wellmann-shop/src/main/webapp/resources/images/u19919-53.png new file mode 100644 index 0000000..00e10ca Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19919-53.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19919-54.png b/java/wellmann-shop/src/main/webapp/resources/images/u19919-54.png new file mode 100644 index 0000000..58fc42e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19919-54.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19924_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19924_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19924_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19924_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19924_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19925-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19925-4.png new file mode 100644 index 0000000..5a15c72 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19925-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19925-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19925-42.png new file mode 100644 index 0000000..5a15c72 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19925-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19925-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19925-43.png new file mode 100644 index 0000000..5a15c72 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19925-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19925-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19925-44.png new file mode 100644 index 0000000..5a15c72 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19925-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19948_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19948_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19948_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19948_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19948_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19950-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19950-4.png new file mode 100644 index 0000000..29455db Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19950-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19950-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19950-42.png new file mode 100644 index 0000000..29455db Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19950-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19950-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19950-43.png new file mode 100644 index 0000000..29455db Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19950-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19950-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19950-44.png new file mode 100644 index 0000000..29455db Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19950-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19969-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19969-4.png new file mode 100644 index 0000000..4e68ec0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19969-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19969-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19969-42.png new file mode 100644 index 0000000..4e68ec0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19969-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19973-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19973-4.png new file mode 100644 index 0000000..b8fd322 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19973-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19973-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19973-42.png new file mode 100644 index 0000000..b8fd322 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19973-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19973-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19973-43.png new file mode 100644 index 0000000..b8fd322 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19973-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19973-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19973-44.png new file mode 100644 index 0000000..b8fd322 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19973-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19974_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19974_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19974_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19974_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19974_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19997-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19997-4.png new file mode 100644 index 0000000..cb01027 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19997-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19997-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u19997-42.png new file mode 100644 index 0000000..cb01027 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19997-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19997-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u19997-43.png new file mode 100644 index 0000000..cb01027 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19997-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19997-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u19997-44.png new file mode 100644 index 0000000..cb01027 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19997-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19998_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19998_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19998_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u19998_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u19998_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20018-6.png b/java/wellmann-shop/src/main/webapp/resources/images/u20018-6.png new file mode 100644 index 0000000..00aca61 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20018-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20018-62.png b/java/wellmann-shop/src/main/webapp/resources/images/u20018-62.png new file mode 100644 index 0000000..f93cb99 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20018-62.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20018-63.png b/java/wellmann-shop/src/main/webapp/resources/images/u20018-63.png new file mode 100644 index 0000000..a5c4337 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20018-63.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20018-64.png b/java/wellmann-shop/src/main/webapp/resources/images/u20018-64.png new file mode 100644 index 0000000..3300282 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20018-64.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20041_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20041_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20041_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20041_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20041_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20042-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20042-4.png new file mode 100644 index 0000000..190be2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20042-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20042-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u20042-42.png new file mode 100644 index 0000000..190be2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20042-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20042-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u20042-43.png new file mode 100644 index 0000000..190be2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20042-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20042-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u20042-44.png new file mode 100644 index 0000000..190be2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20042-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20048-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20048-4.png new file mode 100644 index 0000000..c43f228 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20048-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20048-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u20048-42.png new file mode 100644 index 0000000..c43f228 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20048-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20048-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u20048-43.png new file mode 100644 index 0000000..c43f228 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20048-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20048-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u20048-44.png new file mode 100644 index 0000000..c43f228 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20048-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20049_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20049_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20049_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20049_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20049_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20070-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20070-4.png new file mode 100644 index 0000000..540c300 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20070-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20070-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u20070-42.png new file mode 100644 index 0000000..540c300 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20070-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20074-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20074-4.png new file mode 100644 index 0000000..a4b9130 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20074-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20074-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u20074-42.png new file mode 100644 index 0000000..a4b9130 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20074-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20074-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u20074-43.png new file mode 100644 index 0000000..a4b9130 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20074-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20074-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u20074-44.png new file mode 100644 index 0000000..a4b9130 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20074-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20076_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20076_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20076_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20076_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20076_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20098-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20098-4.png new file mode 100644 index 0000000..14d0446 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20098-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20098-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u20098-42.png new file mode 100644 index 0000000..14d0446 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20098-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20099-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20099-4.png new file mode 100644 index 0000000..dfab2bc Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20099-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20099-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u20099-42.png new file mode 100644 index 0000000..dfab2bc Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20099-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20121_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20121_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20121_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20121_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20121_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20122-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20122-4.png new file mode 100644 index 0000000..1cb137d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20122-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20122-42.png b/java/wellmann-shop/src/main/webapp/resources/images/u20122-42.png new file mode 100644 index 0000000..1cb137d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20122-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20122-43.png b/java/wellmann-shop/src/main/webapp/resources/images/u20122-43.png new file mode 100644 index 0000000..1cb137d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20122-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20122-44.png b/java/wellmann-shop/src/main/webapp/resources/images/u20122-44.png new file mode 100644 index 0000000..1cb137d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20122-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20125-24.png b/java/wellmann-shop/src/main/webapp/resources/images/u20125-24.png new file mode 100644 index 0000000..fc3fc8e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20125-24.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20332_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20332_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20332_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20332_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20332_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20353_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20353_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20353_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20353_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20353_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20370_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20370_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20370_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20370_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20370_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20379_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20379_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20379_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20379_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20379_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20404_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20404_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20404_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20404_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20404_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20413_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20413_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20413_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20413_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20413_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20422_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20422_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20422_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20422_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20422_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20431_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20431_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20431_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20431_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20431_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20464_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20464_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20464_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20464_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20464_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20473_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20473_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20473_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20473_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20473_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20482_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20482_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20482_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20482_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20482_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20491_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20491_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20491_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20491_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20491_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20540_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20540_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20540_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20540_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20540_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20549_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20549_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20549_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20549_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20549_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20558_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20558_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20558_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20558_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20558_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20567_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20567_states2.png b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20567_states3.png b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u20567_states4.png b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u20567_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21525-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u21525-4.png new file mode 100644 index 0000000..289c3f8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21525-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21531-8.png b/java/wellmann-shop/src/main/webapp/resources/images/u21531-8.png new file mode 100644 index 0000000..53348ac Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21531-8.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21563-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u21563-5.png new file mode 100644 index 0000000..99e77d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21563-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21569-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u21569-5.png new file mode 100644 index 0000000..1561394 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21569-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21593-6.png b/java/wellmann-shop/src/main/webapp/resources/images/u21593-6.png new file mode 100644 index 0000000..4df4e69 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21593-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21594-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u21594-5.png new file mode 100644 index 0000000..b5350b7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21594-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21595-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u21595-5.png new file mode 100644 index 0000000..7fc6587 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21595-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21637-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u21637-4.png new file mode 100644 index 0000000..f968a9a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21637-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21653-24.png b/java/wellmann-shop/src/main/webapp/resources/images/u21653-24.png new file mode 100644 index 0000000..4d89732 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21653-24.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21667-6.png b/java/wellmann-shop/src/main/webapp/resources/images/u21667-6.png new file mode 100644 index 0000000..0de252c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21667-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21668-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u21668-5.png new file mode 100644 index 0000000..14bacb7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21668-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21669-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u21669-5.png new file mode 100644 index 0000000..fb357a4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21669-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21697-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u21697-4.png new file mode 100644 index 0000000..87cf8fe Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21697-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21709-24.png b/java/wellmann-shop/src/main/webapp/resources/images/u21709-24.png new file mode 100644 index 0000000..43dcc8b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21709-24.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21721-6.png b/java/wellmann-shop/src/main/webapp/resources/images/u21721-6.png new file mode 100644 index 0000000..c2b795e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21721-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21722-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u21722-5.png new file mode 100644 index 0000000..dd110bf Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21722-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21723-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u21723-5.png new file mode 100644 index 0000000..8544efd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21723-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21751-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u21751-4.png new file mode 100644 index 0000000..d7fa141 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21751-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21795-6.png b/java/wellmann-shop/src/main/webapp/resources/images/u21795-6.png new file mode 100644 index 0000000..7323847 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21795-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21795-62.png b/java/wellmann-shop/src/main/webapp/resources/images/u21795-62.png new file mode 100644 index 0000000..7323847 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21795-62.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u21795-63.png b/java/wellmann-shop/src/main/webapp/resources/images/u21795-63.png new file mode 100644 index 0000000..6242f9f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u21795-63.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22245-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u22245-4.png new file mode 100644 index 0000000..52533f7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22245-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22262_states-a.png b/java/wellmann-shop/src/main/webapp/resources/images/u22262_states-a.png new file mode 100644 index 0000000..3e7f3ed Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22262_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22262_states-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u22262_states-m.png new file mode 100644 index 0000000..b7888c3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22262_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22262_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u22262_states-r.png new file mode 100644 index 0000000..b7888c3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22262_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22262_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u22262_states.png new file mode 100644 index 0000000..9c1f03d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22262_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22267_states-a.png b/java/wellmann-shop/src/main/webapp/resources/images/u22267_states-a.png new file mode 100644 index 0000000..eb26716 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22267_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22267_states-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u22267_states-m.png new file mode 100644 index 0000000..9115894 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22267_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22267_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u22267_states-r.png new file mode 100644 index 0000000..9115894 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22267_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22267_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u22267_states.png new file mode 100644 index 0000000..343c226 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22267_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22278_states-a.png b/java/wellmann-shop/src/main/webapp/resources/images/u22278_states-a.png new file mode 100644 index 0000000..42fcdb2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22278_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22278_states-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u22278_states-m.png new file mode 100644 index 0000000..4b04f11 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22278_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22278_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u22278_states-r.png new file mode 100644 index 0000000..4b04f11 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22278_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22278_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u22278_states.png new file mode 100644 index 0000000..907d035 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22278_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22293_states-a.png b/java/wellmann-shop/src/main/webapp/resources/images/u22293_states-a.png new file mode 100644 index 0000000..aa953cc Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22293_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22293_states-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u22293_states-m.png new file mode 100644 index 0000000..ec56cbb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22293_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22293_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u22293_states-r.png new file mode 100644 index 0000000..ec56cbb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22293_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22293_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u22293_states.png new file mode 100644 index 0000000..903b799 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22293_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22300-8.png b/java/wellmann-shop/src/main/webapp/resources/images/u22300-8.png new file mode 100644 index 0000000..a0a9c55 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22300-8.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22309-18.png b/java/wellmann-shop/src/main/webapp/resources/images/u22309-18.png new file mode 100644 index 0000000..e2417c4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22309-18.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22330-25.png b/java/wellmann-shop/src/main/webapp/resources/images/u22330-25.png new file mode 100644 index 0000000..248e65e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22330-25.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22367-22.png b/java/wellmann-shop/src/main/webapp/resources/images/u22367-22.png new file mode 100644 index 0000000..02bb63e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22367-22.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22403-18.png b/java/wellmann-shop/src/main/webapp/resources/images/u22403-18.png new file mode 100644 index 0000000..fb76c7a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22403-18.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22449-26.png b/java/wellmann-shop/src/main/webapp/resources/images/u22449-26.png new file mode 100644 index 0000000..3c956ff Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22449-26.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22478-24.png b/java/wellmann-shop/src/main/webapp/resources/images/u22478-24.png new file mode 100644 index 0000000..a1c0f8b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22478-24.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22525-22.png b/java/wellmann-shop/src/main/webapp/resources/images/u22525-22.png new file mode 100644 index 0000000..90c5164 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22525-22.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22553-21.png b/java/wellmann-shop/src/main/webapp/resources/images/u22553-21.png new file mode 100644 index 0000000..09c84be Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22553-21.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22594-26.png b/java/wellmann-shop/src/main/webapp/resources/images/u22594-26.png new file mode 100644 index 0000000..e6e20ea Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22594-26.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22641-34.png b/java/wellmann-shop/src/main/webapp/resources/images/u22641-34.png new file mode 100644 index 0000000..8fb9e14 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22641-34.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22679-23.png b/java/wellmann-shop/src/main/webapp/resources/images/u22679-23.png new file mode 100644 index 0000000..1236077 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22679-23.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22713-20.png b/java/wellmann-shop/src/main/webapp/resources/images/u22713-20.png new file mode 100644 index 0000000..7418aab Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22713-20.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22749-20.png b/java/wellmann-shop/src/main/webapp/resources/images/u22749-20.png new file mode 100644 index 0000000..40c83d2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22749-20.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22781-18.png b/java/wellmann-shop/src/main/webapp/resources/images/u22781-18.png new file mode 100644 index 0000000..b4f9dc8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22781-18.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22840-17.png b/java/wellmann-shop/src/main/webapp/resources/images/u22840-17.png new file mode 100644 index 0000000..4ba6c17 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22840-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22909-19.png b/java/wellmann-shop/src/main/webapp/resources/images/u22909-19.png new file mode 100644 index 0000000..647c645 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22909-19.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22957-6.png b/java/wellmann-shop/src/main/webapp/resources/images/u22957-6.png new file mode 100644 index 0000000..04babae Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22957-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22958-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u22958-5.png new file mode 100644 index 0000000..99e77d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22958-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u22959-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u22959-5.png new file mode 100644 index 0000000..1561394 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u22959-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23012-17.png b/java/wellmann-shop/src/main/webapp/resources/images/u23012-17.png new file mode 100644 index 0000000..81fe999 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23012-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23033_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23033_states-r.png new file mode 100644 index 0000000..0c24759 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23033_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23033_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23033_states.png new file mode 100644 index 0000000..87dc473 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23033_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23034_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23034_states-r.png new file mode 100644 index 0000000..9db9d33 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23034_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23034_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23034_states.png new file mode 100644 index 0000000..e29d753 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23034_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23035_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23035_states-r.png new file mode 100644 index 0000000..b138c84 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23035_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23035_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23035_states.png new file mode 100644 index 0000000..5a8478a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23035_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23036_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23036_states-r.png new file mode 100644 index 0000000..c47c41c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23036_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23036_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23036_states.png new file mode 100644 index 0000000..8126204 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23036_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23037_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23037_states-r.png new file mode 100644 index 0000000..ecc5d5c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23037_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23037_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23037_states.png new file mode 100644 index 0000000..fd49b6d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23037_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23079-15.png b/java/wellmann-shop/src/main/webapp/resources/images/u23079-15.png new file mode 100644 index 0000000..7c07039 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23079-15.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23110_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23110_states-r.png new file mode 100644 index 0000000..c5444f5 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23110_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23110_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23110_states.png new file mode 100644 index 0000000..0352596 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23110_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23112_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23112_states-r.png new file mode 100644 index 0000000..80eead6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23112_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23112_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23112_states.png new file mode 100644 index 0000000..a9e88bb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23112_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23114_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23114_states-r.png new file mode 100644 index 0000000..f8612ac Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23114_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23114_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23114_states.png new file mode 100644 index 0000000..8dcedab Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23114_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23153-10.png b/java/wellmann-shop/src/main/webapp/resources/images/u23153-10.png new file mode 100644 index 0000000..9de2de2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23153-10.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23305-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23305-4.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23305-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23306-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23306-4.png new file mode 100644 index 0000000..fbf34e5 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23306-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23307-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23307-4.png new file mode 100644 index 0000000..66c7d2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23307-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23309-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23309-4.png new file mode 100644 index 0000000..f3f7dc0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23309-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23310-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23310-4.png new file mode 100644 index 0000000..772f26b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23310-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23430-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23430-4.png new file mode 100644 index 0000000..a623498 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23430-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23433-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23433-4.png new file mode 100644 index 0000000..72048d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23433-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23443_states-a.png b/java/wellmann-shop/src/main/webapp/resources/images/u23443_states-a.png new file mode 100644 index 0000000..1c369dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23443_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23443_states-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u23443_states-m.png new file mode 100644 index 0000000..fd7151d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23443_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23443_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23443_states-r.png new file mode 100644 index 0000000..fd7151d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23443_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23443_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23443_states.png new file mode 100644 index 0000000..56a408c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23443_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23446_states-a.png b/java/wellmann-shop/src/main/webapp/resources/images/u23446_states-a.png new file mode 100644 index 0000000..d62ad79 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23446_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23446_states-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u23446_states-m.png new file mode 100644 index 0000000..0b37a8a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23446_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23446_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23446_states-r.png new file mode 100644 index 0000000..0b37a8a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23446_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23446_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23446_states.png new file mode 100644 index 0000000..18601e4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23446_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23449_states-a.png b/java/wellmann-shop/src/main/webapp/resources/images/u23449_states-a.png new file mode 100644 index 0000000..8820af1 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23449_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23449_states-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u23449_states-m.png new file mode 100644 index 0000000..9149120 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23449_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23449_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23449_states-r.png new file mode 100644 index 0000000..9149120 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23449_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23449_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23449_states.png new file mode 100644 index 0000000..5965359 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23449_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23452_states-a.png b/java/wellmann-shop/src/main/webapp/resources/images/u23452_states-a.png new file mode 100644 index 0000000..b10a296 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23452_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23452_states-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u23452_states-m.png new file mode 100644 index 0000000..1cb4c7d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23452_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23452_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23452_states-r.png new file mode 100644 index 0000000..1cb4c7d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23452_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23452_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23452_states.png new file mode 100644 index 0000000..3d7df33 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23452_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23460-7.png b/java/wellmann-shop/src/main/webapp/resources/images/u23460-7.png new file mode 100644 index 0000000..f014fe8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23460-7.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23486-10.png b/java/wellmann-shop/src/main/webapp/resources/images/u23486-10.png new file mode 100644 index 0000000..97e0c67 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23486-10.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23513-23.png b/java/wellmann-shop/src/main/webapp/resources/images/u23513-23.png new file mode 100644 index 0000000..0068376 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23513-23.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23573-13.png b/java/wellmann-shop/src/main/webapp/resources/images/u23573-13.png new file mode 100644 index 0000000..8f122c1 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23573-13.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23628-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23628-4.png new file mode 100644 index 0000000..f028dbb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23628-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23631-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23631-4.png new file mode 100644 index 0000000..6f75f21 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23631-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23634-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23634-4.png new file mode 100644 index 0000000..833b5e4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23634-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23637-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u23637-4.png new file mode 100644 index 0000000..643a940 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23637-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23746-5.png b/java/wellmann-shop/src/main/webapp/resources/images/u23746-5.png new file mode 100644 index 0000000..6c8ed11 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23746-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23982_states-a.png b/java/wellmann-shop/src/main/webapp/resources/images/u23982_states-a.png new file mode 100644 index 0000000..64b9f4b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23982_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23982_states-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u23982_states-m.png new file mode 100644 index 0000000..bb76a33 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23982_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23982_states-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23982_states-r.png new file mode 100644 index 0000000..bb76a33 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23982_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23982_states.png b/java/wellmann-shop/src/main/webapp/resources/images/u23982_states.png new file mode 100644 index 0000000..c636723 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23982_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23985-m.png b/java/wellmann-shop/src/main/webapp/resources/images/u23985-m.png new file mode 100644 index 0000000..fef1162 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23985-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23985-r.png b/java/wellmann-shop/src/main/webapp/resources/images/u23985-r.png new file mode 100644 index 0000000..fef1162 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23985-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u23985.png b/java/wellmann-shop/src/main/webapp/resources/images/u23985.png new file mode 100644 index 0000000..99060e0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u23985.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24043-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24043-4.png new file mode 100644 index 0000000..ad003c9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24043-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24052-169.png b/java/wellmann-shop/src/main/webapp/resources/images/u24052-169.png new file mode 100644 index 0000000..1ab06c9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24052-169.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24093-71.png b/java/wellmann-shop/src/main/webapp/resources/images/u24093-71.png new file mode 100644 index 0000000..4e3bfde Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24093-71.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24108-126.png b/java/wellmann-shop/src/main/webapp/resources/images/u24108-126.png new file mode 100644 index 0000000..c853f4c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24108-126.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24141-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24141-4.png new file mode 100644 index 0000000..be158a6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24141-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24142-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24142-4.png new file mode 100644 index 0000000..1ab4812 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24142-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24143-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24143-4.png new file mode 100644 index 0000000..70730fb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24143-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24167-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24167-4.png new file mode 100644 index 0000000..e0d2e80 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24167-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24191-17.png b/java/wellmann-shop/src/main/webapp/resources/images/u24191-17.png new file mode 100644 index 0000000..74f8cfd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24191-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24264-17.png b/java/wellmann-shop/src/main/webapp/resources/images/u24264-17.png new file mode 100644 index 0000000..02110fd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24264-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24266-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24266-4.png new file mode 100644 index 0000000..08405b8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24266-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24267-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24267-4.png new file mode 100644 index 0000000..7362d64 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24267-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24268-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24268-4.png new file mode 100644 index 0000000..26c399e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24268-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24269-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24269-4.png new file mode 100644 index 0000000..f185095 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24269-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24337-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24337-4.png new file mode 100644 index 0000000..4efaff6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24337-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24338-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24338-4.png new file mode 100644 index 0000000..5592d61 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24338-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24339-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24339-4.png new file mode 100644 index 0000000..9607966 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24339-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24340-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24340-4.png new file mode 100644 index 0000000..dca3c7d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24340-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24341-17.png b/java/wellmann-shop/src/main/webapp/resources/images/u24341-17.png new file mode 100644 index 0000000..c91d6a6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24341-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24402-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24402-4.png new file mode 100644 index 0000000..715f8f9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24402-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24403-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24403-4.png new file mode 100644 index 0000000..46e5222 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24403-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24404-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24404-4.png new file mode 100644 index 0000000..aacc3d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24404-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24405-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24405-4.png new file mode 100644 index 0000000..15689c7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24405-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24406-17.png b/java/wellmann-shop/src/main/webapp/resources/images/u24406-17.png new file mode 100644 index 0000000..eb5797b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24406-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24467-17.png b/java/wellmann-shop/src/main/webapp/resources/images/u24467-17.png new file mode 100644 index 0000000..74f8cfd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24467-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24469-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24469-4.png new file mode 100644 index 0000000..1ab4812 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24469-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24470-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24470-4.png new file mode 100644 index 0000000..be158a6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24470-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24471-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24471-4.png new file mode 100644 index 0000000..70730fb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24471-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24472-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24472-4.png new file mode 100644 index 0000000..e0d2e80 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24472-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24528-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24528-4.png new file mode 100644 index 0000000..47b740c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24528-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24533-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24533-4.png new file mode 100644 index 0000000..1ab4812 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24533-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24534-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24534-4.png new file mode 100644 index 0000000..70730fb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24534-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24535-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24535-4.png new file mode 100644 index 0000000..be158a6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24535-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24536-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24536-4.png new file mode 100644 index 0000000..e0d2e80 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24536-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24537-17.png b/java/wellmann-shop/src/main/webapp/resources/images/u24537-17.png new file mode 100644 index 0000000..74f8cfd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24537-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24580-28.png b/java/wellmann-shop/src/main/webapp/resources/images/u24580-28.png new file mode 100644 index 0000000..f6b88fd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24580-28.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/images/u24607-4.png b/java/wellmann-shop/src/main/webapp/resources/images/u24607-4.png new file mode 100644 index 0000000..f2d4229 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/images/u24607-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/layout/template.xhtml b/java/wellmann-shop/src/main/webapp/resources/layout/template.xhtml new file mode 100644 index 0000000..8805a39 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/layout/template.xhtml @@ -0,0 +1,135 @@ + + + + + + + + + + + <ui:insert name="title"> + Please add a Title! + </ui:insert> + + + + + + +
+
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + Content + + + + Bottom + + +
+ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/css/anfrageformular.css b/java/wellmann-shop/src/main/webapp/resources/manager/css/anfrageformular.css new file mode 100644 index 0000000..16ba4b4 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/css/anfrageformular.css @@ -0,0 +1 @@ +.version.anfrageformular{color:#000016;background-color:#5700A9;}#page{z-index:1;min-height:1692px;background-image:none;border-width:0px;border-color:#000000;background-color:transparent;width:100%;max-width:1200px;margin-left:auto;margin-right:auto;}#pu13441{z-index:2;padding-bottom:0px;margin-right:-10000px;margin-top:12px;width:48.92%;margin-left:25.55%;}#u13441{z-index:2;width:234px;background-color:transparent;position:relative;margin-left:50%;left:-117.49999999999994px;}#u13441_img{padding-left:28px;padding-right:28px;}#u14170-13{z-index:220;display:block;vertical-align:top;margin-top:39px;position:relative;margin-left:50%;left:-293.49999999999994px;}#widgetu13659{z-index:4;padding-bottom:0px;margin-top:16px;position:relative;width:100%;margin-left:0%;left:-0.49999999999994316px;}#widgetu13659_position_content{width:100%;margin-left:0%;}#widgetu13669{z-index:31;border-width:0px;border-color:transparent;background-color:transparent;position:relative;width:100.18%;}#widgetu13669.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:100.18%;margin:0px 0px 0px 0%;}#pu13671-4{z-index:32;width:99.66%;margin-left:0.18%;}#u13671-4{z-index:32;min-height:20px;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:44.03%;}#u13672-4{z-index:40;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.84%;left:71.17%;}#u13670-4{z-index:36;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;top:-1px;margin-bottom:-1px;position:relative;width:99.66%;padding:6px 0px;}#widgetu13669.non-empty-st #u13670-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13669:hover #u13670-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13669.focus-st #u13670-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13669.non-empty-st #u13670-4 *{color:#666666;font-style:normal;}#widgetu13669:hover #u13670-4 *{color:#666666;font-style:normal;}#widgetu13669.focus-st #u13670-4 *{color:#666666;font-style:normal;}#widgetu13693{z-index:44;border-width:0px;border-color:transparent;background-color:transparent;margin-top:17px;position:relative;width:100.18%;}#u13695-4{z-index:45;min-height:30px;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u13694-4{z-index:49;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu13693.non-empty-st #u13694-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13693:hover #u13694-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13693.focus-st #u13694-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13693.non-empty-st #u13694-4 *{color:#666666;font-style:normal;}#widgetu13693:hover #u13694-4 *{color:#666666;font-style:normal;}#widgetu13693.focus-st #u13694-4 *{color:#666666;font-style:normal;}#u13696-4{z-index:53;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu13683{z-index:57;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;}#u13686-4{z-index:58;min-height:30px;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u13685-4{z-index:62;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu13683.non-empty-st #u13685-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13683:hover #u13685-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13683.focus-st #u13685-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13683.non-empty-st #u13685-4 *{color:#666666;font-style:normal;}#widgetu13683:hover #u13685-4 *{color:#666666;font-style:normal;}#widgetu13683.focus-st #u13685-4 *{color:#666666;font-style:normal;}#u13684-4{z-index:66;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu13953{z-index:112;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:16px;position:relative;width:62.36%;}#widgetu13953.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:62.36%;margin:16px 0px 0px 0%;}#u13955-4{z-index:113;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;width:70.5%;}#widgetu13953.fld-err-st #u13955-4{padding-top:0px;padding-bottom:0px;min-height:20px;width:70.5%;margin:0px 0px 0px 0%;}#pwidgetu13964{z-index:117;margin-top:11px;width:100%;}#widgetu13964{z-index:117;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;width:77.6%;}#u13970{z-index:122;width:16px;height:16px;background-color:transparent;position:relative;margin-right:-10000px;}#u13970 input.not_checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonunchecked.png?crc=3976871150") no-repeat center center;background-size:contain;}#u13970 input:not(:checked) + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonunchecked.png?crc=3976871150") no-repeat center center;background-size:contain;}#u13970 input.checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonchecked.png?crc=4193302265") no-repeat center center;background-size:contain;}#u13970 input:checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonchecked.png?crc=4193302265") no-repeat center center;background-size:contain;}#u13970 input.not_checked:hover + label,#widgetu13964.focus-st #u13970 input.not_checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedrollover.png?crc=4276313674") no-repeat center center;background-size:contain;}#u13970 input:not(:checked):hover + label,#widgetu13964.focus-st #u13970 input:not(:checked) + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedrollover.png?crc=4276313674") no-repeat center center;background-size:contain;}#u13970 input.checked:hover + label,#widgetu13964.focus-st #u13970 input.checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedrollover.png?crc=88928956") no-repeat center center;background-size:contain;}#u13970 input:checked:hover + label,#widgetu13964.focus-st #u13970 input:checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedrollover.png?crc=88928956") no-repeat center center;background-size:contain;}#u13966-4{z-index:118;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;left:26px;width:90.85%;}#widgetu14017{z-index:123;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;width:77.6%;left:22.41%;}#widgetu13964.fld-err-st,#widgetu14017.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:77.6%;margin:0px -10000px 0px 0%;}#u14018{z-index:128;width:16px;height:16px;background-color:transparent;position:relative;margin-right:-10000px;}#u14018 input.not_checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonunchecked.png?crc=3976871150") no-repeat center center;background-size:contain;}#u14018 input:not(:checked) + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonunchecked.png?crc=3976871150") no-repeat center center;background-size:contain;}#u14018 input.checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonchecked.png?crc=4193302265") no-repeat center center;background-size:contain;}#u14018 input:checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);background:transparent url("../images/radiobuttonchecked.png?crc=4193302265") no-repeat center center;background-size:contain;}#u13970 input.not_checked:active + label,#u14018 input.not_checked:active + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedmousedown.png?crc=54863585") no-repeat center center;background-size:contain;}#u13970 input:not(:checked):active + label,#u14018 input:not(:checked):active + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedmousedown.png?crc=54863585") no-repeat center center;background-size:contain;}#u13970 input.checked:active + label,#u14018 input.checked:active + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedmousedown.png?crc=4280357799") no-repeat center center;background-size:contain;}#u13970 input:checked:active + label,#u14018 input:checked:active + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedmousedown.png?crc=4280357799") no-repeat center center;background-size:contain;}#u14018 input.not_checked:hover + label,#widgetu14017.focus-st #u14018 input.not_checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedrollover.png?crc=4276313674") no-repeat center center;background-size:contain;}#u14018 input:not(:checked):hover + label,#widgetu14017.focus-st #u14018 input:not(:checked) + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttonuncheckedrollover.png?crc=4276313674") no-repeat center center;background-size:contain;}#u14018 input.checked:hover + label,#widgetu14017.focus-st #u14018 input.checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedrollover.png?crc=88928956") no-repeat center center;background-size:contain;}#u14018 input:checked:hover + label,#widgetu14017.focus-st #u14018 input:checked + label{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);width:16px;height:16px;min-height:0px;background:transparent url("../images/radiobuttoncheckedrollover.png?crc=88928956") no-repeat center center;background-size:contain;}#u14019-4{z-index:124;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;left:26px;width:90.85%;}#widgetu13964.fld-err-st #u13966-4,#widgetu14017.fld-err-st #u14019-4{padding-top:0px;padding-bottom:0px;min-height:20px;width:90.85%;margin:0px -10000px 0px 0px;}#widgetu13964_input,#widgetu14017_input{position:absolute;height:16px;min-height:0px;width:100%;}#widgetu13665{z-index:5;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:17px;position:relative;width:100.18%;left:-0.18%;}#widgetu13693.fld-err-st,#widgetu13665.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:100.18%;margin:17px 0px 0px 0%;}#pu13668-4{z-index:6;width:99.66%;margin-left:0.18%;}#u13668-4{z-index:6;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:44.03%;}#widgetu13665.fld-err-st #u13668-4{border-width:0px;border-color:transparent;padding-top:0px;padding-bottom:0px;min-height:20px;width:44.03%;margin:0px -10000px 0px 0%;}#u13666-4{z-index:14;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);line-height:14px;text-align:right;color:#999999;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-weight:normal;position:relative;margin-right:-10000px;width:28.84%;left:71.17%;}#u13667-4{z-index:10;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;top:-1px;margin-bottom:-1px;position:relative;width:99.66%;padding:6px 0px;}#widgetu13665.non-empty-st #u13667-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13665:hover #u13667-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13665.focus-st #u13667-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13665.non-empty-st #u13667-4 *{color:#666666;font-style:normal;}#widgetu13665:hover #u13667-4 *{color:#666666;font-style:normal;}#widgetu13665.focus-st #u13667-4 *{color:#666666;font-style:normal;}#widgetu13673{z-index:99;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#pu13676-4{z-index:100;width:99.49%;margin-left:0.35%;}#u13676-4{z-index:100;min-height:20px;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:44.11%;}#widgetu13673.fld-err-st #u13676-4{padding-top:0px;padding-bottom:0px;min-height:20px;width:44.11%;margin:0px -10000px 0px 0%;}#u13674-4{z-index:108;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.89%;left:71.12%;}#widgetu13673.fld-err-st #u13674-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);padding-top:0px;padding-bottom:0px;min-height:20px;width:28.89%;margin:0px -10000px 0px 0%;}#u13675-4{z-index:104;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;top:-1px;margin-bottom:-1px;position:relative;width:99.66%;padding:6px 0px;}#widgetu13673.non-empty-st #u13675-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13673:hover #u13675-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13673.focus-st #u13675-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13673.non-empty-st #u13675-4 *{color:#666666;font-style:normal;}#widgetu13673:hover #u13675-4 *{color:#666666;font-style:normal;}#widgetu13673.focus-st #u13675-4 *{color:#6B6B6B;font-style:normal;}#widgetu13688{z-index:18;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#pu13691-4{z-index:19;width:99.66%;margin-left:0.18%;}#u13691-4{z-index:19;min-height:20px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:44.03%;}#widgetu13669.fld-err-st #u13671-4,#widgetu13688.fld-err-st #u13691-4{padding-top:0px;padding-bottom:0px;min-height:20px;width:44.03%;margin:0px -10000px 0px 0%;}#u13689-4{z-index:27;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.84%;left:71.17%;}#widgetu13669.fld-err-st #u13672-4,#widgetu13665.fld-err-st #u13666-4,#widgetu13688.fld-err-st #u13689-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);padding-top:0px;padding-bottom:0px;min-height:20px;width:28.84%;margin:0px -10000px 0px 0%;}#u13690-4{z-index:23;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;top:-1px;margin-bottom:-1px;position:relative;width:99.66%;padding:6px 0px;}#widgetu13688.non-empty-st #u13690-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13688:hover #u13690-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13688.focus-st #u13690-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13669.fld-err-st #u13670-4,#widgetu13665.fld-err-st #u13667-4,#widgetu13673.fld-err-st #u13675-4,#widgetu13688.fld-err-st #u13690-4{border-color:#D7244C;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:0px 0px -1px 0%;}#widgetu13688.non-empty-st #u13690-4 *{color:#666666;font-style:normal;}#widgetu13688:hover #u13690-4 *{color:#666666;font-style:normal;}#widgetu13688.focus-st #u13690-4 *{color:#666666;font-style:normal;}#widgetu14027{z-index:129;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;}#u14030-4{z-index:130;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14029-4{z-index:134;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14027.non-empty-st #u14029-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14027:hover #u14029-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14027.focus-st #u14029-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14027.non-empty-st #u14029-4 *{color:#666666;font-style:normal;}#widgetu14027:hover #u14029-4 *{color:#666666;font-style:normal;}#widgetu14027.focus-st #u14029-4 *{color:#666666;font-style:normal;}#u14028-4{z-index:138;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14063{z-index:168;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14064-4{z-index:169;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14065-4{z-index:173;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14063.non-empty-st #u14065-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14063:hover #u14065-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14063.focus-st #u14065-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14063.non-empty-st #u14065-4 *{color:#666666;font-style:normal;}#widgetu14063:hover #u14065-4 *{color:#666666;font-style:normal;}#widgetu14063.focus-st #u14065-4 *{color:#666666;font-style:normal;}#u14066-4{z-index:177;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14039{z-index:142;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14041-4{z-index:143;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14040-4{z-index:147;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14039.non-empty-st #u14040-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14039:hover #u14040-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14039.focus-st #u14040-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14039.non-empty-st #u14040-4 *{color:#666666;font-style:normal;}#widgetu14039:hover #u14040-4 *{color:#666666;font-style:normal;}#widgetu14039.focus-st #u14040-4 *{color:#666666;font-style:normal;}#u14042-4{z-index:151;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14051{z-index:155;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14052-4{z-index:156;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14053-4{z-index:160;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14051.non-empty-st #u14053-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14051:hover #u14053-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14051.focus-st #u14053-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14051.non-empty-st #u14053-4 *{color:#666666;font-style:normal;}#widgetu14051:hover #u14053-4 *{color:#666666;font-style:normal;}#widgetu14051.focus-st #u14053-4 *{color:#666666;font-style:normal;}#u14054-4{z-index:164;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14089{z-index:194;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14092-4{z-index:195;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14090-4{z-index:199;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14089.non-empty-st #u14090-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14089:hover #u14090-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14089.focus-st #u14090-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14089.non-empty-st #u14090-4 *{color:#666666;font-style:normal;}#widgetu14089:hover #u14090-4 *{color:#666666;font-style:normal;}#widgetu14089.focus-st #u14090-4 *{color:#666666;font-style:normal;}#u14091-4{z-index:203;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14075{z-index:181;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14076-4{z-index:182;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#u14078-4{z-index:186;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14075.non-empty-st #u14078-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14075:hover #u14078-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14075.focus-st #u14078-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14075.non-empty-st #u14078-4 *{color:#666666;font-style:normal;}#widgetu14075:hover #u14078-4 *{color:#666666;font-style:normal;}#widgetu14075.focus-st #u14078-4 *{color:#666666;font-style:normal;}#u14077-4{z-index:190;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu14101{z-index:207;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#u14104-4{z-index:208;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#widgetu13693.fld-err-st #u13695-4,#widgetu13683.fld-err-st #u13686-4,#widgetu14027.fld-err-st #u14030-4,#widgetu14063.fld-err-st #u14064-4,#widgetu14039.fld-err-st #u14041-4,#widgetu14051.fld-err-st #u14052-4,#widgetu14089.fld-err-st #u14092-4,#widgetu14075.fld-err-st #u14076-4,#widgetu14101.fld-err-st #u14104-4{padding-top:0px;padding-bottom:0px;min-height:30px;width:43.88%;margin:0px -10000px 0px 0%;}#u14102-4{z-index:212;min-height:16px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu14101.non-empty-st #u14102-4{border-color:#666666;background-color:#FFFFFF;}#widgetu14101:hover #u14102-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14101.focus-st #u14102-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13693.fld-err-st #u13694-4,#widgetu13683.fld-err-st #u13685-4,#widgetu14027.fld-err-st #u14029-4,#widgetu14063.fld-err-st #u14065-4,#widgetu14039.fld-err-st #u14040-4,#widgetu14051.fld-err-st #u14053-4,#widgetu14089.fld-err-st #u14090-4,#widgetu14075.fld-err-st #u14078-4,#widgetu14101.fld-err-st #u14102-4{border-color:#D7244C;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:16px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu14101.non-empty-st #u14102-4 *{color:#666666;font-style:normal;}#widgetu14101:hover #u14102-4 *{color:#666666;font-style:normal;}#widgetu14101.focus-st #u14102-4 *{color:#666666;font-style:normal;}#u14103-4{z-index:216;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu13669_input,#widgetu13693_input,#widgetu13683_input,#widgetu13665_input,#widgetu13673_input,#widgetu13688_input,#widgetu14027_input,#widgetu14063_input,#widgetu14039_input,#widgetu14051_input,#widgetu14089_input,#widgetu14075_input,#widgetu14101_input{position:absolute;color:#B5B5B5;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;min-height:16px;width:100%;}#widgetu13669_prompt,#widgetu13693_prompt,#widgetu13683_prompt,#widgetu13665_prompt,#widgetu13673_prompt,#widgetu13688_prompt,#widgetu14027_prompt,#widgetu14063_prompt,#widgetu14039_prompt,#widgetu14051_prompt,#widgetu14089_prompt,#widgetu14075_prompt,#widgetu14101_prompt{color:#B5B5B5;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;height:16px;overflow:hidden;position:absolute;width:100%;}#widgetu13660{z-index:86;border-width:0px;border-color:transparent;background-color:transparent;margin-top:16px;position:relative;width:100.18%;left:-0.18%;}#widgetu13683.fld-err-st,#widgetu13673.fld-err-st,#widgetu13688.fld-err-st,#widgetu14027.fld-err-st,#widgetu14063.fld-err-st,#widgetu14039.fld-err-st,#widgetu14051.fld-err-st,#widgetu14089.fld-err-st,#widgetu14075.fld-err-st,#widgetu14101.fld-err-st,#widgetu13660.fld-err-st{background-color:transparent;border-radius:0px;min-height:0px;width:100.18%;margin:16px 0px 0px 0%;}#u13663-4{z-index:87;min-height:30px;border-width:0px;border-color:transparent;background-color:transparent;color:#666666;text-align:left;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:43.88%;left:0.18%;}#widgetu13660.fld-err-st #u13663-4{border-width:0px;border-color:transparent;padding-top:0px;padding-bottom:0px;min-height:30px;width:43.88%;margin:0px -10000px 0px 0%;}#widgetu13669.fld-err-st #u13671-4 p,#widgetu13669.fld-err-st #u13671-4 span,#widgetu13693.fld-err-st #u13695-4 p,#widgetu13693.fld-err-st #u13695-4 span,#widgetu13683.fld-err-st #u13686-4 p,#widgetu13683.fld-err-st #u13686-4 span,#widgetu13953.fld-err-st #u13955-4 p,#widgetu13953.fld-err-st #u13955-4 span,#widgetu13964.fld-err-st #u13966-4 p,#widgetu13964.fld-err-st #u13966-4 span,#widgetu14017.fld-err-st #u14019-4 p,#widgetu14017.fld-err-st #u14019-4 span,#widgetu13665.fld-err-st #u13668-4 p,#widgetu13665.fld-err-st #u13668-4 span,#widgetu13673.fld-err-st #u13676-4 p,#widgetu13673.fld-err-st #u13676-4 span,#widgetu13688.fld-err-st #u13691-4 p,#widgetu13688.fld-err-st #u13691-4 span,#widgetu14027.fld-err-st #u14030-4 p,#widgetu14027.fld-err-st #u14030-4 span,#widgetu14063.fld-err-st #u14064-4 p,#widgetu14063.fld-err-st #u14064-4 span,#widgetu14039.fld-err-st #u14041-4 p,#widgetu14039.fld-err-st #u14041-4 span,#widgetu14051.fld-err-st #u14052-4 p,#widgetu14051.fld-err-st #u14052-4 span,#widgetu14089.fld-err-st #u14092-4 p,#widgetu14089.fld-err-st #u14092-4 span,#widgetu14075.fld-err-st #u14076-4 p,#widgetu14075.fld-err-st #u14076-4 span,#widgetu14101.fld-err-st #u14104-4 p,#widgetu14101.fld-err-st #u14104-4 span,#widgetu13660.fld-err-st #u13663-4 p,#widgetu13660.fld-err-st #u13663-4 span{color:#D7244C;}#u13661-4{z-index:91;min-height:133px;border-style:solid;border-width:1px;border-color:#B5B5B5;background-color:#F4F4F4;position:relative;margin-right:-10000px;margin-top:19px;width:99.66%;padding:6px 0px;}#widgetu13660.non-empty-st #u13661-4{border-color:#666666;background-color:#FFFFFF;}#widgetu13660:hover #u13661-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:133px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13660.focus-st #u13661-4{border-color:#666666;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:133px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13660.fld-err-st #u13661-4{border-color:#D7244C;background-color:#FFFFFF;padding-top:6px;padding-bottom:6px;min-height:133px;width:99.66%;margin:19px -10000px 0px 0%;}#widgetu13660.non-empty-st #u13661-4 *{color:#666666;font-style:normal;}#widgetu13660:hover #u13661-4 *{color:#666666;font-style:normal;}#widgetu13660.focus-st #u13661-4 *{color:#666666;font-style:normal;}#u13670-3,#u13694-3,#u13685-3,#u13667-3,#u13675-3,#u13690-3,#u14029-3,#u14065-3,#u14040-3,#u14053-3,#u14090-3,#u14078-3,#u14102-3,#u13661-3{color:#B5B5B5;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;margin-left:6px;margin-right:6px;position:relative;}#u13662-4{z-index:95;min-height:20px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);color:#999999;text-align:right;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;position:relative;margin-right:-10000px;width:28.75%;left:71.09%;}#widgetu13693.fld-err-st #u13696-4,#widgetu13683.fld-err-st #u13684-4,#widgetu14027.fld-err-st #u14028-4,#widgetu14063.fld-err-st #u14066-4,#widgetu14039.fld-err-st #u14042-4,#widgetu14051.fld-err-st #u14054-4,#widgetu14089.fld-err-st #u14091-4,#widgetu14075.fld-err-st #u14077-4,#widgetu14101.fld-err-st #u14103-4,#widgetu13660.fld-err-st #u13662-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);padding-top:0px;padding-bottom:0px;min-height:20px;width:28.75%;margin:0px -10000px 0px 0%;}#widgetu13669.fld-err-st #u13672-4 p,#widgetu13669.fld-err-st #u13670-4 *,#widgetu13693.fld-err-st #u13694-4 *,#widgetu13693.fld-err-st #u13696-4 p,#widgetu13683.fld-err-st #u13685-4 *,#widgetu13683.fld-err-st #u13684-4 p,#widgetu13665.fld-err-st #u13666-4 p,#widgetu13665.fld-err-st #u13667-4 *,#widgetu13673.fld-err-st #u13674-4 p,#widgetu13673.fld-err-st #u13675-4 *,#widgetu13688.fld-err-st #u13689-4 p,#widgetu13688.fld-err-st #u13690-4 *,#widgetu14027.fld-err-st #u14029-4 *,#widgetu14027.fld-err-st #u14028-4 p,#widgetu14063.fld-err-st #u14065-4 *,#widgetu14063.fld-err-st #u14066-4 p,#widgetu14039.fld-err-st #u14040-4 *,#widgetu14039.fld-err-st #u14042-4 p,#widgetu14051.fld-err-st #u14053-4 *,#widgetu14051.fld-err-st #u14054-4 p,#widgetu14089.fld-err-st #u14090-4 *,#widgetu14089.fld-err-st #u14091-4 p,#widgetu14075.fld-err-st #u14078-4 *,#widgetu14075.fld-err-st #u14077-4 p,#widgetu14101.fld-err-st #u14102-4 *,#widgetu14101.fld-err-st #u14103-4 p,#widgetu13660.fld-err-st #u13661-4 *,#widgetu13660.fld-err-st #u13662-4 p{color:#D7244C;font-style:italic;}#widgetu13660_input{position:absolute;color:#B5B5B5;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;min-height:133px;width:100%;}#widgetu13660_prompt{color:#B5B5B5;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;height:133px;overflow:hidden;position:absolute;width:100%;}#pu13682-4{z-index:70;margin-top:94px;width:75.47%;margin-left:12.27%;}#u13682-4{z-index:70;min-height:26px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);padding-top:4px;font-size:12px;line-height:14px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;position:relative;margin-right:-10000px;width:55.54%;left:44.47%;}#widgetu13659.frm-sub-st #u13682-4 p{color:#999999;line-height:1;font-size:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;}#u13687-4{z-index:74;min-height:26px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);padding-top:4px;color:#FF0000;line-height:14px;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;position:relative;margin-right:-10000px;width:55.54%;left:44.47%;}#widgetu13659.frm-subm-err-st #u13687-4 p{color:#D7244C;line-height:1;font-size:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;}#u13692-4{z-index:78;min-height:26px;background-color:transparent;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);padding-top:4px;color:#00FF00;line-height:12px;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;position:relative;margin-right:-10000px;width:55.54%;left:44.47%;}#widgetu13659.frm-sub-st #u13682-4,#widgetu13659.frm-subm-err-st #u13687-4,#widgetu13659.frm-subm-ok-st #u13692-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);min-height:30px;}#widgetu13659.frm-subm-ok-st #u13692-4 p{color:#999999;font-size:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-style:italic;}#u13664-4{height:22px;border-style:solid;border-width:1px;border-color:#666666;background-color:#666666;border-radius:2px;color:#FFFFFF;text-align:center;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;margin-bottom:-1px;position:relative;margin-right:-10000px;margin-top:-1px;width:38.15%;left:-0.23%;padding:8px 0px 0px;}#u13664-4:hover{border-color:#141414;background-color:#141414;padding-top:8px;padding-bottom:0px;min-height:0px;height:22px;width:38.15%;margin:-1px -10000px -1px 0%;}#u13664-4:active{border-color:#141414;background-color:#141414;padding-top:8px;padding-bottom:0px;min-height:0px;height:22px;width:38.15%;margin:-1px -10000px -1px 0%;}.css_verticalspacer .verticalspacer{height:calc(100vh - 2030px);}#u14173{z-index:233;min-height:272px;background-color:#008089;padding-bottom:28px;}#u14173_align_to_page{margin-left:auto;margin-right:auto;position:relative;max-width:1200px;}#u24531{z-index:234;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:38px;width:63.42%;margin-left:18.3%;left:6px;}#u24537-17{z-index:252;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:55.59%;margin-left:22.21%;left:-169px;}#u24532{z-index:235;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;width:23.13%;margin-left:38.44%;left:293px;}#u24536-4{z-index:248;display:block;vertical-align:top;position:relative;width:99.44%;margin-left:0.29%;left:-1px;}#u24535-4{z-index:236;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24533-4{z-index:240;margin-top:12px;position:relative;width:100%;margin-left:0%;left:0px;}#u24534-4{z-index:244;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24535-4_img,#u24533-4_img,#u24534-4_img{display:block;vertical-align:top;width:99.44%;}#widgetu13669.non-empty-st #widgetu13669_prompt,#widgetu13669.focus-st #widgetu13669_prompt,#widgetu13693.non-empty-st #widgetu13693_prompt,#widgetu13693.focus-st #widgetu13693_prompt,#widgetu13683.non-empty-st #widgetu13683_prompt,#widgetu13683.focus-st #widgetu13683_prompt,#widgetu13665.non-empty-st #widgetu13665_prompt,#widgetu13665.focus-st #widgetu13665_prompt,#widgetu13673.non-empty-st #widgetu13673_prompt,#widgetu13673.focus-st #widgetu13673_prompt,#widgetu13688.non-empty-st #widgetu13688_prompt,#widgetu13688.focus-st #widgetu13688_prompt,#widgetu14027.non-empty-st #widgetu14027_prompt,#widgetu14027.focus-st #widgetu14027_prompt,#widgetu14063.non-empty-st #widgetu14063_prompt,#widgetu14063.focus-st #widgetu14063_prompt,#widgetu14039.non-empty-st #widgetu14039_prompt,#widgetu14039.focus-st #widgetu14039_prompt,#widgetu14051.non-empty-st #widgetu14051_prompt,#widgetu14051.focus-st #widgetu14051_prompt,#widgetu14089.non-empty-st #widgetu14089_prompt,#widgetu14089.focus-st #widgetu14089_prompt,#widgetu14075.non-empty-st #widgetu14075_prompt,#widgetu14075.focus-st #widgetu14075_prompt,#widgetu14101.non-empty-st #widgetu14101_prompt,#widgetu14101.focus-st #widgetu14101_prompt,#widgetu13660.non-empty-st #widgetu13660_prompt,#widgetu13660.focus-st #widgetu13660_prompt,.js body{visibility:hidden;}.js body.initialized{visibility:visible;}#u14173-bw{z-index:233;min-height:272px;margin-bottom:-300px;margin-top:62px;}#muse_css_mq,.html{background-color:#FFFFFF;}body{position:relative;min-width:320px;padding-bottom:300px;}.verticalspacer{min-height:1px;} \ No newline at end of file diff --git a/bigmind/src/__init__.py b/java/wellmann-shop/src/main/webapp/resources/manager/css/default.css similarity index 100% rename from bigmind/src/__init__.py rename to java/wellmann-shop/src/main/webapp/resources/manager/css/default.css diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/css/index.css b/java/wellmann-shop/src/main/webapp/resources/manager/css/index.css new file mode 100644 index 0000000..1948843 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/css/index.css @@ -0,0 +1,2 @@ +.version.index{color:#000015;background-color:#F5BBFB;}.js body.initialized{visibility:visible;}#page{border-color:#000000;background-color:transparent;margin-right:auto;z-index:1;border-width:0px;margin-left:auto;width:100%;background-image:none;}#pstart{margin-right:-10000px;z-index:38;}#u20068{left:-117px;background-color:transparent;position:relative;width:234px;}#u20068_img{padding-right:28px;padding-left:28px;}#pslideshowu19635{margin-top:13px;z-index:3;}#slideshowu19635{left:0px;margin-right:-10000px;z-index:3;position:relative;margin-left:0px;width:100%;}#u19651{background-color:transparent;position:absolute;}#u19651popup{margin-right:-10000px;z-index:4;}#u19652{box-shadow:6px 6px 8px rgba(0,0,0,0.19);border-color:transparent;background-color:transparent;z-index:5;border-width:0px;position:relative;margin-right:-10000px;}#u19656{box-shadow:6px 6px 8px rgba(0,0,0,0.19);border-color:transparent;background-color:transparent;z-index:7;border-width:0px;position:relative;margin-right:-10000px;}#u19654{box-shadow:6px 6px 8px rgba(0,0,0,0.19);border-color:transparent;background-color:transparent;z-index:9;border-width:0px;position:relative;margin-right:-10000px;}#u19652::before,#u19656::before,#u19654::before{bottom:0px;left:0px;right:0px;position:absolute;box-shadow:inset 0px 0px 10px rgba(255,255,255,0.4), inset 0px 0px 10px rgba(255,255,255,0.4);top:0px;content:"";pointer-events:none;}#u19640{width:100%;background-color:transparent;position:absolute;}#u19640popup{margin-right:-10000px;z-index:11;top:26px;height:221px;}#u19643-6{display:block;z-index:12;position:relative;vertical-align:top;margin-right:-10000px;margin-bottom:-6px;}#u19642-4{display:block;z-index:18;position:relative;vertical-align:top;margin-right:-10000px;margin-bottom:-6px;}#u19641-8{display:block;z-index:22;position:relative;vertical-align:top;margin-right:-10000px;margin-bottom:-6px;}#u19636-4{vertical-align:top;display:block;position:absolute;}#u19636-4popup{left:20px;margin-right:-10000px;z-index:30;width:107px;top:232px;height:127px;}#u19660-4{margin-left:100%;vertical-align:top;left:-228px;display:block;position:absolute;}#u19660-4popup{margin-right:-10000px;z-index:34;margin-left:100%;width:107px;top:232px;height:127px;}.SSSlideLoading{background:url("../images/loading.gif?crc=3815509949") no-repeat center center;}#u20095{background-color:transparent;margin-right:-10000px;z-index:46;border-width:0px;margin-left:0%;width:36px;border-color:transparent;min-height:81px;position:relative;}#u20018-6{display:block;z-index:40;position:relative;vertical-align:top;}#buttonu19915{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:7px;padding-top:13px;width:270px;height:330px;}#buttonu19915:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u19917{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/kate-trysh-485779-unsplash-u19917-fr.jpg?crc=4178170086") no-repeat center center;background-size:cover;}#buttonu19915:hover #u19917{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u19918{margin-top:20px;left:-3.84%;margin-right:-10000px;position:relative;vertical-align:top;width:119px;}#u19918_states{width:119px;background-color:transparent;background-repeat:no-repeat;float:left;background-position:10px 10px;height:49px;}#buttonu20073{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu20073:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u20075{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/lukas-blazek-263121-u20075-fr.jpg?crc=322627368") no-repeat left top;background-size:cover;}#buttonu20073:hover #u20075{background-position:left top;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu20073.ButtonSelected #u20075{background-position:left top;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20353{margin-left:57.78%;vertical-align:top;width:108px;position:relative;}#buttonu20046{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu19915.ButtonSelected,#buttonu20046:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u20047{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/envelope-2679338_1920-u20047-fr.jpg?crc=4018908646") no-repeat center bottom;background-size:cover;}#buttonu20046:hover #u20047{background-position:center bottom;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu20046.ButtonSelected #u20047{background-position:center bottom;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20332,#u20370{margin-top:1px;position:relative;margin-left:57.78%;vertical-align:top;width:108px;}#buttonu19800{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u19801{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/sticker-u19801-fr.jpg?crc=509278434") no-repeat center center;background-size:cover;}#buttonu19915.ButtonSelected #u19917,#buttonu19800:hover #u19801{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20379{margin-top:1px;position:relative;margin-left:58.15%;vertical-align:top;width:108px;}#u20332_states,#u20353_states,#u20370_states,#u20379_states{width:108px;background-color:transparent;background-repeat:no-repeat;float:left;background-position:0px 0px;height:28px;}#buttonu19631{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8.303124999999909px;padding-top:13px;width:270px;height:328.6968750000001px;}#buttonu20073.ButtonSelected,#buttonu19631:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u19632{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180426_122325_korr-u19632-fr.jpg?crc=3763227079") no-repeat center center;background-size:cover;}#buttonu19800.ButtonSelected #u19801,#buttonu19631:hover #u19632{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19923{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:9.409374999997908px;padding-top:13px;width:270px;height:327.5906250000021px;}#buttonu19923:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:328px;}#u19926{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180423_141258_korr-u19926-fr.jpg?crc=4262253073") no-repeat center center;background-size:cover;}#buttonu19631.ButtonSelected #u19632,#buttonu19923:hover #u19926{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20413{position:relative;margin-left:57.41%;vertical-align:top;width:40%;top:-1px;}#buttonu19947{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8.309374999997999px;padding-top:13px;width:270px;height:328.690625000002px;}#buttonu19631.ButtonSelected,#buttonu19947:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u19949{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/ron-dyar-521350-unsplash-u19949-fr.jpg?crc=3986345040") no-repeat right bottom;background-size:cover;}#buttonu19947:hover #u19949{background-position:right bottom;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19947.ButtonSelected #u19949{background-position:right bottom;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20404_states,#u20422_states{background-position:center;float:left;width:100%;background-repeat:no-repeat;background-color:transparent;}#buttonu19631:hover #u20404_states,#buttonu19947:hover #u20422_states{background-repeat:no-repeat;background-position:center;background-color:transparent;}#buttonu19663{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:9.309374999997999px;padding-top:13px;width:270px;height:327.690625000002px;}#buttonu19923.ButtonSelected,#buttonu19663:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:328px;}#u19664{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/sunyu-460812-unsplash-u19664-fr.jpg?crc=16460065") no-repeat center center;background-size:cover;}#buttonu19923.ButtonSelected #u19926,#buttonu19663:hover #u19664{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu20120{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:328px;}#buttonu20120.ButtonSelected{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:328px;}#u20123{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/formular.jpg?crc=3799210080") no-repeat center center;background-size:cover;}#buttonu19663.ButtonSelected #u19664,#buttonu20120:hover #u20123{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20431,#u20464{position:relative;margin-left:57.78%;vertical-align:top;width:40%;top:-1px;}#buttonu19923:hover #u20413_states,#buttonu19663:hover #u20431_states,#buttonu20120:hover #u20464_states{background-position:center;background-color:transparent;background-repeat:no-repeat;margin-bottom:-1px;background-size:100%;}#buttonu19842{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;width:270px;}#buttonu19842:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;}#buttonu19842.ButtonSelected{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;}#u19843{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/durchschreibesatz-u19843-fr.jpg?crc=3882258607") no-repeat center center;background-size:cover;}#buttonu20120.ButtonSelected #u20123,#buttonu19842:hover #u19843{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20473{position:relative;vertical-align:top;width:40%;}#buttonu19714{padding-top:13px;box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;width:270px;position:relative;}#buttonu19947.ButtonSelected,#buttonu19714:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u19716{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180423_142230_korr-u19716-fr.jpg?crc=441518510") no-repeat center center;background-size:cover;}#buttonu19842.ButtonSelected #u19843,#buttonu19714:hover #u19716{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19687{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8.109374999997272px;padding-top:13px;width:270px;height:328.89062500000273px;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u19689{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180423_143014_korr-u19689-fr.jpg?crc=500779426") no-repeat center center;background-size:cover;}#buttonu19714.ButtonSelected #u19716,#buttonu19687:hover #u19689{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20404,#u20482,#u20491{margin-left:57.41%;vertical-align:top;width:40%;position:relative;}#buttonu19972{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:7px;padding-top:13px;width:270px;height:330px;}#buttonu19800.ButtonSelected,#buttonu19972:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u19975{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/postcard-1091283_1920-u19975-fr.jpg?crc=4048491431") no-repeat left center;background-size:cover;}#buttonu19972:hover #u19975{background-position:left center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19972.ButtonSelected #u19975{background-position:left center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20540{margin-top:1px;position:relative;margin-left:57.78%;vertical-align:top;width:40%;}#buttonu20040{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8px;padding-top:13px;width:270px;height:329px;}#buttonu19687.ButtonSelected,#buttonu20040:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#u20043{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/mappen2-u20043-fr.jpg?crc=4095258371") no-repeat right center;background-size:cover;}#buttonu20040:hover #u20043{background-position:right center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu20040.ButtonSelected #u20043{background-position:right center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20549{margin-top:3px;position:relative;margin-left:57.41%;vertical-align:top;width:40%;}#buttonu19866{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:7px;padding-top:13px;width:270px;height:330px;}#buttonu19972.ButtonSelected,#buttonu19866:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#buttonu19866.ButtonSelected{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:330px;}#u19867{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/20180423_141437_korr-u19867-fr.jpg?crc=4253937862") no-repeat center center;background-size:cover;}#buttonu19687.ButtonSelected #u19689,#buttonu19866:hover #u19867{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20558{margin-top:1px;position:relative;margin-left:57.04%;vertical-align:top;width:40%;}#u20071,#u20044,#u19798,#u19611,#u19921,#u19945,#u19661,#u20100,#u19822,#u19712,#u19685,#u19970,#u20020,#u19846,#u19994{background-color:transparent;position:relative;width:270px;border-color:transparent;border-width:0px;}#u19896,#u19914,#u20072,#u20045,#u19799,#u19630,#u19922,#u19946,#u19662,#u20119,#u19841,#u19713,#u19686,#u19971,#u20039,#u19865,#u19995{background-color:transparent;margin-right:-10000px;position:relative;width:270px;border-color:transparent;border-width:0px;}#buttonu19996{box-shadow:6px 6px 8px rgba(0,0,0,0.2);background-color:#FFFFFF;margin-right:-10000px;border-width:0px;border-color:transparent;position:relative;padding-bottom:8px;padding-top:13px;width:270px;height:329px;}#buttonu19915::before,#buttonu20073::before,#buttonu20046::before,#buttonu19800::before,#buttonu19631::before,#buttonu19923::before,#buttonu19947::before,#buttonu19663::before,#buttonu20120::before,#buttonu19842::before,#buttonu19714::before,#buttonu19687::before,#buttonu19972::before,#buttonu20040::before,#buttonu19866::before,#buttonu19996::before{bottom:0px;left:0px;right:0px;position:absolute;box-shadow:inset 0px 0px 5px rgba(0,0,0,0.05), inset 0px 0px 5px rgba(0,0,0,0.05);top:0px;content:"";pointer-events:none;}#buttonu20040.ButtonSelected,#buttonu19996:hover{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#buttonu19996.ButtonSelected{margin-top:0px;margin-right:-10000px;width:270px;margin-bottom:0px;min-height:0px;height:329px;}#pu19917,#pu20075,#pu20047,#pu19801,#pu19632,#pu19926,#pu19949,#pu19664,#pu20123,#pu19843,#pu19716,#pu19689,#pu19975,#pu20043,#pu19867,#pu19999{width:96.67%;}#u19999{left:4.99%;margin-right:-10000px;position:relative;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";width:248px;border-radius:50%;height:248px;background:transparent url("../images/rainier-ridao-569546-unsplash-u19999-fr.jpg?crc=366350487") no-repeat center center;background-size:cover;}#buttonu19866.ButtonSelected #u19867,#buttonu19996:hover #u19999{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#buttonu19996.ButtonSelected #u19999{background-position:center center;background-repeat:no-repeat;width:248px;min-height:0px;height:248px;margin:0px -10000px 0px 0%;background-size:cover;}#u20076,#u20049,#u19803,#u19634,#u19924,#u19948,#u19666,#u20121,#u19845,#u19717,#u19688,#u19974,#u20041,#u19869,#u19998{margin-top:23px;left:-2.69%;margin-right:-10000px;position:relative;vertical-align:top;width:116px;}#u20076_states,#u20049_states,#u19803_states,#u19634_states,#u19924_states,#u19948_states,#u19666_states,#u20121_states,#u19845_states,#u19717_states,#u19688_states,#u19974_states,#u20041_states,#u19869_states,#u19998_states{width:116px;background-color:transparent;background-repeat:no-repeat;float:left;background-position:7px 7px;height:46px;}#buttonu19915:hover #u19918_states,#buttonu19915:hover #u20332_states,#buttonu20073:hover #u20076_states,#buttonu20073:hover #u20353_states,#buttonu20046:hover #u20049_states,#buttonu20046:hover #u20370_states,#buttonu19800:hover #u19803_states,#buttonu19800:hover #u20379_states,#buttonu19631:hover #u19634_states,#buttonu19923:hover #u19924_states,#buttonu19947:hover #u19948_states,#buttonu19663:hover #u19666_states,#buttonu20120:hover #u20121_states,#buttonu19842:hover #u19845_states,#buttonu19714:hover #u19717_states,#buttonu19687:hover #u19688_states,#buttonu19972:hover #u19974_states,#buttonu20040:hover #u20041_states,#buttonu19866:hover #u19869_states,#buttonu19996:hover #u19998_states{background-position:0px 0px;background-color:transparent;background-repeat:no-repeat;}#u19916-4,#u20074-4,#u20048-4,#u19802-4,#u19633-4,#u19925-4,#u19950-4,#u19665-4,#u20122-4,#u19844-4,#u19715-4,#u19690-4,#u19973-4,#u20042-4,#u19868-4,#u19997-4{margin-top:15px;display:block;position:relative;margin-left:4.45%;vertical-align:top;}#u20422,#u20567{margin-left:57.78%;vertical-align:top;width:40%;position:relative;}#u20413_states,#u20431_states,#u20464_states,#u20473_states,#u20482_states,#u20491_states,#u20540_states,#u20549_states,#u20558_states,#u20567_states{background-position:center;float:left;width:100%;background-repeat:no-repeat;background-color:transparent;background-size:97.22222222222221%;}#u20404_states .fluid_height_spacer,#u20413_states .fluid_height_spacer,#u20422_states .fluid_height_spacer,#u20431_states .fluid_height_spacer,#u20464_states .fluid_height_spacer,#u20473_states .fluid_height_spacer,#u20482_states .fluid_height_spacer,#u20491_states .fluid_height_spacer,#u20540_states .fluid_height_spacer,#u20549_states .fluid_height_spacer,#u20558_states .fluid_height_spacer,#u20567_states .fluid_height_spacer{padding-bottom:25.925925925925924%;}#buttonu19842:hover #u20473_states,#buttonu19714:hover #u20482_states,#buttonu19687:hover #u20491_states,#buttonu19972:hover #u20540_states,#buttonu20040:hover #u20549_states,#buttonu19866:hover #u20558_states,#buttonu19996:hover #u20567_states{background-repeat:no-repeat;background-position:center;background-color:transparent;background-size:100%;}#u19609{left:0px;background-repeat:no-repeat;margin-right:-10000px;position:relative;background-color:transparent;filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";background-position:left center;background-size:cover;}#u19919-5{display:block;position:relative;vertical-align:top;}#widgetu19758{z-index:48;position:relative;}#widgetu19758_position_content{margin-left:0%;width:100%;}#pwidgetu19783{z-index:75;}#widgetu19783{margin-top:1px;background-color:transparent;margin-right:-10000px;z-index:75;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#pu19785-4{z-index:76;}#u19785-4{color:#666666;background-color:transparent;line-height:14px;margin-right:-10000px;z-index:76;position:relative;text-align:left;min-height:20px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19786-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:84;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19784-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:80;border-style:solid;position:relative;padding:6px 0px;}#widgetu19783.non-empty-st #u19784-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19783:hover #u19784-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19783.focus-st #u19784-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19783.non-empty-st #u19784-4 *{color:#666666;font-style:normal;}#widgetu19783:hover #u19784-4 *{color:#666666;font-style:normal;}#widgetu19783.focus-st #u19784-4 *{color:#666666;font-style:normal;}#widgetu19770{background-color:transparent;margin-right:-10000px;z-index:49;padding-bottom:0px;border-width:0px;border-color:transparent;margin-bottom:-1px;position:relative;}#pu19771-4{z-index:50;}#u19771-4{color:#666666;background-color:transparent;margin-right:-10000px;border-width:0px;border-color:transparent;line-height:14px;min-height:20px;position:relative;z-index:50;text-align:left;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19772-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;font-weight:normal;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:58;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19773-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:54;border-style:solid;position:relative;padding:6px 0px;}#widgetu19770.non-empty-st #u19773-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19770:hover #u19773-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19770.focus-st #u19773-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19770.non-empty-st #u19773-4 *{color:#666666;font-style:normal;}#widgetu19770:hover #u19773-4 *{color:#666666;font-style:normal;}#widgetu19770.focus-st #u19773-4 *{color:#666666;font-style:normal;}#pwidgetu19779{margin-top:18px;z-index:88;}#widgetu19779{background-color:transparent;margin-right:-10000px;z-index:88;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#pu19781-4{z-index:89;}#u19781-4{color:#666666;background-color:transparent;line-height:14px;margin-right:-10000px;z-index:89;position:relative;text-align:left;min-height:20px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19780-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:97;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19782-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:93;border-style:solid;position:relative;padding:6px 0px;}#widgetu19779.non-empty-st #u19782-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19779:hover #u19782-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19779.focus-st #u19782-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19779.non-empty-st #u19782-4 *{color:#666666;font-style:normal;}#widgetu19779:hover #u19782-4 *{color:#666666;font-style:normal;}#widgetu19779.focus-st #u19782-4 *{color:#666666;font-style:normal;}#widgetu19765{background-color:transparent;margin-right:-10000px;z-index:101;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#pu19766-4{z-index:102;}#u19766-4{color:#666666;background-color:transparent;line-height:14px;margin-right:-10000px;z-index:102;position:relative;text-align:left;min-height:20px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19767-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:110;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19768-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:106;border-style:solid;position:relative;padding:6px 0px;}#widgetu19765.non-empty-st #u19768-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19765:hover #u19768-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19765.focus-st #u19768-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19765.non-empty-st #u19768-4 *{color:#666666;font-style:normal;}#widgetu19765:hover #u19768-4 *{color:#666666;font-style:normal;}#widgetu19765.focus-st #u19768-4 *{color:#666666;font-style:normal;}#pwidgetu19787{margin-top:17px;z-index:143;}#widgetu19787{background-color:transparent;margin-right:-10000px;z-index:143;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#widgetu19770.fld-err-st,#widgetu19779.fld-err-st,#widgetu19765.fld-err-st,#widgetu19787.fld-err-st{background-color:transparent;min-height:0px;border-radius:0px;margin:0px -10000px -1px 0%;}#pu19788-4{z-index:144;}#u19788-4{color:#666666;background-color:transparent;line-height:14px;margin-right:-10000px;z-index:144;position:relative;text-align:left;min-height:20px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19790-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:152;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19789-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:148;border-style:solid;position:relative;padding:6px 0px;}#widgetu19787.non-empty-st #u19789-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19787:hover #u19789-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19787.focus-st #u19789-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19787.non-empty-st #u19789-4 *{color:#666666;font-style:normal;}#widgetu19787:hover #u19789-4 *{color:#666666;font-style:normal;}#widgetu19787.focus-st #u19789-4 *{color:#6B6B6B;font-style:normal;}#widgetu19775{margin-top:1px;background-color:transparent;margin-right:-10000px;z-index:62;position:relative;border-color:transparent;margin-bottom:-1px;border-width:0px;}#widgetu19783.fld-err-st,#widgetu19775.fld-err-st{background-color:transparent;min-height:0px;border-radius:0px;margin:1px -10000px -1px 0%;}#pu19776-4{z-index:63;}#u19776-4{color:#666666;background-color:transparent;margin-right:-10000px;border-width:0px;border-color:transparent;line-height:14px;min-height:20px;position:relative;z-index:63;text-align:left;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19783.fld-err-st #u19785-4,#widgetu19779.fld-err-st #u19781-4,#widgetu19765.fld-err-st #u19766-4,#widgetu19787.fld-err-st #u19788-4,#widgetu19775.fld-err-st #u19776-4{padding-bottom:0px;min-height:20px;padding-top:0px;margin:0px -10000px 0px 0%;}#u19778-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:71;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#u19777-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:16px;z-index:67;border-style:solid;position:relative;padding:6px 0px;}#widgetu19775.non-empty-st #u19777-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19775:hover #u19777-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19775.focus-st #u19777-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19783.fld-err-st #u19784-4,#widgetu19770.fld-err-st #u19773-4,#widgetu19779.fld-err-st #u19782-4,#widgetu19765.fld-err-st #u19768-4,#widgetu19787.fld-err-st #u19789-4,#widgetu19775.fld-err-st #u19777-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#D7244C;min-height:16px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19775.non-empty-st #u19777-4 *{color:#666666;font-style:normal;}#widgetu19775:hover #u19777-4 *{color:#666666;font-style:normal;}#widgetu19775.focus-st #u19777-4 *{color:#666666;font-style:normal;}#widgetu19783_input,#widgetu19770_input,#widgetu19779_input,#widgetu19765_input,#widgetu19787_input,#widgetu19775_input{color:#B5B5B5;min-height:16px;position:absolute;font-style:italic;width:100%;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19783_prompt,#widgetu19770_prompt,#widgetu19779_prompt,#widgetu19765_prompt,#widgetu19787_prompt,#widgetu19775_prompt{color:#B5B5B5;position:absolute;font-style:italic;width:100%;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;overflow:hidden;height:16px;}#widgetu19760{margin-top:17px;background-color:transparent;z-index:130;position:relative;border-color:transparent;border-width:0px;}#widgetu19760.fld-err-st{background-color:transparent;min-height:0px;border-radius:0px;margin:17px 0px 0px 0%;}#pu19761-4{z-index:131;}#u19761-4{color:#666666;background-color:transparent;margin-right:-10000px;border-width:0px;border-color:transparent;line-height:14px;min-height:20px;position:relative;z-index:131;text-align:left;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19770.fld-err-st #u19771-4,#widgetu19760.fld-err-st #u19761-4{padding-bottom:0px;border-width:0px;border-color:transparent;min-height:20px;padding-top:0px;margin:0px -10000px 0px 0%;}#widgetu19783.fld-err-st #u19785-4 p,#widgetu19783.fld-err-st #u19785-4 span,#widgetu19770.fld-err-st #u19771-4 p,#widgetu19770.fld-err-st #u19771-4 span,#widgetu19779.fld-err-st #u19781-4 p,#widgetu19779.fld-err-st #u19781-4 span,#widgetu19765.fld-err-st #u19766-4 p,#widgetu19765.fld-err-st #u19766-4 span,#widgetu19787.fld-err-st #u19788-4 p,#widgetu19787.fld-err-st #u19788-4 span,#widgetu19775.fld-err-st #u19776-4 p,#widgetu19775.fld-err-st #u19776-4 span,#widgetu19760.fld-err-st #u19761-4 p,#widgetu19760.fld-err-st #u19761-4 span{color:#D7244C;}#u19763-4{color:#999999;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";line-height:14px;z-index:139;text-align:right;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19779.fld-err-st #u19780-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19787.fld-err-st #u19790-4,#widgetu19775.fld-err-st #u19778-4,#widgetu19760.fld-err-st #u19763-4{opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";padding-bottom:0px;filter:alpha(opacity=100);padding-top:0px;margin:0px -10000px 0px 0%;}#u19762-4{background-color:#F4F4F4;border-width:1px;border-color:#B5B5B5;top:-1px;margin-bottom:-1px;min-height:114px;z-index:135;border-style:solid;position:relative;padding:6px 0px;}#widgetu19760.non-empty-st #u19762-4{border-color:#666666;background-color:#FFFFFF;}#widgetu19760:hover #u19762-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:114px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19760.focus-st #u19762-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#666666;min-height:114px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19760.fld-err-st #u19762-4{background-color:#FFFFFF;padding-bottom:6px;border-color:#D7244C;min-height:114px;padding-top:6px;margin:0px 0px -1px 0%;}#widgetu19760.non-empty-st #u19762-4 *{color:#666666;font-style:normal;}#widgetu19760:hover #u19762-4 *{color:#666666;font-style:normal;}#widgetu19760.focus-st #u19762-4 *{color:#666666;font-style:normal;}#widgetu19783.fld-err-st #u19786-4 p,#widgetu19783.fld-err-st #u19784-4 *,#widgetu19770.fld-err-st #u19772-4 p,#widgetu19770.fld-err-st #u19773-4 *,#widgetu19779.fld-err-st #u19780-4 p,#widgetu19779.fld-err-st #u19782-4 *,#widgetu19765.fld-err-st #u19767-4 p,#widgetu19765.fld-err-st #u19768-4 *,#widgetu19787.fld-err-st #u19790-4 p,#widgetu19787.fld-err-st #u19789-4 *,#widgetu19775.fld-err-st #u19778-4 p,#widgetu19775.fld-err-st #u19777-4 *,#widgetu19760.fld-err-st #u19763-4 p,#widgetu19760.fld-err-st #u19762-4 *{color:#D7244C;font-style:italic;}#u19784-3,#u19773-3,#u19782-3,#u19768-3,#u19789-3,#u19777-3,#u19762-3{color:#B5B5B5;margin-right:6px;position:relative;margin-left:6px;font-style:italic;line-height:14px;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19760_input{color:#B5B5B5;min-height:114px;position:absolute;font-style:italic;width:100%;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;}#widgetu19760_prompt{color:#B5B5B5;position:absolute;font-style:italic;width:100%;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;overflow:hidden;height:114px;}.js body,#widgetu19783.non-empty-st #widgetu19783_prompt,#widgetu19783.focus-st #widgetu19783_prompt,#widgetu19770.non-empty-st #widgetu19770_prompt,#widgetu19770.focus-st #widgetu19770_prompt,#widgetu19779.non-empty-st #widgetu19779_prompt,#widgetu19779.focus-st #widgetu19779_prompt,#widgetu19765.non-empty-st #widgetu19765_prompt,#widgetu19765.focus-st #widgetu19765_prompt,#widgetu19787.non-empty-st #widgetu19787_prompt,#widgetu19787.focus-st #widgetu19787_prompt,#widgetu19775.non-empty-st #widgetu19775_prompt,#widgetu19775.focus-st #widgetu19775_prompt,#widgetu19760.non-empty-st #widgetu19760_prompt,#widgetu19760.focus-st #widgetu19760_prompt{visibility:hidden;}#pu19759-4{z-index:114;}#u19759-4{background-color:transparent;margin-right:-10000px;opacity:0;position:relative;line-height:14px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";padding-top:4px;filter:alpha(opacity=0);z-index:114;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;}#widgetu19758.frm-sub-st #u19759-4 p{color:#999999;font-style:italic;line-height:1;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-size:14px;}#u19769-4{color:#FF0000;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;line-height:14px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";padding-top:4px;filter:alpha(opacity=0);z-index:118;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;}#widgetu19758.frm-sub-st #u19759-4,#widgetu19758.frm-subm-err-st #u19769-4{filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";}#widgetu19758.frm-subm-err-st #u19769-4 p{color:#D7244C;font-style:italic;line-height:1;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-size:14px;}#u19764-4{color:#00FF00;background-color:transparent;margin-right:-10000px;opacity:0;position:relative;line-height:12px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";padding-top:4px;filter:alpha(opacity=0);z-index:122;font-size:12px;font-family:Palatino, Palatino Linotype, Georgia, Times, Times New Roman, serif;min-height:26px;}#widgetu19758.frm-subm-ok-st #u19764-4{filter:alpha(opacity=100);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";min-height:30px;}#widgetu19758.frm-subm-ok-st #u19764-4 p{color:#999999;font-style:italic;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;font-size:14px;}#u19774-4{color:#FFFFFF;background-color:#666666;margin-right:-10000px;border-radius:2px;border-width:1px;border-color:#666666;line-height:14px;position:relative;margin-top:-1px;border-style:solid;text-align:center;font-family:Helvetica, Helvetica Neue, Arial, sans-serif;height:22px;padding:8px 0px 0px;}#u19774-4:hover{margin-top:-1px;background-color:#141414;margin-right:-10000px;padding-bottom:0px;padding-top:8px;margin-left:0%;border-color:#141414;min-height:0px;height:22px;}#u19774-4:active{margin-top:-1px;background-color:#141414;margin-right:-10000px;padding-bottom:0px;padding-top:8px;margin-left:0%;border-color:#141414;min-height:0px;height:22px;}#start,#kontakt,#anfahrt{left:0%;position:relative;}#u19610{border-color:transparent;background-color:transparent;z-index:157;border-width:0px;}#u19610-bw{margin-left:0px;left:0px;z-index:157;}#pamphletu19736{position:fixed;top:20px;}#u19748{box-shadow:0px 0px 8px rgba(255,255,255,0.5),0px 0px 8px rgba(255,255,255,0.5)/* glow */, + 6px 6px 8px rgba(0,0,0,0.5)/* drop shadow*/;background-color:#FFFFFF;border-width:0px;border-color:transparent;padding-bottom:7px;border-radius:5px;height:231px;}#u19749{background-color:transparent;margin-right:-10000px;padding-bottom:0px;border-width:0px;width:142px;border-color:transparent;position:relative;}#u19749_position_content{margin-bottom:-5px;width:100%;}#u19755-4{margin-top:7px;position:relative;}#u19753-4,#u19754-4,#u19751-4{margin-top:6px;position:relative;}#u19752-4{margin-top:5px;position:relative;}#u19750-4_img,#u19753-4_img,#u19755-4_img,#u19754-4_img,#u19751-4_img,#u19752-4_img{vertical-align:top;display:block;}#u19739{margin-right:-10000px;position:relative;}#u19740{height:35px;background-color:#000000;padding-bottom:15px;border-width:0px;border-color:transparent;width:50px;}#u19740:hover{margin-top:0px;background-color:#008089;margin-right:0px;border-width:0px;border-color:transparent;width:50px;margin-bottom:0px;min-height:0px;height:35px;}#u19740.PamphletThumbSelected{margin-top:0px;background-color:#000000;margin-right:0px;width:50px;margin-bottom:0px;min-height:0px;border-radius:0px;height:35px;}#u19741{margin-top:14px;background-color:transparent;margin-right:-10000px;position:relative;left:18%;border-color:transparent;width:60%;border-width:0px;}#u19743{height:3px;background-color:#FFFFFF;width:100%;position:relative;}#u19744,#u19742{margin-top:6px;background-color:#FFFFFF;position:relative;width:100%;height:3px;}.SSFirstButton,.SSPreviousButton,.SSNextButton,.SSLastButton,.SSSlideLink,.SSCloseButton,.PamphletWidget .ThumbGroup .Thumb,.PamphletNextButton,.PamphletPrevButton,.PamphletCloseButton{cursor:pointer;}#u19711{background-color:#008089;z-index:2;}#u19711_align_to_page{margin-left:auto;margin-right:auto;position:relative;}#u19711-bw{z-index:2;}.html{background-color:#FFFFFF;}#produkte,#u19750-4,body{position:relative;}.verticalspacer{min-height:1px;}@media (min-width: 1001px), print{#muse_css_mq{background-color:#FFFFFF;}#bp_infinity.active{display:block;}#page{min-height:4902px;max-width:1200px;}#pu19797-4{z-index:158;margin-top:-6px;width:84.09%;}#u19797-4{z-index:158;position:relative;width:97px;left:0%;margin:145px -10000px -4px 7.135777987966923%;}#u19710-4{z-index:170;position:relative;width:147px;left:12.79%;margin:145px -10000px -4px 7.135777987966923%;}#u20070-4{z-index:174;position:relative;width:85px;left:30.33%;margin:145px -10000px -5px 7.135777987966923%;}#u20068{z-index:182;margin-right:-10000px;margin-left:59.47%;}#u20098-4{z-index:162;position:relative;width:86px;left:65.81%;margin:145px -10000px -4px 7.135777987966923%;}#u19969-4{z-index:166;position:relative;width:85px;left:77.31%;margin:145px -10000px -4px 7.135777987966923%;}#u20099-4{z-index:178;position:relative;width:117px;left:88.9%;margin:145px -10000px -5px 7.135777987966923%;}#u19797-4_img,#u19710-4_img,#u20070-4_img,#u20098-4_img,#u19969-4_img,#u20099-4_img{display:block;vertical-align:top;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:1200px;height:600px;}#u19640popup{width:96.67%;left:1.67%;}#u19643-6,#u19642-4,#u19641-8{width:100.52%;}#u20095{margin-top:461px;left:48.51%;}#produkte{margin-top:32px;left:0%;margin-left:0%;}#u20018-6{width:65%;margin-left:17.5%;left:7px;}#pu19896{z-index:184;margin-top:38px;width:100%;left:0%;margin-left:0%;}#u19896{z-index:184;}#u19914{z-index:185;}#buttonu19915{z-index:186;}#start,#buttonu19915:hover{margin-left:0%;}#pu19917,#u19917{z-index:187;}#u19918{z-index:193;}#u19918_states{background-image:url("../images/u19918_states.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r.png?crc=162795771");}#u19916-4{z-index:188;}#u20332{z-index:196;}#u20332_states{background-image:url("../images/u20332_states.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r.png?crc=450819133");}#u20071{z-index:217;margin-right:-10000px;left:25.84%;}#u20072{z-index:218;}#buttonu20073{z-index:219;height:328.8937500000012px;padding-bottom:8.106249999998795px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:0%;}#pu20075,#u20075{z-index:220;}#u20076{z-index:226;}#u20076_states{background-image:url("../images/u20076_states.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r.png?crc=4066690632");}#u20074-4{z-index:221;}#u20353{z-index:229;}#u20353_states{background-image:url("../images/u20353_states.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r.png?crc=450819133");}#u20044{z-index:203;margin-right:-10000px;left:51.67%;}#u20045{z-index:204;}#buttonu20046{z-index:205;height:329.9937500000011px;padding-bottom:7.006249999998886px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:0%;}#pu20047,#u20047{z-index:206;}#u20049{z-index:212;}#u20049_states{background-image:url("../images/u20049_states.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r.png?crc=4066690632");}#u20048-4{z-index:207;}#u20370{z-index:215;}#u20370_states{background-image:url("../images/u20370_states.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r.png?crc=450819133");}#u19798{z-index:231;margin-right:-10000px;left:77.5%;}#u19799{z-index:232;}#buttonu19800{z-index:233;height:329.9937500000011px;padding-bottom:7.006249999998886px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:0%;}#pu19801,#u19801{z-index:234;}#u19803{z-index:240;}#u19803_states{background-image:url("../images/u19803_states.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r.png?crc=4066690632");}#u19802-4{z-index:235;}#u20379{z-index:243;}#u20379_states{background-image:url("../images/u20379_states.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r.png?crc=450819133");}#pu19611{z-index:245;margin-top:85px;width:100%;left:0%;margin-left:0%;}#u19611{z-index:245;margin-right:-10000px;margin-top:1px;}#u19630{z-index:246;}#buttonu19631{z-index:247;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:0%;}#pu19632,#u19632{z-index:248;}#u19634{z-index:254;}#u19634_states{background-image:url("../images/u19634_states.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r.png?crc=4066690632");}#u19633-4{z-index:249;}#u20404{z-index:257;}#u20404_states{background-image:url("../images/u20404_states.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r.png?crc=450819133");background-size:100%;}#u19921{z-index:259;margin-right:-10000px;left:25.84%;}#u19922{z-index:260;}#buttonu19923{z-index:261;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:0%;}#pu19926,#u19926{z-index:262;}#u19924{z-index:268;}#u19924_states{background-image:url("../images/u19924_states.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r.png?crc=4066690632");}#u19925-4{z-index:263;}#u20413{z-index:271;}#u20413_states{background-image:url("../images/u20413_states.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r.png?crc=450819133");}#u19945{z-index:273;margin-right:-10000px;margin-top:1px;left:51.67%;}#u19946{z-index:274;}#buttonu19947{z-index:275;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:0%;}#pu19949,#u19949{z-index:276;}#u19948{z-index:282;}#u19948_states{background-image:url("../images/u19948_states.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r.png?crc=4066690632");}#u19950-4{z-index:277;}#u20422{z-index:285;}#u20422_states{background-image:url("../images/u20422_states.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r.png?crc=450819133");background-size:100%;}#u19661{z-index:287;margin-right:-10000px;margin-top:1px;left:77.5%;}#u19662{z-index:288;}#buttonu19663{z-index:289;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:0%;}#pu19664,#u19664{z-index:290;}#u19666{z-index:296;}#u19666_states{background-image:url("../images/u19666_states.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r.png?crc=4066690632");}#u19665-4{z-index:291;}#u20431{z-index:299;}#u20431_states{background-image:url("../images/u20431_states.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r.png?crc=450819133");}#pu20100{z-index:301;margin-top:87px;width:100%;left:0%;margin-left:0%;}#u20100{z-index:301;margin-right:-10000px;}#u20119{z-index:302;}#buttonu20120{z-index:303;height:327.8968749999999px;padding-bottom:9.103125000000091px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:0%;}#pu20123,#u20123{z-index:304;}#u20121{z-index:310;}#u20121_states{background-image:url("../images/u20121_states.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r.png?crc=4066690632");}#u20122-4{z-index:305;}#u20464{z-index:313;}#u20464_states{background-image:url("../images/u20464_states.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r.png?crc=450819133");}#u19822{z-index:315;margin-right:-10000px;left:25.84%;}#u19841{z-index:316;}#buttonu19842{z-index:317;height:327.79062500000236px;padding-top:13px;padding-bottom:9.209374999997635px;}#buttonu19842:hover{height:328px;margin-left:0%;}#buttonu19842.ButtonSelected{height:328px;margin-left:0%;}#pu19843,#u19843{z-index:318;}#u19845{z-index:324;}#u19845_states{background-image:url("../images/u19845_states.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r.png?crc=4066690632");}#u19844-4{z-index:319;}#u20473{z-index:327;margin-top:2px;margin-left:57.41%;}#u20473_states{background-image:url("../images/u20473_states.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r.png?crc=450819133");}#u19712{z-index:329;margin-right:-10000px;left:51.67%;}#u19713{z-index:330;}#buttonu19714{z-index:331;height:328.8906250000023px;padding-bottom:8.109374999997726px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:0%;}#pu19716,#u19716{z-index:332;}#u19717{z-index:338;}#u19717_states{background-image:url("../images/u19717_states.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r.png?crc=4066690632");}#u19715-4{z-index:333;}#u20482{z-index:341;}#u20482_states{background-image:url("../images/u20482_states.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r.png?crc=450819133");}#u19685{z-index:343;margin-right:-10000px;left:77.5%;}#u19686{z-index:344;}#buttonu19687{z-index:345;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:0%;}#pu19689,#u19689{z-index:346;}#u19688{z-index:352;}#u19688_states{background-image:url("../images/u19688_states.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r.png?crc=4066690632");}#u19690-4{z-index:347;}#u20491{z-index:355;}#u20491_states{background-image:url("../images/u20491_states.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r.png?crc=450819133");}#pu19970{z-index:357;margin-top:86px;width:100%;left:0%;margin-left:0%;}#u19970{z-index:357;margin-right:-10000px;}#u19971{z-index:358;}#buttonu19972{z-index:359;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:0%;}#pu19975,#u19975{z-index:360;}#u19974{z-index:366;}#u19974_states{background-image:url("../images/u19974_states.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r.png?crc=4066690632");}#u19973-4{z-index:361;}#u20540{z-index:369;}#u20540_states{background-image:url("../images/u20540_states.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r.png?crc=450819133");}#u20020{z-index:371;margin-right:-10000px;left:25.84%;}#u20039{z-index:372;}#buttonu20040{z-index:373;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:0%;}#pu20043,#u20043{z-index:374;}#u20041{z-index:380;}#u20041_states{background-image:url("../images/u20041_states.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r.png?crc=4066690632");}#u20042-4{z-index:375;}#u20549{z-index:383;}#u20549_states{background-image:url("../images/u20549_states.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r.png?crc=450819133");}#u19846{z-index:385;margin-right:-10000px;left:51.67%;}#u19865{z-index:386;}#buttonu19866{z-index:387;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:0%;}#pu19867,#u19867{z-index:388;}#u19869{z-index:394;}#u19869_states{background-image:url("../images/u19869_states.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r.png?crc=4066690632");}#u19868-4{z-index:389;}#u20558{z-index:397;}#u20558_states{background-image:url("../images/u20558_states.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r.png?crc=450819133");}#u19994{z-index:399;margin-right:-10000px;left:77.5%;}#u19995{z-index:400;}#buttonu19996{z-index:401;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:0%;}#buttonu19996.ButtonSelected{margin-left:0%;}#pu19999,#u19999{z-index:402;}#u19998{z-index:408;}#u19998_states{background-image:url("../images/u19998_states.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r.png?crc=4066690632");}#u19997-4{z-index:403;}#u20567{z-index:411;}#u20567_states{background-image:url("../images/u20567_states.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r.png?crc=450819133");}#u21531-8{z-index:442;display:block;vertical-align:top;margin-top:60px;position:relative;width:96.67%;left:0%;margin-left:1.67%;}#pu21563-5{z-index:450;margin-top:11px;width:63.17%;left:0%;margin-left:20.09%;}#u21563-5{z-index:450;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:48.95%;left:-0.14%;}#u21569-5{z-index:455;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:48.95%;left:52.51%;}#u21563-5_img,#u21569-5_img{display:block;vertical-align:top;width:100%;}#kontakt{margin-top:114px;margin-left:0%;}#pu20125-24{z-index:413;margin-top:21px;width:98.34%;}#u20125-24{z-index:413;display:block;vertical-align:top;position:relative;width:39.07%;left:61.62%;margin:-8px -10000px -8px 0%;}#u19609{z-index:437;background-image:url("../images/fotolia_56863820_m.jpg?crc=143243195");width:62.29%;margin-left:0px;}#u19609 .fluid_height_spacer{padding-bottom:69.38775510204081%;}#u21525-4{z-index:438;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:377px;left:37.38%;margin-left:0%;}#u19919-5{z-index:198;margin-top:34px;width:100%;left:0%;margin-left:0%;}#widgetu19758{padding-bottom:0px;margin-top:35px;width:96.75%;margin-left:1.63%;left:1px;}#widgetu19783{width:47.81%;left:-0.09%;}#u19785-4{width:91.2%;}#u19786-4{min-height:20px;width:38.15%;left:61.86%;}#u19784-4{width:99.64%;}#widgetu19783:hover #u19784-4{width:99.64%;}#widgetu19783.focus-st #u19784-4{width:99.64%;}#widgetu19770{width:47.81%;left:52.29%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:91.2%;}#u19772-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.64%;}#widgetu19770:hover #u19773-4{width:99.64%;}#widgetu19770.focus-st #u19773-4{width:99.64%;}#widgetu19779{width:50.56%;left:-0.09%;}#pu19781-4{width:99.83%;margin-left:0.18%;}#u19781-4{width:68.95%;}#u19780-4{min-height:20px;width:28.84%;left:71.17%;}#u19782-4{width:94.21%;}#widgetu19779:hover #u19782-4{width:94.21%;}#widgetu19779.focus-st #u19782-4{width:94.21%;}#widgetu19765{width:47.81%;left:52.29%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:91.2%;}#u19767-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19770.fld-err-st #u19773-4,#u19768-4{width:99.64%;}#widgetu19765:hover #u19768-4{width:99.64%;}#widgetu19765.focus-st #u19768-4{width:99.64%;}#pstart,#pslideshowu19635,#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:100%;}#widgetu19787{width:50.56%;left:-0.09%;}#widgetu19779.fld-err-st,#widgetu19787.fld-err-st{width:50.56%;}#pu19788-4{width:99.66%;margin-left:0.35%;}#u19788-4{width:69.06%;}#widgetu19787.fld-err-st #u19788-4{width:69.06%;}#u19790-4{min-height:20px;width:28.89%;left:71.12%;}#widgetu19787.fld-err-st #u19790-4{min-height:20px;width:28.89%;}#widgetu19779.fld-err-st #u19782-4,#u19789-4{width:94.21%;}#widgetu19787:hover #u19789-4{width:94.21%;}#widgetu19787.focus-st #u19789-4{width:94.21%;}#widgetu19787.fld-err-st #u19789-4{width:94.21%;}#widgetu19775{width:47.81%;left:52.29%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19765.fld-err-st,#widgetu19775.fld-err-st{width:47.81%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:79.82%;margin-left:0.19%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:91.2%;}#widgetu19775.fld-err-st #u19776-4{width:91.2%;}#u19778-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:20px;width:38.15%;}#widgetu19765.fld-err-st #u19768-4,#u19777-4{width:99.64%;}#widgetu19775:hover #u19777-4{width:99.64%;}#widgetu19775.focus-st #u19777-4{width:99.64%;}#widgetu19775.fld-err-st #u19777-4{width:99.64%;}#widgetu19760{width:100.09%;left:-0.09%;}#widgetu19760.fld-err-st{width:100.09%;}#pu19761-4{width:50.44%;margin-left:0.09%;}#widgetu19779.fld-err-st #u19781-4,#u19761-4{width:68.95%;}#widgetu19760.fld-err-st #u19761-4{width:68.95%;}#u19763-4{min-height:20px;width:28.84%;left:71.17%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19760.fld-err-st #u19763-4{min-height:20px;width:28.84%;}#u19762-4{width:99.83%;}#widgetu19760:hover #u19762-4{width:99.83%;}#widgetu19760.focus-st #u19762-4{width:99.83%;}#widgetu19760.fld-err-st #u19762-4{width:99.83%;}#pu19759-4{margin-top:61px;width:38.16%;margin-left:42.99%;}#u19759-4{min-height:26px;width:55.54%;left:44.47%;}#u19769-4{min-height:26px;width:55.54%;left:44.47%;}#widgetu19758.frm-sub-st #u19759-4,#widgetu19758.frm-subm-err-st #u19769-4{min-height:30px;}#u19764-4{width:55.54%;left:44.47%;}#u19774-4{margin-bottom:-1px;width:38.15%;left:-0.23%;}#u19774-4:hover{margin-bottom:-1px;width:38.15%;}#u19774-4:active{margin-bottom:-1px;width:38.15%;}#anfahrt{margin-top:116px;margin-left:0%;}#u21795-6{z-index:460;display:block;vertical-align:top;position:relative;margin-left:50%;left:-341px;}#u19610{height:600px;}#u19610-bw{margin-top:2px;height:600px;}#pamphletu19736{z-index:466;right:20px;width:4.17%;max-width:50px;}#u19747{width:159px;height:0px;padding-bottom:238px;position:relative;}#u19747popup{z-index:467;}#u19748{z-index:468;width:159px;position:fixed;top:20px;right:71px;}#u19749{z-index:469;left:5.04%;}#u19750-4{z-index:470;}#u19753-4{z-index:474;}#u19755-4{z-index:478;}#u19754-4{z-index:482;}#u19751-4{z-index:486;}#u19752-4{z-index:490;}#u19747-wrapper{position:fixed;top:20px;right:230px;width:159px;}#u19739{z-index:494;padding-bottom:50px;width:100%;}#u19740{position:fixed;top:20px;right:20px;}#u19740:hover{margin-left:0px;}#u19740.PamphletThumbSelected{margin-left:0px;}#u19741{z-index:496;}#u19743{z-index:497;}#u19744{z-index:498;}#u19742{z-index:499;}.css_verticalspacer .verticalspacer{height:calc(100vh - 5202px);}#u19711{min-height:282px;padding-bottom:86px;}#u19711_align_to_page{max-width:1200px;}#u24221{z-index:500;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:48px;width:63.42%;margin-left:18.3%;left:1px;}#u24191-17{z-index:518;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:55.59%;margin-left:22.21%;left:-169px;}#u24197{z-index:501;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;width:23.13%;margin-left:38.44%;left:293px;}#u24167-4{z-index:514;display:block;vertical-align:top;position:relative;width:99.44%;margin-left:0.29%;left:-1px;}#u24141-4{z-index:502;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24142-4{z-index:506;margin-top:12px;position:relative;width:100%;margin-left:0%;left:0px;}#u24143-4{z-index:510;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24141-4_img,#u24142-4_img,#u24143-4_img{display:block;vertical-align:top;width:99.44%;}#u19711-bw{min-height:282px;margin-bottom:-300px;margin-top:-6px;}body{padding-bottom:300px;}}@media (min-width: 751px) and (max-width: 1000px){#muse_css_mq{background-color:#0003e8;}#bp_1000.active{display:block;}#page{min-height:5404px;max-width:1000px;}#pstart{width:100.2%;}#pu19797-4{z-index:158;margin-top:-6px;width:91.62%;}#u19797-4{z-index:158;position:relative;width:97px;left:0%;margin:145px -10000px -4px 2.1786492190864384%;}#u19710-4{z-index:170;position:relative;width:147px;left:12.75%;margin:145px -10000px -4px 2.1786492190864384%;}#u20070-4{z-index:174;position:relative;width:85px;left:30.72%;margin:145px -10000px -5px 2.1786492190864384%;}#u20068{z-index:182;margin-right:-10000px;margin-left:54.47%;}#u20098-4{z-index:162;position:relative;width:86px;left:65.04%;margin:145px -10000px -4px 2.1786492190864384%;}#u19969-4{z-index:166;position:relative;width:85px;left:76.48%;margin:145px -10000px -4px 2.1786492190864384%;}#u20099-4{z-index:178;position:relative;width:117px;left:87.8%;margin:144px -10000px -4px 2.1786492190864384%;}#u19797-4_img,#u19710-4_img,#u20070-4_img,#u20098-4_img,#u19969-4_img,#u20099-4_img{display:block;vertical-align:top;}#pslideshowu19635{width:99.81%;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:1000px;height:500px;}#u19640popup{width:96.7%;left:1.71%;}#u19643-6,#u19642-4,#u19641-8{width:100.52%;}#u20095{margin-top:408px;left:48.21%;}#produkte{margin-top:39px;left:0%;margin-left:0.2%;}#u20018-6{width:76.55%;margin-left:11.63%;left:0px;}#pu19896{z-index:184;margin-top:38px;width:93.82%;left:0%;margin-left:3.2%;}#u19896{z-index:184;}#u19914{z-index:185;}#buttonu19915{z-index:186;}#start,#buttonu19915:hover{margin-left:0%;}#pu19917,#u19917{z-index:187;}#u19918{z-index:193;}#u19918_states{background-image:url("../images/u19918_states2.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r2.png?crc=162795771");}#u19916-4{z-index:188;}#u20332{z-index:196;}#u20332_states{background-image:url("../images/u20332_states2.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r2.png?crc=450819133");}#u20071{z-index:217;margin-right:-10000px;left:35.64%;}#u20072{z-index:218;}#buttonu20073{z-index:219;height:328.8937500000012px;padding-bottom:8.106249999998795px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:0%;}#pu20075,#u20075{z-index:220;}#u20076{z-index:226;}#u20076_states{background-image:url("../images/u20076_states2.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r2.png?crc=4066690632");}#u20074-4{z-index:221;}#u20353{z-index:229;}#u20353_states{background-image:url("../images/u20353_states2.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r2.png?crc=450819133");}#u20044{z-index:203;margin-right:-10000px;left:71.28%;}#u20045{z-index:204;}#buttonu20046{z-index:205;height:329.9937500000012px;padding-bottom:7.006249999998772px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:0%;}#pu20047,#u20047{z-index:206;}#u20049{z-index:212;}#u20049_states{background-image:url("../images/u20049_states2.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r2.png?crc=4066690632");}#u20048-4{z-index:207;}#u20370{z-index:215;}#u20370_states{background-image:url("../images/u20370_states2.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r2.png?crc=450819133");}#pu19798{z-index:231;margin-top:85px;width:93.82%;left:0%;margin-left:3.2%;}#u19798{z-index:231;margin-right:-10000px;}#u19799{z-index:232;}#buttonu19800{z-index:233;height:329.993750000001px;padding-bottom:7.0062499999989996px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:0%;}#pu19801,#u19801{z-index:234;}#u19803{z-index:240;}#u19803_states{background-image:url("../images/u19803_states2.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r2.png?crc=4066690632");}#u19802-4{z-index:235;}#u20379{z-index:243;}#u20379_states{background-image:url("../images/u20379_states2.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r2.png?crc=450819133");}#u19611{z-index:245;margin-right:-10000px;margin-top:1px;left:35.64%;}#u19630{z-index:246;}#buttonu19631{z-index:247;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:0%;}#pu19632,#u19632{z-index:248;}#u19634{z-index:254;}#u19634_states{background-image:url("../images/u19634_states2.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r2.png?crc=4066690632");}#u19633-4{z-index:249;}#u20404{z-index:257;}#u20404_states{background-image:url("../images/u20404_states2.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r2.png?crc=450819133");background-size:100%;}#u19921{z-index:259;margin-right:-10000px;left:71.28%;}#u19922{z-index:260;}#buttonu19923{z-index:261;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:0%;}#pu19926,#u19926{z-index:262;}#u19924{z-index:268;}#u19924_states{background-image:url("../images/u19924_states2.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r2.png?crc=4066690632");}#u19925-4{z-index:263;}#u20413{z-index:271;}#u20413_states{background-image:url("../images/u20413_states2.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r2.png?crc=450819133");}#pu19945{z-index:273;margin-top:86px;width:93.82%;left:0%;margin-left:3.2%;}#u19945{z-index:273;margin-right:-10000px;margin-top:1px;}#u19946{z-index:274;}#buttonu19947{z-index:275;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:0%;}#pu19949,#u19949{z-index:276;}#u19948{z-index:282;}#u19948_states{background-image:url("../images/u19948_states2.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r2.png?crc=4066690632");}#u19950-4{z-index:277;}#u20422{z-index:285;}#u20422_states{background-image:url("../images/u20422_states2.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r2.png?crc=450819133");background-size:100%;}#u19661{z-index:287;margin-right:-10000px;left:35.64%;}#u19662{z-index:288;}#buttonu19663{z-index:289;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:0%;}#pu19664,#u19664{z-index:290;}#u19666{z-index:296;}#u19666_states{background-image:url("../images/u19666_states2.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r2.png?crc=4066690632");}#u19665-4{z-index:291;}#u20431{z-index:299;}#u20431_states{background-image:url("../images/u20431_states2.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r2.png?crc=450819133");}#u20100{z-index:301;margin-right:-10000px;left:71.28%;}#u20119{z-index:302;}#buttonu20120{z-index:303;height:327.8968749999999px;padding-bottom:9.103125000000091px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:0%;}#pu20123,#u20123{z-index:304;}#u20121{z-index:310;}#u20121_states{background-image:url("../images/u20121_states2.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r2.png?crc=4066690632");}#u20122-4{z-index:305;}#u20464{z-index:313;}#u20464_states{background-image:url("../images/u20464_states2.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r2.png?crc=450819133");}#pu19822{z-index:315;margin-top:87px;width:93.82%;left:0%;margin-left:3.2%;}#u19822{z-index:315;margin-right:-10000px;}#u19841{z-index:316;}#buttonu19842{z-index:317;height:327.79062500000236px;padding-top:13px;padding-bottom:9.209374999997635px;}#buttonu19842:hover{height:328px;margin-left:0%;}#buttonu19842.ButtonSelected{height:328px;margin-left:0%;}#pu19843,#u19843{z-index:318;}#u19845{z-index:324;}#u19845_states{background-image:url("../images/u19845_states2.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r2.png?crc=4066690632");}#u19844-4{z-index:319;}#u20473{z-index:327;margin-top:2px;margin-left:57.41%;}#u20473_states{background-image:url("../images/u20473_states2.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r2.png?crc=450819133");}#u19712{z-index:329;margin-right:-10000px;left:35.64%;}#u19713{z-index:330;}#buttonu19714{z-index:331;height:328.8906250000023px;padding-bottom:8.109374999997726px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:0%;}#pu19716,#u19716{z-index:332;}#u19717{z-index:338;}#u19717_states{background-image:url("../images/u19717_states2.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r2.png?crc=4066690632");}#u19715-4{z-index:333;}#u20482{z-index:341;}#u20482_states{background-image:url("../images/u20482_states2.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r2.png?crc=450819133");}#u19685{z-index:343;margin-right:-10000px;left:71.28%;}#u19686{z-index:344;}#buttonu19687{z-index:345;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:0%;}#pu19689,#u19689{z-index:346;}#u19688{z-index:352;}#u19688_states{background-image:url("../images/u19688_states2.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r2.png?crc=4066690632");}#u19690-4{z-index:347;}#u20491{z-index:355;}#u20491_states{background-image:url("../images/u20491_states2.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r2.png?crc=450819133");}#pu19970{z-index:357;margin-top:86px;width:93.82%;left:0%;margin-left:3.2%;}#u19970{z-index:357;margin-right:-10000px;}#u19971{z-index:358;}#buttonu19972{z-index:359;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:0%;}#pu19975,#u19975{z-index:360;}#u19974{z-index:366;}#u19974_states{background-image:url("../images/u19974_states2.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r2.png?crc=4066690632");}#u19973-4{z-index:361;}#u20540{z-index:369;}#u20540_states{background-image:url("../images/u20540_states2.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r2.png?crc=450819133");}#u20020{z-index:371;margin-right:-10000px;left:35.64%;}#u20039{z-index:372;}#buttonu20040{z-index:373;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:0%;}#pu20043,#u20043{z-index:374;}#u20041{z-index:380;}#u20041_states{background-image:url("../images/u20041_states2.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r2.png?crc=4066690632");}#u20042-4{z-index:375;}#u20549{z-index:383;}#u20549_states{background-image:url("../images/u20549_states2.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r2.png?crc=450819133");}#u19846{z-index:385;margin-right:-10000px;left:71.28%;}#u19865{z-index:386;}#buttonu19866{z-index:387;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:0%;}#pu19867,#u19867{z-index:388;}#u19869{z-index:394;}#u19869_states{background-image:url("../images/u19869_states2.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r2.png?crc=4066690632");}#u19868-4{z-index:389;}#u20558{z-index:397;}#u20558_states{background-image:url("../images/u20558_states2.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r2.png?crc=450819133");}#pu19994{z-index:399;margin-top:86px;width:93.82%;left:0%;margin-left:3.2%;}#u19994{z-index:399;margin-right:-10000px;}#u19995{z-index:400;}#buttonu19996{z-index:401;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:0%;}#buttonu19996.ButtonSelected{margin-left:0%;}#pu19999,#u19999{z-index:402;}#u19998{z-index:408;}#u19998_states{background-image:url("../images/u19998_states2.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r2.png?crc=4066690632");}#u19997-4{z-index:403;}#u20567{z-index:411;}#u20567_states{background-image:url("../images/u20567_states2.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r2.png?crc=450819133");}#pu21593-6{z-index:414;padding-bottom:0px;margin-right:-10000px;margin-top:35px;width:64.37%;margin-left:35.64%;}#u21593-6{z-index:414;display:block;vertical-align:top;position:relative;width:100%;}#pu21594-5{z-index:420;margin-top:45px;width:100%;}#u21594-5{z-index:420;display:block;vertical-align:top;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:51.41%;left:-0.17%;}#u21595-5{z-index:425;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:51.41%;left:50.42%;}#u21595-5_img{display:block;vertical-align:top;width:100%;}#kontakt{margin-top:140px;margin-left:0%;}#pu19609{z-index:413;margin-top:11px;width:97.81%;}#u19609{z-index:413;background-image:url("../images/fotolia_56863820_m.jpg?crc=143243195");width:62.56%;margin-left:2px;}#u19609 .fluid_height_spacer{padding-bottom:69.33115823817292%;}#u21637-4{z-index:430;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:305px;width:25.62%;left:35.31%;margin-left:0.21%;}#u21653-24{z-index:434;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:37.56%;left:62.56%;margin-left:0.21%;}#u19919-5{z-index:198;margin-top:24px;width:99.81%;left:0%;margin-left:0.2%;}#widgetu19758{margin-top:17px;width:95.91%;margin-left:1.95%;left:0px;}#widgetu19783{width:48.18%;left:-0.11%;}#u19785-4{width:91.06%;}#u19786-4{min-height:20px;width:38.22%;left:61.79%;}#u19784-4{width:99.57%;}#widgetu19783:hover #u19784-4{width:99.57%;}#widgetu19783.focus-st #u19784-4{width:99.57%;}#widgetu19770{width:48.18%;left:51.93%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:91.06%;}#u19772-4{min-height:20px;width:38.22%;left:61.79%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.57%;}#widgetu19770:hover #u19773-4{width:99.57%;}#widgetu19770.focus-st #u19773-4{width:99.57%;}#widgetu19779{width:50.89%;left:-0.11%;}#pu19781-4{width:99.8%;margin-left:0.21%;}#u19781-4{width:68.86%;}#u19780-4{min-height:20px;width:28.9%;left:71.11%;}#u19782-4{width:94.28%;}#widgetu19779:hover #u19782-4{width:94.28%;}#widgetu19779.focus-st #u19782-4{width:94.28%;}#widgetu19765{width:48.18%;left:51.93%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:91.06%;}#u19767-4{min-height:20px;width:38.22%;left:61.79%;}#widgetu19770.fld-err-st #u19773-4,#u19768-4{width:99.57%;}#widgetu19765:hover #u19768-4{width:99.57%;}#widgetu19765.focus-st #u19768-4{width:99.57%;}#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:100%;}#widgetu19787{width:50.89%;left:-0.11%;}#widgetu19779.fld-err-st,#widgetu19787.fld-err-st{width:50.89%;}#pu19788-4{width:99.8%;margin-left:0.41%;}#widgetu19779.fld-err-st #u19781-4,#u19788-4{width:68.86%;}#widgetu19787.fld-err-st #u19788-4{width:68.86%;}#u19790-4{min-height:20px;width:28.9%;left:70.91%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19787.fld-err-st #u19790-4{min-height:20px;width:28.9%;}#widgetu19779.fld-err-st #u19782-4,#u19789-4{width:94.28%;}#widgetu19787:hover #u19789-4{width:94.28%;}#widgetu19787.focus-st #u19789-4{width:94.28%;}#widgetu19787.fld-err-st #u19789-4{width:94.28%;}#widgetu19775{width:48.18%;left:51.93%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19765.fld-err-st,#widgetu19775.fld-err-st{width:48.18%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:79.7%;margin-left:0.22%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:91.06%;}#widgetu19775.fld-err-st #u19776-4{width:91.06%;}#u19778-4{min-height:20px;width:38.22%;left:61.79%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:20px;width:38.22%;}#widgetu19765.fld-err-st #u19768-4,#u19777-4{width:99.57%;}#widgetu19775:hover #u19777-4{width:99.57%;}#widgetu19775.focus-st #u19777-4{width:99.57%;}#widgetu19775.fld-err-st #u19777-4{width:99.57%;}#widgetu19760{width:100.11%;left:-0.11%;}#widgetu19760.fld-err-st{width:100.11%;}#pu19761-4{width:48.76%;margin-left:0.21%;}#u19761-4{width:71.65%;}#widgetu19760.fld-err-st #u19761-4{width:71.65%;}#u19763-4{min-height:20px;width:30.07%;left:69.94%;}#widgetu19760.fld-err-st #u19763-4{min-height:20px;width:30.07%;}#u19762-4{width:99.8%;}#widgetu19760:hover #u19762-4{width:99.8%;}#widgetu19760.focus-st #u19762-4{width:99.8%;}#widgetu19760.fld-err-st #u19762-4{width:99.8%;}#pu19759-4{margin-top:47px;width:38.4%;margin-left:42.56%;}#u19759-4{min-height:26px;width:55.56%;left:44.45%;}#widgetu19758.frm-sub-st #u19759-4{min-height:30px;}#u19769-4{min-height:28px;width:55.56%;left:44.45%;}#widgetu19758.frm-subm-err-st #u19769-4{min-height:32px;}#u19764-4{width:55.56%;left:44.45%;}#u19774-4{width:38.22%;left:-0.28%;}#u19774-4:hover{margin-bottom:0px;width:38.22%;}#u19774-4:active{margin-bottom:0px;width:38.22%;}#anfahrt{margin-top:155px;margin-left:0%;}#u21795-6{z-index:458;display:block;vertical-align:top;margin-top:10px;position:relative;margin-left:49.91%;left:-341px;}#u19610{height:600px;}#u19610-bw{margin-top:2px;height:600px;}#pamphletu19736{z-index:464;right:20px;width:19.91%;max-width:199px;}#u19747{position:absolute;width:148px;height:238px;}#u19747popup{z-index:465;width:148px;height:238px;margin-right:-10000px;}#u19748{z-index:466;width:148px;position:relative;margin-right:-10000px;}#u19749{z-index:467;}#u19750-4{z-index:468;}#u19753-4{z-index:472;}#u19755-4{z-index:476;}#u19754-4{z-index:480;}#u19751-4{z-index:484;}#u19752-4{z-index:488;}#u19739{z-index:492;padding-bottom:50px;left:149px;width:25.13%;}#u19740{position:fixed;top:20px;right:20px;}#u19740:hover{margin-left:0px;}#u19740.PamphletThumbSelected{margin-left:0px;}#u19741{z-index:494;}#u19743{z-index:495;}#u19744{z-index:496;}#u19742{z-index:497;}.css_verticalspacer .verticalspacer{height:calc(100vh - 5705px);}#u19711{min-height:268px;padding-bottom:56px;}#u19711_align_to_page{max-width:1000px;}#u24329{z-index:498;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:34px;width:70.9%;left:12.2%;}#u24264-17{z-index:516;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:49.65%;}#u24265{z-index:499;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;width:27.65%;left:72.36%;}#u24269-4{z-index:512;display:block;vertical-align:top;position:relative;width:99.49%;}#u24267-4{z-index:500;margin-top:11px;position:relative;width:100%;}#u24266-4{z-index:504;margin-top:10px;position:relative;width:100%;}#u24268-4{z-index:508;margin-top:10px;position:relative;width:100%;}#u24267-4_img,#u24266-4_img,#u24268-4_img{display:block;vertical-align:top;width:99.49%;}#u19711-bw{min-height:268px;margin-bottom:-323px;margin-top:61px;}body{overflow-x:hidden;padding-bottom:298px;}}@media (min-width: 501px) and (max-width: 750px){#muse_css_mq{background-color:#0002ee;}#bp_750.active{display:block;}#page{min-height:6138px;max-width:750px;}#pstart{padding-bottom:0px;width:100%;}#u20068{z-index:158;top:-6px;margin-bottom:-6px;margin-left:50%;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:750px;height:400px;}#u19640popup{width:96.67%;left:1.74%;}#u19643-6,#u19642-4,#u19641-8{width:100.83%;}#u20095{margin-top:300px;left:47.6%;}#produkte{margin-top:50px;left:0%;margin-left:0%;}#u20018-6{width:76.8%;margin-left:11.6%;left:-3px;}#pu19896{z-index:160;margin-top:11px;width:86.67%;left:0%;margin-left:6.67%;}#u19896{z-index:160;}#u19914{z-index:161;}#buttonu19915{z-index:162;}#start,#buttonu19915:hover{margin-left:0%;}#pu19917,#u19917{z-index:163;}#u19918{z-index:169;}#u19918_states{background-image:url("../images/u19918_states3.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r3.png?crc=162795771");}#u19916-4{z-index:164;}#u20332{z-index:172;}#u20332_states{background-image:url("../images/u20332_states3.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r3.png?crc=450819133");}#u20071{z-index:193;margin-right:-10000px;left:58.47%;}#u20072{z-index:194;}#buttonu20073{z-index:195;height:328.8937500000012px;padding-bottom:8.106249999998795px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:0%;}#pu20075,#u20075{z-index:196;}#u20076{z-index:202;}#u20076_states{background-image:url("../images/u20076_states3.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r3.png?crc=4066690632");}#u20074-4{z-index:197;}#u20353{z-index:205;}#u20353_states{background-image:url("../images/u20353_states3.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r3.png?crc=450819133");}#pu20044{z-index:179;margin-top:74px;width:86.67%;left:0%;margin-left:6.67%;}#u20044{z-index:179;margin-right:-10000px;}#u20045{z-index:180;}#buttonu20046{z-index:181;height:329.993750000001px;padding-bottom:7.0062499999989996px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:0%;}#pu20047,#u20047{z-index:182;}#u20049{z-index:188;}#u20049_states{background-image:url("../images/u20049_states3.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r3.png?crc=4066690632");}#u20048-4{z-index:183;}#u20370{z-index:191;}#u20370_states{background-image:url("../images/u20370_states3.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r3.png?crc=450819133");}#u19798{z-index:207;margin-right:-10000px;left:58.47%;}#u19799{z-index:208;}#buttonu19800{z-index:209;height:329.9937500000012px;padding-bottom:7.006249999998772px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:0%;}#pu19801,#u19801{z-index:210;}#u19803{z-index:216;}#u19803_states{background-image:url("../images/u19803_states3.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r3.png?crc=4066690632");}#u19802-4{z-index:211;}#u20379{z-index:219;}#u20379_states{background-image:url("../images/u20379_states3.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r3.png?crc=450819133");}#pu19611{z-index:221;margin-top:75px;width:86.67%;left:0%;margin-left:6.67%;}#u19611{z-index:221;margin-right:-10000px;}#u19630{z-index:222;}#buttonu19631{z-index:223;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:0%;}#pu19632,#u19632{z-index:224;}#u19634{z-index:230;}#u19634_states{background-image:url("../images/u19634_states3.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r3.png?crc=4066690632");}#u19633-4{z-index:225;}#u20404{z-index:233;}#u20404_states{background-image:url("../images/u20404_states3.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r3.png?crc=450819133");background-size:100%;}#u19921{z-index:235;margin-right:-10000px;left:58.47%;}#u19922{z-index:236;}#buttonu19923{z-index:237;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:0%;}#pu19926,#u19926{z-index:238;}#u19924{z-index:244;}#u19924_states{background-image:url("../images/u19924_states3.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r3.png?crc=4066690632");}#u19925-4{z-index:239;}#u20413{z-index:247;}#u20413_states{background-image:url("../images/u20413_states3.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r3.png?crc=450819133");}#pu19945{z-index:249;margin-top:75px;width:86.67%;left:0%;margin-left:6.67%;}#u19945{z-index:249;margin-right:-10000px;}#u19946{z-index:250;}#buttonu19947{z-index:251;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:0%;}#pu19949,#u19949{z-index:252;}#u19948{z-index:258;}#u19948_states{background-image:url("../images/u19948_states3.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r3.png?crc=4066690632");}#u19950-4{z-index:253;}#u20422{z-index:261;}#u20422_states{background-image:url("../images/u20422_states3.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r3.png?crc=450819133");background-size:100%;}#u19661{z-index:263;margin-right:-10000px;left:58.47%;}#u19662{z-index:264;}#buttonu19663{z-index:265;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:0%;}#pu19664,#u19664{z-index:266;}#u19666{z-index:272;}#u19666_states{background-image:url("../images/u19666_states3.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r3.png?crc=4066690632");}#u19665-4{z-index:267;}#u20431{z-index:275;}#u20431_states{background-image:url("../images/u20431_states3.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r3.png?crc=450819133");}#pu20100{z-index:277;margin-top:74px;width:86.67%;left:0%;margin-left:6.67%;}#u20100{z-index:277;margin-right:-10000px;}#u20119{z-index:278;}#buttonu20120{z-index:279;height:327.8968749999999px;padding-bottom:9.103125000000091px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:0%;}#pu20123,#u20123{z-index:280;}#u20121{z-index:286;}#u20121_states{background-image:url("../images/u20121_states3.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r3.png?crc=4066690632");}#u20122-4{z-index:281;}#u20464{z-index:289;}#u20464_states{background-image:url("../images/u20464_states3.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r3.png?crc=450819133");}#u19822{z-index:291;margin-right:-10000px;left:58.47%;}#u19841{z-index:292;}#buttonu19842{z-index:293;height:349.94062500000246px;padding-bottom:0px;}#buttonu19842:hover{height:350px;margin-left:0%;}#buttonu19842.ButtonSelected{height:350px;margin-left:0%;}#buttonu19842_position_content{padding-top:13px;width:100%;}#pu19843,#u19843{z-index:294;}#u19845{z-index:300;}#u19845_states{background-image:url("../images/u19845_states3.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r3.png?crc=4066690632");}#u19844-4{z-index:295;}#u20473{z-index:303;margin-top:11px;margin-left:56.67%;}#u20473_states{background-image:url("../images/u20473_states3.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r3.png?crc=450819133");}#pu19712{z-index:305;margin-top:113px;width:86.67%;left:0%;margin-left:6.67%;}#u19712{z-index:305;margin-right:-10000px;}#u19713{z-index:306;}#buttonu19714{z-index:307;height:328.8906250000023px;padding-bottom:8.109374999997726px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:0%;}#pu19716,#u19716{z-index:308;}#u19717{z-index:314;}#u19717_states{background-image:url("../images/u19717_states3.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r3.png?crc=4066690632");}#u19715-4{z-index:309;}#u20482{z-index:317;}#u20482_states{background-image:url("../images/u20482_states3.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r3.png?crc=450819133");}#u19685{z-index:319;margin-right:-10000px;left:58.47%;}#u19686{z-index:320;}#buttonu19687{z-index:321;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:0%;}#pu19689,#u19689{z-index:322;}#u19688{z-index:328;}#u19688_states{background-image:url("../images/u19688_states3.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r3.png?crc=4066690632");}#u19690-4{z-index:323;}#u20491{z-index:331;}#u20491_states{background-image:url("../images/u20491_states3.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r3.png?crc=450819133");}#pu19970{z-index:333;margin-top:74px;width:86.67%;left:0%;margin-left:6.67%;}#u19970{z-index:333;margin-right:-10000px;margin-top:1px;}#u19971{z-index:334;}#buttonu19972{z-index:335;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:0%;}#pu19975,#u19975{z-index:336;}#u19974{z-index:342;}#u19974_states{background-image:url("../images/u19974_states3.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r3.png?crc=4066690632");}#u19973-4{z-index:337;}#u20540{z-index:345;}#u20540_states{background-image:url("../images/u20540_states3.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r3.png?crc=450819133");}#u20020{z-index:347;margin-right:-10000px;left:58.47%;}#u20039{z-index:348;}#buttonu20040{z-index:349;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:0%;}#pu20043,#u20043{z-index:350;}#u20041{z-index:356;}#u20041_states{background-image:url("../images/u20041_states3.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r3.png?crc=4066690632");}#u20042-4{z-index:351;}#u20549{z-index:359;}#u20549_states{background-image:url("../images/u20549_states3.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r3.png?crc=450819133");}#pu19846{z-index:361;margin-top:75px;width:86.67%;left:0%;margin-left:6.67%;}#u19846{z-index:361;margin-right:-10000px;}#u19865{z-index:362;}#buttonu19866{z-index:363;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:0%;}#pu19867,#u19867{z-index:364;}#u19869{z-index:370;}#u19869_states{background-image:url("../images/u19869_states3.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r3.png?crc=4066690632");}#u19868-4{z-index:365;}#u20558{z-index:373;}#u20558_states{background-image:url("../images/u20558_states3.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r3.png?crc=450819133");}#u19994{z-index:375;margin-right:-10000px;left:58.47%;}#u19995{z-index:376;}#buttonu19996{z-index:377;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:0%;}#buttonu19996.ButtonSelected{margin-left:0%;}#pu19999,#u19999{z-index:378;}#u19998{z-index:384;}#u19998_states{background-image:url("../images/u19998_states3.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r3.png?crc=4066690632");}#u19997-4{z-index:379;}#u20567{z-index:387;}#u20567_states{background-image:url("../images/u20567_states3.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r3.png?crc=450819133");}#u21667-6{z-index:390;display:block;vertical-align:top;margin-top:47px;position:relative;width:90.67%;left:0%;margin-left:6.67%;}#pu21668-5{z-index:396;margin-top:27px;width:90.67%;left:0%;margin-left:6.67%;}#u21668-5{z-index:396;display:block;vertical-align:top;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:51.48%;left:-0.15%;}#u21669-5{z-index:401;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:50.15%;left:51.48%;}#kontakt{margin-top:179px;margin-left:0%;}#pu19609{z-index:389;margin-top:21px;width:100%;}#u19609{z-index:389;background-image:url("../images/fotolia_56863820_m.jpg?crc=143243195");width:100%;margin-left:0px;}#u19609 .fluid_height_spacer{padding-bottom:53.333333333333336%;}#u21697-4{z-index:406;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:56px;width:38.67%;left:57.47%;margin-left:0%;}#u21709-24{z-index:410;display:block;vertical-align:top;margin-top:30px;position:relative;width:94.67%;left:0%;margin-left:2.67%;}#u19919-5{z-index:174;margin-top:34px;width:99.87%;left:0%;margin-left:0%;}#widgetu19758{margin-top:14px;width:94.94%;margin-left:2.54%;left:0px;}#widgetu19783{width:48.11%;left:-0.15%;}#u19785-4{width:90.98%;}#u19786-4{min-height:20px;width:38.27%;left:61.74%;}#u19784-4{width:99.42%;}#widgetu19783:hover #u19784-4{width:99.42%;}#widgetu19783.focus-st #u19784-4{width:99.42%;}#widgetu19770{width:48.11%;left:52.04%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:90.98%;}#u19772-4{min-height:20px;width:38.27%;left:61.74%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.42%;}#widgetu19770:hover #u19773-4{width:99.42%;}#widgetu19770.focus-st #u19773-4{width:99.42%;}#widgetu19779{width:51.62%;left:-0.15%;}#pu19781-4{width:99.73%;margin-left:0.28%;}#u19781-4{width:68.86%;}#u19780-4{min-height:20px;width:28.97%;left:71.04%;}#u19782-4{width:92.65%;}#widgetu19779:hover #u19782-4{width:92.65%;}#widgetu19779.focus-st #u19782-4{width:92.65%;}#widgetu19765{width:48.11%;left:52.04%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:90.98%;}#u19767-4{min-height:20px;width:38.27%;left:61.74%;}#widgetu19770.fld-err-st #u19773-4,#u19768-4{width:99.42%;}#widgetu19765:hover #u19768-4{width:99.42%;}#widgetu19765.focus-st #u19768-4{width:99.42%;}#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:99.86%;margin-left:0.15%;}#widgetu19787{width:51.62%;left:-0.15%;}#widgetu19779.fld-err-st,#widgetu19787.fld-err-st{width:51.62%;}#pu19788-4{width:99.73%;margin-left:0.55%;}#widgetu19779.fld-err-st #u19781-4,#u19788-4{width:68.86%;}#widgetu19787.fld-err-st #u19788-4{width:68.86%;}#u19790-4{min-height:20px;width:28.97%;left:71.04%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19787.fld-err-st #u19790-4{min-height:20px;width:28.97%;}#widgetu19779.fld-err-st #u19782-4,#u19789-4{width:92.65%;}#widgetu19787:hover #u19789-4{width:92.65%;}#widgetu19787.focus-st #u19789-4{width:92.65%;}#widgetu19787.fld-err-st #u19789-4{width:92.65%;}#widgetu19775{width:48.11%;left:52.04%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19765.fld-err-st,#widgetu19775.fld-err-st{width:48.11%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:81%;margin-left:0.3%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:90.98%;}#widgetu19775.fld-err-st #u19776-4{width:90.98%;}#u19778-4{min-height:20px;width:38.27%;left:61.74%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:20px;width:38.27%;}#widgetu19765.fld-err-st #u19768-4,#u19777-4{width:99.42%;}#widgetu19775:hover #u19777-4{width:99.42%;}#widgetu19775.focus-st #u19777-4{width:99.42%;}#widgetu19775.fld-err-st #u19777-4{width:99.42%;}#pslideshowu19635,#widgetu19760{width:100%;}#widgetu19760.fld-err-st{width:100%;}#pu19761-4{width:48.74%;}#u19761-4{width:72.63%;}#widgetu19760.fld-err-st #u19761-4{width:72.63%;}#u19763-4{min-height:20px;width:30.55%;left:69.46%;}#widgetu19760.fld-err-st #u19763-4{min-height:20px;width:30.55%;}#u19762-4{width:99.72%;}#widgetu19760:hover #u19762-4{width:99.72%;}#widgetu19760.focus-st #u19762-4{width:99.72%;}#widgetu19760.fld-err-st #u19762-4{width:99.72%;}#pu19759-4{margin-top:36px;width:38.91%;margin-left:42.98%;}#u19759-4{min-height:26px;width:55.6%;left:44.41%;}#widgetu19758.frm-sub-st #u19759-4{min-height:30px;}#u19769-4{min-height:28px;width:55.6%;left:44.41%;}#widgetu19758.frm-subm-err-st #u19769-4{min-height:32px;}#u19764-4{width:55.6%;left:44.41%;}#u19774-4{width:38.27%;left:-0.37%;}#u19774-4:hover{margin-bottom:0px;width:38.27%;}#u19774-4:active{margin-bottom:0px;width:38.27%;}#anfahrt{margin-top:170px;margin-left:0%;}#u21795-6{z-index:434;display:block;vertical-align:top;position:relative;margin-left:50%;left:-217px;}#u19610{height:600px;}#u19610-bw{margin-top:12px;height:600px;}#pamphletu19736{z-index:440;right:20px;width:26.41%;max-width:198px;}#u19747{position:absolute;width:148px;height:238px;}#u19747popup{z-index:441;width:148px;height:238px;margin-right:-10000px;}#u19748{z-index:442;width:148px;position:relative;margin-right:-10000px;}#u19749{z-index:443;}#u19750-4{z-index:444;}#u19753-4{z-index:448;}#u19755-4{z-index:452;}#u19754-4{z-index:456;}#u19751-4{z-index:460;}#u19752-4{z-index:464;}#u19739{z-index:468;width:25.26%;margin-left:74.75%;left:0px;}#u19740{position:absolute;margin-left:100%;left:-100px;}#u19740:hover{margin-left:100%;left:-100px;}#u19740.PamphletThumbSelected{margin-left:100%;left:-100px;}#u19741{z-index:470;}#u19743{z-index:471;}#u19744{z-index:472;}#u19742{z-index:473;}#u19740popup{width:50px;height:50px;margin-right:-10000px;margin-left:100%;}.css_verticalspacer .verticalspacer{height:calc(100vh - 7612px);}#u19711{min-height:566px;}#u19711_align_to_page{max-width:750px;}#u19711_position_content{padding-top:30px;padding-bottom:105px;width:100%;}#u24341-17{z-index:491;display:block;vertical-align:top;position:relative;width:100%;}#u24336{z-index:474;border-width:0px;border-color:transparent;background-color:transparent;margin-top:50px;position:relative;width:24.4%;left:37.6%;}#u24338-4{z-index:487;display:block;vertical-align:top;position:relative;width:100%;}#u24339-4{z-index:475;margin-top:8px;position:relative;width:100%;}#u24340-4{z-index:479;margin-top:8px;position:relative;width:100%;}#u24337-4{z-index:483;margin-top:14px;position:relative;width:100%;}#u21669-5_img,#u24339-4_img,#u24340-4_img,#u24337-4_img{display:block;vertical-align:top;width:100%;}#u19711-bw{min-height:566px;margin-bottom:-566px;margin-top:62px;}body{overflow-x:hidden;padding-bottom:566px;}}@media (max-width: 500px){#muse_css_mq{background-color:#0001f4;}#bp_500.active{display:block;}#page{min-height:6138px;max-width:500px;}#pstart{padding-bottom:0px;width:100%;}#start{margin-left:47.8%;}#u20068{z-index:164;top:-6px;margin-bottom:-6px;margin-left:50%;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:500px;height:350px;}#u19640{margin-left:0%;left:0.4999999999999929px;}#u19640popup{width:96.6%;margin-left:1.71%;}#u19643-6,#u19642-4,#u19641-8{width:101.25%;margin-left:-0.63%;left:3px;}#u20095{margin-top:253px;left:46.4%;}#u20018-6{margin-top:50px;width:77%;margin-left:11.51%;left:2px;}#pprodukte{z-index:39;margin-top:21px;width:54%;}#produkte{margin-right:-10000px;width:22px;margin-top:42px;left:45.93%;margin-left:42.6%;}#u19896{z-index:166;margin-left:92.6%;left:-135px;}#u19914{z-index:167;margin-left:50%;left:-135px;}#buttonu19915{z-index:168;margin-left:50%;left:-135px;}#buttonu19915:hover{margin-left:50%;left:-135px;}#pu19917,#u19917{z-index:169;}#u19918{z-index:175;}#u19918_states{background-image:url("../images/u19918_states4.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r4.png?crc=162795771");}#u19916-4{z-index:170;}#u20332{z-index:178;}#u20332_states{background-image:url("../images/u20332_states4.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r4.png?crc=450819133");}#u20071{z-index:199;margin-top:26px;margin-left:50%;left:-135px;}#u20072{z-index:200;margin-left:50%;left:-135px;}#buttonu20073{z-index:201;height:328.8937500000013px;padding-bottom:8.106249999998681px;margin-left:50%;left:-135px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:50%;left:-135px;}#pu20075,#u20075{z-index:202;}#u20076{z-index:208;}#u20076_states{background-image:url("../images/u20076_states4.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r4.png?crc=4066690632");}#u20074-4{z-index:203;}#u20353{z-index:211;}#u20353_states{background-image:url("../images/u20353_states4.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r4.png?crc=450819133");}#u20044{z-index:185;margin-top:25px;margin-left:50%;left:-135px;}#u20045{z-index:186;margin-left:50%;left:-135px;}#buttonu20046{z-index:187;height:329.9937500000012px;padding-bottom:7.006249999998772px;margin-left:50%;left:-135px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:50%;left:-135px;}#pu20047,#u20047{z-index:188;}#u20049{z-index:194;}#u20049_states{background-image:url("../images/u20049_states4.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r4.png?crc=4066690632");}#u20048-4{z-index:189;}#u20370{z-index:197;}#u20370_states{background-image:url("../images/u20370_states4.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r4.png?crc=450819133");}#u19798{z-index:213;margin-top:26px;margin-left:50%;left:-135px;}#u19799{z-index:214;margin-left:50%;left:-135px;}#buttonu19800{z-index:215;height:329.993750000001px;padding-bottom:7.0062499999989996px;margin-left:50%;left:-135px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:50%;left:-135px;}#pu19801,#u19801{z-index:216;}#u19803{z-index:222;}#u19803_states{background-image:url("../images/u19803_states4.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r4.png?crc=4066690632");}#u19802-4{z-index:217;}#u20379{z-index:225;}#u20379_states{background-image:url("../images/u20379_states4.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r4.png?crc=450819133");}#u19611{z-index:227;margin-top:25px;margin-left:50%;left:-135px;}#u19630{z-index:228;margin-left:50%;left:-135px;}#buttonu19631{z-index:229;margin-left:50%;left:-135px;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:50%;left:-135px;}#pu19632,#u19632{z-index:230;}#u19634{z-index:236;}#u19634_states{background-image:url("../images/u19634_states4.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r4.png?crc=4066690632");}#u19633-4{z-index:231;}#u20404{z-index:239;}#u20404_states{background-image:url("../images/u20404_states4.png?crc=245443754");background-size:97.22222222222223%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r4.png?crc=450819133");background-size:100.00000000000003%;}#u19921{z-index:241;margin-top:26px;margin-left:50%;left:-135px;}#u19922{z-index:242;margin-left:50%;left:-135px;}#buttonu19923{z-index:243;margin-left:50%;left:-135px;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:50%;left:-135px;}#pu19926,#u19926{z-index:244;}#u19924{z-index:250;}#u19924_states{background-image:url("../images/u19924_states4.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r4.png?crc=4066690632");}#u19925-4{z-index:245;}#u20413{z-index:253;}#u20413_states{background-image:url("../images/u20413_states4.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r4.png?crc=450819133");}#u19945{z-index:255;margin-top:25px;margin-left:50%;left:-135px;}#u19946{z-index:256;margin-left:50%;left:-135px;}#buttonu19947{z-index:257;margin-left:50%;left:-135px;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:50%;left:-135px;}#pu19949,#u19949{z-index:258;}#u19948{z-index:264;}#u19948_states{background-image:url("../images/u19948_states4.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r4.png?crc=4066690632");}#u19950-4{z-index:259;}#u20422{z-index:267;}#u20422_states{background-image:url("../images/u20422_states4.png?crc=245443754");background-size:97.22222222222223%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r4.png?crc=450819133");background-size:100.00000000000003%;}#u19661{z-index:269;margin-top:25px;margin-left:50%;left:-135px;}#u19662{z-index:270;margin-left:50%;left:-135px;}#buttonu19663{z-index:271;margin-left:50%;left:-135px;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:50%;left:-135px;}#pu19664,#u19664{z-index:272;}#u19666{z-index:278;}#u19666_states{background-image:url("../images/u19666_states4.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r4.png?crc=4066690632");}#u19665-4{z-index:273;}#u20431{z-index:281;}#u20431_states{background-image:url("../images/u20431_states4.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r4.png?crc=450819133");}#u20100{z-index:283;margin-top:26px;margin-left:50%;left:-135px;}#u20119{z-index:284;margin-left:50%;left:-135px;}#buttonu20120{z-index:285;height:327.89687500000036px;padding-bottom:9.103124999999636px;margin-left:50%;left:-135px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:50%;left:-135px;}#pu20123,#u20123{z-index:286;}#u20121{z-index:292;}#u20121_states{background-image:url("../images/u20121_states4.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r4.png?crc=4066690632");}#u20122-4{z-index:287;}#u20464{z-index:295;}#u20464_states{background-image:url("../images/u20464_states4.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r4.png?crc=450819133");}#u19822{z-index:297;margin-top:25px;margin-left:50%;left:-135px;}#u19841{z-index:298;margin-left:50%;left:-135px;}#buttonu19842{z-index:299;height:327.79062500000236px;padding-top:13px;padding-bottom:9.209374999997635px;margin-left:50%;left:-135px;}#buttonu19842:hover{height:328px;margin-left:50%;left:-135px;}#buttonu19842.ButtonSelected{height:328px;margin-left:50%;left:-135px;}#pu19843,#u19843{z-index:300;}#u19845{z-index:306;}#u19845_states{background-image:url("../images/u19845_states4.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r4.png?crc=4066690632");}#u19844-4{z-index:301;}#u20473{z-index:309;margin-top:2px;margin-left:57.41%;}#u20473_states{background-image:url("../images/u20473_states4.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r4.png?crc=450819133");}#u19712{z-index:311;margin-top:25px;margin-left:50%;left:-135px;}#u19713{z-index:312;margin-left:50%;left:-135px;}#buttonu19714{z-index:313;height:328.89062500000273px;padding-bottom:8.109374999997272px;margin-left:50%;left:-135px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:50%;left:-135px;}#pu19716,#u19716{z-index:314;}#u19717{z-index:320;}#u19717_states{background-image:url("../images/u19717_states4.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r4.png?crc=4066690632");}#u19715-4{z-index:315;}#u20482{z-index:323;}#u20482_states{background-image:url("../images/u20482_states4.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r4.png?crc=450819133");}#u19685{z-index:325;margin-top:25px;margin-left:50%;left:-135px;}#u19686{z-index:326;margin-left:50%;left:-135px;}#buttonu19687{z-index:327;margin-left:50%;left:-135px;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:50%;left:-135px;}#pu19689,#u19689{z-index:328;}#u19688{z-index:334;}#u19688_states{background-image:url("../images/u19688_states4.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r4.png?crc=4066690632");}#u19690-4{z-index:329;}#u20491{z-index:337;}#u20491_states{background-image:url("../images/u20491_states4.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r4.png?crc=450819133");}#u19970{z-index:339;margin-top:26px;margin-left:50%;left:-135px;}#u19971{z-index:340;margin-left:50%;left:-135px;}#buttonu19972{z-index:341;margin-left:50%;left:-135px;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:50%;left:-135px;}#pu19975,#u19975{z-index:342;}#u19974{z-index:348;}#u19974_states{background-image:url("../images/u19974_states4.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r4.png?crc=4066690632");}#u19973-4{z-index:343;}#u20540{z-index:351;}#u20540_states{background-image:url("../images/u20540_states4.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r4.png?crc=450819133");}#u20020{z-index:353;margin-top:25px;margin-left:50%;left:-135px;}#u20039{z-index:354;margin-left:50%;left:-135px;}#buttonu20040{z-index:355;margin-left:50%;left:-135px;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:50%;left:-135px;}#pu20043,#u20043{z-index:356;}#u20041{z-index:362;}#u20041_states{background-image:url("../images/u20041_states4.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r4.png?crc=4066690632");}#u20042-4{z-index:357;}#u20549{z-index:365;}#u20549_states{background-image:url("../images/u20549_states4.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r4.png?crc=450819133");}#u19846{z-index:367;margin-top:25px;margin-left:50%;left:-135px;}#u19865{z-index:368;margin-left:50%;left:-135px;}#buttonu19866{z-index:369;margin-left:50%;left:-135px;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:50%;left:-135px;}#pu19867,#u19867{z-index:370;}#u19869{z-index:376;}#u19869_states{background-image:url("../images/u19869_states4.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r4.png?crc=4066690632");}#u19868-4{z-index:371;}#u20558{z-index:379;}#u20558_states{background-image:url("../images/u20558_states4.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r4.png?crc=450819133");}#u19994{z-index:381;margin-top:25px;margin-left:50%;left:-135px;}#u19995{z-index:382;margin-left:50%;left:-135px;}#buttonu19996{z-index:383;margin-left:50%;left:-135px;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:50%;left:-135px;}#buttonu19996.ButtonSelected{margin-left:50%;left:-135px;}#pu19999,#u19999{z-index:384;}#u19998{z-index:390;}#u19998_states{background-image:url("../images/u19998_states4.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r4.png?crc=4066690632");}#u19997-4{z-index:385;}#u20567{z-index:393;}#u20567_states{background-image:url("../images/u20567_states4.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r4.png?crc=450819133");}#u21721-6{z-index:396;display:block;vertical-align:top;margin-top:53px;position:relative;width:92%;margin-left:4%;left:0px;}#u21722-5{z-index:402;margin-top:26px;position:relative;width:93.8%;margin-left:3.11%;left:5px;}#u21723-5{z-index:407;margin-top:16px;position:relative;width:93.8%;margin-left:3.11%;left:5px;}#kontakt{margin-top:94px;margin-left:47.8%;}#pu19609{z-index:395;width:100%;margin-left:0%;}#u19609{z-index:395;background-image:url("../images/fotolia_56863820_m-u19609-fr.jpg?crc=66553035");width:100%;margin-left:0%;}#u19609 .fluid_height_spacer{padding-bottom:60%;}#u21751-4{z-index:412;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:12px;width:51.2%;margin-left:24.4%;left:0px;}#u24580-28{z-index:483;display:block;vertical-align:top;margin-top:21px;position:relative;width:92.2%;margin-left:3.91%;left:1px;}#u19919-5{z-index:180;margin-top:54px;width:86.6%;margin-left:6.7%;left:1px;}#widgetu19758{padding-bottom:0px;margin-top:32px;width:100%;margin-left:0%;left:0px;}#widgetu19783{width:49.2%;left:-0.2%;}#u19785-4{width:90.82%;}#u19786-4{min-height:30px;width:38.38%;left:61.63%;}#u19784-4{width:99.19%;}#widgetu19783:hover #u19784-4{width:99.19%;}#widgetu19783.focus-st #u19784-4{width:99.19%;}#widgetu19770{width:49.2%;left:51%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:90.82%;}#u19772-4{min-height:30px;width:38.38%;left:61.63%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.19%;}#widgetu19770:hover #u19773-4{width:99.19%;}#widgetu19770.focus-st #u19773-4{width:99.19%;}#widgetu19779{width:49.2%;left:-0.2%;}#u19781-4{width:68.86%;}#u19780-4{min-height:30px;width:29.1%;left:71.32%;}#widgetu19770.fld-err-st #u19773-4,#u19782-4{width:99.19%;}#widgetu19779:hover #u19782-4{width:99.19%;}#widgetu19779.focus-st #u19782-4{width:99.19%;}#widgetu19765{width:49.2%;left:51%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:90.82%;}#u19767-4{min-height:30px;width:38.38%;left:61.63%;}#widgetu19779.fld-err-st #u19782-4,#u19768-4{width:99.19%;}#widgetu19765:hover #u19768-4{width:99.19%;}#widgetu19765.focus-st #u19768-4{width:99.19%;}#pslideshowu19635,#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:100%;}#widgetu19787{width:49.2%;left:-0.2%;}#pu19781-4,#pu19788-4{width:99.19%;margin-left:0.41%;}#widgetu19779.fld-err-st #u19781-4,#u19788-4{width:68.86%;}#u19790-4{min-height:30px;width:29.1%;left:70.91%;}#widgetu19765.fld-err-st #u19768-4,#u19789-4{width:99.19%;}#widgetu19787:hover #u19789-4{width:99.19%;}#widgetu19787.focus-st #u19789-4{width:99.19%;}#widgetu19775{width:49.2%;left:51%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19779.fld-err-st,#widgetu19765.fld-err-st,#widgetu19787.fld-err-st,#widgetu19775.fld-err-st{width:49.2%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:75.21%;margin-left:0.41%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:90.82%;}#widgetu19775.fld-err-st #u19776-4{width:90.82%;}#u19778-4{min-height:30px;width:38.38%;left:61.63%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:30px;width:38.38%;}#widgetu19787.fld-err-st #u19789-4,#u19777-4{width:99.19%;}#widgetu19775:hover #u19777-4{width:99.19%;}#widgetu19775.focus-st #u19777-4{width:99.19%;}#widgetu19775.fld-err-st #u19777-4{width:99.19%;}#widgetu19760{width:100.4%;left:-0.2%;}#widgetu19760.fld-err-st{width:100.4%;}#pu19761-4{width:48.61%;margin-left:0.2%;}#widgetu19787.fld-err-st #u19788-4,#u19761-4{width:68.86%;}#widgetu19760.fld-err-st #u19761-4{width:68.86%;}#u19763-4{min-height:30px;width:29.1%;left:71.32%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19787.fld-err-st #u19790-4,#widgetu19760.fld-err-st #u19763-4{min-height:30px;width:29.1%;}#u19762-4{width:99.61%;}#widgetu19760:hover #u19762-4{width:99.61%;}#widgetu19760.focus-st #u19762-4{width:99.61%;}#widgetu19760.fld-err-st #u19762-4{width:99.61%;}#pu19759-4{margin-top:32px;width:36.8%;margin-left:43%;}#u19759-4{min-height:28px;width:55.98%;left:44.57%;}#widgetu19758.frm-sub-st #u19759-4{min-height:32px;}#u19769-4{min-height:42px;width:55.98%;left:44.57%;}#widgetu19758.frm-subm-err-st #u19769-4{min-height:46px;}#u19764-4{width:55.98%;left:44.57%;}#u19774-4{width:38.59%;left:-0.55%;}#u19774-4:hover{margin-bottom:0px;width:38.59%;}#u19774-4:active{margin-bottom:0px;width:38.59%;}#anfahrt{margin-top:190px;margin-left:47.8%;}#u19895-6{z-index:158;display:block;vertical-align:top;margin-top:7px;position:relative;margin-left:50%;left:-192px;}#u19610{height:500px;}#u19610-bw{margin-top:16px;height:500px;}#pamphletu19736{z-index:416;right:45px;width:41%;max-width:205px;}#u19747{position:absolute;width:156px;height:238px;}#u19747popup{z-index:417;width:156px;height:238px;margin-right:-10000px;}#u19748{z-index:418;width:156px;position:relative;margin-right:-10000px;}#u19749{z-index:419;}#u19750-4{z-index:420;}#u19753-4{z-index:424;}#u19755-4{z-index:428;}#u19754-4{z-index:432;}#u19751-4{z-index:436;}#u19752-4{z-index:440;}#u19739{z-index:444;width:24.4%;margin-left:75.61%;left:0px;}#u19740{position:absolute;margin-left:100%;left:-100px;}#u19740:hover{margin-left:100%;left:-100px;}#u19740.PamphletThumbSelected{margin-left:100%;left:-100px;}#u19741{z-index:446;}#u19743{z-index:447;}#u19744{z-index:448;}#u19742{z-index:449;}#u19740popup{width:50px;height:50px;margin-right:-10000px;margin-left:100%;}.css_verticalspacer .verticalspacer{height:calc(100vh - 10091px);}#u19711{min-height:444px;}#u19711_align_to_page{max-width:500px;}#u19711_position_content{padding-top:27px;padding-bottom:19px;width:100%;}#u24406-17{z-index:466;display:block;vertical-align:top;position:relative;width:100%;}#u24405-4{z-index:462;display:block;vertical-align:top;margin-top:30px;position:relative;width:33.81%;left:33%;}#u24404-4{z-index:450;margin-top:6px;position:relative;width:33.81%;left:33%;}#u24403-4{z-index:454;margin-top:5px;position:relative;width:33.81%;left:33%;}#u24402-4{z-index:458;margin-top:5px;position:relative;width:33.81%;left:33%;}#u21722-5_img,#u21723-5_img,#u24404-4_img,#u24403-4_img,#u24402-4_img{display:block;vertical-align:top;width:100%;}#u19711-bw{min-height:444px;margin-bottom:-444px;margin-top:62px;}body{overflow-x:hidden;min-width:320px;padding-bottom:298px;}} \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/css/info-seite.css b/java/wellmann-shop/src/main/webapp/resources/manager/css/info-seite.css new file mode 100644 index 0000000..e1bd298 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/css/info-seite.css @@ -0,0 +1,2 @@ +.version.info_seite{color:#0000FB;background-color:#FBDD41;}#page{z-index:1;width:1200px;min-height:26990px;background-image:none;border-width:0px;border-color:#000000;background-color:transparent;margin-left:auto;margin-right:auto;}#pstart{z-index:545;width:0.01px;margin-right:-10000px;margin-left:199px;}#start{margin-left:1px;position:relative;}#u22271{z-index:2;width:234px;background-color:transparent;margin-left:284px;top:-6px;margin-bottom:-6px;position:relative;}#u22271_img{padding-left:28px;padding-right:28px;}#u22245-4{z-index:4;display:block;vertical-align:top;margin-left:201px;margin-top:27px;position:relative;}#u25127{z-index:679;width:801px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-left:1px;margin-top:76px;position:relative;}#u23268{z-index:708;width:800px;height:1px;background-color:#7F7F7F;margin-left:1px;position:relative;}#u22300-8{z-index:680;display:block;vertical-align:top;margin-left:93px;margin-top:32px;position:relative;}#ppu22267{z-index:703;width:0.01px;margin-left:98px;margin-top:32px;}#u22267{z-index:704;width:174px;vertical-align:top;position:relative;margin-right:-10000px;margin-top:1px;}#u22267_states{float:left;width:174px;height:45px;background:transparent url("../images/u22267_states.png?crc=500309399") no-repeat 0px 0px;}#u22267:hover #u22267_states{background:transparent url("../images/u22267_states-r.png?crc=4042967382") no-repeat 0px 0px;}#u22267:active #u22267_states{background:transparent url("../images/u22267_states-m.png?crc=4042967382") no-repeat 0px 0px;}#u22267.MuseLinkActive #u22267_states{background:transparent url("../images/u22267_states-a.png?crc=4020790485") no-repeat 0px 0px;}#u23443{z-index:711;width:180px;vertical-align:top;position:relative;margin-right:-10000px;left:405px;}#u23443_states{float:left;width:180px;height:45px;background:transparent url("../images/u23443_states.png?crc=77398154") no-repeat 0px 0px;}#u23443:hover #u23443_states{background:transparent url("../images/u23443_states-r.png?crc=197454270") no-repeat 0px 0px;}#u23443:active #u23443_states{background:transparent url("../images/u23443_states-m.png?crc=197454270") no-repeat 0px 0px;}#u23443.MuseLinkActive #u23443_states{background:transparent url("../images/u23443_states-a.png?crc=3986935662") no-repeat 0px 0px;}#ppu23452{z-index:725;width:0.01px;margin-left:69px;margin-top:17px;}#u23452{z-index:726;width:233px;vertical-align:top;position:relative;margin-right:-10000px;}#u23452_states{float:left;width:233px;height:45px;background:transparent url("../images/u23452_states.png?crc=474287122") no-repeat 0px 0px;}#u23452:hover #u23452_states{background:transparent url("../images/u23452_states-r.png?crc=14105890") no-repeat 0px 0px;}#u23452:active #u23452_states{background:transparent url("../images/u23452_states-m.png?crc=14105890") no-repeat 0px 0px;}#u23452.MuseLinkActive #u23452_states{background:transparent url("../images/u23452_states-a.png?crc=97812374") no-repeat 0px 0px;}#u23446{z-index:716;width:190px;vertical-align:top;position:relative;margin-right:-10000px;left:429px;}#u23446_states{float:left;width:190px;height:45px;background:transparent url("../images/u23446_states.png?crc=4097103742") no-repeat 0px 0px;}#u23446:hover #u23446_states{background:transparent url("../images/u23446_states-r.png?crc=4239571020") no-repeat 0px 0px;}#u23446:active #u23446_states{background:transparent url("../images/u23446_states-m.png?crc=4239571020") no-repeat 0px 0px;}#u23446.MuseLinkActive #u23446_states{background:transparent url("../images/u23446_states-a.png?crc=3788330210") no-repeat 0px 0px;}#ppu22262{z-index:688;width:0.01px;margin-left:114px;margin-top:16px;}#u22262{z-index:689;width:143px;vertical-align:top;position:relative;margin-right:-10000px;}#u22262_states{float:left;width:143px;height:45px;background:transparent url("../images/u22262_states.png?crc=3825990998") no-repeat 0px 0px;}#u22262:hover #u22262_states{background:transparent url("../images/u22262_states-r.png?crc=530876853") no-repeat 0px 0px;}#u22262:active #u22262_states{background:transparent url("../images/u22262_states-m.png?crc=530876853") no-repeat 0px 0px;}#u22262.MuseLinkActive #u22262_states{background:transparent url("../images/u22262_states-a.png?crc=3865750108") no-repeat 0px 0px;}#u23449{z-index:721;width:292px;vertical-align:top;position:relative;margin-right:-10000px;left:333px;}#u23449_states{float:left;width:292px;height:45px;background:transparent url("../images/u23449_states.png?crc=531838737") no-repeat 0px 0px;}#u23449:hover #u23449_states{background:transparent url("../images/u23449_states-r.png?crc=3764686161") no-repeat 0px 0px;}#u23449:active #u23449_states{background:transparent url("../images/u23449_states-m.png?crc=3764686161") no-repeat 0px 0px;}#u23449.MuseLinkActive #u23449_states{background:transparent url("../images/u23449_states-a.png?crc=137362830") no-repeat 0px 0px;}#ppu22293{z-index:693;width:0.01px;margin-left:135px;margin-top:17px;}#u22293{z-index:694;width:100px;vertical-align:top;position:relative;margin-right:-10000px;margin-top:1px;}#u22293_states{float:left;width:100px;height:45px;background:transparent url("../images/u22293_states.png?crc=93231195") no-repeat 0px 0px;}#u22293:hover #u22293_states{background:transparent url("../images/u22293_states-r.png?crc=497200591") no-repeat 0px 0px;}#u22293:active #u22293_states{background:transparent url("../images/u22293_states-m.png?crc=497200591") no-repeat 0px 0px;}#u22293.MuseLinkActive #u22293_states{background:transparent url("../images/u22293_states-a.png?crc=283752413") no-repeat 0px 0px;}#u23982{z-index:731;width:292px;vertical-align:top;position:relative;margin-right:-10000px;left:312px;}#u23982_states{float:left;width:292px;height:45px;background:transparent url("../images/u23982_states.png?crc=191305221") no-repeat 0px 0px;}#u23982:hover #u23982_states{background:transparent url("../images/u23982_states-r.png?crc=4085934979") no-repeat 0px 0px;}#u23982:active #u23982_states{background:transparent url("../images/u23982_states-m.png?crc=4085934979") no-repeat 0px 0px;}#u23982.MuseLinkActive #u23982_states{background:transparent url("../images/u23982_states-a.png?crc=3892203500") no-repeat 0px 0px;}#ppu22278{z-index:698;width:0.01px;margin-left:76px;margin-top:16px;}#u22278{z-index:699;width:218px;vertical-align:top;position:relative;margin-right:-10000px;}#u22278_states{float:left;width:218px;height:45px;background:transparent url("../images/u22278_states.png?crc=4099191921") no-repeat 0px 0px;}#u22278:hover #u22278_states{background:transparent url("../images/u22278_states-r.png?crc=4082250002") no-repeat 0px 0px;}#u22278:active #u22278_states{background:transparent url("../images/u22278_states-m.png?crc=4082250002") no-repeat 0px 0px;}#u22278.MuseLinkActive #u22278_states{background:transparent url("../images/u22278_states-a.png?crc=12935852") no-repeat 0px 0px;}#u23985{z-index:736;height:45px;width:292px;vertical-align:top;position:relative;margin-right:-10000px;left:371px;background:transparent url("../images/u23985.png?crc=4151600689") no-repeat 0px 0px;}#u23985:hover{background:transparent url("../images/u23985-r.png?crc=4057509041") no-repeat 0px 0px;}#u23985:active{background:transparent url("../images/u23985-m.png?crc=4057509041") no-repeat 0px 0px;}#u23269{z-index:709;width:800px;height:1px;background-color:#7F7F7F;margin-top:32px;position:relative;}#u24860{z-index:1149;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:161px;position:relative;}#u23646{z-index:1150;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;}#u23512{z-index:1151;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:24px;position:relative;}#u23514{z-index:1176;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23517{z-index:1175;width:0.01px;margin-top:20px;}#u23517{z-index:1175;width:240px;height:534px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/kelly-sikkema-290463.jpg?crc=4135416089") no-repeat center center;background-size:cover;}#u23513-23{z-index:1152;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23516{z-index:1177;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u23553{z-index:607;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:143px;position:relative;}#u23482{z-index:608;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:27px;position:relative;}#u23485{z-index:609;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u23487{z-index:621;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23490{z-index:620;width:0.01px;margin-top:20px;}#u23490{z-index:620;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/header_3.jpg?crc=304693507") no-repeat right top;background-size:cover;}#u23486-10{z-index:610;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23489{z-index:622;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u23559{z-index:624;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:141px;position:relative;}#u23455{z-index:625;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:26px;position:relative;}#u23457{z-index:626;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u23461{z-index:635;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23458{z-index:634;width:0.01px;margin-top:20px;}#u23458{z-index:634;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180426_140115.jpg?crc=4214834862") no-repeat center center;background-size:cover;}#u23460-7{z-index:627;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23462{z-index:636;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u23657{z-index:638;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:143px;position:relative;}#u23572{z-index:639;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:26px;position:relative;}#u23574{z-index:654;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23577{z-index:653;width:0.01px;margin-top:20px;}#u23577{z-index:653;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/bank-phrom-352283-unsplash.jpg?crc=4102018501") no-repeat right bottom;background-size:cover;}#u23573-13{z-index:640;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23576{z-index:655;width:800px;height:1px;background-color:#7F7F7F;margin-top:22px;position:relative;}#u25124{z-index:657;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:142px;position:relative;}#u23252{z-index:658;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u23149{z-index:659;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:25px;position:relative;}#u23154{z-index:671;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu23151{z-index:670;width:0.01px;margin-top:20px;}#u23151{z-index:670;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/markus-spiske-104910-unsplash.jpg?crc=437042132") no-repeat left top;background-size:cover;}#u23153-10{z-index:660;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u23152{z-index:672;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u23746-5{z-index:674;position:relative;margin-right:-10000px;width:405px;margin-top:270px;left:327px;}#papiere{margin-left:1px;margin-top:141px;position:relative;}#u23011{z-index:498;width:800px;height:1px;background-color:#7F7F7F;margin-left:1px;margin-top:31px;position:relative;}#pu23010{z-index:497;width:0.01px;margin-left:1px;margin-top:21px;}#u23010{z-index:497;width:240px;height:501px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/andrew-pons-6488-unsplash.jpg?crc=4163462341") no-repeat center center;background-size:cover;}#pu23012-17{z-index:480;width:0.01px;padding-bottom:0px;margin-right:-10000px;margin-top:3px;margin-left:250px;}#u23012-17{z-index:480;display:block;vertical-align:top;position:relative;}#ppu23033{z-index:500;width:0.01px;margin-left:22px;margin-top:25px;}#u23033{z-index:501;width:290px;vertical-align:top;position:relative;margin-right:-10000px;}#u23033_states{float:left;width:290px;height:23px;background:transparent url("../images/u23033_states.png?crc=388746849") no-repeat 0px 0px;}#u23033:hover #u23033_states{background:transparent url("../images/u23033_states-r.png?crc=536168734") no-repeat 0px 0px;}#u23036{z-index:510;width:183px;vertical-align:top;position:relative;margin-right:-10000px;left:323px;}#u23036_states{float:left;width:183px;height:23px;background:transparent url("../images/u23036_states.png?crc=179848421") no-repeat 0px 0px;}#u23036:hover #u23036_states{background:transparent url("../images/u23036_states-r.png?crc=139242062") no-repeat 0px 0px;}#ppu23034{z-index:503;width:0.01px;margin-left:22px;margin-top:11px;}#u23034{z-index:504;width:290px;vertical-align:top;position:relative;margin-right:-10000px;}#u23034_states{float:left;width:290px;height:23px;background:transparent url("../images/u23034_states.png?crc=387386755") no-repeat 0px 0px;}#u23034:hover #u23034_states{background:transparent url("../images/u23034_states-r.png?crc=3949929974") no-repeat 0px 0px;}#u23037{z-index:513;width:183px;vertical-align:top;position:relative;margin-right:-10000px;margin-top:5px;left:323px;}#u23037_states{float:left;width:183px;height:23px;background:transparent url("../images/u23037_states.png?crc=4284819052") no-repeat 0px 0px;}#u23037:hover #u23037_states{background:transparent url("../images/u23037_states-r.png?crc=3870716018") no-repeat 0px 0px;}#u23035{z-index:507;width:290px;vertical-align:top;margin-left:22px;margin-top:5px;position:relative;}#u23035_states{float:left;width:290px;height:23px;background:transparent url("../images/u23035_states.png?crc=3979783365") no-repeat 0px 0px;}#u23035:hover #u23035_states{background:transparent url("../images/u23035_states-r.png?crc=4106196163") no-repeat 0px 0px;}#u23008{z-index:499;width:800px;height:1px;background-color:#7F7F7F;margin-left:1px;margin-top:20px;position:relative;}#u23668{z-index:516;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-left:1px;margin-top:147px;position:relative;}#u23080{z-index:533;width:800px;height:1px;background-color:#7F7F7F;margin-top:28px;position:relative;}#pu23077{z-index:532;width:0.01px;margin-top:21px;}#u23077{z-index:532;width:240px;height:444px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/color-417694_1920-u23077-fr.jpg?crc=3962145376") no-repeat left center;background-size:cover;}#pu23079-15{z-index:517;width:0.01px;padding-bottom:0px;margin-right:-10000px;margin-left:250px;}#u23079-15{z-index:517;display:block;vertical-align:top;position:relative;}#u23110{z-index:536;width:550px;vertical-align:top;margin-top:20px;position:relative;}#u23110_states{float:left;width:550px;height:24px;background:transparent url("../images/u23110_states.png?crc=3959864653") no-repeat 0px 0px;}#u23110:hover #u23110_states{background:transparent url("../images/u23110_states-r.png?crc=4160809584") no-repeat 0px 0px;}#u23112{z-index:539;width:550px;vertical-align:top;margin-top:10px;position:relative;}#u23112_states{float:left;width:550px;height:24px;background:transparent url("../images/u23112_states.png?crc=45415286") no-repeat 0px 0px;}#u23112:hover #u23112_states{background:transparent url("../images/u23112_states-r.png?crc=4059458710") no-repeat 0px 0px;}#u23114{z-index:542;width:550px;vertical-align:top;margin-top:10px;position:relative;}#u23114_states{float:left;width:550px;height:24px;background:transparent url("../images/u23114_states.png?crc=3975199040") no-repeat 0px 0px;}#u23114:hover #u23114_states{background:transparent url("../images/u23114_states-r.png?crc=519324869") no-repeat 0px 0px;}#u23078{z-index:534;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u23028{z-index:8;width:801px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:1px;margin-left:1px;margin-top:148px;position:relative;}#u22397{z-index:9;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;position:relative;}#u22315{z-index:29;width:800px;height:1px;background-color:#7F7F7F;margin-top:25px;position:relative;}#pu22312{z-index:28;width:0.01px;margin-top:20px;}#u22312{z-index:28;width:240px;height:332px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/lukas-blazek-263121.jpg?crc=391477262") no-repeat left top;background-size:cover;}#u22309-18{z-index:10;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22318{z-index:30;width:800px;height:1px;background-color:#7F7F7F;margin-top:17px;position:relative;}#u22391{z-index:32;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:50px;position:relative;}#u22332{z-index:59;width:800px;height:1px;background-color:#7F7F7F;margin-top:25px;position:relative;}#pu22331{z-index:58;width:0.01px;margin-top:20px;}#u22331{z-index:58;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/kate-trysh-485779-unsplash.jpg?crc=4184394550") no-repeat center bottom;background-size:cover;}#u22330-25{z-index:33;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22333{z-index:60;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22394{z-index:62;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:50px;position:relative;}#u22369{z-index:86;width:800px;height:1px;background-color:#7F7F7F;margin-top:25px;position:relative;}#pu22368{z-index:85;width:0.01px;margin-top:19px;}#u22368{z-index:85;width:240px;height:343px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/envelope-2679338_1920.jpg?crc=274679875") no-repeat center center;background-size:cover;}#u22367-22{z-index:63;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22370{z-index:87;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22441{z-index:89;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:49px;position:relative;}#u22400{z-index:90;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:25px;position:relative;}#u22401{z-index:110;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22405{z-index:109;width:0.01px;margin-top:19px;}#u22405{z-index:109;width:240px;height:343px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/sticker-u19801-fr.jpg?crc=509278434") no-repeat center center;background-size:cover;}#u22403-18{z-index:91;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22404{z-index:111;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#bloecke{margin-top:50px;position:relative;}#u22444{z-index:113;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-left:1px;margin-top:25px;position:relative;}#u22448{z-index:141;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22447{z-index:140;width:0.01px;margin-top:20px;}#u22447{z-index:140;width:240px;height:417px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180426_122325_korr.jpg?crc=3910031820") no-repeat center center;background-size:cover;}#u22449-26{z-index:114;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22445{z-index:142;width:800px;height:1px;background-color:#7F7F7F;margin-top:33px;position:relative;}#u22517{z-index:144;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:54px;position:relative;}#u22475{z-index:145;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:25px;position:relative;}#u22476{z-index:171;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22480{z-index:170;width:0.01px;margin-top:19px;}#u22480{z-index:170;width:240px;height:343px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180423_141258_korr-u19926-fr.jpg?crc=4262253073") no-repeat center center;background-size:cover;}#u22478-24{z-index:146;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22479{z-index:172;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22547{z-index:174;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:55px;position:relative;}#u22520{z-index:175;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:24px;position:relative;}#u22522{z-index:176;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22524{z-index:200;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22526{z-index:199;width:0.01px;margin-top:19px;}#u22526{z-index:199;width:240px;height:343px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/ron-dyar-521350-unsplash.jpg?crc=5776618") no-repeat center center;background-size:cover;}#u22525-22{z-index:177;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22527{z-index:201;width:800px;height:1px;background-color:#7F7F7F;margin-top:23px;position:relative;}#u22581{z-index:203;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:57px;position:relative;}#u22554{z-index:226;width:800px;height:1px;background-color:#7F7F7F;margin-top:24px;position:relative;}#pu22556{z-index:225;width:0.01px;margin-top:20px;}#u22556{z-index:225;width:240px;height:411px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/sunyu-460812-unsplash.jpg?crc=4211209260") no-repeat center center;background-size:cover;}#u22553-21{z-index:204;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22555{z-index:227;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22630{z-index:229;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:53px;position:relative;}#u22588{z-index:230;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:21px;position:relative;}#u22593{z-index:258;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22591{z-index:257;width:0.01px;margin-top:20px;}#u22591{z-index:257;width:240px;height:411px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/formular.jpg?crc=3799210080") no-repeat center center;background-size:cover;}#u22594-26{z-index:231;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22592{z-index:259;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22732{z-index:261;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:52px;position:relative;}#u22637{z-index:297;width:800px;height:1px;background-color:#7F7F7F;margin-top:24px;position:relative;}#pu22639{z-index:296;width:0.01px;margin-top:20px;}#u22639{z-index:296;width:240px;height:426px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/durchschreibesatz.jpg?crc=3865706769") no-repeat center center;background-size:cover;}#u22641-34{z-index:262;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22640{z-index:298;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22729{z-index:300;width:800px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;margin-top:51px;position:relative;}#u22676{z-index:301;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:23px;position:relative;}#u22677{z-index:302;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22678{z-index:327;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22681{z-index:326;width:0.01px;margin-top:20px;}#u22681{z-index:326;width:240px;height:411px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180423_142230_korr.jpg?crc=252284332") no-repeat center center;background-size:cover;}#u22679-23{z-index:303;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22680{z-index:328;width:800px;height:1px;background-color:#7F7F7F;margin-top:21px;position:relative;}#u22743{z-index:330;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:52px;position:relative;}#u22708{z-index:331;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:25px;position:relative;}#u22712{z-index:353;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22711{z-index:352;width:0.01px;margin-top:20px;}#u22711{z-index:352;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180423_143014_korr.jpg?crc=435457347") no-repeat center center;background-size:cover;}#u22713-20{z-index:332;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22709{z-index:354;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22773{z-index:356;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:53px;position:relative;}#u22746{z-index:357;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:24px;position:relative;}#u22747{z-index:358;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22751{z-index:380;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22748{z-index:379;width:0.01px;margin-top:20px;}#u22748{z-index:379;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/postcard-1091283_1920.jpg?crc=317493847") no-repeat center center;background-size:cover;}#u22749-20{z-index:359;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22752{z-index:381;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22833{z-index:383;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:51px;position:relative;}#u22776{z-index:384;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:24px;position:relative;}#u22778{z-index:385;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22779{z-index:386;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22783{z-index:406;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22780{z-index:405;width:0.01px;margin-top:20px;}#u22780{z-index:405;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/mappen2.jpg?crc=303436636") no-repeat center top;background-size:cover;}#u22781-18{z-index:387;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22782{z-index:407;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22899{z-index:409;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:52px;position:relative;}#satz,#offsetdruck,#digitaldruck,#weiterverarbeitung,#druckdaten,#farben,#produkte,#briefpapier,#visitenkarten,#kuverts,#etiketten,#faltbltter,#flyer,#broschren,#formulare,#selbstdurchschreibend,#plakate,#register,#postkarten,#prsentationsmappen,#ringbindungen{position:relative;}#u22836{z-index:410;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:30px;position:relative;}#u22837{z-index:411;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22838{z-index:412;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22839{z-index:413;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22841{z-index:432;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22842{z-index:431;width:0.01px;margin-top:20px;}#u22842{z-index:431;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/20180423_141437_korr.jpg?crc=349457946") no-repeat center center;background-size:cover;}#u22840-17{z-index:414;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22843{z-index:433;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#handouts{margin-top:55px;position:relative;}#u22902{z-index:435;width:800px;border-width:0px;border-color:transparent;background-color:transparent;margin-top:26px;position:relative;}#u22903{z-index:436;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22904{z-index:437;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22905{z-index:438;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22906{z-index:439;width:800px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;}#u22908{z-index:460;width:800px;height:1px;background-color:#7F7F7F;position:relative;}#pu22907{z-index:459;width:0.01px;margin-top:20px;}#u22907{z-index:459;width:240px;height:380px;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);position:relative;margin-right:-10000px;background:transparent url("../images/rainier-ridao-569546-unsplash.jpg?crc=4280425416") no-repeat center center;background-size:cover;}#u22909-19{z-index:440;display:block;vertical-align:top;position:relative;margin-right:-10000px;left:250px;}#u22910{z-index:461;width:800px;height:1px;background-color:#7F7F7F;margin-top:20px;position:relative;}#u22957-6{z-index:463;display:block;vertical-align:top;margin-top:53px;position:relative;}#pu22958-5{z-index:469;width:0.01px;margin-left:21px;margin-top:44px;}#u22958-5{z-index:469;margin-bottom:-11px;position:relative;margin-right:-10000px;width:371px;margin-top:-1px;left:-1px;}#u22959-5{z-index:474;margin-bottom:-11px;position:relative;margin-right:-10000px;width:371px;margin-top:-1px;left:398px;}#datenschutz{margin-left:1px;margin-top:186px;position:relative;}#u24108-126{z-index:983;display:block;vertical-align:top;margin-top:34px;position:relative;}#agbs{margin-left:1px;margin-top:108px;position:relative;}#u24053{z-index:909;width:800px;height:1px;background-color:#7F7F7F;margin-left:1px;margin-top:23px;position:relative;}#u24052-169{z-index:740;display:block;vertical-align:top;margin-top:21px;position:relative;}#pamphletu23295{z-index:546;width:0.01px;height:55px;padding-bottom:411px;position:fixed;top:16px;right:240px;}#u23302{position:absolute;width:219px;height:466px;}#u23302popup{z-index:547;}#u23303{z-index:548;width:204px;height:457.6px;box-shadow:0px 0px 8px rgba(255,255,255,0.5),0px 0px 8px rgba(255,255,255,0.5)/* glow */, +6px 6px 8px rgba(0,0,0,0.5)/* drop shadow*/;border-width:0px;border-color:transparent;background-color:#FFFFFF;border-radius:5px;position:relative;margin-right:-10000px;padding:1px 7px 7.399999999999977px 8px;}#u23307-4{z-index:549;position:relative;}#u23306-4{z-index:553;margin-top:1px;position:relative;}#u23628-4{z-index:589;margin-top:2px;position:relative;}#u23309-4{z-index:557;position:relative;}#u23430-4{z-index:569;margin-top:1px;position:relative;}#u23310-4{z-index:561;margin-top:2px;position:relative;}#u23631-4{z-index:577;margin-top:2px;position:relative;}#u23634-4{z-index:581;margin-top:2px;position:relative;}#u23637-4{z-index:585;position:relative;}#u23433-4{z-index:573;position:relative;}#u24528-4{z-index:597;position:relative;}#u23305-4{z-index:565;display:block;vertical-align:top;margin-top:1px;position:relative;}#u24043-4{z-index:593;top:-1px;position:relative;}#u24043-4_img{display:block;vertical-align:top;margin-bottom:-1px;}#u23311{z-index:601;width:50px;height:0px;padding-bottom:50px;position:relative;margin-right:-10000px;margin-top:5px;left:169px;}#u23312{width:50px;height:35px;border-width:0px;border-color:transparent;background-color:#000000;padding-bottom:15px;position:fixed;top:21px;right:21px;}#u23312:hover{border-width:0px;border-color:transparent;background-color:#008089;width:50px;height:35px;min-height:0px;margin:0px;}#u23312.PamphletThumbSelected{background-color:#000000;border-radius:0px;width:50px;height:35px;min-height:0px;margin:0px;}#u23313{z-index:603;width:30px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:14px;left:9px;}#u23316{z-index:604;width:30px;height:3px;background-color:#FFFFFF;position:relative;}#u23314{z-index:605;width:30px;height:3px;background-color:#FFFFFF;margin-top:6px;position:relative;}#u23315{z-index:606;width:30px;height:3px;background-color:#FFFFFF;margin-top:6px;position:relative;}.PamphletWidget .ThumbGroup .Thumb,.PamphletNextButton,.PamphletPrevButton,.PamphletCloseButton{cursor:pointer;}.css_verticalspacer .verticalspacer{height:calc(100vh - 24704px);}#pimpressum{z-index:1144;width:0.01px;padding-bottom:0px;margin-bottom:-94px;margin-right:-10000px;margin-top:-2103px;}#impressum{margin-left:200px;position:relative;}#u24093-71{z-index:911;display:block;vertical-align:top;margin-left:199px;margin-top:25px;position:relative;}#u24607-4{z-index:1145;margin-left:538px;margin-top:50px;position:relative;}#u24099{z-index:982;width:1200px;background-color:#008089;padding-bottom:128px;margin-top:50px;position:relative;}#u24466{z-index:1109;width:761px;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:91px;left:225px;}#u24467-17{z-index:1127;display:block;vertical-align:top;position:relative;margin-right:-10000px;}#u24468{z-index:1110;width:176px;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;left:585px;}#u24472-4{z-index:1123;display:block;vertical-align:top;position:relative;}#u24470-4{z-index:1111;margin-top:11px;position:relative;}#u24469-4{z-index:1115;margin-top:12px;position:relative;}#u24471-4{z-index:1119;margin-top:11px;position:relative;}#u23746-5_img,#u22958-5_img,#u22959-5_img,#u23307-4_img,#u23306-4_img,#u23628-4_img,#u23309-4_img,#u23430-4_img,#u23310-4_img,#u23631-4_img,#u23634-4_img,#u23637-4_img,#u23433-4_img,#u24528-4_img,#u24607-4_img,#u24470-4_img,#u24469-4_img,#u24471-4_img{display:block;vertical-align:top;}#muse_css_mq,.html{background-color:#FFFFFF;}body{position:relative;min-width:1200px;padding-bottom:1px;}.verticalspacer{min-height:2286px;} \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/css/nomq_index.css b/java/wellmann-shop/src/main/webapp/resources/manager/css/nomq_index.css new file mode 100644 index 0000000..e187fa9 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/css/nomq_index.css @@ -0,0 +1 @@ +#muse_css_mq{background-color:#FFFFFF;}#bp_infinity.active{display:block;}#page{min-height:4902px;max-width:1200px;}#pu19797-4{z-index:158;margin-top:-6px;width:84.09%;}#u19797-4{z-index:158;position:relative;width:97px;left:0%;margin:145px -10000px -4px 7.135777987966923%;}#u19710-4{z-index:170;position:relative;width:147px;left:12.79%;margin:145px -10000px -4px 7.135777987966923%;}#u20070-4{z-index:174;position:relative;width:85px;left:30.33%;margin:145px -10000px -5px 7.135777987966923%;}#u20068{z-index:182;margin-right:-10000px;margin-left:59.47%;}#u20098-4{z-index:162;position:relative;width:86px;left:65.81%;margin:145px -10000px -4px 7.135777987966923%;}#u19969-4{z-index:166;position:relative;width:85px;left:77.31%;margin:145px -10000px -4px 7.135777987966923%;}#u20099-4{z-index:178;position:relative;width:117px;left:88.9%;margin:145px -10000px -5px 7.135777987966923%;}#u19797-4_img,#u19710-4_img,#u20070-4_img,#u20098-4_img,#u19969-4_img,#u20099-4_img{display:block;vertical-align:top;}#u19651,#u19651popup,#u19652,#u19656,#u19654{width:1200px;height:600px;}#u19640popup{width:96.67%;left:1.67%;}#u19643-6,#u19642-4,#u19641-8{width:100.52%;}#u20095{margin-top:461px;left:48.51%;}#produkte{margin-top:32px;left:0%;margin-left:0%;}#u20018-6{width:65%;margin-left:17.5%;left:7px;}#pu19896{z-index:184;margin-top:38px;width:100%;left:0%;margin-left:0%;}#u19896{z-index:184;}#u19914{z-index:185;}#buttonu19915{z-index:186;}#start,#buttonu19915:hover{margin-left:0%;}#pu19917,#u19917{z-index:187;}#u19918{z-index:193;}#u19918_states{background-image:url("../images/u19918_states.png?crc=430499910");}#buttonu19915:hover #u19918_states{background-image:url("../images/u19918_states-r.png?crc=162795771");}#u19916-4{z-index:188;}#u20332{z-index:196;}#u20332_states{background-image:url("../images/u20332_states.png?crc=245443754");}#buttonu19915:hover #u20332_states{background-image:url("../images/u20332_states-r.png?crc=450819133");}#u20071{z-index:217;margin-right:-10000px;left:25.84%;}#u20072{z-index:218;}#buttonu20073{z-index:219;height:328.8937500000012px;padding-bottom:8.106249999998795px;}#buttonu19915.ButtonSelected,#buttonu20073:hover{margin-left:0%;}#pu20075,#u20075{z-index:220;}#u20076{z-index:226;}#u20076_states{background-image:url("../images/u20076_states.png?crc=430499910");}#buttonu20073:hover #u20076_states{background-image:url("../images/u20076_states-r.png?crc=4066690632");}#u20074-4{z-index:221;}#u20353{z-index:229;}#u20353_states{background-image:url("../images/u20353_states.png?crc=245443754");}#buttonu20073:hover #u20353_states{background-image:url("../images/u20353_states-r.png?crc=450819133");}#u20044{z-index:203;margin-right:-10000px;left:51.67%;}#u20045{z-index:204;}#buttonu20046{z-index:205;height:329.9937500000011px;padding-bottom:7.006249999998886px;}#buttonu20073.ButtonSelected,#buttonu20046:hover{margin-left:0%;}#pu20047,#u20047{z-index:206;}#u20049{z-index:212;}#u20049_states{background-image:url("../images/u20049_states.png?crc=430499910");}#buttonu20046:hover #u20049_states{background-image:url("../images/u20049_states-r.png?crc=4066690632");}#u20048-4{z-index:207;}#u20370{z-index:215;}#u20370_states{background-image:url("../images/u20370_states.png?crc=245443754");}#buttonu20046:hover #u20370_states{background-image:url("../images/u20370_states-r.png?crc=450819133");}#u19798{z-index:231;margin-right:-10000px;left:77.5%;}#u19799{z-index:232;}#buttonu19800{z-index:233;height:329.9937500000011px;padding-bottom:7.006249999998886px;}#buttonu20046.ButtonSelected,#buttonu19800:hover{margin-left:0%;}#pu19801,#u19801{z-index:234;}#u19803{z-index:240;}#u19803_states{background-image:url("../images/u19803_states.png?crc=430499910");}#buttonu19800:hover #u19803_states{background-image:url("../images/u19803_states-r.png?crc=4066690632");}#u19802-4{z-index:235;}#u20379{z-index:243;}#u20379_states{background-image:url("../images/u20379_states.png?crc=245443754");}#buttonu19800:hover #u20379_states{background-image:url("../images/u20379_states-r.png?crc=450819133");}#pu19611{z-index:245;margin-top:85px;width:100%;left:0%;margin-left:0%;}#u19611{z-index:245;margin-right:-10000px;margin-top:1px;}#u19630{z-index:246;}#buttonu19631{z-index:247;}#buttonu19800.ButtonSelected,#buttonu19631:hover{margin-left:0%;}#pu19632,#u19632{z-index:248;}#u19634{z-index:254;}#u19634_states{background-image:url("../images/u19634_states.png?crc=430499910");}#buttonu19631:hover #u19634_states{background-image:url("../images/u19634_states-r.png?crc=4066690632");}#u19633-4{z-index:249;}#u20404{z-index:257;}#u20404_states{background-image:url("../images/u20404_states.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19631:hover #u20404_states{background-image:url("../images/u20404_states-r.png?crc=450819133");background-size:100%;}#u19921{z-index:259;margin-right:-10000px;left:25.84%;}#u19922{z-index:260;}#buttonu19923{z-index:261;}#buttonu19631.ButtonSelected,#buttonu19923:hover{margin-left:0%;}#pu19926,#u19926{z-index:262;}#u19924{z-index:268;}#u19924_states{background-image:url("../images/u19924_states.png?crc=430499910");}#buttonu19923:hover #u19924_states{background-image:url("../images/u19924_states-r.png?crc=4066690632");}#u19925-4{z-index:263;}#u20413{z-index:271;}#u20413_states{background-image:url("../images/u20413_states.png?crc=245443754");}#buttonu19923:hover #u20413_states{background-image:url("../images/u20413_states-r.png?crc=450819133");}#u19945{z-index:273;margin-right:-10000px;margin-top:1px;left:51.67%;}#u19946{z-index:274;}#buttonu19947{z-index:275;}#buttonu19923.ButtonSelected,#buttonu19947:hover{margin-left:0%;}#pu19949,#u19949{z-index:276;}#u19948{z-index:282;}#u19948_states{background-image:url("../images/u19948_states.png?crc=430499910");}#buttonu19947:hover #u19948_states{background-image:url("../images/u19948_states-r.png?crc=4066690632");}#u19950-4{z-index:277;}#u20422{z-index:285;}#u20422_states{background-image:url("../images/u20422_states.png?crc=245443754");background-size:97.22222222222221%;}#buttonu19947:hover #u20422_states{background-image:url("../images/u20422_states-r.png?crc=450819133");background-size:100%;}#u19661{z-index:287;margin-right:-10000px;margin-top:1px;left:77.5%;}#u19662{z-index:288;}#buttonu19663{z-index:289;}#buttonu19947.ButtonSelected,#buttonu19663:hover{margin-left:0%;}#pu19664,#u19664{z-index:290;}#u19666{z-index:296;}#u19666_states{background-image:url("../images/u19666_states.png?crc=430499910");}#buttonu19663:hover #u19666_states{background-image:url("../images/u19666_states-r.png?crc=4066690632");}#u19665-4{z-index:291;}#u20431{z-index:299;}#u20431_states{background-image:url("../images/u20431_states.png?crc=245443754");}#buttonu19663:hover #u20431_states{background-image:url("../images/u20431_states-r.png?crc=450819133");}#pu20100{z-index:301;margin-top:87px;width:100%;left:0%;margin-left:0%;}#u20100{z-index:301;margin-right:-10000px;}#u20119{z-index:302;}#buttonu20120{z-index:303;height:327.8968749999999px;padding-bottom:9.103125000000091px;}#buttonu19663.ButtonSelected,#buttonu20120:hover{margin-left:0%;}#pu20123,#u20123{z-index:304;}#u20121{z-index:310;}#u20121_states{background-image:url("../images/u20121_states.png?crc=430499910");}#buttonu20120:hover #u20121_states{background-image:url("../images/u20121_states-r.png?crc=4066690632");}#u20122-4{z-index:305;}#u20464{z-index:313;}#u20464_states{background-image:url("../images/u20464_states.png?crc=245443754");}#buttonu20120:hover #u20464_states{background-image:url("../images/u20464_states-r.png?crc=450819133");}#u19822{z-index:315;margin-right:-10000px;left:25.84%;}#u19841{z-index:316;}#buttonu19842{z-index:317;height:327.79062500000236px;padding-top:13px;padding-bottom:9.209374999997635px;}#buttonu19842:hover{height:328px;margin-left:0%;}#buttonu19842.ButtonSelected{height:328px;margin-left:0%;}#pu19843,#u19843{z-index:318;}#u19845{z-index:324;}#u19845_states{background-image:url("../images/u19845_states.png?crc=430499910");}#buttonu19842:hover #u19845_states{background-image:url("../images/u19845_states-r.png?crc=4066690632");}#u19844-4{z-index:319;}#u20473{z-index:327;margin-top:2px;margin-left:57.41%;}#u20473_states{background-image:url("../images/u20473_states.png?crc=245443754");}#buttonu19842:hover #u20473_states{background-image:url("../images/u20473_states-r.png?crc=450819133");}#u19712{z-index:329;margin-right:-10000px;left:51.67%;}#u19713{z-index:330;}#buttonu19714{z-index:331;height:328.8906250000023px;padding-bottom:8.109374999997726px;}#buttonu20120.ButtonSelected,#buttonu19714:hover{margin-left:0%;}#pu19716,#u19716{z-index:332;}#u19717{z-index:338;}#u19717_states{background-image:url("../images/u19717_states.png?crc=430499910");}#buttonu19714:hover #u19717_states{background-image:url("../images/u19717_states-r.png?crc=4066690632");}#u19715-4{z-index:333;}#u20482{z-index:341;}#u20482_states{background-image:url("../images/u20482_states.png?crc=245443754");}#buttonu19714:hover #u20482_states{background-image:url("../images/u20482_states-r.png?crc=450819133");}#u19685{z-index:343;margin-right:-10000px;left:77.5%;}#u19686{z-index:344;}#buttonu19687{z-index:345;}#buttonu19714.ButtonSelected,#buttonu19687:hover{margin-left:0%;}#pu19689,#u19689{z-index:346;}#u19688{z-index:352;}#u19688_states{background-image:url("../images/u19688_states.png?crc=430499910");}#buttonu19687:hover #u19688_states{background-image:url("../images/u19688_states-r.png?crc=4066690632");}#u19690-4{z-index:347;}#u20491{z-index:355;}#u20491_states{background-image:url("../images/u20491_states.png?crc=245443754");}#buttonu19687:hover #u20491_states{background-image:url("../images/u20491_states-r.png?crc=450819133");}#pu19970{z-index:357;margin-top:86px;width:100%;left:0%;margin-left:0%;}#u19970{z-index:357;margin-right:-10000px;}#u19971{z-index:358;}#buttonu19972{z-index:359;}#buttonu19687.ButtonSelected,#buttonu19972:hover{margin-left:0%;}#pu19975,#u19975{z-index:360;}#u19974{z-index:366;}#u19974_states{background-image:url("../images/u19974_states.png?crc=430499910");}#buttonu19972:hover #u19974_states{background-image:url("../images/u19974_states-r.png?crc=4066690632");}#u19973-4{z-index:361;}#u20540{z-index:369;}#u20540_states{background-image:url("../images/u20540_states.png?crc=245443754");}#buttonu19972:hover #u20540_states{background-image:url("../images/u20540_states-r.png?crc=450819133");}#u20020{z-index:371;margin-right:-10000px;left:25.84%;}#u20039{z-index:372;}#buttonu20040{z-index:373;}#buttonu19972.ButtonSelected,#buttonu20040:hover{margin-left:0%;}#pu20043,#u20043{z-index:374;}#u20041{z-index:380;}#u20041_states{background-image:url("../images/u20041_states.png?crc=430499910");}#buttonu20040:hover #u20041_states{background-image:url("../images/u20041_states-r.png?crc=4066690632");}#u20042-4{z-index:375;}#u20549{z-index:383;}#u20549_states{background-image:url("../images/u20549_states.png?crc=245443754");}#buttonu20040:hover #u20549_states{background-image:url("../images/u20549_states-r.png?crc=450819133");}#u19846{z-index:385;margin-right:-10000px;left:51.67%;}#u19865{z-index:386;}#buttonu19866{z-index:387;}#buttonu20040.ButtonSelected,#buttonu19866:hover{margin-left:0%;}#pu19867,#u19867{z-index:388;}#u19869{z-index:394;}#u19869_states{background-image:url("../images/u19869_states.png?crc=430499910");}#buttonu19866:hover #u19869_states{background-image:url("../images/u19869_states-r.png?crc=4066690632");}#u19868-4{z-index:389;}#u20558{z-index:397;}#u20558_states{background-image:url("../images/u20558_states.png?crc=245443754");}#buttonu19866:hover #u20558_states{background-image:url("../images/u20558_states-r.png?crc=450819133");}#u19994{z-index:399;margin-right:-10000px;left:77.5%;}#u19995{z-index:400;}#buttonu19996{z-index:401;}#buttonu19866.ButtonSelected,#buttonu19996:hover{margin-left:0%;}#buttonu19996.ButtonSelected{margin-left:0%;}#pu19999,#u19999{z-index:402;}#u19998{z-index:408;}#u19998_states{background-image:url("../images/u19998_states.png?crc=430499910");}#buttonu19996:hover #u19998_states{background-image:url("../images/u19998_states-r.png?crc=4066690632");}#u19997-4{z-index:403;}#u20567{z-index:411;}#u20567_states{background-image:url("../images/u20567_states.png?crc=245443754");}#buttonu19996:hover #u20567_states{background-image:url("../images/u20567_states-r.png?crc=450819133");}#u21531-8{z-index:442;display:block;vertical-align:top;margin-top:60px;position:relative;width:96.67%;left:0%;margin-left:1.67%;}#pu21563-5{z-index:450;margin-top:11px;width:63.17%;left:0%;margin-left:20.09%;}#u21563-5{z-index:450;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:48.95%;left:-0.14%;}#u21569-5{z-index:455;margin-bottom:-11px;position:relative;margin-right:-10000px;margin-top:-1px;width:48.95%;left:52.51%;}#u21563-5_img,#u21569-5_img{display:block;vertical-align:top;width:100%;}#kontakt{margin-top:114px;margin-left:0%;}#pu20125-24{z-index:413;margin-top:21px;width:98.34%;}#u20125-24{z-index:413;display:block;vertical-align:top;position:relative;width:39.07%;left:61.62%;margin:-8px -10000px -8px 0%;}#u19609{z-index:437;background-image:url("../images/fotolia_56863820_m.jpg?crc=143243195");width:62.29%;margin-left:0px;}#u19609 .fluid_height_spacer{padding-bottom:69.38775510204081%;}#u21525-4{z-index:438;display:block;vertical-align:top;position:relative;margin-right:-10000px;margin-top:377px;left:37.38%;margin-left:0%;}#u19919-5{z-index:198;margin-top:34px;width:100%;left:0%;margin-left:0%;}#widgetu19758{padding-bottom:0px;margin-top:35px;width:96.75%;margin-left:1.63%;left:1px;}#widgetu19783{width:47.81%;left:-0.09%;}#u19785-4{width:91.2%;}#u19786-4{min-height:20px;width:38.15%;left:61.86%;}#u19784-4{width:99.64%;}#widgetu19783:hover #u19784-4{width:99.64%;}#widgetu19783.focus-st #u19784-4{width:99.64%;}#widgetu19770{width:47.81%;left:52.29%;}#widgetu19783.fld-err-st #u19785-4,#u19771-4{width:91.2%;}#u19772-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19783.fld-err-st #u19784-4,#u19773-4{width:99.64%;}#widgetu19770:hover #u19773-4{width:99.64%;}#widgetu19770.focus-st #u19773-4{width:99.64%;}#widgetu19779{width:50.56%;left:-0.09%;}#pu19781-4{width:99.83%;margin-left:0.18%;}#u19781-4{width:68.95%;}#u19780-4{min-height:20px;width:28.84%;left:71.17%;}#u19782-4{width:94.21%;}#widgetu19779:hover #u19782-4{width:94.21%;}#widgetu19779.focus-st #u19782-4{width:94.21%;}#widgetu19765{width:47.81%;left:52.29%;}#widgetu19770.fld-err-st #u19771-4,#u19766-4{width:91.2%;}#u19767-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19770.fld-err-st #u19773-4,#u19768-4{width:99.64%;}#widgetu19765:hover #u19768-4{width:99.64%;}#widgetu19765.focus-st #u19768-4{width:99.64%;}#pstart,#pslideshowu19635,#pwidgetu19783,#pwidgetu19779,#pwidgetu19787{width:100%;}#widgetu19787{width:50.56%;left:-0.09%;}#widgetu19779.fld-err-st,#widgetu19787.fld-err-st{width:50.56%;}#pu19788-4{width:99.66%;margin-left:0.35%;}#u19788-4{width:69.06%;}#widgetu19787.fld-err-st #u19788-4{width:69.06%;}#u19790-4{min-height:20px;width:28.89%;left:71.12%;}#widgetu19787.fld-err-st #u19790-4{min-height:20px;width:28.89%;}#widgetu19779.fld-err-st #u19782-4,#u19789-4{width:94.21%;}#widgetu19787:hover #u19789-4{width:94.21%;}#widgetu19787.focus-st #u19789-4{width:94.21%;}#widgetu19787.fld-err-st #u19789-4{width:94.21%;}#widgetu19775{width:47.81%;left:52.29%;}#widgetu19783.fld-err-st,#widgetu19770.fld-err-st,#widgetu19765.fld-err-st,#widgetu19775.fld-err-st{width:47.81%;}#pu19785-4,#pu19771-4,#pu19766-4,#pu19776-4{width:79.82%;margin-left:0.19%;}#widgetu19765.fld-err-st #u19766-4,#u19776-4{width:91.2%;}#widgetu19775.fld-err-st #u19776-4{width:91.2%;}#u19778-4{min-height:20px;width:38.15%;left:61.86%;}#widgetu19783.fld-err-st #u19786-4,#widgetu19770.fld-err-st #u19772-4,#widgetu19765.fld-err-st #u19767-4,#widgetu19775.fld-err-st #u19778-4{min-height:20px;width:38.15%;}#widgetu19765.fld-err-st #u19768-4,#u19777-4{width:99.64%;}#widgetu19775:hover #u19777-4{width:99.64%;}#widgetu19775.focus-st #u19777-4{width:99.64%;}#widgetu19775.fld-err-st #u19777-4{width:99.64%;}#widgetu19760{width:100.09%;left:-0.09%;}#widgetu19760.fld-err-st{width:100.09%;}#pu19761-4{width:50.44%;margin-left:0.09%;}#widgetu19779.fld-err-st #u19781-4,#u19761-4{width:68.95%;}#widgetu19760.fld-err-st #u19761-4{width:68.95%;}#u19763-4{min-height:20px;width:28.84%;left:71.17%;}#widgetu19779.fld-err-st #u19780-4,#widgetu19760.fld-err-st #u19763-4{min-height:20px;width:28.84%;}#u19762-4{width:99.83%;}#widgetu19760:hover #u19762-4{width:99.83%;}#widgetu19760.focus-st #u19762-4{width:99.83%;}#widgetu19760.fld-err-st #u19762-4{width:99.83%;}#pu19759-4{margin-top:61px;width:38.16%;margin-left:42.99%;}#u19759-4{min-height:26px;width:55.54%;left:44.47%;}#u19769-4{min-height:26px;width:55.54%;left:44.47%;}#widgetu19758.frm-sub-st #u19759-4,#widgetu19758.frm-subm-err-st #u19769-4{min-height:30px;}#u19764-4{width:55.54%;left:44.47%;}#u19774-4{margin-bottom:-1px;width:38.15%;left:-0.23%;}#u19774-4:hover{margin-bottom:-1px;width:38.15%;}#u19774-4:active{margin-bottom:-1px;width:38.15%;}#anfahrt{margin-top:116px;margin-left:0%;}#u21795-6{z-index:460;display:block;vertical-align:top;position:relative;margin-left:50%;left:-341px;}#u19610{height:600px;}#u19610-bw{margin-top:2px;height:600px;}#pamphletu19736{z-index:466;right:20px;width:4.17%;max-width:50px;}#u19747{width:159px;height:0px;padding-bottom:238px;position:relative;}#u19747popup{z-index:467;}#u19748{z-index:468;width:159px;position:fixed;top:20px;right:71px;}#u19749{z-index:469;left:5.04%;}#u19750-4{z-index:470;}#u19753-4{z-index:474;}#u19755-4{z-index:478;}#u19754-4{z-index:482;}#u19751-4{z-index:486;}#u19752-4{z-index:490;}#u19747-wrapper{position:fixed;top:20px;right:230px;width:159px;}#u19739{z-index:494;padding-bottom:50px;width:100%;}#u19740{position:fixed;top:20px;right:20px;}#u19740:hover{margin-left:0px;}#u19740.PamphletThumbSelected{margin-left:0px;}#u19741{z-index:496;}#u19743{z-index:497;}#u19744{z-index:498;}#u19742{z-index:499;}.css_verticalspacer .verticalspacer{height:calc(100vh - 5202px);}#u19711{min-height:282px;padding-bottom:86px;}#u19711_align_to_page{max-width:1200px;}#u24221{z-index:500;border-width:0px;border-color:transparent;background-color:transparent;position:relative;margin-right:-10000px;margin-top:48px;width:63.42%;margin-left:18.3%;left:1px;}#u24191-17{z-index:518;display:block;vertical-align:top;position:relative;margin-right:-10000px;width:55.59%;margin-left:22.21%;left:-169px;}#u24197{z-index:501;border-width:0px;border-color:transparent;background-color:transparent;padding-bottom:0px;position:relative;margin-right:-10000px;width:23.13%;margin-left:38.44%;left:293px;}#u24167-4{z-index:514;display:block;vertical-align:top;position:relative;width:99.44%;margin-left:0.29%;left:-1px;}#u24141-4{z-index:502;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24142-4{z-index:506;margin-top:12px;position:relative;width:100%;margin-left:0%;left:0px;}#u24143-4{z-index:510;margin-top:11px;position:relative;width:100%;margin-left:0%;left:0px;}#u24141-4_img,#u24142-4_img,#u24143-4_img{display:block;vertical-align:top;width:99.44%;}#u19711-bw{min-height:282px;margin-bottom:-300px;margin-top:-6px;}body{padding-bottom:300px;} \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/css/site_global.css b/java/wellmann-shop/src/main/webapp/resources/manager/css/site_global.css new file mode 100644 index 0000000..e7211dc --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/css/site_global.css @@ -0,0 +1,157 @@ + html{ + min-height:100%; + min-width:100%; + -ms-text-size-adjust:none; + } +body,div,dl,dt,dd,ul,ol,li,nav,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,a{ + margin:0px; + padding:0px; + border-width:0px; + border-style:solid; + border-color:transparent; + -webkit-transform-origin:left top; + -ms-transform-origin:left top;-o-transform-origin:left top; + transform-origin:left top; + background-repeat:no-repeat; + } +button.submit-btn{ + -moz-box-sizing:content-box; + -webkit-box-sizing:content-box; + box-sizing:content-box; + } + .transition{ + -webkit-transition-property:background-image,background-position,background-color,border-color,border-radius,color,font-size,font-style,font-weight,letter-spacing,line-height,text-align,box-shadow,text-shadow,opacity; + transition-property:background-image,background-position,background-color,border-color,border-radius,color,font-size,font-style,font-weight,letter-spacing,line-height,text-align,box-shadow,text-shadow,opacity; + } + .transition *{ + -webkit-transition:inherit; + transition:inherit; + } + +table{ + border-collapse:collapse; + border-spacing:0px; + } + +fieldset,img{ + border:0px; + border-style:solid; + -webkit-transform-origin:left top; + -ms-transform-origin:left top; + -o-transform-origin:left top; + transform-origin:left top; + } + +address,caption,cite,code,dfn,em,strong,th,var,optgroup{ + font-style:inherit; + font-weight:inherit; + } + +del,ins{ + text-decoration:none; + } + +li{ + list-style:none; + } + +caption,th{ + text-align:left; + } + +h1,h2,h3,h4,h5,h6{ + font-size:100%; + font-weight:inherit; + } + +input,button,textarea,select,optgroup,option{ + font-family:inherit; + font-size:inherit; + font-style:inherit; + font-weight:inherit; + } + .form-grp input,.form-grp textarea{ + -webkit-appearance:none; + -webkit-border-radius:0; + } + +body{ + font-family:Arial, Helvetica Neue, Helvetica, sans-serif; + text-align:left; + font-size:14px; + line-height:17px; + word-wrap:break-word;text-rendering:optimizeLegibility; + -moz-font-feature-settings:'liga'; + -ms-font-feature-settings:'liga'; + -webkit-font-feature-settings:'liga'; + font-feature-settings:'liga'; + } + +a:link{ + color:#0000FF; + text-decoration:underline; + } + +a:visited{ + color:#800080; + text-decoration:underline; + } + +a:hover{ + color:#0000FF; + text-decoration:underline; + } + +a:active{ + color:#EE0000; + text-decoration:underline; + } + +a.nontext{ + color:black; + text-decoration:none; + font-style:normal; + font-weight:normal; + } + .normal_text{ + color:#000000; + direction:ltr; + font-family:Arial, Helvetica Neue, Helvetica, sans-serif; + font-size:14px; + font-style:normal; + font-weight:normal; + letter-spacing:0px; + line-height:17px; + text-align:left; + text-decoration:none; + text-indent:0px; + text-transform:none; + vertical-align:0px; + padding:0px; + } + .list0 li:before{ + position:absolute; + right:100%; + letter-spacing:0px; + text-decoration:none; + font-weight:normal; + font-style:normal; + } + .rtl-list li:before{ + right:auto; + left:100%; + } + .nls-None > li:before,.nls-None .list3 > li:before,.nls-None .list6 > li:before{ + margin-right:6px; + content:'•'; + } + .nls-None .list1 > li:before,.nls-None .list4 > li:before,.nls-None .list7 > li:before{ + margin-right:6px; + content:'○'; + } + .nls-None,.nls-None .list1,.nls-None .list2,.nls-None .list3,.nls-None .list4,.nls-None .list5,.nls-None .list6,.nls-None .list7,.nls-None .list8{ + padding-left:34px; + }.nls-None.rtl-list,.nls-None .list1.rtl-list,.nls-None .list2.rtl-list,.nls-None .list3.rtl-list,.nls-None .list4.rtl-list,.nls-None .list5.rtl-list,.nls-None .list6.rtl-list,.nls-None .list7.rtl-list,.nls-None .list8.rtl-list{ + padding-left:0px; + padding-right:34px; + }.nls-None .list2 > li:before,.nls-None .list5 > li:before,.nls-None .list8 > li:before{margin-right:6px;content:'-';}.nls-None.rtl-list > li:before,.nls-None .list1.rtl-list > li:before,.nls-None .list2.rtl-list > li:before,.nls-None .list3.rtl-list > li:before,.nls-None .list4.rtl-list > li:before,.nls-None .list5.rtl-list > li:before,.nls-None .list6.rtl-list > li:before,.nls-None .list7.rtl-list > li:before,.nls-None .list8.rtl-list > li:before{margin-right:0px;margin-left:6px;}.TabbedPanelsTab{white-space:nowrap;}.MenuBar .MenuBarView,.MenuBar .SubMenuView{display:block;list-style:none;}.MenuBar .SubMenu{display:none;position:absolute;}.NoWrap{white-space:nowrap;word-wrap:normal;}.rootelem{margin-left:auto;margin-right:auto;}.colelem{display:inline;float:left;clear:both;}.clearfix:after{content:"\0020";visibility:hidden;display:block;height:0px;clear:both;}*:first-child+html .clearfix{zoom:1;}.clip_frame{overflow:hidden;}.popup_anchor{position:relative;width:0px;height:0px;}.allow_click_through *{pointer-events:auto;}.popup_element{z-index:100000;}.svg{display:block;vertical-align:top;}span.wrap{content:'';clear:left;display:block;}span.actAsInlineDiv{display:inline-block;}.position_content,.excludeFromNormalFlow{float:left;}.preload_images{position:absolute;overflow:hidden;left:-9999px;top:-9999px;height:1px;width:1px;}.preload{height:1px;width:1px;}.animateStates{-webkit-transition:0.3s ease-in-out;-moz-transition:0.3s ease-in-out;-o-transition:0.3s ease-in-out;transition:0.3s ease-in-out;}[data-whatinput="mouse"] *:focus,[data-whatinput="touch"] *:focus,input:focus,textarea:focus{outline:none;}textarea{resize:none;overflow:auto;}.allow_click_through,.fld-prompt{pointer-events:none;}.wrapped-input{position:absolute;top:0px;left:0px;background:transparent;border:none;}.submit-btn{z-index:50000;cursor:pointer;}.anchor_item{width:22px;height:18px;}.MenuBar .SubMenuVisible,.MenuBarVertical .SubMenuVisible,.MenuBar .SubMenu .SubMenuVisible,.popup_element.Active,span.actAsPara,.actAsDiv,a.nonblock.nontext,img.block{display:block;}.widget_invisible,.js .invi,.js .mse_pre_init{visibility:hidden;}.ose_ei{visibility:hidden;z-index:0;}.no_vert_scroll{overflow-y:hidden;}.always_vert_scroll{overflow-y:scroll;}.always_horz_scroll{overflow-x:scroll;}.fullscreen{overflow:hidden;left:0px;top:0px;position:fixed;height:100%;width:100%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}.fullwidth{position:absolute;}.borderbox{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}.scroll_wrapper{position:absolute;overflow:auto;left:0px;right:0px;top:0px;bottom:0px;padding-top:0px;padding-bottom:0px;margin-top:0px;margin-bottom:0px;}.browser_width > *{position:absolute;left:0px;right:0px;}.grpelem,.accordion_wrapper{display:inline;float:left;}.fld-checkbox input[type=checkbox],.fld-radiobutton input[type=radio]{position:absolute;overflow:hidden;clip:rect(0px, 0px, 0px, 0px);height:1px;width:1px;margin:-1px;padding:0px;border:0px;}.fld-checkbox input[type=checkbox] + label,.fld-radiobutton input[type=radio] + label{display:inline-block;background-repeat:no-repeat;cursor:pointer;float:left;width:100%;height:100%;}.pointer_cursor,.fld-recaptcha-mode,.fld-recaptcha-refresh,.fld-recaptcha-help{cursor:pointer;}p,h1,h2,h3,h4,h5,h6,ol,ul,span.actAsPara{max-height:1000000px;}.superscript{vertical-align:super;font-size:66%;line-height:0px;}.subscript{vertical-align:sub;font-size:66%;line-height:0px;}.horizontalSlideShow{-ms-touch-action:pan-y;touch-action:pan-y;}.verticalSlideShow{-ms-touch-action:pan-x;touch-action:pan-x;}.colelem100,.verticalspacer{clear:both;}.list0 li,.MenuBar .MenuItemContainer,.SlideShowContentPanel .fullscreen img,.css_verticalspacer .verticalspacer{position:relative;}.popup_element.Inactive,.js .disn,.js .an_invi,.hidden,.breakpoint{display:none;}#muse_css_mq{position:absolute;display:none;background-color:#FFFFFE;}.fluid_height_spacer{width:0.01px;}.muse_check_css{display:none;position:fixed;}@media screen and (-webkit-min-device-pixel-ratio:0){body{text-rendering:auto;}} \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/generator/visitenkarten-klassiker.xhtml b/java/wellmann-shop/src/main/webapp/resources/manager/generator/visitenkarten-klassiker.xhtml new file mode 100644 index 0000000..56e455e --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/generator/visitenkarten-klassiker.xhtml @@ -0,0 +1,506 @@ + + + + + + + + + Visitenkarten Klassiker + + + + + + + + + + + + \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_141258_korr-u19926-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_141258_korr-u19926-fr.jpg new file mode 100644 index 0000000..0ed9edb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_141258_korr-u19926-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_141437_korr-u19867-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_141437_korr-u19867-fr.jpg new file mode 100644 index 0000000..ee1789e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_141437_korr-u19867-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_141437_korr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_141437_korr.jpg new file mode 100644 index 0000000..1d8c1d6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_141437_korr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_142230_korr-u19716-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_142230_korr-u19716-fr.jpg new file mode 100644 index 0000000..f1f1073 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_142230_korr-u19716-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_142230_korr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_142230_korr.jpg new file mode 100644 index 0000000..017a3d2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_142230_korr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_143014_korr-u19689-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_143014_korr-u19689-fr.jpg new file mode 100644 index 0000000..97f321d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_143014_korr-u19689-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_143014_korr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_143014_korr.jpg new file mode 100644 index 0000000..a17ff82 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180423_143014_korr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180426_122325_korr-u19632-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180426_122325_korr-u19632-fr.jpg new file mode 100644 index 0000000..55132e4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180426_122325_korr-u19632-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180426_122325_korr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180426_122325_korr.jpg new file mode 100644 index 0000000..b21e6c7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180426_122325_korr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/20180426_140115.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180426_140115.jpg new file mode 100644 index 0000000..131fa6b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/20180426_140115.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/andrew-pons-6488-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/andrew-pons-6488-unsplash.jpg new file mode 100644 index 0000000..4226320 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/andrew-pons-6488-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/bank-phrom-352283-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/bank-phrom-352283-unsplash.jpg new file mode 100644 index 0000000..2781cbf Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/bank-phrom-352283-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/blank.gif b/java/wellmann-shop/src/main/webapp/resources/manager/images/blank.gif new file mode 100644 index 0000000..35d42e8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/blank.gif differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/bremen-1592862_1920_2.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/bremen-1592862_1920_2.jpg new file mode 100644 index 0000000..dee2e54 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/bremen-1592862_1920_2.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/cedric-verstraete-481332.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/cedric-verstraete-481332.jpg new file mode 100644 index 0000000..9f226e2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/cedric-verstraete-481332.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/color-417694_1920-u23077-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/color-417694_1920-u23077-fr.jpg new file mode 100644 index 0000000..a79c5dc Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/color-417694_1920-u23077-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/color-417694_1920.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/color-417694_1920.jpg new file mode 100644 index 0000000..e418e83 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/color-417694_1920.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/durchschreibesatz-u19843-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/durchschreibesatz-u19843-fr.jpg new file mode 100644 index 0000000..badced4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/durchschreibesatz-u19843-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/durchschreibesatz.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/durchschreibesatz.jpg new file mode 100644 index 0000000..5f0f7e1 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/durchschreibesatz.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/envelope-2679338_1920-u20047-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/envelope-2679338_1920-u20047-fr.jpg new file mode 100644 index 0000000..99aa617 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/envelope-2679338_1920-u20047-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/envelope-2679338_1920.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/envelope-2679338_1920.jpg new file mode 100644 index 0000000..e0848ad Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/envelope-2679338_1920.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/formular.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/formular.jpg new file mode 100644 index 0000000..b290410 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/formular.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/fotolia_56863820_m-u19609-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/fotolia_56863820_m-u19609-fr.jpg new file mode 100644 index 0000000..015c2d6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/fotolia_56863820_m-u19609-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/fotolia_56863820_m.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/fotolia_56863820_m.jpg new file mode 100644 index 0000000..8b6f9f7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/fotolia_56863820_m.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/header_3.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/header_3.jpg new file mode 100644 index 0000000..b3840f2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/header_3.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/kate-trysh-485779-unsplash-u19917-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/kate-trysh-485779-unsplash-u19917-fr.jpg new file mode 100644 index 0000000..97e2f23 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/kate-trysh-485779-unsplash-u19917-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/kate-trysh-485779-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/kate-trysh-485779-unsplash.jpg new file mode 100644 index 0000000..b79415b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/kate-trysh-485779-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/kelly-sikkema-290463.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/kelly-sikkema-290463.jpg new file mode 100644 index 0000000..2d566cf Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/kelly-sikkema-290463.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/loading.gif b/java/wellmann-shop/src/main/webapp/resources/manager/images/loading.gif new file mode 100644 index 0000000..ea22e32 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/loading.gif differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/logo start.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/logo start.png new file mode 100644 index 0000000..6704046 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/logo start.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/lukas-blazek-263121-u20075-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/lukas-blazek-263121-u20075-fr.jpg new file mode 100644 index 0000000..eeb30c0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/lukas-blazek-263121-u20075-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/lukas-blazek-263121.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/lukas-blazek-263121.jpg new file mode 100644 index 0000000..b0846d9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/lukas-blazek-263121.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/mappen2-u20043-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/mappen2-u20043-fr.jpg new file mode 100644 index 0000000..9b270f9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/mappen2-u20043-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/mappen2.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/mappen2.jpg new file mode 100644 index 0000000..dadf9e9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/mappen2.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/markus-spiske-104910-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/markus-spiske-104910-unsplash.jpg new file mode 100644 index 0000000..1b44432 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/markus-spiske-104910-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/postcard-1091283_1920-u19975-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/postcard-1091283_1920-u19975-fr.jpg new file mode 100644 index 0000000..48c434b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/postcard-1091283_1920-u19975-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/postcard-1091283_1920.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/postcard-1091283_1920.jpg new file mode 100644 index 0000000..49bbc5f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/postcard-1091283_1920.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonchecked.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonchecked.png new file mode 100644 index 0000000..9e2e0ab Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonchecked.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttoncheckedmousedown.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttoncheckedmousedown.png new file mode 100644 index 0000000..5c37c1c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttoncheckedmousedown.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttoncheckedrollover.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttoncheckedrollover.png new file mode 100644 index 0000000..3f2b936 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttoncheckedrollover.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonunchecked.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonunchecked.png new file mode 100644 index 0000000..c19e372 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonunchecked.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonuncheckedmousedown.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonuncheckedmousedown.png new file mode 100644 index 0000000..7987586 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonuncheckedmousedown.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonuncheckedrollover.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonuncheckedrollover.png new file mode 100644 index 0000000..dc3020a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/radiobuttonuncheckedrollover.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/rainier-ridao-569546-unsplash-u19999-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/rainier-ridao-569546-unsplash-u19999-fr.jpg new file mode 100644 index 0000000..e06753a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/rainier-ridao-569546-unsplash-u19999-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/rainier-ridao-569546-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/rainier-ridao-569546-unsplash.jpg new file mode 100644 index 0000000..e3f09d8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/rainier-ridao-569546-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/ron-dyar-521350-unsplash-u19949-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/ron-dyar-521350-unsplash-u19949-fr.jpg new file mode 100644 index 0000000..73ae542 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/ron-dyar-521350-unsplash-u19949-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/ron-dyar-521350-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/ron-dyar-521350-unsplash.jpg new file mode 100644 index 0000000..65d557f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/ron-dyar-521350-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/shopping-cart.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/shopping-cart.png new file mode 100644 index 0000000..042c464 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/shopping-cart.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/sticker-u19801-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/sticker-u19801-fr.jpg new file mode 100644 index 0000000..bd4eb2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/sticker-u19801-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/sunyu-460812-unsplash-u19664-fr.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/sunyu-460812-unsplash-u19664-fr.jpg new file mode 100644 index 0000000..7b4938c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/sunyu-460812-unsplash-u19664-fr.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/sunyu-460812-unsplash.jpg b/java/wellmann-shop/src/main/webapp/resources/manager/images/sunyu-460812-unsplash.jpg new file mode 100644 index 0000000..1bb3e75 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/sunyu-460812-unsplash.jpg differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u14170-13.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u14170-13.png new file mode 100644 index 0000000..2087b4c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u14170-13.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-4.png new file mode 100644 index 0000000..b10aacd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-42.png new file mode 100644 index 0000000..b10aacd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-43.png new file mode 100644 index 0000000..b10aacd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-44.png new file mode 100644 index 0000000..b10aacd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19633-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19634_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-4.png new file mode 100644 index 0000000..44fa05b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-42.png new file mode 100644 index 0000000..44fa05b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-43.png new file mode 100644 index 0000000..44fa05b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-44.png new file mode 100644 index 0000000..44fa05b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19636-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-8.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-8.png new file mode 100644 index 0000000..b03a931 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-8.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-82.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-82.png new file mode 100644 index 0000000..1212b20 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-82.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-83.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-83.png new file mode 100644 index 0000000..77925d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-83.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-84.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-84.png new file mode 100644 index 0000000..f8aecaa Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19641-84.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-4.png new file mode 100644 index 0000000..e9be8b5 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-42.png new file mode 100644 index 0000000..346197a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-43.png new file mode 100644 index 0000000..4a8298f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-44.png new file mode 100644 index 0000000..58a8969 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19642-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-6.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-6.png new file mode 100644 index 0000000..bc56df0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-62.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-62.png new file mode 100644 index 0000000..da02faf Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-62.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-63.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-63.png new file mode 100644 index 0000000..1f24f28 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-63.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-64.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-64.png new file mode 100644 index 0000000..3cbf2b8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19643-64.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-4.png new file mode 100644 index 0000000..d3fb6f0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-42.png new file mode 100644 index 0000000..d3fb6f0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-43.png new file mode 100644 index 0000000..d3fb6f0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-44.png new file mode 100644 index 0000000..d3fb6f0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19660-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-4.png new file mode 100644 index 0000000..7a72f93 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-42.png new file mode 100644 index 0000000..7a72f93 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-43.png new file mode 100644 index 0000000..7a72f93 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-44.png new file mode 100644 index 0000000..7a72f93 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19665-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19666_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19688_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-4.png new file mode 100644 index 0000000..6d23c39 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-42.png new file mode 100644 index 0000000..6d23c39 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-43.png new file mode 100644 index 0000000..6d23c39 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-44.png new file mode 100644 index 0000000..6d23c39 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19690-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19710-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19710-4.png new file mode 100644 index 0000000..21d2d8e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19710-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19710-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19710-42.png new file mode 100644 index 0000000..21d2d8e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19710-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-4.png new file mode 100644 index 0000000..2273574 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-42.png new file mode 100644 index 0000000..2273574 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-43.png new file mode 100644 index 0000000..2273574 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-44.png new file mode 100644 index 0000000..2273574 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19715-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19717_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-4.png new file mode 100644 index 0000000..263d0f3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-42.png new file mode 100644 index 0000000..263d0f3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-43.png new file mode 100644 index 0000000..263d0f3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-44.png new file mode 100644 index 0000000..263d0f3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19750-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-4.png new file mode 100644 index 0000000..031ef7b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-42.png new file mode 100644 index 0000000..031ef7b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-43.png new file mode 100644 index 0000000..031ef7b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-44.png new file mode 100644 index 0000000..031ef7b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19751-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-4.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-42.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-43.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-44.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19752-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-4.png new file mode 100644 index 0000000..cc05646 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-42.png new file mode 100644 index 0000000..cc05646 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-43.png new file mode 100644 index 0000000..cc05646 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-44.png new file mode 100644 index 0000000..cc05646 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19753-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-4.png new file mode 100644 index 0000000..fbe4a60 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-42.png new file mode 100644 index 0000000..fbe4a60 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-43.png new file mode 100644 index 0000000..fbe4a60 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-44.png new file mode 100644 index 0000000..fbe4a60 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19754-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-4.png new file mode 100644 index 0000000..23c2b49 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-42.png new file mode 100644 index 0000000..23c2b49 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-43.png new file mode 100644 index 0000000..23c2b49 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-44.png new file mode 100644 index 0000000..23c2b49 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19755-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19797-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19797-4.png new file mode 100644 index 0000000..410583d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19797-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19797-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19797-42.png new file mode 100644 index 0000000..410583d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19797-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-4.png new file mode 100644 index 0000000..94ddf81 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-42.png new file mode 100644 index 0000000..94ddf81 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-43.png new file mode 100644 index 0000000..94ddf81 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-44.png new file mode 100644 index 0000000..94ddf81 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19802-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19803_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-4.png new file mode 100644 index 0000000..4b7a05f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-42.png new file mode 100644 index 0000000..4b7a05f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-43.png new file mode 100644 index 0000000..4b7a05f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-44.png new file mode 100644 index 0000000..4b7a05f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19844-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19845_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-4.png new file mode 100644 index 0000000..15bdea8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-42.png new file mode 100644 index 0000000..15bdea8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-43.png new file mode 100644 index 0000000..15bdea8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-44.png new file mode 100644 index 0000000..15bdea8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19868-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19869_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19895-6.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19895-6.png new file mode 100644 index 0000000..6b59cef Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19895-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-4.png new file mode 100644 index 0000000..09bc0dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-42.png new file mode 100644 index 0000000..09bc0dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-43.png new file mode 100644 index 0000000..09bc0dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-44.png new file mode 100644 index 0000000..09bc0dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19916-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r.png new file mode 100644 index 0000000..5df559a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r2.png new file mode 100644 index 0000000..5df559a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r3.png new file mode 100644 index 0000000..5df559a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r4.png new file mode 100644 index 0000000..5df559a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19918_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-5.png new file mode 100644 index 0000000..6d57ad9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-52.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-52.png new file mode 100644 index 0000000..b087dec Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-52.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-53.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-53.png new file mode 100644 index 0000000..00e10ca Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-53.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-54.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-54.png new file mode 100644 index 0000000..58fc42e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19919-54.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19924_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-4.png new file mode 100644 index 0000000..5a15c72 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-42.png new file mode 100644 index 0000000..5a15c72 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-43.png new file mode 100644 index 0000000..5a15c72 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-44.png new file mode 100644 index 0000000..5a15c72 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19925-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19948_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-4.png new file mode 100644 index 0000000..29455db Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-42.png new file mode 100644 index 0000000..29455db Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-43.png new file mode 100644 index 0000000..29455db Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-44.png new file mode 100644 index 0000000..29455db Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19950-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19969-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19969-4.png new file mode 100644 index 0000000..4e68ec0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19969-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19969-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19969-42.png new file mode 100644 index 0000000..4e68ec0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19969-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-4.png new file mode 100644 index 0000000..b8fd322 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-42.png new file mode 100644 index 0000000..b8fd322 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-43.png new file mode 100644 index 0000000..b8fd322 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-44.png new file mode 100644 index 0000000..b8fd322 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19973-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19974_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-4.png new file mode 100644 index 0000000..cb01027 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-42.png new file mode 100644 index 0000000..cb01027 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-43.png new file mode 100644 index 0000000..cb01027 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-44.png new file mode 100644 index 0000000..cb01027 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19997-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u19998_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-6.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-6.png new file mode 100644 index 0000000..00aca61 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-62.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-62.png new file mode 100644 index 0000000..f93cb99 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-62.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-63.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-63.png new file mode 100644 index 0000000..a5c4337 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-63.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-64.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-64.png new file mode 100644 index 0000000..3300282 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20018-64.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20041_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-4.png new file mode 100644 index 0000000..190be2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-42.png new file mode 100644 index 0000000..190be2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-43.png new file mode 100644 index 0000000..190be2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-44.png new file mode 100644 index 0000000..190be2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20042-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-4.png new file mode 100644 index 0000000..c43f228 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-42.png new file mode 100644 index 0000000..c43f228 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-43.png new file mode 100644 index 0000000..c43f228 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-44.png new file mode 100644 index 0000000..c43f228 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20048-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20049_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20070-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20070-4.png new file mode 100644 index 0000000..540c300 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20070-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20070-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20070-42.png new file mode 100644 index 0000000..540c300 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20070-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-4.png new file mode 100644 index 0000000..a4b9130 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-42.png new file mode 100644 index 0000000..a4b9130 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-43.png new file mode 100644 index 0000000..a4b9130 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-44.png new file mode 100644 index 0000000..a4b9130 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20074-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20076_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20098-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20098-4.png new file mode 100644 index 0000000..14d0446 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20098-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20098-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20098-42.png new file mode 100644 index 0000000..14d0446 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20098-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20099-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20099-4.png new file mode 100644 index 0000000..dfab2bc Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20099-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20099-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20099-42.png new file mode 100644 index 0000000..dfab2bc Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20099-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r2.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r3.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r4.png new file mode 100644 index 0000000..bd75959 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states2.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states3.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states4.png new file mode 100644 index 0000000..d041e74 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20121_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-4.png new file mode 100644 index 0000000..1cb137d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-42.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-42.png new file mode 100644 index 0000000..1cb137d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-42.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-43.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-43.png new file mode 100644 index 0000000..1cb137d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-43.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-44.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-44.png new file mode 100644 index 0000000..1cb137d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20122-44.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20125-24.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20125-24.png new file mode 100644 index 0000000..fc3fc8e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20125-24.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20332_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20353_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20370_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20379_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20404_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20413_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20422_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20431_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20464_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20473_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20482_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20491_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20540_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20549_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20558_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r2.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r3.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r4.png new file mode 100644 index 0000000..621ccb0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states-r4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states2.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states2.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states2.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states3.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states3.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states3.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states4.png new file mode 100644 index 0000000..105fe02 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u20567_states4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21525-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21525-4.png new file mode 100644 index 0000000..289c3f8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21525-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21531-8.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21531-8.png new file mode 100644 index 0000000..53348ac Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21531-8.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21563-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21563-5.png new file mode 100644 index 0000000..99e77d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21563-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21569-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21569-5.png new file mode 100644 index 0000000..1561394 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21569-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21593-6.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21593-6.png new file mode 100644 index 0000000..4df4e69 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21593-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21594-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21594-5.png new file mode 100644 index 0000000..b5350b7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21594-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21595-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21595-5.png new file mode 100644 index 0000000..7fc6587 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21595-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21637-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21637-4.png new file mode 100644 index 0000000..f968a9a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21637-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21653-24.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21653-24.png new file mode 100644 index 0000000..4d89732 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21653-24.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21667-6.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21667-6.png new file mode 100644 index 0000000..0de252c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21667-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21668-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21668-5.png new file mode 100644 index 0000000..14bacb7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21668-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21669-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21669-5.png new file mode 100644 index 0000000..fb357a4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21669-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21697-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21697-4.png new file mode 100644 index 0000000..87cf8fe Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21697-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21709-24.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21709-24.png new file mode 100644 index 0000000..43dcc8b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21709-24.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21721-6.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21721-6.png new file mode 100644 index 0000000..c2b795e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21721-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21722-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21722-5.png new file mode 100644 index 0000000..dd110bf Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21722-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21723-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21723-5.png new file mode 100644 index 0000000..8544efd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21723-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21751-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21751-4.png new file mode 100644 index 0000000..d7fa141 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21751-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21795-6.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21795-6.png new file mode 100644 index 0000000..7323847 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21795-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21795-62.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21795-62.png new file mode 100644 index 0000000..7323847 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21795-62.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u21795-63.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21795-63.png new file mode 100644 index 0000000..6242f9f Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u21795-63.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22245-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22245-4.png new file mode 100644 index 0000000..52533f7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22245-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states-a.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states-a.png new file mode 100644 index 0000000..3e7f3ed Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states-m.png new file mode 100644 index 0000000..b7888c3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states-r.png new file mode 100644 index 0000000..b7888c3 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states.png new file mode 100644 index 0000000..9c1f03d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22262_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states-a.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states-a.png new file mode 100644 index 0000000..eb26716 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states-m.png new file mode 100644 index 0000000..9115894 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states-r.png new file mode 100644 index 0000000..9115894 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states.png new file mode 100644 index 0000000..343c226 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22267_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states-a.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states-a.png new file mode 100644 index 0000000..42fcdb2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states-m.png new file mode 100644 index 0000000..4b04f11 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states-r.png new file mode 100644 index 0000000..4b04f11 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states.png new file mode 100644 index 0000000..907d035 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22278_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states-a.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states-a.png new file mode 100644 index 0000000..aa953cc Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states-m.png new file mode 100644 index 0000000..ec56cbb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states-r.png new file mode 100644 index 0000000..ec56cbb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states.png new file mode 100644 index 0000000..903b799 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22293_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22300-8.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22300-8.png new file mode 100644 index 0000000..a0a9c55 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22300-8.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22309-18.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22309-18.png new file mode 100644 index 0000000..e2417c4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22309-18.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22330-25.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22330-25.png new file mode 100644 index 0000000..248e65e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22330-25.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22367-22.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22367-22.png new file mode 100644 index 0000000..02bb63e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22367-22.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22403-18.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22403-18.png new file mode 100644 index 0000000..fb76c7a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22403-18.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22449-26.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22449-26.png new file mode 100644 index 0000000..3c956ff Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22449-26.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22478-24.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22478-24.png new file mode 100644 index 0000000..a1c0f8b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22478-24.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22525-22.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22525-22.png new file mode 100644 index 0000000..90c5164 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22525-22.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22553-21.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22553-21.png new file mode 100644 index 0000000..09c84be Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22553-21.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22594-26.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22594-26.png new file mode 100644 index 0000000..e6e20ea Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22594-26.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22641-34.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22641-34.png new file mode 100644 index 0000000..8fb9e14 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22641-34.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22679-23.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22679-23.png new file mode 100644 index 0000000..1236077 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22679-23.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22713-20.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22713-20.png new file mode 100644 index 0000000..7418aab Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22713-20.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22749-20.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22749-20.png new file mode 100644 index 0000000..40c83d2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22749-20.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22781-18.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22781-18.png new file mode 100644 index 0000000..b4f9dc8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22781-18.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22840-17.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22840-17.png new file mode 100644 index 0000000..4ba6c17 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22840-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22909-19.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22909-19.png new file mode 100644 index 0000000..647c645 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22909-19.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22957-6.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22957-6.png new file mode 100644 index 0000000..04babae Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22957-6.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22958-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22958-5.png new file mode 100644 index 0000000..99e77d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22958-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u22959-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22959-5.png new file mode 100644 index 0000000..1561394 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u22959-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23012-17.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23012-17.png new file mode 100644 index 0000000..81fe999 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23012-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23033_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23033_states-r.png new file mode 100644 index 0000000..0c24759 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23033_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23033_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23033_states.png new file mode 100644 index 0000000..87dc473 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23033_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23034_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23034_states-r.png new file mode 100644 index 0000000..9db9d33 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23034_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23034_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23034_states.png new file mode 100644 index 0000000..e29d753 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23034_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23035_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23035_states-r.png new file mode 100644 index 0000000..b138c84 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23035_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23035_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23035_states.png new file mode 100644 index 0000000..5a8478a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23035_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23036_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23036_states-r.png new file mode 100644 index 0000000..c47c41c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23036_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23036_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23036_states.png new file mode 100644 index 0000000..8126204 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23036_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23037_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23037_states-r.png new file mode 100644 index 0000000..ecc5d5c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23037_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23037_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23037_states.png new file mode 100644 index 0000000..fd49b6d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23037_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23079-15.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23079-15.png new file mode 100644 index 0000000..7c07039 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23079-15.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23110_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23110_states-r.png new file mode 100644 index 0000000..c5444f5 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23110_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23110_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23110_states.png new file mode 100644 index 0000000..0352596 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23110_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23112_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23112_states-r.png new file mode 100644 index 0000000..80eead6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23112_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23112_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23112_states.png new file mode 100644 index 0000000..a9e88bb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23112_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23114_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23114_states-r.png new file mode 100644 index 0000000..f8612ac Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23114_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23114_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23114_states.png new file mode 100644 index 0000000..8dcedab Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23114_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23153-10.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23153-10.png new file mode 100644 index 0000000..9de2de2 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23153-10.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23305-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23305-4.png new file mode 100644 index 0000000..580d1cd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23305-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23306-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23306-4.png new file mode 100644 index 0000000..fbf34e5 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23306-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23307-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23307-4.png new file mode 100644 index 0000000..66c7d2a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23307-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23309-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23309-4.png new file mode 100644 index 0000000..f3f7dc0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23309-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23310-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23310-4.png new file mode 100644 index 0000000..772f26b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23310-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23430-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23430-4.png new file mode 100644 index 0000000..a623498 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23430-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23433-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23433-4.png new file mode 100644 index 0000000..72048d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23433-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states-a.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states-a.png new file mode 100644 index 0000000..1c369dd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states-m.png new file mode 100644 index 0000000..fd7151d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states-r.png new file mode 100644 index 0000000..fd7151d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states.png new file mode 100644 index 0000000..56a408c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23443_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states-a.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states-a.png new file mode 100644 index 0000000..d62ad79 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states-m.png new file mode 100644 index 0000000..0b37a8a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states-r.png new file mode 100644 index 0000000..0b37a8a Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states.png new file mode 100644 index 0000000..18601e4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23446_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states-a.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states-a.png new file mode 100644 index 0000000..8820af1 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states-m.png new file mode 100644 index 0000000..9149120 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states-r.png new file mode 100644 index 0000000..9149120 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states.png new file mode 100644 index 0000000..5965359 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23449_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states-a.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states-a.png new file mode 100644 index 0000000..b10a296 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states-m.png new file mode 100644 index 0000000..1cb4c7d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states-r.png new file mode 100644 index 0000000..1cb4c7d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states.png new file mode 100644 index 0000000..3d7df33 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23452_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23460-7.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23460-7.png new file mode 100644 index 0000000..f014fe8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23460-7.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23486-10.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23486-10.png new file mode 100644 index 0000000..97e0c67 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23486-10.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23513-23.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23513-23.png new file mode 100644 index 0000000..0068376 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23513-23.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23573-13.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23573-13.png new file mode 100644 index 0000000..8f122c1 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23573-13.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23628-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23628-4.png new file mode 100644 index 0000000..f028dbb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23628-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23631-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23631-4.png new file mode 100644 index 0000000..6f75f21 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23631-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23634-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23634-4.png new file mode 100644 index 0000000..833b5e4 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23634-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23637-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23637-4.png new file mode 100644 index 0000000..643a940 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23637-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23746-5.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23746-5.png new file mode 100644 index 0000000..6c8ed11 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23746-5.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states-a.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states-a.png new file mode 100644 index 0000000..64b9f4b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states-a.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states-m.png new file mode 100644 index 0000000..bb76a33 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states-r.png new file mode 100644 index 0000000..bb76a33 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states.png new file mode 100644 index 0000000..c636723 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23982_states.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23985-m.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23985-m.png new file mode 100644 index 0000000..fef1162 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23985-m.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23985-r.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23985-r.png new file mode 100644 index 0000000..fef1162 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23985-r.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u23985.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23985.png new file mode 100644 index 0000000..99060e0 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u23985.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24043-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24043-4.png new file mode 100644 index 0000000..ad003c9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24043-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24052-169.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24052-169.png new file mode 100644 index 0000000..1ab06c9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24052-169.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24093-71.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24093-71.png new file mode 100644 index 0000000..4e3bfde Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24093-71.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24108-126.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24108-126.png new file mode 100644 index 0000000..c853f4c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24108-126.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24141-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24141-4.png new file mode 100644 index 0000000..be158a6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24141-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24142-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24142-4.png new file mode 100644 index 0000000..1ab4812 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24142-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24143-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24143-4.png new file mode 100644 index 0000000..70730fb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24143-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24167-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24167-4.png new file mode 100644 index 0000000..e0d2e80 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24167-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24191-17.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24191-17.png new file mode 100644 index 0000000..74f8cfd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24191-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24264-17.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24264-17.png new file mode 100644 index 0000000..02110fd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24264-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24266-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24266-4.png new file mode 100644 index 0000000..08405b8 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24266-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24267-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24267-4.png new file mode 100644 index 0000000..7362d64 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24267-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24268-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24268-4.png new file mode 100644 index 0000000..26c399e Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24268-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24269-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24269-4.png new file mode 100644 index 0000000..f185095 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24269-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24337-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24337-4.png new file mode 100644 index 0000000..4efaff6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24337-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24338-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24338-4.png new file mode 100644 index 0000000..5592d61 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24338-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24339-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24339-4.png new file mode 100644 index 0000000..9607966 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24339-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24340-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24340-4.png new file mode 100644 index 0000000..dca3c7d Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24340-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24341-17.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24341-17.png new file mode 100644 index 0000000..c91d6a6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24341-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24402-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24402-4.png new file mode 100644 index 0000000..715f8f9 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24402-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24403-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24403-4.png new file mode 100644 index 0000000..46e5222 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24403-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24404-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24404-4.png new file mode 100644 index 0000000..aacc3d7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24404-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24405-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24405-4.png new file mode 100644 index 0000000..15689c7 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24405-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24406-17.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24406-17.png new file mode 100644 index 0000000..eb5797b Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24406-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24467-17.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24467-17.png new file mode 100644 index 0000000..74f8cfd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24467-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24469-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24469-4.png new file mode 100644 index 0000000..1ab4812 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24469-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24470-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24470-4.png new file mode 100644 index 0000000..be158a6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24470-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24471-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24471-4.png new file mode 100644 index 0000000..70730fb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24471-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24472-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24472-4.png new file mode 100644 index 0000000..e0d2e80 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24472-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24528-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24528-4.png new file mode 100644 index 0000000..47b740c Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24528-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24533-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24533-4.png new file mode 100644 index 0000000..1ab4812 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24533-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24534-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24534-4.png new file mode 100644 index 0000000..70730fb Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24534-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24535-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24535-4.png new file mode 100644 index 0000000..be158a6 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24535-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24536-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24536-4.png new file mode 100644 index 0000000..e0d2e80 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24536-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24537-17.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24537-17.png new file mode 100644 index 0000000..74f8cfd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24537-17.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24580-28.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24580-28.png new file mode 100644 index 0000000..f6b88fd Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24580-28.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/images/u24607-4.png b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24607-4.png new file mode 100644 index 0000000..f2d4229 Binary files /dev/null and b/java/wellmann-shop/src/main/webapp/resources/manager/images/u24607-4.png differ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/products.xhtml b/java/wellmann-shop/src/main/webapp/resources/manager/products.xhtml new file mode 100644 index 0000000..b5db5e6 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/products.xhtml @@ -0,0 +1,463 @@ + + + + + + + + + + + + Produkte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ Info +
+ Visitenkarten + Anfragen... +
+
+
+
+
+
+
+
+ Info +
+ Briefpapier + Anfragen... +
+
+
+
+
+
+
+
+ Info +
+ Kuverts + Anfragen... +
+
+
+
+
+
+
+
+ Info +
+ Etiketten + Anfragen... +
+
+
+
+
+
+
+
+
+
+ Info +
+ Blöcke +
Anfragen...
+
+
+
+
+
+
+
+
+ Info +
+ Faltblätter +
Anfragen...
+
+
+
+
+
+
+
+
+ Info +
+ Flyer +
Anfragen...
+
+
+
+
+
+
+
+
+ Info +
+ broschüren +
Anfragen...
+
+
+
+
+
+
+
+
+
+
+ Info +
+ Formulare +
Anfragen...
+
+
+
+
+
+
+
+
+ Info +
+ Selbstdurchschreibend +
Anfragen...
+
+
+
+
+
+
+
+
+ Info +
+ Plakate / poster +
Anfragen...
+
+
+
+
+
+
+
+
+ Info +
+ Register +
Anfragen...
+
+
+
+
+
+
+
+
+
+
+ Info +
+ Postkarten +
Anfragen...
+
+
+
+
+
+
+
+
+ Info +
+ Präsentationsmappen +
Anfragen...
+
+
+
+
+
+
+
+
+ Info +
+ Ringbindungen +
Anfragen...
+
+
+
+
+
+
+
+
+ Info +
+ Handouts +
Anfragen...
+
+
+
+
+
+ diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form-u13659.php b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form-u13659.php new file mode 100644 index 0000000..dbed8a4 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form-u13659.php @@ -0,0 +1,177 @@ + 'Visitenkarten Formular Übermittlung', + 'heading' => 'Neue Formularübermittlung', + 'success_redirect' => '', + 'resources' => array( + 'checkbox_checked' => 'Aktiviert', + 'checkbox_unchecked' => 'Nicht aktiviert', + 'submitted_from' => 'Von Website übermitteltes Formular: %s', + 'submitted_by' => 'Besucher-IP-Adresse: %s', + 'too_many_submissions' => 'Zu viele Sendungen in letzter Zeit von dieser IP', + 'failed_to_send_email' => 'E-Mail konnte nicht gesendet werden', + 'invalid_reCAPTCHA_private_key' => 'Ungültiger privater reCAPTCHA-Schlüssel.', + 'invalid_reCAPTCHA2_private_key' => 'Ungültiger privater reCAPTCHA 2.0-Schlüssel.', + 'invalid_reCAPTCHA2_server_response' => 'Ungültige private reCAPTCHA 2.0-Server-Reaktionszeit.', + 'invalid_field_type' => 'Unbekannter Feldtyp „%s“.', + 'invalid_form_config' => 'Die Konfiguration im Feld „%s“ ist ungültig.', + 'unknown_method' => 'Unbekannte Serveranfragemethode' + ), + 'email' => array( + 'from' => 'info@druckerei-wellmann.de', + 'to' => 'info@druckerei-wellmann.de' + ), + 'fields' => array( + 'custom_U13665' => array( + 'order' => 5, + 'type' => 'string', + 'label' => 'Name', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Name“ ist erforderlich.' + ) + ), + 'Email' => array( + 'order' => 7, + 'type' => 'email', + 'label' => 'E-Mail', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „E-Mail“ ist erforderlich.', + 'format' => 'Die E-Mail-Adresse in Feld „E-Mail“ ist ungültig.' + ) + ), + 'custom_U13669' => array( + 'order' => 1, + 'type' => 'string', + 'label' => 'Firma', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Firma“ ist erforderlich.' + ) + ), + 'custom_U13693' => array( + 'order' => 2, + 'type' => 'string', + 'label' => 'Anschrift', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Anschrift“ ist erforderlich.' + ) + ), + 'custom_U13683' => array( + 'order' => 3, + 'type' => 'string', + 'label' => 'PLZ / Ort', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „PLZ / Ort“ ist erforderlich.' + ) + ), + 'custom_U13660' => array( + 'order' => 15, + 'type' => 'string', + 'label' => 'Nachricht', + 'required' => false, + 'errors' => array( + ) + ), + 'custom_U13673' => array( + 'order' => 6, + 'type' => 'string', + 'label' => 'Telefon', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Telefon“ ist erforderlich.' + ) + ), + 'custom_U14027' => array( + 'order' => 8, + 'type' => 'string', + 'label' => 'Projekt', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Projekt“ ist erforderlich.' + ) + ), + 'custom_U14039' => array( + 'order' => 10, + 'type' => 'string', + 'label' => 'Format', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Format“ ist erforderlich.' + ) + ), + 'custom_U14051' => array( + 'order' => 11, + 'type' => 'string', + 'label' => 'Druckfarbe(n)', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Druckfarbe(n)“ ist erforderlich.' + ) + ), + 'custom_U14063' => array( + 'order' => 9, + 'type' => 'string', + 'label' => 'Menge', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Menge“ ist erforderlich.' + ) + ), + 'custom_U14075' => array( + 'order' => 13, + 'type' => 'string', + 'label' => 'Papiersorte und Grammatur', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Papiersorte und Grammatur“ ist erforderlich.' + ) + ), + 'custom_U14089' => array( + 'order' => 12, + 'type' => 'string', + 'label' => 'Verarbeitung', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Verarbeitung“ ist erforderlich.' + ) + ), + 'custom_U14101' => array( + 'order' => 14, + 'type' => 'string', + 'label' => 'Besonderheiten', + 'required' => false, + 'errors' => array( + ) + ), + 'custom_U13953' => array( + 'order' => 4, + 'type' => 'radiogroup', + 'label' => 'Anrede', + 'required' => true, + 'optionItems' => array( + 'Herr', + 'Frau' + ), + 'errors' => array( + 'required' => 'Feld „Anrede“ ist erforderlich.', + 'format' => 'Der Wert im Feld „Anrede“ ist ungültig.' + ) + ) + ) +); + +process_form($form); +?> diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form-u19758.php b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form-u19758.php new file mode 100644 index 0000000..38339cf --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form-u19758.php @@ -0,0 +1,102 @@ + 'Homepage Formular Übermittlung', + 'heading' => 'Neue Formularübermittlung', + 'success_redirect' => '', + 'resources' => array( + 'checkbox_checked' => 'Aktiviert', + 'checkbox_unchecked' => 'Nicht aktiviert', + 'submitted_from' => 'Von Website übermitteltes Formular: %s', + 'submitted_by' => 'Besucher-IP-Adresse: %s', + 'too_many_submissions' => 'Zu viele Sendungen in letzter Zeit von dieser IP', + 'failed_to_send_email' => 'E-Mail konnte nicht gesendet werden', + 'invalid_reCAPTCHA_private_key' => 'Ungültiger privater reCAPTCHA-Schlüssel.', + 'invalid_reCAPTCHA2_private_key' => 'Ungültiger privater reCAPTCHA 2.0-Schlüssel.', + 'invalid_reCAPTCHA2_server_response' => 'Ungültige private reCAPTCHA 2.0-Server-Reaktionszeit.', + 'invalid_field_type' => 'Unbekannter Feldtyp „%s“.', + 'invalid_form_config' => 'Die Konfiguration im Feld „%s“ ist ungültig.', + 'unknown_method' => 'Unbekannte Serveranfragemethode' + ), + 'email' => array( + 'from' => 'info@druckerei-wellmann.de', + 'to' => 'info@druckerei-wellmann.de' + ), + 'fields' => array( + 'custom_U19770' => array( + 'order' => 2, + 'type' => 'string', + 'label' => 'Name', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Name“ ist erforderlich.' + ) + ), + 'Email' => array( + 'order' => 6, + 'type' => 'email', + 'label' => 'E-Mail', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „E-Mail“ ist erforderlich.', + 'format' => 'Die E-Mail-Adresse in Feld „E-Mail“ ist ungültig.' + ) + ), + 'custom_U19783' => array( + 'order' => 1, + 'type' => 'string', + 'label' => 'Firma', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Firma“ ist erforderlich.' + ) + ), + 'custom_U19779' => array( + 'order' => 3, + 'type' => 'string', + 'label' => 'Anschrift', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Anschrift“ ist erforderlich.' + ) + ), + 'custom_U19765' => array( + 'order' => 4, + 'type' => 'string', + 'label' => 'PLZ / Ort', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „PLZ / Ort“ ist erforderlich.' + ) + ), + 'custom_U19760' => array( + 'order' => 7, + 'type' => 'string', + 'label' => 'Nachricht', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Nachricht“ ist erforderlich.' + ) + ), + 'custom_U19787' => array( + 'order' => 5, + 'type' => 'string', + 'label' => 'Telefon', + 'required' => true, + 'errors' => array( + 'required' => 'Feld „Telefon“ ist erforderlich.' + ) + ) + ) +); + +process_form($form); +?> diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form_check.php b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form_check.php new file mode 100644 index 0000000..62c314a --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form_check.php @@ -0,0 +1,137 @@ +Muse PHP Diagnostics'); + echo(''); + echo('

Diagnostics

    '); + + if (strrpos($supportResponse,'PHP:0;') === false) + { + echo('
  • PHP version too low'); + } + else + { + echo('
  • PHP version ok'); + } + if (strrpos($supportResponse,'Mail:0;') === false) + { + echo('
  • Mail configuration: PHP mail() configured incorrectly on server. Form will not be able to send email.'); + } + else + { + echo('
  • Mail configuration: No known problems detected with php mail configuration.'); + } + + if (strrpos($supportResponse,'SQL:1;') !== false) + { + echo('
  • Spam control: SQLite not found. Form may send email successfully, but limiting spam submissions by IP address will not work.'); + } + else if (strrpos($supportResponse,'SQL:8;') !== false) + { + echo('
  • Spam control: Cannot write to scripts directory. Form may send email successfully, but limiting spam submissions by IP address will not work.'); + } + else if (strrpos($supportResponse,'SQL:0;') === false) + { + echo('
  • Spam control: SQL configuration problem. Form may send email successfully, but limiting spam submissions by IP address will not work.'); + } + else + { + echo('
  • Spam control: Emails will be limited to 25 in 2 hours from the same IP address.'); + } + echo('


'); + + echo(''); +} + +$phpError = ''; +function phpErrorHandler($errno, $errstr, $errfile, $errline) +{ + global $phpError; + if (!(error_reporting() & $errno)) + { + return; + } + + $phpError .= $errstr; + return true; +} + +function checkSupport() +{ + global $phpError; + set_error_handler("phpErrorHandler"); + + $response = ''; + $throttleSupport = formthrottle_check(); + $response ='SQL:' . $throttleSupport . ';'; + + $version = explode('.', PHP_VERSION); + if ($version[0] < 4 || ($version[0] == 4 && $version[1] < 1)) + { + $response .='PHP:1;'; + return $response; + } + else + { + $response .='PHP:0;'; + } + + if (strncasecmp(php_uname('s'), 'win', 3) == 0) + { + $mailserver = ini_get('SMTP'); + } + else + { + $mailserver = ini_get('sendmail_path'); + } + if (strlen($mailserver) == 0) + { + $response .='Mail:1;'; + } + else + { + if (!function_exists("mail")) + { + $response .='Mail:2;'; + } + else + { + $sent = mail("recipient@example.com", "Hi", "test message", "From: sender@example.com"); + if($sent) + { + $response .='Mail:0;'; + } + else + { + $response .='Mail:3;'; + } + } + } + + if($phpError != '') + { + $response .='PHPError:' . $phpError; + } + + return $response; +} +?> diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form_process.php b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form_process.php new file mode 100644 index 0000000..6f99fe9 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form_process.php @@ -0,0 +1,316 @@ + $error)); +} + +function get_form_response($success, $data) { + if (!is_array($data)) + die('data must be array'); + + $status = array(); + $status[$success ? 'FormResponse' : 'MusePHPFormResponse'] = array_merge(array('success' => $success), $data); + + return json_serialize($status); +} + +function check_required_fields($form) { + $errors = array(); + + foreach ($form['fields'] as $field => $properties) { + if (!$properties['required']) + continue; + + if (!array_key_exists($field, $_REQUEST) || ($_REQUEST[$field] !== "0" && empty($_REQUEST[$field]))) + array_push($errors, array('field' => $field, 'message' => $properties['errors']['required'])); + else if (!check_field_value_format($form, $field, $properties)) + array_push($errors, array('field' => $field, 'message' => $properties['errors']['format'])); + } + + if (!empty($errors)) + die(get_form_error_response(array('fields' => $errors))); +} + +function check_field_value_format($form, $field, $properties) { + $value = get_form_field_value($field, $properties, $form['resources'], false); + + switch($properties['type']) { + case 'checkbox': + case 'string': + case 'captcha': + // no format to validate for those fields + return true; + + case 'checkboxgroup': + if (!array_key_exists('optionItems', $properties)) + die(get_form_error_response(sprintf($form['resources']['invalid_form_config'], $properties['label']))); + + // If the value received is not an array, treat it as invalid format + if (!isset($value)) + return false; + + // Check each option to see if it is a valid value + foreach($value as $checkboxValue) { + if (!in_array($checkboxValue, $properties['optionItems'])) + return false; + } + + return true; + + case 'radiogroup': + if (!array_key_exists('optionItems', $properties)) + die(get_form_error_response(sprintf($form['resources']['invalid_form_config'], $properties['label']))); + + //check list of real radio values + return in_array($value, $properties['optionItems']); + + case 'recaptcha': + if (!array_key_exists('recaptcha', $form) || !array_key_exists('private_key', $form['recaptcha']) || empty($form['recaptcha']['private_key'])) + die(get_form_error_response($form['resources']['invalid_reCAPTCHA_private_key'])); + $resp = recaptcha_check_answer($form['recaptcha']['private_key'], $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); + return $resp->is_valid; + + case 'recaptcha2': + if (!array_key_exists('recaptcha2', $form) || !array_key_exists('private_key', $form['recaptcha2']) || empty($form['recaptcha2']['private_key'])) + die(get_form_error_response($form['resources']['invalid_reCAPTCHA2_private_key'])); + + $resp = recaptcha2_check_answer($form['recaptcha2']['private_key'], $_POST["g-recaptcha-response"], $_SERVER["REMOTE_ADDR"]); + return $resp["success"]; + + case 'email': + return 1 == preg_match('/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i', $value); + + case 'radio': // never validate the format of a single radio element; only the group gets validated + default: + die(get_form_error_response(sprintf($form['resources']['invalid_field_type'], $properties['type']))); + } +} + +/** + * Returns an object with following properties: + * "success": true|false, + * "challenge_ts": timestamp, // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ) + * "hostname": string, // the hostname of the site where the reCAPTCHA was solved + * "error-codes": [...] // optional; possibe values: + * missing-input-secret - The secret parameter is missing + * invalid-input-secret - The secret parameter is invalid or malformed + * missing-input-response - The response parameter is missing + * invalid-input-response - The response parameter is invalid or malformed + */ +function recaptcha2_check_answer($secret, $response, $remoteIP) { + $url = 'https://www.google.com/recaptcha/api/siteverify'; + $data = array( + 'secret' => $secret, + 'response' => $response, + 'remoteip' => $remoteIP + ); + + $options = array( + 'http' => array( + 'header' => "Content-type: application/x-www-form-urlencoded\r\n", + 'method' => 'POST', + 'content' => http_build_query($data) + ) + ); + + $context = stream_context_create($options); + $contents = file_get_contents($url, false, $context); + if ($contents === FALSE) { + die(get_form_error_response($form['resources']['invalid_reCAPTCHA2_server_response'])); + } + + $result = (array) json_decode($contents); + return $result; +} + +function email_form_submission($form) { + if(!defined('PHP_EOL')) + define('PHP_EOL', '\r\n'); + + $form_email = ((array_key_exists('Email', $_REQUEST) && !empty($_REQUEST['Email'])) ? cleanup_email($_REQUEST['Email']) : ''); + + $to = $form['email']['to']; + $subject = $form['subject']; + $message = get_email_body($subject, $form['heading'], $form['fields'], $form['resources']); + $headers = get_email_headers($to, $form_email); + + $sent = @mail($to, $subject, $message, $headers); + + if(!$sent) + die(get_form_error_response($form['resources']['failed_to_send_email'])); + + $success_data = array( + 'redirect' => $form['success_redirect'] + ); + + echo get_form_response(true, $success_data); +} + +function get_email_headers($to_email, $form_email) { + $headers = 'From: ' . $to_email . PHP_EOL; + $headers .= 'Reply-To: ' . $form_email . PHP_EOL; + $headers .= 'X-Mailer: Adobe Muse CC 2018.1.0.386 with PHP' . PHP_EOL; + $headers .= 'Content-type: text/html; charset=utf-8' . PHP_EOL; + + return $headers; +} + +function get_email_body($subject, $heading, $fields, $resources) { + $message = ''; + $message .= ''; + $message .= '' . encode_for_form($subject) . ''; + $message .= ''; + $message .= '

' . $heading . '

'; + $message .= ''; + + $sorted_fields = array(); + + foreach ($fields as $field => $properties) { + // Skip reCAPTCHA from email submission + if ('recaptcha' == $properties['type'] || 'recaptcha2' == $properties['type']) + continue; + + array_push($sorted_fields, array('field' => $field, 'properties' => $properties)); + } + + // sort fields + usort($sorted_fields, 'field_comparer'); + + foreach ($sorted_fields as $field_wrapper) + $message .= ''; + + $message .= '
' . encode_for_form($field_wrapper['properties']['label']) . ':' . get_form_field_value($field_wrapper['field'], $field_wrapper['properties'], $resources, true) . '
'; + $message .= '

'; + $message .= '
' . sprintf($resources['submitted_from'], encode_for_form($_SERVER['SERVER_NAME'])) . '
'; + $message .= '
' . sprintf($resources['submitted_by'], encode_for_form($_SERVER['REMOTE_ADDR'])) . '
'; + $message .= ''; + + return cleanup_message($message); +} + +function field_comparer($field1, $field2) { + if ($field1['properties']['order'] == $field2['properties']['order']) + return 0; + + return (($field1['properties']['order'] < $field2['properties']['order']) ? -1 : 1); +} + +function is_assoc_array($arr) { + if (!is_array($arr)) + return false; + + $keys = array_keys($arr); + foreach (array_keys($arr) as $key) + if (is_string($key)) return true; + + return false; +} + +function json_serialize($data) { + + if (is_assoc_array($data)) { + $json = array(); + + foreach ($data as $key => $value) + array_push($json, '"' . $key . '": ' . json_serialize($value)); + + return '{' . implode(', ', $json) . '}'; + } + + if (is_array($data)) { + $json = array(); + + foreach ($data as $value) + array_push($json, json_serialize($value)); + + return '[' . implode(', ', $json) . ']'; + } + + if (is_int($data) || is_float($data)) + return $data; + + if (is_bool($data)) + return $data ? 'true' : 'false'; + + return '"' . encode_for_json($data) . '"'; +} + +function encode_for_json($value) { + return preg_replace(array('/([\'"\\t\\\\])/i', '/\\r/i', '/\\n/i'), array('\\\\$1', '\\r', '\\n'), $value); +} + +function encode_for_form($text) { + $text = stripslashes($text); + return htmlentities($text, ENT_QUOTES, 'UTF-8');// need ENT_QUOTES or webpro.js jQuery.parseJSON fails +} + +function get_form_field_value($field, $properties, $resources, $forOutput) { + $value = $_REQUEST[$field]; + + switch($properties['type']) { + case 'checkbox': + return (($value == '1' || $value == 'true') ? $resources['checkbox_checked'] : $resources['checkbox_unchecked']); + + case 'checkboxgroup': + if (!is_array($value)) + return NULL; + + $outputValue = array(); + + foreach ($value as $checkboxValue) + array_push($outputValue, $forOutput ? encode_for_form($checkboxValue) : stripslashes($checkboxValue)); + + if ($forOutput) + $outputValue = implode(', ', $outputValue); + + return $outputValue; + + case 'radiogroup': + return ($forOutput ? encode_for_form($value) : stripslashes($value)); + + case 'string': + case 'captcha': + case 'recaptcha': + case 'recaptcha2': + case 'email': + return encode_for_form($value); + + case 'radio': // never validate the format of a single radio element; only the group gets validated + default: + die(get_form_error_response(sprintf($resources['invalid_field_type'], $properties['type']))); + } +} + +function cleanup_email($email) { + $email = encode_for_form($email); + $email = preg_replace('=((||0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i', null, $email); + return $email; +} + +function cleanup_message($message) { + $message = wordwrap($message, 70, "\r\n"); + return $message; +} +?> diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form_throttle.php b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form_throttle.php new file mode 100644 index 0000000..9cf640d --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/form_throttle.php @@ -0,0 +1,124 @@ +query("SELECT 1 FROM sqlite_master WHERE type='table' AND name='Submission_History';"); + if (!$res or $res->fetchColumn() == 0) + { + $created = $db->exec("CREATE TABLE Submission_History (IP VARCHAR(39), Submission_Date TIMESTAMP)"); + + if($created == 0) + { + $created = $db->exec("INSERT INTO Submission_History (IP,Submission_Date) VALUES ('256.256.256.256', DATETIME('now'))"); + } + + if ($created != 1) + { + $retCode = '2'; + } + } + if($retCode == '5') + { + $res = $db->query("SELECT COUNT(1) FROM Submission_History;"); + if ($res && $res->fetchColumn() > 0) + { + $retCode = '0'; + } + else + $retCode = '3'; + } + + // Close file db connection + $db = null; + } + else + $retCode = '4'; + + return $retCode; +} + +function formthrottle_too_many_submissions($ip) +{ + $tooManySubmissions = false; + + try + { + if (in_array("sqlite",PDO::getAvailableDrivers(),TRUE)) + { + $db = new PDO('sqlite:muse-throttle-db.sqlite3'); + } + else if (function_exists("sqlite_open")) + { + $db = new PDO('sqlite2:muse-throttle-db'); + } else { + return false; + } + } + catch( PDOException $Exception ) { + return $tooManySubmissions; + } + + if ($db) + { + $res = $db->query("SELECT 1 FROM sqlite_master WHERE type='table' AND name='Submission_History';"); + if (!$res or $res->fetchColumn() == 0) + { + $db->exec("CREATE TABLE Submission_History (IP VARCHAR(39), Submission_Date TIMESTAMP)"); + } + $db->exec("DELETE FROM Submission_History WHERE Submission_Date < DATETIME('now','-2 hours')"); + + $stmt = $db->prepare("INSERT INTO Submission_History (IP,Submission_Date) VALUES (:ip, DATETIME('now'))"); + $stmt->bindParam(':ip', $ip); + $stmt->execute(); + $stmt->closeCursor(); + + $stmt = $db->prepare("SELECT COUNT(1) FROM Submission_History WHERE IP = :ip;"); + $stmt->bindParam(':ip', $ip); + $stmt->execute(); + if ($stmt->fetchColumn() > 25) + $tooManySubmissions = true; + // Close file db connection + $db = null; + } + return $tooManySubmissions; +} +?> diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/scripts/jquery-1.8.3.min.js b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/jquery-1.8.3.min.js new file mode 100644 index 0000000..83589da --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/jquery-1.8.3.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.3 jquery.com | jquery.org/license */ +(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
t
",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="
",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
","
"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); \ No newline at end of file diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/scripts/jquery.museoverlay.js b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/jquery.museoverlay.js new file mode 100644 index 0000000..aea25a2 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/scripts/jquery.museoverlay.js @@ -0,0 +1,20 @@ +/* + Copyright 2011-2017 Adobe Systems Incorporated. All Rights Reserved. +*/ +(function(c){"function"===typeof define&&define.amd&&define.amd.jQuery?define(["jquery","museutils"],c):c(jQuery)})(function(c){c.fn.museOverlay=function(b){var d=c.extend({autoOpen:!0,offsetLeft:0,offsetTop:0,$overlaySlice:c(),$slides:c(),$overlayWedge:c(),duration:300,overlayExtraWidth:0,overlayExtraHeight:0,$elasticContent:c()},b);return this.each(function(){var a=c(this).data("museOverlay");if(a&&a[b]!==void 0)return a[b].apply(this,Array.prototype.slice.call(arguments,1));var a=d.slideshow.options.isResponsive, +f=(d.slideshow.options.slideClassName=="Container"||d.slideshow.options.slideClassName=="SSSlide")&&a,h=c("body"),g=c("
").appendTo(h).css({position:"fixed",top:0,left:0,zIndex:100001}).hide(),j=c("
").append(d.$overlaySlice).appendTo(g).css({position:"absolute",top:0,left:0});c(this).css({position:"absolute",left:0,top:0,outline:"none"}).attr({role:"dialog",tabindex:"0"});Muse.Utils.appendChildren(g,c(this));var k=c(this);a&&(Muse.Utils.moveElementsOutsideViewport(d.slideshow.$element.parents()), +k.css({width:d.slideshow.$element.width()+"px"}),Muse.Utils.moveElementsInsideViewport(d.slideshow.$element.parents()));var l=g.siblings("div"),i=c(window),m,n,q=null,a=g.find("a, button, [tabindex], input, textarea, [contenteditable]"),o=a[0],p=a[a.length-1],r=d.$elasticContent,s=r.length?parseInt(r.css("padding-left"))+parseInt(r.css("padding-right"))+parseInt(r.css("border-left-width"))+parseInt(r.css("border-right-width")):0,w=r.length?parseInt(r.css("padding-top"))+parseInt(r.css("padding-bottom"))+ +parseInt(r.css("border-top-width"))+parseInt(r.css("border-bottom-width")):0,y=d.$overlaySlice.outerWidth(),u=d.$overlaySlice.outerHeight(),t={isOpen:!1,reuseAcrossBPs:function(){d.reuseAcrossBPs=!0},handleClose:function(){t.close()},open:function(){if(!t.isOpen){if(!d.reuseAcrossBPs&&d.slideshow.$bp){if(!d.slideshow.$bp.hasClass("active"))return;d.slideshow.breakpoint.swapPlaceholderNodesRecursively(g);d.slideshow.breakpoint.activateIDs(g);c(window).trigger("lightboxresize")}Muse.Utils.showWidgetsWhenReady(g); +m=i.width();n=i.height();t.positionContent(m,n);g.show();j.css({opacity:0}).stop(!0);k.css({opacity:0}).stop(!0);l.attr("aria-hidden","true");window.setTimeout(function(){j.bind("click",t.handleClose)},300);j.animate({opacity:0.99},{queue:!1,duration:d.duration,complete:function(){j.css({opacity:""});k.animate({opacity:1},{queue:!1,duration:d.duration,complete:function(){k.css({opacity:""});t.applyPageDimensions();window.setTimeout(function(){k[0].focus()},void 0)}})}});c(document).bind("keydown", +t.onKeyDown);t.doLayout(m,n);t.isOpen=!0;i.bind("resize",t.onWindowResize);c("body").bind("muse_bp_deactivate",t.onBreakpointChange);t.onWindowResize(null,!0)}},close:function(a){j.unbind("click",t.handleClose);i.unbind("resize",t.onWindowResize);c("body").unbind("muse_bp_deactivate",t.onBreakpointChange);c(document).unbind("keydown",t.onKeyDown);if(d.onClose)d.onClose();j.css({opacity:0.99}).stop(!0);k.css({opacity:0.99}).stop(!0);k.animate({opacity:0},{queue:!1,duration:a?0:d.duration,complete:function(){j.animate({opacity:0}, +{queue:!1,duration:a?0:d.duration,complete:function(){g.hide();k.css({opacity:""});j.css({opacity:""});l.removeAttr("aria-hidden")}})}});t.isOpen=!1},next:function(){if(d.onNext)d.onNext()},previous:function(){if(d.onPrevious)d.onPrevious()},focusTrap:function(a){a.keyCode===9&&(a.shiftKey?a.target===o&&p.focus():a.target===p&&o.focus())},onBreakpointChange:function(){t.close(!0)},onKeyDown:function(a){switch(a.which||a.keyCode){case 37:case 38:k.is(":focus")&&t.previous();break;case 39:case 41:k.is(":focus")&& +t.next();break;case 27:t.close()}t.focusTrap(a)},onWindowResize:function(a,b){var c=i.width(),d=i.height();(b||m!=c||n!=d)&&q==null&&(q=setTimeout(function(){m=i.width();n=i.height();t.doLayout(m,n);t.positionContent(m,n);q=null},10))},doLayout:function(a,b){g.css({width:0,height:0});d.$overlayWedge.css({width:0,height:0});var c=a-s,f=b-w;r.length&&r.hasClass("fullwidth")&&(r.width(c),d.resizeSlidesFn&&d.resizeSlidesFn(c,f));t.applyPageDimensions();Muse.Utils.updateSlideshow_fstpOffsetSize(d.slideshow)}, +applyPageDimensions:function(){function a(){var b=document.createElement("div");b.style.overflow="scroll";b.style.visibility="hidden";b.style.position="absolute";b.style.width="100px";b.style.height="100px";document.body.appendChild(b);var c=b.offsetWidth-b.clientWidth;document.body.removeChild(b);return{width:c}}var b=c(document),h=b.width(),i=b.height(),b=k[0],j=c(b).find("."+d.slideshow.options.viewClassName),j=c(j[0]),l=document.documentElement||document.body;l.clientWidth!=l.offsetWidth&&(h= +l.scrollWidth-1);l.clientHeight!=l.offsetHeight&&ic(window).height()?(i=a(),o=o?(p+i.width)/c(k[0]).width()*100+"%":p+i.width+"px",b.width(o),b.parent().hasClass("wp-slideshow-clip")?b.parent().css({maxHeight:"100vh",overflowY:"auto"}):b.css({maxHeight:"100vh",overflowY:"auto"})):o?b.width(p/c(k[0]).width()*100+"%"):b.width=p+"px";h!=k.css("width")&&(c(window).trigger("lightboxresize"),t.doLayout(m,n),t.positionContent(m,n))},positionContent:function(a,b){var g= +0,h=0;d.slideshow.options.isResponsive?(h=d.$slides.filter(".wp-panel-active"),f&&h!==void 0&&h.length>0?(g=-(d.$slides.outerWidth()/2+(h.offset().left-k.offset().left)),h=-(d.$slides.outerHeight()/2+(h.offset().top-k.offset().top))):(g=-k.outerWidth()/2,h=-k.outerHeight()/2)):(g=-d.$slides.outerWidth()/2,h=-d.$slides.outerHeight()/2);g=Math.max(0,a/2+g);h=Math.max(0,b/2+h);d.$slides.outerHeight()>b&&(h=0);k.css({top:h,left:g});r.length&&r.hasClass("fullwidth")&&r.css("left",-g);g=a-s;h=b-w;if(r.length){r.width(g); +r.hasClass("fullscreen")&&r.height(h);if(d.slideshow.options.contentLayout_runtime==="lightbox"&&d.slideshow.options.elastic==="fullScreen"&&!d.slideshow.options.isResponsive){var i=c(k[0]).find("."+d.slideshow.options.viewClassName),i=c(i[0]);Muse.Utils.adjustTargetAndSlideHeights(i,d.slideshow.options.contentLayout_runtime)}d.resizeSlidesFn&&d.resizeSlidesFn(g,h)}}};k.data("museOverlay",t);d.autoShow&&t.open()})}}); +;(function(){if(!("undefined"==typeof Muse||"undefined"==typeof Muse.assets)){var c=function(a,b){for(var c=0,d=a.length;c0?a.insertBefore(l,a.children[0]):a.appendChild(l);if(a===document.body)d=c("html"),a=d.get(0),g=b(d),j.src=g,d.css("background-attachment")=="fixed"?(l.style.position= +"fixed",n=!1):l.style.position="absolute";else if(d.is("#page"))d.css("marginLeft").toLowerCase()=="auto"&&(m=!0),l.style.top=d.offset().top+parseInt(d.css("borderTopWidth"))+"px",l.style.bottom=parseInt(d.parent().css("paddingBottom"))+parseInt(d.css("borderBottomWidth"))+"px",l.style.left=d.offset().left+parseInt(d.css("borderLeftWidth"))+"px",l.style.right=d.offset().left+parseInt(d.css("borderRightWidth"))+"px",l.style.zIndex=0;else if(d.css("position")=="static")a.style.position="relative";this.reloadImage= +function(){var c=b(d),g=d.css("background-color");if(c!=j.src)j.src=c;a.style.backgroundImage="none";a.style.backgroundColor="transparent";l.style.backgroundColor=g;c=(d.css("background-position-x")+" "+d.css("background-position-y")).replace(/^\s+/,"").replace(/\s+$/,"");"0px 0px"==c&&(c="left top");c=c.split(/\s+/);c.length==1&&c[0].indexOf("center")>=0&&c.push("center");if(d.data("hasBackgroundPositionScrollEffect")!=!0)for(var g=0,i=c.length;g0&&setInterval(function(){for(var a=0;a
')),this.each(function(){j.registerBreakpoint(new g(c(this)))}),j.watchBreakpointChanges(),a.trigger("scroll"),this}}); +;(function(){if(!("undefined"==typeof Muse||"undefined"==typeof Muse.assets)){var c=function(a,b){for(var c=0,d=a.length;c=9&&(c=!1);return c};typeof c=="function"&&(a=c,c={});typeof a!="function"&&(a=function(){});c=d.extend({},{throttle:10},c);return this.each(function(){var g= +d(this),i=function(){for(var a=g.data(),b=!1,c,f=0;f0;)b.appendChild(a.childNodes[0])};Muse.Utils.copyChildren=function(a,b){for(var c=0;c=0;c--){var d=Muse.Utils.getRuleProperty(a[c],b);if(d)return d}return""}if(a.style.getPropertyValue)return a.style.getPropertyValue(b);return a.style.getAttribute(b)};Muse.Utils.toCamelCase=function(a){for(var b=Muse.Utils.toCamelCase.exp;b.test(a);a=a.replace(b,RegExp.$1.toUpperCase()));return a};Muse.Utils.toCamelCase.exp= +/-([a-z])/;Muse.Utils.getStyleValue=function(a,b){var c=a.style[Muse.Utils.toCamelCase(b)];c||(document.defaultView?c=document.defaultView.getComputedStyle(a,"").getPropertyValue(b):a.currentStyle&&(c=a.currentStyle[Muse.Utils.toCamelCase(b)]));c&&c.match(/(\d+)px/)&&(c=parseInt(c.substring(0,c.length-2)));return c};Muse.Utils.getCanvasDirection=function(a,b){var c=a.closest("*[data-rotate]"),c=c.length>0?parseFloat(c.data("rotate"))%360:0;return{dir:c>=0&&c<=45||c>=135&&c<=225||c>=315&&c<360?b:b=== +"horizontal"?"vertical":"horizontal",reverse:b==="horizontal"?c>=135&&c<=315:c>=45&&c<=225}};Muse.Utils.updateSlideshow_fstpOffsetSize=function(a){var b=c(window),d=c(document.body),g=a.options,i=a.$clip?a.$clip:a._findWidgetElements("."+g.clipClassName);Muse.Utils.moveElementsOutsideViewport(i.parents());a._fstpOffsetSize=g.transitionStyle==="horizontal"?g.elastic==="fullWidth"?Math.max(b.width(),parseInt(d.css("min-width"))):i.width():i.height();Muse.Utils.moveElementsInsideViewport(i.parents())}; +Muse.Utils.urlParam=function(a,b){var c=RegExp("[\\?&]"+b+"=([^&#]*)").exec(a);return c?c[1]:null};Muse.Utils.processHyperlink=function(a){var f=a.href,d=c(window),a=c(a),g=a.attr("target");if(!g||g=="_self"){var i=f.lastIndexOf("/"),g=f.lastIndexOf("#"),l=a.attr("class").match(/anim_(\w+)/);if(l&&g>i){var a=d.data("scrollWrapper"),k=f.substring(g),j=Muse.Utils.getAnchorWithDestination(k);if(j.length==0)return!1;var g=j.offset(),f=l[1],m=a||window,i=document.documentElement||document.body,l=(a?a.scrollHeight(): +i.scrollHeight)-d.height(),i=(a?a.scrollWidth():i.scrollWidth)-d.width(),n=Math.min(l,g.top+(a&&!a.isStandard()?a.scrollTop():0)),p=Math.min(i,g.left+(a&&!a.isStandard()?a.scrollLeft():0)),o=c(j).parents(".AccordionPanelContentClip").length,q=function(){var a=c(j).closest(".AccordionPanelContent").prev();a&&a.length&&!a.hasClass("AccordionPanelTabOpen")&&(a.trigger("mousedown"),a.trigger("mouseup"))};if(o){var i=c(j).closest(".AccordionPanelContent"),l=d.scrollTop(),r=d.scrollTop()+d.height(),s=d.scrollLeft()+ +d.width(),d=d.scrollLeft(),r=g.top>=l&&g.top+i.height()<=r,g=g.left>=d&&g.left+i.width()<=s;if(r&&g)return q(),!1;n=r?l:Math.min(n,c(j).parents(".AccordionWidget").offset().top);p=g?d:Math.min(p,c(j).parents(".AccordionWidget").offset().left)}d=function(){m.scrollTo(p,n);o&&q();try{history.replaceState({})}catch(a){if(!b.browser.msie||b.browser.version>7)window.location.hash=k}};try{history.pushState({},null,k)}catch(w){}if(window.scrollTo||void 0!==a){var a=a||c(document),y=a.scrollLeft(),u=a.scrollTop(), +t=y,x=u;c({scrollDistance:0}).animate({scrollDistance:1},{duration:1E3,easing:f,step:function(a){a!=0&&(x=a*(n-u),t=a*(p-y),m.scrollTo(y+t,u+x))},complete:d})}else c("html,body").animate({scrollTop:n,scrollLeft:p},1E3,f,d);return!1}}(d=Muse.Utils.urlParam(f,"devicelock"))&&Muse.Utils.createCookie("devicelock",d,0);return!0};Muse.Utils.navigateToAnchor=function(a){var b=function(){var b=Muse.Utils.getAnchorWithDestination(a);if(b.length!==0){var f=b.offset(),d=c(window),l=d.data("scrollWrapper"),b= +l||window,k=document.documentElement||document.body,j=(l?l.scrollHeight():k.scrollHeight)-d.height(),d=(l?l.scrollWidth():k.scrollWidth)-d.width(),j=Math.min(j,f.top+(l&&!l.isStandard()?l.scrollTop():0)),f=Math.min(d,f.left+(l&&!l.isStandard()?l.scrollLeft():0));b.scrollTo(f,j)}};if(c("body").hasClass("awaiting_bp_activate_scroll"))$window.one("scroll",function(){b()});else b()};var d=[];Muse.Utils.redirectCancelled=!1;Muse.Utils.redirectHyperlink=function(a){if(Muse.Utils.redirectCancelled)setTimeout(function(){Muse.Utils.redirectCancelled= +!1},0);else if(d=[],Muse.Utils.processHyperlink(a)&&!Muse.Utils.isIBE()){var b=c(a).attr("target");b||(b="_self");window.open(a.href,b)}};Muse.Utils.redirectHyperlinkInNewTab=function(a,b){if(Muse.Utils.redirectCancelled)setTimeout(function(){Muse.Utils.redirectCancelled=!1},0);else{d=[];thisWindow=window.self;var c=window.open(a);b?c.focus():thisWindow.focus()}};Muse.Utils.isMouseLeftClick=function(a){return a.which==1};Muse.Utils.isMouseMiddleClick=function(a){return a.which==2};Muse.Utils.isRedirectLinkKeyboardAction= +function(a){return a.which==13};Muse.Utils.addHyperlinkAnchor=function(a){a=c(a);a.bind("mousedown",function(a){(Muse.Utils.isMouseLeftClick(a)||Muse.Utils.isMouseMiddleClick(a))&&d.push(this)});a.bind("mouseup keyup",function(a){if(Muse.Utils.isMouseLeftClick(a)&&d.indexOf(this)!=-1)a.ctrlKey||a.metaKey?Muse.Utils.redirectHyperlinkInNewTab(this.href,a.shiftKey):Muse.Utils.redirectHyperlink(this);else if(Muse.Utils.isMouseMiddleClick(a)&&d.indexOf(this)!=-1)if(b.browser.webkit||!a.target.href&&b.browser.msie)Muse.Utils.redirectHyperlinkInNewTab(this.href, +a.shiftKey);else return d=[],!0;else Muse.Utils.isRedirectLinkKeyboardAction(a)&&Muse.Utils.redirectHyperlink(this);return!1});Muse.Utils.isIBE()||a.bind("click",function(){return!1})};Muse.Utils.addHyperlinkBlock=function(a){var b=c(a.parentNode);b.bind("mousedown",function(a){(Muse.Utils.isMouseLeftClick(a)||Muse.Utils.isMouseMiddleClick(a))&&d.push(this);return!1});b.bind("mouseup keyup",function(b){Muse.Utils.isMouseLeftClick(b)&&d.indexOf(this)!=-1?b.ctrlKey||b.metaKey?Muse.Utils.redirectHyperlinkInNewTab(a.href, +b.shiftKey):Muse.Utils.redirectHyperlink(a):Muse.Utils.isMouseMiddleClick(b)&&d.indexOf(this)!=-1?Muse.Utils.redirectHyperlinkInNewTab(a.href,b.shiftKey):Muse.Utils.isRedirectLinkKeyboardAction(b)&&Muse.Utils.redirectHyperlink(a);return!1});Muse.Utils.isIBE()||b.bind("click",function(){return!1})};Muse.Utils.prepHyperlinks=function(a){c("a.block").each(function(){var a=c(this.parentNode);Muse.Utils.addHyperlinkBlock(this);a.find("a.nonblock").each(function(){var a=c(this);if(a.data("registeredNonBlockLink")=== +!0)return!1;Muse.Utils.addHyperlinkAnchor(this);a.data("registeredNonBlockLink",!0)})});c("a.nonblock").each(function(){var a=c(this);a.data("registeredNonBlockLink")!==!0&&(a.parent('[class~="sbg"]').length>0?Muse.Utils.addHyperlinkAnchor(this):(a.attr("class").match(/anim_(\w+)/)||this.href.indexOf("devicelock=")!=-1)&&c(this).bind("click",function(){return Muse.Utils.processHyperlink(this)}))});a&&Muse.Utils.enableAnchorLinksActiveState()};Muse.Utils.pathOnly=function(a){if(!a)return a;return a.replace(/#(?:[^#]+)$/, +"").replace(/\?(?:[^\?]+)$/,"")};Muse.Utils.enableAnchorLinksActiveState=function(){var a=!1,b=[],d=c(window),g=Muse.Utils.getPageStyleSheets(),i=function(a){var b=a.parent('[class~="sbg"]');if(a.hasClass("MenuItem")||b.hasClass("MenuItem"))return"MuseMenuActive";if(a.hasClass("Button")||b.hasClass("Button"))return"ButtonSelected";return"MuseLinkActive"},l=!1,k=function(d){b.splice(0,b.length);c("a.nonblock,a.block",d).each(function(){Muse.Utils.saveHyperlinkInfo(c(this),i(c(this)),g,a,b)});b.sort(function(a, +b){if(a.fromb.from)return 1;return 0});l=!0},j=!1,m=d.data("scrollWrapper"),n=m||d,p=null,o=function(){j=!1;if(!l){var d=c("#page");a=d.outerWidth()/d.outerHeight()>2;k(p)}var d=a?n.scrollLeft():n.scrollTop(),g;a:{var h=0;g=b.length;for(var o;h0||a.hasClass("block")?a.parent():a,o="#"+a.attr("id"),b="."+b;if(null!==Muse.Utils.allStyleSheetRules(d,function(a){return 0<=a.indexOf(o+b)||0<=a.indexOf(b+o)})){m=0;for(n=i.length;m").insertAfter(c(this))})}; +Muse.Utils.addGradientFill=function(){c(".gradient").each(function(){var a=this;Muse.Utils.needPIE(function(){PIE.attach(a)})})};Muse.Utils.addShadows=function(){c(".shadow").each(function(){var a=this,b=c(a);Muse.Utils.needPIE(function(){b.data("mu-ie-matrix")||PIE.attach(a)})})};Muse.Utils.fixImageFramesWithRoundedCorners=function(){Muse.Browser.Features.checkCSSFeature("border-radius")&&Muse.Browser.Features.checkCSSFeature("-webkit-border-radius")&&c(".rounded-corners").each(function(){if(c(this).hasClass("clip_frame")){var a= +Muse.Utils.firstDescendant(this,Muse.Utils.Match.byNodeName("img"));a&&c(a).wrap('
')}})};Muse.Utils.addRoundedCorners=function(){c(".rounded-corners").each(function(){var a=this;Muse.Utils.needPIE(function(){var b=c(a);if(!b.data("mu-ie-matrix")){var d=b.css("filter");if(!d||!(d.toLowerCase().indexOf("opacity")>0&&d.indexOf("=100")<0)){if(a.childNodes.length&&!Muse.Browser.Features.checkCSSFeature("border-radius")&&(d=Muse.Utils.firstChild(a,Muse.Utils.Match.byNodeName("img")))&& +d.nodeName.toLowerCase()=="img"){var d=c(d),g=d.attr("src"),i=b.css("background-color")+" ",l=d.css("margin-left");if(l=="0px"||l=="auto")l=d.css("padding-left");var k=d.css("margin-top");if(k=="0px"||k=="auto")k=d.css("padding-top");if((l=="0px"||l=="auto")&&(k=="0px"||k=="auto"))b.addClass("museBGSize"),b.css("background-size","cover");d.css("visibility","hidden");b.css("background",i+"url("+g+") no-repeat "+l+" "+k)}PIE.attach(a)}}})})};Muse.Utils.addRGBA=function(){c(".rgba-background").each(function(){var a= +this;Muse.Utils.needPIE(function(){PIE.attach(a)})})};Muse.Utils.resizeHeight=function(a){var b={},d=function(d){var h=d.parent().hasClass("sbg")?d.parent():d,d=c(d.children()[0]);h.attr("data-lightbox")!="true"&&"fixed"!=d.css("position")&&h.height(d.outerHeight());h=d.attr("id")||"always_watch";b[h]||(b[h]=!0,d.watch("height",function(){var b=c(this);"fixed"!=b.css("position")&&!b.hasClass("fullscreen")&&b.closest(a).children().length&&b.closest(a).height(c(b.closest(a).children()[0]).outerHeight())}))}; +if(0-1};Muse.Utils.isStackedOrScatteredLayout= +function(a){return a==="stack"||a==="loose"};Muse.Utils.removeEdgeAnimationBorderForIE78=function(){c(".animationContainer").each(function(){c(this).parent().html(function(a,b){return b.replace(/><\/iframe>$/gi,' frameBorder="0">')})})};Muse.Utils.initializeAnimations=function(a){var b=function(b){if(!Muse.Utils.isIBE()&&!0===a){var f=b.contents();c("#report-abuse",f).remove();c("#report-abuse-spacer",f).remove()}b.removeClass("an_invi")};c(".animationContainer").each(function(){var a=c(this); +Muse.Utils.isIBE()||this.contentDocument&&"complete"==this.contentDocument.readyState?b(a):a.load(function(){b(a)})})};Muse.Utils.fixTransformRotations=function(){Muse.Browser.Features.checkCSSFeature("transform")||c("*[data-mu-ie-matrix]").each(function(){var a=c(this),b=a.parent(),d=Math.round(a.data("mu-ie-matrix-dx")),g=Math.round(a.data("mu-ie-matrix-dy")),i=b.innerHeight(),l=b.innerWidth();a.css({filter:function(b,c){if(c)return c+" "+a.data("mu-ie-matrix");return a.data("mu-ie-matrix")},"margin-bottom":"-="+ +g}).removeClass("shadow");b.css({"margin-bottom":"-="+(b.innerHeight()-i),"margin-right":"-="+(b.innerWidth()-l)});a.hasClass("actAsDiv")?(a.wrap(''),a.parent().css("float",a.css("float"))):a.hasClass("actAsInlineDiv")?a.wrap(''):a.wrap('
');a.parent().css({top:g,left:d,position:"relative","margin-bottom":g})})};Muse.Utils.fullPage=function(a){var b=c(window).data("stickyFooter"); +if(0==c(a).closest(".breakpoint").length)Muse.Assert.assert(0==c(".breakpoint").length,"Page is outside a breakpoint node."),b.init(c(a));else{var d=function(d){Muse.Assert.assert(1==d.length,"Cannot initialize sticky footer - invalid breakpoint node.");b.init(c(a,d))};d(c(".breakpoint.active"));c("body").on("muse_bp_activate",function(a,b,c){Muse.Utils.requestAnimationFrame(function(){d(c)})})}};Muse.Utils.widgetInsideLightbox=function(a){for(var b=0;b");b.addClass(a.attr("class"));b.attr("id",a.attr("id"));b.append(a.contents());a.replaceWith(b)};c("ul").each(function(){c(this).find("li").each(a)});c("ul").each(a)};Muse.Utils._initWidgetQueue=null;Muse.Utils._hasBPListener=!1;Muse.Utils.initWidget=function(a, +b,d){if(0==c(".breakpoint").length)c(a).each(function(){d(c(this))});else{for(var g=0;g').parent().html(),a.remove(),i.$parent.children("div #deleteMeWrapper").remove()):(i.$node=a.clone(),a.remove());f.push(i)}});f.length&&a.data("detached",f);d.length&&a.data("paused",d);c("video",a).each(function(){if(b.browser.msie&&b.browser.version==9&&this.pause&&this.getAttribute("autoplay")&&this.readyState!=4)c(this).one("play",function(){this.pause()});else this.pause&&!this.paused&& +this.pause()})};Muse.Utils.setPageToMaxWidth=function(){var a=c("#page");a!==void 0&&a.css("max-width")!=="none"&&(a.css("width",a.css("max-width")),c(window).trigger("pageWidthChanged"))};Muse.Utils.resetPageWidth=function(){var a=c("#page");a!==void 0&&(a.css("width",""),c(window).trigger("pageWidthChanged"))};Muse.Utils.getMinWidthOfElem=function(a){var b=parseFloat(a.css("min-width")?a.css("min-width"):0);b===0&&(b=parseFloat(a.attr("data-min-width")?a.attr("data-min-width"):0));return b};Muse.Utils.dropInOneBucketOfSizeAndPinPolicy= +function(a,b,d,g){if(a!==void 0&&b!==void 0){var i={};if(b==="fixed")i=d.fixed;else if(b==="fluidWidth"||b==="fluidWidthHeight")i=d.responsive;if(!c.isEmptyObject(i))switch(a){case "page_fluidx":i.ChildFluidPin.push(g);break;case "page_fixedLeft":i.ChildFixedLeft.push(g);break;case "page_fixedRight":i.ChildFixedRight.push(g);break;case "page_fixedCenter":i.ChildFixedCenter.push(g)}}};Muse.Utils.removeSizeAndPiningAttributes=function(){};Muse.Utils.getMarginLeft=function(a){if(a&&!c.isEmptyObject(a))return a.attr("data-margin-left")&& +a.attr("data-display-attr-change")===!0?a.attr("data-margin-left"):window.getComputedStyle(a[0])["margin-left"]};Muse.Utils.classifyChildrens=function(a,b,d){function g(a){var c=a.attr("data-pintopage"),d=a.attr("data-sizePolicy"),g=parseFloat(a.css("min-width")),h=parseFloat(a.attr("data-min-width")),n=!0;Muse.Utils.isTopLevelWidget(a)||a.is("form")||Muse.Utils.isMenuWidget(a)||Muse.Utils.isParameterizedHtmlWidget(a)?b.ChildWidgets.push(a):(g>0||h>0)&&!Muse.Utils.isParameterizedHtmlWidget(a)?b.ChildWithMinWidth.push(a): +c!==void 0&&d!==void 0?(Muse.Utils.dropInOneBucketOfSizeAndPinPolicy(c,d,b,a),Muse.Utils.removeSizeAndPiningAttributes(a)):n=!1;return n}d?a&&b&&g(a):a.children().each(function(){var a=c(this);g(a)||Muse.Utils.classifyChildrens(a,b,d)})};Muse.Utils.isElementFixedSize=function(a){return a&&a.attr("data-sizePolicy")==="fixed"};Muse.Utils.isInPercentage=function(a){return a&&a.indexOf("%")===a.length-1};Muse.Utils.isInPixel=function(a){return a&&a.indexOf("px")===a.length-2};Muse.Utils.getPropInPixel= +function(a,b){var c;a&&b&&a.css("display")!=="none"&&(c=b==="margin-left"?Muse.Utils.getMarginLeft(a):window.getComputedStyle(a[0]).getPropertyValue(b),Muse.Utils.isInPercentage(c)&&(b==="left"?(c=a.offsetParent().width()*parseFloat(c)/100,c=c.toString()+"px"):b==="margin-left"?(c=a.parent().width()*parseFloat(c)/100,c=c.toString()+"px"):c=a.css(b)));return c};Muse.Utils.getWidths=function(a){var b={};Muse.Utils.moveElementsOutsideViewport(a);Muse.Utils.moveElementsOutsideViewport(a.parents());b.offsetWidth= +0;b.elemWidth=0;b.offsetWidth=a[0].offsetWidth;b.elemWidth=parseFloat(Muse.Utils.getPropInPixel(a,"width"));Muse.Utils.moveElementsInsideViewport(a);Muse.Utils.moveElementsInsideViewport(a.parents());return b};Muse.Utils.getOffsetWidth=function(a){var b=a[0].offsetWidth;if(b===0)b=Muse.Utils.getWidths(a).offsetWidth;return b};Muse.Utils.getChildWidth=function(a,b,c){return b===!0?(b=parseFloat(a.css("min-width"))?parseFloat(a.css("min-width")):parseFloat(a.attr("data-min-width")),a.css("box-sizing")!== +"border-box"&&(b+=Math.round(a.outerWidth()-a.innerWidth())),b):c?window.getComputedStyle(a[0]).width:Muse.Utils.getOffsetWidth(a)};Muse.Utils.setMinWidthInformation=function(a,b,d){if(!c.isEmptyObject(a)&&a.chosenMinWidth&&a.$element&&d>0&&a.chosenMinWidth0)switch(b){case "page_fixedLeft":a.forEach(function(a){var b=Muse.Utils.getChildWidth(a,c,!0),f=a[0].offsetWidth,j=0,m=window.getComputedStyle(a[0]).left,m=m?parseFloat(m):0,n=0,p=0;Muse.Utils.isInPercentage(b)?(j=parseFloat(b)/100,b=Muse.Utils.getWidths(a),p=b.elemWidth,f=b.offsetWidth):Muse.Utils.isInPixel(b)&&(j=a.offsetParent().width(),p=parseFloat(b),j=j>0?p/j:0);j>0&&(f>Math.round(p)&&(n=f-Math.round(p)),b=Math.abs(Muse.Utils.isValueWithinTolerance(j, +1,1.0E-4)?a.outerWidth():(m+n)/(1-j)),Muse.Utils.setMinWidthInformation(d,a,b))});break;case "page_fixedRight":a.forEach(function(a){var b=Muse.Utils.getChildWidth(a,c,!0),f=0,j=window.getComputedStyle(a[0]).left,j=Math.abs(j?parseFloat(j):0);Muse.Utils.isInPercentage(b)?f=parseFloat(b)/100:Muse.Utils.isInPixel(b)&&(f=a.offsetParent().width(),b=parseFloat(b),f=f>0?b/f:0);if(f>0&&f<1&&!Muse.Utils.isValueWithinTolerance(f,1,1.0E-4))var m=Math.abs(j/(1-f));Muse.Utils.setMinWidthInformation(d,a,m)}); +break;case "page_fixedCenter":a.forEach(function(a){var b=window.getComputedStyle(a[0]).left,b=b?parseFloat(b):0,f=Math.abs(b),j=Muse.Utils.getMarginLeft(a),m=0,n=Muse.Utils.getChildWidth(a,c,!0),p=a[0].offsetWidth,o=0,q=0;if(b!==0)Muse.Utils.isInPercentage(j)?m=parseFloat(j)/100:Muse.Utils.isInPixel(j)&&(m=a.parent().width(),j=parseFloat(j),m=m>0?j/m:0),Muse.Utils.isInPercentage(n)?(n=Muse.Utils.getWidths(a),q=n.elemWidth,p=n.offsetWidth):Muse.Utils.isInPixel(n)&&(q=parseFloat(n)),m>0&&(b>0&&p>Math.round(q)&& +(o=p-Math.round(q)),Muse.Utils.setMinWidthInformation(d,a,Math.abs((f+o)/m)))})}return d};Muse.Utils.computeMinWidthForFixedChilds=function(a,b,d,g){function i(a,b){var d=0,f=0,f=Muse.Utils.getLeft(a),h=f.$element,i=f.left,l=Muse.Utils.isInPixel(i),f=Muse.Utils.isInPercentage(i)||i==="auto";Muse.Utils.moveElementsOutsideViewport(a);Muse.Utils.moveElementsOutsideViewport(a.parents());if(f)f=Muse.Utils.getLeft(a,!0),h=f.$element,i=f.left,l=Muse.Utils.isInPixel(i);var r=h.is(g)||g.closest(h).length, +f=parseFloat(g.width());l&&(d=parseFloat(i),r||(i=h.parents(),c.each(i,function(a,b){var f=c(b);if(f.is(g))return!1;f=Muse.Utils.getMarginLeft(f);Muse.Utils.isInPixel(f)&&f!==Muse.Utils.marginLeftForMovingElementsOutSideViewPort&&(d+=parseFloat(f));return!0})));b&&r&&(f=parseFloat(h.parent().width()));Muse.Utils.moveElementsInsideViewport(a);Muse.Utils.moveElementsInsideViewport(a.parents());return{containerWidth:f,left:d}}var l={$element:{},chosenMinWidth:-1};if(a&&a.length>0)switch(b){case "page_fluidx":a.forEach(function(a){var b= +Muse.Utils.getChildWidth(a,d,!1),c=i(a,!0),f=c.left,c=c.containerWidth,g=0,o=-1;c0?f/c:0;g<1&&!Muse.Utils.isValueWithinTolerance(g,1,1.0E-4)&&(o=Math.abs(b/(1-g)));Muse.Utils.setMinWidthInformation(l,a,o>b?o:b)});break;case "page_fixedLeft":a.forEach(function(a){var b=Muse.Utils.getChildWidth(a,d,!1),c=i(a).left,c=Math.abs(c+b);Muse.Utils.setMinWidthInformation(l,a,c>b?c:b)});break;case "page_fixedRight":a.forEach(function(a){var b=Muse.Utils.getChildWidth(a,d,!1),c=window.getComputedStyle(a[0]).left, +c=Math.abs(c?parseFloat(c):0),f=-1,i=Muse.Utils.getLeftAdjustmentAmountDoneByParents(a,g);i>=0&&(c-=i);c>0&&(f=Muse.Utils.isElementFixedSize(a)?c:c+b);Muse.Utils.setMinWidthInformation(l,a,f>b?f:b)});break;case "page_fixedCenter":a.forEach(function(a){var b=Muse.Utils.getChildWidth(a,d,!1),c=parseFloat(window.getComputedStyle(a[0]).left),f=0,i=0,f=Muse.Utils.getMarginLeft(a),o=0,q=-1;Muse.Utils.isInPercentage(f)?o=parseFloat(f)/100:Muse.Utils.isInPixel(f)&&(o=a.parent().width(),f=parseFloat(f),o= +o>0?f/o:0);o>0&&(q=Muse.Utils.getLeftAdjustmentAmountDoneByParents(a,g),q=q<0?0:q,f=(Math.abs(c)-q)/o,c<0?c+=q:c>0&&(c-=q),Muse.Utils.isValueWithinTolerance(o,1,1.0E-4)||(i=(b+c)/(1-o)),q=Math.max(f,i,b),Muse.Utils.setMinWidthInformation(l,a,q>b?q:b))})}return l};Muse.Utils.computeMinWidthForChildsWithMinWidth=function(a,b){var c={$element:{},chosenMinWidth:-1};a.forEach(function(a){var d=a.attr("data-pintopage")||"page_fluidx",l=-1;Muse.Utils.removeSizeAndPiningAttributes(a);d!==void 0&&(l=Muse.Utils.computeMinWidthForFixedChilds([a], +d,!0,b),Muse.Utils.setMinWidthInformation(c,a,l.chosenMinWidth))});return c};Muse.Utils.isTopLevelWidget=function(a){return a&&(a.hasClass("SlideShowWidget")||a.hasClass("PamphletWidget")||a.hasClass("TabbedPanelsWidget")||a.hasClass("AccordionWidget")||a.hasClass("Button"))};Muse.Utils.isMenuWidget=function(a){return a.is("nav")&&(a.hasClass("MenuBar")||a.hasClass("MenuBarVertical"))};Muse.Utils.computeMinWidthForForms=function(a){function b(a){a.children().each(function(){var a=c(this);if(a.attr("data-sizePolicy")=== +"fixed"){d.push(a);var g=a.innerWidth();a.attr("data-min-width",g)}else b(a)})}var d=[],g={$element:{},chosenMinWidth:-1};b(a);d.forEach(function(b){var d=b.parents(),f=b;c.each(d,function(b,d){var h=c(d),k=f.attr("data-pintopage")||"page_fluidx",i={};Muse.Utils.removeSizeAndPiningAttributes(f);if(f.is(a))return!1;i=Muse.Utils.computeMinWidthForFixedChilds([f],k,!0,h);Muse.Utils.setMinWidthInformation(g,i.$element,i.chosenMinWidth);f.attr("data-min-width")&&f.removeAttr("data-min-width");if(k=parseFloat(h.attr("data-min-width")))i.chosenMinWidth= +Math.max(i.chosenMinWidth,k);h.attr("data-min-width",i.chosenMinWidth);f=h;if(h.is(a))return!1})});var i=parseFloat(a.attr("data-min-width"));i>0&&(a.css("min-width",i),a.removeAttr("data-min-width"))};Muse.Utils.computeMinWidthForWidgetChilds=function(a,b){var d=[],g={$element:{},chosenMinWidth:-1};a.forEach(function(a){var b=Muse.Utils.getMinWidthOfElem(a);if(!a.hasClass("SlideShowWidget")&&!a.hasClass("PamphletWidget")&&Muse.Utils.isElementFixedSize(a))b=(b=window.getComputedStyle(a[0]).width)? +parseFloat(b):0,a.attr("data-min-width",b);else if(a.is("form"))Muse.Utils.computeMinWidthForForms(a);else{var c;a.hasClass("SlideShowWidget")||a.hasClass("PamphletWidget")?c=WebPro.Widget.ContentSlideShow.prototype.defaultPlugins[0]:a.hasClass("TabbedPanelsWidget")?c=WebPro.Widget.TabbedPanels.prototype.defaultPlugins[0]:a.hasClass("AccordionWidget")&&(c=WebPro.Widget.Accordion.prototype.defaultPlugins[0]);c&&c._setMinWidth&&(c._setMinWidth(a,!0),b=Muse.Utils.getMinWidthOfElem(a))}(b>0||a.is("form"))&& +d.push(a)});d.forEach(function(a){var d=a.attr("data-pintopage")||"page_fluidx",h={},h=Muse.Utils.computeMinWidthForFixedChilds([a],d,!0,b);Muse.Utils.setMinWidthInformation(g,h.$element,h.chosenMinWidth);h.$element&&!c.isEmptyObject(h.$element)&&h.$element.attr("data-min-width")&&(h.$element.removeAttr("data-min-width"),Muse.Utils.removeSizeAndPiningAttributes(h.$element))});return g};Muse.Utils.adjustMinWidthRespectToAllParents=function(a,b){var d=[];b.forEach(function(b){if(b&&!c.isEmptyObject(b)&& +b.$element&&!c.isEmptyObject(b.$element)&&b.chosenMinWidth>0){if(!a.is(b.$element)){var f=b.$element.parents();Muse.Utils.moveElementsOutsideViewport(b.$element);Muse.Utils.moveElementsOutsideViewport(f);c.each(f,function(d,f){var h=c(f);if(h.is(a))return!1;h=Math.round(h.outerWidth()-h.innerWidth());h>0&&(b.chosenMinWidth+=h);return!0});Muse.Utils.moveElementsInsideViewport(b.$element);Muse.Utils.moveElementsInsideViewport(f)}d.push(b.chosenMinWidth)}});return d};Muse.Utils.changeElementsDisplay= +function(a){var b;a.each(function(){b=c(this);b.css("display")==="none"&&(b.css("display","block"),b.attr("data-display-attr-change","true"))})};Muse.Utils.resetElementsDisplay=function(a){var b;a.each(function(){b=c(this);b.attr("data-display-attr-change")==="true"&&(b.css("display",""),b.css("display")!=="none"&&b.css("display","none"),b.removeAttr("data-display-attr-change"))})};Muse.Utils.isValueWithinTolerance=function(a,b,c){return a===b?!0:!isNaN(a)&&!isNaN(b)&&Math.abs(a-b)<=c?!0:!1};Muse.Utils.getMinWidthOfParts= +function(a,b,d){function g(a){var b=a.outerWidth()-a.innerWidth(),c=a.innerWidth();b>0&&(c+=parseFloat(a.css("border-left-width")));return c}function i(c){var g=c[0].getBoundingClientRect(),c={left:g.left,right:g.right};if(d&&b.attr("data-contentlayout")==="stack"&&b.attr("data-transitionStyle")==="horizontal"){var n=parseFloat(a.css("left"));if(n>0){var j=g.left-n,g=g.right-n;if(j>0)c.left=j;if(g>0)c.right=g}}return c}var l=-1;if(a&&b&&!c.isEmptyObject(a)&&!c.isEmptyObject(b)&&b[0]&&a[0]){Muse.Utils.changeElementsDisplay(a); +Muse.Utils.changeElementsDisplay(a.parents());var k=a.attr("data-sizePolicy"),j=a.attr("data-pintopage"),m=parseFloat(a.css("min-width"));parseFloat(a.attr("data-min-width"));var n=!1,p=b.width(),o=b[0].getBoundingClientRect(),q=g(a),r=i(a),s=a.outerWidth()-a.innerWidth();m>0&&(k="fixed",q=m+s,n=!0,j===void 0&&(j="page_fluidx"));if(k==="fixed")switch(j){case "page_fluidx":k=-1;o.left<=r.left?(o=r.left-o.left,o>=0&&(k=o/p)):r.left-o.left<2&&(k=0);k>=0&&(Muse.Utils.isValueWithinTolerance(k,1,1.0E-4)? +l=0:k<1&&(l=q/(1-k)));break;case "page_fixedLeft":n||(p=-1,o.left<=r.left?p=r.left-o.left:r.left-o.left<2&&(p=0),p>=0&&(l=q+p));break;case "page_fixedRight":n||(p=-1,o.right>=r.right?p=o.right-r.right:o.right-r.right<2&&(p=0),p>=0&&(l=q+p));break;case "page_fixedCenter":n||(p<=q?l=q:r.left<=o.left||r.right>=o.right?(p=o.left-r.left,k=r.right-o.right,p>=0&&k<=0?l=q+(o.right-r.right):k>=0&&p<=0&&(l=q+(r.left-o.left))):(r=r.left+q/2,o=o.left+p/2,p=-1,p=r===o?0:r=0&&(l=2*(q/2+p))))}Muse.Utils.resetElementsDisplay(a); +Muse.Utils.resetElementsDisplay(a.parents())}return l};Muse.Utils.getMinWidthForElement=function(a,b){var c=a&&a.length>0&&a[0].style.minWidth!==""?parseFloat(a[0].style.minWidth):0,b=b||!1;if(a&&a.length>0&&a[0].style.minWidth===""||b){if(Muse.Utils.isElementFixedSize(a)&&!b)return c;var d={responsive:{},fixed:{}};d.responsive.ChildFluidPin=[];d.responsive.ChildFixedLeft=[];d.responsive.ChildFixedRight=[];d.responsive.ChildFixedCenter=[];d.fixed.ChildFluidPin=[];d.fixed.ChildFixedLeft=[];d.fixed.ChildFixedRight= +[];d.fixed.ChildFixedCenter=[];d.ChildWithMinWidth=[];d.ChildWidgets=[];var i=[];Muse.Utils.classifyChildrens(a,d,b);i.push(Muse.Utils.computeMinWidthForFixedChilds(d.fixed.ChildFluidPin,"page_fluidx",!1,a));i.push(Muse.Utils.computeMinWidthForFixedChilds(d.fixed.ChildFixedLeft,"page_fixedLeft",!1,a));i.push(Muse.Utils.computeMinWidthForFixedChilds(d.fixed.ChildFixedRight,"page_fixedRight",!1,a));i.push(Muse.Utils.computeMinWidthForFixedChilds(d.fixed.ChildFixedCenter,"page_fixedCenter",!1,a));i.push(Muse.Utils.computeMinWidthForChildsWithMinWidth(d.ChildWithMinWidth, +a));i.push(Muse.Utils.computeMinWidthForWidgetChilds(d.ChildWidgets,a));(d=Muse.Utils.adjustMinWidthRespectToAllParents(a,i))&&d.length>0&&(c=Math.max.apply(null,d))}return c};Muse.Utils.buttonsMinWidthHelper=function(){Muse.Utils.setPageToMaxWidth();c(".Button").each(function(){var a=c(this),b=0;!Muse.Utils.isElementFixedSize(a)&&b===0&&(b=Muse.Utils.getMinWidthForElement(a,!1),b>0&&a.css("min-width",b));a.attr("data-visibility")==="changed"?(a.css("visibility",""),a.removeAttr("data-visibility")): +a.children()&&a.children().attr("data-visibility")==="changed"&&(a.children().css("visibility",""),a.children().removeAttr("data-visibility"))});Muse.Utils.resetPageWidth()};Muse.Utils.makeButtonsVisibleAfterSettingMinWidth=function(){if(0==c(".breakpoint").length)Muse.Utils.buttonsMinWidthHelper();else c("body").on("muse_bp_activate",function(){Muse.Utils.buttonsMinWidthHelper()})};Muse.Utils.attachIframesAndObjectsToResumeMedia=function(a){var b=a.data("detached");if(b){for(var d=b.length-1;d>= +0;d--){var g=b[d];!g.$next||g.$next.length==0?g.$parent.append(g.$node?g.$node:g.html):g.$next.before(g.$node?g.$node:g.html);g.$next=g.$parent=g.$node=g.html=void 0}a.data("detached",null)}if(b=a.data("paused"))for(d=0;d0||window.matchMedia&&window.matchMedia("(-moz-touch-enabled)").matches)return{Start:"pointerDown",End:"pointerUp",Move:"pointerMove",Listener:function(a){return function(b){var c= +b.originalEvent||b;if(c.pointerType!=c.POINTER_TYPE_MOUSE)return a.apply(this,arguments)}}};else for(var a=0,b=Muse.Browser.domPrefixes.length;a").css({border:"1px solid #000000;",width:100,height:100,position:"absolute",top:-99999,left:-99999,padding:0,margin:0,overflow:"auto"}).appendTo(document.body)[0];b.scrollHeight!==b.clientHeight&&(a=!0);c(b).remove();return a}();(function(a){var b=a(window),c=a("body"),d=function(){this.$verticalSpacer=null;this.enabled=!1;this.contentBelowSpacer= +this.contentAboveSpacer=this.minHeight=0};d.prototype.init=function(d){this.$verticalSpacer=a(".verticalspacer",d);if(0!=this.$verticalSpacer.length){this.enabled=!0;var g=Muse.Utils.getCSSIntValue(this.$verticalSpacer,"min-height");this.$verticalSpacer.css("min-height","");this.minHeight=Muse.Utils.getCSSIntValue(this.$verticalSpacer,"min-height");this.$verticalSpacer.css("min-height",g);this.pageMinHeight=Muse.Utils.getCSSIntValue(d,"padding-top")+Muse.Utils.getCSSIntValue(d,"min-height")+Muse.Utils.getCSSIntValue(d, +"padding-bottom");this.contentAboveSpacer=parseInt(this.$verticalSpacer.data("content-above-spacer"));this.contentBelowSpacer=parseInt(this.$verticalSpacer.data("content-below-spacer"));var j=this,k=!0,i=[],l=!0;b.resize(function(){if(k){var a=b.width();l?(i.splice(0,i.length),i.push(a),l=!1,setTimeout(function(){l=!0},200)):i[i.length-1]!=a&&(i.push(a),3
');var l=null,l=a(".muse_check_css"), +k=l.css("height","100vh").height(),j=l.css("height","calc(100vh + 300px)").height();0=0&&(h=c+"px");break;case "page_fixedRight":i=b.offset().left-a.offset().left;b=1;a=a.width(); +if(c==="fluidWidth"||c==="fluidWidthHeight")b=1-f;h=b*100+"%";i=i-b*a+"px";break;case "page_fixedCenter":i=b.offset().left-a.offset().left;b=0.5;a=a.width();if(c==="fluidWidth"||c==="fluidWidthHeight")b=0.5-f/2;h=b*100+"%";i=i-b*a+"px"}return{width:f*100+"%",height:g,"margin-left":h,left:i}}var a;if(document.body)a=document.body.scrollTop;var f=b.options,h=f.elastic!=="off",g=b._findWidgetElements("."+f.viewClassName),i=b.slides.$element,k=g,l=b._sslbpSlideOffset,j=i.outerWidth(),m=f.slideClassName== +"Container",n=f.contentLayout_runtime=="lightbox",q=!h&&n&&f.isResponsive;i.parent().outerWidth();f.isResponsive=f.isResponsive&&!h;Muse.Utils.moveElementsOutsideViewport(b.$element.parents());Muse.Utils.moveElementsOutsideViewport(g.children());Muse.Utils.resizeImages(b.$element,b.$element.attr("id"));Muse.Utils.moveElementsInsideViewport(g.children());Muse.Utils.moveElementsInsideViewport(b.$element.parents());var p=i.outerHeight(),o=b._findWidgetElements(f.lightboxPartsSelector);f.isResponsive&& +(o=o.map(function(){var a=c(this).parent();return a.hasClass("popup_anchor")?a[0]:this}));if(0==g.length){if(!b._$sslbpOverlay)b._$sslbpOverlay=c(".LightboxContent"),b._$sslbpOverlay.museOverlay("reuseAcrossBPs")}else{k=c(g[0].parentNode).filter("."+f.clipClassName);k.length===0&&(k=g);o.each(function(a,d){var i=c(d);if(i.css("position")!=="fixed")if(f.isResponsive)q||i.css({top:0});else{var k=b._sslbpShownInitially?i.offset():{top:Muse.Utils.getCSSIntValue(i,"top"),left:Muse.Utils.getCSSIntValue(i, +"left")},j={top:k.top-l.top};h?j.top+=Muse.Utils.getCSSIntValue(g,"padding-top"):j.left=k.left-l.left;i.css(j)}}).addClass("popup_element");var r=c("
").attr("id",g.attr("id")||"").css({left:0,top:0,width:"auto",height:"auto",padding:0,margin:0,zIndex:"auto"}),s;h&&(s=c("
"),f.elastic==="fullScreen"?s.addClass("fullscreen"):f.elastic==="fullWidth"&&s.addClass("fullwidth"),s.css({borderColor:g.css("border-left-color"),borderStyle:g.css("border-left-style"),borderLeftWidth:g.css("border-left-width"), +borderRightWidth:g.css("border-right-width"),borderTopWidth:g.css("border-top-width"),borderBottomWidth:g.css("border-bottom-width")}),f.elastic!=="fullScreen"&&s.css({paddingLeft:g.css("padding-left"),paddingRight:g.css("padding-right"),paddingTop:g.css("padding-top"),paddingBottom:g.css("padding-bottom")}),s.append(Muse.Utils.includeMEditableTags(k)),s.append(Muse.Utils.includeMEditableTags(o)),r.css({border:"none"}));var w=c("
").addClass("overlayWedge").insertBefore(Muse.Utils.includeMEditableTags(i)[0]); +r.append(Muse.Utils.includeMEditableTags(g.children().not("."+f.slideClassName)));Muse.Utils.appendChildren(g,Muse.Utils.includeMEditableTags(i));r.css({visibility:"hidden"}).appendTo(document.body);r.detach().css({visibility:""});Muse.Utils.moveElementsOutsideViewport(k.parents());k.css({position:f.elastic==="fullScreen"?"relative":"absolute",padding:q?k.css("padding"):0,left:f.elastic==="fullWidth"?"":q?k.css("left"):0,top:q?k.css("top"):0,borderWidth:0,background:"none",width:q?k.width()*100/k.parent().width()+ +"%":f.elastic==="fullScreen"?"100%":k.css("width"),height:!q&&f.elastic==="fullScreen"?"100%":k.css("height")});Muse.Utils.moveElementsInsideViewport(k.parents());g.removeAttr("id");!q&&f.elastic!=="fullScreen"&&k.css({width:j+"px",height:p});(!n||!m||!f.isResponsive)&&f.transitionStyle==="fading"&&i.css({position:"absolute",left:0,top:0});var y;if(b._fstpPositionSlides||b._csspResizeFullScreenImages)y=function(a,c){b._fstpPositionSlides&&b._fstpPositionSlides(a,c);b._csspResizeFullScreenImages&& +b._csspResizeFullScreenImages(b,b.slides.$element,f.heroFitting)};j=c("
").addClass("LightboxContent").css({position:"absolute"});if(!q||h)j.append(h?s:k);!q&&!h&&j.append(Muse.Utils.includeMEditableTags(o));if(q){var k=b.$element,o=k.attr("data-sizePolicy"),n=k.attr("data-pintopage"),u;m?(m=b._findWidgetElements("."+f.slideLinksClassName),p=m.attr("data-sizePolicy"),u=m.attr("data-pintopage")):(u=b.$element.find("."+f.slideLinksClassName),m=u.closest(".popup_anchor"),p=u.attr("data-sizePolicy"), +u=u.attr("data-pintopage"));var t;p===void 0&&u===void 0?(p=o,u=n):p==="fixed"&&u==="page_fluidx"&&(u=n);m&&m.length>0&&(Muse.Utils.moveElementsOutsideViewport(m.parents()),t=d(k,m,p,u),Muse.Utils.moveElementsInsideViewport(m.parents()));h?s.append(k.children()):Muse.Utils.appendChildren(j,k.children());m.parent();k.append(m);m&&m.length>0&&m.css(t)}j.museOverlay({autoOpen:!1,$slides:i,$overlaySlice:r,$overlayWedge:w,slideshow:b,onNext:function(){b.next()},onPrevious:function(){b.previous()},onClose:function(){b.stop(); +b.slides.hidePanel(b.slides.activeElement);b.tabs.activeElement&&b.tabs.activeElement.focus()},$elasticContent:s,resizeSlidesFn:y});if(c.browser.msie&&c.browser.version<9){Muse.Assert.assert(!Muse.Utils.isIBE(),"IBE doesn't support ").addClass(f.clipClassName),i=b._findWidgetElements("."+f.slideClassName);d===!0&&f.contentLayout_runtime!=="lightbox"&&f.isResponsive&&(g.css("width",""),h.css("width",""),h.children().each(function(){c(this).css("width","")}));f.contentLayout_runtime==="lightbox"||f.elastic==="fullScreen"||(g.addClass("has_updated_clip_width"), +h.addClass("has_updated_clip_width"),h.children().addClass("has_updated_clip_width"));var k=i.outerWidth(),i=i.outerHeight();if(f.elastic==="fullScreen")g.addClass("fullscreen");else{var l={position:"relative",width:k+"px",height:i+"px",overflow:"hidden"},j=h.css("position");if(j==="absolute")l.position=j,l.left=a(h),l.top=h.css("top");else if(j==="fixed"){var m=Muse.Utils.getStyleSheetRulesById(Muse.Utils.getPageStyleSheets(),h.get(0).id);l.position=j;l.left=Muse.Utils.getRuleProperty(m,"left"); +l.top=Muse.Utils.getRuleProperty(m,"top");l.bottom=Muse.Utils.getRuleProperty(m,"bottom");l.right=Muse.Utils.getRuleProperty(m,"right")}g.css(l);!f.isResponsive&&f.transitionStyle==="fading"&&j!=="fixed"&&(i=k=0);h.css({width:k+"px",height:i+"px"});i=!1;f.isResponsive&&f.contentLayout_runtime==="lightbox"&&h.length>0&&(i=!Muse.Utils.isPropertyInPercent(h.closest(".popup_anchor"),"width"));!i&&f.isResponsive&&h.children().each(function(){if(f.contentLayout_runtime==="lightbox"||f.elastic==="fullWidth")c(this).hasClass("borderbox")|| +c(this).addClass("borderbox"),c(this).css("width","100%");else if(c(this).hasClass("borderbox"))c(this).css("width",k+"px");else{var a=c(this).outerWidth()-c(this).innerWidth();c(this).css("width",k-a+"px")}})}f.isResponsive&&f.contentLayout_runtime!="lightbox"&&f.elastic!="fullScreen"&&(h=h.closest(".popup_anchor"),i=h.children(),l=c(i[0]),(l.css("position")!=="fixed"||i.length>1)&&h.height(l.outerHeight()));b.$element&&g&&b.$element.hasClass("PamphletWidget")&&b.$element.hasClass("allow_click_through")&& +g.css("pointer-events","none");b._fstpPositionSlides&&b._fstpPositionSlides();return g},_syncTargetHeights:function(b){var d=b.options,a=b._findWidgetElements("."+d.viewClassName),f=b._findWidgetElements("."+d.clipClassName),h=b._findWidgetElements("."+d.slideClassName);d.transitionStyle!=="fading"&&d.isResponsive&&(a.css("width",""),f.css("width",""),a.children().css("width",""));d.contentLayout_runtime==="lightbox"||d.elastic==="fullScreen"||(f=b.$element.parents().filter(".has_updated_clip_width"), +f.css("width",""),f.removeClass("has_updated_clip_width"));d.viewClassName==="ContainerGroup"?Muse.Utils.moveElementsOutsideViewport(h):Muse.Utils.moveElementsOutsideViewport(a.children());Muse.Utils.resizeImages(b.$element,b.$element.attr("id"));Muse.Utils.adjustTargetAndSlideHeights(a,d.contentLayout_runtime);if(d.contentLayout_runtime!="lightbox"&&d.elastic!="fullScreen"){var b=a.closest(".popup_anchor"),f=b.children(),g=c(f[0]);(g.css("position")!=="fixed"||f.length>1)&&b.height(g.outerHeight())}d.viewClassName=== +"ContainerGroup"?Muse.Utils.moveElementsInsideViewport(h):Muse.Utils.moveElementsInsideViewport(a.children())},_syncSlideShowTriggerHeights:function(b){var d=b._findWidgetElements("."+b.options.slideLinkClassName),b=b._findWidgetElements("."+b.options.slideLinksClassName),a,f,h;d.each(function(){a=c(this);a.css("height","");a.css("height",parseInt(window.getComputedStyle(this).getPropertyValue("height")))});b.each(function(){a=c(this);a.css("height","");var b=parseInt(window.getComputedStyle(this).getPropertyValue("padding-top")), +d=parseInt(window.getComputedStyle(this).getPropertyValue("padding-bottom")),k=a.innerHeight(),l=a.innerWidth(),j=0;a.attr("data-height-width-ratio")!==void 0&&(j=a.attr("data-height-width-ratio"));a.css("height",Math.max(l*j,k)-(b+d));f=a.closest(".popup_anchor");h=c(f.children()[0]);h.css("position")!="fixed"&&f.height(h.outerHeight())})},_syncCompositionTriggerHeights:function(b){var d=b._findWidgetElements("."+b.options.slideLinkClassName),b=b._findWidgetElements("."+b.options.slideLinksClassName), +a,f,h;d.each(function(){a=c(this);a.css("height","");a.css("height",parseInt(window.getComputedStyle(this).getPropertyValue("height")));f=a.closest(".popup_anchor");a.attr("data-iscompressed")?(h=c("#"+c(this).attr("id").substr(1)))&&f.height(h.innerHeight()):(h=c(f.children()[0]),h.css("position")!=="fixed"&&f.height(h.outerHeight()))});b.each(function(){a=c(this);a.css("height","");a.css("height",parseInt(window.getComputedStyle(this).getPropertyValue("height")))})},_syncLightBoxPartHeights:function(b){var d= +b._findWidgetElements("."+b.options.captionClassName),b=b._findWidgetElements(b.options.lightboxPartsSelector),a=0,f,h;d.length&&(d.each(function(){c(this).css("height","");a=Math.max(a,c(this).outerHeight())}),d.parent().css("height",a+"px"));b.each(function(){f=c(this).closest(".popup_anchor");h=c(f.children()[0]);h.css("position")!="fixed"&&f.height(h.outerHeight())})},_transformMarkup:function(b){var d=b.options,a=b._findWidgetElements("."+d.viewClassName),f=b._findWidgetElements("."+d.slideLinkClassName), +h=b._findWidgetElements(d.lightboxPartsSelector);$element=a;isLightbox=d.contentLayout_runtime==="lightbox";if(b.$element&&b.$element.hasClass("PamphletWidget")&&b.$element.hasClass("allow_click_through")){if(!isLightbox)for(;$element&&$element.length&&!$element.hasClass("PamphletWidget");)$element.css("pointer-events","none"),$element=$element.parent();if(f)for(var g=0;g0&&(q=Math.max(q,a))}function f(a,b){a>0&&b.css("min-width",a)}var h=b.attr("data-contentlayout"),g=h?h==="lightbox":b.attr("data-islightbox")=== +"true",i=g?c(".LightboxContent"):b,k=g?"LightboxContent":"PamphletWidget",l=b.attr("data-showWidgetPartsEnabled")===void 0?!0:!1;this._scopedFind(i,".ContainerGroup",k);this._scopedFind(b,".ThumbGroup","PamphletWidget");var j=this._scopedFind(i,".PamphletPrevButton",k),m=this._scopedFind(i,".PamphletNextButton",k),n=this._scopedFind(i,".PamphletCloseButton",k),q=-1,p=h==="loose";if(!(d&&Muse.Utils.getMinWidthOfElem(b)>0)){this._scopedFind(b,".Thumb","PamphletWidget").forEach(function(c){var g=-1; +d?(g=Muse.Utils.getMinWidthOfParts(c,b),a(g,c)):(g=Muse.Utils.getMinWidthForElement(c,d),f(g,c))});if((!g||!d)&&l){var o=-1,r=-1,s=[];this._scopedFind(i,".Container",k).forEach(function(c){s.push(c);d?(r=Muse.Utils.getMinWidthOfParts(c,b,!0),r>0&&a(r,c)):(r=Muse.Utils.getMinWidthForElement(c,d),p&&r>0?f(r,c):r>0&&(o=Math.max(o,r)))});!d&&!p&&s.forEach(function(a){o>0&&f(o,a)});j&&(h=-1,j=j[0],d?(h=Muse.Utils.getMinWidthOfParts(j,b),a(h,j)):(h=Muse.Utils.getMinWidthForElement(j,d),f(h,j)));m&&(j=-1, +m=m[0],d?(j=Muse.Utils.getMinWidthOfParts(m,b),a(j,m)):(j=Muse.Utils.getMinWidthForElement(m,d),f(j,m)));n&&(m=-1,n=n[0],d?(m=Muse.Utils.getMinWidthOfParts(n,b),a(m,n)):(m=Muse.Utils.getMinWidthForElement(n,d),f(m,n)))}d&&q>0&&b.css("min-width",q)}},_setMinWidthForSlideShow:function(b,d){function a(a){s=Math.max(s,a)}function f(a,b){a>0&&b.css("min-width",a)}var h=b.attr("data-contentlayout")==="lightbox",g=h?c(".LightboxContent"):b,i=h?"LightboxContent":"SlideShowWidget",k=this._scopedFind(g,".SlideShowContentPanel", +i),l=this._scopedFind(b,".SSSlideLinks","SlideShowWidget"),j=".SSSlideLink",m=this._scopedFind(g,".SlideShowCaptionPanel",i),n=this._scopedFind(g,".SSPreviousButton",i),q=this._scopedFind(g,".SSNextButton",i),p=this._scopedFind(g,".SSSlideCount",i),o=this._scopedFind(g,".SSFirstButton",i),r=this._scopedFind(g,".SSLastButton",i),j=".SSSlideLink",s=-1;if(!(d&&Muse.Utils.getMinWidthOfElem(b)>0)){var w=-1;Muse.Utils.isElementFixedSize(l[0])?(l=l[0],d?(w=Muse.Utils.getMinWidthOfParts(l,b),a(w,l)):(w=Muse.Utils.getMinWidthForElement(l, +d),f(w,l))):d&&this._scopedFind(b,j,"SlideShowWidget").forEach(function(c){var d=-1,d=Muse.Utils.getMinWidthOfParts(c,b);a(d,c)});if(!h||!d){var y=0,u=0;this._scopedFind(g,".SSSlide",i).forEach(function(c){d?(y=Muse.Utils.getMinWidthOfParts(c,b,!0),y>0&&a(y,c)):(y=Muse.Utils.getMinWidthForElement(c,d),y>0&&(u=Math.max(u,y)))});d||f(u,k[0]);m&&(h=-1,m=m[0],d?(h=Muse.Utils.getMinWidthOfParts(m,b),a(h,m)):(h=Muse.Utils.getMinWidthForElement(m,d),f(h,m)));n&&(m=-1,n=n[0],d?(m=Muse.Utils.getMinWidthOfParts(n, +b),a(m,n)):(m=Muse.Utils.getMinWidthForElement(n,d),f(m,n)));q&&(n=-1,q=q[0],d?(n=Muse.Utils.getMinWidthOfParts(q,b),a(n,q)):(n=Muse.Utils.getMinWidthForElement(q,d),f(n,q)));p&&(q=-1,p=p[0],d?(q=Muse.Utils.getMinWidthOfParts(p,b),a(q,p)):(q=Muse.Utils.getMinWidthForElement(p,d),f(q,p)));o&&(p=-1,o=o[0],d?(p=Muse.Utils.getMinWidthOfParts(o,b),a(p,o)):(p=Muse.Utils.getMinWidthForElement(o,d),f(p,o)));r&&(o=-1,r=r[0],d?(o=Muse.Utils.getMinWidthOfParts(r,b),a(o,r)):(o=Muse.Utils.getMinWidthForElement(r, +d),f(o,r)))}d&&s>0&&b.css("min-width",s)}},_setMinWidth:function(b,c){var a=b.attr("data-sizePolicy"),f=b.hasClass("SlideShowWidget"),h=b.hasClass("PamphletWidget");if(c||a!=="fixed")h?this._setMinWidthForComposition(b,c):f&&this._setMinWidthForSlideShow(b,c)},_onResize:function(b){function d(a,b){for(var c=1;ca.right)a.right=d.right;if(d.topa.bottom)a.bottom= +d.bottom}}var a=b.data.plugin,f=b.data.slideshow,b=b.data.isLightbox,h=f.options;Muse.Utils.moveElementsOutsideViewport(f.$element.parents());h.isResponsive&&(a._syncTargetHeights(f),f.$element.hasClass("PamphletWidget")?a._syncCompositionTriggerHeights(f):a._syncSlideShowTriggerHeights(f),a._syncLightBoxPartHeights(f));h.transitionStyle!=="fading"&&a._updateClipElement(f,!0);var g=f.tabs,i=f.slides.$element;if(g&&i){g.$element[0].style.display="block";var k=g.$element[0].getBoundingClientRect(), +l={};l.left=k.left;l.right=k.right;l.top=k.top;l.bottom=k.bottom;d(l,g.$element);var j=[];for(index=0;indexl.right||m.bottoml.bottom);for(index=0;index=a.x&&b.pageX<=a.x+a.width&&b.pageY>=a.y&&b.pageY<=a.y+a.height},_layoutThumbs:function(b){var d=b.options,a=Muse.Utils.getStyleValue;b._findWidgetElements("."+d.slideLinksClassName).each(function(){var b=c(this).find("."+d.slideLinkClassName);firstThumb=b[0];tWidth=a(firstThumb,"width");tHeight=a(firstThumb,"height");gapH=a(firstThumb,"margin-right");gapV=a(firstThumb,"margin-bottom");borderL=a(firstThumb, +"border-left-width");borderR=a(firstThumb,"border-right-width");borderT=a(firstThumb,"border-top-width");borderB=a(firstThumb,"border-bottom-width");gWidth=a(this,"width");paddingL=a(this,"padding-left");paddingT=a(this,"padding-top");maxNumThumb=Math.floor((gWidth+gapH)/(tWidth+borderL+borderR+gapH));gStyle=this.runtimeStyle?this.runtimeStyle:this.style;numRow=Math.ceil(b.length/maxNumThumb);firstRowNum=b.lengthfirstRowNum&&(numInRow=1,leftPos=leftMostPos,topPos+=tHeight+borderT+borderB+gapV);numInRow++>1&&(leftPos+=tWidth+borderL+borderR+gapH);var a=this.runtimeStyle?this.runtimeStyle:this.style;a.marginRight="0px";a.marginBottom="0px";a.left=leftPos+"px";a.top=topPos+"px"})})},_resizeFullScreenImages:function(b,d,a){d.each(function(){c(this).find("img").each(function(){this.complete&& +!c(this).hasClass(b.options.imageIncludeClassName)&&b._csspPositionImage(this,a,b.options.elastic)})})},_setupImagePositioning:function(b,d,a,f){var h=this;d.each(function(){c(this).find("img").each(function(){var b=this;b.complete?h._positionImage(b,a,f):c(b).load(function(){h._positionImage(b,a,f)})})})},_positionImage:function(b,d,a,f,h){var g=c(window),i=b.runtimeStyle?b.runtimeStyle:b.style,k=a==="fullWidth"||a==="fullScreen",l=a==="fullHeight"||a==="fullScreen",j=d=="fitContentProportionally"; +$img=c(b);k=k?window.innerWidth?window.innerWidth:g.width():j?$img.data("width"):$img.parent().parent().hasClass("rounded-corners")&&$img.parent().parent().hasClass("SSSlide")&&$img.parent().hasClass("clip_frame")?$img.parent().parent().closest(":not(.bc_ch_wrapper)").width():$img.parent().closest(":not(.bc_ch_wrapper)").width();g=l?window.innerHeight?window.innerHeight:g.height():j?$img.data("height"):$img.parent().parent().hasClass("rounded-corners")&&$img.parent().parent().hasClass("SSSlide")&& +$img.parent().hasClass("clip_frame")?$img.parent().parent().closest(":not(.bc_ch_wrapper)").height():$img.parent().closest(":not(.bc_ch_wrapper)").height();f=f!==void 0?f:Muse.Utils.getNaturalWidth(b);b=h!==void 0?h:Muse.Utils.getNaturalHeight(b);a!=="off"&&(f===0&&(f=$img.data("imageWidth")),b===0&&(b=$img.data("imageHeight")));if(k==f&&g==b)i.marginTop="0px",i.marginLeft="0px";else{l=f;h=b;if(d=="fillFrameProportionally"){if(a!=="off"||f>k&&b>g)d=f/k,a=b/g,dk||b>g))d=f/k,a=b/g,d>a?(h=b/d,l=f/d):(h=b/a,l=f/a);i.width=Muse.Utils.pixelRound(l)+"px";i.height=Muse.Utils.pixelRound(h)+"px";i.marginTop=Muse.Utils.pixelRound((g-h)/2)+"px";i.marginLeft=Muse.Utils.pixelRound((k-l)/2)+"px"}}};c.extend(WebPro.Widget.ContentSlideShow.slideImageIncludePlugin.defaultOptions,{imageIncludeClassName:"ImageInclude",slideLoadingClassName:"SSSlideLoading"});WebPro.Widget.ContentSlideShow.prototype.defaultPlugins=[Muse.Plugins.ContentSlideShow]; +WebPro.Widget.ContentSlideShow.prototype._getAjaxSrcForImage=function(b){for(var d=c(window).data("ResolutionManager").getDataSrcAttrName(),a=d.length,f,h=0;hthis.depCount&&!this.defined){if(K(k)){if(this.events.error&&this.map.isDefine||g.onError!== +ha)try{h=l.execCb(c,k,b,h)}catch(d){a=d}else h=l.execCb(c,k,b,h);this.map.isDefine&&void 0===h&&((b=this.module)?h=b.exports:this.usingExports&&(h=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",A(this.error=a)}else h=k;this.exports=h;if(this.map.isDefine&&!this.ignore&&(v[c]=h,g.onResourceLoad)){var f=[];y(this.depMaps,function(a){f.push(a.normalizedMap||a)});g.onResourceLoad(l,this.map,f)}C(c); +this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}},callPlugin:function(){var a=this.map,b=a.id,d=q(a.prefix);this.depMaps.push(d);w(d,"defined",z(this,function(h){var k,f,d=e(fa,this.map.id),M=this.map.name,r=this.map.parentMap?this.map.parentMap.name:null,m=l.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(h.normalize&&(M=h.normalize(M,function(a){return c(a,r,!0)})|| +""),f=q(a.prefix+"!"+M,this.map.parentMap),w(f,"defined",z(this,function(a){this.map.normalizedMap=f;this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),h=e(t,f.id)){this.depMaps.push(f);if(this.events.error)h.on("error",z(this,function(a){this.emit("error",a)}));h.enable()}}else d?(this.map.url=l.nameToUrl(d),this.load()):(k=z(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),k.error=z(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];D(t,function(a){0=== +a.map.id.indexOf(b+"_unnormalized")&&C(a.map.id)});A(a)}),k.fromText=z(this,function(h,c){var d=a.name,f=q(d),M=S;c&&(h=c);M&&(S=!1);u(f);x(p.config,b)&&(p.config[d]=p.config[b]);try{g.exec(h)}catch(e){return A(F("fromtexteval","fromText eval for "+b+" failed: "+e,e,[b]))}M&&(S=!0);this.depMaps.push(f);l.completeLoad(d);m([d],k)}),h.load(a.name,m,k,p))}));l.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){Z[this.map.id]=this;this.enabling=this.enabled=!0;y(this.depMaps,z(this,function(a, +b){var c,h;if("string"===typeof a){a=q(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=e(R,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;w(a,"defined",z(this,function(a){this.undefed||(this.defineDep(b,a),this.check())}));this.errback?w(a,"error",z(this,this.errback)):this.events.error&&w(a,"error",z(this,function(a){this.emit("error",a)}))}c=a.id;h=t[c];x(R,c)||!h||h.enabled||l.enable(a,this)}));D(this.pluginMaps,z(this,function(a){var b=e(t,a.id); +b&&!b.enabled&&l.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};l={config:p,contextName:b,registry:t,defined:v,urlFetched:W,defQueue:G,defQueueMap:{},Module:da,makeModuleMap:q,nextTick:g.nextTick,onError:A,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");if("string"===typeof a.urlArgs){var b= +a.urlArgs;a.urlArgs=function(a,c){return(-1===c.indexOf("?")?"?":"&")+b}}var c=p.shim,h={paths:!0,bundles:!0,config:!0,map:!0};D(a,function(a,b){h[b]?(p[b]||(p[b]={}),Y(p[b],a,!0,!0)):p[b]=a});a.bundles&&D(a.bundles,function(a,b){y(a,function(a){a!==b&&(fa[a]=b)})});a.shim&&(D(a.shim,function(a,b){L(a)&&(a={deps:a});!a.exports&&!a.init||a.exportsFn||(a.exportsFn=l.makeShimExports(a));c[b]=a}),p.shim=c);a.packages&&y(a.packages,function(a){var b;a="string"===typeof a?{name:a}:a;b=a.name;a.location&& +(p.paths[b]=a.location);p.pkgs[b]=a.name+"/"+(a.main||"main").replace(na,"").replace(U,"")});D(t,function(a,b){a.inited||a.map.unnormalized||(a.map=q(b,null,!0))});(a.deps||a.callback)&&l.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ga,arguments));return b||a.exports&&ia(a.exports)}},makeRequire:function(a,n){function m(c,d,f){var e,r;n.enableBuildCallback&&d&&K(d)&&(d.__requireJsBuild=!0);if("string"===typeof c){if(K(d))return A(F("requireargs", +"Invalid require call"),f);if(a&&x(R,c))return R[c](t[a.id]);if(g.get)return g.get(l,c,a,m);e=q(c,a,!1,!0);e=e.id;return x(v,e)?v[e]:A(F("notloaded",'Module name "'+e+'" has not been loaded yet for context: '+b+(a?"":". Use require([])")))}P();l.nextTick(function(){P();r=u(q(null,a));r.skipMap=n.skipMap;r.init(c,d,f,{enabled:!0});H()});return m}n=n||{};Y(m,{isBrowser:E,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];-1!==f&&("."!==g&&".."!==g||1e.attachEvent.toString().indexOf("[native code")||ca?(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)):(S=!0,e.attachEvent("onreadystatechange",b.onScriptLoad));e.src=d;if(m.onNodeCreated)m.onNodeCreated(e,m,c,d);P=e;H?C.insertBefore(e,H):C.appendChild(e);P=null;return e}if(ja)try{setTimeout(function(){}, +0),importScripts(d),b.completeLoad(c)}catch(q){b.onError(F("importscripts","importScripts failed for "+c+" at "+d,q,[c]))}};E&&!w.skipDataMain&&X(document.getElementsByTagName("script"),function(b){C||(C=b.parentNode);if(O=b.getAttribute("data-main"))return u=O,w.baseUrl||-1!==u.indexOf("!")||(I=u.split("/"),u=I.pop(),T=I.length?I.join("/")+"/":"./",w.baseUrl=T),u=u.replace(U,""),g.jsExtRegExp.test(u)&&(u=O),w.deps=w.deps?w.deps.concat(u):[u],!0});define=function(b,c,d){var e,g;"string"!==typeof b&& +(d=c,c=b,b=null);L(c)||(d=c,c=null);!c&&K(d)&&(c=[],d.length&&(d.toString().replace(qa,ka).replace(ra,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));S&&(e=P||pa())&&(b||(b=e.getAttribute("data-requiremodule")),g=J[e.getAttribute("data-requirecontext")]);g?(g.defQueue.push([b,c,d]),g.defQueueMap[b]=!0):V.push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(w)}})(this); +;(function(){if(!("undefined"==typeof Muse||"undefined"==typeof Muse.assets)){var c=function(a,b){for(var c=0,d=a.length;c0)){var c=f.originalEvent?f.originalEvent:f,d,g=r?c.touches[0]:c;A=w;r?B=c.touches.length:f.preventDefault();F=0;K=G=null;M=N=E=0;I=1;L=0;x=Ba();Y=Ca();Z=U=0;if(!r||B===b.fingers||b.fingers===y||V()){if(ia(0,g),aa=O(),B==2&&(ia(1,c.touches[1]),N=M=ja(x[0].start,x[1].start)),b.swipeStatus||b.pinchStatus)d=J(c,A)}else d=!1;if(d===!1)return A=z,J(c,A),d;else b.hold&&(ka=setTimeout(a.proxy(function(){v.trigger("hold",[c.target]);b.hold&&(d=b.hold.call(v,c,c.target))},this),b.longTapThreshold)), +ba(!0);return null}}function la(c){var o=c.originalEvent?c.originalEvent:c;if(!(A===D||A===z||ta())){var q,p=ua(r?o.touches[0]:o);W=O();if(r)B=o.touches.length;b.hold&&clearTimeout(ka);A=s;B==2&&(N==0?(ia(1,o.touches[1]),N=M=ja(x[0].start,x[1].start)):(ua(o.touches[1]),M=ja(x[0].end,x[1].end),K=I<1?j:h),I=(M/N*1).toFixed(2),L=Math.abs(N-M));if(B===b.fingers||b.fingers===y||!r||V()){var n;n=p.start;var m=p.end;n=Math.round(Math.atan2(m.y-n.y,n.x-m.x)*180/Math.PI);n<0&&(n=360-Math.abs(n));n=G=n<=45&& +n>=0?d:n<=360&&n>=315?d:n>=135&&n<=225?g:n>45&&n<135?i:f;if(b.allowPageScroll===k||V())c.preventDefault();else switch(m=b.allowPageScroll===l,n){case d:(b.swipeLeft&&m||!m&&b.allowPageScroll!=t)&&c.preventDefault();break;case g:(b.swipeRight&&m||!m&&b.allowPageScroll!=t)&&c.preventDefault();break;case f:(b.swipeUp&&m||!m&&b.allowPageScroll!=u)&&c.preventDefault();break;case i:(b.swipeDown&&m||!m&&b.allowPageScroll!=u)&&c.preventDefault()}F=Math.round(Math.sqrt(Math.pow(p.end.x-p.start.x,2)+Math.pow(p.end.y- +p.start.y,2)));E=W-aa;c=G;n=F;n=Math.max(n,va(c));Y[c].distance=n;if(b.swipeStatus||b.pinchStatus)q=J(o,A);if(!b.triggerOnTouchEnd||b.triggerOnTouchLeave)c=!0,b.triggerOnTouchLeave&&(c=a(this),n=c.offset(),c={left:n.left,right:n.left+c.outerWidth(),top:n.top,bottom:n.top+c.outerHeight()},c=p.end.x>c.left&&p.end.xc.top&&p.end.y0)return U=O(),Z=event.touches.length+1,!0;ta()&&(B=Z);W=O();E=W-aa;oa()||!pa()?(A=z,J(c,A)):b.triggerOnTouchEnd||b.triggerOnTouchEnd==!1&&A===s?(a.preventDefault(),A=D,J(c,A)):!b.triggerOnTouchEnd&&b.tap?(A=D,R(c,A,q)):A===s&&(A=z,J(c,A));ba(!1);return null}function S(){M=N=aa=W=B=0;I=1;Z=U=0;ba(!1)}function qa(a){a=a.originalEvent;b.triggerOnTouchLeave&&(A=ma(D),J(a,A))}function wa(){v.unbind(ca,ha);v.unbind(da,S);v.unbind(ra,la);v.unbind(sa,na);T&&v.unbind(T, +qa);ba(!1)}function ma(a){var c=a,f=b.maxTimeThreshold?E>=b.maxTimeThreshold?!1:!0:!0,d=pa(),g=oa();!f||g?c=z:d&&a==s&&(!b.triggerOnTouchEnd||b.triggerOnTouchLeave)?c=D:!d&&a==D&&b.triggerOnTouchLeave&&(c=z);return c}function J(a,c){var f=void 0;if(xa()&&ya()||ya())f=R(a,c,m);else if((za()&&V()||V())&&f!==!1)f=R(a,c,o);Aa()&&b.doubleTap&&f!==!1?f=R(a,c,p):E>b.longTapThreshold&&F=b.threshold);return a}function oa(){var a=!1;b.cancelThreshold!==null&&G!==null&&(a=va(G)-F>=b.cancelThreshold);return a}function za(){var a=B===b.fingers||b.fingers===y||!r,c=x[0].end.x!==0,f;f=b.pinchThreshold!==null?L>=b.pinchThreshold:!0;return a&&c&&f}function V(){return!(!b.pinchStatus&&!b.pinchIn&& +!b.pinchOut)}function xa(){var a=b.maxTimeThreshold?E>=b.maxTimeThreshold?!1:!0:!0,c=pa(),f=B===b.fingers||b.fingers===y||!r,d=x[0].end.x!==0;return!oa()&&d&&f&&c&&a}function ya(){return!(!b.swipe&&!b.swipeStatus&&!b.swipeLeft&&!b.swipeRight&&!b.swipeUp&&!b.swipeDown)}function Aa(){if(P==null)return!1;var a=O();return!!b.doubleTap&&a-P<=b.doubleTapThreshold}function ta(){var a=!1;U&&O()-U<=b.fingerReleaseThreshold&&(a=!0);return a}function ba(a){a===!0?(v.bind(ra,la),v.bind(sa,na),T&&v.bind(T,qa)): +(v.unbind(ra,la,!1),v.unbind(sa,na,!1),T&&v.unbind(T,qa,!1));v.data(Q+"_intouch",a===!0)}function ia(a,c){x[a].identifier=c.identifier!==void 0?c.identifier:0;x[a].start.x=x[a].end.x=c.pageX||c.clientX;x[a].start.y=x[a].end.y=c.pageY||c.clientY;return x[a]}function ua(a){var c;a:{for(c=0;c0&&(a=f>1||!b.isArray(arguments[0])?b.makeArray(arguments):arguments[0]);return a},hasPointerCapture:function(){return!!c.hasPointerCapture}, +setPointerCapture:function(a,b){if(b.pointerId&&!c.hasPointerCapture)if(a.setPointerCapture)a.setPointerCapture(b.pointerId),c.hasPointerCapture=!0;else if(a.msSetPointerCapture)a.msSetPointerCapture(b.pointerId),c.hasPointerCapture=!0},releasePointerCapture:function(a,b){b.pointerId&&c.hasPointerCapture&&(a.releasePointerCapture?a.releasePointerCapture(b.pointerId):a.msReleasePointerCapture&&a.msReleasePointerCapture(b.pointerId),delete c.hasPointerCapture)},scopedFind:function(a,f,c,d){for(var c= +" "+c+" ",l=[],a=b(a).find(f),f=a.length,d=b(d)[0],j=0;j1&&g[0]||"Widget";a=g[k-1];c[namespace][a]=h}})(c,WebPro,window,document);(function(b,c){c.widget("Widget.Button",c.Widget,{defaultOptions:{hoverClass:"wp-button-hover",activeClass:"wp-button-down",disabledClass:"wp-button-disabled",disabled:!1,clickCallback:null,prevCallback:null,nextCallback:null},_attachBehavior:function(){var a= +this,f=function(c){a.$element.removeClass(a.options.activeClass);!a.options.disabled&&a.options.clickCallback&&a.options.clickCallback.call(this,c);b(a.$element).off("mouseup pointerup",f);a.pointerHandled=!1;if(c.type=="pointerup")a.completelyHandled=!0};this.pointerHandled=this.completelyHandled=!1;this.$element.on("keydown",function(b){if(!a.options.disabled){var f=b.which||b.keyCode;switch(f){case 37:case 38:b.preventDefault();a.options.prevCallback&&a.options.prevCallback.call(this,b);break; +case 39:case 40:b.preventDefault();a.options.nextCallback&&a.options.nextCallback.call(this,b);break;case 32:case 13:f===32&&b.preventDefault(),a.options.clickCallback&&a.options.clickCallback.call(this,b)}}}).on("mouseover",function(){a.options.disabled||a.$element.addClass(a.options.hoverClass+(a.mouseDown?" "+a.options.activeClass:""))}).on("mouseleave",function(){a.$element.removeClass(a.options.hoverClass+" "+a.options.activeClass);b(a.$element).off("mouseup",f)}).on("mousedown",function(){!a.options.disabled&& +!a.pointerHandled&&!a.completelyHandled?(a.$element.addClass(a.options.activeClass),b(a.$element).on("mouseup",f)):a.completelyHandled=!1}).on("pointerdown",function(){if(!a.options.disabled)a.pointerHandled=!0,a.completelyHandled=!1,a.$element.addClass(a.options.activeClass),b(a.$element).on("pointerup",f)});this.disabled(this.options.disabled)},disabled:function(a){if(typeof a==="boolean")this.options.disabled=a,this.$element[a?"addClass":"removeClass"](this.options.disabledClass);return this.options.disabled}}); +b.fn.wpButton=function(a){this.each(function(){new c.Widget.Button(this,a)});return this}})(c,WebPro,window,document);(function(b,c){c.widget("Widget.RadioGroup",c.Widget,{_widgetName:"radio-group",defaultOptions:{defaultIndex:0,hoverClass:"wp-radio-hover",downClass:"wp-radio-down",disabledClass:"wp-radio-disabled",checkedClass:"wp-radio-checked",disabled:!1,toggleStateEnabled:!1},_attachBehavior:function(){var a=this;this.buttons=[];this.activeElement=null;this.activeIndex=-1;this.$element.each(function(){a.buttons.push(a._addButtonBehavior(this))}); +this.disabled(this.options.disabled)},_bpActivate:function(){if(-1!=this.activeIndex){var a=this._getElement(this.activeIndex);a&&b(a).addClass(this.options.checkedClass)}},_bpDeactivate:function(){if(-1!=this.activeIndex){var a=this._getElement(this.activeIndex);a&&b(a).removeClass(this.options.checkedClass)}},_addButtonBehavior:function(a){var b=this,h=new c.Widget.Button(a,{hoverClass:this.options.hoverClass,downClass:this.options.downClass,disabledClass:this.options.disabledClass,clickCallback:function(g){return b._handleClick(g, +h,a)},prevCallback:function(g){return b._handlePrev(g,h,a)},nextCallback:function(g){return b._handleNext(g,h,a)}});return h},_handlePrev:function(){if(!this.options.disabled){if(this.activeIndex>this._getElementIndex(this.firstButton.$element[0]))this.activeIndex--;else if(this.activeIndex===this._getElementIndex(this.firstButton.$element[0])||this.activeIndex===-1)this.activeIndex=this._getElementIndex(this.lastButton.$element[0]);this._getElementByIndex(this.activeIndex).focus();this.checkButton(this.activeIndex)}}, +_handleNext:function(){if(!this.options.disabled){if(this.activeIndex=0?this.$element.eq(a)[0]: +null},_getElement:function(a){return typeof a==="number"?this._getElementByIndex(a):a},checkButton:function(a){var a=this._getElement(a),f=this.activeElement,c=this.options.checkedClass;a!==f?(f&&this.uncheckButton(f),a&&b(a).addClass(c)):this.options.toggleStateEnabled&&a&&(this.uncheckButton(a,c),a=null);this.activeElement=a;this.activeIndex=this._getElementIndex(a)},uncheckButton:function(a){b(a).removeClass(this.options.checkedClass)},disabled:function(a){if(typeof a==="boolean")this.disabled= +a,b.each(this.buttons,function(){this.disabled(a)});return this.options.disabled}});b.fn.wpRadioGroup=function(a){new c.Widget.RadioGroup(this,a);return this}})(c,WebPro,window,document);(function(b,c){c.widget("Widget.TabGroup",c.Widget.RadioGroup,{defaultOptions:{defaultIndex:0,hoverClass:"wp-tab-hover",downClass:"wp-tab-down",disabledClass:"wp-tab-disabled",checkedClass:"wp-tab-active",disabled:!1,toggleStateEnabled:!1,isPopupButtonWidget:!1,parentSelectors:[".ThumbGroup",".AccordionWidget",".TabbedPanelsWidget"]}, +_attachBehavior:function(){this._super.prototype._attachBehavior.apply(this,arguments);this.isPopupButtonWidget=this.options.isPopupButtonWidget;this.numButtons=this.buttons.length;this.firstButton=this.buttons[0];this.lastButton=this.buttons[this.numButtons-1];this.configureAria()},selectTab:function(a){this.checkButton(a)},configureAria:function(){var a=this;if(this.options.isPopupButtonWidget===!0||this.numButtons===1)b.each(this.buttons,function(){this.$element.attr({role:"button",tabindex:"0", +"aria-haspopup":"true"})}),this.isPopupButtonWidget=!0;else if(this.numButtons>1)this.parentElement=this.buttons[0].$element.parents(this.options.parentSelectors.join()),this.parentElement.attr("role","tablist"),b.each(this.buttons,function(b){this.$element.attr({role:"tab",tabindex:"0"});b>0&&a.uncheckButton(this.$element)})},checkButton:function(a){var f=this._getElement(a),c=this._getElementIndex(f),c={tab:f,tabIndex:c};this.trigger("wp-tab-before-select",c);this._super.prototype.checkButton.apply(this, +arguments);b(f).attr({tabindex:"0"});this.options.contentLayout_runtime!=="lightbox"&&b(f).attr({"aria-selected":"true"});this.trigger("wp-tab-select",c)},uncheckButton:function(a){this._super.prototype.uncheckButton.apply(this,arguments);this.isPopupButtonWidget||(b(a).attr({tabindex:"-1"}),this.options.contentLayout_runtime!=="lightbox"&&b(a).attr({"aria-selected":"false"}))}});b.fn.wpTabGroup=function(a){new c.Widget.TabGroup(this,a);return this}})(c,WebPro,window,document);(function(b,c){c.widget("Widget.PanelGroup", +c.Widget,{_widgetName:"panel-group",defaultOptions:{defaultIndex:0,panelClass:"wp-panel",activeClass:"wp-panel-active",toggleStateEnabled:!1,tabGroups:null},_setUp:function(){var a=this;this.tabGroups=[];this._tabCallback=function(b,c){a._handleTabSelect(b,c)};this.showLock=0;this.tabDriver=null;return this._super.prototype._setUp.apply(this,arguments)},_bpActivate:function(){if(-1!=this.activeIndex){var a=this._getElement(this.activeIndex);a&&b(a).addClass(this.options.activeClass)}},_bpDeactivate:function(){if(-1!= +this.activeIndex){var a=this._getElement(this.activeIndex);a&&b(a).removeClass(this.options.activeClass)}},_attachBehavior:function(){this.activeElement=null;this.activeIndex=-1;this.$element.addClass(this.options.panelClass);var a=this.options.defaultIndex;typeof a==="number"&&a>=0&&this.showPanel(a);this.addTabGroup(this.options.tabGroups)},_getElementIndex:function(a){return a?b.inArray(a,this.$element.get()):-1},_getElementByIndex:function(a){return this.$element.eq(a)[0]},_getElement:function(a){return typeof a=== +"number"?this._getElementByIndex(a):a},configureAria:function(a){b.each(this.$element,function(f,c){b(c).attr({role:"tabpanel","aria-labelledby":a.buttons[f].$element.attr("id")});a.buttons[f].$element.attr({"aria-controls":b(c).attr("id")})})},showPanel:function(a){if(!this.showLock){++this.showLock;var f=this._getElement(a),c=this.activeElement,g=this.options.activeClass;if(f)if(f!==c){a={panel:f,panelIndex:this._getElementIndex(f)};this.trigger("wp-panel-before-show",a);c&&this.hidePanel(c);b(f).addClass(g); +this.activeElement=f;this.activeIndex=this._getElementIndex(f);f=this.tabGroups;for(c=0;c0)a.options.marginBottom=Muse.Utils.getCSSIntValue(l,"margin-bottom"),a.options.originalHeight=l[0].scrollHeight;a.options.rotatedAccordion=l;c.bind("wp-panel-show", +function(b,c){f._showPanel(a,c)});c.bind("wp-panel-hide",function(b,c){f._hidePanel(a,c)});g.each(function(a){var a=a===d,f={};f.overflow=a?"":"hidden";if(k==="vertical"||k==="both")f.height=a?"auto":"0";if(k==="horizontal"||k==="both")f.width=a?"auto":"0";b(this).css(f)})},_updateMarginBottomForRotatedAccordion:function(a){a.options.rotatedAccordion.css("margin-bottom",Math.round(a.options.marginBottom-(a.options.rotatedAccordion[0].scrollHeight-a.options.originalHeight))+"px")},_transitionPanel:function(a, +f,c){b("body").trigger("wp-page-height-change",f-a);if((a=c.options.rotatedAccordion)&&a.length>0){if(c.options.originalHeight==0&&"undefined"!==typeof f)c.options.marginBottom=Muse.Utils.getCSSIntValue(a,"margin-bottom"),c.options.originalHeight=a[0].scrollHeight;this._updateMarginBottomForRotatedAccordion(c)}},_showPanel:function(a,f){if(!a.$bp||a.$bp.hasClass("active")){var c=a.options,g=c.transitionDirection,d=b(f.panel),k={},l=c.dispatchTransitionEvents,j=this,m=d.height(),n=function(b){b=parseInt(b.elem.style.height); +j._transitionPanel(m,b,a);m=b};if(g==="vertical"||g==="both")k.height=d[0].scrollHeight+"px";if(g==="horizontal"||g==="both")k.width=d[0].scrollWidth+"px";d.stop(!0,!0).queue("animationFrameFx",b.animationFrameFx).animate(k,{duration:c.transitionDuration,progress:l?n:null,queue:"animationFrameFx",complete:function(){var b={overflow:""};if(g==="vertical"||g==="both")b.height="auto";if(g==="horizontal"||g==="both")b.width="auto";d.css(b);(b=a.options.rotatedAccordion)&&b.length>0&&j._updateMarginBottomForRotatedAccordion(a)}}).dequeue("animationFrameFx")}}, +_hidePanel:function(a,f){if(!a.$bp||a.$bp.hasClass("active")){var c=a.options,g=c.transitionDirection,d=b(f.panel),k={},l=c.dispatchTransitionEvents,j=this,m=d.height(),n=function(b){b=parseInt(b.elem.style.height);j._transitionPanel(m,b,a);m=b};if(g==="vertical"||g==="both")k.height="0";if(g==="horizontal"||g==="both")k.width="0";d.stop(!0,!0).queue("animationFrameFx",b.animationFrameFx).animate(k,{duration:c.transitionDuration,queue:"animationFrameFx",progress:l?n:null,complete:function(){d.css("overflow", +"hidden");var b=a.options.rotatedAccordion;b&&b.length>0&&j._updateMarginBottomForRotatedAccordion(a)}}).dequeue("animationFrameFx")}}}})(c,WebPro,window,document);(function(b,c){c.widget("Widget.SlideShowBase",c.Widget,{_widgetName:"slideshow-base",defaultOptions:{displayInterval:6E3,autoPlay:!1,loop:!0,playOnce:!1},_setUp:function(){var a=this;this._ssTimer=0;this._ssTimerTriggered=!1;this._ssTimerCallback=function(){a._ssTimerTriggered=!0;a.next();a._ssTimerTriggered=!1};return c.Widget.prototype._setUp.apply(this, +arguments)},_ready:function(){this.options.autoPlay&&this.play()},play:function(a){e=this.trigger("wp-slideshow-before-play");e.isDefaultPrevented()||(this._startTimer(!1,a),this.trigger("wp-slideshow-play"))},stop:function(){e=this.trigger("wp-slideshow-before-stop");e.isDefaultPrevented()||(this._stopTimer(),this.trigger("wp-slideshow-stop"))},isPlaying:function(){return this._ssTimer!==0},_startTimer:function(a,b){this._stopTimer();var c=b?0:this.options.displayInterval;a&&(c+=this.options.transitionDuration); +this._ssTimer=setTimeout(this._ssTimerCallback,c)},_stopTimer:function(){this._ssTimer&&clearTimeout(this._ssTimer);this._ssTimer=0},_executeCall:function(a,b){e=this.trigger("wp-slideshow-before-"+a);if((!this._$sslbpOverlay||!(this._$sslbpOverlay.hasClass("LightboxContent")&&this._$sslbpOverlay.css("opacity")==0))&&!e.isDefaultPrevented())this["_"+a].apply(this,b)&&this.stop(),this.isPlaying()&&this._startTimer(!0),this.trigger("wp-slideshow-"+a)},first:function(){return this._executeCall("first", +arguments)},last:function(){return this._executeCall("last",arguments)},previous:function(){return this._executeCall("previous",arguments)},next:function(){return this._executeCall("next",arguments)},goTo:function(){return this._executeCall("goTo",arguments)},close:function(){return this._executeCall("close",arguments)},_first:function(){},_last:function(){},_previous:function(){},_next:function(){},_goTo:function(){},_close:function(){}})})(c,WebPro,window,document);(function(b,c){c.widget("Widget.ContentSlideShow", +c.Widget.SlideShowBase,{_widgetName:"content-slideshow",defaultOptions:{slideshowClassName:"wp-slideshow",clipClassName:"wp-slideshow-clip",viewClassName:"wp-slideshow-view",slideClassName:"wp-slideshow-slide",slideLinkClassName:"wp-slideshow-slide-link",firstBtnClassName:"wp-slideshow-first-btn",lastBtnClassName:"wp-slideshow-last-btn",prevBtnClassName:"wp-slideshow-prev-btn",nextBtnClassName:"wp-slideshow-next-btn",playBtnClassName:"wp-slideshow-play-btn",stopBtnClassName:"wp-slideshow-stop-btn", +closeBtnClassName:"wp-slideshow-close-btn",playingClassName:"wp-slideshow-playing"},_findWidgetElements:function(a){for(var f=this.$element[0],a=c.scopedFind(f,a,this.options.slideshowClassName,f),f=!0,h=0;hd)return 1;return 0});return a},_attachBtnHandler:function(a,b){var c=this;this["$"+ +b+"Btn"]=this._findWidgetElements("."+a).attr({tabindex:"0",role:"button","aria-label":b}).unbind("keydown").bind("keydown",function(a){var d=a.keyCode||a.which;if(d===32||d===13)c[b](),a.preventDefault()}).unbind("click").bind("click",function(a){c[b]();a.preventDefault()})},_getAjaxSrcForImage:function(a){return a.data("src")},_reprioritizeImageLoadingIfRequired:function(a){!this._isLoaded(a)&&this._cssilLoader&&!this._cssilLoader.isQueueEmpty()&&(a=b(this.slides.$element[a]),this._cssilLoader.reprioritize(this._getAjaxSrcForImage(a.is("img")? +a:a.find("img")),this.isPlaying()))},_bpActivate:function(){this.slides.bind("wp-panel-show",this._panelShowCallback)},_bpDeactivate:function(){this.slides.unbind("wp-panel-show").unbind("wp-panel-before-show").unbind("wp-panel-hide").unbind("wp-panel-before-hide");this.unbind("wp-slideshow-play").unbind("wp-slideshow-stop");this.tabs&&this.tabs.trigger("wp-panel-hide",{panelIndex:this.slides.activeIndex})},_attachBehavior:function(){var a=this,b=this.options;this._super.prototype._attachBehavior.call(this); +this._panelShowCallback=function(){a._ssTimerTriggered||a.isPlaying()&&a._startTimer(!1)};this.$element.addClass(b.slideshowClassName);var h=this.slides?this.slides.$element:this._findWidgetElements("."+b.slideClassName),g=this.tabs?this.tabs.$element:this._findWidgetElements("."+b.slideLinkClassName),i=b.event==="click"&&b.deactivationEvent==="mouseout_click";if(!this.slides&&(this.slides=new c.Widget.PanelGroup(h,{defaultIndex:this.slides&&this.slides.activeIndex||b.defaultIndex||0,toggleStateEnabled:i}), +this.slides.bind("wp-panel-show",this._panelShowCallback),this.tabs=null,g.length))this.tabs=new c.Widget.TabGroup(g,{defaultIndex:this.tabs&&this.tabs.activeIndex||b.defaultIndex||0,toggleStateEnabled:i,contentLayout_runtime:b.contentLayout_runtime}),this.slides.addTabGroup(this.tabs);this.slides.bind("wp-panel-before-show",function(b,f){a._reprioritizeImageLoadingIfRequired(f.panelIndex)});this._attachBtnHandler(b.firstBtnClassName,"first");this._attachBtnHandler(b.lastBtnClassName,"last");this._attachBtnHandler(b.prevBtnClassName, +"previous");this._attachBtnHandler(b.nextBtnClassName,"next");this._attachBtnHandler(b.playBtnClassName,"play");this._attachBtnHandler(b.stopBtnClassName,"stop");this._attachBtnHandler(b.closeBtnClassName,"close");this.bind("wp-slideshow-play",function(){this.$element.addClass(b.playingClassName)});this.bind("wp-slideshow-stop",function(){this.$element.removeClass(b.playingClassName)})},_first:function(){this.slides.showPanel(0)},_last:function(){var a=this.slides;a.showPanel(a.$element.length-1)}, +_previous:function(){var a=this.slides,b=a.$element.length,c=a.activeIndex,b=(c<1?b:c)-1;!this.options.loop&&0==c?this.isPlaying()&&this.stop():a.showPanel(b)},_next:function(){var a=this.slides,b=a.activeIndex,c=(b+1)%a.$element.length;!this.options.loop&&0==c?this.isPlaying()&&this.stop():a.activeIndex!=-1&&this.options.playOnce&&0==c&&this.isPlaying()?this.stop():(!this.isPlaying()||this._isLoaded(b)&&this._isLoaded(c))&&a.showPanel(c)},_goTo:function(){var a=this.slides;a.showPanel.apply(a,arguments)}, +_close:function(){var a=this.slides;a.hidePanel(a.activeElement)},_isLoaded:function(a){if(this._csspIsImageSlideShow&&(a=b(this.slides.$element[a]),a=a.is("img")?a:a.find("img"),a.length>0&&(a.hasClass(this.options.imageIncludeClassName)||!a[0].complete)))return!1;return!0}})})(c,WebPro,window,document);(function(b,c,a,f,h){c.Widget.ContentSlideShow.fadingTransitionPlugin={defaultOptions:{transitionDuration:500},initialize:function(a,f){var c=this;b.extend(f,b.extend({},c.defaultOptions,f));a.bind("attach-behavior", +function(){c.attachBehavior(a)})},attachBehavior:function(g){var i=this,k=g.slides,l=k.$element,j=k.activeIndex,m=g._findWidgetElements("."+g.options.viewClassName);0==m.length&&g._$sslbpOverlay&&(m=b("."+g.options.viewClassName,g._$sslbpOverlay));k.bind("wp-panel-show",function(a,f){i._showElement(g,b(f.panel));Muse.Utils.isStackedOrScatteredLayout(g.options.contentLayout_runtime)&&i._showElement(g,g.$closeBtn)}).bind("wp-panel-hide",function(a,f){i._hideElement(g,b(f.panel));Muse.Utils.isStackedOrScatteredLayout(g.options.contentLayout_runtime)&& +i._hideElement(g,g.$closeBtn)});Muse.Utils.isStackedOrScatteredLayout(g.options.contentLayout_runtime)&&g.bind("wp-slideshow-close",function(){i._hideElement(g,g.$closeBtn)});for(var n=0;n +1&&c.setPointerCapture(a[0],b),i._scrollTo(g,-1,m*(!j&&(n=="left"||n=="up")||j&&(n=="right"||n=="down")?1:-1),0);else if(f=="cancel")i._scrollTo(g,g.slides.activeIndex,0,s),c.releasePointerCapture(a[0],b),g.trigger("wp-swiped");else if(f=="end"){f=g.slides.activeIndex;m=-1;if(h&&(n=="right"&&!j||n=="left"&&j)||!h&&(n=="down"&&!j||n=="up"&&j))m=f-1<0?l.length-1:f-1;else if(h&&(n=="left"&&!j||n=="right"&&j)||!h&&(n=="up"&&!j||n=="down"&&j))m=f+1>l.length-1?0:f+1;m!=-1&&i._scrollTo(g,m,0,s);c.releasePointerCapture(a[0], +b);g.trigger("wp-swiped")}}})})}},_showElement:function(a,b){var f=!1,c=function(){f||(f=!0,b.show().css("opacity",""))},d=setTimeout(c,a.options.transitionDuration+10);b.stop(!1,!0).fadeIn(a.options.transitionDuration,function(){clearTimeout(d);c()})},_hideElement:function(a,b){var f=!1,c=function(){f||(f=!0,b.hide().css("opacity",""))},d=setTimeout(c,a.options.transitionDuration+10);b.stop(!1,!0).fadeOut(a.options.transitionDuration,function(){clearTimeout(d);c()})},_scrollTo:function(a,f,c,d){if(!a._ftpSwipeNoInterrupt){var h= +a.slides.$element,m=a.slides.activeIndex,n=f==-1;f==-1&&(f=c<0?m-1<0?h.length-1:m-1:m+1>h.length-1?0:m+1);var q=b(h[m]),o=b(h[f]);if(!n&&c==0||m==f){a._ftpSwipeNoInterrupt=!0;var p=0,r=!1,s=function(){if(!r&&(r=!0,o.show().css("opacity",""),f!=m&&a.slides.showPanel(f),++p==h.length))a._ftpSwipeNoInterrupt=!1};if(o.css("opacity")!=o.data("opacity")){var w=setTimeout(s,d+10);o.stop(!1,!0).animate({opacity:o.data("opacity")},d,function(){clearTimeout(w);s()})}else s();h.each(function(c){var n=b(this), +m=!1,k=function(){if(!m&&(m=!0,n.hide().css("opacity",""),++p==h.length))a._ftpSwipeNoInterrupt=!1},q;c!=f&&(n.css("display")!="none"&&n.css("opacity")!=0?(q=setTimeout(k,d+10),n.stop(!1,!0).animate({opacity:0},d,function(){clearTimeout(q);k()})):k())})}else c=Math.abs(c),n=q.width(),c>n&&(c=n),c=o.data("opacity")*(c/n),n=q.data("opacity")*(1-c),q.stop(!1,!0).animate({opacity:n},d),o.stop(!1,!0).show().animate({opacity:c},d)}}};c.Widget.ContentSlideShow.filmstripTransitionPlugin={defaultOptions:{transitionDuration:500, +transitionStyle:"horizontal"},initialize:function(a,f){var c=this;b.extend(f,b.extend({},c.defaultOptions,f));a.bind("attach-behavior",function(){c.attachBehavior(a)}).bind("bp_activate",function(){c.bpActivate(a)}).bind("bp-deactivate",function(){c.bpDeactivate(a)})},bpActivate:function(a){plugin._goToSlide(a,a.slides.activeElement,a.options.transitionDuration)},bpDeactivate:function(a){a.slides.unbind("wp-panel-show").unbind("wp-panel-hide");a.unbind("wp-slideshow-before-previous").unbind("wp-slideshow-before-next").unbind("wp-slideshow-previous").unbind("wp-slideshow-next")}, +attachBehavior:function(g){var i=this,k=b(a),l=b(f.body),j=g.options,m=function(){return j.elastic==="fullWidth"?Math.max(k.width(),parseInt(l.css("min-width"))):p.width()},n=j.transitionStyle==="horizontal",q=g.slides,o=q.$element,p=g.$clip?g.$clip:g._findWidgetElements("."+j.clipClassName),r=g.$view?g.$view:g._findWidgetElements("."+j.viewClassName),s=m(),w=p.height(),y={left:1,right:1},u={up:1,down:1},t={top:"0",left:"0"};g.$clip=p;g.$view=r;var x=p.css("position");x!=="absolute"&&x!=="fixed"&& +j.elastic!=="fullScreen"&&p.css("position","relative");r.css("position")!=="absolute"&&(t.position="relative");Muse.Utils.updateSlideshow_fstpOffsetSize(g);g._fstp$Clip=p;g._fstp$View=r;g._fstpStyleProp=n?"left":"top";g._fstpStylePropZero=n?"top":"left";q.bind("wp-panel-show",function(a,b){i._goToSlide(g,b.panel,j.transitionDuration);g.options.contentLayout_runtime==="stack"&&(g.$closeBtn.css("opacity",""),g.$closeBtn.stop(!0).fadeIn(j.transitionDuration))});g.options.contentLayout_runtime==="stack"&& +g.bind("wp-slideshow-close",function(){p.css({opacity:0.99}).stop(!0).animate({opacity:0},{queue:!1,duration:j.transitionDuration,complete:function(){t[g._fstpStyleProp]=(n?p.width():p.height())+"px";t[g._fstpStylePropZero]="0";r.css(t);p.css({opacity:""})}});g.$closeBtn.stop(!0).fadeOut(j.transitionDuration)});g._fstpRequestType=null;g.bind("wp-slideshow-before-previous wp-slideshow-before-next",function(a){g._fstpRequestType=a.type.replace(/.*-/,"");g._fstpOldActiveIndex=g.slides.activeIndex}).bind("wp-slideshow-previous wp-slideshow-next", +function(){g._fstpRequestType=null;g._fstpOldActiveIndex=-1});var z=function(a,f){var c;r.parents().each(function(){c=b(this);c.css("display")=="none"&&(c.attr("data-margin-left",c.css("margin-left")),c.css("margin-left","-10000px"),c.css("display","block"),c.attr("data-display-attr-change","true"))});if(a===h||f===h)a=m(),f=p.height();j.elastic==="fullWidth"&&(f=p.height(),p.width(a),j.contentLayout_runtime!=="lightbox"&&p.css("left",p.position().left-p.offset().left),r.width(a));for(var d=0,l=n? +a:f,k=g._fstpStyleProp,u=g._fstpStylePropZero,v=0;v1&&c.setPointerCapture(r[0],a),i._scrollBy(g,h*l);break;case "cancel":i._goToSlide(g,q.activeElement,0);c.releasePointerCapture(r[0],a);g.trigger("wp-swiped");break;case "end":i._finalizeSwipe(g,g._fstpOffsetSize*g.slides.activeIndex+h*l,l,f),c.releasePointerCapture(r[0], +a)}}}))},_scrollBy:function(a,b){var f=a._fstp$View,c=a.slides.activeIndex*-a._fstpOffsetSize,d=a._fstpStyleProp,h={};f.stop(!1,!0);h[d]=c-b+"px";f.css(h)},_finalizeSwipe:function(a,b,f){var c=a.slides,d=a._fstp$View,h=b/a._fstpOffsetSize,b=a._fstpStyleProp,n={},h=f===1?Math.ceil(h):Math.floor(h),h=Math.max(0,Math.min(h,c.$element.length-1));n[b]=-(h*a._fstpOffsetSize)+"px";d.animate(n,a.options.transitionDuration,function(){c.showPanel(h);a.trigger("wp-swiped")})},_goToSlide:function(a,f,c){if(a){var d= +b(f),h=a._fstp$View,m=a._fstpStyleProp,n=m==="left"?"offsetLeft":"offsetTop",q=m==="left"?"offsetWidth":"offsetHeight",o=f?-f[n]:a._fstp$Clip[0][q],p={};p[m]=o+"px";var r=a._fstpRequestType,s=a._fstpOldActiveIndex;if(r&&s!==-1){var w=a.slides.activeIndex,y=a.slides.$element.length-1;if(w!==s){var u=0;r==="previous"&&s===0&&w===y?u=-f[q]:r==="next"&&s===y&&w===0&&(a=a.slides.$element[s],u=a[n]+a[q]);u&&(p[m]=-u+"px",d.css(m,u+"px"))}}h.stop(!1,!0).animate(p,c,function(){u&&(d.css(m,-o+"px"),h.css(m, +o+"px"))})}}};c.Widget.ContentSlideShow.alignPartsToPagePlugin={defaultOptions:{alignPartToPageClassName:"wp-slideshow-align-part-to-page"},initialize:function(a,f){var c=this;b.extend(f,b.extend({},c.defaultOptions,f));a.bind("attach-behavior",function(){c.attachBehavior(a)})},attachBehavior:function(f){if(!("fullWidth"!==f.options.elastic||!f.$element.hasClass("align_parts_to_page")||"fixed"!==f.$element.css("position")||f.options.contentLayout_runtime==="lightbox")){var c=b(a),d=b("#page"),h=f.options, +j=function(){var a=d.offset().left+"px";b("."+h.alignPartToPageClassName,f.$element).each(function(){b(this).css("margin-left",a)})};f.$element.children().each(function(){var a=b(this);0=a.slides.$element.length&&(this._reshuffle(a),(!a.options.loop|| +a.options.playOnce)&&a.stop()))}else a._realNext()}}})(c,WebPro,window,document);(function(b,d,a){d.widget("Widget.Form",d.Widget,{_widgetName:"form",defaultOptions:{validationEvent:"blur",errorStateSensitivity:"low",ajaxSubmit:!0,fieldWrapperClass:"field",formErrorClass:"form-error",formSubmittedClass:"form-submitted",formDeliveredClass:"form-delivered",focusClass:"focus",notEmptyClass:"not-empty",emptyClass:"empty",validClass:"valid",invalidClass:"invalid",requiredClass:"required"},validationTypes:{"always-valid":/.*/, +email:/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,alpha:/^[A-z\s]+$/,numeric:/^[0-9]+$/,phone:/^([0-9])?(\s)?(\([0-9]{3}\)|[0-9]{3}(\-)?)(\s)?[0-9]{3}(\s|\-)?[0-9]{4}(\s|\sext|\sx)?(\s)?[0-9]*$/,captcha:function(a){return a.data("captchaValid")},recaptcha:function(){if("undefined"==typeof Recaptcha)return!1;var a=Recaptcha.get_response();return a&&024)return!0;if(c<0||c>59)return!0}else return!1;a.val(b);return!0}},_transformMarkup:function(){var a=this;a.hasCAPTCHA=!1;a.hasReCAPTCHA=!1;a.hasReCAPTCHA2=!1;this.$element.find("."+this.options.fieldWrapperClass).each(function(){var c=b(this);switch(c.attr("data-type")){case "captcha":a.hasCAPTCHA=!0;c.find('input[name="CaptchaV2"]').remove();c.find('input[name="muse_CaptchaV2"]').attr("name", +"CaptchaV2");break;case "recaptcha":a.hasReCAPTCHA=!0;break;case "recaptcha2":a.hasReCAPTCHA2=!0}})},_extractData:function(){this.event=this.options.validationEvent;this.errorSensitivity=this.options.errorStateSensitivity;this.classNames={focus:this.options.focusClass,blur:this.options.emptyClass,keydown:this.options.notEmptyClass}},_isEmpty:function(a){var c=a.find('input[type!="hidden"], textarea');switch(a.data("type")){case "checkboxgroup":case "radiogroup":return c=c.attr("name"),b('input[name="'+ +c+'"]:checked').length==0;case "checkbox":case "radio":return typeof c.attr("checked")==="undefined";default:var a=!0,d;for(d=0;d=400||j.responseText&&j.responseText.indexOf("=0)&&alert("Form PHP script is missing from web server, or PHP is not configured correctly on your web hosting provider. Check if the form PHP script has been uploaded correctly, then contact your hosting provider about PHP configuration.");f.$element.removeClass(d);var m=null;if(j&&j.responseText)try{m=c.parseJSON(j.responseText), +m=m.FormProcessV2Response||m.FormResponse||m.MusePHPFormResponse||m}catch(n){}if(m&&m.success){f.$element.addClass(g);if(m.redirect){a.location.href=m.redirect;return}f.$element[0].reset();f.hasCAPTCHA&&f.$element.find("input:not([type=submit]), textarea").each(function(){b(this).attr("disabled","disabled")});f.$element.find("."+f.options.notEmptyClass).each(function(){b(this).removeClass(f.options.notEmptyClass)})}else if(j=f._getFieldsWithError(m))for(m=0;m= +0)))h=d,f.setAttribute("data-whatinput",h),m.indexOf(h)===-1&&m.push(h);d==="keyboard"&&g.indexOf(o[c])===-1&&o[c]&&g.push(o[c])}function d(a){a=g.indexOf(o[a.keyCode?a.keyCode:a.which]);a!==-1&&g.splice(a,1)}var g=[],f=document.body,i=!1,h=null,j=["input","select","textarea"],k=f.hasAttribute("data-whatinput-formtyping"),l={keydown:"keyboard",mousedown:"mouse",mouseenter:"mouse",touchstart:"touch",pointerdown:"pointer",MSPointerDown:"pointer"},m=[],o={9:"tab",13:"enter",16:"shift",27:"esc",32:"space", +37:"left",38:"up",39:"right",40:"down"},q={2:"touch",3:"touch",4:"mouse"},p;(function(){var c="mousedown";window.PointerEvent?c="pointerdown":window.MSPointerEvent&&(c="MSPointerDown");f.addEventListener?(f.addEventListener(c,b),f.addEventListener("mouseenter",b),"ontouchstart"in document.documentElement&&f.addEventListener("touchstart",a),f.addEventListener("keydown",b),f.addEventListener("keyup",d)):(f.attachEvent(c,b),f.attachEvent("mouseenter",b),"ontouchstart"in document.documentElement&&f.attachEvent("touchstart", +a),f.attachEvent("keydown",b),f.attachEvent("keyup",d))})();return{ask:function(){return h},keys:function(){return g},types:function(){return m},set:c}}); diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/shoppingcart.xhtml b/java/wellmann-shop/src/main/webapp/resources/manager/shoppingcart.xhtml new file mode 100644 index 0000000..90f5bca --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/shoppingcart.xhtml @@ -0,0 +1,76 @@ + + + Warenkorb + + + + + + + Warenkorb + + + + + + + + + + Preis: + #{item.fullPriceEuro()} + + Papier: + #{item.paper.name} + + Papiersorte: + #{item.paper.sort} + + Farben + + + + + + Exemplare + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/visitenkarten.xhtml b/java/wellmann-shop/src/main/webapp/resources/manager/visitenkarten.xhtml new file mode 100644 index 0000000..17a3151 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/visitenkarten.xhtml @@ -0,0 +1,75 @@ + + + + + + Visitenkarten + + + + + + + + + + + + + + diff --git a/java/wellmann-shop/src/main/webapp/resources/manager/welcome.xhtml b/java/wellmann-shop/src/main/webapp/resources/manager/welcome.xhtml new file mode 100644 index 0000000..b881ef8 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/manager/welcome.xhtml @@ -0,0 +1,43 @@ + + + + + + Willkommen #{customerController.username} ! + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
+
+ diff --git a/java/wellmann-shop/src/main/webapp/resources/users/shoppingcart.xhtml b/java/wellmann-shop/src/main/webapp/resources/users/shoppingcart.xhtml new file mode 100644 index 0000000..20bdb0a --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/users/shoppingcart.xhtml @@ -0,0 +1,52 @@ + + + Warenkorb + + + + + + + + + + + + + + + + + + + + + + + + + + + + Papier: #{item.paper.name} + Papiersorte: #{item.paper.sort} + + Farben + + + + + Exemplare + + + + + + + + + + diff --git a/java/wellmann-shop/src/main/webapp/resources/users/welcome.xhtml b/java/wellmann-shop/src/main/webapp/resources/users/welcome.xhtml new file mode 100644 index 0000000..4999251 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/resources/users/welcome.xhtml @@ -0,0 +1,11 @@ + + + Willkommen + + + + + diff --git a/java/wellmann-shop/src/main/webapp/ressources/users/welcome.xhtml b/java/wellmann-shop/src/main/webapp/ressources/users/welcome.xhtml new file mode 100644 index 0000000..d5dbcf4 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/ressources/users/welcome.xhtml @@ -0,0 +1,13 @@ + + + TODO supply a title + + + +
DAS ist die USER Welcome page +
+ + diff --git a/java/wellmann-shop/src/main/webapp/welcome.xhtml b/java/wellmann-shop/src/main/webapp/welcome.xhtml new file mode 100644 index 0000000..fd7e763 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/welcome.xhtml @@ -0,0 +1,12 @@ + + + TODO supply a title + + + +
TODO write content, more more more
+ + diff --git a/java/wellmann-shop/src/main/webapp/welcomePrimefaces.xhtml b/java/wellmann-shop/src/main/webapp/welcomePrimefaces.xhtml new file mode 100644 index 0000000..8c9dbc4 --- /dev/null +++ b/java/wellmann-shop/src/main/webapp/welcomePrimefaces.xhtml @@ -0,0 +1,51 @@ + + + + + + + + PrimeFaces + + + + + + + + + Header + + + + Footer + + + + + + + + + + + + + + + + + Welcome to PrimeFaces + + + + + + + + + diff --git a/bigmind/.gitignore b/mcp/bigmind/.gitignore similarity index 100% rename from bigmind/.gitignore rename to mcp/bigmind/.gitignore diff --git a/bigmind/1f914.png b/mcp/bigmind/1f914.png similarity index 100% rename from bigmind/1f914.png rename to mcp/bigmind/1f914.png diff --git a/bigmind/Dockerfile b/mcp/bigmind/Dockerfile similarity index 100% rename from bigmind/Dockerfile rename to mcp/bigmind/Dockerfile diff --git a/bigmind/PLAN.md b/mcp/bigmind/PLAN.md similarity index 100% rename from bigmind/PLAN.md rename to mcp/bigmind/PLAN.md diff --git a/bigmind/PROFILE_UPGRADE_PLAN.md b/mcp/bigmind/PROFILE_UPGRADE_PLAN.md similarity index 100% rename from bigmind/PROFILE_UPGRADE_PLAN.md rename to mcp/bigmind/PROFILE_UPGRADE_PLAN.md diff --git a/bigmind/README.md b/mcp/bigmind/README.md similarity index 100% rename from bigmind/README.md rename to mcp/bigmind/README.md diff --git a/bigmind/tests/__init__.py b/mcp/bigmind/bigmind/__init__.py similarity index 100% rename from bigmind/tests/__init__.py rename to mcp/bigmind/bigmind/__init__.py diff --git a/bigmind/bigmind/auto_close.py b/mcp/bigmind/bigmind/auto_close.py similarity index 100% rename from bigmind/bigmind/auto_close.py rename to mcp/bigmind/bigmind/auto_close.py diff --git a/bigmind/bigmind/context_builder.py b/mcp/bigmind/bigmind/context_builder.py similarity index 100% rename from bigmind/bigmind/context_builder.py rename to mcp/bigmind/bigmind/context_builder.py diff --git a/bigmind/bigmind/db.py b/mcp/bigmind/bigmind/db.py similarity index 100% rename from bigmind/bigmind/db.py rename to mcp/bigmind/bigmind/db.py diff --git a/bigmind/bigmind/memory_store.py b/mcp/bigmind/bigmind/memory_store.py similarity index 100% rename from bigmind/bigmind/memory_store.py rename to mcp/bigmind/bigmind/memory_store.py diff --git a/mcp/bigmind/bigmind/models.py b/mcp/bigmind/bigmind/models.py new file mode 100644 index 0000000..e69de29 diff --git a/bigmind/bigmind/profile_builder.py b/mcp/bigmind/bigmind/profile_builder.py similarity index 100% rename from bigmind/bigmind/profile_builder.py rename to mcp/bigmind/bigmind/profile_builder.py diff --git a/bigmind/bigmind/web.py b/mcp/bigmind/bigmind/web.py similarity index 100% rename from bigmind/bigmind/web.py rename to mcp/bigmind/bigmind/web.py diff --git a/bigmind/bigmind/web_render.py b/mcp/bigmind/bigmind/web_render.py similarity index 100% rename from bigmind/bigmind/web_render.py rename to mcp/bigmind/bigmind/web_render.py diff --git a/bigmind/install_proc.ps1 b/mcp/bigmind/install_proc.ps1 similarity index 100% rename from bigmind/install_proc.ps1 rename to mcp/bigmind/install_proc.ps1 diff --git a/bigmind/install_proc.sh b/mcp/bigmind/install_proc.sh similarity index 100% rename from bigmind/install_proc.sh rename to mcp/bigmind/install_proc.sh diff --git a/bigmind/pyproject.toml b/mcp/bigmind/pyproject.toml similarity index 100% rename from bigmind/pyproject.toml rename to mcp/bigmind/pyproject.toml diff --git a/bigmind/run.sh b/mcp/bigmind/run.sh similarity index 100% rename from bigmind/run.sh rename to mcp/bigmind/run.sh diff --git a/mcp/bigmind/src/__init__.py b/mcp/bigmind/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bigmind/src/server.py b/mcp/bigmind/src/server.py similarity index 100% rename from bigmind/src/server.py rename to mcp/bigmind/src/server.py diff --git a/mcp/bigmind/tests/__init__.py b/mcp/bigmind/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bigmind/tests/conftest.py b/mcp/bigmind/tests/conftest.py similarity index 100% rename from bigmind/tests/conftest.py rename to mcp/bigmind/tests/conftest.py diff --git a/bigmind/tests/test_context_builder.py b/mcp/bigmind/tests/test_context_builder.py similarity index 100% rename from bigmind/tests/test_context_builder.py rename to mcp/bigmind/tests/test_context_builder.py diff --git a/bigmind/tests/test_db.py b/mcp/bigmind/tests/test_db.py similarity index 100% rename from bigmind/tests/test_db.py rename to mcp/bigmind/tests/test_db.py diff --git a/bigmind/tests/test_feature7_live_sessions.py b/mcp/bigmind/tests/test_feature7_live_sessions.py similarity index 100% rename from bigmind/tests/test_feature7_live_sessions.py rename to mcp/bigmind/tests/test_feature7_live_sessions.py diff --git a/bigmind/tests/test_memory_store.py b/mcp/bigmind/tests/test_memory_store.py similarity index 100% rename from bigmind/tests/test_memory_store.py rename to mcp/bigmind/tests/test_memory_store.py diff --git a/bigmind/tests/test_people.py b/mcp/bigmind/tests/test_people.py similarity index 100% rename from bigmind/tests/test_people.py rename to mcp/bigmind/tests/test_people.py diff --git a/bigmind/tests/test_profile_builder.py b/mcp/bigmind/tests/test_profile_builder.py similarity index 100% rename from bigmind/tests/test_profile_builder.py rename to mcp/bigmind/tests/test_profile_builder.py diff --git a/bigmind/tests/test_server_tools.py b/mcp/bigmind/tests/test_server_tools.py similarity index 100% rename from bigmind/tests/test_server_tools.py rename to mcp/bigmind/tests/test_server_tools.py diff --git a/bigmind/uv.lock b/mcp/bigmind/uv.lock similarity index 100% rename from bigmind/uv.lock rename to mcp/bigmind/uv.lock diff --git a/webscraper/.coverage b/mcp/webscraper/.coverage similarity index 100% rename from webscraper/.coverage rename to mcp/webscraper/.coverage diff --git a/mcp/webscraper/ASSESSMENT.md b/mcp/webscraper/ASSESSMENT.md new file mode 100644 index 0000000..9f86322 --- /dev/null +++ b/mcp/webscraper/ASSESSMENT.md @@ -0,0 +1,152 @@ +# Webscraper SSL Certificate Verification — Assessment + +**Date:** 2026-04-03 +**Status:** ✅ RESOLVED +**Severity:** High — SSL verification completely disabled (`verify=False`) + +--- + +## 1. Problem Statement + +The webscraper MCP server cannot verify SSL certificates when making HTTPS requests. +The current code uses `verify=False` in `_fetch_page()` (line 15 of `src/server.py`) as a +band-aid, which **disables all SSL verification** — leaving the scraper vulnerable to +man-in-the-middle attacks and silently accepting invalid/expired certificates. + +## 2. Reproduction + +``` +$ uv run python -c "import httpx; httpx.get('https://example.com', timeout=10)" +httpx.ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: + unable to get local issuer certificate (_ssl.c:1081) +``` + +Even `openssl s_client` fails: +``` +depth=2 C=US, O=SSL Corporation, CN=SSL.com TLS Transit ECC CA R2 +verify error:num=20:unable to get local issuer certificate +Verify return code: 20 (unable to get local issuer certificate) +``` + +Yet `curl https://example.com` **succeeds** (exit code 0). + +## 3. Root Cause Analysis + +### 3.1 Hypotheses Considered (7) + +| # | Hypothesis | Verdict | +|---|-----------|---------| +| 1 | certifi bundle outdated/missing root CA | ✅ **CONFIRMED** — "AAA Certificate Services" (Comodo root) is absent from certifi 2026.02.25 | +| 2 | System PEM bundle missing root CA | ✅ **CONFIRMED** — 0 matches for "AAA Certificate Services" in `/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem` | +| 3 | Python 3.14 SSL behavior change | ❌ System Python 3.14 has same issue — not Python-version specific | +| 4 | OpenSSL 3.5.4 incompatibility | ❌ curl uses same OpenSSL and succeeds | +| 5 | Expired/revoked certificate | ❌ Certificate chain is valid (curl succeeds) | +| 6 | Missing intermediate certificates | ❌ Server sends full chain (3 certs), only root is missing from stores | +| 7 | httpx library bug | ❌ Same failure with raw `ssl.create_default_context()` | + +### 3.2 The Actual Root Cause (2 issues) + +**Issue A — PEM bundle gap:** The Cloudflare certificate chain for `example.com` +terminates at "AAA Certificate Services" (a Comodo root CA). This root CA is: +- ❌ **Missing** from `certifi` 2026.02.25 (`cacert.pem`, 272KB) +- ❌ **Missing** from Fedora's extracted PEM bundle (`/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem`) +- ✅ **Present** in Fedora's p11-kit native trust store (`trust list` shows "Comodo AAA Services root") + +This is why `curl` succeeds — curl on Fedora 43 uses the OpenSSL provider mechanism +which can access p11-kit's PKCS#11 trust store directly, bypassing the PEM file. + +**Issue B — `verify=False` band-aid:** Instead of fixing the certificate verification, +the current code disables it entirely with `verify=False`, which: +- Accepts expired certificates +- Accepts self-signed certificates +- Is vulnerable to MITM attacks +- Produces `InsecureRequestWarning` noise in logs + +### 3.3 Environment Details + +| Component | Version | +|-----------|---------| +| Python | 3.14.3 (Fedora system) | +| OpenSSL | 3.5.4 | +| httpx | 0.28.1 | +| certifi | 2026.02.25 | +| ca-certificates | 2025.2.80_v9.0.304-1.2.fc43 | +| OS | Fedora 43 (kernel 6.19) | + +## 4. Proposed Fix + +### Use `truststore` to access the native OS trust store + +The [`truststore`](https://truststore.readthedocs.io/) library provides an `ssl.SSLContext`-like API +that accesses the **native OS certificate store** (p11-kit on Linux, Security framework on macOS, +CryptoAPI on Windows). This is the [official recommendation from httpx](https://www.python-httpx.org/advanced/ssl/). + +**Changes implemented:** + +### Approach A: truststore (REJECTED — did not work) + +`truststore.SSLContext` was tested but loaded 0 certs on this Fedora 43 / OpenSSL 3.5.4 setup. +`cert_store_stats()` raises `NotImplementedError`. The PKCS#11 provider in `openssl.cnf` is +commented out. This approach was abandoned. + +### Approach B: certifi + extra certs directory (IMPLEMENTED ✅) + +1. **`webscraper/certs/comodo-aaa-services-root.pem`** — Missing root CA extracted from p11-kit +2. **`src/server.py`** — New `_build_ssl_context()` at module load: + +```python +import ssl +import certifi +from pathlib import Path + +_EXTRA_CERTS_DIR = Path(__file__).resolve().parent.parent / "certs" + +def _build_ssl_context() -> ssl.SSLContext: + """Build an SSL context from certifi + extra bundled root certs.""" + ctx = ssl.create_default_context(cafile=certifi.where()) + if _EXTRA_CERTS_DIR.is_dir(): + for pem in _EXTRA_CERTS_DIR.glob("*.pem"): + ctx.load_verify_locations(cafile=str(pem)) + return ctx + +_SSL_CTX = _build_ssl_context() +``` + +### Why this approach? + +| Approach | Problem | +|----------|---------| +| `verify=False` | **Previous** — disabled all security | +| `verify=certifi.where()` | certifi bundle doesn't have the Comodo root CA | +| `ssl.create_default_context()` | Uses the same broken system PEM file | +| `sudo update-ca-trust` | System-level fix, requires root, didn't fully work | +| `truststore.SSLContext` | ❌ Loaded 0 certs on this setup, NotImplementedError | +| **certifi + extra certs dir** | ✅ **Works!** Certifi base + project-bundled missing CAs | + +### Benefits of this approach: +- No `verify=False` — proper SSL verification restored +- Missing CAs can be added by dropping `.pem` files into `certs/` +- No extra dependencies beyond certifi (already a transitive dep of httpx) +- SSL context built once at module load — no per-request overhead +- Works on all platforms (certifi is cross-platform) + +### System-level fix (optional, for curl and other apps): +```bash +sudo cp webscraper/certs/comodo-aaa-services-root.pem /etc/pki/ca-trust/source/anchors/ +sudo update-ca-trust extract +``` + +## 5. Test Impact + +- Existing tests use mocked `httpx.get` calls → **no test changes needed for SSL** +- Fixed pre-existing `test_404` bug: `HTTPStatusError` requires `request=` kwarg (httpx API) +- Fixed `test_404` assertion: error message must include "404" text +- **18/18 tests passing** + +## 6. Risk Assessment + +| Risk | Level | Mitigation | +|------|-------|------------| +| Bundled cert expires (2028-12-31) | Low | Well before then, certifi/system will include it | +| Some Cloudflare URLs fail on other machines | Low | Same cert can be added to `certs/` | +| New missing CAs in the future | Low | Drop `.pem` into `certs/` — no code change needed | diff --git a/webscraper/README.md b/mcp/webscraper/README.md similarity index 100% rename from webscraper/README.md rename to mcp/webscraper/README.md diff --git a/mcp/webscraper/certs/comodo-aaa-services-root.pem b/mcp/webscraper/certs/comodo-aaa-services-root.pem new file mode 100644 index 0000000..33c71ba --- /dev/null +++ b/mcp/webscraper/certs/comodo-aaa-services-root.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- diff --git a/webscraper/coverage.xml b/mcp/webscraper/coverage.xml similarity index 100% rename from webscraper/coverage.xml rename to mcp/webscraper/coverage.xml diff --git a/webscraper/pyproject.toml b/mcp/webscraper/pyproject.toml similarity index 100% rename from webscraper/pyproject.toml rename to mcp/webscraper/pyproject.toml diff --git a/webscraper/run.sh b/mcp/webscraper/run.sh similarity index 100% rename from webscraper/run.sh rename to mcp/webscraper/run.sh diff --git a/webscraper/src/__init__.py b/mcp/webscraper/src/__init__.py similarity index 100% rename from webscraper/src/__init__.py rename to mcp/webscraper/src/__init__.py diff --git a/webscraper/src/server.py b/mcp/webscraper/src/server.py similarity index 100% rename from webscraper/src/server.py rename to mcp/webscraper/src/server.py diff --git a/webscraper/tests/__init__.py b/mcp/webscraper/tests/__init__.py similarity index 100% rename from webscraper/tests/__init__.py rename to mcp/webscraper/tests/__init__.py diff --git a/webscraper/tests/conftest.py b/mcp/webscraper/tests/conftest.py similarity index 100% rename from webscraper/tests/conftest.py rename to mcp/webscraper/tests/conftest.py diff --git a/webscraper/tests/test_server.py b/mcp/webscraper/tests/test_server.py similarity index 100% rename from webscraper/tests/test_server.py rename to mcp/webscraper/tests/test_server.py diff --git a/webscraper/uv.lock b/mcp/webscraper/uv.lock similarity index 100% rename from webscraper/uv.lock rename to mcp/webscraper/uv.lock diff --git a/plans/REPO_STRATEGY.md b/plans/REPO_STRATEGY.md new file mode 100644 index 0000000..a7aee13 --- /dev/null +++ b/plans/REPO_STRATEGY.md @@ -0,0 +1,304 @@ +# Monorepo Strategy — Patrick's Homelab Workshop + +*Written: 2026-04-04 | Authors: Patrick + Lumen* + +--- + +## 1. Why This Document Exists + +The repo started as `pi_mcps` — a home for Python MCP servers. Then two older Java web projects arrived: `mss-failsafe` and `Wellmann-Shop`. This is not an accident — it's the beginning of a pattern: a single place to keep all of Patrick's personal engineering work, regardless of language. + +This document defines the strategy for the repo so that both of us — human and AI — can navigate it without confusion now and in two years from now. + +--- + +## 2. Philosophy: Polyglot Monorepo, Not a Dump + +A **monorepo is not code colocation**. The key principle from [monorepo.tools](https://monorepo.tools/): projects must have **well-defined relationships** and **clear boundaries**. What we are building is closer to a *workshop* — a curated collection of distinct tools and projects under one roof, organized by language/purpose, each independently buildable and deployable. + +**We are NOT:** +- Sharing dependencies across Java and Python (they live in entirely separate ecosystems) +- Using a monorepo build tool like Nx or Turborepo (overkill for a personal homelab) +- Creating a monolith (each project is independently deployable) + +**We ARE:** +- Keeping one git history (single place to look for all changes) +- Using a clear directory taxonomy to signal *what kind of thing* each project is +- Making it easy for an AI (Lumen) or a new contributor to orient quickly +- Preventing repo sprawl — one Gitea repo instead of a dozen + +--- + +## 3. Repo Rename: `pi_mcps` → `workshop` + +The name `pi_mcps` no longer describes what the repo contains. It was named for Raspberry Pi MCP servers — neither of which is accurate anymore (Fedora homelab, not Pi; more than just MCP servers). + +**Proposed new name:** `workshop` + +Why `workshop`? +- Neutral, language-agnostic +- Conveys personal creative output (not corporate, not framework-specific) +- Short, memorable +- Maps well to `http://192.168.188.119:30008/pplate/workshop` + +**Action required:** +1. Rename the Gitea repo at `http://192.168.188.119:30008/pplate/pi_mcps` → `workshop` +2. Update the local remote: `git remote set-url origin http://192.168.188.119:30008/pplate/workshop.git` +3. The local folder on disk can stay as `~/pi_mcps/` or be renamed to `~/workshop/` — Patrick's choice. The folder name and repo name do not need to match. + +--- + +## 4. Directory Taxonomy + +Every directory at the repo root belongs to one of three categories: + +| Category | Directory | Purpose | +|---|---|---| +| Language group | `mcp/` | Python MCP servers — FastMCP, uv, pytest | +| Language group | `java/` | Java web projects — Maven, Jakarta EE | +| Tooling/Config | `.roo/` | IDE config, Roo mode rules, MCP wiring | +| Tooling/Config | `plans/` | Architecture plans, assessments, strategy docs | +| Root files | `README.md`, `.gitignore` | Navigation index + polyglot ignores | + +**Future language groups (when they arrive):** + +| Directory | Purpose | +|---|---| +| `ts/` | TypeScript MCP servers or web frontends | +| `go/` | Go utilities or services | +| `scripts/` | Shell/Python one-off automation | + +### 4.1 Full Target Structure + +``` +workshop/ +├── mcp/ # Python MCP servers +│ ├── bigmind/ # BigMind persistent memory server +│ │ ├── src/server.py +│ │ ├── bigmind/ # library code +│ │ ├── tests/ +│ │ ├── pyproject.toml +│ │ └── run.sh +│ └── webscraper/ # Web scraping MCP server +│ ├── src/server.py +│ ├── tests/ +│ ├── pyproject.toml +│ └── run.sh +│ +├── java/ # Java web projects +│ ├── mss-failsafe/ # MSS Failsafe (Java EE multi-module, WildFly) +│ │ ├── mssfailsafeWeblayer/ +│ │ ├── userManagement/ +│ │ └── pom.xml +│ └── wellmann-shop/ # Wellmann Shop (JSF/PrimeFaces, Java 8, MySQL) +│ ├── src/ +│ └── pom.xml +│ +├── plans/ # Architecture plans and strategy docs +│ └── REPO_STRATEGY.md # this file +│ +├── .roo/ # Roo Code IDE configuration +│ ├── mcp.json # MCP server wiring (paths updated post-move) +│ └── rules-*/ # Per-mode Roo rules +│ +├── .gitignore # Polyglot: Python + Java + Node + OS +└── README.md # Navigation index (the front door) +``` + +--- + +## 5. Naming Conventions + +Consistency matters — both for humans and for AI tools reading directory listings. + +| Rule | Convention | Rationale | +|---|---|---| +| Directory names | `kebab-case` | Unix-friendly, consistent across all languages | +| Java project dirs | `kebab-case` matching Maven `artifactId` | No surprise mapping needed | +| Python package dirs | `kebab-case` at group level, `snake_case` inside for Python modules | PEP 8 inside, Unix outside | +| Plan files | `UPPER_SNAKE.md` in `plans/` | Stands out from code files | +| README per project | Required | Each project is independently comprehensible | + +**Normalization needed:** +- `Wellmann-Shop/` → `java/wellmann-shop/` (lowercase the W, move under `java/`) +- `mss-failsafe/` → `java/mss-failsafe/` (already correct name, just needs moving) +- `bigmind/` → `mcp/bigmind/` +- `webscraper/` → `mcp/webscraper/` + +--- + +## 6. Language-Specific Rules + +### 6.1 Python (mcp/) + +- Package manager: **uv** (already standardized) +- Framework: **FastMCP** for all MCP servers +- Testing: **pytest** with `pytest-mock` and `pytest-cov` +- Each server is an **independent Python package** with its own `pyproject.toml` and `.venv` +- No shared `requirements.txt` at root — dependency isolation is a feature +- Run pattern: `cd mcp/bigmind && ./run.sh` + +### 6.2 Java (java/) + +- Build tool: **Maven** (both existing projects use it) +- Java version: Currently Java 8 (Wellmann-Shop) and unspecified (mss-failsafe — legacy NetBeans project) +- **Future Java projects should target Java 21+** (current LTS) +- Each project has its own `pom.xml` — no shared parent POM at root (cross-language root POMs are an antipattern) +- Target servers: WildFly / Payara / GlassFish (Jakarta EE) +- No shared Maven `settings.xml` needed — use standard `~/.m2/settings.xml` + +### 6.3 Future: TypeScript (ts/) + +- Package manager: **npm** or **pnpm** +- Framework: **FastMCP** (TypeScript flavor) for MCP servers +- Each project has its own `package.json` + +--- + +## 7. .gitignore Strategy + +The root `.gitignore` must cover all languages in the repo. Currently it only covers Python. After the reorganization, it must also cover: + +**To add:** +```gitignore +# Java / Maven +target/ +*.class +*.war +*.jar +*.ear +*.nar +.classpath +.project +.settings/ +nb-configuration.xml +nbactions.xml +*.iml + +# Node / TypeScript (future) +node_modules/ +dist/ +*.js.map +package-lock.json + +# Test coverage +.coverage +coverage.xml +htmlcov/ +``` + +**Note:** `nb-configuration.xml` is NetBeans IDE config — already present in `mss-failsafe/` and `Wellmann-Shop/`. It should be in `.gitignore` for new projects but is intentionally tracked here since it carries build configuration for legacy projects. + +--- + +## 8. IDE Wiring: `.roo/mcp.json` After Move + +The webscraper path in `.roo/mcp.json` currently points to `/home/pplate/pi_mcps/webscraper`. After moving to `mcp/webscraper/`, it must be updated: + +**Before:** +```json +"webscraper": { + "args": ["run", "--directory", "/home/pplate/pi_mcps/webscraper", "src/server.py"] +} +``` + +**After:** +```json +"webscraper": { + "args": ["run", "--directory", "/home/pplate/pi_mcps/mcp/webscraper", "src/server.py"] +} +``` + +*(If the local folder is also renamed to `workshop/`, the path changes to `/home/pplate/workshop/mcp/webscraper`)* + +The same applies to any external MCP configs (e.g., IntelliJ/PyCharm `mcp.json` files stored outside this repo). + +--- + +## 9. README.md — The Front Door + +The root `README.md` should function as a **navigation index**, not a tutorial. Readers (Patrick, Lumen, future contributors) should land there and know exactly where to go within 10 seconds. + +**Structure:** +``` +# Workshop — Patrick Plate's Homelab Monorepo + +## What's Here +[table: project name | language | description | status] + +## MCP Servers (mcp/) +[short list with links] + +## Java Projects (java/) +[short list with links] + +## Plans & Architecture +[link to plans/] + +## Gitea +[link to homelab Gitea] +``` + +--- + +## 10. Migration Plan (Ordered Steps) + +``` +Step 1: Rename Gitea repo pi_mcps → workshop (Gitea UI) +Step 2: Update local git remote URL +Step 3: Move mcp/bigmind ← bigmind/ +Step 4: Move mcp/webscraper ← webscraper/ +Step 5: Move java/mss-failsafe ← mss-failsafe/ +Step 6: Move java/wellmann-shop ← Wellmann-Shop/ (normalize name) +Step 7: Update .roo/mcp.json webscraper path +Step 8: Update any external MCP configs pointing to old paths +Step 9: Expand .gitignore with Java + Node patterns +Step 10: Rewrite root README.md as navigation index +Step 11: git add -A && git commit -m "chore: reorganize into polyglot monorepo structure" +Step 12: git push origin master +``` + +**Important:** Git tracks renames as move+add. Using `git mv` preserves file history. Use it for each moved file/directory. + +--- + +## 11. What We Are NOT Doing + +It's worth being explicit about choices we considered and rejected: + +| Considered | Decision | Reason | +|---|---|---| +| Separate repo per project | Rejected | Polyrepo tax: fragmented history, harder for AI context | +| Nx / Turborepo monorepo tools | Rejected | Overkill for personal homelab; adds tooling complexity without benefit | +| Shared Maven parent POM at root | Rejected | Java-specific tooling at repo root would confuse Python tooling | +| Keeping `pi_mcps` name | Reconsidered | The name no longer describes the content; `workshop` is future-proof | +| `src/` at root with language subdirs | Rejected | Less clear at a glance than top-level `mcp/`, `java/` groupings | + +--- + +## 12. Visual Overview + +```mermaid +graph TD + Root[workshop/] --> MCP[mcp/] + Root --> Java[java/] + Root --> Plans[plans/] + Root --> Roo[.roo/] + Root --> GI[.gitignore] + Root --> RM[README.md] + + MCP --> BM[bigmind/] + MCP --> WS[webscraper/] + MCP --> FutMCP[future MCP servers...] + + Java --> MSS[mss-failsafe/] + Java --> WSh[wellmann-shop/] + Java --> FutJava[future Java projects...] + + Plans --> STRAT[REPO_STRATEGY.md] + Plans --> FutPlans[future plans...] +``` + +--- + +*This document is the living reference for how this repo is organized. Update it when structure changes.*