Ë
    ìmxiˆ� ã                   óP  — 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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 	 d dlZd dlZd dlZd dlmZmZ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#m$Z$m%Z% ejN                  j6                  Z(d„ Z)d	„ Z*d
„ Z+d„ Z,d„ Z-d„ Z.d„ Z/ G d„ de«      Z0 G d„ de«      Z1 G d„ de«      Z2 G d„ de2«      Z3 G d„ de2«      Z4 G d„ de2«      Z5 G d„ de«      Z6 G d„ de«      Z7 G d„ d e«      Z8 G d!„ d"e«      Z9 G d#„ d$e«      Z: G d%„ d&e«      Z; G d'„ d(e«      Z< G d)„ d*e«      Z= G d+„ d,e«      Z> G d-„ d.e«      Z? G d/„ d0e «      Z@ G d1„ d2e«      ZA G d3„ d4e «      ZB G d5„ d6e«      ZCd7„ ZD G d8„ d9e$«      ZE G d:„ d;e#«      ZF G d<„ d=e"«      ZG G d>„ d?e!«      ZH G d@„ dAe«      ZI G dB„ dCe"«      ZJ G dD„ dEe!«      ZK G dF„ dGe«      ZL G dH„ dIe!«      ZM G dJ„ dKe"«      ZN G dL„ dMe«      ZO G dN„ dOe«      ZP G dP„ dQe"«      ZQ G dR„ dSe$«      ZR G dT„ dUe#«      ZS G dV„ dWe"«      ZT G dX„ dYe$«      ZU G dZ„ d[e$«      ZV G d\„ d]e#«      ZW G d^„ d_e"«      ZX G d`„ dae!«      ZY G db„ dce«      ZZdd„ Z[de„ Z\df„ Z]dg„ Z^dh„ Z_ejN                  j                  ejN                  jÀ                  di„ «       «       Zadj„ Zbdk„ Zcdl„ ZdejN                  jÊ                  dm„ «       Zfdn„ Zgdo„ Zhdp„ Zidq„ Zjdr„ Zk G ds„ dte«      Zldu„ Zmdv„ Zndw„ ZoejN                  já                  ejâ                  dxk(  dy¬z«      d{„ «       ZrejN                  jÀ                  d|„ «       Zsd}„ Ztd~„ Zud„ Zvd€„ Zwd�„ Zxd‚„ Zydƒ„ Zzd„„ Z{d…„ Z|d†„ Z} e?d‡dˆi¬‰«      Z~ eAd‡dˆi¬‰«      ZejN                  jÀ                  dŠ„ «       Z€ejN                  já                  ejâ                  dxk(  d‹¬z«      dŒ„ «       Z�d�„ Z‚dŽ„ Zƒd�„ Z„ eG«       Z… eC«       Z†d�„ Z‡d‘„ Zˆd’„ Z‰d“„ ZŠd”„ Z‹d•„ ZŒd–„ Z�ejN                  jÀ                  ejN                  �j                  d—„ «       «       Z�ejN                  �j                  d˜„ «       Z�ejN                  �j                  d™„ «       Z‘ejN                  �j                  dš„ «       Z’d›„ Z“dœ„ Z”d�„ Z•dž„ Z–ejN                  j                  dŸ„ «       Z—ejN                  jÀ                  d „ «       Z˜ejN                  j                  ejN                  jÀ                  d¡„ «       «       Z™d¢„ Zšd£„ Z›d¤„ Zœd¥„ Z�d¦„ Zžd§„ ZŸd¨„ Z d©„ Z¡ejN                  �j                  dª„ «       Z¢d«„ Z£d¬„ Z¤d­„ Z¥d®„ Z¦d¯„ Z§d°„ Z¨ejN                  �j                  d±„ «       Z© G d²„ d³e«      ZªejN                  j                  d´„ «       Z«dµ„ Z¬ejN                  �jZ                  ejN                  jÀ                  d¶„ «       «       Z®ejN                  �jZ                  ejN                  jÀ                  d·„ «       «       Z¯ G d¸„ d¹e2«      Z°dº„ Z±ejN                  jÀ                  d»„ «       Z²d¼„ Z³ G d½„ d¾e«      Z´d¿„ ZµdÀ„ Z¶dÁ„ Z·dÂ„ Z¸e�jr                  dÃ„ «       ZºejN                  �jw                  dÄdÅdÆgdÇ¬È«      dÉ„ «       Z¼y# e$ r dZY �ŒDw xY w# e$ r dZe&e&cZZe&e&cZZ e&e&cZ!Z"e&e&cZ#Z$e&Z%Y �Œ-w xY w)Êé    N)Údatetime)ÚIpcReadOptionsÚ	ReadStatsÚtobytes)Úfind_free_port)Úutil)Úflight)	ÚFlightClientÚFlightServerBaseÚServerAuthHandlerÚClientAuthHandlerÚServerMiddlewareÚServerMiddlewareFactoryÚClientMiddlewareÚClientMiddlewareFactoryÚFlightCallOptionsc                  ó   — dd l } y )Nr   )Úpyarrow.flight)Úpyarrows    úP/home/htdocs/ttos/venv/lib/python3.12/site-packages/pyarrow/tests/test_flight.pyÚtest_importr   A   s   € äó    c                  ó¨   — t         j                  j                  d«      st        d«      ‚t	        j
                  t         j                  d   «      dz  S )z-Get the path to the test resources directory.ÚARROW_TEST_DATAzITest resources not found; set ARROW_TEST_DATA to <repo root>/testing/datar	   )ÚosÚenvironÚgetÚRuntimeErrorÚpathlibÚPath© r   r   Úresource_rootr"   F   sF   € ä�:‰:�>‰>Ð+Ô,Üð Ió Jð 	Jä�<‰<œŸ
™
Ð#4Ñ5Ó6¸ÑAÐAr   c                 óø   — t        «       }|sy	 || z  j                  d«      5 }|j                  «       cddd«       S # 1 sw Y   yxY w# t        $ r' t	        d|| z  › dt        j                  «       › �«      ‚w xY w)z)Get the contents of a test resource file.NÚrbzTest resource z< not found; did you initialize the test resource submodule?
)r"   ÚopenÚreadÚFileNotFoundErrorr   Ú	tracebackÚ
format_exc)ÚpathÚrootÚfs      r   Úread_flight_resourcer-   N   s†   € ä‹?€DÙØð
Ø�T‰k×Ñ Ó%ð 	¨Ø—6‘6“8÷	÷ 	ò 	ûäò 
ÜØ˜T D™[˜Mð *)Ü)2×)=Ñ)=Ó)?Ð(@ðBó
ð 	
ð
ús%   �A	 £=³	A	 ½AÁA	 ÁA	 Á	0A9c                  ó¾   — t        d«      t        j                  t        d«      t        d«      ¬«      t        j                  t        d«      t        d«      ¬«      gdœS )z'Get the paths to test TLS certificates.zroot-ca.pemz	cert0.pemz	cert0.key)ÚcertÚkeyz	cert1.pemz	cert1.key)Ú	root_certÚcertificates)r-   r	   ÚCertKeyPairr!   r   r   Úexample_tls_certsr4   ]   sY   € ô *¨-Ó8ä×ÑÜ)¨+Ó6Ü(¨Ó5ôô ×ÑÜ)¨+Ó6Ü(¨Ó5ôð	
ñð r   c                  óv   — t        j                  g d¢«      g} t         j                  j                  | dg¬«      S )N©iöÿÿÿéûÿÿÿr   é   é
   Ú	some_ints©Únames)ÚpaÚarrayÚTableÚfrom_arrays)Údatas    r   Úsimple_ints_tablerB   n   s4   € ä
�‰Ò$Ó%ð€Dô �8‰8×Ñ ¨[¨MÐÓ:Ð:r   c                  óä  — t        j                  g d¢t        j                  «       ¬«      } t        j                  g d¢t        j                  «       ¬«      }t        j                  t         j                  j                  g d¢| «      t         j                  j                  ddg| «      t         j                  j                  ddg|«      g«      g}t         j                  j                  |d	g¬
«      S )N)ÚfooÚbazÚquux©Útype)rD   rE   rF   Únew)é   r   Né   rJ   r   é   Ú
some_dictsr;   )r=   r>   Úutf8Úchunked_arrayÚDictionaryArrayr@   r?   )Údict_valuesÚnew_dict_valuesrA   s      r   Úsimple_dicts_tablerS   u   s²   € Ü—(‘(Ò1¼¿¹»	ÔB€KÜ—h‘hÒ<Ä2Ç7Á7Ã9ÔM€Oä
×ÑÜ×Ñ×*Ñ*ª<¸ÓEÜ×Ñ×*Ñ*¨A¨q¨6°;Ó?Ü×Ñ×*Ñ*¨A¨q¨6°?ÓCð
ó 	ð€Dô �8‰8×Ñ ¨\¨NÐÓ;Ð;r   c                  ó    — t         j                  j                  t        j                  g d¢«      t        j                  g d¢«      gddg¬«      S )N)rD   ÚbarrE   Úqux©rJ   rK   rL   é   ÚaÚbr;   )r=   r?   r@   r>   r!   r   r   Úmultiple_column_tabler[   ‚   sB   € Ü�8‰8×Ñ¤§¡Ò*FÓ!GÜ!#§¡ª,Ó!7ð!9à'*¨C jð  ó 2ð 2r   c                   ó4   ‡ — e Zd ZdZdZdˆ fd„	Zd„ Zd„ Zˆ xZS )ÚConstantFlightServerz»A Flight server that always returns the same data.

    See ARROW-4796: this server implementation will segfault if Flight
    does not properly hold a reference to the Table object.
    s   the expected criteriac                 ób   •— t        ‰| �  |fi |¤Ž t        t        t        dœ| _        || _        y )N)ó   intsó   dictsó   multi)ÚsuperÚ__init__rB   rS   r[   Útable_factoriesÚoptions)ÚselfÚlocationre   ÚkwargsÚ	__class__s       €r   rc   zConstantFlightServer.__init__‘   s3   ø€ Ü‰Ñ˜Ñ, VÒ,ô 'Ü(Ü+ñ 
ˆÔð
 ˆ�r   c              #   ó¾   K  — || j                   k(  rJt        j                  t        j                  g «      t        j
                  j                  d«      g «      –— y y ­w)Nú/foo)ÚCRITERIAr	   Ú
FlightInfor=   ÚschemaÚFlightDescriptorÚfor_path©rf   ÚcontextÚcriterias      r   Úlist_flightsz!ConstantFlightServer.list_flights›   sL   è ø€ Ø�t—}‘}Ò$Ü×#Ñ#Ü—	‘	˜"“Ü×'Ñ'×0Ñ0°Ó8Øóó ð %ùs   ‚AAc                 ó€   —  | j                   |j                     «       }t        j                  || j                  ¬«      S )N©re   )rd   Úticketr	   ÚRecordBatchStreamre   )rf   rr   rw   Útables       r   Údo_getzConstantFlightServer.do_get£   s4   € ð 4�×$Ñ$ V§]¡]Ñ3Ó5ˆÜ×'Ñ'¨°t·|±|ÔDÐDr   ©NN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rl   rc   rt   rz   Ú__classcell__©ri   s   @r   r]   r]   ˆ   s   ø„ ñð (€HõòöEr   r]   c                   ó@   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zed„ «       Zˆ xZ	S )ÚMetadataFlightServerz4A Flight server that numbers incoming/outgoing data.c                 ó2   •— t        ‰| �  di |¤Ž || _        y ©Nr!   ©rb   rc   re   ©rf   re   rh   ri   s      €r   rc   zMetadataFlightServer.__init__­   ó   ø€ Ü‰ÑÑ"˜6Ò"Øˆ�r   c                 óì   — t        j                  g d¢«      g}t         j                  j                  |dg¬«      }t	        j
                  |j                  | j                  |«      | j                  ¬«      S )Nr6   rY   r;   rv   )	r=   r>   r?   r@   r	   ÚGeneratorStreamrn   Únumber_batchesre   )rf   rr   rw   rA   ry   s        r   rz   zMetadataFlightServer.do_get±   sb   € ä�H‰HÒ(Ó)ð
ˆô —‘×$Ñ$ T°#°Ð$Ó7ˆÜ×%Ñ%Ø�L‰LØ×Ñ Ó&Ø—L‘Lô"ð 	"r   c           	      ó  — d}g d¢}|j                   j                  dk(  sJ ‚|D ]ª  \  }}|j                  t        j                  j                  t        j                  ||   g«      gdg«      «      sJ ‚|€J ‚t        j                  d|j                  «       «      \  }	||	k(  sJ ‚|j                  t        j                  d|«      «       |dz  }Œ¬ |j                   j                  dk(  sJ ‚|j                   j                  dk(  sJ ‚y )Nr   r6   rJ   rY   ú<ié   r8   )ÚstatsÚnum_messagesÚequalsr=   ÚRecordBatchr@   r>   ÚstructÚunpackÚ
to_pybytesÚwriteÚpackÚnum_record_batches)
rf   rr   Ú
descriptorÚreaderÚwriterÚcounterÚexpected_dataÚbatchÚbufÚclient_counters
             r   Údo_putzMetadataFlightServer.do_put»   sÿ   € ØˆÚ+ˆØ�|‰|×(Ñ(¨AÒ-Ð-Ð-Ø ò 		‰JˆE�3Ø—<‘<¤§¡× :Ñ :Ü—‘˜=¨Ñ1Ð2Ó3Ð4Ø�ó!ô ð ð ð �?Ð"�?Ü$Ÿm™m¨D°#·.±.Ó2BÓC‰OˆNØ˜nÒ,Ð,Ð,Ø�L‰LœŸ™ T¨7Ó3Ô4Ø�q‰L‰Gð		ð �|‰|×(Ñ(¨AÒ-Ð-Ð-Ø�|‰|×.Ñ.°!Ò3Ð3Ñ3r   c              #   ó†   K  — t        | j                  «       «      D ]!  \  }}t        j                  d|«      }||f–— Œ# y ­w)Nr�   )Ú	enumerateÚ
to_batchesr“   r—   )ry   Úidxrž   rŸ   s       r   r‹   z#MetadataFlightServer.number_batchesÌ   sA   è ø€ ä# E×$4Ñ$4Ó$6Ó7ò 	‰JˆC�Ü—+‘+˜d CÓ(ˆCØ˜�*Óñ	ùs   ‚?A©N)
r|   r}   r~   r   rc   rz   r¡   Ústaticmethodr‹   r€   r�   s   @r   rƒ   rƒ   ª   s)   ø„ Ù>õò"ò4ð" ñó ôr   rƒ   c                   ó6   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zˆ xZS )ÚEchoFlightServerz4A Flight server that returns the last data uploaded.c                 óB   •— t        ‰| �  |fi |¤Ž d | _        || _        y r¦   )rb   rc   Úlast_messageÚexpected_schema)rf   rg   r¬   rh   ri   s       €r   rc   zEchoFlightServer.__init__Ö   s%   ø€ Ü‰Ñ˜Ñ, VÒ,Ø ˆÔØ.ˆÕr   c                 ó@   — t        j                  | j                  «      S r¦   )r	   rx   r«   ©rf   rr   rw   s      r   rz   zEchoFlightServer.do_getÛ   s   € Ü×'Ñ'¨×(9Ñ(9Ó:Ð:r   c                 ó|   — | j                   r| j                   |j                  k(  sJ ‚|j                  «       | _        y r¦   )r¬   rn   Úread_allr«   ©rf   rr   r™   rš   r›   s        r   r¡   zEchoFlightServer.do_putÞ   s2   € Ø×ÒØ×'Ñ'¨6¯=©=Ò8Ð8Ð8Ø"ŸO™OÓ-ˆÕr   c                 ó   — |D ]  }Œ y r¦   r!   )rf   rr   r™   rš   r›   Úchunks         r   Údo_exchangezEchoFlightServer.do_exchangeã   s   € Øò 	ˆEØñ	r   r{   )	r|   r}   r~   r   rc   rz   r¡   r´   r€   r�   s   @r   r©   r©   Ó   s   ø„ Ù>õ/ò
;ò.ö
r   r©   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚEchoStreamFlightServerz6An echo server that streams individual record batches.c                 óŠ   — t        j                  | j                  j                  | j                  j	                  d¬«      «      S )Né   ©Úmax_chunksize)r	   rŠ   r«   rn   r¤   r®   s      r   rz   zEchoStreamFlightServer.do_getë   s;   € Ü×%Ñ%Ø×Ñ×$Ñ$Ø×Ñ×(Ñ(°tÐ(Ó<ó>ð 	>r   c                 ó   — g S r¦   r!   ©rf   rr   s     r   Úlist_actionsz#EchoStreamFlightServer.list_actionsð   ó   € Øˆ	r   c                 óŠ   — |j                   dk(  r/|j                  «       |j                  «       j                  d«      gS t        ‚©Núwho-am-iúutf-8©rH   Úpeer_identityÚpeerÚencodeÚNotImplementedError©rf   rr   Úactions      r   Ú	do_actionz EchoStreamFlightServer.do_actionó   ó9   € Ø�;‰;˜*Ò$Ø×)Ñ)Ó+¨W¯\©\«^×-BÑ-BÀ7Ó-KÐLÐLÜ!Ð!r   N©r|   r}   r~   r   rz   r½   rÊ   r!   r   r   r¶   r¶   è   s   „ Ù@ò>ò
ó"r   r¶   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚEchoTableStreamFlightServerz,An echo server that streams the whole table.c                 ól   — t        j                  | j                  j                  | j                  g«      S r¦   )r	   rŠ   r«   rn   r®   s      r   rz   z"EchoTableStreamFlightServer.do_getü   s0   € Ü×%Ñ%Ø×Ñ×$Ñ$Ø×ÑÐó!ð 	!r   c                 ó   — g S r¦   r!   r¼   s     r   r½   z(EchoTableStreamFlightServer.list_actions  r¾   r   c                 óŠ   — |j                   dk(  r/|j                  «       |j                  «       j                  d«      gS t        ‚rÀ   rÃ   rÈ   s      r   rÊ   z%EchoTableStreamFlightServer.do_action  rË   r   NrÌ   r!   r   r   rÎ   rÎ   ù   s   „ Ù6ò!ò
ó"r   rÎ   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú'EchoRecordBatchReaderStreamFlightServerzCAn echo server that streams the whole table as a RecordBatchReader.c                 óˆ   — t        j                  | j                  j                  | j                  j	                  «       g«      S r¦   )r	   rŠ   r«   rn   Ú	to_readerr®   s      r   rz   z.EchoRecordBatchReaderStreamFlightServer.do_get  s9   € Ü×%Ñ%Ø×Ñ×$Ñ$Ø×Ñ×(Ñ(Ó*Ð+ó-ð 	-r   c                 ó   — g S r¦   r!   r¼   s     r   r½   z4EchoRecordBatchReaderStreamFlightServer.list_actions  r¾   r   c                 óŠ   — |j                   dk(  r/|j                  «       |j                  «       j                  d«      gS t        ‚rÀ   rÃ   rÈ   s      r   rÊ   z1EchoRecordBatchReaderStreamFlightServer.do_action  rË   r   NrÌ   r!   r   r   rÓ   rÓ   
  s   „ ÙMò-ò
ó"r   rÓ   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚGetInfoFlightServerz)A Flight server that tests GetFlightInfo.c                 óŠ  — t        j                  t        j                  dt        j                  «       fg«      |t        j
                  ddg«      t        j
                  dt         j                  j                  dd«      gt        j                  d«      j                  t        j                  d«      «      d«      gd	d
dd«      S )NrY   r   úgrpc://testÚ	localhosté�  ú2023-04-05T12:34:56.789012345Únszendpoint app metadatarJ   é*   Tzinfo app metadata)r	   rm   r=   rn   Úint32ÚFlightEndpointÚLocationÚfor_grpc_tcpÚscalarÚcastÚ	timestamp©rf   rr   r™   s      r   Úget_flight_infoz#GetInfoFlightServer.get_flight_info  s¤   € Ü× Ñ Ü�I‰I˜œRŸX™X›ZÐ(Ð)Ó*Øä×%Ñ% c¨M¨?Ó;Ü×%Ñ%ØÜ—_‘_×1Ñ1°+¸tÓDÐEÜ—I‘IÐ=Ó>×CÑCÄBÇLÁLÐQUÓDVÓWØ+ó	ðð ØØØó
ð 	
r   c                 ód   — | j                  ||«      }t        j                  |j                  «      S r¦   )ré   r	   ÚSchemaResultrn   )rf   rr   r™   Úinfos       r   Ú
get_schemazGetInfoFlightServer.get_schema1  s)   € Ø×#Ñ# G¨ZÓ8ˆÜ×"Ñ" 4§;¡;Ó/Ð/r   N)r|   r}   r~   r   ré   rí   r!   r   r   rÙ   rÙ     s   „ Ù3ò
ó&0r   rÙ   c                   ó&   — e Zd ZdZed„ «       Zd„ Zy)ÚListActionsFlightServerú'A Flight server that tests ListActions.c                 ó4   — ddt        j                  dd«      gS )N)úaction-1Údescription)zaction-2Ú zaction-3zmore detail©r	   Ú
ActionType)Úclss    r   Úexpected_actionsz(ListActionsFlightServer.expected_actions9  s$   € ð (ØÜ×Ñ˜j¨-Ó8ð
ð 	
r   c              #   ó@   K  — | j                  «       E d {  –—†  y 7 Œ­wr¦   )rø   r¼   s     r   r½   z$ListActionsFlightServer.list_actionsA  s   è ø€ Ø×(Ñ(Ó*×*Ò*ús   ‚–—N)r|   r}   r~   r   Úclassmethodrø   r½   r!   r   r   rï   rï   6  s   „ Ù1àñ
ó ð
ó+r   rï   c                   ó   — e Zd ZdZd„ Zy)ÚListActionsErrorFlightServerrð   c              #   ó   K  — d–— d–— y ­w)N)rò   rô   rD   r!   r¼   s     r   r½   z)ListActionsErrorFlightServer.list_actionsH  s   è ø€ ØÒØ‹ùs   ‚
N)r|   r}   r~   r   r½   r!   r   r   rü   rü   E  s
   „ Ù1ór   rü   c                   ó0   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zˆ xZS )ÚCheckTicketFlightServerzDA Flight server that compares the given ticket to an expected value.c                 ó4   •— t        ‰| �  |fi |¤Ž || _        y r¦   )rb   rc   Úexpected_ticket)rf   r  rg   rh   ri   s       €r   rc   z CheckTicketFlightServer.__init__P  s   ø€ Ü‰Ñ˜Ñ, VÒ,Ø.ˆÕr   c                 óþ   — | j                   |j                  k(  sJ ‚t        j                  g d¢t        j                  «       ¬«      g}t        j
                  j                  |dg¬«      }t        j                  |«      S )Nr6   rG   rY   r;   )	r  rw   r=   r>   rá   r?   r@   r	   rx   )rf   rr   rw   Údata1ry   s        r   rz   zCheckTicketFlightServer.do_getT  s`   € Ø×#Ñ# v§}¡}Ò4Ð4Ð4Ü—‘Ò-´B·H±H³JÔ?Ð@ˆÜ—‘×$Ñ$ U°3°%Ð$Ó8ˆÜ×'Ñ'¨Ó.Ð.r   c                 ó.   — |j                  «       | _        y r¦   )r°   r«   )rf   rr   r™   rš   s       r   r¡   zCheckTicketFlightServer.do_putZ  s   € Ø"ŸO™OÓ-ˆÕr   r¦   )r|   r}   r~   r   rc   rz   r¡   r€   r�   s   @r   rÿ   rÿ   M  s   ø„ ÙNõ/ò/ö.r   rÿ   c                   ó^   — e Zd ZdZ ej
                  d ej                  «       fg«      Zd„ Zy)ÚInvalidStreamFlightServerzEA Flight server that tries to return messages with differing schemas.rY   c                 óê  — t        j                  g d¢t        j                  «       ¬«      g}t        j                  g d¢t        j                  «       ¬«      g}|j                  |j                  k7  sJ ‚t         j
                  j                  |dg¬«      }t         j
                  j                  |dg¬«      }|j                  | j                  k(  sJ ‚t        j                  | j                  ||g«      S )Nr6   rG   )g      $Àg      Àg        ç      @g      $@rY   r;   )
r=   r>   rá   Úfloat64rH   r?   r@   rn   r	   rŠ   )rf   rr   rw   r  Údata2Útable1Útable2s          r   rz   z InvalidStreamFlightServer.do_getc  s´   € Ü—‘Ò-´B·H±H³JÔ?Ð@ˆÜ—‘Ò7¼b¿j¹j»lÔKÐLˆØ�z‰z˜UŸZ™ZÒ'Ð'Ð'Ü—‘×%Ñ% e°C°5Ð%Ó9ˆÜ—‘×%Ñ% e°C°5Ð%Ó9ˆØ�}‰} §¡Ò+Ð+Ð+ä×%Ñ% d§k¡k°F¸FÐ3CÓDÐDr   N©r|   r}   r~   r   r=   rn   rá   rz   r!   r   r   r  r  ^  s+   „ ÙOàˆR�Y‰Y˜˜h˜bŸh™h›jÐ)Ð*Ó+€FóEr   r  c                   ó^   — e Zd ZdZ ej
                  d ej                  «       fg«      Zd„ Zy)ÚNeverSendsDataFlightServerz0A Flight server that never actually yields data.rY   c                 óÆ  — |j                   dk(  rˆ| j                  j                  «       | j                  j                  «       t        j                  j                  t        d«      g| j                  ¬«      g}t        j                  | j                  |«      S t        j                  | j                  t        j                  | j                  j                  «       «      «      S )Nó
   yield_datar8   ©rn   )rw   rn   Úempty_tabler=   r’   r@   Úranger	   rŠ   Ú	itertoolsÚrepeat)rf   rr   rw   rA   s       r   rz   z!NeverSendsDataFlightServer.do_gets  s§   € Ø�=‰=˜MÒ)ð —‘×'Ñ'Ó)Ø—‘×'Ñ'Ó)Ü—‘×*Ñ*¬E°!«H¨:¸d¿k¹kÐ*ÓJðˆDô
 ×)Ñ)¨$¯+©+°tÓ<Ð<Ü×%Ñ%Ø�K‰Kœ×)Ñ)¨$¯+©+×*AÑ*AÓ*CÓDóFð 	Fr   Nr  r!   r   r   r  r  n  s+   „ Ù:àˆR�Y‰Y˜˜h˜bŸh™h›jÐ)Ð*Ó+€FóFr   r  c                   ó,   — e Zd ZdZd„ Zd„ Zed„ «       Zy)ÚSlowFlightServerz;A Flight server that delays its responses to test timeouts.c                 óš   — t        j                  t        j                  dt        j                  «       fg«      | j                  «       «      S )NrY   )r	   rŠ   r=   rn   rá   Úslow_streamr®   s      r   rz   zSlowFlightServer.do_get„  s:   € Ü×%Ñ%¤b§i¡i°#´r·x±x³zÐ1BÐ0CÓ&DØ&*×&6Ñ&6Ó&8ó:ð 	:r   c                 ó0   — t        j                  d«       g S ©Nç      à?)ÚtimeÚsleeprÈ   s      r   rÊ   zSlowFlightServer.do_actionˆ  s   € Ü�
‰
�3ŒØˆ	r   c               #   ó  K  — t        j                  g d¢t        j                  «       ¬«      g} t         j                  j	                  | dg¬«      –— t        j                  d«       t         j                  j	                  | dg¬«      –— y ­w)Nr6   rG   rY   r;   r9   )r=   r>   rá   r?   r@   r  r  )r  s    r   r  zSlowFlightServer.slow_streamŒ  se   è ø€ ä—‘Ò-´B·H±H³JÔ?Ð@ˆÜ�h‰h×"Ñ" 5°°Ð"Ó6Ò6ô 	�
‰
�2ŒÜ�h‰h×"Ñ" 5°°Ð"Ó6Ó6ùs   ‚BBN)r|   r}   r~   r   rz   rÊ   r§   r  r!   r   r   r  r  �  s#   „ ÙEò:òð ñ7ó ñ7r   r  c                   ó2   — e Zd ZdZed„ «       Zd„ Zd„ Zd„ Zy)ÚErrorFlightServerz9A Flight server that uses all the Flight-specific errors.c            	      óÐ   — t         j                  t         j                  t         j                  t         j                  t         j
                  t        t        j                  t        dœS )N)ÚinternalÚtimedoutÚcancelÚunauthenticatedÚunauthorizedÚnotimplementedÚinvalidr0   )
r	   ÚFlightInternalErrorÚFlightTimedOutErrorÚFlightCancelledErrorÚFlightUnauthenticatedErrorÚFlightUnauthorizedErrorrÇ   r=   ÚArrowInvalidÚKeyErrorr!   r   r   Úerror_caseszErrorFlightServer.error_cases™  sH   € ô ×2Ñ2Ü×2Ñ2Ü×1Ñ1Ü%×@Ñ@Ü"×:Ñ:Ü1Ü—‘Üñ	
ð 		
r   c                 óÊ   — t         j                  «       }|j                  |v r ||j                     d«      ‚|j                  dk(  rd}t        j                  d|«      ‚t
        ‚)NrD   Úprotobufó   this is an error message)r"  r2  rH   r	   r/  rÇ   )rf   rr   rÉ   r2  Úerr_msgs        r   rÊ   zErrorFlightServer.do_action¦  s\   € Ü'×3Ñ3Ó5ˆØ�;‰;˜+Ñ%Ø*�+˜fŸk™kÑ*¨5Ó1Ð1Ø�[‰[˜JÒ&Ø1ˆGÜ×0Ñ0°¸Ó@Ð@Ü!Ð!r   c              #   óÆ   K  — t        j                  t        j                  g «      t         j                  j                  d«      g «      –— t        j                  d«      ‚­w)Nrk   rD   )r	   rm   r=   rn   ro   rp   r+  rq   s      r   rt   zErrorFlightServer.list_flights¯  sN   è ø€ Ü×ÑÜ�I‰I�b‹MÜ×#Ñ#×,Ñ,¨VÓ4Øó
ò 	
ô
 ×(Ñ(¨Ó/Ð/ùs   ‚AA!c                 óº  — |j                   dk(  rt        j                  d«      ‚|j                   dk(  rt        j                  d«      ‚|j                   dk(  rt        j                  d«      ‚|j                   dk(  rt        j
                  d«      ‚|j                   dk(  rt        j                  d«      ‚|j                   dk(  rd}t        j                  d|«      ‚y )	Ns   internalrD   s   timedouts   cancels   unauthenticateds   unauthorizeds   protobufr5  )Úcommandr	   r+  r,  r-  r.  r/  )rf   rr   r™   rš   r›   r6  s         r   r¡   zErrorFlightServer.do_put·  sÉ   € Ø×Ñ Ò,Ü×,Ñ,¨UÓ3Ð3Ø×Ñ ;Ò.Ü×,Ñ,¨UÓ3Ð3Ø×Ñ 9Ò,Ü×-Ñ-¨eÓ4Ð4Ø×ÑÐ#5Ò5Ü×3Ñ3°EÓ:Ð:Ø×Ñ ?Ò2Ü×0Ñ0°Ó7Ð7Ø×Ñ ;Ò.Ø1ˆGÜ×0Ñ0°¸Ó@Ð@ð /r   N)	r|   r}   r~   r   r§   r2  rÊ   rt   r¡   r!   r   r   r"  r"  –  s'   „ ÙCàñ

ó ð

ò"ò0óAr   r"  c                   óB   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )	ÚExchangeFlightServerz A server for testing DoExchange.c                 ó2   •— t        ‰| �  di |¤Ž || _        y r…   r†   r‡   s      €r   rc   zExchangeFlightServer.__init__Ê  rˆ   r   c                 ó  — |j                   j                  dk(  sJ ‚|j                  t        j                  j
                  k7  rt        j                  d«      ‚|j                  dk(  r| j                  |||«      S |j                  dk(  r| j                  |||«      S |j                  dk(  r| j                  |||«      S |j                  dk(  r| j                  |||«      S t        j                  d|j                  › �«      ‚)Nr   z!Must provide a command descriptoró   echoó   getó   putó	   transformzUnknown command: )r�   r�   Údescriptor_typer	   ÚDescriptorTypeÚCMDr=   r0  r9  Úexchange_echoÚexchange_do_getÚexchange_do_putÚexchange_transformr±   s        r   r´   z ExchangeFlightServer.do_exchangeÎ  sò   € Ø�|‰|×(Ñ(¨AÒ-Ð-Ð-Ø×%Ñ%¬×)>Ñ)>×)BÑ)BÒBÜ—/‘/Ð"EÓFÐFØ×Ñ 7Ò*Ø×%Ñ% g¨v°vÓ>Ð>Ø×Ñ 6Ò)Ø×'Ñ'¨°¸Ó@Ð@Ø×Ñ 6Ò)Ø×'Ñ'¨°¸Ó@Ð@Ø×Ñ <Ò/Ø×*Ñ*¨7°F¸FÓCÐCä—/‘/Ø# J×$6Ñ$6Ð#7Ð8ó:ð :r   c                 óÜ   — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      }|j                  |j                  «       |j                  |«       y)úEmulate DoGet with DoExchange.r   é (  rY   r;   N)r=   r?   r@   r>   r  Úbeginrn   Úwrite_table)rf   rr   rš   r›   rA   s        r   rF  z$ExchangeFlightServer.exchange_do_getÞ  sX   € ä�x‰x×#Ñ#Ü�H‰H”U˜1˜iÓ(Ó)ð%
à�ð $ó ˆð 	�‰�T—[‘[Ô!Ø×Ñ˜4Õ r   c                 ó   — d}|D ]C  }|j                   st        j                  d«      ‚|j                  j                  dk7  sJ ‚|dz  }ŒE |j                  j
                  |k(  sJ ‚|j                  t        |«      j                  d«      «       y)úEmulate DoPut with DoExchange.r   zAll chunks must have data.rJ   rÂ   N)	rA   r=   r0  r�   r�   r˜   Úwrite_metadataÚstrrÆ   )rf   rr   rš   r›   Únum_batchesr³   s         r   rG  z$ExchangeFlightServer.exchange_do_putæ  s‡   € àˆØò 	ˆEØ—:’:Ü—o‘oÐ&BÓCÐCØ—<‘<×,Ñ,°Ò1Ð1Ð1Ø˜1Ñ‰Kð		ð
 �|‰|×.Ñ.°+Ò=Ð=Ð=Ø×Ñœc +Ó.×5Ñ5°gÓ>Õ?r   c                 ó.  — |j                   j                  dk(  sJ ‚d}|D ]ó  }|s?|j                  r3|j                  |j                  j                  | j
                  ¬«       d}|j                  r3|j                  r'|j                  |j                  |j                  «       Œƒ|j                  r|j                  |j                  «       Œ«|j                  r7|j                   j                  dk7  sJ ‚|j                  |j                  «       ŒîJ d«       ‚ y)zRun a simple echo server.r   Frv   TzShould not happenN)
r�   r�   rA   rL  rn   re   Úapp_metadataÚwrite_with_metadatarP  Úwrite_batch)rf   rr   rš   r›   Ústartedr³   s         r   rE  z"ExchangeFlightServer.exchange_echoñ  sÜ   € à�|‰|×(Ñ(¨AÒ-Ð-Ð-ØˆØò 	2ˆEÙ˜uŸzšzØ—‘˜UŸZ™Z×.Ñ.¸¿¹�ÔEØ�Ø×!Ò! e§j¢jØ×*Ñ*¨5¯:©:°u×7IÑ7IÕJØ×#Ò#Ø×%Ñ% e×&8Ñ&8Õ9Ø—’Ø—|‘|×0Ñ0°AÒ5Ð5Ð5Ø×"Ñ" 5§:¡:Õ.à1Ð1Ó1�uñ	2r   c                 ó”  — |j                   j                  dk(  sJ ‚|j                  D ]L  }t        j                  j                  |j                  «      rŒ-t        j                  dt        |«      z   «      ‚ |j                  «       }|j                   j                  dk7  sJ ‚dg|j                  z  }|D ]0  }t        |«      D ]   \  }}	||xx   |	j                  «       z  cc<   Œ" Œ2 t        j                  j                  t        j                  |«      gdg¬«      }
|j!                  |
j                  «       |j#                  |
«       y)zSum rows in an uploaded table.r   zInvalid field: Úsumr;   N)r�   r�   rn   r=   ÚtypesÚ
is_integerrH   r0  Úreprr°   Únum_rowsr£   Úas_pyr?   r@   r>   rL  rM  )rf   rr   rš   r›   Úfieldry   ÚsumsÚcolumnÚrowÚvalueÚresults              r   rH  z'ExchangeFlightServer.exchange_transform  s  € à�|‰|×(Ñ(¨AÒ-Ð-Ð-Ø—]‘]ò 	GˆEÜ—8‘8×&Ñ& u§z¡zÕ2Ü—o‘oÐ&7¼$¸u»+Ñ&EÓFÐFð	Gð —‘Ó!ˆØ�|‰|×(Ñ(¨AÒ-Ð-Ð-Øˆs�U—^‘^Ñ#ˆØò 	+ˆFÜ'¨Ó/ò +‘
��UØ�S“	˜UŸ[™[›]Ñ*”	ñ+ð	+ô —‘×%Ñ%¤r§x¡x°£~Ð&6¸u¸gÐ%ÓFˆØ�‰�V—]‘]Ô#Ø×Ñ˜6Õ"r   r¦   )r|   r}   r~   r   rc   r´   rF  rG  rE  rH  r€   r�   s   @r   r;  r;  Ç  s%   ø„ Ù*õò:ò !ò	@ò2ö$#r   r;  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚHttpBasicServerAuthHandlerú7An example implementation of HTTP basic authentication.c                 ó0   •— t         ‰| �  «        || _        y r¦   ©rb   rc   Úcreds©rf   rj  ri   s     €r   rc   z#HttpBasicServerAuthHandler.__init__  ó   ø€ Ü‰ÑÔØˆ�
r   c                 óz  — |j                  «       }t        j                  j                  |«      }|j                  | j
                  vrt        j                  d«      ‚| j
                  |j                     |j                  k7  rt        j                  d«      ‚|j                  t        |j                  «      «       y )Núunknown userzwrong password)
r&   r	   Ú	BasicAuthÚdeserializeÚusernamerj  r.  Úpasswordr–   r   )rf   ÚoutgoingÚincomingrŸ   Úauths        r   Úauthenticatez'HttpBasicServerAuthHandler.authenticate  s„   € Ø�m‰m‹oˆÜ×Ñ×+Ñ+¨CÓ0ˆØ�=‰= §
¡
Ñ*Ü×3Ñ3°NÓCÐCØ�:‰:�d—m‘mÑ$¨¯©Ò5Ü×3Ñ3Ð4DÓEÐEØ�‰”w˜tŸ}™}Ó-Õ.r   c                 óz   — |st        j                  d«      ‚|| j                  vrt        j                  d«      ‚|S )Nztoken not providedrn  )r	   r.  rj  ©rf   Útokens     r   Úis_validz#HttpBasicServerAuthHandler.is_valid$  s9   € ÙÜ×3Ñ3Ð4HÓIÐIØ˜Ÿ
™
Ñ"Ü×3Ñ3°NÓCÐCØˆr   ©r|   r}   r~   r   rc   rv  rz  r€   r�   s   @r   rf  rf    s   ø„ ÙAôò/ör   rf  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚHttpBasicClientAuthHandlerrg  c                 óf   •— t         ‰| �  «        t        j                  ||«      | _        d | _        y r¦   )rb   rc   r	   ro  Ú
basic_authry  ©rf   rq  rr  ri   s      €r   rc   z#HttpBasicClientAuthHandler.__init__/  s)   ø€ Ü‰ÑÔÜ ×*Ñ*¨8°XÓ>ˆŒØˆ�
r   c                 ó„   — | j                   j                  «       }|j                  |«       |j                  «       | _        y r¦   )r  Ú	serializer–   r&   ry  )rf   rs  rt  ru  s       r   rv  z'HttpBasicClientAuthHandler.authenticate4  s-   € Ø�‰×(Ñ(Ó*ˆØ�‰�tÔØ—]‘]“_ˆ�
r   c                 ó   — | j                   S r¦   ©ry  ©rf   s    r   Ú	get_tokenz$HttpBasicClientAuthHandler.get_token9  ó   € Ø�z‰zÐr   ©r|   r}   r~   r   rc   rv  r†  r€   r�   s   @r   r}  r}  ,  s   ø„ ÙAôò
%ö
r   r}  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚTokenServerAuthHandlerú:An example implementation of authentication via handshake.c                 ó0   •— t         ‰| �  «        || _        y r¦   ri  rk  s     €r   rc   zTokenServerAuthHandler.__init__@  rl  r   c                 óü   — |j                  «       }|j                  «       }|| j                  v r:| j                  |   |k(  r(|j                  t        j                  d|z   «      «       y t        j                  d«      ‚)Nó   secret:zinvalid username/password)r&   rj  r–   Úbase64Ú	b64encoder	   r.  )rf   rs  rt  rq  rr  s        r   rv  z#TokenServerAuthHandler.authenticateD  sf   € Ø—=‘=“?ˆØ—=‘=“?ˆØ�t—z‘zÑ! d§j¡j°Ñ&:¸hÒ&FØ�N‰Nœ6×+Ñ+¨J¸Ñ,AÓBÕCä×3Ñ3Ø+ó-ð -r   c                 ó‚   — t        j                  |«      }|j                  d«      st        j                  d«      ‚|dd  S )NrŽ  zinvalid tokené   )r�  Ú	b64decodeÚ
startswithr	   r.  rx  s     r   rz  zTokenServerAuthHandler.is_validM  s=   € Ü× Ñ  Ó'ˆØ×Ñ 
Ô+Ü×3Ñ3°OÓDÐDØ�Q�RˆyÐr   r{  r�   s   @r   rŠ  rŠ  =  s   ø„ ÙDôò-ör   rŠ  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚTokenClientAuthHandlerr‹  c                 óL   •— t         ‰| �  «        || _        || _        d| _        y )Nr   )rb   rc   rq  rr  ry  r€  s      €r   rc   zTokenClientAuthHandler.__init__W  s#   ø€ Ü‰ÑÔØ ˆŒØ ˆŒØˆ�
r   c                 óš   — |j                  | j                  «       |j                  | j                  «       |j                  «       | _        y r¦   )r–   rq  rr  r&   ry  ©rf   rs  rt  s      r   rv  z#TokenClientAuthHandler.authenticate]  s/   € Ø�‰�t—}‘}Ô%Ø�‰�t—}‘}Ô%Ø—]‘]“_ˆ�
r   c                 ó   — | j                   S r¦   r„  r…  s    r   r†  z TokenClientAuthHandler.get_tokenb  r‡  r   rˆ  r�   s   @r   r–  r–  T  s   ø„ ÙDôò%ö
r   r–  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚNoopAuthHandlerzA no-op auth handler.c                  ó   — y)zDo nothing.Nr!   r™  s      r   rv  zNoopAuthHandler.authenticatei  s   � r   c                  ó   — y)zV
        Returning an empty string.
        Returning None causes Type error.
        rô   r!   rx  s     r   rz  zNoopAuthHandler.is_validl  s   € ð
 r   N)r|   r}   r~   r   rv  rz  r!   r   r   rœ  rœ  f  s   „ Ùòór   rœ  c                 óz   — | D ]6  }|j                  «       |j                  «       k(  sŒ%| j                  |«      c S  y)zcLookup the value of given key in the given headers.
       The key lookup is case-insensitive.
    N)Úlowerr   )ÚheadersÚ
lookup_keyr0   s      r   Úcase_insensitive_header_lookupr£  t  s9   € ð ò $ˆØ�9‰9‹;˜*×*Ñ*Ó,Ó,Ø—;‘;˜sÓ#Ò#ñ$r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú!ClientHeaderAuthMiddlewareFactoryz@ClientMiddlewareFactory that creates ClientAuthHeaderMiddleware.c                 ó   — g | _         y r¦   ©Úcall_credentialr…  s    r   rc   z*ClientHeaderAuthMiddlewareFactory.__init__€  s
   € Ø!ˆÕr   c                 ó   — t        | «      S r¦   )ÚClientHeaderAuthMiddleware©rf   rì   s     r   Ú
start_callz,ClientHeaderAuthMiddlewareFactory.start_callƒ  s   € Ü)¨$Ó/Ð/r   c                 ó   — || _         y r¦   r§  )rf   r¨  s     r   Úset_call_credentialz5ClientHeaderAuthMiddlewareFactory.set_call_credential†  s
   € Ø.ˆÕr   N)r|   r}   r~   r   rc   r¬  r®  r!   r   r   r¥  r¥  }  s   „ ÙJò"ò0ó/r   r¥  c                   ó   — e Zd ZdZd„ Zd„ Zy)rª  aÅ  
    ClientMiddleware that extracts the authorization header
    from the server.

    This is an example of a ClientMiddleware that can extract
    the bearer token authorization header from a HTTP header
    authentication enabled server.

    Parameters
    ----------
    factory : ClientHeaderAuthMiddlewareFactory
        This factory is used to set call credentials if an
        authorization header is found in the headers from the server.
    c                 ó   — || _         y r¦   ©Úfactory©rf   r²  s     r   rc   z#ClientHeaderAuthMiddleware.__init__š  ó	   € Øˆ�r   c                 ó€   — t        |d«      }|r0| j                  j                  d|d   j                  d«      g«       y y )NÚAuthorizationó   authorizationr   rÂ   )r£  r²  r®  rÆ   )rf   r¡  Úauth_headers      r   Úreceived_headersz+ClientHeaderAuthMiddleware.received_headers�  sB   € Ü4°W¸oÓNˆÙØ�L‰L×,Ñ,Ø Ø˜A‘×%Ñ% gÓ.ð.0õ 1ð r   N)r|   r}   r~   r   rc   r¹  r!   r   r   rª  rª  Š  s   „ ñòó1r   rª  c                   ó   — e Zd ZdZd„ Zy)Ú!HeaderAuthServerMiddlewareFactoryz)Validates incoming username and password.c                 ó¼  — t        |d«      }|d   j                  d«      }d}d}|d   dk(  rjt        j                  |d   «      }|j	                  d«      j                  d	«      }|d   d
k(  r|d   dk(  st        j                  |«      ‚d}t        |«      S |d   dk(  r|d   }|dk(  s*t        j                  |«      ‚t        j                  |«      ‚t        |«      S )Nr¶  r   ú rô   zInvalid credentialsÚBasicrJ   rÂ   ú:Útestrr  Ú	token1234ÚBearer)r£  Úsplitr�  r“  Údecoder	   r.  ÚHeaderAuthServerMiddleware)	rf   rì   r¡  r¸  Úvaluesry  Úerror_messageÚdecodedÚpairs	            r   r¬  z,HeaderAuthServerMiddlewareFactory.start_call¨  sñ   € Ü4ØØó
ˆð ˜Q‘×%Ñ% cÓ*ˆØˆØ-ˆà�!‰9˜ÒÜ×&Ñ& v¨a¡yÓ1ˆGØ—>‘> 'Ó*×0Ñ0°Ó5ˆDØ˜‘G˜vÒ%¨$¨q©'°ZÒ*?Ü×7Ñ7¸ÓFÐFØˆEô *¨%Ó0Ð0ð �A‰Y˜(Ò"Ø˜1‘IˆEØ˜KÒ'Ü×7Ñ7¸ÓFÐFä×3Ñ3°MÓBÐBä)¨%Ó0Ð0r   N©r|   r}   r~   r   r¬  r!   r   r   r»  r»  ¥  s
   „ Ù3ó1r   r»  c                   ó   — e Zd ZdZd„ Zd„ Zy)rÅ  zBA ServerMiddleware that transports incoming username and password.c                 ó   — || _         y r¦   r„  rx  s     r   rc   z#HeaderAuthServerMiddleware.__init__Ä  s	   € Øˆ�
r   c                 ó$   — dd| j                   z   iS )NÚauthorizationzBearer r„  r…  s    r   Úsending_headersz*HeaderAuthServerMiddleware.sending_headersÇ  s   € Ø ¨T¯Z©ZÑ!7Ð8Ð8r   N©r|   r}   r~   r   rc   rÏ  r!   r   r   rÅ  rÅ  Á  s   „ ÙLòó9r   rÅ  c                   ó   — e Zd ZdZd„ Zy)ÚHeaderAuthFlightServerz<A Flight server that tests with basic token authentication. c                 óÒ   — |j                  d«      }|r@t        |j                  «       d«      }|j                  d«      }|d   j	                  d«      gS t        j                  d«      ‚)Nru  r¶  r½  rJ   rÂ   zNo token auth middleware found.)Úget_middlewarer£  rÏ  rÃ  rÆ   r	   r.  )rf   rr   rÉ   Ú
middlewarer¸  rÆ  s         r   rÊ   z HeaderAuthFlightServer.do_actionÎ  sk   € Ø×+Ñ+¨FÓ3ˆ
ÙÜ8Ø×*Ñ*Ó,¨oó?ˆKà ×&Ñ& sÓ+ˆFØ˜1‘I×$Ñ$ WÓ-Ð.Ð.Ü×/Ñ/Ø-ó/ð 	/r   N©r|   r}   r~   r   rÊ   r!   r   r   rÒ  rÒ  Ë  s
   „ ÙFó/r   rÒ  c                   ó   — e Zd ZdZd„ Zy)Ú'ArbitraryHeadersServerMiddlewareFactoryz<A ServerMiddlewareFactory that transports arbitrary headers.c                 ó   — t        |«      S r¦   )Ú ArbitraryHeadersServerMiddleware©rf   rì   r¡  s      r   r¬  z2ArbitraryHeadersServerMiddlewareFactory.start_callÜ  s   € Ü/°Ó8Ð8r   NrÊ  r!   r   r   rØ  rØ  Ù  s
   „ ÙFó9r   rØ  c                   ó   — e Zd ZdZd„ Zd„ Zy)rÚ  z5A ServerMiddleware that transports arbitrary headers.c                 ó   — || _         y r¦   ©rt  )rf   rt  s     r   rc   z)ArbitraryHeadersServerMiddleware.__init__ã  s	   € Ø ˆ�r   c                 ó   — | j                   S r¦   rÞ  r…  s    r   rÏ  z0ArbitraryHeadersServerMiddleware.sending_headersæ  ó   € Ø�}‰}Ðr   NrÐ  r!   r   r   rÚ  rÚ  à  s   „ Ù?ò!ór   rÚ  c                   ó   — e Zd ZdZd„ Zy)ÚArbitraryHeadersFlightServerz6A Flight server that tests multiple arbitrary headers.c                 óú   — |j                  d«      }|rT|j                  «       }t        |d«      }t        |d«      }|d   j                  d«      }|d   j                  d«      }||gS t	        j
                  d«      ‚)Núarbitrary-headersztest-header-1ztest-header-2r   rÂ   zNo headers middleware found)rÔ  rÏ  r£  rÆ   r	   ÚFlightServerError)	rf   rr   rÉ   rÕ  r¡  Úheader_1Úheader_2Úvalue1Úvalue2s	            r   rÊ   z&ArbitraryHeadersFlightServer.do_actioní  s�   € Ø×+Ñ+Ð,?Ó@ˆ
ÙØ ×0Ñ0Ó2ˆGÜ5ØØóˆHô 6ØØóˆHð ˜a‘[×'Ñ'¨Ó0ˆFØ˜a‘[×'Ñ'¨Ó0ˆFØ˜FÐ#Ð#Ü×&Ñ&Ð'DÓEÐEr   NrÖ  r!   r   r   râ  râ  ê  s   „ Ù@óFr   râ  c                   ó   — e Zd ZdZd„ Zy)ÚHeaderServerMiddlewarez/Expose a per-call value to the RPC method body.c                 ó   — || _         y r¦   )Úspecial_value)rf   rí  s     r   rc   zHeaderServerMiddleware.__init__  s
   € Ø*ˆÕr   N)r|   r}   r~   r   rc   r!   r   r   rë  rë  ÿ  s
   „ Ù9ó+r   rë  c                   ó   — e Zd ZdZd„ Zy)ÚHeaderServerMiddlewareFactoryz:Expose a per-call hard-coded value to the RPC method body.c                 ó   — t        d«      S )Nzright value)rë  rÛ  s      r   r¬  z(HeaderServerMiddlewareFactory.start_call	  s   € Ü% mÓ4Ð4r   NrÊ  r!   r   r   rï  rï    s
   „ ÙDó5r   rï  c                   ó   — e Zd ZdZd„ Zy)ÚHeaderFlightServerz(Echo back the per-call hard-coded value.c                 ód   — |j                  d«      }|r|j                  j                  «       gS dgS )NrÀ  r   )rÔ  rí  rÆ   )rf   rr   rÉ   rÕ  s       r   rÊ   zHeaderFlightServer.do_action  s4   € Ø×+Ñ+¨FÓ3ˆ
ÙØ×,Ñ,×3Ñ3Ó5Ð6Ð6Øˆuˆr   NrÖ  r!   r   r   rò  rò    s
   „ Ù2ór   rò  c                   ó   — e Zd ZdZd„ Zy)ÚMultiHeaderFlightServerú8Test sending/receiving multiple (binary-valued) headers.c                 ór   — |j                  d«      }t        |j                  «      j                  d«      }|gS )NrÀ  rÂ   )rÔ  r\  Úclient_headersrÆ   )rf   rr   rÉ   rÕ  r¡  s        r   rÊ   z!MultiHeaderFlightServer.do_action  s5   € Ø×+Ñ+¨FÓ3ˆ
Ü�z×0Ñ0Ó1×8Ñ8¸ÓAˆØˆyÐr   NrÖ  r!   r   r   rõ  rõ    s
   „ ÙBór   rõ  c                   ó   — e Zd ZdZd„ Zy)Ú$SelectiveAuthServerMiddlewareFactoryz1Deny access to certain methods based on a header.c                 óö   — |j                   t        j                  j                  k(  ry |j	                  d«      }|st        j
                  d«      ‚|d   }|dk7  rt        j
                  d«      ‚t        |«      S )Núx-auth-tokenzNo tokenr   rr  zInvalid token)Úmethodr	   ÚFlightMethodÚLIST_ACTIONSr   r.  rë  )rf   rì   r¡  ry  s       r   r¬  z/SelectiveAuthServerMiddlewareFactory.start_call#  sl   € Ø�;‰;œ&×-Ñ-×:Ñ:Ò:àà—‘˜NÓ+ˆÙÜ×3Ñ3°JÓ?Ð?à�a‘ˆØ�JÒÜ×3Ñ3°OÓDÐDä% eÓ,Ð,r   NrÊ  r!   r   r   rú  rú     s
   „ Ù;ó-r   rú  c                   ó   — e Zd Zd„ Zy)Ú$SelectiveAuthClientMiddlewareFactoryc                 ó   — t        «       S r¦   )ÚSelectiveAuthClientMiddlewarer«  s     r   r¬  z/SelectiveAuthClientMiddlewareFactory.start_call4  s   € Ü,Ó.Ð.r   N)r|   r}   r~   r¬  r!   r   r   r  r  3  s   „ ó/r   r  c                   ó   — e Zd Zd„ Zy)r  c                 ó
   — ddiS )Nrü  rr  r!   r…  s    r   rÏ  z-SelectiveAuthClientMiddleware.sending_headers9  s   € à˜Jð
ð 	
r   N)r|   r}   r~   rÏ  r!   r   r   r  r  8  s   „ ó
r   r  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú RecordingServerMiddlewareFactoryú Record what methods were called.c                 ó0   •— t         ‰| �  «        g | _        y r¦   ©rb   rc   Úmethods©rf   ri   s    €r   rc   z)RecordingServerMiddlewareFactory.__init__B  ó   ø€ Ü‰ÑÔØˆ�r   c                 óN   — | j                   j                  |j                  «       y r¦   ©r  Úappendrý  rÛ  s      r   r¬  z+RecordingServerMiddlewareFactory.start_callF  ó   € Ø�‰×Ñ˜DŸK™KÔ(Ør   ©r|   r}   r~   r   rc   r¬  r€   r�   s   @r   r  r  ?  ó   ø„ Ù*ôör   r  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú RecordingClientMiddlewareFactoryr  c                 ó0   •— t         ‰| �  «        g | _        y r¦   r
  r  s    €r   rc   z)RecordingClientMiddlewareFactory.__init__N  r  r   c                 óN   — | j                   j                  |j                  «       y r¦   r  r«  s     r   r¬  z+RecordingClientMiddlewareFactory.start_callR  r  r   r  r�   s   @r   r  r  K  r  r   r  c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú"MultiHeaderClientMiddlewareFactoryrö  c                 ó   — i | _         y r¦   )Úlast_headersr…  s    r   rc   z+MultiHeaderClientMiddlewareFactory.__init__Z  s   € ð ˆÕr   c                 ó   — t        | «      S r¦   )ÚMultiHeaderClientMiddlewarer«  s     r   r¬  z-MultiHeaderClientMiddlewareFactory.start_call_  s   € Ü*¨4Ó0Ð0r   N)r|   r}   r~   r   rc   r¬  r!   r   r   r  r  W  s   „ ÙBòó
1r   r  c                   ó<   — e Zd ZdZddgddgdgdgdœZd„ Zd	„ Zd
„ Zy)r  rö  rD   rU   ó    ó   rE   )zx-textzx-binary-binzx-MIXED-cases   x-other-MIXED-casec                 ó   — || _         y r¦   r±  r³  s     r   rc   z$MultiHeaderClientMiddleware.__init__n  r´  r   c                 ó   — | j                   S r¦   )ÚEXPECTEDr…  s    r   rÏ  z+MultiHeaderClientMiddleware.sending_headersq  rà  r   c                 óN   — | j                   j                  j                  |«       y r¦   )r²  r  Úupdate)rf   r¡  s     r   r¹  z,MultiHeaderClientMiddleware.received_headerst  s   € ð 	�‰×!Ñ!×(Ñ(¨Õ1r   N)r|   r}   r~   r   r#  rc   rÏ  r¹  r!   r   r   r  r  c  s6   „ ÙBð ˜%�.Ø  'Ð*à˜Ø %˜wñ€Hòòó2r   r  c                   ó   — e Zd ZdZd„ Zy)Ú"MultiHeaderServerMiddlewareFactoryrö  c                 ó   — t        |«      S r¦   )ÚMultiHeaderServerMiddlewarerÛ  s      r   r¬  z-MultiHeaderServerMiddlewareFactory.start_call}  s   € Ü*¨7Ó3Ð3r   NrÊ  r!   r   r   r'  r'  z  s
   „ ÙBó4r   r'  c                   ó   — e Zd ZdZd„ Zd„ Zy)r)  rö  c                 ó   — || _         y r¦   )rø  )rf   rø  s     r   rc   z$MultiHeaderServerMiddleware.__init__„  s
   € Ø,ˆÕr   c                 ó"   — t         j                  S r¦   )r  r#  r…  s    r   rÏ  z+MultiHeaderServerMiddleware.sending_headers‡  s   € Ü*×3Ñ3Ð3r   NrÐ  r!   r   r   r)  r)  �  s   „ ÙBò-ó4r   r)  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚLargeMetadataFlightServerz Regression test for ARROW-13253.c                 ó8   •— t        ‰| �  |i |¤Ž ddz  | _        y )Nó    ì       )rb   rc   Ú	_metadata)rf   Úargsrh   ri   s      €r   rc   z"LargeMetadataFlightServer.__init__Ž  s!   ø€ Ü‰Ñ˜$Ð) &Ò)Ø Ñ-ˆ�r   c                 óÊ   — t        j                  dt        j                  «       fg«      }t        j                  |t        j
                  dgg|¬«      | j                  fg«      S )NrY   rJ   r  )r=   rn   Úint64r	   rŠ   Úrecord_batchr2  )rf   rr   rw   rn   s       r   rz   z LargeMetadataFlightServer.do_get’  sS   € Ü—‘˜S¤"§(¡(£*Ð-Ð.Ó/ˆÜ×%Ñ% fÜ�_‰_˜q˜c˜U¨6Ô2°D·N±NÐCð/
ó ð 	r   c                 ó:   — |j                  | j                  «       y r¦   )rP  r2  r±   s        r   r´   z%LargeMetadataFlightServer.do_exchange˜  s   € Ø×Ñ˜dŸn™nÕ-r   )r|   r}   r~   r   rc   rz   r´   r€   r�   s   @r   r.  r.  ‹  s   ø„ Ù*ô.òö.r   r.  c                  ó 	  — d} d}d}d}d}d}d}d}d	}d
}	t        t        j                  dd«      «      | k(  sJ ‚t        t        j                  dd«      «      |k(  sJ ‚t        t        j                  dd«      «      |k(  sJ ‚t        t        j
                  j                  d«      «      |k(  sJ ‚t        j                  dg t        j                  d«      j                  t        j                  d«      «      d«      }
t        |
«      |k(  sJ ‚t        j                  t        j                  g «      t        j
                  j                  «       g dddd«      }t        |«      |k(  sJ ‚t        t        j                  d«      «      |k(  sJ ‚t        t        j                   d«      «      |k(  sJ ‚t        t        j"                  t        j                  g «      «      «      |k(  sJ ‚t        t        j"                  t        j                  dg«      «      «      dk(  sJ ‚t        t        j$                  d«      «      |	k(  sJ ‚|j                  t        j                  g «      k(  sJ ‚t        j                  d t        j
                  j                  «       g dddd«      }d}t        |«      |k(  sJ ‚|j                  �J ‚t'        j(                  t*        «      5  t        j                  dd «       d d d «       t'        j(                  t*        «      5  t        j                  t-        «       g «       d d d «       t'        j(                  t*        «      5  t        j                  dddt-        «       g«       d d d «       t'        j(                  t*        «      5  t        j                  dg d¬«       d d d «       t'        j(                  t*        «      5  t        j                  dg t/        d d!d"dd#d$«      ¬«       d d d «       t'        j(                  t*        «      5  t        j                  dg t-        «       ¬%«       d d d «       y # 1 sw Y   �ŒRxY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒèxY w# 1 sw Y   ŒºxY w# 1 sw Y   Œ~xY w# 1 sw Y   y xY w)&Nz1<pyarrow.flight.Action type='foo' body=(0 bytes)>z)ActionType(type='foo', description='bar')z?<pyarrow.flight.BasicAuth username=b'user' password=(redacted)>z,<pyarrow.flight.FlightDescriptor cmd=b'foo'>z©<pyarrow.flight.FlightEndpoint ticket=<pyarrow.flight.Ticket ticket=b'foo'> locations=[] expiration_time=2023-04-05 12:34:56+00:00 app_metadata=b'endpoint app metadata'>z³<pyarrow.flight.FlightInfo schema= descriptor=<pyarrow.flight.FlightDescriptor path=[]> endpoints=[] total_records=1 total_bytes=42 ordered=True app_metadata=b'test app metadata'>z6<pyarrow.flight.Location b'grpc+tcp://localhost:1234'>z&<pyarrow.flight.Result body=(3 bytes)>z'<pyarrow.flight.SchemaResult schema=()>z%<pyarrow.flight.Ticket ticket=b'foo'>rD   r   rU   ÚuserÚpassó   fooú2023-04-05T12:34:56Úsó   endpoint app metadatarJ   rà   Tó   test app metadataúgrpc+tcp://localhost:1234)Úintr5  z1<pyarrow.flight.SchemaResult schema=(int: int64)>z·<pyarrow.flight.FlightInfo schema=None descriptor=<pyarrow.flight.FlightDescriptor path=[]> endpoints=[] total_records=1 total_bytes=42 ordered=True app_metadata=b'test app metadata'>rÛ   s   grpc://testz2023-04-05T01:02:03)Úexpiration_timeiç  rX   r8   rK   rL   ©rT  )r\  r	   ÚActionrö   ro  ro   Úfor_commandrâ   r=   rå   ræ   rç   rm   rn   rp   rã   ÚResultrë   ÚTicketÚpytestÚraisesÚ	TypeErrorÚobjectr   )Úaction_reprÚaction_type_reprÚbasic_auth_reprÚdescriptor_reprÚendpoint_reprÚ	info_reprÚlocation_reprÚresult_reprÚschema_result_reprÚticket_reprÚendpointrì   s               r   Ú	test_reprrW  œ  sâ  € ØE€KØBÐØW€OØD€Oð>€Mð	-ð ð M€MØ:€KØBÐØ9€Kä”—‘˜e SÓ)Ó*¨kÒ9Ð9Ð9Ü”×!Ñ! %¨Ó/Ó0Ð4DÒDÐDÐDÜ”× Ñ  ¨Ó0Ó1°_ÒDÐDÐDÜ”×'Ñ'×3Ñ3°EÓ:Ó;¸ÒNÐNÐNÜ×$Ñ$Ø�”B—I‘IÐ3Ó4×9Ñ9¼"¿,¹,ÀsÓ:KÓLØ ó€Hô �‹>˜]Ò*Ð*Ð*Ü×ÑÜ
�	‰	�"‹”v×.Ñ.×7Ñ7Ó9¸2Ø	ˆ2ˆtÐ)ó€Dô �‹:˜Ò"Ð"Ð"Ü”—‘Ð ;Ó<Ó=ÀÒNÐNÐNÜ”—‘˜fÓ%Ó&¨+Ò5Ð5Ð5Ü”×#Ñ#¤B§I¡I¨b£MÓ2Ó3Ð7IÒIÐIÐIÜ”×#Ñ#¤B§I¡IÐ/?Ð.@Ó$AÓBÓCØ;ò<ð <ð <ä”—‘˜fÓ%Ó&¨+Ò5Ð5Ð5Ø�;‰;œ"Ÿ)™) B›-Ò'Ð'Ð'ä×ÑØŒf×%Ñ%×.Ñ.Ó0°"Ø	ˆ2ˆtÐ)ó€Dð
	-ð ô �‹:˜Ò"Ð"Ð"Ø�;‰;ÐÐÐä	�‰”yÓ	!ñ #Ü�‰�e˜TÔ"÷#ô 
�‰”yÓ	!ñ ,Ü×Ñœf›h¨Ô+÷,ä	�‰”yÓ	!ñ PÜ×Ñ˜e m°^ÄVÃXÐ%NÔO÷Pä	�‰”yÓ	!ñ PÜ×Ñ˜e RÐ9NÕO÷Pä	�‰”yÓ	!ñ XÜ×Ñ˜e R¼À$ÈÈ1ÈaÐQRÐTUÓ9VÕW÷Xä	�‰”yÓ	!ñ @Ü×Ñ˜e R´f³hÕ?÷@ð @÷#ñ #ú÷,ñ ,ú÷Pð Pú÷Pð Pú÷Xð Xú÷@ð @úsH   ËP6ÌQÍ"QÎ
QÏ'Q(Ð!Q4Ð6Q ÑQÑQÑQ%Ñ(Q1Ñ4Q=c                  óô   — d„ d„ d„ d„ d„ d„ d„ d„ d	„ d
„ d„ d„ d„ d„ d„ d„ d„ d„ d„ d„ d„ g} | D ]G  } |«       \  }} |«       \  }}||k(  sJ ‚||k(  sJ ‚||k(  sJ ‚||k(  sJ ‚||k(  sJ ‚||k(  sJ ‚||k7  rŒGJ ‚ y )Nc                  óZ   — t        j                  dd«      t        j                  dd«      fS )NrD   r   rU   ©r	   rD  r!   r   r   ú<lambda>ztest_eq.<locals>.<lambda>ë  s!   € ”—‘˜u cÓ*¬F¯M©M¸%ÀÓ,EÐF€ r   c                  óZ   — t        j                  dd«      t        j                  dd«      fS )NrD   r   ó   barrZ  r!   r   r   r[  ztest_eq.<locals>.<lambda>ì  s!   € ”—‘˜u cÓ*¬F¯M©M¸%ÀÓ,HÐI€ r   c                  óZ   — t        j                  dd«      t        j                  dd«      fS )NrD   rU   rE   rõ   r!   r   r   r[  ztest_eq.<locals>.<lambda>í  s(   € ”×"Ñ" 5¨%Ó0Ü×"Ñ" 5¨%Ó0ð2€ r   c                  óZ   — t        j                  dd«      t        j                  dd«      fS )Nr9  r:  Úuser2©r	   ro  r!   r   r   r[  ztest_eq.<locals>.<lambda>ï  s(   € ”×!Ñ! &¨&Ó1Ü×!Ñ! '¨6Ó2ð4€ r   c                  óZ   — t        j                  dd«      t        j                  dd«      fS )Nr9  r:  Úpass2ra  r!   r   r   r[  ztest_eq.<locals>.<lambda>ñ  s(   € ”×!Ñ! &¨&Ó1Ü×!Ñ! &¨'Ó2ð4€ r   c                  ó~   — t         j                  j                  d«      t         j                  j                  d«      fS )NrD   )r	   ro   rE  rp   r!   r   r   r[  ztest_eq.<locals>.<lambda>ó  s0   € ”×(Ñ(×4Ñ4°UÓ;Ü×(Ñ(×1Ñ1°%Ó8ð:€ r   c                  óZ   — t        j                  dg «      t        j                  dg «      fS ©Nr;  r]  ©r	   râ   r!   r   r   r[  ztest_eq.<locals>.<lambda>õ  s(   € ”×&Ñ& v¨rÓ2Ü×&Ñ& v¨rÓ2ð4€ r   c                  óª   — t        j                  dt        j                  d«      g«      t        j                  dt        j                  d«      g«      fS )Nr;  r@  úgrpc+tls://localhost:1234)r	   râ   rã   r!   r   r   r[  ztest_eq.<locals>.<lambda>÷  sK   € Ü×!Ñ!ØœŸ™Ð)DÓEÐFóHä×!Ñ!ØœŸ™Ð)DÓEÐFóHð
€ r   c            
      ó2  — t        j                  dg t        j                  d«      j	                  t        j
                  d«      «      «      t        j                  dg t        j                  d«      j	                  t        j
                  d«      «      «      fS )Nr;  r<  r=  z2023-04-05T12:34:56.789Úms)r	   râ   r=   rå   ræ   rç   r!   r   r   r[  ztest_eq.<locals>.<lambda>ý  ss   € Ü×!Ñ!Ø˜œBŸI™IÐ&;Ó<×AÑAÄ"Ç,Á,ÈsÓBSÓTóVä×!Ñ!Ø˜Ü—	‘	Ð3Ó4×9Ñ9¼"¿,¹,ÀtÓ:LÓMóOðP€ r   c                  ób   — t        j                  dg d¬«      t        j                  dg d¬«      fS )Nr;  r   rC  ó   metarg  r!   r   r   r[  ztest_eq.<locals>.<lambda>  s-   € ”×&Ñ& v¨rÀÔDÜ×&Ñ& v¨rÀÔHðJ€ r   c                  óD  — t        j                  t        j                  g «      t         j                  j                  «       g «      t        j                  t        j                  dt        j                  «       fg«      t         j                  j                  «       g «      fS ©NÚints)r	   rm   r=   rn   ro   rp   r5  r!   r   r   r[  ztest_eq.<locals>.<lambda>  st   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°Bó8ô ×ÑÜ—	‘	˜F¤B§H¡H£JÐ/Ð0Ó1Ü×'Ñ'×0Ñ0Ó2°Bó8ð	9€ r   c                  ó  — t        j                  t        j                  g «      t         j                  j                  «       g «      t        j                  t        j                  g «      t         j                  j                  d«      g «      fS ©Nr;  )r	   rm   r=   rn   ro   rp   rE  r!   r   r   r[  ztest_eq.<locals>.<lambda>  si   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°Bó8ô ×ÑÜ—	‘	˜"“Ü×'Ñ'×3Ñ3°FÓ;¸RóAð	B€ r   c            	      ón  — t        j                  t        j                  g «      t         j                  j                  «       t        j                  dg «      g«      t        j                  t        j                  g «      t         j                  j                  «       t        j                  dg «      g«      fS rf  )r	   rm   r=   rn   ro   rp   râ   r!   r   r   r[  ztest_eq.<locals>.<lambda>  s‡   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2Ü×&Ñ& v¨rÓ2Ð3ó5ô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2Ü×&Ñ& v¨rÓ2Ð3ó5ð6€ r   c                  ó"  — t        j                  t        j                  g «      t         j                  j                  «       g d¬«      t        j                  t        j                  g «      t         j                  j                  «       g d¬«      fS )Néÿÿÿÿ)Útotal_recordsrJ   ©r	   rm   r=   rn   ro   rp   r!   r   r   r[  ztest_eq.<locals>.<lambda>  sl   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀbôJô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀaôIð	J€ r   c                  ó"  — t        j                  t        j                  g «      t         j                  j                  «       g d¬«      t        j                  t        j                  g «      t         j                  j                  «       g d¬«      fS )Nru  )Útotal_bytesrà   rw  r!   r   r   r[  ztest_eq.<locals>.<lambda>#  sl   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀBôHô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀBôHð	I€ r   c                  ó"  — t        j                  t        j                  g «      t         j                  j                  «       g d¬«      t        j                  t        j                  g «      t         j                  j                  «       g d¬«      fS )NF)ÚorderedTrw  r!   r   r   r[  ztest_eq.<locals>.<lambda>*  sl   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀôGô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀôFð	G€ r   c                  ó"  — t        j                  t        j                  g «      t         j                  j                  «       g d¬«      t        j                  t        j                  g «      t         j                  j                  «       g d¬«      fS )Nr   rC  rm  rw  r!   r   r   r[  ztest_eq.<locals>.<lambda>1  sl   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀSôJô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀWôNð	O€ r   c                  óV   — t        j                  d«      t        j                  d«      fS )Nr@  ri  )r	   rã   r!   r   r   r[  ztest_eq.<locals>.<lambda>8  s"   € ”—‘Ð!<Ó=Ü—‘Ð!<Ó=ð?€ r   c                  óV   — t        j                  d«      t        j                  d«      fS rf  )r	   rF  r!   r   r   r[  ztest_eq.<locals>.<lambda>:  s   € ”—‘˜vÓ&¬¯©°fÓ(=Ð>€ r   c                  óÌ   — t        j                  t        j                  g «      «      t        j                  t        j                  dt        j                  «       fg«      «      fS ro  )r	   rë   r=   rn   r5  r!   r   r   r[  ztest_eq.<locals>.<lambda>;  sD   € ”×$Ñ$¤R§Y¡Y¨r£]Ó3Ü×$Ñ$¤R§Y¡Y°¼¿¹»Ð0DÐ/EÓ%FÓGðI€ r   c                  óV   — t        j                  d«      t        j                  d«      fS )Nr   r;  )r	   rG  r!   r   r   r[  ztest_eq.<locals>.<lambda>=  s   € ”—‘˜sÓ#¤V§]¡]°6Ó%:Ð;€ r   r!   )ÚitemsÚgenÚlhs1Úrhs1Úlhs2Úrhs2s         r   Útest_eqr‡  é  sð   € áFÙIñ	2ñ	4ñ	4ñ	:ñ	4ñ	
ñ	Pñ	Jñ	9ñ	Bñ	6ñ	Jñ	Iñ	Gñ	Oñ	?á>ñ	Iá;ðgT€Eðl ò 	ˆÙ“U‰
ˆˆdÙ“U‰
ˆˆdØ�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�t‹|Ðˆ|ñ	r   c                  ó€  — t        j                  t        j                  g «      t         j                  j                  «       g «      } t        j                  t        j                  g «      t         j                  j                  «       g dd¬«      }t        j                  t        j                  g «      t         j                  j                  «       g d d ¬«      }| j                  dk(  sJ ‚|j                  dk(  sJ ‚|j                  dk(  sJ ‚| j                  dk(  sJ ‚|j                  dk(  sJ ‚|j                  dk(  sJ ‚y )Nru  )rv  ry  )r	   rm   r=   rn   ro   rp   rv  ry  )Úfi1Úfi2Úfi3s      r   Útest_flight_info_defaultsrŒ  L  s  € Ü
×
Ñ
œBŸI™I b›M¬6×+BÑ+B×+KÑ+KÓ+MÈrÓ
R€CÜ
×
Ñ
Ü
�	‰	�"‹Ü×Ñ×(Ñ(Ó*¨B¸bÈbôR€Cô ×
Ñ
Ü
�	‰	�"‹Ü×Ñ×(Ñ(Ó*¨B¸dÐPTôV€Cð ×Ñ Ò"Ð"Ð"Ø×Ñ Ò"Ð"Ð"Ø×Ñ Ò"Ð"Ð"à�?‰?˜bÒ Ð Ð Ø�?‰?˜bÒ Ð Ð Ø�?‰?˜bÒ Ð Ñ r   c                  ó–   — d ddt        «       fg} | D ])  }t        |«      5 }t        |t        «      sJ ‚	 d d d «       Œ+ y # 1 sw Y   Œ6xY w)Núgrpc://localhost:0rÜ   )r   r   Ú
isinstance)Ú	locationsrg   Úservers      r   Ú$test_flight_server_location_argumentr’  ^  s`   € àØØ	”nÓ&Ð'ð€Ið
 ò 8ˆÜ˜hÓ'ð 	8¨6Ü˜fÔ&6Ô7Ð7Ñ7÷	8ð 	8ñ8÷	8ð 	8ús	    ?¿A	c                  ó¤   — t        j                  t        «      5  t        «       5  t        «       ‚# 1 sw Y   nxY w	 d d d «       y # 1 sw Y   y xY wr¦   )rH  rI  Ú
ValueErrorr   r!   r   r   Ú#test_server_exit_reraises_exceptionr•  i  sF   € Ü	�‰”zÓ	"ñ ÜÓñ 	Ü“,Ð÷	ð 	úð 	÷÷ ñ ús   šA¥0°9	µAÁAc                  óD  ‡— dt        «       fŠd } ˆfd„}t        ‰«      5 }t        j                  |d¬«      }|j	                  «        t        j
                  «       }|j                  d¬«       t        j
                  «       |z
  }|dk\  sJ ‚	 d d d «       y # 1 sw Y   y xY w)NrÜ   c                  ón   •— t        j                  d«       t        ‰ «      at        j	                  «        y r  )r  r  r   r‘  Úserve©rg   s   €r   r˜  z-test_client_wait_for_available.<locals>.serveu  s!   ø€ ä�
‰
�3ŒÜ! (Ó+ˆÜ�‰�r   T©ÚtargetÚdaemonr8   ©Útimeoutr  )r   r
   Ú	threadingÚThreadÚstartr  Úwait_for_available)r‘  r˜  ÚclientÚthreadrW  Úelapsedrg   s         @r   Útest_client_wait_for_availabler¦  o  s�   ø€ ð œ^Ó-Ð.€HØ€Fôô 
�hÓ	ð  6Ü×!Ñ!¨°tÔ<ˆØ�‰Œä—)‘)“+ˆØ×!Ñ!¨!Ð!Ô,Ü—)‘)“+ Ñ'ˆØ˜#Š~Ð‰~÷÷ ñ ús    A,BÂBc                  ó\  — t        «       5 } t        j                  d| j                  f«      5 }t	        |j                  «       «      g k(  sJ ‚|j                  t         j                  «      }t        t	        |«      «      dk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zTry a simple list_flights call.rÜ   rJ   N)r]   r	   ÚconnectÚportÚlistrt   rl   Úlen)r‘  r£  Úflightss      r   Útest_flight_list_flightsr­  …  s–   € ä	Ó	ð ' 6Ü�N‰N˜K¨¯©Ð5Ó6ð'Ø:@Ü�F×'Ñ'Ó)Ó*¨bÒ0Ð0Ð0Ø×%Ñ%Ô&:×&CÑ&CÓDˆÜ”4˜“=Ó! QÒ&Ð&Ñ&÷	'÷ '÷ 'ñ 'ú÷ 'ð 'ús#   ‹"B"­ABÂB"ÂB	ÂB"Â"B+c                  óÌ  — t        «       5 } t        j                  d| j                  f«      5 }t	        |j                  «       «      g k(  sJ ‚|j                  «        |j                  «        t        j                  t        j                  «      5  t	        |j                  «       «       d d d «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrÜ   )r]   r	   r¨  r©  rª  rt   ÚcloserH  rI  r=   r0  ©r‘  r£  s     r   Útest_flight_client_closer±  Ž  sµ   € Ü	Ó	ð ( 6Ü�N‰N˜K¨¯©Ð5Ó6ð(Ø:@Ü�F×'Ñ'Ó)Ó*¨bÒ0Ð0Ð0Ø�‰ŒØ�‰ŒÜ�]‰]œ2Ÿ?™?Ó+ñ 	(Ü�×$Ñ$Ó&Ô'÷	(÷(÷ (ð (÷
	(ð 	(ú÷(ð (ú÷ (ð (ús;   ‹"C­A"CÂCÂ)CÂ1CÃCÃCÃC	ÃCÃC#c                  ó<  — t        «       } t        «       5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }|j                  | «      sJ ‚	 ddd«       ddd«       t        j                  j                  t        j                  j                  j                  ¬«      }t        |¬«      5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }|j                  | «      sJ ‚|j                  t        j                  d«      «      j                  «       j                  «       }|j                  | «      sJ ‚	 ddd«       ddd«       t        j                   t        j"                  d¬«      5  t        d¬«      5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }ddd«       ddd«       ddd«       y# 1 sw Y   �ŒÌxY w# 1 sw Y   �ŒÑxY w# 1 sw Y   ŒËxY w# 1 sw Y   ŒÏxY w# 1 sw Y   ŒLxY w# 1 sw Y   ŒPxY w# 1 sw Y   yxY w)	úTry a simple do_get call.rÜ   r_   N©Úmetadata_versionrv   z+expected IpcWriteOptions, got <class 'int'>©Úmatchrà   )rB   r]   r	   r¨  r©  rz   rG  r°   r‘   r=   ÚipcÚIpcWriteOptionsÚMetadataVersionÚV4rÕ   rH  rI  rå  )ry   r‘  r£  rA   re   s        r   Útest_flight_do_get_intsr¼  ˜  s  € äÓ€Eä	Ó	ð " 6Ü�N‰N˜K¨¯©Ð5Ó6ð"Ø:@Ø�}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ñ!÷"÷ "ô
 �f‰f×$Ñ$ÜŸ™×/Ñ/×2Ñ2ð %ó 4€Gä	 gÔ	.ð "°&Ü�N‰N˜K¨¯©Ð5Ó6ð"Ø:@Ø�}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ð!ð �}‰}œVŸ]™]¨7Ó3Ó4×>Ñ>Ó@×IÑIÓKˆØ�{‰{˜5Ô!Ð!Ñ!÷"÷ "ô 
�‰”v×/Ñ/ØJô
Lñ Dä!¨"Ô-ð 	D°Ü—‘ ¨V¯[©[Ð9Ó:ð	DØ>DØ—=‘=¤§¡¨wÓ!7Ó8×AÑAÓCˆD÷	D÷ 	D÷Dð D÷!"ñ "ú÷ "ñ "ú÷"ð "ú÷ "ð "ú÷	Dð 	Dú÷ 	Dð 	Dú÷Dð Dús„   •"I·AIÁ>IÃ"I.Ã>BI"ÆI.ÇJÇ"JÇ<3I:È/JÈ7JÉI	ÉIÉIÉ"I+	É'I.É.I7É:JÉ?JÊJ	ÊJÊJc                  óˆ  — t        «       } t        «       5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }t        |d   «      | j                  d«      j                  «       k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)r³  rÜ   r_   r:   r   N)rB   r]   r	   r¨  r©  rz   rG  Úread_pandasrª  ra  Ú	to_pylist)ry   r‘  r£  rA   s       r   Útest_do_get_ints_pandasrÀ  ³  s§   € ô Ó€Eä	Ó	ð F 6Ü�N‰N˜K¨¯©Ð5Ó6ðFØ:@Ø�}‰}œVŸ]™]¨7Ó3Ó4×@Ñ@ÓBˆÜ�D˜Ñ%Ó&¨%¯,©,°q«/×*CÑ*CÓ*EÒEÐEÑE÷F÷ F÷ Fñ Fú÷ Fð Fús#   •"B8·A#B,ÂB8Â,B5	Â1B8Â8Cc            
      óÆ  — t        «       } t        «       5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      }|j                  j                  dk(  sJ ‚|j                  «       }|j                  | «      sJ ‚|j                  t        ddddd¬«      k(  sJ ‚	 d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)	NrÜ   r`   rJ   rŽ   rL   rK   r   ©r�   r˜   Únum_dictionary_batchesÚnum_dictionary_deltasÚnum_replaced_dictionaries)rS   r]   r	   r¨  r©  rz   rG  r�   r�   r°   r‘   r   )ry   r‘  r£  rš   rA   s        r   Útest_flight_do_get_dictsrÆ  ¾  sÍ   € ÜÓ €Eä	Ó	ð 
 6Ü�N‰N˜K¨¯©Ð5Ó6ð
Ø:@Ø—‘œvŸ}™}¨XÓ6Ó7ˆØ�|‰|×(Ñ(¨AÒ-Ð-Ð-Ø�‰Ó ˆØ�{‰{˜5Ô!Ð!Ð!Ø�|‰|œyØØ Ø#$Ø"#Ø&'ô 
ò 
ð 	
ñ 
÷
÷ 
÷ 
ñ 
ú÷ 
ð 
ús#   •"C·BCÂ:CÃC	ÃCÃC c                  óÚ  — t        j                  g d¢t        j                  «       ¬«      g} t         j                  j	                  | dg¬«      }t        d¬«      5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }|j                  |«      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z+Make sure Tickets get passed to the server.r6   rG   rY   r;   s
   the-ticket)r  rÜ   N)r=   r>   rá   r?   r@   rÿ   r	   r¨  r©  rz   rG  r°   r‘   )r  ry   r‘  r£  rA   s        r   Útest_flight_do_get_ticketrÈ  Ð  sµ   € ä�X‰XÒ)´·±³
Ô;Ð<€EÜ�H‰H× Ñ  ¨s¨eÐ Ó4€EÜ	 °Ô	?ð "À6Ü�N‰N˜K¨¯©Ð5Ó6ð"Ø:@Ø�}‰}œVŸ]™]¨=Ó9Ó:×CÑCÓEˆØ�{‰{˜5Ô!Ð!Ñ!÷"÷ "÷ "ñ "ú÷ "ð "ús%   Á"C!Á=ACÃC!ÃC	ÃC!Ã!C*c                  ó€  — t        «       5 } t        d| j                  f«      }|j                  t        j
                  j                  d«      «      }|j                  dk(  sJ ‚|j                  dk(  sJ ‚|j                  sJ ‚|j                  dk(  sJ ‚|j                  t        j                  dt        j                  «       fg«      k(  sJ ‚t        |j                  «      dk(  sJ ‚t        |j                  d   j                   «      dk(  sJ ‚|j                  d   j"                  �J ‚|j                  d   j                  dk(  sJ ‚|j                  d   j                   d   t	        j$                  d
«      k(  sJ ‚|j                  d   j"                  t        j&                  d«      j)                  t        j*                  dd«      «      k(  sJ ‚|j                  d   j                  dk(  sJ ‚|j                  d   j                   d   t        j$                  j-                  dd«      k(  sJ ‚	 d	d	d	«       y	# 1 sw Y   y	xY w)z8Make sure FlightEndpoint accepts string and object URIs.rÜ   r   rJ   rà   s   info app metadatarY   rK   r   NrÛ   z#2023-04-05T12:34:56.789012345+00:00rß   ÚUTCr>  rÝ   )rÙ   r
   r©  ré   r	   ro   rE  rv  ry  r{  rT  rn   r=   rá   r«  Ú	endpointsr�  rB  rã   rå   ræ   rç   rä   ©r‘  r£  rì   s      r   Útest_flight_get_inforÍ  Ú  sþ  € ä	Ó	ð < &Ü˜{¨F¯K©KÐ8Ó9ˆØ×%Ñ%¤f×&=Ñ&=×&IÑ&IÈ#Ó&NÓOˆØ×!Ñ! QÒ&Ð&Ð&Ø×Ñ 2Ò%Ð%Ð%Ø�|Š|Ðˆ|Ø× Ñ Ð$8Ò8Ð8Ð8Ø�{‰{œbŸi™i¨#¬r¯x©x«zÐ):Ð(;Ó<Ò<Ð<Ð<Ü�4—>‘>Ó" aÒ'Ð'Ð'Ü�4—>‘> !Ñ$×.Ñ.Ó/°1Ò4Ð4Ð4Ø�~‰~˜aÑ ×0Ñ0Ð8Ð8Ð8Ø�~‰~˜aÑ ×-Ñ-°Ò4Ð4Ð4Ø�~‰~˜aÑ ×*Ñ*¨1Ñ-´·±ÀÓ1OÒOÐOÐOØ�~‰~˜aÑ ×0Ñ0Ü�I‰IÐ;Ó<ß‰t”B—L‘L  uÓ-Ó.ò/ð 	/ð /ð �~‰~˜aÑ ×-Ñ-Ð1IÒIÐIÐIØ�~‰~˜aÑ ×*Ñ*¨1Ñ-Ü�O‰O×(Ñ(¨°dÓ;ò<ð 	<ñ <÷#<÷ <ñ <ús   ‹HH4È4H=c                  ój  — t        «       5 } t        d| j                  f«      5 }|j                  t        j
                  j                  d«      «      }|j                  t        j                  dt        j                  «       fg«      k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z+Make sure GetSchema returns correct schema.rÜ   r   rY   N)
rÙ   r
   r©  rí   r	   ro   rE  rn   r=   rá   rÌ  s      r   Útest_flight_get_schemarÏ  ñ  s’   € ä	Ó	ð = &Ü˜+ v§{¡{Ð3Ó4ð=Ø8>Ø× Ñ ¤×!8Ñ!8×!DÑ!DÀSÓ!IÓJˆØ�{‰{œbŸi™i¨#¬r¯x©x«zÐ):Ð(;Ó<Ò<Ð<Ñ<÷=÷ =÷ =ñ =ú÷ =ð =ús#   ‹B)£A(BÂB)ÂB&	Â"B)Â)B2c                  ó8  — t        «       5 } t        d| j                  f«      5 }t        j                  t
        j                  d¬«      5  t        |j                  «       «       ddd«       ddd«       ddd«       t        «       5 } t        d| j                  f«      5 }t        |j                  «       «      t        j                  «       k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   Œ~xY w# 1 sw Y   Œ‚xY w# 1 sw Y   Œ†xY w# 1 sw Y   Œ6xY w# 1 sw Y   yxY w)z6Make sure the return type of ListActions is validated.rÜ   z3Results of list_actions must be ActionType or tupler¶  N)rü   r
   r©  rH  rI  r	   rå  rª  r½   rï   rø   r°  s     r   Útest_list_actionsrÑ  ù  s  € ô 
&Ó	'ð (¨6Ü˜+ v§{¡{Ð3Ó4ð(Ø8>Ü�]‰]Ü×(Ñ(ð-ô
ñ 	(ô
 �×$Ñ$Ó&Ô'÷	(÷(÷ (ô 
!Ó	"ð 7 fÜ˜+ v§{¡{Ð3Ó4ð7Ø8>Ü�F×'Ñ'Ó)Ó*Ü#×4Ñ4Ó6ò7ð 	7ñ 7÷7÷ 7ð 7÷	(ð 	(ú÷(ð (ú÷ (ð (ú÷7ð 7ú÷ 7ð 7ús^   ‹C8£&C,Á	C Á#C,Á+C8ÂDÂ1DÃDÃ C)Ã%C,Ã,C5	Ã1C8Ã8DÄD	Ä	DÄDc                   ó&   — e Zd ZdZed„ «       Zd„ Zy)ÚConvenienceServerzT
    Server for testing various implementation conveniences (auto-boxing, etc.)
    c                 ó
   — g d¢S )N)r;  r]  s   bazr!   r…  s    r   Úsimple_action_resultsz'ConvenienceServer.simple_action_results  s   € â'Ð'r   c                 ó  ‡— |j                   dk(  r| j                  S |j                   dk(  r|j                  gS |j                   dk(  rdgS |j                   dk(  rt        j                  «       ‚|j                   dk(  rˆfd„} |«       S y )Núsimple-actionÚechoú
bad-actionrD   úarrow-exceptionÚforeverc               3   óZ   •K  — ‰ j                  «       sd–— ‰ j                  «       sŒy y ­wrr  )Úis_cancelled)rr   s   €r   r‚  z(ConvenienceServer.do_action.<locals>.gen  s&   øè ø€ Ø!×.Ñ.Ô0Ø ’Lð "×.Ñ.×0ùs   ƒ%+©+)rH   rÕ  Úbodyr=   ÚArrowMemoryError)rf   rr   rÉ   r‚  s    `  r   rÊ   zConvenienceServer.do_action  s�   ø€ Ø�;‰;˜/Ò)Ø×-Ñ-Ð-Ø�[‰[˜FÒ"Ø—K‘K�=Ð Ø�[‰[˜LÒ(Ø�7ˆNØ�[‰[Ð-Ò-Ü×%Ñ%Ó'Ð'Ø�[‰[˜IÒ%ô!ñ “5ˆLð	 &r   N)r|   r}   r~   r   ÚpropertyrÕ  rÊ   r!   r   r   rÓ  rÓ    s    „ ñð ñ(ó ð(ór   rÓ  c                  óŠ  — t        «       5 } t        d| j                  f«      5 }|j                  d«      D �cg c]  }|j                  ‘Œ }}|| j
                  k(  sJ ‚d}|j                  d|f«      D �cg c]  }|j                  ‘Œ }}||gk(  sJ ‚	 d d d «       d d d «       y c c}w c c}w # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrÜ   r×  s   the-bodyrØ  )rÓ  r
   r©  rÊ   rÞ  rÕ  )r‘  r£  ÚxÚresultsrÞ  s        r   Ú!test_do_action_result_conveniencerä  $  sÎ   € Ü	Ó	ð 
! Ü˜+ v§{¡{Ð3Ó4ð
!Ø8>ð $*×#3Ñ#3°OÓ#DÖE˜a�1—6“6ÐEˆÐEØ˜&×6Ñ6Ò6Ð6Ð6ð ˆØ#)×#3Ñ#3°V¸T°NÓ#CÖD˜a�1—6“6ÐDˆÐDØ˜4˜&Ò Ð Ñ ÷
!÷ 
!ð 
!ùò Fùò
 E÷
!ð 
!ú÷ 
!ð 
!ús?   ‹B9£B-·B#Á
*B-Á4B(Â
B-ÂB9Â#
B-Â-B6	Â2B9Â9Cc                  óê  — t        «       5 } t        d| j                  f«      5 }t        j                  t
        j                  d¬«      5  t        |j                  d«      «       d d d «       t        j                  t
        j                  d¬«      5  t        |j                  d«      «       d d d «       d d d «       d d d «       y # 1 sw Y   ŒbxY w# 1 sw Y   Œ&xY w# 1 sw Y   Œ*xY w# 1 sw Y   y xY w)NrÜ   za bytes-like object is requiredr¶  rÙ  rß  rÚ  )	rÓ  r
   r©  rH  rI  r	   rå  rª  rÊ   r°  s     r   Útest_nicer_server_exceptionsræ  2  sÏ   € Ü	Ó	ð 6 Ü˜+ v§{¡{Ð3Ó4ð6Ø8>Ü�]‰]œ6×3Ñ3Ø!BôDñ 	1ä�×!Ñ! ,Ó/Ô0÷	1ô �]‰]œ6×3Ñ3Ø!3ô5ñ 	6ä�×!Ñ!Ð"3Ó4Ô5÷	6÷6÷ 6ð 6÷	1ð 	1ú÷	6ð 	6ú÷6ð 6ú÷ 6ð 6úsR   ‹C)£&CÁ	CÁ$-CÂCÂ,CÂ4C)ÃCÃ
CÃCÃCÃC&	Ã"C)Ã)C2c                  óŠ   — t        d«      } 	 | j                  dkD  sJ ‚	 | j                  «        y# | j                  «        w xY w)zMake sure port() works.rŽ  r   N)rÙ   r©  Úshutdown)r‘  s    r   Útest_get_portré  A  s7   € ä Ð!5Ó6€FðØ�{‰{˜QŠÐ‰à�‰Õøˆ�‰Õús	   �0 °AÚntz'Unix sockets can't be tested on Windows)Úreasonc                  ó,  — t        j                  «       5 } | j                  «        t        j                  j                  | j                  «      }t        |¬«      5  t        |«      5 }|j                  t        j                  d«      «      }t        «       }|j                  j                  |j                  «      sJ ‚|j                  «       }|j                  |«      sJ ‚|j                  t        j                  d«      «      }t        «       }|j                  j                  |j                  «      sJ ‚|j                  «       }|j                  |«      sJ ‚	 ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z3Try a simple do_get call over a Unix domain socket.r™  r_   r`   N)ÚtempfileÚNamedTemporaryFiler¯  r	   rã   Úfor_grpc_unixÚnamer]   r
   rz   rG  rB   rn   r‘   r°   rS   )Úsockrg   r£  rš   ry   rA   s         r   Útest_flight_domain_socketrò  J  s<  € ô 
×	$Ñ	$Ó	&ð &¨$Ø�
‰
ŒÜ—?‘?×0Ñ0°·±Ó;ˆÜ!¨8Ô4ñ 	&Ü˜XÓ&ð	&Ø*0à—]‘]¤6§=¡=°Ó#9Ó:ˆFÜ%Ó'ˆEØ—=‘=×'Ñ'¨¯©Ô5Ð5Ð5Ø—?‘?Ó$ˆDØ—;‘;˜uÔ%Ð%Ð%à—]‘]¤6§=¡=°Ó#:Ó;ˆFÜ&Ó(ˆEØ—=‘=×'Ñ'¨¯©Ô5Ð5Ð5Ø—?‘?Ó$ˆDØ—;‘;˜uÔ%Ð%Ñ%÷	&÷ 	&÷&ð &÷	&ð 	&ú÷ 	&ð 	&ú÷&ð &ús=   •AF
ÁE>Á'C1E2ÅE>Å!F
Å2E;Å7E>Å>F	ÆF
Æ
Fc                  óz  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        | j                  ¬«      5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | d«       |j                  «        |j                  t        j                   d«      «      j#                  «       }|j%                  | «      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z�Try sending/receiving a large message via Flight.

    See ARROW-4421: by default, gRPC won't allow us to send messages >
    4MiB in size.
    r   i    rY   r;   )r¬   rÜ   rÀ  r   N)r=   r?   r@   r>   r  r©   rn   r
   r©  r¡   r	   ro   rp   rM  r¯  rz   rG  r°   r‘   ©rA   r‘  r£  r›   Ú_rd  s         r   Útest_flight_large_messagerö  a  s  € ô �8‰8×ÑÜ
�‰”�qÐ*Ó+Ó,ð!àˆUð  ó €Dô 
¨$¯+©+Ô	6ð #¸&Ü˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�ð 	×Ñ˜4Ð!1Ô2Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #ús%   ÁD1Á/B$D%ÄD1Ä%D.	Ä*D1Ä1D:c                  ó`  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j                  «        |j                  t        j                   d«      «      j#                  «       }|j%                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z?Try downloading a flight of RecordBatches in a GeneratorStream.r   rK  rY   r;   rÜ   rÀ  r   N)r=   r?   r@   r>   r  r¶   r
   r©  r¡   r	   ro   rp   rn   rM  r¯  rz   rG  r°   r‘   rô  s         r   Ú'test_flight_generator_stream_of_batchesrø  w  sõ   € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dô 
 Ó	!ð # VÜ˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�à×Ñ˜4Ô Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #úó%   ÁD$Á#B#DÄD$ÄD!	ÄD$Ä$D-c            
      óð  — t         j                  j                  t        j                  g d¢t        j                  t        j
                  «       t        j                  «       «      «      t        j                  g d¢«      gddg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j!                  «        |j#                  t        j$                  d«      «      j'                  «       }|j)                  | «      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z_
    Try downloading a flight of RecordBatches with dictionaries
    in a GeneratorStream.
    ©rD   rU   rE   rD   rD   ©é{   éê   iY  iÈ  i7  rY   rZ   r;   rÜ   rÀ  r   N©r=   r?   r@   r>   Ú
dictionaryr5  rN   rÓ   r
   r©  r¡   r	   ro   rp   rn   rM  r¯  rz   rG  r°   r‘   rô  s         r   Ú1test_flight_generator_stream_of_batches_with_dictr  ‡  ó  € ô
 �8‰8×ÑÜ
�‰Ò4Ü—‘œrŸx™x›z¬2¯7©7«9Ó5ó	7ä
�‰Ò*Ó+ð!ð �3ˆZð	  ó €Dô 
1Ó	2ð #°fÜ˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�à×Ñ˜4Ô Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #úó%   ÂE,Â+B#E ÅE,Å E)	Å%E,Å,E5c                  ó`  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j                  «        |j                  t        j                   d«      «      j#                  «       }|j%                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z7Try downloading a flight of Table in a GeneratorStream.r   rK  rY   r;   rÜ   rÀ  r   N)r=   r?   r@   r>   r  rÎ   r
   r©  r¡   r	   ro   rp   rn   rM  r¯  rz   rG  r°   r‘   rô  s         r   Ú%test_flight_generator_stream_of_tabler  œ  sõ   € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dô 
%Ó	&ð #¨&Ü˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�à×Ñ˜4Ô Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #úrù  c            
      óð  — t         j                  j                  t        j                  g d¢t        j                  t        j
                  «       t        j                  «       «      «      t        j                  g d¢«      gddg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j!                  «        |j#                  t        j$                  d«      «      j'                  «       }|j)                  | «      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
zW
    Try downloading a flight of Table with dictionaries
    in a GeneratorStream.
    rû  rü  rY   rZ   r;   rÜ   rÀ  r   Nrÿ  rô  s         r   Ú/test_flight_generator_stream_of_table_with_dictr  ¬  r  r  c                  ó`  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j                  «        |j                  t        j                   d«      «      j#                  «       }|j%                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	zCTry downloading a flight of RecordBatchReader in a GeneratorStream.r   rK  rY   r;   rÜ   rÀ  r   N)r=   r?   r@   r>   r  rÓ   r
   r©  r¡   r	   ro   rp   rn   rM  r¯  rz   rG  r°   r‘   rô  s         r   Ú3test_flight_generator_stream_of_record_batch_readerr	  Á  sõ   € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dô 
1Ó	2ð #°fÜ˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�à×Ñ˜4Ô Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #úrù  c            
      óð  — t         j                  j                  t        j                  g d¢t        j                  t        j
                  «       t        j                  «       «      «      t        j                  g d¢«      gddg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j!                  «        |j#                  t        j$                  d«      «      j'                  «       }|j)                  | «      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
zc
    Try downloading a flight of RecordBatchReader with dictionaries
    in a GeneratorStream.
    rû  rü  rY   rZ   r;   rÜ   rÀ  r   Nrÿ  rô  s         r   Ú=test_flight_generator_stream_of_record_batch_reader_with_dictr  Ñ  r  r  c                  ón  — t        «       5 } t        d| j                  f«      5 }t        j                  t
        j                  «      5  |j                  t        j                  d«      «      j                  «        ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z+Try streaming data with mismatched schemas.rÜ   r   N)r  r
   r©  rH  rI  r=   ÚArrowExceptionrz   r	   rG  r°   r°  s     r   Ú$test_flight_invalid_generator_streamr  æ  s’   € ä	"Ó	$ð 9¨Ü˜+ v§{¡{Ð3Ó4ð9Ø8>Ü�]‰]œ2×,Ñ,Ó-ñ 	9Ø�M‰Mœ&Ÿ-™-¨Ó,Ó-×6Ñ6Ô8÷	9÷9÷ 9ð 9÷	9ð 	9ú÷9ð 9ú÷ 9ð 9ús:   ‹B+£$BÁ3BÁ:BÂB+ÂBÂBÂB(	Â$B+Â+B4c            	      óš  — t        «       5 } t        d| j                  f«      5 }t        j                  dd«      }t        j
                  d¬«      }t        j                  t        j                  «      5  t        |j                  ||¬«      «       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z)Make sure timeouts fire on slow requests.rÜ   rô   r   gš™™™™™É?r�  rv   N)r  r
   r©  r	   rD  r   rH  rI  r,  rª  rÊ   )r‘  r£  rÉ   re   s       r   Útest_timeout_firesr  î  s°   € ô 
Ó	ð <˜vÜ˜+ v§{¡{Ð3Ó4ð<Ø8>Ü—‘˜r 3Ó'ˆÜ×*Ñ*°3Ô7ˆô �]‰]œ6×5Ñ5Ó6ñ 	<Ü�×!Ñ! &°'Ð!Ó:Ô;÷	<÷<÷ <ð <÷	<ð 	<ú÷<ð <ú÷ <ð <ús;   ‹C£AB5Á3B)ÂB5ÂCÂ)B2Â.B5Â5B>	Â:CÃC
c                  ó.  — t        «       5 } t        d| j                  f«      5 }t        j                  d¬«      }|j                  t        j                  d«      |¬«      j                  «        ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z0Make sure timeouts do not fire on fast requests.rÜ   r  r�  r_   rv   N)r]   r
   r©  r	   r   rz   rG  r°   )r‘  r£  re   s      r   Útest_timeout_passesr  ü  s‚   € ä	Ó	ð J 6Ü˜+ v§{¡{Ð3Ó4ðJØ8>Ü×*Ñ*°3Ô7ˆØ�‰”f—m‘m GÓ,°gˆÓ>×GÑGÔI÷J÷ J÷ Jñ Jú÷ Jð Jús#   ‹B£AA?Á.BÁ?B	ÂBÂBc                  óŠ  — t         j                  j                  t        j                  g d¢«      gdg¬«      } t	        «       5 }t        d|j                  f«      5 }t        j                  t        dg¬«      ¬«      }|j                  t        j                  d«      |¬	«      j                  «       }|j                  t        j                  d«      «      j                  «       }|j                  d
k(  sJ ‚|j                  dk(  sJ ‚|| k(  sJ ‚|t        «       k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z"Make sure ReadOptions can be used.rW   rZ   r;   rÜ   rJ   )Úincluded_fields)Úread_optionsra   rv   rK   N)r=   r?   r@   r>   r]   r
   r©  r	   r   r   rz   rG  r°   Únum_columnsr[   )Úexpectedr‘  r£  re   Ú	response1Ú	response2s         r   Útest_read_optionsr    s  € ä�x‰x×#Ñ#¤R§X¡XªlÓ%;Ð$<ÀSÀEÐ#ÓJ€HÜ	Ó	ð 4 6Ü˜+ v§{¡{Ð3Ó4ð4Ø8>Ü×*Ñ*Ü'¸¸Ô<ô>ˆà—M‘M¤&§-¡-Øó#Ø&ð "ó (ß(0©«
ð 	à—M‘M¤&§-¡-°Ó"9Ó:×CÑCÓEˆ	à×$Ñ$¨Ò)Ð)Ð)Ø×$Ñ$¨Ò)Ð)Ð)Ø˜HÒ$Ð$Ð$ØÔ1Ó3Ò3Ð3Ñ3÷4÷ 4÷ 4ñ 4ú÷ 4ð 4ús%   ÁD9ÁC D-ÄD9Ä-D6	Ä2D9Ä9Eó   tests   p4ssw0rd)rj  c                  óz  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  dd«      }t        j                  t        j                  d¬«      5  t        |j                  |«      «       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z,Test that auth fails when not authenticated.©Úauth_handlerrÜ   rÁ   r   z.*unauthenticated.*r¶  N)r¶   Úbasic_auth_handlerr
   r©  r	   rD  rH  rI  r.  rª  rÊ   ©r‘  r£  rÉ   s      r   Útest_http_basic_unauthr!    s¡   € ô 
 Ô-?Ô	@ð +ÀFÜ˜+ v§{¡{Ð3Ó4ð+Ø8>Ü—‘˜z¨3Ó/ˆÜ�]‰]œ6×<Ñ<Ø!6ô8ñ 	+ä�×!Ñ! &Ó)Ô*÷	+÷+÷ +ð +÷	+ð 	+ú÷+ð +ú÷ +ð +ús:   ‘B1©<B%Á%BÂ B%ÂB1ÂB"ÂB%Â%B.	Â*B1Â1B:z,ARROW-10013: gRPC on Windows corrupts peer()c                  óÔ  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  dd«      }|j                  t        dd«      «       |j                  |«      }t        |«      }|j                  j                  «       dk(  sJ ‚t        |«      }|j                  j                  «       dk7  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z:Test a Python implementation of HTTP basic authentication.r  rÜ   rÁ   r   rÀ  Úp4ssw0rdr  N)r¶   r  r
   r©  r	   rD  rv  r}  rÊ   ÚnextrÞ  r•   )r‘  r£  rÉ   rã  ÚidentityÚpeer_addresss         r   Útest_http_basic_authr'  )  sÍ   € ô 
 Ô-?Ô	@ð 5ÀFÜ˜+ v§{¡{Ð3Ó4ð5Ø8>Ü—‘˜z¨3Ó/ˆØ×ÑÔ6°v¸zÓJÔKØ×"Ñ" 6Ó*ˆÜ˜“=ˆØ�}‰}×'Ñ'Ó)¨WÒ4Ð4Ð4Ü˜G“}ˆØ× Ñ ×+Ñ+Ó-°Ò4Ð4Ñ4÷5÷ 5÷ 5ñ 5ú÷ 5ð 5ús#   ‘C©BCÃCÃC	ÃCÃC'c            	      ó°  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  dd«      }t        j                  t        j                  d¬«      5  |j                  t        dd«      «       t        |j                  |«      «       d	d	d	«       d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z-Test that auth fails with the wrong password.r  rÜ   rÁ   r   z.*wrong password.*r¶  rÀ  ÚwrongN)r¶   r  r
   r©  r	   rD  rH  rI  r.  rv  r}  r$  rÊ   r   s      r   Ú%test_http_basic_auth_invalid_passwordr*  8  sµ   € ä	Ô-?Ô	@ð +ÀFÜ˜+ v§{¡{Ð3Ó4ð+Ø8>Ü—‘˜z¨3Ó/ˆÜ�]‰]œ6×<Ñ<Ø!5ô7ñ 	+à×ÑÔ :¸6À7Ó KÔLÜ�×!Ñ! &Ó)Ô*÷	+÷+÷ +ð +÷	+ð 	+ú÷+ð +ú÷ +ð +ús:   ‘C©<C Á%6B4ÂC Â#CÂ4B=Â9C Ã C		ÃCÃCc                  ó|  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  dd«      }|j                  t        dd«      «       t        |j                  |«      «      }|j                  j                  «       dk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	ú-Test an auth mechanism that uses a handshake.r  rÜ   rÁ   r   rÀ  r#  r  N)r¶   Útoken_auth_handlerr
   r©  r	   rD  rv  r–  r$  rÊ   rÞ  r•   )r‘  r£  rÉ   r%  s       r   Útest_token_authr.  C  s¡   € ä	Ô-?Ô	@ð 5ÀFÜ˜+ v§{¡{Ð3Ó4ð5Ø8>Ü—‘˜z¨3Ó/ˆØ×ÑÔ2°6¸:ÓFÔGÜ˜×(Ñ(¨Ó0Ó1ˆØ�}‰}×'Ñ'Ó)¨WÒ4Ð4Ñ4÷5÷ 5÷ 5ñ 5ú÷ 5ð 5ús#   ‘B2©A+B&ÂB2Â&B/	Â+B2Â2B;c            	      óL  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  t        j                  «      5  |j                  t        dd«      «       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)r,  r  rÜ   rÀ  r)  N)
r¶   r-  r
   r©  rH  rI  r	   r.  rv  r–  r°  s     r   Útest_token_auth_invalidr0  M  sš   € ä	Ô-?Ô	@ð IÀFÜ˜+ v§{¡{Ð3Ó4ðIØ8>Ü�]‰]œ6×<Ñ<Ó=ñ 	IØ×ÑÔ 6°v¸wÓ GÔH÷	I÷I÷ Ið I÷	Ið 	Iú÷Ið Iú÷ Ið Iús:   ‘B©$BÁBÁ)BÁ1BÂBÂBÂB	ÂBÂB#c                  ó
  — t        t        dt        «       i¬«      5 } t        d| j                  f«      5 }|j                  dd«      }|d   dk(  sJ ‚|d   d	k(  sJ ‚	 d
d
d
«       d
d
d
«       y
# 1 sw Y   ŒxY w# 1 sw Y   y
xY w)zATest authenticate_basic_token with bearer token and auth headers.ru  ©r  rÕ  rÜ   r  ó   passwordr   r·  rJ   ó   Bearer token1234N)rÒ  Úno_op_auth_handlerr»  r
   r©  Úauthenticate_basic_token)r‘  r£  Ú
token_pairs      r   Útest_authenticate_basic_tokenr8  Y  s—   € ä	Ô-?ØÔ1Ó3ðMô 
ð 4à
Ü˜+ v§{¡{Ð3Ó4ð4ð 9?Ø×4Ñ4°W¸kÓJˆ
Ø˜!‰}Ð 0Ò0Ð0Ð0Ø˜!‰}Ð 3Ò3Ð3Ñ3÷4÷ 4÷ 4ñ 4ú÷ 4ð 4ús"   œA9´'A-ÁA9Á-A6	Á2A9Á9Bc                  óP  — t        t        dt        «       i¬«      5 } t        d| j                  f«      5 }t        j                  t        j                  «      5  |j                  dd«       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z7Test authenticate_basic_token with an invalid password.ru  r2  rÜ   r  s   badpasswordN)
rÒ  r5  r»  r
   r©  rH  rI  r	   r.  r6  r°  s     r   Ú.test_authenticate_basic_token_invalid_passwordr:  d  s¨   € ä	Ô-?ØÔ1Ó3ðMô 
ð Eà
Ü˜+ v§{¡{Ð3Ó4ðEð 9?Ü�]‰]œ6×<Ñ<Ó=ñ 	EØ×+Ñ+¨G°^ÔD÷	E÷	E÷ Eð E÷	Eð 	Eú÷	Eð Eú÷ Eð Eús:   œB´$BÁBÁ+BÁ3BÂBÂ	BÂB	ÂBÂB%c            
      óÜ  — t        t        dt        «       i¬«      5 } t        d| j                  f«      5 }|j                  dd«      }|d   dk(  sJ ‚|d   d	k(  sJ ‚t        j                  |g¬
«      }t        |j                  t        j                  dd«      |¬«      «      }|d   j                  j                  «       dk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z@Test authenticate_basic_token and doAction after authentication.ru  r2  rÜ   r  r3  r   r·  rJ   r4  ©r¡  útest-actionr   ©rÉ   re   ó	   token1234N)rÒ  r5  r»  r
   r©  r6  r	   r   rª  rÊ   rD  rÞ  r•   ©r‘  r£  r7  re   rd  s        r   Ú(test_authenticate_basic_token_and_actionrA  n  sö   € ä	Ô-?ØÔ1Ó3ðMô 
ð 
;à
Ü˜+ v§{¡{Ð3Ó4ð
;ð 9?Ø×4Ñ4°W¸kÓJˆ
Ø˜!‰}Ð 0Ò0Ð0Ð0Ø˜!‰}Ð 3Ò3Ð3Ð3Ü×*Ñ*°J°<Ô@ˆÜ�f×&Ñ&Ü—=‘= °Ó4¸gð 'ó Gó Hˆà�a‰y�~‰~×(Ñ(Ó*¨lÒ:Ð:Ñ:÷
;÷ 
;÷ 
;ñ 
;ú÷ 
;ð 
;ús#   œC"´BCÃC"ÃC	ÃC"Ã"C+c            	      ó  — t        t        dt        «       i¬«      5 } t        «       }t	        d| j
                  f|g¬«      }t        j                  d«      }t        j                  dd|z   fg¬«      }t        |j                  t        j                  d	d
«      |¬«      «      }|d   j                  j                  «       dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  d   dk(  sJ ‚t        |j                  t        j                  d	d
«      |¬«      «      }|d   j                  j                  «       dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  d   dk(  sJ ‚|j!                  «        ddd«       y# 1 sw Y   yxY w)zšTest authenticate_basic_token with client middleware
       to intercept authorization header returned by the
       HTTP header auth enabled server.
    ru  r2  rÜ   ©rÕ  s   test:passwordr·  s   Basic r<  r=  r   r>  r   r?  rJ   r4  N)rÒ  r5  r»  r¥  r
   r©  r�  r�  r	   r   rª  rÊ   rD  rÞ  r•   r¨  r¯  )r‘  Úclient_auth_middlewarer£  Úencoded_credentialsre   rd  Úresult2s          r   Ú4test_authenticate_basic_token_with_client_middlewarerG  }  s«  € ô
 
 Ô-?ØÔ1Ó3ðMô 
ð à
Ü!BÓ!DÐÜØ˜&Ÿ+™+Ð&Ø.Ð/ô
ˆô %×.Ñ.Ð/?Ó@ÐÜ×*Ñ*Ø˜yÐ+>Ñ>Ð?ð4
ô ˆô �f×&Ñ&Ü—=‘= °Ó4¸gð 'ó Gó Hˆà�a‰y�~‰~×(Ñ(Ó*¨lÒ:Ð:Ð:Ø%×5Ñ5°aÑ8Ð<LÒLÐLÐLØ%×5Ñ5°aÑ8Ø%ò&ð 	&ð &ä�v×'Ñ'Ü—=‘= °Ó4¸gð (ó Gó Hˆà�q‰z�‰×)Ñ)Ó+¨|Ò;Ð;Ð;Ø%×5Ñ5°aÑ8Ð<LÒLÐLÐLØ%×5Ñ5°aÑ8Ø%ò&ð 	&ð &à�‰Œ÷1÷ ñ ús   œEE?Å?Fc            
      ó6  — t        t        t        «       t        «       dœ¬«      5 } t	        d| j
                  f«      5 }|j                  dd«      }|d   dk(  sJ ‚|d   d	k(  sJ ‚t        j                  |d
dg¬«      }t        |j                  t        j                  dd«      |¬«      «      }|d   j                  j                  «       dk(  sJ ‚|d   j                  j                  «       dk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z:Test passing multiple arbitrary headers to the middleware.)ru  rä  r2  rÜ   r  r3  r   r·  rJ   r4  )s   test-header-1ó   value1)s   test-header-2ó   value2r<  r=  r   rv   rI  rJ  N)râ  r5  r»  rØ  r
   r©  r6  r	   r   rª  rÊ   rD  rÞ  r•   r@  s        r   Ú-test_arbitrary_headers_in_flight_call_optionsrK  �  s(  € ä	%Ü'ä5Ó7Ü!HÓ!Jñ
ô
ð 8ð
 Ü˜+ v§{¡{Ð3Ó4ð8ð 9?Ø×4Ñ4°W¸kÓJˆ
Ø˜!‰}Ð 0Ò0Ð0Ð0Ø˜!‰}Ð 3Ò3Ð3Ð3Ü×*Ñ*ØØ)Ø)ð4
ô ˆô
 �f×&Ñ&¤v§}¡}Ø˜3ó( Ø)0ð 'ó 2ó 3ˆà�a‰y�~‰~×(Ñ(Ó*¨iÒ7Ð7Ð7Ø�a‰y�~‰~×(Ñ(Ó*¨iÒ7Ð7Ñ7÷%8÷ 8÷ 8ñ 8ú÷ 8ð 8ús#   ¥D½B4DÃ2DÄD	ÄDÄDc                  ó,  — t        j                  t        j                  d¬«      5  t	        j
                  d«       ddd«       t        j                  t        j                  d¬«      5  t        d«       ddd«       y# 1 sw Y   ŒCxY w# 1 sw Y   yxY w)zTest constructing invalid URIs.z.*Cannot parse URI:.*r¶  ú%N)rH  rI  r=   r0  r	   r¨  r]   r!   r   r   Útest_location_invalidrN  ´  sm   € ä	�‰”r—‘Ð.EÔ	Fñ Ü�‰�sÔ÷ô 
�‰”r—‘Ð.EÔ	Fñ "Ü˜SÔ!÷"ð "÷ð ú÷"ð "ús   ¦A>Á)B
Á>BÂ
Bc                  ó”   — t        j                  d«      j                  dk(  sJ ‚t        j                  d«      j                  dk(  sJ ‚y)z,Test creating locations for unknown schemes.zs3://foos   s3://foozhttps://example.com/bar.parquets   https://example.com/bar.parquetN)r	   rã   Úurir!   r   r   Útest_location_unknown_schemerQ  ½  sD   € ä�?‰?˜:Ó&×*Ñ*¨kÒ9Ð9Ð9Ü�?‰?Ð<Ó=×AÑAØ*ò+ð +ñ +r   c                  ó   — t        «       } t        | d   ¬«      5 }t        dt        |j                  «      z   «      5 }t        j                  t        j                  «      5  |j                  t        j                  d«      «      j                  «        ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z>Make sure clients cannot connect when cert verification fails.r2   ©Útls_certificateszgrpc+tls://localhost:r_   N)r4   r]   r
   rQ  r©  rH  rI  r	   ÚFlightUnavailableErrorrz   rG  r°   ©Úcertsr=  r£  s      r   Útest_tls_failsrX  Ä  s¬   € ô Ó€Eô 
¨u°^Ñ/DÔ	Eð =ÈÜÐ0´3°q·v±v³;Ñ>Ó?ð=ØCIô �]‰]œ6×8Ñ8Ó9ñ 	=Ø�M‰Mœ&Ÿ-™-¨Ó0Ó1×:Ñ:Ô<÷	=÷	=÷ =ð =÷	=ð 	=ú÷	=ð =ú÷ =ð =ús:   š"C¼$B8Á 3B,ÂB8ÂCÂ,B5Â1B8Â8C	Â=CÃCc                  ób  — t        «       } t        «       }t        |d   ¬«      5 }t        d|j                  f|d   ¬«      5 }|j                  t        j                  d«      «      j                  «       }|j                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z"Try a simple do_get call over TLS.r2   rS  rÜ   r1   )Útls_root_certsr_   N)
rB   r4   r]   r
   r©  rz   r	   rG  r°   r‘   ©ry   rW  r=  r£  rA   s        r   Útest_tls_do_getr\  Ô  s�   € ô Ó€EÜÓ€Eä	¨u°^Ñ/DÔ	Eð "ÈÜ�k 1§6¡6Ð*Ø$)¨+Ñ$6ô	8ð"à;AØ�}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ñ!÷	"÷ "÷ "ñ "ú÷ "ð "ús$   ¤B%ÁABÂB%ÂB"	ÂB%Â%B.c                  óš  — t        «       } t        «       }t        |d   ¬«      5 }	 t        d|j                  fd¬«      }j                  t        j                  d«      «      j                  «       }|j                  | «      sJ ‚|j                  «        ddd«       y# t
        $ r t        j                  d«       Y Œ~w xY w# 1 sw Y   yxY w)	zDTry a simple do_get call over TLS with server verification disabled.r2   rS  rÜ   T©Údisable_server_verificationz4disable_server_verification feature is not availabler_   N)rB   r4   r]   r
   r©  rÇ   rH  Úskiprz   r	   rG  r°   r‘   r¯  r[  s        r   Ú$test_tls_disable_server_verificationra  á  s¹   € ô Ó€EÜÓ€Eä	¨u°^Ñ/DÔ	Eð Èð	PÜ! ;°·±Ð"7Ø>BôDˆFð �}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ð!Ø�‰Œ÷ð øô #ò 	PÜ�K‰KÐNÖOð	Pú÷	ð ús.   ¤C¦B¿ACÂB>Â;CÂ=B>Â>CÃC
c                  ó�  — t        «       } t        | d   ¬«      5 }t        j                  d|j                  f| d   d¬«      5 }t        j                  t        j                  «      5  |j                  t        j                  d«      «       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z5Check that incorrectly overriding the hostname fails.r2   rS  rÜ   r1   Úfakehostname)rZ  Úoverride_hostnamer_   N)
r4   r]   r	   r¨  r©  rH  rI  rU  rz   rG  rV  s      r   Útest_tls_override_hostnamere  ò  s®   € ô Ó€Eä	¨u°^Ñ/DÔ	Eð 2ÈÜ�‰˜ Q§V¡VÐ,Ø&+¨KÑ&8Ø)7ô	9ð2ð =CÜ�]‰]œ6×8Ñ8Ó9ñ 	2Ø�M‰Mœ&Ÿ-™-¨Ó0Ô1÷	2÷	2÷ 2ð 2÷	2ð 	2ú÷	2ð 2ú÷ 2ð 2ús;   š(B<Á$B0Á&%B$ÂB0ÂB<Â$B-Â)B0Â0B9	Â5B<Â<Cc                  ó^  — t        j                  g d¢«      g} t         j                  j                  | dg¬«      }g }t	        «       5 }t        d|j                  f«      5 }|j                  t        j                  d«      «      }d}|D ]H  \  }}|j                  |«       t        j                  d|j                  «       «      \  }	||	k(  sJ ‚|dz  }ŒJ t         j                  j                  |«      } | j                  |«      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z'Try a simple do_get call with metadata.r6   rY   r;   rÜ   r   r   r�   rJ   N)r=   r>   r?   r@   rƒ   r
   r©  rz   r	   rG  r  r“   r”   r•   Úfrom_batchesr‘   )
rA   ry   Úbatchesr‘  r£  rš   r¥   rž   ÚmetadataÚ
server_idxs
             r   Útest_flight_do_get_metadatark  ÿ  s  € ô 	�‰Ò$Ó%ð€Dô �H‰H× Ñ  ¨c¨UÐ Ó3€Eà€GÜ	Ó	ð 
" 6Ü˜+ v§{¡{Ð3Ó4ð
"Ø8>Ø—‘œvŸ}™}¨SÓ1Ó2ˆØˆØ%ò 	‰OˆE�8Ø�N‰N˜5Ô!Ü Ÿ-™-¨¨h×.AÑ.AÓ.CÓD‰KˆJØ˜*Ò$Ð$Ð$Ø�1‰H‰Cð		ô
 �x‰x×$Ñ$ WÓ-ˆØ�{‰{˜5Ô!Ð!Ñ!÷
"÷ 
"÷ 
"ñ 
"ú÷ 
"ð 
"ús%   ÁD#ÁB&DÄD#ÄD 	ÄD#Ä#D,c                  óT  — g } g }t        «       5 }t        d|j                  f«      5 }|j                  t	        j
                  d«      «      }d}	 	 |j                  «       \  }}| j                  |«       t        j                  d|j                  «       «      \  }||k(  sJ ‚|dz  }ŒX# t        $ r Y nw xY w	 ddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wt        «       5 }t        d|j                  f«      5 }|j                  t	        j
                  d«      «      }d}|D ]H  \  }}|j                  |«       t        j                  d|j                  «       «      \  }||k(  sJ ‚|dz  }ŒJ 	 ddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY w| |k(  sJ ‚y)z0Verify the iterator interface works as expected.rÜ   r   r   r�   rJ   N)rƒ   r
   r©  rz   r	   rG  Ú
read_chunkr  r“   r”   r•   ÚStopIteration)	Úbatches1Úbatches2r‘  r£  rš   r¥   rž   ri  rj  s	            r   Ú1test_flight_metadata_record_batch_reader_iteratorrq    s§  € à€HØ€Hä	Ó	ð  6Ü˜+ v§{¡{Ð3Ó4ðØ8>Ø—‘œvŸ}™}¨SÓ1Ó2ˆØˆØðØ"(×"3Ñ"3Ó"5‘��xØ—‘ Ô&Ü$Ÿm™m¨D°(×2EÑ2EÓ2GÓH‘�
Ø˜jÒ(Ð(Ð(Ø�q‘�ð øô !ò ÙðúØ÷÷ ñ ú÷ ÷ ñ úô 
Ó	ð  6Ü˜+ v§{¡{Ð3Ó4ðØ8>Ø—‘œvŸ}™}¨SÓ1Ó2ˆØˆØ%ò 	‰OˆE�8Ø�O‰O˜EÔ"Ü Ÿ-™-¨¨h×.AÑ.AÓ.CÓD‰KˆJØ˜*Ò$Ð$Ð$Ø�1‰H‰Cñ		÷	÷ ñ ú÷ ÷ ñ úð �xÒÐÑsl   �C§(C ÁAB'Â&C Â'	B3Â0C Â2B3Â3C Â7	CÃ C		ÃCÃCÃ+FÄA4FÅ8	FÆF
	ÆFÆFc                  ó"  — t         j                  j                  t        j                  g d¢«      gdg¬«      } t         j                  j                  t         j                  j                  j                  ¬«      }t        |¬«      5 }t        d|j                  f«      5 }|j                  t        j                  d«      «      }|j                  «       }|j                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z2Try a simple do_get call with V4 metadata version.r6   rY   r;   r´  rv   rÜ   r   N)r=   r?   r@   r>   r¸  r¹  rº  r»  rƒ   r
   r©  rz   r	   rG  r°   r‘   )ry   re   r‘  r£  rš   rA   s         r   Útest_flight_do_get_metadata_v4rs  4  sØ   € ä�H‰H× Ñ Ü	�‰Ò%Ó	&Ð'°¨uð !ó 6€Eä�f‰f×$Ñ$ÜŸ™×/Ñ/×2Ñ2ð %ó 4€Gä	 gÔ	.ð "°&Ü˜+ v§{¡{Ð3Ó4ð"Ø8>Ø—‘œvŸ}™}¨SÓ1Ó2ˆØ�‰Ó ˆØ�{‰{˜5Ô!Ð!Ñ!÷	"÷ "÷ "ñ "ú÷ "ð "ús%   ÂDÂAC9Ã(DÃ9D	Ã>DÄDc            	      óÎ  — t        j                  g d¢«      g} t         j                  j                  | dg¬«      }t	        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      |j                  «      \  }}|5  t        |j                  d¬«      «      D ]n  \  }}t        j                  d|«      }|j!                  ||«       |j#                  «       }	|	€J ‚t        j$                  d|	j'                  «       «      \  }
||
k(  rŒnJ ‚ 	 d	d	d	«       d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z'Try a simple do_put call with metadata.r6   rY   r;   rÜ   rô   rJ   r¹   r�   N)r=   r>   r?   r@   rƒ   r
   r©  r¡   r	   ro   rp   rn   r£   r¤   r“   r—   rU  r&   r”   r•   )rA   ry   r‘  r£  r›   Úmetadata_readerr¥   rž   ri  rŸ   rj  s              r   Útest_flight_do_put_metadatarv  A  sM  € ô 	�‰Ò$Ó%ð€Dô �H‰H× Ñ  ¨c¨UÐ Ó3€Eä	Ó	ð ) 6Ü˜+ v§{¡{Ð3Ó4ð)Ø8>Ø"(§-¡-Ü×#Ñ#×,Ñ,¨RÓ0Ø�L‰Ló#Ñˆ�ð ñ 	)Ü'¨×(8Ñ(8ÀqÐ(8Ó(IÓJò )‘
��UÜ!Ÿ;™; t¨SÓ1�Ø×*Ñ*¨5°(Ô;Ø%×*Ñ*Ó,�Ø�Ð&�Ü$Ÿm™m¨D°#·.±.Ó2BÓC‘�
Ø˜jÓ(Ð(Ð(ñ)÷	)÷)÷ )ð )÷
	)ð 	)ú÷)ð )ú÷ )ð )úsC   ÁEÁ?EÂB	EÄ&EÄ*EÄ2EÅEÅEÅE	ÅEÅE$c            	      óö  — t         j                  j                  t        j                  t	        j
                  dt	        j                  «       ¬«      «      gdg¬«      } t        «       5 }t        d|j                  fd¬«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|5  t        j                   t        j"                  d	¬
«      5 }|j%                  | «       ddd«       j&                  j(                  dk(  sJ ‚| j+                  dd«      | j+                  d«      g}|D ]  }|j%                  |«       Œ 	 ddd«       t         j,                  j/                  | g«      }|j1                  t        j2                  d«      «      j5                  «       }	||	k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒÓxY w# 1 sw Y   Œ€xY w# 1 sw Y   Œ*xY w# 1 sw Y   yxY w)z+Try a simple do_put call with a size limit.i   )ÚdtyperY   r;   rÜ   i   )Úwrite_size_limit_bytesrô   zexceeded soft limitr¶  Nr   i€  r   )r=   r’   r@   r>   ÚnpÚonesr5  r©   r
   r©  r¡   r	   ro   rp   rn   rH  rI  ÚFlightWriteSizeExceededErrorrV  rc  ÚlimitÚslicer?   rg  rz   rG  r°   )
Úlarge_batchr‘  r£  r›   ru  ÚexcinfoÚsmaller_batchesrž   r  Úactuals
             r   Útest_flight_do_put_limitrƒ  W  sÁ  € ô —.‘.×,Ñ,Ü
�‰”—‘˜¤B§H¡H£JÔ/Ó0ð.àˆUð -ó €Kô 
Ó	ð "˜vÜ�k 6§;¡;Ð/Ø,0ô	2ð"à5;Ø"(§-¡-Ü×#Ñ#×,Ñ,¨RÓ0Ø×Ñó# Ñˆ�ð ñ 
	*Ü—‘œv×BÑBØ%:ô<ð 0Ø?FØ×"Ñ" ;Ô/÷0ð —=‘=×&Ñ&¨$Ò.Ð.Ð.à×!Ñ! ! SÓ)Ø×!Ñ! #Ó&ðˆOð )ò *�Ø×"Ñ" 5Õ)ñ*÷
	*ô —8‘8×(Ñ(¨+¨Ó7ˆØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ˜6Ò!Ð!Ñ!÷'"÷ "ð "÷0ð 0ú÷
	*ð 
	*ú÷"ð "ú÷ "ð "úsV   Á(G/Â?G#Ã&GÃ'G	Ã9AGÅA!G#Æ:G/ÇGÇGÇG ÇG#Ç#G,	Ç(G/Ç/G8c                  ó–  — t        «       5 } t        d| j                  f«      5 }|j                  t	        j
                  d«      «      }|j                  «        t        j                  t        j                  d¬«      5  |j                  «        ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z4Test canceling a DoGet operation on the client side.rÜ   r_   z(?i).*cancel.*r¶  N)r]   r
   r©  rz   r	   rG  r&  rH  rI  r-  rm  )r‘  r£  rš   s      r   Útest_cancel_do_getr…  t  s§   € ô 
Ó	ð   6Ü˜+ v§{¡{Ð3Ó4ð Ø8>Ø—‘œvŸ}™}¨WÓ5Ó6ˆØ�‰ŒÜ�]‰]œ6×6Ñ6Ø!1ô3ñ 	 à×ÑÔ÷	 ÷	 ÷  ð  ÷	 ð 	 ú÷	 ð  ú÷  ð  ús;   ‹B?£AB3Á=B'ÂB3ÂB?Â'B0Â,B3Â3B<	Â8B?Â?Cc                  óÈ  ‡‡‡‡‡— t        «       5 } t        d| j                  f«      5 }|j                  t	        j
                  d«      «      Št        j                  «       Št        j                  «       Št        j                  «       Št        j                  «       Šˆˆˆˆˆfd„}t        j                  |d¬«      }|j                  «        ‰j                  d¬«       ‰j                  «        ‰j                  «        |j                  d¬«       ‰5  ‰j                  «       sJ ‚	 d	d	d	«       d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z5Test canceling a DoGet operation from another thread.rÜ   r_   c                  ó  •— ‰j                  «        ‰j                  «        ‰j                  d¬«       	 ‰j                  «        y # t        j                  $ r+ ‰5  ‰ j                  «        d d d «       Y y # 1 sw Y   Y y xY ww xY w)Nr8   r�  )rm  ÚsetÚwaitr	   r-  )Úraised_proper_exceptionÚread_first_messagerš   Úresult_lockÚstream_canceleds   €€€€€r   Ú
block_readz/test_cancel_do_get_threaded.<locals>.block_read�  sv   ø€ Ø×ÑÔØ×"Ñ"Ô$Ø× Ñ ¨Ð Ô+ð2Ø×!Ñ!Õ#øÜ×.Ñ.ò 2Ø ñ 2Ø+×/Ñ/Ô1÷2÷ 2ó 2úð2ús)   µA ÁBÁA6Á,BÁ6B 	Á;BÂ BTrš  r8   r�  rJ   N)r  r
   r©  rz   r	   rG  rŸ  ÚEventÚLockr   r¡  r‰  r&  rˆ  ÚjoinÚis_set)	r‘  r£  rŽ  r¤  rŠ  r‹  rš   rŒ  r�  s	       @@@@@r   Útest_cancel_do_get_threadedr“  €  s  ü€ ô 
Ó	ð 4˜vÜ˜+ v§{¡{Ð3Ó4ð4Ø8>Ø—‘œvŸ}™}¨WÓ5Ó6ˆä&Ÿ_™_Ó.ÐÜ#Ÿ/™/Ó+ˆÜ—n‘nÓ&ˆÜ"+§/¡/Ó"3Ð÷	2ð 	2ô ×!Ñ!¨¸DÔAˆØ�‰ŒØ×Ñ¨ÐÔ*Ø�‰ŒØ×ÑÔØ�‰˜AˆÔàñ 	4Ø*×1Ñ1Ô3Ð3Ñ3÷	4÷54÷ 4ð 4÷4	4ð 	4ú÷54ð 4ú÷ 4ð 4ús;   �E¨C+EÄE Ä'EÄ/EÅ E	ÅEÅE	ÅEÅE!c                  ó  — t        «       5 } t        d| j                  f«      5 }|j                  t	        j
                  dd«      «      }t        |«      j                  dk(  sJ ‚~d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrÜ   rÛ  r   r;  )rÓ  r
   r©  rÊ   r	   rD  r$  rÞ  )r‘  r£  rã  s      r   Útest_streaming_do_actionr•  ¢  s~   € Ü	Ó	ð  Ü˜+ v§{¡{Ð3Ó4ðØ8>Ø×"Ñ"¤6§=¡=°¸CÓ#@ÓAˆÜ�G‹}×!Ñ! VÒ+Ð+Ð+à÷÷ ÷ ñ ú÷ ð ús#   ‹B£AA5Á$BÁ5A>	Á:BÂB
c                  ó 	  — t        j                  dd«      } | t         j                  j                  | j                  «       «      k(  sJ ‚t        j                  d«      }|t         j                  j                  |j                  «       «      k(  sJ ‚t        j
                  d«      }|t         j
                  j                  |j                  «       «      k(  sJ ‚t        j                  dd«      }|t         j                  j                  |j                  «       «      k(  sJ ‚t        j                  t        j                  dt        j                  «       fg«      «      }|t         j                  j                  |j                  «       «      k(  sJ ‚t         j                  j                  d«      }|t         j                  j                  |j                  «       «      k(  sJ ‚t         j                  j                  dd	d
«      }|t         j                  j                  |j                  «       «      k(  sJ ‚t        j                  t        j                  dt        j                  «       fg«      |t        j                  ddg«      t        j                  dt         j                   j#                  dd«      gt        j$                  d«      j'                  t        j(                  d«      «      d«      gdddd«      }t         j                  j                  |j                  «       «      }|j                  |j                  k(  sJ ‚|j*                  |j*                  k(  sJ ‚|j,                  |j,                  k(  sJ ‚|j.                  |j.                  k(  sJ ‚|j0                  |j0                  k(  sJ ‚|j2                  |j2                  k(  sJ ‚|j4                  |j4                  k(  sJ ‚t        j                  |dt         j                   j#                  dd«      gt        j$                  d«      j'                  t        j(                  d«      «      d«      }|t         j                  j                  |j                  «       «      k(  sJ ‚y)z(Make sure serializable types round-trip.Úaction1s   action1-bodyrD   s   result1Ú	username1Ú	password1rY   rÀ  rZ   z
test.arrowr   rÛ   rÜ   rÝ   rÞ   rß   r>  rJ   rà   Tr?  r<  r=  N)r	   rD  rp  r‚  rG  rF  ro  rë   r=   rn   rá   ro   rE  rp   rm   râ   rã   rä   rå   ræ   rç   r™   ry  rv  r{  rT  rË  )	rÉ   rw   rd  r  Úschema_resultÚdescrì   Úinfo2rV  s	            r   Útest_roundtrip_typesr�  «  s�  € ä�]‰]˜9 oÓ6€FØ”V—]‘]×.Ñ.¨v×/?Ñ/?Ó/AÓBÒBÐBÐBä�]‰]˜5Ó!€FØ”V—]‘]×.Ñ.¨v×/?Ñ/?Ó/AÓBÒBÐBÐBä�]‰]˜:Ó&€FØ”V—]‘]×.Ñ.¨v×/?Ñ/?Ó/AÓBÒBÐBÐBä×!Ñ! +¨{Ó;€JØœ×)Ñ)×5Ñ5°j×6JÑ6JÓ6LÓMÒMÐMÐMä×'Ñ'¬¯	©	°C¼¿¹»Ð3DÐ2EÓ(FÓG€MØœF×/Ñ/×;Ñ;Ø×ÑÓ!ó#ò #ð #ð #ô ×"Ñ"×.Ñ.¨vÓ6€DØ”6×*Ñ*×6Ñ6°t·~±~Ó7GÓHÒHÐHÐHä×"Ñ"×+Ñ+¨C°°lÓC€DØ”6×*Ñ*×6Ñ6°t·~±~Ó7GÓHÒHÐHÐHä×ÑÜ
�	‰	�CœŸ™›Ð$Ð%Ó&Øä×!Ñ! #¨ Ó7Ü×!Ñ!ØÜ—‘×-Ñ-¨k¸4Ó@ÐAÜ—	‘	Ð9Ó:×?Ñ?ÄÇÁÈTÓ@RÓSØ(ó	ð	
ð 	
Ø
ØØó€Dô" ×Ñ×)Ñ)¨$¯.©.Ó*:Ó;€EØ�;‰;˜%Ÿ,™,Ò&Ð&Ð&Ø�?‰?˜e×.Ñ.Ò.Ð.Ð.Ø×Ñ˜u×0Ñ0Ò0Ð0Ð0Ø×Ñ ×!4Ñ!4Ò4Ð4Ð4Ø�<‰<˜5Ÿ=™=Ò(Ð(Ð(Ø×Ñ × 2Ñ 2Ò2Ð2Ð2Ø�>‰>˜UŸ_™_Ò,Ð,Ð,ä×$Ñ$ØØ	œŸ™×4Ñ4°[À$ÓGÐHÜ
�	‰	Ð'Ó(×-Ñ-¬b¯l©l¸3Ó.?Ó@Ø ó	€Hð ”v×,Ñ,×8Ñ8¸×9KÑ9KÓ9MÓNÒNÐNÑNr   c                  ó’  — t        «       5 } t        d| j                  f«      5 }t         j                  «       j	                  «       D ]S  \  }}t        j                  |d¬«      5  t        |j                  t        j                  |d«      «      «       ddd«       ŒU t        j                  t        j                  d¬«      5  t        |j                  «       «       ddd«       t        j                  g d¢«      g}t        j                  j!                  |dg¬«      }t        j                  t        j"                  t        j$                  t        j&                  t        j(                  d	œ}|j	                  «       D ]î  \  }}t        j                  |d¬«      5  |j+                  t        j,                  j/                  |«      |j0                  «      \  }	}
|	j3                  |«       |	j5                  «        ddd«       t        j                  |d¬«      5  |j+                  t        j,                  j/                  |«      |j0                  «      \  }	}
|	j5                  «        ddd«       Œð 	 ddd«       ddd«       y# 1 sw Y   �ŒBxY w# 1 sw Y   �Œ²xY w# 1 sw Y   Œ£xY w# 1 sw Y   �Œ3xY w# 1 sw Y   ŒExY w# 1 sw Y   yxY w)
z:Ensure that Flight errors propagate from server to client.rÜ   z.*foo.*r¶  r   Nr6   rY   r;   )r$  r%  r&  r'  r(  )r"  r
   r©  r2  r�  rH  rI  rª  rÊ   r	   rD  r+  rt   r=   r>   r?   r@   r,  r-  r.  r/  r¡   ro   rE  rn   rM  r¯  )r‘  r£  ÚargÚexc_typerA   ry   Ú
exceptionsr9  Ú	exceptionr›   rš   s              r   Útest_roundtrip_errorsr£  æ  sJ  € ä	Ó	ð ! Ü˜+ v§{¡{Ð3Ó4ð!Ø8>ä.×:Ñ:Ó<×BÑBÓDò 	@‰MˆC�Ü—‘˜x¨yÔ9ñ @Ü�V×%Ñ%¤f§m¡m°C¸Ó&=Ó>Ô?÷@ð @ð	@ô �]‰]œ6×5Ñ5¸YÔGñ 	(Ü�×$Ñ$Ó&Ô'÷	(ô —‘Ò,Ó-Ð.ˆÜ—‘×$Ñ$ T°#°Ð$Ó7ˆô ×2Ñ2Ü×2Ñ2Ü×1Ñ1Ü%×@Ñ@Ü"×:Ñ:ñ
ˆ
ð #-×"2Ñ"2Ó"4ò 	ÑˆG�Yä—‘˜y°	Ô:ñ Ø!'§¡Ü×+Ñ+×7Ñ7¸Ó@Ø—L‘Ló""‘�˜ð ×"Ñ" 5Ô)Ø—‘”÷ô —‘˜y°	Ô:ñ Ø!'§¡Ü×+Ñ+×7Ñ7¸Ó@Ø—L‘Ló""‘�˜ð —‘”÷	ð ñ	÷)!÷ !ð !÷@ñ @ú÷	(ñ 	(ú÷ ð ú÷ñ ú÷;!ð !ú÷ !ð !ús†   ‹J=£A J1Á#/I>	Â/J1ÃJÃB=J1ÆAJ	Ç6J1ÈAJ$	É"
J1É-J=É>JÊJ1ÊJÊJ1ÊJ!ÊJ1Ê$J.Ê)J1Ê1J:	Ê6J=Ê=Kc                  ó  ‡‡— t        j                  g d¢«      g} t         j                  j                  | dg¬«      }t	        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      |j                  «      \  }ŠdgŠˆˆfd„}t        j                  |¬«      }|j                  «        |j                  d	¬
«      }|5  t!        |«      D ]-  \  }}	t#        j$                  d|«      }
|j'                  |	|
«       Œ/ |j)                  «        |j+                  «        ddd«       ‰d   t-        |«      k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   Œ.xY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z7Ensure that separate threads can read/write on a DoPut.r6   rY   r;   rÜ   rô   r   c                  ód   •— ‰j                  «       �‰ dxx   dz  cc<   ‰j                  «       �Œy y )Nr   rJ   )r&   )Úcountru  s   €€r   Ú_reader_threadz:test_do_put_independent_read_write.<locals>._reader_thread  s0   ø€ Ø!×&Ñ&Ó(Ð4Ø�a“˜A‘“ð "×&Ñ&Ó(Ó4r   ©r›  rJ   r¹   r�   N)r=   r>   r?   r@   rƒ   r
   r©  r¡   r	   ro   rp   rn   rŸ  r   r¡  r¤   r£   r“   r—   rU  Údone_writingr‘  r«  )rA   ry   r‘  r£  r›   r§  r¤  rh  r¥   rž   ri  r¦  ru  s              @@r   Ú"test_do_put_independent_read_writerª    sj  ù€ ô 	�‰Ò$Ó%ð€Dô �H‰H× Ñ  ¨c¨UÐ Ó3€Eä	Ó	ð ( 6Ü˜+ v§{¡{Ð3Ó4ð(Ø8>Ø"(§-¡-Ü×#Ñ#×,Ñ,¨RÓ0Ø�L‰Ló#Ñˆ�ð �ˆõ	ô ×!Ñ!¨Ô8ˆØ�‰Œà×"Ñ"°Ð"Ó3ˆØñ 	Ü'¨Ó0ò <‘
��UÜ!Ÿ;™; t¨SÓ1�Ø×*Ñ*¨5°(Õ;ð<ð ×ÑÔ!à�K‰KŒM÷	ð �Q‰xœ3˜w›<Ò'Ð'Ñ'÷5(÷ (ð (÷ 	ð 	ú÷!(ð (ú÷ (ð (ús>   ÁF ÁB E4ÃAE(Ä;E4ÅF Å(E1Å-E4Å4E=	Å9F Æ F	c            
      óx  — t        dt        «       i¬«      5 } t        d| j                  f«      5 }t	        |j                  t        j                  dd«      «      «      }t        |«      dk(  sJ ‚|d   j                  j                  «       }d|k(  sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z@Ensure that server middleware run on the same thread as the RPC.rÀ  rC  rÜ   r  r   rJ   r   s   right valueN)rò  rï  r
   r©  rª  rÊ   r	   rD  r«  rÞ  r•   )r‘  r£  rã  rc  s       r   Ú"test_server_middleware_same_threadr¬  3  s±   € ä	ØÔ-Ó/ð(ô 
ð 'à
Ü˜+ v§{¡{Ð3Ó4ð'ð 9?Ü�v×'Ñ'¬¯©°g¸sÓ(CÓDÓEˆÜ�7‹|˜qÒ Ð Ð Ø˜‘
—‘×*Ñ*Ó,ˆØ Ò&Ð&Ñ&÷'÷ '÷ 'ñ 'ú÷ 'ð 'ús#   —B0¯A#B$ÂB0Â$B-	Â)B0Â0B9c                  ó   — t        dt        «       i¬«      5 } t        d| j                  f«      5 }t	        j
                  t        j                  «      5  t        |j                  «       «       ddd«       t	        j
                  t        j                  «      5  t        |j                  t        j                  dd«      «      «       ddd«       t        d| j                  ft        «       g¬«      }t        |j                  t        j                  dd«      «      «      }d|j                   j#                  «       k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒäxY w# 1 sw Y   Œ–xY w# 1 sw Y   Œ*xY w# 1 sw Y   yxY w)z-Test rejecting an RPC with server middleware.rÀ  rC  rÜ   Nr   r3  )rò  rú  r
   r©  rH  rI  r=   ÚArrowNotImplementedErrorrª  r½   r	   r.  rÊ   rD  r  r$  rÞ  r•   )r‘  r£  Úresponses      r   Útest_middleware_rejectr°  ?  s=  € ä	ØÔ4Ó6ð(ô 
ð 9à
Ü˜+ v§{¡{Ð3Ó4ð9ð 9?ä�]‰]œ2×6Ñ6Ó7ñ 	(Ü�×$Ñ$Ó&Ô'÷	(ô �]‰]œ6×<Ñ<Ó=ñ 	<Ü�×!Ñ!¤&§-¡-°°SÓ"9Ó:Ô;÷	<ô Ø˜&Ÿ+™+Ð&Ü<Ó>Ð?ô
ˆô ˜×(Ñ(¬¯©°s¸CÓ)@ÓAÓBˆØ˜hŸm™m×6Ñ6Ó8Ò8Ð8Ñ8÷#9÷ 9ð 9÷
	(ð 	(ú÷	<ð 	<ú÷9ð 9ú÷ 9ð 9úsS   —E4¯$E(ÁEÁ-+E(Â/EÃA7E(Ä?E4ÅEÅE(ÅE%Å!E(Å(E1	Å-E4Å4E=c                  óÜ  — t        «       } t        «       }t        d| i¬«      5 }t        d|j                  f|g¬«      5 }t
        j                  j                  d«      }t        j                  t        «      5  t        |j                  «       «       ddd«       t        j                  t        «      5  |j                  |«       ddd«       t        j                  t        «      5  |j                  |«       ddd«       t        j                  t        «      5  |j                  t        j                   d«      «       ddd«       t        j                  t        «      5  |j#                  |t%        j&                  g «      «      \  }}|j)                  «        ddd«       t        j                  t        «      5  t        |j+                  t        j,                  dd«      «      «       ddd«       t        j                  t        «      5  t        |j/                  «       «       ddd«       t        j                  t        «      5  |j1                  |«      \  }}|j)                  «        ddd«       t
        j2                  j4                  t
        j2                  j6                  t
        j2                  j8                  t
        j2                  j:                  t
        j2                  j<                  t
        j2                  j>                  t
        j2                  j@                  t
        j2                  jB                  g}| jD                  |k(  sJ ‚|jD                  |k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   �ŒßxY w# 1 sw Y   �Œ¹xY w# 1 sw Y   �Œ“xY w# 1 sw Y   �ŒZxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒÊxY w# 1 sw Y   �ŒœxY w# 1 sw Y   �ŒcxY w# 1 sw Y   ŒzxY w# 1 sw Y   yxY w)z/Test that middleware records methods correctly.rÀ  rC  rÜ   r   N)#r  r  r   r
   r©  r	   ro   rE  rH  rI  rÇ   rª  rt   ré   rí   rz   rG  r¡   r=   rn   r¯  rÊ   rD  r½   r´   rþ  ÚLIST_FLIGHTSÚGET_FLIGHT_INFOÚ
GET_SCHEMAÚDO_GETÚDO_PUTÚ	DO_ACTIONrÿ  ÚDO_EXCHANGEr  )Úserver_middlewareÚclient_middlewarer‘  r£  r™   r›   rõ  r  s           r   Útest_middleware_mappingr»  U  sù  € ä8Ó:ÐÜ8Ó:ÐÜ	 fÐ.?Ð%@Ô	Að %5ÀVÜØ˜&Ÿ+™+Ð&Ø)Ð*ô	ð%5ð 
ä×,Ñ,×8Ñ8¸Ó=ˆ
Ü�]‰]Ô.Ó/ñ 	(Ü�×$Ñ$Ó&Ô'÷	(ä�]‰]Ô.Ó/ñ 	/Ø×"Ñ" :Ô.÷	/ä�]‰]Ô.Ó/ñ 	*Ø×Ñ˜jÔ)÷	*ä�]‰]Ô.Ó/ñ 	.Ø�M‰Mœ&Ÿ-™-¨Ó,Ô-÷	.ä�]‰]Ô.Ó/ñ 	ØŸ™ j´"·)±)¸B³-Ó@‰IˆF�AØ�L‰LŒN÷	ô �]‰]Ô.Ó/ñ 	<Ü�×!Ñ!¤&§-¡-°°SÓ"9Ó:Ô;÷	<ä�]‰]Ô.Ó/ñ 	(Ü�×$Ñ$Ó&Ô'÷	(ä�]‰]Ô.Ó/ñ 	Ø×*Ñ*¨:Ó6‰IˆF�AØ�L‰LŒN÷	ô
 ×Ñ×,Ñ,Ü×Ñ×/Ñ/Ü×Ñ×*Ñ*Ü×Ñ×&Ñ&Ü×Ñ×&Ñ&Ü×Ñ×)Ñ)Ü×Ñ×,Ñ,Ü×Ñ×+Ñ+ð	
ˆð !×(Ñ(¨HÒ4Ð4Ð4Ø ×(Ñ(¨HÒ4Ð4Ñ4÷K%5÷ %5ð %5÷	(ñ 	(ú÷	/ñ 	/ú÷	*ñ 	*ú÷	.ñ 	.ú÷	ñ 	ú÷	<ñ 	<ú÷	(ñ 	(ú÷	ñ 	ú÷-%5ð %5ú÷ %5ð %5úsã   £O"¾9OÁ7M.Â!OÂ2M;Ã!OÃ%NÃ7!OÄ%NÄ=!OÅ9N"Æ!OÆ8/N/Ç'!OÈN<È"!OÉ%O	É(C4OÍO"Í.M8Í3OÍ;NÎ OÎNÎOÎNÎOÎ"N,Î'OÎ/N9Î4OÎ<OÏOÏ	OÏOÏO	ÏO"Ï"O+c            
      ó‚  — t        «       5 } t        d| j                  f«      5 }	 t        |j	                  t        j                  dd«      «      «       J ‚# t
        j                  $ r+}|j                  €J ‚|j                  }|dk(  sJ ‚Y d }~nd }~ww xY w	 d d d «       n# 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w)NrÜ   r4  r   r5  )	r"  r
   r©  rª  rÊ   r	   rD  r/  Ú
extra_info)r‘  r£  ÚeÚeis       r   Útest_extra_inforÀ  �  s³   € Ü	Ó	ð 5 Ü˜+ v§{¡{Ð3Ó4ð5Ø8>ð	5Ü�×!Ñ!¤&§-¡-°
¸CÓ"@ÓAÔBØ�5øÜ×-Ñ-ò 	5Ø—<‘<Ð+Ð+Ð+Ø—‘ˆBØÐ4Ò4Ð4Õ4ûð	5úð 5÷5÷ 5ñ 5ú÷ 5÷ 5ñ 5úsE   ‹B5£B ¥0AÁBÁ(!BÂ	B ÂBÂB Â	B5Â B)	Â%B5Â5B>c                  ó¸  — t        «       } t        «       }t        | d   d   gd| d   ¬«      5 }t        d|j                  f| d   | d   d   j
                  | d   d   j                  ¬«      5 }|j                  t        j                  d«      «      j                  «       }|j                  |«      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z!Test mutual TLS (mTLS) with gRPC.r2   r   Tr1   )rT  Úverify_clientÚroot_certificatesrÜ   )rZ  Ú
cert_chainÚprivate_keyr_   N)r4   rB   r]   r
   r©  r/   r0   rz   r	   rG  r°   r‘   )rW  ry   r=  r£  rA   s        r   Ú	test_mtlsrÆ  �  sà   € ô Ó€EÜÓ€Eä	Ø# NÑ3°AÑ6Ð7ØØ# KÑ0ô
2ð 
"ð 67ÜØ˜!Ÿ&™&Ð!Ø  Ñ-Ø˜^Ñ,¨QÑ/×4Ñ4Ø˜nÑ-¨aÑ0×4Ñ4ô		6ð	
"ð :@Ø�}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ñ!÷
"÷ 
"÷ 
"ñ 
"ú÷ 
"ð 
"ús$   ­?CÁ,ACÂ3CÃC	Ã	CÃCc                  óÞ  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        «       5 }t        d|j                  f«      5 }t        j                  j                  d«      }|j                  |«      \  }}|5  |j                  «       }ddd«       | k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   Œ"xY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)rJ  r   rK  rY   r;   rÜ   r?  N)r=   r?   r@   r>   r  r;  r
   r©  r	   ro   rE  r´   r°   )r  r‘  r£  r™   r›   rš   ry   s          r   Útest_doexchange_getrÈ     sá   € ä�x‰x×#Ñ#Ü
�‰”�q˜)Ó$Ó%ð%àˆUð $ó €Hô 
Ó	ð ! 6Ü˜+ v§{¡{Ð3Ó4ð!Ø8>Ü×,Ñ,×8Ñ8¸Ó@ˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 	&Ø—O‘OÓ%ˆE÷	&à˜5Ò Ð Ñ ÷!÷ !ð !÷	&ð 	&ú÷	!ð !ú÷ !ð !ús<   ÁC#Á#6CÂCÂ*CÂ:C#ÃCÃCÃC 	ÃC#Ã#C,c                  ó4  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } | j                  d¬«      }t        «       5 }t        d|j                  f«      5 }t        j                  j                  d«      }|j                  |«      \  }}|5  |j                  | j                  «       |D ]  }|j                  |«       Œ |j!                  «        |j#                  «       }|j$                  �J ‚t'        t)        |«      «      j+                  d
«      }	|j,                  |	k(  sJ ‚|j.                  j0                  dk(  sJ ‚	 d	d	d	«       d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)rO  r   rK  rY   r;   é   r¹   rÜ   r@  NrÂ   )r=   r?   r@   r>   r  r¤   r;  r
   r©  r	   ro   rE  r´   rL  rn   rV  r©  rm  rA   rQ  r«  rÆ   rT  r�   r�   )
rA   rh  r‘  r£  r™   r›   rš   rž   r³   Úexpected_bufs
             r   Útest_doexchange_putrÌ  ¯  ss  € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dð �o‰o¨CˆoÓ0€Gä	Ó	ð 2 6Ü˜+ v§{¡{Ð3Ó4ð2Ø8>Ü×,Ñ,×8Ñ8¸Ó@ˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 
	2Ø�L‰L˜Ÿ™Ô%Ø ò *�Ø×"Ñ" 5Õ)ð*à×ÑÔ!Ø×%Ñ%Ó'ˆEØ—:‘:Ð%Ð%Ð%Üœs 7›|Ó,×3Ñ3°GÓ<ˆLØ×%Ñ%¨Ò5Ð5Ð5à—<‘<×,Ñ,°Ò1Ð1Ñ1÷
	2÷	2÷ 2ð 2÷
	2ð 
	2ú÷	2ð 2ú÷ 2ð 2ús=   ÁFÁ56FÂ+B1E6ÅFÅ%FÅ6E?Å;FÆF	ÆFÆFc                  ó  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } | j                  d¬«      }t        «       5 }t        d|j                  f«      5 }t        j                  j                  d«      }|j                  |«      \  }}|5  t	        d	«      D ]\  }t        |«      j                  d
«      }|j                  |«       |j!                  «       }	|	j"                  �J ‚|	j$                  |k(  rŒ\J ‚ |j'                  | j(                  «       d}
|D ]}  }|j+                  |«       |j(                  | j(                  k(  sJ ‚|j!                  «       }	|	j"                  |k(  sJ ‚|	j$                  �J ‚|
dz  }
|j,                  j.                  |
k(  rŒ}J ‚ t1        |«      D ]ƒ  \  }}t        |«      j                  d
«      }|j3                  ||«       |j!                  «       }	|	j"                  |k(  sJ ‚|	j$                  |k(  sJ ‚|
dz  }
|j,                  j.                  |
k(  rŒƒJ ‚ 	 ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zTry a DoExchange echo server.r   rK  rY   r;   rÊ  r¹   rÜ   r>  r9   rÂ   NrJ   )r=   r?   r@   r>   r  r¤   r;  r
   r©  r	   ro   rE  r´   rQ  rÆ   rP  rm  rA   rT  rL  rn   rV  r�   r˜   r£   rU  )rA   rh  r‘  r£  r™   r›   rš   ÚirŸ   r³   rR  rž   s               r   Útest_doexchange_echorÏ  Ç  s}  € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dð �o‰o¨CˆoÓ0€Gä	Ó	ð !F 6Ü˜+ v§{¡{Ð3Ó4ð!FØ8>Ü×,Ñ,×8Ñ8¸ÓAˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 	Fä˜2“Yò 1�Ü˜!“f—m‘m GÓ,�Ø×%Ñ% cÔ*Ø×)Ñ)Ó+�Ø—z‘zÐ)Ð)Ð)Ø×)Ñ)¨SÓ0Ð0Ð0ð1ð �L‰L˜Ÿ™Ô%ØˆKØ ò F�Ø×"Ñ" 5Ô)Ø—}‘}¨¯©Ò3Ð3Ð3Ø×)Ñ)Ó+�Ø—z‘z UÒ*Ð*Ð*Ø×)Ñ)Ð1Ð1Ð1Ø˜qÑ �Ø—|‘|×6Ñ6¸+ÓEÐEÐEðFô & gÓ.ò F‘��5Ü˜!“f—m‘m GÓ,�Ø×*Ñ*¨5°#Ô6Ø×)Ñ)Ó+�Ø—z‘z UÒ*Ð*Ð*Ø×)Ñ)¨SÒ0Ð0Ð0Ø˜qÑ �Ø—|‘|×6Ñ6¸+ÓEÐEÐEñF÷-	F÷	!F÷ !Fð !F÷	Fð 	Fú÷	!Fð !Fú÷ !Fð !FúsQ   ÁI8Á56I,Â+A'I ÄBI Æ2BI ÉI ÉI,ÉI8É I)É%I,É,I5	É1I8É8Jc                  óZ  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } | j                  d¬«      }t         j                  j                  t         j                  j                  j                  ¬«      }t        |¬«      5 }t        d	|j                  f«      5 }t        j                  j                  d
«      }|j!                  |«      \  }}|5  |j#                  | j$                  |¬«       |D ]]  }|j'                  |«       |j$                  | j$                  k(  sJ ‚|j)                  «       }	|	j*                  |k(  sJ ‚|	j,                  €Œ]J ‚ 	 ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z;Try a DoExchange echo server using the V4 metadata version.r   rK  rY   r;   rÊ  r¹   r´  rv   rÜ   r>  N)r=   r?   r@   r>   r  r¤   r¸  r¹  rº  r»  r;  r
   r©  r	   ro   rE  r´   rL  rn   rV  rm  rA   rT  )
rA   rh  re   r‘  r£  r™   r›   rš   rž   r³   s
             r   Útest_doexchange_echo_v4rÑ  ò  s~  € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dð �o‰o¨CˆoÓ0€Gä�f‰f×$Ñ$ÜŸ™×/Ñ/×2Ñ2ð %ó 4€Gä	 gÔ	.ð 2°&Ü˜+ v§{¡{Ð3Ó4ð2Ø8>Ü×,Ñ,×8Ñ8¸ÓAˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 	2à�L‰L˜Ÿ™¨gˆLÔ6Ø ò 2�Ø×"Ñ" 5Ô)Ø—}‘}¨¯©Ò3Ð3Ð3Ø×)Ñ)Ó+�Ø—z‘z UÒ*Ð*Ð*Ø×)Ñ)Ñ1Ð1Ð1ñ2÷	2÷	2÷ 2ð 2÷	2ð 	2ú÷	2ð 2ú÷ 2ð 2úsC   Â!F!Â96FÃ/A<F	Å,F	Å0FÅ8F!Æ	FÆFÆF	ÆF!Æ!F*c            
      óR  — t         j                  j                  t        j                  t	        dd«      «      t        j                  t	        dd«      «      t        j                  t	        dd«      «      gg d¢¬«      } t         j                  j                  t        j                  t	        d	d
d	«      «      gdg¬«      }t        «       5 }t        d|j                  f«      5 }t        j                  j                  d«      }|j                  |«      \  }}|5  |j                  | j                  «       |j                  | «       |j                  «        |j!                  «       }ddd«       |k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   Œ"xY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z!Transform a table with a service.r   r¸   rJ   i  rK   i  )rY   rZ   Úcr;   rL   i  rY  rÜ   rA  N)r=   r?   r@   r>   r  r;  r
   r©  r	   ro   rE  r´   rL  rn   rM  r©  r°   )rA   r  r‘  r£  r™   r›   rš   ry   s           r   Útest_doexchange_transformrÔ  
	  sj  € ä�8‰8×ÑÜ
�‰”�q˜$“Ó Ü
�‰”�q˜$“Ó Ü
�‰”�q˜$“Ó ð!ò ð	  ó €Dô
 �x‰x×#Ñ#Ü
�‰”�q˜,¨Ó*Ó+ð%àˆWð $ó €Hô 
Ó	ð 	! 6Ü˜+ v§{¡{Ð3Ó4ð	!Ø8>Ü×,Ñ,×8Ñ8¸ÓFˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 	&Ø�L‰L˜Ÿ™Ô%Ø×Ñ˜tÔ$Ø×ÑÔ!Ø—O‘OÓ%ˆE÷		&ð
 ˜5Ò Ð Ñ ÷	!÷ 	!ð 	!÷	&ð 	&ú÷		!ð 	!ú÷ 	!ð 	!ús=   Ã	FÃ!6FÄAFÅ$FÅ4FÆFÆ
FÆF	ÆFÆF&c            
      óÀ  — t        dt        «       i¬«      5 } t        «       }t        d| j                  f|g¬«      5 }t        |j                  t        j                  dd«      «      «      }|j                  j                  «       j                  d«      }t        j                  |«      }t        j                  j!                  «       D ]l  \  }}|j#                  «       }t%        |t&        «      r|j                  d«      }|j)                  |«      |k(  sJ ‚|j*                  j)                  |«      |k(  rŒlJ ‚ 	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)rö  rÀ  rC  rÜ   r   rÂ   ÚasciiN)rõ  r'  r  r
   r©  r$  rÊ   r	   rD  rÞ  r•   rÄ  ÚastÚliteral_evalr  r#  r�  r   r�  Úbytesr   r  )r‘  r¡  r£  r¯  Úraw_headersrø  ÚheaderrÆ  s           r   Útest_middleware_multi_headerrÜ  !	  sC  € ä	 ØÔ2Ó4ð-ô 
ð Bà
Ü4Ó6ˆÜØ˜fŸk™kÐ*Ø#˜9ô&ð 	Bà)/Ü˜F×,Ñ,¬V¯]©]¸3ÀÓ-DÓEÓFˆHà"Ÿ-™-×2Ñ2Ó4×;Ñ;¸GÓDˆKÜ ×-Ñ-¨kÓ:ˆNä"=×"FÑ"F×"LÑ"LÓ"Nò B‘�˜ØŸ™›�Ü˜f¤eÔ,Ø#Ÿ]™]¨7Ó3�FØ%×)Ñ)¨&Ó1°VÒ;Ð;Ð;Ø×+Ñ+×/Ñ/°Ó7¸6ÓAÐAÐAñB÷	B÷	Bð B÷	Bð 	Bú÷	Bð Bús)   —%E¼C6EÄ3EÄ7EÅE	ÅEÅEc                  óØ  — t        «       } t        | d   ¬«      5 }dg}t        j                  d|j                  f| d   |¬«      }t        j                  t        j                  «      5  |j                  t        j                  d«      «       ddd«       |j                  «        d	g}t        j                  d|j                  f| d   |¬«      }t        j                  t        j                  t        j                  f«      5  |j                  t        j                  d«      «       ddd«       |j                  «        ddd«       y# 1 sw Y   Œ¼xY w# 1 sw Y   Œ.xY w# 1 sw Y   yxY w)
z$Test setting generic client options.r2   rS  )zgrpc.ssl_target_name_overriderc  rÜ   r1   )rZ  Úgeneric_optionsr_   N)zgrpc.max_receive_message_lengthé    )r4   r]   r	   r¨  r©  rH  rI  rU  rz   rG  r¯  r=   r0  r-  )rW  r=  re   r£  s       r   Útest_generic_optionsrà  7	  s$  € ô Ó€Eä	¨u°^Ñ/DÔ	Eð ÈàDÐEˆÜ—‘ ¨a¯f©fÐ 5Ø/4°[Ñ/AØ07ô9ˆô �]‰]œ6×8Ñ8Ó9ñ 	2Ø�M‰Mœ&Ÿ-™-¨Ó0Ô1÷	2à�‰Œà:Ð;ˆÜ—‘ ¨a¯f©fÐ 5Ø/4°[Ñ/AØ07ô9ˆô �]‰]œBŸO™O¬V×-HÑ-HÐIÓJñ 	2Ø�M‰Mœ&Ÿ-™-¨Ó0Ô1÷	2à�‰Œ÷!ð ÷	2ð 	2ú÷	2ð 	2ú÷ð ús=   šAE Á(%EÂA5E Ä%EÄ'E ÅE	ÅE ÅE	ÅE Å E)c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚCancelFlightServerzA server for testing StopToken.c                 óÀ   — t        j                  g «      }t         j                  j                  g |¬«      }t	        j
                  |t        j                  |«      «      S )Nr  )r=   rn   r’   r@   r	   rŠ   r  r  )rf   rr   rw   rn   r$   s        r   rz   zCancelFlightServer.do_getR	  sF   € Ü—‘˜2“ˆÜ�^‰^×'Ñ'¨°6Ð'Ó:ˆÜ×%Ñ% f¬i×.>Ñ.>¸rÓ.BÓCÐCr   c                 ó"  — t        j                  g «      }t         j                  j                  g |¬«      }|j	                  |«       |j                  «       s8|j                  |«       t        j                  d«       |j                  «       sŒ7y y )Nr  r  )	r=   rn   r’   r@   rL  rÝ  rV  r  r  )rf   rr   r™   rš   r›   rn   r$   s          r   r´   zCancelFlightServer.do_exchangeW	  sg   € Ü—‘˜2“ˆÜ�^‰^×'Ñ'¨°6Ð'Ó:ˆØ�‰�VÔØ×&Ñ&Ô(Ø×Ñ˜rÔ"Ü�J‰J�sŒOð ×&Ñ&×(r   N)r|   r}   r~   r   rz   r´   r!   r   r   râ  râ  O	  s   „ Ù)òDó
r   râ  c                  óÖ  ‡‡— t        j                  «       j                  t        j                  «       j                  k7  rt	        j
                  d«       d„ Št        t        j                  fŠˆˆfd„} t        «       5 }t        d|j                  f«      5 }|j                  t        j                  d«      «      } | |j                  «       t        j                   j#                  d«      }|j%                  |«      \  }} | |j                  «       	 |j'                  «        d d d «       d d d «       y # t        t        j(                  f$ r Y Œ,w xY w# 1 sw Y   Œ1xY w# 1 sw Y   y xY w)Nz'test only works from main Python threadc                  ót   — t        j                  d«       t        j                  t        j                  «       y r  )r  r  ÚsignalÚraise_signalÚSIGINTr!   r   r   Úsignal_from_threadz*test_interrupt.<locals>.signal_from_threade	  s   € Ü�
‰
�3ŒÜ×ÑœFŸM™MÕ*r   c                 óþ  •— 	 	 t        j                  ‰¬«      }t        j                  ‰«      5 }|j	                  «         | «        d d d «       |j                  «        	 j                  }t        |t        j                  t        f«      s-t        |j                  t        j                  t        f«      sJ ‚y y # 1 sw Y   ŒtxY w# j                  «        w xY w# t        $ r t        j                  d«       Y Œ›w xY w)Nr¨  z2KeyboardInterrupt didn't interrupt Flight read_all)rŸ  r   rH  rI  r¡  r‘  ÚKeyboardInterruptÚfailrc  r�  r=   ÚArrowCancelledÚ__context__)r°   ÚtÚexc_infor¾  Ú	exc_typesrê  s       €€r   rÀ  ztest_interrupt.<locals>.testk	  sÖ   ø€ ð	NðÜ×$Ñ$Ð,>Ô?�Ü—]‘] 9Ó-ð °Ø—G‘G”IÙ”J÷ð —‘•ð �N‰NˆÜ˜!œb×/Ñ/Ô1BÐCÔDÜ�q—}‘}¤r×'8Ñ'8Ô:KÐ&LÔMð	Nð NØMð E÷ð ûð —‘•ûÜ ò 	Nô �K‰KÐLÖMð	Nús:   „+C ¯B:ÁC ÁC Â:CÂ?C ÃCÃC ÃC<Ã;C<rÜ   r   r>  )rŸ  Úcurrent_threadÚidentÚmain_threadrH  r`  rì  r=   rî  râ  r
   r©  rz   r	   rG  r°   ro   rE  r´   r¯  r-  )rÀ  r‘  r£  rš   r™   r›   rò  rê  s         @@r   Útest_interruptrö  `	  s&  ù€ ä×ÑÓ!×'Ñ'¬9×+@Ñ+@Ó+B×+HÑ+HÒHÜ�‰Ð=Ô>ò+ô #¤B×$5Ñ$5Ð6€IõNô$ 
Ó	ð  Ü˜+ v§{¡{Ð3Ó4ðØ8>à—‘œvŸ}™}¨SÓ1Ó2ˆÙˆV�_‰_Ôä×,Ñ,×8Ñ8¸ÓAˆ
Ø×+Ñ+¨JÓ7‰ˆ�ÙˆV�_‰_Ôð	Ø�L‰LŒN÷÷ ð øô "¤6×#>Ñ#>Ð?ò 	áð	ú÷ð ú÷ ð úsC   Á>EÂA<EÄD4Ä#EÄ4EÅEÅEÅEÅE	ÅEÅE(c                  ó  — d} t        «       5 }t        j                  d|j                  f«      5 }t	        j
                  t        j                  | ¬«      5  |j                  t        j                  d«      «      j                  «        d d d «       |j                  t        j                  d«      «      j                  «       }|j                  dk(  sJ ‚	 d d d «       d d d «       y # 1 sw Y   Œ^xY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nz'application server implementation errorrÜ   r¶  r   r  r8   )r  r	   r¨  r©  rH  rI  rå  rz   rG  r°   r]  )r·  r‘  r£  ry   s       r   Útest_never_sends_datarø  �	  sÑ   € à5€EÜ	#Ó	%ð #¨Ü�N‰N˜K¨¯©Ð5Ó6ð#Ø:@Ü�]‰]œ6×3Ñ3¸5ÔAñ 	9Ø�M‰Mœ&Ÿ-™-¨Ó,Ó-×6Ñ6Ô8÷	9ð
 —‘œfŸm™m¨MÓ:Ó;×DÑDÓFˆØ�~‰~ Ò"Ð"Ñ"÷#÷ #ð #÷	9ð 	9ú÷#ð #ú÷ #ð #ús;   �"C=¯&C1Á3C%ÂAC1ÃC=Ã%C.Ã*C1Ã1C:	Ã6C=Ã=Dc            	      óX  — t         j                  j                  ddz  «      } t        «       5 }t        j                  d|j
                  f«      5 }t        j                  t        d¬«      5  |j                  | t        j                  g «      «      \  }}|j                  «        d d d «       t        j                  t        j                  d¬«      5  |j                  | «       d d d «       d d d «       d d d «       y # 1 sw Y   ŒYxY w# 1 sw Y   Œ&xY w# 1 sw Y   Œ*xY w# 1 sw Y   y xY w)Nr0  r1  rÜ   z%Failed to serialize Flight descriptorr¶  )r	   ro   rE  r   r¨  r©  rH  rI  ÚOSErrorr¡   r=   rn   r¯  r  r´   )Úlarge_descriptorr‘  r£  r›   rõ  s        r   Útest_large_descriptorrü  ›	  sý   € ô
 ×.Ñ.×:Ñ:Ø�ÑóÐä	Ó	ð 1˜vÜ�N‰N˜K¨¯©Ð5Ó6ð1Ø:@Ü�]‰]œ7Ø!HôJñ 	àŸ™Ð&6¼¿	¹	À"»ÓF‰IˆF�AØ�L‰LŒN÷	ô �]‰]œ2×,Ñ,Ø!HôJñ 	1à×ÑÐ/Ô0÷	1÷1÷ 1ð 1÷	ð 	ú÷	1ð 	1ú÷1ð 1ú÷ 1ð 1úsS   ­"D ÁDÁ+9C<Â$-DÃDÃ#DÃ+D Ã<DÄDÄDÄDÄD	ÄD Ä D)c            	      ó”  — t         j                  j                  d«      } ddz  }t        «       5 }t        j                  d|j
                  f«      5 }t        j                  t        j                  d¬«      5  |j                  | t        j                  g «      «      \  }}|5  |j                  |«       |j                  «        d d d «       d d d «       t        j                  t        j                  d¬«      5  |j                  | «      \  }}|5  |j                  |«       d d d «       d d d «       d d d «       d d d «       ~t        «       5 }t        j                  d|j
                  f«      5 }t        j                  t         j                   d¬«      5  |j#                  t        j$                  d«      «      }|j'                  «        d d d «       t        j                  t        j(                  d¬«      5  |j                  | «      \  }}|5  |j'                  «        d d d «       d d d «       d d d «       d d d «       y # 1 sw Y   �Œ~xY w# 1 sw Y   �ŒƒxY w# 1 sw Y   �Œ:xY w# 1 sw Y   �Œ?xY w# 1 sw Y   �ŒDxY w# 1 sw Y   �ŒIxY w# 1 sw Y   ŒÅxY w# 1 sw Y   Œ|xY w# 1 sw Y   Œ€xY w# 1 sw Y   Œ„xY w# 1 sw Y   y xY w)Nr   r0  r1  rÜ   zapp_metadata size overflowr¶  )r	   ro   rE  r©   r¨  r©  rH  rI  r=   ÚArrowCapacityErrorr¡   rn   rP  r¯  r´   r.  rå  rz   rG  r°   r  )r™   ri  r‘  r£  r›   rõ  rš   s          r   Útest_large_metadata_clientrÿ  ­	  sR  € ô ×(Ñ(×4Ñ4°SÓ9€JØ�{Ñ#€HÜ	Ó	ð 0˜vÜ�N‰N˜K¨¯©Ð5Ó6ð0Ø:@Ü�]‰]œ2×0Ñ0Ø!=ô?ñ 	àŸ™ j´"·)±)¸B³-Ó@‰IˆF�AØñ Ø×%Ñ% hÔ/Ø—‘”÷÷	ô �]‰]œ2×0Ñ0Ø!=ô?ñ 	0à#×/Ñ/°
Ó;‰NˆF�FØñ 0Ø×%Ñ% hÔ/÷0÷	0÷0÷ 0ð 	Ü	"Ó	$ð 
"¨Ü�N‰N˜K¨¯©Ð5Ó6ð
"Ø:@Ü�]‰]œ6×3Ñ3Ø!=ô?ñ 	à—]‘]¤6§=¡=°Ó#5Ó6ˆFØ�O‰OÔ÷	ô �]‰]œ2×,Ñ,Ø!=ô?ñ 	"à#×/Ñ/°
Ó;‰NˆF�FØñ "Ø—‘Ô!÷"÷	"÷
"÷ 
"ð 
"÷ñ ú÷	ñ 	ú÷0ñ 0ú÷	0ñ 	0ú÷0ñ 0ú÷ 0ñ 0ú÷"	ð 	ú÷"ð "ú÷	"ð 	"ú÷
"ð 
"ú÷ 
"ð 
"úsï   ¯"JÁ&I4Á7+IÂ""I 	ÃIÃ-I4Ã9I'ÄI	Ä"I'Ä*I4Ä2JÅ"J>Å/&J2Æ5JÇ
-J2Ç7J&ÈJ	ÈJ&È'J2È/J>É I
ÉIÉIÉI4ÉI$ÉI'É'I1É,I4É4I>	É9JÊJÊJÊJ2ÊJ#ÊJ&Ê&J/Ê+J2Ê2J;	Ê7J>Ê>Kc                   ó   — e Zd ZdZg Zd„ Zy)ÚActionNoneFlightServerz@A server that implements a side effect to a non iterable action.c                 óà   — |j                   dk(  r/t        j                  | j                  «      j	                  d«      gS |j                   dk(  r| j                  j                  d«       y t        ‚)NÚ	get_valuerÂ   r  T)rH   ÚjsonÚdumpsÚVALUESrÆ   r  rÇ   rÈ   s      r   rÊ   z ActionNoneFlightServer.do_actionÓ	  sV   € Ø�;‰;˜+Ò%Ü—J‘J˜tŸ{™{Ó+×2Ñ2°7Ó;Ð<Ð<Ø�[‰[˜HÒ$Ø�K‰K×Ñ˜tÔ$ØÜ!Ð!r   N)r|   r}   r~   r   r  rÊ   r!   r   r   r  r  Ï	  s   „ ÙJØ€Fó"r   r  c                  ó¨  — t        «       5 } t        d| j                  f«      5 }|j                  t	        j
                  dd«      «       |j                  t	        j
                  dd«      «      }t        j                  t        |«      j                  j                  «       «      dgk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z…Ensure that actions are executed even when we don't consume iterator.

    See https://issues.apache.org/jira/browse/ARROW-14255
    rÜ   r  r   r  TN)r  r
   r©  rÊ   r	   rD  r  Úloadsr$  rÞ  r•   )r‘  r£  Úrs      r   Útest_none_action_side_effectr
  Ü	  s¨   € ô 
 Ó	!ð ? VÜ˜+ v§{¡{Ð3Ó4ð?Ø8>Ø×ÑœŸ™ x°Ó5Ô6Ø×ÑœVŸ]™]¨;¸Ó<Ó=ˆÜ�z‰zœ$˜q›'Ÿ,™,×1Ñ1Ó3Ó4¸¸Ò>Ð>Ñ>÷	?÷ ?÷ ?ñ ?ú÷ ?ð ?ús#   ‹C£BB<Â+CÂ<C	ÃCÃCc            	      ó  ‡‡— d} d}t        j                  | |¬«      Št         j                  j                  d«      }t	        j
                  dt	        j                  «       fg«      } G ˆfd„dt         j                  «      } |«       5 }t        d|j                  f«      5 }|j                  ||«      \  }Šˆfd	„}t        j                  |d
¬«      }	|	j                  «        t        j                  t         j                  «      5 }
	 |j!                  t	        j"                  dgg|¬«      «       Œ)# 1 sw Y   nxY w
j$                  j&                  |k(  sJ ‚t        j                  t         j                  «      5 }
|j)                  «        ddd«       n# 1 sw Y   nxY w|
j$                  j&                  |k(  sJ ‚|	j+                  «        |j-                  |«      \  }Šˆfd„}t        j                  |d
¬«      }	|	j                  «        t        j                  t         j                  «      5 }
	 |j/                  d«       Œ# 1 sw Y   nxY w|
j$                  j&                  |k(  sJ ‚t        j                  t         j                  «      5 }
|j)                  «        ddd«       n# 1 sw Y   nxY w|
j$                  j&                  |k(  sJ ‚|	j+                  «        ddd«       n# 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)zƒ
    Ensure that exceptions during writing preserve error context.

    See https://issues.apache.org/jira/browse/ARROW-16592.
    rD   r]  )r½  r   r5  c                   ó"   •— e Zd Zˆ fd„Zˆ fd„Zy)ú0test_write_error_propagation.<locals>.FailServerc                 ó   •— ‰‚r¦   r!   ©rf   rr   r™   rš   r›   Úexcs        €r   r¡   z7test_write_error_propagation.<locals>.FailServer.do_putø	  ó   ø€ ØˆIr   c                 ó   •— ‰‚r¦   r!   r  s        €r   r´   z<test_write_error_propagation.<locals>.FailServer.do_exchangeû	  r  r   N)r|   r}   r~   r¡   r´   )r  s   €r   Ú
FailServerr  ÷	  s   ø„ ô	õ	r   r  rÜ   c                  ó\   •— 	 	 ‰ j                  «        Œ# t        j                  $ r Y y w xY wr¦   )r&   r	   ÚFlightError©rš   s   €r   Ú_readerz-test_write_error_propagation.<locals>._reader
  s1   ø€ ðØØ—K‘K”Mð øä×%Ñ%ò Ùðúó   ƒ •+ª+Trš  rJ   r  Nc                  ó\   •— 	 	 ‰ j                  «        Œ# t        j                  $ r Y y w xY wr¦   )rm  r	   r  r  s   €r   r  z-test_write_error_propagation.<locals>._reader
  s4   ø€ ðØØ×%Ñ%Ô'ð øä×%Ñ%ò Ùðúr  r0  )r	   r-  ro   rE  r=   rn   r5  r   r
   r©  r¡   rŸ  r   r¡  rH  rI  rV  r6  rc  r½  r¯  r‘  r´   rP  )Úexpected_messageÚexpected_infor™   rn   r  r‘  r£  r›   r  r¤  rñ  r  rš   s              @@r   Útest_write_error_propagationr  é	  s  ù€ ð ÐØ€MÜ
×
%Ñ
%Ø ]ô4€Cä×(Ñ(×4Ñ4°SÓ9€JÜ�Y‰Y˜¤"§(¡(£*Ð-Ð.Ó/€Fö”V×,Ñ,ô ñ 
‹ð /˜Ü˜+ v§{¡{Ð3Ó4ð/Ø8>àŸ™ z°6Ó:‰ˆ�ô	ô ×!Ñ!¨¸Ô>ˆØ�‰Œä�]‰]œ6×6Ñ6Ó7ð 	J¸8ØØ×"Ñ"¤2§?¡?°Q°C°5ÀÔ#HÔIð ÷	Jð 	Júð �~‰~×(Ñ(¨MÒ9Ð9Ð9ä�]‰]œ6×6Ñ6Ó7ð 	¸8Ø�L‰LŒN÷	÷ 	ñ 	úà�~‰~×(Ñ(¨MÒ9Ð9Ð9Ø�‰Œð  ×+Ñ+¨JÓ7‰ˆ�ô	ô ×!Ñ!¨¸Ô>ˆØ�‰ŒÜ�]‰]œ6×6Ñ6Ó7ð 	,¸8ØØ×%Ñ% dÔ+ð ÷	,ð 	,úð �~‰~×(Ñ(¨MÒ9Ð9Ð9ä�]‰]œ6×6Ñ6Ó7ð 	¸8Ø�L‰LŒN÷	÷ 	ñ 	úà�~‰~×(Ñ(¨MÒ9Ð9Ð9Ø�‰Œ÷_/÷ /ñ /ú÷ /÷ /ñ /ús|   Â	K<Â!A%K'Ä+D1Ä1D:Ä6AK'Å;FÆ	K'ÆFÆBK'È/IÉIÉAK'ÊJ'Ê	K'Ê'J0Ê,2K'Ë	K<Ë'K0	Ë,K<Ë<Lc                  ó.   — t        j                  d«       y)z…
    Ensure that the gRPC server is stopped at interpreter shutdown.

    See https://issues.apache.org/jira/browse/ARROW-16597.
    zarrow_16597.pyN)r   Úinvoke_scriptr!   r   r   Útest_interpreter_shutdownr  0
  s   € ô 	×ÑÐ'Õ(r   c                   ó   — e Zd ZdZd„ Zy)ÚTracingFlightServerz/A server that echoes back trace context values.c                 óf   — |j                  d«      j                  }d„ |j                  «       D «       S )NÚtracingc              3   óN   K  — | ]  \  }}|› d |› �j                  d«      –— Œ y­w)z: rÂ   N)rÆ   )Ú.0r0   rc  s      r   ú	<genexpr>z0TracingFlightServer.do_action.<locals>.<genexpr>A
  s2   è ø€ ò ;Ù �S˜%ð �5˜˜5˜'Ð"×*Ñ*¨7×3ñ ;ùs   ‚#%)rÔ  Útrace_contextr�  )rf   rr   rÉ   r'  s       r   rÊ   zTracingFlightServer.do_action<
  s3   € Ø×.Ñ.¨yÓ9×GÑGˆñ;Ø$1×$7Ñ$7Ó$9ô;ð 	;r   NrÖ  r!   r   r   r!  r!  9
  s
   „ Ù9ó;r   r!  c                  ó(  — t        dt        j                  «       i¬«      5 } t        d| j                  f«      5 }t        j
                  ddg¬«      }|j                  d|¬«      D ]  }Œ 	 d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)	Nr#  rC  rÜ   )s   traceparents7   00-000ff00f00f0ff000f0f00ff0f00fff0-000f0000f0f00000-00)s
   tracestater   r<  )r   r   rv   )r!  r	   ÚTracingServerMiddlewareFactoryr
   r©  r   rÊ   )r‘  r£  re   rc  s       r   Útest_tracingr*  E
  s£   € Ü	Ø”v×<Ñ<Ó>ð)ô 
ð à
Ü˜+ v§{¡{Ð3Ó4ðð 9?ô ×*Ñ*ð5à ð	4
ô ˆð ×%Ñ% j¸'Ð%ÓBò 	ˆEØñ	÷÷ ÷ ñ ú÷ ð ús"   ¡B¹1A<Á+BÁ<B	ÂBÂBc                  óâ   — t        dd¬«      } d}t        j                  t        |¬«      5  | j	                  t
        j                  j                  d«      d ¬«       d d d «       y # 1 sw Y   y xY w)Nzgrpc+tls://localhost:9643Tr^  zRArgument 'schema' has incorrect type \(expected pyarrow.lib.Schema, got NoneType\)r¶  rD   r  )r
   rH  rI  rJ  r¡   r	   ro   rE  )r£  Úmsgs     r   Ú.test_do_put_does_not_crash_when_schema_is_noner-  W
  sc   € ÜÐ5Ø6:ô<€Fð<€Cä	�‰”y¨Ô	,ñ #Ø�‰”f×-Ñ-×9Ñ9¸%Ó@Ø!ð 	ô 	#÷#÷ #ñ #ús   «1A%Á%A.c                  óæ  ‡—  G d„ dt         «      }  G ˆfd„dt        «      } G d„ dt        «      Š |«       } | «       5 }t        d|j                  f|g¬«      5 }|j                  t        j                  j                  d	«      «       d
|j                  v sJ ‚d|j                  v sJ ‚d|j                  v sJ ‚d|j                  v sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z9Ensure that server-sent headers/trailers make it through.c                   ó   — e Zd Zd„ Zy)ú:test_headers_trailers.<locals>.HeadersTrailersFlightServerc                 óæ   — |j                  dd«       |j                  dd«       |j                  dd«       |j                  dd«       t        j                  t	        j
                  g «      |g «      S )	Núx-headerúheader-valueúx-header-binzheadervalueú	x-trailerútrailer-valueúx-trailer-binztrailervalue)Ú
add_headerÚadd_trailerr	   rm   r=   rn   rè   s      r   ré   zJtest_headers_trailers.<locals>.HeadersTrailersFlightServer.get_flight_infoe
  sh   € Ø×Ñ˜z¨>Ô:Ø×Ñ˜~Ð/@ÔAØ×Ñ ¨_Ô=Ø×Ñ Ð1CÔDÜ×$Ñ$Ü—	‘	˜"“ØØóð r   N)r|   r}   r~   ré   r!   r   r   ÚHeadersTrailersFlightServerr0  d
  s   „ ó		r   r:  c                   ó   •— e Zd Zd„ Zˆ fd„Zy)ú?test_headers_trailers.<locals>.HeadersTrailersMiddlewareFactoryc                 ó   — g | _         y r¦   r<  r…  s    r   rc   zHtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.__init__q
  s	   € ØˆD�Lr   c                 ó   •—  ‰| «      S r¦   r!   )rf   rì   ÚHeadersTrailersMiddlewares     €r   r¬  zJtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.start_callt
  s   ø€ Ù,¨TÓ2Ð2r   N)r|   r}   r~   rc   r¬  )r?  s   €r   Ú HeadersTrailersMiddlewareFactoryr<  p
  s   ø„ ò	õ	3r   r@  c                   ó   — e Zd Zd„ Zd„ Zy)ú8test_headers_trailers.<locals>.HeadersTrailersMiddlewarec                 ó   — || _         y r¦   r±  r³  s     r   rc   zAtest_headers_trailers.<locals>.HeadersTrailersMiddleware.__init__x
  s	   € Ø"ˆD�Lr   c                 ó�   — |j                  «       D ]3  \  }}|D ])  }| j                  j                  j                  ||f«       Œ+ Œ5 y r¦   )r�  r²  r¡  r  )rf   r¡  r0   rÆ  rc  s        r   r¹  zItest_headers_trailers.<locals>.HeadersTrailersMiddleware.received_headers{
  sF   € Ø&Ÿ}™}›ò >‘��VØ#ò >�EØ—L‘L×(Ñ(×/Ñ/°°e°Õ=ñ>ñ>r   N)r|   r}   r~   rc   r¹  r!   r   r   r?  rB  w
  s   „ ò	#ó	>r   r?  rÜ   rC  rô   )r2  r3  )r4  s   headervalue)r5  r6  )r7  s   trailervalueN)
r   r   r   r
   r©  ré   r	   ro   rp   r¡  )r:  r@  r²  r‘  r£  r?  s        @r   Útest_headers_trailersrE  a
  sí   ø€ ô
Ô&6ô 
ö3Ô+Bô 3ô>Ô$4ô >ñ /Ó0€GÙ	$Ó	&ð I¨&Ü˜+ v§{¡{Ð3ÀÀ	ÔJðIØNTØ×Ñœv×6Ñ6×?Ñ?ÀÓCÔDØ+¨w¯©Ñ>Ð>Ð>Ø3°w·±ÑFÐFÐFØ-°·±Ñ@Ð@Ð@Ø5¸¿¹ÑHÐHÑH÷I÷ I÷ Iñ Iú÷ Ið Iús$   ¿C'ÁA/CÃ
C'ÃC$	Ã C'Ã'C0c                  óJ  ‡	— t        ddddd¬«      t        ddddd¬«      dœŠ	 G ˆ	fd„d	t        «      }  | «       5 }t        d
|j                  f«      5 }t	        «       }dD �]  }t
        j                  j                  |«      }|j                  |t        j                  t        j                  j                  d¬«      ¬«      ¬«      \  }}|5  |j                  |j                  t        j                  j                  |dk(  ¬«      ¬«       |j                  |«       |j!                  «        |j#                  «       }d d d «       j%                  |«      sJ ‚|j&                  ‰	|   k(  r�ŒJ ‚ 	 d d d «       d d d «       y # 1 sw Y   ŒExY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrŽ   rL   rK   rJ   r   rÂ  )Údict_deltasÚdict_replacementc                   ó   •— e Zd Zˆ fd„Zy)úDtest_flight_dictionary_deltas_do_exchange.<locals>.DeltaFlightServerc                 óê  •— t        «       }|j                  «       }|j                  |«      sJ ‚|j                  ‰|j                  j                  «          k(  sJ ‚|j                  dk(  rNt        j                  j                  d¬«      }|j                  |j                  |¬«       |j                  |«       |j                  dk(  r-|j                  |j                  «       |j                  |«       y y )Ns   dict_deltasT©Úemit_dictionary_deltasrv   s   dict_replacement)rS   r°   r‘   r�   r9  rÄ  r=   r¸  r¹  rL  rn   rM  )	rf   rr   r™   rš   r›   Úexpected_tableÚreceived_tablere   Úexpected_statss	           €r   r´   zPtest_flight_dictionary_deltas_do_exchange.<locals>.DeltaFlightServer.do_exchange�
  sÎ   ø€ Ü/Ó1ˆNØ#Ÿ_™_Ó.ˆNØ!×(Ñ(¨Ô8Ð8Ð8Ø—<‘< >°*×2DÑ2D×2KÑ2KÓ2MÑ#NÒNÐNÐNØ×!Ñ! ^Ò3ÜŸ&™&×0Ñ0ÈÐ0ÓM�Ø—‘˜^×2Ñ2¸G�ÔDØ×"Ñ" >Ô2Ø×!Ñ!Ð%8Ò8Ø—‘˜^×2Ñ2Ô3Ø×"Ñ" >Õ2ð 9r   N)r|   r}   r~   r´   )rP  s   €r   ÚDeltaFlightServerrJ  œ
  s   ø„ õ	3r   rQ  rÜ   TrL  )Úwrite_optionsrv   rG  )r   r]   r
   r©  rS   r	   ro   rE  r´   r   r=   r¸  r¹  rL  rn   rM  r©  r°   r‘   r�   )
rQ  r‘  r£  rN  r9  r™   r›   rš   rO  rP  s
            @r   Ú)test_flight_dictionary_deltas_do_exchangerS  Š
  s©  ø€ ä ØØ Ø#$Ø"#Ø&'ô
ô &ØØ Ø#$Ø"#Ø&'ô
ñ€Nö"3Ô0ô 3ñ 
Ó	ð ; Ü˜+ v§{¡{Ð3Ó4ð;Ø8>Ü+Ó-ˆØ:ó 	;ˆGÜ×0Ñ0×<Ñ<¸WÓEˆJØ#×/Ñ/ØÜ×0Ñ0Ü"$§&¡&×"8Ñ"8Ø/3ð #9ó #5ôð 0ó ‰NˆF�Fð ñ 3Ø—‘˜^×2Ñ2¼B¿F¹F×<RÑ<RØ,3°}Ñ,Dð =Só =G�ô Hà×"Ñ" >Ô2Ø×#Ñ#Ô%Ø!'§¡Ó!2�÷3ð "×(Ñ(¨Ô8Ð8Ð8Ø—<‘< >°'Ñ#:Ô:Ð:Ð:ñ%	;÷;÷ ;ð ;÷3ð 3ú÷;ð ;ú÷ ;ð ;úsC   »FÁA:FÃA0F	Ä=-FÅ,FÅ0FÆF
ÆFÆF	ÆFÆF"c                 ó  — | j                   dk(  rdd d d dœS | j                   dk(  rgddgt        j                  j                  d¬«      t        j                  j	                  d	t        j                  j
                  j                  ¬
«      dœS i S )NÚdefaultrL   )rž  r¡  rR  r  Úallr’  )s   abcs   defÚzstd)ÚcompressionF)Úuse_threadsÚensure_alignment)Úparamr=   r¸  r¹  r   Ú	AlignmentÚDataTypeSpecific)Úrequests    r   Úcall_options_argsr_  Â
  sŽ   € à‡}�}˜	Ò!àØØ!Ø ñ	
ð 	
ð 
�‰˜%Ò	àØ(Ð)ÜŸV™V×3Ñ3ÀÐ3ÓGÜŸF™F×1Ñ1Ø!Ü!#§¡×!1Ñ!1×!BÑ!Bð 2ó ñ	
ð 	
ð ˆ	r   r_  rU  rV  T)Úindirectc                 ó’   — t        di | ¤Ž}|j                  «       }| j                  «       D ]  \  }}|€||v sJ ‚Œ|› d|› �|v rŒJ ‚ y )Nú=r!   )r   Ú__repr__r�  )r_  Úcall_optionsr\  rŸ  Úvals        r   Útest_call_options_reprrf  Ù
  sh   € ô %Ñ9Ð'8Ñ9€LØ× Ñ Ó"€Dà%×+Ñ+Ó-ò &‰ˆˆSØˆ;Ø˜$‘;Ð�;Øà��a˜�uˆ~ Ò%Ð%Ð%ñ&r   )½r×  r�  r  r   r   rç  r“   rí  rŸ  r  r(   r  r   Únumpyrz  ÚImportErrorrH  r   r=   Úpyarrow.libr   r   r   Úpyarrow.utilr   Úpyarrow.testsr   r	   r   r
   r   r   r   r   r   r   r   r   rK  ÚmarkÚ
pytestmarkr   r"   r-   r4   rB   rS   r[   r]   rƒ   r©   r¶   rÎ   rÓ   rÙ   rï   rü   rÿ   r  r  r  r"  r;  rf  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.  rW  r‡  rŒ  r’  r•  Úslowr¦  r­  r±  r¼  ÚpandasrÀ  rÆ  rÈ  rÍ  rÏ  rÑ  rÓ  rä  ræ  ré  Úskipifrð  rò  rö  rø  r  r  r  r	  r  r  r  r  r  r  r-  r!  r'  r*  r.  r0  Ú%header_auth_server_middleware_factoryr5  r8  r:  rA  rG  rK  rN  rQ  Úrequires_testing_datarX  r\  ra  re  rk  rq  rs  rv  rƒ  r…  r“  r•  r�  r£  rª  r¬  r°  r»  rÀ  rÆ  rÈ  rÌ  rÏ  rÑ  rÔ  rÜ  rà  râ  rö  rø  Úlarge_memoryrü  rÿ  r  r
  r  r  r!  r*  r-  rE  rS  Úfixturer_  Úparametrizerf  r!   r   r   ú<module>rv     s  ðó$ Û Û Û 	Û Û Û Û Û Û Û Û Ý ðÛó Û ç :Ñ :Ý 'Ý ðÝ÷÷ õ ð" �[‰[×Ñ€
òò
Bò
òò";ò
<ò2ôEÐ+ô EôD&Ð+ô &ôRÐ'ô ô*"Ð-ô "ô""Ð"2ô "ô""Ð.>ô "ô"0Ð*ô 0ô6+Ð.ô +ôÐ#3ô ô.Ð.ô .ô"EÐ 0ô Eô FÐ!1ô Fô&7Ð'ô 7ô*.AÐ(ô .AôbJ#Ð+ô J#ôZÐ!2ô ô0Ð!2ô ô"Ð.ô ô.Ð.ô ô$Ð'ô ò$ô
/Ð(?ô 
/ô1Ð!1ô 1ô61Ð(?ô 1ô89Ð!1ô 9ô/Ð-ô /ô9Ð.Eô 9ôÐ'7ô ôFÐ#3ô Fô*+Ð-ô +ô5Ð$;ô 5ôÐ)ô ôÐ.ô ô-Ð+Bô -ô&/Ð+Bô /ô

Ð$4ô 
ô	Ð'>ô 	ô	Ð'>ô 	ô	1Ð)@ô 	1ô2Ð"2ô 2ô.4Ð)@ô 4ô4Ð"2ô 4ô.Ð 0ô .ò"J@òZ`òF!ò$8òð ‡�×ÑØ‡�×Ññó ó ðò('ò(òDð6 ‡�×ÑñFó ðFò
ò$"ò<ò.=ò7ô$Ð(ô ò2!ò6òð ‡�×Ñ�B—G‘G˜t‘OØDð ó Fñ&óFð&ð* ‡�×Ññ#ó ð#ò*#ò #ò*#ò #ò*#ò #ò*9ò<òJò4ñ" 0Øˆ[ð7ô Ð ñ ,Øˆ[ð3ô Ð ð
 ‡�×Ññ+ó ð+ð ‡�×Ñ�B—G‘G˜t‘OØIð ó Kñ
5óKð
5ò+ò5òIñ )JÓ(KÐ %Ù$Ó&Ð ò4òEò;òò@8ò."ò+ð ‡�×ÑØ‡�×"Ò"ñ=ó #ó ð=ð ‡�×"Ò"ñ	"ó #ð	"ð ‡�×"Ò"ñó #ðð  ‡�×"Ò"ñ	2ó #ð	2ò"ò* ò@
"ò)ð, ‡�×Ññ"ó ð"ð8 ‡�×Ññ ó ð ð ‡�×ÑØ‡�×Ññ4ó ó ð4ò@ò8Oòv#òL$(òN	'ò9ò,)5òX	5ð ‡�×"Ò"ñ"ó #ð"ò$!ò2ò0(FòV2ò0!ò.Bð, ‡�×"Ò"ñó #ðô.Ð)ô ð" ‡�×Ññ)ó ð)òX#ð ‡�×ÒØ‡�×Ññ1ó ó ð1ð  ‡�×ÒØ‡�×Ññ"ó ó ð"ô@
"Ð-ô 
"ò
?ð ‡�×ÑñCó ðCòL)ô	;Ð*ô 	;òò$#ò&IòR5;ðp ‡‚ñó ðð, ‡�×ÒØ˜) UÐ+°dð ó <ñ
&ó<ñ
&øðsU ò Ø	ƒBðûð$ ò Ø€FØ%+¨VÐ"€LÐ"Ø+1°6Ð(ÐÐ(Ø06¸Ð-ÐÐ-Ø06¸Ð-ÐÐ-ØÓðús#   ¸Y6 ÁZ Ù6ZÚ ZÚZ%Ú$Z%