From 30e963631106aec2988a7295878b75f6c109fbe7 Mon Sep 17 00:00:00 2001 From: Christian Dietrich <dietrich@ibr.cs.tu-bs.de> Date: Sat, 23 Dec 2023 00:00:00 +0000 Subject: [PATCH] Dec 23 -- Counting Presents. Fast! Article: https://ibr.cs.tu-bs.de/advent/23-rseq/ Workload: ~12 source-code lines --- 23-rseq/Makefile | 23 ++ 23-rseq/benchmark.sh | 11 + 23-rseq/data.Ryzen7_PRO_5850U | 160 +++++++++++++ 23-rseq/plot.Ryzen7_PRO_5850U.png | Bin 0 -> 71988 bytes 23-rseq/plot.py | 35 +++ 23-rseq/rseq-asm.S | 58 +++++ 23-rseq/rseq.2 | 371 ++++++++++++++++++++++++++++++ 23-rseq/rseq.c | 243 +++++++++++++++++++ 8 files changed, 901 insertions(+) create mode 100644 23-rseq/Makefile create mode 100644 23-rseq/benchmark.sh create mode 100644 23-rseq/data.Ryzen7_PRO_5850U create mode 100644 23-rseq/plot.Ryzen7_PRO_5850U.png create mode 100644 23-rseq/plot.py create mode 100644 23-rseq/rseq-asm.S create mode 100644 23-rseq/rseq.2 create mode 100644 23-rseq/rseq.c diff --git a/23-rseq/Makefile b/23-rseq/Makefile new file mode 100644 index 0000000..10c97b3 --- /dev/null +++ b/23-rseq/Makefile @@ -0,0 +1,23 @@ +PROG = rseq + +${PROG}: ${PROG}.o rseq-asm.o Makefile + gcc ${PROG}.o rseq-asm.o -o $@ -Wall -g -Wno-unused-function -O3 -lpthread + +%.o: %.c + gcc -c $< -o $@ -Wall -g -Wno-unused-function -O3 + +%.o: %.S + gcc -c $< -o $@ + +run: ${PROG} + ./${PROG} 32 regular + ./${PROG} 32 lock + +clean: + rm -f ./${PROG} *.o + +man: + man ./rseq.2 + +plot: + ./plot.py data diff --git a/23-rseq/benchmark.sh b/23-rseq/benchmark.sh new file mode 100644 index 0000000..937608a --- /dev/null +++ b/23-rseq/benchmark.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +rm data + +for mode in rseq-atomic rseq regular lock getcpu-atomic ; do + for threads in `seq 1 32`; do + ./rseq $threads $mode 8 >> data + done +done + +echo "Run: ./plot.py data" diff --git a/23-rseq/data.Ryzen7_PRO_5850U b/23-rseq/data.Ryzen7_PRO_5850U new file mode 100644 index 0000000..d0a00ba --- /dev/null +++ b/23-rseq/data.Ryzen7_PRO_5850U @@ -0,0 +1,160 @@ +mode=rseq-atomic threads=1 sum=400000000 state=ok aborts=0 cputime=2.199005s per_increment=5.497513ns +mode=rseq-atomic threads=2 sum=800000000 state=ok aborts=0 cputime=3.284306s per_increment=4.105382ns +mode=rseq-atomic threads=3 sum=1200000000 state=ok aborts=0 cputime=4.448196s per_increment=3.706830ns +mode=rseq-atomic threads=4 sum=1600000000 state=ok aborts=0 cputime=8.446127s per_increment=5.278830ns +mode=rseq-atomic threads=5 sum=2000000000 state=ok aborts=0 cputime=9.053520s per_increment=4.526760ns +mode=rseq-atomic threads=6 sum=2400000000 state=ok aborts=0 cputime=12.195459s per_increment=5.081441ns +mode=rseq-atomic threads=7 sum=2800000000 state=ok aborts=0 cputime=11.748222s per_increment=4.195793ns +mode=rseq-atomic threads=8 sum=3200000000 state=ok aborts=0 cputime=15.032143s per_increment=4.697545ns +mode=rseq-atomic threads=9 sum=3600000000 state=ok aborts=0 cputime=16.116472s per_increment=4.476798ns +mode=rseq-atomic threads=10 sum=4000000000 state=ok aborts=0 cputime=20.672133s per_increment=5.168033ns +mode=rseq-atomic threads=11 sum=4400000000 state=ok aborts=0 cputime=23.798913s per_increment=5.408844ns +mode=rseq-atomic threads=12 sum=4800000000 state=ok aborts=0 cputime=26.946868s per_increment=5.613931ns +mode=rseq-atomic threads=13 sum=5200000000 state=ok aborts=0 cputime=29.666975s per_increment=5.705187ns +mode=rseq-atomic threads=14 sum=5600000000 state=ok aborts=0 cputime=33.483891s per_increment=5.979266ns +mode=rseq-atomic threads=15 sum=6000000000 state=ok aborts=0 cputime=37.403459s per_increment=6.233910ns +mode=rseq-atomic threads=16 sum=6400000000 state=ok aborts=0 cputime=40.505500s per_increment=6.328984ns +mode=rseq-atomic threads=17 sum=6800000000 state=ok aborts=0 cputime=42.792953s per_increment=6.293081ns +mode=rseq-atomic threads=18 sum=7200000000 state=ok aborts=0 cputime=45.171370s per_increment=6.273801ns +mode=rseq-atomic threads=19 sum=7600000000 state=ok aborts=0 cputime=47.448919s per_increment=6.243279ns +mode=rseq-atomic threads=20 sum=8000000000 state=ok aborts=0 cputime=49.511613s per_increment=6.188952ns +mode=rseq-atomic threads=21 sum=8400000000 state=ok aborts=0 cputime=52.517915s per_increment=6.252133ns +mode=rseq-atomic threads=22 sum=8800000000 state=ok aborts=0 cputime=55.319380s per_increment=6.286293ns +mode=rseq-atomic threads=23 sum=9200000000 state=ok aborts=0 cputime=57.941721s per_increment=6.298013ns +mode=rseq-atomic threads=24 sum=9600000000 state=ok aborts=0 cputime=60.357880s per_increment=6.287279ns +mode=rseq-atomic threads=25 sum=10000000000 state=ok aborts=0 cputime=62.908038s per_increment=6.290804ns +mode=rseq-atomic threads=26 sum=10400000000 state=ok aborts=0 cputime=65.316597s per_increment=6.280442ns +mode=rseq-atomic threads=27 sum=10800000000 state=ok aborts=0 cputime=68.210331s per_increment=6.315771ns +mode=rseq-atomic threads=28 sum=11200000000 state=ok aborts=0 cputime=71.145485s per_increment=6.352275ns +mode=rseq-atomic threads=29 sum=11600000000 state=ok aborts=0 cputime=74.014644s per_increment=6.380573ns +mode=rseq-atomic threads=30 sum=12000000000 state=ok aborts=0 cputime=80.516616s per_increment=6.709718ns +mode=rseq-atomic threads=31 sum=12400000000 state=ok aborts=0 cputime=78.501505s per_increment=6.330767ns +mode=rseq-atomic threads=32 sum=12800000000 state=ok aborts=0 cputime=81.190299s per_increment=6.342992ns +mode=rseq threads=1 sum=400000000 state=ok aborts=0 cputime=2.483927s per_increment=6.209818ns +mode=rseq threads=2 sum=800000000 state=ok aborts=1 cputime=2.927913s per_increment=3.659891ns +mode=rseq threads=3 sum=1200000000 state=ok aborts=0 cputime=4.631658s per_increment=3.859715ns +mode=rseq threads=4 sum=1600000000 state=ok aborts=2 cputime=9.087390s per_increment=5.679619ns +mode=rseq threads=5 sum=2000000000 state=ok aborts=1 cputime=7.195553s per_increment=3.597776ns +mode=rseq threads=6 sum=2400000000 state=ok aborts=0 cputime=9.132219s per_increment=3.805091ns +mode=rseq threads=7 sum=2800000000 state=ok aborts=0 cputime=10.669462s per_increment=3.810522ns +mode=rseq threads=8 sum=3200000000 state=ok aborts=2 cputime=14.527707s per_increment=4.539909ns +mode=rseq threads=9 sum=3600000000 state=ok aborts=0 cputime=15.470640s per_increment=4.297400ns +mode=rseq threads=10 sum=4000000000 state=ok aborts=3 cputime=18.031536s per_increment=4.507884ns +mode=rseq threads=11 sum=4400000000 state=ok aborts=1 cputime=20.358866s per_increment=4.627015ns +mode=rseq threads=12 sum=4800000000 state=ok aborts=4 cputime=23.474872s per_increment=4.890598ns +mode=rseq threads=13 sum=5200000000 state=ok aborts=5 cputime=29.528908s per_increment=5.678636ns +mode=rseq threads=14 sum=5600000000 state=ok aborts=8 cputime=30.623857s per_increment=5.468546ns +mode=rseq threads=15 sum=6000000000 state=ok aborts=11 cputime=33.960129s per_increment=5.660021ns +mode=rseq threads=16 sum=6400000000 state=ok aborts=14 cputime=36.712009s per_increment=5.736251ns +mode=rseq threads=17 sum=6800000000 state=ok aborts=18 cputime=38.662291s per_increment=5.685631ns +mode=rseq threads=18 sum=7200000000 state=ok aborts=22 cputime=40.966459s per_increment=5.689786ns +mode=rseq threads=19 sum=7600000000 state=ok aborts=24 cputime=42.702562s per_increment=5.618758ns +mode=rseq threads=20 sum=8000000000 state=ok aborts=17 cputime=45.202435s per_increment=5.650304ns +mode=rseq threads=21 sum=8400000000 state=ok aborts=38 cputime=48.130558s per_increment=5.729828ns +mode=rseq threads=22 sum=8800000000 state=ok aborts=48 cputime=50.154982s per_increment=5.699430ns +mode=rseq threads=23 sum=9200000000 state=ok aborts=61 cputime=53.364385s per_increment=5.800477ns +mode=rseq threads=24 sum=9600000000 state=ok aborts=57 cputime=54.841167s per_increment=5.712622ns +mode=rseq threads=25 sum=10000000000 state=ok aborts=21 cputime=56.911656s per_increment=5.691166ns +mode=rseq threads=26 sum=10400000000 state=ok aborts=39 cputime=59.314805s per_increment=5.703347ns +mode=rseq threads=27 sum=10800000000 state=ok aborts=58 cputime=61.900339s per_increment=5.731513ns +mode=rseq threads=28 sum=11200000000 state=ok aborts=42 cputime=63.666270s per_increment=5.684488ns +mode=rseq threads=29 sum=11600000000 state=ok aborts=56 cputime=66.452641s per_increment=5.728676ns +mode=rseq threads=30 sum=12000000000 state=ok aborts=87 cputime=68.713723s per_increment=5.726144ns +mode=rseq threads=31 sum=12400000000 state=ok aborts=48 cputime=70.797445s per_increment=5.709471ns +mode=rseq threads=32 sum=12800000000 state=ok aborts=69 cputime=73.319152s per_increment=5.728059ns +mode=regular threads=1 sum=400000000 state=ok aborts=0 cputime=4.445797s per_increment=11.114493ns +mode=regular threads=2 sum=800000000 state=ok aborts=0 cputime=10.181069s per_increment=12.726336ns +mode=regular threads=3 sum=1200000000 state=ok aborts=0 cputime=15.207685s per_increment=12.673070ns +mode=regular threads=4 sum=1600000000 state=ok aborts=0 cputime=20.394730s per_increment=12.746707ns +mode=regular threads=5 sum=2000000000 state=ok aborts=0 cputime=25.606271s per_increment=12.803136ns +mode=regular threads=6 sum=2400000000 state=ok aborts=0 cputime=30.550001s per_increment=12.729167ns +mode=regular threads=7 sum=2800000000 state=ok aborts=0 cputime=31.396464s per_increment=11.213023ns +mode=regular threads=8 sum=3200000000 state=ok aborts=0 cputime=40.884241s per_increment=12.776325ns +mode=regular threads=9 sum=3600000000 state=ok aborts=0 cputime=48.727290s per_increment=13.535358ns +mode=regular threads=10 sum=4000000000 state=ok aborts=0 cputime=57.116025s per_increment=14.279006ns +mode=regular threads=11 sum=4400000000 state=ok aborts=0 cputime=65.007191s per_increment=14.774362ns +mode=regular threads=12 sum=4800000000 state=ok aborts=0 cputime=72.886369s per_increment=15.184660ns +mode=regular threads=13 sum=5200000000 state=ok aborts=0 cputime=82.631048s per_increment=15.890586ns +mode=regular threads=14 sum=5600000000 state=ok aborts=0 cputime=83.803839s per_increment=14.964971ns +mode=regular threads=15 sum=6000000000 state=ok aborts=0 cputime=101.826165s per_increment=16.971027ns +mode=regular threads=16 sum=6399999999 state=fail aborts=0 cputime=103.622771s per_increment=16.191058ns +mode=regular threads=17 sum=6799999980 state=fail aborts=0 cputime=117.516558s per_increment=17.281847ns +mode=regular threads=18 sum=7199999984 state=fail aborts=0 cputime=124.609096s per_increment=17.306819ns +mode=regular threads=19 sum=7599999959 state=fail aborts=0 cputime=131.441945s per_increment=17.294993ns +mode=regular threads=20 sum=7999999972 state=fail aborts=0 cputime=127.853660s per_increment=15.981708ns +mode=regular threads=21 sum=8399999947 state=fail aborts=0 cputime=145.638661s per_increment=17.337936ns +mode=regular threads=22 sum=8799999943 state=fail aborts=0 cputime=152.054029s per_increment=17.278867ns +mode=regular threads=23 sum=9199999933 state=fail aborts=0 cputime=159.989756s per_increment=17.390191ns +mode=regular threads=24 sum=9599999946 state=fail aborts=0 cputime=167.602853s per_increment=17.458631ns +mode=regular threads=25 sum=9999999946 state=fail aborts=0 cputime=173.688899s per_increment=17.368890ns +mode=regular threads=26 sum=10399999956 state=fail aborts=0 cputime=180.728688s per_increment=17.377759ns +mode=regular threads=27 sum=10799999959 state=fail aborts=0 cputime=187.942425s per_increment=17.402076ns +mode=regular threads=28 sum=11199999958 state=fail aborts=0 cputime=194.921763s per_increment=17.403729ns +mode=regular threads=29 sum=11599999957 state=fail aborts=0 cputime=201.910554s per_increment=17.406082ns +mode=regular threads=30 sum=11999999966 state=fail aborts=0 cputime=208.667108s per_increment=17.388926ns +mode=regular threads=31 sum=12399999964 state=fail aborts=0 cputime=218.638442s per_increment=17.632132ns +mode=regular threads=32 sum=12799999939 state=fail aborts=0 cputime=222.786872s per_increment=17.405224ns +mode=lock threads=1 sum=400000000 state=ok aborts=0 cputime=9.739219s per_increment=24.348048ns +mode=lock threads=2 sum=800000000 state=ok aborts=0 cputime=19.477206s per_increment=24.346508ns +mode=lock threads=3 sum=1200000000 state=ok aborts=0 cputime=29.639653s per_increment=24.699711ns +mode=lock threads=4 sum=1600000000 state=ok aborts=0 cputime=39.447133s per_increment=24.654458ns +mode=lock threads=5 sum=2000000000 state=ok aborts=0 cputime=49.416199s per_increment=24.708099ns +mode=lock threads=6 sum=2400000000 state=ok aborts=0 cputime=58.912073s per_increment=24.546697ns +mode=lock threads=7 sum=2800000000 state=ok aborts=0 cputime=69.373970s per_increment=24.776418ns +mode=lock threads=8 sum=3200000000 state=ok aborts=0 cputime=80.045758s per_increment=25.014299ns +mode=lock threads=9 sum=3600000000 state=ok aborts=0 cputime=95.506874s per_increment=26.529687ns +mode=lock threads=10 sum=4000000000 state=ok aborts=0 cputime=105.647129s per_increment=26.411782ns +mode=lock threads=11 sum=4400000000 state=ok aborts=0 cputime=119.966161s per_increment=27.265037ns +mode=lock threads=12 sum=4800000000 state=ok aborts=0 cputime=144.790100s per_increment=30.164604ns +mode=lock threads=13 sum=5200000000 state=ok aborts=0 cputime=169.275312s per_increment=32.552945ns +mode=lock threads=14 sum=5600000000 state=ok aborts=0 cputime=184.008284s per_increment=32.858622ns +mode=lock threads=15 sum=6000000000 state=ok aborts=0 cputime=206.639565s per_increment=34.439927ns +mode=lock threads=16 sum=6400000000 state=ok aborts=0 cputime=220.186430s per_increment=34.404130ns +mode=lock threads=17 sum=6800000000 state=ok aborts=0 cputime=243.215361s per_increment=35.766965ns +mode=lock threads=18 sum=7200000000 state=ok aborts=0 cputime=256.791891s per_increment=35.665540ns +mode=lock threads=19 sum=7600000000 state=ok aborts=0 cputime=270.841824s per_increment=35.637082ns +mode=lock threads=20 sum=8000000000 state=ok aborts=0 cputime=286.147054s per_increment=35.768382ns +mode=lock threads=21 sum=8400000000 state=ok aborts=0 cputime=303.063539s per_increment=36.078993ns +mode=lock threads=22 sum=8800000000 state=ok aborts=0 cputime=334.728624s per_increment=38.037344ns +mode=lock threads=23 sum=9200000000 state=ok aborts=0 cputime=365.422783s per_increment=39.719868ns +mode=lock threads=24 sum=9600000000 state=ok aborts=0 cputime=383.564521s per_increment=39.954638ns +mode=lock threads=25 sum=10000000000 state=ok aborts=0 cputime=400.088520s per_increment=40.008852ns +mode=lock threads=26 sum=10400000000 state=ok aborts=0 cputime=413.845634s per_increment=39.792849ns +mode=lock threads=27 sum=10800000000 state=ok aborts=0 cputime=432.694245s per_increment=40.064282ns +mode=lock threads=28 sum=11200000000 state=ok aborts=0 cputime=448.437452s per_increment=40.039058ns +mode=lock threads=29 sum=11600000000 state=ok aborts=0 cputime=479.398819s per_increment=41.327484ns +mode=lock threads=30 sum=12000000000 state=ok aborts=0 cputime=485.327195s per_increment=40.443933ns +mode=lock threads=31 sum=12400000000 state=ok aborts=0 cputime=498.999020s per_increment=40.241856ns +mode=lock threads=32 sum=12800000000 state=ok aborts=0 cputime=518.804851s per_increment=40.531629ns +mode=getcpu-atomic threads=1 sum=400000000 state=ok aborts=0 cputime=4.590758s per_increment=11.476895ns +mode=getcpu-atomic threads=2 sum=800000000 state=ok aborts=0 cputime=10.373209s per_increment=12.966511ns +mode=getcpu-atomic threads=3 sum=1200000000 state=ok aborts=0 cputime=15.454717s per_increment=12.878931ns +mode=getcpu-atomic threads=4 sum=1600000000 state=ok aborts=0 cputime=18.276674s per_increment=11.422921ns +mode=getcpu-atomic threads=5 sum=2000000000 state=ok aborts=0 cputime=25.616891s per_increment=12.808445ns +mode=getcpu-atomic threads=6 sum=2400000000 state=ok aborts=0 cputime=30.558029s per_increment=12.732512ns +mode=getcpu-atomic threads=7 sum=2800000000 state=ok aborts=0 cputime=35.695183s per_increment=12.748280ns +mode=getcpu-atomic threads=8 sum=3200000000 state=ok aborts=0 cputime=41.202231s per_increment=12.875697ns +mode=getcpu-atomic threads=9 sum=3600000000 state=ok aborts=0 cputime=48.857853s per_increment=13.571626ns +mode=getcpu-atomic threads=10 sum=4000000000 state=ok aborts=0 cputime=57.148052s per_increment=14.287013ns +mode=getcpu-atomic threads=11 sum=4400000000 state=ok aborts=0 cputime=65.426838s per_increment=14.869736ns +mode=getcpu-atomic threads=12 sum=4800000000 state=ok aborts=0 cputime=74.198416s per_increment=15.458003ns +mode=getcpu-atomic threads=13 sum=5200000000 state=ok aborts=0 cputime=88.584374s per_increment=17.035457ns +mode=getcpu-atomic threads=14 sum=5600000000 state=ok aborts=0 cputime=97.566401s per_increment=17.422572ns +mode=getcpu-atomic threads=15 sum=6000000000 state=ok aborts=0 cputime=109.718405s per_increment=18.286401ns +mode=getcpu-atomic threads=16 sum=6400000000 state=ok aborts=0 cputime=122.916752s per_increment=19.205742ns +mode=getcpu-atomic threads=17 sum=6800000000 state=ok aborts=0 cputime=134.455988s per_increment=19.772939ns +mode=getcpu-atomic threads=18 sum=7200000000 state=ok aborts=0 cputime=140.480629s per_increment=19.511198ns +mode=getcpu-atomic threads=19 sum=7600000000 state=ok aborts=0 cputime=146.157256s per_increment=19.231218ns +mode=getcpu-atomic threads=20 sum=8000000000 state=ok aborts=0 cputime=155.691843s per_increment=19.461480ns +mode=getcpu-atomic threads=21 sum=8400000000 state=ok aborts=0 cputime=163.030484s per_increment=19.408391ns +mode=getcpu-atomic threads=22 sum=8800000000 state=ok aborts=0 cputime=170.584687s per_increment=19.384623ns +mode=getcpu-atomic threads=23 sum=9200000000 state=ok aborts=0 cputime=176.381227s per_increment=19.171873ns +mode=getcpu-atomic threads=24 sum=9600000000 state=ok aborts=0 cputime=185.423582s per_increment=19.314956ns +mode=getcpu-atomic threads=25 sum=10000000000 state=ok aborts=0 cputime=192.877967s per_increment=19.287797ns +mode=getcpu-atomic threads=26 sum=10400000000 state=ok aborts=0 cputime=199.917576s per_increment=19.222844ns +mode=getcpu-atomic threads=27 sum=10800000000 state=ok aborts=0 cputime=207.822609s per_increment=19.242834ns +mode=getcpu-atomic threads=28 sum=11200000000 state=ok aborts=0 cputime=216.261564s per_increment=19.309068ns +mode=getcpu-atomic threads=29 sum=11600000000 state=ok aborts=0 cputime=213.773868s per_increment=18.428782ns +mode=getcpu-atomic threads=30 sum=12000000000 state=ok aborts=0 cputime=221.522895s per_increment=18.460241ns +mode=getcpu-atomic threads=31 sum=12400000000 state=ok aborts=0 cputime=240.809263s per_increment=19.420102ns +mode=getcpu-atomic threads=32 sum=12800000000 state=ok aborts=0 cputime=251.500147s per_increment=19.648449ns diff --git a/23-rseq/plot.Ryzen7_PRO_5850U.png b/23-rseq/plot.Ryzen7_PRO_5850U.png new file mode 100644 index 0000000000000000000000000000000000000000..3314476504cef82c5c861ef8a39bd5f0d2c3ed5a GIT binary patch literal 71988 zcmeFZhgVeTw=G(zh$2d>AO?a6NDd8>B`6{kNRTMGQ31(0N3|6jl~5!}0#Zl@C1+Gr zBxjIN1c^nKoC@Ch=-)Z_o$>B_f502JN88d>n;pKe)?9PWwf|99RX9m`krIQ!oWv^L z(!gL2PoqD_j>0D@DP806m$-}kJr_-Ta~F40Co_zSsf&Y+y^D?I{mX7<PR^G0c0zo@ ze1bfeAGx?VI7{&J+y3_feD+Qj{9GbT@^F&l4vKot7!0*3`a_m3lV*t_!(gztZfJSL z&k@``w9NMQetVk>9w(mu11CFugqU>fP{-HwMy_{!Gc#&OD*htBF*icV6%<r{{{a~( zDBZf2mh<MZV^5A<k;h}TFL$wqio}T5$fycp6%QTfw7BY7lWUzTZrife6o162btQi4 zCsnP$5x5ZyhR3X={NM+StSklk;S>8GZE!Of%o5oV7xXvA2Sdhi@B`C-9YXPc4*5Uh z@_!ZstbzX@ZIUDRj4+u|bz|)&{-o5UC5Jv6k*r1(3H~}=D-aPC_5SD2dwuhTgzZCz zyiTt4n)q|_@wLndqR6oMqRM+C)3o-vPBhu+HtTr!ZR{k!>8)G0GK|NZ$_oGbe8|YH z&&)|8AySW#>-f|MuaWE9GA*WSpFFb}#X|N%obUN%WMl-re7RzN<X%XCaqYOPb;yes z9GbG!$B*B=b?eCf<`(C{@vHvvwKI=b?nyZ?l9;AG{Bj^>EsoqgjPBxp7pNRgN(4=~ zRZKXQvBvan9654?Lr6%|u4Ld>gM&!+^+44$%~OFXN+HM5L$Dl@p!}0cj^Y%3+wZZu z6TB~jgL{Umyf4UpQPcB1mGbT#4Ff}SD>WSIaPf!>4UVp5wmT~=H1rP`DbMSS31W^n zO-)Vn2g<m<FzLCTI$5jk<yDRg4`;*v`RAY7ZZ`0XpN9Wv8-@F+8m&}KkQka^3{mLo z>&w*6I!8uO)AKy_^yyPJY<+!wrfwc1fdGRaa3-{PB+|XvQ&I87x5%XO`kk1DoeSu3 z)oI8W<Q)<OxGu_QqBF;w{$F7`3AZ{wpi3>a8rp3J-(i-{{%=CL!t2fwdlQ2HKFMo3 zInbp=d@9|KwC%M)aCcoE$DX_-a%XgO)M}`*ta@iba?u)x!*vx|>ynd`b6&lA`$1i> zwyJ8dJE=aLUHIXTKb}2%hCU8wSL1UUoSU<GeL?8<$&1(2A3aJhcb$FDrW~d9%>bp* z5sG8e>0#zA@fq;>Oj@E}2WewC&wH^-_bCOnP6(q^q1(K^k>A!t`9zdK#M`&IGW)xl zhmTUVJ)<*Dhn1<VnWoxZXxX_s=-leLA?mgIi0$gtnMVGat|#Ot3Ln;=$<Zr#-}YzV z$xH7i8l$b(=lb+({Hl&pGiGz=mfjpFw#}L;K~wmN;&j_x7T39-ch#h~@cP9z8Fh@_ zcRqjqoM}*!yHL5JT4d9wp(aBr45k-<w>H~5n^Q8RVQ3gX<g=oZ;6CJe@!F%%?;%Wi z@cfNqzo)<cb2e7QHrCj0%Z!bcHQje-JyzWL{h(dRhKHovTw5KJe|D?%&Ydc+HI0?Y z=CvOzA=AHJ^7pI~J9&3m(G+b4VX{tOvfGm7C>9HAN7WM~T)V1$y%+Ph*JhP*u!@R2 zSIk`(hpO7DD!td|GS0HAJ{qp}m2jJTlV4EKUFGe*xZPi5ou!?nGqhD?-P<5Q^{uXs zE|Z0uTiJD{D`RN`W%p0}f520VC$!vL5sAxb%dZqz`0erV{Ox21KJ0T-kCMhXX@-zG zmcZI%Ve6hBqYgCsbmz{w=`5l!AiH)`mZBv|B~D~}cct|N`5G;^4#)NDhA_=-;#2V~ zX`LC7+`5@}Q*Pt%uskehdvazv(?VD?oTplxDhNudsycbbRXpDO=y84MdXo-Y2>5I| z%o8efH-`Od{Ps!izNEEYugMsTYfj^eee-UxsEF$W_Px{XDMgRkuh<Tj-jxeH6-juz zKTFHRlow}Ttta=Ks-4cnCpkgV-D+*7+w1o?I$`$(!xO^?h{fc_2?>Xz=mrPNoP}Yn zp!tTu>6tGX&Sg*Z>8NN{=C8t|u^jpIn39^hH~nr(1P-V1NTxGQt=G9#Dh(co*ebKH zh2{eW`Q&+lq|D(n=n<H1$tt|o9IUEypYPXxsQ1~rac7m7lIXXc@zwV^+<7gvOjjV2 z-?Wj4*Xs1m0kH(t*Gw|TV|5|?-tFl3Go{K)58~Fy;bQ<Z;h#;+A&G+@qyqv@p&tUM zFDLzvL%4K)t!Q-MfAzAd2=*T4cye%9()~ULjbDGiW0tbSl?^U@c+dB#&XMT=yU}K~ zo?j7nd=jx6=ko1kM}N$uPYwGr{N~>Qr$$~qKgEy<_cNQ7SDjx@1ACL-Ymh%@N3nl3 zbu0AP)Taw=-xxx#J@`%~FE6iWbUS0dzergmP6Z}53pb_`BPcIq-jt4eK!yph`V`68 zT#c0|&RSZo9l*aD)6qJzNq$HoKq%<dtJN%i0eF^YhA|!NqRNuzl-<(Gnxed$x1Ot| zW=P>>qVDN1jx<785Xj>j%<QGJ<#r>?zAPqoKQrK-|7mGyS-v$HM|<&N=9@R?tF~vd zW(G>~7`>*Mu^Mh}#ou3DNP!vVxOPp8Q104^V^e0uDo63Oe=x0uiM$fmd^N85z2n$- zEG|Dk|C)Kz`ETF8adL1d@){I(K^UpbE9kS?hDFx>@qt2jrnWLV$@7z!DqUY+5`_@$ z%B3}Homch#s!DA9I;km6R1H?!$9M1EX{D($7<o=a_J4d3=<eJ3UWE+{YcQ(WToZOB z8x{gP?Dy=8A~xwsNta;*Vqx2_RP*IckUG_5v|%IA(9>t1;IC9SD6#9F>CWm-Ri;Dh zJ%~FOVnASJ-X#f_ba=4wgbk1DXjyl^lRp8$Hv<-Atbpm47}c{FO!|UTK3>f}tk~cF zxpPS4T+d$9UE;1mv#rK{gmkI?wq5pk!-rzyPj#^CP3hg@j5)93YpNf`8S9m5pQ^~| z2$q74#%oe-=self{^i*Th<SoJMio63em_5$>R0=enYX^pf#7GoH1fIpR}goh?SRPI zbh}($)q3oeD_08r_x<LFYfM6}FTY^5{1M6=E9G5m>`!vF9jer`uOStG`SOL5!FzSO z-D_(iy2xwIsyj<p?J&iuh{g%7-W_qzW&G`6`V9Ecy8WGe{=j_sWUTf0Zx2?i3~4o- zmAJE5)4NC7S^Gw3q9|DLPVMb=J^q^A{GL3MJP7!PaH6ha+h?uyLao<RU^i=6_vUKL z$_DIhwfb8%z4<d%&@3p5*Wf*aq}wzxEs^hIH45?k)tm3$dd+Z>VA5lSt)pgo^GtF# zs4$paL)EC&dftv=a-7s<nfNIqXXz!^j9!+lfxK9*s!oM%>jbumL)9;C{BqELZptAg zsc@msj{M=&4?F%X$plF+;mF4McJ31;4HN6rL)Fc~uJxy?K6+Fv)Zm{jOm}M$`@~Zv z>^^id$K|*@mgePE5wd9M%GN9Bs`2;7c0eMay>y8ii<Xo0-sXe(fs)pWxiAIB_Dau{ zYrfkqD)C}>!@|Py`)q=OgVz__VH0kzcB&OQjNUZzBBtW-=FPFR;(KT){{H(2wxcOV zsQZJdoG%P~`QG-dvbMitZpA|R%@tUxnvjN82kdJyj4IqDHU^#9u&_WmwN_wIvlW<p zwM2(JQdo&F>RR{jzk7ct=G{MM*}Y1<$HNp{;B?A3MxUh{q?N?|u6Ob;y9zASupJOj zjeiMG!Cpm!j&dZyD{D)|0~Wn2tlh-59dZoDkB{A8dsWABz=ty_s>?i7E6uZ=Y;;?O zjr<5Uuvn=gN-3~Jad9JhJ2=uynn(NvdwSpI$xoJMrGr+YcBU~V8{dD;dp-EQerBq5 zyu^ZESMe{R-}U{?G3qiyKG*sF?g}13L5&>!A{;BMVI7zvY3b^=S=jclR};=`RM-(D z#OY715j&>}>mZR<xR<-l_gi&mMvB-E8D{oJ!&0ds&D#%cL3&pZ9rh`3oBNrZ_SQ>@ zTQ|3Bv^KDccM3A^-3qt)AcC%yRVEB8zx|JvP8b2w_H5p>DA(z>&yoqf%Y<s*otur2 zvtLTJOg6_wMn+DM1fksSauDz9u#ij58IBp<O)N;ABq<F^^A{#wzd~AMwp^jN{O#P) zv(+KI_~tWXdh)U9CGY2^iW*_(HYyQNJQXNs-IE<wJIYbmoI&V5L3!$w^la?1)yIMP zA&F(0xxJxO<>;F%AE%y8WaXACIXXIeEmm#Nz^V$VOMxfll$5OKs%v?0{&tv|YFfdM z^)$Z59gPvKi7i7&?!sek*nNhpwp%(*N3fzT624;m9EHIyB#Mr0HGEl0s&7_m34at{ z;$<U&J6vY=N=XvTNn?di5>DCDM<*3_U3;eRcVh8N@3)n9^QwU=d?m>{{FceyJ5lp- zZGWYWHC>uONHShE&2O8?4j~vTXb@gvJMdoGcRT%m;DaE7!e4(S4cfUUo53E4t{c0n zp@A!T>FubKYnXBS^+hZ$m_hP=jzP&x<w{F9Yl8PenS{fLY;vffKqv(TMV9=_bI;b@ z$A6qgF=(-JCAegW$!{}Ru?k1oO@I1yG88eSrCRD4LPd%DRuC<>%jh$@sC)i;2<`#; z(=U7!wop12OgR8BWl6{`dUbdJKfKQ_eyG`D=-n%+IUA9TvDX@7Z##51V8vqhz3=re zCtO=P$$5RdX$O;e`jCWbqj>=*tAMQd<5SO$9F6}o2}RtYdzD5kXMe59?ne!g{fa+T z!8kpfuVF<6kOP2aW_yZ47EBSq{<m*ECocf@ftmvF+w5eVeNQN}+%?bThpr2QdV$nT zJ-@!a>;_~ANJLg8_F6ma%|ZZ22-z?*Gh21w|FNrD(;>JG*m?n)LTPP&sLB9pif6g} z{_A}f+K{-q^Gr<CuK)gfrYC2X;diC|aJ7WXbSUIFy#MYPQ>>`{TZH-LZ{3R6^n<#9 zzB@xxVX=BA_x}C+g%+)huNfqZ+e83vX*xK3fCZig2{ThCM;~&17htuuCZX1J&y`6) zo#F4*5_4T=dk`4P{?J+h2YIcwD+og#CO>*K)1vh)y0D0CKOVwS)t6uZJ3enD6}ERz z6?m7ksF#njWSG^Tyl6o~%YHKE!72I;l819rSxLFFZq?PIvhpttM|~JlN>jd!Kl@z? z5SDt?J|pb-?{C2i#$m>u6SRPrjdYDYQ~9b^HP+_(G-27m9Tc&~JpF$1g5a%`+pjgU zbaJl2`hiay27V2tC{Pms^_7o4zvQw|HU*=J#o;qF(`K0VHv^wjGv%(dNUA}2NK=Je zH2ssma_I>QhDHvb$@^>kYbKjw#%xFJ2<1gXUbDQUo#B0*x?qMi$oQTLFZll<*!9l! z6%?5_Ujz)QN-eYd!5BjK%>gJ&r`LK-dL<VtQ(%1>`4(+4^&Y0ao&>qxvMc?r)o^tc z8fJ0l$#k>EAd=H~M%vpBfU2vI0kU9t(fuk_ngiz55?Y`qHdf$=s|D>--AI8NyJi!^ zc?3RJCT2nctGs)tV6al+sj%u&gN8et`+H<Ee+j8p$)4-hhj?~{g(VWOFP>HuYGg_G z1uaMwRiAYP^F~!wRJ3p1`f6#=X3|_0sqe@;k;mVEwWO}C76!XA|5w6wPYr~!$Lqtn zbF|&-acq!P6VXOZPfu48zb(%>FP_cAMzTq^G31M$Y)Qx>JA9Ppq7Y{9sWYnNvnX1| z^p;Cg`4^)^e4;M3$b`0BQvY37Umt}t4)ycU7QC);OO6<uq0zb9xVbw+e^r{lk3n9c zC>oE)PEPeNe&phxb?L+OB)yd6Y9fAdH*>XbMcHf`3JcxdTqAg_cNU4hI=D*SMu62E z>>&e{sy?+AlfEq!t?BWwa>yQQ?5CwhMaP*OqaWaGu2iyeNbcG_L&Vj+tp5Hb$@{ij zV1(G`c)s%;;a6iCcce^JjF!ZYxM*EMfTY-_@7<?QvS<}RAsGX^%Gy;AuCv!V7FEq? z8eD4UthoP%uc$hIIb<L`&ZU*Q;|Y7JaA&HFZd}M}ZN~)vr2W+F4N?9GcGXaTZv7_w z^TuyYoE>>*)58E4pObK3$cBPUi}>fx`n<vTIV(7McW@m`bD7EZ+Ss7O9#cm1r%Xvd z^*7@846|ymCd2FrccT2>UacFo&6htJ?%UVc(Lv`UH2wBE&pZj+U(w-HOrdCP4*x0% z`V^So3;MT^@L&vCZ9d#l9@6CCN7&IAxY5&f#=q>EPwHw7MQZc#k810T+zyRC){M1o zjmAd&T)4(x>B4KC*E^DjQ>(I^<hHno)4^v%M4H+ck57q_AJE3Kcj2Tpfp`<?2pczI zzk8}%ufBoiBL?TLO%sd8%^60ac;$}Cyyiew`R`cQvF5t6vQ}3EY_e<fPHr?l`*4|A zD%L-@o_fq%S6T1dD-nM?YtGy(nqC!&561dy#TQx#eUpC2i5&lyOi2PE3fpe@Lbvx9 zTJk(~t@f$2vIP5VG#ZTiSUn#`8!-w+RCJ`SvcLx`A0ONu?IlkPXBwRSt~^zYn<<WX zcQNks?w!MBM%QlY@9Wu}H(_HKd=xBT5-Ox+<?;B!_px&9$%;31%>%8OB`Xz0Q}Y{L zW68H!4vMrN7Uw$#6`F4JJq$lu#p`<B##MXE>1j^I#yt{$&g)#NeU;!!>$ZwPK87Lv zO~*$sU3@|!9C>66>Bf)YW(oxi2I35Do=={oNDbbPh`P>iyKhWM6|S>a@rXC<^|C?T zSh>>L05<sk6`jvF=9a&Be11Ge*^=^~YgcDxE+*QZ?{I&BPfV+)nzF|-*r%70qIDl9 z%@TiqxaOXFy^1lc)=_EJeQe>G$y7sVu#IT#_NZ;gXyueGPEuKE=%Ms-w%@SNc)hgg zsikwBcY`W8L?hfIuiRJGEvYlw4RG*WVRY}4rqD7t;=;5B48ZK~I;P&I)Y9p_#@;Hp zhv%OoI>de0R~JH_W{DkPb<uy{z;>XxsQ4Z%SAX?x(~>J%lcWMQ(se4iSW%sAqLFiT z_b^^nG=a3oE%!NT)@g!YMzhWJsB-&!b6v)cWHozDs#IRLR9+;(Ty(LHu~#K%-ezIS zCVpWmD9V}UFHkOMP*qX2vrsVuRa5dr_*In-?!3x(fZjB-bn|pvTnf*eIRoUS`Q6m& z6v%Uk>hiHO!C;bJok<j}wQ$5;jhSuLG5#s#y6<V)yCAmXs~aW#ph;H$!@{p}<;2%d z5(7;YSC~Ze!dlJ_l=&3tKKBcW+<m+AigSmK$1PB+B18P9Pb&pJYdAvR&??vYNNn$$ z3L}j%Mhm8v$AU@Zgt~a(1reGY@?MmZ0<=9e@!WK}sMomjtlITt>pWqF)_9<bAYkU{ z6_^tjDi(_~A40htq#48eojiA|sDgm&-&~g}l(JhXHX3a=zo!}>y5Dz1K6Zm`c*&%G z^jd|9WIT>wX?)n${aiuioB4}t0vlz-tS?5DzQ0$}DbxJ6KFivr--l@vy8rbUiL~h7 zn;LDb&yln^Sf+{CPP1sENuzT#G<ZN`kG=)bvK?K`&gL;QGxMC%)YN3d@<l7>J|R4D zioWoi8Q7r^cK=&SwE~r`<k35^LD{Xn!`6C0kV-LzP}PPuP6+0muGOpGNswA|r~6NQ z=hh1eG;^<*P>jD^GQivVE#;xf_7i%UJ5dz_Rm+9+mj@QKCtnb9saC`#jYM?I$0az; z(x!5iqjNram8nkJh4Ya=Z~VAQelnsd>{HxoSlWW8Ag%;^_jQw9vyLK3xwxk1$9k`R z-<~1Mz@CYja{`awKz770d!lPG<=@WkiytS~2-15(#_csP*Uk9hOwYb7?sp~D8HZ^7 z_~=8vAH2nQsGK?mir1c8qbw*#>Ga%3K9ONHNZV^Cc=JqZs@(uc{E|-e-}3|xr~1b- z`H6EJtgQI9{D1(Ayn@0k(0>grEqu$dLawQKYhzi0b8cp?-XDIHCuwUwT=9tLBaL=0 zjM+?#k8?;$8UWQT;kR4*J(wX2U=rYR11Yc7wwL_X>5%2UOH9g~Quo&K{E5*fes=*3 z^OcSq0@h9C?%li3*4ePb{`*yS74sqh{;*J~JxJ{`(atWXzXGSZaN&Y}xl4wVlM_!y zvV>l#LvlA;QoLAT_u;9J_xq?yz6fq`UwII6MQEMt>W8;qqN*?NbkJ39l)Giea@A#K z(7HDbTI}Sq_PMiRaZYoOB~H_1b&Wh%%IcQQD7whSTl!cq-c_kG&@GE(^5a8ak+7F~ znCowfYFzWuBjr1zJAo9XLNt-pnp5$E$<7`7>RQ`Olx_^%%iHwcybLESxhh6=62c88 zK8imS9qiXjOI+_>;EWrMA~;M*PkBtuKQ|DW$Y~5CgjX1om$dpDh1dR*UmrSfE@?lt zC~UHYx7WfTl558OWB1;$*;m7?9Qh&tOW*1Yxd(cNi`bg|rK39()znJLkHkL-SYTOS zAY@T6`KX^b$D<D5PHC{kt-+t_xhajFPTPYJsrO+l3SMY+)6&tUHS$&5Ieq%{v*PBa zrY>OoY0sV0Nk96p=&`i4)XAv)nK_?72ACXujm7q@#^`F+oshgAog0qiZ=ITg&iwI5 z5~P2C%a4Eq>96*!sNUPQM*lna^JDq%@0W@k$8L)!r~>*_eR}j{2T)V1fa|#~UzP=? z>Mk(*z@<>mBd)r9>aF)R=gB)pzH8l)8s6F*YvS3gF)=Yv>*+wrs<yN8y3@JLP#<O% z;@Y^2L=GQ?#p44E#RgN!7MJp~=hjYsG+QmN+M<H;(2ehoeK^s2H-{7(3eozg%DWPU z@*?g!VJau~^324Z;6MFQZz)Y>p}63a?&<50Y~~rFexYULW}{79b?8`h%<>QBioxah zf!iW+MiTidWD7j<W^)=^-*a!eo_}mA*dnEtIiU2tY^q+Yr0A8i0oJrVfB&zcN$zSh zpXAoB)pKUzep@#ej8nQR%?|hN>suEG?-%JvRBDS{cot&nthm<y<LrRm?KyJ6`>oM4 z-?P@2byp1Byrr%@=xekpUnLi|8pye+?=s(L9A!(qe<4^_e6X)va96bE5ohk^@Ha9X z{#=?~Z{<(dJ?^|4l+{mR+IzC~QpU$0A}BUwW>;dM9L?7aJaGoleTsqx9S`o`uN+`y zXQ#8&=H~zw@WzcB@==lrEm!tK%LsN*bD_#>zRakCO787kcp2d<{Z`}4&N1owF`RGx zE%+~=-@WZoZA+puEQI`xQniM9j^;YkJqrErmn{qW3Ln&+@?B{bMbsIPzRXxeF#Y=V z>zYLi{Yl2__YhbtcOkyZ&|Il`4B5yx%(n`7D6ie$b!$)nWSP|XnPq<K1@Ws@vPQev zt^`U++8yV>{4wVP-7EQaVqJhNr{fdPzK)FEf2NFE=N%;2LKGy5H6=dWkSM(?@uA&E zwa;MJ?{F=C+qT&oo3_VhOKPb!?w`kPOJ6k@{`gEpCMz#K{3^DliD!?opDyIutjds$ z@lL{ST*PjL%fmREKK6$@D;C7o#1o5oI(V(T*E9oq!KwT|!pe1Lwn9A#%l0PN(<di3 zf1ebOs?sWq`f*#M_5}VYo#M&zAAlPusqQAf{7mWh-uL^PSw7D@PGaL63-s~LQ(+bU z1`EQywE4qaS}Fc?jsLVZZ~W2bduxA>R0PuD%|@sq-=q2}M0z_N2JZdz^dnxwQuPGM zI2J2&3kz;ePArgj_a|s4m7+<{o(FNw&PG)~lvawB39sA79g=JG(n3W)85tQM@Hlrp zMA>I*bED62g+Ttm3~UzeYyos}T^hM@zyg3`5;F^6K%ZOSXRNzldkx-<U-`GLqUBEN z###K+xTe`JFVFTV2H9CW|2@4v>7sSE-cD3*thF=fRF_#nw9KohNydIx1Eq^^_RHgK z0Q|oDOqxE$DJ0*&@?fucR$7qBQ)45h^+uS+)0NccMox#f$TjX&3H2JrY_#&(UEBQC z!W+OPC%bVPNo`Q5B%38CCueG=1-oy_QA^>Ww$C(cjI!#>Pra%dpAJ$Z!6iI|kl1n4 z^Jy||$@M&IcZa1I`>^&5O?Je2A<+VKvPakw2PmZVKVOcfn`E_|t^6_|{sh*;@>36z zn>n|qgVyhzoTfI9;*GXb$0BBmM3~6S1XEcCnm+hFD!4FGGH#S&6V6x3A`{wcXXm%2 zt`q6GKi5FDk7=PKBZRyHX%7<3MQNW>RN+CjYx(&JIfy5Dl}{z)#xGQ;WmsAU9i!$q z+L#75C|I^W!PYp$&+!69p!4&1&$#<QyWbWU7uPSciY$4#1A(~Ebylay&UP=YAJi{i z{lfI0pI4Tz0VxM^q7Lkm2?sG0FyCrRL4j+1vW5RT(>bG3?Mgq%4Am1WZpNwFG07j_ z)#euH*v<Mcq&i{4n*!c$h^pU{%1EK67BGkzW%{JYoV4=+WJsFWl0KV@qIU7$UtiL7 zmH%mDuIrpO;3KUms}}q4`HE%*Ui?tjIMX%|$1^ioc|D-@WgtEfCg`H1TQ<mkBMjs7 zAL|%3p%fDa{R;5~lvGrRDn%+IsG43INS*rn_0}4Qu&^4v=8Jl{s{DXqzTJ@6!M@)b zU);x5%VOl=y|rJn(cAWeR6wSMd1<%&!YTvLXGwZ15Y4WVi4#QJ$qBwvS;SzJyD#$9 z3S0weYw_~=-@kwBfB5UMA8Ab&cu#FYg?lf^@i_qj?}l}Yth$w6(((5o#S!QOZ7d0N zrRyciv2HP*Ov@j(JH~dhcK5v#f3f%<CR_3^OiKB6&x1kp^U%?$c;{g0&5@^_cEf3E zOrQ$vzS_azdvXkBM?OED;605An0fF$a&p8X_%gBB(_D8k_Im00UZ=z9m!S@(_n*gs zysNahQPwdOIl1b(s9Y2`k(ZV6IHKk;M(d9QVM}T1ryViNyNUSnxw7ribA;!zlo*TG z)=0N@Fc;SYYP5OBPjvc<k^VA49fPq5L{({kkik;KYOg-$CcWhn)ymKaCV)~NS(QE! zZMQYHi44x$vF`YEG3!~f0IP#KHUP)a$L#A{BkudVR%3Ufr{^%H`}{#I`pwx)F>#2? zEDihGOOf=pu>1-pz2`uD;}~)eQKAr4WOhyU-&JsOID8qCe&;|mr&*h|v7Eny6<P6{ zI{l}P?h#BkBN+onAaLjP<^`6Z7wJSF!pMHZ?ip<l*G{?&f7Dp<L)R2Oa&XP9d^N<l z7!oxKsv&8h69^wAW1yYPakVGTn+)^05e90ib4q%uw9SehT3G1zeQan<v?9l7IX`D6 z+2dV2UeYkK80}O)biZdri|INKqkX=jIoCgL$2}}`Z#~a`c6fG=w<2fRZ*Y5kJ_~9g zH5P?nq=rR?h9(XB?Wll!u72;{8&qN#*p<lxiMU>U6%+_mmE4q*qdj{zMc2ev8$|1F zh&tnh@8$(W&;+?$veVN!n&14H@>2qoY`Yqgo3L%a7O<p<GzVQk<53()RaR|DH@x<? zra-^Q+T7d>+CC2qOJWg|;;e<TNT4`};m@*zho+Qs{8dO*t6t7+bV2+Ar2{z#C*lvO zEro9Jl_>8UZ`hX&@)3si+*AexR2J<#blr<;l;!%V?v`^`Y1N%PbqusMZp|E|npABJ zWr4Uq3tS^on2}mvwcNnn@Z(2YN{DpkY+j8qY=J1&*Yx5VjnVwQP+w`)`1wkaRy*}8 z+;SvbXSCjrodcn%3n?Vq#5AP&>tx?c27yEwyc$R_sTzPlqzI@GVJ)g!vDq;)jJoN1 zUi9Roo5kXOVOMEj(Hchf<Sp4cOSAEZ={s`^W`2Z<OGDl8hu3lMjt-$viMb_Ikf8u5 z>DX(QI94KvP(52yiFrs)>D`}_*}n^hf?_)Y5;mLT#Wf4en>8RCvSA^P>)P1Z!~}bC zfvOH>6z{1x5!*}<+^2y{<fUnolapK9+gaom5cptNcNmj&^Wl5NL;_b?0e+Jk&q#gG z=rpEF5z$jd<u1Qfp|HID&p-cAo;bmsPk@*m5f;WA-I$tdRN)n^aQimcPjn`7$3VmB z0mUs3!U;DEiyZh;<n<>8O6=9dC@`BxYeOdo`58!ZL9fD(szj=GJ~)L@_dGT&mNOFY z7s+ERL`hj$)5BxavZ8dVezs?!P;z3q)J1ov!o_=MpwVYApYr6%HC6BHj7F~A+DOiP zX+sCg4(I`_Mws1dnwuzuW%;Nw!`w60o4{(W0Y`7WJYGKoI?b2b+O-a4eoK&N*?K53 z0jYjoy4&;C^$QV4TSISJ8K8%~cf=(giLWn&Zi$nLQ#w9JygO-jz{|b1;$pky-wQ;K z5cdGFwAu`Bi6KpSZRM#%|7z*|U1wp-j$348^8O(0+VjC+gMN<%=>&)G>e7O{Q}Nwi z{cY!txL}x>p)L4`Q>towb{eTgj8a~YHkU?+%)sK2{-WdvM1g^l+p+t9i~IIDYt-_k z4KrfYGp1|)rVOY1zVfAvmC*T{@%8kzcR$+++?_8@v$(8I-#rl0z-WS(+1r$ZYNgG# zgmATFAO}2D1h3hgi&9>NXU?82vh2KyIDHUFpXqn=myMsP0#O{TX1~2H3zUPvT*by% z0&8s>mYA^ro{ue|Tw6_QEdpE@Mzr=9Fah~k87^NDt>sdD&*4-%_k(fsK+z;*l#`}q zW&D{-$Y@5s{{06JihQ=501qP@4xo|*L~+aCzU}2rRteh-O-XL$vJ#RVXZi}#^h@lZ zz_Rk(5CV|`q@4`+#i4TI`?yswxp1)J$3M@)=rJ03&le$@x+}*(ltJ7HuWk)i2kFma zVb$fjN_{K|om%DFDjBcb)yObf*UN#@r&`o<`Xgs<VIFEE&irhELEGS%QSwpo@F<nu zo@QCxMb;y~T@Qk5uhEd%$B!RlW&Hh;dl_W>1|<o2Z1~OIbP95E%k5QSthBFJa_{y1 z-IXCCZXx*;MmBQm_esmy>-DEujbt=4X)RsBl?#5Lr=;aZ{%tTMb%WC>6_20pvq+3& zMa9@T-J=*;wtiB|s_z2tjs5j^G@b4JUKot=5tpt<{~sK%)~l~mY!z}dLf_+MJnwBU z3e-C&uk|Zg?x^j1!EIbgO8GuBSXKaK%LCU7fNmHo<dow7Qr)=7=IfYtp+Rm&u|5u8 z{FH~68l!%Y!;;Dyti{#hFVE{=oj2s_JB$Y|^T5)9@i~O@O_Ic{&~1rgW&LPLflT&5 zhf^5opn+`2uv!*+>`gr@*Mnuhh+{T6P(qe<E#5Tg_$@VA$fE9Kp^OdB&N+@z=lS=m zB8$|*8C&P_+SeVLflUkZ|C~KW#Ed*GJ$i5vCo`o2d%?66NyXmk2dZ@RV!0#NF`t}J z#tfKwL}Ya?T>qp_>=A#~JMqjZq+(|F5GLXUO6Tf?xqa>JQQ?EEJ>nc>C)WtKL!Wy? z;hFgA_c)2w9)oXr-m|<6USrK%S!|$LHUyJn0@NHU@OcV~&kd}E6s>$CyJ^WVO8*1| z2aSE0U7EG0IZg~5@=^{o@t1Sb8VWH0%;-AoyJ0#0BMgOhD3!0-4T=d{b)kYU==JMv z5LZSB(!iKJ`2OlH)Z{eaE<r#Rl#6HU;^25e$AX-O3<*ek0|Sh9zc-BT&1?@Ni4UJ` zgqfCb-Q5^WLjd1`7;mk>I94s1oki|#0H)s9=|`@ROFC8b!TmgM1nf4HQM*``#-cf_ zli<C0Hz8SW0;|T~?P&Y?GwAtdnXaH4m2V7rqiyF45*=);=xg5VHbu4rI*6aktJ#|& zxPc`D%9Utj$pDe)K-fo?4Aa`9NV^0bs{<m(d&n&_{nmNiU>jHk9WEk+5u8SY$vGW3 zx@ID`ap;#BJp*b?(j5rhyb$FF$_+WN68E0>GQ?~b2jB6n__`%zS>*QGhMCz+>>UXF zCsbk|4hddmWxdtj-d?`ip*-Ot(VY&?IRKuxgL)T=*ZvawL<k#fSmXpjN)@p)&HC5Z ze~=k~uV&W?1VbGh4S-_EV2_3>J<T$YV*<Fw9F?6H!Uy#<ULMJ)J&7;^2Mg@{{^^d? zm+oF*Ie~<(4mr_fD#0B&{ItMu$Z82DBta@UfWVN>R;0m|h;9Pg0apbR+{Vov8CQ7X z#N|%!jv;N0ze-)Ytu-!qzaztBE1Upn_8fh7luVwEm457%FSTYeDs&syJqi7`s%bD? zt_xKPu8WlgO?A9kZEfm{E+{*LwDar)-3+p#ER7!IAx@}6|EC-u^5KI3*1Q)X{O=zL z9q)cmx_t5A%ufb@fJ!EYG_!)fht$Wzq}c0xq~&B~V2w)%uGx0`j`$@=`jkRmitEg9 z4y4X|m#G5i>Y|uK($Q1&>8Dw4PlL#f>_}Z@&K3}m+1S~E)i(ZCT?~AnewmY5vRPWo zVa&)`D!J`Rvie9q;RQ}3fu@-t0MD>H{wwV)u8j5$b6hj&GjDps45<ZHIwwph(#4-V zecD~>_y7sK2n{}`y6_IdY8FWH5<Z(B&hZ;(ug?!ye+nS;8hK371@b6j9TABIZp+d= zddx_i-<Aw9giS-1*K*`i8bcc`W@KQKj-Iw|9_5sHc)S^Dhnn$qEj>=)FOeewIYz)K zapUDV-VV5C3cxW%9IADg<(@x6YA1k8^!R{Ez+tS4b7_~SBSK8>y<}gR43;cZZF()& zvu9<)fGe@N)?C{^?p!{6RwH2&!EO#ZeK0$<RP9&edbOPzw=y;an82$ERw}Ju>)`hV z!&~p>?=j`U$>IUKPS`S&35kC`xGkP_1e0{=!t>R64o+_QASsjbbSr+g!;p;hQGK%8 z{+>UTcUZ|S&1EeP_tcFJv*dnI9{4*izqsaJC{D1B(5lHnGtLFLpCc83@eEuB4AGc? zYxda@e)lqazf(<vRqinggClCiEzu%ATzzvLpF~pwWV5&r{ijL_sQGaxa&O~<xNo~d z#wa;@q;&OvFZFTBl5<Th!%b+V*a}Yc?BGPyZhYZAcSO_jyo@NRJ{B`#WS<@AQJdv+ zE|x8%$yM@N{QIix914s&=Rv7c&FA>U#U_oWT~^7XX9lFiNH7CxJsA7`8mzSm*?fmF z>Wn)*irmA3X?Z>>nY5;s;+TL2Ia!L#H_hgqs8C?5^8zmrxDMWNiJ!wHof&_KH3<o& z3h5d>%DE?a@F-UfNpLl(4eus*4=?bz5oYY&XVUEV()0DfteQ1<ubPL4=MI>TK9*Bq zKK1E~=t&gnQD$%(?Ny?n%5?$iqwnS=#58-ibH|D1V#Azq1Rcw|1u*`BJ|c~9J*eK= zH*Y?HDn1QdA;{4O2mme8$^i=t3u~}{L0$3~s+(>A9K3q@_%>;arZ>sxSXlbKhR(0A zs=bB!CcU%gBS=Wdv<uq;91L2C(!R)pytoa12t{0O+2lpw1s5w>RT3n$o8v@vfsqHe zlZxc~wrX3ExFOG}11BIQIMu<GwKf(aV+Gs*aw($AgK2dB=f~Qe*k9$P2bdo`$h4rf z0OluvT4u2qK!(v?{B&C=Nx35+8n0gMKprp?91z?IQ7)IK#3`TPWR|ekPVBfnBbfA$ z-?n+0PV*M}2K^=DTcBxl^xEAt<x2^UOrF%W0u6?<VEv*6N*XF8Zf52idDYvQ=oS%} zHSt}Ggjl_JkWBtx{C(ICs0UmIY)dQw+5)yq00VLw(9#R9gz>4V#2y3t?tHVxLZ=BO zly*>QsjnZ)D)dPidDx1;5xBSux<v-!-oand0Tbj3mU3&zUP^cF@D%R*lV(jW3O;-R z#6lWk`$U1#TBzQ!lUo1z06|waV&P+Nu#Q~(^Zwrp<+FUYKR?_6d*WRP7Y$3ChcTId zODe=VCyv*LwNz+WdA~+bAX7G=oBUJB#6$1Zz1qfx-SWh#g^pHd_ee4StL`d97K_l7 zJ9Reg@1DVwvSQIhfiQ?nA;8L`Ob@kuBrD949Fza<M+kUnkYKTsMg3r3>x8EgcKme< z*<Ine%0RT?#s-Ci^n!N?D5}cN9*26iXqs4mNK(i{&jHy15jHJS8-`d7Ev<-mDJfM0 zRlCcL7s1d877{+}MS#D^%><{@1BGeDPSob7fRR6G4TneWJ4EMbs!63Hiz9Az<SDfk zj2&B#DBQ&Bi^59O(wj-{eZca0^lu!&eE8Jhuk25{LN2f5pUBh4l}C3G^U1yKNw8H4 zP~Stu&rc~(G1nX`+=-YhK&l!*z2Wfx?GWeY;c41YR8m@YqaLpGEC8O#_|ZQ3)CRa^ zri;KB9l;7oXBMXau8&V8I7DbKT*yFv>DISWX*s?yKu`i$B%4WjuXjNTKEXTNmi*Mc z92yC5TIm+D@OY6iF&SN5U03SF!0Cf5b8Cyk`-Me-O70zanRmBp2U2gX?9&RD-P`so z7j}i|r00dgGC;Os!J{a;qeFw1k&(HA)HF=YPN*@EX(g~#)Lso4P>&{4aoL-A{omDP z-M4R+jZwU)V6Wca^FGNWZOC7>3J3uQrT(~sSRoj1#Oa?I5Np4DVI{sYntK414)DT@ zK7c9MuwX6khN!&?=qUpX!<3Yi8XF4)W#LB&^ASDJ0u#jJERi5z%x@P{H^!O24>2I& z<55fi`P``$=_y>->}g^g1wQ@`G5&o=lzr+?)u<>6OuEFsb!oWJkK_QJ!1x=%LPu92 zBzD2#%$U_yaUC6w^P+fBAZb&+w5XDmZiO6GDEU1;Okwr)#c2s}upxwpykDSZfQt*P z!nz;xY&+k-h9#u;NbmDjKtRC#Jc2P8Pmt*d*}`yzFpCVp&$fv`!m}%>Xv;@59+=VF zz)M!yh^P+uAbMUU@itUbKu&;>^BnDr2sP%zy~IB!oqru6whDJFOyCHd3<I2N-dFsk zFiHI^N&jWEs^8h|6qP*DtXq6R$o$8=TNap@VOO=o71BpW{t~tuya&O(y;*cP8zpsA z$3u~Gib*>A+e^AE;F&H8{1w3HF+zsS#7MJGy73g6gq{c)`}4*0e)iuS4V(cGsG+He zO#9>%6m<Pp`B~AL1pF=mMCCR380{DdsOh@FK#N2dR35GZPSBm6S_THe8p0Ry)9tO7 z)NlgXg@_>d)+D)(3=@GfRaDpy{gRTpJ&(^R+wb)-{M#9m{uqiI+V4x}pMCLsdt!e` z%P7x^t5$P8tglrEHZs!hk%^2!!lezyYZac(WAQjh<}UwFFBx)Q;_xr|$`u!D_N#|H z#!ey&II8Z$)ucVYkL>~Z)Bf>69l~`4r$%0sxU|3&eskas7|Tx3@o53}1lJD_7WJ7R z3vRTr7ZyTzH}Z%9y3PXih<3Yd5EuePF9V{q&w#JXp+2u->4hj6P{+cstFld$A{Ll- zjIZEDTcQzxGx(+^fh82GLgCP6vA7+*&-SVB-*bU)7Eo;vG+Y(({V(s=38TEZ-yRXM zv6(MkbQnD~HUcUT_`%iCU?v$mS57nYHE|xI#R)U$@Iu5iYK>_7d3cEl8nlw{Otp_i zow5ma%M+-`T{LDkqvx%B&7yAA_KiNncf-kfC_&|f7u(oI`@Z9;#>M}5w}3a~`t9kw zl>h6{{SH<kk9F_tnb~|LOBw2t#!4xD<MYD>8VwQ?Ef-t<01Hr8Y1-B!hsTA#Tvslx zR;s_f#_2yIc2nYjA%!|q>vPz*6Gy*Rj{ICaZatH)^tm;qu6C=DPAxP_6&Jf2WqvAR zJtxYL_{`)I4YTkJKxfmV%Rg0dDYDikpIfgj7VwEV7=HG|$QIp}rBJe*Zc9c19Qvtb zyE)GPp~kAryRB?c9p2Lt!N<tC#^}4glbhYM)nK!>xD^@^bA?Scl=SIpf_oQB-K7xa zjGd;nil|BZONIkfV=8<iiL)g_vt0kw8Tq)cS9*q2Ok0DY>kO*jY4Tdn7gVgzY&0pn zWitM=;vq$E)XiBXW>-p?%0???X7V0M=eneHxKu%3UL8v+Q&h(~oW6Og@UTX|Nm*-I zW9N!}4Dsh~q(1GS!o9*SyoKKhPlAqy-uE3bLiEwX_`|ZVp^*oJ`8Kfmtk23={jbu9 zgsYxT`0)D4l)^)`PIBH18E(!(*X#`*6<=F4;02~ZxaJlmWwcI>{m_ZQ(~sOJHl(Li z2VUy+{Jzb}-8^Wo`o3$-kJItpYG*}<r)~_H-@+qKVSXQ`P*r+?VP#9PL#a!TF4S!_ zT$OuHU><nUtub#tiLu9EBF;h!o4^Md)WR0P)L*Q={fiG<R#W52@^ZsRc4jLn!tbk3 z{PlQA-!2<7KFb((g$8L;>EOkBnU?BA7$1h0%?h5paW>M+yL+#<IHFW2v)G^2jZ42v zeQ|H4uY%|Mu9GQIIUlBC;N0avc7^^;@ti@B59DM6b%*9TJ32dQ>FI48h0|3#I-AMD zOUWrm*xm9%rOV`(OPjW;L$JPe=NR;^UnzFk5u#ezp8xe^_nieu>wR+?Q~MUdPZnBQ zd|MLMOO-xeXWtMX7&N&tRm>;uqVQEQd5u+pbC0#bcYk5%!CFnB2$HSE&wo9MQGX1+ zZYMGNpr9ZPr~E#nKLL$GPtCuLfDKJe+3g!QHY{`!<iLIa-EW{}1NTrrD%N}%i}9&7 znZ@ggDvDp2^hx|^E*9P5_s}s;g)&%>$u)M09|>5*%ATzsr9sEbm5n2!?lcYCS6DaJ z3?J(K=<Ri#r#XRJEl;7zzZaOC0Lq)P3d~T`<Hk=CaToFh1qGoah38W5&n>pBR#S*~ z8x|)5s3i-vw`;7Mcia@d$Mm`+N(AW1zvl6q$@#`LQ#}kin}c!t4zE~8d1GWvd{_?| zhW153@J$<$IB*I>Jd-MO+Q&G8Uja-hUK<N4bY?PU6XGrs39t(HMm8CVwKvRrSKg?0 z<P0koT?ra4K4g%>y;?mS=_%uQTb}}>MRo|<Hyy+(lN&}IIM~@0K;62Mw8PoL9MCBd z#^WoXs6^7tyu?qc;a55}MVp+zu+vQXN`~<ZhSEq@CCbrodr6-Nf^2@6OQWvFql5-2 zbF-q`oed{3OU|!0$>EqtUyWGTDi?>R;<&BQJp7NNI=b-jYkAoXW+;cW15Yu~fNT84 zi(|-344hJeI|-a-P|#CK@s&?sIl+AtvzZgmLk!<%pEqLb4vMhb%3nH$H06f&Z-l^W zHb2#oOBj6R;06GnS8nyT6=E5!28wf754wE-U{>WFr=lvv>tF(yoTn5MhneT^@rcXe z<Mz4bOA5-lFc_=rU{ETX$;_f`R(m6G1NA^QL~>V=NpWzz7|<rew7jij@m)zO^bGb) zT)HHK`&F(FS`p?CG6JFv5T_&o%{Bn;7L2N)M-sK+KsAoUldE^$BzdjPM3yH0-z{G; zB?Kqh%8*%0no7dO-LwB`*llc0HvO?j(sat+k+~pJG5B;SygglabjNG#6^~3v`XBKM z`*q?xGSZU64}_>{Ka?LEANXMU6t0@v)N}`$n=FCmM46wJ2wCthC{m!qW<%H14A_}9 zfZRdmjijWc`x~Ob*8OX=0!tj!Yj};}6PQmWUzs+QayI;#vHAnks`ELWjlY2C&{0xT z>s1jY;3Fbv<Zo&Hnisxn1y;B4goGRbrPEM@qjtpuwFIEKZGRzW{ya1lA=ab$t&{<n z7i~Z8aOaXs0oMS^7~dLya^pk?G(&-U_DQOcMDw4A=Wb2*U8`{7@i4@VtG>Cc)?1Oa zy4iia<|UY`4zd`(u&_2%rEEz%f0UQ*ya7kh;$=tBU)lk(37a+0R6(^PU;O%?f9^u5 z4b)!onGHG`8ZDdI@=hYpip)ccm5ZC_{?p^E?RToT8Rt}62Br;#)}8V6@)TWzT|OP^ zgCV}|?PFIRIFP+1Rx3bR6hP+!?GC7o615o{(qcZ@+w9%m_5u|G7=+do#2{dlZk;Hn z_C!9Dk{Xf<pcBw*I*}P2Rs$5ZYV4}<ZKaN5E<mQEK3?c?>3}*m7xn1ITIYT&cfkbk z_lI$iHbm-|6cg;C_~I`2*`Te0QIdtNLP5>g#alA?j<mDE4PXL6Bp@IoK!1GoiV9V5 zOg>AG0XF19)eHS(YKcC}|A4HM!^eObv0l%OG9TtCD@g6p#p+h^^$|gE3gBl++6lGn zd>>iLCnk1pWvVsr3s4obSAKieFNAKt;w<O0#Em;DlNhspK42VV^>s-A*P!q$yOF4h z(~^la22&lJ*Fgp%?tyWeYK$B@CZh)$|1>oCwIaXa{V;HKR9M42h=!4yuo*_9zMCTk zM2-FEED+dSn#PTuzmD_~?69^EP1f@ZSIIMm&weY(j@B{WY?V|65uf5I{wzha8H0TU z*iJO1pcC&VqG-4b?2fs!s<z332bj6rnuTG2&37fV?+e2ptYE+h_%t}B!6Uh-#7RoO z&><A8G(e}!>D}~T-ABEA^+Mwiw9<1(BJy23nI!X&RaKz2jFoNQT$-z)A!DnPprClX zRcEl83}ge;6{_Bsud3L|7p{V1uD^=q<%_(yaZN$5wZ6f>rT)5^-usAf-m(Ivdr>=c zEg~Ui?n=>Wg$q@OFaZSsXD~^Ez;q3<b=1oV#wY8yS-s=SsWJhRkD?<1U;Uub|5YW~ z6#Zj!b+uTnYU=?Q88$>6X}zb;jXGr?W^<~{emhUFmkF2F+w3H!dSPVVX5!fj{Lb=Z zV+ELN)h7-PkK!H1N`^NPxlJP5mu^~;44tL<uX_(#)a+~4dVVIIf%#dIJQ%lHAgHI@ zV>{`Fn2j8=#+_(~-dB$Hjq&a2*wUWfLywF&E%kOmO?=;eM1Cj!wiLcGF)w~>)jNCK z6|xCt#C=YO4kV4DUygCSQwqh(r%&Q%Wds)WfNXO(dT<eqU$_44J#!gT(D+xB#_S@I zJ|HNc$ZgrzIJv5wr~EO2mlx2{CLNjy+R;z9!LiUxT-X3d^#@?r;6muxB6PR!TCS_$ zxQ(oObjw{T5etElxrK)I`k;7+e;~HbUHR_oRR25C^n<LhO(Gc3g_bw>E&yAK6S}oM zRi~k7i?}k3A95`K3$~xJIu<v%nv|hIDn8h>yBE>#6#VYx?}*=NCK`t*+EVE0!vih( zqX%l3`O0j$z8~%+2#pKMq_-cy&VW%riQdh^aiT<d+vP<>xmsqYM)`tNeT#n@q@>-= zm#_lz--zn;7u=)_3bl)ejD=hf7<H9{U&|2|O6^`$&d2svvnO1#N3vMbMP@Yg7rp&) z)eL5;8{RjqT%RGHGr$V@Gd{)O7ow%N{Bd<`MT{J4eqRy!EGvvgV#LKT##~IsQ5~4i z%HgtRb60J2x+~~(XFyL5#_jFuWzw>t4M_9vm$3(5;u43#fmW_Jk3OmvZ6#W8aD%VW z`wc?zU#C*>*sT@G=$I0%aJ)GQFO`*@aRPel&Xb|}4^aCciT`?h(xvWFYO7r&Rf$$! zPT_;FuIVe*vk(T6bpu|sGb41np<YmKdu9X4XZH#tD(fqA^b^6|aSV6~ahUm}NeRz; z{VOSjI|`N?PQ*`M&RhSC4^AD1G7+P01}h*Sc5IVT=+&a0sWj7&hD%)fcW5bq*mxkX zVbTR*f&%sxeTFJ^DofkquVJCP#V;gg<vBCM5ZAo1sr35pqoa$O2?P38gS9@_X83Y; ze#}iS9E%t{=w^U%qC^w2mog%2M=s~w!RovPJTB9I0@IJq5E{R#X6A2hf=@lh-cEk9 zXD)iVz@BH|J+zwvUI0w`k%MdhI8p!4Syr{+uELOr)pvzL^)|nag{qd;$%^pL=_X5p zMJv@QDY^ZI)4=o;qU!)FJL$~9B~x3^bFz0*O=9^c`Q0s)Z-kj=d5jI7TYjUeA^R6` zeb$jq=Ca{XWt|c81Y9iw$YacsT=AiBH)0T7v$}EK>%NnFHseMW#`O9vuybiqu-aAb zC$rq5aqegQ%gwd*I-h(=Ng)r+)^fgq5i|#wE&rBb3sDYwbXm&v=UmiVvCoyy>A~R> z(*6Wa&NTcwa!=n{)nq64VZooFm*5da&>r0XU3X@sO#VsN_^;gws&TL%WddHre3IEM zQk5v|i?3ddc{gh*4x8C87@3UrOxrzH%1D15{Tr<WRBesy>?z{hc%tT1oz=zAibfLU zlI`=bVXq;xH{k6@>l~wX2A#FU_ALvk?6%W$r78sjqm!`6Q_;roiI!B*U*&f$-#Nya z{r2DEf&2y%4jSpfGfSDlvQ|2bXm$)2ExKf!;RVp*n$T`8x`JqVOcD+)?P|+zNvPm7 z9>#Y~h-76!I7xRw6S-I~c9pagBu-d#tk-KqnlmO7y^v|dJ4!7K;-Qx<{*>swgBv=? z3qHy-ewGshlP>#dz?1!Z{4sRA0rXNi3F1p%f=47f7e*_o0nK;y*pi#&eBk72>KJQW zbB7Z;|H0Tup4(Rz95iqA99z)Qg%MLvMT0)PG^I~0$z$znvTlWYv^tNTRn$kO#b?3c zDJUSRsc?dONaOf06nx9l0ylo_+M+iSeh;Ik>{<3$HfV(=n1s%s2iM9*wdlRsk~}<V z7XL{gqnG30**{RhE&s((qO89gFHV5!a?TJ8UKq@WKhWn1&`cD(5PEY)iJ)-s=m7`! zX8kZtS=snn+Rm%6Ctq^V(0+oh2TXvl4meimL*HG*(oq$aUxXWMME9c2PfA~{r2*|I zTthbWVCoLuz>qXUTFQ)wywYvYUc_YMDh$U<qX$aY=k!;Ssj^nx@V}kEVsaW53<`5v zMR+>k{W9)SXP7-f@&#s-3I-)<hQ6PRwCs<xKro7-)PZ3_537~%tySr{g4LQkkQo0S zPlJxPn%mLq-+leCK$(=7e{h$HAi7|*q-#T~nJiS@chj`;ic%-g`OyMPTAshh3bi=^ zi|P<PH2(o=D0*^5*M-CKT~p=cYB?BTAGGY$Kb}d9#$BCgwcox8R$++!u;u}`V1m&0 z<ccCNv#AQmd8rl`ZkkLk|7_`4)@?>>A6_xBAopH1A@dZ21jm&tH^C5v{2vFegz*AH zA^`Po-@kJKL__Ye_bPEb+2=7q?G~@P7LN<z{g?Og4=PwK(joj94q3eFriFC3$qKcM z<<Aev#vY^OB*5l~^>+mleH#3h>(7_4;a7=~y2kCuwhe^}w}gcL@#Dt<uNIU#VZ`JU z|I|qQ*ipPSSvku(3PECo>e#gOcxF~^M*!Jjq%m)9dZ<8+1h3)&g*26_whg_%f&Hz= zO@R72prEJ42w8ARNg08%3}$Q$N2XoluBF1|f6sL&n-BBNxq`4gSJ3JLufai8AGAVt z0UztqXBO>QavW%3q!8WzMoIA9AbeY3hZn5q>FEt^fnf-XYn*_8xwLsb2O{0PHyHuW zkLXUd3yi<n$Is!Y;^ai!iw9pOMyK_%=;)er)<^_$oSp*N>fmiiTfh6Z7~@ROKkt^m zJd8wNkdDmE&AC7-gL_4fhpvh!NdLX9G|=0t28O}=(qH9WGTEAFGPj4sFffbJ=}BAn z@I3qbZ>|0vjCz6Vpp=SA@YQ;jipdghBb8ttomrB}Bj=`~{)<vSW|m>y;8#~&2riu} zN?0tsYw7Rq3E9G=op|V!Meat_se+7B$c&@}IzcWNwVoA=Ql<RJf5PZJ_a}&P9g>Ma z5|);Vp_e?R?y<Q*#SbL>za0vVo53R|patb=O}qkhCQOLM?kwum`OkE4+ef&h3^xAi z_9C7LvcF*Rz@URPLH}!2Eabl{syugI9||%;-4W;&28J4k=QApQ1bxTISHS4IdKcRP z^Fnj>>=;2>TwD(d3w}p`V2FXb=gJ=>x<qX;<rjFK^f>_~+|t&{o5(BmSL;Ko>W=lT zSXGVxSw9+DI~G+NJ)3t(+W*vDuJ}55vDEawSfE7+Skna*<3og~<X~#8`U^8a#X+xH zSS*Kk8?mvmWhjI&p3^yoN&6tldI1?bNyX24*DkQEc{c@R!nW~Y<b_3v8svue)<wY- zg&61pi`E`^KMANt*FjN~T5Xey6?1%tUOfb6V=J&rAPOBS*@vz~%wG*k;XQtjR86i8 z_Upq5cd5t-f%Mls)Jq1PUal_==l%Ghh(vS{U^GDnWwivs6Zs#(qX3=Ye?lFqf;wM- z-TxMOST@(Spowq6RbP?!%t7S;ln2K9AK=4Qtr!9i>tLxPRN{u+G)FLIqmIhlX|bJz zg|In8dBCme=XTeQVA9VUOexp7DHXlLs~UQtWS|3qRrcGxt*9-Z&+424T^$<eE>ELS z<G0hR46X4Zfn95=2f=(v86CVeVdOpJ7E06C_V2L=VM*GOBK7sYa2o$bQ(Im*gWoF% zv>b_vY1jpu3{zbYzz=fINC|>m1yc<XI#WYe@^>7ptsxmKIm3BB^$jd#fV>XI#FmPN zgG76Pn;qP!So|GIbKSAQn1j^upQE=P`~z>p8K;VDVY+`1+x<e|l46pcIaB`^Uta-L zRoAtPBI1jLMVBHWBA_B5AfPDHAs`(h-O|m$pruQsr9>p84js}U-QC^YaOcMFe*b&N z9rrT6P&s>_z1Ny+t{KnstZ1{a4+-~};jQDi5x3a5vc>@!g9u0JAn)HTkQv!Ab;5fc zs8DWlDTR4?@W^tAxYpDDMCwqN<G!ew9%QR0bVptzGLMZ;p-8U0v@0?E%+bq{BOjeF zRO|R*+dS{H5^BtG_GsT<BCpqRxNO9@%*wc>ntIItcZXI+LJZNm`-!1u5lC``bpb)| zKzxnt3?VIL-5s$;v_b)0(>8x22Ai|{?5~f`Sb9`Kj?>cv4p$lv+3oafocy6a#N~Vy zEe{j;9Tyq9h~upcZM(!|XJ7}UpTz{q$Q~ley7(z~1``Qt&IbB>Epp#Z6;826(ZGe= z0A<?00Y@GJ#18p087MEoo>Dw~yMNydZXK7s77nlgZIxLOXtEdzic+2$oQ-rhlFvwI z!@IN+<A#3t{dcH~kkrl_jVjGGiqN(cR$D#W{9Fx@X}L4fIAqj1sLCwJk(*Bhu8Ity z`QEv^9GAOZKJ)1Bn_NQ%^%cKV@K8T6QGjOgckEswQ;1`!Bbt^1V~2<Sdp#1a-Z8Gy zlR402{1)Hk5O+2)2&x+6DPL7RHATjtTF~u^v$)9+fvw*hZJ}kf5B`_IumhwABVe@- z{byE^Q>1cMQ3djkr+CPee8D#h&u<Rb4rVFpJu^i^3b;i@?%myiO+e;yH>al~)^!mE z8A^|PB_WR*q9pn6rbp^XYFK3!K3TV4G(;xnJxL5PhT+}6U_hSpXI2!Q3y3`JZ?LhR zr83_&VNRrFw@J15fHnT%ck{gE*C~(95@gr@e$C1p+x6?uUHw!8YADf1ogSl*%mu>- z>^Cl%yG-a{%y4sL)}G@1zyA3F?)>bju$eVyRUz-LA%jrdR7(r>V+h?aUVB6Q97oSp zrtsCWd`svX7j?U|=y3RGI<JAuNricCB0RGkBfM$X1@~L&(TvR~nMTRr^M)e6j-ot7 zgk>`&V-@CDv#?~P=aHu#PFf0{dGf~HT*R>NHQ82J?s&OOf{(ZR8qy0fTm-3<@8ihl z)Syby<k4}&koZ#$u$tQ_(IWi<dx9;5f~$;V7tkt(x%iO~!k=VD6#z0wEs)j}9Wc)i z*%<-k5aX#Aa+_!p_uQ4+1|yR)^4|T1E)CaZb`Sr^Bjd4$fF0$CQ&A$LPwtqgylLT_ zd#i5bV#@UQ>QrR7N`NS=lHyZr%3~13)i*GovCG0*72tBLcwlO5nr0uz_0VzmkQV#& z4-CTI<r51`$ZB}J%bAr%cxw)MU)k454#y4}@{LCM^J<Vidi}#zeVP)qn=nEV^{(mH zL#0)h-8VNrd#cMUmS_qCRREAdLrS`7_M>$G<!&>C2^dS+W5UO{D-ioYS6?#fCY@x6 z_Lp4}0^HCZ6unz_@b87l*2-C74wd;Gl`QMBx~dt=fphZ-Mu|Y_*@x;nyP4Rwvcgs| zG9ZMA=?Ok~Vt;+6GbVIqQqCrYwCj0mGr=+zrj!2r`H_U?URue3;br-%ggU~t9yJ-s zWbK?t<}F_8Z`}}X#gUD%a$|hIM1I0VSNcYBkRoV2jLatV+eG5^hC=_3GBf7Dl9M@o zM6GvCx(RpTD&Cah!3UOl6)Ga;;f*A@atXT9Tk!I7>@e^ly(8Tn#I_NgP<0w4p3?X@ z^6=R~9clyJ+z=#5^{}dlvtZVJHyA5fiXtex^H12uq$3VxOBR>5qg}$(JNfZQFqEe{ z;69$(Q;gnrzTam2AhT13Y$v*~q~QG|E#pmLZ)1JF7TUu^(mpAwAo)^elOt8C$mcdy z%*Shn`xj$j##~#$#a8sgcB?ylr?8`Wv36DYE&f6n1M5?$RH08Rq*HBV4XX4yYFnpQ zc;!#Uj1ritP{9cWgGFF|6`9~#$BgZUpn3&JU64(feam>~=bX(nUK^Ha@65lr_pg4J z_QDlsJJ~x9B0gr5Xg&OiomT(m%CWm2>!MMt*5OPjdwUgRnT%N?b}J7G4g6&Wk^~N7 zhJ8sJe%-6Tf_mF6kYp;oFP#PU+s2lp4s^nw`7(d8<&3{M#@QZoCmlc)Ql^1VxMYe^ zZ6A>203pq|b_fFm-05S8y{e&Iyw!F&U1akD60b=6f~Aj%53$VWr~nZxss8bNtx`}< zSU2<*Fyg)<Lo`p~{%H5==D=pf{dv$X%5pfX{{BswQ*t(#ExT;`6Bm<3+LwQ3Kotd} z8}unLM6-2b5P06f#y>J?OlR3H#@R05ZTTi)YkxTicm6|shhSCu-%F6iENM-nbg=i5 z@$geuF8a}!&P!v+<DMoVv-~VW9BOV*X93#R`~d;2N9W&%$ApK!>8~jaAT(&{8VZVV zI^V^L)k4Zm7~gNfNCq$%1i^+8#QU^p{CTRR<yqP7DISuIi45!&f>-4_-c|UU(YoG+ zq|VjZC^6GQ$Y9ka)~Yi7tQhA?=H-eXr^{2;OYw`BLDsum0D;eWBZK$+DnwJ8t^ApY zo*NLw5ZD3W4HJQMdSgHrI>&(Wb)zCyvkDX>#B`xux8Ee&`~cNk>Qh<nh<k1^OlrFb zyGNE9Zg$q`5fK&b0D1rdvO*Y;fY>Qo%5H*uq(NX%&Af&X(VE$P06lk~yBCi<k=(7G zV4e!SRTJG&i8tfqL7o`*ZgByu`>8MS8|!l?`YlmhIxZ3rC<5M7s<;_y^Uz3&<x_)L zx)Z3DUB$L1uCEbnw4Wb~CEiot9=*@|QI9K~T112Mr(6oHE2ZZ*{s{|#y$fUNR$Q#x zvyT@;4IDvP584>1(4*0DP!kpPrcDJ6BeyVCrR*1QV_E1S0{A}RpX>DB)k__81~{cB zwJCzhtizRQr#!4g0Lfis=&hpz7KQ;#6219~_n1leHRIzts~koo?uarRP~sH<o3qJs zIyicg3|OW#0Okx7T7oFo0;8Hm1D$e?uJ4BrAH0|Te_2=z8Hlky2a>_yd*5uzp__x1 zzS(qULCiX4?Gh&V)2f?gQw*_UzTE!Ze|tUu>9YL0k%eLdh*l|}my+;D0H~dL0`&Y; zzzZhv)xtb&0d-~purJb8?s#HDra%-i94h#Q0JS0Y%&$Lyhc-CcTNey#{mL!|sPd!? z?C*EecTl&gbbEW|o(cBUKx2!eDuMaIOl#3_aQfOGe!_@fLV=`?Hv&!hcz8)`Rt~k_ zsM#C8$7wwfqvFyISBcchVBSG=HM-S6WY)B3o*w85kf8rwu()}?NUG@c<Z!!NLBn9a zBMH)%c~Z0)a7aPe3ZM62E<vz|u=fKM5Z|jj2*MA-+omlH#(%qs3JV87C+e6y_2rV7 zMu;)Ky#ud|)$o7F<lkb;LvebX7Pz*$ztU}PTHSMg2CePO&LcZDt&QuGiyMy?8Qi)8 zm&abtuW|I_+6Fq4_&rTEWg^`kZ1OZ^NKjXSKQ)vclnNZO%qy08j|xJs5E1|VZ?gCA z_L)K!WYf&*C5pf-kpWO;)0T48eXG;s-9<pfbwLs(O4#BL!mNP!zDrM^+_w$3TVvyF z%N?zA;<03`E^Bh(f~ePZ0DWy>lL!B~S{Yt;bK6nCFK6Evc5@+O)`Hd#hdW3~Hne<( zia@N9*Mmu&S)(~Ly;Yxa^9zNTMu1kY4C5W~fl`4+zFQ*Mr-6!ghhvtBb2~Ct9z(M` z+1<Y36q5ZorV4ASkoS4es%?CkdRPBysBl}8{lNCu*D(q(qyHnJywcV*4>EBIz~e{A z35)>CL%M^&!UF9S#8?(HiZi+n5!@qa`6U79Um1J}h?}|6GD1%cfZ^Qc6Q7VAA3i7v zy*`8uK!rLo2ZXBv09qw<N(F`8gfLn~Ls?2>5A46@I(c{LE%jp;m#Cl!pSWwgH&p)v zT#?57@+jj5YZ(h2VUx_z4t!y+>)QM!YSwID8_V7mZguj^xH#YX9P@;Ra_A1_P{?7) zE721*i`kunzMOAsJ9&}z&kGi2`Gl%PIaJ!6V;iAK<2>8!=$&5;{s!Z<m#exYLb|^$ z_2m`<+7HnrK`ID{;4gqkGsMq11GY0L5ft)>l+UnJl-zQlY)8&v+y;=*I6!AJLH`kO zgPox0Xd#c;9v|{hHc74NPnHUksPek|etq!Phukf?22vU>Baw5Jg{^tCdTXRH&l6{k zo9~yMDx@}dcO<hm52DzYZ%=EBLhV>}e&#k0FTd-ogkDPIW=3!jLrNcdtZ&WB!C}_8 z<7-3*wOHc!mxcbd`<++uXzNH%4DJ{;p(OKx3~%*D>-|&EH8qdhJLY+wbYPOm-z)4c zl+BYQWE-~1H=VNRHFjA;9$q}I_I6yjEI7ek4t)eR3WXU&8v0Ca1$c^0xtVNu*jGUF zbAJ=6UFmm#wLefUIq*w(piFUKSJtbtx9Oc&zroC;@$m`&W}u#4(Eej`4v!lohA!u> zkkCxdN%m{k2S8gfX@!ltIGp%&p#EZEJTGTKZ0BSCdJm!Sp^fq>L4$@Dsa3wZs~<{k zy6F2%F=~diS$+lGAo$NTADTU!*->c#t!!~Ybj8?UTJFOmc<>+W=N-79LNO1FVL5QN z>`<OS8skA$P)7jDUDL#Zw4niZBBf8#vQHxaH4sm7>+Lnw&9~B{0t9;)HJPJ-Af!9S zmC$!A)>Ci~3BF}=5=&dPlrg-coD(`sdKb(6OKZ#6(R@WfXC}d=KbfFYYYdAsAFEz- zN|=`_L>Xk3Mxzh=Zc{cnOZFR;WllQ&@dzV4{<$OxED9^h>uiau2bH+J<tQe~Q61A9 z7n}B8EWxO2)q^72Elg#vOWqKl@@Z|%(g{Gz4&w(iybw}dIg^bgB1(oO<5--+s#YWi zih}6;#~N}GAHRj_j6yWg>c5{p)ewneMoq%PzRa9gP>nm27y0#2@mRgRZSGwd|08;d zAP!V8^-(Kt=GzbYroR8i^MsYX!7q^?I^m_t8MIe_%Aa5SE<mbZFaHzuV8rQHS(O75 zn^Z}kqn@>rr&Od0MMgDJc(XF&4=`|mvjLv_(z((oL{kntfFU>q#QzSPhSP%3mv}4h zZd6V8ew;Vejr4nmD-P&>35P?PoNmsPvC?c48Dj>v&*(W;_L4T-k(zFW_V{1f%08Eu zdOIgI4OUdaZ@=}ESMNAkwy|u>^HfZ27Zlu`Hy2AqO=Is(7AGYVTV`G-2w2%0IkKoE zb=t9J`vN@`48uF;9k3AY4JcH|==YDFp4j^QSU0b68<_ZQCb(3*7~OIDQZ%ycezC&o zmgM+y)wiUX@GtL6lr$J~O&b9H)}|OyS^lOu<9shFJVm$oxwkhP^@2f<8C3jF(99uk zd1BQ{?MePXFp9x`1Ku4t#Xv}jhr%8sRPU(#Q`!yy9;zZ2LBK@vbW=cI`cv)>=H@LC z?j)w%^y&!NB8kC2fjyU3R34i7&Rhy1v*yIK-#pPpFLqcJhTUa-B(G~^u7j<XaUB9i zjJwD;AjCxkw1_%A9PQ3f<LMVA-!m-Y(@L!N3bGK&Xcc9rCTyX%F0R9!_I3RF@%#QY zlnL_;w>exN_xoyFlL1JwAS$cuZz?d-#MW6wf@w)-JjbZQtt#)&AKfZsk}4dIdNuJ` zZm!3wu(SLq7Ieq#@d^j&+`7V)>E-nI*{OQHkhv!G1Go78{d+^epm*!+g$EVA6sng0 zqd#Y)*Rfoby>HaS51$&Vx->Wa$gt}U0yZ}*+ovBM6ic`(^gOfP8M(<*I&d+az&nTo zZ2_n~+aegEC`rBeZ4IY&H^I>T?~O}j5@>)Dp4HLRB?01t5ZHdQRH5W_d-aRdkh`pD zUD&b!Mr2Vp9r8iwnH6^<aUJ}eKTzTVKrIvyf617kfTX(!%GW=ukr)@m?EF|(^faL$ zd;m%%uK^$;V-_14`nmzh5FisFJ$HN$klh;YnjwZNrsdFH!oYZZ9q!l%5Z4HeP7u8j z{SNsWgv)AI+FAtw1C!2jcByppePKu};phJ;dyOb#J8&TjL&%SUF&kp3NyDC>5m-pm z{jBO(8U>Lj9ePkr+g@Hi?Br-u>hfL4b|E3ZZJJ{fhUhXz$MB=d0Ki_l2|#Kf6UYGW z_}+KW{e^M&hw#$?XzW4I0ZUdfE6r=;1}ZR+1rX>mk=)tKtO;G%$~hA!2JTfiV0vDo zP1Ssm{ylsP8$90fP+{l7HRP`t-5BRe&))<7IPyIf7TIVW-d5DfCbiFxzaPI2A4kN% z5s7F-4+c;%P!UcO`}^Bl@LNO{=IaA3chkaYqBOCy*W7!s@=;w9XxR(x2_AoS{V|Rx zz{-)Z4gmg5f6rooW+%(abO@mC5iK@EED9txZ>DrA=^ukK+S^w;XHSR{c*>dr1@kn3 zk_9D#)-{oGohxGZP==&|jSSQ*{%ao@&oXZU54`tie=`)A<021ns}SH7{G5COvxX^o z1tBk@c>$`9`tZk~Kb4a}w9zrQKKm5v8GILn$BF<(M+9_1@W^%_k8>yv#IKYTf%OV` zbnH7k2QFsCtfzqVQGhV|GBXmeg6x*bD<q2p{kZ3s9k@VeGF!UIJ_h1eraO1)Km6w@ zJmD!I66}EhVk{ck6C0qI4HU|*Ob!0aOo+{6>|HM^2=7F+-XZW<0PeT^f26}<F6Uu; zMz}ED(|@h$0`uH-SF!|ox<<J=5JM1_5vYBpLMSg^ezf5O>ZqpH_Q*{!_@7;N!19Ds zBETNgfj0#|V|AD22yX(0da*ZC0cQRQl~lYn2vz5Pzl;3ZmH!qjVMNjy&P+fM`t{tP zP>vondG?>TtYV*=wnC_@Kz~HCJmh+8q%{TWMi~|^sOb092i|@Sat8l33ow`CN$S%! z2#XQ+7W|CO7F;YnJE{Ot9Rf}SB31&#&CBU10Gi+X@z?655N`vWqUKnB4Tvt4v$eed zxoI2Stcz4+;YZXB1{OIUA;x(}3E^<s@F<*JiqV4al^q3CF6$~h&MQbA4g+Ia;K#ib zSUax~Y}bFyQ*EfJVcEtAbX0+zji}5@YX=knKc?neBXZGS3xeQJdbTB+PK2D(^j>bp z*k41$h{6Zs2JZX+_7iwuBUt?)uLa$%Ou&_i1Zk2GDV+I~H3k?PZi^|;gWXl60f?|5 z4tH0>X@|}0D9P9jLu$JJPA(R*E4b`w0`X_LKSv0Xv5{%cp?4pFyP~K0pQZ5|<^b3T z=aF%NV=(UJmH_!2>9Ps_$JgP3g`6eh%(M0gsR0z;|LbmGGPYNSRS>+JE%a6z;A{vG z+mk7GIllMvKf^vZp)QFKQxLTdkd#w`B~8Yr`x#NeO%U=o+~1g%4@b5zIJP4fmLe!W z<hmR?AcR}!gCaQ2jM5$DGYlz6D*xMR$1DnwCgnUZecI1V^6V~Sb^6a(vB96gDsR-y zQBuP}?p@J}>~Dx>I~-f_@99G1=n&EZ5sT_~Xt#l|es0^r|21Qrrd`mrWfd7HvNnph zwsJoErVyh4d&0O78a=Eq!7yrG2RTr_Ba-_&W8h9L5OFkia0xU`AowmjY&Yrq@81H$ zCKSkL3flI-=LY2O-G2`<s1q_WFr?I5fRF{)!oPo|W;gDJ9An~h4|TYVwywk?R+NTj zJ-jpZ18+wzq&W<1ic~~C2idWL5c%YE^-^VMm}M0p5hR9dc^p=0lmi^I0fewufR;pp zfNdare1~8KIZp%-v#*n#d113GTKjz&_(>V?FUSrukgX#YZvstc08@hWb{eo@5EURq zy`vs|_TpI>%yWcs;C3Mq_irqXO-!WqC3zqKe6D!V?c1upE;X0k#L@}!`N=>+7J-!$ zyw%8*sSgJoAha{&ObQTqH|ft7gzRuS<IJqz;6doNX7>cqo&(wO>2*7t^hMy2rS7r; zMGZ9HK~Dsp86iL+#`%BfPnOCDA&PT|Bs9`x22P^d3Fq1J&$<B9i4fHyO^ZZ|ZCArI zN!)s1pDG+)$r-Wz-}RoLL<GSLwHu^FRWf)1jwpc2lJc*&f8}2>j!57xhysN5e1{;Y z(WC=3Tsx=#u6DV*raln#i}ogbkl5_3mrE;xG;woHApgsA++BIQ8yp&%1i<7~C(tLR z-Q;-35}qcPH)WzQusrT~rfY~mZ$Um-3yu;(B+@n}b2fRwvIg=^B2Pen8EG367L6jJ zIN*_cA$XG39!}LbPvZV+f*2FRn-Wkh)zIDtI`fTd*JP5vg4ru3|If|$tGJF#Gu3P& z<D1CI1bdoC^@8iN=FQAw-l{8E?p4`WN0=k$5UnjGrKG5+otH$mIz&hS{4F6_8>}Oj z<_I<+NQhs<rdHaNkdQzZ!8{Mi`^YqqxdfHFH=h9S5n%+{@<9OvObr=EfSkYj;Q&&} z$RdQ<h67u2?8UN3{sTouaeJU>SK2~qc)GH6EQfnD3vKr!y?7qkuHy6BiCE&@$ts~= zPucVgI(xRPqYa1N-?m8k0VHFP6Hcr^+%gXcMD_fD>ae=AT?Y0F)Tm5^9f&9rg6{L> zbhH2IdL!(!pb!95gRPdrbk(e|{YyLV;puZ5j?DLF<4DCr=yaA~c5S?=CAez54Gu$C z$PBrsX6b^-JnEu&DmfGn>f8=-D6urL+$jDip(s*-PQws8S&z$eE#<#GU3PMA=P2ZL zr;_x{+$eH7woHQt&NPBb770Q$FIOK%HqR{EsE0k9c=?$m9uZ6hwI6wCbMJoLgqAo^ z#XvG|KHh_>10*?ts49k#RDrK32SEo^$&$UDwV;W}42L(&etJwuIMJnNv@@T>en=|< zf8VZ)zkbk4z|$SCnK)4U^6uj{P4hh9vm+;Gz=;__IBr{TI!PzImSG~+I7Jy!>i}@b z&n#zz8ywVyHX9XaN&zN2&<I6?kdsNkGa)p@|0v=jo65?201{onmStnNtYLA^HT0Kx z=#5Whb#FK+v*#H3FP%vCVB+4v_(I!#nPu{qsajRSdEWR6(oY-WhZR(Upu0MC?6}+b zJ6*KdYW{%5{409hl{2c7=^v<}PIrOZ!5QpLMH?{r0a+XV1_+%393JQuke`aTqg?t@ z&3aDh!UvB|zne#2VNWCfQO)deV=jwnaJij5n*6)Luyp!p__ystKPE0_v2tqR&Q)w6 z_O|LWImT6GY`*=|HWL3Vgu7bsM@^w7&bvOkeLb;j8h0`7qy;N+4OrZlC|{L=OJueW zPaa`i?At!cj{cf&oPz81&W{EOvY`;2G++vc?S!hrnOk~wlMizDcC{rAHB(%UCOvKK zd+GD69W#>$O5ltX=kn%5Z0$;n<CAnX+6d;A@)cgwi#z<yZ7xrSL&?WvX_o_Ov3MvA z$;sn)@NRei(hPCm(U-ZCNIZmQJ^7`)Cg$eo$hppv>B&lX>D1Ni@!+T+NS4PW%pW+T zesCbKb||}j`2Nu{m-5D?dG|l8Y|iVWJc>T9E@4o;x2iR1bijk{;PtKBgXyOk!zuIp zOI_3+Qlbwr=RzspS{>F%fT4t_YviU&KMu#SZT}OQN&QMJJkPgB$E2CZm&85Zx$fcC zV%g+C7OP<S3QvYFDtY0Byr0X6vpD}M-%R@LHqBmSjpVJO8?}UOcTHz<P(O*BRv|%Y z*7noq*D>G6Zch6{h4l#)w<Wq+Y`3IsW11N+XV$dW^N}HB{O*a_iNp9aZdQ7M^n@yF zb@76p6}}7tg_WHhQ3qH^vB$OqJvZZG>HJf4M-M@n0fnEeyYP{^d9leqC9*f%qZg-5 zVwh~cXGP)$IpNZ9&+-FrycqjUQ>pcE9dPtD-T1Fmm#?Vx-;xjNmpQE)4^}Q;EkGL` zC6~*DhH9N?d_||(hMmM0lJBNj4sk6E-4Tr@k51rta1{qP3uu_q@)0cPe1=$Qac$=4 z(L18DM5_T)0lCj57Cz~3p2+zgX-9v+q{Ok|zHx0%`rRAX579Qri3!<5PM;oQmUP}e zh(H^rf2P7xm6WzV+!1o3aw9yVX_<UrC3vVWvF{RDHfZ-0xmV8*-jUH1SuCu+?z`No zvw|LrC3BaeiM9B8@$t4yHxIs<9K4%ep(zc*p&~~>0n*JT2TX#U$YOA5E-x#2wR~l` zC&%let(UC6bUQz`<gSpt(rG~Mpo!rtR&nM9xA}oha?v1*Au8X)8P4O;#^LP2jpqj= z38Vv#kDgn)uw%zx#?4A|{wQqi$A)>h@0)PrI;rZCc_TRoc-Hq_;>TtD5|IRnhMO)q zX$xRNM4N7(B!Y4mg^O$`84Jmc4B*jUL$%>f{o%(_Q^h!<Bb%o_C@Fc@;baUC2}uuL zTkg~Th~k#wKc?ZGf$+Zy{xjBF-~*J455Kr?>HnM_^w%FC;5nYK_~3ma6Q9lUdaak0 z@M!&VRO1dDIl&zel-f&V(rM(AZy!#4#Ot3%`E&EzrgF{gE*LNv!bVMWXu;@2nH5up z!ZqYz#|o+F6@p#HQL}Ep=L}YRFY@J=?l?K`n-Fup7Kl7ZIo8U~F3r>SILZ7Hmblnr z_Py3xV5=!c>p&;dp7-$Ua9ytM?gNpTXxVSK4X5+7BI8S8aJntH8*gwt%pM+aXj_UY zvPXU8m{n&}9;)9Cx<NQ0w>Wo6XQp7gDP}Tz5Z4|zlEsWX-AASCl|#M?DGU0cMQmrz zWy#qa#ZRiH<wy3i>`VW_;dY`?@sQG1Xk%bu?spIt%clyW<)Y+pF5i!{p%zhSI?(ja zq)rao{@s1^uHuf&k*b`o{yh?9znDKA{4AcGDg3M5*!(L!%e;|>@50@=L&B1tdJG>X zxpis=H`~k<F)hlt{Wy?`|F(M!g9v&InfHc%d^Secs<w-o-5XiyoO~un4<JY_@Z|Zr znYIxU9nHk-4>9e<3nmslm`ddPS1DccOM|30p+SkUCR=kn9uv6S<DAoD*uL7}mVfBz zxOuSQXZ}h)M7cgfIp`&Qwb4OV27FPmUt*-DbE|p!u%$TSgu#ZK!OtTG9|XGRsS?JY zxa$Px&6dAygB8F91nOj&$ZVyJnss(ZztstTG?9>pcu^kzC^>UZDf2!PLl;y173xV{ z&hDP}t3Rl(PT{c-sCTF~Kg^%=ACv!@ZRY`dUexOVI07+(#h<gf9KA)*d}NM3zr-<Z zhpT4m@?5R|!AmaF=Uk@#7EjzQo=_DIxflMKT<0TJov|Rdm}PDnuAS!Cs$o4WS?!<Z zz`>mgXQge6C))m#MWw+n&MbCmWg5>H4ox}^4T{HPj5t`dbKgnPHbjZ8Y_5yLKLSJU z*ITsi&%R~n;oNB+b`$$`bOCc;)6LA3XX<vg+)J?G5Pli#j2q{wM4s2!qP`8^+L$DD z%NRYPS|Snu>>Lgrj<n*+?XJV6wH6*qH`d}i8FabdSY+>*j@tA0f{RUN;;GiJD!Y-S zQ)u<DDIIn#?!dz}NxhjlZ5uzysr1%AYOyA!w?$-wZS)O0@I}}ywbw&%!>Nu}9hwKN zDvJNiXEjW7$g!4$os0@j7hB2-?uZI(Bb=HFDZ-<wV{LiADE#7)({TcwqCY)-Ys%+} zQjKm84<xK@Ps=lzhy{U2U1w3ep)zOJAUhw#A>=zrbK#|RVE0<e#j^$YNjil8L}t2} z;ah}<SC+SwnmInR7Qk%2LPfcPHwnIo(2-#GgXZGMhy;+XiICur0>4hlRw}RGcx18d z)NI<c`RJFv{|8u+cc=V!Az%sCtmnDk-9{zRm2O~S!fPim7}S}&JoeAA`QE3FoMF0) zyRbsKXgCYdW>->qSWK0TZ#s_!5s~#hkY}=?=y@L^zRY^#ck|5{&Wi#{FS>BnT;>C8 zQ(r!tAtrI(oh^U#c}R@VWjOqshLnA4%5{=AyY4$}6-PIzHCTVPRd_6uzc3vAW#xNh z6%Ea?!r{VJDyfwm^TwS0B=5rz>-cAW0^v`EXA1CE?;R&}S%=H})de&yGj0gJu+G!e z@P7G6IgMASvow6@iIagCubsh@Uay2k$XzR!Z4gBRX<%p~x*LjW_<*ZIVoMXAFY<H# zTlH^JsLFDaPTJ`tHEUEgO!GE!X<>Kyu9CyO(DT!eHiz(_b&~Wzr`3G(*X|dN<A@)| z=sNP2X#7a!uFJcA-;CWiE=7}5$t`@n?2<ZWG40XhJr|?g-<up$bXu}M5dYp`t>fsp zXozZ=FDSzVyVDzQrN&J$rOH?YwS5Rna?{2klXWDcm)MM7OD+CAe$5LkCi-momD`HH zUd>p-j_6#v!de<p0RHATW$A{{J|}J!IgMH&FRtoJi9Oq%?(EbK_dCas<(5T}H>SJI zpa(yQcc>G7%ip-@yMalbm+vE$@El8(s2rU9hsD-3OhWyI;WXN_c2<uVRD`66PDeIe zC^(KHzTu(5`1Zm>o9W%KE>7hi@Z6AZO3f-^#WN&aITygcEUg&OIe7c#PkGl9u$^Nb za}Um_GB~m58cM1sjnhib$6-8FzPuYYG7l!(#llk)`TW5IFl*7KKjYlyijBJ`y*sy| zgNKNtz(HE#uoC17x0Wc57g6Q&k=uu*P2fP%o$pq5EH<Sf)?Z~Q(6ttIMXkG?g8d}a zO=aug+ww@pMAc#bon7Is(0<;$hnW)0VtcUOM=Fm_diYS(DVJC5nfvY4W;adQVV_hm z*3NosfoW^3%`7<EGRsUrfOBWPXdQ{oBfSR2D3%9wbL@*VVw?3gmfep9Szgbzf6Is| z`_XKmv1sAA@zK##pI<4CX@3asFtlJgfOBp~UtNe-rR%lpFuljHF5j$8`EJWB{!(~( z+1_;QNr?h=`oQF}jk88M5n03)jUNv%Tej?vcpjXR9gS0`cf)P+##?V3A8%7{%@NKT z==;-8^Z8|pKz#nIm2++oZ>Bu<ACrYN`(bIf3s~=>AKw#%ED>a87XA58q#@Z#XTidd z{%8y_34zm*j}1km+3%*qs^d|wK_g?P)<rl9aa&OEqnZfj*ZuPv1g9_>*UOG2*yNYO zs!W3iwdPLMx)l9Yi8AZo=%rpXVUpC@xpQYV2}jaH?bWUK-Z=l<%U;<QJdG_q^z;8F ze)RYRGSJdCl{rE0^WJxG&fire*p}p7WEA}sz1$_+>M*jO^Wg^1g4Y{`3zunVzF7&Z zCbo$PuNL!c9%=>Cy>|`B7uhS*$SkqZ)7_2G)3f0`jGm3q%YTTn9Jsn#dTv?EIlLq7 z$3L6-8{<J;w;S=_^%>^cVpU9)$JCbVnN9h+@!YYAe6rnq(PgM0_O$p1C-Y)^>cj3| zrf9U7V`Jrc3XYE+FRiA-a<2RB$E0VDQg`g#iBsszY2|BzB()U;P$i%q^ba0hde##F zJV>!$zZzIu|A=`+DWrOH)FioD>l&FpLwR4q;=;EklGn)`Ri`1bXtrha?bb-MYgCHq z*+w}+&rG6!NGo6y8Wt@jm@EphEWFf@i>{7Vx;GM7X*Nh;G2T?ZHl@S6*O|(k=CoEb zdar2$B_?C<&~s7r2|aVdhX}jn)To}9yqZZT(oZv!0r+#p70S!Gzr#aylt|p)*G;Y~ zbia6!7%0-jJaZx?pA)wwqqICJ&>t9+`BYgn{J{^NJW?{F%{T#*P_@6$p=IJ<>|q~H zmo&S%8{tK}@@HbiUxCfG$|dGlR_d*Q|B|3|>@-oK-QH%NldOYiTb8MW-T04@&>i<H z>kL?1hDd?6Jnbe84a56bPU<oE(%={cfw-#L1Y%nTUi78n<$9J32BVwZI-eK(@ZIIQ zt`OX%$oy0w%|~fTFH3AZ8%mAdST1tDC)P5x&*W&K-kY3PcJeh#Qwo1FC6ktsm%6xl zjGEX+b1QBKFQ38nktxnxH*!kWK`{;uO@}98G4IjtU~`GA!}4rK^Y4gv&8b$V4oiWd zgu+Q2`#g_Chb{U{hRoF&F4`LW9@V4I-hN7jip-BPk~C{hAhu@6rBY`;4>BM8%0<Bp zy6Gv^CLK>6diG}UhL)LV9jUPgCUA4Hm?}0wO{5;W>vd3a>MwQV#DG%kx$={Pv{)m0 z8XCO*e9S^szIjfK$K?iZc*-bHJ=E@&R|5y$i8cxA4%>5}W1?L(D}=;sA5L_;!K<#> zcKZb=EX~A3cs<#uQ5GGde_mA0Hk<JbXI5sF5$q1mjjF{WR(<;J-F-L*FtMP3#C2#$ z^#o2)IV`k+_r7AU;w)2WH<4*P6!~0SAH!_4&!2&1`B^~c%Ibnwy~w?KgV}bUVz%R+ zbGe^!=-Cro`O8muPWNrD*Q^{o*y*S(<x=HdS11!5`dDfevV%5TlCr|&F;kb6gyBUb z9Pfi%F><0J9G+)(0xzuutQP9CcYP)Q?4L<K)rP9r%%pmqhu>u>Mu&Ml<A=#=3u9<3 zEFR}Pzc)I<=E-!J|2zB5!iQzmodFt-<)(F&=zC3XYdhpvVskwy=l37^TzXq;f=Oa& z>haQ+($=74VfLTfc=b>chhu#${k~9Nz4}aEUVd0X_{9sdpEW%A8(^PH%`CqSIPJzh zunalaI38!+2y|eisc*Qfu&t|zPDX|jzG=F{%co%VsAY)zJMWJ2-im|$3eghBq~|aE z4WD6Eu5C_^m1eB5p_cWMt=W-kcdQ;e$`^*g=N;Gqgb)SLG6Wohvk5vs3W#c1tf-f# z@W+XbFXCU&p}jL^RoNv8^il-}at`_4Teh&;PTJg39wnF!>QkLK;qjY3sjwV1ohTg* zB5lv%@>d%=_N<fof+qAgptQ`YO!zg3JDPM<8`FvJ%6w>9xDq|BO;m8-^^kS$w_@H` zG0Y@abqVyS3lDVBI9E$H@!d7E;OIN#l;Rbr>LIurl!DZY7Yl{aq*z1jT7+pbIT!^$ z%$Q;da)nAM36)+XK3pGvUt<59pHHdGhe0o0Ps--1+3D98hA;WdR7YEFMRE`y*)haC zq~i7t-y`GN8vNPr2^BuY{Q|R%w?oN-`mWKorVFj4%UVWD)?Qug$Ge%y(BldK4hjf0 z3cPxC73K#Y+R8(4i1!e5I!-cTJU#dN+l#c$e?A<=K^*Kge?hx|kEqjBhVU)ZaSvs0 zPq|o4lA}VDQOnYmCTHqQT?31YmYfuC=6o&}m_AjRG2^TFojxBGc;&f^S7eH=NnG`0 z<#hf#dvR}GdKR=-la|cH1M@;=aD#M7o2p5>Vo!+P<CABe<Wgo~5}9ZT>=_R|o#;wZ zBYTXsMYaYsstss;216g^%~yITNi%@n*l72)tAP%2*(+b{YfLkukBV1S8(d5h?57v_ za=r1_71#w|7>X}`xx!auf?;-A^zqcCI0Ebx*)v8r=tM~GiTo%O%jw7af;xR;Z4mzQ z*|}10;QZJ@Z)*>vH9&9#mz?7>;0~`46VI;x0IT7(u(K6+WWjY=C(gb+Oj0pi#cf^} z;P-f`D9hXP5tU73rOB+-SX9gUXD91h$ygkiCmrQ@=WH-jhF`i?%@pHh4Za(|i%Qyc zZd&4q!e7m<=&+Y8_Kj$=dAN+$UUGM<duV5Jk}v9b*Xz+EoVnLqnW$qQ5HDEoEk6l` z?hv9^48n0u0BM@|`#hGtZIWM-YnV3kCzk!@>7UeB@^Egapo&Qlqe|>K%5vdP#yV$1 zPDd3y6ZotfzvKFhiOzso!;rH&_5iV|uFyMT4JkS|D}%WkZE16WJ)H#%;tUYzE{+u~ zW=#IfY1zp4>sxloi1zgCVi?4qdWhP5-@%9(39fST3C+i7m-KK?VUxT3H;2@o^Xw<b zFFY%9iqL8`sEgu?EYuRlUa~0`D0+kgFOzFID+%?msYpK1Pd9%|0jd!mpdNPkOP7X5 zM#E0r$JRw+;?$*2+-vYcg}a*pY00iiw#y4|;RI{D#~$7(M<KC%SE)KTLgy_Coi>{q zH@?VQr?E^Zz^$R3e(BPs@Aq5B-;LQ6AIsgodNox_27ku#lp#$iENVW|wn@okUdL3y zR{W~LRwMTO#t-sDf9qu{=U7p#I9GMSFdg$w3C^n|c5^cLppyefQ@BIZWV8ed`$N>- z*RNjXe<0yQ5T3ZU$`yIX${r?BmCC1_V6nQu^7<Dxz2YJ*c+8ZW%rfloG**+ooKz21 zVf;3qOTgY;)))P{{$p&0ZhQVmjHrITFxb_+@bRSKVXj`?e~!#Es8OEnelk*uVKod* zw(DJ-<n>H8*QavV*E~&C`Qw%!WHzPA)4~OeQs>m*rer&_H`d$qjJ}j};klN9(Zd!_ zTkUpI$p!}oy|^p$lo-a~d{g$G!!{MwsUdH_8w*54EBxhb=%`_;!w1UE$mjfCA~&15 zkTgrUIY+#>XL`(s;gIJ&Rg>n>nQBmQwiUi+=Q4lDQC0h8M9WW+!+Kjzyh&R%*4*WL zM3lJkNrtPZr||QQ;i6L2wGCD$v<o$UWMyd;&t`w$dz@L=NTZsw9x$3;lU0yPzmHm2 zNEH{2`qV6K6*Q1SWOemw;AFsS>EGpL>a7Z1ju>+T_o9e17MdBEZy&3&!3+GO!#o>& zjUiAis#&Ax$jvOcOlM=E;qxk6Sx1<4;MZhV78;rj>=`re3VuG7s`o>0jW2$t9C}~u zZbQ?ixeLCWjMADdtZ3??+EV>MW$kBQ<CeZZ@P8Nj&hL%Zp01bso?_nQdmN)ySZs$n zKD6>)c`-ZJQhl-Rpm3%`kulE4(-VWWb@;=uu3W*El4+n%N_l@pU6bv(Ha@-(;>?BS zRFiMVuO$K<;yIpMDRFAW3GC|(f3Djl)yNa={WdT}b+>q?k@+2A7MCSk<U@{Mj9S;p z2~4$BdN@>*7r!iuGl@^8Eo;2~LVW$kbNJ%2iV?=5>y$J+SEergSa)b@5JaZuLe?Oz z`qyHtHT77h_IxX<BP+b(9Gr7=gY@16LIgMKQ{^pFmGIU*98KKk9+cL-(L~03pKgE1 zuF==2WL_)zXN1hMX>DF!x{;;h_oakzN3mTMKV{RGuP#R7o4(bmeW`I%szIdkH}|(c z@AMw4y)9~EPi7i^Tl|aO1dolgwc5aP;-T7Sea;V`>M!JLn`#>M$jeyDG~8)?vp!OD zZ=|?DV0hpYnv13Yjce3@li-OL>JBn;V|deHI_t0*9Tk}K8`<a_h8-7b7{!!lhf^CV z>`LZ`v7>%8Q?KOZNi@c$sc@*tkCt!mkrUIYR@Z(cZ?K#WTy11%4HbHy=K4f|%ARh- zUI(S)&vnFCk&D;)C0~;aLozbB746be(q;eR;)`onNuFuHp$$A2I5OCA=+VkL`pv#% zJcAxB^cw%JVwjsjL;*8ruWfnETiXYSNht)?<qc;{SNT$JoVf26mK|=Zc8p)MnO@=E z8rnFQ`&(_%^YHeymjSOsY7(nOw25>qtb5ZUei>Zs<dm2l$mq3j8Qkm-%&Xe9YvRuS z+!%Ha*MRra)^96%I!T(+`_XCK8Z~+<{F4b1)aGjF#e&2tx}~O3kKrsWHsi;}_{Q#d z#hP`dIgVy{Jnpa7vqPuRdGikpH1o!42w6AAX9(tdbE%CwdmnBE$5Y&SEIprZa&72S z#xJ$`Yr}4)zlP_?Iz#0()14M0iX863907EE<8XcY7AxjR*dAp+Psw{;OD2_v=qx(R z%Sts$w6nCqQNe!*82R^lNGC4EYgq{u)!FFDOwjI3EsvME?5?*b`~Nti3ak}FEKbsp z#lN8=5qHM4uhpM?7gO%itS#<*{V}oCy2AERay<Gcdm_<~ulTmpuk|7o!vr&!!aurU zgF)O(xRdbv`13d1uO1x8-AB1GMwCwRSAU{X8m;-r!sp+bov823tn$XsVhvz2UD*BP zc>xA&qF1f_+AESu27agC3tQb=eyb8T<{Yie_V}F-e`S?CBfZ{~oweq!+xg?M+73zQ z!}%-y??t?VzeGJIz3kJYnXXi1##p|*kB6SGH7PQWU>Qm#_n%&G-aJ<F2ve9T#amq; zao=_7q&D7jCE#$9PG45mJxHDxAANNEy|ep)<)*l<Y0P{i3(94e`WI>b^UBhtR$Yd^ ztA9fBWJ?I{9yh9&p$b>+FJ3gcJwRnh>c8&3t`*Ir-ang>-Kyuw_DOa^ay+C!)~Pk` zp3m0rEu45~SRwg(CMgwa6<>4N%j#TyEnhC{+re`ET}bilY=F7@u~=M2EL;o8cXHl{ zk-=dqF1Xm-#vyj%_b#7b$`5`R^?aING=)}D6a3v!&n8F4yaV36+kEK7&s87m$2*yS zE8kDtz5-+SR$_qcVjfxbw_zW}ETePJl?mbvgk{SHc0yM@_OGJkqBw9di#1csI?Iky zCu6^aJoa+lKO`A8dX$sjYIucNPRqf6J&z;IWV60P*hTc%YjpQW65i>J(EVF}R|KMN z5t@FatQ2aobf9*W=ry{}yeXZw&WOIRIej77<V!8xGHbk`;^pM@$Qis*L2NEXtANh} zt6%}26E4>9Uz@me>ksKm{ik>0{iFpj1xh<xqy?f0SHmSdus&U#z+GpKgawtEX+PZC zyjNt}`{1D_Z9iSVHgWh#sCKYy)MT*+2Y*U6Ppg*wot+z&acdaZI86E9GbA;ZOJ!BL zqw~LZ8>FS>V-m>r{3u~FW8m4e=@E|bxSZ|ic#&e{w`y(N#L<R7Q~A#&mkg#}PF9+m z6W?3chpF;Ms%FDcPWvX*R9E~ABJ9KosG1J-lxJRP==DFl%30^a8iuu&ZMqPhz;k^8 zmv_eUu8M-rD4|Yg-H#Mal4_6Y>(tj;m6%&Mnr$OkWU^)ZzUFlkj}R{@W7s*mb<M8Q ztrJvnm+*T(G6c%ai<d8hqN5=Ys5a-Vo3?lWXSe|;#jA7v=QNq9NgJOrMJ{z3!}Oc7 z%upvK3wo-}w(|0VEDU!Wlg2hv3B_WbNH2bq+Z8K#3%mHMs+wa33;LdiYxASAGn35J zhs9*wGM(ck96MSvHrF_vZLgCGlCsN;j2pWze;J=p{2irPeWB(GIfa<Gw7A<L(@y5t z;nb>mA4P!#XM&@ju2bxKpGh})+W1=7pC4OyvhMjfDV)5*JT~&m)KsR2UEi12w7O!A zYK^g!x!8;(R9q|VK6S}p!P3*<;jGDDPjHRcK3^VCgW&f2p59TV72W2D@*xrU*L{4& zuBpQ!<HLirrEHdCo%hFUYw9ioS`M?$x%0Pmjbq;9k<*7_FCKj7KwH0-qaznymbqNy z>G_Bx)HhdM_jgG;M1<u8tGKRpxxzyc4MTX?d*+ia`IPl(YkMpbRir(o|2!{dPm)Tz zW6bdpGN6a+DJEsoe3~OYIGA<O#x5iKY&kZ6xM#HP;t_ecT~29Mntzzm+;9}V`77)G z{m1C-!ZPZGGX6i_ok?omO)drDyvfGu{hP9uvd-4H1eY?WnP2ldZtUDY@Mtf4r%q%e zWKB`CW>dxZj!=4zC9y*7>HD+_Ta`JMpH52s&I;#Dn+6x`>>m4H_PfpT{n0z@I*K9< zva%-D%emO{%B!hqDI3lkyF#DlFdU!eov&NBVLQ3)u6c!M%p}5$v}eQ9`b(G>rC9*J z`6oFZS_w7YP^@Ai;D;4eTcrkOGx5ARSBGX^aO~G9eX~R{`aT-&_fTsSw|0j@tSOqg zf7rp+x4V#|dnP}u_BrBT$UavIDYMEFC9aZm1g`chPuBS!?i+NTd$=Ly<Zs@G+oDfh z1$7_No^-}^ErGisYVt4li8iwbgP9Xm!fHIo`KM09PGed7Li2V$uW)^BFMWCVVW+*Q zm&zY`lg^e{C!Jl-<yW`)Wtv>J!t%&Y_2yBRvasL1o=y9qW+NfSDz3LhkkGF&MtM3G zCTlt#Q?|RO{(LiQrh9;%#oy<=?K!gy``}%UlG(u?)ci)c!_{w0veBlsbqPOL*hyCm z|0hoQl4FSvhFYte=~Uu&@QnkV_lN~&4(cUu<cPk+Mwh<lB&Kg?;rPT!v=UeCJXh!V zBH-gKwaEKFRb*S{DWtU5+KX>Hil=p~Ea`Mk7gxu6x^rX~3|eiDCY|ck&XAVbYdQMs zKsd|ZBY>0F8zfgYH0U_of;T$y^sO?D)bYuUbNLu7i*`zR3u?jHJ~@RZD<)+<Cy_;? z)x6HD=L}aoiaS@P60E6_9mdc~rB~OJuV*%%e$@7VUSrXMvdG0=g0do&InQ}agp2?S z0$&5^Mh*Ps=|UAJVti3PMU1C|eOKJAH)Etm%GGcsi<b);nHR}Wxz_TpP1Jf)Ii`v? z3Q?8EM@5GUqb2SG+44I_yFw+c8nZ{CdGkj0#_d{<O(b9DQ!6Do^d>qf@J+f<)b;#H z|MXaZq}$-e?sj?RZ!N<K2oX&d2XNc-QuBYSnV1rUs&P*D<hv`Ir8=IC=~zhKr*OAT zNGHUKGdSb5g0l>*i!%(StE4qWZWYoM(xyvJEN`0~I=_qC*qL6{Ix1N=ZWs~>;Ptdr zi59Dy^TW&6N&gIG0kf&of|*F8zJOovg<PC3qzpH#<yWPto-W)4H@+)nn?vu67x+F< zy!Z_nWde`<K_9HdE<=StfgsN=+p|ZBJId#cW+?B+aBaru{9wsb$7b^mo4<Eyu6B#+ zqg%~Xb;Ahh;`mYitfgb-;IYatnMHz(*%o`-Ao(vZjiv8p;yI`P-gYMFZBy<scK7vX zIq|F`;;ro+ET5^wBG}jn2qztKco*9H`ZY^u&GF?Gy@oQnPu$NVxQ!QHRoP2O-z2<h zpy-!58VlJCZx&mEYq^AqyUsK8%((ICuJ8)wNJRLIsU~=-lZ=rEHQ03uUrugKW1Gf0 z@-*}}oTN&p#>${3W>!t<)9?HGy`qe8Y2VUv-*j)(?Xxo+lZ9CNJbHR&Bz9G&eMQh( z8N2f#GKEJan|kM$--|yndz&!S16i^4*-+fP5mK<<IW>C6BI40M1XDiddYU97Vj11L z0WtCcwU%Nrm=zU+$0MeF`_8MYpAQ^vWTrd#(%8O=?rF%rH==S%wfm>sL%{ZyUfyFL zf|pKDeX@wGmHmsf(f#%|Z8_k<al_{)R`zXkv{!?;mC!m$Pm1@HbXULlR=r#67z>{p z{fUbHsRB*~A2Hn2U8rGKO7#ZBD2NNYMzhw%3I=SpZCf-6IJ_28&NN9tkw|zc2{^rb zBK4B5p)W>jU6Bg1gG!wuJLl%bqxm%cU+;Q<bEo>lBHWrtvDe(ctf+WYxEX72GH3J& z>r;2b!Eu9u<;D?LD_cSL8*kp4q5aP2pF`!@J-vqujSBmAO?4zBPdMkeS`4fu(=%n^ z!KnT|Sn|ET7EYs`i7Zm_;(aUS7g*HmUmz9ao)KO;+3?pmsoYswCLs~0cycvTQ_HHg z9rDPSt|2)VW7}I20$;P3%!nsvd?%4v(KsnnPLom>p|br`{81|3>BIX<%wwvt_H+Id zS<z3bIvy`es#6@%AR`I`3s-4L4185q8C5YFomjRu!(7{o@VC_b?Ut9%0!zK`Mw{S^ zMD@t>d5qKDV_gg=?O~@dRPPnOtYgij^^dhZ!L4Xc84{nJdyaht?7M1@Z&Jild~C6) ze8zo+^9|?HABl*jBn|aO$Hmbqoua#}1>Q*9eqffV*B&Eyf#-w0PCe65+oZb#`+~FD zKUvsojR6XeOZ(@+ZIH6r;=<a<T;KlF_voX7LK#lQ@$t%RV~ax19yb&c)}^6T5a?he zq)cVotmvjw$)189FFI#(td?~Bp=S35oFS}Se6!}h5iNg3zT{n!+HF#y?`$F12mBR( zeDpea$~fIt1k@Ez&ZG8cSbuV7{dl>M&0)ga+fo*0qBQ79;5R#bd33sjW42qkAMbU* zZBMURiK$%rl)%Nt>77D!4wsgtZz#Xf;k_8Oje8jA-J)o6$00>69Uo8O$wVZ--<E;A zyM2|F0bMUqp5Ok&-hcq5F#m~`N?5x#nbZ}nVi|CIjv%&^F8T7Rzg;W?HlGOOfhufh ziz+nd+TORihI@@aE!1X`|4f^Wp89?i#Ga=Zj+iHwND(rw8i>iGt0w)O7#}=G*z2=2 zVQd=dNIsa8uTVUMtl(dQ{^!<uO;I`!Cv~$RrpA9}YPRB?6RT|3`(whSay)O+YuJ*V z^K;*1ZJIV;pIViAt7)#}(L~bbRAJ8FtJ{Zo;2f6Nn(vYc7<+FAiB&hI>74SX*~FWk ztYpJtind;Tx7xZZGsXB;y6IU7|Ag~bHx8ch-mWihSf3u~?A<7;vAUgb=c5X$AWu2G zT&2YJ!7gh7wg2>ZHh%c}n^SD5#?DJn#i?eG(%_+?vFNbduY;U>9pfB6x!F)#IQ=+k z=s-2LBxi*(U&rJ&{T=ti!(ol2hu=Pav$q%vcDg@-$t`3{U;H?d!3Fh!ysUJ*ph&Y= zeD&FfaD@`w3U;+j&ENLdFIl_Gr}Fu#y?A=T3>WoLvOQXuReUy#+Ei0-rR6#c!}?Pi z+hZ$YaHrtv?ca`F@54PFg8J-a!YK*3vP`F98`kTnfr}NWm)nU7X?ITL=PuCcFsvVZ z?LB9gb^7rImf-8O5<ZE8`<oLHPuf<`2~gbnDXG$|QMP}%mDMrENx>zlwSlogbI5;k z&v;R<50{)E`s9j#)Ox)LI~;Kh*RRj4aT-wf$6#V%7i=G@^hct13u4Q;wAf&QCbX&5 zR}f+Dx5l07NBVfy|MTk1?6o?}D1a2rj)9JfuK3=mykGc|p*B}M=HQr7HQ6UeIi{xm zQy{xcM%B!iI~C_z_q2vN<o)2%`1;n)%{n_#Av4j$ZFRg0C8Pq)7Cb12ka�`5o}j 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 Aod5s; literal 0 HcmV?d00001 diff --git a/23-rseq/plot.py b/23-rseq/plot.py new file mode 100644 index 0000000..c1681ec --- /dev/null +++ b/23-rseq/plot.py @@ -0,0 +1,35 @@ +#!/usr/bin/python3 + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +def read_log(fn): + with open(fn) as fd: + lines = fd.readlines() + rows = [] + for line in lines: + line = line.strip().split(" ") + header = [x.split("=")[0] for x in line] + data = [x.split("=")[1].rstrip("ns") for x in line] + rows.append(data) + df = pd.DataFrame( + columns=header, + data=rows) + for x in "threads sum aborts cputime per_increment".split(): + df[x] = df[x].apply(float) + return df + +if __name__ == "__main__": + import sys + if len(sys.argv) < 2: + sys.exit("usage: %s [LOGFILE]" % sys.argv[0]) + df = read_log(sys.argv[1]) + + per_inc = df.set_index(["mode", "threads"]).per_increment.unstack().T + + ax = per_inc.plot(marker='x', grid=True,figsize=(10,10)) + ax.set_ylim((0, None)) + ax.set_ylabel("Per Increment [ns]") + ax.get_figure().savefig('plot.png') + diff --git a/23-rseq/rseq-asm.S b/23-rseq/rseq-asm.S new file mode 100644 index 0000000..6a15529 --- /dev/null +++ b/23-rseq/rseq-asm.S @@ -0,0 +1,58 @@ +// int operation_rseq(struct rseq * rseq, struct cacheline *counters) { +// According to the Calling Convention the arguments come in registers: +// rseq: %rdi +// counter: %rsi +.p2align 4 +.globl operation_rseq +.type operation_rseq, @function +operation_rseq: +.cfi_startproc + // We will return the number of aborts in %eax. Initialize + // eax with zero + xor %eax, %eax // %eax = 0 + + // We inform the kernel that we are now within a restartable + // sequence by moving a pointer to operation_rseq_cs (see below) + // to the kernel-registered rseq object. + // After an abort, we also jump to this label (restart_ip) +.restart_ip: + // FIXME: Update rseq->rseq_cs + + // The restartable sequence + // Implements: [rseq->cpu_id].counter ++; +.start_ip: // Start of restartable sequence + // HINT: Structure of rseq is documented in /usr/include/linux/rseq.h + // HINT: rseq->cpu_id == 4(%rdi) + // HINT: Each counter-cache-line is 64 bytes lon +.end_ip: // End of restartable sequence + ret + + // The abort trampoline + + // Before the abort label, the kernel will check if a specific + // signature is present. We hide this signature in a + // well-crafted assembler instruction. + // ud1 <sig>(%rip),%edi + .byte 0x0f, 0xb9, 0x3d + .long 0x53053053 // RSEQ_SIG +.abort_ip: // On abort, the kernel will jump here + // FIXME: count aborts in %eax + jmp .restart_ip + +// } End of operation_rseq() +.cfi_endproc +.size operation_rseq, .-operation_rseq + +// struct rseq_cs operation_rseq_cs -- descriptor for our rseq +.section .data.rel.local,"aw" +.align 32 +.type operation_rseq_cs, @object +.size operation_rseq_cs, 32 +operation_rseq_cs: + .long 0 // __u32 version + .long 0 // __u32 flags + .quad .start_ip // __u64 start_ip + .quad .end_ip - .start_ip // __u64 post_commit_offset + .quad .abort_ip // __u64 abort_ip + +.section .note.GNU-stack,"",@progbits diff --git a/23-rseq/rseq.2 b/23-rseq/rseq.2 new file mode 100644 index 0000000..8882e1c --- /dev/null +++ b/23-rseq/rseq.2 @@ -0,0 +1,371 @@ +.\" Copyright 2015-2020 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.TH RSEQ 2 2020-06-05 "Linux" "Linux Programmer's Manual" +.SH NAME +rseq \- Restartable sequences and cpu number cache +.SH SYNOPSIS +.nf +.B #include <linux/rseq.h> +.sp +.BI "int rseq(struct rseq * " rseq ", uint32_t " rseq_len ", int " flags ", uint32_t " sig "); +.sp +.SH DESCRIPTION + +A restartable sequence is a sequence of instructions guaranteed to be executed +atomically with respect to other threads and signal handlers on the current +CPU. If its execution does not complete atomically, the kernel changes the +execution flow by jumping to an abort handler defined by user-space for that +restartable sequence. + +Using restartable sequences requires to register a +.BR __rseq_abi +thread-local storage data structure (struct rseq) through the +.BR rseq () +system call. Only one +.BR __rseq_abi +can be registered per thread, so user-space libraries and applications must +follow a user-space ABI defining how to share this resource. The ABI defining +how to share this resource between applications and libraries is defined by the +C library. + +The +.BR __rseq_abi +contains a +.I rseq_cs +field which points to the currently executing critical section. For each +thread, a single rseq critical section can run at any given point. Each +critical section need to be implemented in assembly. + +The +.BR rseq () +ABI accelerates user-space operations on per-cpu data by defining a +shared data structure ABI between each user-space thread and the kernel. + +It allows user-space to perform update operations on per-cpu data +without requiring heavy-weight atomic operations. + +The term CPU used in this documentation refers to a hardware execution +context. For instance, each CPU number returned by +.BR sched_getcpu () +is a CPU. The current CPU means to the CPU on which the registered thread is +running. + +Restartable sequences are atomic with respect to preemption (making it +atomic with respect to other threads running on the same CPU), as well +as signal delivery (user-space execution contexts nested over the same +thread). They either complete atomically with respect to preemption on +the current CPU and signal delivery, or they are aborted. + +Restartable sequences are suited for update operations on per-cpu data. + +Restartable sequences can be used on data structures shared between threads +within a process, and on data structures shared between threads across +different processes. + +.PP +Some examples of operations that can be accelerated or improved +by this ABI: +.IP \[bu] 2 +Memory allocator per-cpu free-lists, +.IP \[bu] 2 +Querying the current CPU number, +.IP \[bu] 2 +Incrementing per-CPU counters, +.IP \[bu] 2 +Modifying data protected by per-CPU spinlocks, +.IP \[bu] 2 +Inserting/removing elements in per-CPU linked-lists, +.IP \[bu] 2 +Writing/reading per-CPU ring buffers content. +.IP \[bu] 2 +Accurately reading performance monitoring unit counters +with respect to thread migration. + +.PP +Restartable sequences must not perform system calls. Doing so may result +in termination of the process by a segmentation fault. + +.PP +The +.I rseq +argument is a pointer to the thread-local rseq structure to be shared +between kernel and user-space. + +.PP +The layout of +.B struct rseq +is as follows: +.TP +.B Structure alignment +This structure is aligned on 32-byte boundary. +.TP +.B Structure size +This structure is fixed-size (32 bytes). Its size is passed as parameter to the +rseq system call. +.PP +.in +8n +.EX +struct rseq { + __u32 cpu_id_start; + __u32 cpu_id; + union { + /* Edited out for conciseness. [...] */ + } rseq_cs; + __u32 flags; +} __attribute__((aligned(32))); +.EE +.TP +.B Fields + +.TP +.in +4n +.I cpu_id_start +Optimistic cache of the CPU number on which the registered thread is +running. Its value is guaranteed to always be a possible CPU number, +even when rseq is not registered. Its value should always be confirmed by +reading the cpu_id field before user-space performs any side-effect (e.g. +storing to memory). + +This field is an optimistic cache in the sense that it is always +guaranteed to hold a valid CPU number in the range [ 0 .. +nr_possible_cpus - 1 ]. It can therefore be loaded by user-space and +used as an offset in per-cpu data structures without having to +check whether its value is within the valid bounds compared to the +number of possible CPUs in the system. + +Initialized by user-space to a possible CPU number (e.g., 0), updated +by the kernel for threads registered with rseq. + +For user-space applications executed on a kernel without rseq support, +the cpu_id_start field stays initialized at 0, which is indeed a valid +CPU number. It is therefore valid to use it as an offset in per-cpu data +structures, and only validate whether it's actually the current CPU +number by comparing it with the cpu_id field within the rseq critical +section. If the kernel does not provide rseq support, that cpu_id field +stays initialized at -1, so the comparison always fails, as intended. + +It is up to user-space to implement a fall-back mechanism for scenarios where +rseq is not available. +.in +.TP +.in +4n +.I cpu_id +Cache of the CPU number on which the registered thread is running. Initialized +by user-space to -1, updated by the kernel for threads registered with rseq. +.in +.TP +.in +4n +.I rseq_cs +The rseq_cs field is a pointer to a struct rseq_cs. Is is NULL when no +rseq assembly block critical section is active for the registered thread. +Setting it to point to a critical section descriptor (struct rseq_cs) +marks the beginning of the critical section. + +Initialized by user-space to NULL. + +Updated by user-space, which sets the address of the currently +active rseq_cs at the beginning of assembly instruction sequence +block, and set to NULL by the kernel when it restarts an assembly +instruction sequence block, as well as when the kernel detects that +it is preempting or delivering a signal outside of the range +targeted by the rseq_cs. Also needs to be set to NULL by user-space +before reclaiming memory that contains the targeted struct rseq_cs. + +Read and set by the kernel. +.in +.TP +.in +4n +.I flags +Flags indicating the restart behavior for the registered thread. This is +mainly used for debugging purposes. Can be a combination of: +.IP \[bu] +RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT: Inhibit instruction sequence block restart +on preemption for this thread. +.IP \[bu] +RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL: Inhibit instruction sequence block restart +on signal delivery for this thread. +.IP \[bu] +RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE: Inhibit instruction sequence block restart +on migration for this thread. +.in + +Initialized by user-space, used by the kernel. + +.PP +The layout of +.B struct rseq_cs +version 0 is as follows: +.TP +.B Structure alignment +This structure is aligned on 32-byte boundary. +.TP +.B Structure size +This structure has a fixed size of 32 bytes. +.PP +.in +8n +.EX +struct rseq_cs { + __u32 version; + __u32 flags; + __u64 start_ip; + __u64 post_commit_offset; + __u64 abort_ip; +} __attribute__((aligned(32))); +.EE +.TP +.B Fields + +.TP +.in +4n +.I version +Version of this structure. Should be initialized to 0. +.in +.TP +.in +4n +.I flags +Flags indicating the restart behavior of this structure. Can be a combination +of: +.IP \[bu] +RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT: Inhibit instruction sequence block restart +on preemption for this critical section. +.IP \[bu] +RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL: Inhibit instruction sequence block restart +on signal delivery for this critical section. +.IP \[bu] +RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE: Inhibit instruction sequence block restart +on migration for this critical section. +.TP +.in +4n +.I start_ip +Instruction pointer address of the first instruction of the sequence of +consecutive assembly instructions. +.in +.TP +.in +4n +.I post_commit_offset +Offset (from start_ip address) of the address after the last instruction +of the sequence of consecutive assembly instructions. +.in +.TP +.in +4n +.I abort_ip +Instruction pointer address where to move the execution flow in case of +abort of the sequence of consecutive assembly instructions. +.in + +.PP +The +.I rseq_len +argument is the size of the +.I struct rseq +to register. + +.PP +The +.I flags +argument is 0 for registration, and +.IR RSEQ_FLAG_UNREGISTER +for unregistration. + +.PP +The +.I sig +argument is the 32-bit signature to be expected before the abort +handler code. + +.PP +A single library per process should keep the rseq structure in a +thread-local storage variable. +The +.I cpu_id +field should be initialized to -1, and the +.I cpu_id_start +field should be initialized to a possible CPU value (typically 0). + +.PP +Each thread is responsible for registering and unregistering its rseq +structure. No more than one rseq structure address can be registered +per thread at a given time. + +.PP +Reclaim of rseq object's memory must only be done after either an +explicit rseq unregistration is performed or after the thread exits. + +.PP +In a typical usage scenario, the thread registering the rseq +structure will be performing loads and stores from/to that structure. It +is however also allowed to read that structure from other threads. +The rseq field updates performed by the kernel provide relaxed atomicity +semantics (atomic store, without memory ordering), which guarantee that other +threads performing relaxed atomic reads (atomic load, without memory ordering) +of the cpu number cache will always observe a consistent value. + +.SH RETURN VALUE +A return value of 0 indicates success. On error, \-1 is returned, and +.I errno +is set appropriately. + +.SH ERRORS +.TP +.B EINVAL +Either +.I flags +contains an invalid value, or +.I rseq +contains an address which is not appropriately aligned, or +.I rseq_len +contains an incorrect size. +.TP +.B ENOSYS +The +.BR rseq () +system call is not implemented by this kernel. +.TP +.B EFAULT +.I rseq +is an invalid address. +.TP +.B EBUSY +Restartable sequence is already registered for this thread. +.TP +.B EPERM +The +.I sig +argument on unregistration does not match the signature received +on registration. + +.SH VERSIONS +The +.BR rseq () +system call was added in Linux 4.18. + +.SH CONFORMING TO +.BR rseq () +is Linux-specific. + +.in +.SH SEE ALSO +.BR sched_getcpu (3) , +.BR membarrier (2) \ No newline at end of file diff --git a/23-rseq/rseq.c b/23-rseq/rseq.c new file mode 100644 index 0000000..18ab560 --- /dev/null +++ b/23-rseq/rseq.c @@ -0,0 +1,243 @@ +#define _GNU_SOURCE +#include <pthread.h> +#include <unistd.h> +#include <inttypes.h> +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <sys/syscall.h> +#include <stdatomic.h> +#include <string.h> +#include <sys/sysinfo.h> +#include <stdbool.h> +#include <malloc.h> + +#define die(msg) do { perror(msg); exit(EXIT_FAILURE); } while(0) + +// With modern glibc versions (>2.35), the glibc already registers +// a rseq area for each thread that is started with +// pthread_create. In that case, we derive this pointer from the +// thread_pointer(). For details, see +// https://www.gnu.org/software/libc/manual/html_node/Restartable-Sequences.html +#if __has_include ("sys/rseq.h") +#include <sys/rseq.h> + +#if RSEQ_SIG != 0x53053053 +#error "glibc defined RSEQ_SIG differently" +#endif + +static struct rseq * rseq_register() { + return __builtin_thread_pointer() + __rseq_offset; +} + +#else +#include <linux/rseq.h> +#define RSEQ_SIG 0x53053053 + +// The rseq(2) syscall has no glibc wrapper. Therefore, we define our +// own. Please run `make man` to see the man page rseq(2). +int sys_rseq(struct rseq * rseq, uint32_t rseq_len, int flags, uint32_t sig) { + return syscall(SYS_rseq, rseq, rseq_len, flags, RSEQ_SIG); +} + +struct rseq *rseq_register() { + struct rseq *ret = memalign(sizeof(struct rseq), sizeof(struct rseq)); + memset(ret, 0, sizeof(struct rseq)); + ret->cpu_id_start = -1; + ret->cpu_id = -1; + if (sys_rseq(ret, sizeof(struct rseq), 0, 0) < 0) + die("rseq"); + return ret; +} + +#endif + + + +// This data structure is exactly one cache-line wide (assuming that a +// cache line is 64 bytes). Thereby, we can allocate an array of +// cpu-local counters, where each CPU only operates on a single cache +// line. Thereby, we can avoid most side effects of cache-line +// transfers. +struct cacheline { + union { + char data[64]; + struct { + uint64_t counter; + pthread_mutex_t mutex; // Used in the lock variant + }; + }; +}; + +// We will define multiple operation_t functions that all implement +// the same behavior: They increment a cpu-local counter by 1. +typedef int (*operation_t)(struct rseq *_, struct cacheline *); + +// The simplest variant of a CPU-local counter is to get the cpuid +// with getcpu() and increment the counter. However, due to the +// read-update-write cycle, this variant is racy and will produce +// incorrect results. +int operation_regular(struct rseq*_, struct cacheline *counters) { + unsigned int cpu_id; + + getcpu(&cpu_id, NULL); + counters[cpu_id].counter += 1; + + return 0; +} + +// A correct, but slow variant uses the cache-line--local pthread +// mutex to lock the counter for the time of the operation. +int operation_lock(struct rseq*_, struct cacheline *counters) { + unsigned int cpu_id; + + getcpu(&cpu_id, NULL); + + pthread_mutex_lock(&counters[cpu_id].mutex); + counters[cpu_id].counter += 1; + pthread_mutex_unlock(&counters[cpu_id].mutex); + + return 0; +} + +// Variant that uses getcpu() + atomic_fetch_add +int operation_atomic(struct rseq* _, struct cacheline *counters) { + // FIXME: Implement variant + + return 0; +} + +// Variant without getcpu: Like operation_atomic, but uses the +// restartable sequence to retrieve the cpu id. +// Please look at /usr/include/linux/rseq.h for the documentation of struct rseq +int operation_rseq_atomic(struct rseq* rs, struct cacheline *counters) { + // FIXME: Implement variant + + return 0; +} + + +// Variant that uses no atomic operations and fully relies on rseq +// This variant is implemented in assembler (see rseq.S) +extern int operation_rseq(struct rseq *, struct cacheline*); +// FIXME: Implement counter_rseq in rseq.S + + +//////////////////////////////////////////////////////////////// +// The Benchmarking code +// +// We start NTHREADS threads and each thread executes +// ROUNDS_PER_THREAD cpu-local increments + +int ROUNDS_PER_THREAD = 50000000; + +struct thread_args { + operation_t operation; + struct cacheline *counters; +}; + + +void* thread_handler(void* data) { + struct thread_args *args = data; + + // Register rseq area or use glibc's rseq + struct rseq *rseq = rseq_register(); + printf("rseq: %p\n", rseq); + + // Execute the given operation ROUNDS_PER_THREAD times and count + // the number of aborts (only != 0 for rseq) + uint64_t aborts = 0; + for (uint64_t i = 0; i < ROUNDS_PER_THREAD; i++) { + aborts += args->operation(rseq, args->counters); + } + + // Return the number of rseq aborts + return (void*) aborts; +} + +// Print usage and exit. +static void usage(char *argv0) { + fprintf(stderr, "usage: %s <threads> <regular|lock|getcpu-atomic|rseq-atomic|rseq> [rounds]\n", argv0); + exit(EXIT_FAILURE); +} + +int main(int argc, char *argv[]) { + // Parameter Parsing. This is boring + if (argc < 3) usage(argv[0]); + if (argc == 4) + ROUNDS_PER_THREAD *= atoi(argv[3]); + + int CPUS = get_nprocs(); + int NTHREADS = atoi(argv[1]); + char *MODE = argv[2]; + + struct thread_args args; + if (!strcmp(MODE, "rseq")) args.operation = operation_rseq; + else if (!strcmp(MODE, "getcpu-atomic")) args.operation = operation_atomic; + else if (!strcmp(MODE, "rseq-atomic")) args.operation = operation_rseq_atomic; + else if (!strcmp(MODE, "regular")) args.operation = operation_regular; + else if (!strcmp(MODE, "lock")) args.operation = operation_lock; + else usage(argv[0]); + + // Initialize the CPU-local counters. Each CPU gets an struct + // cache-line on its own. We use aligned_alloc(3) to get + // cache-line-aligned memory from the allocator. + + args.counters = aligned_alloc(sizeof(struct cacheline), CPUS * sizeof(struct cacheline)); + if (!args.counters) die("calloc"); + + + // Initialize locks for the lock variant + for (uint32_t i = 0; i < CPUS; i++) { + pthread_mutex_init(&args.counters[i].mutex, NULL); + } + + + // The actual benchmarking code + //////////////////////////////////////////////////////////////// + struct timespec start, end; + // Start Time. We use the CLOCK_PROCESS_CPUTIME_ID to get the + // number of CPU-seconds spent. + if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start) < 0) + die("clock_gettime"); + + // Create NTHREADS threads + pthread_t threads[NTHREADS]; + for (uint32_t i = 0; i < NTHREADS; i++) { + pthread_create(&threads[i], NULL, thread_handler, (void*)&args); + } + + // Wait for all threads to complete and accumulate the number of aborts + uint64_t aborts = 0; + for (uint32_t i = 0; i < NTHREADS; i++) { + uint64_t thread_aborts; + pthread_join(threads[i], (void**)&thread_aborts); + aborts += thread_aborts; + } + + // End Time + if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end) < 0) + die("clock_gettime"); + + // Calculate the time delta between both points in time. + double delta = end.tv_sec - start.tv_sec; + delta += (end.tv_nsec - start.tv_nsec) / 1e9; + + // Print out the cpu-local counters. With this output and a low + // number of threads you can see the thread migration. + uint64_t sum = 0; + for (uint32_t i = 0; i < CPUS; i++) { + fprintf(stderr, "counter[cpu=%d] = %ld\n", i, args.counters[i].counter); + sum += args.counters[i].counter; + } + + // Print out the result. We also check that the threads actually + // counted correctly (state) + printf("mode=%s threads=%d sum=%ld state=%s aborts=%ld cputime=%fs per_increment=%fns\n", + MODE, NTHREADS, + sum, (sum % ROUNDS_PER_THREAD) == 0 ? "ok" : "fail", + aborts, + delta, // total cpu time that was spent + delta * 1e9 / sum // nanoseconds per increment + ); +} -- GitLab