1
00:00:01,180 --> 00:00:05,360
Let's now talk about the amazing spread operator.

2
00:00:05,360 --> 00:00:07,540
So we can use the spread operator

3
00:00:07,540 --> 00:00:12,080
to basically expand an array into all its elements.

4
00:00:12,080 --> 00:00:15,943
So basically unpacking all the array elements at one.

5
00:00:17,720 --> 00:00:19,733
So let's say that we have an array,

6
00:00:22,010 --> 00:00:24,770
so seven, eight, nine.

7
00:00:24,770 --> 00:00:29,140
And now we want to create a new array based one this array

8
00:00:29,140 --> 00:00:31,770
but with some new elements at the beginning.

9
00:00:31,770 --> 00:00:33,900
So how would we do that?

10
00:00:33,900 --> 00:00:36,050
Well, with what we already know,

11
00:00:36,050 --> 00:00:38,870
we would need to loop over this array,

12
00:00:38,870 --> 00:00:41,523
or even worse, do it manually.

13
00:00:42,540 --> 00:00:44,920
For example, like this.

14
00:00:44,920 --> 00:00:48,593
Let's call it the Bad New Array.

15
00:00:49,560 --> 00:00:52,380
So if we wanted to add one and two

16
00:00:52,380 --> 00:00:54,000
to the beginning of this array,

17
00:00:54,000 --> 00:00:56,920
we would have to write one, two,

18
00:00:56,920 --> 00:00:59,473
and then each of these elements.

19
00:01:00,970 --> 00:01:03,653
So that would be arr. 0,

20
00:01:05,585 --> 00:01:06,543
arr. 1,

21
00:01:09,250 --> 00:01:10,543
and arr. 2.

22
00:01:15,670 --> 00:01:18,420
Okay, let's take a look.

23
00:01:18,420 --> 00:01:20,430
And now we need to get a new array

24
00:01:20,430 --> 00:01:22,630
with the three original elements

25
00:01:22,630 --> 00:01:26,320
and then a one, two at the beginning of that array.

26
00:01:26,320 --> 00:01:28,510
Okay, and this is actually quite

27
00:01:28,510 --> 00:01:31,110
a common operation that we need to do

28
00:01:31,110 --> 00:01:33,800
and so we can now, since ES6,

29
00:01:33,800 --> 00:01:35,600
do it in a much better way

30
00:01:35,600 --> 00:01:38,120
using the spread operator.

31
00:01:38,120 --> 00:01:39,620
So with the spread operator,

32
00:01:39,620 --> 00:01:41,393
it's gonna work like this.

33
00:01:42,530 --> 00:01:44,023
So let's create a new array.

34
00:01:45,050 --> 00:01:48,803
So this is the good, let's say New Array.

35
00:01:50,080 --> 00:01:53,640
And then, again, we use one, two,

36
00:01:53,640 --> 00:01:55,670
and then we use the spread operator,

37
00:01:55,670 --> 00:01:57,540
which is dot dot dot,

38
00:01:57,540 --> 00:01:59,710
to basically expand this array

39
00:01:59,710 --> 00:02:02,890
into all of its individual elements.

40
00:02:02,890 --> 00:02:04,150
So let's see the result,

41
00:02:04,150 --> 00:02:06,693
and then I will explain it a little bit better.

42
00:02:07,950 --> 00:02:11,490
So new array, and you see that we get

43
00:02:11,490 --> 00:02:14,180
the exact same result here.

44
00:02:14,180 --> 00:02:16,270
So what the spread operator does

45
00:02:16,270 --> 00:02:18,350
is to basically take all the values

46
00:02:18,350 --> 00:02:20,800
out of this arr. array,

47
00:02:20,800 --> 00:02:22,790
and then write them individually

48
00:02:22,790 --> 00:02:27,040
as if we wrote seven, eight, nine here manually.

49
00:02:27,040 --> 00:02:31,630
All right, so if we wrote it without these three dots,

50
00:02:31,630 --> 00:02:33,530
then we would have this array,

51
00:02:34,634 --> 00:02:37,801
so this arr. array inside of this one.

52
00:02:39,070 --> 00:02:40,490
So just like this.

53
00:02:40,490 --> 00:02:43,920
So one, two, and then an array of seven, eight, nine.

54
00:02:43,920 --> 00:02:46,030
And that's because here, we are including

55
00:02:46,030 --> 00:02:47,730
this entire array.

56
00:02:47,730 --> 00:02:50,330
But with the spread operator, again,

57
00:02:50,330 --> 00:02:53,680
it's like taking all the elements out of the array

58
00:02:53,680 --> 00:02:55,970
and writing them here manually.

59
00:02:55,970 --> 00:02:57,600
And so when we do this,

60
00:02:57,600 --> 00:02:59,140
we then get seven, eight, nine,

61
00:02:59,140 --> 00:03:03,330
individually here, represented in this new array.

62
00:03:03,330 --> 00:03:07,190
So what this means is that we can use the spread operator

63
00:03:07,190 --> 00:03:09,480
whenever we would otherwise write

64
00:03:09,480 --> 00:03:12,630
multiple values separated by commas.

65
00:03:12,630 --> 00:03:14,400
And that situation happens

66
00:03:14,400 --> 00:03:16,810
whenever we write an array literal

67
00:03:16,810 --> 00:03:18,833
like we did up here.

68
00:03:20,190 --> 00:03:22,350
So that's the first situation in which

69
00:03:22,350 --> 00:03:25,770
it's very useful to expand an array.

70
00:03:25,770 --> 00:03:27,590
And the second situation is

71
00:03:27,590 --> 00:03:31,000
when we pass arguments into functions.

72
00:03:31,000 --> 00:03:33,920
So, for example, let's say

73
00:03:33,920 --> 00:03:37,600
that we wanted to actually log the individual elements

74
00:03:37,600 --> 00:03:39,403
of this new array here.

75
00:03:40,630 --> 00:03:42,630
So if we simply logged the array,

76
00:03:42,630 --> 00:03:44,860
then it's, of course, gonna look like this.

77
00:03:44,860 --> 00:03:47,910
It's just one value with just the array,

78
00:03:47,910 --> 00:03:50,330
it's just one big value.

79
00:03:50,330 --> 00:03:53,580
But if we use the spread operator

80
00:03:53,580 --> 00:03:55,683
to expand the new array,

81
00:03:56,750 --> 00:03:59,070
then see what happens then.

82
00:03:59,070 --> 00:04:03,070
So now it logged the individual elements of the array.

83
00:04:03,070 --> 00:04:05,560
So this would be the same as writing

84
00:04:05,560 --> 00:04:10,560
one, two, seven, eight, nine individually.

85
00:04:10,600 --> 00:04:13,140
So once again, whenever we need the elements

86
00:04:13,140 --> 00:04:14,940
of an array individually,

87
00:04:14,940 --> 00:04:16,899
then we can use the spread operator.

88
00:04:16,899 --> 00:04:19,839
And that is useful when we write an array

89
00:04:19,839 --> 00:04:22,360
and when we need to pass multiple elements

90
00:04:22,360 --> 00:04:25,540
into a function like we did here.

91
00:04:25,540 --> 00:04:30,030
All right, so let's see a bit more useful example.

92
00:04:30,030 --> 00:04:33,060
So in this example, we will create an array

93
00:04:33,060 --> 00:04:37,440
with one more food item in the main menu array.

94
00:04:37,440 --> 00:04:42,440
So that main menu is here at restaurant dot main menu,

95
00:04:43,640 --> 00:04:46,723
and so basically we want to create a new menu here.

96
00:04:47,750 --> 00:04:52,750
So const, new menu, and then let's say

97
00:04:54,230 --> 00:04:56,150
that we want the original array

98
00:04:56,150 --> 00:04:58,830
plus one new element.

99
00:04:58,830 --> 00:05:02,343
So we can do that by simply expanding the array,

100
00:05:03,710 --> 00:05:07,360
so that's restaurant dot main menu,

101
00:05:07,360 --> 00:05:09,590
and then we can add other stuff.

102
00:05:09,590 --> 00:05:12,216
So let's say gnocci,

103
00:05:12,216 --> 00:05:15,530
at least that's how I think it's spelled

104
00:05:15,530 --> 00:05:17,833
or pronounced in Italian.

105
00:05:18,780 --> 00:05:22,803
And so let's have a look at our new menu,

106
00:05:23,970 --> 00:05:27,010
and indeed, it has the three original elements,

107
00:05:27,010 --> 00:05:29,450
plus the gnocci.

108
00:05:29,450 --> 00:05:32,440
And keep in mind that here, we are indeed

109
00:05:32,440 --> 00:05:35,600
creating a completely new array, all right?

110
00:05:35,600 --> 00:05:37,470
We are, of course, not manipulating

111
00:05:37,470 --> 00:05:41,060
the restaurant dot main menu array.

112
00:05:41,060 --> 00:05:43,540
So we are building a new array from scratch,

113
00:05:43,540 --> 00:05:46,780
and you can see that here by the square brackets.

114
00:05:46,780 --> 00:05:50,110
So this brackets syntax here is simply the way

115
00:05:50,110 --> 00:05:53,470
in which we have always been writing new arrays.

116
00:05:53,470 --> 00:05:56,150
And so here, again, we are writing a new array

117
00:05:56,150 --> 00:05:59,820
but simply based on expanding this array,

118
00:05:59,820 --> 00:06:02,083
and then adding another element to it.

119
00:06:04,150 --> 00:06:05,640
Okay.

120
00:06:05,640 --> 00:06:09,110
Now you might have noticed that the spread operator

121
00:06:09,110 --> 00:06:12,140
is actually a bit similar to destructuring,

122
00:06:12,140 --> 00:06:16,262
because it also helps us get elements out of arrays.

123
00:06:16,262 --> 00:06:20,140
Now, the big difference is that the spread operator

124
00:06:20,140 --> 00:06:22,610
takes all the elements from the array

125
00:06:22,610 --> 00:06:25,590
and it also doesn't create new variables.

126
00:06:25,590 --> 00:06:28,230
And as a consequence, we can only use it

127
00:06:28,230 --> 00:06:30,810
in places where we would otherwise

128
00:06:30,810 --> 00:06:33,093
write values separated by commas.

129
00:06:33,930 --> 00:06:35,740
And, in case you're taking notes,

130
00:06:35,740 --> 00:06:39,240
probably what I just said would be very helpful

131
00:06:39,240 --> 00:06:40,843
to have as a note.

132
00:06:42,230 --> 00:06:45,640
Next, let's learn about two important use cases

133
00:06:45,640 --> 00:06:47,400
of the spread operator,

134
00:06:47,400 --> 00:06:50,550
which is to create shallow copies of arrays,

135
00:06:50,550 --> 00:06:52,723
and to merge two arrays together.

136
00:06:55,640 --> 00:06:57,390
So let's say copy array,

137
00:06:57,390 --> 00:07:01,270
and so let's simply create a copy of the main menu.

138
00:07:01,270 --> 00:07:06,270
So main menu copy, and so let's write a new array,

139
00:07:07,520 --> 00:07:10,490
and into that new array, we will put all the elements

140
00:07:10,490 --> 00:07:13,003
that are currently in the main menu.

141
00:07:14,760 --> 00:07:19,760
So at restaurant dot main menu, and that's it.

142
00:07:19,890 --> 00:07:24,180
So here we just created a shallow copy of this array.

143
00:07:24,180 --> 00:07:27,400
So that's a little bit similar to object dot assign

144
00:07:27,400 --> 00:07:30,350
that we used in the previous section, okay?

145
00:07:30,350 --> 00:07:34,750
But here, this syntax is actually a lot easier to use.

146
00:07:34,750 --> 00:07:36,803
Now to join two arrays together,

147
00:07:38,040 --> 00:07:41,560
so join two arrays or more, of course,

148
00:07:41,560 --> 00:07:43,910
we can use the same technique.

149
00:07:43,910 --> 00:07:46,110
And so maybe, at this point, you can already guess

150
00:07:46,110 --> 00:07:47,771
how that would work, and so

151
00:07:47,771 --> 00:07:50,480
you can do this, actually, as a challenge.

152
00:07:50,480 --> 00:07:52,090
So pause the video right now,

153
00:07:52,090 --> 00:07:57,090
and create this variable menu which will be an array

154
00:07:57,920 --> 00:07:59,670
which contains the whole menu.

155
00:07:59,670 --> 00:08:02,850
So both the main menu and the starter menu.

156
00:08:02,850 --> 00:08:05,100
So take a minute and try it on your own here.

157
00:08:06,980 --> 00:08:10,260
All right, so hopefully, you managed to do that.

158
00:08:10,260 --> 00:08:11,950
And so the secret here, again,

159
00:08:11,950 --> 00:08:13,993
is to use the spread operator.

160
00:08:15,530 --> 00:08:20,530
So restaurant, and let's start with the starter menu.

161
00:08:20,610 --> 00:08:23,680
So that's gonna be our first couple of elements

162
00:08:23,680 --> 00:08:26,700
in this new array, and then, of course,

163
00:08:26,700 --> 00:08:29,290
we can use the spread operator again,

164
00:08:29,290 --> 00:08:32,403
and then this time expand the main menu.

165
00:08:34,549 --> 00:08:36,373
Dot main menu.

166
00:08:38,429 --> 00:08:40,460
And so now we end up with an array

167
00:08:40,460 --> 00:08:43,320
containing all the food items that are both

168
00:08:43,320 --> 00:08:45,770
in the starter and the main menu.

169
00:08:45,770 --> 00:08:48,800
And again, because here, with this spread operator,

170
00:08:48,800 --> 00:08:51,406
we took all the elements out of the starter menu

171
00:08:51,406 --> 00:08:54,866
and basically wrote them here into this new array,

172
00:08:54,866 --> 00:08:58,053
and then the same with the main menu.

173
00:08:59,010 --> 00:09:02,200
All right, so I told you that the spread operator

174
00:09:02,200 --> 00:09:05,960
works on arrays, but that's not entirely true,

175
00:09:05,960 --> 00:09:08,280
because actually, the spread operator

176
00:09:08,280 --> 00:09:11,610
works on all so-called iterables.

177
00:09:11,610 --> 00:09:13,800
Now what is an iterable?

178
00:09:13,800 --> 00:09:17,320
Well, there are different iterables in JavaScript.

179
00:09:17,320 --> 00:09:19,200
And we will talk about all of them

180
00:09:19,200 --> 00:09:20,830
by the end of the course,

181
00:09:20,830 --> 00:09:23,160
but for now, just know that iterables

182
00:09:23,160 --> 00:09:28,160
are things like all arrays, strings, maps, or sets,

183
00:09:28,680 --> 00:09:30,600
but not objects.

184
00:09:30,600 --> 00:09:33,280
So basically, most of the built-in data structures

185
00:09:33,280 --> 00:09:38,280
in JavaScript are now iterables, but except objects.

186
00:09:38,340 --> 00:09:40,490
So let me actually write that here for you.

187
00:09:41,330 --> 00:09:46,330
Iterables are arrays, strings, maps, and sets,

188
00:09:50,310 --> 00:09:53,300
but not objects.

189
00:09:53,300 --> 00:09:57,160
Now anyway, since strings are also iterables,

190
00:09:57,160 --> 00:09:59,620
that means that we can use the spread operator

191
00:09:59,620 --> 00:10:00,993
on a string, as well.

192
00:10:02,450 --> 00:10:04,313
So let me quickly show that to you.

193
00:10:05,470 --> 00:10:10,003
So let's just create a quick string here, Jonas,

194
00:10:10,950 --> 00:10:13,180
and then I want to create an array

195
00:10:13,180 --> 00:10:16,000
which contains all the individual letters,

196
00:10:16,000 --> 00:10:18,030
plus some other elements.

197
00:10:18,030 --> 00:10:21,693
So, let's call this one letters,

198
00:10:23,200 --> 00:10:25,490
and then we create a new array

199
00:10:25,490 --> 00:10:28,223
and expand the string here as well.

200
00:10:29,760 --> 00:10:32,100
Then here I want an empty string,

201
00:10:32,100 --> 00:10:34,223
then here I want an S,

202
00:10:36,220 --> 00:10:39,360
and then let's log it through console,

203
00:10:39,360 --> 00:10:42,383
and tnow it will make a little bit more sense.

204
00:10:43,710 --> 00:10:47,610
All right, and so indeed, here we get this array,

205
00:10:47,610 --> 00:10:50,160
where each letter of the original string

206
00:10:50,160 --> 00:10:52,800
is now an individual element.

207
00:10:52,800 --> 00:10:56,790
So just like we expanded, so we unpacked an array,

208
00:10:56,790 --> 00:10:59,570
we now did the same thing with a string.

209
00:10:59,570 --> 00:11:01,090
Now just keep in mind

210
00:11:01,090 --> 00:11:03,840
that we can still only use the spread operator

211
00:11:03,840 --> 00:11:05,470
when building an array,

212
00:11:05,470 --> 00:11:09,300
or when we pass values into a function.

213
00:11:09,300 --> 00:11:12,853
So for example, we can also do this.

214
00:11:15,070 --> 00:11:17,520
So expand the string here,

215
00:11:17,520 --> 00:11:20,673
and so then it is the same thing as writing this.

216
00:11:23,070 --> 00:11:27,563
So J, O, and so on and so forth, right?

217
00:11:28,800 --> 00:11:32,653
So, indeed, here now we get all the individual elements.

218
00:11:33,570 --> 00:11:36,530
All right, so for example, what we can't do

219
00:11:36,530 --> 00:11:40,643
is to use this to build a string using a template literal.

220
00:11:44,470 --> 00:11:48,053
So here, this is not gonna work.

221
00:11:49,060 --> 00:11:51,440
And that's because this is not a place

222
00:11:51,440 --> 00:11:55,143
that expects multiple values separated by a comma.

223
00:11:56,650 --> 00:12:00,890
So you see unexpected token, all right?

224
00:12:00,890 --> 00:12:04,640
So again, multiple values separated by a comma

225
00:12:04,640 --> 00:12:06,670
are usually only expected

226
00:12:06,670 --> 00:12:09,160
when we pass arguments into a function,

227
00:12:09,160 --> 00:12:11,510
or when we build a new array.

228
00:12:11,510 --> 00:12:12,950
So take note of that,

229
00:12:12,950 --> 00:12:15,360
because that is important to understand

230
00:12:15,360 --> 00:12:17,600
about the spread operator.

231
00:12:17,600 --> 00:12:21,370
Okay, but now enough with building arrays.

232
00:12:21,370 --> 00:12:23,740
Let's now actually write our own function

233
00:12:23,740 --> 00:12:25,970
that accepts multiple arguments

234
00:12:25,970 --> 00:12:27,730
and then use the spread operator

235
00:12:27,730 --> 00:12:30,230
to actually pass those arguments.

236
00:12:30,230 --> 00:12:34,630
And so that's gonna be a very real-life example right there.

237
00:12:34,630 --> 00:12:37,752
So let's add here another method now,

238
00:12:37,752 --> 00:12:40,410
and so, let's say that we want a method

239
00:12:40,410 --> 00:12:43,090
to order just pasta, okay?

240
00:12:43,090 --> 00:12:45,300
And the pasta always needs to have

241
00:12:45,300 --> 00:12:47,363
exactly three ingredients.

242
00:12:48,300 --> 00:12:53,300
So let's say order pasta, and it's gonna be a function,

243
00:12:54,770 --> 00:12:57,453
and so now here, we need three ingredients.

244
00:12:58,510 --> 00:13:03,033
So let's just call them ing. 1, ing. 2, and ing. 3.

245
00:13:04,770 --> 00:13:09,310
And then just log them to the console, some string,

246
00:13:09,310 --> 00:13:13,720
here is your delicious pasta

247
00:13:15,128 --> 00:13:17,423
with ing. 1,

248
00:13:19,630 --> 00:13:21,290
ing. 2,

249
00:13:21,290 --> 00:13:25,450
and ing. 3.

250
00:13:25,450 --> 00:13:27,850
So up here, we have an error,

251
00:13:27,850 --> 00:13:30,143
so this should be number three.

252
00:13:32,390 --> 00:13:34,890
And then, let's now call this function.

253
00:13:34,890 --> 00:13:37,210
So order pasta.

254
00:13:37,210 --> 00:13:38,540
Now what I want to do here

255
00:13:38,540 --> 00:13:40,680
is to actually get these ingredients

256
00:13:40,680 --> 00:13:42,430
from a prompt window.

257
00:13:42,430 --> 00:13:45,380
So remember the prompt function that we can use,

258
00:13:45,380 --> 00:13:48,653
and so let's create an array called ingredients.

259
00:13:52,580 --> 00:13:55,060
And each element here will be defined

260
00:13:55,060 --> 00:13:56,363
by a prompt window.

261
00:13:58,010 --> 00:13:59,497
So this here now has nothing to do with

262
00:13:59,497 --> 00:14:00,990
the spread operator,

263
00:14:00,990 --> 00:14:03,200
it's just a way so that we can actually

264
00:14:03,200 --> 00:14:06,210
input the data ourselves.

265
00:14:06,210 --> 00:14:07,163
So let's say,

266
00:14:09,906 --> 00:14:12,033
and here we need to escape this,

267
00:14:12,870 --> 00:14:16,793
So let's make pasta.

268
00:14:18,150 --> 00:14:21,010
Ingredient one.

269
00:14:21,010 --> 00:14:24,700
And I think, I didn't show you this escaping here before.

270
00:14:24,700 --> 00:14:29,170
So here, when we simply write this sin6ϑeqa"zƎAٙ܊ dfBw''ܿZ9H4&)1Ӏaza|FCLlX&6#	T շ{=~~ZNٹfRKHԄ1%;;{Đɥ	yMdSl`VUaT!Svko.@4|}?n[Eatֻ
^<H3*N-~q$KmԠǡc8PA$;.|Z;z*} 8[ڻ s^ANA(|6fѓi~L/*;hjrbs{'Tx`9mKƓ:Kh^+iya>V=Ϫe(BlӁig_y簥C2F;QKn)C
FS9`FPbn E &	2OObՌD;U{6z=OyBǾj6>iқ֠޴?`^⚅'$ĚM!C+F-,yf] 퀋YaՓcĩƢ)dT)2.}yҵ%ǫu@E}0GdeP2,kʚ0?R[4L6[FAɿڞ*P2Ce&Bb%[eavT6Ǹ"J 1?hqњZlNn] V-8N/! yĭوhk	<,|Q(0kx2YNS|u\4ag4jEtz`=@k{*Uql G9^Q1ua`@Ֆ{#TZ¡B[*<>@z.$ܨZ BP-"i%*CqוJD烿DV=)J>TlF2.LM,[ fv V}E`N2t}(m:oKϑ*QT[z4S]8C740A6M1V
!;CgoŖAWܟ
8'u3G%d
&e"G)8@9qI݄o(cò|EGeY8aMb,URѾ  ho.C̒Uy\
Ţ7I(/:Ye4Z#dœ]m@ڤDRv=eGmZZ#r~o;2(ُW""EJXCS3.+w+n{I#Xh!	m
puo̮yKQ{R{`bn"k~xijp7)CL#|ʡ._+iϦJf0h>~b
-Bߐ9["}()tY}R8j{XGwd~=61ö+JdZ&R<ʃ5<NtM9jw:E7.Mz\uz[#Bܮ)),'&_B:֌Hw}|,De,oCSd5SHW 'ɓQHff8djL(+l[㘘׿2j- 8"&b3mBIW@5_.߻7=o ϵp++q1b.Z-V4k6XYT KN;gdL+qQxXLmۡhk8N?
ͧ^e3c@*#Z6Qu8=۠|1=2~jPQB2BaQ7?!8t|{)Hr]Yn%/IE|]&1JFn'P:+hi8cT+2A"5
^]S$QˊTaV~ٝZS8Ӵ{ȫS^]
vRc.7{=vJ`C.kg܈"ۓvpX`Q"`ϖء:XڰK'&#W֨]o l`^sZ))k+ψ!|{1"!En2i 汧Ojh?5qHӸ`F}$Ak=u MB`4J(tiϤdBwK
8`a[ZG4	nt:&j_U@*U(qi ڌI@b-a~&ڱ-gBZAgV9wpyl_$,RWrD=k{9}k~Kbi]L6ʭH0_o枻 TJSy,u<,no-:5+p7aM =!t^Uw%(LP`/=<yk]xDkJYNb;ҮH]	5+HL#8@d>5GpawC}5B3pLYUcB-g)nG	ÿxַ8髐O9P<sQWZr9eTe%k
t*`lYca xqޥN_@v>DRS)Ơ+] j$a%Pgb٣3#LAN	yO,Iv V}t`qd8ÿFQa)Kp.z
5f:	eaɂfL<4j:[ĪSǶOjz=/}lϝOIWK
{UجC2lm`j;
ok2>XjGR <ʹ:"[+ֆpIkMPp
^BIʪ2,i=d|Zm6@(Qtbcipʢ;XfO|ٚGA#`Mn˔|?$Cr
<5s[ᘆ[ޣlBIF&jDv{Z9לYxv07ɌuzSZlO{u 1aˣf;f{ymz,&>̨ɄO>@QOspޑsH|RTÇi?dsz?}?Y<]pQ\h!
.n*cApIoy6ٮmR]G3'#8{c`M{S6~*>Eot ajJLb%ȕp!M_j´Ӓ8[/An/IF^|a"C%	W	ODE4"hdQD#󢱉`Z[װ}D\Z5Qd2nb.b+,r[?3&[C8
К7RU [ZO"A.spD>+WDrȗNVxg<BAAN^{DTa͎C	ؿ۱2c΢|o1i\m7agX-fKhƴb<sU.;\<p,OxAZ@,٥˔ɟb9o&MNd-{#?/zlu
OF@Th`FfZtxJGMO[YLTG9mCsA!eMlCc9S"6{),n!NH;&!^VlLx`k]mp¶{{]wR])Tč(@SF2bbb6 9LZK,#M(BH362>?2J^jFlKU]!UkD*52S*M"G?LEcqBdɁrtBXZndT;le=j-GàpyF8.|.ߠTU`fZ*:(Q1ӿFLEw)ȻbE>!Dbv0OY+eH#:_GD+7z:"3mSIր7%|њu\pI]RߙV; Ёx'=0QVLBT-RMEp=lOW\/5.Az1^db^<a[<RNv1zI$2Hox*A~ix+?ȯJR\/Č}
[xq ke760 @L[4hAZ#Z2S~	yu՟?yGuve#3p-)DH^'̒ZAkAHk:s낂1˖yRn7>BJ-d
r]woM_!q^O%a/ǖjЌI:l/yvE=P`0i0k*)9VI4oBhvT7e-2\&F:!j^@Wb27zcKs'#-I :PXL]̓pU'msyB@35R	JAW[ɳ^E'aH FZB;//c2-ښue:l'5o*/~`ɲo6;82&,8zw1Lȉ?@1+WJbaƻrGdZ&\V#b!`3$+t@/ӕELK%G&B>+ct穮S;GuqǛ6BV/Wf(kβ54,ܹ`*n(B6ٕjn^({*l}聻E"7fe7K0J_R2LY-|84428rşsy{detR_V8=~`4fKpEʝ;D`օ<Ң86LU+k!&%9@o鱞*.ēFO~+rϑy08KL'^ǀ`?.@9ru%IHMGȍ/t:gk|W4|&-tN
>iwT-4s.s ۅDPObV-'"~a+vG
zaߠch:9̾|<!AF&OT.˺&pyQjLok`j@.~߽99sw5,@aFGy̖4&=@q*՟h'{\[OqlZo|%Ёt;(Tal.Z5a=,.+xp"@xR{U݈ uɦ׺2J4E㵦	/QrNir)
o1&c,IwT4L(E^1]L4>v> qp䖫D"[T:=(ݡxeĶ.xLc@il/!i"Cuv
G!{;ӊGIM  Qikua	e#W;=|OB"j!()v"%<@ ̈*Ð*#rmy) Nw
"zN^SaCj,_50Q涞@ǅ$&ڝ	F|jY?*W0$(n犢;XW`ָ`;xg&.tGr)1l3P4$j5z'R}W|F)!i+X%UEBOT'G'0[9(nF/Fg	爋4H`c+	1Ne|>?V~{~%9iG.eR_jj2W.Ι{wK#)UOp#ǀ%9ؚrrs& 8O`t]R=TՕR+_T'lB"}ڶNPeV2(rYCp[[276<S'szABY[,-NGܔ~/r{mN0]-a׽{Hki#/,!vR6f;i]zF7pM_xmy0ۙ#`e2?\j`D!Ar+2T	5XUbn(+
	aI!/d$aw!!eN./OLcҏ0{W_B!կx
hͳ@Bl	TbI4Bxfoi	BnU))C@cpV7"ٕ^On%ZM
0|aTQQ75R<1+VZ>ۨ4fvnN6>!NA;û偨m]A2҈}i$J
BnR;7]D;Wx		qV+àE)):Tsu(s,TNAx{Nʵ@uZ>'B^gݺwan|rN(I`~Ƿk}dJxZEBQ*o)ְ"粶Tx[JA&VT#x9N7ı.L;g'PPRU.6}`GWM*3b-)4ZX5SLr{ߕ^eK-9k;)D'&ZA`Vu+p(/(%3Ӈ(<0:o!`VH	:"xH>MCeyT|b |0$+ܚoO[/3?'S[DOZL/IpZнqtFS}!lGYK7(c(E?$@jӑG R1XB{^j,hl?ZUaH,Ʀ8Ck~.Z@x*`NVIbޖK:t*8A8W` ?~yīYt##RFp>M-ﱉU\uT(MQ؜rqA(|A< a81ɉiI<K?l09fﳌ*-kd^l4.i0'Y["A(fMԱxN+"m)-CoHyFb>~KvVsƯ(Js??:>aOt*;0o^utޖ2ќOa~ƒ5U֪8,]tH 9v_xeZTKEC^f\TJ%/WydƘ~/Y_Th0Q^|}YD\!h27|C+(L6f1Ko"Y`sy~ӔB+Ww[-!{QDbP;9ҀZiY!m.EP̣YُLlX)=?yG,|{Zt^-hkq%uq66G;Dr_H,RNw!>*-BB0Z#XǒCRYİ|ńeOcnlֺG;_T<Ru"[Ql,sx[Z)g4CA)7D>CCz5RV!Pdû7oP敐HZ%R܃g)bt Ë	?9I_X=Gwg|@̀!u#*(+=.	7wʇˇ]͓}¤ŐHsəҷO1kւ1V~~yf\RiVy<[&+\BƊm;<!Fߢv<2hrp~S>H_y\oH ji^WX	Ϋg}Yc	on]`9DdjOl>9Bm잕7mYH4R
H1lG 3/WI*7+h+gq8UC`3vCposEx3dGh(73>L0E7m,p}zcheTDq;EXC޼Ptsz[_D` : ͥ^Wi5IG!Fvc=!Ƌ[#G43={ejA	%@zAo<BeƑ<S(H{y5qodѳa'#QрHOZEj ZR)|ekOg|f:CzS:|ڔ|mt럩-ћEg k'D]MIsҡ[JP0b&dTczk!_u ߾Ψa3jjqQcrts|]kdb])KCzׅxXte| /yY=Z)"C@hud9@mɣ1g|ҭ2zHe$=\OowyԥWlPM UZiC(6$oJ.'iudګ¡.]V'̐iͷI83\WTۋG3=H,2خwv,l&^xm¥~Qb:HOG:*cJ8e|=b,&ꡈ8͹-´/u1Aҡ&+Ug]%|bv_Nc+YgdMk7+! A/U·R)qIopV^Tv2|%S;Y^%FHJ~qe(ʹϟp = h$Ƞ2p$+NYသ-ɯ30#Ea3tGɺCTfIZ{ޟ;~)v|`jQ!EJܟ|hA3TIv8ܴa- OKΪPͅ1o!9Q]CTJe{Tfh7%maEer1U>%y:M7gxOcI3xGFW8$C>S'nJLFrqUR&WCՑ	8k2\p,~A0(|ZZE^4A;MOwa$ekr<ORTOPm1Q~C$r}}WUB2ȔSۥz%MsKJskcaĖ2OM6Ir7lu5|)L婟ƧRC撅#>gN*_4$>2:b"QL