
    ^jL                       d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlmZ  ed          Zej        ZdZdZedz  Zed	z  Zed
z  Zedz  Z ej                    dz  ZdZdZdZddgZ dPdZ!dQdZ"dRdZ#dSdZ$dTd Z%dUdVd(Z&dWd,Z'dXd/Z(dYd2Z)dZd4Z*d[d7Z+d\d]d?Z,d^dCZ-d_dDZ.d`dGZ/dadJZ0dbdLZ1d_dMZ2dcdNZ3e4dOk    r e3             dS dS )d    )annotationsN)Path)ZoneInfozI/data/video-pipeline/HaTramAudio/project/016-Nguoi-Giu-Am-Thanh-Cuoi-Cungzrun-20260720T233725Z-24504f17@fae6fce617a14dc4f8b3bd52968cc688a456c45a60bc2ed7701ccd8164875e02zoutput/final-upload.mp4z+image/normalized/intro-poster-1920x1080.pngzoutput/info.txtzlog/publish-ready.jsonz .config/ha-tram-audio/postiz.envcmrijlulx000jj7c8jo4ybyn6cmrhxbsdv000bj7c868iio3c7u   Hạ Trâm Audioz09:20z19:00returnstrc                     t           j                            t           j        j                                                                      dd          S )N+00:00Z)dtdatetimenowtimezoneutc	isoformatreplace     work/publish/publish_postiz.pyr   r       s6    ;??2;?++5577??#NNNr   pathr   c                0   t          j                    }|                     d          5 }|                    d          x}r,|                    |           |                    d          x},d d d            n# 1 swxY w Y   |                                S )Nrbi   )hashlibsha256openreadupdate	hexdigest)r   hfblocks       r   shar$   $   s    A	4 Avvo...e 	HHUOOO vvo...e 	               ;;==s   AA99A= A=objdictNonec                    | j                             dd           |                     | j        dz             }|                    t          j        |dd          dz   d	           t          j        ||            d S )
NT)parentsexist_okz.tmpF   )ensure_asciiindent
utf-8encoding)	parentmkdirwith_suffixsuffix
write_textjsondumpsosr   )r   r%   tmps      r   atomicr;   ,   s|    KdT222


4;/
0
0CNN4:ca@@@4GRYNZZZJsDr   textkeyc                6    |r|                      |d          n| S )N
[REDACTED]r   )r<   r=   s     r   redactrA   3   s     .1;4<<\***t;r   dict[str, str]c                 P   g d} d | D             t          fd| D                       rCt                                          st          d          t	          j        t                                          j                  dk    rt          d          t                              d                                          D ]}|	                                }|r|
                    d	          sd
|vr2|                    d
d          \  }}|	                                }|	                                	                    d          	                    d          }|v r|         s||<   fd| D             }|r%t          dd                    |          z             S )N)
POSTIZ_URLPOSTIZ_BASE_URLPOSTIZ_API_KEYPOSTIZ_FACEBOOK_INTEGRATION_IDPOSTIZ_YOUTUBE_INTEGRATION_IDPOSTIZ_TIMEZONEPOSTIZ_SLOTSc                P    i | ]#}|t           j                            |d           $S ) )r9   environget).0ks     r   
<dictcomp>zload_env.<locals>.<dictcomp>9   s*    9991a2&&999r   c              3  *   K   | ]}|          V  d S )Nr   rO   rP   valuess     r   	<genexpr>zload_env.<locals>.<genexpr>:   s)      
+
+Qvay=
+
+
+
+
+
+r   zPostiz config file missingi  z&Postiz config permissions must be 0600r/   r0   #=   "'c                $    g | ]}|         
|S r   r   rS   s     r   
<listcomp>zload_env.<locals>.<listcomp>H   s"    444Q&)4q444r   z!Postiz config missing variables: z, )anyENV_FILEexistsRuntimeErrorstatS_IMODEst_mode	read_text
splitlinesstrip
startswithsplitjoin)requiredrawliner=   valuemissingrT   s         @r   load_envro   7   s    i  i  iH99999F

+
+
+
+(
+
+
+++ $   	=;<<<</00E99GHHH%%w%77BBDD 	$ 	$C99;;D 4??3// 3d??C++JC))++CKKMM'',,22377Ef}}VC[}#s4444(444G U>7ASASSTTTMr   rX   basemethodpayloaddict | Noneretriesintc           
        |                      d          |z   }|d n)t          j        |dd                              d          }d|i}|d|d<   t	          |          D ]}	t
          j                            ||||	          }
	 t
          j                            |
d
          5 }|	                                
                    dd          }|                                rt          j        |          ni cd d d            c S # 1 swxY w Y   # t
          j        j        $ r_}t          |	                                
                    dd          |          }t!          d|j         d|d d                    d d }~wt
          j        j        t&          f$ rY}|dk    r&|	dz   |k     rt)          j        d|	z             Y d }~nt!          d| dt-          |          j                   d d }~ww xY wd S )N/F,:r,   
separatorsr/   Authorizationzapplication/jsonzContent-Type)dataheadersrq   x   )timeoutr   )errorszPostiz HTTP z: i  GETrX   r+   zPostiz transport error during )rstripr7   r8   encoderangeurllibrequestRequesturlopenr   decoderf   loadserror	HTTPErrorrA   r`   codeURLErrorTimeoutErrortimesleeptype__name__)rp   r=   rq   r   rr   rt   urlr~   r   attemptreqresponsebodyexcs                 r   apir   N   s~   
++c

T
!C?44
7[e(f(f(f(m(mnu(v(vD$G"4>> j jn$$StWV$TT	j''S'99 @X}}--gi-HH+/::<<?tz$'''R@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ |% 	S 	S 	S#((**++GI+FFLLDGchGG$uu+GGHHdR%|4 	j 	j 	j7Q;#8#8
1<(((^^^$s))J\^^__eii		jj jsP   !D)AD<DD	DD	DG<+AFG<#&G7(G77G<keystuple[str, ...]listc                `   t          | t                    r| S t          | t                    r|D ]~}|                     |          }t          |t                    r|c S t          |t                    r9dD ]6}t          |                    |          t                    r||         c c S 7g S )N)itemsr~   postsintegrations)
isinstancer   r&   rN   )rm   r   r=   itemnesteds        r   unwrap_listr   d   s    % % , 	, 	,C99S>>D$%% $%% ,H , ,F!$((6"2"2D99 ,#F|+++++,Ir   rm   dt.datetimec                L   |                                  }|                    d          r|d d         dz   }t          j                            |          }|j        %|                    t          j        j                  }|	                    t          j        j                  S )Nr   r   tzinfo)
rf   endswithr   r   fromisoformatr   r   r   r   
astimezone)rm   r<   parseds      r   
parse_dater   s   s    ;;==D}}S $CRCy8#[&&t,,F}r{77R[_---r   post
str | Nonec                    |                      d          }t          |t                    r|                     d          S |                      d          p|                      d          S )NintegrationidintegrationIdintegration_id)rN   r   r&   )r   r   s     r   post_integration_idr   }   s[    ((=))K+t$$ %t$$$88O$$B1A(B(BBr   dt.datetime | Nonec                    |                      d          p|                      d          }t          |t                    sd S 	 t          |          S # t          $ r Y d S w xY w)NpublishDatedate)rN   r   r
   r   	Exception)r   rm   s     r   	post_dater      sp    HH]##7txx'7'7EeS!! t%      tts   A 
A A startendc                   t           j                            |                    t          j        j                                                                      dd          |                    t          j        j                                                                      dd          d          }t          | |dd|z   d          }t          |d          S )	Nr   r   )	startDateendDater   z/posts?   rt   )r   r~   )r   parse	urlencoder   r   r   r   r   r   r   r   )rp   r=   r   r   queryrk   s         r   calendarr      s    L""%%bko66@@BBJJ8UXYY>>"+/22<<>>FFxQTUU$ $  E dC	E 11
=
=
=Cs-...r      currenttzr   slots	list[str]daysc           	   #    K   |                      |          }t          |dz             D ]}|                                t          j        |          z   }|D ]l}t          t          |                    d                    \  }}	t          j        	                    |t          j
        ||	          |          }
|
|k    r|
V  md S )NrX   r   rz   r   )r   r   r   r   	timedeltamapru   rh   r   combiner   )r   r   r   r   	local_nowoffsetdayrm   hourminute	candidates              r   candidate_slotsr      s      ""2&&Iq//    nn6!:!:!:: 	  	 EsEKK$4$455LD&++Cv1F1Fr+RRI9$$		    r   r   fbytc                T   |g |g i}d}| D ]}t          |          }	|	|vr|dz  }t          |                    d          p|                    d          pd                                          }
t	          |          }|
dv r|||	                             |           t          |||          D ]f}|                    t          j	        j
                  fd|                                D             }||         dk    r||         dk    r|||fc S gt          d          )	Nr   rX   statestatusrL   )QUEUE	PUBLISHEDc                N    i | ]!\  }}|t          fd |D                       "S )c              3  h   K   | ],}t          |z
                                            d k     V  -dS )rX   N)abstotal_seconds)rO   rm   r   s     r   rU   z)select_slot.<locals>.<dictcomp>.<genexpr>   s@      UUe3::<<==AUUUUUUr   )sum)rO   iiddatesr   s      r   rQ   zselect_slot.<locals>.<dictcomp>   s?    wwwZdZ]_d#sUUUUuUUUUUwwwr   z,No common Postiz slot found in 30-day window)r   r
   rN   upperr   appendr   r   r   r   r   r   r`   )r   r   r   r   r   r   targetignoredr   r   r   whenlocalcountsr   s                 @r   select_slotr      sO   "b"FG % %!$''fqLGDHHW%%A(););ArBBHHJJ***t/?3Kt$$$ "e44 / /r{//wwwwhnhththvhvwww":??vbzQ#vw....
E
F
FFr   c                   t          | t                    r|                     d|           n| }t          |t                    r|r|d         ni }t          |t                    r0t          |                    d          t                    r|d         }t          |t                    r*|                    d          r|                    d          st	          d          |d         |d         dS )Nr~   r   r   r   z,Postiz upload response missing media id/path)r   r   )r   r&   rN   r   r`   )rk   rm   s     r   normalize_mediar      s    $.sD$9$9BCGGFC   sE% *!)ar% :eii.?.?#F#F feT"" K%))D// K6ARAR KIJJJ+uV}555r   receipt_pathcanonc                j   t          |          }|                                rt          j        |                    d                    }|                    d          dk    r|                    d          r|                    d          |k    r|                    d          |k    rs|                    d          |                                j        k    rC|                    d	          pi }|                    d
          r|                    d          r|S dt          t          dd|t          |          ||                                j        dt                      d}t          ||           d+d}	d|z   }
d                    d |	|                     d          dz              dd |	|
           dd |	t          |                     ddddd g          dz   }t          j        g d!|d"d"d#$          }|j        d%k    re|                    d&t'          |j        p|j        d'd          |          t                      (           t          ||           t-          d)          	 t/          t          j        |j                            }nb# t0          $ rU}|                    d&t'          t          |          |          t                      (           t          ||            d }~ww xY w|                    dd"|t                      *           t          ||           |S ),Nr/   r0   r   	completedverifiedsource_canon_sha256local_sha256local_bytesmediar   r   rX   	uploadingFr?   )schema_version
project_idrun_idr   r   r   
local_pathr   r   
credential
created_atrm   r
   r	   c                V    |                      dd                               dd          S )N\z\\rY   z\"r@   )rm   s    r   esczupload.<locals>.esc   s&    }}T6**223>>>r   zAuthorization: r.   zurl = "rw   z/uploadrY   z
header = "zform = "file=@zfail-with-bodysilentz
show-errorzmax-time = 7200)curlz--config-Ti\  )inputr<   capture_outputr   r   failedi$r   r   
updated_atzPostiz media upload failed)r   r   r   r  )rm   r
   r	   r
   )r$   r_   r7   r   rd   rN   ra   st_sizePROJECTRUNr
   r   r;   ri   r   
subprocessrun
returncoder   rA   stderrstdoutr`   r   r   )rp   r=   r   r   r   	local_shaoldr   r   r  auth_headerconfigresultr   s                 r   uploadr     s   D		I j///AABB778++
0C0C+PeHfHfjoHoHotwt{t{  }K  uL  uL  PY  uY  uY  ^a  ^e  ^e  fs  ^t  ^t  x|  xA  xA  xC  xC  xK  ^K  ^KGGG$$*Eyy 599V#4#4 7c5$ii499;;K^"#%%	 G <!!!? ? ? ?#c)KYY6##dkk#&&233666(SS%%(((*SYY***(L2C	  
 
F ^555V$_cmqrrrFAhffm6Tv}V[V\V\5]_b.c.cpspupuvvv|W%%%7888
6= 9 9::   hfSXXs.C.CPSPUPUVVV|W%%% NN+EceeNTTT
<!!!Ls   5&J 
K;&AK66K;slotdict[str, list[dict]]c                   |g |g i}| D ]}t          |          }t          |          }t          |                    d          p|                    d          pd                                          }||v rK|It          ||z
                                            dk     r!|dk    r||                             |           |S )Nr   r   rL   rX   r   )r   r   r
   rN   r   r   r   r   )	r   r   r   r  foundr   r   r   r   s	            r   matching_atr"     s    RE $ $!$''DHHW%%A(););ArBBHHJJ%<<D,dTk5P5P5R5R1S1SVW1W1W\ael\l\l#Jd###Lr   r   c                B   |                      d          p|                      d          |t          |                      d          p|                      d          pd                                          |                      d          p|                      d          dS )	Nr   _idr   r   rL   r   r   )r   r   r   publish_date)rN   r
   r   )r   r   s     r   	slim_postr&     s    hhtnn/TXXg&&B$((8*<*<BCCIIKK//C488F3C3C	  r   c                    t          j        t          dz                      d                    } |                     d          |                     d          |                     d          |                     d          ft
          t          dd	fk    rt          d
          t          j        t                              d                    }|                    d          dk    s5|                    d          dus|                    d          t          k    rt          d          |                    d          t          t                    k    sV|                    d          t          t                    k    s+|                    d          t          t                    k    rt          d          dt                                          j        cxk     rdk     sn t          d          |S )Nz.ownership-lock.jsonr/   r0   r   r  ownerr   zoromain_session_pipelinezOwnership mismatchreadyr   Tr   z"Publish-ready gate is not verifiedupload_copy_sha256thumbnail_sha256metadata_sha256zPublish artifact driftr   i ʚ;z"Upload copy violates hard byte cap)r7   r   ROOTrd   rN   r  r  r`   READYCANONr$   VIDEOTHUMBINFOra   r  )lockr+  s     r   guardr6     s   :t44???QQRRD 2 2DHHW4E4EtxxPXGYGYZ_fhkms  vM  _N  N  N/000Ju8899Eyyg%%:)>)>d)J)JeiiXmNnNnrwNwNw?@@@yy%&&#e**44		BT8U8UY\]bYcYc8c8cglgpgp  rC  hD  hD  HK  LP  HQ  HQ  hQ  hQ3444uzz||#3333m3333?@@@Lr   c                   23 t                      } t                      }|d                             d          }|d         }|d         2|d         3|d         }d |d                             d	d
                              d
          D             }23||ft
          t          dt          fk    rt          d          t          ||ddd          }t          |t                    r|                    d          durt          d          t          t          ||ddd          d          }d |D             }2df3dffD ]|\  }	}
|                    |	          }|rN|                    d          |
k    s5|                    d          t          k    s|                    d          du rt          d|
           }t          |          }t           j                            t           j        j                  }|t!          j        d          z
  }|t!          j        d          z   }t-          ||||          }t/          |23|||          \  }}}}t          ||dd t0          j                            2          z   d          t          ||dd t0          j                            3          z   d          d!}t7          t8          d"z  dt:          t<          d#dd$23d!|                                |                                                    d%d&          |2         |3         d!||t%                      d'           tA          ||tB          t8          d(z  tD                    }tA          ||tF          t8          d)z  tD                    }t           j                            t           j        j                  }t-          |||t!          j        d          z
  |t!          j        d          z             }t/          |23|||          \  }}}}tH          %                    d*+          &                                }|'                                d,         &                                }d-tQ          |          cxk    rd.k    sn t          d/          d0|                                                    d%d&          d1g d22i||gd3gd4did5d23i||gd3gd|d6d7|g d8d5gd9}tS          j*        |d1d:;          } tS          j+        |           }!tQ          |!                    d<g                     d-k    sld= |!d<         D             23hk    sT|!d<         d,         d>         d,         d?         d,         |k    s*|!d<         d         d>         d,         d?         d,         |k    rt          d@          tY          j-        | .                    d*                    /                                }"dA0                    t:          tD          t<          | dB         | dC         23g          }#tY          j-        |#.                    d*                    /                                }$t8          dDz  }%t8          dEz  }&|&1                                rtS          j+        |&%                    d*+                    }'|'                    dF          rL|'                    dG          |$k    r3te          tS          j*        dH|'dI         |'dJ         dK                     d S |%1                                rNtS          j+        |%%                    d*+                    }'|'                    dL          dMv rt          dN          i dOddPt:          dQt<          dLdRdFd1dSd$dG|$dT|"dUtD          dV| dB         dC| dC         dW|dX|dI|                                dY|                                                    d%d&          dZ23d!d[|2         |3         d!|t%                      d\}(t7          |%|(           	 t          ||d]d^|d_          })|(3                    d`|)t%                      a           t7          |%|(           nh# th          $ r[}*|(3                    dbtk          tm          |*          |          t%                      c           t7          |%|(           d })Y d }*~*nd }*~*ww xY wd }+to          dd          D ]},t-          |||t!          j        def          z
  |t!          j        def          z             }-tq          |-23|          }+tQ          |+2                   dk    rtQ          |+3                   dk    r n~tQ          |+2                   dk    sMtQ          |+3                   dk    s4tQ          |+2                   dk    tQ          |+3                   dk    k    r nts          j:        de           |+J tQ          |+2                   dk    stQ          |+3                   dk    rtw          |+2                   tw          |+3                   k    rdgndb}.|(3                    |.2fdh|+2         D             3fdi|+3         D             d!t%                      j           t7          |%|(           t          dk          ty          |+2         d,         2          ty          |+3         d,         3          d!}/|/d         d2         r|/d         d2         st          dl          |/d         d2         |/d         d2         g}0i dOddPt:          dQt<          dLdmdFddnddod1dSd$dG|$dT|"dUtD          dV| dB         dp| dq         dC| dC         dW|dX|dI|                                |                                                    d%d&          |/|023d!drdrd!|t%                      ds}1t7          |&|1           |(3                    dmd|0t%                      t           t7          |%|(           te          tS          j*        dm|1dI         |1dY         |0|1du         dv                     d S )wNrE   rw   rF   rG   rH   rI   c                ^    g | ]*}|                                 |                                 +S r   )rf   )rO   xs     r   r\   zmain.<locals>.<listcomp>  s2    ^^^1TUT[T[T]T]^QWWYY^^^r   rJ   ;ry   zAsia/Ho_Chi_MinhuE   Postiz target configuration does not match locked Hạ Trâm contractr   z/is-connectedr   r   	connectedTzPostiz is not connectedz/integrations)r   r~   c                d    i | ]-}t          |t                    |                    d           |.S )r   )r   r&   rN   )rO   r   s     r   rQ   zmain.<locals>.<dictcomp>  s3    UUUdjt>T>TUTXXd^^TUUUr   facebookyoutube
identifiernamedisabledz(Postiz integration preflight failed for rX   r      z/find-slot/)r=  r>  zlog/postiz-preflight.jsonpassedr?   r   r   )r   r   r  r   r   r  integration_idsslot_candidate_localslot_candidate_utctarget_occupancyother_integration_posts_ignoredfind_slot_reference
checked_atzlog/postiz-upload-video.jsonz log/postiz-upload-thumbnail.jsonr/   r0   r   r+   d   zYouTube title length invalidscheduleFr   )contentimage__type)r   rm   settingspublicno)rO  titler   selfDeclaredMadeForKids	thumbnailtags)r   r   	shortLinkrV  r   rx   r{   r   c                *    h | ]}|d          d         S )r   r   r   )rO   ps     r   	<setcomp>zmain.<locals>.<setcomp>F  s"    -_-_-_a.>t.D-_-_-_r   rm   rN  z"Schedule payload validation failed|r,  r-  zlog/postiz-schedule-intent.jsonzlog/postiz-schedule.jsonr   idempotency_keyscheduled_verified_reused
slot_localpost_ids)r   r^  r_  r   )creating	ambiguouspartial_failurez=Existing non-terminal schedule intent requires reconciliationr   r   r  r`  r  payload_sha256r   video_sha256video_mediathumbnail_mediaslot_utcrD  target_occupancy_before_create)rH  r  POSTz/posts)rr   rt   created_response_received)r   r   r  ra  r  $      )minutesrb  c                0    g | ]}t          |          S r   r&  )rO   rY  r   s     r   r\   zmain.<locals>.<listcomp>u  s$    :_:_:_PQ9Q;K;K:_:_:_r   c                0    g | ]}t          |          S r   ro  )rO   rY  r   s     r   r\   zmain.<locals>.<listcomp>u  sC      mR  mR  mR  CDmvwxz|m}m}  mR  mR  mRr   )r   observedr  zMPostiz schedule reconciliation did not find exactly one QUEUE per integrationz#Calendar read-back missing post IDsscheduled_verified	scheduled	publishedvideo_bytesupload_copy_bytesr   )rg  r   r_  rD  statesrH  verified_at)r   r   r_  r  rw  )r   r^  rg  r_  rw  )=r6  ro   r   r   rh   FB_EXPECTEDYT_EXPECTEDSLOTS_EXPECTEDr`   r   r   r&   rN   r   TARGET_NAMEr   r   r   r   r   r   r   r   r   r   r   quoter;   r/  r  r  r   r  r2  r1  r3  r4  rd   rf   re   lenr7   r8   r   r   r   r   r    ri   r_   printr   r   rA   r
   r   r"  r   r   boolr&  )4r+  envrp   r=   r   r   r;  r   by_idr   r?  r   r   r   r   r   	pre_posts	pre_localpre_utc
pre_countspre_ignored	find_slotre  thumb_mediar   r^  rg  r   r   inforS  rr   encodedcheckedpayload_shaidentityr\  intent_pathschedule_pathr  intentr   r   r!  _readbackr   	posts_outr_  rL  r   r   s4                                                     @@r   mainr    s   GGE
**C !((--D

C	-	.B	,	-B$%H^^N 3 ; ;C E E K KC P P^^^E
B% [+?QSa$bbbbcccD#uoqAAAIi&& 6)--*D*DD*P*P4555s4e_aPPPRjkkLUUlUUUE,r9o> X XZyy~~ 	Xtxx--;;txx?O?OS^?^?^bfbjbjkubvbvz~b~b~V*VVWWW c	(		Bkoobko..Gbl****E
BLb)))
)CsE3//I2=iRQXZ\^c2d2d/Iw
Kc5-&,:L:LR:P:P*PZ[\\\tS%9K9KB9O9O)OYZ[[[ I 4--7cXcg"BSU7V7V ) 3 3 5 5WM^M^M`M`MhMhiqsvMwMw)3BJrNSS+6yee0 0    sE42P+PRWXXKsE42T+TV[\\Kkoobko..GT3",A*>*>*> >",\^J_J_J_@_``E,7r2wPRTY,Z,Z)J&'>>7>++1133DOOa &&((EE

!!!!c!!!!9:::""$$,,Xs;;!2Jdk]2[2[1\ksu  kA  B  B!2Jdk]2[2[1\u~  JO  Ya  ~B  Q\  fh  ki  ki  j  j
	 	G juLLLGj!!G
7;;w##$$))-_-_gV]N^-_-_-_dfhjck-k-kovw~o  AB  pC  DK  pL  MN  pO  PW  pX  YZ  p[  _j  pj  pj  nu  v}  n~  @  nA  BI  nJ  KL  nM  NU  nV  WX  nY  ]h  nh  nh?@@@.!8!899CCEEKxx%e4H.I5QcKdfhjlmnnHnX__W%=%=>>HHJJO::K55M j00'0BBCC77: 	377+<#=#=#P#P$*(CSVWcSdru  wA  sB  C  C  D  D  E  E  EF `j...@@AA778 LLL^___	!	)7	4<c	CKZ	Ycej	l	$5	HXZe	 	u	 '5e<P6Q	 Tfglm  hA	 	{		 %6{		
 	j**,,	
 /9(:L:L:N:N:V:VW_ad:e:e	 	r::	 	)vbzfUWj*Y*Y	 ,3#%%	 	 	F ;tS&(GQOOO88X[X]X]^^^{F####   [s3xx0E0ERURWRWXXX{F### E2YY  D#x",q2I2I2I'I8VXVbklVmVmVmKmnnHb"h77uRy>>Q3uRy>>Q#6#6EuRy>>AU2Y!!3!3E"I!8KQTUZ[]U^Q_Q_cdQd7e7eE
1
59~~c%)nn11%)%)__U2Y%G%G!![U:_:_:_:_UZ[]U^:_:_:_  mR  mR  mR  mR  HM  NP  HQ  mR  mR  mR  .S  .S  `c  `e  `e  	f  	f  	f{F###jkkk&uRy|R88YuUWyYZ|]_E`E`aaIZ & Bi	.B4.H B@AAA*%d+Yy-A$-GHH!)74<cCKMaD%t-8%AM| 	? -=k Labg 	23	 6CEJ]D^	
 	E"45
 8Ek
 Tefq 	j**,, ;C:L:L:N:N:V:VW_ad:e:e(*r::&7;;+2355  H =(###
MM-x\_\a\aMbbb
;	$* 4H\DZhpq{h|  KS  _g  hp  _q  r  r  s  s  t  t  t  t  ts   /A	a9 9
cAcc__main__)r	   r
   )r   r   r	   r
   )r   r   r%   r&   r	   r'   )r<   r
   r=   r
   r	   r
   )r	   rB   )NrX   )rp   r
   r=   r
   rq   r
   r   r
   rr   rs   rt   ru   )r   r   r	   r   )rm   r
   r	   r   )r   r&   r	   r   )r   r&   r	   r   )
rp   r
   r=   r
   r   r   r   r   r	   r   )r   )r   r   r   r   r   r   r   ru   )r   r   r   r
   r   r
   r   r   r   r   r   r   )r	   r&   )rp   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
   r	   r&   )r	   r'   )5
__future__r   r   r   r   r7   r9   pathlibr   ra   r  r   urllib.errorr   urllib.parseurllib.requestzoneinfor   r/  r@  r  r  r1  r2  r3  r4  r0  homer^   ry  rz  r|  r{  r   r$   r;   rA   ro   r   r   r   r   r   r   r   r   r   r  r"  r&  r6  r  r   r   r   r   <module>r     s   " " " " " "       				                              tWXX
)%J((<<''49;;;;)) 7#O O O O      < < < <   .j j j j j,   . . . .C C C C   / / / /         G G G G(6 6 6 6% % % %P         @t @t @t @tF zDFFFFF r   