Files
gw-svelte/mail-api/__pycache__/main.cpython-314.pyc
T

1755 lines
206 KiB
Plaintext
Raw Normal View History

2026-05-04 20:32:24 +12:00
+
2026-05-18 22:25:43 +12:00
j£Zã"ó€aEtÆ0t^RIt^RIt^RIHt^RIt^RIt^RIt^RIt^RI t ^RI
2026-05-04 20:32:24 +12:00
t
2026-05-18 22:25:43 +12:00
^RI t ^RI t ^RI
t
^RIt^RIHtHt^RIHt^RIHt^RIt^RIHtHtHt^RIHt^RIHt^R IHtH t ^RI!t"R
R lt#]#!4t$]PJPMR R
4PO4PQ4ERÃ9t)RRRR/t*RRlt+]+!4t,]PJPMRR4t-].!^<]/!]PJPMRR444t0].!R]/!]PJPMR]1!ERÄ4444t2^t3^t4].!^]/!]PJPMRR444t5].!^<]/!]PJPMRR444t6].!^<]/!]PJPMRR444t7].!R]/!]PJPMR]1!ERÅ4444t8]!]PJPMR R!44R", t9]!]PJPMR R!44R#, t:]!]PJPMR R!44R$, t;],R%,]n<],R&,t=],R',t>],R(,t?],R),t@],R*,tA],R+,tB],R,,tC],R-,tD],R.,tE],R/,tF],R0,tG],R1,tH],R2,tIR3tJ]$P—R4]-]PJPMR5R64]@]A]=]>]?]B]C]D]E]F]G]H]I4]!R7R87tL]>'d]>PQ4R98wd]>MR
2026-05-04 20:32:24 +12:00
tMR:R;ltNR<R=ltOR>R?ltPR@RAltQRBRCltRRDREltSRFRGltTRHRIltURJRKltVRLRMltWRNROltXRPRQltYRRRSltZRTRUlt[]N!4s\]^k]='d2\¸]=PO4PQ44/t^]^k/t_]^k/t`]^k]P!4sa]^k]R!4sb]^k/tc]^k/td]^k]!4tfRsg]^k]$P—RV]h!\¸44RWRXltiRYRZltjR[R\ltkR]R^ltlR_R`ltmRaRbltn]LPß]Rc.RdRe.Rc.Rf7]LPáRg4RhRil4tq!RjRk]4tr!RlRm]r4ts!RnRo]r4tt!RpRq]4tu!RrRs]4tv!RtRu]4tw!RvRw]r4txRxRylty/tz]^ k/t{]^
k]!4t|RzR{lt}R|R}lt~R~RltR€Rlt€RltR„R…ltR†R‡ltƒRˆR‰lt„RŠRlt…RŒRlt†RŽRlt‡RRltˆRR“lt‰R”R•ltŠRR—ltR˜R™ltŒRšRltRltŽERÆRžlltR ltltltlt“R¨lt”Rªlt•R¬R­lt]LEP/R®4l4t˜]LEP/R±4l4t™]LPMR´4l4tšR·R¸ltltœR»ltltžERÇR¿lltŸERÈRÁllt lt¡RÅlt¢]
EPF!RÇ4t¤]LEPKRÈ4l4t¦]LEPKRË4l4t§]LPMRÎ4l4t¨]LEPKRÑ4l4t©]LEPKRÔ4l4tªR×/RØR×bRÙRÚbRÛRÜbRÝRÞbRßRàbRáRâbRãRäbRåRæbRçRèbRéRêbRëRìbRíRîbRïRäbRðRâbRñRòbRóRäbRôRèbRõRöR÷RâRøRäRùR
RúR
RûRüRýRþRÿERERERERR
ERERERER/ CER/RØERbRÙER bRÛER
bRÝER bRßER bRáER
bRãERbRåERbRçERbRéERbRëERbRíRîbRïERbRðERbRñERbRóERbRôERbRõERR÷ER
2026-05-18 22:25:43 +12:00
RøERRùERRúERRûERRýERRÿERERERERERERERERER/ CER /RØER bRÙER!bRÛER"bRÝER#bRßER$bRáER%bRãER&bRåER'bRçERbRéER&bRëER(bRíER)bRïER*bRðER+bRñER,bRóER-bRôER&bRõER.R÷ER%RøER+RùER/RúER0RûER1RýER2RÿER3ERER4ERER5ERERERER6/ CER7/RØER7bRÙER8bRÛER9bRÝER:bRßER;bRáER<bRãER=bRåER=bRçER>bRéER?bRëER@bRíERAbRïERBbRðER<bRñERCbRóERBbRôER<bRõERDR÷ER<RøER?RùERERúERFRûERGRýERHRÿERIERERJERERKERERERERL/ CERM/RØERMbRÙERNbRÛERObRÝERPbRßERQbRáRâbRãRäbRåERRbRçERSbRéRêbRëERbRíRîbRïRäbRðRâbRñERTbRóRäbRôRâbRõERUR÷RâRøRäRùERVRúERWRûERXRýERYRÿERZERER[ERER\ERERERER]/ C/t«]^ kER^RØER^RÙER_ER`ERaERbR
ERcERd/EReRØEReRÙERfER`ERgERbERhERcERg/ERiRØERiRÙERjER`ERdERbERkERcERl/ERmRØERmRÙERnER`ERoERbERpERcERo/ERqRØERqRÙERrER`ERsERbERtERcERs/ERuRØERuRÙERvER`ERwERbERxERcERw/ERyRØERyRÙERzER`ER{ERbER|ERcER{/ER}RØER}RÙER~ER`ERERbER€ERcER//t¬]^ kERERlt­EER„lt®ER…ER†lt¯ERÉER‡ERˆllt°ERÊER‰Ell!ERERŒ]4!ERERŽ]4t³]LPMER4ERERl4t´]LEPKER4ER“ER”l4tµ]LEPKER•4ERER—l4t¶]LPMER˜4ER™El4t·]LPMER4EERl4t¸]LPMERž4EER l4t¹]LPMER¡4EEl4tº]LPMER¤4EEl4t»]LPMER§4EEl4t¼]LEPKERª4EEl4t½]LEPKER­4EEl4t¾]LEPKER°4EEl4t¿]LEPKER³4ER´El4tÀEEltÁER¸EltÂEEltÃ]LEPKER¼4EEl4tÄ]LEPKER¿4EEl4tÅR#éN)Údeque)ÚdatetimeÚ timedelta)ÚPath)ÚAny)ÚFastAPIÚ
2026-05-04 20:32:24 +12:00
HTTPExceptionÚRequest)ÚCORSMiddleware)ÚResponse)Ú BaseModelÚEmailStrcó8V^8„dQhR\P/#©éÚreturn)ÚloggingÚLogger)Úformats"Ú3C:\Users\mattc\gw-svelte\gw-svelte\mail-api\main.pyÚ __annotate__rs÷ñœŸñócód\\PPRR44pVP RRR7VR, p\
P !RRR7p\
P!4pVP\
P4\VP4FpVPV4K \
P!\P4pVP\
P 4VP#V4VP%V4\
PP'VR^R R
2026-05-18 22:25:43 +12:00
7pVP\
P4VP#V4VP%V4\
2026-05-18 22:25:43 +12:00
P!R 4pVP)R V4V#)
2026-05-04 20:32:24 +12:00
ÚLOG_DIRÚlogsT©ÚparentsÚexist_okz mail-api.logz1%(asctime)s %(levelname)-8s %(name)s: %(message)sz%d/%m/%Y %H:%M:%S %Z)Údatefmti€„úutf-8)ÚmaxBytesÚ backupCountÚencodingzmail-apiu?Logging initialised → console=INFO, file=%s (DEBUG, rotating))rÚosÚenvironÚgetÚmkdirrÚ FormatterÚ getLoggerÚsetLevelÚDEBUGÚlistÚhandlersÚ
2026-05-18 22:25:43 +12:00
removeHandlerÚ
StreamHandlerÚsysÚstdoutÚINFOÚ setFormatterÚ
addHandlerÚRotatingFileHandlerÚinfo)Úlog_dirÚlog_fileÚfmtÚrootÚhandlerÚconsoleÚrotatingÚlogs rÚ_setup_loggingr?sEÜ”2—::—>> )¨VÓ5€GØ ‡MM˜€MÔ˜Õ'€Hä
2026-05-18 22:25:43 +12:00
×
Ò
Ø €Cô
× Ò Ó €D؇MM”'—-‘-Ô Ü˜Ÿ
2026-05-04 20:32:24 +12:00
ÖØ ×ј×#¤C§J¡JÓ/€GØ ×Ñ”W—\‘\Ô ×Ñ˜ÔØ‡OOä×Ñט9°!¸gð€Hð
×Ñ”g—m‘mÔ ×ј#ÔØ‡OOä
×
Ò
˜
'€C؇H
2026-05-04 20:32:24 +12:00
NÐPXÔ €JrÚDEV_MODEÚÚRESEND_API_KEYz(API key from https://resend.com/api-keysÚ OWNER_EMAILz2Email address that receives new lead notificationscó$V^8„dQhR\/#r©Údict)rs"rrrJs÷7ñ7”dñ7rc$óŠ\'d—R\PPRR4R\PPRR4R\PPRR4R \PPR
2026-05-18 22:25:43 +12:00
R 4R R
RR
RRR^R^RRRRR^2R^2R^/#\P 4UUu.uF/wr\PPV4'dK,W3NK1 pppV'.R4OpVFwrVP
RV RV R24K V.R5O,
pVFwrVP
RV R24K VP
R
4RPV4p\PR VUUu.uFwrdVNK upp4\V\PR!7\P!^4R\PR,R\PR,R\PPRR4R \PPR
R 4R \PPR"R#4P4R\PPR$R
4P4R\PPR%R&4P4P4R69R\!^\#\PPR'R(444R\!^\#\PPR)R*444R\!^<\#\PPR+R,444R\!^<\#\PPR-R.444R\!^\#\PPR/R0444R\!^\#\PPR1R(444R\!^\#\PPR2R3444/#uuppiuuppi)7Úresend_api_keyrBÚdevÚ owner_emailrCz
dev@localhostÚ
from_emailÚ
2026-05-18 22:25:43 +12:00
FROM_EMAILz"GoodWalk <bookings@goodwalk.co.nz>Úreply_toÚREPLY_TOzaless@goodwalk.co.nzÚ owner_bccrAÚ
client_bccÚenable_general_enquiriesFÚ max_attemptsÚform_min_secondsÚform_max_secondsi Úrate_limit_window_secondsi„Úrate_limit_max_per_ipÚrate_limit_max_per_emailÚrate_limit_min_interval_secondsu • z)z $env:z = "..."Ú
z%Startup aborted: missing env vars: %s)ÚfileÚ OWNER_BCCúexample@example.comÚ
CLIENT_BCCÚENABLE_GENERAL_ENQUIRIESÚfalseÚMAIL_MAX_ATTEMPTSÚFORM_MIN_SECONDSÚFORM_MAX_SECONDSÚ7200ÚRATE_LIMIT_WINDOW_SECONDSÚ900ÚRATE_LIMIT_MAX_PER_IPÚRATE_LIMIT_MAX_PER_EMAILÚRATE_LIMIT_MIN_INTERVAL_SECONDSÚ20)rAuEMail API cannot start — required environment variables are not set:rA)rAzASet them in your shell and try again. For example, in PowerShell:rA>ÚonÚyesÚtrueÚenabled)r@r$r%r&Ú REQUIRED_ENVÚitemsÚappendÚjoinÚloggerÚcriticalÚprintr0ÚstderrÚexitÚstripÚlowerÚmaxÚint)ÚnameÚhintÚmissingÚlinesÚmessageÚns rÚ _load_configr‡JsB߃xà œbŸj™jŸn™nÐ-=¸ œ2Ÿ:™:Ÿ>™>¨-¸Ó œ"Ÿ*™*Ÿ.™.¨Ð7[Ó œŸ
Ÿ zÐ3IÓ ˜Ø ˜ Ø ˜  Ø  Ø Ø #  Ø -¨qð
ð
ô /;×.@Ñ.@Ô.BÔ_Ñ.B¡
 Ì"Ï*É*Ï.É.ÐY]×J^Œ||Ñ.B€GÑò
ˆó
"‰Jˆ L‰L˜6 $  s¨4¨&°Ð 
ò
õ
ˆó
‰Gˆ L‰L˜7 4 Ð à
Ø—)‘)˜EÓ"ˆÜÐ?ÑPWÔAXÑPWÉÈÃ!ÑPWÒAXÔ
ˆgœCŸJ™JÕ ŠŒ ð œ"Ÿ*™*Ð%5Õ”r—zz ”b—j‘j—n‘n \Ð3WÓ”B—JJ—NN :Ð/EÓ”R—ZZ—^^ KÐ1FÓG×”b—jj—nn \°2Ó6×"¤B§J¡J§N¡NÐ3MÈwÓ$W×$]Ñ$]Ó$_×$eÑ$eÓ$gðlQñ%QØœ˜Aœs¤2§:¡:§>¡>Ð2EÀsÓ#KÓœC ¤3¤r§z¡z§~¡~Ð6HÈ#Ó'NÓ#OÓœC ¤C¬¯
©
¯©Ð7IÈ6Ó(RÓ$SÓ#¤S¨¬S´·±·±Ð@[Ð]bÓ1cÓ-dÓ%eؤ ¬B¯J©J¯N©NÐ;RÐTWÓ,XÓ(YÓ!ZØ"¤C¨¬3¬r¯z©z¯~©~Ð>XÐZ]Ó/^Ó+_Ó$`Ø)¬3¨q´#´b·j±j·n±nÐEfÐhlÓ6mÓ2nÓ+oð ðùó-`ùó$BYsÂ:)P9Ã(P9Æ
P? Ú APP_VERSIONÚunknownÚAUTH_CODE_TTL_SECONDSÚ600éÚAUTH_SESSION_TTL_SECONDSÚAUTH_IP_MAX_FAILURESÚ10ÚAUTH_IP_FAILURE_WINDOWÚAUTH_IP_BLOCK_DURATIONÚ3600ÚBIRTHDAY_CHECK_INTERVAL_SECONDSÚDATA_DIRÚdatazallowed_emails.jsonzclient_profiles.jsonz drafts.jsonrHrJrOrPrKrMrQrRrSrTrUrVrWrXzHhttps://www.goodwalk.co.nz/images/goodwalk-auckland-dog-walking-logo.pngzÖMail API config: version=%r timezone=%r from=%r reply_to=%r owner=%r owner_bcc=%r client_bcc=%r general_enquiries=%r max_attempts=%d form_min=%ss form_max=%ss rate_window=%ss per_ip=%d per_email=%d min_interval=%ssÚTZzsystem-defaultzGoodWalk Mail API)Útitler]có:V^8„dQhR\\,/#r©ÚsetÚstr)rs"rrrºs÷ñ¬¬C­ñrcó*\PPRR4PR4Uu0uF8qP 4'gKVP 4P 4kK: pp\ P4'dS\P!\ PRR74pVPRVPR.444V#uupi \d"p\PRT4Rp?T#Rp?ii;i) ÚALLOWED_EMAILSrAÚ,r ©r#c3ór"TF-p\V\4'gKVP4xK/ R#5i©Ú
isinstancerr}©Ú.0Úes& rÚ <genexpr>Ú1_load_allowed_emails_from_file.<locals>.<genexpr>¿s'éÐXÑ+A aÄZÐPQÔSV×EWœ ˜ŸŸ ˜ Ó+Aùó7Ÿ7Úemailsz&Could not load allowed_emails file: %sN)r$r%r&Úsplitr|r}Ú_ALLOWED_EMAILS_FILEÚexistsÚjsonÚloadsÚ read_textÚupdateÚ ExceptionrwÚwarning)Úseedr•Úexcs rÚ_load_allowed_emails_from_filer¶ºÜ')§z¡z§~¡~Ð6FÈÓ'K×'QÑ'QÐRUÔ'VÓ dÑ'V !×ZaÑZa×ZcÔ ˆAG‰GIO‰OÖ Ñ'V€DÐ FÜ × &× —:2×<ÀgÐOˆ K‰KÑX¨4¯8©8°H¸bÔ+AÓ  €Kùò eøô
ôFÜÐ× €KûðFús$²C!Á"C!Á3A,C&Ã& DÃ1D
Ä
Dcó>V^8„dQhR\\,RR/#©rrNr™)rs"rrrÅs"÷FñF¤c¬#¥hðF°4ñFrcó\PPRRR7\P\P
!R\
V4/^R7RR7R# \d"p\PRT4Rp?R#Rp?ii;i)Tr©Úindentr z&Could not save allowed_emails file: %sN)
Úparentr'Ú
write_textr®ÚdumpsÚsortedr²rw)s& rÚ_save_allowed_emails_filerÀÅssðFÜ×)°$ÀÐ× JŠJ˜¤&¨£.Ð1¸ <Àwð
øô ôFÜÐ×EûðFúsAAÁ B Á(BÂB cóFV^8„dQhR\\\3,/#r©rFr)rs"rrrÏs÷ñ¬¬c´4¨i­ñrcóð\P4'd+\P!\P RR74#/# \
d"p\ PRT4Rp?/#Rp?ii;i)r z'Could not load client_profiles file: %sN)Ú_CLIENT_PROFILES_FILEr­rw©s rÚ_load_client_profiles_from_filerÆÏslðGÜ × '× —:3×=ÀwÐ   €Iøô ôGÜÐ@À#×
€IûðGúóA œ)A Á A5ÁA0Á0A5có(V^8„dQhR\RR/#©rÚprofilesrNrE)rs"rrrØs÷GñG¬ðG°$ñGrcó\PPRRR7\P\P
!V^R7RR7R# \ d"p\PRT4Rp?R#Rp?ii;i)Trr z'Could not save client_profiles file: %sN) rÄr'rw)s& rÚ_save_client_profiles_filerÌØsdðGÜ×*°4À$Ðׯª°HÀQÔ)GÐRYÐZøÜ ôGÜÐ@À#×FûðGúóAAÁ A>ÁA9Á9A>có$V^8„dQhR\/#rrE)rs"rrràs÷ñ¤ñrcóð\P4'd+\P!\P RR74#/# \
d"p\ PRT4Rp?/#Rp?ii;i)r zCould not load drafts file: %sN)Ú _DRAFTS_FILEr­rws rÚ_load_drafts_from_filerÑàshð × Ñ × Ò Ü—:’:œl×4¸gÐ   €Iøô ôÐ×
€Iûð>úrÇcó(V^8„dQhR\RR/#©rÚdraftsrNrE)rs"rrrés÷>œdð> >rcó\PPRRR7\P\P
!V^R7RR7R# \ d"p\PRT4Rp?R#Rp?ii;i)Trr zCould not save drafts file: %sN) rÐr'rw)s& rÚ_save_drafts_filerÖés`ð×Ñ×!¨$¸Ð×Ѥ§
¢
¨6¸!Ô <ÀwÐÖOøÜ ôÐ7¸×=ûð>úrÍcó>V^8„dQhR\\,RR/#r¸r™)rs"rrrôs÷&¤c¬#¥hð&°4ñ&rcó\V4R#))s&rÚ_save_allowed_emails_syncrÙôs
ܘfÖ%rcó(V^8„dQhR\RR/#rE)rs"rrrøs÷ð)°$ñ)rcó\V4R#))s&rÚ_save_client_profiles_syncrÜøs
ܘxÖ(rcó(V^8„dQhR\RR/#rE)rs"rrrüs÷ñœdð tñrcó\V4R#))s&rÚ_save_drafts_syncrßüs
Ürcó4V^8„dQhR\R\RR/#)rÚkeyÚvaluerN)rr)rs"rrrs&÷gñg¤Cðg´ðg¸ñgrcƒó®"\P!W4GRjxL
R#L \d"p\P RY4Rp?R#Rp?ii;i5i)zHWrite a single admin_kv blob to postgres when the database is available.NzBPostgres persist (%s) failed; JSON copy is still authoritative: %s)Úadmin_dbÚset_kvr²rw)s&& rÚ_persist_admin_stateræsAéðgÜoŠo˜cÓ)øÜ ôgÜÐ[Ð]`×fûðgüs6A&$ž&¢A¤&¦ A±A
ÁAÁ
AÁAcóV^8„dQhRR/#©rr)rs"rrrs÷""?°Tñ"?rc ƒó†"\PPRR4;'gRP4P 4pVR8XdR#\
P !4'gR#VR8Xd&\
P!4GRjxL
'dR#\4p\\44p\4pV'gV'g V'gR#V'd \
P!RV4GRjxL
V'd"\
P!RRV/4GRjxL
V'd \
P!RV4GRjxL
\PR V\V4\V4\V44R#LeL@ \ d"p\P#R
T4Rp?R#Rp?ii;i5i) a`Seed admin_kv from the JSON files on disk.
Controlled by ADMIN_DATA_SEED_FROM_JSON:
- "never": do nothing
- "auto": seed only when admin_kv has no rows yet (default, safe on every boot)
- "force": overwrite postgres with whatever the JSON files currently hold
2026-05-18 22:25:43 +12:00
The deployer exposes -SeedAdminData which sets this to "force" for one boot.
ÚADMIN_DATA_SEED_FROM_JSONÚautoÚneverNÚclient_profilesÚallowed_emailsrªzCSeeded admin_kv from JSON (mode=%s): clients=%d emails=%d drafts=%dzAdmin seed from JSON failed: %s)r$r%r&r|r}Ú
is_enabledÚ
has_any_valuerÆr¿rwr6Úlenr²)ÚmodeÚ seed_clientsÚ seed_emailsÚ seed_draftsrµs rÚ%_seed_admin_state_from_json_if_neededr÷sAéô
J‰JN‰NÐÓ ?× IÀ6× Z€DØ ˆw„ÙÜ × Ò × Ò Ùð 6Œ>¤H×$:Ò$:Ó$<× Ü8ˆ ÜÔ Ü ß§K¿ Ù ß Ü—/’/Ð"3°\ÓB× Ü—//Ð"2°X¸{Ð4KÓL× Ü—/’/ (¨KÓ  Ø ”##¤S¨Ó%5´s¸;Ó7Gö
ñ
Cá 8øô
ôÐ8¸#×>ûð?üs®A*GÁ-GÁ0FÂF
 FÂGÂ6FÃFÃGÃFÃ%FÃ?F Ä FÄ FÄ(FÄ) FÄ5FÅFÅ8FÆGÆ
FÆ FÆFÆFÆ F>ÆF9Æ3GÆ9F>Æ>Gcó:V^8„dQhR\\,/#rr™)rs"rrr-s÷  ,¬#¬c­ ,rcƒó0"\P!4'\P!R4GRjxL
p\V\4'd´VP R.4p\V\ 4'\PP RR4PR4Uu0uF8q"P4'gKVP4P4kK: ppVPRV44V#\4#L×uupi5i)NrªrrAc3ór"TF-p\V\4'gKVP4xK/ R#5is& rÚ-_load_allowed_emails_async.<locals>.<genexpr>4s#éÐL©v¨!¼ÀAÄs×9KœI˜AŸG™GŸI˜I«vùr©)Úget_kvr£rFr&r,r$r%r|r})r•r´s rÚ_load_allowed_emails_asyncrý-éÜ×Ò×ÒÜ—_’_Ð%5ÓÜ dœD× —X‘X˜Ó+ˆ˜&¤$×'Ü35·:±:·>±>ÐBRÐTVÓ3W×3]Ñ3]Ð^aÔ3bÓpÑ3b¨a×fmÑfm×foÔŸ› ŸÖ)Ñ3bÐ ÑL©vÓ Ü 7ùòqùs(5D·D¸A3DÂ+DÃ"DÃ)'DÄDcóFV^8„dQhR\\\3,/#r)rs"rrr9s÷-¬4´´­-rcƒóÄ"\P!4'd7\P!R4GRjxL
p\V\4'dV#\ 4#L&5i)N)rF©r•s rÚ_load_client_profiles_asyncr9sFéÜ×Ò×ÒÜ—_’_Ð%6ÓÜ dœD× ˆKÜ 8ùó5A ·A¸'A có$V^8„dQhR\/#rrE)rs"rrrAs÷$¤$ñ$rcƒóÄ"\P!4'd7\P!R4GRjxL
2026-05-18 22:25:43 +12:00
p\V\4'dV#\ 4#L&5i)N)rFrs rÚ_load_drafts_asyncrAsEéÜ×Ò×ÒÜ—_’_ XÓÜ dœD× ˆKÜ /ùrz Auth: loaded %d allowed email(s)có0V^8„dQhR\R\/#©rÚrequestr©r
r)rs"rrrYs÷ ñ ¬'ð ´ rcƒó†"VPPRR4pVPR4P4;'g&\ VP
PRR44pV'g\
2026-05-18 22:25:43 +12:00
RRR7h\;_uu_4GRjxL
\PV4pV'g\
RRR7h\P!4VR ,8”d$\PVR4\
RR
R7hVR ,uuRRR4GRjxL
#LL +GRjxL
2026-05-18 22:25:43 +12:00
'giR#;i5i) Ú
AuthorizationrAúBearer ÚtokenizNo token provided.©Ú status_codeÚdetailNzInvalid session.Ú
2026-05-18 22:25:43 +12:00
expires_atz&Session expired. Please sign in again.Úemail) Úheadersr&Ú removeprefixr|Ú_trimmedÚ query_paramsr Ú
_auth_lockÚ_active_sessionsÚtimeÚpop)rÚ auth_headerr
Úsessions& rÚ_require_session_emailrY騗/‘/×% o°rÓ:€KØ × $  7× j¼8ÀG×DXÑDX×D\ÑD\Ð]dÐfhÓDiÓ;j€Eç ܨÐ4HÔzŽzÜ"×& -ˆßܨCÐ8JÔ 9Š9‹;˜ Õ × Ñ  ¨Ô ¨CÐ8`Ô ÷zzzzzˆzüsUA0EÁ3EÂD ÂEÂA7D$Ä
EÄD"ÄEÄ"EÄ$D> Ä*D-Ä+
D> Ä6D> Ä8 Ecó0V^8„dQhR\R\/#rr )rs"rrrjs÷ñ¬ð´Cñrcƒó "\V4GRjxL
pV\P4P48wd\ RRR7hV#L:5i)Né“zOwner access required.r)rrCr|r}r )rrs& rÚ_require_owner_emailr!jsDéÜÓ 1€EØ ×¨Ð4LÔ €Lñ
2026-05-18 22:25:43 +12:00
2ùóAA ;Acó(V^8„dQhR\RR/#)rrrr)rs"rrrqs÷
Nñ
2026-05-04 20:32:24 +12:00
N¤ð
N¨ñ
Nrcƒó "VP4P4pV'gR#\;_uu_4GRjxL
V\9d\P V4\ \4p\ P!\\\44GRjxL
\RRV/4GRjxL
2026-05-18 22:25:43 +12:00
\PRV4RRR4GRjxL
R#LDL0L +GRjxL
2026-05-04 20:32:24 +12:00
'giR#;i5i)Nrïz&Auth: registered new allowed email: %s)
r|r}rÚ_allowed_emailsÚaddr¿ÚasyncioÚ to_threadrÙrwr6)rÚ
normalizedÚsnapshots& rÚ_register_emailr,qéØ×&€Jß ÙßzŽzØ œ_Ô × Ñ  
2026-05-18 22:25:43 +12:00
Ô œoÓ.ˆHÜ×#Ô$=¼sÄ?Ó?SÓT× &Ð'7¸(ÀHÐ9MÓN× K‰KÐ@À*Ô
z
UÙ zzzüsp;D½C¾DÁAC'ÂC!ÂC'Â2C#Â3C'Ã
2026-05-18 22:25:43 +12:00
DÃC%ÃDÃ!C'Ã#C'Ã%DÃ'D Ã-C0Ã.
D Ã9D Ã; Dcó4V^8„dQhR\R\RR/#)rrÚprofilerrrF)rs"rrr~s&÷DñD¤sðD´D¸Drc
ƒóp"VP4P4pV'gR#\;_uu_4GRjxL
\P V/4p/VCVCP 4UUu/uF,wrEVfK \
V\4'd
VR8XdK*WEbK. pppWc8wdPV\V&\\4p\P!\V4GRjxL
\RV4GRjxL
RRR4GRjxL
R#LÍuuppiL2L L +GRjxL
'giR#;i5i)NrA)
r|r}rÚ_client_profilesr&rtrrFr(r))rr.r*ÚexistingÚmergedr+s&& rÚ_store_client_profiler6~éØ×&€Jß ÙßzŽzÜ#×
°BÓð0˜8Ð/ wÐ
á7Øô
ä&0°´C×&8Ò&8¸QÀ"¹Wô
ˆAŠDÙ ñ
ð
2026-05-04 20:32:24 +12:00
Ô Ø+1Ô ˜ZÑ Ô-ˆHÜ×#Ô$>ÀÓI× &Ð'8¸C× zzùó
2026-05-18 22:25:43 +12:00
ñ
2026-05-04 20:32:24 +12:00
JÙ zzzüs‡;D6½D ¾D6Á.DÁ/D
Á<D
ÂD
Â!?DÃ DÃ!DÃ4DÃ5DÃ9 D6ÄDÄD6Ä
DÄDÄD6ÄD3 ÄD"Ä
D3 Ä+D3 Ä- D6có4V^8„dQhR\R\RR/#)rÚipÚ
request_idrNr$)rs"rrrs!÷

!œ#ð
2026-05-18 22:25:43 +12:00
!¬3ð
2026-05-04 20:32:24 +12:00
!°4ñ
!rcó&\P!4p\PV4pVecW#8dT\ W2,
4p\
P
RWV4\RRV^<,^, R2R\V4/R7h\VR#R#)Nz([%s] auth: blocked ip=%s (%ds remaining)é­z'Too many failed attempts. Try again in z minute(s).z Retry-After)rrr) rÚ monotonicÚ _blocked_ipsr&rrwr r)r8r9ÚnowÚ
2026-05-18 22:25:43 +12:00
unblock_atÚ remainings&& rÚ_check_ip_blockedrAÜ
2026-05-04 20:32:24 +12:00
.Š.Ó
€CÜ×! %€JØÒØ Ô Ü˜JÕ-ˆIÜ N‰NÐEÀzÐW`Ô ØØÈbÅÐSTÕATÐ@UÐU`ШI«Ðð
ô ˜RÒ ñrcó@V^8„dQhR\R\R\RR/#)rr8r9ÚreasonrNr$)rs"rrrŸs(÷ 
ñ 
2026-05-18 22:25:43 +12:00
œSð 
2026-05-04 20:32:24 +12:00
¬cð 
¼3ð 
À4ñ 
2026-05-18 22:25:43 +12:00
rc óÒ\P!4p\PV\ 44pV'd+W4^,,
2026-05-04 20:32:24 +12:00
\
8”dVP
4K2VPV4\PRWV\V44\V4\d<V\,\V&\PRW\\V44R#R#)rz5[%s] auth: failure ip=%s reason=%r total_in_window=%dz2[%s] auth: ip=%s BLOCKED for %ds after %d failuresN)rr<Ú_auth_failures_by_ipÚ
setdefaultrrÚpopleftrurwrr=)r8r9rCr>Úfailuress&&& rÚ_record_auth_failurerIŸÜ
.Š.Ó
€CÜ.¨r´5³7Ó;€Hß
s a(Ô+AÔ×ÑÖØ ‡OOÜ
‡NJÈJÐ\bÔdgÐhpÓdqÔ
ˆ8ƒ}ÔÔ!7Õ ÜØ Ô2´C¸³Mö
2026-05-18 22:25:43 +12:00
ñ-rÚPOSTÚGET)Ú
allow_originsÚ
allow_methodsÚ
allow_headersÚhttpcó$V^8„dQhR\/#©rr©r
)rs"rrr·s÷ñ¬wñrcƒó€"\P!4PR,pW Pn\
2026-05-18 22:25:43 +12:00
P !4pV!V4GRjxL
p\
2026-05-04 20:32:24 +12:00
P !4T,
R,p\PRY PTPPTPT4Y$PR&T#Lx \d\\
P !4T,
R,p\PRY PTPPT4hi;i5i)ºNéNNéèz[%s] %s %s crashed after %.0fmsu[%s] %s %s → %d (%.0fms)z X-Request-ID)ÚuuidÚuuid4ÚhexÚstater9rr<rwÚ exceptionÚmethodÚurlÚpathr6rr)rÚ call_nextr9ÚstartedÚresponseÚ
elapsed_mss&& rÚ_request_logging_middlewarerdéä×! "Õ%€JØ)‡MÜnŠnÓ€GðÙ" +×+ˆô—." Õ4€JÜ
‡K—NN G§K¡K×$4Ñ$4°h×6JÑ6JÈJôð(2×Ñ €Oñ,øÜ ôÜ—n’nÓÕ0°DÕ8ˆ
Ü×ÑØ Ÿ¨¯ © ×(8Ñ(8¸*ô
ð ð
üs2A D>Á CÁCÁCÁA4D>ÃCÃA&D;Ä;D>cóLa]tRtRtoRtRtRtRtRtRt Rt
Rt V3Rlt Rt
2026-05-04 20:32:24 +12:00
VtR#)ÚBaseSubmissioniÍrANcóä<V^8„dQh/S[;R&S[;R&S[;R&S[;R&S[R,;R&S[R,;R&S[R,;R&S[R,;R &S[R,;R
&S[;R &S[;R &#)
rÚfullNamerÚphoneÚwebsiteNÚ
formStartedAtÚvisitStartedAtÚ
2026-05-18 22:25:43 +12:00
pageEnteredAtÚfirstInteractionAtÚ
sendClickedAtÚreferrerÚpage)rrr)rÚ
__classdict__s"€rrÚBaseSubmission.__annotate__Ís ø‡Ùá ñ ñÑñ ñ
˜•:Ñ ñ ˜$•JÑ
2026-05-18 22:25:43 +12:00
ñ˜•:Ññ˜d
Ññ˜•:ÑñÑññ r)Ú__name__Ú
__module__Ú __qualname__Ú__firstlineno__rjrkrlrmrnrorprqÚ__annotate_func__Ú__static_attributes__Ú__classdictcell__©rrs@rrfrfÍs7ø‡ð€GØ $€MØ!%€NØ $€MØ%)ÐØ $€MØ€HØ€D÷ƒrrfcóHa]tRtRtoRtRtRtRt.t^t .t
2026-05-18 22:25:43 +12:00
V3Rlt Rt Vt
R#)ÚBookingSubmissioniÛÚbookingrAcóŽ<V^8„dQh/S[;R&S[;R&S[;R&S[;R&S[S[,;R&S[;R&S[S[,;R&#)rÚ enquiryTypeÚpetNameÚlocationr…ÚservicesÚ stepChangesÚjourney)rr,r)rrrs"€rrÚBookingSubmission.__annotate__Ûsdø‡ÙÑ ñá
2026-05-18 22:25:43 +12:00
ÑññÑññÑñ ñ
‘3ñ ñ Ññ
ñ‘#òrN)rtrurvrwr€rrr…r„r…rxryrzr{s@rr}r}Ûs/ø‡Ø €KØ€GØ€HØ€GØ€HØ€KØ€G÷ƒrr}cóTa]tRtRtoRt.tRtRtRtRt Rt
2026-05-18 22:25:43 +12:00
Rt Rt /t
V3RltRtVtR#)ÚOnboardingSubmissioniårAFcó<V^8„dQh/S[;R&S[;R&S[;R&S[;R&S[S[,;R&S[;R&S[;R&S[;R&S[;R &S[;R
&S[;R &S[;R &S[;R
2026-05-18 22:25:43 +12:00
&S[;R&S[;R&S[;R&S[;R&S[S[S[3,;R&#)rÚaddressÚdogNameÚdogBreedÚdogAgeÚservicesNeededÚ temperamentÚ medicalNotesÚaccessInstructionsÚvetNameÚvetPhoneÚemergencyContactNameÚemergencyContactPhoneÚcouncilRegistrationConfirmedÚvaccinationsConfirmedÚemergencyVetConsentÚ
termsAcceptedÚsignatureDataUrlÚsubmissionSnapshot)rr,ÚboolrFr)rrrs"€rrÚ!OnboardingSubmission.__annotate__åø‡Ù
2026-05-04 20:32:24 +12:00
á
ññ
Ññ ñ
2026-05-18 22:25:43 +12:00
•IÑ ñ Ññ
ñÑññÑ ññññÑññÑññ#'Ññ ÑñÑñ Ññ!ñ"Ññ#ñ$™S¡#˜XÑ+ò%rN)rtrurvrwrrrrrr—r˜r™rrxryrzr{s@rrˆåsGø‡ð€FØ "€NØ€KØ€LØ Ðð
*/Ð Ø"'ÐØ %ÐØ€Mà)+Ð÷%ƒrrˆcó0a]tRtRtoRtV3RltRtVtR#)ÚWelcomePackEmailRequestiúFcóV<V^8„dQh/S[;R&S[;R&S[;R&S[;R&S[;R&#)rrÚ serviceTypeÚ priceDetailsÚ startDateÚpreview)rr)rrrs"€rrÚ$WelcomePackEmailRequest.__annotate__ús@ø‡Ù áÑññÑñññ
2026-05-04 20:32:24 +12:00
Ñò rrtrurvrwrxryrzr{s@rúsø‡ð
€G÷ ƒrcó0a]tRtRtoRtV3RltRtVtR#)ÚBirthdayEmailRequestiFcó2<V^8„dQh/S[;R&S[;R&#)rr©r)rrrs"€rrÚ!BirthdayEmailRequest.__annotate__sø‡Ù á
ÑòrNr¦r{s@rsø‡à€G÷ƒrcó,a]tRtRtoV3RltRtVtR#)ÚBirthdayAutoSendRequesticó2<V^8„dQh/S[;R&S[;R&#)rrrr)rrrs"€rrÚ$BirthdayAutoSendRequest.__annotate__sø‡Ù á
rN)rtrurvrwrxryrzr{s@rr­r­sø‡rcóPa]tRtRtoRtRtRtRtRtRt Rt
Rt Rt V3Rlt
RtVtR#)ÚContractSubmissioni rAFcóÎ<V^8„dQh/S[;R&S[;R&S[;R&S[;R&S[;R&S[;R&S[;R&S[;R&S[;R &S[;R
&S[;R &S[;R &S[;R
2026-05-18 22:25:43 +12:00
&S[;R&S[;R&#)rrrÚ
walkFrequencyÚadditionalNotesÚagreeServiceTermsÚagreeCancellationÚ agreePaymentÚagreeEmergencyÚagreeLiabilityÚ
2026-05-04 20:32:24 +12:00
agreeAccuracyrš)r)rrrs"€rrÚContractSubmission.__annotate__ ø‡Ù
á
ññ
Ññ ñ
Ññ ñ 
ñÑññÑññÑñÑñÑññÑ ññÑ ññÑññÑòrN)rtrurvrwrr´r¸rxryrzr{s@r s?ø‡ð€Fð€MØ€OØØØ€LØ €NØ €NØ€M÷ƒrcó0V^8„dQhR\R\/#rr )rs"rrr s÷@ñ@”Wð@¤ñ@rcóèVPPR4pV'd'VPR4^,P4#VP'dVPP
2026-05-18 22:25:43 +12:00
#R#)zx-forwarded-forržr‰)rr&r|ÚclientÚhost)rÚ forwardeds& rÚ_get_iprÁ sTØ×#Ð$5Ó6€Iߨ˜# &×.Ø")§.§. .ˆ7>‰>× Ñ Ð?°iÐ?rcó0V^8„dQhR\R\/#©rrr$)rs"rrr,s÷ñ”CðœCñrcó"VP4#)r|©s&rrr,sØ ;‰;rcóVV^8„dQhR\\,R\R\RR/#)rÚattemptsr>Úwindow_secondsrN)rÚfloatr)rs"rrr0s-÷ñœe¤E´ðÌðÐPTñrcófV'd)W^,,
V8”dVP4K.R#R#)rN)rG)r>s&&&rÚ_prune_attemptsrË0s&ß
s a(¨>Ô×ÑÖñ:‰(rcóHV^8„dQhR\R\R\R\/#)rÚlast_attempt_atr>Úmin_interval_secondsr)r)rs"rrr5s*÷ñ¬Eð¼ðÔUXðÔ]`ñrcóJ\^\W!V,
,
44pV#)é)r~r)r>Ú retry_afters&&& rÚ_seconds_until_allowedrÒ5s"ÜÐ1¸?Õ5JÕM€KØ Ðrcó@V^8„dQhR\R\R\RR/#)rr9r8rrNr$)rs"rrr:s(÷44#´4#¼3ð4#Äsð4#Ètñ4#rc
2026-05-04 20:32:24 +12:00
ƒóð"\P!4pVP4P4p\;_uu_4GRjxL
\
P
V\44p\P
V\44p\WS\4\Wc\4V'dlW5R
,,
2026-05-18 22:25:43 +12:00
\8dT\VR
2026-05-04 20:32:24 +12:00
,V\4p\PRVVW5R
,,
2026-05-18 22:25:43 +12:00
\4\RRV R2R7h\!V4\"d/\PRVV\"\4\RRR7h\!V4\$d/\PRVV\$\4\RR R7hVP'V4VP'V4RRR4GRjxL
R#EL +GRjxL
2026-05-04 20:32:24 +12:00
'giR#;i5i) NzB[%s] rate limited: ip=%s submitted again after %.1fs (minimum %ss)r;zPlease wait about z seconds before trying again.rz7[%s] rate limited: ip=%s exceeded %d submissions in %sszIToo many enquiries from this connection. Please try again a little later.z:[%s] rate limited: email=%s exceeded %d submissions in %sszQThat email address has reached the enquiry limit for now. Please try again later.éÿÿÿÿ)rr<r|r}Ú_submit_rate_limit_lockÚ_submit_attempts_by_iprFrÚ_submit_attempts_by_emailrËrgrlrwr rirkru)r9r8rr>Únormalized_emailÚ ip_attemptsÚemail_attemptsrÑs&&& rÚ_enforce_submit_rate_limitsrÜ:éÜ
.Š.Ó
€CØ—{‘{“}×ç&×,×7¸¼E»GÓDˆ Ü2×=Ð>NÔPUÓPWÓXˆä˜ Ô*CÔ˜Ô-FÔ ˜3¨R¥Õ0Ô3RÔ¸RµÀ#ÔGfÓgˆKÜ N‰NØØØ "•oÕ 
ô ØØ+¨K¨=Ð8UÐð
ô
ˆ{Ó Ô N‰NØØÜ 
ô ØØð
ô
ˆ Ô":Ô N‰NØØ Ü 
ô ØØð
ð
×ј3ÔØ×ј"÷a'×&×&×&×&×&üsOAG6ÁGÁ G6Á E6GÇ G6Ç
GÇG6ÇG6ÇG3 ÇG"Ç
G3 Ç+G3 Ç- G6có4V^8„dQhR\R\RR/#©rr9r•rN)rrf)rs"rrrqs!÷ 
ñ 
¤Sð 
´ð 
2026-05-18 22:25:43 +12:00
À4ñ 
2026-05-04 20:32:24 +12:00
rcóÂVPeVP^8:d$\PRV4\RRR7h\P!4R,VP,
R, pV\
8d*\PRVV\
4\RRR7hV\ 8”d*\PRVV\ 4\RR R7hR#)
Nz/[%s] rejected: missing or invalid formStartedAtéz&Please refresh the page and try again.rrWz7[%s] rejected: form submitted too quickly (%.2fs < %ss)z;Please take a moment to fill in the form before sending it.z2[%s] rejected: stale form submission (%.0fs > %ss)zLThis form has been open for too long. Please refresh the page and try again.)rkrwr rrcre)r9r•Úelapsed_secondss&& rÚ_enforce_form_timingrâqØ ×ÑÒ! T×%7Ñ%7¸1Ô%<ÜÐHÈ*ÔØØ
ð
ô
—yy“{ )¨D×,>Ñ,>Õ>À$ÕF€OàÔØ Ø Ü ô 
ô ØØ
ð
ð
ÔØ Ø Ü ô 
ô ØØ
ð
ñ*rcó0V^8„dQhR\R\/#©rr•r)rf)rs"rrrs÷ð(´Dñ(rcó>\\VP44#)rrjrs&rÚ_is_honeypot_triggeredræsÜ ˜ŸÓ 'rcó0V^8„dQhR\R\/#)r})rs"rrr˜s÷;´;rcóN\VP4P4R8H#)Úgeneral)rr€r}rs&rÚ_is_general_enquiryrê˜s!Ü  Ñ :rcó0V^8„dQhR\R\/#©r}r)rs"rrrœs÷QñQÔQ´Qrcó,\V4'dR#R#)zGeneral enquiryzBooking enquiry)rs&rÚ_enquiry_type_labelrîœsÜ 3°D× 9Ò 9Ð ÐPÐ?PÐPrcó4V^8„dQhR\R\RR/#)rr})rs"rrr s"÷3
ñ3
¤Sð3
Ô0Að3
Àdñ3
rcó¤\VP4P4pVR9d.\P RWP4\ RRR7h\VP 4'g$\P RV4\ RRR7h\VP4'g$\P RV4\ RRR7h\V4'dp\'g$\P R V4\ R
R R7h\VP4'g$\P R V4\ RR
R7hR#\VP4'g$\P RV4\ RRR7h\VP4'g$\P RV4\ RRR7hR#)r~z%[%s] rejected: invalid enquiryType=%rràz1Please choose a valid enquiry type and try again.rz [%s] rejected: missing full nameúPlease enter your full name.z#[%s] rejected: missing phone numberz!Please enter your contact number.z-[%s] rejected: general enquiries are disabledr z>General enquiries are currently unavailable through this form.z.[%s] rejected: missing general enquiry messagezPlease tell us how we can help.Nz[%s] rejected: missing pet nameúPlease enter your dog's name.z[%s] rejected: missing locationzPlease enter your location.>r~)
rr€r}rwr rhrir_r…rr)r9r•Ú enquiry_types&& rÚ_validate_submissionrô sˆÜ˜D×5€LàÐÐ
×L\ÑL\ÔØØ
ð
2026-05-18 22:25:43 +12:00
ô
2026-05-04 20:32:24 +12:00
D—MM× Ð9¸ØØ
ð
ô
D—J‘J× Ò ÜÐ<¸jÔØØ
ð
ô
˜4× Ò ß N‰NÐJÈJÔ ØØð
ô˜Ÿ × N‰NÐKÈZÔ ØØð
ñ ä D—L‘L× Ð8¸*ÔØØ
ð
ô
D—MM× Ð8¸ØØ
ð
ñ #rcó(V^8„dQhR\RR/#©rr•rr})rs"rrrÖs÷ñÔ 1ð°dñrcóœ\V4'dRMRVn\VP4Vn\VP4Vn\VP
4Vn\VP 4Vn\VP4Vn\VP4Vn\VP4Vn VPUu.uF!p\V4'gK\V4NK# upVn
VPUu.uF!p\V4'gK\V4NK# upR,Vn \^VP4Vn
RF'p\W4pVe
V^8:gK\WR4K) \V4'dRVnRVn.Vn
R#R#uupiuupi)r~:Né NNrA©rlrmrnro)r€rrhrirrr…rprqr…r~r„ÚgetattrÚsetattr)r•ÚserviceÚstepÚ
field_namerâs& rÚ_normalize_submissionrÖsJÜ$7¸×$=Ò$=‘yÀ9€DÔܘTŸ]™]Ó+€D„Mܘ$Ÿ*™*Ó%€D„JܘDŸL™LÓ)€D„LܘTŸ]™]Ó+€D„MܘDŸL™LÓ)€D„LܘTŸ]™]Ó+€D„MܘŸÓ#€D„IØ6:·m²mÓY±m¨7ÄxÐPW×GXÔ&”X˜&±mÑY€D„MØ/3¯|ª|ÓN©| t¼xÈ¿~”N”H˜T–N©|ÑNÈsÕS€D„Lܘ1˜d×/€DÔã
Ü˜ÓØ Š=˜E QžJÜ D  aô
˜4× Ò ØˆŒ ؈Œ
؈Ž
ñ!ùòZùÚNsÃGÃ7GÄG Ä4G có4V^8„dQhR\R\RR/#)rrˆ)rs"rrrîs(÷+añ+a´ð+aÔ;Oð+aÐTXñ+arcóê\VP4'g$\PRV4\ RRR7h\VP
4'g$\PRV4\ RRR7hRRRR R
R R R
RRRRRR/pVP
4FBwr4\\W44'dK!\PRW4\ RVR7h VP'g$\PRV4\ RRR7hVP'g\ RRR7hVP'g\ RRR7hVP'g\ RRR7hVP'g\ RRR7h\VP4pVPR4'd\V4^€8d$\PRV4\ RRR7hR#)z+[%s] onboarding rejected: missing full nameràrz'[%s] onboarding rejected: missing phoneúPlease enter your phone number.rŠúPlease enter your address.rúPlease enter your dog's breed.rz"Please enter your vet clinic name.r“z#Please enter your vet phone number.r”z'Please enter an emergency contact name.r•z/Please enter an emergency contact phone number.z$[%s] onboarding rejected: missing %sz*[%s] onboarding rejected: missing servicesz#Please choose at least one service.z$Please confirm council registration.z(Please confirm vaccinations are current.z,Please confirm emergency veterinary consent.z*Please confirm the onboarding declaration.údata:image/png;base64,z3[%s] onboarding rejected: invalid signature payloadú)Please add your signature before sending.N)rrhrwr rirtrr—r™Ú
startswithrò)r9r•Úrequired_fieldsrÿr…Ú signatures&& rÚ_validate_onboarding_submissionr îs´Ü D—MM× ÐDÀjÔ¨Ð4RÔ D—J‘J× Ò ÜÐ@À*Ô¨Ð4UÔ ÐÐÐÐÐÐ IØÐ!Rð€Oðˆ
Üœ Ó N‰NÐAÀ:Ô ¨C¸Ô 
× × Ð ÜÐCÀZÔ¨Ð4YÔ × ¨Ð4ZÔ × ¨Ð4^Ô × ¨Ð4bÔ × × Ð Ü¨Ð4`Ô˜×/€IØ × Ñ Ð 8× 9¼SÀ»^ÈcÔ=QÜÐLÈjÔ¨Ð4_Ô>Rrcó(V^8„dQhR\RR/#)rˆ)rs"rrrs÷,Ô+?ð,ÀDñ,rcóþ\VP4Vn\VP4Vn\VP4Vn\VP4Vn\VP
4Vn\VP 4Vn\VP4Vn\VP4Vn\VP4Vn \VP4Vn
\VP4Vn \VP4Vn \VP4Vn
\VP4Vn\VP4VnVP Uu.uF!p\V4'gK\V4NK# upR,VnRF'p\#W4pVe
V^8:gK\%WR4K) R#uupi)rUNrú)rrhrirrrrrrr“r”r•rprq)r•rÿs& rÚ _normalize_onboarding_submissionrsgܘTŸ]™]Ó+€D„Mܘ$Ÿ*™*Ó%€D„JܘDŸL™LÓ)€D„LܘDŸL™LÓ)€D„LܘTŸ]™]Ó+€D„Mܘ4Ÿ;™;Ó'€D„KÜ × 0Ñ 0Ó1€DÔÜ  ×!2Ñ!2Ó3€DÔÜ& t×'>Ñ'>Ó?€DÔܘDŸL™LÓ)€D„LܘTŸ]™]Ó+€D„MÜ (¨×)BÑ)BÓ C€DÔÜ!)¨$×*DÑ*DÓ!E€DÔܘTŸ]™]Ó+€D„MܘŸÓ#€D„IØ<@×<OÒ<OÓeÑ<O°ÔS[Ð\c×SdÔ,œ8 ,Ñ<OÑeÐfhÕi€DÔã`ˆ
Ü˜ÓØ Š=˜E QžJÜ D  aùòfs ÆG:Æ-G:có0V^8„dQhR\R\/#)rÚuarr$)rs"rrr4s÷

$”#ð
$œ#ñ
$rcóŽaS'gR#.ROp.ROp\V3RlV4R4p\V3RlV4R4pV RV 2#)ÚUnknownc3ó><"TFwrVS9gKVxK R#5i©Úpr†rs& €rÚ_parse_ua.<locals>.<genexpr><søéÐ6¡(™$˜!¨a°2©g—A’A£(ùóƒ 
zUnknown browserc3ó><"TFwrVS9gKVxK R#5irs& €rr=søéИ¨A°©G—1’1£ùrz
Unknown OSz on ))zEdg/ÚEdge)zOPR/ÚOpera)zChrome/ÚChrome)zFirefox/ÚFirefox)zSafari/ÚSafari))z
Windows NT 10z
Windows 10/11)z Windows NT 6z Windows 8)zMac OS XÚmacOS)ÚiPhoner)ÚiPadr )ÚAndroidr!)ÚLinuxr")Únext)rÚbrowsersÚsystemsÚbrowserÚsystemsf rÚ _parse_uar(4sPø€ß
Ùò@€Hò;€GôÔ6¡(Ó6Ð8IÓJ€GÜ
ÔÓ4°lÓ
C€F؈Yd˜6˜ #rcó<V^8„dQhR\R\R\/#©rÚlabelrârr$)rs"rrrAs!÷ 
ñ 
2026-05-18 22:25:43 +12:00
”sð 
2026-05-04 20:32:24 +12:00
¤3ð 
2026-05-18 22:25:43 +12:00
¬3ñ 
2026-05-04 20:32:24 +12:00
rcó(V'gR#RV RV R2#)rA
<tr>
2026-05-18 22:25:43 +12:00
<td style="padding:8px 0;color:#888;font-size:13px;white-space:nowrap;
2026-05-04 20:32:24 +12:00
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;width:130px;">z×</td>
2026-05-18 22:25:43 +12:00
<td style="padding:8px 0 8px 16px;color:#213021;font-size:14px;font-weight:500;
2026-05-04 20:32:24 +12:00
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">ú</td>
</tr>ré©r+s&&rÚ _detail_rowr/As/ß Ùð49°'ð:'ð(- .
ð
ð
rcó<V^8„dQhR\R\R\/#r*r$)rs"rrrOs!÷ 
ñ 
”Sð 
¤ð 
2026-05-18 22:25:43 +12:00
– 
2026-05-04 20:32:24 +12:00
rcó(V'gR#RV RV R2#)rA
<tr>
<td style="padding:5px 0;color:#aaa;font-size:12px;white-space:nowrap;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;width:100px;">zÙ</td>
<td style="padding:5px 0 5px 16px;color:#666;font-size:12px;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;word-break:break-all;">r-r.s&&rÚ _meta_rowr2Os1ß Ùð49°'ð:<ð=B¸C
ð
2026-05-18 22:25:43 +12:00
ð
2026-05-04 20:32:24 +12:00
rcó>V^8„dQhR\R,R\/#)rÚ duration_msNr©rr)rs"rrr]s÷ ñ ¤S¨4¥Zð ´Cñ rcóÐVeV^8dR#\\VR, 44p\V^<4wr#\V^<4wrBV^8”d V RV R2#V^8”d V RV R2#V R2#)NrArWzh Úmzm Ús)rÚroundÚdivmod)r4Ú
total_secondsÚminutesÚsecondsÚhourss& rÚ_format_duration_msr?]sØÒ˜k¨AœoÙ䜘k¨DÕ2€Mܘm¨RÓ€GܘG RÓ(N€Eà ˆq„yؘ˜7˜) 1Є{ؘ"˜W˜I ˆYaˆrcóXV^8„dQhR\R,R\R,R\/#)rÚstart_msNÚend_msrr5)rs"rrrls)÷ 
ð2´C¸$µJð2Ä3ñ2rcóDVe VeW8dR#\W,
4#)NrA)r?)rArBs&&rÚ_duration_betweenrDls"ØÒ˜6š>¨VÔ->ÙÜ ˜ 1rcóFV^8„dQhR\\,R\/#)rr…r)r,r)rs"rrrrs÷ ñ œ4¤ ¬ñ rcó8V'gR#RPV4#)rAz -> )rv)r…s&rÚ
_journey_textrGrsß ÙØ ;‰; Ðrcó<V^8„dQhR\R\R\/#)rÚ
badge_htmlÚsubtitlerr$)rs"rrrzs!÷
ñ
œSð
´ð
¼cñ
rcóbV'dRV R2MRpV'dRV R2MRpR\ RV RV R2#)z<div style="margin-top:20px;">ú</div>rAz¿<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:13px;color:#7aaa7a;letter-spacing:0.04em;margin-top:8px;">
zx
<tr>
<td style="background:#213021;padding:36px 48px 32px;text-align:center;">
<img src="zŠ" width="161" height="32" alt="GoodWalk"
style="display:inline-block;max-width:161px;height:auto;border:0;">
ú
z
</td>
</tr>)ÚLOGO_URL)rIrJÚbadgeÚsubs&& rÚ _logo_headerrQzscßCMÐ,¨Z¨L¸Ñ ?ÐSU€E÷(0ðà
˜ $à57ððô !
à
ˆ
Ø
ˆð
 ðrcó0V^8„dQhR\R\/#)rs"rrrŠs÷F ñF ÔF ¬SñF rc ó\V4pVP'dRPVP4MRp\RVP4\R\ VP 44\RVP4\R\V44.pV'd?VP'd&VP\RVP44RpRpR pMŸVP\R
VP4\R VP4\R V4.4VP'd&VP\R
VP44RVP R2pRVP R2pRpR\VR7 RVPP4^, RV RRPV4 RV R2 #)ú, z
Not specifiedz Your nameÚEmailÚPhoneÚTypeÚMessagezBWe&rsquo;ve received your message and we will be in touch shortly.z<We will review your message and reply within 1 business day.z)General enquiries and dog walking supportzDog&rsquo;s nameÚLocationÚServicesú
About the dogz•We&rsquo;ve received your enquiry and we will be in touch shortly to arrange a <strong style="color:#213021;">Meet &amp; Greet</strong> with you and Ú.zWe will review your details and reach out within 1 business day to schedule a free Meet &amp; Greet. No commitment required &mdash; just a chance for z to make a new best friend.z!Professional dog walking servicesav<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>We received your enquiry</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#f2f2f0;padding:40px 16px;">
<tr><td align="center">
<table width="600" cellpadding="0" cellspacing="0" role="presentation"
style="max-width:600px;width:100%;border-radius:16px;overflow:hidden;
box-shadow:0 4px 24px rgba(0,0,0,0.08);">
)rJa?
<!-- Body -->
<tr>
<td style="background:#ffffff;padding:48px 48px 40px;">
<h1 style="margin:0 0 8px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:26px;font-weight:700;color:#213021;line-height:1.2;">
Thanks, zÚ! &#x1F43E;
</h1>
<p style="margin:0 0 32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:16px;color:#555;line-height:1.65;">

</p>
<!-- Details card -->
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#f8f7f4;border-radius:12px;margin-bottom:36px;">
<tr>
<td style="padding:28px 32px;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.1em;
color:#888;text-transform:uppercase;margin-bottom:20px;">
Your enquiry summary
</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
rAa*
</table>
</td>
</tr>
</table>
<!-- What's next -->
2026-05-04 20:32:24 +12:00
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="border-left:3px solid #FFD100;margin-bottom:36px;">
2026-05-04 20:32:24 +12:00
<tr>
<td style="padding:4px 0 4px 20px;">
2026-05-04 20:32:24 +12:00
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:13px;font-weight:700;color:#213021;margin-bottom:6px;">
What happens next?
</div>
2026-05-04 20:32:24 +12:00
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#666;line-height:1.6;">
2026-05-04 20:32:24 +12:00

2026-05-18 22:25:43 +12:00
</div>
2026-05-04 20:32:24 +12:00
</td>
</tr>
</table>
2026-05-04 20:32:24 +12:00
<p style="margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#888;line-height:1.6;">
Questions? Just reply to this email or reach us at 022 642 1011.
2026-05-04 20:32:24 +12:00
</p>
</td>
2026-05-04 20:32:24 +12:00
</tr>
<!-- Footer -->
<tr>
<td style="background:#213021;padding:24px 48px;text-align:center;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#5a8a5a;line-height:1.6;">
GoodWalk &middot; Auckland, New Zealand<br>
2026-05-04 20:32:24 +12:00
<a href="https://www.goodwalk.co.nz" style="color:#7aaa7a;text-decoration:none;">
goodwalk.co.nz
</a>
</div>
</td>
</tr>
</table>
</td></tr>
</table>
2026-05-04 20:32:24 +12:00
</body>
</html>)rvr/rhrrrir…ruÚextendrrrQ)r•Ú
is_generalÚ
services_textÚenquiry_summary_rowsÚ
intro_htmlÚnext_steps_htmlÚ
logo_subtitles& rÚ client_emailrdŠs¿Ü$ *€JØ04·
·
°
D—II˜dŸm™mÔ,À?€Mä§¡ÓGœS §¡›_ÓG˜TŸZ™ZÓÓÐ÷Ø <<ˆ × °I¸t¿|¹|Ó(LÔ  ð
Kð ðD
à×з ± Ó˜J¨¯
©
Ó˜
Ó
ô
ð <<ˆ × °OÀTÇ\Á\Ó(RÔ 
Yà|‰|ˆn˜
ð ð 
àŸ,™,˜Ð'Bð
Dð ð
<ˆ
ð ô"
˜}Ô -Ð/ð—}‘}×,¨QÕ1ðˆlðð—W‘WÐ4ð" &ðy\ ð\ rcóHV^8„dQhR\R\R\R\/#©rr•r8r&r)rs"rrrs/÷w ñw Ôw ¬Sðw ¼3ðw Ä3ñw rcóÌ\V4pVP'dRPVP4MRp\P!4pVP R4P
R4pVPP4'd"VPP4^,MRpV'dRMRpV'dRMRp VP'dR V R
VP R 2MR p
R
PVR7p VP'd\RVP4M \RR4p VP'd\RVP4MR p
\R\VP VP"44p\R\VP$VP"44p\R\VP&VP"44p\R\VP(VP"44pVP*'d \R\-VP*44MR p\R\/VP044pV'dRMRp\3R\5V44.pV'dpVP6'd&VP9\3RVP644VP:'d&VP9\3RVP:44MFVP=\3RVP64\3RVP:4\3RV4.4R P.RNV NRN\?V R 7 NR!NV NR"NVP@ NR#NVP@ NR$NVP NR%NVP@ NR&NVP@ NR'NVPB NR&NVPB NR(NV NR)NR PV4 NR*NV
NR+NVP@ NR,NV NR-NVPB NR.NVPB NR/N\R0V4 NR*N\R1V4 NR*NV NR*NV NR*NV NR*NV NR*NV NR*NV NR*NV
NR*NV NR2N4#)3rTõ—ú%d %b %Y at %I:%M %pÚthemzNew GoodWalk EnquiryzNew GoodWalk LeadrXr[a)
<tr>
<td colspan="2" style="padding:16px 0 0;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#888;
text-transform:uppercase;margin-bottom:8px;">zë</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#444;line-height:1.6;background:#f0efe9;
border-radius:8px;padding:14px 16px;">z</div>
</td>
</tr>rAar<div style="display:inline-block;background:#FFD100;border-radius:100px;
padding:10px 28px;">
<span style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:18px;font-weight:700;color:#213021;">
&#x1F4E9;&nbsp; New enquiry!
</span>
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#5a8a5a;margin-top:12px;">
Submitted {submitted_at}
</div>)Ú submitted_atú Came fromúDirect / bookmarkÚPageú Time on siteú Time on pageúActive form timeúForm open timez Step changesÚJourneyzEnquiry detailszDog &amp; servicesrWÚDogrYrZzú<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="color-scheme" content="light only">
<meta name="supported-color-schemes" content="light">
<title>a</title>
<style>
:root {
color-scheme: light only;
2026-05-04 20:32:24 +12:00
supported-color-schemes: light;
}
body,
table,
td,
div,
p,
span,
a {
forced-color-adjust: none !important;
-webkit-text-size-adjust: 100%;
}
.gw-owner-body {
background: #f2f2f0 !important;
color: #213021 !important;
}
.gw-owner-shell {
background: #ffffff !important;
}
.gw-owner-dark-panel {
background: #213021 !important;
}
.gw-owner-email-chip {
display: inline-block;
background: #ffffff !important;
color: #213021 !important;
border-radius: 10px;
padding: 12px 14px;
border: 1px solid #d9dfd9;
text-decoration: none !important;
}
.gw-owner-email-chip,
2026-05-04 20:32:24 +12:00
.gw-owner-email-chip a,
a.gw-owner-email-chip {
color: #213021 !important;
}
@media (prefers-color-scheme: dark) {
html,
body,
.gw-owner-body {
background: #f2f2f0 !important;
color: #213021 !important;
}
.gw-owner-shell,
.gw-owner-shell td {
background: #ffffff !important;
color: #213021 !important;
}
.gw-owner-dark-panel,
.gw-owner-dark-panel td {
background: #213021 !important;
}
2026-05-18 22:25:43 +12:00
.gw-owner-email-chip,
.gw-owner-email-chip a,
2026-05-04 20:32:24 +12:00
a.gw-owner-email-chip {
background: #ffffff !important;
color: #213021 !important;
}
}
</style>
</head>
<body class="gw-owner-body" style="margin:0;padding:0;background:#f2f2f0;color:#213021;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" bgcolor="#f2f2f0"
style="background:#f2f2f0;padding:40px 16px;">
<tr><td align="center">
2026-05-18 22:25:43 +12:00
<table class="gw-owner-shell" width="600" cellpadding="0" cellspacing="0" role="presentation" bgcolor="#ffffff"
style="max-width:600px;width:100%;border-radius:16px;overflow:hidden;
box-shadow:0 4px 24px rgba(0,0,0,0.08);background:#ffffff;">
)rIa
<!-- Body -->
2026-05-18 22:25:43 +12:00
<tr>
<td bgcolor="#ffffff" style="background:#ffffff;padding:40px 48px 36px;color:#213021;">
<!-- Quick contact -->
<table class="gw-owner-dark-panel" width="100%" cellpadding="0" cellspacing="0" role="presentation" bgcolor="#213021"
style="background:#213021;border-radius:12px;margin-bottom:28px;">
<tr>
<td bgcolor="#213021" style="padding:22px 24px;background:#213021;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.1em;color:#7aaa7a;
text-transform:uppercase;margin-bottom:10px;">
Quick contact
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#d8e6d8;line-height:1.6;margin-bottom:10px;">
Email z| directly:
</div>
<div style="margin-bottom:12px;">
<a href="mailto:aß" class="gw-owner-email-chip"
style="display:inline-block;background:#ffffff;color:#213021 !important;
font-family:Menlo,Consolas,'SFMono-Regular',monospace;
font-size:20px;font-weight:700;line-height:1.4;word-break:break-all;
border-radius:10px;padding:12px 14px;border:1px solid #d9dfd9;
text-decoration:none;">
a 
</a>
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#b7cbb7;line-height:1.6;">
Tap and hold the address to copy on iPhone, or tap below to open a new email.
</div>
</td>
</tr>
</table>
<!-- Owner details -->
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;
text-transform:uppercase;margin-bottom:16px;">Owner details</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#f8f7f4;border-radius:12px;margin-bottom:28px;">
<tr><td style="padding:24px 28px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td style="padding:6px 0;font-size:13px;color:#888;width:80px;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">Name</td>
<td style="padding:6px 0 6px 16px;font-size:15px;font-weight:600;
color:#213021;font-family:-apple-system,BlinkMacSystemFont,
'Segoe UI',sans-serif;vertical-align:top;">a#</td>
</tr>
<tr>
<td style="padding:6px 0;font-size:13px;color:#888;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
2026-05-18 22:25:43 +12:00
vertical-align:top;">Email</td>
<td style="padding:6px 0 6px 16px;font-size:14px;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">
<a href="mailto:zX" style="color:#213021;font-weight:500;
text-decoration:none;">a9</a>
</td>
</tr>
<tr>
<td style="padding:6px 0;font-size:13px;color:#888;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">Phone</td>
<td style="padding:6px 0 6px 16px;font-size:14px;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
vertical-align:top;">
<a href="tel:a¤</a>
</td>
</tr>
</table>
</td></tr>
</table>
<!-- Dog & service details -->
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;
text-transform:uppercase;margin-bottom:16px;">aO</div>
2026-05-18 22:25:43 +12:00
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#f8f7f4;border-radius:12px;margin-bottom:28px;">
<tr><td style="padding:24px 28px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
ú
a4
</table>
</td></tr>
2026-05-18 22:25:43 +12:00
</table>
<!-- CTA buttons -->
<table cellpadding="0" cellspacing="0" role="presentation" style="margin-bottom:32px;">
<tr>
<td style="padding-right:12px;">
<a href="mailto:ac"
style="display:inline-block;background:#213021;color:#FFD100;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;font-weight:600;text-decoration:none;
border-radius:8px;padding:12px 24px;">
Email zb
</a>
</td>
<td>
<a href="tel:a{"
style="display:inline-block;background:#f8f7f4;color:#213021;
font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;font-weight:600;text-decoration:none;
border-radius:8px;padding:12px 24px;border:1px solid #e0e0d8;">
2026-05-18 22:25:43 +12:00
Call aµ
</a>
</td>
</tr>
</table>
<!-- Session info -->
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="border-top:1px solid #eeeee8;padding-top:20px;">
<tr><td>
2026-05-18 22:25:43 +12:00
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#ccc;
text-transform:uppercase;margin-bottom:12px;">Session info</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
ú
IP addressÚBrowseraE
</table>
2026-05-04 20:32:24 +12:00
</td></tr>
</table>
</td>
2026-05-18 22:25:43 +12:00
</tr>
<!-- Footer -->
<tr>
<td style="background:#f8f7f4;padding:18px 48px;text-align:center;
border-top:1px solid #e8e8e4;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#bbb;">
Sent automatically by GoodWalk enquiry form
</div>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>)"rêrvrr>ÚstrftimeÚlstriprhr|r…rrpr2rqrDrlrormrnrkr„rrGr…r/rrurr]rQrri)r•r8r&r^r_r>rlÚ
first_nameÚ email_titleÚ
message_labelÚ
message_blockrOÚ referrer_rowÚpage_rowÚvisit_time_rowÚ
page_time_rowÚactive_time_rowÚ
form_time_rowÚstep_changes_rowÚ journey_rowÚdetail_headingÚ detail_rowss&&& rrJrJÜ$ *€JØ04·
·
°
D—II˜dŸm™mÔ,À5€MÜ
,Š,.€CØ—<<Ð 6Ó7×>¸C€LØ-1¯]©]×-@Ñ-@×-BÒ-B×& €Jß,6Ñ(Ð<O€Kç!+€Mð ðBð
CPÀðQ<@¿<¹<¸I
ñ

ð#%ðð
÷¨\˜Ó
ð=A¿M¿M¸M”9˜[¨$¯-©-Ô8ÌyÐYdÐfyÓOz€LØ/3¯y¯y¨yŒy˜ §¡Ô+¸b€Hܘ~Ô/@À×ATÑATÐVZ×VhÑVhÓ/iÓj€NܘnÔ.?À×@RÑ@RÐTX×TfÑTfÓ.gÓh€MÜÐ 2Ô4EÀd×F]ÑF]Ð_c×_qÑ_qÓ4rÓs€OÜÐ.Ô0AÀ$×BTÑBTÐVZ×VhÑVhÓ0iÓj€MØKO×K[×K[ÐK[”y ´°T×5EÑ5EÓ1FÔGÐacÐܘI¤}°T·\±\Ó'BÓC€Kß*4Ñ&Ð:N€NܘvÔ':¸4Ó'@ÓB€KçØ <<ˆ × Ñ œ{¨5°$·,±,Ó ==ˆ=Ø × Ñ œ{¨:°t·}±}Ó Føà×Ñä˜E 4§<¡<Ó˜¯
©
Ó˜
Ó
ô
÷} ó} ð
2026-05-18 22:25:43 +12:00
ð} ð ˆð} ðU ð} ôx
2026-05-04 20:32:24 +12:00
 Ô 'Ð(ðy} ðx)ðy} ð\&˜,ð]} ð\'%ð]} ðb&*§Z¡Z Lðc} ðb1ðc} ðn—zzlðo} ðn#Kðo} ðbLPÏ=É=È/ðc} ðb Z'ðc} ðt(,§z¡z lðu} ðt31ðu} ðv26·±° ðw} ðv
2026-05-18 22:25:43 +12:00
=$ðw} ðJ%)§J¡J <ðK} ðJ01ðK} ðL26·±° ðM} ðL
=GðM} ð`HVÐFVða} ð`Wða} ðl—77˜(ðm} ðl)ðm} ðn!/ðo} ðn "#ðo} ð@$(§:¡: ,ðA} ð@/ðA} ðJ&˜,ðK} ðJ' ðK} ðR!%§
¡
˜|ðS} ðR,ðS} ð\Ÿ*™*˜ð]} ð\&ð]} ôx˜\¨2Ó/ðy} ðx0ðy} ôz˜Ó1ð{} ðz2ð{} ð|"ð}} ð|#ð}} ð~!} ð~"ð} ð@#ðA} ð@$ðA} ðB!/ðC} ðB"ðC} ðD$ðE} ðD%ðE} ðF .ðG} ðF!ðG} ðH*ðI} ðHðI} ðJ-ðK} ðJ ôK} ð} rcóHV^8„dQhR\R\R\R\/#rf)rˆr)rs"rrrMs0÷f ñf Ô!5ðf ¼3ðf Ìðf ÔQTñf rc óî\P!4PR4PR4pRP VP
4p\
2026-05-18 22:25:43 +12:00
R\VPVP44p\
R\VPVP44p\
R\VPVP44p\
R\VPVP44pVP'd\
2026-05-18 22:25:43 +12:00
RVP4M \
RR4p VP'd\
2026-05-18 22:25:43 +12:00
R VP4MR
p
VP'dR VP R 2MR
p VP 'dR
VP R 2MR
p VP"'dRVP" R 2MR
p
RVP$ R2pRV R2pR
P .RN\'VRR7 NRNVP( NRNVP( NRNVP* NRNVP* NRN\-RVP.4 NRN\-R\1VP(44 NRN\-RVP*4 NRN\-RVP24 NR N\-R!VP44 NRN\-R"VP64 NRN\-R#VP8;'gR$4 NRN\-R%V4 NRNV NRNV NRNV
NR&N\-R'VP:4 NRN\-R(VP<4 NRN\-R)VP>4 NRN\-R*VP@4 NRN\-R+R,4 NRN\-R-R,4 NRN\-R.R,4 NRN\-R/R04 NR1NV NR2N\
R3V4 NRN\
R4V4 NRNV NRNV NRNV NRNV NRNV NRNV
NR5N4#)6rirjrTrprqrrrsrmrnrorAa;
<tr>
<td colspan="2" style="padding:16px 0 0;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#888;
text-transform:uppercase;margin-bottom:8px;">Temperament and routine</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#444;line-height:1.6;background:#f0efe9;
border-radius:8px;padding:14px 16px;">ú </div>
</td>
</tr>a1
<tr>
<td colspan="2" style="padding:16px 0 0;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#888;
text-transform:uppercase;margin-bottom:8px;">Medical notes</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#444;line-height:1.6;background:#f0efe9;
border-radius:8px;padding:14px 16px;">a<
<tr>
<td colspan="2" style="padding:16px 0 0;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.08em;color:#888;
text-transform:uppercase;margin-bottom:8px;">Home access instructions</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:14px;color:#444;line-height:1.6;background:#f0efe9;
border-radius:8px;padding:14px 16px;">á•
<div style="margin-top:16px;border-radius:16px;background:#ffffff;border:1px solid #e3e3db;padding:14px 14px 10px;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;
text-transform:uppercase;margin-bottom:10px;">Captured signature</div>
<img src="ú{" alt="Client signature" style="display:block;max-width:100%;height:auto;border-radius:10px;background:#fff;">
</div>aT<div style="display:inline-block;background:#FFD100;border-radius:100px;
padding:10px 28px;">
<span style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:18px;font-weight:700;color:#213021;">
&#x270D;&nbsp; New onboarding form
</span>
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
font-size:12px;color:#5a8a5a;margin-top:12px;">
Submitted ú
</div>aZ<!DOCTYPE html>
<html lang="en">
<head>
2026-05-18 22:25:43 +12:00
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>New GoodWalk onboarding form</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f2f2f0;padding:40px 16px;">
<tr><td align="center">
<table width="680" cellpadding="0" cellspacing="0" role="presentation"
style="max-width:680px;width:100%;border-radius:16px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.08);">
zSigned onboarding form©rIrJ
<tr>
<td style="background:#ffffff;padding:38px 40px 34px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation"
style="background:#213021;border-radius:12px;margin-bottom:26px;">
<tr>
<td style="padding:22px 24px;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.1em;color:#7aaa7a;text-transform:uppercase;margin-bottom:10px;">
Quick contact
</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:14px;color:#d8e6d8;line-height:1.6;margin-bottom:10px;">
Reply directly to the owner or call them back:
</div>
<div style="margin-bottom:10px;">
<a href="mailto:úé" style="display:inline-block;background:#ffffff;color:#213021;text-decoration:none;border-radius:10px;padding:12px 14px;border:1px solid #d9dfd9;font-family:Menlo,Consolas,'SFMono-Regular',monospace;font-size:18px;font-weight:700;">ú=</a>
</div>
<a href="tel:úã" style="display:inline-block;background:#ffd100;color:#213021;text-decoration:none;border-radius:999px;padding:10px 16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:14px;font-weight:700;">Call aU</a>
</td>
</tr>
</table>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;text-transform:uppercase;margin-bottom:16px;">Owner details</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f8f7f4;border-radius:12px;margin-bottom:24px;">
<tr><td style="padding:24px 28px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
ÚNamervrUrVÚAddressac
</table>
</td></tr>
</table>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;text-transform:uppercase;margin-bottom:16px;">Dog and service details</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f8f7f4;border-radius:12px;margin-bottom:24px;">
<tr><td style="padding:24px 28px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
ruÚBreedÚAgerhÚServiceaZ
</table>
</td></tr>
</table>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.1em;color:#888;text-transform:uppercase;margin-bottom:16px;">Safety details</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f8f7f4;border-radius:12px;margin-bottom:24px;">
<tr><td style="padding:24px 28px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
z
Vet clinicz Vet phonezEmergency contactzEmergency phonezCouncil registrationÚ ConfirmedÚ VaccinationsúEmergency consentÚ DeclarationÚSignedú*
</table>
á
</td></tr>
</table>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="border-top:1px solid #eeeee8;padding-top:20px;">
<tr><td>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:11px;font-weight:700;letter-spacing:0.08em;color:#ccc;text-transform:uppercase;margin-bottom:12px;">Session info</div>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
rwrxúž
</table>
</td></tr>
</table>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>)!rr>ryrzrvr2rDrlrormrnrkrprqrrrrQrrir/rhrrrrr“r”r•)r•r8r&rlr_rrr„rr€Údog_notes_blockÚ
medical_blockÚ access_blockÚsignature_blockrOs&&& rÚowner_onboarding_emailr¤Ms”Ü—<<“>×*Ð+AÓB×IÈ#ÓN€LØ—I‘I˜d×2€Mܘ~Ô/@À×ATÑATÐVZ×VhÑVhÓ/iÓj€NܘnÔ.?À×@RÑ@RÐTX×TfÑTfÓ.gÓh€MÜÐ 2Ô4EÀd×F]ÑF]Ð_c×_qÑ_qÓ4rÓs€OÜÐ.Ô0AÀ$×BTÑBTÐVZ×VhÑVhÓ0iÓj€MØ<@¿M¿M¸M”9˜[¨$¯-©-Ô8ÌyÐYdÐfyÓOz€LØ/3¯y¯y¨yŒy˜ §¡Ô+¸b€Hð×"×>B×=MÑ=MÐ<NðO ñ
ð)+ðð,×#×>B×=NÑ=NÐ<OðP ñ
ð*,ðð,×)×>B×=TÑ=TÐ<UðV ñ
ð02ððð
×*
ð €Oð ð)˜*ð
€E÷d ód ð
 ðd ô
 Ð1IÔ JÐd ðLd ð8&*§Z¡Z Lð9d ð81Zð9d ð8[_÷[eñ[eðZfð9d ð8f ð9d ð<!%§
¡
˜|ð=d ð<,Oð=d ð<PT÷PZñPZðO[ð=d ð< [ð=d ôN˜v t§}¡}Ó6ðOd ðN7ðOd ôP˜w¬¨D¯J©J«Ó9ðQd ðP:ðQd ôR˜¯
©
Ó4ðSd ðR5ðSd ôT˜y¨$¯,©,Ó8ðUd ðT 9ðUd ôf˜u d§l¡lÓ4ðgd ðf5ðgd ôh˜¯
©
Ó7ðid ðh8ðid ôj˜u d§k¡k×&:Ð&:°UÓ<ðkd ðj=ðkd ôl˜y¨-Ó9ðmd ðl:ðmd ðn#ðod ðn$ðod ðp!/ðqd ðp"ðqd ðr .ðsd ðr !ðsd ôD˜|¨T¯\©\Ó;ðEd ðD<ðEd ôF˜{¨D¯M©MÓ;ðGd ðF<ðGd ôHÐ2°D×4MÑ4MÓOðId ðHPðId ôJÐ0°$×2LÑ2LÓNðKd ðJOðKd ôLÐ5°{ÓDðMd ðLEðMd ôN˜~¨{Ó<ðOd ðN=ðOd ôPÐ2°KÓAðQd ðPBðQd ôR˜}¨hÓ8ðSd ðR9ðSd ðV!ðWd ðV"ðWd ôf˜\¨2Ó/ðgd ðf0ðgd ôh˜Ó1ðid ðh2ðid ðj"ðkd ðj#ðkd ðl!/ðmd ðl"ðmd ðn#ðod ðn$ðod ðp!/ðqd ðp"ðqd ðr .ðsd ðr!ðsd ðt*ðud ðt
ôud ðd rc óbV^8„dQhR\R\R\R\R\R,/#)rÚdog_nameÚdog_birth_dateÚ
owner_namer9rNr/)rs"rrrös7÷)ñ)¤sð)¼Cð)ÌSð)Ô^að)ÔfjÐmqÕfqñ)rcó.\V4p\V4p\V4pV'd V'gR#\P!VR4P4pT\^R7,p\P!RRTP44PR4;'gRp T R2p
RT R 2p T'gT
MT
R
T 2p R \P!4 R \P!4PR
4 RTPR4 RTPR4 RT
RT RT R2p
RRT R2R\ P"!T
P%R44P'R4/# \d\
P
RY14R#i;i)%Y-%m-%dz<[%s] onboarding birthday calendar skipped: invalid dogAge=%r)Údaysz
[^a-z0-9]+Údogz 's BirthdayzGoodWalk reminder: z 's birthday.ú for zƒBEGIN:VCALENDAR
VERSION:2.0
PRODID:-//GoodWalk//Dog Birthday Reminder//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:z@goodwalk.co.nz
DTSTAMP:z%Y%m%dT%H%M%SZz
DTSTART;VALUE=DATE:z%Y%m%dz
DTEND;VALUE=DATE:z
RRULE:FREQ=YEARLY
SUMMARY:z
DESCRIPTION:z
X-WR-CALNAME:z
END:VEVENT
END:VCALENDAR
Úfilenamez goodwalk-z
-birthday.icsÚcontentr Úascii)rrÚstrptimeÚdateÚ
ValueErrorrwrÚrerPr}r|rXrYÚutcnowryÚbase64Ú b64encodeÚencodeÚdecode)r9Údog_name_cleanÚbirth_date_cleanÚowner_name_cleanÚ starts_onÚends_onÚ safe_nameÚsummaryÚ descriptionÚ
calendar_nameÚics_bodys&&&& rÚ_birthday_ics_attachmentrÅöܘhÓ'€NÜ ÓÜ 
Óç ×!1ÙðÜ×%Ð&6¸
ÓC×Jˆ ð
œ)¨Ô+€GÜ} c¨>×+?Ñ+?Ó+AÓB×ÓVÐQV€IØÐ   Ð,€GØÐ'7°|ÐD€Kß#3G¸G¸9ÀEÐJZÐI[Ð9\€Mð ô zŠz‹|ˆnðÜ—?$×-Ð.>ÓAØ'×Ó<Ø#×,¨XÓ8àØ"$Ø%ð'ð ð
ð( i  ˜{¨-Д6×# H§O¡O°GÓ$<Ó=×DÀWÓ ðøô9 ôÜÐUÐWaÔðúsµ%E/Å/!FÆFcóHV^8„dQhR\R\R\R\/#)rÚpayloadr+r9r)rs"rrr$s(÷/ñ/œtð/¬Cð/¼Sð/ÄTñ/rcƒó„"\'d@VPR.4pVPRR4p\PRWV4RR/#Rp\ ^\
^,4p\ P!4p\P!\PPV4GRjxL
p\ P!4V,
R,p \V\4'dVPR4MRp
\PRY!VPR4T\
Yš;'gR 4T;'g/u# VfQhVh\ Ed^p T p\ P!4T,
R,p \#T R
R4;'g\#T R R4p \T \$4;'d$R T u;8*;'dR
8Mu;'dT R8gp
\PRY!T\
T \'T 4P(Y¼RR7
T
2026-05-18 22:25:43 +12:00
'd\PRY!T 4Rp ? T\
8Xd Rp ? EK^T^,
,\*P,!^R4,p\PRY!T4\P.!T4GRjxL
Rp ? EKQRp ? ii;i5i)ÚtoÚsubjectz (no subject)u7[DEV] skipping email send — label=%s to=%s subject=%rÚidzdev-modeNrWz1[%s] %s sent to %s (attempt %d/%d, %.0fms, id=%s)zn/arÚcoderàr;z?[%s] %s send failed (attempt %d/%d, %.0fms): %s: %s (status=%s)T©Úexc_infoz2[%s] %s: non-retryable status %s, aborting retriesgš™™™™™Ù?z[%s] retrying %s in %.2fs)r@r&rwÚrangeÚMAX_SEND_ATTEMPTSrr<r(r)ÚresendÚEmailsÚsendr£rFr6rÚtypertÚrandomÚuniformÚsleep)r+r9Úlast_excÚattemptraÚresultrcÚemail_idrµÚstatusÚ
non_retryableÚbackoffs&&& rÚ _send_emailrß$s7é߃xØ
[‰[˜˜
Ø—+‘+˜i¨ÓÜÐPÐRWÐ]dÔ!à!%€Hä˜ÔÕÜ—."ˆð! )Ü"×,¬V¯]©]×-?Ñ-?ÀÓIˆFÜŸ.š.Ó*¨WÕ4¸Õ<ˆJÜ+5°f¼d×+CÒ+Cv—zz ˆ K‰KØ 7§;¡;¨tÓ#4°gÔ?PØ×ô
ð
—<<˜ ñ3ðJ Ò ÐÐ Ø
€NñGJøôõˆHÜŸ.š.Ó*¨WÕÕ<ˆ˜S Ó6×T¼'À#ÀvÈtÓ:Tˆ˜6¤3Ó'×Q¨C°6×,?Ô,?¸CÔ,?×QÀFÈcÁMð
ô
N‰NØ 7Ô,=¸S“ ×" ð
ô
÷ Ü Ø vôöØÔؘW q)¬V¯^ª^¸A¸sÓ-CÕCˆGÜ K‰KÐ3°ZÈÔ —-’- Ó (ûð/ )üsˆA=KÂ2EÂ2EÂ3A?EÄ3EÅEÅ
KÅEÅ J=Å AJ8Æ>J8Ç
2026-05-18 22:25:43 +12:00
J8ÇAJ8È5KÈ< J8ÉKÉAJ8Ê+J.Ê,J8Ê1KÊ8J=Ê=Kcó$V^8„dQhR\/#r)rs"rrrVs÷ñÔ(9ñrcó\\P!4R,4p\R/RRbRRbRRbRRbR R
bR R bR
RbRRR.bRVR,
bRVR,
bRVR ,
bRVR!,
bRVbR^bR.R"ObRRbRRbp\V4V#)#rWr€r~rhzSarah Thompsonrzsarah.thompson@example.comriz 021 555 0142rÚMilorz Grey Lynnr…zÉMilo is a 2-year-old cavoodle with good recall and a friendly nature. He loves other dogs, is comfortable off lead in safe areas, and we are looking for regular weekday pack walks while we are at work.rƒz
Pack Walksz Puppy Visitsrkrlrmrnror„r…rpz=https://www.google.com/search?q=goodwalk+auckland+dog+walkingrqz2https://www.goodwalk.co.nz/book?service=pack-walksréiPø i(|iâ)Ú/z /pack-walksz /our-pricingz/book)rrr}r)Únow_msÚsamples rÚ_build_startup_test_submissionræVÜ
2026-05-18 22:25:43 +12:00
˜
$€Fä
òÙðáññð ñ
ð ñ ð
2026-05-18 22:25:43 +12:00
ñ
Kðð ÑðÐ 9ÖðÐ!;ÖðÐ 8Öð "Ð%>Ö?ð!ñ"ð#ñ$ð%ó&>ð'ñ(Qð)ñ*Bð+€Fô.˜ €MrcóV^8„dQhRR/#)rs"rrrts÷RñR¨ñRrcƒóH"\'g\PR4R#Rp\4pR\R\.R\ VP 4RRVP RVP R 2R
\VR R \ R 24/p\VR
VR7GRjxL
R#L5i)zBStartup test email skipped: OWNER_BCC is not set to a real addressNz startup-testÚfromrÉrMu*Startup preview — New GoodWalk lead — ú (rYÚhtmlz 127.0.0.1zStartup Preview (Ústartup_test_email©r+r9) ÚSTARTUP_TEST_RECIPIENTrwr6rLrrrhrrJrˆ)r9s rÚ_send_startup_test_emailrïtséß  Ðà€JÜ
2026-05-18 22:25:43 +12:00
-€Fà
Ø Ô”C˜Ÿ ÓÐÇÁÐ?PÐPRÐSY×SaÑSaÐRbÐbcÐ ˜F KÐ3DÄ[ÀMÐQRÐ1SÓ €Gô gÐ%9ÀjÔ
Q×QùsBB"ÂB ÂB"ÚstartupcóV^8„dQhRR/#)rs"rrrs÷PñP PrcƒóÄ"\4GRjxL
\P!4'Ed\4GRjxL
p\ V\
4'dVs\4GRjxL
p\ V\4'dDVs \'d6\P\P4P44\4GRjxL
p\ V\
4'dVs\ P#R\%\ 4\%\4\%\44\+4GRjxL
\,e\,P/4'd!\0P2!\544sR#R#ELwELKEL$\&d\ P)R4L„i;iLy \&d\ P)R4L™i;i5i)NzCAdmin state refreshed from postgres: clients=%d emails=%d drafts=%dz=Admin state refresh from postgres failed; using JSON snapshotzStartup test email failed)rrFr1r&rCr'r|r}rÚ_draftsrwr6r\Ú_birthday_auto_taskÚdoner(Ú create_taskÚ_birthday_auto_sender_loop)Ú
db_clientsÚ db_emailsÚ db_draftss rÚ_startup_mail_checkrûˆshéô
×Ò×Óð ^Ü<×<ˆ˜*¤d×+Ø#-Ð Ü:ˆ˜)¤S×)Ø"+ß“;Ü#× ×(9Ñ(9Ó(;×(AÑ(AÓ(CÔ2×2ˆ˜)¤T×#Ü K‰KÐÔ-¬s´?Ó/CÄSÌÃ\ô
2026-05-18 22:25:43 +12:00
Sð
(×Ò"Ô&9×&>Ñ&>×&@Ò&@Ü%×1Ô2LÓ2NÓñ'Aò5 
3øô
ô ^Ü × Ñ Ð  ^úñ )øÜ ô×ÑÐ6üs¥G FG ²
F¿F
Á)FÁ)F
Á*'FÂAFÃFÃAFÄ1
F:Ä>F8Ä?F:Å!G Å%#G Æ
FÆ
FÆFÆ F5Æ2G Æ4F5Æ5G Æ8F:Æ: GÇG ÇGÇG ÚshutdowncóV^8„dQhRR/#)rs"rrr¬s÷#¨$ñ#rcƒó¦"\e(\P4\GRjxL
RsR#R#L
\PdLi;i5i)Úcancelr(ÚCancelledErrorrérrÚ_shutdown_background_tasksr«sPéôÒ× Ü%× ñ

&øÜ× Ù ð üs1A  6©4ª6®A´6AÁ AÁ
AÁAz/healthcó$V^8„dQhR\/#rrE)rs"rrr·s÷ñ”dñrcƒó"RR/#5i)ÚokrérrÚhealthrséà  Ðùscó<V^8„dQhR\R\R\/#)rrrr$)rs"rrr»s!÷) ñ) œCð) ¤sð) ¬sñ) rcó8R\ RV R\^<, R2#)a¿<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Your Goodwalk login code</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f2f2f0;padding:40px 16px;">
<tr><td align="center">
<table width="480" cellpadding="0" cellspacing="0" role="presentation"
style="max-width:480px;width:100%;border-radius:16px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.08);">
<tr>
<td style="background:#213021;padding:32px 40px;text-align:center;">
<img src="aÊ" width="161" height="32" alt="Goodwalk" style="display:inline-block;max-width:161px;height:auto;border:0;">
</td>
</tr>
<tr>
<td style="background:#ffffff;padding:40px 40px 36px;text-align:center;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#888;margin-bottom:16px;">Your login code</div>
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:52px;font-weight:800;letter-spacing:0.18em;color:#213021;background:#f8f7f4;border-radius:14px;padding:20px 28px;display:inline-block;margin-bottom:24px;">aŽ</div>
<p style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;color:#666;line-height:1.6;margin:0 0 8px;">
Enter this code on the Goodwalk onboarding page.
</p>
<p style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;color:#aaa;margin:0;">
This code expires in aë minutes. If you didn&rsquo;t request this, you can safely ignore it.
</p>
</td>
</tr>
<tr>
<td style="background:#213021;padding:20px 40px;text-align:center;">
<div style="font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;color:#5a8a5a;">
Goodwalk &middot; Auckland, New Zealand
</div>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>)rN)rs&&rÚ_auth_code_emailr»sEðô !Að BFðAGðG
%:¸RÕ$?Ð#@ðAð3( ð( rcó0V^8„dQhR\R\/#r$)rs"rrrçs÷ñœcð¤cñrcóÀ\V4pV'gR#\P!V4pVP RVP R4 2# \
dTu#i;i)zTo be confirmedÚ z%b %Y)rrÚ
fromisoformatÚdayryr´)ÚrawÚparseds& rÚ_format_date_labelrçsYÜ
5‹/€Cß Ù ðÜ×Ó,ˆØ—*‘*˜Q˜vŸ¨wÓ9øÜ ôØŠ
ðús—5A
Á
AÁAc ó`V^8„dQhR\R\R\R\R\R\/#)rÚ client_namer¦Ú service_typeÚ
price_detailsÚ
start_daterr$)rs"rrròs9÷8 ñ8 ¬#ð8 ¼ð8 ÌCð8 Ô`cð8 Ôqtð8 Ôy|ñ8 rcó8VP4'dVP4^,MRpVP4'dRV 2MRp\V4pR\ RT RT;'gR RV R \ R
V4 R \ R V4 R \ R
V4 R2#)rÚtherer®rA<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Welcome to the pack</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f2f2f0;padding:28px 12px;">
<tr><td align="center">
<table width="560" cellpadding="0" cellspacing="0" role="presentation" style="max-width:560px;width:100%;border-radius:22px;overflow:hidden;box-shadow:0 10px 32px rgba(17,20,24,0.08);">
<tr>
<td style="background:#213021;padding:28px 24px;text-align:center;">
<img src="aÜ" width="161" height="32" alt="Goodwalk" style="display:inline-block;max-width:161px;height:auto;border:0;">
</td>
</tr>
<tr>
<td style="background:#fbfaf7;padding:34px 24px 30px;">
<div style="display:inline-block;background:#ffd100;border-radius:999px;padding:8px 14px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;font-weight:700;color:#213021;letter-spacing:0.06em;text-transform:uppercase;">
Welcome to the pack
</div>
<h1 style="margin:18px 0 12px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:32px;line-height:1.05;letter-spacing:-0.03em;color:#171b20;">
Hi z, we&rsquo;d love to get úyour dogzø started with Goodwalk.
</h1>
<p style="margin:0 0 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;line-height:1.7;color:#4b584b;">
We&rsquo;ve set aside the details belowaÈ. When you&rsquo;re ready, complete your onboarding form and we&rsquo;ll take it from there.
</p>
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#ffffff;border-radius:18px;border:1px solid rgba(33,48,33,0.08);margin-bottom:22px;">
<tr><td style="padding:22px 20px;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
r—rvÚPriceú
Start datea
</table>
</td></tr>
</table>
<a href="https://onboarding.goodwalk.co.nz/" style="display:inline-block;background:#213021;color:#ffffff;text-decoration:none;border-radius:999px;padding:14px 20px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;font-weight:700;">
Complete onboarding
</a>
<p style="margin:18px 0 0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:14px;line-height:1.7;color:#657365;">
Use the same email address you originally used with Goodwalk. We&rsquo;ll send you a one-time code when you sign in.
</p>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>)r|rrNr/)rrrrr{Údog_lineÚformatted_start_dates&&&&& rÚ_welcome_pack_email_htmlròØ+6×+<Ñ+<×+>Ò+>×$ 'ÀG€JØ%-§^¡^×%5Ò%5x!¸2€HÜ-¨jÓð
ô !ðÐ6°x×7MÐ7MÀ:Ð6NðO7?°Zð@ô ˜y¨,Ó9ܘw¨
Ó8ܘ|Ð-AÓDðC3 ð3 rcó<V^8„dQhR\R\R\/#)rrrr$)rs"rrr-s!÷( ñ( ¤cð( ´( ¼Sñ( rc óºVP4'dVP4^,MRpVP4;'gRpR\ RV RV RV R2 #)rrr<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Happy birthday from Goodwalk</title>
</head>
<body style="margin:0;padding:0;background:#f2f2f0;">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="background:#f2f2f0;padding:28px 12px;">
<tr><td align="center">
<table width="560" cellpadding="0" cellspacing="0" role="presentation" style="max-width:560px;width:100%;border-radius:22px;overflow:hidden;box-shadow:0 10px 32px rgba(17,20,24,0.08);">
<tr>
<td style="background:#213021;padding:28px 24px;text-align:center;">
<img src="aæ" width="161" height="32" alt="Goodwalk" style="display:inline-block;max-width:161px;height:auto;border:0;">
</td>
</tr>
<tr>
<td style="background:#fbfaf7;padding:34px 24px 30px;">
<div style="display:inline-block;background:#ffd100;border-radius:999px;padding:8px 14px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:12px;font-weight:700;color:#213021;letter-spacing:0.06em;text-transform:uppercase;">
Happy birthday
</div>
<h1 style="margin:18px 0 12px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:32px;line-height:1.05;letter-spacing:-0.03em;color:#171b20;">
Happy birthday to z¾.
</h1>
<p style="margin:0 0 18px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;line-height:1.7;color:#4b584b;">
Hi zE, sending a little birthday love from all of us at Goodwalk. We hope aJ has a very good day.
</p>
<p style="margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:15px;line-height:1.7;color:#4b584b;">
Aless and the Goodwalk pack
</p>
</td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>)r|rN)rr{s&& rÚ_birthday_email_htmlr -swØ+6×+<Ñ+<×+>Ò+>×$ 'ÀG€JØ—^%×€Nð
ô !!ð"0Ð 0ð1ðÐbÐcqÐbrð sð3$ ð$ rcó>V^8„dQhR\R\R,/#)rÚtodayN)rr)rs"rrrXs÷ñ¬Cð¼À4½ñrcó\V4pV'gR#\P!VR4P4pT;'g\P
!4P4pTP pTPTR7pYd8dT^,
pTPTR7pT#T# \dR#i;i \dTPT^^R7pKZi;i \dTPT^^R7pT#i;i)Nrª)Úyear)r$Úmonthr
)rrr´r>r$Úreplace)r"rÚ
birth_dateÚ
today_dateÚ target_yearÚ candidates&& rÚ_upcoming_birthday_dater+XsÜ

"€Cß ÙðÜ×& s¨JÓ7×>ˆ
ð×)œ8Ÿ<š<>×1€JØ—//€Kà
ð Ø"× Ð<ˆ ð ÔØˆ ð NØ"× Ð<ˆ Ј9Ðøô- ôÚðûôô à"× À1È"ÐMˆ ð ûôô NØ"× À1È"ÐM‰Ià Ðð Nús5—%B0Á7CÂC(Â0 B?Â>B?ÃC%Ã$C%Ã(D Ä
D c ófV^8„dQhR\R\R\R\R,R\RR/#)rrr.r9Úmark_auto_yearNr¤r)rrFr)rs"rrrxsH÷7´#ðð7ÔRUð7ÔgjÐmqÕgqðDHðUYñ7rc
ƒóÆ"\VPRR44P4p\VPRR44P4pV'd#\P4P 4MTpRT;'gR 2pV'dRT;'gT RV 2pR\
RV.R \ R
VR \WV4/p \'dV'g \.V R &\Y”'dR
MRVR7GRjxL
V'dR#R\P!4PRR7/p
Ve\V4V
R&\W
4GRjxL
R#L\L5i)rhrArzHappy birthday z
from Goodwalkú
[PREVIEW for ú] rérMÚbccÚbirthday_email_previewÚbirthday_emailríbirthdayEmailLastSentAtr=©ÚtimespecÚbirthdayEmailLastSentYear)rr&r|rCr}rLrNr r^rr>Ú isoformatr6) rr.r9r-rÚ recipientrÊÚprofile_updates &&&&& rÚ _send_birthday_email_for_profiler;xs=éÜg—kk *¨bÓ2×:€KÜ7—;;˜y¨"Ó.×6€Hß/6” ×+¸E€IØ × ;Ð ;¨OÐ=€Gߨ! +×"6Ð"6°Ð!7°r¸'¸ÐCˆà
Ø ˆyˆkØ”HØÔ$ [Ó €G÷ƒzŸ'܈ä
Ñ%=ÐN^ÐkuÔ
v×Ùð "¤8§<¢<£>×#;Ñ#;ÀYÐ#;Ó#Oð€NðÒ!Ü69¸.Ó6IˆÐ
 Ó
6×wñ7ùsCBE! E! E!Â"9E!Ã$E!ÄEÄ E!Ä
A E!ÅEÅE!ÅE!cóV^8„dQhRR/#)rs"rrrs÷^ñ^¨dñ^rc ƒó~"\P!4P4pVPVP3p\ \ P44EF'wr#VPR4'gKVPR4'gK8\\VPRR444pV'dVPVP3V8wd\VPRR44P4pV\VP48XdR\P!4PR, 2p\!W#W`PR7GRjxL
\"P%R Wb4EK* R#L! \&d%p\"P)R
YgR R 7Rp?EKZRp?ii;i5i)
ÚonboardingCompletedÚbirthdayAutoSendrrAr7zbirthday-auto-:NéN)r-Nz'[%s] auto birthday email sent: email=%sz#[%s] auto birthday email failed: %sTrÍ)rr>r%r
r,r1rtr&r+rr|r$rXrYrZr;rwr6Úerror)r"Útoday_month_dayrr.ÚupcomingÚlast_sent_yearr9s rÚ_run_birthday_auto_sender_oncerEsIéÜ LŠL‹N× Ñ Ó !€EØ—{‘{ E§I¡IÐ.€OäÔ8‰ˆØ{‰{Ð Ø{‰{Ð ä*¬3¨w¯{©{¸8ÀRÓ/HÓ+IÓJˆß˜HŸN™N¨H¯L©LÐ9¸_Ô ä˜WŸ[™[Ð)DÀbÓØ œS §¡›_Ô à%¤d§j¢j£l×&6Ñ&6°rÕ&:Ð%;Ð<ˆ
ð ^ÜÀ×\fÑ\fÔg×
+‰+Ð×
Só# høäô ^Ü
,‰,Ð<¸jÐX\ˆ,×
]ûð ^üsIBF=ÂB;F=Å
F Å'F Å(F ÆF=Æ F Æ F:ÆF5Æ.F=Æ5F:Æ:F=cóV^8„dQhRR/#)rs"rrr°s÷=¨$ñ=rcƒóø"\4GRjxL
\P !\4GRjxL
K8L( \Pdh\d\P R4L]i;iLC5i)TNz Birthday auto sender loop failed)rEr(rrwr\r×r“rr°shéØ
ð AÜ2×
mŠmÔ<×
3øÜ× Ø Üô AÜ × Ñ Ð  Aúá<ùsAA:
=;=A:´A8µA:»=½A5ÁA5Á2A:Á4A5Á5A:z^[^\s@]+@[^\s@]+\.[^\s@]+$z/auth/request-codecó$V^8„dQhR\/#rRrS)rs"rrr¿s÷,ñ,¤Wñ,rc
ƒóŠ"\VPR\P!4PR,4p\ V4pVP
4GRjxL
p\VPRR44P4P4p\;_uu_4GRjxL
\W!4RRR4GRjxL
V'd\PV4'g\RRR7hV\ 9dX\"P%RWV4\;_uu_4GRjxL
\'W!R 4RRR4GRjxL
\R
R R7h\(P*!4p\;_uu_4GRjxL
\,P/V\144pV'd'WV^,,
R 8”dVP34K.\5V4\6d\R
RR7hVP9V4\\:P<!R4R,4pRVR\(P(!4\>,R^/\@V&RRR4GRjxL
\"P%RW4\B'd\"PERVX4RR/#\GR\HRV.RRR\KVX4/RVR7GRjxL
RR/#EL{EL0EL +GRjxL
'giEL0;iEE+GRjxL
'giELÎ;iEL+GRjxL
'giLÕ;iLr5i)r9rUNrrAz#Please enter a valid email address.rz![%s] auth: unknown email=%s ip=%sÚ
unknown_emailr u‡We don’t have your email on file. Please use the address you used when enquiring with Goodwalk, or contact us at info@goodwalk.co.nz.rŒr;z8Too many code requests. Please wait before trying again.i »
i †rz#[%s] auth: code issued for email=%sz[DEV] auth code for %s: %srézYour Goodwalk login coderëÚauth_code_emailrírT)&rûr[rXrYrZrr&r|r}rrAÚ _EMAIL_REÚmatchr r&rwr6rIrr<Ú_code_requestsrFrrGÚAUTH_CODE_REQUESTS_PER_HOURruÚsecretsÚ randbelowrŠÚ_pending_codesr@rLr)rr9r8Úbodyrr>ÚrequestsrÌs& rÚauth_request_coderU¾sBé䘟¨ ´d·j²j³l×6FÑ6FÀrÕ6JÓK€JÜ Ó €BØ× €DÜ ˜  &× .× 6€EçzŽzܘ œ Ÿ¨×¨Ð4YÔ ”OÔ ÐÈBÔ—:–:Ü  °Ô —:äØð]ô
ð
ô
.Š.Ó
€CßzŽzÜ!×,¨U´E³GÓߘ3¨!¥Õ,¨tÔ × Ñ Ö Ü ˆx‹=Ô ¨CÐ8rÔ ˜Ôä”7×$ VÓ,¨vÕ6ˆØ!'¨¨|¼T¿YºY»[ÔK`Õ=`ÐblÐnoÐ pŒ÷ ‡K5°zÔƒxÜÐ3°U¸DÔ
$ˆô
Ø
”Z ¨ w° Ð;UÐW]Ô_oÐpuÐw{Ó_|Ð 
÷
ð
ð
$ˆòS ÷zzzú÷—:—:—:ú÷zzzúñ 
ùsAMÁKÁA
MÂ*KÂ+MÂ. K Â: MÃKÃ MÃMÃ-AMÄ.K=Ä/MÄ2
LÄ? MÅ
LÅ 8MÆL ÆMÆ&L%Æ.B+L%É MÉ$L#É%A)MËMË MËMËMË K: Ë&K)Ë'
K: Ë2K: Ë4
MÌMÌL Ì L Ì
L ÌL Ì
MÌ#MÌ%L> Ì+L.Ì,
L> Ì7L> Ì9 Mz/auth/verify-codecó$V^8„dQhR\/#rRrS)rs"rrrïs÷&&8¤Gñ&8rc
ƒó~"\VPR\P!4PR,4p\ V4pVP
4GRjxL
p\VPRR44P4P4p\VPRR44P4p\;_uu_4GRjxL
\W!4\PV4pV'g\W!R4\RRR 7h\ P !4VR
,8”d0\P#VR4\W!R 4\RR R 7hVR
;;,^,
uu&VR
,\$8”d0\P#VR4\W!R4\RRR 7hVR,V8wdH\'^\$VR
,,
4p\W!R4\RRT RV^8wdRMR R2R 7h\P#VR4\(P*!^ 4pRVR
\ P !4\,,/\.V&RRR4GRjxL
\0P3RW4RRRXRV/#EL=EL( +GRjxL
'giL?;i5i)r9rUNrrAÚno_pending_coderàz7No code found for this email. Please request a new one.rrÚ expired_codez0Your code has expired. Please request a new one.rÇÚmax_attempts_exceededz7Too many incorrect attempts. Please request a new code.Ú
wrong_codezIncorrect code. z attemptr8z remaining.z'[%s] auth: session created for email=%srTr
)r[rXrYrZrr&r|r}rrArRrIr rrÚAUTH_CODE_MAX_ATTEMPTSr~rPÚ
token_urlsaferrrwr6) rr9r8rSrÚpendingr@r
s & rÚauth_verify_coder_îs%é䘟¨ ´d·j²j³l×6FÑ6FÀrÕ6JÓK€JÜ Ó €BØ× €DÜ ˜  &× .× 6€EÜ ˆtx‰x˜ Ó ,€DçzŽzܘ ×$ çÜ  Ð1BÔ ¨CÐ8qÔ 9Š9‹;˜ Õ × Ñ ˜u dÔ  °Ô ¨CÐ8jÔ 
טqÕ ÓØ  Ô!7Ô × Ñ ˜u dÔ  Ð1HÔ ¨CÐ8qÔ 6?˜ ˜5¸À
Õ8KÕLˆ  °Ô ¨CÐ:JÈ9È+ÐU]ÐenÐrsÔesÑ^aÐy{Ð]|ð}Hð9IôJð
Jä×ј5 ×% )ˆØ#*¨E°<ÄÇÂÃÔOgÕAgÐ"hÔ˜Ñ÷9zô< ‡K9¸  ¨°Ð 7òG ÷zzzüsbAJ=ÁJÁA6J=ÃJÃJ=ÃFJ!É+ J=É6JÉ7#J=ÊJ=ÊJ=Ê!J: Ê'J*Ê(
J: Ê3J: Ê5J=z /auth/verifycó$V^8„dQhR\/#rRrS)rs"rrrs÷LñLœwñLrcƒó "\V4GRjxL
p\PV/4p\PV/4pRRRVRVRV/#L:5i)NrTrr.Údraft)rr1r&)rrr.rbs& rÚ auth_verifyrcsPéäÓ1× 1€EÜ×" 5¨"Ó-€GÜ K‰K˜˜ "€EØ $˜ ¨ °7¸GÀUÐ 
2ùr"z /auth/logoutcó$V^8„dQhR\/#rRrS)rs"rrr!s÷ñœwñrcƒó`"VPPRR4pVPR4P4pV'dB\;_uu_4GRjxL
\
P
VR4RRR4GRjxL
RR/#RR/#L2L +GRjxL
'giRR/#;i5i)r rAr NrT)rr&rr|rrr)rrr
s& rÚ auth_logoutrf s}éà—/‘/×% o°rÓ:€KØ × $ YÓ 7€Eß ß—:–:Ü × Ñ  ¨Ô —:à $ˆˆD$ˆ÷—:—:“:à $ˆüsNAB.ÁB ÁB.ÁBÁ3 B.Á>B
Á?
B.Â
B.ÂB+ ÂBÂ
B+ Â!B+ Â# B.z/auth/save-draftcó$V^8„dQhR\/#rRrS)rs"rrr+s÷ñ¤7ñrcƒóÚ"\V4GRjxL
pVP4GRjxL
p\VPRR44P 4pVPR/4pVR 9d\ RRR7h\
V\4'g\ RRR7h\;_uu_4GRjxL
\PV/4pWEV&\\4pRRR4GRjxL
\P!\X4GRjxL
\RV4GRjxL
\P!R W4R
R /#EL0ELL”L] +GRjxL
'giLt;iLXLF5i)
formrAr•z(form must be 'onboarding' or 'contract'.rzdata must be an object.rÔzDraft saved: email=%s form=%srT)Ú
onboardingÚcontract)rrr&r|r rFrrFr(r)rwr6)rrrSrir•Ú user_draftsr+s& rÚauth_save_draftrm*séäÓ 1€Eà× €DÜ ˆtx‰x˜ Ó $× ,€DØ 8‰8F˜BÓ €Dà ШÐ4^Ô dœD× ¨Ð4MÔzŽzÜ×°Ó Ø Üœ“=ˆ÷
×
Ò
Ô-¨xÓ
8×
˜Ó
2×
‡KÔ $ˆò'
÷zzŒzúñ
2ùsŒE+EE+©EªBE+Â2EÂ3E+Â6*E à E+Ã+E Ã,"E+ÄE'ÄE+Ä"E)Ä#E+ÅE+ÅE+Å E+Å E$ ÅEÅ
E$ ÅE$ Å E+Å)E+r€zGeneral updaterÂz6Clean Goodwalk branding for everyday news and updates.Úkickerz
From GoodwalkÚ banner_emojiuðŸ¾Úaccentz#ffd100Ú accent_textz#213021Úpage_bgz#f3f0e5Úcard_bgz#fbfaf7Ú
heading_colorz#171b20Ú
body_colorz#4b584bÚ muted_colorz#6b766bÚband_bgÚ band_textÚband_decorationu$🾠· 🾠· 🾠· 🾠· ðŸ¾Ú footer_bgÚ footer_textÚ highlight_bgz#fff8d6Úhighlight_borderÚhighlight_textÚ ornament_topÚornament_bottomÚdefault_subjectzA note from GoodwalkÚdefault_headingzHello from the packÚdefault_sub_headingz*A quick update from your dog walking team.Ú default_bodyzÍThank you for being part of our community. Every wag and woof matters to us, and we have a small update to share.
We're always here if you need to chat about walks, training, or anything else dog-related.Údefault_highlightÚdefault_sign_offzAless & the Goodwalk packÚdefault_footer_noteugoodwalk.co.nz · Auckland, NZÚ christmasÚ Christmasz5Deep green and red festive styling with snow accents.zSeason's greetingsu🎄z#c0392bz#ffffffz#e8dccbz#fbf6ecz#0d3b1ez#3a4a3az#0d4d2au>℠· 🎄 · ℠· 🎠· ℠· 🦌 · ℠· ⭠· â„z#ffe8d6z#fff0eaz#7a1d12uOâ„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„ â„u$🎄 ⭠🎠🦌 ℠🎠⭠🎄u+Merry Christmas from the Goodwalk pack 🎄z"Wishing you a very woofy Christmasu<From our pack to yours — thank you for an incredible year.a'It's been a year full of muddy paws, sunny walks, and very good dogs. From all of us at Goodwalk, we wish you and your pup a warm, joyful Christmas.
We'll be taking a short break over the holidays and will be back in full swing for the new year. Looking forward to many more adventures in 2026.u?🎠Holiday schedule: walks pause from 24 Dec, resuming 6 Jan.z'Wishing you a warm and joyful ChristmasÚeasterÚEasterz2Soft pastel styling with floral and bunny accents.z Happy EasteruðŸ°z#d8a8dez#3a2a4az#fdf3f8z#5a4a5az#8a7a8az#f5d6e5z#5a2a6bu4🌷 · 🰠· 🌸 · 🥚 · 🣠· 🌷 · 🌸z#e7c9f0z#fff0fau1🌷 🌸 🌷 🌸 🌷 🌸 🌷 🌸 🌷 🌸u🥚 🰠🌸 🣠🥚 ðŸ°u%Hop on into Easter with Goodwalk ðŸ°zA happy, hoppy Easter to youz+Spring is in the air and tails are wagging.aWishing you and your pup a beautiful Easter weekend. May your walks be sunny, your eggs uneaten by curious snouts, and your treats plentiful.
A little reminder: chocolate is not for dogs, no matter how sweetly they ask. We'll be sticking to the good stuff on our walks.uT🣠Keep chocolate well out of reach — even small amounts can be harmful to dogs.zHappy Easter from all of usÚ halloweenÚ Halloweenz&Dark purple and orange spooky styling.zTrick or treatu🎃z#ff7518z#1a0d1fz#2b1838z#ffe8d0z#d8c8d8z#9a8aaaz#0a0410u<🎃 · 👻 · 🕷 · 🦇 · 🌙 · 🕸 · 🎃 · 👻z#4a2b66u1🦇 🕸 🦇 🕸 🦇 🕸 🦇 🕸 🦇 🕸u"🎃 👻 🕷 🌙 🦇 🕸 🎃uSpooky season at Goodwalk 🎃zIt's Howl-oweenz$Costumes optional. Treats mandatory.uúSpooky season is upon us. We'll be out walking with extra vigilance — fireworks, doorbell mayhem, and rogue chocolate are all on our radar.
If your pup is nervous around fireworks or doorbells, let us know and we'll factor it into walks this week.u_🫠Reminder: chocolate, raisins, and xylitol are all toxic to dogs. Keep the treat bowl high.zStay spooky out thereÚpromozSale / promotional offerz@Bright yellow promotional styling with a clear discount callout.z
Limited offeru🦴z#fffaebz#fffdf5u2★ · SPECIAL OFFER · ★ · LIMITED TIME · ★z#fff3a0u;★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★u🦴 ★ 🾠★ 🦴 ★ ðŸ¾u%A little something from Goodwalk 🦴zA special offer for our packzBecause regulars are family.zÊWe're running a small thank-you offer for our existing clients. As a regular, you're first in line.
Reply to this email or hit the button below to take it up. Offer is limited and won't be around long.u?20% off your next week of walks · Use code PACKLOVE at bookinguLimited time — be quickr'zSystem (clean sans-serif)Ústackú<-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serifÚlinkÚ
heading_stackzGeorgia,'Times New Roman',serifÚlorazLora (warm serif)z&'Lora',Georgia,'Times New Roman',serifz\https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,600;0,700;1,400&display=swapÚplayfairz"Playfair Display (editorial serif)zyhttps://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700;900&family=Source+Sans+3:wght@400;600&display=swapz2'Playfair Display',Georgia,'Times New Roman',serifÚ merriweatherzMerriweather (readable serif)z.'Merriweather',Georgia,'Times New Roman',serifzOhttps://fonts.googleapis.com/css2?family=Merriweather:wght@400;700&display=swapÚcrimsonzCrimson Text (classic serif)z.'Crimson Text',Georgia,'Times New Roman',serifzdhttps://fonts.googleapis.com/css2?family=Crimson+Text:ital,wght@0,400;0,600;0,700;1,400&display=swapÚinterzInter (modern sans)zD'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serifzPhttps://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swapÚ
montserratzMontserrat (geometric sans)zI'Montserrat',-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serifzUhttps://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swapÚopensanszOpen Sans (friendly sans)zH'Open Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serifzahttps://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,600;0,700;1,400&display=swapc
óTV^8„dQhR\R\R\R\R\/#)rÚ body_htmlÚ
font_stackruÚ accent_colorrr$)rs"rrr s1÷$
ñ$
¤ð$
´ð$
Ä#ð$
ÔUXð$
Ô]`ñ$
rcóŽa
a ^RIo RV RV R2pRV RV R2pRV RV R2pTpRV R 2o
TpS P!R
R V4pVPR R
4pVPRR4PRR4pRV 3Rllp V !RWH4pV !RWh4pV !RWx4pV !RWX4pS P!RV
3RlVS PR7pV#)zQApply email-safe inline styles to common HTML tags in user-provided body content.Nzmargin:0 0 16px;font-family:ú&;font-size:16px;line-height:1.7;color:Ú;zmargin:0 0 6px;font-family:z1margin:0 0 16px 0;padding:0 0 0 22px;font-family:ú;color:zcolor:z;text-decoration:underline;z <div\b[^>]*>z<p>rLú</p>z<br>z<br/>z<br />cóHV^8„dQhR\R\R\R\/#)rÚtagÚstyleÚtextrr$)rs"rrÚ&_style_body_html.<locals>.__annotate__. s(÷
ñ
”Sð
¤ð
¬Cð
´
rcóZ<aaSP!RS R2VV3RlVSPR7#)Ú<z (\s[^>]*)?>cóL<RS VP^4;'gR RS R2#)rAú style="ú">)Úgroup)r7s&€€rÚ<lambda>Ú3_style_body_html.<locals>._inject.<locals>.<lambda>1 s)ø€˜˜#˜˜qŸw™w q›z×/¨Rи%¸ÀÑDr©Úflags)rPÚ
IGNORECASE)sff&€rÚ_injectÚ!_style_body_html.<locals>._inject. s-ú€ØvŠvØ Ø—-‘-ô 
ð
rrÚulÚolÚliz
<a(\s[^>]*?)>cóž<RVP^4P49dRVP^4 RS R2#VP^4#)zstyle=z<ar«)r­r})r7Úa_styles&€rÚ"_style_body_html.<locals>.<lambda>< sJø€¸HÈAÏGÉGÐTUËJ×L\ÑL\ÓL^Ô<^Bq—ww˜q“zl )¨G¨9°CÐnÐde×dkÑdkÐlmÓdnÐnr)rPr&) rrurÚ base_p_styleÚ
base_li_styleÚ
base_ul_styleÚ
base_ol_styler8s &&&& @@rÚ_style_body_htmlr¿ s ù€ã
à1°*°Ð=cÐdnÐcoÐopÐq€LØ1°*°Ð=cÐdnÐcoÐopÐq€MØ
À|ÐSZÐ[eÐZfÐfgÐh€MØ!€MØ|nÐ$?Ð@€Gð €AØ
Šˆ  qÓ)€AØ (˜#€AØ &˜"×*¨8°WÓ=€A÷
ð
ñ %€AÙ'€AÙ'€AÙ'€AØ
ŠØÜ Øm‰mô  €Að
€Hrc
óTV^8„dQhR\R\R\R\R\/#)rÚ body_textrœrurrr$)rs"rrrD s1÷ñœSð¬cð¼sðÔRUðÔZ]ñrcóJaaV'dVP4'gR#RV9dRV9d\VSSV4#VPR4Uu.uF*qDP4'gKVP4NK, ppRPVV3RlV44#uupi)zÑConvert user body input to email-safe HTML.
If the input already looks like HTML (contains a tag), we treat it as HTML and inline-style it.
Otherwise we split on blank lines and wrap each paragraph in a <p>.
rAÚ>z
c3ó<<"TFpRS RS RV R2xK R#5i)z&<p style="margin:0 0 16px;font-family:rŸú;">r¢Nré)Úpararus& €€rÚ _body_to_html.<locals>.<genexpr>Q s4øéðáˆDð ° Ð<bÐcmÐbnÐnqÐrvÐqwÐw{Õùsƒ)r|r¿rv)rurrÚpartss&ff& rÚ
_body_to_htmlrÉD sˆù€÷ ˜IŸO™O×à
ˆiÔ˜C   ¨:°zÀ<ÓPà )§¡°Ô 7Ó EÑ 7˜1¿7¹7¿9ŒYˆQW‰WŽYÑ 7€EÐ
7‰7õáóó ðùò
Fs ÁB Á.B có0V^8„dQhR\R\/#r$)rs"rrrW s÷pñpœðp¤ñprcóšT;'gRPRR4PRR4PRR4PRR4#) rAÚ&amp;Ú"z&quot;r©ú&lt;rÃú&gt;)r&s&rÚ _escape_attrrÑW sEØ KˆKR× Ñ   gÓ 6°s¸HÓ E× MÈcÐSYÓ Z× bÐcfÐhnÓ orc ó`V^8„dQhR\R\R\R\R\R\/#)rr+r^ÚbgÚ
text_colorrœrr$)rs"rrr[ s<÷ ñ œsð ¬ð ´#ð Ä3ð ÔTWð ô^añ rcóLVP4'dVP4'gR#\VP44pVP4PRR4PRR4PRR4pRV RV R V R
V R V R V R
V RV RV R2#)rA
<table role="presentation" cellpadding="0" cellspacing="0" border="0" style="margin:22px 0 6px;">
<tr><td align="left">
<!--[if mso]>
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="z\" style="height:48px;v-text-anchor:middle;width:240px;" arcsize="50%" stroke="f" fillcolor="z4">
<w:anchorlock/>
<center style="color:zV;font-family:Arial,sans-serif;font-size:14px;font-weight:bold;letter-spacing:0.04em;">zV</center>
</v:roundrect>
<![endif]-->
<!--[if !mso]><!-- -->
<a href="zO" style="display:inline-block;padding:14px 28px;border-radius:999px;background:r¡z
;font-family:zZ;font-size:14px;font-weight:700;text-decoration:none;letter-spacing:0.04em;mso-hide:all;">z/</a>
<!--<![endif]-->
</td></tr>
</table>)r|r&)r+r^Úsafe_urlÚ
safe_labels&&&&& rÚ_bulletproof_buttonrØ[ Ø ;‰;=Š= § ¡ § ¢ ÙܘCŸI™I›KÓ(€HØ—+‘+“-ß‘7˜3 Ó©°°fÓ)=¿g¹gÀcÈ6Ó>RððpðqyÐoyðzVðWYðVZðZà&˜<Ð'}ðIð~JðJðˆfÐgiÐfjÐjqÐr|Ðq}ð~KðLVðKWðWqðr|ðq}ð} ð
ð
 rcóœV^8„dQhR\R\R\R\R\R\R\R\R \R
\R \/ #) rÚ template_idÚheadingrSÚ cta_labelÚcta_urlÚ sub_headingr~Úsign_offÚ footer_noteÚfont_idrr$)rs"rrrq ÷d ñd Üðd ä
ðd ô ðd ôð d ô
ð d ô ð
d ôðd ôðd ôðd ôðd ô ñd rc
óV\PV\R,4p
\PV \R,4p V R,p V R,p
V R,pV
R,pV
R,pV
R,pV
R,pV
R ,pV
R
,pV
R ,pV
R ,pV
R
,pV
R,pV
R,pV
R,pV
R,pV
R,pV
R,pV
R,pV
R,pV
R,p V
R,p!T;'g
V
R,P4p"T;'g
V
R,P4p#T;'gV
PRR4P4p$T;'g
V
R,P4p%T;'g
V
R,P4p&T;'g
V
R,P4p'\ V'V VV4p(RV R V R!V( R"2p)Rp*V&'dR#V R$V R%V R&V R'V& R(2 p*\ W4VVV 4p+Rp,V#'d
R)V
R*V R+V# R,2p,Rp-V'd
R-V R.V R/V R02p-Rp.V'd
R-V R1V R/V R02p.R2T R3T R4T R5V!'d
V!R6,MR V R72
p/Rp0V'dR8V R92p0RP
.R:NV0 NR;NV" NR<NV NR=NV NR>NT#;'gT" NR?NV NR@NV NRANV NRBNV NRCNV NRDNV NREN\ NRFNV- NRGNV NRHNV/ NRINV
NRJNV NRKNV" NRLNV, NRMNV) NRMNV* NRMNV+ NRMNV$'d;RNV ,RO,V,RP,V,RQ,V$,RR,MR NRSNV. NRTNV NRUNV NRVNV NRWNV NRQNT;'gRX NRYNV%'dRZV%,R",MR NR[N4#)\rér'rrrrprqrrrsrtrurvrwrxryrzr{r|r}r~rr€rnrorr†rAr‡r…r„z<div style="font-family:r¡z";font-size:16px;line-height:1.7;">rL
2026-05-18 22:25:43 +12:00
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="margin:8px 0 18px;">
<tr><td style="background:z;border-left:4px solid zK;padding:14px 18px;border-radius:8px;">
<p style="margin:0;font-family:z';font-size:14px;line-height:1.55;color:z;font-weight:600;">
z
</p>
</td></tr>
2026-05-04 20:32:24 +12:00
</table>z'
<p style="margin:0 0 22px;font-family:z8;font-style:italic;font-size:16px;line-height:1.5;color:z;">
z
</p>z-
<tr>
<td align="center" style="background:z\;padding:18px 24px 0;font-family:Arial,sans-serif;font-size:13px;letter-spacing:0.4em;color:z;line-height:1;">
z
</td>
</tr>z\;padding:0 24px 22px;font-family:Arial,sans-serif;font-size:15px;letter-spacing:0.4em;color:z}
<table role="presentation" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 18px;">
<tr><td style="background:z2;border-radius:999px;padding:8px 16px;font-family:z&;font-size:11px;font-weight:700;color:z7;letter-spacing:0.12em;text-transform:uppercase;">
z &nbsp; z
</td></tr>
</table>z<!--[if !mso]><!--><link href="z3" rel="stylesheet" type="text/css"><!--<![endif]-->a(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
2026-05-18 22:25:43 +12:00
<meta name="x-apple-disable-message-reformatting">
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no">
<!--[if mso]>
<xml><o:OfficeDocumentSettings><o:PixelsPerInch>96</o:PixelsPerInch><o:AllowPNG/></o:OfficeDocumentSettings></xml>
<![endif]-->
<title>z<</title>
</head>
2026-05-18 22:25:43 +12:00
<body style="margin:0;padding:0;background:z£;width:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;">
<div style="display:none;max-height:0;overflow:hidden;font-size:1px;line-height:1px;color:z
2026-05-18 22:25:43 +12:00
;opacity:0;">zn</div>
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="background:zÁ;">
<tr><td align="center" style="padding:24px 12px;">
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="600" style="max-width:600px;width:100%;background:zd;border-radius:18px;overflow:hidden;">
2026-05-18 22:25:43 +12:00
<tr>
<td align="center" style="background:z;padding:14px 20px;font-family:z,;font-size:13px;letter-spacing:0.18em;color:z ;font-weight:700;">
z
2026-05-18 22:25:43 +12:00
</td>
</tr>
<tr>
<td align="center" style="background:#213021;padding:22px 24px;">
<img src="z¯" width="161" height="32" alt="Goodwalk" style="display:block;max-width:161px;height:auto;border:0;outline:none;text-decoration:none;">
</td>
</tr>
2026-05-18 22:25:43 +12:00
z/
<tr>
<td style="background:z&;padding:30px 30px 8px;">
z4
<h1 style="margin:0 0 14px;font-family:z=;font-size:32px;line-height:1.1;letter-spacing:-0.02em;color:z";font-weight:700;">
z
</h1>
2026-05-18 22:25:43 +12:00
rMz&<p style="margin:24px 0 0;font-family:z&;font-size:14px;line-height:1.6;color:z&;">With love,<br><strong style="color:rÅz
</strong></p>z(
</td>
</tr>
z>
<tr>
<td align="center" style="background:z$;padding:22px 24px 18px;font-family:z&;font-size:12px;line-height:1.6;color:zX;">
<div style="font-size:14px;letter-spacing:0.3em;margin-bottom:8px;color:u🾠· 🾠· ðŸ¾z</div>
z<div style="font-weight:600;">zY
</td>
</tr>
2026-05-18 22:25:43 +12:00
</table>
</td></tr>
</table>
</body>
</html>)ÚMESSAGE_TEMPLATESr&Ú
MESSAGE_FONTSr|rvrN)1rÚrSr~ÚtmplÚfontrœÚheading_font_stackÚ font_linkrprqrrrsrtrurvrwrxryrzÚfooter_text_colorr|r}Úhighlight_text_colorrr€rnÚemojiÚshÚsoÚfnÚhlrÁÚbody_html_innerrÚhighlight_htmlÚcta_htmlÚsub_heading_htmlÚornament_top_htmlÚornament_bottom_htmlÚ kicker_htmlÚfont_link_htmls1&&&&&&&&&& rÚ_render_message_htmlrùq sHô × Ñ  Ô.?À Õ.JÓ K€DÜ × Ñ ˜W¤m°HÕ&=Ó >€DØg•€JؘoÕØV• €IØ
(^€FØ%€KØ9o€GØ9o€GؘÕ)€MØ#€JØ%€KØ9o€GØ!€IØÐ-€OØ!€IؘؘÕ'€LØÐØÐ 0ÕØ˜Õ'€LØÐ-€OØ
(^€FØ Õ €Eà × +Ð ++×4€AØ
×
2026-05-18 22:25:43 +12:00
4˜Ð4× ;Ñ ;Ó =€BØ
×
6d—h1°2Ó6× =Ñ =Ó ?€BØ
×
4˜Ð4× ;Ñ ;Ó =€BØ
×
2026-05-18 22:25:43 +12:00
5˜DÐ!4Õ5× <Ñ <Ó >€BØ×-˜˜-×6€Iä# I¨z¸:ÀvÓN€Oà
" : ,¨g°j°\ÐAcØ Ð
Ø
ð ðð €Nß ðà)˜NÐ*AÐBRÐASðT$Ø$. <Ð/VÐWkÐVlðmØ €dð ð  ˆô# 9°v¸{ÈJÓW€HàÐß ð 'Ø'9Ð&:Ð:rÐs~Ðrð@Ø€$ððÐð
Ðßð!(à(/ 1MðNTðMUðUØ€Nðð ÐðÐßð$(à(/ 1MðNTðMUðUØÐðð Ððà#˜HÐ$VÐWaÐVbðcIðJUðIVðVß"€eˆ¨Ð+¨F¨8ð4 ð €Kð€Nßà-¨i¨[Ð8kÐ  ÷> ó> ðð> ðÐð> ð
ð> ð ˆð> ð
> ð-4¨9ð> ð5]ð> ð^eÐ\eð> ðfsð> ðtv×szÐszÐyzÐr{ð> ð|hð> ðipÐgpð> ðqFð> ð$GNðFOð%> ð$O0ð%> ð*18¨yð+> ð*9Xð+> ð*YcÐWcð+> ð*dPð+> ð*QZðP[ð+> ð*[
ð+> ð,Ð ð-> ð,ð-> ô8 jð9> ð8! ð9> ð@
ÐðA> ð@!ðA> ðF")  ðG> ðF*
2026-05-18 22:25:43 +12:00
ðG> ðHˆMðI> ðH4ðI> ðJ5GÐ3GðK> ðJHEðK> ðJFSðETðK> ðJTðK> ðLˆcðM> ðL
ðM> ðPÐ ðQ> ðP
ðQ> ðRˆKðS> ðR
ðS> ðTÐ ðU> ðT
ðU> ðVˆJðW> ðV
ðW> ÷X\^Ð6¸ÕCÐFnÕnÐq|Õ@hõhðkxõxð{@õ@ðCEõEðHWöWðdfð
gðY> ðXg ðY> ð`
Ðða> ð`0ða> ðf1:¨{ðg> ðf;_ðg> ðf`jÐ^jðg> ðfkQðg> ðfRcðQdðg> ðfdUðg> ðhVgÐTgði> ðhhkði> ðhl{÷lUðlUðUðkVði> ðhV
ði> ÷jDFÐÕ3°hÖ>È2Ð Nðk> ðj Oôk> ð> rcóPa]tRtRtoRtRtRtRtRtRt Rt
2026-05-18 22:25:43 +12:00
Rt Rt V3Rlt
RtVtR#)ÚRenderMessageRequesti
rAr'có’<V^8„dQh/S[;R&S[;R&S[;R&S[;R&S[;R&S[;R&S[;R&S[;R&S[;R &S[;R
&#) rÚ
templateIdrÛrSÚctaLabelÚctaUrlÚ
subHeadingÚ
highlightTextÚsignOffÚ
footerNoteÚfontIdr$)rrrs"€rrÚ!RenderMessageRequest.__annotate__
sø‡Ùá
2026-05-18 22:25:43 +12:00
Ñññ ñÑñ ñ
Ññ ñ Ññ
2026-05-18 22:25:43 +12:00
ñÑññÑññÑññ
ÑòrN)rtrurvrwrSrÿrrrrrrxryrzr{s@r
s9ø‡à€GØ€DØ€HØ€FØ€JØ€MØ€GØ€JØ€F÷ƒrcóXa]tRtRtoRtRtRtRtRtRt Rt
Rt Rt .t
RtV3RltRtVtR#)ÚSendMessageRequesti%
rAr'FcóÆ<V^8„dQh/S[;R&S[;R&S[;R&S[;R&S[;R&S[;R&S[;R&S[;R&S[;R &S[;R
&S[;R &S[S[,;R &S[;R
&#)rrSrÿrrrrrÚ
recipientsr¤)rr,r)rrrs"€rrÚSendMessageRequest.__annotate__%
ø‡Ùá
ñÑññ ñ
2026-05-18 22:25:43 +12:00
Ññ ñ
Ññ
ñÑññÑññÑññÑññ
Ñññ‘X•ÑñÑòrN)rtrurvrwrSrÿrrrrrr rxryrzr{s@rrr%
sEø‡ð€GØ€DØ€HØ€FØ€JØ€MØ€GØ€JØ€FØ!#€JØ€G÷ƒrrz/owner/message-templatescó$V^8„dQhR\/#rRrS)rs"rrr6
s÷@ñ@¬7ñ@rcƒó"\V4GRjxL
2026-05-18 22:25:43 +12:00
\P4Uu.uFzpRVR,RVR,RVR,RVR,RVR,RVR,R VR
,R VR ,R
VR,RVR,RVPRR4RVR,/ NK| pp\P4Uu.uF)pRVR,RVR,RVR,RVR,/NK+ ppRRRVRV/#Lëuupiuupi5i)NrËr€rpÚ bannerEmojiroÚdefaultSubjectrÚdefaultHeadingrÚdefaultSubHeadingrƒÚ defaultBodyr„ÚdefaultHighlightr…ÚdefaultSignOffr†rAÚdefaultFooterNoter‡rrrTÚ templatesÚfonts)r!Úvaluesr&)rÚtrÚfrs& rÚowner_message_templatesr5
s5éä
˜
'×#×ñ,ˆAð
!D•'Ø Af•IØ ˜1˜ •kØ ˜1˜^Õ ˜aÐ 1Õ ˜aÐ 1Õ  Ð#8Õ!9Ø ˜1˜  Ð"5Õ 6Ø ˜aŸe™eÐ$6¸Ó  Ð#8Õ!9ó
ñðô&×
á'ˆ
2026-05-18 22:25:43 +12:00
ˆqw˜  &¥ ¨6°1°Vµ9¸gÀqÈÅzÓ
ð
ð
  Y°¸Ð ?ñ-(ùòùò"
ùs-D C=D ¬BC?Â,D Ã/DÃ3 D Ã?
D z/owner/render-messagecó0V^8„dQhR\R\/#©rr•r)r
)rs"rrrQ
s÷&Ô%9ð&ÄGñ&rc
2026-05-18 22:25:43 +12:00
ƒóv"\V4GRjxL
VP\9d\RRR7h\ VPVP
VP VPVPVPVPVPVPVPR7
pRRRV/#L¥5i)NràúUnknown template.r©r~rTrë)r!r rSrÿrrrrr)r•rs&& rÚowner_render_messager P
séä
˜
'× Ô¨Ð4GÔ Ø Ø Ø ‰ Ø
Ø Ø—O‘OØ×Ø—O‘OØ ô €Dð
 Ð (ùsB9B7B&B9z/owner/send-messagecó0V^8„dQhR\R\/#r)rr
2026-05-04 20:32:24 +12:00
)rs"rrre
s÷<Añ<AÔ#5ð<AÄñ<Arc
2026-05-18 22:25:43 +12:00
ƒóþ"\VPR\P!4PR,4p\ V4GRjxL
VP \9d\RRR7h\VP4pV'g\RRR7h\VP4pVP;'g.Uu.uFKp\V4P4'gK$\V4P4P!4NKM ppV'gV'g\RRR7h\#VP VP$VP&VP(VP*VP,VP.VP0VP2VP4R7
p\6P4P!4pV'd6R \8R
V.R \:R R
V 2RV/p \=V RVR7GRjxL
RRRR/#R \8R
V.RVR \:R VRV/p \=V RVR7GRjxL
\@PERY P \GT44RRR\GT4/#EL-uupiLy \>d/p
\@PCRY*RR7\RRTRR/R7hRp
?
ii;i\>d/p
\@PCRY*RR7\RRTRR/R7hRp
?
ii;i5i)r9rUNràrrzPlease enter a subject.z%Please choose at least one recipient.rrMz
[PREVIEW] rëÚbulk_message_previewríz$[%s] bulk message preview failed: %sTrÍéör…zThe preview could not be sent.rr1Ú bulk_messagez[%s] bulk message failed: %szThe message could not be sent.z1[%s] bulk message sent: template=%s recipients=%dÚrecipientCount)$rûr[rXrYrZr!r rr rr|r}rSrÿrrrrrrCrLrNrwrAr6) r•rr9Ú
is_previewr¦Úrecipient_emailsrëÚ
owner_addrrÇs && rÚowner_send_messager*d
é䘟¨ ´d·j²j³l×6FÑ6FÀrÕ6JÓK€JÜ
˜
'× Ô¨Ð4GÔt—|‘|Ó$€Gß Ü¨Ð4MÔd—l#€JØ9=¿¹×9NÐ9NÈBÐ9NÓbÑ9N°1ÔSVÐWXÓSY×S_ÑS_×SaÔ˜AŸ ×.Ñ9NÐРרÐ4[Ô Ø Ø Ø ‰ Ø
Ø Ø—O‘OØ×Ø—O‘OØ ô €Dô×$×,€Jçà ”JØ : œØ ˜ G 9Ð  
ˆð AܘgÐ-CÐPZÔ[× d˜I  
Ø ˆzˆ
ÐØ”HØð
€Gð}ܘÀJÔO×
 ‡KCÀZ×Q`ÑQ`ÔbeÐfvÓbwÔ (¬#Ð.>Ó*?Ð @òu(ùòcñ8
2026-05-04 20:32:24 +12:00
\øÜô AÜ L‰LÐÐ[_ˆ ¨C¸ÀzÐS\Ð^~Ð8ôAð
Aûð Aúñ PøÜ ô}Ü Ð3°ZÈtˆ Ô¨°\À:ÈyÐZzÐ4{Ô|ûð}üs¤‚A
2026-05-18 22:25:43 +12:00
K=Á I9Á
A7K=ÃK=Ã
!I<Ã0+I<ÄK=Ä-CK=Ç6JÈJÈJÈ K=È*KÈ;J?È<KÉ:K=É<K=ÊJÊ J<Ê)J7Ê7J<Ê<K=Ê?KË K:Ë )K5Ë5K:Ë:K=z/owner/client-enquirycó$V^8„dQhR\/#rRrS)rs"rrr¥
s֖,rcė "\V4GRjxL
2026-05-18 22:25:43 +12:00
VPPR4;'gRP4P 4pV'g\ RRR7h\ PV4pV'g\ RRR7h\VPR4\4'dVPR4MRpV'R VPR
R4R VPR R4R VPR R4RTR
VPR
R4RVPRR4RVPRR4R\VPR4\4'dVPR.4M.RRRRRR/ pRRRV/#ELz5i)NrrAúEmail is required.ré”zClient not found.Ú lastEnquiryÚ submittedAtÚ
lastEnquiryAtr€rhrirrrr…rprqrenquiry)
r!rr&r|r}r r1rFr,)rrr.r2s& rÚowner_client_enquiryr3¤
2026-05-04 20:32:24 +12:00
s[éä
˜
'×
×
2026-05-18 22:25:43 +12:00
!×
2026-05-18 22:25:43 +12:00
% 
.×
4°"× =× E€Eß Ü¨Ð4HÔ×" )€Gß Ü¨Ð4GÔHÜ,6°w·{±{À=Ó7QÔSW×,XÒ,Xˆgk‰k˜(Ð^b€Gß ð
˜7Ÿ;™; ¸Ó ˜7Ÿ;™; }°bÓ ˜Ÿ  J°Ó  W—[[ ¨"Ó w—{{ 9¨bÓ ˜Ÿ  J°Ó ´zÀ'Ç+Á+ÈjÓBYÔ[_×7`Ò7`˜Ÿ  J°Ô3ÐfhØ  ˜Ø  
ˆð
$˜   +ò/(ùs(FF %F¸&FÁ)FÂ A FÃB6Fz/owner/pending-onboardingcó$V^8„dQhR\/#rRrS)rs"rrrÁ
s÷&&4¬Gñ&4rcƒó$a"\V4GRjxL
RRlo.p\P4EF9wr#V\P 4P 48XdK/VP
R4'dKHTPRTRVP
RR4RVP
RR4RVP
RR4R VP
R R4R
\VP