Remove unused workflows and update markdown files
Deleted 'link-check' and 'spell-check' jobs from the quality-assurance.yml workflow as they are no longer needed. Updated formatting and structure in multiple markdown files to improve readability and consistency, including financial-analyzer.md, bug-hunter.md, lesson-plan-generator.md, quiz-generator.md, examples/README.md, development-code-review-example.md, and technical-documentation.md.
This commit is contained in:
1 parent
76544450fd
commit
3be7d016e7
8 files changed
+93
-91
No files matched your search
@@ -20,19 +20,6 @@ jobs:
|
||||
files: "**/*.md"
|
||||
ignore: "node_modules"
|
||||
|
||||
link-check:
|
||||
runs-on: ubuntu-latest
|
||||
name: Check Links
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Check internal links
|
||||
uses: gaurav-nelson/github-action-markdown-link-check@v1
|
||||
with:
|
||||
use-quiet-mode: "yes"
|
||||
use-verbose-mode: "yes"
|
||||
config-file: ".markdown-link-check.json"
|
||||
|
||||
template-compliance:
|
||||
runs-on: ubuntu-latest
|
||||
name: Template Compliance Check
|
||||
@@ -48,15 +35,3 @@ jobs:
|
||||
run: |
|
||||
python scripts/check-template-compliance.py
|
||||
continue-on-error: true
|
||||
|
||||
spell-check:
|
||||
runs-on: ubuntu-latest
|
||||
name: Spell Check
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Spell Check
|
||||
uses: rojopolis/spellcheck-github-actions@0.36.0
|
||||
with:
|
||||
config_path: .spellcheck.yml
|
||||
task_name: Markdown
|
||||
@@ -154,8 +154,8 @@ Specific questions:
|
||||
- **Average Contract Value**: $18K annually (+15% YoY)
|
||||
|
||||
### Profitability Analysis
|
||||
```
|
||||
|
||||
```
|
||||
2021 2022 2023 Trend
|
||||
Revenue $8.1M $11.2M $15.1M +35% CAGR
|
||||
Gross Profit $4.7M $6.5M $9.1M +39% CAGR
|
||||
@@ -163,15 +163,16 @@ Gross Margin 58% 58% 60% Improving
|
||||
EBITDA ($0.5M) $0.8M $2.3M Strong
|
||||
EBITDA Margin -6% 7% 15% +21pp
|
||||
Net Income ($1.1M) $0.2M $1.8M Positive
|
||||
|
||||
```
|
||||
|
||||
**Efficiency Ratios:**
|
||||
|
||||
- **Rule of 40**: 50% (35% growth + 15% EBITDA margin) - Excellent
|
||||
- **CAC Payback**: 18 months (target: <12 months)
|
||||
- **LTV/CAC Ratio**: 4.2x (healthy, target: >3.0x)
|
||||
|
||||
### Liquidity & Leverage
|
||||
|
||||
- **Current Ratio**: 3.2x (strong liquidity position)
|
||||
- **Cash**: $8.1M (16 months runway at current burn)
|
||||
- **Debt/Equity**: 0.1x (minimal leverage)
|
||||
@@ -181,27 +182,30 @@ Net Income ($1.1M) $0.2M $1.8M Positive
|
||||
|
||||
## Financial Modeling & Projections
|
||||
|
||||
### Base Case 5-Year Projections:
|
||||
```
|
||||
### Base Case 5-Year Projections
|
||||
|
||||
```
|
||||
Year 2024E 2025E 2026E 2027E 2028E
|
||||
ARR $20.4M $26.0M $32.5M $39.0M $44.9M
|
||||
Growth Rate 35% 27% 25% 20% 15%
|
||||
Gross Margin 62% 65% 68% 70% 72%
|
||||
EBITDA Margin 18% 22% 26% 28% 30%
|
||||
FCF $4.2M $6.8M $10.1M $12.8M $15.2M
|
||||
|
||||
```
|
||||
|
||||
### Key Assumptions:
|
||||
### Key Assumptions
|
||||
|
||||
- **Revenue Growth**: Decelerating but healthy (35% → 15% by 2028)
|
||||
- **Gross Margin Expansion**: Pricing optimization and scale effects
|
||||
- **OpEx Scaling**: 75% variable with revenue (improving efficiency)
|
||||
- **Capital Requirements**: Minimal CapEx, working capital neutral
|
||||
|
||||
### Scenario Analysis:
|
||||
### Scenario Analysis
|
||||
|
||||
**Bull Case** (+25% revenue, +500bp margins): $75M+ valuation
|
||||
**Base Case** (model above): $50M valuation
|
||||
|
||||
**Base Case** (model above): $50M valuation
|
||||
|
||||
**Bear Case** (-20% revenue, -300bp margins): $35M valuation
|
||||
|
||||
---
|
||||
@@ -209,93 +213,107 @@ FCF $4.2M $6.8M $10.1M $12.8M $15.2M
|
||||
## Valuation Analysis
|
||||
|
||||
### DCF Valuation: $48-52M
|
||||
|
||||
**Key Assumptions:**
|
||||
|
||||
- **Discount Rate**: 12% (risk-adjusted for private SaaS)
|
||||
- **Terminal Growth**: 3% (conservative for mature SaaS)
|
||||
- **Terminal EBITDA Margin**: 35% (industry leaders)
|
||||
- **FCF Projection**: $53M cumulative 5-year FCF
|
||||
|
||||
### Comparable Company Analysis: $45-55M
|
||||
|
||||
**Public SaaS Multiples (Revenue):**
|
||||
|
||||
- High-growth (>30%): 8-12x revenue
|
||||
- Mid-growth (15-30%): 5-8x revenue
|
||||
- **Target Multiple**: 3.0-3.7x revenue (growth-adjusted)
|
||||
|
||||
**Peer Comparison:**
|
||||
|
||||
- **HubSpot** (larger, more mature): 12x revenue, 40% growth
|
||||
- **Freshworks** (similar size): 6x revenue, 25% growth
|
||||
- **Target Range**: 3.2x revenue = $48M valuation
|
||||
|
||||
### Precedent Transactions: $42-58M
|
||||
|
||||
**Recent SaaS Acquisitions:**
|
||||
|
||||
- Similar size/growth: 2.5-4.0x revenue multiples
|
||||
- Strategic premium: +15-25% vs. financial buyer
|
||||
- **Range**: 2.8-3.8x revenue
|
||||
|
||||
### Valuation Summary:
|
||||
```
|
||||
### Valuation Summary
|
||||
|
||||
```
|
||||
Method Low High Midpoint
|
||||
DCF Analysis $48M $52M $50M
|
||||
Comparable Companies $45M $55M $50M
|
||||
Precedent Transactions $42M $58M $50M
|
||||
Weighted Average $45M $55M $50M
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Cash Flow Analysis
|
||||
|
||||
### Operating Cash Flow Quality:
|
||||
### Operating Cash Flow Quality
|
||||
|
||||
- **Cash Conversion**: 95%+ of EBITDA converts to cash
|
||||
- **Working Capital**: Positive from deferred revenue
|
||||
- **Seasonality**: Minimal (subscription model)
|
||||
- **Predictability**: High visibility from recurring revenue
|
||||
|
||||
### Capital Requirements:
|
||||
### Capital Requirements
|
||||
|
||||
- **CapEx**: <2% of revenue (mostly IT equipment)
|
||||
- **R&D Investment**: 15% of revenue (product development)
|
||||
- **Sales & Marketing**: 25% of revenue (customer acquisition)
|
||||
|
||||
### Free Cash Flow Generation:
|
||||
```
|
||||
### Free Cash Flow Generation
|
||||
|
||||
```
|
||||
Year 2024E 2025E 2026E 2027E 2028E
|
||||
OCF $4.5M $7.2M $10.6M $13.4M $15.9M
|
||||
CapEx ($0.3M) ($0.4M) ($0.5M) ($0.6M) ($0.7M)
|
||||
FCF $4.2M $6.8M $10.1M $12.8M $15.2M
|
||||
FCF Margin 21% 26% 31% 33% 34%
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Risk Assessment
|
||||
|
||||
### Financial Risks:
|
||||
### Financial Risks
|
||||
|
||||
**Medium Risk:**
|
||||
|
||||
- **Customer Concentration**: Top 10 customers = 45% revenue
|
||||
- **Competitive Pressure**: Well-funded competitors entering market
|
||||
- **Growth Sustainability**: Can the 35% growth rate be maintained?
|
||||
|
||||
**Low Risk:**
|
||||
|
||||
- **Cash Position**: Strong balance sheet, 16+ months runway
|
||||
- **Revenue Quality**: High recurring, low churn, strong retention
|
||||
- **Unit Economics**: Proven LTV/CAC ratios and payback periods
|
||||
|
||||
### Operational Risks:
|
||||
### Operational Risks
|
||||
|
||||
- **Talent Retention**: Key developers and sales team retention critical
|
||||
- **Product Development**: Need continued innovation in competitive market
|
||||
- **Scalability**: Systems and processes must scale with growth
|
||||
|
||||
### Market Risks:
|
||||
### Market Risks
|
||||
|
||||
- **Economic Downturn**: SaaS resilient but SMB customers vulnerable
|
||||
- **Market Saturation**: TAM growing but competitive intensity increasing
|
||||
- **Technology Disruption**: AI/automation could change competitive landscape
|
||||
|
||||
### Stress Testing:
|
||||
### Stress Testing
|
||||
|
||||
**Downside Scenario**: 20% revenue decline, 500bp margin compression
|
||||
|
||||
- **Impact**: Valuation drops to $35M (-30%)
|
||||
- **Mitigation**: Strong cash position provides 2+ year runway
|
||||
|
||||
@@ -303,43 +321,52 @@ FCF Margin 21% 26% 31% 33% 34%
|
||||
|
||||
## Investment Recommendations
|
||||
|
||||
### Strategic Priorities Post-Acquisition:
|
||||
### Strategic Priorities Post-Acquisition
|
||||
|
||||
**1. Sales & Marketing Optimization** (6-12 months)
|
||||
|
||||
- Improve CAC payback from 18 to 12 months
|
||||
- Implement account-based marketing for enterprise segment
|
||||
- **Target**: 40% improvement in sales efficiency
|
||||
|
||||
**2. Pricing Strategy Enhancement** (3-6 months)
|
||||
**2. Pricing Strategy Enhancement** (3-6 months)
|
||||
|
||||
- Value-based pricing to improve gross margins to 70%+
|
||||
- Introduce premium tiers with advanced features
|
||||
- **Target**: 500bp gross margin improvement
|
||||
|
||||
**3. Product Development Acceleration** (12-18 months)
|
||||
|
||||
- AI/automation features to differentiate from competitors
|
||||
- Enterprise features to move upmarket
|
||||
- **Target**: 20%+ improvement in win rates vs. competitors
|
||||
|
||||
**4. Market Expansion** (18-24 months)
|
||||
|
||||
- Geographic expansion to European markets
|
||||
- Adjacent vertical markets with similar workflows
|
||||
- **Target**: 25% of revenue from new markets by Year 3
|
||||
|
||||
### Financial Targets (5-Year):
|
||||
### Financial Targets (5-Year)
|
||||
|
||||
- **Revenue**: $45M ARR (15% CAGR)
|
||||
- **EBITDA Margin**: 30%+ (vs. 15% current)
|
||||
- **Enterprise Value**: $100M+ (2.0x multiple expansion)
|
||||
- **IRR Target**: 25%+ for PE investment
|
||||
|
||||
### Key Metrics to Monitor:
|
||||
### Key Metrics to Monitor
|
||||
|
||||
- **Growth**: Monthly ARR, net new ARR, logo retention
|
||||
- **Efficiency**: CAC payback, LTV/CAC, magic number
|
||||
- **Quality**: NPS, churn rate, expansion revenue
|
||||
- **Profitability**: Gross margin, EBITDA margin, FCF conversion
|
||||
|
||||
**Recommended Acquisition Price Range: $45-55M**
|
||||
**Target IRR**: 25-30% over 5-year hold period
|
||||
**Exit Multiple Assumption**: 4-5x revenue at 15-20% growth rates
|
||||
#### Recommended Acquisition Price Range: $45-55M
|
||||
|
||||
#### Target IRR: 25-30% over 5-year hold period
|
||||
|
||||
#### Exit Multiple Assumption: 4-5x revenue at 15-20% growth rates
|
||||
|
||||
```
|
||||
|
||||
## Variations
|
||||
|
||||
@@ -105,9 +105,9 @@ def scrape_data():
|
||||
## Example Output
|
||||
```
|
||||
|
||||
# Debug Analysis Report
|
||||
### Debug Analysis Report
|
||||
|
||||
## Root Cause Analysis
|
||||
#### Root Cause Analysis
|
||||
|
||||
**Primary Issue:** Rate limiting and connection management
|
||||
The error indicates connection refusal, which typically occurs when:
|
||||
@@ -123,7 +123,7 @@ The error indicates connection refusal, which typically occurs when:
|
||||
- No User-Agent header (common anti-bot trigger)
|
||||
- No retry mechanism for transient failures
|
||||
|
||||
## Debugging Strategy
|
||||
### Debugging Strategy
|
||||
|
||||
### Immediate Debugging Steps
|
||||
|
||||
@@ -144,9 +144,9 @@ response = requests.get(url, timeout=10)
|
||||
print(f"Response status: {response.status_code}")
|
||||
```
|
||||
|
||||
## Solution Options
|
||||
### Solution Options
|
||||
|
||||
### Primary Fix (Recommended)
|
||||
#### Primary Fix (Recommended)
|
||||
|
||||
```python
|
||||
import requests
|
||||
@@ -197,9 +197,9 @@ def scrape_data():
|
||||
3. **Add proxy rotation**: If being blocked by IP
|
||||
4. **Use async requests**: For better connection management
|
||||
|
||||
## Testing Approach
|
||||
### Testing Approach
|
||||
|
||||
### Verification Steps
|
||||
#### Verification Steps
|
||||
|
||||
1. **Unit test**: Test with single URL first
|
||||
2. **Load test**: Gradually increase number of URLs
|
||||
@@ -221,7 +221,7 @@ def test_scraper():
|
||||
assert duration >= 2 # Ensure delay is working
|
||||
```
|
||||
|
||||
## Prevention Measures
|
||||
### Prevention Measures
|
||||
|
||||
- Always implement proper error handling
|
||||
- Use session objects for connection reuse
|
||||
|
||||
@@ -76,9 +76,9 @@ Ensure the lesson plan is age-appropriate, engaging, and aligns with educational
|
||||
|
||||
## Example Output
|
||||
|
||||
# 5th Grade Science Lesson Plan: The Water Cycle
|
||||
### 5th Grade Science Lesson Plan: The Water Cycle
|
||||
|
||||
## Lesson Overview
|
||||
#### Lesson Overview
|
||||
|
||||
**Learning Objectives:**
|
||||
|
||||
@@ -90,7 +90,7 @@ Ensure the lesson plan is age-appropriate, engaging, and aligns with educational
|
||||
|
||||
**Prerequisites:** Basic understanding of states of matter (solid, liquid, gas)
|
||||
|
||||
## Materials and Resources
|
||||
### Materials and Resources
|
||||
|
||||
- Interactive whiteboard/projector
|
||||
- Water cycle video (3 minutes)
|
||||
@@ -100,7 +100,7 @@ Ensure the lesson plan is age-appropriate, engaging, and aligns with educational
|
||||
- Vocabulary cards with visuals
|
||||
- Digital timer
|
||||
|
||||
## Lesson Structure
|
||||
### Lesson Structure
|
||||
|
||||
### Opening Hook (5 minutes)
|
||||
|
||||
@@ -132,7 +132,7 @@ Ensure the lesson plan is age-appropriate, engaging, and aligns with educational
|
||||
- Quick gallery walk of student diagrams
|
||||
- Exit ticket: Draw one stage of the water cycle and explain it
|
||||
|
||||
## Teaching Strategies
|
||||
### Teaching Strategies
|
||||
|
||||
**Instructional Methods:**
|
||||
|
||||
|
||||
+13
-13
@@ -85,9 +85,9 @@ Ensure questions are:
|
||||
|
||||
## Example Output
|
||||
|
||||
# World War II European Theater - Unit Test
|
||||
### World War II European Theater - Unit Test
|
||||
|
||||
## Assessment Overview
|
||||
#### Assessment Overview
|
||||
|
||||
**Instructions:** Answer all questions clearly and completely. Use specific examples and evidence to support your answers. You have 50 minutes to complete this assessment.
|
||||
|
||||
@@ -107,7 +107,7 @@ b) The bombing of Pearl Harbor
|
||||
c) The Battle of Britain
|
||||
d) The invasion of France
|
||||
|
||||
*Answer: A - The invasion of Poland by Germany on September 1, 1939*
|
||||
### Answer: A - The invasion of Poland by Germany on September 1, 1939
|
||||
|
||||
**2. (Medium) Which of the following best explains why the Maginot Line failed to protect France?**
|
||||
a) It was poorly constructed and easily destroyed
|
||||
@@ -115,7 +115,7 @@ b) Germany attacked through Belgium, bypassing the line
|
||||
c) French soldiers abandoned their posts
|
||||
d) The line was never completed
|
||||
|
||||
*Answer: B - Germany used blitzkrieg tactics through Belgium and the Ardennes, circumventing the static defenses*
|
||||
### Answer: B - Germany used blitzkrieg tactics through Belgium and the Ardennes, circumventing the static defenses
|
||||
|
||||
**3. (Hard) Analyze this quote from Churchill: "We shall never surrender." This statement primarily demonstrates:**
|
||||
a) British military superiority
|
||||
@@ -123,27 +123,27 @@ b) Churchill's political strategy to maintain morale
|
||||
c) Certainty of Allied victory
|
||||
d) British naval dominance
|
||||
|
||||
*Answer: B - This was a key rhetorical strategy to maintain civilian and military morale during Britain's darkest hour*
|
||||
### Answer: B - This was a key rhetorical strategy to maintain civilian and military morale during Britain's darkest hour
|
||||
|
||||
[Continues with 17 more multiple choice questions...]
|
||||
|
||||
## Section B: Short Answer (40 points, 10 points each)
|
||||
|
||||
**1. (Easy) Identify and briefly explain two causes of World War II in Europe. (10 points)**
|
||||
### 1. (Easy) Identify and briefly explain two causes of World War II in Europe. (10 points)
|
||||
|
||||
*Sample Answer: Treaty of Versailles created economic hardship and resentment in Germany (5 points). Rise of fascist ideologies that promoted aggressive expansion (5 points). Other acceptable answers: Economic depression, failure of League of Nations, appeasement policies.*
|
||||
**Sample Answer:** Treaty of Versailles created economic hardship and resentment in Germany (5 points). Rise of fascist ideologies that promoted aggressive expansion (5 points). Other acceptable answers: Economic depression, failure of League of Nations, appeasement policies.
|
||||
|
||||
**2. (Medium) Using the primary source excerpt provided, explain how Nazi propaganda portrayed the invasion of Poland. What techniques are evident? (10 points)**
|
||||
### 2. (Medium) Using the primary source excerpt provided, explain how Nazi propaganda portrayed the invasion of Poland. What techniques are evident? (10 points)
|
||||
|
||||
*Rubric: Identifies specific propaganda techniques (4 points), explains how Poland invasion was justified (3 points), demonstrates understanding of source context (3 points)*
|
||||
**Rubric:** Identifies specific propaganda techniques (4 points), explains how Poland invasion was justified (3 points), demonstrates understanding of source context (3 points)
|
||||
|
||||
**3. (Hard) Compare and contrast the impact of WWII on civilian populations in Britain versus occupied France. Provide specific examples. (10 points)**
|
||||
### 3. (Hard) Compare and contrast the impact of WWII on civilian populations in Britain versus occupied France. Provide specific examples. (10 points)
|
||||
|
||||
*Rubric: Clear comparison structure (2 points), specific examples from both countries (4 points), demonstrates understanding of occupation vs. bombing (4 points)*
|
||||
**Rubric:** Clear comparison structure (2 points), specific examples from both countries (4 points), demonstrates understanding of occupation vs. bombing (4 points)
|
||||
|
||||
**4. (Medium) Evaluate the effectiveness of the Blitzkrieg strategy in the early stages of WWII. (10 points)**
|
||||
### 4. (Medium) Evaluate the effectiveness of the Blitzkrieg strategy in the early stages of WWII. (10 points)
|
||||
|
||||
*Sample Answer: Highly effective initially - rapid conquest of Poland, Denmark, Norway, France (4 points). Advantages: speed, coordination of air/ground forces, psychological impact (3 points). Limitations: required specific conditions, less effective in USSR (3 points)*
|
||||
**Sample Answer:** Highly effective initially - rapid conquest of Poland, Denmark, Norway, France (4 points). Advantages: speed, coordination of air/ground forces, psychological impact (3 points). Limitations: required specific conditions, less effective in USSR (3 points)
|
||||
|
||||
## Section C: Essay Question (20 points)
|
||||
|
||||
|
||||
+6
-6
@@ -57,15 +57,15 @@ Each example follows this format:
|
||||
- **Analysis**: What worked well and areas for improvement
|
||||
- **Variations**: How the prompt could be modified for different results
|
||||
|
||||
## Categories
|
||||
## Output Categories
|
||||
|
||||
### Development Examples
|
||||
### Development Outputs
|
||||
|
||||
- Code review sessions
|
||||
- Documentation generation
|
||||
- Architecture planning outputs
|
||||
|
||||
### Writing Examples
|
||||
### Writing Outputs
|
||||
|
||||
- Blog post drafts
|
||||
- Technical documentation
|
||||
@@ -77,13 +77,13 @@ Each example follows this format:
|
||||
- Research summaries
|
||||
- Decision frameworks in action
|
||||
|
||||
### Creative Examples
|
||||
### Creative Outputs
|
||||
|
||||
- Story excerpts
|
||||
- Character profiles
|
||||
- Creative brainstorming sessions
|
||||
|
||||
### Business Examples
|
||||
### Business Outputs
|
||||
|
||||
- Strategic plans
|
||||
- Market analysis reports
|
||||
@@ -101,7 +101,7 @@ Each example follows this format:
|
||||
- Schedule optimizations
|
||||
- Goal setting frameworks
|
||||
|
||||
## How to Use Examples
|
||||
## Learning from Examples
|
||||
|
||||
1. Review examples similar to your use case
|
||||
2. Note what makes an example effective
|
||||
|
||||
@@ -47,24 +47,24 @@ def register_user(username, password):
|
||||
|
||||
**HIGH Priority Issues:**
|
||||
|
||||
3. **No Input Validation** (Both functions)
|
||||
1. **No Input Validation** (Both functions)
|
||||
- **Issue**: No validation for None/empty inputs
|
||||
- **Risk**: Runtime errors and potential injection attacks
|
||||
- **Fix**: Add comprehensive input sanitization
|
||||
|
||||
4. **Weak Password Policy** (Line 2, register_user)
|
||||
2. **Weak Password Policy** (Line 2, register_user)
|
||||
- **Issue**: Only checks length, no complexity requirements
|
||||
- **Risk**: Vulnerable to brute force attacks
|
||||
- **Fix**: Implement strong password validation
|
||||
|
||||
**MEDIUM Priority Issues:**
|
||||
|
||||
5. **No Rate Limiting**
|
||||
1. **No Rate Limiting**
|
||||
- **Issue**: Unlimited login attempts possible
|
||||
- **Risk**: Brute force vulnerability
|
||||
- **Fix**: Add login attempt tracking and temporary lockouts
|
||||
|
||||
6. **Poor Error Messages** (register_user)
|
||||
2. **Poor Error Messages** (register_user)
|
||||
- **Issue**: Generic error messages
|
||||
- **Risk**: Poor user experience
|
||||
- **Fix**: Provide specific, helpful error descriptions
|
||||
|
||||
@@ -309,18 +309,18 @@ curl -X PUT https://api.yourapp.com/v1/api/profile \
|
||||
|
||||
### Common Issues
|
||||
|
||||
**"Invalid credentials" error**
|
||||
#### "Invalid credentials" error
|
||||
|
||||
- Verify email and password are correct
|
||||
- Ensure email is properly formatted
|
||||
- Check if account exists and is active
|
||||
|
||||
**"Token expired" error**
|
||||
#### "Token expired" error
|
||||
|
||||
- Obtain a new token using the login endpoint
|
||||
- Implement token refresh logic in your application
|
||||
|
||||
**Rate limiting errors**
|
||||
#### Rate limiting errors
|
||||
|
||||
- Implement exponential backoff in your requests
|
||||
- Cache responses when possible to reduce API calls
|
||||
|
||||
Reference in new issue
Block a user