From 6fc6dbf5325b05bf1f7c78102f2cfc7621f6b779 Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Mon, 1 Oct 2018 18:29:21 -0400 Subject: [PATCH] Updated docs to reflect new component changes --- .../alarm_control_panel.blink.markdown | 17 +++ source/_components/blink.markdown | 135 +++++++++++------- source/images/supported_brands/blink.png | Bin 7249 -> 7323 bytes 3 files changed, 102 insertions(+), 50 deletions(-) create mode 100644 source/_components/alarm_control_panel.blink.markdown diff --git a/source/_components/alarm_control_panel.blink.markdown b/source/_components/alarm_control_panel.blink.markdown new file mode 100644 index 00000000000..2d987ca80bc --- /dev/null +++ b/source/_components/alarm_control_panel.blink.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Blink Alarm Control Panel" +description: "Instructions for how to setup Blink alarm control panel within Home Assistant." +date: 2018-10-01 22:13 +sidebar: true +comments: false +sharing: true +footer: true +logo: blink.png +ha_category: Alarm Control Panel +ha_release: "0.80" +--- + +

+To get your Blink alarm control panel working with Home Assistant, follow the instructions for the general [Blink component](/components/blink/). +

diff --git a/source/_components/blink.markdown b/source/_components/blink.markdown index 217dcce7438..7d240cc0b9d 100644 --- a/source/_components/blink.markdown +++ b/source/_components/blink.markdown @@ -17,65 +17,100 @@ The `blink` component lets you view camera images and motion events from [Blink] You will need your Blink login information (username, usually you email address, and password) to use this module. -To set it up, add the following information to your `configuration.yaml` file: +## {% linkable_title Configuration %} + +To enable devices linked in your [Blink](https://blinkforhome.com) account, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry blink: username: YOUR_USERNAME password: YOUR_PASSWORD + scan_interval: 60 + binary_sensors: + monitored_conditions: + - motion_enabled + - motion_detected + sensors: + monitored_conditions: + - battery + - temperature + - status + - wifi_strength ``` -Configuration variables: - -- **username** (*Required*): Your username to login to Blink. -- **password** (*Required*): Your password to login to Blink. - -Once loaded, your front end will have the following components: - -* A camera image for each camera in your system. -* A binary_sensor per camera that indicates whether motion detection is enabled. -* A binary_sensor for the system that indicates if the system is armed or disarmed. -* A sensor per camera that reports temperature. -* A sensor per camera that reports battery level. -* A sensor per camera that reports unread notification (i.e., detected motion events). - -Since the cameras are battery operated, the images are only updated in Home Assistant when the user manually forces a new photo. This image can be updated with the `snap_picture` service to force Home Assistant to request an update from Blink's servers. As a note, all of the camera-specific sensors are only polled when a new image is requested from the camera. This means that relying on any of these sensors to provide timely and accurate data is not recommended. - -Services: - -This services are available for the `blink` component: - -- arm_system -- arm_camera -- snap_picture +{% configuration %} +username: + description: The username for accessing your Blink account. + required: true + type: string +password: + description: The password for accessing your Blink account. + required: true + type: string +scan_interval: + description: How frequently to query for new data. Defaults to 60 seconds. + required: false + type: int +binary_sensors: + description: Binary sensor configuration options. + required: false + type: map + keys: + monitored_conditions: + description: The conditions to create sensors from. + required: false + type: list + default: all (`motion_enabled`, `motion_detected`) +sensors: + description: Sensor configuration options. + required: false + type: map + keys: + monitored_conditions: + description: The conditions to create sensors from. + required: false + type: list + default: all (`battery`, `temperature`, `status`, `wifi_strength`) +{% endconfiguration %} -For `arm_system`, the value sent can be either `True` or `False` and will arm and disarm the whole Blink system. Arm system example: +Since the cameras are battery operated, setting the `scan_interval` must be done with care so as to not drain the battery too quickly, or hammer Blink's servers with too many API requests. The cameras can be manually updated via the `trigger_camera` service which will ignore the throttling caused by `scan_interval`. As a note, all of the camera-specific sensors are only polled when a new image is requested from the camera. This means that relying on any of these sensors to provide timely and accurate data is not recommended. -```json -{ - "device_armed": "True" -} +**Note:** Each camera reports two different states, one as `sensor.blink__status` and the other as `binary_sensor.blink__motion_enabled`. The `moition_enabld` property reports if the `camera` is ready to detect motion *regardless if the system is actually armed**. The `status` property is more descriptive, and can be one of the following states: + +- `disabled`: System is disabled. +- `disarmed`: Camera and/or system are disarmed and not ready to detect motion. +- `armed`: System and camera are armed and detecting motion. + +## {% linkable_title Services %} + +### {% linkable_title `blink.blink_update` %} + +Force a refresh of the Blink system. + +### {% linkable_title `blink.trigger_camera` %} + +Trigger a camera to take a new still image. + +| Service Data Attribute | Optional | Description | +|------------------------|----------|----------------------------------------| +| `name` | no | Name of camera to take new image with. | + +### {% linkable_title `blink.save_video` %} + +Save the last recorded video of a camera to a local file. Note that in most cases, home-assistant will need to know that the directory is writable via the `whitelist_external_dirs` in your `configuration.yaml` file (see example below). + +| Service Data Attribute | Optional | Description | +|------------------------|----------|------------------------------------------| +| `name` | no | Name of camera containing video to save. | +| `filename` | no | Location of save file. | + + +```yaml +homeassistant: + ... + whitelist_external_dirs: + - '/tmp' + - '/path/to/whitelist' ``` - -Arm camera follows a similar structure, but each individual camera can have motion detection enabled or disabled. Because of this, you also need to supply a name. For example, if you have a camera named "Living Room" and you want to turn off motion detection on that camera, you would call the `arm_camera` service with the following payload: - -```json -{ - "friendly_name": "Living Room", - "device_armed": "False" -} -``` - -The `snap_picture` service takes the camera name as the payload and with take a new picture with your camera. - -```json -{ - "friendly_name": "Living Room" -} -``` - -

- -

diff --git a/source/images/supported_brands/blink.png b/source/images/supported_brands/blink.png index cb96d9a114d37907c27bf57a0a1e61d61b3c199c..f8021275bb7adb4e4ab28f3ca617f569f05cb810 100644 GIT binary patch literal 7323 zcmcI}`9GBJ_x~)0?8cgXng-d0M2w}zma-OuVl-tbTfDMOn4vNVQAoBZ*)tOc5rYsy z_Q^UW`(BwL%0ssKKmKG>`00211 zdLKH*&U%W#{ty5FsT-CklPh64>(imnbFbERZEt2>vXp-)EGT$hL;Hl%Wj6H!ODLxk z(DVoVS_90~M1X9|Cj3nP6g=>QC>z_yAk~+6E)bVe%&7u)HXp?&PXz4cIUSOtD}r-8 zK7G#l)r|Wv-_$bjD@OsSiQCi&?vDs{Ew7mzO^IZ$KL&+DORXFxzyeTcw=%>I3QZ*n zqfAjKxV?Y~6dG?~as`D#!2cJ963$aaNLIX5gWK%y@n?MaQLLQnfOJ579kxtDWX`WL+7S07~9Y(R@6-VSHh&~GfxbA z;7f;nW+Ci_=}9~oU&`la1j(8E^40=+23(Ez%b92qgbboz;QhN8$jOYQ9_k%yKU}S{ z{gu4U(l6DMZ9djG09^bFd&Pyw&A3~%w0lc_0?=+K#7^-Y5`P2?VK?)@p=wt?X1t9C zUE@~aMe0Jk4O!MgdHNN)im#}|s4zy19!o8tPVHV0N;Mc15mPL@KpO783-Wev1Z4tM z2@^u8Ikp1nh2oq!7LitUwKRTL8PQab9c$^U0BxdRS{@S+7h;NN7e*C%zY+2m5B2j) zv>==!UL1UU*SAsnLotfWG$2e-ViT8Jz;yY4j{if<6nUS^o!q$V>yFYiGr5xBnTMTB z+^P~h2^TMfDVhFK(HJjX=g655Nqub3%GjChpr>FuoT@IxTH$eEttf&QLDgW&SI!*v z&-}DE#2@&W65+vXbQs->TK3!z$s@&iO)}ILo@UhN!*7g`I|3LUYvQE|J_qqseOtX~ zEJhN34mMy@xhwICcr%Cft+RNxrC|=k7=_5M$x;3vBQR88J;dLg)eC24ioT5L)~UmX zxE_}soa5QQw%R81eHX2EUuWzL zwLE>?iVC7TV+;IkN;wWP)E(Ax#fq$ZB7 z(`(%fergqA65l2LM?^8kk?u!p-&CXaKM3EI?iuO1V?!6F1L?)-;|~3iRK0X+%EZsU{OXgz+wQ1({!W{Wgp*#)^--S3e6$(OA=e%$ z0;CT~0F$o1N>xmPtnJrD&fnwOI!WiErwVr=V(+v^dG;hnK2vH@6JO$ImGp_$pg7fp zdV=;?%c>J2%eIg0ZOR0-P%{W}t~zY~tua0pa%(464yfylGvM756iq=Veump09G-If z3=d6W7qDfxwkh;|Q*c7pw{{su*Qc8D{5+vl`W$eL+xJm`fFDThV-(+5j~0;uumaaq zg98mnvO3&-?*vH>^Y@ekMYqPUm?I8rzcU3yBL?2KK+$wX-W`rR&qkE`Q7Yat34Sd+ zHYKz5@_^zS%5M3fsQit<*Ef!D-SZXsGO0={`-nGSO1&qFp+bRwWhX-qj(z2SdDsW? z=dkXI-gLh0)ET9N3{y|a;B0(<`UJ-HPPIrNXP{A_Tu2^F9avN4N603{gjZtUd4;n4f}-(sy%wE$@``HHK zAk~rl@U0Q$5+o4}Rm zN5gj{tk<p!e$OS@wrJfHX>W=UyAS7=()wfXY* zC>uAalypQ{l6>*mZg9Pp^pKAcG?4 zj;CcvvdIR0#NDmd!+hcCt_gHGfRyDe#Gvl$(*vJr+|<|y2Uz0-cyH=bzHd|5{=Ao{ zSFr}Wnf%tHr}u2~w`%fV4qj2-oJmmSj7Rvr%v$P1C(qnbZpmy->R@aj9&1@Fzy@VW z$n`wkq%g=J2PtxJj)eTuRJ3L_!HG`LPDRvi{b71)1!^O|wdZFh6!CQXs!UIbl-!fjMQW7(+ zx+#;ij=SwWxpM|QeUyAhK4fVGw~7(Zklu_JNDAi(Im5W3(_4C2yWGaWZ8B`0n0Qx8>(Lc2cUAO){MCqfPp&Q111D7+DQm;8K;rkY zAU~Q}W8ETId~*|z!|zecN9vlVW2WzA6Ge{AaMPf@!Pzx-w9~68#b4@#$K%m}i@_Zw zLXB=)0)Yx4%aJE2Bciuj%A|2HT|xb)sUxi)K9F+W+vkV)LJ;w>sG~&4D#jqDWbs26 zAKjmR&Ue=HpM=ThlxI{Hf! zCr%(r%Jl_r0a#fl3KSwgccX$QyRMHkkOJZSJ!;W>tm!NvDk`?`e60VboH*<|n(Mxh zYsdr#ci~;|lCdae&zRZSvth6_GB8mQr}{8ayHHbuWB+kB>wF#^#dnkI_c{5aDGQ5Op)X1-@g?W z7Ug(%52kfpSBAl++`?$gIh78_44Kf4Vv)(r^ocdL`$;$X1f}EFD>*VpVJ@8@nj5Xz z>_wcP=#2pC0JQQ`*aym+dcB8533KPj`V)TKxr04^-#F^S_UNn3%Z4(VTb` zbx(}(HL}==!};_1pQpCu=n4qtYnQ}C()KlC`uU%lQmz;OzQW4F^YYsI#qP@%7atM* zI~g5+hsi0+$$n=OLg+_$Rl%jz8z5Q4in^87;2CsTF_MJrR)KsetMVxR)UBWEUll=k^2u0BG#zZdmW1T~JBnkCZ)66!d}t1;zG`WN+yAy{Sz zqvLJGk5*0krTa|tNz&6#aAyXOBM^Ib?e~Fl?9uimG#(PE{%U)AgHyFzqy@P(%Li_J z7p6_&-%#s={Q+&wqV-6b4pQdAp%{*QgFb|NfSF=)CO&xiLt$DSvuaWCDD}0GUU%VT zvMXQhSXEM)P^0XD(_++L)ye>dD%x&E(tgG0t!AKJvlYbEL-8x>-3>?x?50!2(4)n7 zCB<>lll~{&O|;`BIk2SsY=pI1eo`*T=F-sYn)RCco(X;V!9L%*+kK{4v4^-VYG~|X zy4j@kq*sLI^tX>XVlB5W4LtUfX=0+RXnl_ml;Y+TRWSvnZrC}oM&CnILE747V}-w3 zJ|d?xYo?Q~bM9$ys-^1TYJUnIWi54)aEzG^u%Q*#=>0UVLMG{=YVr$R)&)!l5#!63_uMiSl%=}#@+l1(*=We@kmP((p3xvY@Iy(hu_Eb%2W=dUsJYdT%r7Hvl37E;-47S* zvzA=RBPlZ+Co(;>ra$|NC=nlhYe@Mm&noBZ`V7H^6&9BwHl6|ec;85tbK)9##SLl5;c)QFuVm_hETuf0g7TksCIJx}B!f9nRlEi80=~ zC#>J|qBs&!h}Vi#zmaI$V(}yKQ|OMWV8JB?9mrsy!PB*rU|&~MLa_)9wr;{h525P@ z*&~c`h2O$N_jc425b!ieC@5~uwOH>I%RfV(Qpw6YX~U6zf%aj4%2t54>lfcsKGArK zla1`V8c}spQ>^r>+sNx7zds13b`JCAK%`8~%HEAwaU`~F=fscUc&?)mtD>0FgSVDA z*j<*l(EEBn_jbDv=1?CgZhR;>U;6v8B|IU(nusU^u^!%PNjr3faG>?Lsh!r`bW3iWfr zS0&ia|Ht33yN`ICX)o%DpPE zlgf6i4M_6r-g5!8T49^b4r?~AG*a<=}J2o;i@wkIevvQSYj$ox$u}GsV=EV|)9X|Ca+F+UH$Z}^t z&TGb<-yPquKMlTX^Pbl;9yHE_N7u!_eYNW>y41Mb@htA@_%i7 zItefVqByY|@*4<}`u<*|HlRCSUt(bnD=2D#{0*?moe)j^ep})Gn_5%a3D|(I*&O-c zJyvSJBrC@IxWkqeg(RrDm|ziha?8>wLOC$&LSy7Q+x^ytlo$Vc4484fJ(i{Fgn74C z9b+_5Bdz_Masf@V4JjvB06Hz*;!>zgk`sicK6$a72<#=n78^uHV{U0pOp*V2bUJ}N zbtx^+rJjKWQ>R$aj_E_S{Gb_9wSA*U?#KmNa20OXesgl-r#rI>hBCO$KJ|U7%kcGc zQCk!3X3JeQ1%qW)_Y#Y(=~`5S#VBhI#(x{wN*0k#%FJqdr<|jxvY7O)%BS$#U7jBt za`(f*kip%M&P`jpvo8H2sRxZRy9L3rS|o?oy#1ztmoSNeV;GJu#^PM|h%*YoIZb=F zA=G~;#V55n)wOzx*jWuFRbuxC3jQ^)hm7O;t)yThucsInW5{5br$@D&dN3&|9GYqt zs2tc3EIaznCvWfb5erW59Wl|1hJU|LH4`m{`Z;6*H?SOZo<&0dWKfsV725rhd$$_9 z@AhI#-&+p8S9e^Ov$u0$S%_-VAIXXu$kuGtU;|LsrEC^STPeuHHJ{+{+`0SS?9J>= z9o0gRLGKxm)Y4SfA^LB3lejre;vszKxmu@D_8>b=royT8B4m(gNbqyRDS|`wD4Rao z8hYy{M2m&W&f6&wVl*2+-=>=GI`Py?&t7|qq_xVa<8)ayPMTMuEA&V5boIRP6L{|d8T^xzc%)L!Gqp5j zes=2xc3&SXd5)qEPkP0zE3#W0Y~+gBCz%X`l!#*++H@M*pK#z&(Ui5XQCsg7x@{N3 z^flRlBj@oZmpC;JpYqVx)}%(K3tRd+t^R0N`QYpXi^zX6!&FoYi59Ba2OQ9VK)$Y zHXz%h2-gqG0&s2VuSIzaF35lB+Q)AKUI{K)p?(HHw=6LY!A6rFLa%A%i8Cg@1?X%l z$h^s0<5bpYk6~)_TaadDDoQGtdB*9XmW5>(NOCLdf-5$tpX*GT>ahTGa9oGqM}6d^ zb-ELWu)#u#tJBiGv@k|%(Q6BezoQkp<4b_PgjXFJUk8%t=2DW=6Rm1<6s^^3JY09Hq4o ze+;K=4|uXUD*Tz-xlf4kJ|_w?PrcL@TQJ2wmCb;`(J98_<|xFk2vWOIiXPJe)XcNy zvMP3pC?5a`>6=sc;eTBSp5(UpgK@alM-!2QDn5Eh_1ad=18PX@vWM^nu}H9cg_^V>1(NJ!P`o6hiRxczFa!jk~vZhX!8< z5-q-~0scNWHZr%p@QVKDMD&38g zo6vh6dg8N5a=3v+^{1C04+Z1}z6I3~wIB2nT!ogr)ai-f!!G%?zkQeJ&wKC-3K}J5 zObyC?96V$0tW5+-D$OhPnlq)O6JsfcdL8D7?R{^VGp`F(zVeg(GVRup0_n5fK1d&Y z1i3F+UN)3U1xR*SQM0Hr)B$@LE2(L8>%_@Vj0;yei;jd8-zkt+Y-cR*xDc$Idl&mA z_(YN5gJZg)`U{QxqQ|3L_5ysoXx)XGU+jtJ|^WImRCx?X}(?5PsBT&;Z`ivE&)9~2s%c6t81Hu-^%0*gF zQt>?c?cA5v_o!yZ`rJw@-$5nZH!W2#BuM**j>Xw1?Dd%F?=gsHWaWrgWb}_LUC-+k z|1AcT9~H7LgUIhrB~gQ(`vZJAed8cwJ0yq8NzY*iifhS3yy&rlqGdh>J1m|FlI=)% zUc7gBJpocFNg58WZN7VP_p|6lbd2vnIEmGYLqG@cZ;fe3#s?s^BWU zn(Pcu-?5E7W@-PF6L9L@?qixwO*y_;xvF{8SRQLyHQtrrA3#uT{J^Q~FqRCV8=xPn zVrL0goudKhXDh^^YMx!7Xg#INT4s~mH`!fg@(gW_ETQcM<_D!Xy6v!6YVJk;**MXH z9e6Q5Bx5Z7Q+rJNUTT|%MHMnfj1{F!3*U_n%uVP+7XyZsj{Jk>&v4;>N|*)RVdT={ zc7}gP84t7?lJbl1=8c^{1!i7#TlBy|TnG0_HJpsY+y{{ZR==ZUdn4U)(Q4m{(#LPC z1&+1#RH@%E?OntwYzedO1{~5=TXXYjz>=}h zA`NEC<%kg@BMe)T zP-nc!r)7R2`PuHrzyf6zOVG@}#T=X47}N;FY&1T7hx(FyiN(?__ zi7*<4%bI-%`qU8=iyKxE>m0ZYi}1~l!kQ0h_%<~$)A_@-n>{u3>;{A@LLVNvdktj$MW3zFa9Qz6KicClzVxPib>}aH- zBL)?jXNSB>)vD8Ga?oy)O4~Ga?{T#^7b=eHJ4sNvf`<|i``WW5Zn6^JD{N?2YRS|L!j=;L97qh&5hb~ob|7V8aCYk|VAGtxc z+17W8)i~lPDCfsMf8#Rx+~^)>s=k2$LsHtc<$P)gM;D@vnPnh`Ys(85#f+MYVWYpY z6}})Lcp{$4^*UBrU~&u6l3?xo9H9%$!an_X`{43*km$0RRgVL5)`sGi`oTqEL8hb8 z5&BG&Psu7Z)~6zFnlGVl*r*#v)Me?F(}P5hAV!YNH zxp+?I(S+Cy8|aCac+{v>fAl|RGxYK*)kpB68Xt=A8>vNnoyR19#=aHBKhAHYg}J#; z`tY=>B4WeXo-mQtLbFF>wGl<*2v5LSAx2n9Qe~I zex@y!u28q5a#e#HYM@22jkaU&g{ zv3dFE*=y)j!g;qh41{Ao1L*KH?Q+qHGA4Z16}(wKc^f1h z;$XdTxH)d4Rf1@4Nmp;XlTCKLb;4E7P1@iHAxX|=e2qCqZ*%)*w)U1CC<+I4?P<>p? z3PP>d{kw|EZE@jl_Nub882Fv1o`wLY7GLOz;h$nJLrp}Gtk8j&$d^%eK@KWC#@D|# zBuN@+J5o;dKw)PbRPS$8p0~&CL|9c!Z$4xKpD4v z@4mJwH|)kOZ9FXM875lHNEldr$%cn>qut@FEZ2@kTljQcfA2N%YT%Tra*nj-#CS?2 z)paZ+pDxw6;gT8>2GLYxv3Z$}_Y-TLeQ|M#ykm1Ps(WeYfN(xNDl&;~%zQLHt(1*N z^hGhqv`R2yB@e1Q>=0C^!&NmS;-qc1@Fm=`I~4%--*@`1wxI%fC5kB9%l%e0{`i zj8IuzX~SX}swB&@KZb1#FI-Vr?#t~=I9<~puZV@YmniuUxmm$DeYQlHekOL?d0pQv z9cF825hh0Me|C24eDGCgG~)Q_v>wWMxYF1b#^^XYUU7QlGw(v26jD_4k^WrA|EagA zL#dxT4ZQZ52yRA4HbFuCb$3_}d0`*om&gDu@!T3iZSk1RT?JJt7Jby`Y~(KfwN>^F z>vEK?bp`71`OJ$Bd;amhfBw3QP4q_VadmMoQ<8`M3`>6B7q%vT?a!QT+%&k24-(w^ z0I{8@#;MvVvg9KEog+XjIPS7v%ia$9oV?eegy+q#-Z~G$&gO9;+xi>WWMyH!zJc!Y zt6Zpxe5q=MhH4RXv#@VUjeM;4R_JmH;5XCw!NgXyxh}Ch<$!J(7|((P&L2ne&q>Ka zbRFJ@y5ZsfK5p@n`+I5F?h+kzPkUnFyd-lIL=%Y%j(7&s!rNwVzU#ySeP}*yijlVX1~QtS?q*HOpwSZLd{tnM^E$6@Ms#fd@8H61kW3XYr&H_HPS%yJ_HwIsesd$nK;|V1%CQRp{ zZI(*qeFVI+fYIq7N1jWBeVI4;!%L(QhuKfjOwsb1QuM8%ZrR7zZmM5W`wE^gR^45y z|53JOl0nh`9rCf3WJc_;m*eFdM=>=VWO;UXOHAUcTn3w$NnBUm`L=aU5MuAHI{T=T zVYZuN;l3Kd#VBI5AyJ42{E!{4(IdaiAEi}d^k>pimuR87yjd|^yHp6IR+)O9tk1}b z%`7a5U0&_0QtSznsz7X-O{FAy{bDejDb0fEkYF?%ES&H1j`#UIy|FxR`o8u`s?PU? zGi1X@Jz3bG+Qq9=O9*2PWa6QP8P3VMYMvV-d7aikT;>@J&+p|?AynboNT_sTG-y3~ zhZm<*jNLhH1@|1vs}%45spUbU(6ScSKQ|Tuvk^m7i#SD|<7W+j$t}sUAPWjLAC$1ESI4LDQM4N>Lz)LahvN5|>Tc zyM*!!T!bf^UJ^#ERd>4ODjsFqC4<`-tj3>#j!pumMQSC7Shr+GfHqE-Xq09GY`IH1 zdAENgqe1(rvU!+M;JDcJM&85ibPi57e1TOrbj@lk`9=<@cao`reMKX8AS@HHUt~Y7 zxolCmo7xfQ^BVchVV7KzlA_L|w;8MHX%qhTrmythyom`ghko$_>$Va~l*Jd%$8jJg zHI2L%U!~hq=Ke_ZuwT?~HQ<-ojMRj6Dz$s&G9!bpy;3#Q9D!>~6VI0CwUct8 z?~&tM-QNk7?R~$x@Q2L?MGLOY@gN#wnXdKp3~X{bK|q})?u-nv69d1Ok? z-w_zbi`t6DCLe#-J ziGX+lJ~rYC)K#D>%lz2{z?o+Rpm%$qi8YJ~{SPz=B*ybi}p&&?~|yu^P@-{u-f>HFrM;x^1= z!+}&EZpfY|$za~Hb(d3aHqt3ZhR5~z`7csOeNsbX>2r7ps#nfc(VHJjB~J;%i&<4A zY4;5yj(08jbbr3J*Ug#u0P=P?(nOAvI(ht-WZxfY6zvlK?j#*oAJOWDUy|+eM0)#a zLsA3lwg!ToV2339NY53j-wzI#iR;fzu_1NtLI;A)zHF zjF+8Wv{JOzuvdCZ%*#e}Ept3zQSml^)bTYJ#2R}hv)##NWTtJ)_Hhe&>MYuX!LX^W z9L7$;`N^`OT49PDyHVd|%JsM!x`nUf^xluwY`Q5!%Uc|{$okn6I+@dN9~s}`eb(wt zJE7pyd%jC?dPki>UF#KpMeyfEbI?N3LWVuiaew`A#&B!5*RVYsE$tr)A5g=J_v5i) zKOcVneLX=WLpoVrczUWb*Xw-!dVqR5KcFuFAioI38Pbs%<9Aw+geYH4_oD9n0+ol6!z;ixRyGHF72e%S!cWF7<%k@!{Q>u;b%DZWdTe~f3(la0)h-l(^b%ok(`CV&H?xAoqAZ05rnC0MbgcZ0 zS{sWkQi4#S{A`L9ubSw7QB}#Np0Y(rrPq6>jehROb|A5@Z?4o9?|GjASA=l~8@bSy zs#-;tUKN5_Q%R*qs2g@dQ^?)i9@@FEA5RwM15ZYh`*t!K__dJ9T24&m7kln*Rtm^a zt&zcU)8g$rhQFUKm?__QW)PkePoN`bLs5U_oS4|SBS0BBHcf*Q3`;QOPOx8N{Q4M! z|0P2^VYJDjc+TwZ`3N2`t%s!Z(zspx;Br6;=^AZ+v;3VzSWmecD$52I59Gue{puI; zt2Tt71vL?~trHT|fQO!!)xY03=Pe)_%TaP?#8MjxE)yU((T)9~ zTROFP8dS2$)>R*LCh3n^meRB^p|KCE4hkjRH3Lps!@%Q^UnL+ZIGy5wvWGN{6 zG;;V*W{H9HqswqdAaaM}c%VrkaRXm+C?trYu8Qo@otyXU&{OSi%E7? z{5>61bU~O|vVzs08_5}CXQYedAsDnhVHe&Eb#glelN(!qIfN5jOB*y`hHU(#ORl-@ zyVp&C|5pZjd5hHmFCh2QlJi_}A2sEHrb2xXPWuV-b( zu0XyFY8Lp2ET_vm&Ppexag6ej-BEIRr;wfglXLjE{cA2f6)3KjKy6EGE|4|(^786q z`hGIi8!!Q_X70htP2aA1D;cXCG&GQy>8?pzx*>ADa8OfqQfr4x zN`8B81Q4o&j83C`(QNWfpj}@&#_tK)8$9s|`|kHIY`njEA#UAc(V2hD<@j_R^gI5H zrjZiFC*q`ejw}dHL`bB=)f~OOXSj;=zOsl|W}uaLpzcRW!N?j9D+9kM%pBXSB740Q zRZ9PybGA=Euq(oMia)mM?L9gn!}xBh3Hj>I+znQ8iiYPgedXW_W#lrKWCEQk zTp8?S@vSv?m>>-N=@vZ|5U#Xmyxc{T$F#=%oD#qw{W31p9wg?h^qJr(o8xE^M?(dU zJRe>Moqj>?*r%|6pID5y-e3tY=hL;sD9G*+)SMTcXyO54V$So`|FZAvA(OYA;9Y(N zqt~vZGf1?|8@~yzn{O=>?a5E>aG5{pZb;&H@dSszW0-R>OOsX*J?km79g#P zL`&)vt^LD36Z`F}Icc8W5gLLkW`- zdV-=e23#}U{B7Xr25?u>~Tmz|_pqsE?C^O%Z(?G5zh%qRXObs-^-Au`p{}c;=HWYO-cQ}9?AL{9!Sb}* zb+a;{xAzPB<1so0IvXMeU?ATl5I1>eb+|;7N%_ug**D(fzbQU?^)ej@CZERlm~B1V z;0=uS03DS5F)J6OrcXqC_Rto(4_T`B4G_EcvEzh~ zHJj`xYfspRN%h;Q*oY}_?KzwX(;`$UP8(h)SE|bm{x_?;$x?zRvku`hOKC{4C*2RIb(mktgPOr(^y5X4)PKjs^HGDhr@NrF<{L@3VvlOM=J zrG&QO;hBq3vE9Ou&-sRHeD-2SVt91x=(iRINYEaufRet9TKSLimm^_?4$M_gY8L|; z`U^bD^x}`?yW&0oH{?FQaHfa@dM8=e)Sox?HCJjmB({B-*p68$b6e-;j(1eDua>SP zgy7%I#%G71igNd$?x5pLBIYfPK_|qm>yTHyiHbq%rHag9U+s@4V=Wn5^#m=yCma@2 z=%qCv)34FDirj3nU)t4Hn~kDOUc6yM;=X{P^KRL+$W*VtEc+&&2Jl#o63*cQGTiOu zMpzIUYTf_l_(dYOnvgb=xiXUE3J`+<~z%)&%REWU))bR?%o zWnn=AOa5A<)!)@*d2=m3MJ0cV>guVNj_d$0MY7Kcw&s|%WvGH$&Oz2geF(>sIour2=k`Lm`3#t$FKYdmP(u}WcZK3xg@$vTjz zy@IUi>-d6@4OaO07HLedHXHmDrc~cOeV~c7M8MCgZ{3u`Bk}Ag584gttD7O_wVJai>;ZY@ z@21yWZGnraO?-(=8rRh`yv+p4O(Jp&?#aek76cp3*t#eXB9_2WW9sz$b-@+s@)lE8 z*k{_w1VoIyp|GEBn=q)=mOzm>C=6D)Oed1EIU&k9X}x4ZkowHO*~zANrv21b*KftW zcLnFPe?B~ue>;k77(5V7M|+;1g(*xOj)kBM5C%uDN3X~Z^kr!1e`%tc`>LDN1*e3`n@XaJImE0oai6YA~89(}CcV9P%0ah`pwkY_#FBE?xf6!_n1f z|M2zu$LBxPg`-Tl#)YP}In%I?p5+uhKDhkdGynbR3|;=(?fdYyC3Y6y2_`VQ)?j@L zqrXv@v>BO-*@K9tZdaUKB$!*L?xYL92yvP3UvUc^tSLMi82w_GZ)4~0QOC?^_eT^x zGoGW{@uZ^TTpQf0I)9e$FsX3HeP<$l4N7xa{V4XQ)Fxp^7ho{hJ!lF}e(iDdFq?$U z-kX;$TbN7SDD&H!1G3Nho6g0SMXN6sOWxv&R8~XkR3Z^J7D~sPpYiqVEWX0{Hg@*3 zdpAWs`11uxyzR0#(FOG0<9p-Cfq#`TA?VMP6E(Kg>`1v9))cX|y5pSJyYA$3F@@pddle5bf0=!h~I9XJe&>(T%*oh&xr%=hw?@o@R%U zN|X0A7!#VB1-`y9_XB>pFI`__)_brf_4locMRxClT?T5xc98as9ES7QSrW6b@T55z1gKVggl;F8BbH+Gn!KFq=tW+`FrYWWBN zK>@HBufR)QFjxl+mJk+_5ESJV5S9=SAgv;|{~v*alZA~H{Qno2?3E%P1psA5b%hE! Hlc4_qn@=1u