Files
boc/aamos-ledger-rust/target/debug/deps/libtower-de551f3d5ee92b87.rlib
T

4233 lines
802 KiB
Plaintext
Raw Normal View History

!<arch>
/ 0 0 0 0 698 `
 ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢_ZN112_$LT$tower..builder..ServiceBuilder$LT$tower_layer..identity..Identity$GT$$u20$as$u20$core..default..Default$GT$7default17h1b1860a0ba99138aE_ZN5tower7builder53ServiceBuilder$LT$tower_layer..identity..Identity$GT$3new17hfb7a2de6757d6c19E_ZN5tower4util3rng18HasherRng$LT$H$GT$11with_hasher17h3df7941586a202b2E_ZN5tower4util3rng9HasherRng3new17ha187eac06e990b0dE_ZN70_$LT$tower..util..rng..HasherRng$u20$as$u20$core..default..Default$GT$7default17hcbb51d3d48d7d8adE_ZN5tower4util8optional5error4None3new17ha9912a2bfb591ee7E_ZN73_$LT$tower..util..optional..error..None$u20$as$u20$core..fmt..Display$GT$3fmt17h480c0366c01154d3EDW.ref.rust_eh_personality// 60 `
tower-de551f3d5ee92b87.tower.d0f7bdbb20c67e54-cgu.0.rcgu.o/
lib.rmeta/ 0 0 0 644 791792 `
ELF·p @@GNUÀrust
Ì #rustc 1.96.0 (ac68faa20 2026-05-25)ÁÀ뉊]!ÜÛê(¹Þ—šên-5be7b69c3ff7b5b8ÁíàÄTËŸ ÜJîÄ)'ß\¥!-3d1337db07d0b3aeÁ¤²XctÔ'ÐÓ©z¨ɽÓ-a4945860e1c53b00Á¤°ð ¾ä-±($²ï=©Ã-7e98a21bfd32b0edÁòÖÀH•‘PIÓHã#£-055f30b747f859b6Árustc_std_workspace_coreÁ­Cçß^ò½èÝ$­Çÿ+Cé-c4878ee60b2242c9ÁŸÃï+Ñ]ŠqB<ÏïW#-8dd1dd90e70d0b6aÁ miniz_oxideÁ€š»J(P>àö÷g\K-1eb618da2918ab7fÁadler2ÁÆ;+Þ®5¥Ìýݰ¦ÛLˆ-f7919172d268e069Á hashbrownÁPäV9ÒÆèÜ"ÊÖVŽ\-0fc2184a5da6723aÁrustc_std_workspace_allocÁs&ØòØy¯s•bæ!‰ýŠ-97e4bf30be240674Á
std_detectÁhŠBîÙºÌI®ËÅš-9dbbf8346ba7ac8bÁrustc_demangleÁûë9´Ç×@Œ’ùXFº-f33013f239bf9f14Ácfg_ifÁÜLhž§Œaã¯>­-0a71c8f33a838301Á addr2lineÁ׎Þ!]8V$É@@-e618e6be60e87ba2ÁgimliÁ¸
°µ~Î1‹Ñt ðÁ€w-1f7768a68858f670ÁobjectÁ
áPÃ?­À¶¼QHJ¥-914cd6a4dbe590d1ÁmemchrÁ›º«8Ór­2Ù $¨ûib-cf21ca6f2bb15dcdÁë
‹ás«LÖ€îâƒ×ɯŒ-ee6f3747e38367f0ÁtokioÁ·ØÃýø‘f»¹é딄-087392fa1a31dd29Ápin_project_liteÁ`b#ÒÿùM.è}²ð@ñ-7ea160027a0fdab2Á parking_lotÁŠÝ2.eÒõ²òêÕ†-689a5c8a340e7370Álock_apiÁð¹f^ô}¬öFº™”z¨ò-3f3c7099ed5d8d40Á
scopeguardÁ\…ŒÞ=0ÔB­ïÅA&¹-ccb5054c1d5044beÁparking_lot_coreÁÁ¶+¿™-h¢¼S¯Œ1\-5d7acafd3d98b936ÁsmallvecÁ½™îg—ÝÚt´±’ª®b-e608f34be3f30508ÁserdeÁŸÿ\.©åý¼ Òš-050607dac4fda6a6Á serde_deriveÁ,w|êñ]ù¿¥­C£ð-975c43f96d83014eÁ
serde_coreÁ_³-À Ëï ¢ÖzéÌ»S-cb84d8e698130faaÁ®«ýºõó¿àlé ,Z¶÷k/-c82bfbac630248a2ÁÚ+z˜ÖËó>zj–„÷-8f89ea8b6e77f2aaÁmioÁÄ©aZ¦ê@Þ'íˆA-d6954a24ebe3831fÁbytesÁ^ÍÏ8+än÷+j-122b7cf70504f583Á tokio_macrosÁóÁm¹^E¼>ŽCê
z3-074a4ab5bbda1a72Ásocket2Á/Æm·}ï3rÑ®‚fqB-f5f25707507e8a7cÁsignal_hook_registryÁ‹A´Ùqà’D;i-a201455211635890ÁerrnoÁ—ë@\ZéíJ÷MˆI-14c535580c974ea2Á
tower_serviceÁ/r(®'ÛÒÕù˜K”-5cde83e30b362864Á futures_coreÁJäI@fÄ
×ß›ë:²-b2a01c322c9ccc85Á futures_utilÁ†˜ö‹Ž݇äý·÷ ³ý-09c32330bf3a91c6Á futures_taskÁurªVŠˆ* ¨ªoèÿÅ7-8cf213f034b18043Á futures_sinkÁ‚BÛ˜õµËUæh—òË…-40585509b14a1deaÁslabÁ­GqåI©2梸7•,7ú-65d8f4f9212282e4Á
futures_ioÁG™êéå&í“Êþ(ã½-10d9063ddf3dea8bÁìÐâà`éÙBÞðg+-67d59ffd555808adÁ tower_layerÁhKBL†
™£ N,9Ÿíö@-94e864a87e0c69afÁ sync_wrapperÁÔS7É(÷6É“@LæfJj-39051827d29e28d6ÁbalanceÁ<»9»¼œ9bufferÁ4ç9»Ù”Ê9discoverÁD”:»õ¤õ9filterÁ4Á:»”¤:hedgeÁ,ë:»¯ŒÏ:limitÁ,”;»ÊŒø:¬$¼;»¬„¡; load_shedÁLè;» load-shedÁ¬È;+testsÁ,û ready_cacheÁ\Ã<» ready-cacheÁ¼¡< reconnectÁLö<»ç¬Ö<retryÁ,£=»Œ‡= spawn_readyÁ\Ò=» spawn-readyÁ¼°=steerÁ,>»ÍŒå=timeoutÁ<¬>»èœŽ>£,‡,$ü+¸
sample_floyd2Álß»¼œ»¸£ÀmacrosÁ
opaque_futureÁmakeÁmake_connectionÁMakeConnectionÁå
ConnectionÁErrorÁFutureÁ
poll_readyÁ¤ååãô make_serviceÁ"""""""""sharedÁ++++++1¤1æ +4¤4¥4ResponseÁ4ô444Ñ" MakeServiceÁ<å<RequestÁ<ä<ô<ServiceÁ< MakeErrorÁ<<<ì< into_serviceÁ<
as_serviceÁ"HžH¤HåH¨"MžM¤MåM¨MäMôMÄMÒMMMì" IntoServiceÁYžY¨YY_markerÁ"^ž^¨^ƒ"bžb¨b×"fžf¤fåf¨fäfôfffÑ" AsServiceÁp'aÁpžp¨pp³"vžv¨v×"zžz¤zåz¨zäzôzzzÑfutureÁŠutilÁŒ 
 š¤šš×žF1ÁžF2ÁžŸžæ £ã£í£Ÿ£×¨ã¨í¨Ÿ¨°¨Š ®¤®®æ ®layerÁ³¤³³¨³FutÁ³ä³ô³³³Ñ½½æ À¤ÀÀÄÀö ŒboxedÁÅö ÆÆÆÆÆÆÆÆÆBoxLayerÁÏInÁϥϦÏÏ"ÆÕÚ"Õ¥Õ¦ÕÕæ ÚÚ ÆÝÚ"ݥݦÝÝÄÝö ÆäÚ"ä¥ä¦ääƒÆêÚ"ê¥ê¦êê×Å layer_cloneÁðððððððððBoxCloneServiceLayerÁùÚ"ù¥ù¦ùù"ðÿÚ"ÿ¥ÿ¦ÿÿæ  ðÚ"¥¦Äö ðŽÚ"Ž¥Ž¦ŽŽƒðÚ"¥¦×Ålayer_clone_syncÁšššššššššBoxCloneSyncServiceLayerÁ£Ú"£¥£¦££"š©Ú"©¥©¦©©æ ®® š±Ú"±¥±¦±±Ä±ö š¸Ú"¸¥¸¦¸¸ƒš¾Ú"¾¥¾¦¾¾×ÅçÄÄÄÄÄÄÄÄÄÄ Ä
Ä Ä Ä
BoxServiceÁÒ¥Ò¦ÒÒinnerÁÄ BoxFutureÁ×¥×ÄÚ¥Ú¦ÚÚæ Þ¤Þ Úö á¤Äã¥ã¦ããäãôãããÑÄì¥ì¦ìì×ÅunsyncÁññññññññññ ñ
ñUnsyncBoxServiceÁý¥ý¦ýýÙ*ñUnsyncBoxFutureÁ¥ñ¥¦æ ¤ö ¤ñ¥¦äôÑñ¥¦×ñ¤¨äôÑÅÅÅÅÅÅŒ boxed_cloneÁ©©©©©©©©©© ©
©BoxCloneServiceÁµ
µ¥µ¦µµˆ©»¥»¦»»æ ¿¤¿ »ö ¤©Ä¥Ä¦ÄÄäÄôÄÄÄѩͥͦÍ̓© CloneServiceÁÒ£Ò clone_boxÁ©Õ£Õ¥Õ§2©Ù¥Ù¦ÙÙ׌boxed_clone_syncÁÞÞÞÞÞÞÞÞÞÞ Þ
ÞBoxCloneSyncServiceÁê
ê¥ê¦êêˆÞð¥ð¦ððæ ô¤ô ðö ÷¤Þù¥ù¦ùùäùôùùùÑÞ¥¦ƒÞ‹2£§2ÞŠ£Š¥Š§2ÞŽ¥Ž¦ŽŽ×Œcall_allÁž 
 SvcÁ ¤ ¢ ×DriveÁ¥¥is_emptyÁ¥pushÁ¥Š ªã6ª¤ª¢ªæ ª
into_innerÁª take_serviceÁª unorderedÁ²ã6²¤²¢²² poll_nextÁorderedÁ¸¸¸¸¸¸¸¸¸¸ ¸
¸Äã6ĤĿ Ää7Äö7ÄŠ8¸Ëã6ˤËËÀ8¸ÐЛ7Ы7Њ Š8ÕÕÕÕÕÕÕÕÕÕ Õ
Õáã6á¤áæ áä7áö7Õçã6ç¤ççÀ8Õìì›7ì«7ìŠ ŒeitherÁôôôôôôôôôôþþþ¨þäþôþþþÑô°Š ôŒ¤ŒŒŒÄŒö Œfuture_serviceÁ­=¤£  ¤ æ ¤¤¤¤×¨¨¤¨×¬¬¤¬£¬¬ä¬ô¬¬¬ÑŒÙÀ¤ÀÀ×ĤÄÄæ Äö ɤÉɨÉôÉäÉôÉÉÉÑÓÓæ Ö¤ÖÖÄÖö Œ map_requestÁÛÛÛÛÛÛÛâ¤ââ×Ûæ¤æææ æö Ûë¤ëëR1ÁëR2ÁëäëôëëëÑÛõõæ Ûø¤øøÄøö Œ map_responseÁýýýýýýýýýý¤×ý¤æ ö ý¤¨ääôÑýššæ ý¤Äö Œ
map_resultÁ¢¢¢¢¢¢¢¢¢¢¬¤¬¬×¢°¤°°æ °ö ¢µ¤µµ¨µäµôµäµôµµµÑ¢ÀÀæ ¢Ã¤ÃÃÄÃö Œ
map_futureÁÈÈÈÈÈÈÈÈÈѤÑÑæ Ñö Ñget_refÁÑget_mutÁÑä7È٣٤ÙÙ¥ÙÙ !ÙäÙôÙÙÙÑÈå¤åå×Èééæ Èì¤ììÄìö Èññ׌oneshotÁôôôôôôôôôô ôÿ¤ÿReqÁÿ not_readyÁÿcalledÁô¤éJ×ôˆ¤ˆéJˆæ ôŒ¤ŒéJŒ°ŒŠ ŒoptionalÁerrorÁæ ˜×ߤ¥¤æ §§¥§§°§Š ²¥²æ ´¨¥¨äôѽ ŒreadyÁ¿¿¿¿¿¿¿¿¿¿ ¿
¿ ReadyOneshotÁ˥˨ËÙ*Ë_pÁ¿Ð¥Ð¨¿Ó¥Ó¨Óæ ¿×¥×¨×°×Š ¿Ü¥Ü¨Ü׿Èà
àÆà¥à¨àˆ¿æ¥æ¨¿éÆé¥é¨éæ ¿îÆî¥î¨î°îŠ ¿ô¥ô¨ô׌
service_fnÁøøøøøøøÆQÿ¥ø¥×ø¥¨£äôÑŒthenÁ 
¤×Ÿ¤ŸŸæ Ÿö ¤¤¤¤¨¤ä¤ô¤ !¤ä¤ô¤¤¤Ñ°°æ ³¤³³Ä³ö ŒrngÁ¸¸¸¸¸¸¸RngÁ¿next_u64Á¿next_f64Á¿
next_rangeÁ¸Ã£ÃÀU¸Ææ ¸È>¸ÊÊ with_hasherÁ¸ÍÍÀUŒŒŒŒŒŒŒŒŒŒ Œ
Œ Œ Œ
ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ Œ!Œ"Œ#Œ$Œ%Œ&Œ'Œ(Œ)Œ*Œ+Œ,Œ-Œ.Œ‚LÿŒß       Œ
ServiceExt笤N
ready_oneshotÁJ6Ž ¤ ³CäÙô½E˜ ˜ ä˜ ôµAœ œ 
NewRequestÁðRŸ Ÿ äŸ ôŸ  !ÍG¤ ¤  !¤ ä¤ ô"Ù/Œ« ¥« ¨Œ option_layerÁ® builderÁ° ° ° ° ° ° ° · >° ¹ æ ° » » ö ½ ¥» ¾[¿ ¥» layer_fnÁÁ » µAà à ½Bà ÇB» ³CÇ » ÙÉ » ÍGË » ðRÍ » Ï » ½EÑ » ä7» serviceÁÔ ¤» ÆQÖ »  check_cloneÁ» check_service_cloneÁÙ ¤» 
check_serviceÁÛ ¤Û ¥Û ¦Û » "à ¤à £» Ù/㠤㠣» ú2æ ¤æ £° é é ×° ì ¤ì ì Äì ö ö ñ ñ ñ ñ ñ ñö ö ö sealedÁ
SealedÁ
¥BoxErrorÁ+SharedÁ
¤
ì]+ˆ
¤ˆ
×+
¤
ƒ+Ž
¤+
¤
æ +
¤
×+
¤
°
Š + SharedFutureÁš
¤š
Ù*+
ž
¤
__assert_not_repr_packedÁ 
¤

ProjectionÁ¢
'__pinÁ¢
¤¢
Ù*

ProjectionRefÁ¦
…c¦
¤¦
Ù*ž
projectÁª
…cž
 project_refÁ¬
…c
__OriginÁ®
…c®
¤®
__dummy_lifetimeÁ®
Ù*
³
…c³
¤
MustNotImplDropÁ
·
¥
¹
¤AndThenÁ»
¤»
»
Ù*»
±À
¤À
À
ƒ
AndThenFutureÁÄ
ãÄ
íÄ
ŸÄ
Ù*É
Ê
ãÊ
íÊ
ŸÉ
ËbÎ
ãÎ
íÎ
ŸÉ
óbÒ
…cÒ
ãÒ
íÒ
ŸÒ
Ù*É
£cØ
…cØ
ãØ
íØ
ŸØ
Ù*Ê
ÐcÞ
…cÊ
çcà
…cÉ
dâ
…câ
ãâ
íâ
Ÿâ
¢dâ
Ù*É
é
…cé
ãé
íé
ŸÉ
×dÉ
ï
¥É
ñ
ãñ
íñ
Ÿ AndThenLayerÁõ
õ
± ø
ø
ƒ
û
û
×ñ UnsyncBoxedÁþ
¤þ
Ù*ñ ¤ ×CallAllÁ ã6 ¤ ¢ ì] streamÁ queueÁ eofÁ curr_reqÁ Ž ã6Ž ¤Ž ¢ Ëb ã6 ¤ ¢ ób …c ã6 ¤ ¢ ì] ‘j Ÿj ¬j ·j £c  …c  ã6  ¤  ¢  ì]  ‘j  Ÿj  ¬j  ·jŽ Ðcª …cŽ çc¬ …c ‚d® …c® ã6® ¤® ¢® ¢d® ì]® ‘j® Ÿj® ¬j® ·j ¹ …c¹ ã6¹ ¤¹ ¢ ×d ¿ ¥ Á ã6Á ¤Á ¢¸âiÅ ã6Å ¤Å Ù*¸É ã6É ¤É ×¸Í Î ã6Î ¤Í ËbÑ ã6Ñ ¤Í óbÔ …cÔ ã6Ô ¤Ô Ù*Í £cÙ …cÙ ã6Ù ¤Ù Ù*Î ÐcÞ …cÎ çcà …cÍ ‚dâ …câ ã6⠤⠢dâ Ù*Í è …cè ã6è ¤Í ×dÍ í ¥Í ï ã6ï ¤ÕCallAllUnorderedÁò ã6ò ¤ò Ù*Õö ã6ö ¤ö ×Õú û ã6û ¤ú Ëbþ ã6þ ¤ú ób …c ã6 ¤ Ù*ú £c …c ã6 ¤ Ù*û Ðc …cû çc …cú ‚d …c ã6 ¤ ¢d Ù*ú  …c ã6 ¤ú ×dú š ¥ú œ ã6œ ¤ôEitherÁŸ Ÿ Ÿ LeftÁ¢
¢ ˆŸ RightÁ¥
¥ ˆô¨ ¨ ¨ ƒô¬ ¬ ô¯ ¯ ¯ ×ôEitherResponseFutureÁ³ ³ ³ ô· ¸ ¸ · Ëb» » · ób¾ …c¾ ¾ ¾ · £cà …cà à à ¸ ÐcÈ …c¸ çcÊ …c· ‚dÌ …cÌ Ì Ì ¢dÌ · Ò …cÒ Ò · ×d· × ¥· Ù Ù ôKindÁÜ Ü Ü Øsß Ù*Ü ñsá Ù*ôKindProjÁã …cã ã ã Øsç Ù*ã ñsé Ù*ôë ì ì ì Ðcï …cë ‚dñ …cñ ñ ñ ¢dñ Øsñ ñsë ø …cø ø ë ×dë ý ¥ë ÿ ÿ 
FutureServiceÁ

¤
º

¤
ƒStateÁŠ
Š
¤Š


ˆŠ
Ä

ˆ

¤
ƒMapErrÁ
¤

Ù*
±œ
¤œ
œ
ƒ MapErrLayerÁ 
 
±£
£
ƒ¦
¦
ש
©
Ÿ©
æ  ­
­
Ÿ­
×
±
±
ٱ
°±
Š  MapErrFutureÁ

Ÿ
Ù*º
»
»
ټ
Ëb¾
¾
ټ
óbÁ
…cÁ
Á
ŸÁ
Ù*º
£cÆ
…cÆ
Æ
ŸÆ
Ù*»
ÐcË
…c»
çcÍ
…cº
dÏ
…cÏ
Ï
ŸÏ
¢dÏ
Ù*º
Õ
…cÕ
Õ
ټ
×dº
Ú
¥º
Ü
Ü
ŸÛ
MapRequestÁß
¤ß
ß
Ù*ß
±Ûä
¤ä
ä
ƒÛMapRequestLayerÁè
è
±Ûë
ë
ƒÛî
î
×ý MapResponseÁñ
¤ñ
ñ
Ù*ñ
±ýö
¤ö
ö
ƒýMapResponseLayerÁú
ú
±ýý
ý
×ýƒýƒƒŸƒæ ý Ÿ×ý
Ÿ°Š ýMapResponseFutureÁŸÙ*ýŸËb˜˜Ÿób…cŸÙ*£c …c  Ÿ Ù*Ðc¥…cçc§…c‚d©…c©©Ÿ©¢d©Ù*¯…c¯¯Ÿ×d´¥Ÿ¢ MapResultÁ¹¤¹¹Ù*¹±¢¾¤¾¾ƒ¢MapResultLayerÁ±¢ÅÅ×¢Èȃ¢ËËŸËæ ¢ ÏÏŸÏ×¢
ÓÓŸÓ°ÓŠ ¢MapResultFutureÁØØŸØÙ*¢ÜÝÝŸÜËbààŸÜóbã…cããŸãÙ*Ü£cè…cèèŸèÙ*ÝÐcí…cÝçcï…cÜ‚dñ…cññŸñ¢dñÙ*Ü÷…c÷÷ŸÜ×dÜü¥ÜþþŸÈ MapFutureÁ¤Ù*±È¤ƒÈMapFutureLayerÁŠŠ±ÈƒôOneshotÁ¤éJºô¤éJ×ô˜¤éJ˜Ëbœ¤œéJ˜óbŸ…cŸ¤ŸéJŸº˜£c¤…c¤¤¤éJ¤ºÐc©…cçc«…c˜‚d­…c­¤­éJ­¢d­º˜³…c³¤³éJ˜×d˜¸¥˜º¤ºéJô¢z½¤½éJ½NotReadyÁÀsvcÁÀreqÁ½CalledÁÃfutÁ½DoneÁÅ
ô StateProjÁÇ…cǤÇéJÇøËˆŽË“ŽÇžŽÎ¬ŽÇ·ŽÐ
ôÒÓ¤ÓéJÓÐcÖ…cÒ‚dØ…cؤØéJØ¢dØøØžŽØ·ŽÒà…cà¤àéJÒ×dÒå¥Òç¤çéJ©ê
êˆí×ResponseFutureÁï¥ïÙ*ò¥ò×õö¥õËbø¥õóbú…cú¥úÙ*õ£cþ…cþ¥þÙ*öÐc…cöçc…cõ‚d…c¥¢dÙ*õ…c¥õ×dõ¥õ¥OptionalÁ¥Ù*¥×ø ServiceFnÁ¥±øœ¥øž¥žƒThenÁ¡¤¡¡Ù*¡±¦¤¦¦ƒ ThenLayerÁªª±­­×°°ƒ³ã³í³Ÿ³æ  ¸ã¸í¸Ÿ¸×
½ã½í½Ÿ½°½Š 
ThenFutureÁÃãÃíßÃÙ*ÈÉãÉíÉŸÈËbÍãÍíÍŸÈóbÑ…cÑãÑíÑŸÑÙ*È£c×…c×ã×íן×Ù*ÉÐcÝ…cÉçcß…cÈ‚dá…cáãáíáŸá¢dáÙ*Èè…cèãèíèŸÈ×dÈî¥Èðãðí🸠HasherRngÁôôhasherÁôcounterÁ¸øøƒ¸ûû×° ServiceBuilderÁþþö ° ƒ






!
:
:
:
;
D
D
D
E
G
W
W
W
X
a
e
e
e
n
n
n
o
v
y
y
y
z



ƒ



§
§
§
­
­
­
»
»
»
¼
Ä
ã
é
ï
ï
ï





·
½
Ã
Ã
Ã
ê
ê
ê
ë
ð
ð
ð




š
š
š
¡
¡
¡
¢
Ë
Ë
Ë
Ì
Ñ
Ô
Ø
Ý
Ý
Ý










¤
¤
¤
§
¨
©
©
©
°
·
·
·
É
Ï
Ï
Ï
Ò
Ó
Ô
Ô
Ô
æ
ë
ë
ë
î
ï
ð
ð
ð








§
§
§
«
«
«
´
´
´
µ
Ã
Ã
Ã
Ñ
Ñ
Ñ
Ò
Ú
å
å
å
ó
ó
ó
ô
ü
Š
Š
Š
˜
˜
˜

¡
¯
¯
¯
¾
¾
¾
¿
Ç
Ö
×
ã
ã
ã
ä
è
è
è
ð
ó
ó
ó









¬
¬
¬
¼
¼
¼
½
Û
Û
Û
ß
ß
ß
æ
ó
ó
ó
ô
÷
÷
÷
ƒ
ƒ
ƒ



Ž
ž
ž
ž
®
®
®
¯
·
À
Á
Â
Å
Ï

Ô
ë
ë
ë
ð
Š
Š
Š







 
Ã
Î
ú
ý
ý
ý
ƒ
ƒ
ƒ

Ì
Ì
Ì
Ñ
ù
ù
ù
þ
«
²
²
²
»


Ÿ
¥
¨
¨
¨
°
°
°
µ
µ
µ
¾
ç
í
ð
ð
ð
ù
ÿ
ÿ
ÿ

Š
Š
Š



˜
Á
Ç
Ç
Ç
Ê
Ò
Ò
Ò
×
×
×
à





œ
î
î
î
ô
ô
ô
ø
˜
˜
˜
 
©
¯
¯
¯
²
¼
¼
¼
Â
Â
Â
Í
ú
ý
ý
ý
ƒ

Ò¾ ¥ì Ö ü Ù
³û·äŽí¿
¤åö©¿c

ÿ`
ì]+\›}…i(î©Ø“ªŠ “ª&“ª¥“íš
š
”bœ
Ù*+´möÁ1ÄÊå¤
¥
š
š
”bœ
Ù*+´möÁ1ÄÊåî©¿c¹«‚ع«
žå¨<ˆ¬¬•¬ØYYŒ\"]³"Y´P
ò³¯ˆ¬¨¿c´¬&YYŒ\"]³"Y´P
ò³¯ˆ¬•¬¬¿cppt"u³"Ú³¢q+J¨8ž¨&ppt"u³"Ú³¢q+J¨8ƒ®¨åØ»
»
ˆe¾
Ù*¿
±êîœÁ§Ùcî©¿c宓íÄ
Ä
ÔeÈ
Ù*\ÿHIýªªãíŸî
¬«î
Ä
Ä
ÔeÈ
Ù*\ÿHIýªªã퟿cް‚ØްØõ
õ
Üh÷
±¦±{çºÓ¿cì°&安®õ
õ
Üh÷
±¦±{çºÓ£¯î©ÏÏÊ"Ô"Æu¶4vaĬ.Ú"䪦«²Øý±¿cý±ùùˆ%þ"ð–Þh­¡G«²äªµ²»²«²Øâ²¿câ²££Õ'¨"šK6¥w«²äªµ²»²«²ØÁ³¿cÁ³&ÒÒ¯*ÖÙ*Ľ)Ò5lÑD¶¬«¦¬«¿cŸ´¿cþ
þ
ªi Ù*ñ1Þ9Bzî©&ýýø,Ù*ñ ¥›„ ¬«Ñ´×´¬«¿c«µ&ó´ì¬&µµ£0ºˆ© U¬ŒËD} \¬«Ñ´×´¬«Øˆ¶Ò䪣¿cˆ¶&êêëÉ3ïˆÞ g*n'h¬«Ñ´×´¬«Ø÷¶äªà¶¿c÷¶“í  âiˆ ì] ‘jŠ Ÿj ¬jŒ ·jóÌ¡£³êã6¤¢¾ ¬«¾   âiˆ ì] ‘jŠ Ÿj ¬jŒ ·jóÌ¡£³êã6Ÿ«¢¿cè¸'E踿cÅ Å âiÈ Ù*¸Ú‹‚@ƹŸ«“íÅ Å âiÈ Ù*¸Ú‹‚@ĸʸì ¬«ì ò¹'Eò¹¥FuturesOrderedÁin_progress_queueÁ(¿ queued_outputsÁ(¿ next_incoming_indexÁ(¿ next_outgoing_indexÁ(¿ ®™ +}jøš±š±¿cò ò Òpõ Ù*Õ†ór³¼($–ƹŸ«“íò ò Òpõ Ù*Õ†ór³¼($–ĸʸ ¬« Á¼'EÁ¼¥(é"(é"FuturesUnorderedÁ(ë"ready_to_run_queueÁ(Ž!(ì"head_allÁ(Ž!(í"
is_terminatedÁ(Ž! [_D˜/¿š±š±ØŸ ¢ £ Øs¤ ˆ¥ ¦ ñs§ ˆ`ú¶¦Á~Š è¾¿cè¾&辉®“í³ ³ Út ôÀ$ s<®MÖ ¬«Ö ³ ³ Út ôÀ$ s<®M°¿¶¿“íÜ ß Øsà Ù*ôá ñsâ Ù*ô,<åû¡°w–ÀœÀü ¬«ü Ü ß Øsà Ù*ôá ñsâ Ù*ô,<åû¡°w°¿¶¿‚Ø´ÀŸ ¢ £ Øs¤ ˆ¥ ¦ ñs§ ˆ`ú¶¦Á~–ÀœÀî©Ø

Øy
º ¼`óÅ™âÔš±Ÿ«¿cŽÃØŠ

Ž

ˆ

Ä
ˆ«.ÑP.6š±Ÿ«¿cÖÃ&ŽÃ£Ø

†{š
Ù*
±úŽÏÎQwî©£¯¿cÎÄØ 
 
Ñ{¢
±z~4©þFJš±¿c¢Å“í

ý|¹
Ù*ÇûDjÁt団¯ȰÙ
¬«Ù


ý|¹
Ù*ÇûDjÁt囚±Ÿ¿c¯Æ‚دÆ&Îĉ® 
 
Ñ{¢
±z~4©þFJ£¯î©Øß
ß
Äâ
Ù*Ûã
±Û‹ 滓Ÿî©£¯¿cÐÇ&ÐǽBØè
è
“€ê
±ÛLËðb§‰uCš±¿c´Èè
è
“€ê
±ÛLËðb§‰uC£¯î©Øñ
ñ
ä€ô
Ù*ýõ
±ýPÑ« qîBî©£¯¿c·É¿cú
ú
´ü
±ý}b-ö@UÜš±ØŒÊ“íå‚Ù*ýGÀYáC%b£¯Ȱ³¬«³å‚Ù*ýGÀYáC%bš±áÆ¿c›Ë‚Ø›Ë&·É‰®ú
ú
´ü
±ý}b-ö@UÜ£¯î©Ø¹¹±…¼Ù*¢½±¢g•´ÉÜvïÄî©£¯¿c¼Ì¿cÂÂÿ…ı¢{<r¡¿©ÅAš±Ø‘Í“íØØ®‡ÛÙ*¢%D)ÓŠ§£¯Ȱû¬«ûØØ®‡ÛÙ*¢%D)ÓŠ§š±áÆ¿c Î‚Ø Î&¼Ì‰®ÂÂÿ…ı¢{<r¡¿©ÅA£¯î©Øø‰Ù*ȱÈtBpÜFˆO‰î©£¯&ø‰Ù*ȱÈtBpÜFˆO‰Ÿ«à¶¿cÁÏØŠŠÆŠŒ±ÈB¼*ÙFÿ‚š±ŠŠÆŠŒ±ÈB¼*ÙFÿ‚£¯î©¿cåпcºô
ÄaEŸ¬ŒOî©éJ“íºô
ÄaEŸ¬ŒOŸ«éJ·¬«·èÑ“í½ÀøÁˆŽô“ŽôގĬŽôÅÆ·Ž²"´¹`½íŸ«ÜÒ䬫ä½ÀøÁˆŽô“ŽôގĬŽôÅÆ·Ž²"´¹`½íî©›Ò¿c‚Ô‚ØèÑ¿cêêë©ìˆ eü^LÚ‰² ÄcÕ¾Õ¿cïï„‘ñÙ*9˜Wçû¬«“íïï„‘ñÙ*9˜WçûÂ䪎¬«ŽßÕ‚Øïï„‘ñÙ*9˜Wçûš±¿c¢“Ù*oþ}Žür~¬«&¥×쬓íËËëNÎÙ*¿Ï—O¿,ɤ¿hþ¬«ì¬‚Øî׿cîדíààáÈ刿 )Š!8䪉®‚ØààáÈ刿 )Š!Æäª‰®¿cÏØŠ ד±øÌšÂÜ4¬Á¬«ØèÙ¿cèÙ&èÙ‰®Ø¡¡š”¤Ù*¥±?0S· gî©£¯¿cÆÚ¿cªªã”¬±re¦Œ³—¡š±Ø›Û“íÃÃ¥–ÇÙ*‚b ¤Ý$îê¯ð¯ö¯í¬«íÃÃ¥–ÇÙ*‚b ¤Ý$î¼°°Ȱ¿c®Ü‚Ø®Ü&ÆÚ‰®ªªã”¬±re¦Œ³—¡£¯î©¿žBoxÁ¡ˆˆ¢ˆl }.xÏà¶çEçEèEGlobalÁ ¿±‡§í#Øôôª™öÙ¸÷Ñ™¸¨m›ë¯Bó¿cËÞ³ôôª™öÙ¸÷Ñ™¸¨m›ë¯BóÖJÖJ RandomStateÁ×Jk0ÁˆØJk1Áˆ‰ÌkqÇËŸ¿ËÞ¬«ì¬ØþþŠšö ° !2NÄ[˳þþŠšö ° !2NÄ[ËIdentityÁ—O.㜋§ -ê*¿cÇàþþŠšö ° !2NÄ[Ëî©Hˆ

š
bYv»
£Ä
û
õ
êÏù¾£ìÒ þ
ýÙµŽê  É Å ö ò ¯ Ÿ ¤
¨Š
À
¦
 
­

âß
î
è
ñ
ý
ú
¬¹ÅÂÏØåñнíêòïÜËôà¡­ª¸Ãûôé þ

^
»
ø
õ
äÏŽù¸£Íµê¨ Ÿ

Š
œ

£
 
ä
ß
ë
è
ö
ñ
ú
¾¹ÈŠž¦¡°ªøôþŽ

¬ Ÿ œ4
fYz»
ãÒýþ
ĵùêþŸ ¬
É
ëß
ñ
µ¹Ù¤¡³
š
é
Ä
¹  è Å ò Ò ³ ø Ü Õ

¯÷سà½ïÐËæàè÷
¹
š
š
¨Ä
³ ±

ÓØŒ§ï×Ëîà½ÃMï
ñ
Ä
Àõ
ÝÏù±£ŒŸ Ö 
øè
ú
ÃÂ슳ªì þÕŠ¿ Á  ² ËÅ çò í ï Å Ð(å ì(é"š œ ò × Ù ³ ý ÿ Ü Ú
Ü

´üþظºå罘êšêïîðÃÃÍôÈô· þ«
 ¿c/ØÅŠ »&“í
p‚Ø
<Mî

ÒT¾ 'E
ì ¥
Ö 
ü 
Ù

³
û
·
ä
Äc
¾Ží
¿
³ì® œ® 
& ‚ªö© È /Ñ  üÔ
}œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
‚ªö©&
ì†  ‚ª
 ÌÌkÎwakerÁ¸Ï local_wakerÁ¸ÐextÁ¸Ñ³¸Ò_marker2Á¸f'EwÚ]¾åí
šcxÁoýì¾ÜŸ  
&
‚ªö©  /À !ü× i‚ªö©& èî ö© êOÉð( ø  P ¨ õñî©(4 ¿cgl
ùc}pu ýŠ
«Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŸÈŸÈ Èô éBL- “ª9  c cˆ¢cµ
 `£cbufÁ `àB¤GS
õñõñ{»ò  î©…õœ½±ËÖƒõ»òÍÕòëP ¨î©
Ùî©.6( ÿ 
î© 
.“ª:•ôBî©…õŒ[eûõ©„® 
î©Ä3üÿE“ªî©<ì] /| 
î© ½3“ª}î©{î©_ì]°œ¹ œØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ˆê)?ÈXM´­ˆùÒ:üÞtœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ãˆùì‘ “ªõî÷_cxÁ¹ûõ+Ķ Ö¿î©Ùùü£,”£
æ€Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
î©Ùùxü‘?Œ‘
î©& ÕÖüØ~;¹«æú䪉؉؊ØÈŒØˆ×€ oíwãžU6œüFœüpî©…õ¼p_targetÁz´ûõØ•üš”ý#äªþäªóˆä}
ŒY¹«!óˆiøˆ1刑þùùî-ùùî%
öX ‘þ1Ÿï4ù—‰é ¢
‹ª
ù•‡ƒù؈¢
¢
ób¥
Ù*+} ß2¿Fíî©ù‡ˆ)„¾„¾PinÁ†¾ ˜X$]È=„kt• ¹«!Ň»€)™‚j„¾„¾ñ€†¾ ˜X$]È=„kt•»€S[Ù*ßÿе€ø2 š
î©Í
øÑ|¹« ö‘þ(ãÙ*
2ˆ#‹  õñøý Xÿ
…dý<ðÿ3˜$¥˜‘¥
¶c(²õñ
0 ¤ »òøý<(ž
ð`EØžøýE0º
÷`R@ºÐ
ø¨¨
–óÚ ¹«(¯¡ô ã`ã`
DebugTupleÁæ`×µ`ç` µ`è`˵`é`
empty_nameÁµ`ø/wŒ4@<)õ†³÷†¼õñÝ»òX äÈäÈ ArgumentsÁæÈtemplateÁ `çÈÀ `üöMõô]Td±ˆî±GÉ„^Œ…#‹ˆ»òùá…Þ•†±pÅ 8Ê 
ª
î© Å HÊ  Å »‚èÅ  Ú 
„Ø‘þ3ß @Ú ð 
øÉ§œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã‘þƒØèå Ñõîñ»‚ܨ(”ï+©Ó‰?—ŠüQ Y‰®A  PhantomDataÁFu\»Ÿ‰®çFü¯¸YYŒ\"]³"Y´P
ò³¯¥Œ‰®ÔÈ¥Œ$¿ gü×O p¥Œ‰®#
ºŒ¬ Güñ»ppt"u³"Ú³¢q+J¨¥Œ‰®ä ¥ŒLÿ lì­$œ­$
& ˆ¬¬$Á$Ç$/Ð$WüÏ#œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ˆ¬¬&
ü$! ˆ¬LÝ#õîè#”ïë¼9Ü›%l%
&
ˆ¬¬$©%4¯%/¼%XüÖ$fˆ¬¬& d„%©‘Læ$¬4ñ$êOƒ’LÌ(ˆ¬ŒÌ(,Ö(
Ùˆ¬1<Ö(ü³(W Yˆ¬ì¬
È‹Fu\»Ÿì¬)aü‘(´¬$¤( ´¬,š(ˆ¬° ˆ¬ÑDÁ“Øl½*
 õñì®*d°*
÷c ®*7ܰ*.4ß*
õñTç* ˆ¬ »òü®*D,Ù*
Ù`]MÌÙ*ü®*Z4€+
à`RD€+Ž+eüë)£
–ó\˜*Ò”,ò)¡ô ù) Í`Í` DebugStructÁÐ`×µ`Ñ` µ`Ò`
has_fieldsÁµ`ã¹q·Ù›ß¨ý¿—|Á—õñ¥õñ\»òPç”Y±±´â»•Ôç”»ò޳–né–?Lç-ˆ¬Äç-Tñ-¼,ü-tñ-….nü-xþì¿- ƒ­L›-õî¦-©‘”ï!Q¼LÖ.ˆ¬ôÖ.dà.
Eˆ¬¬•¬94í.¤à.ú.oü™.aÄ’d¿.ŒšL¡.¬4¬.©‘Œê M‚›Ÿ\«2
 õñÜœ2dž2»• œ23Ìž2*4Ë2
õñTÓ2  ƒ® »òüœ2B,Å2³–ŒZJÌÅ2üœ2X4ì2é–FDì2ú2yüÙ1¡
–ó\†2 ppt"u³"Ú³¢q+J¨ƒ®‰®,à1¡ô ç1¿—п—NÁ—Wõñwõñ2»ò& 2V±YÄ»•©¬Ÿ»òg³–Dé–LÕ5ÄÕ5Tß5
& ƒ®Ø®3ê5tß5ó5üû4xœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ƒ®Ø®&
ì­5 ppt"u³"Ú³¢q+J¨ƒ®Ò®L‰5õî”5”ï!+¥ {LÄ6ôÄ6dÎ6
Eƒ®Ø®Ò®74Û6¤Î6è6ƒü‡6aƒ®Ø®& d­6‘¢L6Ø®4š6ê WÁ£ª@%óî©ûõ(0 %£¯
Ù£¯.7(%Ì »
î©£¯BÃ
På®\ å®gî©Þ…õ棯º £¯Åûõ½¥éî©
õñÌ”d–»• 3¼–*
õñ
î© 
»òü”B³–W GÜ»ê 
 õñÔƒă
«&£¯Ðíƒøíð. " õñíþ 
ÆbõñU&Q ‚È‚ÈArgumentÁ„È´ÀbökÏ®ÝWj´¡
 ÀÎÓ
«cüï/
 
»òü”³–Å  Eüä;ü”¡é–K»üÑꪱ–󷦡ô ß¿—§¿—]¿—ÙÁ—âõñõñ½»ò±…õºõñn»ò‹ˆ"ˆø&ð.¶©M¶©fõññ©vñ©XĪˆ ü­¶©Þ±áÀÁÀÍ5 »•Ì…õ»òг–jô¨,ΩÙñª‹ˆ»òý³–âé–µ‘6óˆ‰/ä}
ŒYް!6óˆi6øˆ16åˆ(ù<(ù<ˆe(ý<Ù*WïP拳sñ(Œ>(Œ>ErrIntoÁ(>Ù*ú5‰h£Q[޼°°'#°Ȱù7ùî-ù7ùî%
öX ›°17Ÿï4ù6—‰é Ò
¼°°Ȱ6˜‹Þ
ù6•‡ƒù6؈Ò
Ò
ób×
Ù*šO^ÀÍf•¼°°Ȱù6‡ˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• ް!6Ň³±­ ³î„¾„¾ñ€†¾ ˜X$]È=„kt•³±b[Ù* â¯T­± Ä
¼°°ȰŠ ¢ü“wް›°Ù* /


õñô©

É„ ©
3ä«
*˜
˜ïÜ
Œ…
õñ +¤Û
 »òü©
G
á…Ÿ<ÜÕ
ü©
]
•†A
Œ §üÜ °
–ó„Ž
 ް¡ô ê õ†õ†#÷†,õñL»òÖ‹ˆÞˆQ±TÉ„yŒ…G‹ˆ»ò"á…•†ä


Þ
¼°°Ȱ

¤à
³ìà


„Ø›°0ú

ƒ­üŒ
wœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã›°ƒØ”Ã
î²$”
õîª
³Ñ¨² &”ï*¤ó¸8º¹ø >›š±
Ùš±.6(>ë õ
š±ú
.ì°: ì°Eš± š±akл¯(?ò  õñ ?›  õñš±(4»ò]bÕòotchý
–ó©§¼±¡ô¹õñÁõñ³»ò» º¼ƺ¼Îí±ú¾¾»òüÕò¤Ÿ »
î©£¯¹±üìMå®$î©£¯ Ù*±F ©­ »
î©£¯ ²¹±·å®´î©²£¯°£¯î©|Ù*Ô±×”¹ õ
£¯Ñ²ü‰HÀ±£¯ ± /î©ÌÞ
& ®5ôüÞ-
®&
 !'#
è¡Ã¯ÃyT€»Ã
œø»ü„œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¯Ãì¶ å®L’õîœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¡Ã î©&À”ïÄáÂ<—à üé<  î©Äé
&
®5üé#D‚
®& ¯Ã_T  
4–£¯t–,½¥+<ç ïûD
(Œ>(Œ>Ó¯(>Ù*ú5‰h£Q[Ž˜È¯Ã²Ã£¯îÄ ¤ 
üÖP”Ö
¢˜È²Ã£¯ž.¬ü—`p ¼2
Ä
Ä
ÔeÈ
Ù*\ÿHIýªª˜È²Ã£¯d¿¥Å‰®(ù<(ù<ˆe(ý<Ù*WïP拳sñ¯É²Ã£¯¯É'˜ÈeÛÆ£¯àÚ¦ÿPˆrequestÁ$ÜǺ’ÈŒ½¥1©Éû«Ê¯É¦”¥ õ
š±½¿üüAì°$–š± ± / ´| õ
š± ¿ì°}š±{š±_±°£¯½¥+,üÛE »
î©£¯¦ ¥ü¦Äå® À±î©£¯°Ú¦Î-Ù*0o½¥êî©üƒm Ü«²äªµ²»²«²ÒÒ¯*ÖÙ*Ľ)Ò5lÑD¶äªµ²»²ÑÑüúw
.Ü«²äªµ²»²ÑÑÚÑŸÒD|D
“8LayerFnÁ±.(-òØ^á¿ÒZ^†J†JK‰Jµ 7ŠJphantomÁ7J¤7·0ØQd諲«²âÑ Ìì˜Þüü4 Ï«²äªµ²»²ÚüüºüîÈý±$ÑÑŠÓ¿ÒàÓ]†J†JK‰Jµ 7ŠJþÒ7‹J¤7·0ØQdèŠÓ˜Þ° inner_layerÁö ¿ºÒ/„Óì×ÕàÓöÑÑĬ
ÑÑ«²5¤Ò
Þ䪵²»²ÑÑ«²â=ðÜeü¢NâÑ ¿Òˆ«²,‰äצ ÑÑâÙ*!®Õ¼ÑѺ
7Ú›× Ò×Ú®Õ
&àÓ¼Õ
ë!àÓS"
G
¬Ô«²žCòüŸS ñã3âÑ ý±«² ¬Ôç àÓ,«²Õr:Ù*=òÙ+¹Ú2«²ªàÓ¼ê
ÙàÓ2$üÐ< Ï«²äªµ²»²éü®dý±¯ÛàÓÑÛ£>ÏܪàÓàÓ³

õñä”»•3Ę*ü”%é–O¿ïüÓl–ó¯Û¡ôá¿—œÁ—¤õñÃ-×0]»•Öé–£ü²r  «²äªµ²»²ÑÑÝѵµ£0ºˆ© U¬ŒËD} \䪵²»²ŸÒü©|  
.«²äªµ²»²ÑÑ£àŸÒ´D  
“8”Ò±.(-òØ^áˆá TX†J†JK‰Jµ 7ŠJþÒ7‹J¤7·0ØQd諲«²©à Ìì˜Þü°4  ù«²äªµ²»²ê ü£Ç üÍ â² ÑÑ Óá ˆá
£âQ†J†JK‰Jµ 7ŠJþÒ7‹J¤7·0ØQdèÓá˜Þ¤®Õ|ö µƒáÍáÖ”ä£âà ÑÑÄÛ  ›×+  Ì ¤ 
¿äªµ²»²ä× 2¤ 8üÑS ©à  ˆá[«² ä×Õ ÒØÊÙ*®ÕšÑѺ
4ª›×ñûåË®Õ 
&£â¼š 
ë!£âS" 
G 
é⫲žC · üäS   3©àl‚ â² «² éâç £â,«²Õr:Ù*=Œè+Óè2«²ª £â¼»  
Ù£â2$ü¡< ù«²äªµ²»²ã üÿd â²$’ Éé £âëé£>éꪣâ£â³´‚ 
õñüñ(  »•ñ 4üõ$ ,üñ1 é–Q¨ ü°x –ó Éé ¡ô¾ ¿—žÁ—¦õñÅ-×0]»•Øé–£üÉv
 °«²äªµ²»²ÑÑÝÑêêëÉ3ïˆÞ g*n'h䪵²»²ŸÒüÀ


.°«²äªµ²»²ÑÑ¿îŸÒµE


“8”Ò±.(-òØ^á¥ï
TX†J†JK‰Jµ 7ŠJþÒ7‹J¤7·0ØQd諲«²Åî Ìì˜ÞüË4
 £«²äªµ²»²
®ü³Ò
ü´Ñ
Á³
ÑÑ
ðï,¸
¥ï ÀðQ†J†JK‰Jµ 7ŠJþÒ7‹J¤7·0ØQdèðï˜Þ¤®Õ|ö µ ïêïÖ±òÀðà
ÑÑÄò

›×+,„

ì˜
Ę

ô䪵²»²ä×±
2¿
°9üèW
ÅîÙ
 ¥ï\«²
ä×ì
ÒØÊÙ*®ÕšÑѺ
4«›×ñ˜ôË®Õ

&Àð¼½

ë!ÀðS"

G

†ñ«²žC
Ú
ü‡S
 Ù
·3Åî
Á³,
«²,—
†ñç Àð,«²Õr:Ù*=©ö+ðö2«²ª
Àð¼â


ÙÀð2$üÈ<
£«²äªµ²»²Š
½ü¦d
Á³
æ÷
Àðˆø£>†ùªÀðÀð³Ô­!

õñüœ!,
d !
»•œ!
4ü !(
,üœ!5
4É!
é–QDÉ!
×!
ÃüÛ |
–ó\†!
æ÷
¡ôé
¿—žÁ—¦õñÅ-×0]»•Øé–£üÆ1  
¤ ¤¬«à¬«Ñ´×´ÌüÌü¬«& „¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xς؃ØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ñ´×´Ìì˜ÞýÑ´×´ ‹BÖüü× üÌ+ ü½;  
ªø‰Ù*ȱÈtBpÜFˆO‰ÌüÖüÀeižáÜ¡ˆˆ¢ˆl }.xÏ&¬«& ¬«Ñ´&
¬«×´& ¬«ýÌì˜Þ¼Ž „Ž 
/‘€ %¤¯  Ò¬«Ñ´×´É Þü•´ üÖó ü‚G Ÿ´ Ìü ‘€ žáÜ¡ˆˆ¢ˆl }.xϱÿ˜ÞÖ±ÿC/
/
/ SyncWrapperÁ/ˆ/ ÝI±j‘€,† Ù*­Ù*°Ù*$úÆüº«ÿ]ª‚‘€gŸy  
­ôü ï &„æ ýö àßýå  Öüùôü Ø „¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xÏôü˜Þñ±¦„ýðL‡ 
Þ¬«Ñ´×´ÌüÌüŸ´œþ  
.å†R" áüÖÁ ”Ò±.(-òØ^á冴ë 冸OІÉ‚‡ ÿ‚¤ñ  
/‘€1 üñ# T† 
& ‘€¬«I t† š êü¡y œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
×´œÓ Ÿ´ õîº  ‘€9 ÿ‚\-”ï1÷»ˆqæˆNüÜ"   ÿ‚¤Ü  »ˆ,  
ƒ 
&
‘€¬«aB  ü d  ƒ ë3ý ÈŠ ¬« ߊÞëŠý¬«Êh3êË7»ˆÀŒdýýnýýx¬«µd‘ 

õñô€ d„ »• 3Ô„ *ü€'  é–O ­ ðü¿n –ó Ÿ´ ¡ôÍ ¿—ŸÁ—§õñÆ-×0`»•Ùé–¦(@³   õñ@@×  õñî©(4»ò]bÕòotch ƒ –ó© ó´´¡ô¼õñÄõñ»ò¾ƒõÆ…õÎí±úƒõ»òüÕò¬Ð  þ
ÌüüÇ  
ªþ
þ
ªi Ù*ñ1Þ9BzÌügS žáÜ¡ˆˆ¢ˆl }.xÏ&¬«& ¬«Ñ´&
¬«×´& ¬«„¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xς؃؃þ˜Þ˜ÞÔð  ý¬«Ñ´×´ ü­ã ü»U «µ Ìü žáÜ¡ˆˆ¢ˆl }.xÏ’“˜Þ,¿ ’“.â“ÄÙ*kÙ*+£Œ“E½–â“øL¿ 
¬«Ñ´×´ÌüÌü«µœ¶  
.€˜R"Ï üœ³ ”Ò±.(-òØ^ဘ´± €˜¸Oë—ɘ â“̵  
& ⓬«5Ë  Ô üå
o ¨‰œ— «µ
õîþ
 â“ ”ï$TÖ™£ â“Äœ  
&
⓬«5  º üÚ ` Д¬ü ¢š ¬« ¹šêË!N››ДД¦ДД¯”Í

õñü¼
$ 
»•¼
4üÀ
,ü¼
- 
é–Q
ï
šüû t –ó
«µ,
¡ô
¿—¡Á—©õñÈ-×0`»•Ûé–¦ î©ÌÖ  
& î©ì¬5ì  õ ¡üüy œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
î©ì¬&
ì® ó´ õî ÛÆ,”ï"òïžA î©Äà  
&
î©ì¬5  üº"  
­î©ì¬& \/3„¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xς؃ØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
î©ì¬& Ç ˜Þâ ¢üûg º¢ Û  ì¬ „¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xÏ¢˜ÞÛ¢ÛÆ9¥êË©ÖÓ¡NŠ¢ ܤº¢*º¢º¢4ü½&


¤ Ìü¬«Á¬«Ñ´×´ÌüïüýÑ´×´
šVÙ¦¤Î
üÃ



ªø‰Ù*ȱÈtBpÜFˆO‰ÌüÙ¦,†
eižáÜ¡ˆˆ¢ˆl }.xÏÒ¬«& ¬«Ñ´&
¬«×´& ¬«ýÌì˜Þüí
 µ¬«Ñ´×´
¿ü
ü±b
ˆ¶
Ìü,
¾§
Ÿ¨`žáÜ¡ˆˆ¢ˆl }.xϾ§˜Þ¬Ù*kÙ*n£˦C¸§ÝŽªŸ¨ç

¦„ Û
 „Ò
ýâ
ÁQýÑ
 Ù¦kôü Ï
v±¦„ýz

¿¬«Ñ´×´ÌüÌüˆ¶œÕ


.ð¬R"î
Âü¥É
”Ò±.(-òØ^á𬴺
ð¬¸O۬ɭ
٬“


& Ÿ¨¬«5þ


Ëüœk
¨‰œÎ
ˆ¶
õîµ
 Ÿ¨ ”ï$TÆ®£
Ÿ¨¤Ô


&
Ÿ¨¬«5

î
Ìü›S
ý
’¯
¬«
©¯êË!N‹°ýý¦ýý¯
Ÿ¨ UniqueÁ ž³8Åá™-ÝñÞ¨§ ïíe¼îËè¿*Þ¨ Þ¨œ”Ð
L×

ÔÞ¨¬«Ê
ÄË
µ¬«Ñ´×´é
Ñü©@
ˆ¶
ˆ¶
Ÿ¨ˆ Þ¨>Ÿ¨Ͳ&/Uð²ÁŸ¨Ÿ¨Ê


Ùäª

´¬


ªäªI$(žáÜ¡ˆˆ¢ˆl }.xÏÒà¶& à¶äªà¶& &
à¶äªà¶&
& à¶äªà¶& Ìì˜ÞÈ
Øüš®
›µüÀ]
äª
žáÜ¡ˆˆ¢ˆl }.xÏ䪘ÞNäª`ˆÇ´¢õ´|í¶›µ›µ›µŒÚ

õñüÉ#

»•É
4üÍ
,üÉ,

é–Q
û
Ýüˆs
–ó
Ù³,
¡ô
¿—žÁ—¦õñÅ-×0]»•Øé–£üë&
¤ Ìü¬«ö¬«Ñ´×´ÌüïüýÑ´×´b`¡º¤üüñ 
ªø‰Ù*ȱÈtBpÜFˆO‰Ìü¡ºeižáÜ¡ˆˆ¢ˆl }.xϬ«& ¬«Ñ´&
¬«×´& ¬«ý Ìì˜Þü›$ ꬫѴ״Åôü´üßf÷¶Ìü†»ç»ežáÜ¡ˆˆ¢ˆl }.xφ»˜Þ±Ù*kÙ*n£“ºH€»âÛ½ç»ì\€D€¦„  „€ýöVýÿ ¡ºpôü ýv±¦„ýzL› 
ô¬«Ñ´×´ÌüÌü÷¶œ’ D’ 
.½ÀR"« ÷üÛ Ð”Ò±.(-òØ^á½À´ð ½À¸O¨ÀÉÚÀ
绬­
T´

& 绬«5¿
t´
È
üÝ k¨‰œ
 ÷¶ õîö  ç» ”ï$T“£4•绤•
&
绬«5¯üÜ
Sý
ßÂ
¬«
öÂêË!NØÃýý¦ýý¯4•ç» á° ž³8Åá™-Ýñ¦¼§ ïíe¼îËè¿*¦¼ ¦¼”•
¦¼¬«ÅÄ ê¬«Ñ´×´®üî@÷¶$ ÷¶ç»ˆ ¦¼9绕Æ&/U¸ÆÁç»ç»ÊÇ´´µõ´="žáÜ¡ˆˆ¢ˆl }.xÏà¶& à¶ðµ&
ඇ¶& à¶ž¶ Ìì˜ÞÑüùØ×ÈüŸà¶,í¶êäªBÇ´7õ´í¶×È!×È×È+¬ç
õñüÖ'»•Ö4üÚ#,üÖ0é–QŒü•w–ó¡Ç¡ô£¿—žÁ—¦õñÅ-×0]»•Øé–£‘Vóˆ‰Gä}
ŒYè¸!VóˆiVøˆ1VåˆÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙƹ]Ÿ«pйƒÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙŸ«'FùXùî-ùXùî%
öX Ÿ«1XŸï4ùV—‰é  ƹŸ«йV˜‹ª ùV•‡ƒùV؈   ób ì]œ ‘j Ÿjž ¬jŸ ·jhOÑq¤eÒƹŸ«йùV‡ˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• è¸!VŇ ·ÍQ´ÏZ йf p ÆÎ|Ýѽ„¾„¾ñ€†¾ ˜X$]È=„kt•´ÏÌì]בjãŸjï¬jû·jšþÌS®Ï.L­
õñÌž»• ž3¼ * 
õñ ·Í
 »òüžF³– W
GüÅ 
õñd‚Ÿ«
»òüžq³– W
Gìò
õñ»òüž,³–VF¼üž¬é–HФüÛõ–ó 踡ô é¿—¿— ¿—}¿—ùÁ—õñ"õñÝ»òÑ ·ÍÝõñ»ò Ÿ«õñD»ò8 B¢±¥Ö»•ŽŠØ»òL³–,¨Ø»òò³–ÒÆØ»ò³–{é–Q Û¼ƹ
 Û¼‹ÏüØ ’  ƹŸ«й
ð
®üýó踔» ƹ<• Ÿ«й·ÍÆÎ£ì]0j3Ÿj6nú Û¼ƹ ƒ
4

@G Û¼‹ÏF  ƹŸ«йC é
\®[ è¸XƹWŸ«VйU·Í
ƹŸ«çйÜÆÎì]Ÿ‘j£Ÿj§à ·ÍœÓ  
äTƹ1 ¼î 
õñüÓ 3 
°Tƹ]8üç  Œ üŸ m¯ƹÅ è¸ ·ÍÐíÑîõñ#TÌÞýŽßÂè¸è¸ <

ª ƹŸ«й L‚
üý #íÑüý 7
ÌÞ+
¼É

õñüý d
ŽßQ2üÂ
ç
°ü» ¬ƹï «Ñ ·ÍµÐëõñíÑû+OèàÌÞ׎ߢøi¼+
 
й¬Ä
§йƹ‹Ï& >:§¬
àWOu4õñZuÌd·ÍœÌÞ+ä
±TƹA\­

 Ÿ«üòGäò
äƹŸ«q L/ ¾·Í
 üí
Ò¿-ÆÎBй
WÆÎ kй 
ÆÎйª
ºŸ«Ï·Í±Ó Á¼ü’è¸D…] й~(´ƹ±·ÍàíÑÿŸ«¢NWKÕãÁ»äÌÞ&¤åöå¾·ÍÆÎйžÆÎ¥й¬ÆÎ³йºŸ«Á·ÍÈ&èà,‚Òœä
©йßã,3ô4% ßÈÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ƹ‹Ï& ƹ‹Ï&
l
…U£ì±ì  
ž$Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ£ì±ì㺾 Ê [zt lÔí  L‘  %ñª
[Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ùù±ìs
¡$œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃëŸï
Î$î
Û£ì Ö¿£ì±ì
 Û¼ÕëÔÉ œØë ƒ$.‚Ò.¬ýÕã6 Tˆ%
 Û¼Õ댰 œØëÄ©$ œØë¤ð$/˜Ò/¼ð
¦T‹Ï<+­Ò¤¸
úX´Ï1ü¸"
'GŸ«F×0Ak—
îÙk‰ î œØës|$
îÈÆÎùk—
žî0ŽÒ0$s|Û‹Ït„  Û¼‹Ï1˜Ò1#2˜Ò32üíŒL3˜Ò\3üöìØ4íÑüØ74‡
ªTƹ40D‡ü¨.  ,õñüØ
°T ƹa <ü¡6”ý T
& ƹ‹ÏýŒ!t5 "!Al—
î "Ùl‰ î œØëùl  $
î #!ÈÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
±ìùl—
žî $# $ 
6‚Ò
7˜Ò¤Ì

äT‹Ï7/+! ñ %#±ì„ˆ 5ŽÒ 5$” ' Ö¿£ì±ì% & Û¼Õë'̱ œØë& Ø
$ìÌ

±T‹Ï+ä*"üÃ'

&
ƹ‹ÏÃ*Q)#üÇ#ü³8

¨йßã6q)](ü¾-ü-ŽÒ- 
·
lüÕ§üøŒü¬J´»Âþùkª
üò üΨü‘È
ùlª
 8ˆðIJ«ÑõîµÐˆð
\
ëS
•¢˜¢™¢lš¢ˆ›¢œ¢[¢ˆe0<#˜ŸïÔí· †íñ °Ÿï¹Ôí÷Ü£ìøëÊÕëò©è©ë^ã ÆÎÆÎü«¿œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÆÎÏ­Ò ­Ò%ákª
îÆÎƒ‹Ï&¤øÒÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ¤øÃõñ¢œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÛù£álª
îÛù8 Á±ìi ëÕë=ßãÁ‹ÏõÆÎǂҎҠ‚Ò©˜Ò²ŽÒ»˜ÒĘÒ͘ÒÖíÑߎÒè‚Òñ˜Òú ”ïthisÁ%½i
Ž g 
¹¨  rspÁ§

¿unext_reqÁ ˆŽø
¿ #°­ %«èàt¸êBÏì2
ے
‚ð
ÕãŠ
ÁóÜ ô¼ôp ÆÎ_Ü÷Þžø£Òøu‰ûEÒüƒþü_µý/ì õñá¶“»õñ  âiˆ ì] ‘jŠ Ÿj ¬jŒ ·jóÌ¡£³êƹŸ«—º®º(¿ ˺(¿ åº(¿ „»(¿ ®™ +}jøßãèô»ò$Õò28'-MñÌ f–ós ò¹¡ôˆõñõñƒ»òŒ  Ÿˆ‹‹¤Å±ÓÞ‰‹»òÕÕòó‘¾óˆ‰·ä}
ŒYò¹óˆøˆåˆŸˆù¿ùî-ù¿ùî%
öX Ÿˆ1¿Ÿï7ù¾—‰é Ô ƹŸ«¾˜‹Þ ù¾•‡ƒù¾؈Ô Ô óbØ Ù*¸ƒÍ'O£ç’ƹŸ«ù¾‡ˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• ò¹ŇâŒ:ÍŽ„¾„¾ñ€†¾ ˜X$]È=„kt•âŒc\Ù* ŒåÜŒü¦< 

¬ÌœÌ
ßã ¥±¤¦
®ƹŸ«…‰¬væ á
ü‰d Å ƹŸ«óQüÈ«m}ÇB ò¹ƹŸ«Ÿˆ·ƹŸ«ƒ…‰kïõì]F‘jIµÚ£¢‘Ÿ«.ƹ5Tè!Ÿˆ¼è!Tó!
¯ƹŸ«…‰7dó!…"Èü¿!FƹÚ!ò¹$Ñ!Ÿˆz6±”ƒtè$<í$
Þ ƹŸ«$è$Lí$¤è$ðŽüè$#dý$
°ƹŸ«…‰8tý$%Éü­$dƹÚ$›Ž$Á$ðŽ{ز>Á•Ï…–Tî'Ÿˆ´î'Lù'
±ƹŸ«…‰7\ù'Š(Êüª'`Á¼üÄ'ò¹$»'Ÿˆ{7µ—tÿ)<„*Á•$ÿ)L„*¤ÿ)ðŽüÿ)"L”*
'GŸˆ/ž*l”*§*Ïü )‡ˆðÄÜ)›Ž$­)õîÃ)ðŽØ±%”ï)WÁ•Ü€™©ô+Ä+
š±$¦+&±+Òüè*I$þ* »,ô* /¶šuüß+'Ìß+
š±$ù+4ÿ+.Œ,Óü·+UÔ+ »L¿+š±4Ê+ßG¹›tò,Dò,
òXœ$û,&üà,%Œà,
'G»G-*‹-Ôü’,yœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙš±ƒØ¼¾,œLš,õî¥,„¾„¾ñ€†¾ ˜X$]È=„kt•œ]P”ïTÚœŠeú õñáÑ“»õñ  âiˆ ì] ‘jŠ Ÿj ¬jŒ ·jóÌ¡£³êƹŸ«(é"(é"æ¼(ë"ÿ¼(Ž!(ì"½(Ž!(í"±½(Ž! [_D˜/¿ßãÛç»òÕò%+ @Ñÿù Y–óf Á¼r¡ô{õñõñv»ò  ¦ Ž…£¸±ÆÑƒ£»òÈÕòæ‘Ùóˆ‰Òä}
ŒYÁ¼óˆøˆåˆ¦ ùÚùî-ùÚùî%
öX ¦ Ÿï7ùÙ—‰é  ƹŸ«Ù˜‹ ùÙ•‡ƒùÙ؈  ób Ù*ÕÛdJ“Ü" ƹŸ«ùÙ‡ˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• Á¼Ňܤ:Ǧ„¾„¾ñ€†¾ ˜X$]È=„kt•ܤc\Ù* û£åÖ¤ü§
> 



¼Í
¬Í

(ý"ßã ¥±¤§

®ƹŸ«Œ¡¬væ ä

ü
o ò ƹŸ«ö
Qü· ¿m}äB Á¼ÄÞ ƹŸ«¦ ·ƹŸ«ƒŒ¡kïõì]F‘jIµÔ¨£œ©Ÿ«.ƹ5 ¦ ¼ô Tÿ 
¯ƹŸ«Œ¡7dÿ 
åüË Fƹæ Á¼ ¦ z6«¬ƒt„<‰
ƹŸ«$„L‰¤„ê¦ü„#d™
°ƹŸ«Œ¡8t™­æüÉdƹö•¦ê¦{Ò¥²>»­Ïÿ­»­¤«ê¦ü«"
'G¦ /ÊÓëü̈ðĈ•¦õîïê¦Ò¥±%”ï)W»­Üׯ©ü» Ô»
(ÿ"š±'áîü–K ܽ /ޱvü$´
(€#š±.,¹ïüçR ܽš±αß O ²
òXæ²&ü%Œ
'GܽG¯*¸ðü¿yÂ¼ëæ²õîÒ„¾„¾ñ€†¾ ˜X$]È=„kt•æ²ËO”ïSdzöó³ÐŸ#àñs¶¿#
Ù¶¿5=àðØs°¿#
Ù°¿5=« Ÿ °¿¶¿à£Ô Ÿ °¿¶¿)फ 
è¾( è¾4< °¿Þ°¿æ ¶¿2¶¿;n__self_0Á¹·hš|ѶB¬#âñs¶¿E Mõñ/ ;
 »òw|
‡d 
nŸâðØs°¿¿Çõñ/;»òñöù¹ lâ±² 06= –óKì·T¡ô]e€¸Ëõñv»òÜ €¸瓸iõñ»ò{ “¸º±È¹·4¹·»í ¼»òÒù¹ú»»òiù¹$™T“#ñs¶¿´ƒ T‹ 
& ¶¿‰® t Øs°¿´Å
& °¿‰®Øª ü¹ñü¬/üé0œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
°¿‰®&
ìë è¾õîÒ¬¬ °¿S ¶¿±6”ï:ì]ì]â5ê½Ù¼¾Ž# ñs¶¿¬«  
&
¶¿‰® <¸   <•
Øs°¿¬ö


&
°¿‰®
 
üÎ
P Ü °¿‰®& ¶¿‰®& ü¡
Œ ³ ¦Ã´Ã ¬ ü‚ Q Ü ¦Ã´Ã üÕ  ³ ¦Ã´Ã á ó ü° Ãüˆ
¥ü» §
³ ³ Út ôÀ$ s<®M¦Ã´Ã½À‰®¬ˆ
ÝÀÜ ß Øsà Ù*ôá ñsâ Ù*ô,<åû¡°w¦Ã´ÃЦÃÈéÀ@ÑÅG´Ã5žêË¢ì]%ì]ƒ.œÂzîÂ/‘ðóˆ‰éä}
ŒY´ÀóˆøˆåˆÒÁùñùî-ùñùî%
öX ÒÁŸï7ùð—‰é ¾ °¿¶¿ð˜‹È ù𕇃ùð؈¾ ¾ ób ôå¹Cd½©žm°¿¶¿ùð‡ˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• ´ÀŇÈ:ˆÊ„¾„¾ñ€†¾ ˜X$]È=„kt•Èc\ ¼Çå—È‘‚ÛË£
ŒYÒÁ!‚Ûi‚à=Á‚Õb1‚Оñs¶¿ù„ùî-ù„ùî%
öXéÀ1„Ÿï4YØs°¿ùƒùî-ùƒùî%
öXÝÀŸï4ù‚—Ÿ½ ã °¿¶¿ï¡5 ã °¿¶¿-²¢ï ù‚’œ ù‚ŸžÑã ç Øsè Ù*ôé ñsê Ù*ô}…z‡V·­5°¿¶¿ù‚)«Ê!‚œÈù‚ŸžTÝÀÆ„¾„¾ñ€†¾ ˜X$]È=„kt•ÝÀéÀ
„¾„¾ñ€†¾ ˜X$]È=„kt•éÀ$®Ù*\Ù*hSÁËäÍÌb Ítÿ<„
È °¿¶¿$ÿL„œÿ«Êìÿ<“
ï °¿¶¿3L“-üù#Nñs¢Ðt€$†
„ض¿,€D†ØsÞÏ
„ذ¿ÒŸü¥úü«*üã+ œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã°¿ƒØ”ÜÖÉõîÃÕΫʪ“ÉâÄ«ÞÏ¢ÐfK”ïOÙ*>Ù*ô¹ÑAüÑêÒž·ÓX#ñsœÀ”æ
œÀî©Øs–À”Ÿ
–Àî©ü’  Ÿ –ÀÀî© ±üØ! Ÿ ë×ú× øŠü­Ýüû7üÀ9Ÿ ¢ £ Øs¤ ˆ¥ ¦ ñs§ ˆ`ú¶¦Á~ë×ú× ³Âû –Àië×V œÀÐú×½HÙ*Kö «ö  òàÖ²×µÔ
£š±Ÿ«*¹ü
¸ŽÃœ±
š±
ß 0öÚz÷ÖÃ
ÙÖÃ/7(‰Ê 
š±Ÿ«Ï
4ŽÃ@ ŽÃKÖÃŽ ÖÃgqŽÜ¬¥ Š
š±Ÿ«ü‹: 
š±Ÿ«Ë£üÝnŽÃš±ÖÃsß7® Š
š±Ÿ« ¹´ 
š±Ÿ« Ĺ£·ŽÃ´š±²ÖÃ#š±ßÍð

õñüß»• ß4ìá+< 
õñ±  ÖÃøóœ   ( þÜ óª  
ÈbÖÃX&N
ñ©^f
Īu
ƒˆñªš
¢ü› ! 
 »òüß^³–ADüŒ 1üßté–IÙ §üœ½:A–óëÜ¡ô ª¿—¥¿—ØÁ—áõñõñ»»òó‹ˆûˆøŠœ þܸþÜ×ü­Êñ©¯ĪÜ¥®åþÜ¢À À
ö»•§áñª?‹ˆ»ò£³–ˆé–\(‹æ #œ!ÄŸ«#
ÙŸ«5=Œ!š±#л/7¥ Š
š±Ÿ«ê Î Š
š±Ÿ«)ë 

ÖÃ"þÜ+3º¼Òš±Ú¨Ø#Ÿ«,_¹·¹·R¨æfл, $±"T«"#ˆ$ÄŸ«„ž$
 õñü$\’$É„ $4 ì’$|÷"
!
õñüØ"/\ë"É„ Ø"4äë"+Ôµ#ĵ#
«&š±
Ðõµ# 
øõ #0  " ¶©õ¯# ΩJF ñ©V^" }
«c½Â
ÊüŸ#1 
 »òüØ"y,™#á…s>ü™#8üØ"“4ã#•†D Dã#ñ¶$»òü$*,°$á…*1
T°$ü$34»$•†B D»$Ô$«üè!ìÐ×üù#J–ó\•"þÜ,ï!¡ô ö!„Ä"õ†%õ†÷†õñ´»òk‹ˆtˆøŒ #0ß­X¶©qõñü­sñ©Xëë¥®Ž¨Øwõ†;õ†X÷†aõñ»òt¶©Íß±âÀñ ÀýˆŽêL É„ÍÉ„Þê_Ω˜ì:‹ˆ»òvá…[•†5¨Ø»ò á…þ•†Ùü‘'á|·'Öì±'s|·)ÄŸ«”Æ) TÊ)
& Ÿ«ÁÄÆ)Õ)tÊ)ç'š±l(D(
òX š±˜()dÎ($Ò(
„Øš±Î(×( DÒ(Î( 
ž$œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ÿ«»² 纾
Ê
 lÎ( lœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃŸ«\
 A
î

÷Ú( [Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ùù»²Ås
¡$œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
»²‚÷ Ù î œØ°ø Ü( Ä
î ÈŸ«œò( Š
š±Ÿ«T¤'Öà 
ÖÃ,1ÖÃü·&Áø)´
üÙ'¾ü…(’ü²(e ¥ùª
ü¨)0ë÷ìé& ŽÃLÅ&õîÐ&ÖÃü±'¶ ÖÃã”Ù'Æóf„¾„¾ñ€†¾ ˜X$]È=„kt•Æó‰(•¢˜¢™¢lš¢ˆ›¢œ¢[¢ˆe0<#˜‚÷‚ö{©ô¹4‚÷=‚öÄáª
´Ï ”﬎f¬ŽÒˆŽ¶(Ž ³ ¹= ¿wˆŽ 
íòúÀó¯îó£ôYå÷`ÖÃ|Ð*
&ÖÃ9œº*É*ÄŸ«÷*
lî*$ò*
&
Ÿ«ÁÄî*FLò*ò+é‘ã8l¹‘ã8l
¡Gõñü +A#?õñ
4üþ)ô ñ+.µ<üà*% Ÿ«ÁÄ& dœ*¾ûL†*ÁÄ‘*áûI´Ï@ÁÄ.ÔD“ŽHˆŽ{Ϊ€Rð€ÁÄÚ@’¦î©ûõ)1´£¯½¥)2( 
î©£¯EŸ
SÎÄ_ ÎÄjî©Ý…õ壯¸Ú¦Àûõ½¥ä
$õñÄÆ»• Æ3´È*
õñ
î© 
»òüÆA³–W GÜì 
 õñÔ´Ä´ô¨Ðù´øù¡. "¶©ù¯ ΩJF ñ©V^
Īm{ñªšü /
 
»òüÆŠ,•³–I ! Eü•;üÆ é–KìÃüƒé4;–óÕ„¡ô ¿—§¿—á¿—]Á—fõñõñA»ò5…õ>õñò»ò‹ˆ"ˆø“¡.ß­Ö¶©ïõñü­ññ©ÖĪ¥® ¶©Ì±ÏÀ9ÀE# »•>…õ»òü³–Üô¨žΩTñª‹ˆ»òë³–Ðé–£š±л)1(”Ò  
š±×¥
0¢Å< ¢ÅGš±º¼Œ`jл©(•Ù % õñ  õñš±)5»ò_dÕòqvdiˆÞ¨
 –ó¬Å´¡ô¼õñÄõñµ»ò½¾¾ź¼Íí±ú¾¾»òûÕò‘¦óˆ‰Ÿä}
ŒY¯Æóˆøˆåˆ(½@(½@†{(À@Ù*®ÓN-õ>Zš±áÆù§ùî-ù§ùî%
öX …‘Ÿï7ù¦—‰é Á
š±áƦ˜‹Ë
ù¦•‡ƒù¦؈Á
Á
óbÅ
Ù*Ê,Íþ¬(¡š±áÆù¦‡ˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• ¯ÆŇÜ‘lÇ“±„¾„¾ñ€†¾ ˜X$]È=„kt•Ü‘c\Ù*Ç ÉÖ‘ø–2 
š±áÆÍ¬
ø–Ñ|¯Æö…‘(–ãÙ*5ˆ­ & õñø–ý X–ÿÉ„ý<ð–ÿ3˜®¥˜“¥Œ…(–²õñ . –¤ »òø–ý<(–žá…±BØ–žø–ýE0–º•†K@–ºÐ°
ø–¨¨
–ó€–Ú ¯Æ(–¯¡ôõ†¨õ†G÷†Põñr»òöˆ0U±VÉ„Œ…b‹ˆ»ò:á…•†ôp–Å 8Ê 
Ë
š±áÆÅ H–Ê  –Å ê“è–Å Ú 
„Ø…‘6ß @–Ú ð µ
ø–ɧœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã…‘ƒØè–•“Ñõîñê“æÒ’%*”ï,­Ì™Q™š œ³ 
î©£¯ÌÇü€LÎÄî©,‘£¯ Ù*±F ¼,¿­ 
î©£¯ ŹǷÎĴ£¯°£¯î©|Ù*Ա׌É
  
£¯à
Èüš
F“Ç
£¯ §
± /ÌÀ


î©)1=
áÂ<Ö


£¯

½¥+
üÀ
1 

¡Ãô£¯Ýg¼Ú
 ð

÷
üæ ,<Ñ2œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¡ì˜
 ÎÄ õîÿ ¼ÅÛÆû£¯Ú¦¼7@”ïD9áÂU½¥á¡Ä¼ÅyüÜ0 î©ÄÜÜÇ, ó
£¯,„½¥+<„¤¬¸
˜È¡£¯­^¼õ 
üÊCŒÊ
¬
˜È£¯$*ü‹ˆ\lÒ2 

ý|¹
Ù*ÇûDjÁt囘ȣ¯¸£L“‰®(½@(½@†{(À@Ù*®ÓN-õ>Z˜È£¯ý˜ÈÚÛÆú£¯˜Ú¦·;{êË
ÜÇ)½¥Ü‡¦cÖ¦g˜ÈŒ„  
š±ÕüÛ@¢Åš± ì± / |  
š± Õ¢Å}š±{š±_±°£¯½¥+ü·D 
î©£¯ ü‚ÚÎÄ “Ç,‹î©,’£¯¯Ú¦Íî©-Ù*0n½¥éî©ûõ)1 ¯˜£¯½¥)2à ß
î©£¯¯å¯äEç
SÐÇ_ ÐÇjî©Ý…õ壯¸Ú¦Àûõ½¥ä
'
õñä®»• ®3Ô°*
õñ
î© 
»òü®E³–W GÜØ 
 õñÔ Ä ô¨Ðû øû. "¶©û ΩJF ñ©V^
Īm{ñªšüŒ/
 
»òü®Ž,³–I ! Eü;ü®¤é–KØåüëí4;–󇯡ô ù¿—§¿—á¿—]Á—fõñõñA»ò5…õ>õñò»ò‹ˆ"ˆø°.ß­Ö¶©ïõñü­ññ©ÖĪ¥® ¶©Ì±ÏÀ9ÀE# »•>…õ»òü³–Üô¨žΩTñª‹ˆ»òë³–Ðé–£¼ß ß
î©£¯üéü¬PÐÇî©£¯ ÇÙ*±F ó­ ß
î©£¯ õ¹é·ÐǴ£¯°î©£¯|Ù*Ա׬… è
£¯ êüÒNùȔ裯 ß± /
î©ÌÏ


& î©ÇB7å

î
óüø vœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
î©ߺ&
Ôª
 ÐÇL†
õî
ÛÆ.”ï"òÖºC î© £¯ŒÉ  +
•"£¯§ÈC3;ü¹ " 
&
î©ߺŠe¼Ä á ôü‚ _î©ߺ& ļ §È<• ÛÆæߺÄ £¯äæ½×8êË<sܽ‘¾È ±þ š±л)1Ë  è
š±±Ð í
0´È< ´ÈGš±º¼Œ`jл©Ò  (õñ ²þ   õñš±)5»ò_dÕòqvdiˆ²× ð
 –ó¬ÊÀ´¡ô¼õñÄõñµ»ò½¾¾ź¼Íí±ú¾¾»òûÕò¬ü
 è
š±÷üÓ
D´È
š± ä
± / Ž| è
š± ÷´È}š±{š±_±°£¯½¥+ü»H ß
î©£¯ ˆü†ƒüÐÇ ùÈ,î©,–£¯°Ú¦Î-Ù*0o½¥êî©Áî©ûõ)1 ³Ï£¯½¥)2 ñ
î©£¯³³šEù
S·É_ ·Éjî©Ý…õ壯¸Ú¦Àûõ½¥ä
) õñìæ»• æ3Üè*<—
õñ\ 
î© 
»òüæF,‘³–W GÜ‘À 
 õñÔÙÄÙô¨ÐýÙøýÆ. "¶©ýÔ ΩJF ñ©V^
Īm{ñªšüÅ/
 
»òüæ³–I ! Eüº;üæ¥é–KŠü£î4;–óõÈ¡ô ±¿—§¿—á¿—]Á—fõñõñA»ò5…õ>õñò»ò‹ˆ"ˆø´Æ.ß­Ö¶©ïõñü­ññ©ÖĪ¥® ¶©Ì±ÏÀ9ÀE# »•>…õ»òü³–Üô¨žΩTñª‹ˆ»òë³–Ðé–£ý *õñ µ±  õñš±)5»ò_dÕòqvdiˆµÿ
 –ó¬ ŒÊ·¡ô¿õñÇõñ¸»òÀ¾¾Ⱥ¼Ðð±ý¾¾»òþÕò±š±л)1 ú
š±0ŒÊ< ÒDš±º¼]g릑Çóˆ‰Àä}
ŒY›Ëóˆøˆåˆ(€@(€@MapOkÁ(ƒ@Ù*§¢CO<½5š±áÆùÈùî-ùÈùî%
öX ¥ÕŸï7ùÇ—‰é š±áÆÇ˜‹¥ùÇ•‡ƒùÇ؈óbŸÙ*ý_:n©5±áÆùLJˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• ›ËŇÖqìׄ¾„¾ñ€†¾ ˜X$]È=„kt•Öc\Ù*Ì éÔûÕø·2 š±áÆ·Íø·Ñ|›Ë ·ö¥ÕãÙ*5ˆÎ +õñø·ý ÿÉ„·ý<ð·ÿ3˜Ï¥˜•¥Œ…²õñ . ·¤ »òø·ý<žá…±BØ·žø·ýEº•†Kº·ÐŠø·¨¨
–ó€·Ú ›Ë¯¡ô·õ†¨õ†G÷†Põñr»òöˆ0U±VÉ„Œ…b‹ˆ»ò:á…•†ôÅ Ê 
¥š±áÆ ·Å Ê  ·Å Øè·Å  ·Ú 
„Ø¥Õ6·ß Ú ·ð ø·É§œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã¥ÕƒØè·º× ·Ñõî·ñØæ÷Ö%*”ï,­ñÝQ¾Þ Äö ñ
î©£¯ŽüÃQ·Éî©£¯ ÞÙ*±F ,‡ ­ ñ
î©£¯ ¹Ž··É´î©²£¯°£¯î©|Ù*Ô±×´   ú
£¯¼ üì
PþËœ‚ £¯ ù
± /î©̯áÂ,ÅΘüÕ
y¼Åì‡ ·É
õîî
ÛÆƒ”ï!QáÂü¸/ î©ĸÜÇ, Ï
£¯½¥+¤¬¸
˜È䣯¯`´Ñ æ
ü¡G´¡
˜È£¯&*îüâŒ\l2 å‚Ù*ýGÀYáC%b˜È£¯Ú䉮(€@(€@¯Ô(ƒ@Ù*§¢CO<½5˜È£¯˜ÈÞÛÆþ£¯œÚ¦»=|êËÜÇ-½¥àïægÀçi˜È´ï ú
š±œüÆEŒÊš± ×± / | ú
š± œŒÊ}š±{š±_±°£¯½¥+ü±I ñ
î©£¯ ÿüü¡·Él™ þË,…î©£¯°Ú¦Î-Ù*0o½¥êî©´î©ûõ)1 У¯½¥)2 ¹î©£¯ÐÐEÁS¼Ì_ ¼Ìjî©Ý…õ壯¸Ú¦Àûõ½¥ä
, õñÜ×»• ×3ÌÙ*<†
õñ\
î© 
»òü×D,€³–W GÜ€¯ 
 õñÔÈÄÈô¨ÐÿÈøÿµ. "¶©ÿà ΩJF ñ©V^
Īm{ñªšü´/
 
»òü׳–I ! Eü©;ü×£é–K¯ü”ì4;–óôï,›¡ô ¢¿—§¿—á¿—]Á—fõñõñA»ò5…õ>õñò»ò‹ˆ"ˆøÑµ.ß­Ö¶©ïõñü­ññ©ÖĪ¥® ¶©Ì±ÏÀ9ÀE# »•>…õ»òü³–Üô¨žΩTñª‹ˆ»òë³–Ðé–£ê -õñ Òœ  õñš±)5»ò_dÕòqvdiˆÒïÇ –ó¬ ‘Í·¡ô¿õñÇõñ¸»òÀ¾¾Ⱥ¼Ðð±ý¾¾»òþÕò Óœš±л)1ñ š±ÓöÊ0‘Í<ŸùDš±º¼]g릑äóˆ‰Ýä}
ŒY Îóˆøˆåˆ(Æ6(Æ6MapÁ(É6Ù*(%”¡'H…š±áÆùåùî-ùåùî%
öX ¤üŸï7ùä—‰é ãš±áÆä˜‹íù䕇ƒùä؈ããóbçÙ*¢NoÀ™ÚQ†š±áÆù䇈)„¾„¾ñ€†¾ ˜X$]È=„kt•  ÎŇýünèþ³„¾„¾ñ€†¾ ˜X$]È=„kt•ýüc\Ù*É èû÷üøÔ2 Øš±áÆÔÍÎøÔÑ| Î Ôö¤üãÙ*5ˆë .õñøÔý ÿÉ„Ôý<ðÔÿ3˜ì¥˜—¥Œ…²õñ . Ô¤ »òøÔý<žá…±BØÔžøÔýEº•†KºÔÐÒøÔ¨¨
–ó€ÔÚ  Î¯¡ôÔõ†¨õ†G÷†Põñr»òöˆ0U±VÉ„Œ…b‹ˆ»ò:á…•†ôÅ Ê 
íš±áÆ ÔÅ Ê  ÔÅ ‹ÿèÔÅ  ÔÚ 
„ؤü6Ôß Ú Ôð ×øÔɧœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã¤üƒØèÔ¶þ ÔÑõîÔñ‹ÿæóý%*”ï,­í„Qº… ´Õ ¹î©£¯ñ³ü¢O¼Ìî©£¯ ½Ù*±F á­ ¹î©£¯ ê¹³·¼Ì´î©²£¯°£¯î©|Ù*Աפ÷
 £¯ ´üÅ
LƒÏŒÛ
£¯ Ò
± /î©ÌÀáÂ,ÖüÀ-
¡Ãô
è¡Ã΋`Ô‹
œÚó¾üæ
œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
΋ì˜ ¼Ì
õîÿ
¼ÅTÛÆt'”ï+òáÂÀ‹düÛ, î©ÄÛÜÇ, ò
£¯,ÿ½¥+<ÿ¤¬¸ô
˜ÈÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ùæ΋£¯ÿ°œô 
üÆB¤Æ
Θȣ¯v*Žü‡\l¿2 ØØ®‡ÛÙ*¢%D)ÓŠ§˜È£¯¾L‰®(Æ6(Æ6®û(É6Ù*(%”¡'H…˜È£¯P˜È-ÛÆM£¯ëÚ¦
<{êËÜÇ|½¥/冑h˜È¤‹ š±¥ÂüâC‘Íš± ó± / œ| š± žÂ‘Í}š±{š±_±°£¯½¥+üÇG ¹î©£¯ ü’Ç¼Ì ƒÏ,›î©£¯°Ú¦Î-Ù*0o½¥êî©ûõ)1 í²£¯½¥)2û î©£¯ííÿESÁÏ_ ÁÏjî©Ý…õ壯¸Ú¦Àûõ½¥äŒ¼ î©£¯ÓÔü‰JÁÏî©£¯ ¤Ù*±F Ê® î©£¯ ̺ԸÁϵ£¯±î©ˆ£¯}Ù*ձشٜÙ
룯 í&õÕü§NŸÑŒ½£¯ ´± /íœuî©ßÖü¨7…õÁ¹™ .î©Ý×üšCÛÆ ÁÏ 1î© Í£¯ÎØü—7î© ²ÁÏ .£¯^ Ÿ«Ì¥  
& Ÿ«à¶5»  ü¥ -<¿ 
Ÿ«à¶&

ë˜¡Š¡s ž¡
œ¿ Ø ãüË
œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
˜¡ìý
 ŠÐ
õîä
œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Š¡ý´Ï½”ïÁˆÊ 3€¡D“ ÉÐ Ÿ«¤œ  
&
Ÿ«à¶5¬  ô“  u
•"ÉП«à¶& =E· äüÞ Y ! ˆ£ à¶ñ  ÉÐ솦ˆ¦Ð´Ïï8“Ž<k¼¥ü¥×

/ õñÜÇ

»• Ç
3ÌÉ
*

õñ\ÿ

î© 
»òüÇ
D
³–W GÜð
Ÿ 
 õñÔ¸ĸô¨Ð¸ø¥. "¶©³ ΩJF ñ©V^
Īm{ñªšü¤/
 
»òüÇ
,™³–I ! Eü™;üÇ
£é–Kðèü„
ì4;–ó
¹™,
¡ô
¿—§¿—á¿—]Á—fõñõñA»ò5…õ>õñò»ò‹ˆ"ˆøî¥.ß­Ö¶©ïõñü­ññ©ÖĪ¥® ¶©Ì±ÏÀ9ÀE# »•>…õ»òü³–Üô¨žΩTñª‹ˆ»òë³–Ðé–£ ïš±л)1Ú Šš±ïß0åÐ< åÐGš±º¼Œ`jл©T‡ Šš±ëüÞ9åК± ï± / Ž} Šš± ƒëåÐ~š±|š±`±Ž±
&£¯½¥+ü¹% 
Ôî©£¯ ^C Ý
äü„`+;ð1ÁÏ ŸÑ,î©,”î©0£¯òÚ¦5Ù*8½¥+³î©Î„é
0õñüÚ »• Ú4ôÜ+Ž
 õñÔ§ħÞê
Ѓ§ 
øƒ.  " ¶©ƒ¢ ΩJF ñ©V^
Īm{ñª
šü“/ 
 »òüÚi³–R Düˆ;üÚé–Ißóü—È29–óׯ¡ô ¥¿—¥¿—éÁ—òõñõñÌ»òó‹ˆûˆøð.ß­®¶©Çõñíü­Éñ©®ĪÛ¥®ä¶©í¦±©À Àý»•¬ÞêdΩñªE‹ˆ»ò±³–é–jÿ 1õñáú“»õñ‚Ô+7»òafÕòsxfkŠú¢–ó® èѹ¡ôÁõñÉõñº»ò  ‚ÔÐç¼Øø±å¼»òÕò%‘‚óˆ‰ûä}
ŒYèÑ!‚óˆi‚øˆ1‚刂Ôùƒùî-ùƒùî%
öX ‚ÔŸï7ù‚—‰é Ÿî©›Ò˜‹©ù‚•‡ƒù‚؈ŸŸób£ºô)SYe¦×[î©›Òù‚‡ˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• èÑ!‚Ň»¾:¦À„¾„¾ñ€†¾ ˜X$]È=„kt•»¾c\º ڽ嵾‘•Û‰”Ë£
ŒY‚Ô!•Ûi•à=Á•ÕdÁ•—Ÿ Çî©›Ò#1•ОžŽî©›Ò& ù˜ùî-ù˜ùî%
öX ùŸï7gøî©øÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ›Òù•—Ÿ½ Çî©›Òï¡8 Çî©›Ò-²¢Öù•’œ ù•ŸžÑÇËøÌˆŽôÍ“ŽôΞŽÏ¬ŽôÐÑ·Žjiéðî©›Òù•)ÉÀ!•œ»¾œù•ŸžTÛÆ ôÃ+¨Ã4„¾„¾ñ€†¾ ˜X$]È=„kt•¨ÃCˆŽ“ެޡUßÁI¢ÃÜÝ ½î©›Òþüž`‚ÔôùˆŽ“ŽHîó° ½î©›Ò ÷¼º‚ԷôóôÃ}ˆŽØ“ŽÜ ¤¶ ½î©›ÒЃü„L‚Ôù¬Ž
0Å ½î©›Ò Ɉƒ‚ÔƒùÂùÂd¬Ž·T„ %+øôÃ5 
2 õñä·  É„ · 3 Ô¹  
3
õñôß  É„ ß 3
äá ù ÷D#Á ÷#»äù *#4(õñ1¿ øî©Þ øôÃÛ›ÒŒ”
 
5õñüõ 1
É„ õ  4
ôˆ
+ 
¾
 »òüõ M
á… c 0T¸
Ú

»òüõ i
á…T
0 
üõ ƒ
•†B

d„ 
î©›Ò¶© »òüß 2 á…ëO œþ üß ;4’ •†B
D fü· % •†Œ
 í üÁ¬ü Û–ó缡ô Ïü T…õV ›ÒGõ†ˆõ†Ïõ†%÷†.õñN»ò»òÓÝõ†=õ†÷†$õñD»ò¶©õ†÷†õñ²Ô±×ˆŽ“Ž)
É„áÉ„§»äÉ„ü…õ»òÎá…ÀÍÓ»ò¡á…•†o¶©»òFá…•†õ•†È\… 
6 õñ|Ѷ©¨õñJ¸ Û¼›Òüœ „œ
î©›Ò­E0üÿ
H î©›ÒÍüÊ
ƒèÑ
î©Û
›Òã
‚ÔôøˆŽ'“Ž+Y¥×È Ò·½·  Û¼›Ò º%
-+¥× dQ »0 î©›Ò Æ6/>èÑ;î©:›Ò9‚ÔËôÃú›ÒöˆŽr“Žw¦<´
©î©›ÒÉÀœà
úX»¾1ìà
Öî©›ÒJ-üÚ#s|é¥ã8l¹¥ã8lð€¼ü7õñ %,žžŽ–Ç 
„ØùÂÎצøÛÆ« øÇ”Ñ
& î©›ÒÑà 5  
î 
Ù¡ î œØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
î©›Ò& î©›Ò&
s| ¡Ä
î
 ÈÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
óߨ„Ê 
ž$¦à
ù¡
žî
 +/
;
$
äT›Ò Œ4ä
[Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ùùóßår
¡$œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã—ߊâÍM„ž
8õñüŒ#4—
°T›Ò89Ä—üƒ-$‡
&
î©›ÒƒXü‡)ÉÀ„Õ
ƒî©›Ò ã*üÆ Ñ
üX»¾bQ¬Ñþ 
î Ù¢ î œØ—ßs|  ¢Ä
î ȗߨ†Ç  
ž$—ßù¢
žî+/ ; ¬Ç låß
!ÉÀ\
" ½î©›ÒÜò
ý¢å!F"7 „ýÛ [Šââ
 ìâ,û¹
$
# Ö¿åßóß$¤ª
œØ—ß# Ð ³ üÌçü üéù¡ª
ÙàçÜÊüû~üŠÇü½ ù¢ª
 % , 3 &ò┃ô¿õî걿ÖÅ@ÉÀt ÉÀü ÛÆÇ•¢˜¢™¢lš¢ˆ›¢œ¢[¢ˆe0<#˜ŠâmœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã¦à
ᡪ
î¦à@aŠâjù ÿ›ÒŒôñõñµùîêH‚Ô;–ÇþåßÁ •¢˜¢™¢lš¢ˆ›¢œ¢[¢ˆe0<#˜ŠâåßâòâPᢪ
î—ß BŠâK åßÐ îê¿‚Ô´—ß2åßHþ?”ïDÓ„IˆŽµ“Ž© ¿·
Ž Ü¹ús|±¬ŽS resÁ[
¿  Ž 3 ¹»¢¾Û
ĆU
®Ü1
ð€ß ÒݹÞ; ‹áðØáªìâþõ㜧äqòä-¢å·æu¢åÞìâƒåßBƒ 9õñ¦!»òKPù¹]bPo¦ˆî–ó Õž¡ô¦õñ®»òŸ  ¬ûò´Ô±áëùò»òáù¹þƒ :õñᲓ»õñÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ¬«p|»ò¦«Õò¸½«°Ï²ˆôç–óó ßÕþ¡ôõñõñ»ò
  †ôðõ"C±Q\îõ»òSÕòq‘ºóˆ‰³ä}
ŒYßÕóˆøˆåˆ†ôù»ùî-ù»ùî%
öX †ôŸï7ùº—‰é ú¬«º˜‹ùº•‡ƒùº؈úúóbýÙ*{ÌtïÿȇR¬«ùº‡ˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• ßÕŇÇ÷2ªùw„¾„¾ñ€†¾ ˜X$]È=„kt•Ç÷[\Ù*æöÝÁ÷Äà שׂá¦ü€aßÕŒ§†ô,’Ù* /

š±¤é„¾„¾ñ€†¾ ˜X$]È=„kt• Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙš±üé!
¬Tš±ª*üã'K”ð„ð
 Ûÿûîó³ü¨"
äª×´žáÜ¡ˆˆ¢ˆl }.xϾ Ìì˜Þ
è×´½þµT¿•ÿ
 œ·Ìð
èÕ½þs|Õ0
ôì ֿ䪽þ
üà+ œØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
䪽þ  Š œ¬üü™1 œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã©€”Æ„¾„¾ñ€†¾ ˜X$]È=„kt• ëÖ$—õî­Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÿû2æûÉúúóbýÙ*{ÌtïÿȇRš±-\™ÿûœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
äª×´©€½þÛÕîr”ïwÙ*÷5»û5õüƒÇý7îó®þßÑÿB ;õñ€Á õñ†ô)5»ò_dÕòqvdiˆÁ˜ –ó¬ ¥×·¡ô¿õñÇõñ¸»òÀîõÈðõÐð±ýîõ»òþÕò”¡ ¬«¹´üˆ±¥×†ôÙ* 0} ¬« ²ƒ´¥×}†ô{†ô_Ù*± †ô„„ s|  Ö¿½þs|œž  œØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
½þ  ° †ôÛ¬«¤À 
& ¬«ì¬Ñ 5Ôº 
 œØ†‹ ó ÈÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¬«ì¬&
¬…
<‡

ç[ç½þ
èç½þ
T
–Ž
œ‡
üù " œØ†‹ Ù
 ¼üª˜ü£ ·üç 4
œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã†‹ìÜ ¥×õîÜ£  ¬«&œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃRð†‹†‹3œ”ï Ù*½½3AœŒ»…ŽÙ,‹ 
T“ †ôœ“  
ªT¬«2 œ« 
 ¾¬«ì¬¬«ì¬& ì¬ü“ ,§ 
·T÷’¾¬«ì¬ï’ˆ“´ħ ÔÉ œÉ 
¦÷’ 'é üÈ ¡ è ½4ü‡ bïï„‘ñÙ*9˜WçûÂ÷’ ë ì¬ Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ÷’Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ*Ç÷J±“6ÊêËÎÙ*¥p§’|£“ò“Àì¬ ì¬  
&
¬«ì¬ ¯ 9 ¾ ¾Ì÷’® ±“ã ¬ 쬃´êË«ì¬Ø— êËl’ Û¼¬«üøO ˬ«ì¬s|È‹Fu\»Ÿì¬ÍÖüÉî׬«†ô¨ì]8
Ê<—ã Û¼¬« ž ᙠˬ«ì¬ ÆÞÖÜî×ج«Ö†ô|¬«µº™ì]ù ¼²
÷!„¾„¾ñ€†¾ ˜X$]È=„kt• î× _VZ†ôü²-§’Äô

<õñü²[
°TW
8üí ü²wT› œŒH¦ t + 
î s|ÙÂ î œØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¬«çs| ÂÄ
î ÈøŠ« 
ž$ ùÂ
žî-1
=

Åœ$ ª [Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ùùçêr
¡$œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã€Ÿ“¡ÍRù†ôŒÅ 
äT¬«) ÄÞ 
<õñüÅ 24× 
°T¬«]8
ü× ü 6 Ö¿¬«çü¶ C œØ€Ÿÿ  ÛüÓ¬ùª
ÍÔÛü«û¡”ŽËœõîõ•¢˜¢™¢lš¢ˆ›¢œ¢[¢ˆe0<#˜“¡ÞÓú•RÇ÷ÊýœÓ ËœðõñUáª
îTÁ“¡Ê€Ÿs¬«¬†ôöÇ÷
ýœ‘¦0õñð”ï¿Ë Ž <¹fs|  Åœ§§’?ò œŒà‘ ûÅœ¤õ¡ û¢¤½£j 
= õñôš  »• š 3äœ * 
õñ  †ô »òüš G ³–WGÜÆ üš ] é–F ý ßüÛ
¢
–ó\„  î×
¡ô é
¿—¿—Á—õñ;õñö»òéðõñP±S»•gðõ»ò%³–é–ÜÔÐŒÐ
Ö äª‰®-üË  à䪉®ñíüšWààáÈ刿 )Š!䪉®Ü«ËËëNÎÙ*¿Ï—O¿,ɤ¿hþÜ«‰®þì]R­Ö«
÷!„¾„¾ñ€†¾ ˜X$]È=„kt• ·¬_Vƒ­¬Ø
òX ƒ­6'ôØ
„؃­Ióüóü€|œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ܫ䪉®&
”»’®õ¾„¾ñ€†¾ ˜X$]È=„kt•†¯p†¯Ä®ó ’®n”ïr@Œ®,€¯Â¬¯œ
>õñ´”\–É„ 3¤–*ƒ­»òü”%á…tBü”.•†AÈ÷üÕs –ó ·¬¡ô ãõ†õ†÷÷†ÿõñ»òÙ ƒ­äI±L|É„Eñ´»òá…ø•†Ó|…  ¬«ÿüÔBèÙ¬« é± / Ħ
¬«
Ù¬«/7
 ¬«Ä
 0èÙ< èÙG¬«Š ¬«cmж² 
? õñÜœ  »• œ 3Ìž *Ë 
 õñÔä Ää 
«&¬«
Ðä  
øÑ .  " ¶©ß  ΩJF ñ©V^
Īm{ñª
šüÐ / 
 »òüœ d ³–W&DüÅ ;üœ z é–I œ ƒüÙ
Ã29–ó\† ©·
¡ô ç
¿—¥¿—îÁ—÷õñõñÒ»òó‹ˆûˆøÅÑ .ß­®¶©Çõñóü­Éñ©®ĪÛ¥®ä¶©í¦±©À Àý»•±߸jΩñªE‹ˆ»ò±³–é–j Ö¿˜¡s|
è­¢è¡EÍüë
b衜œ èÙ
õî ­¢C ¾Œ¬« +
•"¬«‰®C3;¡ŽüÓN£¯æ¾‰®æã¿%“Ž)VÙ¿±´î©ûõ)1 ÆÂ£¯½¥)2 ¡î©£¯ÆÆE©SÆÚ_ ÆÚjî©Ý…õ壯¸Ú¦Àûõ½¥ä
@õñ´Ò»• Ò3¤Ô*
õñ\…
î© 
»òüÒ?³–W GÜö¥ 
 õñÔ¾ľô¨Ð¾ø«. "¶©¹ ΩJF ñ©V^
Īm{ñªšüª/
 
»òüÒˆ³–I ! EüŸ;üÒžé–Köžüç4;–óÈÂ,–¡ô ¿—§¿—á¿—]Á—fõñõñA»ò5…õ>õñò»ò‹ˆ"ˆøÇ«.ß­Ö¶©ïõñü­ññ©ÖĪ¥® ¶©Ì±ÏÀ9ÀE# »•>…õ»òü³–Üô¨žΩTñª‹ˆ»òë³–Ðé–£Û A õñ Ȉ  õñš±)5»ò_dÕòqvdiˆÈ௠–ó¬ ›Û·¡ô¿õñÇõñ¸»òÀ¾¾Ⱥ¼Ðð±ý¾¾»òþÕò Ɉš±л)1â ªš±Éç²0›Û<óËDš±º¼]gл¦Œ† ¡î©£¯¢üÓJÆÚî©£¯ îÙ*±F ,­ ¡î©£¯ ¹¢·ÆÚ´î©²£¯°£¯î©|Ù*Ô±×|”  ª£¯© £üçB•Ý£¯ ô± /‘Úóˆ‰Óä}
ŒY®Üóˆøˆåˆ(ò7(ò7š”(ö7Ù*(%çlkïl]¼°°ȰùÛùî-ùÛùî%
öX §ÒŸï7ùÚ—‰é Ѽ°°ȰÚ˜‹ÝùÚ•‡ƒùÚ؈ÑÑóbÖÙ*²‹Æèx4¼°°ȰùÚ‡ˆ)„¾„¾ñ€†¾ ˜X$]È=„kt• ®ÜŇ‚ÓxõÔ½„¾„¾ñ€†¾ ˜X$]È=„kt•‚Ók\Ù*ÓëÑ#üÒøÊ2 ü°°ȰÊÍ·øÊÑ|®Ü Êö§ÒãÙ*5ˆá B
õñøÊý ÿÉ„Êý<ðÊÿ3˜â¥˜™¥Œ…²õñ . Ê¤ »òøÊý<žá…±BØÊžøÊýEº•†KºÊмøÊ¨¨
–ó€ÊÚ ®Ü¯¡ôÊõ†¨õ†G÷†Põñr»òöˆ0U±VÉ„Œ…b‹ˆ»ò:á…•†ôÅ Ê 
ݼ°°Ȱ ÊÅ Ê  ÊÅ ˜ÕèÊÅ  ÊÚ 
„اÒ6Êß Ú Êð ÂøÊɧœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã§ÒƒØèÊÃÔ ÊÑõîÊñ˜ÕæüÓ)*”ï,­þÚUÏÛ î©Ì¥áÂ,»ü¥-<¿À‹BÔ‹
œ¿Ø®üË
žŒìý
 ÆÚ
õîä
¼Å ÛÆ¿%”ï)ZáÂÓÀ‹­ü»- î©Ä»ÜÇ, Ò
£¯½¥+¤¬¸
˜ÈǦ£¯­^¤Ô ç
ü«>
·˜ÈǦ£¯(.ïüìƒ`p¯2 ÃÃ¥–ÇÙ*‚b ¤Ý$î˜ÈǦ£¯d”ðÞ‰®<ÿ(ò7(ò7š”(ö7Ù*(%çlkïl]˜ÈǦ£¯
˜ÈçÛÆ£¯¥Ú¦ÄHê˃ÜÇ6½¥é“ápâát˜È ªš±÷²ü¹>›Ûš± ʱ / î| ªš± ð²›Û}š±{š±_±°£¯½¥+üB ¡î©£¯× ÖüÚ}·ÆÚ •Ýî©£¯¯Ú¦Íî©-Ù*0n½¥éî©Ô‡ć
Àü‡!ü‡% «! #CÆ4 Ë- 04.Zœé @  C
#äè 
üâ" âð? | D  
À¥Œ$›  ÄÉ  *üÀ !@  3
 
¤ì 
Áüá¥üöü¶ÐüÖ°ü wü´ Rû¿˜˜îXŸ,“ ,¸ h˜îq?
float_sizeÁ¡ precisionÁscaleÁ»z »|
5âèœåë  L‰ ¼û éèã8l¹èã8lð€ü  .C,õñ
- L
\­

 
* 


åë
 


 " 
 2 
ό
   *þ
Âü£ Ûüâ œüƒ
{ü¡
]üÃ
;Ò  ££¹ƒ£¹„£þ-'ºˆÉ¬g é
Ý 

° Ç
ahÅô0±rangeÁ¹hþjôm ¹d 8ð€åëû á° ž³8Åá™-Ýñà¶§ ïíe¼îËè¿*à¶ à¶œÕ
Àà¶½îÅü­AÇ ÓÝ à¶ÓÝéö'L÷ˆß
Ùˆß/7Ì ôˆßéÑú3ËÞ? ËÞJˆß® ˆß¹ w½øç
Ù·ˆßéÐÓ D õñ Eõñˆß)»ò Fõñ
( 
4 »ò˜
ûc®³¡¦qvÏêØýç –óóºùû¡ôõñ õñþ»òÍùõñÞ»òæ ßùñßùùS±alÍù»òcÝü»ò3Åûü¥  ôˆß ÂËÌüõVËÞ$–ˆßÙ
0ˆßÔÅ
Çeˆß1ôé
¨eˆßÆeE;¼ðä d­
œÓ, ºü‘+ 
£e¯ÿ + ÚÛüŒÏÏü´§
¦ ËÞ¯ÿÍù«Q ¯ÿy#? ¯ÿçUÙYŸÝþö©ÿ±óÿnÓ€¯ÿð¯ÿö„ 
í¥Œì¬,üÃsààáÈ刿 )Š!¥Œì¬ÄÚ fƒƒ²¼àŒà
Ö¥Œì¬*ýŒ üýËËëNÎÙ*¿Ï—O¿,ɤ¿hþ¥Œì¬Ü—¥Œ m„·¼À
¥Œì¬Ó1Ý üÚƒºô
ÄaEŸ¬ŒO¥Œì¬´ü¥Œì¬ë“Žz††ËÄÁ
Ç¥Œʸ1ߎ ü±®Å Å âiÈ Ù*¸Ú‹‚@¥Œʸ„Ò¥ŒʸreqsÁ|އͬÊ(dÊ(
±¥ŒÉÐ$×( Ý(1å( üÜ'‰»
»
ˆe¾
Ù*¿
±êîœÁ§Ùc¥ŒÉЄú'¥Œ$ë'ÉÐ ñ'±¸‰ÕÌÕ9„Õ9
Ž¥ŒÉÐ$æ9 ì91ô9ü°8Äñ
ñ
ä€ô
Ù*ýõ
±ýPÑ« qîB¥ŒÉФÜ8¥Œ$Í8ÉÐ Ó8±š‹Ö¤ÈI\ÈI
Ç¥ŒÉÐ$ÔI ÚI1âIü¶H¬

†{š
Ù*
±úŽÏÎQw¥ŒÉÐ|ÚH¥Œ$ËHÉÐ ÑH±ýŒÕ¼×ˆt׈
³¥ŒÉÐ$æˆ ìˆ5ôˆ˜ ü醹¹±…¼Ù*¢½±¢g•´ÉÜvïÄ¥ŒÉÐ”š‡¥Œ$‹‡ÉÐ ‘‡±áŽßĶ–|¶–
饌ÉÐ$Æ– Ì–5Ô–œ üŸ•µß
ß
Äâ
Ù*Ûã
±Û‹ 滓Ÿ¥ŒÉМ̕¥Œ$½•ÉÐ Õ±ˆÍÞ”ºáLºá
¢¥ŒÉÐ$Äá Êá5Ò០ü¯ß£¡¡š”¤Ù*¥±?0S· g¥ŒÉÐlßߥŒ$ÐßÉÐ Öß±¸’ß¼ÜótÜó
Ô¥ŒÉÐ$ëó ñó5ùó¤ üæñø‰Ù*ȱÈtBpÜFˆO‰¥ŒÉДœò¥Œ$òÉÐ “ò±¤”߬™ÿ|™ÿ
Þ쬥Œì¬& ¥Œì¬&
¥Œ$©ÿI´ÿ© üòýÂÒÒ¯*ÖÙ*Ľ)Ò5lÑD¶ì¬š–¨–ü„þ0¥Œ$ûý iÓÔ´‹¤´‹
¿ì¬š–¨–¥Œ$É‹5Ô‹ª üú‰Úµµ£0ºˆ© U¬ŒËD} \쬚–¨–ü’Š5¥Œ$‰Š mð—Ã,š’\Œ’,‘’Ûöàœª’ Ÿ öà²áü…’r|á’lá’
.ôÓ’ Ÿ öà²ás|²áTù’ü¿‘º® ü ’#Ÿ ¢ £ Øs¤ ˆ¥ ¦ ñs§ ˆ`ú¶¦Á~öà²áœë‘Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙöà,Ö‘öàz²á<ö 'ö ¦šhä öà
Ùöà/7¹ þöàë¾ ƒ0Çà< ÇàGöàŠ öàcm¬² 
 ¦š%üÇ> þ²á   º ü¢i ƒá ²áw T²! öàì ! T ! 
."äªöà,«! :.üü L þStackÁÙ*.outerÁ.bÆÍõ„AwäªöàÎ! ½ ü³ › þþŠšö ° !2NÄ[Ë© ÜÖ Çà䪩 öà'ö *õŸ6$×' 
&üâ' Ìâ' 
® äª,ü' 'ü×',  ,Ü' 
½ öàŸ ¢ £ Øs¤ ˆ¥ ¦ ñs§ ˆ`ú¶¦Á~䪲áÞ°üÜ''  ( 
‰( üÉ&À ,<¿ 2þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„Aw³£öàü’': Çà$é& Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙäª,÷& Çà"³£ø?sö 1@ê¢+©£Çày$Î* 
&ÌÙ* ´Ù* 
.£¯ ð* %üÎ*%  ,Ó* 
½ öà”Ò±.(-òØ^ᣯ¾üÓ*  ò* 
ù* üï)Š ,<Á 2þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„Aw©¨öàü‘*2 Çà$‚* £¯ ˆ* Çཀྵ¨ú-±0úá§ÄŸ¨¢Çà2$¡` 
&ü¬`$ ü¬`! 
÷£¯ Î` )ü¡`0  ,¦` 
½ öàùÈfü¦`+  Ð` 
×` üç^ð ,<à 2þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„AwùÈöàü«_9 Çà$Ž_ £¯ œ_ ÇàùÈiú-±0úõ«š´¬tÇà2$ëd 
&üöd% üöd" 
œ£¯ ™e )üëd1  ,ðd 
½ öàþËfüðd,  e 
¢e üéc¹ ,<Ç 2þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„AwþËöàü¦d: Çà$‰d £¯ —d ÇàþËiú-±0úܯš›°tÇà2$ôh 
&üÿh ìÿh 
Õ£¯ i (üôh,  ,ùh 
½ öà“Çeüùh'  Ÿi 
¦i ü“h“ ,<É 2þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„Aw“Çöàü´h5 Çà$¥h £¯ «h Çà“Çhú-±0ú³´tÇà2$²m 
&ü½m# ü½m íœ Þm #ü²m/  ,·m 
½ öàŸÑŽ`ü·m*  àm 
çm üËlœ ,<Ë 2þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„AwŸÑöàüïl8 Çà$àl £¯ æl ÇàŸÑcú-±0úíœâ·tÇà2$¦u 
&ô±u ܱu 
²£¯ Íu 'ü¦u*  ,«u 
½ öà•Ýdü«u%  Ïu 
Öu üÊtŒ ,<Í 2þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„Aw•Ýöàüèt3 Çà$Ùt £¯ ßt Çà•Ýgú-±0úˆ»˜Ç»tÇà2$Ù| 
&üä|! ôä| 
¿£¯ ƒ} (üÙ|-  ,Þ| 
½ öàÀ±eüÞ|(  …} 
Œ} üö{– ,<Ï 2þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„AwÀ±öàü˜|6 Çà$‰| £¯ | ÇàÀ±hú-±0úî¾­¿tÇà2  'ü„‚# ü„‚ 
£¯ ¥‚ ,üù/   
½ öàƒÏšküþ*  §‚  ®‚ ü’œ /?Ñ 3þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„AwƒÏöàü¶8 Çà £¯ ­ Çà ƒÏu0±2ÿØÂ§šÃ~Çà9T’ƒ öࢃ Ó üë‚7 öà †ƒ Çà$ý‚  1TÝ… öàÌÝ… ,è… 
öàŸ«8<î… tè… ü… Ô üý„ öàŸ«T¥… …ž, Ÿ«<–… ˜žžì]!\“DZ$Α ÔÛ‘ ¼Û‘ 
ÿ£¯ ó‘ )üΑ( <Ó‘ 
Ô öàד±øÌšÂÜ4¬Á£¯üÓ‘#  û‘ ü‘ üÚ¢ Ö öàšÉ Çà £¯ õ …ž!šÉ)±+uàÈDÉÇàºÇàÀ$¦™ °™ Ø üؘX Çà$ô˜ Çà$ë˜  1$²¢ ¼¢ Ù ü¾¡~ Çà$å¡ Çà$Ü¡  1$ª± ´± Û ü•°Ÿ Çà$¿° Çà$¶°  2$è½  'üó½ ôó½ 
áÁÄÚÇÁÄ& ÚÇÁÄ&
ÚÇCüè½,  ,í½ 
½ öà”Ò±.(-òØ^áÚÇÒÒ¯*ÖÙ*Ľ)Ò5lÑD¶ÁħεÎðüí½'  “¾  š¾ ü¶¹ä /?à 3þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„AwÏöàüá¹ì Çà$Ò¹ ÇàÏðö$çÎ÷ÎÔÇà!$ÛÍ  'üæÍ% üæÍ# 
ÂÁħεÎÚÇ0üÛÍ1  ,àÍ 
½ öà”Ò±.(-òØ^áÚǵµ£0ºˆ© U¬ŒËD} \ÁħεÎáüàÍ,  ‹Î  ’Î ü–Éü /?ã 3þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„AwÐÓöàüÇÉñ Çà$¸É Çà ÐÓáö$ç€ÓÆÓØÇà!,ÐÝ  ŒØÝ TÝÝ 
Ó öà$ØÝ dÝÝ  èÝ  ¬ôÝ œôÝ 
º ,»Þ  üÞ1 üÞ* 
®Ÿ«ÁħεÎöàR9üôÝN ,ŠÞ 
½ ²á££Õ'¨"šK6¥wŸ«ÁħεÎs|ƒáæ§üŠÞ8  ÇÞ  ÈÞ ü·Ù /?æ 3üÌÝ| þþŠšö ° !2NÄ[˳ŸÙ*.ÌŸ.bÆÍõ„Aw‡Ù²áüíÙ Çà$ÞÙ öàIƒáõ‡Ùºöàå7ö ³×ú×@ÀØýØËöàY„Øß  GõñüÊß \Ìß É„ Êß 8ìÌß /\ðß öà»òüÊß2 ,êß á…|E”êß üÊß; 4ýß •†FDýß ‹à ë ü‡ß –ó\´ß …ž,Žß ¡ô •ß õ†šõ†÷†õñ0»ò嘞íJ±L}É„S˜ž»ò!á…•†ÙT«á ¨â¼«á ,¶á 
¨âî©8,¼á d¶á Èá ð üöàR ¨âî©l“á ùá,ÿà î©,†á  ¨â¤"Ù*$bÿß·ü‹
#
µ¬«Ñ´×´%2ˆ¶>Ÿ¨FMü“' ꬫѴ״%ë2÷¶>ç»FM Ÿ °¿¶¿ £ -è¾9°¿AH,“ Ÿ °¿¶¿ ¦ -è¾9¶¿AH4…! Š
š±Ÿ« Ž
-ÖÃ9š±AH<”! Š
š±Ÿ« 
-ÖÃ9Ÿ«AH| êë%Õ18?üá
 à䪉®#á0·¬<ƒ­DKŒ° ñ
ÀÆQTë? ÿû õøXT÷?ü Ššt¬@þý \ªA<þ LayerÁ,ÜAÿ Ä<ŠB&
ü‡DüÌ2/ `async fn(Request) -> Result<Response, Error>`Áÿú # OverviewÁúü–FC Tower is a library of modular and reusable components for buildingÁüÝ*' robust networking clients and servers.ÁˆúüŒJG Tower provides a simple core abstraction, the [`Service`] trait, whichÁü×OL represents an asynchronous function taking a request and returning either aÁü§PM response or an error. This abstraction can be used to model both clients andÁ servers.Áúü‰PM Generic components, like [`timeout`], [rate limiting], and [load balancing],ÁüÚIF can be modeled as [`Service`]s that wrap some inner service and applyÁü¤PM additional behavior before or after the inner service is called. This allowsÁüõTQ implementing these components in a protocol-agnostic, composable way. Typically,ÁüÊ2/ such services are referred to as _middleware_.Áýúü FC An additional abstraction, the [`Layer`] trait, is used to composeÁüÈ JG middleware with [`Service`]s. If a [`Service`] can be thought of as anÁü“
PM asynchronous function from a request type to a response type, a [`Layer`] isÁüä
PM a function taking a [`Service`] of one type and returning a [`Service`] of aÁüµ NK different type. The [`ServiceBuilder`] type is used to add middleware to aÁü„ 52 service by composing it with multiple [`Layer`]s.Áº úÔ¾  ## The Tower EcosystemÁÙ úüÝ -* Tower is made up of the following crates:Á
úä
 * [`tower`] (this crate)Á¼¬
 * [`tower-service`]Á¬Ä
 * [`tower-layer`]Á¤Ú
 * [`tower-test`]Áï
úüó
OL Since the [`Service`] and [`Layer`] traits are important integration pointsÁüÃKH for all libraries using Tower, they are kept as stable as possible, andÁüMJ breaking changes are made rarely. Therefore, they are defined in separateÁüÝFC crates, [`tower-service`] and [`tower-layer`]. This crate containsÁü¤EB re-exports of those core traits, implementations of commonly-usedÁüêMJ middleware, and [utilities] for working with [`Service`]s and [`Layer`]s.Áü¸OL Finally, the [`tower-test`] crate provides tools for testing programs usingÁTˆ Tower.Áú\— # UsageÁ£úü§OL Tower provides an abstraction layer, and generic implementations of variousÁü÷OL middleware. This means that the `tower` crate on its own does *not* provideÁüÇLI a working implementation of a network client or server. Instead, Tower'sÁü”FC [`Service` trait][`Service`] provides an integration point betweenÁüÛIF application code, libraries providing middleware implementations, andÁü¥GD libraries that implement servers and/or clients for various networkÁ protocols.Áüúü€OL Depending on your particular use case, you might use Tower in several ways:ÁÐúüÔKH * **Implementing application logic** for a networked program. You mightÁü MJ use the [`Service`] trait to model your application's behavior, and useÁüîNK the middleware [provided by this crate](#modules) and by other librariesÁü½IF to add functionality to clients and servers provided by one or moreÁü‡ protocol implementations.Áü§OL * **Implementing middleware** to add custom behavior to network clients andÁü÷LI servers in a reusable manner. This might be general-purpose middlewareÁüÄOL (and if it is, please consider releasing your middleware as a library forÁü”KH other Tower users!) or application-specific behavior that needs to beÁüà1. shared between multiple clients or servers.Áü’KH * **Implementing a network protocol**. Libraries that implement networkÁüÞGD protocols (such as HTTP) can depend on `tower-service` to use theÁü¦MJ [`Service`] trait as an integration point between the protocol and userÁüôPM code. For example, a client for some protocol might implement [`Service`],ÁüÅHE allowing users to add arbitrary Tower middleware to those clients.ÁüŽLI Similarly, a server might be created from a user-provided [`Service`].ÁÛúüßJG Additionally, when a network protocol requires functionality alreadyÁüª PM provided by existing Tower middleware, a protocol implementation might useÁüû FC Tower middleware internally, as well as as an integration point.ÁÂ!ú´Æ! ## Library SupportÁÝ!úüá!NK A number of third-party libraries support Tower and the [`Service`] trait.Áü°":7 The following is an incomplete list of such libraries:Áë"úüï"B? * [`hyper`]: A fast and correct low-level HTTP implementation.Áü²#JG * [`tonic`]: A [gRPC-over-HTTP/2][grpc] implementation built on top ofÁüý#PM [`hyper`]. See [here][tonic-examples] for examples of using [`tonic`] withÁdÎ$ Tower.ÁüÛ$<9 * [`warp`]: A lightweight, composable web framework. SeeÁü˜%DA [here][warp-service] for details on using [`warp`] with Tower.ÁüÝ%52 * [`tower-lsp`]: implementations of the [LanguageÁü“&+( Serv
Àº ÆQ» ÿû õøXº ü Šš¹ þý ¸ <þ Ðæ³ ÿ IJ &
6!9!<!¬€949Ôo»ñ»¸¼%»”B»„Zü cünl| Š
  Õ,   +   œ, 8¸ & 8û$˜
ž8 8!, ©8Ð & ®8¼ ´, µ  Ã, ·8paramÁ,¸& ½8¼$ Ä Å Æ È, Ê8actualÁ& Ñ8´Ò% Ô*× Ú ÿ K8ò„ä'ô8 pin_projectÁ  ƒ ,   ˜+   , 8¸ 
8§8, ²8Ð  ·, ¸ ¹ À, º8Ū $ Á Â Ã Å + × Ø Ü8ÿ
Ù8Ù*& ó, õ8Š« 8 ¢, £ ¤ «, ¥8Ū $ ¬ ­ ®, °8Ð  µ,  · ¾, ¸8Ū $ ¿ À Á Ã Ö8Ñ Ô Ú88 Ü8æ ß â ñ8Ù*& è, ê8Š« (ó8 û Ì8$  ¾8Ù*8 å, æ ç î, è8Ū $ ï ð ñ8Àó'ö8×ø'û8p8
ƒ, 8Ð  Œ,  Ž , 8Ū ,$   ˜ š Ù
8 ¨8׫ ® Õ ¯8$ ´8± & · ¹8º8À¾'Á8×Ã'Æ8ˆ Ñ:8Ò Ô(×8ÀÚ'Ý8×ß'â8Í ë Ï
8± ý þ8 debug_tupleÁ\ÿ Š œ8ÔL‹   , 8Ð $— 8 £ ¸ ¤8ë ° ± ·7...Á ¹8finishÁ À Á8 è, é ê ñ, ë8Ū $ ò ó ô8Àö'ù8ß'88
Š, Ž8Ð $ ,   œ, 8Ū ,—$  ž Ÿ8$, »8Š« & Â8ÀÄ'Ç8ß'Ï8$ × á ù !8!8° û ý, þ8Š« 4ÿ88À'Œ8ß'84 œ'8°% ¥+ ³ ´ »8Ý8 É8Š  Ð 8& Õ8À×'Ú8ÿ
Ü'ß8ñ€á ä å8æ8 î$ ï8”ïñ& ó õ8ö8Àú'ý8taskÁ$ÿ'ƒ 8k<…  Œ :8  ( 8À'˜ 8¼» 'ž 8·$   ¤ 8'© 8° ±  ³  ï  8 É 8Ðc Ñ  Ò  Ó 8Ù* Ù 8Š  Þ  á 8”ïß d<üH!E Trait aliases for Services that produce specific types of Responses.Á»„ú;Äô;$•<Çt!ÿ`4Å!
!pŒ!Yˆ\!<œJ!|N!Û`4
4,‚Øk<DÌ
·$MœØ AsyncReadÁLd
AsyncWriteÁToÃÄ<&¬“œ†L8y{jlLXUW=?´€3ü½3ü™>; The [`MakeConnection`] trait is used to create transports.ÁØúüÜHE The goal of this service is to allow composable methods for creatingÁü¥GD `AsyncRead + AsyncWrite` transports. This could mean creating a TLSÁüíOL based connection or using some other method to authenticate the connection.ÁåÎ쥌ü½ú
¥Œô©ŒßÍìö©ÐÄ >ãÄ .ÐÄ JãÄ :Í쥌ö©ü¦(ÂÅ ÃÂÅ ºÅ )ÖÅ æÅ Í쥌ö©\†‰Æ Í쥌ö©üÑD‚Ø³Æ üÞ6³Æ ƒØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÂÅ ‘Æ üå.«Æ ÇÆ vÙÆ WZü¦'ü÷*' The transport provided by this serviceÁT«T†üÔ-* Errors produced by the connecting serviceÁ,üÑCü—52 The future that eventually produces the transportÁ4ÖüëPü›KH Returns `Poll::Ready(Ok(()))` when it is able to make more connections.ÁTî ¥Œ ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
‘Æ  ù
¥Œö©”ïü÷>üÁ1. Connect and return a transport asynchronouslyÁ|ú ¥Œö©³Æ  Š
¥Œö©$ê4•ü¹@¤åÍìî© ¾÷Ä 4Á&î©ö©î©#%(*üþsåÍ삪 ƒ ÷Ä 4† &‚ªö©‚ªö©& ßР‚ª !! lnqsŸÐ T›
, 
Ôî

ŠñüÔ
OT×
ˆŠ ˆ‚ª ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åŠœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
‚ªö© â

‚ªö©
”ï~wü× =  ‚ªö©‚ªö© ê 
!‚ªö© ê,x„_!dc!+<YpÛ`4k
"#×|¤,"$4‚Ø"%È‹"&È‹ "&k<ÈÌ"(·œØ")Ä&"*¬\™DwŒœ…€ÄžqL¼QSAC´Ü5¬õ4„
š
InfallibleÁTˆê+,k<.Ì+.·$7œØ+/Ä<Q&+IL"<>-/´B!Œ·¤22ùÎ ¼“ª3
 üÿ$üÏ+( Create a new [`Shared`] from a service.ÁŒî©“ª11
3î©ì]S{üÈ7¤5¥656ùÎ ÍÍìäª ÐØî©“ª789:;& &
& & &
:;HJDFl†D44î©T44Ùù4¿44¹«üÞPŒŽ Œ“ª ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åŽœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
“ªäª&
4 ì4
:î©äªú÷|üØ. “ªäª“ªäª& 4 à4
;î©äªüý‹~üÛAü# Creates new [`Service`] values.Á±úüµMJ Acts as a service factory. This is useful for cases where new [`Service`]ÁüƒLI values must be produced. One case is a TCP server listener. The listenerÁüÐFC accepts new TCP streams, obtains a new [`Service`] value using theÁü—QN [`MakeService`] trait, and uses that new [`Service`] value to process inboundÁüé$! requests on that new TCP stream.ÁŽúü’HE This is essentially a trait alias for a [`Service`] of [`Service`]s.Á<å=¨>=><ÐÄ üÛÓ
¥Œö©‰®̃÷Ä 4ñÍ쉮<ÐÄ Kôã 6ÐÄ Wôã B?@ABCDEFG?@ABCDEFGÍ쥌ö©‰®?àä Í쥌ö©‰®@\…†å Í쥌ö©‰®AüÌO&´å ‰®üÚ@´å ‰®& èä Ìë´å ‰®&
Žå œ†¬å IÌå ;àå *öå Í쥌ö©‰®B¥æ Í쥌ö©‰®Cü˜ E‚ØÓæ ü¥ 7Óæ ƒØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
´å ­æ ü¬ /Ëæ ëæ výæ DFGEöùô÷ü£" Responses given by the serviceÁDÏ<<T…üÞ" Errors produced by the serviceÁ,Š<<üÌNü–1. The [`Service`] value created by this factoryÁ<Ñ<<ü¡-* Errors produced while building a service.ÁLØ<<ü˜ Düè+( The future of the [`Service`] instance.Á4 <<üú Tüã MJ Returns [`Poll::Ready`] when the factory is able to create more services.Áµ
úü½
RO If the service is at capacity, then [`Poll::Pending`] is returned and the taskÁü” FC is notified when the service becomes ready again. This function isÁüß *' expected to be called while on a task.ÁŽ úü– +( [`Poll::Ready`]: std::task::Poll::ReadyÁüÆ /, [`Poll::Pending`]: std::task::Poll::PendingÁTý  ¥Œ ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
­æ < ˆ
<
D¥Œö©‰®$
ӕ
ü’;üÔ
96 Create and return a new service value asynchronously.Ád• ¥Œö©Óæ < ¢<
E¥Œö©‰®êü¯RüÓC@ Consume this [`MakeService`] and convert it into a [`Service`].Áú
# ExampleÁð› üÁ! use std::convert::Infallible;Á¼ç use tower::Service;Áüƒ! use tower::make::MakeService;ÁÔ© use tower::service_fn;ÁÈúŒÐ # fn main() {Á
# async {Á´ø // A `MakeService`Áü“85 let make_service = service_fn(|make_req: ()| async {ÁüÐ<9 Ok::<_, Infallible>(service_fn(|req: String| async {Áü‘$! Ok::<_, Infallible>(req)Á }))Á });ÁÖúüÞ1. // Convert the `MakeService` into a `Service`Áü”.+ let mut svc = make_service.into_service();ÁÇúÌÏ // Make a new serviceÁüí2/ let mut new_svc = svc.call(()).await.unwrap();Á¤ú¼¬ // Call the serviceÁüÈ=: let res = new_svc.call("foo".to_string()).await.unwrap();Á # };Á<— # }Áð› d²¥ŒŒ<<Í쥌
F¥Œö©‰®R†üñWüíc` Convert this [`MakeService`] into a [`Service`] without consuming the original [`MakeService`].ÁÕúëò ð› üû!ó ¼¡¹ó ü½!Úó Ôã„ô úŒŠ³ô Íô ´²ãô üÍ<9 let mut make_service = service_fn(|make_req: ()| async {ÁüŽ<Åõ üÏ$‹ö ¸ö Ìö úüœ1éö üÒ,) let mut svc = make_service.as_service();ÁƒúÌ‹ç÷ ü©2Šø àú¼èÑø ü„=òø ÆúüÎ52 // The original `MakeService` is still accessibleÁüˆ?< let new_svc = make_service.make_service(()).await.unwrap();Á¸ù Éù ð› Tô ¥Œppt"u³"Ú³¢q+J¨¥Œ‰®< ÿ<û ,Â
G¥Œö©‰®$„ü° €žI¤JåK¨LKIJLˆ¬¬& Ÿ«d‰!Í쟫 ¸ Íì¬Í앬&ˆ¬¬ìù Í숬 µ &Ÿ«•¬„Ÿ!ˆ¬npjlfhü¶!ƒžN¤OåP¨QQOPNõ‚
d"‹ƒ
¾!œƒ
4Á!­ƒ
<É!¾ƒ
ì‚"у
»!âƒ
„¨"ˆ¬RSTUVWX?@ABCDEXW9;fhkmprlÀ"DÅ"MMŸ«•¬& Tá",æ"MMŸ«•¬&
dü"<#MMŸ«t#L—#MM”‘\±#4¶#MMÄ’üÏ#STÒ# ˆ¬ ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ˆ¬¬•¬BM Ý#M
Wˆ¬Ÿ«¬•¬$â#”ï:ˆüÖ$:dÙ$˜ ˜ˆ¬¬ˆ¬¬•¬CM æ$M
Xˆ¬Ÿ«¬•¬$ë$êæˆüì&"üÀ%<9 Service returned by [`MakeService::into_service`][into].Áý%úü&@= See the documentation on [`into_service`][into] for details.ÁÂ&úüÆ&%" [into]: MakeService::into_serviceÁ\÷&žZ¨[[Zу
ƒ'Íìì¬<†'´¬Y´P
ò³¯\]/1+-<•'$•'"YYˆ¬ì¢'<¢'"YYüÄ'Fž_¨``_у
É'¾
<Ì'؈¬,„(´¬aÙa)+.0¼‘(,”( ´¬´¬^ š(^
aˆ¬ì¬$›(ü”)Pžc¨ddcу
™)¾
<œ)¿cˆ¬TÙ)´¬eÀce)+.0üë)8î)šœ š´¬  c cˆ¢cµ
 `£cÂó `àB¤GS
œ–ób ò)b
eˆ¬ì¬$ó)±9‹ü’+Œžg¤håi¨jgijhõ‚
d÷+‹ƒ
š+œƒ
4+­ƒ
<¥+¾ƒ
ìç+у
—+âƒ
,ƒ­klmno& &
& & &
no/1\^acfhl¥,Dª,ffˆ¬¬& TÆ,,Ë,ff”‘\á,4æ,ffÄ’ü-OT-žŸ ƒ­ žÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åŸœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ƒ­¬&
f -f
nˆ¬Ÿ«¬•¬$ -”ïŒü™.2$œ.   ƒ­¬ƒ­¬& f ¡.f
oˆ¬Ÿ«¬•¬$¦.ê_üž0$üþ.85 Service returned by [`MakeService::as_service`][as].Á·/úü»/<9 See the documentation on [`as_service`][as] for details.Áø/úüü/! [as]: MakeService::as_serviceÁL©0Æqžr¨ssqrÍ샮 ·0•ä <º0ƒ®Æ|É0ppt"u³"Ú³¢q+J¨Æƒ®‰®Ú³¢q+J¨tu³0y{~|$É0"pp ƃ®ìÞ0<Þ0"ppºŒü€1R8¡žw¨xx¡wçš
…1•ä <ˆ1¿cƒ®TÇ1Ê­yÀcy)+.0üÙ18Ü1¢£¤ ¢Ê­ £ c cˆ¢cµ
 `£cÂó `àB¤GS
¤–óv à1v
y8ƒ®‰®$á1±ñŽüþ2Ž8¥ž{¤|å}¨~¥{}|~ƒ®Ø®& ʸdå3Íìʸ †3ÍìØ®4‰3ÍìÒ®<3&ƒ®Ø®ìÕ3çš
ƒ3&ʸÒ®„û3•®ƒ& &
& & &
ƒ@BŠŒˆl“4D˜4zzƒ®Ø®& T´4,¹4zzý¡\Ï44Ô4zz‡¤üû4OTþ4¦§¨ ¦•® §ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾å¨œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
•®Ø®&
z ‰5z
8ƒ®ʸخҮ$Ž5”ïÜü‡62$Š6© ©•®Ø®•®Ø®& z 6z
ƒ8ƒ®ʸخҮ$”6ê©‘üz%!W3ü©"!N3”Õ!C3F383;3-303t!„¦!
Future typesÁ4™!”bdá!š
üÄ)!dÎ>üKH Various utility types and functions that are generally used with Tower.Á»ñ„»>ĵ>$Ö>Å©ÞôÛý¢Èô¿ø¸ÿ ‰ ® ˆe<û»
ÒÜhd„õ
Óˆ%¤¨ùÕ¥Õ'ľ£Ö¦Ê"DØÏפ¯*TâÒØ§ø,„îýÙ¨£0|˜µÚÉ3œ¿êÛºs4àŸ Ü­=tý ÞØyl
߆{4«
áÑ{\³ 
âø‰äÆŠŠåÄT€ß
ç“€è
èä€ñ
ê´„¾ú
ë±…¹íÿ…Âî<‹ï¢“ðÈàòëNd¿ËóÆQTß ÿõדöš”$‚¡øã”ªùâi<±Å ûòÒp„ºò üó‚ØŒý¼àDÿŒþø dMDQŒ»
õ
Ä
É
TryFutureÁL'!Žß40( TryFutureExtÁd8×P¤,4f‚Øñ€|„¾k<‘Ì·œØÐæ˜Ä&¼Úd!Ìα³DK¤œY•lr„L…vxdf”¥U´½FüŠ@¤œœùÎ Í죯 ¿cî©T¿å®Àc4602üÑ8Ôª«¬ ªå® « c cˆ¢cµ
 `£cÂó `àB¤GS
¬–óš Øš
î©£¯±ë•üÙ3ãŸí Ÿ¡Ÿ ¡Íì¼°ÞÍì°âÍìȰ ñ'!°ް¢<>8:46ü“X¡›°ްžž
¢¼°°ȰÙ*šüŽ Gã¤í¥Ÿ¦¤¦¥̲
ݲ
î²
¦ ÿ²
L› ް§Àc§+-0257üÜ Bß ­®¯ ­ް ® c cˆ¢cµ
 `£cÂó `àB¤GS
¯–ó£ ã £
§¼°°Ȱ±Q›ü ˆã©íªŸ««©ª̲
 ݲ
 î²
¨ ÿ²
L ‚Ø›°4‘ ް¬­ƒØ„Ø­EGJLOQ  ¨¨¿ºüŒ
I$
°±²„¾„¾ñ€†¾ ˜X$]È=„kt• °ް ±ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾å²œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃްƒØ¨ ž
¨
­¼°°ȰÕœ”ïߜĤ¤¯°¯°ùÎ ©‰°
¬å®±²üì(üÃ$! Creates a new `AndThen` service.Áùî©£¯å®®®
±î©£¯Ù*±cŸü‰%ü¿?< Returns a new [`Layer`] that produces [`AndThen`] services.Áƒúü‹KH This is a convenience function that simply calls [`AndThenLayer::new`].ÁÛúüã! [`Layer`]: tower_layer::LayerÁ,£¯À±®®
²î©£¯±— üÕ¹¤´µ¨ !·´·µ
£¯î©‰®& ˜"²Ã
Ý•ä <àÍì²Ãé&®„žæ¡Ã¯Ã„¾–"£¯ƒÀ
Ô×ùÎ ÚØ£¯'!²ÃL„宸¹º»¼& &
& & &
»¼MO¸»½·¹l•³³²Ã'"T²³³¯Ã³³“Ëü„OT‡³´µ ³å® ´ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åµœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
安®&
³ ³
»î©£¯‰®²Ã$—”ï6¢ü—4 安®å®‰®& ³ Ÿ³
¼î©£¯‰®²ÃêËa¥¼°¾¾Íìš± µì°¿ 
ôüüÎ)& Creates a new [`AndThenLayer`] layer.Áš±ì°½½
¿š±±|¦üÁ;¤ÁÂÂÁùΠƉ°
É‚Á
À±ÃÄÄ*,/1<ˆÀÀå®ü¦*· ·À±î©À±î©À ¯À
Äî©£¯Ù*ܧL[,_ŒÆðšÄñÊ"D°"Ϥˆ%¤Ç"ù¥Õ'Äï"£¦¯*T“"Ò§ø,„§"ý¨L","Åϯ*TÒÆÇØ§×'¤,ÆÉK2†JÆÊÌ\DJ .ÆÌÐæ,TÆÍÄ<o&ÆÎ¼~!giL,[\<LN<>´`/ü¯
üy# A boxed [`Layer`] trait object.Áúü¡VS [`BoxLayer`] turns a layer into a trait object, allowing both the [`Layer`] itselfÁüøLI and the output [`Service`] to be dynamic, while having consistent types.ÁÅúüÉLI This [`Layer`] produces [`BoxService`] instances erasing the type of theÁü–2/ [`Service`] produced by the wrapped [`Layer`].ÁÉúëò Ûúüßda `BoxLayer` can, for example, be useful to create layers dynamically that otherwise wouldn't haveÁüÄC@ the same types. In this example, we include a [`Timeout`] layerÁüˆA> only if an environment variable is set. We can use `BoxLayer`ÁüÊDA to return a consistent type regardless of runtime configuration:Áú<“ð› ä› use std::time::Duration;Áü¸C@ use tower::{Service, ServiceBuilder, BoxError, util::BoxLayer};Áüúü€DA fn common_layer<S, T>() -> BoxLayer<S, T, S::Response, BoxError>Á whereÁüÏ'$ S: Service<T> + Send + 'static,Áü÷" S::Future: Send + 'static,Áüš+( S::Error: Into<BoxError> + 'static,ÁüÌ+( let builder = ServiceBuilder::new()Áüø$! .concurrency_limit(100);Á úü¡ 1. if std::env::var("SET_TIMEOUT").is_ok() {ÁüÓ  let layer = builderÁüó 1. .timeout(Duration::from_secs(30))Áô¥
 .into_inner();ÁÄ
úüÈ
 BoxLayer::new(layer)Á„é

} else {Áüú
›Ö
üš $! .map_err(Into::into)Áô¿ þÖ
Þ úüâ ²×
 , <“ ð›  úüŸ !ǽ
üÁ '$ [`Service`]: tower_service::ServiceÁüé %" [`BoxService`]: super::BoxServiceÁü
 [`Timeout`]: crate::timeoutÁ
Ú"ХѦÒÓÒÐÑÓÍ쫲Ã
ïÙ Ç
Íìµ² Ê
Í컲 Í
ý±u¶4vaĬ.ÔHJMOIKEGüÖ
P
ÆÏφJ†JK‰Jµ 7ŠJþÒ7‹J¤7·0ØQd諲«²âÑ Ìì˜Þü«'Ú"֥צØÙ×ÙØÖíÛ
°ïÙ ´†Ü
·—Ü
ºý±Ú#%(*-/24üüãôÙ Create a new [`BoxLayer`].ÁƒÑÑý±ÕÛÛÕ ÍìÑÑ ÑÑ«²ÌìÑÑ ÑÑÑÑ&ä×äªüî#ä×äª& µ²ä×äª&
»²L‡Ììä×$”ä×<›Ììä×äª& Íá
<×
Ú«²äªµ²»²ÑÑ®Õç鄃Ú<closure_kind>ÁÜ<closure_signature>ÁÜ<upvars>ÁÜÜÚ¿Òüº5Ú"ޥߦàááàÞßíÛ
¿ï٠ÆÜ
Æ—Ü
Éý±âãã2479<>ACÝÝâÑüŸ+¸ ¸ý±«²ý±«²Ý ¨Ý
㫲䪵²»²Ù*@­üö1Ú"奿¦çèèæåçíÛ
ûïÙ ÿ†Ü
—Ü
ý±éÙé+-0257:<¼®¹ ¹ý±ý±ä ·ä
髲䪵²»²ü–6Ú"ë¥ì¦íîëíîìíÛ
ïÙ Ÿ†Ü
¢—Ü
¥ý±ïÀcï+-0257:<üÓ6Öº»¼ ºý± » c cˆ¢cµ
 `£cÂó `àB¤GS
¼–óê Úê
﫲䪵²»²×'¯| "\"Åù£0| µðñÚ×, ¤,ðóK7 †JðôÌ\DO .ðöÐæ,Y ð÷Ä<t &ðøä z& giL1 [\A LN<>´e /ü­, ü~+ ( A [`Clone`] + [`Send`] boxed [`Layer`].Áª úü®b _ [`BoxCloneServiceLayer`] turns a layer into a trait object, allowing both the [`Layer`] itselfÁü‘L íÌ
Þ úüâQ N This [`Layer`] produces [`BoxCloneService`] instances erasing the type of theÁü´2 ¥Î
ç úüëS P This is similar to [`BoxLayer`](super::BoxLayer) except the layer and resultingÁü¿!  service implements [`Clone`].Áá ú ëò ó úü÷p m `BoxCloneServiceLayer` can, for example, be useful to create layers dynamically that otherwise wouldn't haveÁüèh e the same types, when the underlying service must be clone (for example, when building a MakeService)ÁüÑf c In this example, we include a [`Timeout`] layer only if an environment variable is set. We can useÁü¸V S `BoxCloneService` to return a consistent type regardless of runtime configuration:Á ú<“ ð› ä› òÑ
ü¸3 0 use tower::{Service, ServiceBuilder, BoxError};Áüì= : use tower::util::{BoxCloneServiceLayer, BoxCloneService};Áª ú¬´  # struct Request;Á´Ê  # struct Response;Á¬á  # impl Response {Áü÷ # # fn new() -> Self { Self }Á<
Éù £
úü§
P M fn common_layer<S, T>() -> BoxCloneServiceLayer<S, T, S::Response, BoxError>Á
¾Ó
ü‚ / , S: Service<T> + Clone + Send + 'static,Áü² " ‚Ô
üÕ + ®Ô
, âÔ
ü‡ + ñÔ
ü³ $ ¦Õ
Ø úüÜ 1 àÕ
üŽ
 ›Ö
ü®
1 ÄÖ
ôà
þÖ
ÿ
úüƒ, ) BoxCloneServiceLayer::new(layer)Á„° Û×
üÁ ›Ö
üá$ ƒØ
ô† þÖ
¥ úü©, Û÷
 ר
 éØ
æ úüê@ = // We can clone the layer (this is true of BoxLayer as well)Áü«+ ( let boxed_clone_layer = common_layer();Á× úüÛ1 . let cloned_layer = boxed_clone_layer.clone();Á úü‘I F // Using the `BoxCloneServiceLayer` we can create a `BoxCloneService`ÁüÛn k let service: BoxCloneService<Request, Response, BoxError> = ServiceBuilder::new().layer(boxed_clone_layer)ÁüÊ+ ( .service_fn(|req: Request| async {Áüö. + Ok::<_, BoxError>(Response::new())Á  });Á± úüµ, ) # let service = assert_service(service);Áâ úüæ) & // And we can still clone the serviceÁü) & let cloned_service = service.clone();Á ÷ó
üÀ* ' # fn assert_service<S, R>(svc: S) -> SÁüë!  # where S: Service<R> { svc }Á ú< ð›  úü! ǽ
ü¿' ŸÙ
üç% ÐÙ
ü ÿÙ
¤¸ Ú"ú¥û¦üýúüýûíÛ
Í ïÙ Ñ †Ü
Ô —Ü
× â²–Þh­¡Gþ68;=@BEGüàU ,à ðùù†J†JK‰Jµ 7ŠJþÒ7‹J¤7·0ØQd諲«²©à Ìì˜Þüº3 Ú"¥¦ƒƒíÛ
¿ ïÙ Ã †Ü
Æ —Ü
É â²#%(*-/24ü£ë üô* ' Create a new [`BoxCloneServiceLayer`].Áª ÑÑâ²ÿÿ
˜à
® ©à
 ½à
 Îà
 Þà
 éà
ü•# ýà
d  “á
 ©á
 Øä× ºá
 Åá
$ÿ àá
<†
«²äªµ²»²ÑѮՎ„² ¶á
Ïá
íá
ˆáüîA Ú"ˆ¥¦ŠˆŠíÛ
ó ïÙ ÷ †Ü
ú —Ü
ý Ⲍ2479<>AC ©àüä+ ,ç ½ ½â²«²â²«² í 
«²äªµ²»² Ù*Z´ü»= Ú"¥¦íÛ
À ïÙ Ä †Ü
Ç —Ü
Ê â²Ù+-0257:<¼ÿ , ¾ ¾â²â²Ž ˆ Ž
«²äªµ²»²$‰ üçB Ú"¥¦˜˜íÛ
ì ïÙ ð †Ü
ó —Ü
ö â²Àc+-0257:<ü°6 ³ ¿ÀÁ ¿â² À c cˆ¢cµ
 `£cÂó `àB¤GS
Á–ó · 
«²äªµ²»² ×C¶¤"„ "Å£×
¤,šœK
†JšÌ\D-
.šŸÐæ,7
š Ä<R
&š¡É3œm
ꚢÛ
z|L
n\
_aOQ´C
Bü`
5ü­0
üƒ6
3 A [`Clone`] + [`Send`] + [`Sync`] boxed [`Layer`].Áº
úü¾f
c [`BoxCloneSyncServiceLayer`] turns a layer into a trait object, allowing both the [`Layer`] itself矴L
íÌ
ò
úüöU
R This [`Layer`] produces [`BoxCloneSyncService`] instances erasing the type of theÁüÌ2
¥Î
ÿ
úüƒk
h This is similar to [`BoxCloneServiceLayer`](super::BoxCloneServiceLayer) except the layer and resultingÁüï
 service implements [`Sync`].Á
úl”
ëò ¢
úü¦t
q `BoxCloneSyncServiceLayer` can, for example, be useful to create layers dynamically that otherwise wouldn't haveÁü›v
s the same types, when the underlying service must be clone and sync (for example, when building a Hyper connector).Áü’f
òð
üù_
\ `BoxCloneSyncServiceLayer` to return a consistent type regardless of runtime configuration:ÁÙ
ú
ð› äå
òÑ
ü‚ 3
èò
ü¶ E
B use tower::util::{BoxCloneSyncServiceLayer, BoxCloneSyncService};Áü
ú,€
÷ó
 
…ô
´œ
£ô
¬³
Âô
üÉ
#
áô

Éù õ
úüù
T
Q fn common_layer<S, T>() -> BoxCloneSyncServiceLayer<S, T, S::Response, BoxError>Á
¾Ó
üØ 6
3 S: Service<T> + Clone + Send + Sync + 'static,Áü "
‚Ô
ü² +
®Ô

âÔ
üä +
ñÔ
ü
$
¦Õ
µ
úü¹
1
àÕ
üë

›Ö
ü‹1
ÄÖ
ô½
þÖ
Ü
úüà0
- BoxCloneSyncServiceLayer::new(layer)Á„‘
Û×
ü¢
›Ö
üÂ$
į
ôç
þÖ

úüŠ0
´› 
ר

éØ
Ë
úüÏ@
‡ù
ü0
- let boxed_clone_sync_layer = common_layer();ÁÁ
úüÅ;
8 let cloned_sync_layer = boxed_clone_sync_layer.clone();Á
úü…Q
N // Using the `BoxCloneSyncServiceLayer` we can create a `BoxCloneSyncService`Áü×r
o let service: BoxCloneSyncService<Request, Response, BoxError> = ServiceBuilder::new().layer(cloned_sync_layer)ÁüÊ+
¤ü
üö.
Ùü

ý
±
úüµ,
±ý
â
úüæ)
óý
ü)
¦þ

÷ó
üÀ*
æþ
üë!
šÿ

ú<
ð› 
úü!
ǽ
ü¿'
ŸÙ
üç%
ÐÙ
ü
ÿÙ
ĸ
Ú"¤¥¥¦¦§¥¦¤§íÛ
Ñ
ïÙ Õ
†Ü
Ø
—Ü
Û
Á³K6¥w¨68;=@BEGüäY

𣣆J†JK‰Jµ 7ŠJþÒ7‹J¤7·0ØQd諲«²Åî Ìì˜ÞüÂ7
Ú"ª¥«¦¬­¬ª­«íÛ
Ç
ïÙ Ë
†Ü
Î
—Ü
Ñ
Á³®#%(*-/24ü³ò
ü€.
+ Create a new [`BoxCloneSyncServiceLayer`].Áº
ÑÑÁ³©¯¯©˜à
¾
©à

½à

Îà
$
Þà
<ˆ
éà
ü¥#
ýà

“á

©á

 ä×
͆ 
ºá

Åá
$
àá
<
®«²äªµ²»²ÑѮո˜„É
®¶á
°Ïá
°íá
°°®¥ïü‰E
Ú"²¥³¦´µµ³´²íÛ
Ž
ïÙ 
†Ü

—Ü
˜
Á³··2479<>AC

±±Åîü‡+

 ÂÁ³«²Á³«²± 
±
·«²äªµ²»²$‘
Ù*w»üÞA
Ú"¹¥º¦»¼»¹º¼íÛ
ã
ïÙ ç
†Ü
ê
—Ü
í
Á³½Ù½+-0257:<¼¦

à ÃÁ³Á³¸ ¯
¸
½«²äªµ²»²
üŽ F
Ú"¿¥À¦ÁÂÀÂÁ¿íÛ

ïÙ
†Ü
š
—Ü
Á³ÃÀcÃ+-0257:<üÛ 6
Þ
ÄÅÆ ÄÁ³ Å c cˆ¢cµ
 `£cÂó `àB¤GS
Æ–ó¾ â
¾
ë²äªµ²»²
×`½D2"$6"ÅÒ×øXT ÄÅü Ì\D) .ÄÇ”Ò<3 ÄÈÄ<P &ÄÉŠ‚\l /
ÄÊ׃ ¤,ÄË ‚ØÄÍñ€° „¾ÄÎk<À ÌÄз œØÄÑŒ Ô\ Áñ³´A ¤Ì^ •D~ Œ t— |D« küŒ1 ]_KMôá
üÔ* ' A boxed `Service + Send` trait object.Áÿ úüƒM J [`BoxService`] turns a service into a trait object, allowing the responseÁüÑJ G future type to be dynamic. This type requires both the service and theÁüœ# response future to be [`Send`].ÁÀ úüÄL I If you need a boxed [`Service`] that implements [`Clone`] consider usingÁü‘6 3 [`BoxCloneService`](crate::util::BoxCloneService).ÁÈ úüÌO L Dynamically dispatched [`Service`] objects allow for erasing the underlyingÁüœR O [`Service`] type and using the `Service` instances as opaque handles. This canÁüïO L be useful when the service instance cannot be explicitly named for whateverÁ\¿  reason.ÁË ú # ExamplesÁÞ ú ð› Üê  use std::future::ready;Áü†!  # use tower_service::Service;Áü¨0 - # use tower::util::{BoxService, service_fn};ÁüÙK H // Respond to requests using a closure, but closures cannot be named...Á¬¥  # pub fn main() {Áü»0 - let svc = service_fn(|mut request: String| {Áüì& # request.push_str(" response");ÁÔ“  ready(Ok(request))Á Ìö  úüº G D let service: BoxService<String, String, ()> = BoxService::new(svc);Á¤‚
 # drop(service);Á,—
éØ
<
ð› ¥
úü©
 Þ¡ ¼É
 [`Rc`]: std::rc::RcÁ
¥Ó¦ÔÕÓÔÕÍ쬫 ÷
ÍìÑ´ ú
Íì×´ ý
Ÿ´½)Ò5lÑD¶Ö@B<>8:ü† i ,† ÄÒÒ/
/
/Š‚/ˆ/ ÝI±jžáÜ¡ˆˆ¢ˆl }.xÏ&¬«& ¬«Ñ´&
¬«×´& ¬«„¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xς؃؃þÌì˜ÞÌì˜Þ¤†
L
Ä¥ØÙØÙð¾
Íì ˜
„¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xς؃ØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¬«ö Ìì˜ÞùûóõüÒ
! ¥Û¦ÜÝÛÜÝð¾ ×
¿ Ú
’¿ Ý
Ÿ´Þá #%(*ü• œ ÌüŸ´Ú¤ßßÚÍìÌü   &Ìü¬«üÊ# Ìü¬«& Ñ´ Ìü¬«&
×´ ÌìÌü Ìü Ììôü$“ ôü ІÙ*šÀˆ Þ¶á
àÏá
àíá
ààÞÖüüÖ üÏF C Returns a [`Layer`] for wrapping a [`Service`] in a [`BoxService`]Á middleware.Á® úܶ †¢ ,Ý ¸‡Ú¤ââÚÌÆ ã ÝÆ ü—# ñÆ  ‡Ç  Ç  ®Ç  ¹Ç  ÊÇ 
ᬫѴ״ÌüRTü›0 ¥ä¦åææäåð¾   ¿ £ ’¿ ¦ Ÿ´çèéêë& &
& & &
êë>@CEHJ  ããÑ´  ãã×´ 4‚ ãã™Á ü¡E  ÇÈÉ ÇŸ´ ÈÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åɨ‰ã ¯ ã
ꬫѴ״ ”ïÙÄü 1  Ê ÊŸ´¬«™Á ã ¨ ã
묫Ѵ״ êËCÆüˆ0 ¥í¦îïîïíð¾  ¿  ’¿  Ÿ´ðÀcð#%(*-/ü¿6  ËÌÍ ËŸ´ Ì c cˆ¢cµ
 `£cÂó `àB¤GS
Í–óì Æ ì
ð¬«Ñ´×´ ×gÇT<"4@"Åýþ
Ì\D .ñó”Ò< ñôÄ<9 &ñõ×L ¤,ñö4h ‚Øñøñ€y „¾ñùk<‰ Ìñû·$’ œØñü\ ¥§—´* ˆDG zU t` nDt ]üU1 OQ=?üÃ$ ü% " A boxed [`Service`] trait object.Á„Î ¥þ¦ÿþÿð¾ ß ¿ â ’¿ å «µ ¥›„ .0358:üîS  ñýýžáÜ¡ˆˆ¢ˆl }.xÏ&¬«& ¬«Ñ´&
¬«×´& ¬«„¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xς؃؃þ˜Þ˜ÞÔß  ñ¥ƒƒð¾ ô î ÷ „¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xÏ‚ØƒØ‚Ä ˜Þ˜üä' ¥¦ˆˆð¾ é ¿ ì ’¿ ï «µ #%(*ü­ ´ Ìü«µ¤ŠŠÌÆ ¸ ÝÆ üâ# ñÆ  ‡Ç  ®Ç  ÊÇ  ë—Ù*·Ê79üœ ü–Y V Returns a [`Layer`] for wrapping a [`Service`] in an [`UnsyncBoxService`] middleware.Áô úÜü †¢ ,£ Ó˜¤ŒŒÌÆ © ÝÆ üÝ# ñÆ  ‡Ç  ®Ç ÊÇ
¬«Ñ´×´ÌüBDüÓ 6 ¥Ž¦Žð¾ Ø ¿ Û ’¿ Þ «µ& &
& & &
>@CEHJl
D•
Ñ´
×´
ÁÖ üå
E
ÎÏРΫµ ÏÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åШ‰ ó

¬«Ñ´×´
”ï³ÌüÚ 7 Ñ Ñ«µ¬«ÁÖ  â 
¬«Ñ´×´ êËuÍü¾ 6 ¥¦˜˜ð¾ à ¿ Æ ’¿ É «µšÀcš#%(*-/üû 6 þ ÒÓÔ Ò«µ Ó c cˆ¢cµ
 `£cÂó `àB¤GS
Ô–ó

š¬«Ñ´×´
×uÎüó
u ¤œ¨œùÎ ø
¾
&î©ì¬„µ î© ¢ 󴞟 ¡¢& &
& & &
¡¢_adf  ФT ,• Ç   „¾„¾ñ€†¾ ˜X$]È=„kt•žáÜ¡ˆˆ¢ˆl }.xς؃ؼ£˜ÞüüO Tÿ ÕÖ× Õó´ ÖÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åל؞؟ØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ó´ì¬&
 Š 
¡î©ì¬$ ”ïìÏüû4  Ø Øó´ì¬ó´ì¬&  ƒ 
¢î©ì¬ êËÖÑ$"|©"ÍPüº!"ÃPüÝ*"¹P„"®PÄŸ"£P|f\jŒµÒøXT
©ªæ*L1
' ©«×K
¤,©­k<[
Ì©¯·$d
œØ©°Ì\D€
.©²”Ò
©³Ä
&©´Œ
¢ü
@
ˆÄ@
z|ik\r
[]JL´˜
=ü±-
* A [`Clone`] + [`Send`] boxed [`Service`].Áß
úüãI
F [`BoxCloneService`] turns a service into a trait object, allowing theÁü­N
K response future type to be dynamic, and allowing the service to be cloned.Áü
úü€M
J This is similar to [`BoxService`](super::BoxService) except the resultingÁüÎ!
¶î
ð
ú
ëò 
ú<†
ð› üŽJ
G use tower::{Service, ServiceBuilder, BoxError, util::BoxCloneService};ÁäÙ
òÑ

÷ó
Ÿ
…ô
´’
£ô
©
Âô
ü¿#
áô

Éù ë
úüï;
8 // This service has a complex type that is hard to nameÁü«'
$ let service = ServiceBuilder::new()ÁäÓ
 .map_request(|req| {Áüð)
& println!("received request");Á
reqÁ
 })Áìµ
 .map_response(|res| {ÁüÓ*
' println!("response produced");Á
resÁ
Ñó ¤™
 .load_shed()Áô®
 .concurrency_limit(64)ÁüÍ)
& .timeout(Duration::from_secs(10))Áü÷*
' .service_fn(|req: Request| async {矢 .
Ùü

ý
üÝ ,
±ý
Š
úüŽ
=
: // `BoxCloneService` will erase the type so it's nameableÁüÌ
^
[ let service: BoxCloneService<Request, Response, BoxError> = BoxCloneService::new(service);Áü« ,
±ý
Ø
úüÜ )
óý
ü† )
¦þ

÷ó
ü¶ *
æþ
üá !
šÿ

ð› |
¥·¦¸¹¸·¹ð¾ ¦
¿ ©
’¿ ¬
ˆ¶U¬ŒËD} \ºžáÜ¡ˆˆ¢ˆl }.xÏÒ¬«& ¬«Ñ´&
¬«×´& ¬«™Á Ìì˜Þˆ¶Íú©Êú ˆ¶µµ
¬«Ñ´×´
ü´
~
©µµÊú ü¸&
¥¼¦½¾¼½¾ð¾ ½
¿ À
’¿ Ã
ˆ¶¿Â #%(*ü
üå#
Create a new `BoxCloneService`.Á
Ìüˆ¶»¤ÀÀ» ÌÆ ˜
ÝÆ üÂ#
ñÆ 
‡Ç 
ØÌü
Ç 
®Ç 
¹Ç $“
ÊÇ 
Û¬Ù*WYÎ
¿¶á
ÁÏá
Áíá
ÁÁ¿Ù¦ü¥¡
ü™K
H Returns a [`Layer`] for wrapping a [`Service`] in a [`BoxCloneService`]Á
›È ý
úÜ…
†¢ ,¬
í»¤Ãû ÌÆ ²
ÝÆ üæ#
ñÆ 
‡Ç Lÿ
ýþ 
Ç $”
®Ç <
¹Ç 
ÊÇ 
¬«Ñ´×´ÌüZ\üò5
¥Å¦ÆÇÇÅÆð¾ ÷
¿ ú
’¿ ý
ˆ¶ÈÉÊËÌ& &
& & &
ÌË>@CEHJ

ÄÄÑ´

ÄÄ×´

ÄÄ™Á üœE

ÙÚÛ Ùˆ¶ ÚÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åÛ¨‰Ä ª
Ä
ˬ«Ñ´×´
”ï#×ü›.

Ü Üˆ¶¬«ˆ¶¬«& Ä £
Ä
̬«Ñ´×´
êËå×üò0
¥Î¦ÏÐÐÎÏð¾ ÷
¿ ú
’¿ ý
ˆ¶ÑÙÑ#%(*-/¼©

Ý Ýˆ¶ˆ¶Í ²
Í
Ѭ«Ñ´×´
üí!

©Ò£ÓÓÒÐÄ üíÒ
&¥Œ£T„
ÍìÖ‰ 
ÒÐÄ @̉ /ÐÄ L̉ ÔÔ68ü•¨
L˜
©Þ Þ¥ŒžáÜ¡ˆˆ¢ˆl }.xÏÒÖ‰ & Ö‰ ¥ŒÖ‰ & &
Ö‰ ¥ŒÖ‰ &
& Ö‰ ¥ŒÖ‰ & Ìì˜ÞÒ «
Ò
Ô¥ŒÖ‰ 
üÁR
£Ö¥××ÖÍìà¶ Æ
ïÙ É
&äªà¶
Ììäª
Øäª
äª<
äªØÔØZ\_aüšƒ
L
©ß ß䪞áÜ¡ˆˆ¢ˆl }.xÏÒà¶& à¶ðµ&
ඇ¶& à¶ž¶Ìì˜ÞÕ °
Õ
Øà¶äª
üÌ5
¥Ú¦ÛÜÜÚÛð¾ Ñ
¿ Ô
’¿ ×
ˆ¶ÝÀcÝ#%(*-/üˆ6

àáâ àˆ¶ á c cˆ¢cµ
 `£cÂó `àB¤GS
â–óÙ 
Ù
ݬ«Ñ´×´$
×-ܤw„{ŒêëøXT Þßæ*L1' Þà×K¤,Þâk<[ÌÞä·$dœØÞåÌ\D€ .Þç”ÒÞèÄ&Þ錢ü@ˆÄ@z|ik\r[]JL´˜=ÕØü±85 A [`Clone`] + [`Send`] + [`Sync`] boxed [`Service`].ÁêúüîMJ [`BoxCloneSyncService`] turns a service into a trait object, allowing theÁü¼YV response future type to be dynamic, and allowing the service to be cloned and shared.ÁúüšWT This is similar to [`BoxCloneService`](super::BoxCloneService) except the resultingÁüò Ç“ œž¥ì¦íîìîíð¾ ²¿ µ’¿ ¸÷¶g*n'hëïžáÜ¡ˆˆ¢ˆl }.xϬ«& ¬«Ñ´&
¬«×´& ¬«™Á  Ìì˜Þ÷¶ÿÞÝ— ÷¶êê
묫Ѵ״ üÀÞêêÝ— ü×*¥ñ¦òóóñòð¾ Ü¿ ß’¿ â÷¶ô÷ #%(*ü´œüˆ'$ Create a new `BoxCloneSyncService`.Á»Ìü÷¶ð¤õõð
ÌÆ ¿ÝÆ üé#ñÆ ‡Ç L‚ýþ ,Ç $— Ìü®Ç ¹Ç ÊÇ ¨ÀÙ*_aüô¶á
öÏá
öíá
ööô¡ºüÛ ¨üËOL Returns a [`Layer`] for wrapping a [`Service`] in a [`BoxCloneSyncService`]Á›È ³ úÜ» †¢ ,â Áð¤øøð
ÌÆ è ÝÆ üœ
#ñÆ
‡Ç
ýþ
Ç
ªœ
®Ç
¹Ç
ÊÇ

÷¬«Ñ´×´Ìübdü¯ 9¥ú¦ûüûüúð¾ ´ ¿ · ’¿ º ÷¶ýþÿ& &
& & &
>@CEHJ  ùùÑ´T† ,‹ ùù×´  ùù™Á üÝ E ãäå ã÷¶ äÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾å娉ù ë ù
¬«Ñ´×´ ”ïðàüÜ
.
æ æ÷¶¬«÷¶¬«& ù ä
ù
¬«Ñ´×´
ê˲áü³4¥ƒ¦ƒð¾ ¸¿ »’¿ ¾÷¶Ù#%(*-/¼îç ç÷¶÷¶ ÷
¬«Ñ´×´ü²!Þ£ˆˆÐÄ ü²å̉ በÅÐÄ *̉ &ÐÄ 6̉ 2‰68üÚ»Þè 襌žáÜ¡ˆˆ¢ˆl }.xÏÖ‰ & Ö‰ »‹ &
Ö‰ Ò‹ & Ö‰ é‹  Ìì˜Þ ð
¥ŒÖ‰ ü™Y£¥ŒŒØŒ žïÙ ¡ñŒ   äª ¥ äªKMPRüù±Þé é䪞áÜ¡ˆˆ¢ˆl }.xÏà¶& à¶ðµ&
ඇ¶& à¶ž¶ Ìì˜ÞŠ Š
à¶äª$üÕ9¥¦ð¾ Ú¿ Ý’¿ à÷¶Àc#%(*-/ü•6˜êëì ê÷¶ ë c cˆ¢cµ
 `£cÂó `àB¤GS
ì–óŽ œŽ
¬«Ñ´×´$׊ådD‘Œ¸Õâi<ï#Å òÒp„ƒ#ò ó##¥ StreamÁ4'EÚ« \0×L¤,˜4]‚Øñ€n„¾š§N,~¥‚œk<…Ì·œØžÄ&Ÿ¤¼ì­Až tUDi€üA:qs`bNP´œ@üìhã6¡¤¢¢£¢¡£Íìƹñ‹ƒ
öÍìй ù¿cƹT­'EŸ«¿cŸ«è¸¤Àc¤[]`b\^üÛ8Þíîï íè¸ î c cˆ¢cµ
 `£cÂó `àB¤GS
ï–ó  â 
¤ƹŸ«й±=ëüÔ!¥¦¥¦ÐÄ üÔ³‰°
ë‚Ø£¯¥ÐÄ 3ÐÄ ¨©§¨©§©¨MOÜüDÿð 𥌥 ˆ¥
§¥Œ£¯$‰ôñ ñ¥Œ£¯¥ ¥¥
¨¥Œ£¯ßüÁDòóô ò¥Œ óÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åôœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ£¯ƒØ¥ É¥
©¥Œ£¯”ïÔü‰mã6«¤¬¢­­«¬é± Ž‹ƒ
‚² &ƹ‹Ï„»£² ¥йßã”ã踮¯°±SUXZ]_üýP ƹŸ«й踪ª
®ƹŸ«йì]Ôì‘jÞìŸjèìüŸ ) è¸ƹªª
¯ƹŸ«й ü» 7 õ„¾„¾ñ€†¾ ˜X$]È=„kt• õè¸ƹª à ª
°ƹŸ«й³ðüí
D
è¸Á¼ªª
±ƹŸ«й$‰üÃxã6³¤´¢µ³µ´é± È‹ƒ
Í‚² Ðòº „€£² 4™» ”¨è¸·'F'G·@BEGJL²²ÕëüöTö÷ø„¾„¾ñ€†¾ ˜X$]È=„kt• öè¸ ÷ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åøœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙè¸'F² ²
·ƹŸ«й ÿ”ï*ÿ\î##Å Í ž¸¹º® 4‡'E¸º—º¸»Ú« \ϸ¼‚ظ¾ñ€„¾¸¿k<”̸Á·$œØ¸ÂÄ&¸Ãäù³ü“$¥ì½àŠDÿyüà1kmY[´«Kü²Lã6ŤÆÅÆé± ·‹ƒ
¼òº „Þ£² ò¹ÇÈÉÊ,.13üÈ6ü…&# Create new [`CallAll`] combinator.Á°úü¸XU Each request yielded by `stream` is passed to `svc`, and the resulting responses areÁü•RO yielded in the same order by the implementation of [`Stream`] for [`CallAll`].ÁìúüôOL [`Stream`]: https://docs.rs/futures/latest/futures/stream/trait.Stream.htmlÁÏƹŸ«ò¹ÄÄ
ÇƹŸ«ì] ‘j ô¿!üù$! Extract the wrapped [`Service`].Á¢ ú # PanicsÁ» úüà 2/ Panics if [`take_service`] was already called.Áú úü‚!85 [`take_service`]: crate::util::CallAll::take_serviceÁTÆ!ò¹ƹÄÄ
ÈƹŸ«ÿ ü­$0ü‹"$¼É ´"úü¼"OL This [`CallAll`] can no longer be used after this function has been called.Á#úd˜#õÉ ©#úü±#2—Ê è#úüð#8ßÊ d´$ù„¾„¾ñ€†¾ ˜X$]È=„kt• ùò¹ƹÄ Ë$Ä
ÉƹŸ«Ó
üª'9ü—%HE Return responses as they are ready, regardless of the initial order.Áä%úüì%=: This function must be called before the stream is polled.Á®&úd¶&õÉ Ç&úüÏ&" Panics if [`poll`] was called.Áö&úüþ&'$ [`poll`]: std::future::Future::pollÁL±'ò¹Á¼ÄÄ
ÊƹŸ« üŽ(Wã6̤ÍÍÌé± “(‹ƒ
˜(òº „Å(£² 4Þ(ò¹ÎÏ'F'GÏ0257Lì($ñ(ËËÕëü )TL£)úûü„¾„¾ñ€†¾ ˜X$]È=„kt• úò¹ ûÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åüœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙò¹'FË ·)Ë
ÏƹŸ«M ”ïW ü«*6ÑшÇ
°*‚Øš±4³*»ÒÓÔ§¨©ÔÒÓ:<Ôè*Dë*ý ý»Ð ô*Ð
Òš±$õ*ì·+$º+þ þ»š±Ð ¿+Ð
Óš±$Ä+ß
ü’,C$•,ÿ ÿ» ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åÂÐ š,Ð
Ôš±$Ÿ,”ïì#Lÿ#ò ú žÕÖº® 4‡'EÕ׿¼„©(é"ÕØÚ« \ÑÕÙ‚ØÕÛñ€„¾ÕÜk<–ÌÕÞ·œØÕßÄ&Õàäù³ü“&¥ì¿âŠDyüâ1kmY[´­KüËUã6â¤ãâãé± Ð‹ƒ
Õòº „€£² 4™Á¼äåæ)+.0ü· ?ü§/, Create new [`CallAllUnordered`] combinator.ÁÛúüãOŒÈ ¾ ƹŸ«Á¼ááöåì]‘j ôË üü
$¼É ¥ ú õÉ ¾ úüÆ 2—Ê ý úü… A> [`take_service`]: crate::util::CallAllUnordered::take_serviceÁTÒ Á¼ƹáá
åƹŸ«ùüÉ0ü—
" Extract the wrapped `Service`.Á¾
úüÆ
XU This [`CallAllUnordered`] can no longer be used after this function has been called.Á£úõÉ ¼úüÄ2—Ê ûúüƒA‡ß „¾„¾ñ€†¾ ˜X$]È=„kt• Á¼ƹá çá
æƹŸ«Íü±`ã6è¤éèéé± ‹ƒ
»òº „ñ£² Á¼êë'F'Gë0257L˜$ççÕëüÌTƒ„¾„¾ñ€†¾ ˜X$]È=„kt• ƒÁ¼ ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÁ¼'Fç ãç
ëƹŸ«¤”ï®ü×8ííˆÇ
Üœ× ܽîï𧨩ïðî13Ô–D™ ܽì ¢ì
îš±ìç ܽš±ì ïì
ïš±ß÷ü¿CˆŠ ˆܽ ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åŠÂì Çì
ðš±”ïÇ#„æ#ÚÜø#ÏT›ŒŸ ³ · Ü ã ë Ú« \‡ôõ‚Øô÷ñ€¼„¾ôøk<ÌÌôú·œØôûÐæôüÄ&ôýìu˜ŒD·{ü˜1mo[]”ãL´û=ü ÿ¨ÿ¶¿‰®& °¿‰®& ´¶¿‰®&
©À„¥•ä <«&°¿‰®„ã&¶¿‰®üü:Íì°¿ ¥Íì¶¿ ¨è¾ƒ& &
& & &
?A;=þþ”ï þþ©À4ÿþþïÄü¹OŒ è¾ ŒÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
辉®&
þ Çþ
°¿¶¿‰®”ïÎü° 4Ž Žè¾‰®è¾‰®& þ ¸ þ
°¿¶¿‰®êË9"ü˜hˆˆ¶¿ƒØÑÔ”ìüï  ‚ذ¿‚ض¿Ôåëï ´ÀŠƒØ„ØSU\‡ÑÔü¥I„¾„¾ñ€†¾ ˜X$]È=„kt• ´À ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã´ÀƒØ ·
°¿¶¿ç)”ïñ)ü£O¤ŽŽùÎ ¨Íì–À «ÍìœÀ ®–ÀÀÂdf`b\^ŒŒôØü­* ³ÂÂ Œ
î©–ÀœÀÙ*[,”¨Œ
Š
× ¤,4%‚Øñ€6„¾k<F̘·$OœØÄ<l&šD{toD11PR?A´]
üv96 Returns a new [`FutureService`] for the given future.Á°úü´b_ A [`FutureService`] allows you to treat a future that resolves to a service as a service. ThisÁü—?< can be useful for services that are created asynchronously.Á×úëò ð› üñ1. use tower::{service_fn, Service, ServiceExt};Áü£$! use tower::util::future_service;ÁüÈ!ó êúŒî³ô l€Íô üŽ<9 // A future which outputs a type implementing `Service`.ÁüË%" let future_of_a_service = async {ÁüñMJ let svc = service_fn(|_req: ()| async { Ok::<_, Infallible>("ok") });Áü¿  Ok::<_, Infallible>(svc)Á };ÁçúüëEB // Wrap the future with a `FutureService`, allowing it to be usedÁü±=: // as a service without awaiting the future's completion:Áüï@= let mut svc = future_service(Box::pin(future_of_a_service));Á°úü´A> // Now, when we wait for the service to become ready, it willÁüö1. // drive the future to completion internally.Áü¨)& let svc = svc.ready().await.unwrap();ÁüÒ*' let res = svc.call(()).await.unwrap();Á¸ù <† Éù ð›  úüš # # Regarding the [`Unpin`] boundÁ¾ úü PM The [`Unpin`] bound on `F` is necessary because the future will be polled inÁü“
eb [`Service::poll_ready`] which doesn't have a pinned receiver (it takes `&mut self` and not `self:Áüù
YV Pin<&mut Self>`). So we cannot put the future into a `Pin` without requiring `Unpin`.ÁÓ úü× a^ This will most likely come up if you're calling `future_service` with an async block. In thatÁü¹ GD case you can use `Box::pin(async { ... })` as shown in the example.Átˆ
š±ŽÃœ¤£žŸŸžœ ˆÇ
‹ƒ
š
ÍìÁÄ
—Ü
 
œ× ìÒ
š±ƒØîô¬Ù
“íš±
&Ÿ«ÁĬ€Ÿ«ÁÄ&
»²L
š±Ÿ«ÁÄ»²ßA-˜šŸž ôŽ¡¤¢¡¢ˆÇ
‹ƒ
ŽÃ£üÝ#ü³9Šý ñúüùbÙý üà?Åþ ¤úëò ð› üÊ1´ÿ ü€# use tower::util::FutureService;Áü¨!ó ÎúŒÖ³ô Íô üþ<Ñ€
ü¿%
üéMÆ
ü» 
Æ‚
ëúüóEâ‚
ü½=±ƒ
üÿDA let mut svc = FutureService::new(Box::pin(future_of_a_service));ÁÈúüÐA΄
ü–1™…
üÌ)Ô…
üú*‡†
¸ù Éù ð› ÎúüÖ#î†
þúü†P§‡
üÛeˆ
üÅYðˆ
£úü«a߉
ü‘GÊŠ
êš±ŽÃ  öÚß–.üÏF¥¤¦¦¥ˆÇ
Ô‹ƒ
ײ² ŽÃ§Àc§#%(*üœ8Ÿ ŽÃ  c cˆ¢cµ
 `£cÂó `àB¤GS
–ó¤ £¤
§š±Ÿ«±W1ü£!>©¤ªª©ˆÇ
¨!‹ƒ
«!²² TÖ!ÖëÀc«#%(*üè!8ë!˜ Öà  c cˆ¢cµ
 `£cÂó `àB¤GS
˜–ó¨ ï!¨
«š±Ÿ«$ð!±7üØ$…­¤®£¯°¯­°® ­
¬ %å
LÒ%Œ
ã$—Ü
æ$œ× ì™%ˆÇ
Ý$Á
,¹%Ò
¬Ç%‹ƒ
à$ŽÃ±²³´µ& &
& & &
´µFH;=xz}lä%Dé%¬¬Ÿ«ÁÄ& T…&,Š&¬¬»²\™&4ž&¬¬ãü·&OTº&š ŽÃ šÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŽÃÁÄ&
¬ Å&¬
´š±Ÿ«ÁÄ»²$Ê&”ïO=üþ)*$*œ œŽÃÁÄŽÃÁÄ& ¬ †*¬
µš±Ÿ«ÁÄ»²$‹*“Ž…@Œ
 
º
ß4(¸é¬
d¹×3¤,ºk<H̼·$QœØ½Ðæ,i¾Ä&¿dŽ~€D.qL<ceRT”\C´t4ü½?¤ÁÂÂÁùΠ‰°
Åš°
ÎÄÃÀcÃ#%(*üƒ8žŸ ÎÄ ž c cˆ¢cµ
 `£cÂó `àB¤GS
Ÿ–óÀ ŠÀ
Ãî©£¯$‹±ŠD¼¸¤ÅÆÆÅùÎ ½‰°
ÀÎÄÇÈü€(üÖ%" Creates a new [`MapErr`] service.Áî©£¯ÎÄÄÄ
Çî©£¯Ù*êM±ôMüš
$üÒ>; Returns a new [`Layer`] that produces [`MapErr`] services.Áúü JG This is a convenience function that simply calls [`MapErrLayer::new`].Áì úüô !ǽ
£¯“ÇÄÄ
Èî©£¯±(Oüä
¤Ê˨ÌôÍËÌÊÍ£¯¡Ã˜"¡ ‰°
ì
•ä <ï
Íì¡
¿À
„® –"£¯Ó¨
ÌÇ ùÎ é
‚Á
ÎÄÎÏÐÑÒ& &
& & &
ÒÑ68ƒ  ÉÉ…À
T‘ ,– ÉÉ¡  Éɺ§üæ O  ¡¢  ÎÄ ¡ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾å¢œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Îĉ®&
É ô É
Ñî©£¯‰®¡ ”ïIQü‹4£ £Îĉ®Îĉ®& É É
Òî©£¯‰®¡êË„S´—ÔÔˆÇ
œ¢ÅÕ 
ôÛü´" Creates a new [`MapErrLayer`].Áèš±¢ÅÓÓ
Õš±±…TüŸ:¤×Ø×ØùÎ ¤‰°
§‚Á
“ÇÙÚÚ*,/1ÖÖÎÄü‚*,…¤ ¤“Çî©“Çî©Ö Ö
Úî©£¯Ù*äUŒß
è
× ¤,ÛÜk<ÌÛÞ·$'œØÛßÐæ,?ÛàÄ<Y&ÛáDeLWYFH”27´J(ü¡C¤ãäãäùÎ ¦‰°
©š°
ÐÇåÀcå#%(*üë8§ ¥ÐÇ ¦ c cˆ¢cµ
 `£cÂó `àB¤GS
§–óâ òâ
åî©£¯±¼YÜܤçèçèùΠተ
äÐÇéêü¬(üþ)& Creates a new [`MapRequest`] service.Á¹î©£¯ÐÇææ
éî©£¯Ù*N[±X[üÒ(ü‚B? Returns a new [`Layer`] that produces [`MapRequest`] services.ÁÉúüÑNK This is a convenience function that simply calls [`MapRequestLayer::new`].Á¤úü¬!ǽ
£¯ùÈææ
êî©£¯±Œ\ü¤e¤ìí½BîÇBïìîïí£¯æ½˜"ߺ‰°
¬Íì§È¯Íìߺ³&î©ߺ“"£¯æ½ùÎ ©ÐÇðñòóô& &
& & &
óô.0ŒŽˆŠl D• ëëî©ߺ& T± ëë°¼ëëѾüø L¨©ª ¨ÐÇ ©ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åªš»ë
ë
óî©£¯§Èߺ$‹
”ïÕ]ü‚ ,$… « «ÐǧÈѾë Š ë
ôî©£¯§Èߺ$ êËó^Ô‡
ööˆÇ
Œ
´È÷ 
ôÓ
ü¨
&# Creates a new [`MapRequestLayer`].Áà
š±´Èõõ
÷š±±raü›>¤ùúùúùÎ  ‰°
£‚Á
ùÈûüü*,/1øøÐÇü†*,‰¬ ¬ùÈî©ùÈî©ø ø
üî©£¯$Ù*Òb„ÚŒñ
ú
¯Ô,(€@ýÿé¬
d"ý×:¤,ýk<OÌýƒ·$XœØýÐæ,pýÄ&ýdlD5rLCdfSU”cD´{5üØD¤ˆˆùΠ݉°
àš°
T‘·ÉŠÀcŠ#%(*ü£8¦­®¯ ­·É ® c cˆ¢cµ
 `£cÂó `àB¤GS
¯–ó ª
Šî©£¯±ªfä󤌌ùÎ ø‰°
û·ÉŽüÃ(ü–(% Creates a new `MapResponse` service.ÁÐî©£¯·É
Žî©£¯Ù*p±püì
)üš C@ Returns a new [`Layer`] that produces [`MapResponse`] services.Áâ úüê OL This is a convenience function that simply calls [`MapResponseLayer::new`].Á¾
úüÆ
!ǽ
£¯þË
î©£¯±MqüÀ ¤¨ä£¯ƒÀ
˜"ùæ ‰°
È •ä <Ë Íìùæ ¿À
„’ æÀ
ü« ùÎ Å ‚Á
·É˜& &
& & &
˜68uwz|vx  ùæ  ¡Ã\“
4˜
¤èüÕ
O
°±² °·É ±ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾å²œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
·É‰®&
 ã

˜î©£¯‰®ùæ
”ïëqüâ4³ ³·É‰®·É‰®&  ê
î©£¯‰®ùæêËïsÜòˆÇ
÷ŒÊœ 
ôÆü”-* Creates a new [`MapResponseLayer`] layer.ÁÓš±ŒÊšš
œš±±ñtü?¤žŸŸžùÎ ‰°
‚Á
þË ¡¡*,/1·Éüü*,ÿ´ ´þËî©þËî© 
¡î©£¯$†Ù*QvŒ¹ÂØÜ®û(Æ6¢¤ FutureExtÁL ¢¥×5¤,¢¦k<JÌ¢¨·$SœØ¢©Ðæ,k¢ªÄ<…&¢«d\šD0rL>dfSU”^D´v5üËB¤­®­®ùΠЉ°
Óš°
T‚¼Ì¯Àc¯#%(*ü”8µ· µ¼Ì  c cˆ¢cµ
 `£cÂó `àB¤GS
·–ó¬ ¬
¯î©£¯±)zÔÔ¤±²±²ùÎ Ù‰°
ܼ̳´ü¢(üõ(% Creates a new [`MapResult`] service.Á¯î©£¯¼Ì°°
³î©£¯Ù*‹ƒ±•ƒüÅ
'ü÷A> Returns a new [`Layer`] that produces [`MapResult`] services.Á½ úüÅ MJ This is a convenience function that simply calls [`MapResultLayer::new`].Á
úüŸ
!ǽ
£¯ƒÏ°°
´î©£¯±É„ü• Ô¤·¨¸ä¹ôº¸¹·º
£¯Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
…À
¡Ã˜"ï¼É ‰°
•ä <  ïË
Íì΋ ¿À
„ì é΋¡Ãt‰ –"£¯‡Þ
ü  @ùÎ š ‚Á
¼Ì»¼½¾¿& &
& & &
¿¾68Ÿ¢¤§©£¥  µµùæ
,“
µµ΋

µµê‘üæ
O
¸¹º ¸¼Ì ¹ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åºœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¼Ì‰®&
µ ô
µ
¾î©£¯‰®ùæ΋
”ïO†ü‡4» »¼Ì‰®¼Ì‰®& µ µ
¿î©£¯‰®ùæ΋$”ê˵ˆÌ’ÁÁˆÇ
‘ÍÂ 
ôâü²+( Creates a new [`MapResultLayer`] layer.Áïš±‘ÍÀÀ
š±±¶‰ü©=¤ÄÅÄÅùÎ ®‰°
±‚Á
ƒÏÆÇÇ*,/1ÃüÌü’*,•¼ ¼ƒÏÏî©Ã Ã
Çî©£¯Ù*TŒŠ×¤,ÈÊ4 ‚ØÈËk<3ÌÈÍ·$<œØÈÎÐæ,WÈÏÄ<q&ÈÐz|t,_aNP”J?´b0Ô»¤ÒÓÓÒùÎ À‰°
ÃÁÏÔÕÖר!$&ü‰(üÜ(% Creates a new [`MapFuture`] service.Áî©£¯ÁÏÑѳÙ*⌱ìŒü§'üÙA> Returns a new [`Layer`] that produces [`MapFuture`] services.ÁŸúü§MJ This is a convenience function that simply calls [`MapFutureLayer::new`].Áùúü!ǽ
£¯ŸÑÑÑ
Õî©£¯±ܨüû(% Get a reference to the inner serviceÁ<¯½ ½ÁÏ ½î©Ñ ·Ñ
Öî©£¯üš#üå0- Get a mutable reference to the inner serviceÁ<¡¾ ¾ÁÏ ¾î©Ñ ©Ñ
×î©£¯ä—üã/, Consume `self`, returning the inner serviceÁTžÁÏî©ÑÑ
Øî©£¯{üÒ¯£Ú¤ÛÜ¥ÝÞ !ßÜÚÞßÝÛ ÉІ¦˜"Ǧ¾ ǦƒØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¥˜¡¬ê ÍìÉÐ ÝÍìµó
àÍ옡 ãÍìǦæ&Ÿ«à¶T— “"ÉІ¦¼ª ØŒ ×é˜¡Š¡‚ØǦìã ‹ƒ
ÚŠÐàáâãä& &
& & &
ãä[];=×ÙÓÕÏÑËÍ
D
ÙÙµó

ÙÙ˜¡
4¸
ÙÙǦüË
O
¿ÀÁ ¿ŠÐ ÀÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åÁœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŠÐà¶&
Ù Ù
Ù
ãà¶Ÿ«Éеó
˜¡Ǧ
”ïüÞ *  ŠÐà¶ŠÐà¶& Ù æ Ù
äà¶Ÿ«Éеó
˜¡Ǧ “Žá’ü» B¤æççæùÎ À ‰°
à š°
ÁÏèÀcè#%(*ü„
8
ÃÄÅ ÃÁÏ Ä c cˆ¢cµ
 `£cÂó `àB¤GS
Å–óå
å
èî©£¯
±œ•ÌŽêêˆÇ
åÐë 
ôÞü®+( Creates a new [`MapFutureLayer`] layer.Áëš±åÐéé
ëš±±Ü—ü›=¤íîîíùÎ  ‰°
£‚Á
ŸÑïðð*,/1ììÁÏü„*,‡Æ ÆŸÑÑî©ì ì
ðî©£¯Ù*§™üè(òòˆÇ
íåÐóÀcóü—8šÇÈÉ ÇåÐ È c cˆ¢cµ
 `£cÂó `àB¤GS
É–óñ žñ
óš±±ú›\<‘Œ˜½ÇÒÚ« \ôõ×2¤,ô÷4C‚Øôøñ€T„¾ôù§N,d¥‚ôûk<kÌôü·$tœØôýÄ<&ôþì¦'™t;ŠDOyü':jlY[HJ´‚;üï(¤éJùÎ ôÍì›Ò&î©›Ò‚Ôƒ24.0üž4ôî©ôÂÔÿÿ¥×ˆŽò£“Žü£ü„'4ôù‚Ôÿÿò䬎üÔf¤éJùÎ ÙØ„Üé„d‹š°
¿c›Ò‚ÔÀc;=@BüÁ8ÄÊËÌ Ê‚Ô Ë c cˆ¢cµ
 `£cÂó `àB¤GS
Ì–ó È
î©›Ò±üñ 7¤éJŠŠùÎ ö Ø„ù é„d›
èÑ "üÊ
*×
î©›Òèшˆ
î©›ÒˆŽ”«“Žž«üÑB¤éJŽŽùÎ ÖØ„Ùé„d†èу؄Ø,.13ŒŒ—ßüÌIÍÎÏ„¾„¾ñ€†¾ ˜X$]È=„kt• ÍèÑ ÎÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åϜ؞؟ØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ãèу، ÞŒ
î©›Ò´”ïÌ´Œ„‘ï­k<ŒÌ¯·$•œØ°Ä&±l—üu! Error types for [`Optional`].ÁêëL,
פ,(*Õܱ¿ÕÇýÔéÕÅcüŠ6ÐÑÒ ÐÕ Ñ c cˆ¢cµ
 `£cÂó `àB¤GS
Ò–ó˜ ˜
$’טÔèÕü¦" Future types for [`Optional`].ÁïõL, œÚ« \(4L‚ØŸñ€]„¾ k<mÌ¢·$vœØ£dm9tDaDXPü91BD13Ì॥¥ð¾ åßÕ¦ 
ü€8ކôßÕ¤¤
¦¬«Ù*½üåt¨¥©ª¨©ªš±ƒØ¶„¬¤ïÙ í’¿ ðœ× ìˆÇ
êæ×´žáÜ¡ˆˆ¢ˆl }.xϾ Ìì˜Þ¬ÃëÖ«¬ƒØ„ج©«®°§§Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
äªüI$’ÓÔÕ„¾„¾ñ€†¾ ˜X$]È=„kt• ÓëÖ ÔÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾å՜؞؟ØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ãëփا ¡§
¬š±äª×´¿À”ïÉÀäÞDL€7:'*´ œË¥³³ð¾ Ð¥×´ 
üˆŠôå Create a new [`Optional`].Á†ô¥×²¨µµ²¾
<™&¬«ì¬„Øæç¬ü
´¬«ì¬Ù*þÃBDü½u¥·¨¸¸·ð¾ ¾
蜄üûœ¬œ¥×¹º»¼½& &
& & &
½¼FHKM¬«ì¬& TÚ4ß”üªOÖר Ö¥× ×ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾å؜؞؟ØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¥×ì¬&
 ¸
¼¬«ì¬”ïüÈ 4 Ù Ù¥×쬥×ì¬&  Ð 
½¬«ì¬ êË÷Æ« ½¶á
¾Ïá
¾íá
¾¾½±“ŒËàá×
¤,¿ÁÈ‹\¿ÂÈ‹¿Â4=‚Ø¿Äñ€N„¾¿Å§N,^¥‚¿Çk<e̿ȷ$nœØ¿ÉÄ<&¿Ê½¿œ¯*t5DI|ü*1mo\^KM´|#ü•NK A [`Future`] that yields the service when it is ready to accept a request.ÁäúüèJG [`ReadyOneshot`] values are produced by [`ServiceExt::ready_oneshot`].Á³úü·IF [`ServiceExt::ready_oneshot`]: crate::util::ServiceExt::ready_oneshotÁ¥Ì¨ÍÌÍð¾ ¾
î×,ɤ¿hþÎÏ(*-/„«¿ËˆôüÁ Á¿Ë˺™ü§3¥Ñ¨ÒÑÒð¾ ¬¾
î×üßH¥Ô¨ÕÔÕð¾ ä¾
蜄–î×Ö "üÉ$Ö¬«î×ÓÓ
Ö¬«ì¬ì]®ÈüÑS¥Ø¨ÙØÙð¾ Ö¾
蜄“î×Úۃ؄ØÛ,.13××€ŸüÓMÚÛÜ„¾„¾ñ€†¾ ˜X$]È=„kt• Úî× ÛÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åܜ؞؟ØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ãî׃Ø× é×
Û¬«ì¬”ïüƒ
Q¥Ý¨ÞÝÞð¾ ˆ
¾
<
¿c¬«
î×ßÀcß+-02üÛ
4Þ
ÝÞß Ýî× Þ c cˆ¢cµ
 `£cÂó `àB¤GS
ß–óÜ â
Ü
߬«ì¬
±¿Ãòeü a^ A future that yields a mutable reference to the service when it is ready to accept a request.Áã úüç ;8 [`Ready`] values are produced by [`ServiceExt::ready`].Á£
úü§
96 [`ServiceExt::ready`]: crate::util::ServiceExt::readyÁ
Æâ¥ã¨äãâäïÙ ö
•ä <ù
äªÆü‚ –Ù)Š!áåËËëNÎÙ*¿Ï—O¿,ɤ¿hþ Æäª‰®–ÙËgÌ¿‰µ–Ùàà
áÆäª‰®ò
ÜÞáãßá¿àà‰µüú08à¥ç¨èèàçïÙ ÿ•ä <‚ÏØü¯IÆê¥ë¨ììêëïÙ ¸•ä <»&䪉®„ç–Ùí´,.13üš&¡õ–Ùéé
íÆäª‰®ì]ÆüõTÆï¥ð¨ñïðñïÙ þ•ä <ޏ„¸–ÙòóƒØ„Øóú2479îîÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
õƒ±ü€Máâㄾ„¾ñ€†¾ ˜X$]È=„kt• á–Ù âÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åãœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã–ÙƒØî î
óÆäª‰®”ïü€N8ä¥õ¨öäõöïÙ •ä <ˆ¿cäªÏØ÷Àc÷+-02üÕ4Øåæç åÏØ æ c cˆ¢cµ
 `£cÂó `àB¤GS
ç–óô Üô
÷8䪉®±ÆŒÿ× ¤,øù4‚Øøúk<7Ìøü·$@œØøýÄ<Z&øþDVL+GI68´K(üÔ*üd74 Returns a new [`ServiceFn`] with the given closure.Áœúü WT This lets you build a [`Service`] from an async function that returns a [`Result`].Áøúëò Šúð› ü–;8 use tower::{service_fn, Service, ServiceExt, BoxError};Á¬Ò…ô
¤è # impl Request {Áüý#áô
Éù ü©$! # struct Response(&'static str);Á¬ÎÂô
üä.+ # fn new(body: &'static str) -> Self {ÁÄ“ # Self(body)Á # }Áü¸74 # fn into_body(self) -> &'static str { self.0 }ÁÉù øú¤ü # #[tokio::main]Áü‘/, # async fn main() -> Result<(), BoxError> {ÁüÁEB async fn handle(request: Request) -> Result<Response, BoxError> {Áü‡63 let response = Response::new("Hello, World!");Á¤¾ Ok(response)ÁéØ
ÙúüÝ)& let mut service = service_fn(handle);ÁúÔ‹ let response = serviceÁ„¦
.ready()Á .await?ÁìÇ .call(Request::new())Á„å
.await?;Áöúüú63 assert_eq!("Hello, World!", response.into_body());Á÷ó
 # Ok(())ÁÉù ð› TÛ¬«èÙ¥ð¾ æ
ÿ¬«±
Ëü¯
#¥ð¾ ´
èÙƒÀcƒüÙ
8Ü
èéê èèÙ é c cˆ¢cµ
 `£cÂó `àB¤GS
ê–ó à

ƒ¬«
±ü  ƒ¥¨£ˆˆ ¬«ã¿˜"£¯ û £¯ƒØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
£˜¡¬Œ
•ä <« ÍììÏ ´ åó
· “"¬«ã¿œé ð¾ ¥ þ´ ì…
‰°
¨ èÙŠŒŽ& &
& & &
Ž>@;=Ž

ìÏ

˜¡

£¯üë
D
ëìí ëèÙ ìÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åíè¡ ù

¬«£¯‰®ìϘ¡
‚ÊüÓ0î îèÙ‰®èÙ‰®&  Û
ެ«£¯‰®ìϘ¡“ŽŒ¡ªÃÈß4(ÎÔ
L×6¤,4G‚Øk<ZÌ·$cœØ˜Ðæ,~Ä<˜&šd£¥+ˆt?yü+,kmZ\”qK´‰=üË=¤œœùΠЉ°
Óš°
ÆÚžÀcž#%(*ü8ïðñ ïÆÚ ð c cˆ¢cµ
 `£cÂó `àB¤GS
ñ–ó 
žî©£¯$—±’Ȭ‘¤ ¡¡ ùÎ ‰°
ÆÚ¢£üÓ(ü­! Creates a new `Then` service.Áàî©£¯ÆÚŸŸ
¢î©£¯Ù*ƱÆüç"ü£<9 Returns a new [`Layer`] that produces [`Then`] services.ÁäúüìHE This is a convenience function that simply calls [`ThenLayer::new`].Á¹úüÁ!ǽ
£¯•ÝŸŸ
£î©£¯±ÚÅüÛ
󤥦¨§ä¨ô© !ª©§¥ª¦¨
£¯‡Þ
˜"Ǧ ǦƒØïü¬ •ä <æ
ïË
‚ß
öó
 ¿À
„² æ¡Ã΋ ¯ß
üæ ,ùÎ à
‚Á
,• Êô
ü¥ (‰°
ã
ÆÚ«¬­®¯& &
& & &
¯®GI;=¦¨«­°²µ·  ¤¤ùæ  ¤¤΋\‹
4
¤¤ÊâüË
O
òóô òÆÚ óÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åôœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤ÃÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÆÚ‰®&
¤ Ù
¤
®î©£¯‰®ùæ΋Ǧ
”ïüì4õ õÆÚ‰®ÆÚ‰®& ¤ ô¤
¯î©£¯‰®ùæ΋ǦêËÖÀ¤ó±±ˆÇ
ø›Û² 
ô¹üŽ&# Creates a new [`ThenLayer`] layer.ÁÆš±›Û°°
²š±±ƒÀüû8¤´µµ´ùÎ ‰°
ƒ‚Á
•Ý··*,/1<¿³³ÆÚüÚ*ö ö•Ýî©•Ý ã³
·î©£¯Ù*ü*' [PRNG] utilities for tower middleware.Á+úü/IF This module provides a generic [`Rng`] trait and a [`HasherRng`] thatÁüyJG implements the trait based on [`RandomState`] or any other [`Hasher`].ÁÄúüÈPM These utilities replace tower's internal usage of `rand` with these smaller,Áü™LI more lightweight methods. Most of the implementations are extracted fromÁüæ/, their corresponding `rand` implementations.ÁúüšGD [PRNG]: https://en.wikipedia.org/wiki/Pseudorandom_number_generatorÁÖ¿ôçÞ\‰ÖJ¸º\\¡Åe¸¼¢e¸½¹£¸¾çüò"Züç7MO<>T»/lÒüË:7 A simple [PRNG] trait for use within tower middleware.ÁúüŠGœëÜ¿¿ÐÄ üÒ®¿ÐÄ ÐÄ  ÀÁÂÀÁÂÁÀÂô‰ôæ Generate a random [`u64`].ÁDŒ÷ ÷¥Œ¿ ¿åëìáü­/, Generate a random [`f64`] between `[0, 1)`.ÁDäø ø¥Œ¿ í¿
Á¥Œü£ 2üŒ
+( Randomly pick a value within the range.Á¼
ú
 # PanicÁÔ
úüÜ
B? - If `range.start >= range.end` this will panic in debug mode.ÁT¦ ù ù¥ŒËó¿ ± ¿
Â¥Œ ô³¿ü‚$£ÄÄÎìà¶ ¿à¶ŠÓÝÅÀÅ#%ì­ú úÓÝà ¹Ã
Åà¶ ßǤèü¼'$ Create a new default [`HasherRng`].Áï ßÆÆ
ÇÔ¥ ßɴɤƠßÈÈ
ɤËËÍìˆß ¢ËÞÌ 
üõ%ü¸85 Create a new [`HasherRng`] with the provided hasher.Á\üˆßËÞÊÊ
̈ßÙ÷¼üÏ6ÎÎßö ÔÅeˆßËÞÏÀÏ#%ìŒDû ûËÞÍ ˜Í
ψß$¤ä¯(³(¥(©(üä8 (¤(((„(ˆ(v(z(h(l(ä‹^(ü­%U(K(üäC(G(9(=(üäÄ5(9(+(/(üäë&(*(((üä(( ((üäÊ( (ü'(üäû÷'û'ì'ð'„‚å'”˜Ú'üäÑÒ'Ö'È'Ì'üäøÄ'È'¹'½'üä´'¸'©'­'t £'§'•'™'œÑ'äë|' Error typesÁ, òKDÕ € ´» „÷ Á¥
Ôel¦
Ä
 Út¤Ð
³ ƒ ý|d‚ 
傌± ®‡ ØòKD› ¥– È ô•
‚üÁ
#wäò
küœ &_üÐ "S¼€ G¼± :ü¦
>üÍ KH An extension trait for `Service`s that provides a variety of convenientÁd™
 adaptersÁ
¨Š Š ÐÄ ü¦
°þ&¥Œì¬üÅ
¾
ÐÄ 7¸ÿ'ÐÄ C¸ÿ3 Œ Ž ˜ œ Ÿ ¤ © ª Œ Ž ˜ œ Ÿ ¤ © ª
Ÿ ª Œ © Ž ¤ œ ˜ ¢¤üÃNüë
SP Yields a mutable reference to the service when it is ready to accept a request.Á,Æü ü¥ŒààáÈ刿 )Š!ü¥Œì¬ Ìû ,
¥Œì¬üýTü¼<9 Yields the service when it is ready to accept a request.Ál€¥Œÿ„û ,Ë
Œ ¥Œì¬L¿üÚWüƒRO Consume this `Service`, calling it with the provided request once it is ready.Á<Ý¥Œì¬ʆû ,«
¥Œì¬?¿“Ž>¿ü±üã`] Process all requests from the given [`Stream`], and produce a [`Stream`] of their responses.ÁÈúüÐVS This is essentially [`Stream<Item = Request>`][stream] + `Self` => [`Stream<Item =Áü«B? Response>`][stream]. See the documentation for [`CallAll`] forÁ details.Áƒúü‹OŒÈ üßMJ [stream]: https://docs.rs/futures/latest/futures/stream/trait.Stream.htmlÁD´¥Œʸ¢ˆ¤  àŸ
½û ,û'Eʸü$ʸ'Fì¬
Ž ¥Œì¬ʸ¯À‚ˆ®ÀOQüÜ'_üåIF Executes a new future after this service's future resolves. This doesÁü³96 not alter the behaviour of the [`poll_ready`] method.ÁñúüùJG This method can be used to change the [`Response`] type of the serviceÁüÈXU into a different type. You can use this method to chain along a computation once theÁü¥)& service's response has been resolved.ÁÓúüÛ*' [`Response`]: crate::Service::ResponseÁüŠ.+ [`poll_ready`]: crate::Service::poll_readyÁ½úëò <×ð› üã%" # use std::task::{Poll, Context};Áü'$ # use tower::{Service, ServiceExt};Á÷ó
ìà # struct DatabaseService;Áäå # impl DatabaseService {Áü†'$ # fn new(address: &str) -> Self {Áܲ # DatabaseServiceÁ # }ÁÉù ÷ó
¬ö # struct Record {ÁÌ # pub name: String,Á¤® # pub age: u16ÁÉù ÷ó
üÝ-* # impl Service<u32> for DatabaseService {Áü # type Response = Record;Áij # type Error = u8;ÁüÐ=: # type Future = std::future::Ready<Result<Record, u8>>;Á, ÷ó
üœ YV # fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {Áüú  # Poll::Ready(Ok(()))ÁLž!ð,¬!÷ó
ü¶!:7 # fn call(&mut self, request: u32) -> Self::Future {Áüõ!KH # std::future::ready(Ok(Record { name: "Jack".into(), age: 32 }))ÁLÅ"ð<Ó"Éù ,ß"÷ó
üé"PM # async fn avatar_lookup(name: String) -> Result<Vec<u8>, u8> { Ok(vec![]) }Á,¾#÷ó
ŒÈ#³ô „Þ#
# async {Áüó#,) // A service returning Result<Record, _>Áü¤$96 let service = DatabaseService::new("127.0.0.1:8080");Áâ$úüê$+( // Map the response into a new responseÁüš%HE let mut new_service = service.and_then(|record: Record| async move {Áüç% let name = record.name;Áü‹&! avatar_lookup(name).awaitÁ<±&Ìö ½&úÜÅ& // Call the new serviceÁ„å&
let id = 13;Áüú&52 let avatar = new_service.call(id).await.unwrap();Á\´' # };Á<Ä'Éù <Ð'ð› Dß'¥ŒÉÐü‰Ãó
è'û ,£(ØÉÐ,µ(
¥Œì¬Éб<>ü°8üë(JG Maps this service's response value to a different value. This does notÁüº)52 alter the behaviour of the [`poll_ready`] method.Áô)úüü)JÝŠüË*?< into a different type. It is similar to the [`Result::map`]Áü+IF method. You can use this method to chain along a computation once theÁüÝ+)“Œ‹,úü“,*ÒŒüÂ,.õ,úlý,ëò <-ð› ü›-%äüÅ-'“Ž,ñ-÷ó
ìû-ÐŽä.öŽü¾.'œÜê.ÌLŠ/ð<˜/Éù ,¤/÷ó
¬®/œÌÈ/º¤æ/Ü<ÿ/Éù ,0÷ó
ü•0-”‘üÇ0Ë‘Äë0ó‘üˆ1=•’,Ê1÷ó
üÔ1Yé’ü²2Ì“LÖ2ð,ä2÷ó
üî2:ü­3KÓ”Lý3ð<4Éù ,—4÷ó
Œ¡4³ô „·4–üÌ4,Ü–üý49’—»5úüÃ5+á—üó5EB let mut new_service = service.map_response(|record| record.name);Á½6úÜÅ6Ô™„å6ø™Ôú6 let name = new_serviceÁ„™7ÕÈ|®7îÈŒÂ7 .call(id)Á„Ø7¬É´í7 # Ok::<(), u8>(())Á\ˆ8К<˜8Éù <¤8ð› d³8¥ŒÉÐÞ‹äÃó
À8ïË
DÃ8û ,‰9–"ÉК–ü›9"ÉО§˜"ùæDµ9Ëœ,À9
¥Œì¬ÉÐùæµÍ±³Ínpsuü¶Hƒüú9GD Maps this service's error value to a different value. This does notÁüÆ:5윀;úüˆ;GD This method can be used to change the [`Error`] type of the serviceÁüÔ;KH into a different type. It is similar to the [`Result::map_err`] method.Á¤<úü¬<$! [`Error`]: crate::Service::ErrorÁüÕ<.ˆ=úl=ëò <¢=ð› ü®=%äüØ='“Ž,„>÷ó
ìŽ>ÐŽä°>öŽüÑ>'œÜý>ÌL?ð<«?Éù ,·?÷ó
¤Á? # struct Error {Á´Ú? # pub code: u32,ÁÜõ? # pub message: StringÁ<•@Éù ,¡@÷ó
ü«@-”‘üÝ@ # type Response = String;ÁÜA # type Error = Error;Áü¡A@= # type Future = std::future::Ready<Result<String, Error>>;Á,æA÷ó
üðAYé’üÎBÌ“LòBð,€C÷ó
üŠC:üÉC1. # std::future::ready(Ok(String::new()))ÁLÿCð<DÉù ,™D÷ó
Œ£D³ô |¹D # async {ÁüÍD+( // A service returning Result<_, Error>ÁüýD9’—»EúüÃE# // Map the error to a new errorÁüëE:7 let mut new_service = service.map_err(|err| err.code);ÁªFúܲFÔ™„ÒFø™ÔçF let code = new_serviceÁ„†GÕÈ|›GîÈŒ¯GÁ¤tÅG .awaitÁ´ØG .unwrap_err();Á¼óG # Ok::<(), u32>(())ÁTH # };Á<žHÉù <ªHð› <¹H¥ŒÉÐÁôÃó
ÁHô¨
,ÄHû ,I–"ÉШ–ä”IÉд´˜"¡,«IËœ,³I
¥Œì¬ÉС±mortüé†ßüèIKH Maps this service's result type (`Result<Self::Response, Self::Error>`)Áü¸JFC to a different value, regardless of whether the future succeeds orÁTƒK fails.ÁKúüšKHE This is similar to the [`map_response`] and [`map_err`] combinators,ÁüçKHE except that the *same* function is invoked when the service's futureÁü´LHE completes, whether it completes successfully or fails. This functionÁüMHE takes the [`Result`] returned by the service's future, and returns aÁ|ÎM [`Result`].ÁâMúüêMHE Like the standard library's [`Result::and_then`], this method can beÁü·NLI used to implement control flow based on `Result` values. For example, itÁüˆODA may be used to implement error recovery, by turning some [`Err`]ÁüÑOEB responses from the service into [`Ok`] responses. Similarly, someÁü›PLI successful responses from the service could be rejected, by returning anÁüìPMJ [`Err`] conditionally, depending on the value inside the [`Ok`]. Finally,Áü¾QLI this method can also be used to implement behaviors that must run when aÁüRMJ service's future completes, regardless of whether it succeeded or failed.ÁáRúüéRJÝŠü¸SKH into a different type. It can also be used to change the [`Error`] typeÁüˆTOL of the service. However, because the [`map_result`] function is not appliedÁüÜTJG to the errors returned by the service's [`poll_ready`] method, it mustÁü«UKH be possible to convert the service's [`Error`] type into the error typeÁüûUNK returned by the [`map_result`] function. This is trivial when the functionÁüÎVJG returns the same error type as the service, but in other cases, it canÁüWA> be useful to use [`BoxError`] to erase differing error types.ÁãWútëW¦¸ þWúü†X# Recovering from certain errors:Á®Xú<¶Xð› üÂX%äüìX'“Ž,˜Y÷ó
ì¢YÐŽäÄYöŽüåY'œÜ‘ZÌL±Zð<¿ZÉù ,ËZ÷ó
¬ÕZœÌïZº¤[Ü<¦[Éù ´²[ # #[derive(Debug)]Á¤Í[ # enum DbError {Áüæ['$ # Parse(std::num::ParseIntError),Á¼’\ # NoRecordsFound,Á<®\Éù ,º\÷ó
üÄ\-”‘üö\$! # type Response = Vec<Record>;ÁìŸ] # type Error = DbError;ÁüÁ]GD # type Future = std::future::Ready<Result<Vec<Record>, DbError>>;Á,^÷ó
ü—^Yé’üõ^Ì“L™_ð,§_÷ó
ü±_:üð_QN # std::future::ready(Ok(vec![Record { name: "Jack".into(), age: 32 }]))ÁLÆ`ð<Ô`Éù ,à`÷ó
Œê`³ô „€a–ü•a74 // A service returning Result<Vec<Record>, DbError>ÁüÑa9’—búü—bUR // If the database returns no records for the query, we just want an empty `Vec`.ÁüñbDA let mut new_service = service.map_result(|result| match result {ÁüºcTQ // If the error indicates that no records matched the query, return an emptyÁÌ“d // `Vec` instead.Áü±d74 Err(DbError::NoRecordsFound) => Ok(Vec::new()),ÁüídC@ // Propagate all other responses (`Ok` and `Err`) unchangedÁ|µe x => x,Á<ÉeÌö ÕeúÜÝeÔ™„ýeø™Ô’f„¤„±fÕÈ|ÆfîÈŒÚfÁ¤„ðf¬ÉÜ…g # Ok::<(), DbError>(())Á\¥gК<µgÉù <Ágð› ÍgúüÕg" Rejecting some `Ok` responses:Áügú<„hð› üh%äüºh'“Ž,æh÷ó
ìðhÐŽä’iöŽü³i'œÜßiÌLÿið<jÉù ,™j÷ó
¬£jœ̽jº¤ÛjÜ<ôjÉù ä€k # type DbError = String;Áì¡k # type AppError = String;Á,Ãk÷ó
üÍk-”‘üÿkË‘ì£lêÆüÅlB? # type Future = std::future::Ready<Result<Record, DbError>>;Á,Œm÷ó
ü–mYé’üômÌ“L˜nð,¦n÷ó
ü°n:üïnKÓ”L¿oð<ÍoÉù ,Ùo÷ó
Œão³ô „ùo–ÄŽp use tower::BoxError;Á«púü³p2/ // A service returning Result<Record, DbError>Áüêp9’—¨qúü°q63 // If the user is zero years old, return an error.Áüëq74 let mut new_service = service.map_result(|result| {Áä§r let record = result?;ÁÈrúÜÐr if record.age == 0 {Áüðr85 // Users must have been born to use our app!Áü­sKH let app_error = AppError::from("users cannot be 0 years old!");Áýsúü…tJG // Box the error to erase its type (as it can be an `AppError`ÁüÔt30 // *or* the inner service's `DbError`).ÁüŒu2/ return Err(BoxError::from(app_error));ÁLÃuר
ÑuúüÙu(% // Otherwise, return the record.Á”†v Ok(record)Á<vÌö ©vúܱvÔ™„Ñvø™äæv let record = new_serviceÁ„‡wÕÈ|œwîÈŒ°wÁ¤„Æw¬ÉäÛw # Ok::<(), BoxError>(())Á\üwК<ŒxÉù <˜xð› ¤xúü¬xJG Performing an action that must be run for both successes and failures:Áûxú<ƒyð› üy  # use std::convert::TryFrom;Áü´y%äüÞy'“Ž,Šz÷ó
ì”zÐŽä¶zöŽü×z'œ܃{ÌL£{ð<±{Éù ,½{÷ó
üÇ{-”‘üù{£¬Ä|ó‘üº|=: # type Future = std::future::Ready<Result<String, u8>>;Á,ü|÷ó
ü†}Yé’üä}Ì“Lˆ~ð,–~÷ó
ü ~:üß~1‹®L•ðÉù ÷ó
Œ¹³ô ù®üã2àÔüš€9’—Ø€úüà€2/ // Print a message whenever a query completes.Áü—7öÕüÓ@= println!("query completed; success={}", result.is_ok());Át˜‚ resultÁ<«‚Ìö ·‚úÜ¿‚Ô™„ß‚ø™ôô‚ let response = new_serviceÁ„—ƒÕÈ|¬ƒîÈŒÀƒÁ¤|Öƒ .await;Átêƒ # responseÁ\ýƒК<Éù <™„ð› ¥„úü­„.+ [`map_response`]: ServiceExt::map_responseÁüà„$! [`map_err`]: ServiceExt::map_errÁü‰…*' [`map_result`]: ServiceExt::map_resultÁü¸…$´©üá…*ÒŒü.üÆ! [`BoxError`]: crate::BoxErrorÁT솥ŒÉÐ©äš ôš Ãó
÷†ïË
Dú†‚ß
,„‡û ,Ňé΋¨–ŒÛ‡–"ÉÐÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
š–¨–üù‡FÉÐÓè˜"HˆËœ,ˆ
˜ ¥Œì¬ÉÐùæ΋÷ì±ôìèêìîðòüŸ•ˆüúˆ2/ Composes a function *in front of* the service.Á±‰úü¹‰JG This adapter produces a new service that passes each value through theÁüˆŠ30 given function `f` before sending it to `self`.ÁÀŠúlÈŠëò <ÚŠð› üæŠ ³Ýü‹‹%äüµ‹'“Ž,á‹÷ó
ìë‹ÐŽäŒöŽü®Œ'œÜÚŒÌLúŒðÉù ,”÷ó
üž0- # impl Service<String> for DatabaseService {ÁüÓ£¬Ä÷ó‘ü”Ž=‹ß,ÖŽ÷ó
üàŽYé’ü¾Ì“ð÷ó
üú=: # fn call(&mut self, request: String) -> Self::Future {Áü¼1‹®ð<€‘Éù ,Œ‘÷ó
Œ–‘³ô |¬‘ù®üÀ‘-* // A service taking a String as a requestÁüò‘9’—°’úü¸’'$ // Map the request to a new requestÁüä’HE let mut new_service = service.map_request(|id: u32| id.to_string());Á±“úܹ“Ô™„Ù“ø™ôî“‚ã„‘”ÕÈ|¦”îÈŒº”Á¤|ДÔãtä”íã\÷”К<‡•Éù <“•ð› \¢•¥ŒÉЕ‘ ·Zž  ž Ãó
®•Íì·ZT±•û ,ø•“"ÉÐô䊖ÉСô˜"ì¬<Ÿ–
œ ¥Œì¬ÉÐô±uwnpü¯ßüü²¿;8 Composes an asynchronous function *after* this service.Áò¿úüú¿JG This takes a function or closure returning a future, and returns a newÁüÉÀLI `Service` that chains that function after this service's [`Future`]. TheÁüšÁJG new `Service`'s future will consist of this service's future, followedÁüéÁLI by the future returned by calling the chained function with the future'sÁüºÂIF [`Output`] type. The chained function is called regardless of whetherÁüˆÃIF this service's future completes with a successful response or with anÁTÖà error.ÁåÃúüíÃDA This method can be thought of as an equivalent to the [`futures`Áü¶ÄJG crate]'s [`FutureExt::then`] combinator, but acting on `Service`s thatÁü…ÅLI _return_ futures, rather than on an individual future. Similarly to thatÁüÖÅJG combinator, [`ServiceExt::then`] can be used to implement asynchronousÁü¥ÆEB error recovery, by calling some asynchronous function with errorsÁüïÆJG returned by this service. Alternatively, it may also be used to call aÁü¾ÇIF fallible async function with the successful response of this service.ÁŒÈúü”ÈJÝŠüãÈK–¾ü³ÉGD of the service. However, because the `then` function is not appliedÁüÿÉJÄ¿üÎÊK˜ÀüžËDA returned by the `then` future. This is trivial when the functionÁüçËJÅÁü¶ÌA™ÂüÌút„ͦ¸ —Íú<ŸÍð› ü«Í%äüÕÍ'“Ž,Î÷ó
ì‹ÎÐŽä­ÎöŽüÎÎ'œÜúÎÌLšÏð<¨ÏÉù ,´Ï÷ó
¼¾Ï # type Record = ();ÁÄÚÏ # type DbError = ();Á,÷Ï÷ó
üÐ-”‘ü³ÐË‘ì×ÐêÆüùÐBÇÒ,ÀÑ÷ó
üÊÑYé’ü¨ÒÌ“LÌÒð,ÚÒ÷ó
üäÒ:ü£Ó&# # std::future::ready(Ok(()))ÁLÎÓð<ÜÓÉù ,èÓ÷ó
ŒòÓ³ô üˆÔ2àÔü¿Ô9’—ýÔúü…ÕMJ // An async function that attempts to recover from errors returned by theÁ„×Õ
// database.ÁüìÕLI async fn recover_from_error(error: DbError) -> Result<Record, DbError> {Át½Ö // ...Á„ÐÖ
# Ok(())Á,åÖéØ
„ïÖ–„×úüŒ×FC // If the database service returns an error, attempt to recover byÁü××OL // calling `recover_from_error`. Otherwise, return the successful response.Áü«Ø<9 let mut new_service = service.then(|result| async move {Á´ìØ match result {Áü‡Ù%" Ok(record) => Ok(record),Áü±Ù2/ Err(e) => recover_from_error(e).await,ÁLèÙר
<öÙÌö ‚ÚúÜŠÚÔ™„ªÚø™ä¿Ú”Û„àÚÕÈ|õÚîÈŒ‰ÛÁ¤„ŸÛ¬ÉÜ´ÛðÎ\ÔÛК<äÛÉù <ðÛð› üÛúü„Ü&# [`Future`]: crate::Service::FutureÁü¯Ü+( [`Output`]: std::future::Future::OutputÁüßÜ.+ [`futures` crate]: https://docs.rs/futuresÁü’Ýgd [`FutureExt::then`]: https://docs.rs/futures/latest/futures/future/trait.FutureExt.html#method.thenÁüþÝ$´©ü§Þ*ÒŒüÖÞ.ü‰ß!‡æ$²ß¥ŒÉЀ“  ä¡ ô¢  !£ ¡ ¢   £  Ãó
·ßïË
Dºß‚ß
,Äßöó
Ëßû ,…à³èŒ›àÈèü¹à2ÉÐÓè˜"ǦèàËœ,îàÊô
ü‚á(…Þü‰á 
Ÿ ¥Œì¬ÉÐùæ΋Ǧ‰þ±†þŸ¡£¥§©«üæñçüØáHE Composes a function that transforms futures produced by the service.Á¥âúü­â\Y This takes a function or closure returning a future computed from the future returned byÁüŽãVS the service's [`call`] method, as opposed to the responses produced by the future.Áéãútñ㦸 „äú<Œäð› ü˜ä%äüÂä1. # use tower::{Service, ServiceExt, BoxError};Á,øä÷ó
ì‚åÐŽä¤åöŽüÅå'œÜñåÌL‘æð<ŸæÉù ,«æ÷ó
¼µæžüÑæ%" # type DbError = crate::BoxError;Á,ûæ÷ó
ü…ç-”‘ü·çË‘ìÛçêÆüýçBÇÒ,Äè÷ó
üÎèYé’ü¬éÌ“LÐéð,Þé÷ó
üèé:ü§ê&‚ƒLÒêð<àêÉù ,ìê÷ó
Œöê³ô äŒëòÑ
ì­ë use tokio::time::timeout;ÁÏëúü×ë2àÔüŽì9’—„Ìì–áìúüéìB? let mut new_service = service.map_future(|future| async move {Áü°íA> let res = timeout(Duration::from_secs(1), future).await?;Áôöí Ok::<_, BoxError>(res)Á<™îÌö ¥îúÜ­îÔ™„Íîø™äâî”Û„ƒïÕÈ|˜ïîÈŒ¬ïÁ¤„Âï¬Éä×ïíÛ\øïК<ˆðÉù <”ðð›  ðúü¨ð]Z Note that normally you wouldn't implement timeouts like this and instead use [`Timeout`].ÁŠñúü’ñ" [`call`]: crate::Service::callÁü¹ñ(% [`Timeout`]: crate::timeout::TimeoutÁTéñ¥ŒÉÐ씥  !¦ ä§ ô¨ ¨ ¦ § ¥ 
Ãó
ôñ®À
÷ñÍìäDüñÍìô,†òû ,Çò“"ÉÐ¥Œì¬& ÔÙòÉÐöž˜"²ÃðòéÖž¨–Œ„󂨲Ãü¤ó(²ÃƒØÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
žÖžü«ó 
¤ ¥Œì¬ÉвÞ֞±47:=5803üòý˜üÿóC@ Convert the service into a [`Service`] + [`Send`] trait object.ÁÇôúüÏô(% See [`BoxService`] for more details.Áüôúü„õHE If `Self` implements the [`Clone`] trait, the [`boxed_clone`] methodÁüÑõC@ can be used instead, to produce a boxed service which will alsoÁÄ™ö implement [`Clone`].Á¶öúl¾öëò Ðöú<Øöð› üäöMJ use tower::{Service, ServiceExt, BoxError, service_fn, util::BoxService};Á,¶÷÷ó
¬À÷…ô
´Ú÷£ô
¬õ÷Âô
üø#áô
<·øÉù ÃøúüËø30 let service = service_fn(|req: Request| async {Áüƒù*' Ok::<_, BoxError>(Response::new())Á<²ùÌö ¾ùúüÆùB? let service: BoxService<Request, Response, BoxError> = serviceÁäúáò ü®ú)‡ó |Üú¹ó TðúÑó ìÿúäó ü¡û*‹ô |Ðû¾ô TäûÑó Œóû .boxed();Áü‰ü,±ý
üºü*æþ
üéü!šÿ
<ýð› ›ýúü£ýÞ¡ üÇý&# [`boxed_clone`]: Self::boxed_cloneÁ,õý¥Œì–û ,ÍþÌ쥌$Õþ¥Œ<ÜþÌìøž$ûþøž<‚ÿ
© ¥Œì¬· üú‰«üºÿOL Convert the service into a [`Service`] + [`Clone`] + [`Send`] trait object.ÁŽ€úü–€RO This is similar to the [`boxed`] method, but it requires that `Self` implementÁüí€C@ [`Clone`], and the returned boxed service implements [`Clone`].Áüµ-* See [`BoxCloneService`] for more details.Áçúëò ú<‰‚ð› ü•‚RO use tower::{Service, ServiceExt, BoxError, service_fn, util::BoxCloneService};Á,ì‚÷ó
¬ö‚…ô
´ƒ£ô
¬«ƒÂô
üŃ#áô
<íƒÉù ùƒúü3ü¤ü¹„*º¥<è„Ìö ô„úüü„GD let service: BoxCloneService<Request, Response, BoxError> = serviceÁäÈ…áò üé…)‡ó |—†¹ó T«†Ñó 캆äó ü܆*‹ô |‹‡¾ô TŸ‡Ñó ¼®‡ .boxed_clone();ÁʇúüÒ‡-* // The boxed service can still be cloned.Á¤„ˆ service.clone();Áüˆ,±ý
üΈ*æþ
üýˆ!šÿ
<£‰ð› ¯‰úü·‰Þ¡ ÔÛ‰ [`boxed`]: Self::boxedÁ\ý‰¥Œ¸˜û ,èŠØ¥Œ,àŠžª$ðŠ°ª<÷мª$–‹Ϊ<
ª ¥Œì¬ üØ‹[¥¬ ¨­ ¬ ­ Î쬫 Ý‹¾
<è‹èœü”Œ¬« "ü¿‘?ü¸Œ0- Convert an `Option<Layer>` into a [`Layer`].ÁéŒú<íŒð› ôõŒ # use std::time::Duration;ÁÌ” # use tower::Service;Áü®)& # use tower::builder::ServiceBuilder;ÁüØ" use tower::util::option_layer;Áüû'$ # use tower::timeout::TimeoutLayer;Áü£Žmj # async fn wrap<S>(svc: S) where S: Service<(), Error = &'static str> + 'static + Send, S::Future: Send {Áü‘/, # let timeout = Some(Duration::new(10, 0));ÁüÁ-* // Layer to apply a timeout if configuredÁüïEB let maybe_timeout = option_layer(timeout.map(TimeoutLayer::new));Áµú̹ ServiceBuilder::new()ÁìÓ .layer(maybe_timeout)Á´ñ .service(svc);Á<ˆ‘Éù <ð› ˜‘úüœ‘" [`Layer`]: crate::layer::LayerÁdƑ훖›¯ ¯ Íìöà Ó‘
® öàö 
|Ý>ü0 - Builder types to compose layers and servicesÁ<å>þ¼àDD ° ² Ðæ,N ° ³ ³Ÿ,U ° ´ Ä<p &° µ ׃ ¤,° ¶ \6 fhUWDF´a 7D~ )üñ) ƒá¸ ´¸ ¤¡ ƒá· ·
¸ ìÕ ƒáº Ô¢ üù$ ! Create a new [`ServiceBuilder`].Á¯ ƒá¹ ¹ ú×Ì ¼ ¼ ¤¼  Çའ¿ Á Ã Ç É Ë Í Ï Ñ Ó Ô Ö Ø Ù Û à ã æ ACü³ > ü¯4 1 Add a new layer `T` into the [`ServiceBuilder`].Áè úüðL I This wraps the inner service with the service provided by a user-definedÁüÁE B [`Layer`]. The provided layer must implement the [`Layer`] trait.Á úÜ“ †¢ ,º Çà䪗¡» ¥¾ ¾ » ïÙ À
½ öàäªTö ^ "üÉ&ƒ üÔ!? < Optionally add a new layer `T` into the [`ServiceBuilder`].Á˜" ú< " ð› ô¬" µÌÏ" µµüí") Ùµü›#' º¶üÇ#m ì¶ü¹$/ ä·üí$$ ! // Apply a timeout if configuredÁÌ–% ²¹ü´%5 2 .option_layer(timeout.map(TimeoutLayer::new))Á¬î%  .service(svc)Á<ˆ&  # ;Á<”& Éù < & ð› »ñ„²& Ĭ& dÐ& Çà÷¥õ¤» ¥À À » ïÙ Ý&
¿ öàäªÕö Ž "üï)T ü(] Z Add a [`Layer`] built from a function that accepts a service and returns another service.Áñ( úüù(< 9 See the documentation for [`layer_fn`] for more details.Áº) úüÂ)( % [`layer_fn`]: crate::layer::layer_fnÁDö) Ç࣯ͩ»   » ‰°
ÿ)
Á ö࣯ï±í "üç^« üæO$ ! Map one request type to another.ÁP úü—PG D This wraps the inner service with an instance of the [`MapRequest`]Á|ãP ›È ÷P útÿP ¦¸ ’Q úüšQ# Changing the type of a request:ÁÂQ ú\ÊQ  ```rustÁôÚQ  use tower::ServiceBuilder;ÁÔýQ  use tower::ServiceExt;ÁœR ú¤¤R ØÅü½R) & # async fn main() -> Result<(), ()> {ÁüëRE B // Suppose we have some `Service` whose request type is `String`:ÁüµSE B let string_svc = tower::service_fn(|request: String| async move {ÁüÿS) & println!("request: {}", request);Át­T Ok(())Á<ÀT Ìö ÌT úüÔTI F // ...but we want to call that service with a `usize`. What do we do?Á¢U úüªU) & let usize_svc = ServiceBuilder::new()ÁüØUJ G // Add a middleware that converts the request type to a `String`:Áü§V= : .map_request(|request: usize| format!("{}", request))ÁüéV? < // ...and wrap the string service with that middleware:Áì­W  .service(string_svc);ÁÏW úü×W4 1 // Now, we can call that service with a `usize`:ÁüX!  usize_svc.oneshot(42).await?;Ád¶X žÊ<ÇX Éù <ÓX ð› ßX úüçX  Modifying the request value:ÁŒY ú\”Y ×Ëô¤Y ëËÔÇY ’ÌæY ú¤îY ØÅü‡Z) ÏÌüµZ4 1 // A service that takes a number and returns it:ÁüîZ= : let svc = tower::service_fn(|request: usize| async move {Á”°[  Ok(request)Á<Ç[ Ìö Ó[ úüÛ[# let svc = ServiceBuilder::new()Áüƒ\8 5 // Add a middleware that adds 1 to each requestÁüÀ\2 / .map_request(|request: usize| request + 1)Á´÷\ ü¹’] úüš]) & let response = svc.oneshot(1).await?;ÁäÈ]  assert_eq!(response, 2);Ádé] žÊ<ú] Éù <†^ ð› ^ úüš^+ ( [`MapRequest`]: crate::util::MapRequestÁ»ñ„Ð^ ÄÊ^ \î^ Ç࣯´­» Ä ½BÅ ÇBÆ Ä Æ Å » ‰°
ú^ Óº
ý^ äº
_ ˆ»
|ú_ ´º
‡` ‚Á
,Œ`
à ö࣯§Èߺ±PRUWZ\üécw üÝ`% " Map one response type to another.Á‡a úüaH E This wraps the inner service with an instance of the [`MapResponse`]Á|Üa ›È ða úüøaJ G See the documentation for the [`map_response` combinator] for details.ÁÇb úüÏb- * [`MapResponse`]: crate::util::MapResponseÁücF C [`map_response` combinator]: crate::util::ServiceExt::map_responseÁ»ñ„Òc ÄÌc dðc Ç࣯›±» È È » ‰°
ýc
Ç ö࣯۱٠"ü“hV ü¨e"  Map one error type to another.ÁÏe úü×eC @ This wraps the inner service with an instance of the [`MapErr`]Á|Ÿf ›È ³f úü»fE B See the documentation for the [`map_err` combinator] for details.Á…g úüg# [`MapErr`]: crate::util::MapErrÁüµg< 9 [`map_err` combinator]: crate::util::ServiceExt::map_errÁ»ñ„üg Äög <šh Ç࣯µ» Ê Ê » ‰°
¢h
É ö࣯ï±í "üËl\ ü¬iH ªùi úüjW T This wraps the inner service with an instance of the [`MapFutureLayer`] middleware.ÁÝj úüåjH E See the documentation for the [`map_future`] combinator for details.Á²k úüºk3 0 [`MapFutureLayer`]: crate::util::MapFutureLayerÁüòk7 4 [`map_future`]: crate::util::ServiceExt::map_futureÁ»ñ„´l Ä®l TÒl Ç࣯⸻ Ì Ì » ‰°
Ýl
Ë ö࣯ÿ±ý "üÊtQ üímV S Apply an asynchronous function after the service, regardless of whether the futureÁ´Èn  succeeds or fails.Áãn úüënA > This wraps the inner service with an instance of the [`Then`]Á|±o ›È Åo úüÍoF C This is similar to the [`map_response`] and [`map_err`] functions,Áü˜pH öüåpH •·ü²qH ç·|ÿq ¸¸“r úü›rB ? See the documentation for the [`then` combinator] for details.Áâr úüêr  [`Then`]: crate::util::ThenÁüŽs6 3 [`then` combinator]: crate::util::ServiceExt::thenÁüÉs2 / [`map_response`]: ServiceBuilder::map_responseÁü€t( % [`map_err`]: ServiceBuilder::map_errÁ»ñ„³t Ä­t $Ñt Ç࣯Ǽ» Î Î » ‰°
Öt
Í ö࣯Y±W "üö{X üÜuI »‰üªv9 ŽŠèv úüðvJ ÝŠü¿wX ±‹üœx) “ŒÊx úüÒxD A This wraps the inner service with an instance of the [`AndThen`]Á|y ›È ¯y úü·yF C See the documentation for the [`and_then` combinator] for details.Áz úüŠz* ÒŒü¹z. üìz> ; [`and_then` combinator]: crate::util::ServiceExt::and_thenÁü¯{% " [`AndThen`]: crate::util::AndThenÁ»ñ„ß{ ÄÙ{ Dý{ Ç࣯­À» Ð Ð » ‰°
†|
Ï ö࣯µ±³ "ü’\ ü’}K ­´üâ}F ‚µT­~ ѵ¼~ úüÄ~F C This wraps the inner service with an instance of the [`MapResult`]Á| ›È £ úü«H E See the documentation for the [`map_result` combinator] for details.Áø úü€€B ? [`map_result` combinator]: crate::util::ServiceExt::map_resultÁüÇ€) & [`MapResult`]: crate::util::MapResultÁ»ñ„û€ Äõ€ T™ Ç࣯žÄ» Ò Ò » ‰°
¤
Ñ ö࣯ӱÐ!#äë‚ ü´‚2 / Returns the underlying `Layer` implementation.ÁTò‚ Çàöà» » ³×»üý„Q ü¨ƒ= : Wrap the service `S` with the middleware provided by thisÁüêƒB ? [`ServiceBuilder`]'s [`Layer`]'s, returning a new [`Service`].Á±„ úܹ„ †¢ üÙ„ Þ¡ <„… ý ýÇàŸ«ÚÇ» ¤Õ Õ   » ‹ƒ
Œ… öàŸ«DÅ…
Ô öàŸ«$ ì]]79üÚe ü‚†Y V Wrap the async function `F` with the middleware provided by this [`ServiceBuilder`]'sÁüà†, ) [`Layer`]s, returning a new [`Service`].Á‘‡ úü™‡? < This is a convenience method which is equivalent to callingÁü݇A > [`ServiceBuilder::service`] with a [`service_fn`], like this:Á£ˆ ú\«ˆ ×Ëü»ˆ. + # use tower::{ServiceBuilder, service_fn};Áüîˆ= : # async fn handler_fn(_: ()) -> Result<(), ()> { Ok(()) }Á|°‰ # let _ = {ÁÌĉ ²¹t≠ޅüõ‰( % .service(service_fn(handler_fn))ÁD¢Š ¸ù <¯Š ð› »Š úlÊ ëò ÕŠ ú\ÝŠ ×ËäíŠ òÑ
üŽ‹B ? use tower::{ServiceBuilder, ServiceExt, BoxError, service_fn};ÁÕ‹ ú¤Ý‹ ØÅüö‹/ öÅüªŒN K async fn handle(request: &'static str) -> Result<&'static str, BoxError> {Á”ýŒ ÏÕ,” éØ
ž úü¦# „֬Π .buffer(1024)Áüè) ¨õ ä–Ž  .service_fn(handle);Á·Ž úü¿Ž- * let response = svc.oneshot("foo").await?;ÁñŽ úüùŽ  assert_eq!(response, "foo");Á žÊ Éù  ð› Ç úÜÏ †¢ üï Þ¡ ü“% " [`service_fn`]: crate::service_fnÁ»ñ„à Ľ Ç࣯°Ê» × × » ‰°
ì öàšÉüž‘
Ö ö࣯²±¯79üؘ? ü‚’. + Check that the builder implements `Clone`.Áµ’ úü½’[ X This can be useful when debugging type errors in `ServiceBuilder`s with lots of layers.Á úü¥“C @ Doesn't actually change the builder but serves as a type check.Áí“ úlõ“ ëò ‡” ú\ ×ËôŸ” ëË” úüÊ”' $ let builder = ServiceBuilder::new()Áüö”5 2 // Do something before processing the requestÁü°•( % .map_request(|request: String| {ÁüÝ•% " println!("got request!");Áœ‡–  requestÁTŸ– Ñó ü®–4 1 // Ensure our `ServiceBuilder` can be clonedÁ´ç–  .check_clone()Áü‚—4 1 // Do something after processing the requestÁü»—* ' .map_response(|response: String| {Áüê—& # println!("got response!");Á¤•˜  responseÁ\®˜ ý
<¾˜ ð› \ߘ ÇàÇà» » ØÇà,‘™
Ø öà!ü¾¡e ü¶™^ [ Check that the builder when given a service of type `S` produces a service that implementsÁd™š `Clone`.Áªš úü²š[ í…’› úüš›C à†â› úlê› ëò ü› ú\„œ ×Ëô”œ ëË·œ ú´¿œ  # #[derive(Clone)]Á¼Úœ  # struct MyService;Á,öœ ÷ó
ü€' ÿ‡ü¬5 ±ˆüæ( ñˆü“ž% ¤‰œ½ž Ó‰TÕž Ñó üäžO L // Ensure that the service produced when given a `MyService` implementsÁü¸Ÿ+ ( .check_service_clone::<MyService>()ÁüèŸ4 ÞŠü¡ * üР& Ò‹¤û  ‚Œ\”¡ ý
<¤¡ 𛠜š ÇàÇà» ¤Ú Ú » ‹ƒ
Ù¡ ¯úDÿ¡ ØÚÇ,¢
Ù öàŸ«Ç#35ü•° ü¢] Z Check that the builder when given a service of type `S` produces a service with the givenÁü¤£' $ request, response, and error types.ÁУ úüØ£[ í…¸¤ úüÀ¤C à†ˆ¥ úl¥ ëò ¢¥ ú\ª¥ ×Ëôº¥ ëËüÝ¥# use std::task::{Poll, Context};Áü…¦% " use tower::{Service, ServiceExt};Á¯¦ úÌ·¦  // An example serviceÁ¬Õ¦  struct MyService;Áï¦ úü÷¦) & impl Service<Request> for MyService {Áü¥§  type Response = Response;ÁÌɧ  type Error = Error;Áüç§@ = type Future = std::future::Ready<Result<Response, Error>>;Á¬¨ úü´¨W T fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {Á©
// ...Áœ¥©  # todo!()Á<½© É© úüÑ©< 9 fn call(&mut self, request: Request) -> Self::Future {Á„’ª Å™œ§ª ß™<¿ª ü™,˪ éØ
Õª úœÝª  struct Request;Á¤õª  struct Response;ÁŒŽ«  struct Error;Á¤« úü¬«% " struct WrappedResponse(Response);ÁÖ« úüÞ«' ÿ‡üЬY V // At this point in the builder if given a `MyService` it produces a service thatÁüè¬L I // accepts `Request`s, produces `Response`s, and fails with `Error`sÁü¹­? < .check_service::<MyService, Request, Response, Error>()Áüý­. + // Wrap responses in `WrappedResponse`Áü°®E B .map_response(|response: Response| WrappedResponse(response))Áüú®: 7 // Now the response type will be `WrappedResponse`Áü¹¯= : .check_service::<MyService, _, WrappedResponse, _>();Á<û¯ ð› lœ° ÇàÇà» ¤Ü ¥Ý ¦Þ ß Þ ß Ý Ü » ‹ƒ
ª° Íì¥ ­° Íì¦ °° åó
³° ¯úDÙ° &ÚÇø¢ü÷°# ÚÇø¢& Œ£d‚± ÚÇø¢&
˜¡L±
Û öàŸ«ø¢Œ£˜¡2&¢¤˜šü¶¹£ üº±X U This wraps the inner service with the [`Layer`] returned by [`BoxService::layer()`].Á—² úüŸ²% " See that method for more details.Áɲ úlѲ ëò ã² ú<ë² ð› ü÷²E B use tower::{Service, ServiceBuilder, BoxError, util::BoxService};ÁäÁ³ òÑ
,â³ ÷ó
¬ì³ …ô
´†´ £ô
¬¡´ Âô
ü»´# áô
<ã´ Éù ï´ úü÷´P M let service: BoxService<Request, Response, BoxError> = ServiceBuilder::new()Á„̵
.boxed()Á¤áµ ãô ôúµ €õ ü) ¨õ ü˶* Ûõ üú¶. Ùü
\­· ý
ü½·, ±ý
üî·* æþ
ü¸! šÿ
<ø ð› ϸ úü׸= : [`BoxService::layer()`]: crate::util::BoxService::layer()Á»ñ„Ÿ¹ Ä™¹ ,½¹ Çàéл ¤á £â â á » ‹ƒ
ù Œ
ƹ ¯úDã¼ &ÚÇÁÄT½ ÌìÚÇ$޽ ÚÇ<•½ ÌìÚÇÁÄ& $ʽ ÷«<ѽ
à öàŸ«ÁÄg(ü–É ü ¾] Z This wraps the inner service with the [`Layer`] returned by [`BoxCloneService::layer()`].Á‚¿ úüŠ¿R çªüá¿C Ä«©À úü±À- ’¬ãÀ úlëÀ ëò ýÀ ú<…Á ð› ü‘ÁJ °ð äàÁ òÑ
, ÷ó
¬‹Â …ô
´¥Â £ô
¬À Âô
üÚÂ# áô
<‚à Éù ŽÃ úü–ÃU R let service: BoxCloneService<Request, Response, BoxError> = ServiceBuilder::new()Á´ðà  .boxed_clone()Á¤‹Ä ãô ô¤Ä €õ üÇÄ) ¨õ üõÄ* Ûõ ü¤Å. Ùü
\×Å ý
üçÅ, ±ý
˜Æ úü Æ- ê°¤ÒÆ ¡±üëÆ* æþ
üšÇ! šÿ
<ÀÇ ð› ÌÇ úüÔÇG D [`BoxCloneService::layer()`]: crate::util::BoxCloneService::layer()Áü È5 2 [`BoxCloneService`]: crate::util::BoxCloneServiceÁÔÚÈ –²»ñ„ÿÈ ÄùÈ \É Çà¼Õ» ¤ä £å å ä » ‹ƒ
©É Œ
¬É ¯úDÎÌ ½«TìÌ ÷“,ùÌ Ñ«$Í ã«<ˆÍ ï«$½Í ‹¬<ÄÍ
ã öàŸ«Áĺ*egikü·Ù ü˜Î] Z This wraps the inner service with the [`Layer`] returned by [`BoxCloneSyncServiceLayer`].ÁúÎ úü‚ÏX U This is similar to the [`boxed_clone`] method, but it requires that `Self` implementÁüßÏA > [`Sync`], and the returned boxed service implements [`Sync`].Á¥Ð úü­Ð1 . See [`BoxCloneSyncService`] for more details.ÁãÐ úlëÐ ëò ýÐ ú<…Ñ ð› ü‘ÑN K use tower::{Service, ServiceBuilder, BoxError, util::BoxCloneSyncService};ÁääÑ òÑ
,…Ò ÷ó
¬Ò …ô
´©Ò £ô
¬ÄÒ Âô
üÞÒ# áô
<†Ó Éù ’Ó úüšÓY V let service: BoxCloneSyncService<Request, Response, BoxError> = ServiceBuilder::new()Á¤øÓ ãô ô‘Ô €õ ü´Ô) ¨õ ÜâÔ  .boxed_clone_sync()Áü‚Õ* Ûõ ü±Õ. Ùü
\äÕ ý
üôÕ, ±ý
¥Ö úü­Ö- ê°¤ßÖ ¡±üøÖ* æþ
ü§×! šÿ
<Í× ð› Ù× úüá×G D [`BoxCloneSyncServiceLayer`]: crate::util::BoxCloneSyncServiceLayerÁü­Ø= : [`BoxCloneSyncService`]: crate::util::BoxCloneSyncServiceÁüïØ& »¨»ñ„ Ù ÄšÙ „¾Ù ÇàÌÚ» ¤ç £è ç è » ‹ƒ
ÏÙ Œ
ÒÙ ¯úD™Ü Ììöà$¤Ü  öà$«Ü öà<²Ü ½«TÏÜ ÷“,ÜÜ Ñ«$äÜ  ÚÇ$ëÜ ã«<òÜ ï«$§Ý  ÷«$®Ý ‹¬<µÝ
æ öàŸ«ÁÄJ-¸º¼üÌÞ4 ê ê ¤¼ ÑÞ ¿cöàTÔÞ Çàë Àcë %'ü‡ß8 Šß þÿ þÇà ÿ c cˆ¢cµ
 `£cÂó `àB¤GS
–óé  Žß é
ë öà$ß ±Õ.üà@ ¤í î î í ùÎ ”à Íì¨â —à ¨âî©DÆà ùáï ð ð BD=?dÖà <Ûà ì ì Æàüöà* ,ùà  ùáî©ùáî©ì  ÿà ì
ð â$€á Ù*î/lî>ü2$/ A collection of [`Layer`] based tower servicesÁ3$úÜ7$†¢ ,ö>ö Ì\Dj$ .ó Ðæ,t$ô ”Ò<{$õ \\$46')$ü†"$ Utilities for combining layersÁ©$úü­.$+ [`Identity`]: crate::layer::util::IdentityÁÜÜ$†¢ üø($% [`Stack`]: crate::layer::util::StackÁ$¼à$ø ³Ÿ$ù \¼$&(TÞ?v0z0h0l0ôœ@a0ÄAW0”ÏAE0´ûA;0T÷B»¼œ¸B»õ¤ÍB»„ãBü·B=ü®BH4ûB
œˆC4C
¥ƒ

ƒ
ÐÄ ´ˆCïÙ ™C
ÐÄ  ÐÄ &!#ŒÊCü¢C'$ Alias for a type-erased error type.ÁDÓC¤ü[IF A [`MakeService`] that produces services by cloning an inner service.Á¥úü©'$ [`MakeService`]: super::MakeServiceÁÑúëò ãúð› üï%" # use std::task::{Context, Poll};ÁÄ• # use std::pin::Pin;Áü®# # use std::convert::Infallible;ÁüÒ$! use std::future::{Ready, ready};Áü÷+( use tower::make::{MakeService, Shared};Áô£ use tower::buffer::Buffer;Á¼Â¹ó ÚúüÞ! // An example connection typeÁÄ€ struct Connection {}Áúô // An example request typeÁ¬¼ struct Request {}ÁÒúüÖ // An example response typeÁ´ö struct Response {}Áúü‘2/ // Some service that doesn't implement `Clone`Á¬ÄÞ–ÚúüÞ)‹—üˆ! type Response = Response;Áüª  type Error = Infallible;ÁüË:7 type Future = Ready<Result<Response, Infallible>>;ÁúüŠZW fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {Áüå Poll::Ready(Ok(()))ÁL…ר
úü“:7 fn call(&mut self, req: Request) -> Self::Future {ÁüÎ" ready(Ok(Response {}))Áר
éØ
 úü… RO // Example function that runs a service by accepting new connections and usingÁüØ KH // `Make` to create new services that might be bound to the connection.Á
 //Áü«
74 // This is similar to what you might find in hyper.Áüã
1. async fn serve_make_service<Make>(make: Make)ÁL• ¾Ó
üŸ .+ Make: MakeService<Connection, Request>Á âÔ
 Þ… éØ
é ú Íô ”û  // Our serviceÁÄŽ  let svc = MyService;Á§ úü« 41 // Make it `Clone` by putting a channel in frontÁüà *' let buffered = Buffer::new(svc, 1024);Á
úü
&# // Convert it into a `MakeService`Áü¶
%" let make = Shared::new(buffered);ÁÜ
úüà
YV // Run the service and just ignore the `Connection`s as `MyService` doesn't need themÁüº# serve_make_service(make).await;Á¸ù ð› 4˜¤

ùÎ Ÿ“ª\›}…i(
 +

î©cxcxA¤

ùÎ kš°
 Ÿ“ªŠ
ÀcŠ
cxcxƒ “ª ƒ c cˆ¢cµ
 `£cÂó `àB¤GS
–óˆ
 øˆ
Š
î©cx±cx”z”zB¤Œ
Œ
ùÎ l€Ú  Ÿ“ª
Ù
Š”z”z “ª“ª
 ÿ
î©”z
C¤

ùÎ Š î©
Ÿ“ª+.øž$¤

ùÎ ·¹«
 
øÑ)ß‘þ¹«

”ýÙ*zøá8¤

ùÎ ¹«
Àc
ø¨B«ˆ ¹«  c cˆ¢cµ
 `£cÂó `àB¤GS
ˆ–ó
¯
î© °±î‚øät¤

ùÎ |‚Ø‘þ˜Ä¹«˜
ƒØ„Ø
©¬Xï0ô

¡‹øÉi ÌŠ„¾„¾ñ€†¾ ˜X$]È=„kt• ¹« ŠÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾åœØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã¹«ƒØ
å
î©8…”ïC…ù•º´üï-Iº* Response future from [`Shared`] services.ÁKdª¤

ùÎ ©¹«´möÁ1ÄÊåœ
ÆÉá“»(î+š
š
‘þYös üs+ù¸{2O¤Ÿ
Ÿ
ùÎ 0¹«ª
¬
=@ùÚ•SÁÝ•+Œ Œ¹«¤¡
¡
 ’–ùÎ ¬
 
î©Ó„!Œ–ÄÇù¨ÝÕ1¨ÕWQÝt…c£
¤¤
¤
£
‹ƒ
.òª…c1¤ÞŸ«…cùÿÈ¢
¢
ób¥
Ù*+} ß2¿Fí…cŸ«} ß2¿Fí¥
1Óݬ¯má+¢
¢
„¾„¾ñ€†¾ ˜X$]È=„kt• …c‰Ø‰ØŠØÈŒØˆ×€ oíwãžU6Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ÿ«Ùùù¨ÝÕ1¨ÕYi®x…c§
¤¨
¨
§
‹ƒ
ðŒë1¤ÞžëùÿȦ
¦
£c©
Ù*+cLOl>:—r…cŸ«cLOl>:—r©
1ÓÝ`cm+¦
¦
„¾„¾ñ€†¾ ˜X$]È=„kt• …câìù•‡1ù…9Ü}«
„¾„¾ñ€†¾ ˜X$]È=„kt• «
¹«¢
¢
ób¥
Ù*+} ß2¿Fí«

1°‡ž
Ó‰ €ù•‡1ù…Y­
„¾„¾ñ€†¾ ˜X$]È=„kt• ­
¹«¦
¦
£c©
Ù*+cLOl>:—r­

1°‡ž
¬
î©!Ň!ù å½0UA ñ½…c¯
¤°
°
¯
‹ƒ
Õ ®
®
d±
¢d+²
Ù*+Äq¶Î{o…cŸ«Äq¶Î{o±
²
1 ú½;
>
ù ܾ< ܾ+®
®
È‹Fu\»Ÿ …cù݈tÅ+®
®
âìù ÿáU…c´
¤µ
´
µ
‹ƒ
ê
“í))*PinnedFieldsOfHelperStructÁ,ˆ G„íTÑ7²ô(Á ŒÁòª1 È¿[ ^ ©"ûéVy"ê+

ÐÄ Á"ûé
ÐÄ ÐÄ !ù"Ïê6V¥¸
¸
ð¾ "ÔêŒ"¬«¹"×ꬫ ù"‘ëFV¤º
º
ùÎ / ¹«6 9 ÄÔüÖ41 Service returned by the [`and_then`] combinator.Áúü30 [`and_then`]: crate::util::ServiceExt::and_thenÁ¤¼
½
½
¼
ùΠ牰
êå®êîœÁ§Ùc¾
¿
(*-/»
»
î©$ »
»
£¯W’W’^¤Á
Â
Á
Â
ùÎ ®‰°
¬€Ú ‚Á
å®Ã
ÙÃ
×ÙÜÞW’W’ å®å®À
À
Ã
î©£¯W’ù.•º´üä.I.º+ Response future from [`AndThen`] services.Á=úüŸ%KÊðelÔãÅ
íÆ
ŸÇ
Å
Ç
Æ
̲
âݲ
æî²
õÿ²
y,Ÿ£ް\ÿHIýªªÈ
9;>@CEá.“»,‘Ä
Ä
›°Y/ös /üsù/¸{2iãË
íÌ
ŸÍ
Ì
Ë
Í
̲
Úݲ
Øî²
Öÿ²
y,ä¥ްÞ
à
ýÿ  ù/Ú•SÁ/Ý•Ž ŽްãÏ
íÐ
ŸÑ
Ï
Ð
Ñ
 /’–̲
©ݲ
¨î²
§ÿ²
Ò
Î
¼°°ȰÓ„!/Œ–Ýàäçëîù1¨ÝÕ11¨ÕqQ/Ýt…cÓ
ãÔ
íÕ
ŸÖ
Õ
Ó
Ô
Ö
ÍìꯎÍìð¯Íìö¯ž'!ð¯Ð¼¯…c11¤Þꯅcù0ÿÈð¯'#…cð¯…c&ö¯…c3Ò
Ò
ób×
Ù*šO^ÀÍf•…cê¯ð¯ö¯šO^ÀÍf•×
11ÓÝpswz~Á8Ò
Ò
„¾„¾ñ€†¾ ˜X$]È=„kt• …c(ù<(ù<ˆe(ý<Ù*WïP拳sñ(Œ>(Œ>Ó¯(>Ù*ú5‰h£Q[Žê¯·„ð¯ö¯ù4¨ÝÕ14¨Õsi/®x…cÙ
ãÚ
íÛ
ŸÜ
Û
Ù
Ú
Ü
ÒƒÓâƒÒòƒÑ‚„ü14¤Þ¢„ù3ÿȵ„ ȄՄØ
Ø
£cÝ
Ù*Á{ƒ¨×ù…cê¯ð¯ö¯Á{ƒ¨×ùÝ
14ÓÝsvz}¦;Ø
Ø
„¾„¾ñ€†¾ ˜X$]È=„kt• …c»†ù6•‡16ù…9/Ü}ß
„¾„¾ñ€†¾ ˜X$]È=„kt• ß
ްÒ
Ò
ób×
Ù*šO^ÀÍf•ß
¼°°ȰÊ
16°‡Ê
ó¸'™ù8•‡18ù…Y/á
„¾„¾ñ€†¾ ˜X$]È=„kt• á
ްØ
Ø
£cÝ
Ù*Á{ƒ¨×ùá
¼°°ȰÊ
18°‡Ê
à
¼°°Ȱ!8Ň')ù:å½0oA:ñ½…cã
ãä
íå
Ÿæ
æ
ä
ã
å
ÒƒEâƒDòƒC‚„nâ
â
dç
¢dè
Ù*pMÝYræu;…cê¯ð¯ö¯pMÝYræu;ç
è
1:ú½ÊÍÑÔØÛù:ܾ<:ܾâ
â
Ãõù/݈t»â
â
»†ù:ÿáo…cê
ãë
íì
Ÿí
í
ë
ì
ê
ÒƒŠ âƒòƒˆ ‚„³“í))*Þõ,ˆ G„íTÑ7­(Á:ŒÁ¼¯1:È¿÷ ú þ 


©<ûépy<êî
î
ÐÄ Á<ûéî
ÐÄ ÐÄ !ù<Ïê6p¥ð
ð
ð¾ <ÔêÁø¹<×ꬫù<‘ëFpãò
íó
Ÿô
ò
ó
ô
̲
 ݲ
ÿ
î²
þ
ÿ²
)
ް  # & * - Ôúü‡41 A [`Layer`] that produces a [`AndThen`] service.Á¼úüÀ!ǽ
d…ö
ö
ˆÇ
ì°¦±{çºÓ÷
 $› õ
õ
š±iixù
ù
ˆÇ
lØš±>’ì°ú
Ùú
Žii ì°ì°ø
ø
ú
š±iééyü
ü
ˆÇ
¿cš±?’ì°ý
Àcý
:=éé ì°  c cˆ¢cµ
 `£cÂó `àB¤GS
–óû
û
ý
š±é±鬻
 ñ¤ÿ
ÿ
ùÎ Î ó´1Þ9Bz    ñþ
þ
ǼÇz¤  ùÎ lš°
 ó´ƒ Àcƒ ˆ¼Ç¼Ç ó´  c cˆ¢cµ
 `£cÂó `àB¤GS
–ó  
ƒ DZ¼ÇùF•º´ã6 ¤ ¢   é± ®‹ƒ
³‚² £² ™Dó§è¸óÌ¡£³êˆ Š Œ ACFHKMáF“»  ·Í4‘  Ÿ«9,¤  йS  kDÉ  ÆÎYGös GüsùG¸{Fƒã6 ¤ ¢   é± I‹ƒ
H‚² G£² F踪 ¬ knruy|GÚ•ÁGÝ• è¸ã6 ¤ ¢    G’–é± ‹ƒ
‚² £² 
ƹŸ«йÓ„!GŒ–MPTW[^ùI¨ÝÕ1I¨ÕQGÝt…c ã6˜ ¤ ¢š š   ˜ ÍìĸÿàŸ
þÍìиæ·…c1I¤Þ܉ĸ…cùHÿÈʸ…cи…c ʸ'F…c3  ób ì]œ ‘j Ÿjž ¬jŸ ·jhOÑq¤eÒ…cĸʸиhOÑq¤eÒ œ ž Ÿ 1IÓÝ  ùÉ  …cÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙĸ^  „¾„¾ñ€†¾ ˜X$]È=„kt• …cʸ±N  …cиÒU  …cñ\  …cÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ¶¤ùP¨ÝÕ1P¨ÕiG®x…c¡ ã6¢ ¤£ ¢¤ ¡ £ ¤ ¢ Ç£àŸ
Þ£î£1P¤Þ܉‡¤ùOÿÈš¤ §¤´¤    £c¥ ì]¦ ‘j§ Ÿj¨ ¬j© ·j’o£ûÄ…cĸʸи’o£ûÄ¥ ¦ § ¨ © 1PÓÝèëïòöùÞ¨    …c¦¦þ®    „¾„¾ñ€†¾ ˜X$]È=„kt• …cʸPç    …cиqî    …cõ    …cŸ¨ùV•‡1Vù…9GÜ}« „¾„¾ñ€†¾ ˜X$]È=„kt• « è¸  ób ì]œ ‘j Ÿjž ¬jŸ ·jhOÑq¤eÒ« ƹŸ«йŽ 1V°‡Ž èàù\•‡1\ù…YG­ „¾„¾ñ€†¾ ˜X$]È=„kt• ­ 踠   £c¥ ì]¦ ‘j§ Ÿj¨ ¬j© ·j’o£ûÄ­ ƹŸ«йŽ 1\°‡Ž
¬ ƹŸ«й!\Ň')ùbå½0Abñ½…c¯ ã6° ¤± ¢² ¯ ± ² ° Ç£
àŸ
œ
Þ£
܉š
® ® ‚d³ ¢d´ ì]µ ‘j Ÿj· ¬j¸ ·jDgòAà­X#…cĸʸиDgòAà­X#³ ´ µ · ¸ 1bú½Z ] a d h k ùbܾ<bܾ® ® ÃõùG݈tC ® ® 001 AlwaysUnpinÁ3ˆ ¯¥K'OO¦¦Wz ® ® ʸpy ® ® 001¥´3ˆ ¯¥K'OOи·¦ ® ® 001¥´3ˆ ¯¥K'OOüÓ ® ® 001¥´3ˆ ¯¥K'OOŸ¨ùbÿe…cº ã6» ¤¼ ¢½ ½ ¼ º » Ç£>
àŸ
=
Þ£<
“í))*Þõ,ˆ G„íTÑ7‰³(ÁbŒÁ܉ƒ
æ·1bÈ¿«
®
²
µ
¹
¼
©hûéŠyhê¾ ¾ ÐÄ Áhûé¾ ÐÄ ÐÄ !ùhÏê6Š¥À À ð¾ hÔêÁø¹h×ꬫùh‘ëVŠã6 ¤à ¢Ä Ä  à é± ·‹ƒ
‚² µ£² ´è¸ÓÖÚÝáäùµ•º´ü×]ºZ This is a [`Stream`] of responses resulting from calling the wrapped [`Service`] for eachÁü¹/n, request received on the wrapped [`Stream`].Áí§ú´×Ëü…%ÃäÔ¯Ñ # use std::cell::Cell;ÁäÎõ # use std::error::Error;Á´ï # use std::rc::Rc;Á<÷ó
ü”$L! use std::future::{ready, Ready};Áܽ{ use futures::StreamExt;ÁüÝ¢ use futures::channel::mpsc;ÁüÍ use tower_service::Service;Áü¥ ø use tower::util::ServiceExt;ÁÊ#úüÒ@2= // First, we need to have a Service to process our requests.Áü—#~ #[derive(Debug, Eq, PartialEq)]Á¼¿¬ struct FirstLetter;ÁüÛ0Ï- impl Service<&'static str> for FirstLetter {Áü & # type Response = &'static str;Áü» 3=0 type Error = Box<dyn Error + Send + Sync>;Áüó B|? type Future = Ready<Result<Self::Response, Self::Error>>;Áº
ÉúüÂ
ZØW fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {Áü¡ > Poll::Ready(Ok(()))Á iÕ ~úüÝ @= fn call(&mut self, req: &'static str) -> Self::Future {Áü¢ !Ù ready(Ok(&req[..1]))Á Ôà éØ
á #ú”é 1 #[tokio::main]Á¬€
N async fn main() {Áüš
.o+ // Next, we need a Stream of requests.ÁüÌ/©, let (mut reqs, rx) = mpsc::unbounded();Áü€XäU // Note that we have to help Rust out here by telling it what error type to use.ÁüÝQHN // Specifically, it has to be From<Service::Error> + From<Stream::Error>.Áü³0¥- let mut rsps = FirstLetter.call_all(rx);Áèàúüðaï^ // Now, let's send a few requests and then check that we get the corresponding responses.ÁüÖ,\) reqs.unbounded_send("one").unwrap();Áü‡,) reqs.unbounded_send("two").unwrap();Áü¸.Ì+ reqs.unbounded_send("three").unwrap();Áœë drop(reqs);Áƒ#úü‹R2O // We then loop over the response `Stream` that we get back from call_all.ÁÜâ let mut i = 0usize;Áü‚1. while let Some(rsp) = rsps.next().await {Áü¸VóS // Each response is a Result (we could also have used TryStream::try_next)Áü“)U & match (i + 1, rsp.unwrap()) {ÁÔÁ (1, "o") |ÁÔà®  (2, "t") |ÁôÿÓ  (3, "t") => {}ÁÜ¢ü  (n, i) => {ÁüÂ@#
= unreachable!("{}. response was '{}'", n, i);ÁŒ‡n
lŠ
œ¯¢
 i += 1;ÁÀ
ר
ÕÏ
úüÝWÞ
T // And at the end, we can get the Service back when there are no more requests.Áü¹3A 0 assert_eq!(rsps.into_inner(), FirstLetter);Á éØ
Ž ð›  úüO¬ ŒÈ òã6Æ ¤Ç Æ Ç é± ‹ƒ
òº ™³ó§£²  ò¹Ú‹‚@È 8:=?ᵓ»¸Å Å Ÿˆaaóã6Ê ¤Ë Ê Ë é± ©‹ƒ
§“² ²² òº ¹£² ¿¿cßãaò¹Ì ÀcÌ ðòõ÷aa˜ ò¹ ˜ c cˆ¢cµ
 `£cÂó `àB¤GS
–óÉ ìÉ
Ì ƹŸ«a±aös ·üs¸ù·¸{Fñã6Ï ¤Ð Ð Ï é± ‹ƒ
òº £² ò¹Þ à ;>BE·Ú•Á·Ý•¸š šò¹ã6Ò ¤Ó Ò Ó  ·’–é± Ì‹ƒ
Ëòº Ê£² Ñ
Ñ ƹŸ«Ó„Œ–þù¹¨ÝÕ¨ÕûÝt…cÕ ã6Ö ¤× × Ö Õ Ç£àŸ
аº…c1¹¤Þ&ĸ¶¤§܉®‡¤ù¸ÿÈš¤
ĸ¶¤& …c$Ô Ô óbØ Ù*¸ƒÍ'O£ç’…cĸʸƒÍ'O£ç’Ø ÓÝGJNQ 
¸Ô Ô „¾„¾ñ€†¾ ˜X$]È=„kt• …c  âiˆ ì] ‘jŠ Ÿj ¬jŒ ·jóÌ¡£³êĸʸ—º®º(¿ ˺(¿ åº(¿ „»(¿ ®™ +}jø¥Ûù¼¨ÝÕ¨Õý®x…cÚ ã6Û ¤Ü Û Ú Ü Ç£ãàŸ
âäÚ¤Þ÷Úí܉ô‡¤ù»ÿÈš¤
£ÛÙ Ù £cÝ Ù*¸…1Rœ®;Ê…cĸʸ…1Rœ®;ÊÝ ÓÝ|ƒB¸Ù Ù „¾„¾ñ€†¾ ˜X$]È=„kt• …cÝù¾•‡ù…Ü}ß „¾„¾ñ€†¾ ˜X$]È=„kt• ß ò¹Ô Ô óbØ Ù*¸ƒÍ'O£ç’ß ƹŸ«Î °‡Î Á•ÔùÀ•‡ù…á „¾„¾ñ€†¾ ˜X$]È=„kt• á ò¹Ù Ù £cÝ Ù*¸…1Rœ®;Êá ƹŸ«Î °‡Î
à ƹŸ«Ň%'ùÂå½0ùñ½…cã ã6ä ¤å ä ã å Ç£. àŸ
- ÷Ú, ܉3 â â ‚dæ ¢d¸ç Ù*¸˜ñÐi”°…cĸʸ˜ñÐi”°æ ç ú½° ³ · º ùÂܾ<Âܾ¸â â Ãõù·݈t¢ ¸â â ÝùÂÿeù…cé ã6ê ¤ë é ë ê Ç£V
àŸ
U
“í))*Þõ,ˆ G„íTÑ7”æ(ÁÂŒÁ÷Ú
܉¤
°ºÈ¿Å
È
Ì
Ï
©Äûéúê¸ì ì ÐÄ ÁÄûéì ÐÄ ÐÄ "ùÄÏê6ú¥î î ð¾ ÄÔêÁø¹Ä×ꬫùÄ‘ëVúã6ð ¤ñ ð ñ é± º ‹ƒ
¹ òº ¸ £² ¿ ò¹Ö Ù Ý à ùЕº´üÙLºI A stream of responses received from the inner service in received order.Áª\úü²RjO Similar to [`CallAll`] except, instead of yielding responses in request order,Áü‰1Ç. responses are returned as they are available.Á¿úüÇ%" [`CallAll`]: crate::util::CallAllÁ„‘ã6ó ¤ô ó ô é± ¢‹ƒ
§òº ™Îó§£²  Á¼†ór³¼($–õ 8:=?áГ»Õò ò ¦ hhã6÷ ¤ø ø ÷ é± ©‹ƒ
§“² Ñ¢²² ѧòº ¹£² ¿ ÕhÁ¼ù Àcù èêíïhhœ Á¼ œ c cˆ¢cµ
 `£cÂó `àB¤GS
–óö Ñúö
ù ƹŸ«h±hös ÒüsÕùÒ¸{Fã6ü ¤ý ü ý é± ‹ƒ
òº £² Á¼ 36:=ÒÚ•ÁÒݕ՞ žÁ¼ã6ÿ ¤ ÿ  Ò’–é± Ä‹ƒ
Ãòº £² É
þ ƹŸ«Ó„Œ–öùýùÔ¨ÝÕ¨ÕšÝt…c ã6ƒ ¤ ƒ   Ç£ƒàŸ
ÿ¼…c1Ô¤Þ÷Ú܉‡¤ùÓÿÈš¤
£Û  ób Ù*ÕÛdJ“Ü" …cĸʸÛdJ“Ü"  ÓÝ#&*-éÕ  „¾„¾ñ€†¾ ˜X$]È=„kt• …c  âiˆ ì] ‘jŠ Ÿj ¬jŒ ·jóÌ¡£³êĸʸ(é"(é"æ¼(ë"ÿ¼(Ž!(ì"½(Ž!(í"±½(Ž! [_D˜/¿¥ÛùרÝÕ¨Õœ®x…c ã6ˆ ¤  ˆ  Ç£²àŸ
±Ðõ¤Þ÷Ú¼܉ǤùÖÿÈš¤
£Û  £cŠ Ù*Õ­ÉŠlñÉ*…cĸʸ­ÉŠlñÉ*Š ÓÝKNRUÕ  „¾„¾ñ€†¾ ˜X$]È=„kt• …cÑ÷ùÙ•‡ù…Ü}Œ „¾„¾ñ€†¾ ˜X$]È=„kt• Œ Á¼  ób Ù*ÕÛdJ“Ü" Œ ƹŸ«û °‡û »­ÎùÛ•‡ù…Ž „¾„¾ñ€†¾ ˜X$]È=„kt• Ž Á¼  £cŠ Ù*Õ­ÉŠlñÉ*Ž ƹŸ«û °‡û
ƹŸ«Ň%'ùÝå½0˜ñ½…c ã6 ¤   Ç£ýàŸ
ü÷Úû܉   ‚d ¢dÕ Ù*Õ¥ + ÝÁ…cĸʸ¥ + ÝÁ ú½ ùÝܾ<ÝܾÕ  ÃõùÒ݈tq Õ  Ñ÷ùÝÿe˜…c ã6 ¤˜  ˜ Ç£%
àŸ
$
“í))*Þõ,ˆ G„íTÑ7×€(ÁÝŒÁ÷Úl
܉s
ÿ¼È¿


ž
©ßûéêÕ  ÐÄ Áßûé ÐÄ ÐÄ "ùßÏê6¥  ð¾ ßÔêÁø¹ß×ꬫùß‘ëVã6 ¤ž  ž é±  ‹ƒ
ˆ òº  £² Ž Á¼¥ ¨ ¬ ¯ ¬´ü”;8 Combine two different service types into a single type.ÁÐúüÔIF Both services must be of the same request, response, and error types.ÁüžQN [`Either`] is useful for handling conditional branching in service middlewareÁüð%" to different inner service types.Á  ¡   ¡ ëï Äüï Çè¾`ú¶¦Á~¢ £ ¥ ¦ £ ¤ °¿è¾¦ § ¶¿è¾QSVXç0ç0Ÿ Ÿ
£ °¿¶¿ç0ç0°¿è¾Ÿ Ÿ î‰ ðŸ Ÿ °¿=1=1Ÿ Ÿ
¦ °¿¶¿=1=1¶¿è¾Ÿ Ÿ èŠ Ÿ Ÿ ¶¿??¡© ª © ª ëï üï Ø°¿àÄØ¶¿àÇ辫 Ù« ÓÖÚÝ??Ÿ Ÿè¾è¾¨ àŸ¨
« °¿¶¿? ᦢ­ ® ® ­ ëï ˆüï Š °¿áÄŠ ¶¿áÇ辺½ÁÄ÷÷£° ± ± ° ëï üï ¿c°¿âÄ¿c¶¿âÇè¾² Àc² LOSV÷÷ ¡¢  è¾ ¡ c cˆ¢cµ
 `£cÂó `àB¤GS
¢–ó¯ ⬯
² °¿¶¿÷±÷ù蕺´üŠ
#º Response future for [`Either`].Á¨¤½
´ µ ´ µ ëï Ò
üï Õ
´ÀÀ$ s<®M &(+-áè“»
ô³ ³ ÒÁös éüsôùé¸{2¬¹ º ¹ º ëï °üï ®´ÀÈ Ê ÂÄÇÉùéÚ•SÁéÝ•ô£ £´À¼ ½ ½ ¼  é’–ëï Püï O
» °¿¶¿Ó„Œ–tw{~ùë¨ÝÕ¨Õ´Ýt…c¿ À Á Á ¿ À ¯ú Àú è¿…c1ë¤Þ–À…cùêÿÈœÀ…c¾ ¾ ób ôå¹Cd½©žm…c–ÀœÀå¹Cd½©žm ÓÝž¢¥sô¾ ¾ „¾„¾ñ€†¾ ˜X$]È=„kt• …còÀùî¨ÝÕ¨Õ®x…cÄ Å Æ Å Ä Æ ¯ú zÀú y‘–¤Þ¤–ùíÿȸ–
à à £cÇ ôMí:ý9§a_…c–ÀœÀMí:ý9§a_Ç ÓÝÿ ×ôà à „¾„¾ñ€†¾ ˜X$]È=„kt• …còÀùð•‡ù…Ü}É „¾„¾ñ€†¾ ˜X$]È=„kt• É ´À¾ ¾ ób ôå¹Cd½©žmÉ °¿¶¿¸ °‡¸ ¹Ñ$ùò•‡ù…Ë „¾„¾ñ€†¾ ˜X$]È=„kt• Ë ´Àà à £cÇ ôMí:ý9§a_Ë °¿¶¿¸ °‡¸
Ê °¿¶¿Ň%'ùôå½0²ñ½…cÍ Î Ï Î Í Ï ¯ú ±Àú °Ì Ì ‚dÐ ¢dôÑ ôüÔ*Ȥ,.q…c–ÀœÀüÔ*Ȥ,.qÐ Ñ ú½%(,/ùôܾ<ôܾôÌ Ì Ãõùé݈t)ôÌ Ì òÀùôÿá²…cÓ Ô Õ Ó Õ Ô ¯ú ÌÀú Ë“í))*Þõ,ˆ G„íTÑ7ÀŸ(ÁôŒÁè¿È¿-047©öûé³êôÖ Ö ÐÄ ÁöûéÖ ÐÄ ÐÄ "ùöÏê6³¥Ø Ø ð¾ öÔêÁø¹ö×ꬫùö‘ëF³Ú Û Ú Û ëï " üï ! ´À0 3 7 : ùüÛ¿µ¿ôÝ Þ Ý Þ ëï Âüï ÅÒÁ,<åû¡°wß á à â 1368ùüýÀw¿ôÜ Ü ÒÁ‰ü¹ÁôÜ Ü °¿D¿ôÜ Ü ÒÁ=,ƒôÜ Ü ¶¿ùþ¨ÝÕ¨ÕÄô…cä å æ å ä æ ¯ú 3Àú 2òÀ…c1þ¤Þ¤–ùýþи–ã ç Øsè Ù*ôé ñsê Ù*ô}…z‡V·­5…c–ÀœÀ}…z‡V·­5ç é è ê ÓÝãæêíùýºÐúÄ·ôã ã ÷§Ñ°ôã ã „¾„¾ñ€†¾ ˜X$]È=„kt• …c–ÀvÄèôã ã ÷§?èôã ã „¾„¾ñ€†¾ ˜X$]È=„kt• …cœÀY¡ –¡ôù¬¡2Ãí î î í ëï 9üï 8ÒÁï JMQTù‚’œ1‚öš9ãôð „¾„¾ñ€†¾ ˜X$]È=„kt• ð ÒÁã ç Øsè Ù*ôé ñsê Ù*ô}…z‡V·­5ð °¿¶¿ì 1‚­œì üÑ4'ù…å½0ÊA…ñ½ô…cò ó ô ô ò ó ¯ú ÅÀú Äñ ñ ‚dõ ¢dôö Øsô÷ ñsô¨d;|t…c–ÀœÀ¨d;|tõ ö ÷ 1…ú½GJNQù…ܾ<ܾôñ ñ Ãõùɱõ=ô
닃
îŽÃ ¼`óÅ™âÔ
&(+-”÷

Öç-§-Ð
¤ˆ
ˆ

ˆÇ
‹ƒ
‡—ëØŸ«îŽÃ
Ù
ÆÈËͧ-§-¤ ¤ŽÃŽÃ
Ê
š±Ÿ«§-„î 
¤Œ

Œ
ˆÇ
ù ‹ƒ
ü Öë.ÑP.6
Ž
Ž
š±ÖÃ
Ÿ«ÖÃQSVX“1“1Š
Š
Ž
š±Ÿ«“1“1š±ÖÊ
Š
ó¹ Œ!Š
Š
š±é1é1Š
Š
š±Ÿ«é1é1Ÿ«ÖÊ
Š
óº œ!Š
Š
Ÿ«W2W2Ñ
¤

ˆÇ
¢‹ƒ
¡‡—ù š·ü ÖÃ
Ù
ÏÒÖÙW2W2¥ ¥ÖÃÖÃ
æ 
š±Ÿ«W2¼ˆü30 Service returned by the [`map_err`] combinator.ÁÁúüÅ1. [`map_err`]: crate::util::ServiceExt::map_errÁ4“¤˜

˜
ùÎ š‰°
ÎÄúŽÏÎQwš
(*-/

î©$´ ´

£¯rArAÓ¤
ž

ž
ùÎ ±‰°
¯€Ú š‚Á
ÎÄŸ
ÙŸ
ÜÞáãrArA¦ ¦ÎÄÎÄœ
œ
Ÿ
î©£¯rAÌáüð2/ A [`Layer`] that produces [`MapErr`] services.Á£úü§!ǽ
¡
¡
ˆÇ
ø¢Åz~4©þFJ¢
 $  
 
š±FFÔ¤
¤
ˆÇ
o‡—ø¢Å¥
Ù¥
ŠŒFF§ §¢Å¢Å£
Ò£
¥
š±F„F„FÕ§
§
ˆÇ
³˜ø¢Å¨
Àc¨
69„F„F¨©ª ¨¢Å © c cˆ¢cµ
 `£cÂó `àB¤GS
ª–ó¦
Ù¦
¨
š±„F±„Fø–ž$ª
Ÿ«
ª
«
ˆÇ
ÍìáÆ š¯Æ¬
ø–Ñ)ß…‘¯Æ©
©
¬
š±áÆÙ*1Jø–á8®
Ÿ¯
¯
®
ˆÇ
»ÿư¯Æ°
Àc°
ÒÔÎÐø–¨B««¬­ «¯Æ ¬ c cˆ¢cµ
 `£cÂó `àB¤GS
­–ó­
¯­
°
š±áư±¤Kø–ät²
Ÿ³
³
²
ˆÇ
åÿÆÛ‚Ø…‘˜–įƴ
µ
į㯵
X–ï0–ô±
±
§›ø–ÉiÌ®¯°„¾„¾ñ€†¾ ˜X$]È=„kt• ®¯Æ ¯ÌÌkÎŒî¸ÏŸî¸Ð¸î¸Ñ³¸Ò×î¸f'EwÚ]¾å°œØžØŸØÈ Øˆ¡Ø¢Ø´‰‰Nµý¤Ã¯ÆƒØ±
å±
µ
š±áÆ?M”ïKMùž•º´üŸ-º* Response future from [`MapErr`] services.ÁÑ=úüÙ#K”áß·
Ÿ¸
·
¸
ˆÇ
dÿÆZ¯ÆÇûDjÁt囹
ˆáž“»(–î

…‘ös ŸüsùŸ¸{2ã¼
Ÿ½
¼
½
ˆÇ
ÿƯÆË
Í
,/*-ùŸÚ•SÁŸÝ•± ±¯Æ¿
ŸÀ
À
¿
 Ÿ’–ˆÇ
¾ÿÆ´
¾
š±áÆÓ„Œ–âåàãù¡¨ÝÕ¨ÕëÝt…cÂ
Ã
ŸÄ
Ã
Â
Ä
‰°
oî²
eçÅ…c1¡¤Þ£¯…cù ÿÈȰ…cÁ
Á
óbÅ
Ù*Ê,Íþ¬(¡…c£¯ȰÊ,Íþ¬(¡Å
ÓÝ  
{Á
Á
„¾„¾ñ€†¾ ˜X$]È=„kt• …c(½@(½@†{(À@Ù*®ÓN-õ>Z£¯Ȱù¤¨ÝÕ¨Õí®x…cÇ
È
ŸÉ
Ç
È
É
‰°
î²
ôÓ¤Þ‡Ôù£ÿÈ›Ô
Æ
Æ
£cÊ
Ù*ËÝ€3ž
³…c£¯ȰËÝ€3ž
³Ê
ÓÝŸ¢ Æ
Æ
„¾„¾ñ€†¾ ˜X$]È=„kt• …cïÕù¦•‡ù…Ü}Ì
„¾„¾ñ€†¾ ˜X$]È=„kt• Ì
¯ÆÁ
Á
óbÅ
Ù*Ê,Íþ¬(¡Ì
š±áÆ»
°‡»
Ì™NIù¨•‡ù…Î
„¾„¾ñ€†¾ ˜X$]È=„kt• Î
¯ÆÆ
Æ