Re: [PHP-DEV] DateTimeZone silently falls back to UTC when providingseconds

  116036
September 13, 2021 12:06 Andreas Heigl <andreas@heigl.org>
--ROrwi8taIDuQIC8rME1I3gFNuaryIC1Nq
Content-Type: multipart/mixed;
 boundary="------------D2D1F1B42E8C0941C1BC41D1"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------D2D1F1B42E8C0941C1BC41D1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Hey

On 13.09.21 13:32, Hans Henrik Bergan wrote:
>> What use-case does that serve? >=20 > if some country want to change their timezone for whatever reason, to s= ome
> timezone that didn't exist previously, could happen at any time really
I'm well aware that that could happen at any time really. And I'm well=20 aware that "at any time" also can mean "By the way, we changed 14 days ag= o". But what does that mean? That means that there are different possibilitie= s: 1. The change was announced well in advance and therefore there is a=20 TZDB release that already reflects that change. So whatever timezone we=20 are talking about: The modification is already available and can be used = via the [continent]/[city] identifier. And if we would allow all=20 existing offsets to be used, that one would also be available. 2. The change was not announced well in advance, so that there is no=20 TZDB release that reflects that change when it goes "live". You PHP=20 application is the least concern you have. Because the change is not=20 reflected *anywhere*. Not on your server, not on your database, not on=20 the users mobiles not on the users desktops, not in their smartwatches:=20 nowhere.* Yes: You would then be able to allow people to enter the=20 offset instead of letting them comfortably select a location near them=20 and extrapolate the timezone (or offset if it must be) from that. But=20 you are then handling data that is not officially registered, could=20 possibly change and might break in the future due to some differences=20 that the official sources defined but your user didn't know about. That=20 is a rabbit hole that I would not want to get into and that we should=20 not encourage to get into. And which is currently open and seems to be=20 in need of fixing. For completeness sake there is a further option: The change was=20 announced well in advance but you did not yet update your PHP-version or = the timezonedb pecl package. Do so! Preferably the former but if that is = not an option at least the later! So my question still stands: What use-case does it serve to allow offsets that are not reflected in=20 the TZDB? Again: Just my 0.02 =E2=82=AC Cheers Andreas * That almost happened some years ago. IIRC the government actually=20 postponed the change so the TZDB and all the upstream vendors could react= =2E
>=20 > On Sun, 12 Sept 2021 at 13:06, Andreas Heigl <andreas@heigl.org> wrote:=
>=20 >> Hey Benjamin, Hey All >> >> On 11.09.21 23:58, Benjamin Morel wrote: >>>> >>>>> Before doing so, shouldn't we discuss whether it makes sense to acc= ept
>>>>> a >>>>> time-zone offset with seconds, when the granularity seems to be 15 >>>>> mins? >>>>> >>>>> https://en.wikipedia.org/wiki/List_of_UTC_time_offsets >>>>> >>>>> =E2=80=94 Benjamin >>>> >>>> No need. Early timezone offsets in the timezone database are in LMT >> (local >>>> mean time), which have second granularity. >>>> >>>> cheers, >>>> Derick >>> >>> >>> Hi, sorry for resurrecting an old thread, but now that this bug >>> <https://bugs.php.net/bug.php?id=3D81097> has been fixed in PHP 8.0.1= 0, I
>> can >>> see that seconds have been forbidden from DateTimeZone altogether: >>> >>> https://3v4l.org/QpSln >>> >>> Before forbidding seconds in brick/date-time's *TimeZoneOffset* as we= ll
>>> (and going against JSR-310, which this library was derived from), can= I
>>> please know why this decision was made, when as I understand it, this=
>> goes >>> against your statement above? >> >> For me the more interesting question is: "Why would one allow to creat= e
>> any arbitrary Timezone-object using any offset at all?" >> >> Currently it is even possible to declare a Timezone Object with an >> Offset that has never been used anywhere on the globe. So for example >> `new DateTimezone(`+11:32`) is completely valid from a coding point of=
>> view but not from a timezone point of view. What use-case does that se= rve?
>> >> If one has to create a timezone-object for an existing timezone one ca= n
>> create that either via `new DateTimezone('Continent/Whatever')` or via=
>> `new DateTimezone('Etc/GMT+XX')` or via `new DateTimezone('PST')`. >> >> This does currently not support creating offset-based timezone-objects=
>> for areas such as Nepal or India that use an offset that currently can= 't
>> be declared via the `Etc`-Identifiers. >> >> So a different approach would be to only support type 1 offsets that a= re
>> known to the TZDB. Everything else (including arbitrary seconds) shoul= d
>> result in an exception. >> >> So I can understand to not allow arbitrary seconds at all. But IMO we >> should then also not allow arbitrary minutes also. >> >> But that's just my 0.02 =E2=82=AC >> >> Cheers >> >> Andreas >> -- >> ,,, >> (o o) >> +---------------------------------------------------------ooO-(_)-Ooo-= +
>> | Andreas Heigl = |
>> | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2= =B023'58" |
>> +---------------------------------------------------------------------= +
>> +---------------------------------------------------------------------= +
>> >=20
--=20 ,,, (o o) +---------------------------------------------------------ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2=B0= 23'58" | | https://andreas.heigl.org | +---------------------------------------------------------------------+ | https://hei.gl/appointmentwithandreas | +---------------------------------------------------------------------+ --------------D2D1F1B42E8C0941C1BC41D1 Content-Type: application/pgp-keys; name="OpenPGP_0xA8D5437ECE724FE5.asc" Content-Transfer-Encoding: quoted-printable Content-Description: OpenPGP public key Content-Disposition: attachment; filename="OpenPGP_0xA8D5437ECE724FE5.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFzEA7MBEACpvo0AbmZG6lUGMvDUebQcYVjOPrdqtnlb2WoZH9FrJyHyenzejO29VCjue= kdh u44sUNgEHXxExUekguLDGZOzC9926g2rGDWO3MU1oqRlKURnOWsp/i0d9WM07ihj/lL6smT9Y= Lea gtPCJporUiFW8JyIusBWWhlL8hp8ZDvEfmvi06xDXML3wXzH/KWmoew3LgdwCZPkQSIWemUDP= ZKc UL8eeVkhYIJA9VKQnGSx36p5T7Ch/l+iqiPlyY1GUNItX9AQjpr07V0kIjyK+yHn6Aw1uy1xW= rLn 7ATDX8YuMvaz72+c/P2zQReMWoZNfggd2FHOPRUHvHcC9C91PuzJh8e9hvtU/szDrPvvCVpg5= aRy mN/YPFJBSEqZfDelhD+8A1TJNPqSyzc21Qdd61636ynryawIW+HxFT/UN1eA7V5/fdjeRyNUJ= d7B 99Vo5A/lI25bIpg6cPLOLpVPFHEpNlGPQ8pcMRwnjG9GR74PTfH7Dy8Ksq8lpygPljJInZbz0= 870 cHlM5XSdIPTXWQFfJi0e2kfaLCEni/Vih+eL0e5F7X3RtaXY0HRFYHX8dY7ojf3sZJjdPVm3A= QXY 1yNkjnRxyJ/4gIwdFwYplU6lRBL92jdDLavPWVK4Dsil/woKmsCpxClWfU/MzmQlhbdH+x8V2= SYO a4aJWiixx59DxQARAQABzSFBbmRyZWFzIEhlaWdsIDxhbmRyZWFzQGhlaWdsLm9yZz7CwY4EE= wEK ADgWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQDswIbAwULCQgHAwUVCgkICwUWAgMBAAIeA= QIX gAAKCRCo1UN+znJP5clsD/4vnmCp5oVIXdNXkK3PNajHR1ddpr2+Ake+bo6TS801MSd638f2U= g/e Qmu6j0XuHbgJql9wnoDh0Oq47bPxGTszPbbhD0FL1s6YBDqJKcz2okbmYRutumC52u4h8dGxb= VjC M9le1rckK54aDjkzL27iGRNfQLw1vg9gdl1yRz866bZ75MItk/7BewJrodQ5zweNcDVOmYseP= Lpo 13peB1mzDP/tuBH4CpoeDtAb/+Rc5Qv/J6P7iMDC4fPbFIl5//Ge7blMV98seXOAYMCvDYmLc= JFb nESBla/8te8lKE2E1PjwnIeMvDfYHn17CYd2UqnmlQbJbN30/Y2eiPT9w7wjrgc+qGRWEU+hu= GMl rDXQmmAtHPADf08QwOWpDVoZ+WFsQEB3f2fsZtfOnxXv8yb+Q16kVcPWaRyvusT5KLT39h2Vv= Zlh H8uporNimjs7+Rl8Fs7PP6n2L+OCnI1sSCTixBQT4MDNM6IVxqhy5j8M9ig3vR7czJgVVsDmK= CFi gOibvIFgxfRH2A7JjyplO034eUw7I3IJdffuBWjZ8SCfwZ3sS67UaPy01UVovSQKikEJBfADE= cl4 X25YsHvHXCksYLoZHb6wvtFzUrjxXwipwzlWtNBR2gTB2lCfeCLcwYcHdN8qcgg+emxDkBHeL= /Ml w5OLGW86dy6ha3BJDQgdL8LBcwQQAQoAHRYhBJZ8z6UN/+4Du4v18sqSE8db/ORyBQJcxBvDA= AoJ EMqSE8db/ORyHLUP/iADAMreqincMvKf8A0BMhAl79ZFhXkcFeEvb7KreVNp9pFBqUMtpvD6M= wY8 MpX+B9ys7qL8uY01Mf4ovex+O3tDmRRDMtho7Af2bO7Dyku7gnjtR0qdb+ceMDyVbmODVoMN+= Sh8 a9bj0uY0BlCsOkDb6hYyIf1xXAHkrX4wZbbjzpwNWoTQxsJo5ho7V/7CXMBYL6nLYpXR7vmgU= ori 2FbmiDIu+sKWbDezWcTNXItkn0WpIGTGSPWMLzEIJznOFJZlBd2q+/YHKqO/3G53tl62XLBjj= 9TC u1cnScsFJKhVRjn/mcwI9rrg4tLuSIfGqAoq29YSd832r9iC8CBuHc/T7MySekxNrdxnpecHy= Ajw AI+RhF1g+fVrmeYt1+4stwfpmLp+gEFPiHxoQkKc2q8pjNRmtoKvf2Z9cqauB+8QWyIKjgrab= dJy ev/b54o+CqxNo4KSjhwSBjb/ihVw1W2AWLkEGJUysHP6r1E12dXlYrEvBm13LIP+OOqpZRY5K= MKi WNjmQF3wtEr6SjMYXcLx+1ydVQLqFa6in57YotfNqlehiU1KDhJ/AyU+tgBJ3OxShS6p4Gmia= Dvh 8qDp0bm7GxkQEA+8kOmn+4mY5E5LzzlbIkHoDqqZs/RkWoxNpXyhIx6zqqlE4yASuWwY98tco= mx8 /CClg5DoQAl2NvWPwsFzBBABCgAdFiEEclTRxmnDsSbzEk7xbQJ8ZCRit3gFAlzEHMsACgkQb= QJ8 ZCRit3jsmA/+JJUt4Bg9cJ3itTdP+0PfSVYh0xwR+ev5b0sAj2moWowk1U0IEzHhM5eHlAJ/5= s4/ peG2Bkv2vCB+mTMFCbcuZfdsF1N13MSFqJH9ZLjZY5QGo9IqAF+JI1Tu0zArKOXWI+Fs4WXaY= lp2 f+aMccVrd6LIObbgKKQzH2n4u3nxwfVsWSZcNVCvIQVI9FPexH9C4EbPN/ocxx4/Qewx/ie+s= slL M8CVULcZmJeN+rcjWR4hr2l9zY925WpbQ/LE6cmnqDWVS+SgFQGF6j1nsUJzRA2pYk/Q12o+2= ka9 1/o9pPu3Z8gEFu7ljflT3iO4G139crRNXRE00qfBQft9VvMl02iGQlCbK1ZER8Rou5yDPjfBk= MHP DoSUa45ILQqsUB/3rKT08ApA80QkgCh+cTyhvVCrZJPKWjusRn8mX9FM+lotL9ZWID9/Q90FJ= hli XyPj8gmsoFh+37/AV+Wl2jcNbG1CIzX1cx2KJ+2AWciBlE0046ztGuaHzpqzjeyvwxUHYTDJh= 2+t DyRCt7lrRrZuMTBlHCQw1GlSSrlPw9l1CASXto0gxnFgCpulTBHJQVPUr0XbjmT52xbmRlv3y= 4CR MCp+/0ZKzXddKZTA6XyIHuumRuKW0L1rBIfqgbUB0icE7tM/+bkYZzMExhnILF05nIIQKN5Rq= 59p t+KxrjK2t13OwU0EXMQFSAEQAL++X487itN2+5NbNK0O2iUkG6OOCK8Uiep+KpWwsfwf8rz5U= FUx Tn2EBfiTRCd9NXEMeiptjp8zsRVN2MSEv77a+aiMahUyIbI+4PUX+Y2fZRIXx7kpTn4T817iw= 19m FrSQ6c/qI88JUvmMA/r9FYbUAh0vjZEPc+WUmPnZYCShnna0pDhiJe1b3pjoxPTNA2arBkGhm= m1x th/rKN80Saf77ZtxOpRx+wiwXAKG54B6Q9fVWUzT5pRzJFPl6UEt4WaWVA8kMkbjLcv8k3fJT= MK0 ZpxjTIDFIqqYxiJIKE5TbuMvN9ilx/grUhdQ+Nu5kOJlOUiFfeqTUi/hJOljtRsh3WxJhpEmV= u+w 7/PJpLPPys1Xa7Ax6DHr/nR5iNL1tDZEjrW6/Wav7AYX8OnlZF6irml7APAusOfv4XemZfUb/= qva /pQjbJpeVYmedFyGgC96yR55bRbzXI4CHMvApRFxyUekQp09h49MvTNJ0dV3Uj9+V+PMS05OY= BIs KbRv+C9QaoCiuUK83BSd0XFvR1KuO3FRY3Dtc5zrdWuGNa0tUYAd82Dnu/pR1wmdyYdbXEcQH= uW0 Vx5Dm6TDQ1ZLNEh2ZZRqWQ8Qrppb3n5lhbjyNiPO0upJlxYl3qo6mRXzuQMoZOeH50ZPyqmZu= d+Z kHfg/Sq8PRHNdlBhtIZ6/FBTABEBAAHCw6wEGAEKACAWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5= QUC XMQFSAIbAgJACRCo1UN+znJP5cF0IAQZAQoAHRYhBDh6O3rdFXWZPESSt+BX/kgit7ZFBQJcx= AVI AAoJEOBX/kgit7ZFM28QALr4HOTaNkpLZMxJAECLxFQg8Yzg9GdUE4l6Xqeea+Qz6Hv2fO0AV= 8VQ ug7h7mFoAQQwG0lK5yHa/RF3tcApVEXMyL19AamMNnA5H0mXEUcTvge2JeVK9ONTBYjSR6llO= nUK Co24p3lnzmp6eZNEfaTPbSGo7UTmWcqfHtkvH4C5hOhDyY6GTVrgcMV2G2B1jq4evn0XxdqTi= po3 VyAMtwW/HlTHKXpXpW0QhzD+D6ioNUgyQjpPjkI3BWJHzSCWVUKgWD2EdOu+IsciDM115APvd= yeX vgWNF8jphl+PJf2inqS8iSrd4pf04//tqNhkmBHSIFh6LwPlUUMEjKI4sWUYcL8zZimUmaK9H= yZe bZq+IQFnjMw80h4iMc4YpY8mKgz4ld7wNV68+NFpgn+YaK6EVCpML91ret5kR4PyhO3tlMydY= zW3 SFmmYFIEOEn+l5V223/8RDsg7XilBPZXtYDDpCJSedo3+d9eeBTyLnaXhnmhs1N06IVMbga/x= g6B YT0OxJ7KFhyLW9SQ2+22oVqtfqGR9+Qx8UaiLnAx2a0ZjCHOspg/RTsXz7jqC8Ez9AVEPLOrw= /It IFI8Mx1AoJxfdoK9JIIsSNHeKrvCNmRK1n7NnNLa1JDRXYNgxsCD81YJzpQjtUC4KBKbFevs/= MHD Ksg/o2mlfeNy3AAEYckW7aMP/AjhDWZuUB+WoPnVO3qoaRdtt4aMRI+8Vjwsci3HHcueQa7Xs= S/J fzg85MUXqN7PozrfEBgwk5Z+kdFW+4dhiaEXntEqWUgwkExJ5ysmP597WIQG2hUpX0jwkrzdZ= q6r Z/87mHCAMgFk1Lg/6oPOQqXvBdLFlMo6RIPawC8EeROcIuszvzKR4GIEIyXyR5rflLUUFfvLr= NPk MeuxA5CKoN1IidlngMO/sH58aac2Z67k7nrNQk62QeMFQndcKb45Pt3bgPjDSB98hlAklKzuH= kxx lwreilFcBqx/8f1qeg3tTkF29RkSaP38K9RnLhrfRrt4Tz8fKTF/C6A1HqL2dMQmto14S8U2o= zq9 3xiu0oUpLFdOoqfqPxgiqbqWUFIAY4JS4J2o9HXwjFii6X7/VJ9Yj0DNCrZytvSRR24j6p2r2= HFg fEPDs6NFPGoF9vNksJhc1FViEkjt1z5vTdmu3+DRSD3QTpRUujVnUL8jr0ggoZ3CI6qjVqb8K= 2+d dubT9SxWKNbBOcNOwGtqQtw2z8FZ/2tQOvu9A44A5gCYJ5fHj9uvcvEKJe6X7hX7WBpAItZUe= Y8x D91uNSY2/uceh0pE6APHxNMRaLCKMRpyvRCHqRbA2iiLT0qF4pmwYUtYIig1TkNczbtzj38mv= H+G OQ6onUMxyW18qrqJn8LzvlhkzsFNBFzEBbgBEACo/XIhTsNMVM1XLI2qzKWWLIIIYN/uTcoum= h0A eh98saWYjg68H/fv2CZhF0CZ7JXcW3EqCjWzLnHiGXTMumYwCm5vgxic1uHTS6tv97hNPNA80= vKK Fgs/ofYM4MtzQWdLw/c7lzF6qomhbr9woKbYgwRnp8qh2C84aH6+OQv6I1t2fWE7qhoLMrSh2= EiK xeogXkyNqKzlRibBUOsjurTXg+UJt7NEnrp/qgm1m9zhAkMoadFs5bROEb24qZ7eDij1HmrM6= mUb 4OkL2PnDzkUBJ2At5otp+uUCJrATS2tAz0OGNu3ijJP94+Y1d3Nt6jC5pAI40ZcxSXMMrLFAT= XJi NYLaD/Y6tpLgXaLQF1krgtvcGVkxJ8/fJVrKVcmF8Cfnab+rbNDIxLAwWT+dor2BwDgRoRI45= cyG XB7YHstdk9kBUZqff1BrMZLGEmp+M6xE2wFPWan4kD2oIh5B14CKUMYB+CBmMlJhkIzBl2GvO= 3Hv VyywCk2EourRxjDocZxyajE/fwFuAK5emuFKrucMmsnxzZMMJdkoJmnozsBS9Oj9e8YiR+yAM= Dex x4152G6SOCR9JSxnFUBPEKOgabIPLY3eQfn0nBdh/mr/iKSg+5zj3bsbvUetvRFdTbUTFnqss= L7b 3Q5ydaL3Q6PjCO/Fe0bmLKXnY2AzY8emb3xc/wARAQABwsF2BBgBCgAgFiEEWe7QZoa1zQB2l= HAN qNVDfs5yT+UFAlzEBbgCGwwACgkQqNVDfs5yT+XL9w//VJKq2qxGxS1IGSaaowcneiRx88ZfB= Tzk takhbqXhnWFwP9vuTaHcSzRowFIVzea55k/5mQeKuTTEt7k0Yb29lwoT+iqi12V/73EBIaUK+= JT5 ZP28bnQXkkqqpRzcro4lDzi5geamt7KMsWDmYqCHyXU2xXeALnqfLv1jfsJJMeoDzLl8ql50q= m1z +u94VOXf94dlqmV9v6QWoxww2k2xNWBAeUD2YzUXAZncpXbCK1MIRFBHmbg4HAapmpFUewPfs= O4P pUEJqG1IA6rl9csZnc97BvCCha6SZMvXGrEIi/ajNfD0mU2p3Iy5F1UXNx9yJlMziQvqUziA7= MSW olT2ZYr/unSrckXUh7lAwE4tq8RhhXZ2cjL+5ubk/xGFBJycn+YKoT5gmZ+gwGrluN0VJFogf= pY2 RJbF8j8VbUR+vGKxlusgyeC7uEFAoVsIUJFQ3QaPtGmnIZgP3KSz7HsZkAwiXHJ5P6wpH3CWM= u4J aOQlOMo0NPxRZOvtfAkdDb+i4jd+YjvuJkJlur1p6yhu/02cE7/BoDONgATHZqFmYzubWtCU9= Lrf q1RnVBVnH/hLM2IxMGyBYsNDRW3FwSZh7nj6vxjijS9KsxwNiAFzNl78BKlIkHgAjWVDejezm= ncB 5ixg8G0GzKxIBt3S5nrkQNz3HBJEuIwmP7HyMbLbG27OwU0EXMQF6wEQAMUl2EK3LUUh6uunJ= 55v s0z8D0XZFpgm6cwVJgaWw+1H/bXJQR56oosOf+WUM0x1jhBVTLhI+oOK+uz1VkeZRMvTRxYob= fNq n7V5Gn8D8tO8z55yuHgHxn8T8+ZV8RzEbITDNmnK3VNC+mGvWCOe03gU6rhaE9qb3fhFreQA1= e85 XR3WqwxR/m/Vxdc0ANxgrij+VEOZDzlknAt9s93sPQDCqCGfNtRaKgVi/xvZUWvrYSBb1v5d3= wit KlADmuqWCWtc9+PuBmjUIObGP7Zll1dQ6enrtQ943ZsUujXYsdrfuaf5m47u/1G1IzwznIJwl= ZUU M2RAHQkCu+yjnXjtW0/ZEYV0RV+xZ5Qf2CtSq2rS5jpPKbtqhkzclX6ziV2ycRypR/vtbo81U= dP1 cbwSlSlxwp65Y7D+uV1F/7vI+OjUqJpD8mHgdh9OOZCWI2zHTSaH2FqS4LaT6kJIcd0sLoRPV= C3E U2vQQIM5aMyYpFlacZgmAryldp8cHwvbtpR4R2GWlXAW3w/pz2B7BD+xiUHvu2cXgeRYWgvtA= 7kw monmnhJ0NiN6cB4GPjr0ivysDNvdnnvCQ2FNMrqUGMhAK1fFh3nJF5CgMGZSyricZvE8tl7nl= XN4 TUlhhNqhSKyqHL7b0WjPhAUBNZvf1hutnl72rDAMBhTjYbEkLAl2/I5RABEBAAHCwXYEGAEKA= CAW IQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQF6wIbIAAKCRCo1UN+znJP5d4OD/9YMP8rUtR43= z0v Y1UnqMyZH9I8mOIL12AqRhsroaFb8rs3QU+u5cZGf2QvP2uOF6wFzjQGelZLjgVmctBYzutzs= jzX Id0D+B3O2KJhquRXEZ5HQlvZ6/YY0KDzNcYk2Tghg/NqvGltJtJuHrysPIL/0csA91mVUFs25= iap RwLrZfizTEzyh8KCrsV8j+c7r/UTRNkwDbTuq+s7kAyLVEWMTlBRkXg9IsxyX1F+k6xjSKRGf= XnI cct2BEYDcwNxzcPDOHpwzNCH3DCGDmuOLQGspp40liJ1cY1B7a1t3kpNRUv2YDth+jHs58BmF= Nfx WrBwv8OYulI+ehtErPTmOt6eNBhMp5EvoQuT6YwnL+2UwnA1SdNseG1y6tmgeEl/1PeGuYnze= vgk olNUS+4jzyWMG5deRldsjlHxMJBdT5VQXlXP8xb8oHQAkeR3KtlNyrtCi4R62btnIoSF7W9NY= heG aXXa2rHTVi82pqIg6p/E35MVh7X5nXIVOlGM6YXrdKapL/tRNExAW0xfrtwSJfMoxNAqFcwyR= e+i f3/7YeeVW9uqs8gSzAqD9x7JAYI2eW3JW6N3bdiZxIJ7wuk67zaW5rh36h9FhRM9KONvWbzXD= KN2 qyGMI8nCoorTHcnGOw8TqLh9cni59kQ+lEw/6d/vglsWEWhDJdt9r3ZWpMJW9w=3D=3D =3DQgWh -----END PGP PUBLIC KEY BLOCK----- --------------D2D1F1B42E8C0941C1BC41D1-- --ROrwi8taIDuQIC8rME1I3gFNuaryIC1Nq--