
    \jF                       U d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z
 d dlmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZmZmZ d dlmZmZ ddlmZmZ dZd Zdeeef   deeef   fdZ deeef   de!fdZ"dee!e#f   dee   defdZ$dede!defdZ% G d de&      Z'dZ(e)e*d<   dD ]  \  Z+Z,e(de+ d e, d!z  Z(  G d" d#e      Z-dee!e#f   dedefd$Z.y)%    N)timegm)MAXYEARdate)datetime)time)	timedelta)timezonetzinfo)AnyCallableDictIteratorOptionalTupleUnion)CountryDateParseType   )BaseProviderElementsTypeTc                  Z    t        j                         j                         j                  S N)r   now
astimezoner        L/root/env/lib/python3.12/site-packages/faker/providers/date_time/__init__.py_get_local_timezoner       s    <<>$$&---r   dtreturnc                     | j                   dk(  r | j                  | j                  dz   d      S | j                  | j                   dz         S )N      )yearmonth)r'   )r'   replacer&   r!   s    r   _get_next_month_startr*      sA    	xx2~zzrww{!z44::BHHqL:))r   c                     t        | t              r,t        | dd       | j                  t        j
                        } t        | j                               S )Nr   )
isinstancer   getattrr   
dttimezoneutcr   	timetupler)   s    r   datetime_to_timestampr1       s=    "hGB$$?$K]]:>>*",,.!!r   	timestampr   c                     |Ct        | t                     }|j                  t        j                        j                  d       S t        | |      S )Nr   )convert_timestamp_to_datetimer    r   r.   r/   r(   )r2   r   picks      r   timestamp_to_datetimer6   &   sE    ~,Y8K8MNz~~.66d6CC(F;;r   current_date	year_diffc                     | j                   |z   }	 | j                  |      S # t        $ rC}|dk7  r7| j                  dk(  r(| j                  dk(  r| j                  dd|      cY d}~S |d}~ww xY w)	aq  
    Unless the current_date is February 29th, it is fine to just subtract years.
    If it is a leap day, and we are rolling back to a non-leap year, it will
    cause a ValueError.
    Since this is relatively uncommon, just catch the error and roll forward to
    March 1

    current_date: date  object
    year_diff: int year delta value, positive or negative
    )r&   r   r         r%   )r'   dayr&   N)r&   r(   
ValueErrorr'   r<   )r7   r8   r&   es       r   change_yearr?   -   s}     y(D###..  19++q0\5E5E5K''aQT'BBGs    # 	A/6A*"A/(A**A/c                       e Zd Zy)
ParseErrorN)__name__
__module____qualname__r   r   r   rA   rA   D   s    r   rA    timedelta_pattern))yearsy)monthsM)weeksw)daysd)hoursh)minutesm)secondssz((?P<z>(?:\+|-)\d+?)z)?c                   n#   e Zd ZU dZ ej
                         dk(  rdededefdZn
dededefdZg dZ	e
e   ed	<   g  ed
gddddd       edgddddd       edgddddd       edgdddd d!       ed"gd#d$dd%d&       ed'gd(d)d*d+d,       eg d-d.d/d0d1d2       ed3gd4d5dd6d7       eg d8d9d:d;d<d=       ed>gd?d@ddAdB       edCgdDdEddFdG       edHgdIdJddKdL       edMgdNdOddPdQ       edRgdSdTd*dUdV       edWgdXdYddZd[       ed\gd]d^dd_d`       edagdbdcd*ddde       edfgdgdhd*didj       edkgdldmddndo       edpgdqdrd0dsdt       eg dudvdwd0dxdy       edzgd{d|dd}d~       edgddddd       edgddd*dd       edgddddd       edgddddd       eg dddddd       eddgddd*dd       edgddd*dd       edgddd*dd       eddgddd0dd       edgddd*dd       eg dddddd       edgddd0dd       edgddddd       edgdddddƬ       edgddd*ddˬ       edgdddddЬ       edgdddddլ       edgdddddڬ       edgddd*dd߬       edgddddd       edgddddd       edgddddd       eddgddd0dd       edgddddd       edgddd*dd       edgd dd*dd       edgddd*dd       ed	gd
dddd       edgddd;dd       edgddddd       edgddd*dd       edgdddd d!       ed"gd#d$d*d%d&       ed'gd(d)d*d*d+       ed,gd-d.d*d/d0       ed1gd2d3dd4d5       ed6gd7d8dd9d:       ed6gd;d<dd=d>       ed?gd@dAd*dBdC       edDgdEdFd0dGdH       edIgdJdKddLdM       edNgdOdPddQdR       eg dSdTdUddVdW       edXgdYdZdd[d\       ed]gd^d_dd`da       edbgdcddddedf       edggdhdiddjdk       edlgdmdnddodp       edqgdrdsddtdu       edvgdwdxddydz       ed{gd|d}dd~d       edgddddd       edgddddd       edgddd*dd       edgddddd       eg dddd;dd       edgddddd       edgddddd       edgddddd       edgddddd       edgddddd       edgddd*dd       edgddd*dd       edgddddd       edgddddĐdŬ       edgdǐdddɐdʬ       edgd̐dd*dΐdϬ       edgdѐdd*dӐdԬ       edՐdgdאdd;dِdڬ       edgdܐdddސd߬       edgddd*dd       edgddddd       eg dddddd       edgddd*dd       edgddddd       edgddd*dd       edgdd ddd       edgddd*dd       eg dd	d
ddd       eddgddddd       edgddd*dd       edgddd*dd       edgddd*d d!       ed"gd#d$d*d%d&       ed'gd(d)dd*d+       ed,gd-d.dd/d0       ed1gd2d3dd4d5       ed6gd7d8dd9d:       ed;gd<d=d;d>d?       ed@dAgdBdCd;dDdE       edFgdGdHddIdJ       edKgdLdMddNdO       edPgdQdRd0dSdT       edUgdVdWd;dXdY       edZgd[d\dd]d^       ed_gd`daddbdc       eddgdedfddgdh       eg didjdkddldm       edngdodpd;dqdr       edsgdtdud0dvdw       edxgdydzdd{d|       ed}gd~dddd       eg dddddd       edgddd*dd       edgddddd       edgddd;dd       edgddd*dd       edgddd*dd       edgddddd       edgddddd       edgddddd       edgddddd       edgddd*dd       edgddddd       edgddd*dd       edgddd*dĐdŬ       edgdǐdd0dɐdʬ       edgd̐dd*dΐdϬ       edgdѐdddӐdԬ       edgd֐dd*dؐd٬       edgdېdddݐdެ       edgddddd       edgddddd       edgddd*dd       edgddd;dd       edgddddd       edgddddd       edgddd;d d       edgddd*dd       eg ddd	dd
d       edgddd*dd       eg dddddd       edgddd0dd       eddgddddd        ed!gd"d#dd$d$       ed%gd&d'd0d(d)       ed*gd+d,dd-d.       ed/gd0d1d;d2d3       ed4gd5d6dd7d8       ed9gd:d;d*d<d=       ed>gd?d@d*dAdB       edCgdDdEd*dFdG       edHgdIdJddKdL       edMgdNdOddPdQ       edRgdSdTd*dUdV       edWgdXdYd*dZd[       ed\gd]d^d*d_d`       edagdbdcdddde       edfgdgdhddidj       edkgdldmddndo       edpgdqdrd*dsdt       edugdvdwddxdy       eg dzd{d|dd}d~       edgddddd       eg dddd;dd       edgddddd       edgddddd       edgddddd       edgddd*dd       edgddddd       edgddddd       edgddddd       edgddd;dd       edgddddd       edgddd*dd       eg dddddd       edgdddddì       edgdŐdd*dǐdȬ       edgdʐddd̐dͬ       edgdϐdddѐdҬ       edgdԐddd֐d׬       edgdِdddېdܬ       edݐdgdߐdddd      Z ej                   e      Z	 	 d#dee   dee   defdZd$dee   defdZ	 	 d#dee   dee   defdZ	 	 	 d%dee   dee   dee   defdZ	 	 	 	 d&dee   dee   dededef
dZd'dedee   defdZd$dee   defdZd(dedee   defdZ d$dee   de!fdZ"e#dee   defd       Z$e#dee   defd       Z%e#dede&eef   fd       Z'e#de(eeef   de(eef   fd       Z)e#d$dedee   defd       Z*e#dedefd       Z+	 	 	 d)dededee   defdZ,d*dededefdZ-d+dedee   defdZ.d,dedefdZ/d-dedee   defdZ0d-dedee   defdZ1	 	 	 d%d ee   dee   dee   defdZ2	 	 d#dee   dee   defdZ3	 	 	 d.de4de4dee   defdZ5	 	 	 d.de4de4dee   defd	Z6	 	 	 d.de4de4dee   defd
Z7	 	 	 d.de4de4dee   defdZ8d/de4de4defdZ9d/de4de4defdZ:d/de4de4defdZ;d/de4de4defdZ<	 	 	 	 	 d0dededee   dee=egef      dee   de>e?ee@f      fdZAdefdZBdefdZCdefdZDdefdZEdefdZFdefdZGdefdZHdefdZIde@de@dee   fdZJ	 	 	 d1dee   d ed!edefd"ZKy(2  ProvideraT  

    Most methods of the provider accept a 'start_datetime' and/or 'end_datetime' parameter.

    These parameters accept a variety of types, and are used to define the range of the random date/time.

    We call this type ``DateParseType``.

    A ``DateParseType`` can be:

    - a datetime or date object
    - an integer or a float, representing UNIX a timestamp
    - the special string 'now'
    - the special string 'today'
    - a timedelta object, representing a time delta from now
    - a 'timedelta string', such as '+2d', '-3w', '+4y', etc. Representing a time delta from now.

    Windowsstart_datetimeend_datetimer"   c                 N    | j                   j                  j                  ||      S r   )	generatorrandomrandintselfrX   rY   s      r   _rand_secondszProvider._rand_secondsn   s    >>((00NNr   c                 n    ||kD  rt        d      | j                  j                  j                  ||      S )NzNempty range for _rand_seconds: start datetime must be before than end datetime)r=   r[   r\   uniformr^   s      r   r`   zProvider._rand_secondss   s3    , !qrr>>((00NNr   )IIIIIIIVVVIVIIVIIIIXXXIXIIXIIIXIVXVXVIXVIIXVIIIXIXXXXXI	centurieszEurope/AndorraADANDEuropeAndorrazAndorra la Vella)	timezonesalpha_2_codealpha_3_code	continentnamecapitalz
Asia/KabulAFAFGAsiaAfghanistanKabulzAmerica/AntiguaAGATGzNorth AmericazAntigua and Barbudaz
St. John'szEurope/TiraneALALBAlbaniaTiranazAsia/YerevanAMARMArmeniaYerevanzAfrica/LuandaAOAGOAfricaAngolaLuanda)
zAmerica/Argentina/Buenos_AireszAmerica/Argentina/CordobazAmerica/Argentina/JujuyzAmerica/Argentina/TucumanzAmerica/Argentina/CatamarcazAmerica/Argentina/La_RiojazAmerica/Argentina/San_JuanzAmerica/Argentina/MendozazAmerica/Argentina/Rio_GallegoszAmerica/Argentina/UshuaiaARARGzSouth America	ArgentinazBuenos AireszEurope/ViennaATAUTAustriaVienna)zAustralia/Lord_HowezAustralia/HobartzAustralia/CurriezAustralia/MelbournezAustralia/SydneyzAustralia/Broken_HillzAustralia/BrisbanezAustralia/LindemanzAustralia/AdelaidezAustralia/DarwinzAustralia/PerthAUAUSOceania	AustraliaCanberraz	Asia/BakuAZAZE
AzerbaijanBakuzAmerica/BarbadosBBBRBBarbados
Bridgetownz
Asia/DhakaBDBGD
BangladeshDhakazEurope/BrusselsBEBELBelgiumBrusselszAfrica/OuagadougouBFBFAzBurkina FasoOuagadougouzEurope/SofiaBGBGRBulgariaSofiazAsia/BahrainBHBHRBahrainManamazAfrica/BujumburaBIBDIBurundi	BujumburazAfrica/Porto-NovoBJBENBeninz
Porto-NovozAsia/BruneiBNBRNzBrunei DarussalamzBandar Seri BegawanzAmerica/La_PazBOBOLBoliviaSucre)zAmerica/NoronhazAmerica/BelemzAmerica/FortalezazAmerica/RecifezAmerica/AraguainazAmerica/MaceiozAmerica/BahiazAmerica/Sao_PaulozAmerica/Campo_GrandezAmerica/CuiabazAmerica/Porto_VelhozAmerica/Boa_VistazAmerica/ManauszAmerica/EirunepezAmerica/Rio_BrancoBRBRABrazilu   BrasÃ­liazAmerica/NassauBSBHSBahamasNassauzAsia/ThimphuBTBTNBhutanThimphuzAfrica/GaboroneBWBWABotswanaGaboronezEurope/MinskBYBLRBelarusMinskzAmerica/BelizeBZBLZBelizeBelmopan)zAmerica/St_JohnszAmerica/HalifaxzAmerica/Glace_BayzAmerica/MonctonzAmerica/Goose_BayzAmerica/Blanc-SablonzAmerica/MontrealzAmerica/TorontozAmerica/NipigonzAmerica/Thunder_BayzAmerica/PangnirtungzAmerica/IqaluitzAmerica/AtikokanzAmerica/Rankin_InletzAmerica/WinnipegzAmerica/Rainy_RiverzAmerica/Cambridge_BayzAmerica/ReginazAmerica/Swift_CurrentzAmerica/EdmontonzAmerica/YellowknifezAmerica/InuvikzAmerica/Dawson_CreekzAmerica/VancouverzAmerica/WhitehorsezAmerica/DawsonCACANCanadaOttawazAfrica/KinshasazAfrica/LubumbashiCDCODz Democratic Republic of the CongoKinshasazAfrica/BrazzavilleCGCOGzRepublic of the CongoBrazzavillezAfrica/AbidjanCICIVu   CÃ´te d'IvoireYamoussoukrozAmerica/SantiagozPacific/EasterCLCHLChileSantiagozAfrica/DoualaCMCMRCameroonu
   YaoundÃ©)zAsia/ShanghaizAsia/HarbinzAsia/ChongqingzAsia/UrumqizAsia/KashgarCNCHNzPeople's Republic of ChinaBeijingzAmerica/BogotaCOCOLColombiau	   BogotÃ¡zAmerica/Costa_RicaCRCRIz
Costa Ricau   San JosÃ©zAmerica/HavanaCUCUBCubaHavanazAtlantic/Cape_VerdeCVCPVz
Cape VerdePraiazAsia/NicosiaCYCYPCyprusNicosiazEurope/PragueCZCZEzCzech RepublicPraguezEurope/BerlinDEDEUGermanyBerlinzAfrica/DjiboutiDJDJIDjiboutizDjibouti CityzEurope/CopenhagenDKDNKDenmark
CopenhagenzAmerica/DominicaDMDMADominicaRoseauzAmerica/Santo_DomingoDODOMzDominican RepubliczSanto DomingozAmerica/GuayaquilzPacific/GalapagosECECUEcuadorQuitozEurope/TallinnEEESTEstoniaTallinnzAfrica/CairoEGEGYEgyptCairozAfrica/AsmeraERERIEritreaAsmarazAfrica/Addis_AbabaETETHEthiopiazAddis AbabazEurope/HelsinkiFIFINFinlandHelsinkizPacific/FijiFJFJIFijiSuvazEurope/ParisFRFRAFrancePariszAfrica/LibrevilleGAGABGabon
LibrevillezAsia/TbilisiGEGEOGeorgiaTbilisizAfrica/AccraGHGHAGhanaAccrazAfrica/BanjulGMGMBz
The GambiaBanjulzAfrica/ConakryGNGINGuineaConakryzEurope/AthensGRGRCGreeceAthenszAmerica/GuatemalaGTGTM	GuatemalazGuatemala CityHTHTIHaitizPort-au-PrincezAfrica/BissauGWGNBzGuinea-BissauBissauzAmerica/GuyanaGYGUYGuyana
GeorgetownzAmerica/TegucigalpaHNHNDHondurasTegucigalpazEurope/BudapestHUHUNHungaryBudapest)zAsia/JakartazAsia/PontianakzAsia/MakassarzAsia/JayapuraIDIDN	IndonesiaJakartazEurope/DublinIEIRLzRepublic of IrelandDublinzAsia/JerusalemILISRIsrael	JerusalemzAsia/CalcuttaININDIndiaz	New DelhizAsia/BaghdadIQIRQIraqBaghdadzAsia/TehranIRIRNIranTehranzAtlantic/ReykjavikISISLIcelandu   ReykjavÃ­kzEurope/RomeITITAItalyRomezAmerica/JamaicaJMJAMJamaicaKingstonz
Asia/AmmanJOJORJordanAmmanz
Asia/TokyoJPJPNJapanTokyozAfrica/NairobiKEKENKenyaNairobizAsia/BishkekKGKGZ
KyrgyzstanBishkek)zPacific/TarawazPacific/EnderburyzPacific/KiritimatiKIKIRKiribatiTarawazAsia/PyongyangKPPRKzNorth Korea	Pyongyangz
Asia/SeoulKRKORzSouth KoreaSeoulzAsia/KuwaitKWKWTKuwaitzKuwait CityzAsia/BeirutLBLBNLebanonBeirutzEurope/VaduzLILIELiechtensteinVaduzzAfrica/MonroviaLRLBRLiberiaMonroviazAfrica/MaseruLSLSOLesothoMaseruzEurope/VilniusLTLTU	LithuaniaVilniuszEurope/LuxembourgLULUX
LuxembourgzLuxembourg CityzEurope/RigaLVLVALatviaRigazAfrica/TripoliLYLBYLibyaTripolizIndian/AntananarivoMGMDG
MadagascarAntananarivozPacific/MajurozPacific/KwajaleinMHMHLzMarshall IslandsMajurozEurope/SkopjeMKMKDzNorth MacedoniaSkopjezAfrica/BamakoMLMLIMaliBamakozAsia/RangoonMMMMRMyanmar	Naypyidaw)zAsia/Ulaanbaatarz	Asia/HovdzAsia/ChoibalsanMNMNGMongoliaUlaanbaatarzAfrica/NouakchottMRMRT
Mauritania
NouakchottzEurope/MaltaMTMLTMaltaVallettazIndian/MauritiusMUMUS	Mauritiusz
Port LouiszIndian/MaldivesMVMDVMaldivesu   MalÃ©zAfrica/BlantyreMWMWIMalawiLilongwe)zAmerica/Mexico_CityzAmerica/CancunzAmerica/MeridazAmerica/MonterreyzAmerica/MazatlanzAmerica/ChihuahuazAmerica/HermosillozAmerica/TijuanaMXMEXMexicozMexico CityzAsia/Kuala_LumpurzAsia/KuchingMYMYSMalaysiazKuala LumpurzAfrica/MaputoMZMOZ
MozambiqueMaputozAfrica/WindhoekNANAMNamibiaWindhoekzAfrica/NiameyNENERNigerNiameyzAfrica/LagosNGNGANigeriaAbujazAmerica/ManaguaNINIC	NicaraguaManaguazEurope/AmsterdamNLNLDzKingdom of the Netherlands	AmsterdamzEurope/OsloNONORNorwayOslozAsia/KatmanduNPNPLNepal	KathmanduzPacific/NauruNRNRUNauruYarenzPacific/AucklandzPacific/ChathamNZNZLzNew Zealand
WellingtonzAsia/MuscatOMOMNOmanMuscatzAmerica/PanamaPAPANPanamazPanama CityzAmerica/LimaPEPERPeruLimazPacific/Port_MoresbyPGPNGzPapua New GuineazPort MoresbyzAsia/ManilaPHPHLPhilippinesManilazAsia/KarachiPKPAKPakistan	IslamabadzEurope/WarsawPLPOLPolandWarsaw)zEurope/LisbonzAtlantic/MadeirazAtlantic/AzoresPTPRTPortugalLisbonzPacific/PalauPWPLWPalau	NgerulmudzAmerica/AsuncionPYPRYParaguayu   AsunciÃ³nz
Asia/QatarQAQATQatarDohazEurope/BucharestROROURomania	Bucharest)zEurope/KaliningradzEurope/MoscowzEurope/VolgogradzEurope/SamarazAsia/Yekaterinburgz	Asia/OmskzAsia/NovosibirskzAsia/KrasnoyarskzAsia/IrkutskzAsia/YakutskzAsia/VladivostokzAsia/SakhalinzAsia/MagadanzAsia/KamchatkazAsia/AnadyrRURUSRussiaMoscowzAfrica/KigaliRWRWARwandaKigalizAsia/RiyadhSASAUzSaudi ArabiaRiyadhzPacific/GuadalcanalSBSLBzSolomon IslandsHoniarazIndian/MaheSCSYC
SeychellesVictoriazAfrica/KhartoumSDSDNSudanKhartoumzEurope/StockholmSESWESweden	StockholmzAsia/SingaporeSGSGP	SingaporezEurope/LjubljanaSISVNSlovenia	LjubljanazEurope/BratislavaSKSVKSlovakia
BratislavazAfrica/FreetownSLSLEzSierra LeoneFreetownzEurope/San_MarinoSMSMRz
San MarinozAfrica/DakarSNSENSenegalDakarzAfrica/MogadishuSOSOMSomalia	MogadishuzAmerica/ParamariboSRSURSuriname
ParamaribozAfrica/Sao_TomeSTSTPu   SÃ£o TomÃ© and PrÃ­ncipeu   SÃ£o TomÃ©zAsia/DamascusSYSYRSyriaDamascuszAfrica/LomeTGTGOTogou   LomÃ©zAsia/BangkokTHTHAThailandBangkokzAsia/DushanbeTJTJK
TajikistanDushanbezAsia/AshgabatTMTKMTurkmenistanAshgabatzAfrica/TunisTNTUNTunisiaTuniszPacific/TongatapuTOTONTongau   NukuÊ»alofazEurope/IstanbulTRTURTurkeyAnkarazAmerica/Port_of_SpainTTTTOzTrinidad and TobagozPort of SpainzPacific/FunafutiTVTUVTuvaluFunafutizAfrica/Dar_es_SalaamTZTZATanzaniaDodoma)zEurope/KyivzEurope/UzhgorodzEurope/ZaporozhyezEurope/SimferopolUAUKRUkraineKyivzAfrica/KampalaUGUGAUgandaKampala)zAmerica/New_YorkzAmerica/DetroitzAmerica/Kentucky/LouisvillezAmerica/Kentucky/MonticellozAmerica/Indiana/IndianapoliszAmerica/Indiana/MarengozAmerica/Indiana/KnoxzAmerica/Indiana/VevayzAmerica/ChicagozAmerica/Indiana/VincenneszAmerica/Indiana/PetersburgzAmerica/MenomineezAmerica/North_Dakota/CenterzAmerica/North_Dakota/New_SalemzAmerica/DenverzAmerica/BoisezAmerica/ShiprockzAmerica/PhoenixzAmerica/Los_AngeleszAmerica/AnchoragezAmerica/JuneauzAmerica/YakutatzAmerica/NomezAmerica/AdakzPacific/HonoluluUSUSAzUnited StateszWashington, D.C.zAmerica/MontevideoUYURYUruguay
MontevideozAsia/SamarkandzAsia/TashkentUZUZB
UzbekistanTashkentzEurope/VaticanVAVATzVatican CityzAmerica/CaracasVEVEN	VenezuelaCaracaszAsia/SaigonVNVNMVietnamHanoizPacific/EfateVUVUTVanuatuz	Port Vilaz	Asia/AdenYEYEMYemenzSana'azAfrica/LusakaZMZMBZambiaLusakazAfrica/HarareZWZWEZimbabweHararezAfrica/AlgiersDZDZAAlgeriaAlgierszEurope/SarajevoBABIHzBosnia and HerzegovinaSarajevozAsia/Phnom_PenhKHKHMCambodiaz
Phnom PenhzAfrica/BanguiCFCAFzCentral African RepublicBanguizAfrica/NdjamenaTDTCDChadz	N'DjamenazIndian/ComoroKMCOMComorosMoronizEurope/ZagrebHRHRVCroatiaZagrebz	Asia/DiliTLTLSz
East TimorDilizAmerica/El_SalvadorSVSLVzEl SalvadorzSan SalvadorzAfrica/MalaboGQGNQzEquatorial GuineaMalabozAmerica/GrenadaGDGRDGrenadazSt. George's)zAsia/AlmatyzAsia/QyzylordazAsia/Aqtobez
Asia/Aqtauz	Asia/OralKZKAZ
KazakhstanAstanazAsia/VientianeLALAOLaos	Vientiane)zPacific/TrukzPacific/PonapezPacific/KosraeFMFSMzFederated States of MicronesiaPalikirzEurope/ChisinauMDMDAMoldovau   ChiÅinÄuzEurope/MonacoMCMCOMonacozEurope/PodgoricaMEMNE
Montenegro	PodgoricazAfrica/CasablancaMAMARMoroccoRabatzAmerica/St_KittsKNKNAzSaint Kitts and Nevis
BasseterrezAmerica/St_LuciaLCLCAzSaint LuciaCastrieszAmerica/St_VincentVCVCTz Saint Vincent and the Grenadines	KingstownzPacific/ApiaWSWSMSamoaApiazEurope/BelgradeRSSRBSerbiaBelgradezAfrica/JohannesburgZAZAFzSouth AfricaPretoria)zEurope/MadridzAfrica/CeutazAtlantic/CanaryESESPSpainMadridzAsia/ColomboLKLKAz	Sri LankazSri Jayewardenepura KottezAfrica/MbabaneSZSWZ	SwazilandMbabanezEurope/ZurichCHCHESwitzerlandBernz
Asia/DubaiAEAREzUnited Arab Emiratesz	Abu DhabizEurope/LondonGBGBRzUnited KingdomLondonzAsia/TaipeiTWTWNTaiwanTaipeiz	Asia/GazazAsia/HebronPSPSE	PalestineRamallahNc                 |    | j                  |      }| j                  |      }t        | j                  ||            S )a{  
        Get a timestamp between January 1, 1970 and now, unless passed
        explicit ``start_datetime`` or `end_datetime` values.

        On Windows, the decimal part is always 0.

        :param end_datetime: A ``DateParseType``. Defaults to the UNIX epoch
        :param start_datetime: A ``DateParseType``. Defaults to the current date and time

        :sample:
        )_parse_start_datetime_parse_end_datetimefloatr`   )r_   rY   rX   s      r   	unix_timezProvider.unix_time8  s<      33NC//=T''EFFr   c                     | j                  d      }| j                  |      }||z
  } | j                  t        d|g       }t	        |      S )a   
        Get a random timedelta object of duration between the current date and time and `end_datetime`

        :param end_datetime: A ``DateParseType``. Defaults to the current date and time

        :sample:
        :sample: end_datetime='+30h'
        r   r   rS   )r;  r<  r`   sortedr	   )r_   rY   rX   rS   tss        r   
time_deltazProvider.time_deltaL  sT     33E://=/TG!56$$r   r   c                 Z    t        ddd|      t        | j                  |            z   S )a  
        Get a datetime object for a date between January 1, 1970 and a specified end_datetime

        :param tzinfo: timezone, instance of datetime.tzinfo subclass
        :param end_datetime: A ``DateParseType``. Defaults to the current date and time

        :sample:
          r%   r   rY   r@  )r   r	   r>  )r_   r   rY   s      r   	date_timezProvider.date_time\  s+      a62Yt~~co~Gp5qqqr   c                     |dn| j                  |      }| j                  |      }| j                  ||      }t        ddd|      t	        |      z   S )a  
        Get a datetime object for a date between January 1, 0001 and now

        :param tzinfo: timezone, instance of datetime.tzinfo subclass
        :param end_datetime: A ``DateParseType``. Defaults to the current date and time
        :param start_datetime: A ``DateParseType``. Defaults to UNIX timestamp ``-62135596800``,
        equivalent to 0001-01-01 00:00:00 UTC

        :sample:
        l w#o9 rE  r%   r   r@  )r;  r<  r`   r   r	   )r_   r   rY   rX   
start_timerB  s         r   date_time_adzProvider.date_time_adn  s[    . &4%;\A[A[\jAk
//=
L9 a62Yr5JJJr   septimespecc                 H    | j                  ||      j                  ||      S )a  
        Get an ISO 8601 string for a datetime between the UNIX epoch and now.

        :param tzinfo: timezone, instance of datetime.tzinfo subclass
        :param end_datetime: A ``DateParseType``. Defaults to the current date and time
        :param sep: separator between date and time, defaults to 'T'
        :param timespec: format specifier for the time part, defaults to 'auto' - see datetime.isoformat() documentation

        :sample:
        rF  )rG  	isoformat)r_   r   rY   rK  rL  s        r   iso8601zProvider.iso8601  s%    " ~~f<~@JJ3PXYYr   patternc                 D    | j                  |      j                  |      S )a>  
        Get a date string between January 1, 1970 and now.

        :param pattern: Format of the date (year-month-day by default)
        :param end_datetime: A ``DateParseType``. Defaults to the current date and time

        :sample:
        :sample: pattern='%m/%d/%Y'
        :sample: end_datetime='+1w'
        rF  )rG  strftimer_   rP  rY   s      r   r   zProvider.date  s      ~~<~8AA'JJr   c                 B    | j                  |      j                         S )z
        Get a date object between January 1, 1970 and now

        :param end_datetime: A ``DateParseType``. Defaults to the current date and time

        :sample:
        :sample: end_datetime='+1w'
        rF  )rG  r   r_   rY   s     r   date_objectzProvider.date_object       ~~<~8==??r   c                 `    | j                  |      j                         j                  |      S )z
        Get a time string (24h format by default)

        :param pattern: format
        :param end_datetime: A ``DateParseType``. Defaults to the current date and time

        :sample:
        :sample: pattern='%I:%M %p'
        rF  )rG  r   rR  rS  s      r   r   zProvider.time  s)     ~~<~8==?HHQQr   c                 B    | j                  |      j                         S )z
        Get a time object

        :param end_datetime: A ``DateParseType``. Defaults to the current date and time

        :sample:
        :sample: end_datetime='+1h'
        rF  )rG  r   rU  s     r   time_objectzProvider.time_object  rW  r   valuec                 *    |y| j                  |      S Nr   )_parse_date_timeclsr[  s     r   r;  zProvider._parse_start_datetime  s    =##E**r   c                 b    |t        t        j                               S | j                  |      S r   )r1   r   r   r^  r_  s     r   r<  zProvider._parse_end_datetime  s)    =(88##E**r   c                    | j                   j                  |      }|st        d| d      |j                         }i }|j	                         D ]  \  }}|s	t        |      ||<    d|v r(d|vrd|d<   |dxx   d|j                  d      z  z  cc<   d|v r(d|vrd|d<   |dxx   d|j                  d      z  z  cc<   |st        d| d      |S )	NzCan't parse date string ``rG   rM   r   gp=
v@rI   gQk>@)regexmatchrA   	groupdictitemsintpop)r`  r[  partstime_paramsname_param_s         r   _parse_date_stringzProvider._parse_date_string  s    		&8qABB!(*"[[] 	1ME6%([E"	1 k![(&'F#6KOOG,D#DD{"[(&'F#5;??8+D#DD8qABBr   c                    t        |t              r|j                         S t        |t              r*| j	                  |      }t        di |j                         S t        |t
        t        f      r|S t        d|      )NzInvalid format for timedelta r   )r,   r	   total_secondsstrrn  rh  r=  rA   )r`  r[  rk  s      r   _parse_timedeltazProvider._parse_timedelta  sr    eY'&&((eS!007K+{+99;;ec5\*L8	BCCr   c                    t        |t        t        f      rt        |      S t        j                  |      }t        |t
              rt        ||z         S t        |t              rK|dk(  rt        t        j                  |            S | j                  |      }t        |t        di |z         S t        |t              r|S t        d|      )Nr   Invalid format for date r   )
r,   r   dtdater1   r   r	   rq  rn  rh  rA   )r`  r[  r   r   rk  s        r   r^  zProvider._parse_date_time  s    eh/0(//ll6"eY'(u55eS!~,X\\&-ABB007K(y/G;/G)GHHeS!L3E9=>>r   c                 z   t        |t              r|j                         S t        |t              r|S t        j                         }t        |t
              r||z   S t        |t              r%|dv r|S | j                  |      }|t        di |z   S t        |t              r|t        |      z   S t        d|      )N)todayr   rt  r   )
r,   r   r   ru  rw  r	   rq  rn  rh  rA   )r`  r[  rw  rk  s       r   _parse_datezProvider._parse_date  s    eX&::<v&LeY'5= eS!((007K93{333eS!9U+++3E9=>>r   
start_dateend_datec                    | j                  ||      }| j                  ||      }||z
  dk  r(|| j                  j                  j                         z   }n| j                  ||      }|t	        ddd|      t        |      z   S t	        dddt        j                        t        |      z   j                  |      S )a  
        Get a datetime object based on a random date between two given dates.
        Accepts date strings that can be recognized by strtotime().

        :param start_date: A ``DateParseType``. Defaults to 30 years ago
        :param end_date: A ``DateParseType``. Defaults to ``"now"``
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        r   r%   rE  r@  )	r^  r[   r\   r`   r   r	   r.   r/   r   )r_   ry  rz  r   rB  s        r   date_time_betweenzProvider.date_time_between'  s      **:f*E
((&(Aj A%dnn33::<<B##J9B>D!Qv629NNNT1a
?)TVBWWccdjkkr   c                 l    | j                  |      }| j                  |      }| j                  ||      S )a  
        Get a Date object based on a random date between two given dates.
        Accepts date strings that can be recognized by strtotime().

        :param start_date: A ``DateParseType``. Defaults to 30 years ago
        :param end_date: A ``DateParseType``. Defaults to ``"today"``

        :sample:
        :sample: start_date='-1w'
        :sample: start_date="-1y", end_date="+1w"
        )
date_startdate_end)rx  date_between_dates)r_   ry  rz  s      r   date_betweenzProvider.date_betweenB  s:     %%j1
##H-&&*x&PPr   c                 *    | j                  d||      S )a0  
        Get a datetime object based on a random date between 1 second form now
        and a given date.

        :param end_date: A ``DateParseType``. Defaults to ``"+30d"``
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        :sample: end_date='+1y'
        z+1sry  rz  r   r|  )r_   rz  r   s      r   future_datetimezProvider.future_datetimeS  s     %%RX%YYr   c                 (    | j                  d|      S )a)  
        Get a Date object based on a random date between 1 day from now and a
        given date.

        :param end_date: A ``DateParseType``. Defaults to ``"+30d"``
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        :sample: end_date='+1y'
        z+1dry  rz  r  )r_   rz  s     r   future_datezProvider.future_date`  s       EH EEr   c                 *    | j                  |d|      S )a_  
        Get a datetime object based on a random date between a given date and 1
        second ago.

        :param start_date: A ``DateParseType``. Defaults to ``"-30d"``
        :param tzinfo: timezone, instance of datetime.tzinfo subclass
        :example: datetime('1999-02-02 11:42:52')

        :sample:
        :sample: end_date='+1y'
        z-1sr  r  r_   ry  r   s      r   past_datetimezProvider.past_datetimem  s     %%eTZ%[[r   c                 (    | j                  |d      S )a(  
        Get a Date object based on a random date between a given date and 1 day
        ago.

        :param start_date: A ``DateParseType``. Defaults to ``"-30d"``
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        :sample: start_date='-1y'
        z-1dr  r  r  s      r   	past_datezProvider.past_date{  s       J GGr   datetime_startdatetime_endc                    |t        t        j                  |            n| j                  |      }|t        t        j                  |            n| j                  |      }| j	                  ||      }	 |Ft        |t                     }	 |j                  t        j                        j                  d      }|S t        j                  ||      }	 |S # t        $ r Y |S w xY w# t        $ r t        d      w xY w)a  
        Get a random datetime between the two given datetimes.

        :param datetime_start: A ``DateParseType``. Defaults to the UNIX epoch
        :param datetime_end: A ``DateParseType``. Defaults to the current date and time
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        :sample: datetime_start='-30y', datetime_end='now'
        :sample: datetime_start='now', datetime_end='+1y'

        Nr   zzYou specified an end date with a timestamp bigger than the maximum allowed on this system. Please specify an earlier date.)r1   r   r   r^  r`   r4   r    r   r.   r/   r(   OSErrorfromtimestampOverflowError)r_   r  r  r   datetime_start_datetime_end_r2   r5   s           r   date_time_between_datesz Provider.date_time_between_dates  s   ( % "(,,v"67&&~6 	 <H;O!(,,v"67UYUjUjkwUx 	 &&F		~4Y@S@UV??:>>:BB$BOD   --i@      	; 	s0   6C' /C >C' 	C$ C' #C$$C' 'C<r~  r  c                 B    | j                  ||      j                         S )z
        Get a random date between the two given dates.

        :param date_start: A ``DateParseType``. Defaults to the UNIX epoch
        :param date_end: A ``DateParseType``. Defaults to the current date and time

        :sample:
        )r  r   )r_   r~  r  s      r   r  zProvider.date_between_dates  s      ++JAFFHHr   
before_now	after_nowc                 `   t        j                  |      }t        |j                  |j                  dz  z
  dd|      }t        t        |j                  dz   t              dd|      }|r|r| j                  |||      S |s|r| j                  |||      S |s|r| j                  |||      S |S )a  
        Gets a datetime object for the current century.

        :param before_now: include days in current century before today. Defaults to True
        :param after_now: include days in current century after today. Defaults to False
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        :sample: before_now=False, after_now=True
        d   r%   r   r   r   r&   minr   r  )r_   r  r  r   r   this_century_startnext_century_starts          r   date_time_this_centuryzProvider.date_time_this_century  s      ll6"%chh#((S.&A1aPVW%c*<*A*AC*G&QSTVW`fg)//0BDVX^__	//5GPPz//0BCPPJr   c                 `   t        j                  |      }t        |j                  |j                  dz  z
  dd|      }t        t        |j                  dz   t              dd|      }|r|r| j                  |||      S |s|r| j                  |||      S |s|r| j                  |||      S |S )ay  
        Gets a datetime object for the decade year.

        :param before_now: include days in current decade before today. Defaults to True
        :param after_now: include days in current decade after today. Defaults to False
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        :sample: before_now=False, after_now=True
        
   r%   r   r  )r_   r  r  r   r   this_decade_startnext_decade_starts          r   date_time_this_decadezProvider.date_time_this_decade  s      ll6"$SXXB%?AfU$S):)?)?")Dg%NPQST]cd)//0ACTV\]]	//5FOOz//0A3OOJr   c                     t        j                  |      }|j                  dddddd      }t        |j                  dz   dd|      }|r|r| j	                  |||      S |s|r| j	                  |||      S |s|r| j	                  |||      S |S )av  
        Gets a datetime object for the current year.

        :param before_now: include days in current year before today. Defaults to True
        :param after_now: include days in current year after today. Defaults to False
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        :sample: before_now=False, after_now=True
        r%   r   )r'   r<   hourminutesecondmicrosecondr   )r   r   r(   r&   r  )r_   r  r  r   r   this_year_startnext_year_starts          r   date_time_this_yearzProvider.date_time_this_year  s      ll6"++A11Qq^_+`"388a<AfE)//RXYY	//_fMMz//fMMJr   c                     t        j                  |      }|j                  ddddd      }t        |      }|r|r| j	                  |||      S |s|r| j	                  |||      S |s|r| j	                  |||      S |S )ay  
        Gets a datetime object for the current month.

        :param before_now: include days in current month before today. Defaults to True
        :param after_now: include days in current month after today. Defaults to False
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        :sample: before_now=False, after_now=True
        r%   r   )r<   r  r  r  r  )r   r   r(   r*   r  )r_   r  r  r   r   this_month_startnext_month_starts          r   date_time_this_monthzProvider.date_time_this_month	  s      ll6";;11QqVW;X01AB)//0@BRTZ[[	//5EvNNz//0@#vNNJr   before_todayafter_todayc                 4   t        j                         }t        |j                  |j                  dz  z
  dd      }t        |j                  dz   dd      }|r|r| j                  ||      S |s|r| j                  ||      S |s|r| j                  ||      S |S )a=  
        Gets a Date object for the current century.

        :param before_today: include days in current century before today. Defaults to True
        :param after_today: include days in current century after today. Defaults to False

        :sample:
        :sample: before_today=False, after_today=True
        r  r%   ru  rw  r&   r  )r_   r  r  rw  r  r  s         r   date_this_centuryzProvider.date_this_century7	  s     #EJJ%**s2B$CQJ#$6$;$;c$A1aHK**+=?QRR+**52DEE**+=uEELr   c                 4   t        j                         }t        |j                  |j                  dz  z
  dd      }t        |j                  dz   dd      }|r|r| j                  ||      S |s|r| j                  ||      S |s|r| j                  ||      S |S )a7  
        Gets a Date object for the decade year.

        :param before_today: include days in current decade before today. Defaults to True
        :param after_today: include days in current decade after today. Defaults to False

        :sample:
        :sample: before_today=False, after_today=True
        r  r%   r  )r_   r  r  rw  r  r  s         r   date_this_decadezProvider.date_this_decadeN	  s     "5::b#A1aH"#4#9#9B#>1EK**+<>OPP+**52CDD**+<eDDLr   c                    t        j                         }|j                  dd      }t        |j                  dz   dd      }|r|r| j	                  ||      S |s|r| j	                  ||      S |s|r| j	                  ||      S |S )a4  
        Gets a Date object for the current year.

        :param before_today: include days in current year before today. Defaults to True
        :param after_today: include days in current year after today. Defaults to False

        :sample:
        :sample: before_today=False, after_today=True
        r%   )r'   r<   )ru  rw  r(   r&   r  )r_   r  r  rw  r  r  s         r   date_this_yearzProvider.date_this_yeare	  s     --aQ-7 aA6K**?OLL+**5/BB**?EBBLr   c                     t        j                         }|j                  d      }t        |      }|r|r| j	                  ||      S |s|r| j	                  ||      S |s|r| j	                  ||      S |S )a7  
        Gets a Date object for the current month.

        :param before_today: include days in current month before today. Defaults to True
        :param after_today: include days in current month after today. Defaults to False

        :sample:
        :sample: before_today=False, after_today=True
        r%   )r<   )ru  rw  r(   r*   r  )r_   r  r  rw  r  r  s         r   date_this_monthzProvider.date_this_month|	  s}      ==Q=/01ABK**+;=MNN+**52BCC**+;UCCLr   	precisiondistribc              #   L   
K    j                  ||      } j                  ||      }||k  rt        d       j                  |||z
  dz  n|      
|
 fd}t        |      st        d| d      |}||k  r$t	        ||      }	|
z  }|	 ||	      f ||k  r#yyw)a  
        Returns a generator yielding tuples of ``(<datetime>, <value>)``.

        The data points will start at ``start_date``, and be at every time interval specified by
        ``precision``.

        :param start_date: A ``DateParseType``. Defaults to ``"-30d"``
        :param end_date: A ``DateParseType``. Defaults to ``"now"``
        :param precision: A float representing the time interval between data points.
        Defaults to 1/30th of the time
        :param distrib: A callable that accepts a datetime object and returns a value.
        Defaults to a uniform distribution
        :param tzinfo: timezone, instance of datetime.tzinfo subclass

        :sample:
        r   z-`end_date` must be greater than `start_date`.N   c                 P    j                   j                  j                  d      S r]  )r[   r\   rb   )r!   
precision_r_   s    r   r  z%Provider.time_series.<locals>.distrib	  s     ~~,,44Q
CCr   z"`distrib` must be a callable. Got z	 instead.)r^  r=   rr  callabler6   )r_   ry  rz  r  r  r   start_date_	end_date_	datapointr!   r  s   `         @r   time_serieszProvider.time_series	  s     0 ++Jv+F))(6)B	{"LMM**YM^I,Cr+Idmn
?D  A')TUU'2	)#&y&9B#Iwr{## )#s   BB$"B$c                 $    | j                  d      S )
        :sample:
        z%pr   r_   s    r   am_pmzProvider.am_pm	       yyr   c                 $    | j                  d      S )r  z%dr   r  s    r   day_of_monthzProvider.day_of_month	  r  r   c                 $    | j                  d      S )r  z%Ar   r  s    r   day_of_weekzProvider.day_of_week	  r  r   c                 $    | j                  d      S )r  z%mr   r  s    r   r'   zProvider.month	  r  r   c                 $    | j                  d      S )r  z%Br   r  s    r   
month_namezProvider.month_name	  r  r   c                 $    | j                  d      S )r  z%Yr   r  s    r   r&   zProvider.year	  r  r   c                 8    | j                  | j                        S r  )random_elementrx   r  s    r   centuryzProvider.century	  s     ""4>>22r   c                     | j                   j                  j                  | j                  | j                        j
                        S r  )r[   r\   choicer  	countriesr}   r  s    r   r
   zProvider.timezone	  s4     ~~$$++D,?,?,O,Y,YZZr   argskwargsc                     	 t        j                   | j                  |i |      S # t         j                  $ r}d| d}t	        |      |d}~ww xY w)z
        Generate a random timezone (see ``faker.timezone`` for any args)
        and return a Python object usable as a ``tzinfo`` for ``datetime``
        or other fakers.

        :sample:
        zTimezone data not found: z. The 'tzdata' package provides timezone database files needed by Python's zoneinfo module. While most systems have these files built-in, some minimal environments may not. Install faker with tzdata support: pip install 'faker[tzdata]'N)zoneinfoZoneInfor
   ZoneInfoNotFoundErrorImportError)r_   r  r  excmsgs        r   
pytimezonezProvider.pytimezone	  se    		,$$]T]]D%CF%CDD-- 	,+C5 1Q R  c"+	,s   $' AAAminimum_agemaximum_agec                    t        |t              st        d      t        |t              st        d      |dk  rt        d      |dk  rt        d      ||kD  rt        d      t	        j
                  |      j                         }t        ||dz          }t        ||       }| j                  |||      j                         }||k7  r|S |t        d	      z   S )
am  
        Generate a random date of birth represented as a Date object,
        constrained by optional miminimum_age and maximum_age
        parameters.

        :param tzinfo: Defaults to None.
        :param minimum_age: Defaults to ``0``.
        :param maximum_age: Defaults to ``115``.

        :sample:
        :sample: minimum_age=30, maximum_age=50
        zminimum_age must be an integer.zmaximum_age must be an integer.r   z2maximum_age must be greater than or equal to zero.z2minimum_age must be greater than or equal to zero.z6minimum_age must be less than or equal to maximum_age.r%   )r   rX   rY   )rM   )
r,   rh  	TypeErrorr=   r   r   r   r?   rJ  r	   )r_   r   r  r  r   ry  rz  dobs           r   date_of_birthzProvider.date_of_birth
  s    & +s+=>>+s+=>>?QRR?QRR$UVV ll6"'') a&89
s[L1vjW_`eegZ'sDS9!3D-DDr   )NNr   )NNN)NNTauto)z%Y-%m-%dN)z%H:%M:%SN)-30yr   N)r  rw  )+30dN)r  )-30dN)TFN)TF)r  r   NNN)Nr   s   )LrB   rC   rD   __doc__platformsystemrh  r=  r`   rx   r   rq  __annotations__r   r  recompilerF   rd  r   r   r>  r	   rC  TzInfor   rG  rJ  rO  r   ru  rV  r   dttimerZ  classmethodr;  r<  r   rn  r   rr  r^  rx  r|  r  r  r  r  r  r  r  boolr  r  r  r  r  r  r  r  r   r   r   r   r  r  r  r  r'   r  r&   r  r
   r  r  r   r   r   rV   rV   U   s$   , xI%	O 	O3 	O5 	O
	O 	O3 	O5 	O
$I|C  0d'(&	
d 	#n	
d" 	()%& 	
#d2 	&'	
3dB 	%&	
CdR 	&'	
Sdb 	 %"#	
cdH 	&'	
IdX 	 %	
Yd@ 	"m	
AdP 	)*% 	
Qd` 	#n	
adp 	()	
qd@ 	+,!	
AdP 	%&	
Qd` 	%&	
adp 	)*	
qd@ 	*+ 	
AdP 	$o$)	
Qd` 	'(%	
adp 	" %%-	
qd` 	'(%	
adp 	%&	
qd@ 	()	
AdP 	%&	
Qd` 	'(%	
adp 	8 %C"	
qdv 	(*=>3	
wdF	 	+,(!	
G	dV	 	'('"	
W	df	 	)+;<%	
g	dv	 	&'$	
w	dF
 	 -	
G
db
 	'(%#	
c
dr
 	+,%%	
s
dB 	'(%	
CdR 	,-	
Sdb 	%&	
cdr 	&'!	
sdB 	&'	
CdR 	()#	
Sdb 	*+ 	
cdr 	)*%	
sdB 	./%%#	
CdR 	*,?@%	
Sdb 	'(	
cdr 	%&	
sdB 	&'	
CdR 	+,!	
Sdb 	()	
cdr 	%&	
sdB 	%&	
CdR 	*+ 	
Sdb 	%&	
cdr 	%&	
sdB 	&'	
CdR 	'(	
Sdb 	&'	
cdr 	*+%$	
sdB 	*+%$	
CdR 	&' 	
Sdb 	'(% 	
cdr 	,-%!	
sdB 	()	
CdR 	 	
Sdl 	&'&	
md| 	'(	
}dL 	&'	
Md\ 	%&	
]dl 	$o	
md| 	+,&	
}dL 	$o	
Md\ 	()%	
]dl 	#n	
md| 	#n	
}dL 	'(	
Md\ 	%&	
]dl 	S	
md| 	'(	
}dL 	#n	
Md\ 	$o!	
]dl 	$o	
md| 	%& 	
}dL 	()	
Md\ 	&'	
]dl 	'(	
md| 	*+%	
}dL 	$o	
Md\ 	'(	
]dl 	,-"	
md| 	')<=#	
}dL 	&'"	
Md\ 	&'	
]dl 	%&	
md| 	J!	
}dL 	*+ 	
Md\ 	%&	
]dl 	)* 	
md| 	()!	
}dL 	()	
Md\ 		 %!	
]d~ 	*N;"	
dN 	&'	
Od^ 	()	
_dn 	&'	
od~ 	%&	
dN 	()%	
Od^ 	)*-	
_dn 	$o	
od~ 	&'	
dN 	&'	
Od^ 	)+<= 	
_dn 	$o	
od~ 	'(%!	
dN 	%&%	
Od^ 	-.#"	
_dn 	$o	
od~ 	%&	
dN  	&'	
O d^  	N	
_ dn  	&'	
o d~  	)*%%	
 dN! 	#n	
O!d^! 	)*	
_!dn! 	" -	
o!d^" 	&'	
_"dn" 	$o	
o"d~" 	,-"	
"dN# 	$o	
O#d^# 	()	
_#dn# 	)*	
o#d~# 	'(	
#dN$ 	)*	
O$d^$ 	*+ 	
_$dn$ 	()	
o$d~$ 	*+ 	
$dN% 	%&	
O%d^% 	)*	
_%dn% 	+,% 	
o%d~% 	()=,	
%dN& 	&'	
O&d^& 	$o!	
_&dn& 	%&	
o&d~& 	&'	
&dN' 	&'	
O'd^' 	%&	
_'dn' 	*+'	
o'd~' 	()	
'dN( 	./%&#	
O(d^( 	)*	
_(dn( 	-.	
o(d~( 	 	
(dX) 	'(	
Y)dh) 	6 % &A!	
i)dl* 	+,% 	
m*d|* 	'9	
}*dL+ 	'("	
M+d\+ 	()%	
]+dl+ 	$o	
m+d|+ 	&'	
}+dL, 	"m	
M,d\, 	&'	
],dl, 	&'	
m,d|, 	'(	
},dL- 	())	
M-d\- 	() 	
]-dl- 	&'+	
m-d|- 	()	
}-dL. 	&'	
M.d\. 	&'	
].dl. 	"m	
m.d|. 	,-%"	
}.dL/ 	&'$	
M/d\/ 	()%"	
]/dl/ 	 	
m/dH0 	'(	
I0dX0 	J1	
Y0dh0 	(),	
i0dx0 	&'	
y0dH1 	)*	
I1dX1 	*+	
Y1dh1 	)*%( 	
i1dx1 	)*%	
y1dH2 	+,%3	
I2dX2 	%&	
Y2dh2 	()	
i2dx2 	,-	
y2dH3 	J	
I3dX3 	%&/	
Y3dh3 	'(	
i3dx3 	&'	
y3dH4 	#n'	
I4dX4 	&'!	
Y4dh4 	$o	
i4dx4 	"M2	
y4dIL5 BJJ()E 1526G}-G !/G 
	G(%x'> %) %$ $(04r r }-r 
	r( $(0426	"K "K }-"K !/	"K
 
"KL $(04Z Z }-Z 	Z
 Z 
Z&KC KH]<S K_b K	@(: 	@f 	@
RC 
RH]<S 
R_b 
R	@(? 	@6 	@ +(=*A +c + + +(? +C + + s tCJ/?  . DU9c5+@%A DeESVJFW D D ?] ?HV<L ?X[ ? ? ? ?& ? ?& %+"'#'	l!l  l  	l
 
l6Q} Q Qek Q"Z ZQWHX Zdl ZFM Fv F\ \QWHX \dl \HM HHVDT H`f H 3704#'	* /* }-*  	*
 
*\ /3,0I]+I =)I 
	I"  #'	   	
 
>  #'	   	
 
>  #'	   	
 
>  #'	   	
 
:d  Y_ .T t X^ .4 T V\ .D d W] 2 %+"'%)9=#'+$!+$  +$ E?	+$
 (H:u#456+$  +$ 
%#&	'+$Zs c S s C c 3 3[# [, ,s ,x7G ,* $(	,E ,E ,E 	,E
 
,Er   rV   c                     dd l }| dk\  r|j                   j                  | |      S |j                  ddd|      |j                  t        |             z   S )Nr   rE  r%   r   r@  )r   r  r	   rh  )r2   r   r!   s      r   r4   r4   2
  sO    A~{{((F;;{{4Af{5SQZ^8\\\r   )/r  r  r  calendarr   r   r   r   ru  r   r  r	   r
   r.   r   r  typingr   r   r   r   r   r   r   faker.typingr   r   rE   r   r   	localizedr    r*   rh  r1   r=  r6   r?   r=   rA   rF   rq  r  r   symrV   r4   r   r   r   <module>r     sJ    	    #  #  + % H H H / )	.*eFH$45 *%@P:Q *"eFH$45 "# "<U3:%6 <@P <U] <f   .	 	  3  	>ID# E$~cU"==	>Z'E| Z'EzN]U3:-> ] ]S[ ]r   