sitepaige-mcp-server 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,6 +20,8 @@ export default function Login({ providers }: LoginProps) {
20
20
  const [confirmPassword, setConfirmPassword] = useState('');
21
21
  const [isLoading, setIsLoading] = useState(false);
22
22
  const [message, setMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null);
23
+ const [showResendVerification, setShowResendVerification] = useState(false);
24
+ const [resendEmail, setResendEmail] = useState('');
23
25
 
24
26
 
25
27
  const handleProviderLogin = async (provider: string) => {
@@ -49,6 +51,36 @@ export default function Login({ providers }: LoginProps) {
49
51
 
50
52
  };
51
53
 
54
+ const handleResendVerification = async () => {
55
+ setError(null);
56
+ setMessage(null);
57
+ setIsLoading(true);
58
+
59
+ try {
60
+ const response = await fetch('/api/Auth/resend-verification', {
61
+ method: 'POST',
62
+ headers: {
63
+ 'Content-Type': 'application/json'
64
+ },
65
+ body: JSON.stringify({ email: resendEmail || email })
66
+ });
67
+
68
+ const data = await response.json();
69
+
70
+ if (response.ok && data.success) {
71
+ setMessage({ type: 'success', text: data.message || 'Verification email sent! Please check your inbox.' });
72
+ setShowResendVerification(false);
73
+ setResendEmail('');
74
+ } else {
75
+ setError(data.error || 'Failed to send verification email');
76
+ }
77
+ } catch (err) {
78
+ setError('An unexpected error occurred');
79
+ } finally {
80
+ setIsLoading(false);
81
+ }
82
+ };
83
+
52
84
  const handleUsernamePasswordAuth = async (e: React.FormEvent) => {
53
85
  e.preventDefault();
54
86
  setError(null);
@@ -66,7 +98,9 @@ export default function Login({ providers }: LoginProps) {
66
98
 
67
99
  const response = await fetch('/api/Auth/signup', {
68
100
  method: 'POST',
69
- headers: { 'Content-Type': 'application/json' },
101
+ headers: {
102
+ 'Content-Type': 'application/json'
103
+ },
70
104
  body: JSON.stringify({ email, password })
71
105
  });
72
106
 
@@ -84,7 +118,9 @@ export default function Login({ providers }: LoginProps) {
84
118
  // Handle login
85
119
  const response = await fetch('/api/Auth', {
86
120
  method: 'POST',
87
- headers: { 'Content-Type': 'application/json' },
121
+ headers: {
122
+ 'Content-Type': 'application/json'
123
+ },
88
124
  body: JSON.stringify({ email, password, provider: 'username' })
89
125
  });
90
126
 
@@ -95,6 +131,11 @@ export default function Login({ providers }: LoginProps) {
95
131
  window.location.href = '/';
96
132
  } else {
97
133
  setError(data.error || 'Login failed');
134
+ // Check if error is about email verification
135
+ if (response.status === 403 || data.error?.toLowerCase().includes('verify')) {
136
+ setShowResendVerification(true);
137
+ setResendEmail(email);
138
+ }
98
139
  }
99
140
  }
100
141
  } catch (err) {
@@ -179,17 +220,18 @@ export default function Login({ providers }: LoginProps) {
179
220
  </div>
180
221
 
181
222
  <div className="text-center">
182
- <button
183
- type="button"
184
- onClick={() => {
223
+ <a
224
+ href="#"
225
+ onClick={(e) => {
226
+ e.preventDefault();
185
227
  setIsSignup(!isSignup);
186
228
  setError(null);
187
229
  setMessage(null);
188
230
  }}
189
- className="text-sm text-indigo-600 hover:text-indigo-500"
231
+ className="text-sm text-indigo-600 hover:text-indigo-500 underline"
190
232
  >
191
233
  {isSignup ? 'Already have an account? Sign in' : "Don't have an account? Sign up"}
192
- </button>
234
+ </a>
193
235
  </div>
194
236
  </form>
195
237
  )}
@@ -234,6 +276,40 @@ export default function Login({ providers }: LoginProps) {
234
276
  {error}
235
277
  </div>
236
278
  )}
279
+
280
+ {showResendVerification && (
281
+ <div className="mt-4 p-4 border border-gray-200 rounded-md bg-gray-50">
282
+ <p className="text-sm text-gray-700 mb-3">
283
+ Need a new verification email? Enter your email address and we'll send you a new link.
284
+ </p>
285
+ <div className="space-y-3">
286
+ <input
287
+ type="email"
288
+ value={resendEmail}
289
+ onChange={(e) => setResendEmail(e.target.value)}
290
+ placeholder="Email address"
291
+ className="block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 text-sm"
292
+ />
293
+ <button
294
+ onClick={handleResendVerification}
295
+ disabled={isLoading || !resendEmail}
296
+ className="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 disabled:opacity-50"
297
+ >
298
+ {isLoading ? 'Sending...' : 'Resend Verification Email'}
299
+ </button>
300
+ <button
301
+ type="button"
302
+ onClick={() => {
303
+ setShowResendVerification(false);
304
+ setResendEmail('');
305
+ }}
306
+ className="w-full text-sm text-gray-500 hover:text-gray-700 bg-transparent border-0 p-0 underline"
307
+ >
308
+ Cancel
309
+ </button>
310
+ </div>
311
+ </div>
312
+ )}
237
313
  </div>
238
314
  </div>
239
315
  );
@@ -0,0 +1,130 @@
1
+ /*
2
+ * Resend verification email endpoint
3
+ * Allows users to request a new verification email
4
+ */
5
+
6
+ import { NextResponse } from 'next/server';
7
+ import { regenerateVerificationToken } from '../../../db-password-auth';
8
+ import { send_email } from '../../../storage/email';
9
+
10
+ // Email validation regex
11
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
12
+
13
+ export async function POST(request: Request) {
14
+ try {
15
+ const { email } = await request.json();
16
+
17
+ // Validate email format
18
+ if (!email || !emailRegex.test(email)) {
19
+ return NextResponse.json(
20
+ { error: 'Invalid email address' },
21
+ { status: 400 }
22
+ );
23
+ }
24
+
25
+ // Regenerate verification token
26
+ const result = await regenerateVerificationToken(email);
27
+
28
+ if (!result) {
29
+ // Don't reveal whether the email exists or not
30
+ return NextResponse.json({
31
+ success: true,
32
+ message: 'If an unverified account exists with this email, a verification email has been sent.'
33
+ });
34
+ }
35
+
36
+ const { verificationToken } = result;
37
+
38
+ // Get site domain from environment or default
39
+ const siteDomain = process.env.SITE_DOMAIN || 'https://sitepaige.com';
40
+ const verificationUrl = `${siteDomain}/api/Auth/verify-email?token=${verificationToken}`;
41
+
42
+ // Send verification email
43
+ try {
44
+ const emailHtml = `
45
+ <!DOCTYPE html>
46
+ <html>
47
+ <head>
48
+ <style>
49
+ body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
50
+ .container { max-width: 600px; margin: 0 auto; padding: 20px; }
51
+ .button {
52
+ display: inline-block;
53
+ padding: 12px 24px;
54
+ background-color: #f0f0f0;
55
+ color: #000000;
56
+ text-decoration: none;
57
+ border: 1px solid #cccccc;
58
+ border-radius: 4px;
59
+ }
60
+ .footer { margin-top: 30px; font-size: 12px; color: #666; }
61
+ </style>
62
+ </head>
63
+ <body>
64
+ <div class="container">
65
+ <h2>Verify Your Email Address</h2>
66
+ <p>You requested a new verification email for your account at ${siteDomain}. Please verify your email address by clicking the button below:</p>
67
+ <p style="margin: 30px 0;">
68
+ <a href="${verificationUrl}" class="button">Verify Email Address</a>
69
+ </p>
70
+ <p>Or copy and paste this link into your browser:</p>
71
+ <p style="word-break: break-all; color: #0066cc;">${verificationUrl}</p>
72
+ <p>This link will expire in 24 hours.</p>
73
+ <div class="footer">
74
+ <p>If you didn't request this email, you can safely ignore it.</p>
75
+ </div>
76
+ </div>
77
+ </body>
78
+ </html>
79
+ `;
80
+
81
+ const emailText = `
82
+ Verify Your Email Address
83
+
84
+ You requested a new verification email for your account at ${siteDomain}. Please verify your email address by clicking the link below:
85
+
86
+ ${verificationUrl}
87
+
88
+ This link will expire in 24 hours.
89
+
90
+ If you didn't request this email, you can safely ignore it.
91
+ `;
92
+
93
+ await send_email({
94
+ to: email,
95
+ from: process.env.EMAIL_FROM || 'noreply@sitepaige.com',
96
+ subject: 'Verify your email address',
97
+ html: emailHtml,
98
+ text: emailText
99
+ });
100
+
101
+ return NextResponse.json({
102
+ success: true,
103
+ message: 'Verification email sent successfully! Please check your email.'
104
+ });
105
+
106
+ } catch (emailError) {
107
+ console.error('Failed to send verification email:', emailError);
108
+ return NextResponse.json({
109
+ success: false,
110
+ error: 'Failed to send verification email. Please try again later.'
111
+ }, { status: 500 });
112
+ }
113
+
114
+ } catch (error: any) {
115
+ console.error('Resend verification error:', error);
116
+
117
+ if (error.message === 'Email is already verified') {
118
+ return NextResponse.json(
119
+ { error: 'This email is already verified. Please sign in.' },
120
+ { status: 400 }
121
+ );
122
+ }
123
+
124
+ // Generic response to avoid revealing whether email exists
125
+ return NextResponse.json({
126
+ success: true,
127
+ message: 'If an unverified account exists with this email, a verification email has been sent.'
128
+ });
129
+ }
130
+ }
@@ -10,7 +10,6 @@ import * as crypto from 'node:crypto';
10
10
 
11
11
  import { db_init, db_query } from '../../db';
12
12
  import { upsertUser, storeOAuthToken, validateSession, rotateSession } from '../../db-users';
13
- import { validateCsrfToken } from '../../csrf';
14
13
 
15
14
  type OAuthProvider = 'google' | 'facebook' | 'apple' | 'github';
16
15
 
@@ -395,15 +394,6 @@ export async function GET() {
395
394
  }
396
395
 
397
396
  export async function DELETE(request: Request) {
398
- // Validate CSRF token for logout
399
- const isValidCsrf = await validateCsrfToken(request);
400
- if (!isValidCsrf) {
401
- return NextResponse.json(
402
- { error: 'Invalid CSRF token' },
403
- { status: 403 }
404
- );
405
- }
406
-
407
397
  const db = await db_init();
408
398
 
409
399
  try {
@@ -4,7 +4,6 @@
4
4
  */
5
5
 
6
6
  import { NextResponse } from 'next/server';
7
- import { validateCsrfToken } from '../../../csrf';
8
7
  import { createPasswordAuth } from '../../../db-password-auth';
9
8
  import { send_email } from '../../../storage/email';
10
9
 
@@ -15,15 +14,6 @@ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
15
14
  const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/;
16
15
 
17
16
  export async function POST(request: Request) {
18
- // Validate CSRF token
19
- const isValidCsrf = await validateCsrfToken(request);
20
- if (!isValidCsrf) {
21
- return NextResponse.json(
22
- { error: 'Invalid CSRF token' },
23
- { status: 403 }
24
- );
25
- }
26
-
27
17
  try {
28
18
  const { email, password } = await request.json();
29
19
 
@@ -62,11 +52,11 @@ export async function POST(request: Request) {
62
52
  .button {
63
53
  display: inline-block;
64
54
  padding: 12px 24px;
65
- background-color: #4F46E5;
66
- color: white;
55
+ background-color: #f0f0f0;
56
+ color: #000000;
67
57
  text-decoration: none;
68
- border-radius: 6px;
69
- font-weight: bold;
58
+ border: 1px solid #cccccc;
59
+ border-radius: 4px;
70
60
  }
71
61
  .footer { margin-top: 30px; font-size: 12px; color: #666; }
72
62
  </style>
@@ -79,7 +69,7 @@ export async function POST(request: Request) {
79
69
  <a href="${verificationUrl}" class="button">Verify Email Address</a>
80
70
  </p>
81
71
  <p>Or copy and paste this link into your browser:</p>
82
- <p style="word-break: break-all; color: #4F46E5;">${verificationUrl}</p>
72
+ <p style="word-break: break-all; color: #0066cc;">${verificationUrl}</p>
83
73
  <p>This link will expire in 24 hours.</p>
84
74
  <div class="footer">
85
75
  <p>If you didn't create an account, you can safely ignore this email.</p>
@@ -35,12 +35,19 @@ export async function GET(request: Request) {
35
35
  // Create or update user in the main Users table
36
36
  const user = await upsertUser(
37
37
  `password_${authRecord.id}`, // Unique OAuth ID for password users
38
- 'username' as any, // Source type
38
+ 'userpass' as any, // Source type
39
39
  authRecord.email.split('@')[0], // Username from email
40
40
  authRecord.email,
41
41
  undefined // No avatar for password auth
42
42
  );
43
43
 
44
+ if (!user) {
45
+ return NextResponse.json(
46
+ { error: 'Failed to create user account' },
47
+ { status: 500 }
48
+ );
49
+ }
50
+
44
51
  // Auto-login the user after verification
45
52
  const db = await db_init();
46
53
 
@@ -295,6 +295,43 @@ export async function updatePassword(email: string, currentPassword: string, new
295
295
  return true;
296
296
  }
297
297
 
298
+ /**
299
+ * Regenerate email verification token for unverified accounts
300
+ */
301
+ export async function regenerateVerificationToken(email: string): Promise<{ passwordAuth: PasswordAuth; verificationToken: string } | null> {
302
+ const client = await db_init();
303
+
304
+ const authRecord = await getPasswordAuthByEmail(email);
305
+ if (!authRecord) {
306
+ return null;
307
+ }
308
+
309
+ // Only regenerate for unverified accounts
310
+ if (authRecord.emailverified) {
311
+ throw new Error('Email is already verified');
312
+ }
313
+
314
+ // Generate new verification token
315
+ const verificationToken = randomBytes(32).toString('base64url');
316
+ const verificationTokenExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
317
+
318
+ await db_query(client,
319
+ `UPDATE passwordauth
320
+ SET verificationtoken = ?,
321
+ verificationtokenexpires = ?,
322
+ updatedat = CURRENT_TIMESTAMP
323
+ WHERE id = ?`,
324
+ [verificationToken, verificationTokenExpires.toISOString(), authRecord.id]
325
+ );
326
+
327
+ const updatedAuth = await getPasswordAuthByEmail(email);
328
+ if (!updatedAuth) {
329
+ throw new Error('Failed to update verification token');
330
+ }
331
+
332
+ return { passwordAuth: updatedAuth, verificationToken };
333
+ }
334
+
298
335
  /**
299
336
  * Check if an email is already registered
300
337
  */
@@ -10,7 +10,7 @@ import * as crypto from 'node:crypto';
10
10
  export interface User {
11
11
  userid: string;
12
12
  OAuthID: string;
13
- Source: 'google' | 'facebook' | 'apple' | 'github';
13
+ Source: 'google' | 'facebook' | 'apple' | 'github' | 'userpass';
14
14
  UserName: string;
15
15
  Email?: string;
16
16
  AvatarURL?: string;
@@ -48,7 +48,7 @@ export async function getAllUsers(): Promise<User[]> {
48
48
  `SELECT * FROM users
49
49
  WHERE IsActive = ?
50
50
  ORDER BY UserLevel DESC, UserName ASC`,
51
- [true]
51
+ [1] // Use 1 instead of true for PostgreSQL compatibility
52
52
  );
53
53
 
54
54
  return users as User[];
@@ -62,7 +62,7 @@ export async function getUserByOAuthID(oauthId: string): Promise<User | null> {
62
62
 
63
63
  const users = await db_query(client,
64
64
  "SELECT * FROM users WHERE OAuthID = ? AND IsActive = ?",
65
- [oauthId, true]
65
+ [oauthId, 1] // Use 1 instead of true for PostgreSQL compatibility
66
66
  );
67
67
 
68
68
  return users.length > 0 ? users[0] as User : null;
@@ -76,7 +76,7 @@ export async function getUserByID(userId: string): Promise<User | null> {
76
76
 
77
77
  const users = await db_query(client,
78
78
  "SELECT * FROM users WHERE userid = ? AND IsActive = ?",
79
- [userId, true]
79
+ [userId, 1] // Use 1 instead of true for PostgreSQL compatibility
80
80
  );
81
81
 
82
82
  return users.length > 0 ? users[0] as User : null;
@@ -87,7 +87,7 @@ export async function getUserByID(userId: string): Promise<User | null> {
87
87
  */
88
88
  export async function upsertUser(
89
89
  oauthId: string,
90
- source: 'google' | 'facebook' | 'apple' | 'github',
90
+ source: 'google' | 'facebook' | 'apple' | 'github' | 'userpass',
91
91
  userName: string,
92
92
  email?: string,
93
93
  avatarUrl?: string
@@ -122,7 +122,7 @@ export async function upsertUser(
122
122
  (userid, OAuthID, Source, UserName, Email, AvatarURL, UserLevel, UserTier,
123
123
  LastLoginDate, CreatedDate, IsActive)
124
124
  VALUES (?, ?, ?, ?, ?, ?, ?, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?)`,
125
- [userId, oauthId, source, userName, email || null, avatarUrl || '', permissionLevel, true]
125
+ [userId, oauthId, source, userName, email || null, avatarUrl || '', permissionLevel, 1] // Use 1 instead of true for PostgreSQL compatibility
126
126
  );
127
127
 
128
128
  return (await getUserByOAuthID(oauthId))!;
@@ -142,7 +142,7 @@ export async function updateUserPermission(
142
142
  if (permissionLevel < 2) {
143
143
  const admins = await db_query(client,
144
144
  "SELECT COUNT(*) as count FROM users WHERE UserLevel = ? AND userid != ? AND IsActive = ?",
145
- [2, userId, true]
145
+ [2, userId, 1] // Use 1 instead of true for PostgreSQL compatibility
146
146
  );
147
147
 
148
148
  if (admins[0].count === 0) {
@@ -169,7 +169,7 @@ export async function deleteUser(userId: string): Promise<boolean> {
169
169
  if (user && user.UserLevel === 2) {
170
170
  const admins = await db_query(client,
171
171
  "SELECT COUNT(*) as count FROM users WHERE UserLevel = ? AND userid != ? AND IsActive = ?",
172
- [2, userId, true]
172
+ [2, userId, 1] // Use 1 instead of true for PostgreSQL compatibility
173
173
  );
174
174
 
175
175
  if (admins[0].count === 0) {
@@ -180,7 +180,7 @@ export async function deleteUser(userId: string): Promise<boolean> {
180
180
  // Soft delete the user
181
181
  const result = await db_query(client,
182
182
  "UPDATE users SET IsActive = ? WHERE userid = ?",
183
- [false, userId]
183
+ [0, userId] // Use 0 instead of false for PostgreSQL compatibility
184
184
  );
185
185
 
186
186
  return result[0].changes > 0;
@@ -205,7 +205,7 @@ export async function getUserStats(): Promise<{
205
205
  SUM(CASE WHEN UserLevel = 0 THEN 1 ELSE 0 END) as guestUsers
206
206
  FROM users
207
207
  WHERE IsActive = ?
208
- `, [true]);
208
+ `, [1]); // Use 1 instead of true for PostgreSQL compatibility
209
209
 
210
210
  return stats[0];
211
211
  }
@@ -286,7 +286,7 @@ export async function validateSession(sessionToken: string): Promise<{
286
286
  `SELECT s.*, u.* FROM usersession s
287
287
  JOIN users u ON s.userid = u.userid
288
288
  WHERE s.SessionToken = ? AND s.ExpirationDate > CURRENT_TIMESTAMP AND u.IsActive = ?`,
289
- [sessionToken, true]
289
+ [sessionToken, 1] // Use 1 instead of true for PostgreSQL compatibility
290
290
  );
291
291
 
292
292
  if (!sessions || sessions.length === 0) {
@@ -89,23 +89,21 @@ export function middleware(request: NextRequest) {
89
89
  // Using Report-Only mode to monitor CSP violations without breaking functionality
90
90
  response.headers.set('Content-Security-Policy-Report-Only', csp)
91
91
 
92
- // Add CSRF token generation for state-changing requests
93
- if (request.method !== 'GET' && request.method !== 'HEAD') {
94
- const csrfToken = request.cookies.get('csrf-token')?.value;
95
-
96
- // If no CSRF token exists, generate one
97
- if (!csrfToken) {
98
- const newCsrfToken = crypto.randomUUID();
99
- response.cookies.set({
100
- name: 'csrf-token',
101
- value: newCsrfToken,
102
- httpOnly: true,
103
- secure: process.env.NODE_ENV === 'production',
104
- sameSite: 'strict',
105
- maxAge: 60 * 60 * 24, // 24 hours
106
- path: '/'
107
- });
108
- }
92
+ // Add CSRF token generation for all requests
93
+ const csrfToken = request.cookies.get('csrf-token')?.value;
94
+
95
+ // If no CSRF token exists, generate one
96
+ if (!csrfToken) {
97
+ const newCsrfToken = crypto.randomUUID();
98
+ response.cookies.set({
99
+ name: 'csrf-token',
100
+ value: newCsrfToken,
101
+ httpOnly: true,
102
+ secure: process.env.NODE_ENV === 'production',
103
+ sameSite: 'strict',
104
+ maxAge: 60 * 60 * 24, // 24 hours
105
+ path: '/'
106
+ });
109
107
  }
110
108
 
111
109
 
@@ -20,6 +20,8 @@ export default function Login({ providers }: LoginProps) {
20
20
  const [confirmPassword, setConfirmPassword] = useState('');
21
21
  const [isLoading, setIsLoading] = useState(false);
22
22
  const [message, setMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null);
23
+ const [showResendVerification, setShowResendVerification] = useState(false);
24
+ const [resendEmail, setResendEmail] = useState('');
23
25
 
24
26
 
25
27
  const handleProviderLogin = async (provider: string) => {
@@ -49,6 +51,36 @@ export default function Login({ providers }: LoginProps) {
49
51
 
50
52
  };
51
53
 
54
+ const handleResendVerification = async () => {
55
+ setError(null);
56
+ setMessage(null);
57
+ setIsLoading(true);
58
+
59
+ try {
60
+ const response = await fetch('/api/Auth/resend-verification', {
61
+ method: 'POST',
62
+ headers: {
63
+ 'Content-Type': 'application/json'
64
+ },
65
+ body: JSON.stringify({ email: resendEmail || email })
66
+ });
67
+
68
+ const data = await response.json();
69
+
70
+ if (response.ok && data.success) {
71
+ setMessage({ type: 'success', text: data.message || 'Verification email sent! Please check your inbox.' });
72
+ setShowResendVerification(false);
73
+ setResendEmail('');
74
+ } else {
75
+ setError(data.error || 'Failed to send verification email');
76
+ }
77
+ } catch (err) {
78
+ setError('An unexpected error occurred');
79
+ } finally {
80
+ setIsLoading(false);
81
+ }
82
+ };
83
+
52
84
  const handleUsernamePasswordAuth = async (e: React.FormEvent) => {
53
85
  e.preventDefault();
54
86
  setError(null);
@@ -66,7 +98,9 @@ export default function Login({ providers }: LoginProps) {
66
98
 
67
99
  const response = await fetch('/api/Auth/signup', {
68
100
  method: 'POST',
69
- headers: { 'Content-Type': 'application/json' },
101
+ headers: {
102
+ 'Content-Type': 'application/json'
103
+ },
70
104
  body: JSON.stringify({ email, password })
71
105
  });
72
106
 
@@ -84,7 +118,9 @@ export default function Login({ providers }: LoginProps) {
84
118
  // Handle login
85
119
  const response = await fetch('/api/Auth', {
86
120
  method: 'POST',
87
- headers: { 'Content-Type': 'application/json' },
121
+ headers: {
122
+ 'Content-Type': 'application/json'
123
+ },
88
124
  body: JSON.stringify({ email, password, provider: 'username' })
89
125
  });
90
126
 
@@ -95,6 +131,11 @@ export default function Login({ providers }: LoginProps) {
95
131
  window.location.href = '/';
96
132
  } else {
97
133
  setError(data.error || 'Login failed');
134
+ // Check if error is about email verification
135
+ if (response.status === 403 || data.error?.toLowerCase().includes('verify')) {
136
+ setShowResendVerification(true);
137
+ setResendEmail(email);
138
+ }
98
139
  }
99
140
  }
100
141
  } catch (err) {
@@ -179,17 +220,18 @@ export default function Login({ providers }: LoginProps) {
179
220
  </div>
180
221
 
181
222
  <div className="text-center">
182
- <button
183
- type="button"
184
- onClick={() => {
223
+ <a
224
+ href="#"
225
+ onClick={(e) => {
226
+ e.preventDefault();
185
227
  setIsSignup(!isSignup);
186
228
  setError(null);
187
229
  setMessage(null);
188
230
  }}
189
- className="text-sm text-indigo-600 hover:text-indigo-500"
231
+ className="text-sm text-indigo-600 hover:text-indigo-500 underline"
190
232
  >
191
233
  {isSignup ? 'Already have an account? Sign in' : "Don't have an account? Sign up"}
192
- </button>
234
+ </a>
193
235
  </div>
194
236
  </form>
195
237
  )}
@@ -234,6 +276,40 @@ export default function Login({ providers }: LoginProps) {
234
276
  {error}
235
277
  </div>
236
278
  )}
279
+
280
+ {showResendVerification && (
281
+ <div className="mt-4 p-4 border border-gray-200 rounded-md bg-gray-50">
282
+ <p className="text-sm text-gray-700 mb-3">
283
+ Need a new verification email? Enter your email address and we'll send you a new link.
284
+ </p>
285
+ <div className="space-y-3">
286
+ <input
287
+ type="email"
288
+ value={resendEmail}
289
+ onChange={(e) => setResendEmail(e.target.value)}
290
+ placeholder="Email address"
291
+ className="block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 text-sm"
292
+ />
293
+ <button
294
+ onClick={handleResendVerification}
295
+ disabled={isLoading || !resendEmail}
296
+ className="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 disabled:opacity-50"
297
+ >
298
+ {isLoading ? 'Sending...' : 'Resend Verification Email'}
299
+ </button>
300
+ <button
301
+ type="button"
302
+ onClick={() => {
303
+ setShowResendVerification(false);
304
+ setResendEmail('');
305
+ }}
306
+ className="w-full text-sm text-gray-500 hover:text-gray-700 bg-transparent border-0 p-0 underline"
307
+ >
308
+ Cancel
309
+ </button>
310
+ </div>
311
+ </div>
312
+ )}
237
313
  </div>
238
314
  </div>
239
315
  );
@@ -0,0 +1,130 @@
1
+ /*
2
+ * Resend verification email endpoint
3
+ * Allows users to request a new verification email
4
+ */
5
+
6
+ import { NextResponse } from 'next/server';
7
+ import { regenerateVerificationToken } from '../../../db-password-auth';
8
+ import { send_email } from '../../../storage/email';
9
+
10
+ // Email validation regex
11
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
12
+
13
+ export async function POST(request: Request) {
14
+ try {
15
+ const { email } = await request.json();
16
+
17
+ // Validate email format
18
+ if (!email || !emailRegex.test(email)) {
19
+ return NextResponse.json(
20
+ { error: 'Invalid email address' },
21
+ { status: 400 }
22
+ );
23
+ }
24
+
25
+ // Regenerate verification token
26
+ const result = await regenerateVerificationToken(email);
27
+
28
+ if (!result) {
29
+ // Don't reveal whether the email exists or not
30
+ return NextResponse.json({
31
+ success: true,
32
+ message: 'If an unverified account exists with this email, a verification email has been sent.'
33
+ });
34
+ }
35
+
36
+ const { verificationToken } = result;
37
+
38
+ // Get site domain from environment or default
39
+ const siteDomain = process.env.SITE_DOMAIN || 'https://sitepaige.com';
40
+ const verificationUrl = `${siteDomain}/api/Auth/verify-email?token=${verificationToken}`;
41
+
42
+ // Send verification email
43
+ try {
44
+ const emailHtml = `
45
+ <!DOCTYPE html>
46
+ <html>
47
+ <head>
48
+ <style>
49
+ body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
50
+ .container { max-width: 600px; margin: 0 auto; padding: 20px; }
51
+ .button {
52
+ display: inline-block;
53
+ padding: 12px 24px;
54
+ background-color: #f0f0f0;
55
+ color: #000000;
56
+ text-decoration: none;
57
+ border: 1px solid #cccccc;
58
+ border-radius: 4px;
59
+ }
60
+ .footer { margin-top: 30px; font-size: 12px; color: #666; }
61
+ </style>
62
+ </head>
63
+ <body>
64
+ <div class="container">
65
+ <h2>Verify Your Email Address</h2>
66
+ <p>You requested a new verification email for your account at ${siteDomain}. Please verify your email address by clicking the button below:</p>
67
+ <p style="margin: 30px 0;">
68
+ <a href="${verificationUrl}" class="button">Verify Email Address</a>
69
+ </p>
70
+ <p>Or copy and paste this link into your browser:</p>
71
+ <p style="word-break: break-all; color: #0066cc;">${verificationUrl}</p>
72
+ <p>This link will expire in 24 hours.</p>
73
+ <div class="footer">
74
+ <p>If you didn't request this email, you can safely ignore it.</p>
75
+ </div>
76
+ </div>
77
+ </body>
78
+ </html>
79
+ `;
80
+
81
+ const emailText = `
82
+ Verify Your Email Address
83
+
84
+ You requested a new verification email for your account at ${siteDomain}. Please verify your email address by clicking the link below:
85
+
86
+ ${verificationUrl}
87
+
88
+ This link will expire in 24 hours.
89
+
90
+ If you didn't request this email, you can safely ignore it.
91
+ `;
92
+
93
+ await send_email({
94
+ to: email,
95
+ from: process.env.EMAIL_FROM || 'noreply@sitepaige.com',
96
+ subject: 'Verify your email address',
97
+ html: emailHtml,
98
+ text: emailText
99
+ });
100
+
101
+ return NextResponse.json({
102
+ success: true,
103
+ message: 'Verification email sent successfully! Please check your email.'
104
+ });
105
+
106
+ } catch (emailError) {
107
+ console.error('Failed to send verification email:', emailError);
108
+ return NextResponse.json({
109
+ success: false,
110
+ error: 'Failed to send verification email. Please try again later.'
111
+ }, { status: 500 });
112
+ }
113
+
114
+ } catch (error: any) {
115
+ console.error('Resend verification error:', error);
116
+
117
+ if (error.message === 'Email is already verified') {
118
+ return NextResponse.json(
119
+ { error: 'This email is already verified. Please sign in.' },
120
+ { status: 400 }
121
+ );
122
+ }
123
+
124
+ // Generic response to avoid revealing whether email exists
125
+ return NextResponse.json({
126
+ success: true,
127
+ message: 'If an unverified account exists with this email, a verification email has been sent.'
128
+ });
129
+ }
130
+ }
@@ -10,7 +10,6 @@ import * as crypto from 'node:crypto';
10
10
 
11
11
  import { db_init, db_query } from '../../db';
12
12
  import { upsertUser, storeOAuthToken, validateSession, rotateSession } from '../../db-users';
13
- import { validateCsrfToken } from '../../csrf';
14
13
 
15
14
  type OAuthProvider = 'google' | 'facebook' | 'apple' | 'github';
16
15
 
@@ -395,15 +394,6 @@ export async function GET() {
395
394
  }
396
395
 
397
396
  export async function DELETE(request: Request) {
398
- // Validate CSRF token for logout
399
- const isValidCsrf = await validateCsrfToken(request);
400
- if (!isValidCsrf) {
401
- return NextResponse.json(
402
- { error: 'Invalid CSRF token' },
403
- { status: 403 }
404
- );
405
- }
406
-
407
397
  const db = await db_init();
408
398
 
409
399
  try {
@@ -4,7 +4,6 @@
4
4
  */
5
5
 
6
6
  import { NextResponse } from 'next/server';
7
- import { validateCsrfToken } from '../../../csrf';
8
7
  import { createPasswordAuth } from '../../../db-password-auth';
9
8
  import { send_email } from '../../../storage/email';
10
9
 
@@ -15,15 +14,6 @@ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
15
14
  const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/;
16
15
 
17
16
  export async function POST(request: Request) {
18
- // Validate CSRF token
19
- const isValidCsrf = await validateCsrfToken(request);
20
- if (!isValidCsrf) {
21
- return NextResponse.json(
22
- { error: 'Invalid CSRF token' },
23
- { status: 403 }
24
- );
25
- }
26
-
27
17
  try {
28
18
  const { email, password } = await request.json();
29
19
 
@@ -62,11 +52,11 @@ export async function POST(request: Request) {
62
52
  .button {
63
53
  display: inline-block;
64
54
  padding: 12px 24px;
65
- background-color: #4F46E5;
66
- color: white;
55
+ background-color: #f0f0f0;
56
+ color: #000000;
67
57
  text-decoration: none;
68
- border-radius: 6px;
69
- font-weight: bold;
58
+ border: 1px solid #cccccc;
59
+ border-radius: 4px;
70
60
  }
71
61
  .footer { margin-top: 30px; font-size: 12px; color: #666; }
72
62
  </style>
@@ -79,7 +69,7 @@ export async function POST(request: Request) {
79
69
  <a href="${verificationUrl}" class="button">Verify Email Address</a>
80
70
  </p>
81
71
  <p>Or copy and paste this link into your browser:</p>
82
- <p style="word-break: break-all; color: #4F46E5;">${verificationUrl}</p>
72
+ <p style="word-break: break-all; color: #0066cc;">${verificationUrl}</p>
83
73
  <p>This link will expire in 24 hours.</p>
84
74
  <div class="footer">
85
75
  <p>If you didn't create an account, you can safely ignore this email.</p>
@@ -35,12 +35,19 @@ export async function GET(request: Request) {
35
35
  // Create or update user in the main Users table
36
36
  const user = await upsertUser(
37
37
  `password_${authRecord.id}`, // Unique OAuth ID for password users
38
- 'username' as any, // Source type
38
+ 'userpass' as any, // Source type
39
39
  authRecord.email.split('@')[0], // Username from email
40
40
  authRecord.email,
41
41
  undefined // No avatar for password auth
42
42
  );
43
43
 
44
+ if (!user) {
45
+ return NextResponse.json(
46
+ { error: 'Failed to create user account' },
47
+ { status: 500 }
48
+ );
49
+ }
50
+
44
51
  // Auto-login the user after verification
45
52
  const db = await db_init();
46
53
 
@@ -295,6 +295,43 @@ export async function updatePassword(email: string, currentPassword: string, new
295
295
  return true;
296
296
  }
297
297
 
298
+ /**
299
+ * Regenerate email verification token for unverified accounts
300
+ */
301
+ export async function regenerateVerificationToken(email: string): Promise<{ passwordAuth: PasswordAuth; verificationToken: string } | null> {
302
+ const client = await db_init();
303
+
304
+ const authRecord = await getPasswordAuthByEmail(email);
305
+ if (!authRecord) {
306
+ return null;
307
+ }
308
+
309
+ // Only regenerate for unverified accounts
310
+ if (authRecord.emailverified) {
311
+ throw new Error('Email is already verified');
312
+ }
313
+
314
+ // Generate new verification token
315
+ const verificationToken = randomBytes(32).toString('base64url');
316
+ const verificationTokenExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
317
+
318
+ await db_query(client,
319
+ `UPDATE passwordauth
320
+ SET verificationtoken = ?,
321
+ verificationtokenexpires = ?,
322
+ updatedat = CURRENT_TIMESTAMP
323
+ WHERE id = ?`,
324
+ [verificationToken, verificationTokenExpires.toISOString(), authRecord.id]
325
+ );
326
+
327
+ const updatedAuth = await getPasswordAuthByEmail(email);
328
+ if (!updatedAuth) {
329
+ throw new Error('Failed to update verification token');
330
+ }
331
+
332
+ return { passwordAuth: updatedAuth, verificationToken };
333
+ }
334
+
298
335
  /**
299
336
  * Check if an email is already registered
300
337
  */
@@ -10,7 +10,7 @@ import * as crypto from 'node:crypto';
10
10
  export interface User {
11
11
  userid: string;
12
12
  OAuthID: string;
13
- Source: 'google' | 'facebook' | 'apple' | 'github';
13
+ Source: 'google' | 'facebook' | 'apple' | 'github' | 'userpass';
14
14
  UserName: string;
15
15
  Email?: string;
16
16
  AvatarURL?: string;
@@ -48,7 +48,7 @@ export async function getAllUsers(): Promise<User[]> {
48
48
  `SELECT * FROM users
49
49
  WHERE IsActive = ?
50
50
  ORDER BY UserLevel DESC, UserName ASC`,
51
- [true]
51
+ [1] // Use 1 instead of true for PostgreSQL compatibility
52
52
  );
53
53
 
54
54
  return users as User[];
@@ -62,7 +62,7 @@ export async function getUserByOAuthID(oauthId: string): Promise<User | null> {
62
62
 
63
63
  const users = await db_query(client,
64
64
  "SELECT * FROM users WHERE OAuthID = ? AND IsActive = ?",
65
- [oauthId, true]
65
+ [oauthId, 1] // Use 1 instead of true for PostgreSQL compatibility
66
66
  );
67
67
 
68
68
  return users.length > 0 ? users[0] as User : null;
@@ -76,7 +76,7 @@ export async function getUserByID(userId: string): Promise<User | null> {
76
76
 
77
77
  const users = await db_query(client,
78
78
  "SELECT * FROM users WHERE userid = ? AND IsActive = ?",
79
- [userId, true]
79
+ [userId, 1] // Use 1 instead of true for PostgreSQL compatibility
80
80
  );
81
81
 
82
82
  return users.length > 0 ? users[0] as User : null;
@@ -87,7 +87,7 @@ export async function getUserByID(userId: string): Promise<User | null> {
87
87
  */
88
88
  export async function upsertUser(
89
89
  oauthId: string,
90
- source: 'google' | 'facebook' | 'apple' | 'github',
90
+ source: 'google' | 'facebook' | 'apple' | 'github' | 'userpass',
91
91
  userName: string,
92
92
  email?: string,
93
93
  avatarUrl?: string
@@ -122,7 +122,7 @@ export async function upsertUser(
122
122
  (userid, OAuthID, Source, UserName, Email, AvatarURL, UserLevel, UserTier,
123
123
  LastLoginDate, CreatedDate, IsActive)
124
124
  VALUES (?, ?, ?, ?, ?, ?, ?, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?)`,
125
- [userId, oauthId, source, userName, email || null, avatarUrl || '', permissionLevel, true]
125
+ [userId, oauthId, source, userName, email || null, avatarUrl || '', permissionLevel, 1] // Use 1 instead of true for PostgreSQL compatibility
126
126
  );
127
127
 
128
128
  return (await getUserByOAuthID(oauthId))!;
@@ -142,7 +142,7 @@ export async function updateUserPermission(
142
142
  if (permissionLevel < 2) {
143
143
  const admins = await db_query(client,
144
144
  "SELECT COUNT(*) as count FROM users WHERE UserLevel = ? AND userid != ? AND IsActive = ?",
145
- [2, userId, true]
145
+ [2, userId, 1] // Use 1 instead of true for PostgreSQL compatibility
146
146
  );
147
147
 
148
148
  if (admins[0].count === 0) {
@@ -169,7 +169,7 @@ export async function deleteUser(userId: string): Promise<boolean> {
169
169
  if (user && user.UserLevel === 2) {
170
170
  const admins = await db_query(client,
171
171
  "SELECT COUNT(*) as count FROM users WHERE UserLevel = ? AND userid != ? AND IsActive = ?",
172
- [2, userId, true]
172
+ [2, userId, 1] // Use 1 instead of true for PostgreSQL compatibility
173
173
  );
174
174
 
175
175
  if (admins[0].count === 0) {
@@ -180,7 +180,7 @@ export async function deleteUser(userId: string): Promise<boolean> {
180
180
  // Soft delete the user
181
181
  const result = await db_query(client,
182
182
  "UPDATE users SET IsActive = ? WHERE userid = ?",
183
- [false, userId]
183
+ [0, userId] // Use 0 instead of false for PostgreSQL compatibility
184
184
  );
185
185
 
186
186
  return result[0].changes > 0;
@@ -205,7 +205,7 @@ export async function getUserStats(): Promise<{
205
205
  SUM(CASE WHEN UserLevel = 0 THEN 1 ELSE 0 END) as guestUsers
206
206
  FROM users
207
207
  WHERE IsActive = ?
208
- `, [true]);
208
+ `, [1]); // Use 1 instead of true for PostgreSQL compatibility
209
209
 
210
210
  return stats[0];
211
211
  }
@@ -286,7 +286,7 @@ export async function validateSession(sessionToken: string): Promise<{
286
286
  `SELECT s.*, u.* FROM usersession s
287
287
  JOIN users u ON s.userid = u.userid
288
288
  WHERE s.SessionToken = ? AND s.ExpirationDate > CURRENT_TIMESTAMP AND u.IsActive = ?`,
289
- [sessionToken, true]
289
+ [sessionToken, 1] // Use 1 instead of true for PostgreSQL compatibility
290
290
  );
291
291
 
292
292
  if (!sessions || sessions.length === 0) {
@@ -89,23 +89,21 @@ export function middleware(request: NextRequest) {
89
89
  // Using Report-Only mode to monitor CSP violations without breaking functionality
90
90
  response.headers.set('Content-Security-Policy-Report-Only', csp)
91
91
 
92
- // Add CSRF token generation for state-changing requests
93
- if (request.method !== 'GET' && request.method !== 'HEAD') {
94
- const csrfToken = request.cookies.get('csrf-token')?.value;
95
-
96
- // If no CSRF token exists, generate one
97
- if (!csrfToken) {
98
- const newCsrfToken = crypto.randomUUID();
99
- response.cookies.set({
100
- name: 'csrf-token',
101
- value: newCsrfToken,
102
- httpOnly: true,
103
- secure: process.env.NODE_ENV === 'production',
104
- sameSite: 'strict',
105
- maxAge: 60 * 60 * 24, // 24 hours
106
- path: '/'
107
- });
108
- }
92
+ // Add CSRF token generation for all requests
93
+ const csrfToken = request.cookies.get('csrf-token')?.value;
94
+
95
+ // If no CSRF token exists, generate one
96
+ if (!csrfToken) {
97
+ const newCsrfToken = crypto.randomUUID();
98
+ response.cookies.set({
99
+ name: 'csrf-token',
100
+ value: newCsrfToken,
101
+ httpOnly: true,
102
+ secure: process.env.NODE_ENV === 'production',
103
+ sameSite: 'strict',
104
+ maxAge: 60 * 60 * 24, // 24 hours
105
+ path: '/'
106
+ });
109
107
  }
110
108
 
111
109
 
@@ -159,14 +159,16 @@ export function generateStyleProps(systemView, isContainer) {
159
159
  // Combined alignment using placeItems (matches rview.tsx exactly)
160
160
  const verticalAlign = (systemView.verticalAlign || '').toLowerCase();
161
161
  const align = (systemView.align || '').toLowerCase();
162
- if (verticalAlign === 'top') {
163
- styleProps.push(`alignContent: 'start'`);
164
- }
165
- else if (verticalAlign === 'center') {
166
- styleProps.push(`alignContent: 'center'`);
167
- }
168
- else if (verticalAlign === 'bottom') {
169
- styleProps.push(`alignContent: 'end'`);
162
+ if (systemView.type !== 'container') {
163
+ if (verticalAlign === 'top') {
164
+ styleProps.push(`alignContent: 'start'`);
165
+ }
166
+ else if (verticalAlign === 'center') {
167
+ styleProps.push(`alignContent: 'center'`);
168
+ }
169
+ else if (verticalAlign === 'bottom') {
170
+ styleProps.push(`alignContent: 'end'`);
171
+ }
170
172
  }
171
173
  // Text alignment
172
174
  if (systemView.type === 'container') {
@@ -540,7 +542,7 @@ export default function ${comp}() {
540
542
 
541
543
  return (
542
544
  <>
543
- <div className={\`hidden md:flex gap-4 p-2 \${alignmentClasses[align as keyof typeof alignmentClasses]}\`}>
545
+ <div className={\`hidden md:flex gap-4 p-3 \${alignmentClasses[align as keyof typeof alignmentClasses]}\`}>
544
546
  {items.map((item, index) => (
545
547
  <button
546
548
  key={index}
@@ -600,6 +602,8 @@ export default function ${comp}() {
600
602
  // Convert authProviders object to providers array
601
603
  const providers = [];
602
604
  if (authProviders) {
605
+ if (authProviders.password)
606
+ providers.push('username');
603
607
  if (authProviders.google)
604
608
  providers.push('google');
605
609
  if (authProviders.facebook)
@@ -900,8 +904,6 @@ export default function ${comp}(){
900
904
  const colsPerView = legacy ? Math.floor(12 / normalized.length) : null;
901
905
  const importLines = [];
902
906
  const blocks = [];
903
- // Check if container has background image for opacity handling
904
- const hasContainerBackground = v.background_image && v.background_image !== '';
905
907
  for (const s of normalized) {
906
908
  const subId = s.viewId || s.id || "";
907
909
  if (!subId)
@@ -936,8 +938,6 @@ export default function ${comp}(){
936
938
  const innerWrapperClasses = [
937
939
  "w-full",
938
940
  "h-full",
939
- "flex",
940
- "flex-col",
941
941
  // Vertical alignment
942
942
  verticalAlign === 'top' ? 'justify-start' :
943
943
  verticalAlign === 'bottom' ? 'justify-end' : 'justify-center',
@@ -1 +1 @@
1
- {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/generators/views.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/generators/views.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,uCAAuC;AACvC,KAAK,UAAU,QAAQ,CAAC,OAAe;IACrC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,oEAAoE;AACpE,MAAM,gBAAgB,GAAa,EAAE,CAAC;AAEtC,2DAA2D;AAC3D,gBAAgB,CAAC,IAAI,CAAC;;;;;;;;EAQpB,CAAC,CAAC;AAEJ,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;GAqBrB,CAAC;AAEJ,uDAAuD;AACvD,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;AAElD,SAAS,kBAAkB,CAAC,IAAY,EAAE,MAAe;IACvD,uFAAuF;IACvF,2FAA2F;IAC3F,mFAAmF;IACnF,0FAA0F;IAC1F,IAAI,aAAa,GAAG,YAAY,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;IAErG,iEAAiE;IACjE,IAAI,uBAAuB,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,MAAM,EAAE,CAAC;QACzD,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC7D,aAAa,GAAG,GAAG,aAAa,IAAI,MAAM,EAAE,CAAC;IAC/C,CAAC;IAED,uBAAuB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3C,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,UAAgB,EAAE,WAAoB;IACrE,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,6BAA6B;IAC7B,IAAI,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,KAAK,EAAE,EAAE,CAAC;QACpE,UAAU,CAAC,IAAI,CAAC,qBAAqB,UAAU,CAAC,gBAAgB,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,KAAK,IAAI,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClE,UAAU,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,KAAK,EAAE,EAAE,CAAC;QACpE,+EAA+E;QAC/E,MAAM,sBAAsB,GAAG,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAErG,gFAAgF;QAChF,UAAU,CAAC,IAAI,CAAC,yBAAyB,sBAAsB,IAAI,CAAC,CAAC;QACrE,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC3C,UAAU,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAChD,UAAU,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACrD,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;QACxD,UAAU,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,sDAAsD;IACtD,IAAI,UAAU,CAAC,WAAW;QAAE,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,WAAW,KAAK,CAAC,CAAC;IAC1F,IAAI,UAAU,CAAC,YAAY;QAAE,UAAU,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC;IAC7F,IAAI,UAAU,CAAC,UAAU;QAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,UAAU,KAAK,CAAC,CAAC;IACvF,IAAI,UAAU,CAAC,aAAa;QAAE,UAAU,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,aAAa,KAAK,CAAC,CAAC;IAEhG,qDAAqD;IACrD,IAAI,UAAU,CAAC,UAAU;QAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,UAAU,KAAK,CAAC,CAAC;IACvF,IAAI,UAAU,CAAC,WAAW;QAAE,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,WAAW,KAAK,CAAC,CAAC;IAC1F,IAAI,UAAU,CAAC,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,SAAS,KAAK,CAAC,CAAC;IACpF,IAAI,UAAU,CAAC,YAAY;QAAE,UAAU,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC;IAE7F,iEAAiE;IACjE,IAAI,UAAU,CAAC,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,SAAS,KAAK,CAAC,CAAC;IACpF,IAAI,UAAU,CAAC,QAAQ;QAAE,UAAU,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,QAAQ,KAAK,CAAC,CAAC;IACjF,IAAI,UAAU,CAAC,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,SAAS,KAAK,CAAC,CAAC;IACpF,IAAI,UAAU,CAAC,QAAQ;QAAE,UAAU,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,QAAQ,KAAK,CAAC,CAAC;IAEjF,2CAA2C;IAC3C,IAAI,UAAU,CAAC,SAAS,KAAK,IAAI,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACtE,UAAU,CAAC,IAAI,CAAC,oBAAoB,UAAU,CAAC,SAAS,KAAK,CAAC,CAAC;QAC/D,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC5E,UAAU,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC;QACrE,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,UAAU,CAAC,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACxE,UAAU,CAAC,IAAI,CAAC,qBAAqB,UAAU,CAAC,UAAU,KAAK,CAAC,CAAC;QACjE,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,UAAU,CAAC,WAAW,KAAK,IAAI,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC1E,UAAU,CAAC,IAAI,CAAC,sBAAsB,UAAU,CAAC,WAAW,KAAK,CAAC,CAAC;QACnE,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,KAAK,EAAE,EAAE,CAAC;QAC1D,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,uBAAuB;IACvB,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC5E,UAAU,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACJ,uCAAuC;QACvC,IAAI,UAAU,CAAC,mBAAmB,KAAK,IAAI,IAAI,UAAU,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC1F,UAAU,CAAC,IAAI,CAAC,yBAAyB,UAAU,CAAC,mBAAmB,KAAK,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,UAAU,CAAC,oBAAoB,KAAK,IAAI,IAAI,UAAU,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;YAC5F,UAAU,CAAC,IAAI,CAAC,0BAA0B,UAAU,CAAC,oBAAoB,KAAK,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,UAAU,CAAC,sBAAsB,KAAK,IAAI,IAAI,UAAU,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;YAChG,UAAU,CAAC,IAAI,CAAC,4BAA4B,UAAU,CAAC,sBAAsB,KAAK,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,UAAU,CAAC,uBAAuB,KAAK,IAAI,IAAI,UAAU,CAAC,uBAAuB,KAAK,SAAS,EAAE,CAAC;YAClG,UAAU,CAAC,IAAI,CAAC,6BAA6B,UAAU,CAAC,uBAAuB,KAAK,CAAC,CAAC;QAC1F,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAErD,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpC,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAC1C,CAAC;aACI,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;aACI,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;YAC1C,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACvC,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QAC/C,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACnC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxD,UAAU,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,+CAA+C;IAC/C,IAAI,UAAU,CAAC,QAAQ,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACtG,UAAU,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,sEAAsE;IACtE,IAAI,UAAU,CAAC,QAAQ,KAAK,UAAU,IAAI,UAAU,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC3E,IAAI,UAAU,CAAC,GAAG,KAAK,IAAI,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1D,UAAU,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChE,UAAU,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5D,UAAU,CAAC,IAAI,CAAC,UAAU,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9D,UAAU,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,KAAK,KAAK,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAED,8CAA8C;IAC9C,IAAI,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,KAAK,EAAE,EAAE,CAAC;QACpE,UAAU,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,gBAAgB,GAAG,CAAC,CAAC;QACvE,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAClD,CAAC;AAGD,SAAS,yBAAyB,CAAC,GAAsB,EAAE,MAAe,EAAE,WAA0B;IACpG,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,CAAC,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChF,CAAC;AAUD,SAAS,sBAAsB,CAAC,IAAa;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAA0B,CAAC;IAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAiB,EAAE,SAAoB,EAAE,WAAkB,EAAE,aAA2G;IACvM,kDAAkD;IAClD,uBAAuB,CAAC,KAAK,EAAE,CAAC;IAChC,+DAA+D;IAC/D,uBAAuB,EAAE,CAAC;IAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwD,CAAC;IAChF,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAgB,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,EAAE;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,CAAC,4BAA4B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACtF,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,QAAQ,CAAC,wCAAwC,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpF,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,QAAQ,CAAC,4CAA4C,EAAE,CAAC,MAAM,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QAChH,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,IAAI,KAAK,WAAW;YAAE,SAAS;QACnC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,MAAM,QAAQ,CAAC,iCAAiC,CAAC,CAAC,EAAE,WAAW,IAAI,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAExF,2CAA2C;QAC3C,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAClE,MAAM,QAAQ,CAAC,0CAA0C,CAAC,CAAC,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpG,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9B,wEAAwE;gBACxE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAElC,IAAI,CAAC;oBACH,oCAAoC;oBACpC,+BAA+B;oBAC/B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;oBAC1E,MAAM,UAAU,GAAG,EAAE,aAAa,EAAE,CAAC;oBAErC,qBAAqB;oBACrB,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,gCAAgC;oBAC/E,MAAM,gBAAgB,GAAuD,IAAI,CAAC,KAAK,CACrF,UAAU,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CACzD,CAAC;oBAEF,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;wBAC7B,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;wBAC7B,eAAe,GAAG,IAAI,CAAC;oBACzB,CAAC;yBAAM,CAAC;wBACN,MAAM,QAAQ,CAAC,8CAA8C,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;wBAChG,4DAA4D;wBAC5D,IAAI,CAAC,CAAC,uBAAuB,EAAE,CAAC;4BAC9B,MAAM,kBAAkB,GAAG,CAAC,CAAC,uBAAuB,CAAC;4BACrD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,UAAU,CAAC,aAAa,CAAC,kBAAkB,EAAE,KAAK,EAAE,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAChF,CAAC;4BACF,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;gCAC3B,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;gCAC3B,eAAe,GAAG,IAAI,CAAC;4BACzB,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,QAAQ,CAAC,+CAA+C,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;QACH,CAAC;QAED,4DAA4D;QAC5D,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,yDAAyD;gBAChF,IAAI,GAAG;;YAED,IAAI;;;;0BAIU,IAAI,6BAA6B,IAAI;oBAC3C,OAAO;;yEAE8C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;EAE3F,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,IAAI,GAAG,GAAG,CAAC,CAAC,uBAAuB,IAAI,CAAC,CAAC,gBAAgB,IAAI,EAAE,CAAC;gBAEhE,wEAAwE;gBACxE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnD,IAAI,CAAC;wBACH,sCAAsC;wBACtC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;wBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACnC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;4BACnB,+FAA+F;4BAC/F,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;wBACvB,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,4BAA4B;oBAC9B,CAAC;gBACH,CAAC;gBAED,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;gBACxB,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC;gBACrC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC;gBACxD,IAAI,GAAG;;0BAEa,IAAI;qBACT,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;oBACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;sBACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;mBAC5B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCzC,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,iDAAiD;gBACjD,MAAM,QAAQ,GAAG,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,uBAAuB,IAAI,EAAE,CAAC;gBACvE,IAAI,YAAY,GAAG,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC;gBACpC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC;gBAEvD,qCAAqC;gBACrC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;oBAC/D,YAAY,GAAG,WAAW,CAAC;gBAC5B,CAAC;gBAEF,IAAI,GAAG;;0BAEa,IAAI;qBACT,YAAY;oBACb,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;sBACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;EAsB7C,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,uBAAuB,CAAC;gBACzC,IAAI,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC;iBAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,IAAI,gBAAgB,CAAC;gBAChD,IAAI,GAAG;;0BAEa,IAAI;;;;8BAIA,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;yBAC1B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;mCAG/B,UAAU;;;;EAI3C,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5E,8BAA8B;gBAC9B,MAAM,qBAAqB,GAAG,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC;gBAChE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC;gBAElC,IAAI,GAAG;;;;;;;EAOX,eAAe;;;;;;;;0BAQS,IAAI;;kCAEI,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;mBACpD,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA8BJ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAiCxD,SAAS,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM;;;;;;;;;;;;EAY3D,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAClC,yDAAyD;gBACzD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,IAAI,SAAS,CAAC;gBAC3D,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,EAAE,eAAe,IAAI,SAAS,CAAC;gBACvE,IAAI,GAAG;;;0BAGa,IAAI;0CACY,eAAe,gBAAgB,SAAS;EAChF,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAClC,yDAAyD;gBACzD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,IAAI,SAAS,CAAC;gBAC3D,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,EAAE,eAAe,IAAI,SAAS,CAAC;gBACvE,IAAI,GAAG;;;0BAGa,IAAI;0CACY,eAAe,gBAAgB,SAAS;EAChF,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;gBACpC,qCAAqC;gBACrC,IAAI,GAAG;;;0BAGa,IAAI;;EAE5B,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,6BAA6B;gBAC7B,kDAAkD;gBAClD,MAAM,SAAS,GAAa,EAAE,CAAC;gBAC/B,IAAI,aAAa,EAAE,CAAC;oBAClB,IAAK,aAAqB,CAAC,QAAQ;wBAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAChE,IAAI,aAAa,CAAC,MAAM;wBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACnD,IAAI,aAAa,CAAC,QAAQ;wBAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACvD,IAAI,aAAa,CAAC,MAAM;wBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACnD,IAAI,aAAa,CAAC,KAAK;wBAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACN,mDAAmD;oBACnD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC;gBAED,IAAI,GAAG;;;0BAGa,IAAI;6BACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;EACpD,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,+BAA+B;gBAC/B,IAAI,GAAG;;;0BAGa,IAAI;;EAE5B,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC1B,6DAA6D;gBAC7D,MAAM,qBAAqB,GAAG,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC;gBAChE,IAAI,GAAG;;;;;;0BAMa,IAAI;;kCAEI,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;;;;;;oBAMnD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;EAsB9E,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnC,oCAAoC;gBACpC,IAAI,GAAG;;;0BAGa,IAAI;;EAE5B,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,iCAAiC;gBACjC,IAAI,GAAG;;;0BAGa,IAAI;;EAE5B,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,wDAAwD;gBACxD,IAAI,GAAG;;;0BAGa,IAAI;;EAE5B,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,IAAI,kBAAkB,CAAC;gBAClD,IAAI,GAAG;;0BAEa,IAAI;;;qCAGO,UAAU;;;EAG7C,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,iCAAiC;gBACjC,sDAAsD;gBACtD,MAAM,QAAQ,GAAG,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC;gBACnD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC;gBAC/B,MAAM,SAAS,GAAG,EAAE,CAAC,CAAE,6CAA6C;gBAEpE,6CAA6C;gBAC7C,IAAI,iBAAiB,GAAQ;oBAC3B,SAAS,EAAE,WAAW;oBACtB,SAAS,EAAE,EAAE;oBACb,aAAa,EAAE,OAAO;iBACvB,CAAC;gBAEF,IAAI,CAAC;oBACH,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;wBACb,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACpC,iBAAiB,GAAG,EAAE,GAAG,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAAC;oBAC1D,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;gBAED,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,IAAI,SAAS,CAAC;gBAE3D,IAAI,GAAG;;;0BAGa,IAAI;;;kBAGZ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC1B,MAAM;mBACH,SAAS;mBACT,iBAAiB,CAAC,SAAS;mBAC3B,iBAAiB,CAAC,SAAS;uBACvB,iBAAiB,CAAC,aAAa;mBACnC,SAAS;;;EAG1B,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,4BAA4B;gBAC5B,MAAM,qBAAqB,GAAG,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC;gBAChE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;gBAE9B,IAAI,GAAG;;;0BAGa,IAAI;mBACX,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;;;;cAI3C,IAAI;iCACe,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;;;;EAIpE,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChC,iCAAiC;gBACjC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,IAAI,SAAS,CAAC;gBAC3D,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,WAAW,IAAI,SAAS,CAAC;gBAC/D,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,EAAE,eAAe,IAAI,SAAS,CAAC;gBAEvE,IAAI,GAAG;;;0BAGa,IAAI;qBACT,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;;;;;;mBAOnB,SAAS;qBACP,WAAW;yBACP,eAAe;;;EAGtC,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAClC,mCAAmC;gBACnC,MAAM,qBAAqB,GAAG,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC;gBAChE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,cAAc,CAAC;gBAEtC,IAAI,GAAG;;;0BAGa,IAAI;mBACX,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;;;;cAI3C,IAAI;iCACe,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;;;;EAIpE,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC1B,2BAA2B;gBAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,uBAAuB,IAAI,EAAE,CAAC;gBACjD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC;gBAE7B,IAAI,GAAG;;;0BAGa,IAAI;;;kBAGZ,QAAQ;cACZ,IAAI;;;EAGhB,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnC,oCAAoC;gBACpC,MAAM,MAAM,GAAG,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC;gBACjD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC;gBAEvC,IAAI,GAAG;;;0BAGa,IAAI;;;gBAGd,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;cACxB,IAAI;;;EAGhB,CAAC;YACC,CAAC;iBAAM,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnC,oCAAoC;gBACpC,MAAM,MAAM,GAAG,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC;gBACjD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC;gBAEvC,IAAI,GAAG;;;0BAGa,IAAI;;;gBAGd,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;cACxB,IAAI;;;EAGhB,CAAC;YACE,CAAC;iBAAM,CAAC;gBACP,qEAAqE;gBACrE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC;gBAChD,IAAI,GAAG;;0BAEa,IAAI;;;;8BAIA,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;yBAC1B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;mCAG/B,UAAU;;;;EAI3C,CAAC;YACC,CAAC;QACD,CAAC,CAAC,8BAA8B;QAEhC,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,6CAA6C;IAC7C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,IAAI,KAAK,WAAW;YAAE,SAAS;QAEnC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;QACnE,+CAA+C;QAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACpC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAsB,CAAC;YACpE,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,KAAK,KAAK,EAAE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvE,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAEzC,mFAAmF;YACnF,iFAAiF;YACjF,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,QAAQ,CAAC,yCAAyC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,oCAAoC,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,2EAA2E,CAAC,CAAC;gBACnN,oDAAoD;gBACpD,MAAM,IAAI,GAAG,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC/D,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC,sHAAsH,UAAU,4OAA4O,OAAO,oDAAoD,CAAC,CAAC;gBACrb,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACvD,WAAW,CAAC,IAAI,CAAC,UAAU,OAAO,YAAY,OAAO,IAAI,CAAC,CAAC;YAE3D,8CAA8C;YAC9C,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClF,IAAI,oBAAoB,GAAG,YAAY,CAAC;YAIxC,MAAM,IAAI,GAAG,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvE,8CAA8C;YAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;YAE3E,qFAAqF;YACrF,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACjE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAEjD,uEAAuE;YACvE,MAAM,mBAAmB,GAAG;gBAC1B,QAAQ;gBACR,QAAQ;gBACR,qBAAqB;gBACrB,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;oBAC3C,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB;gBAC7D,uBAAuB;gBACvB,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;oBAClC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc;aACjD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEZ,MAAM,CAAC,IAAI,CAAC,kCAAkC,UAAU,KAAK,oBAAoB,qCAAqC,mBAAmB,yBAAyB,OAAO,GAAG,cAAc,+CAA+C,CAAC,CAAC;QAC7O,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAErG,8FAA8F;QAC9F,MAAM,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,oFAAoF;QACpF,MAAM,QAAQ,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtD,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5H,MAAM,IAAI,GAAG,+BAA+B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,IAAI,yCAAyC,gBAAgB,KAAK,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,uBAAuB,CAAC;QAE5N,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,aAAa;IACzB,MAAM,MAAM,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;IACrC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,kBAAkB;IAC/C,OAAO,MAAM,CAAC;AAClB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sitepaige-mcp-server",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "description": "MCP server for generating web applications using SitePaige AI. Generate frontend (FREE/12 credits) then optionally add backend (50 credits)",
6
6
  "keywords": [