diff --git a/activepieces-fork/.nx/cache/cloud/verify.lock b/activepieces-fork/.nx/cache/cloud/verify.lock index c0912985..0863ca87 100644 --- a/activepieces-fork/.nx/cache/cloud/verify.lock +++ b/activepieces-fork/.nx/cache/cloud/verify.lock @@ -1 +1 @@ -1766103708902 \ No newline at end of file +1766127780415 \ No newline at end of file diff --git a/activepieces-fork/packages/ee/shared/src/lib/billing/index.ts b/activepieces-fork/packages/ee/shared/src/lib/billing/index.ts index 09ddb765..841c9cc4 100644 --- a/activepieces-fork/packages/ee/shared/src/lib/billing/index.ts +++ b/activepieces-fork/packages/ee/shared/src/lib/billing/index.ts @@ -93,7 +93,7 @@ export const STANDARD_CLOUD_PLAN: PlatformPlanWithOnlyLimits = { } export const OPEN_SOURCE_PLAN: PlatformPlanWithOnlyLimits = { - embeddingEnabled: false, + embeddingEnabled: true, globalConnectionsEnabled: false, customRolesEnabled: false, mcpsEnabled: true, @@ -107,9 +107,9 @@ export const OPEN_SOURCE_PLAN: PlatformPlanWithOnlyLimits = { analyticsEnabled: true, showPoweredBy: false, auditLogEnabled: false, - managePiecesEnabled: false, - manageTemplatesEnabled: false, - customAppearanceEnabled: false, + managePiecesEnabled: true, + manageTemplatesEnabled: true, + customAppearanceEnabled: true, teamProjectsLimit: TeamProjectsLimit.NONE, projectRolesEnabled: false, customDomainsEnabled: false, diff --git a/activepieces-fork/packages/pieces/community/smoothschedule/src/index.ts b/activepieces-fork/packages/pieces/community/smoothschedule/src/index.ts index 3c4960d2..1379b40a 100644 --- a/activepieces-fork/packages/pieces/community/smoothschedule/src/index.ts +++ b/activepieces-fork/packages/pieces/community/smoothschedule/src/index.ts @@ -5,7 +5,7 @@ import { createEventAction, findEventsAction, updateEventAction, cancelEventActi import { listResourcesAction } from './lib/actions/list-resources'; import { listServicesAction } from './lib/actions/list-services'; import { listInactiveCustomersAction } from './lib/actions/list-inactive-customers'; -import { eventCreatedTrigger, eventUpdatedTrigger, eventCancelledTrigger } from './lib/triggers'; +import { eventCreatedTrigger, eventUpdatedTrigger, eventCancelledTrigger, eventStatusChangedTrigger } from './lib/triggers'; import { API_URL } from './lib/common'; /** @@ -54,8 +54,10 @@ export type SmoothScheduleAuth = { props: SmoothScheduleAuthProps; }; -// SmoothSchedule logo as base64-encoded SVG (indigo #6366f1) -const SMOOTHSCHEDULE_LOGO = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzMwIDExMDAiIGZpbGw9IiM2MzY2ZjEiPjxwYXRoIGQ9Ik05NjkuNjQ1NTA4LDc3MS42NjcxNzUgQzk4My43MzQwMDksNzYwLjkzMjY3OCA5OTguMDI0MTcwLDc1MC45ODE5OTUgMTAxMS4xMzU5MjUsNzM5LjY2NTk1NSBDMTAyMC4yMzk4NjgsNzMxLjgwOTAyMSAxMDI3LjgxMTQwMSw3MjIuMTUzMTM3IDEwMzUuODkwNjI1LDcxMy4xNDIyMTIgQzEwMzkuNjM1ODY0LDcwOC45NjQ5NjYgMTA0Mi45ODgwMzcsNzA0LjQzMTk0NiAxMDQ2LjQ1NTkzMyw3MDAuMDExMjMwIEMxMDQ3LjQyNzk3OSw2OTguNzcxOTczIDEwNDguMTc3OTc5LDY5Ny4zNTg0NTkgMTA0OC4zMTg0ODEsNjk1LjI2Njk2OCBDMTA0My4yMzMxNTQsNjk4LjM1NTI4NiAxMDM4LjA2ODg0OCw3MDEuMzIxNTMzIDEwMzMuMDc2MTcyLDcwNC41NTI5NzkgQzEwMTEuMjg1MDk1LDcxOC42NTY1NTUgOTg3LjYzMzExOCw3MjkuMDAyNzQ3IDk2My44NjU2NjIsNzM5LjE1NDU0MSBDOTI2LjgxNjQ2Nyw3NTQuOTc5MzA5IDg4OC4zMzAzODMsNzY2LjUyNDg0MSA4NDkuMzM1MjY2LDc3Ni4wOTYyNTIgQzgxNi42NjExOTQsNzg0LjExNjE1MCA3ODMuNTcxODk5LDc5MC41NDA1MjcgNzUwLjUxMDU1OSw3OTYuODU0ODU4IEM3MjUuODc5ODIyLDgwMS41NTkwODIgNzAxLjA0MDQ2Niw4MDUuMjM1NjU3IDY3Ni4yMTk4NDksODA4Ljg2Mjk3NiBDNjUwLjczMDA0Miw4MTIuNTg4MDEzIDYyNS4wMjA4NzQsODE0LjkzNjgyOSA1OTkuNjQwMDE1LDgxOS4yNTM3ODQgQzU2MS4wODgwMTMsODI1LjgxMDkxMyA1MjIuNTQzODIzLDgzMi42NzAyODggNDg0LjM2MDQxMyw4NDEuMDU4NTk0IEM0NTMuNTk0MDI1LDg0Ny44MTc1NjYgNDIzLjA0NTY1NCw4NTYuMDEwMzc2IDM5My4wMDA0NTgsODY1LjQ3MTkyNCBDMzY4LjYwNzE0Nyw4NzMuMTUzNjg3IDM0NC45ODUxMzgsODgzLjM3MDQ4MyAzMjEuMjUxMDM4LDg5My4wMjgxMzcgQzMwNi41NDM2NzEsODk5LjAxMjc1NiAyOTEuODQwNzkwLDkwNS4yNjY4NDYgMjc3Ljg5NTk2Niw5MTIuODA1Nzg2IEMyNTcuMzkzNDMzLDkyMy44OTAxOTggMjM3LjIzOTI0Myw5MzUuNzA5MjkwIDIxNy41NTczNzMsOTQ4LjE5MzkwOSBDMjAwLjU2MTU2OSw5NTguOTc0NjcwIDE4My42NzExMTIsOTcwLjE5MDQ5MSAxNjguMTE4Nzc0LDk4Mi45MDczNDkgQzE1MC4xOTA1MjEsOTk3LjU2NzA3OCAxMzMuNDU0NTc1LDEwMTMuNzQ5ODE3IDExNi44NjAyOTgsMTAyOS45NDY3NzcgQzEwOS4zNDM4MTksMTAzNy4yODMzMjUgMTAzLjQwNzkyMSwxMDQ2LjI0MTY5OSA5Ni43ODUzMDEsMTA1NC40ODg2NDcgQzk1Ljk2MzYxNSwxMDU1LjUxMTk2MyA5NS4zMjkwODYsMTA1Ni42ODU1NDcgOTQuNjA3ODExLDEwNTcuNzg5NTUxIEM5NC4wODc0MTgsMTA1Ny40Mjg4MzMgOTMuNTY3MDI0LDEwNTcuMDY4MjM3IDkzLjA0NjYzMSwxMDU2LjcwNzUyMCBDOTUuMTQzMDM2LDEwNTEuOTAyNzEwIDk3LjAzODE1NSwxMDQ2Ljk5NzY4MSA5OS4zNjkzNjIsMTA0Mi4zMDk2OTIgQzExMi4wNzAyMjksMTAxNi43Njg2MTYgMTI2LjYwNTI2Myw5OTIuMjY1Njg2IDE0My41NjA1NzcsOTY5LjM2MjE4MyBDMTU0LjM3MTAxNyw5NTQuNzU5MTU1IDE2Ni4yNjg1MjQsOTQwLjkwNTIxMiAxNzguMzUwMDIxLDkyNy4zMTIxMzQgQzE5NS4zMzc0MzMsOTA4LjE5OTQwMiAyMTQuNTg4NTAxLDg5MS40NjA0NDkgMjM0LjE2NjgwOSw4NzQuOTk5MTQ2IEMyNTcuMTgwNjY0LDg1NS42NDkyOTIgMjgxLjY0OTcxOSw4MzguNDI3NDI5IDMwNy41NzM3OTIsODIzLjQ3MjcxNyBDMzM2LjI0NzEzMSw4MDYuOTMyMTI5IDM2NS40Nzg3NjAsNzkxLjI4NTY0NSAzOTYuNjIzODQwLDc3OS42MTQxMzYgQzQxMi4xODQ1MDksNzczLjc4Mjc3NiA0MjcuMzc1NjcxLDc2Ni44OTg3NDMgNDQzLjExMzQ5NSw3NjEuNjIyOTg2IEM0NjQuMzg0MzY5LDc1NC40OTIzNzEgNDg1Ljg0NjAwOCw3NDcuNzg2MDExIDUwNy41NDAxOTIsNzQyLjA5NjMxMyBDNTQwLjk3MzY5NCw3MzMuMzI3MzkzIDU3NC41NTQwNzcsNzI1LjAzMzM4NiA2MDguMzAwMDQ5LDcxNy41NjgzNTkgQzYzNC4wNzA4NjIsNzExLjg2NzU1NCA2NjAuMjA0MjI0LDcwNy44MTMyMzIgNjg2LjE1ODg3NSw3MDIuOTM0MDgyIEM3MTEuNDYxNTQ4LDY5OC4xNzc0OTAgNzM2LjczMTI2Miw2OTMuMjQ1MTc4IDc2Mi4wMzcyMzEsNjg4LjUwNjQ3MCBDNzczLjk5Njc2NSw2ODYuMjY2OTA3IDc4Ni4xMTcwNjUsNjg0Ljc4MjY1NCA3OTcuOTY3MDQxLDY4Mi4wODc4MzAgQzgxMy4yMjg3NjAsNjc4LjYxNzI0OSA4MjguNDE3MzU4LDY3NC42OTM5NzAgODQzLjQxMzE0Nyw2NzAuMjE0NzIyIEM4NjguNDMxMzM1LDY2Mi43NDIxMjYgODkzLjgxNjQ2Nyw2NTYuMDU1NDgxIDkxOC4wNDYzMjYsNjQ2LjUwMDI0NCBDOTQ3LjI0OTMyOSw2MzQuOTgzOTQ4IDk3NS43ODI4OTgsNjIxLjY4NzE5NSAxMDAxLjU5NzkwMCw2MDMuMTQ4OTI2IEMxMDE5LjYzODY3Miw1OTAuMTkzNTQyIDEwMzguMTEyNDI3LDU3Ny42Mzk1MjYgMTA1Ny4zOTc3MDUsNTY2LjY3MzIxOCBDMTA3OC40NTgwMDgsNTU0LjY5NzQ0OSAxMTAwLjI5MDc3MSw1NDQuMjY2Nzg1IDExMjMuMjk2NTA5LDUzNS44MzU2OTMgQzExNTMuOTY4NzUwLDUyNC41OTUwMzIgMTE4NS42MDY1NjcsNTE3LjM0ODUxMSAxMjE2Ljg5NTAyMCw1MDguNjIzNTY2IEMxMjI4LjE3MDg5OCw1MDUuNDc5MjE4IDEyMzkuNjcyMjQxLDUwMy4xNDA3MTcgMTI1MS4wODA0NDQsNTAwLjQ3NjgwNyBDMTI1Mi4xNDQ2NTMsNTAwLjIyODI3MSAxMjUzLjI4MDM5Niw1MDAuMjg1NjE0IDEyNTUuNzM5OTkwLDUwMC4wOTY3NDEgQzEyNTMuODUzMTQ5LDUwMi4yODczMjMgMTI1Mi44MDgzNTAsNTAzLjY0ODY1MSAxMjUxLjYxMzg5Miw1MDQuODYyNzkzIEMxMjQ0LjM4NzU3Myw1MTIuMjA4MTkxIDEyMzcuMTUxNjExLDUxOS40NTM5NzkgMTIzMC42NzM0NjIsNTI3LjU4NTgxNSBDMTIxOC4wODk2MDAsNTQzLjM4MTgzNiAxMjA3Ljg3MzUzNSw1NjAuNTQ3ODUyIDExOTkuMjk3NjA3LDU3OC42NTUzOTYgQzExOTEuMzgxMTA0LDU5NS4zNzA4NTAgMTE4NC40NjQ3MjIsNjEyLjU2Mzg0MyAxMTc3LjI0NzkyNSw2MjkuNjA1Nzc0IEMxMTY4LjMyNjY2MCw2NTAuNjcyMzAyIDExNTguMTQ0MTY1LDY3MS4wNzU5MjggMTE0Ni4wMTczMzQsNjkwLjQ5NjAzMyBDMTEzNS4yMTQ0NzgsNzA3Ljc5NTg5OCAxMTIzLjIwMTkwNCw3MjQuMTg0NTcwIDExMDkuMzI5MTAyLDczOS4xNTM4MDkgQzEwOTguNzE3NDA3LDc1MC42MDQxODcgMTA4OC40MDUxNTEsNzYyLjM5MTI5NiAxMDc3LjEwMDA5OCw3NzMuMTIyOTg2IEMxMDY2LjMyMTY1NSw3ODMuMzU0Njc1IDEwNTQuMzQwMDg4LDc5Mi4zMDkwODIgMTA0My4wNDgzNDAsODAyLjAxMjA4NSBDMTAyMi44MTI0MzksODE5LjQwMDc1NyA5OTkuNjc0NTYxLDgzMi40MjYyNzAgOTc2LjMxNjE2Miw4NDQuNzMxODczIEM5NTYuMDE5Nzc1LDg1NS40MjQzMTYgOTM0Ljg4ODI0NSw4NjQuOTI3NTUxIDkxMy4zMDg4MzgsODcyLjY4MzQxMSBDODg5LjExMzIyMCw4ODEuMzc5NjM5IDg2NC4yMjI5NjEsODg4LjQ1MjY5OCA4MzkuMjA4MDY5LDg5NC40NTIzMzIgQzgyMi4xMTIxMjIsODk4LjU1MjY3MyA4MDQuMzA1NzI1LDg5OS43Njk0MDkgNzg2Ljc3NzI4Myw5MDEuOTU3MzM2IEM3NzYuODIwNjc5LDkwMy4yMDAwNzMgNzY2Ljc4NDExOSw5MDMuODAyMzY4IDc1NS42ODc4MDUsOTA0Ljc5MDY0OSBDNzU3LjcxNDUzOSw5MDYuMjE4OTMzIDc1OS4wMDM2NjIsOTA3LjM2OTA4MCA3NjAuNDg5ODA3LDkwOC4xMzg2NzIgQzc4My42NjgwOTEsOTIwLjE0MDA3NiA4MDcuMjg0NzkwLDkzMS4wMjA2OTEgODMyLjQ2MjIxOSw5MzguMzU5Mzc1IEM4NTUuOTA2ODYwLDk0NS4xOTMwNTQgODc5LjU4MzE5MSw5NTEuMDMwMzM0IDkwMy44MjMzNjQsOTUzLjczNjUxMSBDOTE5LjYxNDM4MCw5NTUuNDk5NDUxIDkzNS42NTA0NTIsOTU2LjI0Mjg1OSA5NTEuNTMwMDkwLDk1NS43OTQzMTIgQzk4NS4yMTMzMTgsOTU0Ljg0MjgzNCAxMDE4LjI0OTc1Niw5NDkuMTE2MjcyIDEwNTAuNDI1MDQ5LDkzOC45ODA5NTcgQzEwOTAuODU5MTMxLDkyNi4yNDQxNDEgMTEyOC4zNTAyMjAsOTA3LjU3NzIwOSAxMTYyLjI4MTQ5NCw4ODIuMDc2NTM4IEMxMTcyLjA1NDU2NSw4NzQuNzMxNjI4IDExODEuNTI4MzIwLDg2Ni45MjI2MDcgMTE5MC42MDQzNzAsODU4LjczMzQ1OSBDMTIwMS4xNzcyNDYsODQ5LjE5NDAzMSAxMjExLjUwMzQxOCw4MzkuMzI4NDkxIDEyMjEuMzI3NzU5LDgyOS4wMjM3NDMgQzEyMzguMDE3NTc4LDgxMS41MTc5NDQgMTI1My41MTY5NjgsNzkyLjk4MDUzMCAxMjY1LjkzNjQwMSw3NzIuMTExODE2IEMxMjc0LjUwMTcwOSw3NTcuNzE5MjM4IDEyODMuMDkyMDQxLDc0My4zMjA3NDAgMTI5MS4wMDE3MDksNzI4LjU2NTkxOCBDMTI5Ni4yMjg2MzgsNzE4LjgxNTc5NiAxMzAwLjUwNDYzOSw3MDguNTI4NDQyIDEzMDQuNzkzNDU3LDY5OC4zMDg0MTEgQzEzMTUuNzA3Mjc1LDY3Mi4zMDE3NTggMTMyMi44OTM3OTksNjQ1LjE1NDE3NSAxMzI3LjgzOTYwMCw2MTcuNDc4MDg4IEMxMzMwLjQyMDQxMCw2MDMuMDM2NjIxIDEzMzEuOTExMDExLDU4OC4zMzY3MzEgMTMzMi44Njk5OTUsNTczLjY4NjU4NCBDMTMzMy44Nzg5MDYsNTU4LjI3NTc1NyAxMzM0LjQwNzQ3MSw1NDIuNzU0MDg5IDEzMzMuNzY1NTAzLDUyNy4zMzgzMTggQzEzMzMuMTkwMTg2LDUxMy41MjY2MTEgMTMzMC42NTIzNDQsNDk5LjgwMTcyNyAxMzI5LjI1NzQ0Niw0ODYuMDEwNTI5IEMxMzI5LjEyOTg4Myw0ODQuNzQ4NDQ0IDEzMzAuNzM1MTA3LDQ4Mi40ODcwMzAgMTMzMi4wMTMzMDYsNDgyLjAzMjE5NiBDMTM0Ny40MzA3ODYsNDc2LjU0NjQxNyAxMzYzLjA4Mzg2Miw0NzEuNjk4Mzk1IDEzNzguMzg0MDMzLDQ2NS45MTM0NTIgQzEzOTUuODU2ODEyLDQ1OS4zMDcwNjggMTQxMy4xMjQzOTAsNDUyLjEzMjA1MCAxNDMwLjMxMzg0Myw0NDQuODExMjc5IEMxNDQyLjcyMDcwMyw0MzkuNTI3Mzc0IDE0NTUuMjA0ODM0LDQzNC4yNDcyODQgMTQ2Ny4wMzMwODEsNDI3LjgyMTQ3MiBDMTQ4OC42ODI4NjEsNDE2LjA2MDA1OSAxNTEwLjEzMzE3OSw0MDMuODgwNDMyIDE1MzEuMTgzMTA1LDM5MS4wODAwMTcgQzE1NTMuMTkyNTA1LDM3Ny42OTYxMzYgMTU3My40MTMwODYsMzYxLjc0MDcyMyAxNTkyLjcxNzI4NSwzNDQuNzAwNzc1IEMxNjAyLjg1MDgzMCwzMzUuNzU1OTUxIDE2MTIuNjAzMDI3LDMyNi4zNzM0MTMgMTYyMi4zODQ3NjYsMzE3LjAzOTAwMSBDMTYyNS43MzM2NDMsMzEzLjg0MzE0MCAxNjI4LjYxNjU3NywzMTAuMTYyNjU5IDE2MzEuNzgyNTkzLDMwNi43NjkwNzMgQzE2MzIuNjAxOTI5LDMwNS44OTEwMjIgMTYzMy42ODYxNTcsMzA1LjI2MDE5MyAxNjM0LjY0ODY4MiwzMDQuNTE1NzQ3IEMxNjM0Ljk4ODc3MCwzMDQuNzcxNDg0IDE2MzUuMzI4OTc5LDMwNS4wMjcxOTEgMTYzNS42NjkwNjcsMzA1LjI4MjkyOCBDMTYzMy4yOTE1MDQsMzA5LjQ2NTI3MSAxNjMxLjIwNzY0MiwzMTMuODUwMzcyIDE2MjguNDg1MjI5LDMxNy43OTQ3MzkgQzE2MTYuODUwNDY0LDMzNC42NTIwMzkgMTYwNS44MTcwMTcsMzUyLjAxMTcxOSAxNTkzLjA0MTg3MCwzNjcuOTY5NDIxIEMxNTgxLjE0NDE2NSwzODIuODMxNDUxIDE1NjguMDMwODg0LDM5Ni45MDQ2MzMgMTU1NC4xODA0MjAsNDA5Ljk3NzA4MSBDMTUzMi4wNDAxNjEsNDMwLjg3MzcxOCAxNTA4LjU3MDkyMyw0NTAuMzYyNzAxIDE0ODIuOTMyODYxLDQ2Ni45MTcyMDYgQzE0NjEuNjg0NjkyLDQ4MC42MzcwMjQgMTQ0MC4wOTk2MDksNDkzLjg2MTA4NCAxNDE4LjI4ODQ1Miw1MDYuNjY1MzQ0IEMxNDEyLjU5OTg1NCw1MTAuMDA0ODgzIDE0MTIuODc0MzkwLDUxNC4xOTk1ODUgMTQxMy4wMjUyNjksNTE5LjEyOTAyOCBDMTQxMy4zMzUzMjcsNTI5LjI1MjE5NyAxNDEzLjgzNzY0Niw1MzkuMzcyMzc1IDE0MTMuOTcwMDkzLDU0OS40OTc0OTggQzE0MTQuNDIwMDQ0LDU4My45MzIxMjkgMTQwOS40OTEwODksNjE3LjczMDIyNSAxNDAyLjQ4MTkzNCw2NTEuMzcxNjQzIEMxMzk2LjQ4OTc0Niw2ODAuMTMwODU5IDEzODguMjMyNTQ0LDcwOC4xNTAwMjQgMTM3Ni43Mzk3NDYsNzM1LjExMzI4MSBDMTM2NS45MDAxNDYsNzYwLjU0MzcwMSAxMzU0LjI0MzY1Miw3ODUuNjQ3MDk1IDEzMzguNzg5NjczLDgwOC43MzY0NTAgQzEzMjkuNTk1OTQ3LDgyMi40NzIxNjggMTMyMC44MTE3NjgsODM2LjUyMTQyMyAxMzEwLjkyOTU2NSw4NDkuNzQ2NjQzIEMxMjk5LjI2MzkxNiw4NjUuMzU4NTgyIDEyODcuMTQ3NDYxLDg4MC42NzYwODYgMTI3Mi42ODA5MDgsODkzLjk1MTQ3NyBDMTI2Ny4zMTI3NDQsODk4Ljg3NzUwMiAxMjYyLjk5NDE0MSw5MDQuOTYwODE1IDEyNTcuNTUyNDkwLDkwOS43OTA0MDUgQzEyNDQuNjg2NDAxLDkyMS4yMDkxMDYgMTIzMS43NDE4MjEsOTMyLjU4MjU4MSAxMjE4LjI0NTQ4Myw5NDMuMjM0ODYzIEMxMjA2LjMyNTMxNyw5NTIuNjQzMjUwIDExOTQuMDk2OTI0LDk2MS44NDIxNjMgMTE4MS4xNDY5NzMsOTY5LjcyNDM2NSBDMTE1OC45NDg0ODYsOTgzLjIzNTcxOCAxMTM1Ljk0NzAyMSw5OTUuNDMzODM4IDExMTEuNzQ5MDIzLDEwMDUuMDYyODA1IEMxMDk3Ljk0MDc5NiwxMDEwLjU1NzQ5NSAxMDg0LjAyMTg1MSwxMDE2LjA2OTQ1OCAxMDY5LjcwOTgzOSwxMDE5LjkzMjYxNyBDMTA0OS4zNDU1ODEsMTAyNS40Mjk0NDMgMTAyOC43MTg2MjgsMTAzMC4yNzYzNjcgMTAwNy45Mjk5OTMsMTAzMy43NzMwNzEgQzk5MS44NDE4NTgsMTAzNi40NzkyNDggOTc1LjM1NDI0OCwxMDM3LjE1NzcxNSA5NTkuMDA2MzQ4LDEwMzcuODY5ODczIEM5NDQuMTQ4NjgyLDEwMzguNTE3MDkwIDkyOS4xNzc0MjksMTAzOC44NTEzMTggOTE0LjM2OTg3MywxMDM3Ljc2OTE2NSBDODk1Ljk1MDUwMCwxMDM2LjQyMjk3NCA4NzcuNTA1MDA1LDEwMzQuMjgxODYwIDg1OS4zMjY4NDMsMTAzMS4wNDU4OTggQzgyOS4zNDgyMDYsMTAyNS43MDkzNTEgODAwLjE0NDcxNCwxMDE3LjA2NDU3NSA3NzEuOTI1NTk4LDEwMDUuNjcwMDQ0IEM3NTYuNjA4NzY1LDk5OS40ODUzNTIgNzQxLjYzOTA5OSw5OTIuMTA1NDA4IDcyNy4zMjQ2NDYsOTgzLjg1NTgzNSBDNzA4LjA2ODExNSw5NzIuNzU4MzAxIDY4OS40MDczNDksOTYwLjU4Mzk4NCA2NzAuODgwNjc2LDk0OC4yODQ3MjkgQzY2My42Nzk5OTMsOTQzLjUwNDMzMyA2NTcuNjAyOTY2LDkzNy4wNDk5MjcgNjUwLjkwMTQyOCw5MzEuNDkzOTU4IEM2NDQuMDk4MzI4LDkyNS44NTM3NjAgNjM2LjgwMDkwMyw5MjAuNzYyMDg1IDYzMC4zNTYxNDAsOTE0Ljc0ODQxMyBDNjE5LjkzMzA0NCw5MDUuMDIyNDYxIDYwOS45NTc4ODYsODk0LjgxMDEyMCA1OTkuOTQ1Njc5LDg4NC42NTMzMjAgQzU5Ni4yNTAxODMsODgwLjkwNDQ4MCA1OTIuOTg1MjI5LDg3Ni43MzEyMDEgNTg4LjczMjk3MSw4NzEuODQyMTAyIEM1OTMuMjM0OTg1LDg3MS4xMzY4NDEgNTk2LjgxMjUwMCw4NzAuNDM0MDIxIDYwMC40MjM3MDYsODcwLjAzNjEzMyBDNjEzLjU2Mzg0Myw4NjguNTg4MTM1IDYyNi43MjQ5NzYsODY3LjMyNzQ1NCA2MzkuODU5MTMxLDg2NS44Mjk3MTIgQzY0OS44NjM4OTIsODY0LjY4ODg0MyA2NTkuODY2Njk5LDg2My40NzM4NzcgNjY5LjgyMjgxNSw4NjEuOTc2MDEzIEM2ODcuNDUyNjM3LDg1OS4zMjM3MzAgNzA1LjA0NDQzNCw4NTYuNDIwMTY2IDcyMi42NTU0NTcsODUzLjY0MjgyMiBDNzM4Ljk2MDE0NCw4NTEuMDcxNTMzIDc1NS4zMzI1MjAsODQ4Ljg3MTgyNiA3NzEuNTU4NDExLDg0NS44NzYyODIgQzc4OC4xMDM4ODIsODQyLjgyMTcxNiA4MDQuNjE3Nzk4LDgzOS40NDIxMzkgODIwLjk0MjgxMCw4MzUuMzg4NjExIEM4MzguNjIxMDMzLDgzMC45OTkwODQgODU2LjE4OTY5Nyw4MjYuMDYxODkwIDg3My41NjI3NDQsODIwLjU5MDc1OSBDODgzLjM2NDU2Myw4MTcuNTA0MDg5IDg5Mi43OTkwNzIsODEzLjEzMDYxNSA5MDIuMTc4NTg5LDgwOC44NTMzOTQgQzkxNC44OTkxNzAsODAzLjA1MjczNCA5MjcuNjcwODk4LDc5Ny4yNjkzNDggOTM5LjkyNzI0Niw3OTAuNTc1MDczIEM5NTAuMTAyOTY2LDc4NS4wMTcwOTAgOTU5LjU2NTYxMyw3NzguMTUzNDQyIDk2OS42NDU1MDgsNzcxLjY2NzE3NSBNMTA1MC41ODE0MjEsNjk0LjA1MDcyMCBDMTA1MC43MzA5NTcsNjkzLjgwNjk0NiAxMDUwLjg4MDQ5Myw2OTMuNTYzMTcxIDEwNTEuMDI5OTA3LDY5My4zMTkyNzUgQzEwNTAuODEyNTAwLDY5My40Mzc5ODggMTA1MC41OTUwOTMsNjkzLjU1Njc2MyAxMDUwLjU4MTQyMSw2OTQuMDUwNzIweiIvPjxwYXRoIGQ9Ik01NTYuNjYwOTUwLDQ1Ny42MDM3NjAgQzU0MS4xMDkzNzUsNTMxLjI2Njg0NiA1NDcuMzk0MTY1LDYwMy40MTQ2MTIgNTY4LjM5OTI5Miw2NzUuMjE3Mjg1IEM0MzIuNTAzMDIxLDcwNC40Njk0MjEgMzA2Ljc0MTczMCw3NTQuMjEyMzQxIDE5OS45MTExOTQsODQ2Ljg0NTUyMCBDMjAwLjQ3OTE3Miw4NDUuMzAwMDQ5IDIwMC42MDIxNzMsODQ0LjEwNzQyMiAyMDEuMjQyMTU3LDg0My4zNTM4ODIgQzIwOS4zODU2MjAsODMzLjc2NTM4MSAyMTcuMzM3ODc1LDgyMy45OTQyNjMgMjI1Ljg3NzU3OSw4MTQuNzY4MzExIEMyMzQuMjA3NTA0LDgwNS43Njg5MjEgMjQyLjk4OTk5MCw3OTcuMTY2Njg3IDI1MS44OTYxNzksNzg4LjczMDQwOCBDMjU3LjM3OTEyMCw3ODMuNTM2NzQzIDI2My41OTA2MzcsNzc5LjEyMDcyOCAyNjkuMjQxMzMzLDc3NC4wOTI4OTYgQzI3My40NTk4MDgsNzcwLjMzOTQ3OCAyNzYuOTYwOTA3LDc2NS43Mjg4ODIgMjgxLjM3Njc0MCw3NjIuMjU3MzI0IEMyOTcuODM3NjQ2LDc0OS4zMTYyMjMgMzE0LjIzMDY1Miw3MzYuMjQ5MDIzIDMzMS4yNTU5ODEsNzI0LjA3ODEyNSBDMzQ1LjIzMTExMCw3MTQuMDg3NzY5IDM1OS45MTIxNzAsNzA1LjA0ODAzNSAzNzQuNTg0Njg2LDY5Ni4wODUxNDQgQzM4Mi40NTAxMzQsNjkxLjI4MDM5NiAzOTEuMDQ0NjE3LDY4Ny42ODU3OTEgMzk5LjE1MDcyNiw2ODMuMjUzNjAxIEM0MDcuMDcyOTY4LDY3OC45MjE5OTcgNDE0LjU5NzMyMSw2NzMuODMzODAxIDQyMi42NDI5NzUsNjY5Ljc2MjgxNyBDNDM4LjE1MTM5OCw2NjEuOTE2MDc3IDQ1My43OTg0OTIsNjU0LjMyMTU5NCA0NjkuNjAwMDA2LDY0Ny4wODUyMDUgQzQ3Ny41Mzk2NDIsNjQzLjQ0OTI4MCA0NzguMTEzODMxLDY0Mi40NzkwNjUgNDc2LjUxOTAxMiw2MzMuNzY2OTY4IEM0NzQuNTg5MjAzLDYyMy4yMjQ3MzEgNDczLjYzMDI0OSw2MTIuNTA4ODUwIDQ3MS45NDc2MDEsNjAxLjkxNjM4MiBDNDY3Ljc0OTg0Nyw1NzUuNDkwNzg0IDQ2OC42NTQ2MzMsNTQ4Ljg1NjMyMyA0NjkuMjM3MTIyLDUyMi4zMTY4MzMgQzQ2OS42MDIyOTUsNTA1LjY3Njg0OSA0NzEuNjE2Njk5LDQ4OC45ODg4OTIgNDc0LjA4MzI1Miw0NzIuNTAwNzkzIEM0NzcuMDU5MzU3LDQ1Mi42MDYzNTQgNDgwLjA2MDA1OSw0MzIuNTY0NTE0IDQ4NS4zMjA0OTYsNDEzLjIwMzMzOSBDNDkxLjE0ODY1MSwzOTEuNzUyODA4IDQ5OS4wOTkwNjAsMzcwLjgzMTg3OSA1MDYuOTcxNzQxLDM1MC4wMDAxODMgQzUxMi4zMjU4NjcsMzM1LjgzMjg1NSA1MTguNjIwMzYxLDMyMS45NTc5MTYgNTI1LjM5Nzg4OCwzMDguNDA0MDUzIEM1NDEuNDIxNTA5LDI3Ni4zNTk0NjcgNTYwLjE0NDk1OCwyNDUuODI4ODczIDU4Mi44NjIyNDQsMjE4LjE1Njk2NyBDNTk4LjAwNDA4OSwxOTkuNzEyNzY5IDYxNC44MjIzODgsMTgyLjUyMzYyMSA2MzEuOTQ5OTUxLDE2NS44NjE5NjkgQzY1Mi45NzIwNDYsMTQ1LjQxMTY2NyA2NzYuMzQwOTQyLDEyNy42OTUyMjkgNzAxLjEzNzU3MywxMTEuOTUzMTQ4IEM3MjYuOTAyOTU0LDk1LjU5NjAyNCA3NTMuNzgzMzI1LDgxLjQxMTI0MCA3ODIuNTQxMTM4LDcxLjA0MDY4OCBDNzk3LjYwMzYzOCw2NS42MDg5MDIgODEyLjYxNzEyNiw1OS44MjAxMzcgODI4LjA1Nzg2MSw1NS43MTY1OTEgQzg0NS44OTI2MzksNTAuOTc2Nzc2IDg2NC4xMjEyNzcsNDcuNjM0NjI0IDg4Mi4yODQ3OTAsNDQuMjU0NDk0IEM4OTAuMjE4NTA2LDQyLjc3ODA3MiA4OTguNDAzNTY0LDQyLjM0NjkxNiA5MDYuNDk1MzAwLDQyLjA4NjE3MCBDOTI0LjQ0MzIzNyw0MS41MDc4MTYgOTQyLjQ0NTEyOSw0MC40MzUwMTcgOTYwLjM0OTI0Myw0MS4yNDI3NDEgQzk3OS45NjMxMzUsNDIuMTI3NjAyIDk5OS41NjE4OTAsNDQuMzc3NjcwIDEwMTkuMDM5NjczLDQ2Ljk4NjA2MSBDMTA0My4xNzYyNzAsNTAuMjE4MzM0IDEwNjYuNzU4NTQ1LDU2LjM2NTQ4NiAxMDg5LjUwNjQ3MCw2NC45NjQwMDUgQzExMDYuNjYxODY1LDcxLjQ0ODU5MyAxMTIzLjMwNTU0Miw3OS4zNDI5NzIgMTEzOS45Njk0ODIsODcuMDU3OTc2IEMxMTYyLjgxMzg0Myw5Ny42MzQzNTQgMTE4My45NDE0MDYsMTExLjEyMzg0MCAxMjA0LjExMzAzNywxMjYuMTM4MjI5IEMxMjA3LjAwMzU0MCwxMjguMjg5NzAzIDEyMDkuOTQ2ODk5LDEzMC4zNzAwODcgMTIxMy43NjM5MTYsMTMzLjEzMzUzMCBDMTIxNi43ODM0NDcsMTI5LjkzMTIyOSAxMjIwLjMyNzAyNiwxMjYuNzE2NDA4IDEyMjMuMjIzNzU1LDEyMi45OTc2NTAgQzEyMzEuNDAwMjY5LDExMi41MDA2NzEgMTIzOS4yNzM1NjAsMTAxLjc2ODAyOCAxMjQ3LjM0Mzk5NCw5MS4xODc1NDYgQzEyNTEuMDUxMjcwLDg2LjMyNzI2MyAxMjU0Ljg4MTQ3MCw4MS41NTY2MzMgMTI1OC43ODg2OTYsNzYuODU1Nzk3IEMxMjU5Ljc2MDYyMCw3NS42ODY1MDggMTI2MS4yNDg0MTMsNzQuOTQ1OTAwIDEyNjIuNDk5MDIzLDc0LjAwODIwOSBDMTI2My4yOTI0ODAsNzUuMzQ1Njg4IDEyNjQuNDU3MDMxLDc2LjU5MDM0NyAxMjY0LjgxODcyNiw3OC4wMzU4NzMgQzEyNjcuMDQ2MTQzLDg2LjkzNzI0OCAxMjY4Ljg5MTcyNCw5NS45MzcxMTkgMTI3MS4yNDI0MzIsMTA0LjgwMzk3OCBDMTI3NS40OTY5NDgsMTIwLjg1MTE0MyAxMjgwLjE1NjM3MiwxMzYuNzkxMTUzIDEyODQuMzkwMzgxLDE1Mi44NDM1MjEgQzEyODkuNzMwOTU3LDE3My4wOTA4MjAgMTI5NC43MDcyNzUsMTkzLjQzNDE4OSAxMzAwLjAzODA4NiwyMTMuNjg0MTc0IEMxMzA1Ljk5ODI5MSwyMzYuMzI1MDg5IDEzMTIuMTc5NDQzLDI1OC45MDc4MDYgMTMxOC4yNjUwMTUsMjgxLjUxNTcxNyBDMTMxOC40NzIyOTAsMjgyLjI4NTQ2MSAxMzE4LjY4NTA1OSwyODMuMDUzNjgwIDEzMTkuMjQ5MzkwLDI4NS4xMTcxNTcgQzEyNDkuMDEwODY0LDI3MC40MTk0OTUgMTE3OS41NzU0MzksMjU1Ljg4OTg3NyAxMTA5LjE4MjEyOSwyNDEuMTU5NzkwIEMxMTI1LjMwMDY1OSwyMjQuMjQ3MzQ1IDExNDEuMDU3NzM5LDIwNy43MTQyMzMgMTE1Ny4yNzE3MjksMTkwLjcwMTc4MiBDMTE1MS41MzA1MTgsMTg2Ljc4NDkyNyAxMTQ2LjE5Mjg3MSwxODIuNjgxNzc4IDExNDAuNDI5NTY1LDE3OS4zMDUxOTEgQzExMjcuNDM3MTM0LDE3MS42OTMzMjkgMTExNC41MjMzMTUsMTYzLjg1OTM3NSAxMTAxLjA1Njc2MywxNTcuMTYzMzAwIEMxMDcyLjgwMzU4OSwxNDMuMTE0ODY4IDEwNDMuMTg3ODY2LDEzMi42MzMwNTcgMTAxMi4wMjUxNDYsMTI3LjMwNjY3OSBDOTk2LjkwMzgwOSwxMjQuNzIyMTMwIDk4MS41NDU3NzYsMTIzLjI5MjIzNiA5NjYuMjM1MzUyLDEyMi4xMTUzMTEgQzk1My42NjE2MjEsMTIxLjE0ODc0MyA5NDAuOTg1NTM1LDEyMC43ODc3OTYgOTI4LjM4MDAwNSwxMjEuMTE4MzI0IEM5MDUuNjg3MTM0LDEyMS43MTMzNDEgODgzLjI2Njg0NiwxMjUuMDMzMTM0IDg2MS4xNjQ0OTAsMTMwLjE1NjIzNSBDODI3Ljc1MDE4MywxMzcuOTAxMzIxIDc5Ni4wOTk0MjYsMTUwLjQ4MTM1NCA3NjUuOTQzNTQyLDE2Ni42NTk2ODMgQzc0NC4wNDU0MTAsMTc4LjQwNzc2MSA3MjMuMTAwNTg2LDE5MS43MTcwODcgNzA0Ljc0MTE1MCwyMDguNzE1ODIwIEM2OTIuODEyNTYxLDIxOS43NjAzMzAgNjgwLjE2ODk0NSwyMzAuMTExNjE4IDY2OC45ODAyMjUsMjQxLjg1NDQ5MiBDNjU3LjM2MDk2MiwyNTQuMDQ5MTc5IDY0Ni4xOTM5MDksMjY2Ljg5ODk1NiA2MzYuNDc4NTE2LDI4MC42MjkzMDMgQzYyMi44NDQ5MTAsMjk5Ljg5NzM2OSA2MDkuNzc1NzU3LDMxOS43MDgwNjkgNTk4LjI3ODkzMSwzNDAuMjk5Mjg2IEM1ODkuMjAzMzA4LDM1Ni41NTM5MjUgNTgyLjQxMDUyMiwzNzQuMTUzNTM0IDU3NS40MjY2MzYsMzkxLjQ4NzMzNSBDNTY3LjE5OTY0Niw0MTEuOTA2NTg2IDU2MS4zNDA1NzYsNDMzLjExMDc3OSA1NTcuMDYxNDAxLDQ1NC43MjUzMTEgQzU1Ni45MDA5NDAsNDU1LjUzNjIyNCA1NTYuODk4NjIxLDQ1Ni4zNzg0NzkgNTU2LjY2MDk1MCw0NTcuNjAzNzYweiIvPjxwYXRoIGQ9Ik0xNzA2LjA4NzQwMiwxMDcuMDY3MzE0IEMxNzAzLjA4OTExMSwxMTUuNjE5NDg0IDE3MDAuNDk5NTEyLDEyNC4zNDIyNDcgMTY5Ny4wMTU3NDcsMTMyLjY5MTkyNSBDMTY4Ni41MzY4NjUsMTU3LjgwNjkwMCAxNjc0LjU1MjQ5MCwxODIuMjI1ODYxIDE2NTguNjYyMTA5LDIwNC4zODcwMjQgQzE2NDYuNTQxMTM4LDIyMS4yOTA4MzMgMTYzMy44NjA4NDAsMjM3Ljg1OTgwMiAxNjIwLjQ0Nzc1NCwyNTMuNzQ5MTMwIEMxNjEwLjE3MTM4NywyNjUuOTIyNTE2IDE1OTguODg3MDg1LDI3Ny4zNzY2NzggMTU4Ny4xMTY2OTksMjg4LjEyNzc0NyBDMTU2Ny40NTgwMDgsMzA2LjA4Mzc0MCAxNTQ2LjQxNzg0NywzMjIuMzIwNTg3IDE1MjQuNDgzMzk4LDMzNy41NTIyNDYgQzE0OTUuMzY2NDU1LDM1Ny43NzE1MTUgMTQ2NC41MjE3MjksMzc0Ljc4NzY4OSAxNDMyLjQ3MDIxNSwzODkuNTIyMTU2IEMxNDA4Ljc2MTU5Nyw0MDAuNDIxMzU2IDEzODQuMzM4OTg5LDQwOS44NzMzMjIgMTM1OS44NTY0NDUsNDE4Ljk1MDM0OCBDMTMzOC42NTExMjMsNDI2LjgxMjI4NiAxMzE3LjAwNTg1OSw0MzMuNTM4NTc0IDEyOTUuMzc3NTYzLDQ0MC4xODk1NDUgQzEyODIuNTQxNjI2LDQ0NC4xMzY3NDkgMTI2OS4zMDM1ODksNDQ2Ljc1Njg2NiAxMjU2LjM1MzI3MSw0NTAuMzU3NjM1IEMxMjQzLjcyNTQ2NCw0NTMuODY4NjgzIDEyMzEuMjU2MjI2LDQ1Ny45NDUzMTIgMTIxOC42Nzc0OTAsNDYxLjYzNzc1NiBDMTE5Mi4yMTY2NzUsNDY5LjQwNTMzNCAxMTY1LjU4MTI5OSw0NzYuNjE2MjQxIDExMzkuMzA2Mzk2LDQ4NC45NjQ4MTMgQzExMjIuMDQ2NTA5LDQ5MC40NDg5NDQgMTEwNS4xNDM1NTUsNDk3LjE1ODkwNSAxMDg4LjM1NTk1Nyw1MDMuOTk1NDUzIEMxMDczLjk1NjE3Nyw1MDkuODU5NTg5IDEwNTkuNjUzOTMxLDUxNi4xMTM0MDMgMTA0NS44MzY2NzAsNTIzLjIyMTQzNiBDMTAyNy4wOTUzMzcsNTMyLjg2MjQ4OCAxMDA5Ljg0NjgwMiw1NDQuNzY1NTY0IDk5NC42NTY3OTksNTU5LjYzNzM5MCBDOTG2LjUyMTkxMiw1NjcuNjAxODA3IDk3Ny41OTAyNzEsNTc0LjgxNzMyMiA5NjguNTg2NzMxLDU4MS44MTU2MTMgQzk1MC45MDY3OTksNTk1LjU1NzY3OCA5MTkuMjYxMzUzLDU5MS4yNTc1MDcgOTAyLjk0OTUyNCw1NzUuNzUxMjIxIEM4OTAuMzkzMzExLDU2My44MTUwMDIgODgzLjk3Mjk2MSw1NDguNzk5OTI3IDg3OC4yNzAwMjAsNTMzLjI2NTEzNyBDODcyLjExODA0Miw1MTYuNTA2OTU4IDg2Mi4zNjQ5OTAsNTAyLjEwOTAwOSA4NTEuMDY4MTc2LDQ4OC41Njc0NzQgQzgzNy44MjQ2NDYsNDcyLjY5MjQ3NCA4MjQuNjc1NzgxLDQ1Ni43MzczOTYgODExLjMxNTMwOCw0NDAuOTYxNTE3IEM4MDMuNzE0NjYxLDQzMS45ODY2NjQgNzk1LjcwMzkxOCw0MjMuMzYwNDEzIDc4OC4wMDI5MzAsNDE0LjQ2ODkwMyBDNzc4LjQ3MDU4MSw0MDMuNDYyNzY5IDc2OS4xMDYxNDAsMzkyLjMxMTM0MCA3NTkuNTk2NjgwLDM4MS4yODUxMjYgQzc1Mi4yNDAyOTUsMzcyLjc1NTM3MSA3NDQuNjA2MjAxLDM2NC40NjAxMTQgNzM3LjQwMDg3OSwzNTUuODA2NDI3IEM3MzAuMTIwNTQ0LDM0Ny4wNjI1OTIgNzI3LjA3ODYxMywzMzcuMjEyOTIxIDczMC41NzE3NzcsMzI1LjgyNDU1NCBDNzM2LjU5ODE0NSwzMDYuMTc3NzY1IDc2MC40MDU0NTcsMjk5LjQzMjI4MSA3NzUuMTU5NzkwLDMxMy44NzQyMzcgQzc4OS4yODQzMDIsMzI3LjY5OTczOCA4MDIuNTY2NDA2LDM0Mi4zODU4MDMgODE2LjIxOTU0MywzNTYuNjkyOTAyIEM4MTYuNTY0Njk3LDM1Ny4wNTQ1MzUgODE2LjkxNjkzMSwzNTcuNDA5NDI0IDgxNy4yNjgyNTAsMzU3Ljc2NTAxNSBDODQ1LjEyNTQyNywzODUuOTU2NzI2IDg3Mi43MDc2NDIsNDE0LjQyOTI5MSA5MDEuMDI2MTIzLDQ0Mi4xNDk3MTkgQzkwOC40Njc4MzQsNDQ5LjQzNDI5NiA5MTguMDY4MDU0LDQ1NC41NzU3NzUgOTI2LjkwNjE4OSw0NjAuMzUwNzM5IEM5MzMuMDUxNzU4LDQ2NC4zNjYzMzMgOTM5LjYzNDQ2MCw0NjcuNzA3MTIzIDk0NS45Mjg4OTQsNDcxLjUwMzU0MCBDOTQ4LjQ2NzEwMiw0NzMuMDM0NDU0IDk1MC40MDQzNTgsNDcyLjYxMjg4NSA5NTIuNjQ0MDQzLDQ3MC44ODQ3NjYgQzk3Mi43NzExMTgsNDU1LjM1NTI1NSA5OTQuMzQ3MjI5LDQ0Mi4xNTY2NzcgMTAxNy4zNDQyOTksNDMxLjMzNjEyMSBDMTA0NS45NTQ4MzQsNDE3Ljg3NDI5OCAxMDc1LjAzMjk1OSw0MDUuNTM5Mzk4IDExMDUuMTc3NjEyLDM5NS44NjgwNzMgQzExMjcuMzU3NDIyLDM4OC43NTIxMzYgMTE0OS4zNTEwNzQsMzgwLjk0OTM3MSAxMTcxLjc5MjQ4MCwzNzQuNzc4OTMxIEMxMjA5LjUzMjEwNCwzNjQuNDAyMDA4IDEyNDcuNjQ2MTE4LDM1NS4zOTM0OTQgMTI4NS40NDMzNTksMzQ1LjIxNzE2MyBDMTMxNy45NzM5OTksMzM2LjQ1ODc0MCAxMzUwLjM5MTk2OCwzMjcuMjM5NzE2IDEzODIuNjU2MzcyLDMxNy41NDcxMTkgQzE0MTIuMjc4MTk4LDMwOC42NDg0MDcgMTQ0MS4xMTQwMTQsMjk3LjU4NTc4NSAxNDY5LjQzNDU3MCwyODUuMDE2NjYzIEMxNTExLjc3ODY4NywyNjYuMjIzNDUwIDE1NTIuMDIwMzg2LDI0My44NDE0MTUgMTU5MC4wODIwMzEsMjE3LjQ5Mzc0NCBDMTYwOC4xODMyMjgsMjA0Ljk2MzQ0MCAxNjI1Ljg4MTEwNCwxOTEuOTE0ODU2IDE2NDEuODc0MjY4LDE3Ni42ODUwNDMgQzE2NDkuNjgwNzg2LDE2OS4yNTA5NzcgMTY1OC40ODMzOTgsMTYyLjczMzYyNyAxNjY1LjUzNzk2NCwxNTQuNjY2OTMxIEMxNjc5LjEyOTUxNywxMzkuMTI1MjQ0IDE2OTEuNzk5NDM4LDEyMi43NzczNzQgMTcwNS4yODI4MzcsMTA2LjcyMjA2OSBDMTcwNS44Mzg2MjMsMTA2LjgwOTM0MSAxNzA1Ljk2MzEzNSwxMDYuOTM4MzM5IDE3MDYuMDg3NDAyLDEwNy4wNjczMTR6Ii8+PHBhdGggZD0iTTE3MDUuNTI3NzEwLDEwNi40ODY2OTQgQzE3MDUuNjMwODU5LDEwNS45MzY1MDEgMTcwNS45MDc4MzcsMTA1LjU2ODQyMCAxNzA2LjIxODYyOCwxMDUuMjMxNDA3IEMxNzA2LjI5NzQ4NSwxMDUuMTQ1OTM1IDE3MDYuNDgzNzY1LDEwNS4xNTk0NzcgMTcwNi45MzA2NjQsMTA1LjA1NTEzMCBDMTcwNi43NzExMTgsMTA1LjczMDk0OSAxNzA2LjY0MzkyMSwxMDYuMjY5MjcyIDE3MDYuMzAyMjQ2LDEwNi45Mzc0NjIgQzE3MDUuOTYzMTM1LDEwNi45MzgzMzkgMTcwNS44Mzg2MjMsMTA2LjgwOTM0MSAxNzA1LjUyNzcxMCwxMDYuNDg2Njk0eiIvPjxwYXRoIGQ9Ik0xOTYuODUwMzcyLDg0OS41MTUwNzYgQzE5Ni44OTg4NjUsODQ5Ljg1MjUzOSAxOTYuNzY3Nzc2LDg1MC4wNzYxNzIgMTk2LjYzNjY4OCw4NTAuMjk5ODA1IEMxOTYuNjQ4MDU2LDg1MC4wMDAzMDUgMTk2LjY1OTQwOSw4NDkuNzAwNzQ1IDE5Ni44NTAzNzIsODQ5LjUxNTA3NnoiLz48L3N2Zz4='; +// SmoothSchedule logo - hosted on Django backend +// For local development: http://lvh.me:8000/static/images/logo-branding.png +// For production: https://smoothschedule.com/static/images/logo-branding.png +const SMOOTHSCHEDULE_LOGO = 'http://lvh.me:8000/static/images/logo-branding.png'; export const smoothSchedule = createPiece({ displayName: 'SmoothSchedule', @@ -85,5 +87,5 @@ export const smoothSchedule = createPiece({ }, }), ], - triggers: [eventCreatedTrigger, eventUpdatedTrigger, eventCancelledTrigger], + triggers: [eventCreatedTrigger, eventUpdatedTrigger, eventCancelledTrigger, eventStatusChangedTrigger], }); diff --git a/activepieces-fork/packages/pieces/community/smoothschedule/src/lib/triggers/event-status-changed.ts b/activepieces-fork/packages/pieces/community/smoothschedule/src/lib/triggers/event-status-changed.ts new file mode 100644 index 00000000..06964d98 --- /dev/null +++ b/activepieces-fork/packages/pieces/community/smoothschedule/src/lib/triggers/event-status-changed.ts @@ -0,0 +1,148 @@ +import { createTrigger, TriggerStrategy, Property } from '@activepieces/pieces-framework'; +import { HttpMethod } from '@activepieces/pieces-common'; +import { smoothScheduleAuth, SmoothScheduleAuth } from '../../index'; +import { makeRequest } from '../common'; + +const TRIGGER_KEY = 'last_status_change_at'; + +// Event status options from SmoothSchedule backend +const EVENT_STATUSES = [ + { label: 'Any Status', value: '' }, + { label: 'Scheduled', value: 'SCHEDULED' }, + { label: 'En Route', value: 'EN_ROUTE' }, + { label: 'In Progress', value: 'IN_PROGRESS' }, + { label: 'Canceled', value: 'CANCELED' }, + { label: 'Completed', value: 'COMPLETED' }, + { label: 'Awaiting Payment', value: 'AWAITING_PAYMENT' }, + { label: 'Paid', value: 'PAID' }, + { label: 'No Show', value: 'NOSHOW' }, +]; + +export const eventStatusChangedTrigger = createTrigger({ + auth: smoothScheduleAuth, + name: 'event_status_changed', + displayName: 'Event Status Changed', + description: 'Triggers when an event status changes (e.g., Scheduled → In Progress).', + props: { + oldStatus: Property.StaticDropdown({ + displayName: 'Previous Status (From)', + description: 'Only trigger when changing from this status (optional)', + required: false, + options: { + options: EVENT_STATUSES, + }, + }), + newStatus: Property.StaticDropdown({ + displayName: 'New Status (To)', + description: 'Only trigger when changing to this status (optional)', + required: false, + options: { + options: EVENT_STATUSES, + }, + }), + }, + type: TriggerStrategy.POLLING, + async onEnable(context) { + // Store the current timestamp as the starting point + await context.store.put(TRIGGER_KEY, new Date().toISOString()); + }, + async onDisable(context) { + await context.store.delete(TRIGGER_KEY); + }, + async test(context) { + const auth = context.auth as SmoothScheduleAuth; + const { oldStatus, newStatus } = context.propsValue; + + const queryParams: Record = { + limit: '5', + }; + + if (oldStatus) { + queryParams['old_status'] = oldStatus; + } + if (newStatus) { + queryParams['new_status'] = newStatus; + } + + const statusChanges = await makeRequest>>( + auth, + HttpMethod.GET, + '/events/status_changes/', + undefined, + queryParams + ); + + return statusChanges; + }, + async run(context) { + const auth = context.auth as SmoothScheduleAuth; + const { oldStatus, newStatus } = context.propsValue; + + const lastChangeAt = await context.store.get(TRIGGER_KEY) || new Date(0).toISOString(); + + const queryParams: Record = { + changed_at__gt: lastChangeAt, + }; + + if (oldStatus) { + queryParams['old_status'] = oldStatus; + } + if (newStatus) { + queryParams['new_status'] = newStatus; + } + + const statusChanges = await makeRequest>>( + auth, + HttpMethod.GET, + '/events/status_changes/', + undefined, + queryParams + ); + + if (statusChanges.length > 0) { + // Update the last change timestamp + const maxChangedAt = statusChanges.reduce((max, c) => + c.changed_at > max ? c.changed_at : max, + lastChangeAt + ); + await context.store.put(TRIGGER_KEY, maxChangedAt); + } + + return statusChanges; + }, + sampleData: { + id: 1, + event_id: 12345, + event: { + id: 12345, + title: 'Consultation', + start_time: '2024-12-01T10:00:00Z', + end_time: '2024-12-01T11:00:00Z', + status: 'IN_PROGRESS', + service: { + id: 1, + name: 'Consultation', + }, + customer: { + id: 100, + first_name: 'John', + last_name: 'Doe', + email: 'john.doe@example.com', + }, + resources: [ + { id: 1, name: 'Dr. Smith', type: 'STAFF' }, + ], + }, + old_status: 'SCHEDULED', + old_status_display: 'Scheduled', + new_status: 'IN_PROGRESS', + new_status_display: 'In Progress', + changed_by: 'John Smith', + changed_by_email: 'john@example.com', + changed_at: '2024-12-01T10:05:00Z', + notes: 'Started working on the job', + source: 'mobile_app', + latitude: 40.7128, + longitude: -74.0060, + }, +}); diff --git a/activepieces-fork/packages/pieces/community/smoothschedule/src/lib/triggers/index.ts b/activepieces-fork/packages/pieces/community/smoothschedule/src/lib/triggers/index.ts index 063e0edb..f5acd2cc 100644 --- a/activepieces-fork/packages/pieces/community/smoothschedule/src/lib/triggers/index.ts +++ b/activepieces-fork/packages/pieces/community/smoothschedule/src/lib/triggers/index.ts @@ -1,3 +1,4 @@ export * from './event-created'; export * from './event-updated'; export * from './event-cancelled'; +export * from './event-status-changed'; diff --git a/activepieces-fork/packages/react-ui/src/app/routes/explore/index.tsx b/activepieces-fork/packages/react-ui/src/app/routes/explore/index.tsx index d8a065a6..3771717e 100644 --- a/activepieces-fork/packages/react-ui/src/app/routes/explore/index.tsx +++ b/activepieces-fork/packages/react-ui/src/app/routes/explore/index.tsx @@ -1,5 +1,5 @@ import { t } from 'i18next'; -import { ArrowLeft, Search, SearchX } from 'lucide-react'; +import { ArrowLeft, Search, SearchX, Sparkles, Building2 } from 'lucide-react'; import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -24,14 +24,19 @@ import { import { LoadingSpinner } from '@/components/ui/spinner'; import { TemplateCard } from '@/features/templates/components/template-card'; import { TemplateDetailsView } from '@/features/templates/components/template-details-view'; -import { useTemplates } from '@/features/templates/hooks/templates-hook'; +import { useAllTemplates } from '@/features/templates/hooks/templates-hook'; import { userHooks } from '@/hooks/user-hooks'; -import { PlatformRole, Template, TemplateType } from '@activepieces/shared'; +import { PlatformRole, Template } from '@activepieces/shared'; export const ExplorePage = () => { - const { filteredTemplates, isLoading, search, setSearch } = useTemplates({ - type: TemplateType.OFFICIAL, - }); + const { + filteredCustomTemplates, + filteredOfficialTemplates, + filteredTemplates, + isLoading, + search, + setSearch, + } = useAllTemplates(); const [selectedTemplate, setSelectedTemplate] = useState