From 78c7c31361cbfef7be001216ecf2381bae2a6a27 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Wed, 6 May 2020 17:05:03 +0530
Subject: [PATCH 01/19] Updated readme.md
Added my name and the topics covered(to be covered) by me.
---
FSF-2020/series-and-transformations/README.md | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/FSF-2020/series-and-transformations/README.md b/FSF-2020/series-and-transformations/README.md
index e69de29b..2b71bd00 100644
--- a/FSF-2020/series-and-transformations/README.md
+++ b/FSF-2020/series-and-transformations/README.md
@@ -0,0 +1,7 @@
+Contributer: G Sri Harsha
+Sub-Topics Covered: Power Series
+ Taylor Series
+ Laplace Transformation
+ Fourier Transformation
+ z-Transform
+ Constant-Q transform
From 2cb7d8913e043062b8cdcbc2b140a844f8a8914b Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Wed, 6 May 2020 17:06:36 +0530
Subject: [PATCH 02/19] Update README.md
---
FSF-2020/series-and-transformations/README.md | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/FSF-2020/series-and-transformations/README.md b/FSF-2020/series-and-transformations/README.md
index 2b71bd00..66d09424 100644
--- a/FSF-2020/series-and-transformations/README.md
+++ b/FSF-2020/series-and-transformations/README.md
@@ -1,7 +1,11 @@
Contributer: G Sri Harsha
-Sub-Topics Covered: Power Series
- Taylor Series
- Laplace Transformation
- Fourier Transformation
- z-Transform
- Constant-Q transform
+
+Sub-Topics Covered:
+
+ - Power Series
+
- Taylor Series
+
- Laplace Transformation
+
- Fourier Transformation
+
- z-Transform
+
- Constant-Q transform
+
From 3b00f2e49609f5f5063b7233eedfb303376a5354 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Wed, 6 May 2020 17:07:11 +0530
Subject: [PATCH 03/19] Update README.md
---
FSF-2020/series-and-transformations/README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/FSF-2020/series-and-transformations/README.md b/FSF-2020/series-and-transformations/README.md
index 66d09424..18ad55e2 100644
--- a/FSF-2020/series-and-transformations/README.md
+++ b/FSF-2020/series-and-transformations/README.md
@@ -1,4 +1,4 @@
-Contributer: G Sri Harsha
+Contributer: G Sri Harsha
Sub-Topics Covered:
From 9168c4f88ef2152a3a3c3d110ff659adf8d37972 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Wed, 6 May 2020 17:08:15 +0530
Subject: [PATCH 04/19] Update README.md
---
FSF-2020/series-and-transformations/README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/FSF-2020/series-and-transformations/README.md b/FSF-2020/series-and-transformations/README.md
index 18ad55e2..47472059 100644
--- a/FSF-2020/series-and-transformations/README.md
+++ b/FSF-2020/series-and-transformations/README.md
@@ -1,5 +1,7 @@
Contributer: G Sri Harsha
+GitHub Handle: GSri30
+
Sub-Topics Covered:
- Power Series
From 4de00828ff1847824504ca034d0a70e401db1d2c Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Sat, 16 May 2020 17:50:40 +0530
Subject: [PATCH 05/19] Add files via upload
---
.../series-and-transformations/script1.py | 94 +++++++++++++++++++
1 file changed, 94 insertions(+)
create mode 100644 FSF-2020/series-and-transformations/script1.py
diff --git a/FSF-2020/series-and-transformations/script1.py b/FSF-2020/series-and-transformations/script1.py
new file mode 100644
index 00000000..72356c68
--- /dev/null
+++ b/FSF-2020/series-and-transformations/script1.py
@@ -0,0 +1,94 @@
+from manimlib.imports import *
+import numpy as np
+
+
+class convergence(Scene):
+ def construct(self):
+ originalFormula=TextMobject("$\sum _{ n=0 }^{ \infty }{ { a }_{ n }{ x }^{ n } }$")
+ originalFormula.set_color(RED)
+ self.play(Write(originalFormula))
+ self.wait(1)
+ self.play(ApplyMethod(originalFormula.shift,2.7*UP))
+ self.wait(1)
+
+ terms=["$a_{ 0 }$","$a_{ 1 }x$","$a_{ 2 }x^{ 2 }$","$a_{ 3 }x^{ 3 }$","$a_{ 4 }x^{ 4 }$","$a_{ 5 }x^{ 5 }$","$a_{ 6 }x^{ 6 }$","$a_{ 7 }x^{ 7 }$","$a_{ 8 }x^{ 8 }$","$a_{ 9 }x^{ 9 }$","$a_{ 10 }x^{ 10 }$","$a_{ 11 }x^{ 11 }$"]
+ termsTogetherString="+".join(terms)
+ termsTogether=TextMobject(termsTogetherString+"...")
+ termsTogether.scale(0.8)
+ termsTogether.shift(2.7*UP)
+ self.play(ReplacementTransform(originalFormula,termsTogether))
+ self.wait(1)
+
+ termMobjectRect=[0]*12
+ termMobject=TextMobject(terms[0])
+ termMobject.shift(2.7*UP+6.2*LEFT)
+ for i in range(1,13):
+ termMobjectOld=termMobject
+ termMobjectOld.scale(0.8)
+ if(i<12):
+ termMobject=TextMobject(terms[i])
+ termMobject.next_to(termMobjectOld)
+ if(i==1):
+ rectDefine=TextMobject("Here","each rectangle","represents the","value of the term")
+ rectDefine.set_color_by_tex_to_color_map({"each rectangle":BLUE,"value of the term":YELLOW})
+ rectDefine.scale(0.7)
+ rectDefine.shift(3.2*DOWN)
+ self.play(Write(rectDefine))
+ self.wait(1)
+ if(i==2):
+ ratio=TextMobject("If $\\frac { a_{ n+1 } }{ { a }_{ n } } < 1$")
+ ratio.set_color(RED)
+ ratio.scale(0.7)
+ ratio.move_to(3.2*DOWN)
+ inequality=TextMobject("$a_{ n+1 } < a_{ n }$")
+ inequality.set_color(RED)
+ inequality.scale(0.7)
+ inequality.move_to(3.2*DOWN)
+ self.play(FadeOut(rectDefine))
+ self.play(Write(ratio))
+ self.wait(1)
+ self.play(ReplacementTransform(ratio,inequality))
+ self.wait(1)
+ #self.play(ApplyMethod(termMobjectOld.move_to,(2-0.3*i)*DOWN+RIGHT*0.2*i))
+ termMobjectRect[i-1]=Rectangle(height=0.1,width=(5-0.4*i))
+ termMobjectRect[i-1].move_to((2-0.2*i)*DOWN+RIGHT*0.2*i)
+ #rectangles[p] = termMobjectRect
+ #p+=1
+ self.play(ReplacementTransform(termMobjectOld,termMobjectRect[i-1]))
+
+ uparrow=TextMobject("$\\uparrow$")
+ uparrow.set_color(GREEN)
+ uparrow.scale(6)
+ uparrow.shift(4*RIGHT+0.5*DOWN)
+ self.play(ShowCreation(uparrow))
+ self.wait(1)
+
+ converges=TextMobject("Converges!")
+ converges.set_color(RED)
+ converges.scale(0.6)
+ converges.next_to(uparrow)
+ self.play(FadeIn(converges))
+ self.wait(2)
+
+ self.play(FadeOut(converges),FadeOut(uparrow),FadeOut(inequality))
+ self.wait(0.5)
+ rect=VGroup(termMobjectRect[0],termMobjectRect[1],termMobjectRect[2],termMobjectRect[3],termMobjectRect[4],termMobjectRect[5],termMobjectRect[6],termMobjectRect[7],termMobjectRect[8],termMobjectRect[9],termMobjectRect[10],termMobjectRect[11])
+ self.play(ApplyMethod(rect.scale,0.2))
+ for i in range(0,12):
+ self.play(ApplyMethod(termMobjectRect[i].shift,i*0.04*DOWN+(11-(3-0.11*i)*i)*LEFT*0.3))
+ func=TextMobject("$\\approx$","$f(x)$")
+ func.set_color_by_tex_to_color_map({"$f(x)$":RED})
+ func.scale(0.8)
+ func.shift(DOWN+4.5*RIGHT+0.1*UP)
+ self.play(FadeIn(func))
+
+ rightarrow=TextMobject("$\\rightarrow$")
+ rightarrow.set_color(GREEN)
+ rightarrow.scale(4)
+ rightarrow.shift(2*DOWN)
+ converges=TextMobject("Hence even the","sum converges!")
+ converges.set_color_by_tex_to_color_map({"sum converges!":RED})
+ converges.move_to(3*DOWN)
+ converges.scale(0.7)
+ self.play(Write(rightarrow),FadeIn(converges))
+ self.wait(2)
From b02030eee74d000da6e939db98e76670d22d7c37 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Sat, 16 May 2020 17:51:11 +0530
Subject: [PATCH 06/19] Rename script1.py to script2.py
---
FSF-2020/series-and-transformations/{script1.py => script2.py} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename FSF-2020/series-and-transformations/{script1.py => script2.py} (100%)
diff --git a/FSF-2020/series-and-transformations/script1.py b/FSF-2020/series-and-transformations/script2.py
similarity index 100%
rename from FSF-2020/series-and-transformations/script1.py
rename to FSF-2020/series-and-transformations/script2.py
From b33b7b9962b9186de770d37d4211330354cf14b3 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Sat, 16 May 2020 17:51:34 +0530
Subject: [PATCH 07/19] Add files via upload
---
.../series-and-transformations/script1.py | 128 ++++++++++++++++++
1 file changed, 128 insertions(+)
create mode 100644 FSF-2020/series-and-transformations/script1.py
diff --git a/FSF-2020/series-and-transformations/script1.py b/FSF-2020/series-and-transformations/script1.py
new file mode 100644
index 00000000..28eb07cf
--- /dev/null
+++ b/FSF-2020/series-and-transformations/script1.py
@@ -0,0 +1,128 @@
+from manimlib.imports import *
+
+
+def formFormula(coeff_list,variable_list):
+ coeff_list=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
+ variable_list=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
+ coeff_list[0].shift(2.2*UP+1.6*LEFT)
+ for i in range(0,3):
+ coeff_list[i].set_color(GOLD_A)
+ variable_list[i].next_to(coeff_list[i],buff=0.1)
+ if i!=2:
+ coeff_list[i+1].next_to(variable_list[i],buff=0.1)
+ dots=TextMobject("...")
+ dots.next_to(variable_list[2])
+ expansion=VGroup(coeff_list[0],coeff_list[1],coeff_list[2],variable_list[0],variable_list[1],variable_list[2],dots)
+ expansion.scale(0.7)
+ return expansion
+
+class pieChart(Scene):
+ def construct(self):
+ circle1=Circle(radius=3,color=BLUE)
+ powerText=TextMobject("Power Series")
+ powerText.scale(0.8)
+ self.play(FadeIn(powerText))
+ self.play(ShowCreation(circle1))
+ self.wait(1)
+
+ powerGroup=VGroup(circle1,powerText)
+
+ self.play(ApplyMethod(powerGroup.scale,0.5))
+ self.play(ApplyMethod(powerGroup.move_to,2.2*UP))
+ self.wait(0.5)
+ expansion_power_coeff=[]
+ variables_power=[]
+ expansion_power=formFormula(expansion_power_coeff,variables_power)
+ self.play(ReplacementTransform(powerText,expansion_power))
+ self.wait(1)
+
+ circle2=Circle(radius=1.5)
+ circle2.shift(2.2*UP)
+ expansion_geo_coeff=[0]*3
+ variables_geo=[0]*3
+ arrow1_2=Line(start=0.7*UP,end=2.5*LEFT)
+ expansion_geo_coeff=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
+ for i in range(0,3):
+ expansion_geo_coeff[i].set_color(GOLD_A)
+ variables_geo=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
+ expansion_geo_coeff[0].shift(2.2*UP+1.6*LEFT)
+ for i in range(0,3):
+ variables_geo[i].next_to(expansion_geo_coeff[i],buff=0.1)
+ if i!=2:
+ expansion_geo_coeff[i+1].next_to(variables_geo[i],buff=0.1)
+ dots=TextMobject("...")
+ dots.next_to(variables_geo[2])
+ expansion_geo=VGroup(expansion_geo_coeff[0],expansion_geo_coeff[1],expansion_geo_coeff[2],variables_geo[0],variables_geo[1],variables_geo[2],dots)
+ expansion_geo.scale(0.7)
+
+ self.play(ApplyMethod(circle2.shift,4*LEFT+2.5*DOWN),ApplyMethod(expansion_geo.shift,4*LEFT+2.5*DOWN))
+ self.add(arrow1_2)
+ self.wait(1)
+
+ ones=[TextMobject("1"),TextMobject("1"),TextMobject("1")]
+ for i in range(0,3):
+ ones[i].set_color(GOLD_A)
+ ones[0].shift(0.3*DOWN,5*LEFT)
+ ones[1].next_to(ones[0],buff=0.5)
+ ones[2].next_to(ones[1],buff=0.7)
+ self.play(ReplacementTransform(expansion_geo_coeff[0],ones[0]),ReplacementTransform(expansion_geo_coeff[1],ones[1]),ReplacementTransform(expansion_geo_coeff[2],ones[2]))
+ self.wait(1)
+ expansion_geo=VGroup(ones[0],ones[1],ones[2],variables_geo[0],variables_geo[1],variables_geo[2],dots)
+
+ expansion_geo_final=TextMobject("$1+x+{ x }^{ 2 }..$")
+ expansion_geo_final.scale(0.8)
+ expansion_geo_final.shift(0.3*DOWN+4*LEFT)
+ self.play(ReplacementTransform(expansion_geo,expansion_geo_final))
+ self.wait(1)
+
+ circle3=Circle(radius=1.5,color=GREEN)
+ circle3.shift(2.2*UP)
+ expansion_taylor_coeff=[0]*3
+ variables_taylor=[0]*3
+ arrow1_3=Line(start=0.7*UP,end=DOWN*0.3)
+ expansion_taylor_coeff=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
+ for i in range(0,3):
+ expansion_taylor_coeff[i].set_color(GOLD_A)
+ variables_taylor=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
+ expansion_taylor_coeff[0].shift(2.2*UP+1.6*LEFT)
+ for i in range(0,3):
+ variables_taylor[i].next_to(expansion_taylor_coeff[i],buff=0.1)
+ if i!=2:
+ expansion_taylor_coeff[i+1].next_to(variables_taylor[i],buff=0.1)
+ dots=TextMobject("...")
+ dots.next_to(variables_taylor[2])
+ expansion_taylor=VGroup(expansion_taylor_coeff[0],expansion_taylor_coeff[1],expansion_taylor_coeff[2],variables_taylor[0],variables_taylor[1],variables_taylor[2],dots)
+ expansion_taylor.scale(0.7)
+
+ self.play(ApplyMethod(circle3.shift,4*DOWN),ApplyMethod(expansion_taylor.shift,4*DOWN))
+ self.add(arrow1_3)
+ self.wait(1)
+
+ differentials=[TextMobject("$f(0)$"),TextMobject("${ f'\left( 0 \\right) }$"),TextMobject("$\\frac { f''\left( 0 \\right) }{ 2! }$")]
+ for i in range(0,3):
+ differentials[i].set_color(GOLD_A)
+ differentials[0].shift(1.8*DOWN+1.15*LEFT)
+ differentials[1].shift(1.8*DOWN+0.45*LEFT)
+ differentials[2].shift(1.8*DOWN+0.45*RIGHT)
+ differentials[0].scale(0.35)
+ differentials[1].scale(0.35)
+ differentials[2].scale(0.35)
+ self.play(ReplacementTransform(expansion_taylor_coeff[0],differentials[0]),ReplacementTransform(expansion_taylor_coeff[1],differentials[1]),ReplacementTransform(expansion_taylor_coeff[2],differentials[2]))
+ self.wait(2)
+ expansion_taylor_final=VGroup(differentials[0],differentials[1],differentials[2],variables_taylor[0],variables_taylor[1],variables_taylor[2],dots)
+
+ self.play(FadeOut(expansion_geo_final),FadeOut(expansion_taylor_final))
+ geoText=TextMobject("Geometric Series")
+ geoText.scale(0.7)
+ geoText.shift(4*LEFT+0.3*DOWN)
+ taylorText=TextMobject("Taylor Series")
+ taylorText.scale(0.7)
+ taylorText.shift(1.8*DOWN)
+ self.play(FadeIn(geoText),FadeIn(taylorText))
+ self.wait(1)
+
+ soOntext=TextMobject("So on..!")
+ soOntext.shift(4*RIGHT)
+ soOntext.scale(0.8)
+ self.play(FadeIn(soOntext))
+ self.wait(2)
From 1a8df8b5a08d1e2123fe51bf823ad196cb57dc33 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Sat, 16 May 2020 17:52:04 +0530
Subject: [PATCH 08/19] Add files via upload
---
.../series-and-transformations/script3.py | 156 ++++++++++++++++++
1 file changed, 156 insertions(+)
create mode 100644 FSF-2020/series-and-transformations/script3.py
diff --git a/FSF-2020/series-and-transformations/script3.py b/FSF-2020/series-and-transformations/script3.py
new file mode 100644
index 00000000..f710f427
--- /dev/null
+++ b/FSF-2020/series-and-transformations/script3.py
@@ -0,0 +1,156 @@
+from manimlib.imports import*
+import math
+
+class intro(Scene):
+ def construct(self):
+ introText1=TextMobject("Let's analyse")
+ introText2=TextMobject("for")
+ function_main=TextMobject("$\sum { { (-1) }^{ n }{ x }^{ 2n } }$")
+ function_main.set_color(GREEN)
+ introText1.scale(1.2)
+ introText1.shift(2*UP)
+ introText2.scale(0.7)
+ introText2.shift(UP)
+ function_main.scale(2)
+ function_main.shift(DOWN)
+ function_expan=TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }+{ x }^{ 8 }+..$")
+ function_expan.set_color(RED)
+ function_expan.scale(1.2)
+ function_expan.shift(2*UP)
+
+ self.play(Write(introText1))
+ self.play(FadeIn(introText2))
+ self.wait(0.5)
+ self.play(Write(function_main))
+ self.wait(1)
+
+ self.play(FadeOut(introText1),FadeOut(introText2))
+ self.play(ApplyMethod(function_main.shift,3*UP))
+ self.wait(0.5)
+ self.play(ReplacementTransform(function_main,function_expan))
+ self.wait(1)
+ self.play(ApplyMethod(function_expan.scale,0.5))
+ function_expan.to_edge(UP+RIGHT)
+ self.play(ReplacementTransform(function_expan,function_expan))
+ self.wait(1)
+
+
+class graphScene(GraphScene):
+ CONFIG = {
+ "x_min": -8,
+ "x_max": 8,
+ "y_min": -8,
+ "y_max": 8,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$x$",
+ "y_axis_label": "$y$",
+ "exclude_zero_label": True,
+ "x_labeled_nums": range(-1, 2, 1),
+ "y_labeled_nums": range(0,2,1)
+ }
+
+ def construct(self):
+
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+
+ function_expan=TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }+{ x }^{ 8 }+..$")
+ function_expan.set_color(RED)
+ function_expan.scale(0.6)
+ function_expan.to_edge(UP+RIGHT)
+ self.add(function_expan)
+
+ self.setup_axes(animate=True)
+
+ eqText=[TextMobject("$1$"),TextMobject("$1-{ x }^{ 2 }$"),TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }$"),TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }$")]
+ for i in range(0,len(eqText)):
+ eqText[i].scale(0.6)
+ eqText[i].set_color(BLUE)
+ eqText[i].shift(ORIGIN+UP*2*y_each_unit+RIGHT*3.3*x_each_unit)
+ eqTextTerm=TextMobject("And so on..!")
+ eqTextTerm.set_color(BLUE)
+ eqTextTerm.scale(0.6)
+ eqTextTerm.shift(ORIGIN+UP*2*y_each_unit+3*RIGHT*x_each_unit)
+ equation1 = self.get_graph(lambda x : 1,color = RED,x_min = -8,x_max=8)
+ equation2 = self.get_graph(lambda x : 1-math.pow(x,2),color = RED,x_min = -1.7,x_max=1.7)
+ equation3 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4),color = RED,x_min = -1.6,x_max=1.6)
+ equation4 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6),color = RED,x_min = -1.45,x_max=1.45)
+ equation5 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8),color = RED,x_min = -1.35,x_max=1.35)
+ equation6 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10),color = RED,x_min = -1.3,x_max=1.3)
+ equation7 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12),color = RED,x_min = -1.25,x_max=1.25)
+ equation8 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14),color = RED,x_min = -1.2,x_max=1.2)
+ equation9 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16),color = RED,x_min = -1.15,x_max=1.15)
+ equation10 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16)-math.pow(x,18),color = RED,x_min = -1.15,x_max=1.15)
+
+ textBtwAnim1=TextMobject("Here the graph just","oscilates")
+ textBtwAnim1.set_color_by_tex_to_color_map({"oscilates":BLUE})
+ textBtwAnim2=TextMobject("after","the","point","(as we add higher order terms)")
+ textBtwAnim2.set_color_by_tex_to_color_map({"after":BLUE,"point":YELLOW})
+ textBtwAnim3=TextMobject("$x=1$")
+ textBtwAnim1.scale(0.4)
+ textBtwAnim2.scale(0.4)
+ textBtwAnim3.scale(1.2)
+ textBtwAnim1.shift(2.1*DOWN+4.3*RIGHT)
+ textBtwAnim2.shift(2.4*DOWN+4.1*RIGHT)
+ textBtwAnim3.shift(2.9*DOWN+4.3*RIGHT)
+
+ self.play(ShowCreation(equation1),run_time=0.8)
+ self.add(eqText[0])
+ self.wait(1)
+ self.play(ReplacementTransform(equation1,equation2),ReplacementTransform(eqText[0],eqText[1]))
+ self.wait(0.5)
+ self.play(ReplacementTransform(equation2,equation3),ReplacementTransform(eqText[1],eqText[2]))
+ self.wait(0.4)
+ self.play(ReplacementTransform(equation3,equation4),ReplacementTransform(eqText[2],eqText[3]))
+ self.wait(0.3)
+ self.play(FadeOut(eqText[3]))
+ self.play(FadeIn(eqTextTerm))
+ self.play(Write(textBtwAnim1),Write(textBtwAnim2))
+ self.play(FadeIn(textBtwAnim3))
+ self.play(ReplacementTransform(equation4,equation5))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation5,equation6))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation6,equation7))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation7,equation8))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation8,equation9))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation9,equation10))
+ self.wait(1)
+
+ self.play(FadeOut(textBtwAnim1),FadeOut(textBtwAnim2),FadeOut(textBtwAnim3),FadeOut(equation10),FadeOut(eqTextTerm))
+ self.wait(1)
+
+ convergeLine=Line(start=ORIGIN+x_each_unit*LEFT,end=ORIGIN+x_each_unit*RIGHT,color=WHITE)
+ divergeLineLeft=Line(start=ORIGIN+x_each_unit*LEFT,end=ORIGIN+x_each_unit*LEFT*8,color=RED)
+ divergeLineRight=Line(start=ORIGIN+x_each_unit*RIGHT,end=ORIGIN+x_each_unit*8*RIGHT,color=RED)
+ circle1=Circle(radius=0.01,color=PURPLE_E)
+ circle2=Circle(radius=0.01,color=PURPLE_E)
+ circle1.shift(ORIGIN+LEFT*x_each_unit)
+ circle2.shift(ORIGIN+RIGHT*x_each_unit)
+ convergeText=TextMobject("Converges")
+ divergeText1=TextMobject("Diverges")
+ divergeText2=TextMobject("Diverges")
+ convergeText.set_color(GREEN)
+ divergeText1.set_color(RED)
+ divergeText2.set_color(RED)
+ convergeText.scale(0.5)
+ divergeText1.scale(0.5)
+ divergeText2.scale(0.5)
+ convergeText.shift(1.6*UP)
+ divergeText1.shift(0.3*UP+1.5*LEFT)
+ divergeText2.shift(0.3*UP+1.5*RIGHT)
+ self.play(Write(divergeLineLeft),Write(divergeLineRight))
+ self.play(FadeIn(convergeLine))
+ self.wait(0.5)
+ self.play(FadeOut(self.axes))
+ self.play(Write(circle1),Write(circle2))
+ self.wait(0.5)
+ self.play(ApplyMethod(convergeLine.shift,1.3*UP),ApplyMethod(function_expan.shift,5*LEFT+DOWN))
+ self.play(FadeIn(convergeText),FadeIn(divergeText1),FadeIn(divergeText2))
+ self.wait(2)
+
From 12419532851741655c818c72943ed0660deb49c9 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Sat, 16 May 2020 17:52:52 +0530
Subject: [PATCH 09/19] Add files via upload
---
.../series-and-transformations/script4.py | 108 ++++++++++++++++++
1 file changed, 108 insertions(+)
create mode 100644 FSF-2020/series-and-transformations/script4.py
diff --git a/FSF-2020/series-and-transformations/script4.py b/FSF-2020/series-and-transformations/script4.py
new file mode 100644
index 00000000..412d20c0
--- /dev/null
+++ b/FSF-2020/series-and-transformations/script4.py
@@ -0,0 +1,108 @@
+from manimlib.imports import *
+import math
+
+class intro(Scene):
+ def construct(self):
+ introText1=TextMobject("Consider the","above","example..")
+ introText1.scale(0.8)
+ introText1.set_color_by_tex_to_color_map({"above":YELLOW})
+ self.play(Write(introText1))
+ self.wait(1)
+
+class graphScene(GraphScene,MovingCameraScene):
+ CONFIG = {
+ "x_min": -5,
+ "x_max": 5,
+ "y_min": -5,
+ "y_max": 5,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$x$",
+ "y_axis_label": "$y$",
+ "exclude_zero_label": True,
+ "x_labeled_nums": range(-1, 2, 1),
+ "y_labeled_nums": range(0,2,1),
+ "y_axis_height":7,
+ "x_axis_width":7
+ }
+
+ def setup(self):
+ GraphScene.setup(self)
+ MovingCameraScene.setup(self)
+
+ def construct(self):
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+
+ function_expan=TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }+{ x }^{ 8 }+..$")
+ function_expan.scale(0.6)
+ function_expan.set_color(RED)
+ function_expan.to_edge(UP+RIGHT)
+ self.add(function_expan)
+
+ self.setup_axes()
+
+ equation = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16)-math.pow(x,18),color = RED,x_min = -1.1,x_max=1.1)
+ self.play(ShowCreation(equation))
+ self.wait(1)
+
+ dashLineLeft=DashedLine(start=ORIGIN+y_each_unit*5*UP,end=ORIGIN+y_each_unit*5*DOWN)
+ dashLineRight=DashedLine(start=ORIGIN+y_each_unit*5*UP,end=ORIGIN+y_each_unit*5*DOWN)
+ dashLineLeft.shift(ORIGIN+LEFT*x_each_unit)
+ dashLineRight.shift(ORIGIN+RIGHT*x_each_unit)
+ radiusLine=Line(start=ORIGIN,end=ORIGIN+RIGHT*x_each_unit)
+ rangeLine=Line(start=ORIGIN+LEFT*x_each_unit,end=ORIGIN+RIGHT*x_each_unit)
+ circle=Circle(radius=x_each_unit)
+ movingPoint=Circle(radius=0.025)
+ movingPoint.shift(ORIGIN+RIGHT*x_each_unit)
+ circleEq1=self.get_graph(lambda x:math.sqrt(1-x**2),color=BLUE,x_max=-1,x_min=1)
+ circleEq2=self.get_graph(lambda x:-math.sqrt(1-x**2),color=BLUE,x_max=1,x_min=-1)
+
+ self.play(Write(dashLineLeft),Write(dashLineRight))
+ self.wait(1)
+
+ equation_updated=self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16)-math.pow(x,18),color = GREEN,x_min = -1,x_max=1)
+ self.play(FadeOut(self.axes),ReplacementTransform(equation,equation_updated))
+ self.wait(0.5)
+ self.play(Write(radiusLine))
+ self.play(MoveAlongPath(movingPoint,circleEq1))
+ self.play(MoveAlongPath(movingPoint,circleEq2))
+ self.play(FadeIn(circle))
+ self.wait(1)
+
+ radiusText=TextMobject("Radius of convergence")
+ radiusText.scale(0.14)
+ radiusText.shift(ORIGIN+RIGHT*x_each_unit*0.45+DOWN*y_each_unit*0.2)
+
+ self.play(Write(radiusText))
+ self.wait(0.6)
+
+ self.camera_frame.save_state()
+ self.camera_frame.set_width(5.5)
+ self.play(self.camera_frame.move_to, ORIGIN)
+ self.wait(1)
+ self.camera_frame.set_width(14)
+ self.wait(1.3)
+
+ self.play(FadeOut(radiusText),FadeOut(circle),FadeOut(movingPoint))
+ extendLine=Line(start=ORIGIN,end=ORIGIN+x_each_unit*LEFT)
+ self.play(Write(extendLine))
+ doubleArrow=TextMobject("$\longleftrightarrow$")
+ doubleArrow.scale(1.6)
+ doubleArrow.set_color(BLUE)
+ doubleArrow.shift(ORIGIN+DOWN*y_each_unit*0.5)
+ self.play(FadeIn(doubleArrow))
+ self.wait(1)
+ rangeText=TextMobject("Interval of convergence")
+ rangeText.scale(0.15)
+ rangeText.shift(ORIGIN+y_each_unit*DOWN)
+ self.play(Write(rangeText))
+ self.wait(0.6)
+
+ self.camera_frame.save_state()
+ self.camera_frame.set_width(5.5)
+ self.play(self.camera_frame.move_to, ORIGIN)
+ self.wait(1)
+ self.camera_frame.set_width(14)
+ self.wait(1.5)
From 69957574a1a8f7011cfb6070536deb3e3ae4e4e6 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Sat, 16 May 2020 17:53:15 +0530
Subject: [PATCH 10/19] Add files via upload
---
.../series-and-transformations/script5.py | 136 ++++++++++++++++++
1 file changed, 136 insertions(+)
create mode 100644 FSF-2020/series-and-transformations/script5.py
diff --git a/FSF-2020/series-and-transformations/script5.py b/FSF-2020/series-and-transformations/script5.py
new file mode 100644
index 00000000..e9681aa5
--- /dev/null
+++ b/FSF-2020/series-and-transformations/script5.py
@@ -0,0 +1,136 @@
+from manimlib.imports import *
+import math
+
+class uniformlyConvergent(Scene):
+ def construct(self):
+ introText1=TextMobject("Again consider the","above","example")
+ introText2=TextMobject("Let","$g(x)=\\frac { 1 }{ 1+{ x }^{ 2 } }$","and","x=0.5 $\in$(-1,1)")
+ introText3=TextMobject("Lets analyse..","!")
+ introText1.scale(0.8)
+ introText2.scale(0.7)
+ introText3.scale(0.9)
+ introText3.shift(DOWN)
+ introText1.set_color_by_tex_to_color_map({"above":YELLOW})
+ introText2.set_color_by_tex_to_color_map({"$g(x)=\\frac { 1 }{ 1+{ x }^{ 2 } }$":BLUE,"x=0.5 $\in$(-1,1)":YELLOW})
+ introText3.set_color_by_tex_to_color_map({"!":GREEN})
+ self.play(Write(introText1))
+ self.wait(0.5)
+ self.play(FadeOut(introText1))
+ self.play(Write(introText2))
+ self.play(FadeIn(introText3))
+ self.wait(2)
+
+
+def gety(x,n):
+ ans=0
+ for i in range(0,n+1):
+ if(i%2==0):
+ ans+=(math.pow(x,2*i))
+ else:
+ ans-=(math.pow(x,2*i))
+ return ans
+
+def makeSeries(x,points,x_each_unit,y_each_unit):
+ p=0
+ for point in points:
+ y=gety(x,p)
+ point.shift(ORIGIN+RIGHT*x_each_unit*p+UP*y_each_unit*y)
+ p+=1
+
+def makeLines(x,numPoints,x_each_unit,y_each_unit):
+ lines=[0]*numPoints
+ for i in range(0,numPoints-1):
+ y=gety(x,i)
+ y_next=gety(x,i+1)
+ lines[i]=Line(start=ORIGIN+RIGHT*x_each_unit*i+UP*y_each_unit*y,end=ORIGIN+RIGHT*x_each_unit*(i+1)+UP*y_each_unit*y_next,color=RED)
+ return lines
+
+class graphScene(GraphScene,MovingCameraScene):
+ CONFIG = {
+ "x_min": -6,
+ "x_max": 6,
+ "y_min": -5,
+ "y_max": 5,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$k$",
+ "y_axis_label": "$f(\\frac{1}{2})_k$",
+ "exclude_zero_label": True,
+ "x_axis_width":7,
+ "y_axis_height":7
+ }
+
+ def setup(self):
+ GraphScene.setup(self)
+ MovingCameraScene.setup(self)
+
+
+ def construct(self):
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+ sequence=TextMobject("$1$ , $1-(0.5)^2$ , $1-(0.5)^2+(0.5)^4..$")
+ sequence.set_color(RED)
+ sequence.scale(0.35)
+ sequence.to_edge(UP+RIGHT)
+ formula=TextMobject("$f(x)_{ k }=\sum _{ i=0 }^{ k }{ (-1)^{ i }(x)^{ 2i } } $")
+ formula.set_color(PURPLE_C)
+ formula.scale(0.4)
+ formula.shift(5.3*RIGHT+3*UP)
+ fLine=Line(start=ORIGIN+x_each_unit*6*LEFT,end=ORIGIN+x_each_unit*6*RIGHT)
+ fLine.shift(ORIGIN+(4/5)*y_each_unit*UP)
+ fLineText=TextMobject("$g(0.5)=\\frac { 4 }{ 5 } $")
+ fLineText.set_color(RED)
+ fLineText.scale(0.3)
+ fLineText.shift(UP*1.2*y_each_unit+RIGHT*x_each_unit+4*LEFT)
+ points=[Dot(radius=0.03,color=BLUE) for i in range(0,6)]
+ makeSeries(0.5,points,x_each_unit,y_each_unit)
+ lines=makeLines(0.5,6,x_each_unit,y_each_unit)
+
+
+ self.add(sequence)
+ self.add(formula)
+ self.setup_axes(animate=True)
+ self.play(Write(fLine))
+ self.add(fLineText)
+ for p in points:
+ self.add(p)
+ for p in range(0,5):
+ self.play(Write(lines[p]))
+ self.wait(0.5)
+ self.camera_frame.save_state()
+ self.camera_frame.set_width(0.6)
+ self.play(self.camera_frame.move_to, points[0])
+ self.wait(0.4)
+ self.play(self.camera_frame.move_to, points[1])
+ self.wait(0.4)
+ self.play(self.camera_frame.move_to, points[2])
+ self.wait(0.3)
+ self.play(self.camera_frame.move_to, points[3])
+ self.wait(1)
+ self.play(self.camera_frame.move_to,ORIGIN)
+ self.camera_frame.set_width(14)
+ self.wait(1)
+
+ explanation1=TextMobject("Since the series","converges","to")
+ explanation1.set_color_by_tex_to_color_map({"converges":YELLOW})
+ explanation2=TextMobject("$\\frac {4}{5}$")
+ explanation2.set_color(BLUE)
+ explanation3=TextMobject("Hence","$\\forall \epsilon>0$,","$\exists k$","such that,")
+ explanation3.set_color_by_tex_to_color_map({"$\\forall \epsilon>0$":BLUE,"$\exists k$":YELLOW})
+ explanation4=TextMobject("$\left| { f\left( \\frac { 1 }{ 2 } \\right) }_{ k }-\\frac { 4 }{ 5 } \\right| <$","$\epsilon$")
+ explanation4.set_color_by_tex_to_color_map({"$\epsilon$":RED})
+ explanation1.scale(0.5)
+ explanation3.scale(0.5)
+ explanation1.shift(1.8*DOWN+3.5*RIGHT)
+ explanation2.shift(2.4*DOWN+3.5*RIGHT)
+ explanation3.shift(1.8*DOWN+3.5*RIGHT)
+ explanation4.shift(2.4*DOWN+3.5*RIGHT)
+
+ self.play(Write(explanation1))
+ self.play(FadeIn(explanation2))
+ self.wait(1)
+ self.play(FadeOut(explanation1),FadeOut(explanation2))
+ self.play(Write(explanation3))
+ self.play(Write(explanation4))
+ self.wait(2)
From 9694b0856d1c9a7bc384d806172d5b35a7848576 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Tue, 19 May 2020 23:54:32 +0530
Subject: [PATCH 11/19] Add files via upload
---
.../Taylor Series/script1.py | 198 ++++++++++++++++++
.../Taylor Series/script2.py | 195 +++++++++++++++++
.../Taylor Series/script3.py | 111 ++++++++++
.../Taylor Series/script4.py | 82 ++++++++
4 files changed, 586 insertions(+)
create mode 100644 FSF-2020/series-and-transformations/Taylor Series/script1.py
create mode 100644 FSF-2020/series-and-transformations/Taylor Series/script2.py
create mode 100644 FSF-2020/series-and-transformations/Taylor Series/script3.py
create mode 100644 FSF-2020/series-and-transformations/Taylor Series/script4.py
diff --git a/FSF-2020/series-and-transformations/Taylor Series/script1.py b/FSF-2020/series-and-transformations/Taylor Series/script1.py
new file mode 100644
index 00000000..e83eff86
--- /dev/null
+++ b/FSF-2020/series-and-transformations/Taylor Series/script1.py
@@ -0,0 +1,198 @@
+from manimlib.imports import*
+import math
+
+def formFormula(coeff_list,variable_list):
+ coeff_list=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
+ variable_list=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
+ coeff_list[0].shift(2.2*UP+1.6*LEFT)
+ for i in range(0,3):
+ coeff_list[i].set_color(GOLD_A)
+ variable_list[i].next_to(coeff_list[i],buff=0.1)
+ if i!=2:
+ coeff_list[i+1].next_to(variable_list[i],buff=0.1)
+ dots=TextMobject("...")
+ dots.next_to(variable_list[2])
+ expansion=VGroup(coeff_list[0],coeff_list[1],coeff_list[2],variable_list[0],variable_list[1],variable_list[2],dots)
+ #expansion.scale(0.7)
+ return expansion,coeff_list
+
+class intro(Scene):
+ def construct(self):
+ equation=TextMobject("$f(x)=$","${ e }^{ -x^{ 2 } }$")
+ equation.scale(2)
+ equation.set_color_by_tex_to_color_map({"${ e }^{ -x^{ 2 } }$":RED})
+ text=TextMobject("let $a=0$")
+ text.scale(0.7)
+ text.shift(DOWN)
+
+ self.play(Write(equation))
+ self.wait(0.5)
+ self.play(FadeIn(text))
+ self.wait(0.7)
+ self.play(FadeOut(equation),FadeOut(text))
+
+class graphScene(GraphScene):
+ CONFIG = {
+ "x_min": -8,
+ "x_max": 8,
+ "y_min": -8,
+ "y_max": 8,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$x$",
+ "y_axis_label": "$y$",
+ "exclude_zero_label": True,
+ "x_labeled_nums": range(-8, 8, 1),
+ }
+ def construct(self):
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+
+ generalized_eq_coeff=[]
+ variables_eq=[]
+ eq,generalized_eq_coeff=formFormula(generalized_eq_coeff,variables_eq)
+ trText1=TextMobject("let $T_{ n }(x)$:=")
+ eq.next_to(trText1)
+ trTextGrup=VGroup(trText1,eq)
+ trTextGrup.scale(0.5)
+ trTextGrup.to_corner(UP+RIGHT)
+ self.play(Write(trTextGrup))
+ self.setup_axes(animate=True)
+
+ fx=TextMobject("${ e }^{ -x^{ 2 } }$")
+ fx.scale(0.5)
+ fx.shift(ORIGIN+x_each_unit*7.5*RIGHT+y_each_unit*0.5*UP)
+ mainfunction=self.get_graph(lambda x:math.exp(-1*pow(x,2)),color=RED,x_min=-8,x_max=8)
+ self.play(ShowCreation(mainfunction))
+ self.play(FadeIn(fx))
+ self.wait(1.4)
+
+ coeff=[TextMobject("$1$"),TextMobject("$f'(x)$"),TextMobject("$\\frac { f''(x) }{ 2! } $")]
+ coeff[0].shift(3.39*UP+4.88*RIGHT)
+ coeff[0].scale(0.5)
+ coeff[1].shift(3.39*UP+5.3*RIGHT)
+ coeff[1].scale(0.275)
+ coeff[2].shift(3.39*UP+5.98*RIGHT)
+ coeff[2].scale(0.28)
+
+ for obj in coeff:
+ obj.set_color(GOLD_A)
+
+ firstApprox=[self.get_graph(lambda x:1,color=BLUE)]
+ secondApprox=[self.get_graph(lambda x:1,color=BLUE),
+ self.get_graph(lambda x:x+1,color=BLUE),
+ self.get_graph(lambda x:-x+1,color=BLUE)]
+ thirdApprox=[self.get_graph(lambda x:1-2*math.pow(x,2),color=BLUE),
+ self.get_graph(lambda x:1-0.1*math.pow(x,2),color=BLUE),
+ self.get_graph(lambda x:1,color=BLUE),
+ self.get_graph(lambda x:1+0.1*math.pow(x,2),color=BLUE),
+ self.get_graph(lambda x:1+math.pow(x,2),color=BLUE)]
+
+ firstGraph=self.get_graph(lambda x:1,color=BLUE)
+ secondGraph=self.get_graph(lambda x:1-math.pow(x,2),color=BLUE)
+
+ bottomText1=TextMobject("The polynomial should","satisfy","the function at $x=0$")
+ bottomText2=TextMobject("This gives","$a_{ 0 }=1$")
+ bottomText3=TextMobject("Now it could be of","any slope!")
+ #show graphs of second approx
+ bottomText4=TextMobject("Hence the","slopes","should","even match")
+ #final graph
+ bottomText5=TextMobject("This gives","$a_{ 1 }=0$")
+ bottomText6=TextMobject("Since the rate of change of this slope","could vary")
+ #show third approx graphs
+ bottomText7=TextMobject("Hence the","rate of change of these slopes","should also be","same!")
+ #final graph
+ bottomText8=TextMobject("This gives","$a_{ 2 }=-1$")
+
+ bottomText1.set_color_by_tex_to_color_map({"satisfy":YELLOW})
+ bottomText2.set_color_by_tex_to_color_map({"$a_{ 0 }=1$":BLUE})
+ bottomText3.set_color_by_tex_to_color_map({"any slope!":YELLOW})
+ bottomText4.set_color_by_tex_to_color_map({"slopes":BLUE,"even match":YELLOW})
+ bottomText5.set_color_by_tex_to_color_map({"$a_{ 1 }=0$":BLUE})
+ bottomText6.set_color_by_tex_to_color_map({"could vary":YELLOW})
+ bottomText7.set_color_by_tex_to_color_map({"rate of change of these slopes":BLUE,"same!":YELLOW})
+ bottomText8.set_color_by_tex_to_color_map({"$a_{ 2 }=-1$":BLUE})
+
+ bottomText1.scale(0.4)
+ bottomText2.scale(0.5)
+ bottomText3.scale(0.4)
+ bottomText4.scale(0.4)
+ bottomText5.scale(0.5)
+ bottomText6.scale(0.4)
+ bottomText7.scale(0.4)
+ bottomText8.scale(0.5)
+
+ bottomText1.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText2.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText3.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText4.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText5.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText6.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText7.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText8.shift(4.5*RIGHT+2.5*DOWN)
+
+ self.play(Write(bottomText1))
+ self.wait(1)
+ self.play(ShowCreation(firstApprox[0]),ReplacementTransform(bottomText1,bottomText2))
+ #change coeff in tn(x)
+ self.play(ReplacementTransform(generalized_eq_coeff[0],coeff[0]))
+ self.wait(1.5)
+ self.play(ReplacementTransform(bottomText2,bottomText3))
+ self.wait(0.5)
+ self.play(ReplacementTransform(firstApprox[0],secondApprox[1]))
+ self.wait(0.5)
+ self.play(ReplacementTransform(secondApprox[1],secondApprox[0]))
+ self.wait(0.5)
+ self.play(ReplacementTransform(secondApprox[0],secondApprox[2]))
+ self.wait(1)
+ self.play(ReplacementTransform(bottomText3,bottomText4),FadeOut(secondApprox[2]))
+ self.wait(1)
+ self.play(Write(firstGraph),ReplacementTransform(bottomText4,bottomText5))
+ #change a1 coeff
+ self.play(ReplacementTransform(generalized_eq_coeff[1],coeff[1]))
+ self.wait(1.5)
+ self.play(ReplacementTransform(bottomText5,bottomText6))
+ self.play(ReplacementTransform(firstGraph,thirdApprox[0]))
+ self.wait(0.6)
+ self.play(ReplacementTransform(thirdApprox[0],thirdApprox[1]))
+ self.wait(0.6)
+ self.play(ReplacementTransform(thirdApprox[1],thirdApprox[2]))
+ self.wait(0.6)
+ self.play(ReplacementTransform(thirdApprox[2],thirdApprox[3]))
+ self.wait(0.6)
+ self.play(ReplacementTransform(thirdApprox[3],thirdApprox[4]))
+ self.wait(1.5)
+ self.play(ReplacementTransform(bottomText6,bottomText7))
+ self.wait(1.5)
+ self.play(ReplacementTransform(bottomText7,bottomText8),ReplacementTransform(thirdApprox[4],secondGraph))
+ self.play(ReplacementTransform(generalized_eq_coeff[2],coeff[2]))
+ self.wait(2)
+
+ textFinal=TextMobject("And so on..!")
+ textFinal.scale(0.7)
+ textFinal.shift(4.5*RIGHT+2.5*DOWN)
+ self.play(ReplacementTransform(bottomText8,textFinal))
+ self.wait(2.5)
+
+ finalFormula=TextMobject("Hence","$T_{ n }(x)$","=","$f(0)+f'(0)x+\\frac { f''(0) }{ 2! }x^2+..+\\frac { { f }^{ n }(0) }{ n! } { x }^{ n }$")
+ finalFormula.scale(0.8)
+ finalFormula.set_color_by_tex_to_color_map({"$T_{ n }(x)$":GREEN,"$f(0)+f'(0)x+\\frac { f''(0) }{ 2! }x^2+..+\\frac { { f }^{ n }(0) }{ n! } { x }^{ n }$":RED})
+
+ self.play(FadeOut(self.axes),FadeOut(textFinal),FadeOut(secondGraph),FadeOut(trTextGrup),FadeOut(mainfunction),FadeOut(fx),FadeOut(coeff[0]),FadeOut(coeff[1]),FadeOut(coeff[2]))
+ self.play(Write(finalFormula))
+ self.wait(2)
+ # self.play(ReplacementTransform(secondApprox[2],secondApprox[3]))
+ # self.wait(0.5)
+ # self.play(ReplacementTransform(secondApprox[3],secondApprox[4]))
+ # self.wait(0.5)
+ # self.play(ReplacementTransform(secondApprox[4],secondApprox[5]))
+ # self.wait(0.5)
+ # self.play(ReplacementTransform(secondApprox[0],secondApprox[0]))
+ # self.wait(0.5)
+ # self.play(ReplacementTransform(secondApprox[0],secondApprox[0]))
+ # self.wait(0.5)
+
+
+
+
diff --git a/FSF-2020/series-and-transformations/Taylor Series/script2.py b/FSF-2020/series-and-transformations/Taylor Series/script2.py
new file mode 100644
index 00000000..b5d0a538
--- /dev/null
+++ b/FSF-2020/series-and-transformations/Taylor Series/script2.py
@@ -0,0 +1,195 @@
+from manimlib.imports import*
+import math
+
+
+class intro(Scene):
+ def construct(self):
+ equation=TextMobject("$f(x)=$","${ e }^{ -x^{ 2 } }$")
+ equation.scale(2)
+ equation.set_color_by_tex_to_color_map({"${ e }^{ -x^{ 2 } }$":RED})
+ text=TextMobject("at $a=1$")
+ text.scale(0.7)
+ text.shift(DOWN)
+
+ shiftText=TextMobject("(Here we shift the origin to the point $x=1$)")
+ shiftText.scale(0.6)
+ shiftText.shift(2.4*DOWN)
+
+
+ self.play(Write(equation))
+ self.wait(0.5)
+ self.play(FadeIn(text))
+ self.wait(0.7)
+ self.play(Write(shiftText))
+ self.wait(0.7)
+ self.play(FadeOut(equation),FadeOut(text),FadeOut(shiftText))
+
+
+def formFormula(coeff_list,variable_list):
+ coeff_list=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
+ variable_list=[TextMobject("+"),TextMobject("${ (x-1) }$+"),TextMobject("${ (x-1) }^{ 2 }$")]
+ coeff_list[0].shift(2.2*UP+1.6*LEFT)
+ for i in range(0,3):
+ coeff_list[i].set_color(GOLD_A)
+ variable_list[i].next_to(coeff_list[i],buff=0.1)
+ if i!=2:
+ coeff_list[i+1].next_to(variable_list[i],buff=0.1)
+ dots=TextMobject("...")
+ dots.next_to(variable_list[2])
+ expansion=VGroup(coeff_list[0],coeff_list[1],coeff_list[2],variable_list[0],variable_list[1],variable_list[2],dots)
+ #expansion.scale(0.7)
+ return expansion,coeff_list
+
+
+class graphScene(GraphScene):
+ CONFIG = {
+ "x_min": -8,
+ "x_max": 8,
+ "y_min": -8,
+ "y_max": 8,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$x$",
+ "y_axis_label": "$y$",
+ "exclude_zero_label": True,
+ "x_labeled_nums": range(-8, 8, 1),
+ }
+ def construct(self):
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+
+ generalized_eq_coeff=[]
+ variables_eq=[]
+ eq,generalized_eq_coeff=formFormula(generalized_eq_coeff,variables_eq)
+ trText1=TextMobject("let $T_{ n }(x)$:=")
+ eq.next_to(trText1)
+ trTextGrup=VGroup(trText1,eq)
+ trTextGrup.scale(0.5)
+ trTextGrup.to_corner(UP+RIGHT)
+ self.play(Write(trTextGrup))
+ self.setup_axes(animate=True)
+
+ fx=TextMobject("${ e }^{ -x^{ 2 } }$")
+ fx.scale(0.5)
+ fx.shift(ORIGIN+x_each_unit*7.5*RIGHT+y_each_unit*0.5*UP)
+ mainfunction=self.get_graph(lambda x:math.exp(-1*pow(x,2)),color=RED,x_min=-8,x_max=8)
+ self.play(ShowCreation(mainfunction))
+ self.play(FadeIn(fx))
+ self.wait(1.4)
+
+ coeff=[TextMobject("$e^{-1}$"),TextMobject("$f'(x)$"),TextMobject("$\\frac { f''(x) }{ 2! } $")]
+ coeff[0].shift(3.33*UP+3.65*RIGHT)
+ coeff[0].scale(0.45)
+ coeff[1].shift(3.33*UP+4.13*RIGHT)
+ coeff[1].scale(0.275)
+ coeff[2].shift(3.33*UP+5.36*RIGHT)
+ coeff[2].scale(0.28)
+
+ for obj in coeff:
+ obj.set_color(GOLD_A)
+
+ firstApprox=[self.get_graph(lambda x:math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5)]
+ secondApprox=[self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5),
+ self.get_graph(lambda x:math.exp(-1)+3*(x-1)*math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5),
+ self.get_graph(lambda x:math.exp(-1)-4*(x-1)*math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5)]
+ thirdApprox=[self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)-2*math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5),
+ self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)-0.1*math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5),
+ self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1),color=BLUE,x_max=5.5,x_min=-5.5),
+ self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)+0.5*math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5),
+ self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)+2*math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5)]
+
+ firstGraph=self.get_graph(lambda x:math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5)
+ secondGraph=self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1),color=BLUE,x_min=-5.5,x_max=5.5)
+ thirdGraph=self.get_graph(lambda x:math.exp(-1)-2*(x-1)*math.exp(-1)+math.exp(-1)*(x-1)**2,color=BLUE,x_max=5.5,x_min=-5.5)
+
+ bottomText1=TextMobject("Apply","$f(1)=T_{n}(1)$")
+ bottomText2=TextMobject("This gives","$a_{ 0 }=e^{-1}$")
+ bottomText3=TextMobject("Now it could be of","any slope!")
+ #show graphs of second approx
+ bottomText4=TextMobject("Hence","apply","$f'(1)=T_{n}'(1)$")
+ #final graph
+ bottomText5=TextMobject("This gives","$a_{ 1 }=-2e^{-1}$")
+ bottomText6=TextMobject("Since the rate of change of this slope","could vary")
+ #show third approx graphs
+ bottomText7=TextMobject("Hence also","apply","$f''(1)=T_{ n }''(1)$")
+ #final graph
+ bottomText8=TextMobject("This gives","$a_{ 2 }=e^{-1}$")
+
+ bottomText1.set_color_by_tex_to_color_map({"Apply":YELLOW})
+ bottomText2.set_color_by_tex_to_color_map({"$a_{ 0 }=e^{-1}$":BLUE})
+ bottomText3.set_color_by_tex_to_color_map({"any slope!":YELLOW})
+ bottomText4.set_color_by_tex_to_color_map({"apply":YELLOW})
+ bottomText5.set_color_by_tex_to_color_map({"$a_{ 1 }=-2e^{-1}$":BLUE})
+ bottomText6.set_color_by_tex_to_color_map({"could vary":YELLOW})
+ bottomText7.set_color_by_tex_to_color_map({"apply":YELLOW})
+ bottomText8.set_color_by_tex_to_color_map({"$a_{ 2 }=e^{-1}$":BLUE})
+
+ bottomText1.scale(0.4)
+ bottomText2.scale(0.5)
+ bottomText3.scale(0.4)
+ bottomText4.scale(0.4)
+ bottomText5.scale(0.5)
+ bottomText6.scale(0.4)
+ bottomText7.scale(0.4)
+ bottomText8.scale(0.5)
+
+ bottomText1.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText2.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText3.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText4.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText5.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText6.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText7.shift(4.5*RIGHT+2.5*DOWN)
+ bottomText8.shift(4.5*RIGHT+2.5*DOWN)
+
+ self.play(Write(bottomText1))
+ self.wait(1)
+ self.play(ShowCreation(firstApprox[0]),ReplacementTransform(bottomText1,bottomText2))
+ #change coeff in tn(x)
+ self.play(ReplacementTransform(generalized_eq_coeff[0],coeff[0]))
+ self.wait(1.5)
+ self.play(ReplacementTransform(bottomText2,bottomText3))
+ self.wait(0.5)
+ self.play(ReplacementTransform(firstApprox[0],secondApprox[1]))
+ self.wait(0.5)
+ self.play(ReplacementTransform(secondApprox[1],secondApprox[2]))
+ # self.wait(0.5)
+ # self.play(ReplacementTransform(secondApprox[2],secondApprox[0]))
+ self.wait(1)
+ self.play(ReplacementTransform(bottomText3,bottomText4),FadeOut(secondApprox[2]))
+ self.wait(1)
+ self.play(Write(secondGraph),ReplacementTransform(bottomText4,bottomText5))
+ #change a1 coeff
+ self.play(ReplacementTransform(generalized_eq_coeff[1],coeff[1]))
+ self.wait(1.5)
+ self.play(ReplacementTransform(bottomText5,bottomText6))
+ self.play(ReplacementTransform(secondGraph,thirdApprox[0]))
+ self.wait(0.6)
+ self.play(ReplacementTransform(thirdApprox[0],thirdApprox[1]))
+ # self.wait(0.6)
+ # self.play(ReplacementTransform(thirdApprox[1],thirdApprox[2]))
+ self.wait(0.6)
+ self.play(ReplacementTransform(thirdApprox[1],thirdApprox[3]))
+ self.wait(0.6)
+ self.play(ReplacementTransform(thirdApprox[3],thirdApprox[4]))
+ self.wait(1.5)
+ self.play(ReplacementTransform(bottomText6,bottomText7))
+ self.wait(1.5)
+ self.play(ReplacementTransform(bottomText7,bottomText8),ReplacementTransform(thirdApprox[4],thirdGraph))
+ self.play(ReplacementTransform(generalized_eq_coeff[2],coeff[2]))
+ self.wait(2)
+
+ textFinal=TextMobject("And so on..!")
+ textFinal.scale(0.7)
+ textFinal.shift(4.5*RIGHT+2.5*DOWN)
+ self.play(ReplacementTransform(bottomText8,textFinal))
+ self.wait(2.5)
+
+ finalFormula=TextMobject("Hence","$T_{ n }(x)$","=","$f(1)+f'(1)(x-1)+\\frac { f''(1) }{ 2! }(x-1)^2+..+\\frac { { f }^{ n }(1) }{ n! } { (x-1) }^{ n }$")
+ finalFormula.scale(0.8)
+ finalFormula.set_color_by_tex_to_color_map({"$T_{ n }(x)$":GREEN,"$f(1)+f'(1)(x-1)+\\frac { f''(1) }{ 2! }(x-1)^2+..+\\frac { { f }^{ n }(1) }{ n! } { (x-1) }^{ n }$":RED})
+
+ self.play(FadeOut(self.axes),FadeOut(textFinal),FadeOut(thirdGraph),FadeOut(trTextGrup),FadeOut(mainfunction),FadeOut(fx),FadeOut(coeff[0]),FadeOut(coeff[1]),FadeOut(coeff[2]))
+ self.play(Write(finalFormula))
+ self.wait(2)
\ No newline at end of file
diff --git a/FSF-2020/series-and-transformations/Taylor Series/script3.py b/FSF-2020/series-and-transformations/Taylor Series/script3.py
new file mode 100644
index 00000000..a2870d41
--- /dev/null
+++ b/FSF-2020/series-and-transformations/Taylor Series/script3.py
@@ -0,0 +1,111 @@
+from manimlib.imports import*
+import math
+
+
+class graphScene(GraphScene):
+ CONFIG = {
+ "x_min": -8,
+ "x_max": 8,
+ "y_min": -8,
+ "y_max": 8,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$x$",
+ "y_axis_label": "$y$",
+ "exclude_zero_label": True,
+ "x_labeled_nums": range(-8, 8, 1),
+ }
+ def construct(self):
+
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+
+ self.setup_axes(animate=True)
+
+ lnx=self.get_graph(lambda x:math.log2(x),color=RED,x_min=0.01,x_max=8)
+
+ bottomText1=TextMobject("Apply $f(x)=T_{n}(x)$")
+ bottomText2=TextMobject("Then apply $f'(x)=T_{n}'(x)$")
+ bottomText3=TextMobject("Then apply $f''(x)=T_{n}''(x)$")
+ bottomText4=TextMobject("and so on..")
+
+ bottomText1.scale(0.5)
+ bottomText2.scale(0.5)
+ bottomText3.scale(0.5)
+ bottomText4.scale(0.5)
+
+ bottomText1.shift(3*RIGHT+2*DOWN)
+ bottomText2.shift(3*RIGHT+2*DOWN)
+ bottomText3.shift(3*RIGHT+2*DOWN)
+ bottomText4.shift(3*RIGHT+2*DOWN)
+
+ equations=[self.get_graph(lambda x:math.log2(2),color=BLUE),
+ self.get_graph(lambda x:math.log2(2)+(x-2)/2,color=BLUE),
+ self.get_graph(lambda x:math.log2(2)+(x-2)/2-((x-2)**2)/8,color=BLUE),
+ self.get_graph(lambda x:math.log2(2)+(x-2)/2-((x-2)**2)/8+((x-2)**3)/24,color=BLUE),
+ self.get_graph(lambda x:math.log2(2)+(x-2)/2-((x-2)**2)/8+((x-2)**3)/24-((x-2)**4)/64,color=BLUE),
+ self.get_graph(lambda x:math.log2(2)+(x-2)/2-((x-2)**2)/8+((x-2)**3)/24-((x-2)**4)/64+((x-2)**5)/160,color=BLUE),
+ self.get_graph(lambda x:math.log2(2)+(x-2)/2-((x-2)**2)/8+((x-2)**3)/24-((x-2)**4)/64+((x-2)**5)/160-((x-2)**6)/384,color=BLUE)]
+
+ terms=[TextMobject("$T_{n}:=$"),TextMobject("$ln(2)$"),TextMobject("$+\\frac { x-2 }{ 2 } $"),TextMobject("$-\\frac { (x-2)^{2} }{ 8 }$"),TextMobject("+..")]
+ for obj in terms:
+ obj.scale(0.5)
+
+ terms[0].shift(3*UP+3*RIGHT)
+ terms[1].next_to(terms[0],buff=0.1)
+ terms[2].next_to(terms[1],buff=0.1)
+ terms[3].next_to(terms[2],buff=0.1)
+ terms[4].next_to(terms[3],buff=0.1)
+
+ self.play(ShowCreation(lnx))
+ self.wait(1)
+ self.play(Write(bottomText1))
+ self.wait(0.5)
+ self.play(ShowCreation(equations[0]),Write(terms[0]),Write(terms[1]))
+ self.wait(1)
+ self.play(ReplacementTransform(bottomText1,bottomText2))
+ self.wait(0.5)
+ self.play(ReplacementTransform(equations[0],equations[1]),Write(terms[2]))
+ self.wait(1)
+ self.play(ReplacementTransform(bottomText2,bottomText3))
+ self.wait(0.5)
+ self.play(ReplacementTransform(equations[1],equations[2]),Write(terms[3]))
+ self.wait(1)
+ self.play(ReplacementTransform(bottomText3,bottomText4),Write(terms[4]))
+ self.wait(1.5)
+
+ self.play(FadeOut(terms[0]),FadeOut(terms[1]),FadeOut(terms[2]),FadeOut(terms[3]),FadeOut(terms[4]),FadeOut(bottomText4))
+
+ dline=DashedLine(start=ORIGIN+8*y_each_unit*UP,end=ORIGIN+8*y_each_unit*DOWN)
+ dline.shift(ORIGIN+x_each_unit*4*RIGHT)
+
+ bottomText5=TextMobject("Here","after $x=4$",", the graph","continuously diverges away","from $ln(x)$")
+ bottomText5.scale(0.3)
+ bottomText5.shift(4.5*RIGHT+2*DOWN)
+ bottomText5.set_color_by_tex_to_color_map({"after $x=4$":YELLOW,"continuously diverges away":BLUE})
+
+ self.play(Write(bottomText5),Write(dline))
+ self.wait(1)
+ self.play(ReplacementTransform(equations[2],equations[3]))
+ self.wait(0.3)
+ self.play(ReplacementTransform(equations[3],equations[4]))
+ self.wait(0.3)
+ self.play(ReplacementTransform(equations[4],equations[5]))
+ self.wait(0.3)
+ self.play(ReplacementTransform(equations[5],equations[6]),FadeOut(bottomText5))
+ self.wait(1)
+
+ circle=Circle(radius=ORIGIN+x_each_unit*2,color=PURPLE_E)
+ circle.shift(ORIGIN+RIGHT*x_each_unit*2)
+ radiusLine=Line(start=ORIGIN+x_each_unit*RIGHT*2,end=ORIGIN+x_each_unit*4*RIGHT,color=PURPLE_E)
+ radius=TextMobject("$R$")
+ radius.set_color(RED)
+ radius.scale(0.5)
+ radius.shift(ORIGIN+RIGHT*x_each_unit*2.45+DOWN*y_each_unit*0.6)
+
+ self.play(FadeOut(equations[6]),Write(circle))
+ self.wait(0.6)
+ self.play(Write(radiusLine))
+ self.play(FadeIn(radius))
+ self.wait(2)
\ No newline at end of file
diff --git a/FSF-2020/series-and-transformations/Taylor Series/script4.py b/FSF-2020/series-and-transformations/Taylor Series/script4.py
new file mode 100644
index 00000000..1f41c97d
--- /dev/null
+++ b/FSF-2020/series-and-transformations/Taylor Series/script4.py
@@ -0,0 +1,82 @@
+from manimlib.imports import*
+import math
+
+
+class graphScene(GraphScene):
+ CONFIG = {
+ "x_min": -8,
+ "x_max": 8,
+ "y_min": -8,
+ "y_max": 8,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$x$",
+ "y_axis_label": "$y$",
+ "exclude_zero_label": True,
+ "x_labeled_nums": range(-8, 8, 1),
+ }
+ def construct(self):
+
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+
+ self.setup_axes(animate=True)
+ lnx=self.get_graph(lambda x:math.log2(x),color=RED,x_min=0.01,x_max=8)
+ equation=self.get_graph(lambda x:math.log2(2)+(x-2)/2-((x-2)**2)/8+((x-2)**3)/24-((x-2)**4)/64+((x-2)**5)/160-((x-2)**6)/384,color=BLUE)
+
+ terms=[TextMobject("$T_{n}:=$"),TextMobject("$ln(2)$"),TextMobject("$+\\frac { x-2 }{ 2 } $"),TextMobject("$-\\frac { (x-2)^{2} }{ 8 }$"),TextMobject("+..")]
+ for obj in terms:
+ obj.scale(0.5)
+
+ terms[0].shift(3*UP+3*RIGHT)
+ terms[1].next_to(terms[0],buff=0.1)
+ terms[2].next_to(terms[1],buff=0.1)
+ terms[3].next_to(terms[2],buff=0.1)
+ terms[4].next_to(terms[3],buff=0.1)
+
+ self.play(ShowCreation(lnx))
+ self.wait(1)
+ self.play(FadeIn(equation),FadeIn(terms[0]),FadeIn(terms[1]),FadeIn(terms[2]),FadeIn(terms[3]),FadeIn(terms[4]))
+ self.wait(1)
+
+ bottomText1=TextMobject("$R_{n}(x)=\\frac { d }{ dx } ($","area bounded","$)$")
+
+ bottomText1.set_color_by_tex_to_color_map({"area bounded":ORANGE})
+ #bottomText2.set_color_by_tex_to_color_map({"area bounded":BLUE})
+ arrow=TextMobject("$\downarrow$")
+ arrow.scale(2.5)
+ arrow.shift(ORIGIN+x_each_unit*RIGHT*9.5+UP*y_each_unit)
+ increasingText=TextMobject("Increases!")
+ increasingText.set_color(GREEN)
+ followupText=TextMobject("as n increase!")
+ followupText.scale(0.3)
+ followupText.shift(ORIGIN+x_each_unit*11*RIGHT+UP*y_each_unit*1.1)
+ increasingText.shift(ORIGIN+x_each_unit*11*RIGHT+UP*y_each_unit*1.6)
+ increasingText.scale(0.4)
+
+ bottomText1.scale(0.5)
+ #bottomText2.scale(0.5)
+ #bottomText3.scale(0.5)
+
+ bottomText1.shift(3.5*LEFT+2*DOWN)
+ #bottomText2.shift(3.5*LEFT+2.4*DOWN)
+ #bottomText3.shift(3.5*LEFT+2.8*DOWN)
+
+ dline=DashedLine(start=ORIGIN+8*y_each_unit*UP,end=ORIGIN+8*y_each_unit*DOWN)
+ dline.shift(ORIGIN+x_each_unit*4*RIGHT)
+
+ area1=self.get_riemann_rectangles(lnx,x_max=8,x_min=4,dx=0.01,start_color=BLUE,end_color=RED,stroke_width=0,fill_opacity=0.8)
+ area2=self.get_riemann_rectangles(equation,x_max=5.2,x_min=4,dx=0.025,start_color=BLACK,end_color=BLACK,stroke_width=0,fill_opacity=1)
+
+ self.play(Write(dline))
+ self.wait(0.5)
+ self.play(ShowCreation(area1),ShowCreation(area2),Write(bottomText1))
+ # self.play(Write(bottomText2))
+ # self.play(FadeIn(bottomText3))
+ self.play(Write(arrow))
+ self.wait(0.7)
+ self.play(Write(increasingText))
+ self.play(FadeIn(followupText))
+ self.wait(2)
+
\ No newline at end of file
From 1ab1ce110d689ca0bb32cef62e3b9a4b01ba4820 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Tue, 19 May 2020 23:57:41 +0530
Subject: [PATCH 12/19] Delete script1.py
---
.../series-and-transformations/script1.py | 128 ------------------
1 file changed, 128 deletions(-)
delete mode 100644 FSF-2020/series-and-transformations/script1.py
diff --git a/FSF-2020/series-and-transformations/script1.py b/FSF-2020/series-and-transformations/script1.py
deleted file mode 100644
index 28eb07cf..00000000
--- a/FSF-2020/series-and-transformations/script1.py
+++ /dev/null
@@ -1,128 +0,0 @@
-from manimlib.imports import *
-
-
-def formFormula(coeff_list,variable_list):
- coeff_list=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
- variable_list=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
- coeff_list[0].shift(2.2*UP+1.6*LEFT)
- for i in range(0,3):
- coeff_list[i].set_color(GOLD_A)
- variable_list[i].next_to(coeff_list[i],buff=0.1)
- if i!=2:
- coeff_list[i+1].next_to(variable_list[i],buff=0.1)
- dots=TextMobject("...")
- dots.next_to(variable_list[2])
- expansion=VGroup(coeff_list[0],coeff_list[1],coeff_list[2],variable_list[0],variable_list[1],variable_list[2],dots)
- expansion.scale(0.7)
- return expansion
-
-class pieChart(Scene):
- def construct(self):
- circle1=Circle(radius=3,color=BLUE)
- powerText=TextMobject("Power Series")
- powerText.scale(0.8)
- self.play(FadeIn(powerText))
- self.play(ShowCreation(circle1))
- self.wait(1)
-
- powerGroup=VGroup(circle1,powerText)
-
- self.play(ApplyMethod(powerGroup.scale,0.5))
- self.play(ApplyMethod(powerGroup.move_to,2.2*UP))
- self.wait(0.5)
- expansion_power_coeff=[]
- variables_power=[]
- expansion_power=formFormula(expansion_power_coeff,variables_power)
- self.play(ReplacementTransform(powerText,expansion_power))
- self.wait(1)
-
- circle2=Circle(radius=1.5)
- circle2.shift(2.2*UP)
- expansion_geo_coeff=[0]*3
- variables_geo=[0]*3
- arrow1_2=Line(start=0.7*UP,end=2.5*LEFT)
- expansion_geo_coeff=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
- for i in range(0,3):
- expansion_geo_coeff[i].set_color(GOLD_A)
- variables_geo=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
- expansion_geo_coeff[0].shift(2.2*UP+1.6*LEFT)
- for i in range(0,3):
- variables_geo[i].next_to(expansion_geo_coeff[i],buff=0.1)
- if i!=2:
- expansion_geo_coeff[i+1].next_to(variables_geo[i],buff=0.1)
- dots=TextMobject("...")
- dots.next_to(variables_geo[2])
- expansion_geo=VGroup(expansion_geo_coeff[0],expansion_geo_coeff[1],expansion_geo_coeff[2],variables_geo[0],variables_geo[1],variables_geo[2],dots)
- expansion_geo.scale(0.7)
-
- self.play(ApplyMethod(circle2.shift,4*LEFT+2.5*DOWN),ApplyMethod(expansion_geo.shift,4*LEFT+2.5*DOWN))
- self.add(arrow1_2)
- self.wait(1)
-
- ones=[TextMobject("1"),TextMobject("1"),TextMobject("1")]
- for i in range(0,3):
- ones[i].set_color(GOLD_A)
- ones[0].shift(0.3*DOWN,5*LEFT)
- ones[1].next_to(ones[0],buff=0.5)
- ones[2].next_to(ones[1],buff=0.7)
- self.play(ReplacementTransform(expansion_geo_coeff[0],ones[0]),ReplacementTransform(expansion_geo_coeff[1],ones[1]),ReplacementTransform(expansion_geo_coeff[2],ones[2]))
- self.wait(1)
- expansion_geo=VGroup(ones[0],ones[1],ones[2],variables_geo[0],variables_geo[1],variables_geo[2],dots)
-
- expansion_geo_final=TextMobject("$1+x+{ x }^{ 2 }..$")
- expansion_geo_final.scale(0.8)
- expansion_geo_final.shift(0.3*DOWN+4*LEFT)
- self.play(ReplacementTransform(expansion_geo,expansion_geo_final))
- self.wait(1)
-
- circle3=Circle(radius=1.5,color=GREEN)
- circle3.shift(2.2*UP)
- expansion_taylor_coeff=[0]*3
- variables_taylor=[0]*3
- arrow1_3=Line(start=0.7*UP,end=DOWN*0.3)
- expansion_taylor_coeff=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
- for i in range(0,3):
- expansion_taylor_coeff[i].set_color(GOLD_A)
- variables_taylor=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
- expansion_taylor_coeff[0].shift(2.2*UP+1.6*LEFT)
- for i in range(0,3):
- variables_taylor[i].next_to(expansion_taylor_coeff[i],buff=0.1)
- if i!=2:
- expansion_taylor_coeff[i+1].next_to(variables_taylor[i],buff=0.1)
- dots=TextMobject("...")
- dots.next_to(variables_taylor[2])
- expansion_taylor=VGroup(expansion_taylor_coeff[0],expansion_taylor_coeff[1],expansion_taylor_coeff[2],variables_taylor[0],variables_taylor[1],variables_taylor[2],dots)
- expansion_taylor.scale(0.7)
-
- self.play(ApplyMethod(circle3.shift,4*DOWN),ApplyMethod(expansion_taylor.shift,4*DOWN))
- self.add(arrow1_3)
- self.wait(1)
-
- differentials=[TextMobject("$f(0)$"),TextMobject("${ f'\left( 0 \\right) }$"),TextMobject("$\\frac { f''\left( 0 \\right) }{ 2! }$")]
- for i in range(0,3):
- differentials[i].set_color(GOLD_A)
- differentials[0].shift(1.8*DOWN+1.15*LEFT)
- differentials[1].shift(1.8*DOWN+0.45*LEFT)
- differentials[2].shift(1.8*DOWN+0.45*RIGHT)
- differentials[0].scale(0.35)
- differentials[1].scale(0.35)
- differentials[2].scale(0.35)
- self.play(ReplacementTransform(expansion_taylor_coeff[0],differentials[0]),ReplacementTransform(expansion_taylor_coeff[1],differentials[1]),ReplacementTransform(expansion_taylor_coeff[2],differentials[2]))
- self.wait(2)
- expansion_taylor_final=VGroup(differentials[0],differentials[1],differentials[2],variables_taylor[0],variables_taylor[1],variables_taylor[2],dots)
-
- self.play(FadeOut(expansion_geo_final),FadeOut(expansion_taylor_final))
- geoText=TextMobject("Geometric Series")
- geoText.scale(0.7)
- geoText.shift(4*LEFT+0.3*DOWN)
- taylorText=TextMobject("Taylor Series")
- taylorText.scale(0.7)
- taylorText.shift(1.8*DOWN)
- self.play(FadeIn(geoText),FadeIn(taylorText))
- self.wait(1)
-
- soOntext=TextMobject("So on..!")
- soOntext.shift(4*RIGHT)
- soOntext.scale(0.8)
- self.play(FadeIn(soOntext))
- self.wait(2)
From 0b582c521b19e54183bb8c54525384ca45be1e9a Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Tue, 19 May 2020 23:57:51 +0530
Subject: [PATCH 13/19] Delete script2.py
---
.../series-and-transformations/script2.py | 94 -------------------
1 file changed, 94 deletions(-)
delete mode 100644 FSF-2020/series-and-transformations/script2.py
diff --git a/FSF-2020/series-and-transformations/script2.py b/FSF-2020/series-and-transformations/script2.py
deleted file mode 100644
index 72356c68..00000000
--- a/FSF-2020/series-and-transformations/script2.py
+++ /dev/null
@@ -1,94 +0,0 @@
-from manimlib.imports import *
-import numpy as np
-
-
-class convergence(Scene):
- def construct(self):
- originalFormula=TextMobject("$\sum _{ n=0 }^{ \infty }{ { a }_{ n }{ x }^{ n } }$")
- originalFormula.set_color(RED)
- self.play(Write(originalFormula))
- self.wait(1)
- self.play(ApplyMethod(originalFormula.shift,2.7*UP))
- self.wait(1)
-
- terms=["$a_{ 0 }$","$a_{ 1 }x$","$a_{ 2 }x^{ 2 }$","$a_{ 3 }x^{ 3 }$","$a_{ 4 }x^{ 4 }$","$a_{ 5 }x^{ 5 }$","$a_{ 6 }x^{ 6 }$","$a_{ 7 }x^{ 7 }$","$a_{ 8 }x^{ 8 }$","$a_{ 9 }x^{ 9 }$","$a_{ 10 }x^{ 10 }$","$a_{ 11 }x^{ 11 }$"]
- termsTogetherString="+".join(terms)
- termsTogether=TextMobject(termsTogetherString+"...")
- termsTogether.scale(0.8)
- termsTogether.shift(2.7*UP)
- self.play(ReplacementTransform(originalFormula,termsTogether))
- self.wait(1)
-
- termMobjectRect=[0]*12
- termMobject=TextMobject(terms[0])
- termMobject.shift(2.7*UP+6.2*LEFT)
- for i in range(1,13):
- termMobjectOld=termMobject
- termMobjectOld.scale(0.8)
- if(i<12):
- termMobject=TextMobject(terms[i])
- termMobject.next_to(termMobjectOld)
- if(i==1):
- rectDefine=TextMobject("Here","each rectangle","represents the","value of the term")
- rectDefine.set_color_by_tex_to_color_map({"each rectangle":BLUE,"value of the term":YELLOW})
- rectDefine.scale(0.7)
- rectDefine.shift(3.2*DOWN)
- self.play(Write(rectDefine))
- self.wait(1)
- if(i==2):
- ratio=TextMobject("If $\\frac { a_{ n+1 } }{ { a }_{ n } } < 1$")
- ratio.set_color(RED)
- ratio.scale(0.7)
- ratio.move_to(3.2*DOWN)
- inequality=TextMobject("$a_{ n+1 } < a_{ n }$")
- inequality.set_color(RED)
- inequality.scale(0.7)
- inequality.move_to(3.2*DOWN)
- self.play(FadeOut(rectDefine))
- self.play(Write(ratio))
- self.wait(1)
- self.play(ReplacementTransform(ratio,inequality))
- self.wait(1)
- #self.play(ApplyMethod(termMobjectOld.move_to,(2-0.3*i)*DOWN+RIGHT*0.2*i))
- termMobjectRect[i-1]=Rectangle(height=0.1,width=(5-0.4*i))
- termMobjectRect[i-1].move_to((2-0.2*i)*DOWN+RIGHT*0.2*i)
- #rectangles[p] = termMobjectRect
- #p+=1
- self.play(ReplacementTransform(termMobjectOld,termMobjectRect[i-1]))
-
- uparrow=TextMobject("$\\uparrow$")
- uparrow.set_color(GREEN)
- uparrow.scale(6)
- uparrow.shift(4*RIGHT+0.5*DOWN)
- self.play(ShowCreation(uparrow))
- self.wait(1)
-
- converges=TextMobject("Converges!")
- converges.set_color(RED)
- converges.scale(0.6)
- converges.next_to(uparrow)
- self.play(FadeIn(converges))
- self.wait(2)
-
- self.play(FadeOut(converges),FadeOut(uparrow),FadeOut(inequality))
- self.wait(0.5)
- rect=VGroup(termMobjectRect[0],termMobjectRect[1],termMobjectRect[2],termMobjectRect[3],termMobjectRect[4],termMobjectRect[5],termMobjectRect[6],termMobjectRect[7],termMobjectRect[8],termMobjectRect[9],termMobjectRect[10],termMobjectRect[11])
- self.play(ApplyMethod(rect.scale,0.2))
- for i in range(0,12):
- self.play(ApplyMethod(termMobjectRect[i].shift,i*0.04*DOWN+(11-(3-0.11*i)*i)*LEFT*0.3))
- func=TextMobject("$\\approx$","$f(x)$")
- func.set_color_by_tex_to_color_map({"$f(x)$":RED})
- func.scale(0.8)
- func.shift(DOWN+4.5*RIGHT+0.1*UP)
- self.play(FadeIn(func))
-
- rightarrow=TextMobject("$\\rightarrow$")
- rightarrow.set_color(GREEN)
- rightarrow.scale(4)
- rightarrow.shift(2*DOWN)
- converges=TextMobject("Hence even the","sum converges!")
- converges.set_color_by_tex_to_color_map({"sum converges!":RED})
- converges.move_to(3*DOWN)
- converges.scale(0.7)
- self.play(Write(rightarrow),FadeIn(converges))
- self.wait(2)
From 08d2381f9cc7456169c8173241a0ef1625c4691e Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Tue, 19 May 2020 23:58:00 +0530
Subject: [PATCH 14/19] Delete script3.py
---
.../series-and-transformations/script3.py | 156 ------------------
1 file changed, 156 deletions(-)
delete mode 100644 FSF-2020/series-and-transformations/script3.py
diff --git a/FSF-2020/series-and-transformations/script3.py b/FSF-2020/series-and-transformations/script3.py
deleted file mode 100644
index f710f427..00000000
--- a/FSF-2020/series-and-transformations/script3.py
+++ /dev/null
@@ -1,156 +0,0 @@
-from manimlib.imports import*
-import math
-
-class intro(Scene):
- def construct(self):
- introText1=TextMobject("Let's analyse")
- introText2=TextMobject("for")
- function_main=TextMobject("$\sum { { (-1) }^{ n }{ x }^{ 2n } }$")
- function_main.set_color(GREEN)
- introText1.scale(1.2)
- introText1.shift(2*UP)
- introText2.scale(0.7)
- introText2.shift(UP)
- function_main.scale(2)
- function_main.shift(DOWN)
- function_expan=TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }+{ x }^{ 8 }+..$")
- function_expan.set_color(RED)
- function_expan.scale(1.2)
- function_expan.shift(2*UP)
-
- self.play(Write(introText1))
- self.play(FadeIn(introText2))
- self.wait(0.5)
- self.play(Write(function_main))
- self.wait(1)
-
- self.play(FadeOut(introText1),FadeOut(introText2))
- self.play(ApplyMethod(function_main.shift,3*UP))
- self.wait(0.5)
- self.play(ReplacementTransform(function_main,function_expan))
- self.wait(1)
- self.play(ApplyMethod(function_expan.scale,0.5))
- function_expan.to_edge(UP+RIGHT)
- self.play(ReplacementTransform(function_expan,function_expan))
- self.wait(1)
-
-
-class graphScene(GraphScene):
- CONFIG = {
- "x_min": -8,
- "x_max": 8,
- "y_min": -8,
- "y_max": 8,
- "graph_origin": ORIGIN,
- "function_color": RED,
- "axes_color": GREEN,
- "x_axis_label": "$x$",
- "y_axis_label": "$y$",
- "exclude_zero_label": True,
- "x_labeled_nums": range(-1, 2, 1),
- "y_labeled_nums": range(0,2,1)
- }
-
- def construct(self):
-
- x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
- y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
-
- function_expan=TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }+{ x }^{ 8 }+..$")
- function_expan.set_color(RED)
- function_expan.scale(0.6)
- function_expan.to_edge(UP+RIGHT)
- self.add(function_expan)
-
- self.setup_axes(animate=True)
-
- eqText=[TextMobject("$1$"),TextMobject("$1-{ x }^{ 2 }$"),TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }$"),TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }$")]
- for i in range(0,len(eqText)):
- eqText[i].scale(0.6)
- eqText[i].set_color(BLUE)
- eqText[i].shift(ORIGIN+UP*2*y_each_unit+RIGHT*3.3*x_each_unit)
- eqTextTerm=TextMobject("And so on..!")
- eqTextTerm.set_color(BLUE)
- eqTextTerm.scale(0.6)
- eqTextTerm.shift(ORIGIN+UP*2*y_each_unit+3*RIGHT*x_each_unit)
- equation1 = self.get_graph(lambda x : 1,color = RED,x_min = -8,x_max=8)
- equation2 = self.get_graph(lambda x : 1-math.pow(x,2),color = RED,x_min = -1.7,x_max=1.7)
- equation3 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4),color = RED,x_min = -1.6,x_max=1.6)
- equation4 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6),color = RED,x_min = -1.45,x_max=1.45)
- equation5 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8),color = RED,x_min = -1.35,x_max=1.35)
- equation6 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10),color = RED,x_min = -1.3,x_max=1.3)
- equation7 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12),color = RED,x_min = -1.25,x_max=1.25)
- equation8 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14),color = RED,x_min = -1.2,x_max=1.2)
- equation9 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16),color = RED,x_min = -1.15,x_max=1.15)
- equation10 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16)-math.pow(x,18),color = RED,x_min = -1.15,x_max=1.15)
-
- textBtwAnim1=TextMobject("Here the graph just","oscilates")
- textBtwAnim1.set_color_by_tex_to_color_map({"oscilates":BLUE})
- textBtwAnim2=TextMobject("after","the","point","(as we add higher order terms)")
- textBtwAnim2.set_color_by_tex_to_color_map({"after":BLUE,"point":YELLOW})
- textBtwAnim3=TextMobject("$x=1$")
- textBtwAnim1.scale(0.4)
- textBtwAnim2.scale(0.4)
- textBtwAnim3.scale(1.2)
- textBtwAnim1.shift(2.1*DOWN+4.3*RIGHT)
- textBtwAnim2.shift(2.4*DOWN+4.1*RIGHT)
- textBtwAnim3.shift(2.9*DOWN+4.3*RIGHT)
-
- self.play(ShowCreation(equation1),run_time=0.8)
- self.add(eqText[0])
- self.wait(1)
- self.play(ReplacementTransform(equation1,equation2),ReplacementTransform(eqText[0],eqText[1]))
- self.wait(0.5)
- self.play(ReplacementTransform(equation2,equation3),ReplacementTransform(eqText[1],eqText[2]))
- self.wait(0.4)
- self.play(ReplacementTransform(equation3,equation4),ReplacementTransform(eqText[2],eqText[3]))
- self.wait(0.3)
- self.play(FadeOut(eqText[3]))
- self.play(FadeIn(eqTextTerm))
- self.play(Write(textBtwAnim1),Write(textBtwAnim2))
- self.play(FadeIn(textBtwAnim3))
- self.play(ReplacementTransform(equation4,equation5))
- self.wait(0.2)
- self.play(ReplacementTransform(equation5,equation6))
- self.wait(0.2)
- self.play(ReplacementTransform(equation6,equation7))
- self.wait(0.2)
- self.play(ReplacementTransform(equation7,equation8))
- self.wait(0.2)
- self.play(ReplacementTransform(equation8,equation9))
- self.wait(0.2)
- self.play(ReplacementTransform(equation9,equation10))
- self.wait(1)
-
- self.play(FadeOut(textBtwAnim1),FadeOut(textBtwAnim2),FadeOut(textBtwAnim3),FadeOut(equation10),FadeOut(eqTextTerm))
- self.wait(1)
-
- convergeLine=Line(start=ORIGIN+x_each_unit*LEFT,end=ORIGIN+x_each_unit*RIGHT,color=WHITE)
- divergeLineLeft=Line(start=ORIGIN+x_each_unit*LEFT,end=ORIGIN+x_each_unit*LEFT*8,color=RED)
- divergeLineRight=Line(start=ORIGIN+x_each_unit*RIGHT,end=ORIGIN+x_each_unit*8*RIGHT,color=RED)
- circle1=Circle(radius=0.01,color=PURPLE_E)
- circle2=Circle(radius=0.01,color=PURPLE_E)
- circle1.shift(ORIGIN+LEFT*x_each_unit)
- circle2.shift(ORIGIN+RIGHT*x_each_unit)
- convergeText=TextMobject("Converges")
- divergeText1=TextMobject("Diverges")
- divergeText2=TextMobject("Diverges")
- convergeText.set_color(GREEN)
- divergeText1.set_color(RED)
- divergeText2.set_color(RED)
- convergeText.scale(0.5)
- divergeText1.scale(0.5)
- divergeText2.scale(0.5)
- convergeText.shift(1.6*UP)
- divergeText1.shift(0.3*UP+1.5*LEFT)
- divergeText2.shift(0.3*UP+1.5*RIGHT)
- self.play(Write(divergeLineLeft),Write(divergeLineRight))
- self.play(FadeIn(convergeLine))
- self.wait(0.5)
- self.play(FadeOut(self.axes))
- self.play(Write(circle1),Write(circle2))
- self.wait(0.5)
- self.play(ApplyMethod(convergeLine.shift,1.3*UP),ApplyMethod(function_expan.shift,5*LEFT+DOWN))
- self.play(FadeIn(convergeText),FadeIn(divergeText1),FadeIn(divergeText2))
- self.wait(2)
-
From 01836aac381b74d570f67c56caae8b16c624401d Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Tue, 19 May 2020 23:58:08 +0530
Subject: [PATCH 15/19] Delete script4.py
---
.../series-and-transformations/script4.py | 108 ------------------
1 file changed, 108 deletions(-)
delete mode 100644 FSF-2020/series-and-transformations/script4.py
diff --git a/FSF-2020/series-and-transformations/script4.py b/FSF-2020/series-and-transformations/script4.py
deleted file mode 100644
index 412d20c0..00000000
--- a/FSF-2020/series-and-transformations/script4.py
+++ /dev/null
@@ -1,108 +0,0 @@
-from manimlib.imports import *
-import math
-
-class intro(Scene):
- def construct(self):
- introText1=TextMobject("Consider the","above","example..")
- introText1.scale(0.8)
- introText1.set_color_by_tex_to_color_map({"above":YELLOW})
- self.play(Write(introText1))
- self.wait(1)
-
-class graphScene(GraphScene,MovingCameraScene):
- CONFIG = {
- "x_min": -5,
- "x_max": 5,
- "y_min": -5,
- "y_max": 5,
- "graph_origin": ORIGIN,
- "function_color": RED,
- "axes_color": GREEN,
- "x_axis_label": "$x$",
- "y_axis_label": "$y$",
- "exclude_zero_label": True,
- "x_labeled_nums": range(-1, 2, 1),
- "y_labeled_nums": range(0,2,1),
- "y_axis_height":7,
- "x_axis_width":7
- }
-
- def setup(self):
- GraphScene.setup(self)
- MovingCameraScene.setup(self)
-
- def construct(self):
- x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
- y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
-
- function_expan=TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }+{ x }^{ 8 }+..$")
- function_expan.scale(0.6)
- function_expan.set_color(RED)
- function_expan.to_edge(UP+RIGHT)
- self.add(function_expan)
-
- self.setup_axes()
-
- equation = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16)-math.pow(x,18),color = RED,x_min = -1.1,x_max=1.1)
- self.play(ShowCreation(equation))
- self.wait(1)
-
- dashLineLeft=DashedLine(start=ORIGIN+y_each_unit*5*UP,end=ORIGIN+y_each_unit*5*DOWN)
- dashLineRight=DashedLine(start=ORIGIN+y_each_unit*5*UP,end=ORIGIN+y_each_unit*5*DOWN)
- dashLineLeft.shift(ORIGIN+LEFT*x_each_unit)
- dashLineRight.shift(ORIGIN+RIGHT*x_each_unit)
- radiusLine=Line(start=ORIGIN,end=ORIGIN+RIGHT*x_each_unit)
- rangeLine=Line(start=ORIGIN+LEFT*x_each_unit,end=ORIGIN+RIGHT*x_each_unit)
- circle=Circle(radius=x_each_unit)
- movingPoint=Circle(radius=0.025)
- movingPoint.shift(ORIGIN+RIGHT*x_each_unit)
- circleEq1=self.get_graph(lambda x:math.sqrt(1-x**2),color=BLUE,x_max=-1,x_min=1)
- circleEq2=self.get_graph(lambda x:-math.sqrt(1-x**2),color=BLUE,x_max=1,x_min=-1)
-
- self.play(Write(dashLineLeft),Write(dashLineRight))
- self.wait(1)
-
- equation_updated=self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16)-math.pow(x,18),color = GREEN,x_min = -1,x_max=1)
- self.play(FadeOut(self.axes),ReplacementTransform(equation,equation_updated))
- self.wait(0.5)
- self.play(Write(radiusLine))
- self.play(MoveAlongPath(movingPoint,circleEq1))
- self.play(MoveAlongPath(movingPoint,circleEq2))
- self.play(FadeIn(circle))
- self.wait(1)
-
- radiusText=TextMobject("Radius of convergence")
- radiusText.scale(0.14)
- radiusText.shift(ORIGIN+RIGHT*x_each_unit*0.45+DOWN*y_each_unit*0.2)
-
- self.play(Write(radiusText))
- self.wait(0.6)
-
- self.camera_frame.save_state()
- self.camera_frame.set_width(5.5)
- self.play(self.camera_frame.move_to, ORIGIN)
- self.wait(1)
- self.camera_frame.set_width(14)
- self.wait(1.3)
-
- self.play(FadeOut(radiusText),FadeOut(circle),FadeOut(movingPoint))
- extendLine=Line(start=ORIGIN,end=ORIGIN+x_each_unit*LEFT)
- self.play(Write(extendLine))
- doubleArrow=TextMobject("$\longleftrightarrow$")
- doubleArrow.scale(1.6)
- doubleArrow.set_color(BLUE)
- doubleArrow.shift(ORIGIN+DOWN*y_each_unit*0.5)
- self.play(FadeIn(doubleArrow))
- self.wait(1)
- rangeText=TextMobject("Interval of convergence")
- rangeText.scale(0.15)
- rangeText.shift(ORIGIN+y_each_unit*DOWN)
- self.play(Write(rangeText))
- self.wait(0.6)
-
- self.camera_frame.save_state()
- self.camera_frame.set_width(5.5)
- self.play(self.camera_frame.move_to, ORIGIN)
- self.wait(1)
- self.camera_frame.set_width(14)
- self.wait(1.5)
From 828202816418ededf16deb15d3cf37d930ad5452 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Tue, 19 May 2020 23:58:16 +0530
Subject: [PATCH 16/19] Delete script5.py
---
.../series-and-transformations/script5.py | 136 ------------------
1 file changed, 136 deletions(-)
delete mode 100644 FSF-2020/series-and-transformations/script5.py
diff --git a/FSF-2020/series-and-transformations/script5.py b/FSF-2020/series-and-transformations/script5.py
deleted file mode 100644
index e9681aa5..00000000
--- a/FSF-2020/series-and-transformations/script5.py
+++ /dev/null
@@ -1,136 +0,0 @@
-from manimlib.imports import *
-import math
-
-class uniformlyConvergent(Scene):
- def construct(self):
- introText1=TextMobject("Again consider the","above","example")
- introText2=TextMobject("Let","$g(x)=\\frac { 1 }{ 1+{ x }^{ 2 } }$","and","x=0.5 $\in$(-1,1)")
- introText3=TextMobject("Lets analyse..","!")
- introText1.scale(0.8)
- introText2.scale(0.7)
- introText3.scale(0.9)
- introText3.shift(DOWN)
- introText1.set_color_by_tex_to_color_map({"above":YELLOW})
- introText2.set_color_by_tex_to_color_map({"$g(x)=\\frac { 1 }{ 1+{ x }^{ 2 } }$":BLUE,"x=0.5 $\in$(-1,1)":YELLOW})
- introText3.set_color_by_tex_to_color_map({"!":GREEN})
- self.play(Write(introText1))
- self.wait(0.5)
- self.play(FadeOut(introText1))
- self.play(Write(introText2))
- self.play(FadeIn(introText3))
- self.wait(2)
-
-
-def gety(x,n):
- ans=0
- for i in range(0,n+1):
- if(i%2==0):
- ans+=(math.pow(x,2*i))
- else:
- ans-=(math.pow(x,2*i))
- return ans
-
-def makeSeries(x,points,x_each_unit,y_each_unit):
- p=0
- for point in points:
- y=gety(x,p)
- point.shift(ORIGIN+RIGHT*x_each_unit*p+UP*y_each_unit*y)
- p+=1
-
-def makeLines(x,numPoints,x_each_unit,y_each_unit):
- lines=[0]*numPoints
- for i in range(0,numPoints-1):
- y=gety(x,i)
- y_next=gety(x,i+1)
- lines[i]=Line(start=ORIGIN+RIGHT*x_each_unit*i+UP*y_each_unit*y,end=ORIGIN+RIGHT*x_each_unit*(i+1)+UP*y_each_unit*y_next,color=RED)
- return lines
-
-class graphScene(GraphScene,MovingCameraScene):
- CONFIG = {
- "x_min": -6,
- "x_max": 6,
- "y_min": -5,
- "y_max": 5,
- "graph_origin": ORIGIN,
- "function_color": RED,
- "axes_color": GREEN,
- "x_axis_label": "$k$",
- "y_axis_label": "$f(\\frac{1}{2})_k$",
- "exclude_zero_label": True,
- "x_axis_width":7,
- "y_axis_height":7
- }
-
- def setup(self):
- GraphScene.setup(self)
- MovingCameraScene.setup(self)
-
-
- def construct(self):
- x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
- y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
- sequence=TextMobject("$1$ , $1-(0.5)^2$ , $1-(0.5)^2+(0.5)^4..$")
- sequence.set_color(RED)
- sequence.scale(0.35)
- sequence.to_edge(UP+RIGHT)
- formula=TextMobject("$f(x)_{ k }=\sum _{ i=0 }^{ k }{ (-1)^{ i }(x)^{ 2i } } $")
- formula.set_color(PURPLE_C)
- formula.scale(0.4)
- formula.shift(5.3*RIGHT+3*UP)
- fLine=Line(start=ORIGIN+x_each_unit*6*LEFT,end=ORIGIN+x_each_unit*6*RIGHT)
- fLine.shift(ORIGIN+(4/5)*y_each_unit*UP)
- fLineText=TextMobject("$g(0.5)=\\frac { 4 }{ 5 } $")
- fLineText.set_color(RED)
- fLineText.scale(0.3)
- fLineText.shift(UP*1.2*y_each_unit+RIGHT*x_each_unit+4*LEFT)
- points=[Dot(radius=0.03,color=BLUE) for i in range(0,6)]
- makeSeries(0.5,points,x_each_unit,y_each_unit)
- lines=makeLines(0.5,6,x_each_unit,y_each_unit)
-
-
- self.add(sequence)
- self.add(formula)
- self.setup_axes(animate=True)
- self.play(Write(fLine))
- self.add(fLineText)
- for p in points:
- self.add(p)
- for p in range(0,5):
- self.play(Write(lines[p]))
- self.wait(0.5)
- self.camera_frame.save_state()
- self.camera_frame.set_width(0.6)
- self.play(self.camera_frame.move_to, points[0])
- self.wait(0.4)
- self.play(self.camera_frame.move_to, points[1])
- self.wait(0.4)
- self.play(self.camera_frame.move_to, points[2])
- self.wait(0.3)
- self.play(self.camera_frame.move_to, points[3])
- self.wait(1)
- self.play(self.camera_frame.move_to,ORIGIN)
- self.camera_frame.set_width(14)
- self.wait(1)
-
- explanation1=TextMobject("Since the series","converges","to")
- explanation1.set_color_by_tex_to_color_map({"converges":YELLOW})
- explanation2=TextMobject("$\\frac {4}{5}$")
- explanation2.set_color(BLUE)
- explanation3=TextMobject("Hence","$\\forall \epsilon>0$,","$\exists k$","such that,")
- explanation3.set_color_by_tex_to_color_map({"$\\forall \epsilon>0$":BLUE,"$\exists k$":YELLOW})
- explanation4=TextMobject("$\left| { f\left( \\frac { 1 }{ 2 } \\right) }_{ k }-\\frac { 4 }{ 5 } \\right| <$","$\epsilon$")
- explanation4.set_color_by_tex_to_color_map({"$\epsilon$":RED})
- explanation1.scale(0.5)
- explanation3.scale(0.5)
- explanation1.shift(1.8*DOWN+3.5*RIGHT)
- explanation2.shift(2.4*DOWN+3.5*RIGHT)
- explanation3.shift(1.8*DOWN+3.5*RIGHT)
- explanation4.shift(2.4*DOWN+3.5*RIGHT)
-
- self.play(Write(explanation1))
- self.play(FadeIn(explanation2))
- self.wait(1)
- self.play(FadeOut(explanation1),FadeOut(explanation2))
- self.play(Write(explanation3))
- self.play(Write(explanation4))
- self.wait(2)
From 6391e4ee7b577235ab4e50ab59e44f58ca0cf50a Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Tue, 19 May 2020 23:58:33 +0530
Subject: [PATCH 17/19] Add files via upload
---
.../Power Series/script1.py | 128 ++++++++++++++
.../Power Series/script2.py | 94 +++++++++++
.../Power Series/script3.py | 156 ++++++++++++++++++
.../Power Series/script4.py | 108 ++++++++++++
.../Power Series/script5.py | 136 +++++++++++++++
5 files changed, 622 insertions(+)
create mode 100644 FSF-2020/series-and-transformations/Power Series/script1.py
create mode 100644 FSF-2020/series-and-transformations/Power Series/script2.py
create mode 100644 FSF-2020/series-and-transformations/Power Series/script3.py
create mode 100644 FSF-2020/series-and-transformations/Power Series/script4.py
create mode 100644 FSF-2020/series-and-transformations/Power Series/script5.py
diff --git a/FSF-2020/series-and-transformations/Power Series/script1.py b/FSF-2020/series-and-transformations/Power Series/script1.py
new file mode 100644
index 00000000..28eb07cf
--- /dev/null
+++ b/FSF-2020/series-and-transformations/Power Series/script1.py
@@ -0,0 +1,128 @@
+from manimlib.imports import *
+
+
+def formFormula(coeff_list,variable_list):
+ coeff_list=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
+ variable_list=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
+ coeff_list[0].shift(2.2*UP+1.6*LEFT)
+ for i in range(0,3):
+ coeff_list[i].set_color(GOLD_A)
+ variable_list[i].next_to(coeff_list[i],buff=0.1)
+ if i!=2:
+ coeff_list[i+1].next_to(variable_list[i],buff=0.1)
+ dots=TextMobject("...")
+ dots.next_to(variable_list[2])
+ expansion=VGroup(coeff_list[0],coeff_list[1],coeff_list[2],variable_list[0],variable_list[1],variable_list[2],dots)
+ expansion.scale(0.7)
+ return expansion
+
+class pieChart(Scene):
+ def construct(self):
+ circle1=Circle(radius=3,color=BLUE)
+ powerText=TextMobject("Power Series")
+ powerText.scale(0.8)
+ self.play(FadeIn(powerText))
+ self.play(ShowCreation(circle1))
+ self.wait(1)
+
+ powerGroup=VGroup(circle1,powerText)
+
+ self.play(ApplyMethod(powerGroup.scale,0.5))
+ self.play(ApplyMethod(powerGroup.move_to,2.2*UP))
+ self.wait(0.5)
+ expansion_power_coeff=[]
+ variables_power=[]
+ expansion_power=formFormula(expansion_power_coeff,variables_power)
+ self.play(ReplacementTransform(powerText,expansion_power))
+ self.wait(1)
+
+ circle2=Circle(radius=1.5)
+ circle2.shift(2.2*UP)
+ expansion_geo_coeff=[0]*3
+ variables_geo=[0]*3
+ arrow1_2=Line(start=0.7*UP,end=2.5*LEFT)
+ expansion_geo_coeff=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
+ for i in range(0,3):
+ expansion_geo_coeff[i].set_color(GOLD_A)
+ variables_geo=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
+ expansion_geo_coeff[0].shift(2.2*UP+1.6*LEFT)
+ for i in range(0,3):
+ variables_geo[i].next_to(expansion_geo_coeff[i],buff=0.1)
+ if i!=2:
+ expansion_geo_coeff[i+1].next_to(variables_geo[i],buff=0.1)
+ dots=TextMobject("...")
+ dots.next_to(variables_geo[2])
+ expansion_geo=VGroup(expansion_geo_coeff[0],expansion_geo_coeff[1],expansion_geo_coeff[2],variables_geo[0],variables_geo[1],variables_geo[2],dots)
+ expansion_geo.scale(0.7)
+
+ self.play(ApplyMethod(circle2.shift,4*LEFT+2.5*DOWN),ApplyMethod(expansion_geo.shift,4*LEFT+2.5*DOWN))
+ self.add(arrow1_2)
+ self.wait(1)
+
+ ones=[TextMobject("1"),TextMobject("1"),TextMobject("1")]
+ for i in range(0,3):
+ ones[i].set_color(GOLD_A)
+ ones[0].shift(0.3*DOWN,5*LEFT)
+ ones[1].next_to(ones[0],buff=0.5)
+ ones[2].next_to(ones[1],buff=0.7)
+ self.play(ReplacementTransform(expansion_geo_coeff[0],ones[0]),ReplacementTransform(expansion_geo_coeff[1],ones[1]),ReplacementTransform(expansion_geo_coeff[2],ones[2]))
+ self.wait(1)
+ expansion_geo=VGroup(ones[0],ones[1],ones[2],variables_geo[0],variables_geo[1],variables_geo[2],dots)
+
+ expansion_geo_final=TextMobject("$1+x+{ x }^{ 2 }..$")
+ expansion_geo_final.scale(0.8)
+ expansion_geo_final.shift(0.3*DOWN+4*LEFT)
+ self.play(ReplacementTransform(expansion_geo,expansion_geo_final))
+ self.wait(1)
+
+ circle3=Circle(radius=1.5,color=GREEN)
+ circle3.shift(2.2*UP)
+ expansion_taylor_coeff=[0]*3
+ variables_taylor=[0]*3
+ arrow1_3=Line(start=0.7*UP,end=DOWN*0.3)
+ expansion_taylor_coeff=[TextMobject("${ a }_{ 0 }$"),TextMobject("${ a }_{ 1 }$"),TextMobject("${ a }_{ 2 }$")]
+ for i in range(0,3):
+ expansion_taylor_coeff[i].set_color(GOLD_A)
+ variables_taylor=[TextMobject("+"),TextMobject("${ x }$+"),TextMobject("${ x }^{ 2 }$")]
+ expansion_taylor_coeff[0].shift(2.2*UP+1.6*LEFT)
+ for i in range(0,3):
+ variables_taylor[i].next_to(expansion_taylor_coeff[i],buff=0.1)
+ if i!=2:
+ expansion_taylor_coeff[i+1].next_to(variables_taylor[i],buff=0.1)
+ dots=TextMobject("...")
+ dots.next_to(variables_taylor[2])
+ expansion_taylor=VGroup(expansion_taylor_coeff[0],expansion_taylor_coeff[1],expansion_taylor_coeff[2],variables_taylor[0],variables_taylor[1],variables_taylor[2],dots)
+ expansion_taylor.scale(0.7)
+
+ self.play(ApplyMethod(circle3.shift,4*DOWN),ApplyMethod(expansion_taylor.shift,4*DOWN))
+ self.add(arrow1_3)
+ self.wait(1)
+
+ differentials=[TextMobject("$f(0)$"),TextMobject("${ f'\left( 0 \\right) }$"),TextMobject("$\\frac { f''\left( 0 \\right) }{ 2! }$")]
+ for i in range(0,3):
+ differentials[i].set_color(GOLD_A)
+ differentials[0].shift(1.8*DOWN+1.15*LEFT)
+ differentials[1].shift(1.8*DOWN+0.45*LEFT)
+ differentials[2].shift(1.8*DOWN+0.45*RIGHT)
+ differentials[0].scale(0.35)
+ differentials[1].scale(0.35)
+ differentials[2].scale(0.35)
+ self.play(ReplacementTransform(expansion_taylor_coeff[0],differentials[0]),ReplacementTransform(expansion_taylor_coeff[1],differentials[1]),ReplacementTransform(expansion_taylor_coeff[2],differentials[2]))
+ self.wait(2)
+ expansion_taylor_final=VGroup(differentials[0],differentials[1],differentials[2],variables_taylor[0],variables_taylor[1],variables_taylor[2],dots)
+
+ self.play(FadeOut(expansion_geo_final),FadeOut(expansion_taylor_final))
+ geoText=TextMobject("Geometric Series")
+ geoText.scale(0.7)
+ geoText.shift(4*LEFT+0.3*DOWN)
+ taylorText=TextMobject("Taylor Series")
+ taylorText.scale(0.7)
+ taylorText.shift(1.8*DOWN)
+ self.play(FadeIn(geoText),FadeIn(taylorText))
+ self.wait(1)
+
+ soOntext=TextMobject("So on..!")
+ soOntext.shift(4*RIGHT)
+ soOntext.scale(0.8)
+ self.play(FadeIn(soOntext))
+ self.wait(2)
diff --git a/FSF-2020/series-and-transformations/Power Series/script2.py b/FSF-2020/series-and-transformations/Power Series/script2.py
new file mode 100644
index 00000000..72356c68
--- /dev/null
+++ b/FSF-2020/series-and-transformations/Power Series/script2.py
@@ -0,0 +1,94 @@
+from manimlib.imports import *
+import numpy as np
+
+
+class convergence(Scene):
+ def construct(self):
+ originalFormula=TextMobject("$\sum _{ n=0 }^{ \infty }{ { a }_{ n }{ x }^{ n } }$")
+ originalFormula.set_color(RED)
+ self.play(Write(originalFormula))
+ self.wait(1)
+ self.play(ApplyMethod(originalFormula.shift,2.7*UP))
+ self.wait(1)
+
+ terms=["$a_{ 0 }$","$a_{ 1 }x$","$a_{ 2 }x^{ 2 }$","$a_{ 3 }x^{ 3 }$","$a_{ 4 }x^{ 4 }$","$a_{ 5 }x^{ 5 }$","$a_{ 6 }x^{ 6 }$","$a_{ 7 }x^{ 7 }$","$a_{ 8 }x^{ 8 }$","$a_{ 9 }x^{ 9 }$","$a_{ 10 }x^{ 10 }$","$a_{ 11 }x^{ 11 }$"]
+ termsTogetherString="+".join(terms)
+ termsTogether=TextMobject(termsTogetherString+"...")
+ termsTogether.scale(0.8)
+ termsTogether.shift(2.7*UP)
+ self.play(ReplacementTransform(originalFormula,termsTogether))
+ self.wait(1)
+
+ termMobjectRect=[0]*12
+ termMobject=TextMobject(terms[0])
+ termMobject.shift(2.7*UP+6.2*LEFT)
+ for i in range(1,13):
+ termMobjectOld=termMobject
+ termMobjectOld.scale(0.8)
+ if(i<12):
+ termMobject=TextMobject(terms[i])
+ termMobject.next_to(termMobjectOld)
+ if(i==1):
+ rectDefine=TextMobject("Here","each rectangle","represents the","value of the term")
+ rectDefine.set_color_by_tex_to_color_map({"each rectangle":BLUE,"value of the term":YELLOW})
+ rectDefine.scale(0.7)
+ rectDefine.shift(3.2*DOWN)
+ self.play(Write(rectDefine))
+ self.wait(1)
+ if(i==2):
+ ratio=TextMobject("If $\\frac { a_{ n+1 } }{ { a }_{ n } } < 1$")
+ ratio.set_color(RED)
+ ratio.scale(0.7)
+ ratio.move_to(3.2*DOWN)
+ inequality=TextMobject("$a_{ n+1 } < a_{ n }$")
+ inequality.set_color(RED)
+ inequality.scale(0.7)
+ inequality.move_to(3.2*DOWN)
+ self.play(FadeOut(rectDefine))
+ self.play(Write(ratio))
+ self.wait(1)
+ self.play(ReplacementTransform(ratio,inequality))
+ self.wait(1)
+ #self.play(ApplyMethod(termMobjectOld.move_to,(2-0.3*i)*DOWN+RIGHT*0.2*i))
+ termMobjectRect[i-1]=Rectangle(height=0.1,width=(5-0.4*i))
+ termMobjectRect[i-1].move_to((2-0.2*i)*DOWN+RIGHT*0.2*i)
+ #rectangles[p] = termMobjectRect
+ #p+=1
+ self.play(ReplacementTransform(termMobjectOld,termMobjectRect[i-1]))
+
+ uparrow=TextMobject("$\\uparrow$")
+ uparrow.set_color(GREEN)
+ uparrow.scale(6)
+ uparrow.shift(4*RIGHT+0.5*DOWN)
+ self.play(ShowCreation(uparrow))
+ self.wait(1)
+
+ converges=TextMobject("Converges!")
+ converges.set_color(RED)
+ converges.scale(0.6)
+ converges.next_to(uparrow)
+ self.play(FadeIn(converges))
+ self.wait(2)
+
+ self.play(FadeOut(converges),FadeOut(uparrow),FadeOut(inequality))
+ self.wait(0.5)
+ rect=VGroup(termMobjectRect[0],termMobjectRect[1],termMobjectRect[2],termMobjectRect[3],termMobjectRect[4],termMobjectRect[5],termMobjectRect[6],termMobjectRect[7],termMobjectRect[8],termMobjectRect[9],termMobjectRect[10],termMobjectRect[11])
+ self.play(ApplyMethod(rect.scale,0.2))
+ for i in range(0,12):
+ self.play(ApplyMethod(termMobjectRect[i].shift,i*0.04*DOWN+(11-(3-0.11*i)*i)*LEFT*0.3))
+ func=TextMobject("$\\approx$","$f(x)$")
+ func.set_color_by_tex_to_color_map({"$f(x)$":RED})
+ func.scale(0.8)
+ func.shift(DOWN+4.5*RIGHT+0.1*UP)
+ self.play(FadeIn(func))
+
+ rightarrow=TextMobject("$\\rightarrow$")
+ rightarrow.set_color(GREEN)
+ rightarrow.scale(4)
+ rightarrow.shift(2*DOWN)
+ converges=TextMobject("Hence even the","sum converges!")
+ converges.set_color_by_tex_to_color_map({"sum converges!":RED})
+ converges.move_to(3*DOWN)
+ converges.scale(0.7)
+ self.play(Write(rightarrow),FadeIn(converges))
+ self.wait(2)
diff --git a/FSF-2020/series-and-transformations/Power Series/script3.py b/FSF-2020/series-and-transformations/Power Series/script3.py
new file mode 100644
index 00000000..f710f427
--- /dev/null
+++ b/FSF-2020/series-and-transformations/Power Series/script3.py
@@ -0,0 +1,156 @@
+from manimlib.imports import*
+import math
+
+class intro(Scene):
+ def construct(self):
+ introText1=TextMobject("Let's analyse")
+ introText2=TextMobject("for")
+ function_main=TextMobject("$\sum { { (-1) }^{ n }{ x }^{ 2n } }$")
+ function_main.set_color(GREEN)
+ introText1.scale(1.2)
+ introText1.shift(2*UP)
+ introText2.scale(0.7)
+ introText2.shift(UP)
+ function_main.scale(2)
+ function_main.shift(DOWN)
+ function_expan=TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }+{ x }^{ 8 }+..$")
+ function_expan.set_color(RED)
+ function_expan.scale(1.2)
+ function_expan.shift(2*UP)
+
+ self.play(Write(introText1))
+ self.play(FadeIn(introText2))
+ self.wait(0.5)
+ self.play(Write(function_main))
+ self.wait(1)
+
+ self.play(FadeOut(introText1),FadeOut(introText2))
+ self.play(ApplyMethod(function_main.shift,3*UP))
+ self.wait(0.5)
+ self.play(ReplacementTransform(function_main,function_expan))
+ self.wait(1)
+ self.play(ApplyMethod(function_expan.scale,0.5))
+ function_expan.to_edge(UP+RIGHT)
+ self.play(ReplacementTransform(function_expan,function_expan))
+ self.wait(1)
+
+
+class graphScene(GraphScene):
+ CONFIG = {
+ "x_min": -8,
+ "x_max": 8,
+ "y_min": -8,
+ "y_max": 8,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$x$",
+ "y_axis_label": "$y$",
+ "exclude_zero_label": True,
+ "x_labeled_nums": range(-1, 2, 1),
+ "y_labeled_nums": range(0,2,1)
+ }
+
+ def construct(self):
+
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+
+ function_expan=TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }+{ x }^{ 8 }+..$")
+ function_expan.set_color(RED)
+ function_expan.scale(0.6)
+ function_expan.to_edge(UP+RIGHT)
+ self.add(function_expan)
+
+ self.setup_axes(animate=True)
+
+ eqText=[TextMobject("$1$"),TextMobject("$1-{ x }^{ 2 }$"),TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }$"),TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }$")]
+ for i in range(0,len(eqText)):
+ eqText[i].scale(0.6)
+ eqText[i].set_color(BLUE)
+ eqText[i].shift(ORIGIN+UP*2*y_each_unit+RIGHT*3.3*x_each_unit)
+ eqTextTerm=TextMobject("And so on..!")
+ eqTextTerm.set_color(BLUE)
+ eqTextTerm.scale(0.6)
+ eqTextTerm.shift(ORIGIN+UP*2*y_each_unit+3*RIGHT*x_each_unit)
+ equation1 = self.get_graph(lambda x : 1,color = RED,x_min = -8,x_max=8)
+ equation2 = self.get_graph(lambda x : 1-math.pow(x,2),color = RED,x_min = -1.7,x_max=1.7)
+ equation3 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4),color = RED,x_min = -1.6,x_max=1.6)
+ equation4 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6),color = RED,x_min = -1.45,x_max=1.45)
+ equation5 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8),color = RED,x_min = -1.35,x_max=1.35)
+ equation6 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10),color = RED,x_min = -1.3,x_max=1.3)
+ equation7 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12),color = RED,x_min = -1.25,x_max=1.25)
+ equation8 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14),color = RED,x_min = -1.2,x_max=1.2)
+ equation9 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16),color = RED,x_min = -1.15,x_max=1.15)
+ equation10 = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16)-math.pow(x,18),color = RED,x_min = -1.15,x_max=1.15)
+
+ textBtwAnim1=TextMobject("Here the graph just","oscilates")
+ textBtwAnim1.set_color_by_tex_to_color_map({"oscilates":BLUE})
+ textBtwAnim2=TextMobject("after","the","point","(as we add higher order terms)")
+ textBtwAnim2.set_color_by_tex_to_color_map({"after":BLUE,"point":YELLOW})
+ textBtwAnim3=TextMobject("$x=1$")
+ textBtwAnim1.scale(0.4)
+ textBtwAnim2.scale(0.4)
+ textBtwAnim3.scale(1.2)
+ textBtwAnim1.shift(2.1*DOWN+4.3*RIGHT)
+ textBtwAnim2.shift(2.4*DOWN+4.1*RIGHT)
+ textBtwAnim3.shift(2.9*DOWN+4.3*RIGHT)
+
+ self.play(ShowCreation(equation1),run_time=0.8)
+ self.add(eqText[0])
+ self.wait(1)
+ self.play(ReplacementTransform(equation1,equation2),ReplacementTransform(eqText[0],eqText[1]))
+ self.wait(0.5)
+ self.play(ReplacementTransform(equation2,equation3),ReplacementTransform(eqText[1],eqText[2]))
+ self.wait(0.4)
+ self.play(ReplacementTransform(equation3,equation4),ReplacementTransform(eqText[2],eqText[3]))
+ self.wait(0.3)
+ self.play(FadeOut(eqText[3]))
+ self.play(FadeIn(eqTextTerm))
+ self.play(Write(textBtwAnim1),Write(textBtwAnim2))
+ self.play(FadeIn(textBtwAnim3))
+ self.play(ReplacementTransform(equation4,equation5))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation5,equation6))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation6,equation7))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation7,equation8))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation8,equation9))
+ self.wait(0.2)
+ self.play(ReplacementTransform(equation9,equation10))
+ self.wait(1)
+
+ self.play(FadeOut(textBtwAnim1),FadeOut(textBtwAnim2),FadeOut(textBtwAnim3),FadeOut(equation10),FadeOut(eqTextTerm))
+ self.wait(1)
+
+ convergeLine=Line(start=ORIGIN+x_each_unit*LEFT,end=ORIGIN+x_each_unit*RIGHT,color=WHITE)
+ divergeLineLeft=Line(start=ORIGIN+x_each_unit*LEFT,end=ORIGIN+x_each_unit*LEFT*8,color=RED)
+ divergeLineRight=Line(start=ORIGIN+x_each_unit*RIGHT,end=ORIGIN+x_each_unit*8*RIGHT,color=RED)
+ circle1=Circle(radius=0.01,color=PURPLE_E)
+ circle2=Circle(radius=0.01,color=PURPLE_E)
+ circle1.shift(ORIGIN+LEFT*x_each_unit)
+ circle2.shift(ORIGIN+RIGHT*x_each_unit)
+ convergeText=TextMobject("Converges")
+ divergeText1=TextMobject("Diverges")
+ divergeText2=TextMobject("Diverges")
+ convergeText.set_color(GREEN)
+ divergeText1.set_color(RED)
+ divergeText2.set_color(RED)
+ convergeText.scale(0.5)
+ divergeText1.scale(0.5)
+ divergeText2.scale(0.5)
+ convergeText.shift(1.6*UP)
+ divergeText1.shift(0.3*UP+1.5*LEFT)
+ divergeText2.shift(0.3*UP+1.5*RIGHT)
+ self.play(Write(divergeLineLeft),Write(divergeLineRight))
+ self.play(FadeIn(convergeLine))
+ self.wait(0.5)
+ self.play(FadeOut(self.axes))
+ self.play(Write(circle1),Write(circle2))
+ self.wait(0.5)
+ self.play(ApplyMethod(convergeLine.shift,1.3*UP),ApplyMethod(function_expan.shift,5*LEFT+DOWN))
+ self.play(FadeIn(convergeText),FadeIn(divergeText1),FadeIn(divergeText2))
+ self.wait(2)
+
diff --git a/FSF-2020/series-and-transformations/Power Series/script4.py b/FSF-2020/series-and-transformations/Power Series/script4.py
new file mode 100644
index 00000000..412d20c0
--- /dev/null
+++ b/FSF-2020/series-and-transformations/Power Series/script4.py
@@ -0,0 +1,108 @@
+from manimlib.imports import *
+import math
+
+class intro(Scene):
+ def construct(self):
+ introText1=TextMobject("Consider the","above","example..")
+ introText1.scale(0.8)
+ introText1.set_color_by_tex_to_color_map({"above":YELLOW})
+ self.play(Write(introText1))
+ self.wait(1)
+
+class graphScene(GraphScene,MovingCameraScene):
+ CONFIG = {
+ "x_min": -5,
+ "x_max": 5,
+ "y_min": -5,
+ "y_max": 5,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$x$",
+ "y_axis_label": "$y$",
+ "exclude_zero_label": True,
+ "x_labeled_nums": range(-1, 2, 1),
+ "y_labeled_nums": range(0,2,1),
+ "y_axis_height":7,
+ "x_axis_width":7
+ }
+
+ def setup(self):
+ GraphScene.setup(self)
+ MovingCameraScene.setup(self)
+
+ def construct(self):
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+
+ function_expan=TextMobject("$1-{ x }^{ 2 }+{ x }^{ 4 }-{ x }^{ 6 }+{ x }^{ 8 }+..$")
+ function_expan.scale(0.6)
+ function_expan.set_color(RED)
+ function_expan.to_edge(UP+RIGHT)
+ self.add(function_expan)
+
+ self.setup_axes()
+
+ equation = self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16)-math.pow(x,18),color = RED,x_min = -1.1,x_max=1.1)
+ self.play(ShowCreation(equation))
+ self.wait(1)
+
+ dashLineLeft=DashedLine(start=ORIGIN+y_each_unit*5*UP,end=ORIGIN+y_each_unit*5*DOWN)
+ dashLineRight=DashedLine(start=ORIGIN+y_each_unit*5*UP,end=ORIGIN+y_each_unit*5*DOWN)
+ dashLineLeft.shift(ORIGIN+LEFT*x_each_unit)
+ dashLineRight.shift(ORIGIN+RIGHT*x_each_unit)
+ radiusLine=Line(start=ORIGIN,end=ORIGIN+RIGHT*x_each_unit)
+ rangeLine=Line(start=ORIGIN+LEFT*x_each_unit,end=ORIGIN+RIGHT*x_each_unit)
+ circle=Circle(radius=x_each_unit)
+ movingPoint=Circle(radius=0.025)
+ movingPoint.shift(ORIGIN+RIGHT*x_each_unit)
+ circleEq1=self.get_graph(lambda x:math.sqrt(1-x**2),color=BLUE,x_max=-1,x_min=1)
+ circleEq2=self.get_graph(lambda x:-math.sqrt(1-x**2),color=BLUE,x_max=1,x_min=-1)
+
+ self.play(Write(dashLineLeft),Write(dashLineRight))
+ self.wait(1)
+
+ equation_updated=self.get_graph(lambda x : 1-math.pow(x,2)+math.pow(x,4)-math.pow(x,6)+math.pow(x,8)-math.pow(x,10)+math.pow(x,12)-math.pow(x,14)+math.pow(x,16)-math.pow(x,18),color = GREEN,x_min = -1,x_max=1)
+ self.play(FadeOut(self.axes),ReplacementTransform(equation,equation_updated))
+ self.wait(0.5)
+ self.play(Write(radiusLine))
+ self.play(MoveAlongPath(movingPoint,circleEq1))
+ self.play(MoveAlongPath(movingPoint,circleEq2))
+ self.play(FadeIn(circle))
+ self.wait(1)
+
+ radiusText=TextMobject("Radius of convergence")
+ radiusText.scale(0.14)
+ radiusText.shift(ORIGIN+RIGHT*x_each_unit*0.45+DOWN*y_each_unit*0.2)
+
+ self.play(Write(radiusText))
+ self.wait(0.6)
+
+ self.camera_frame.save_state()
+ self.camera_frame.set_width(5.5)
+ self.play(self.camera_frame.move_to, ORIGIN)
+ self.wait(1)
+ self.camera_frame.set_width(14)
+ self.wait(1.3)
+
+ self.play(FadeOut(radiusText),FadeOut(circle),FadeOut(movingPoint))
+ extendLine=Line(start=ORIGIN,end=ORIGIN+x_each_unit*LEFT)
+ self.play(Write(extendLine))
+ doubleArrow=TextMobject("$\longleftrightarrow$")
+ doubleArrow.scale(1.6)
+ doubleArrow.set_color(BLUE)
+ doubleArrow.shift(ORIGIN+DOWN*y_each_unit*0.5)
+ self.play(FadeIn(doubleArrow))
+ self.wait(1)
+ rangeText=TextMobject("Interval of convergence")
+ rangeText.scale(0.15)
+ rangeText.shift(ORIGIN+y_each_unit*DOWN)
+ self.play(Write(rangeText))
+ self.wait(0.6)
+
+ self.camera_frame.save_state()
+ self.camera_frame.set_width(5.5)
+ self.play(self.camera_frame.move_to, ORIGIN)
+ self.wait(1)
+ self.camera_frame.set_width(14)
+ self.wait(1.5)
diff --git a/FSF-2020/series-and-transformations/Power Series/script5.py b/FSF-2020/series-and-transformations/Power Series/script5.py
new file mode 100644
index 00000000..e9681aa5
--- /dev/null
+++ b/FSF-2020/series-and-transformations/Power Series/script5.py
@@ -0,0 +1,136 @@
+from manimlib.imports import *
+import math
+
+class uniformlyConvergent(Scene):
+ def construct(self):
+ introText1=TextMobject("Again consider the","above","example")
+ introText2=TextMobject("Let","$g(x)=\\frac { 1 }{ 1+{ x }^{ 2 } }$","and","x=0.5 $\in$(-1,1)")
+ introText3=TextMobject("Lets analyse..","!")
+ introText1.scale(0.8)
+ introText2.scale(0.7)
+ introText3.scale(0.9)
+ introText3.shift(DOWN)
+ introText1.set_color_by_tex_to_color_map({"above":YELLOW})
+ introText2.set_color_by_tex_to_color_map({"$g(x)=\\frac { 1 }{ 1+{ x }^{ 2 } }$":BLUE,"x=0.5 $\in$(-1,1)":YELLOW})
+ introText3.set_color_by_tex_to_color_map({"!":GREEN})
+ self.play(Write(introText1))
+ self.wait(0.5)
+ self.play(FadeOut(introText1))
+ self.play(Write(introText2))
+ self.play(FadeIn(introText3))
+ self.wait(2)
+
+
+def gety(x,n):
+ ans=0
+ for i in range(0,n+1):
+ if(i%2==0):
+ ans+=(math.pow(x,2*i))
+ else:
+ ans-=(math.pow(x,2*i))
+ return ans
+
+def makeSeries(x,points,x_each_unit,y_each_unit):
+ p=0
+ for point in points:
+ y=gety(x,p)
+ point.shift(ORIGIN+RIGHT*x_each_unit*p+UP*y_each_unit*y)
+ p+=1
+
+def makeLines(x,numPoints,x_each_unit,y_each_unit):
+ lines=[0]*numPoints
+ for i in range(0,numPoints-1):
+ y=gety(x,i)
+ y_next=gety(x,i+1)
+ lines[i]=Line(start=ORIGIN+RIGHT*x_each_unit*i+UP*y_each_unit*y,end=ORIGIN+RIGHT*x_each_unit*(i+1)+UP*y_each_unit*y_next,color=RED)
+ return lines
+
+class graphScene(GraphScene,MovingCameraScene):
+ CONFIG = {
+ "x_min": -6,
+ "x_max": 6,
+ "y_min": -5,
+ "y_max": 5,
+ "graph_origin": ORIGIN,
+ "function_color": RED,
+ "axes_color": GREEN,
+ "x_axis_label": "$k$",
+ "y_axis_label": "$f(\\frac{1}{2})_k$",
+ "exclude_zero_label": True,
+ "x_axis_width":7,
+ "y_axis_height":7
+ }
+
+ def setup(self):
+ GraphScene.setup(self)
+ MovingCameraScene.setup(self)
+
+
+ def construct(self):
+ x_each_unit = self.x_axis_width / (self.x_max - self.x_min)
+ y_each_unit = self.y_axis_height / (self.y_max - self.y_min)
+ sequence=TextMobject("$1$ , $1-(0.5)^2$ , $1-(0.5)^2+(0.5)^4..$")
+ sequence.set_color(RED)
+ sequence.scale(0.35)
+ sequence.to_edge(UP+RIGHT)
+ formula=TextMobject("$f(x)_{ k }=\sum _{ i=0 }^{ k }{ (-1)^{ i }(x)^{ 2i } } $")
+ formula.set_color(PURPLE_C)
+ formula.scale(0.4)
+ formula.shift(5.3*RIGHT+3*UP)
+ fLine=Line(start=ORIGIN+x_each_unit*6*LEFT,end=ORIGIN+x_each_unit*6*RIGHT)
+ fLine.shift(ORIGIN+(4/5)*y_each_unit*UP)
+ fLineText=TextMobject("$g(0.5)=\\frac { 4 }{ 5 } $")
+ fLineText.set_color(RED)
+ fLineText.scale(0.3)
+ fLineText.shift(UP*1.2*y_each_unit+RIGHT*x_each_unit+4*LEFT)
+ points=[Dot(radius=0.03,color=BLUE) for i in range(0,6)]
+ makeSeries(0.5,points,x_each_unit,y_each_unit)
+ lines=makeLines(0.5,6,x_each_unit,y_each_unit)
+
+
+ self.add(sequence)
+ self.add(formula)
+ self.setup_axes(animate=True)
+ self.play(Write(fLine))
+ self.add(fLineText)
+ for p in points:
+ self.add(p)
+ for p in range(0,5):
+ self.play(Write(lines[p]))
+ self.wait(0.5)
+ self.camera_frame.save_state()
+ self.camera_frame.set_width(0.6)
+ self.play(self.camera_frame.move_to, points[0])
+ self.wait(0.4)
+ self.play(self.camera_frame.move_to, points[1])
+ self.wait(0.4)
+ self.play(self.camera_frame.move_to, points[2])
+ self.wait(0.3)
+ self.play(self.camera_frame.move_to, points[3])
+ self.wait(1)
+ self.play(self.camera_frame.move_to,ORIGIN)
+ self.camera_frame.set_width(14)
+ self.wait(1)
+
+ explanation1=TextMobject("Since the series","converges","to")
+ explanation1.set_color_by_tex_to_color_map({"converges":YELLOW})
+ explanation2=TextMobject("$\\frac {4}{5}$")
+ explanation2.set_color(BLUE)
+ explanation3=TextMobject("Hence","$\\forall \epsilon>0$,","$\exists k$","such that,")
+ explanation3.set_color_by_tex_to_color_map({"$\\forall \epsilon>0$":BLUE,"$\exists k$":YELLOW})
+ explanation4=TextMobject("$\left| { f\left( \\frac { 1 }{ 2 } \\right) }_{ k }-\\frac { 4 }{ 5 } \\right| <$","$\epsilon$")
+ explanation4.set_color_by_tex_to_color_map({"$\epsilon$":RED})
+ explanation1.scale(0.5)
+ explanation3.scale(0.5)
+ explanation1.shift(1.8*DOWN+3.5*RIGHT)
+ explanation2.shift(2.4*DOWN+3.5*RIGHT)
+ explanation3.shift(1.8*DOWN+3.5*RIGHT)
+ explanation4.shift(2.4*DOWN+3.5*RIGHT)
+
+ self.play(Write(explanation1))
+ self.play(FadeIn(explanation2))
+ self.wait(1)
+ self.play(FadeOut(explanation1),FadeOut(explanation2))
+ self.play(Write(explanation3))
+ self.play(Write(explanation4))
+ self.wait(2)
From 933d1af7575c4b9703d81e1b175badb54c6cc126 Mon Sep 17 00:00:00 2001
From: G Sri Harsha <54752266+GSri30@users.noreply.github.com>
Date: Wed, 20 May 2020 22:19:33 +0530
Subject: [PATCH 18/19] Add files via upload
---
.../Taylor Series/TaylorSeriesQuestions.pdf | Bin 0 -> 119804 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 FSF-2020/series-and-transformations/Taylor Series/TaylorSeriesQuestions.pdf
diff --git a/FSF-2020/series-and-transformations/Taylor Series/TaylorSeriesQuestions.pdf b/FSF-2020/series-and-transformations/Taylor Series/TaylorSeriesQuestions.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..2096f528cabf99552e680f71d2ace3c2ba9efdb9
GIT binary patch
literal 119804
zcmd?PRd6QFk|iiAF*EBEGcz+YGk;=cm6)kYER~pRAOdkp8EUFo$cxAhk4q4
z*fa}^jL68y^pk$v+|v%Zl9&WNGXpy;dCyb+CoDUF3E*I24a>&|V3f16H#2s&@-hPg
znE#Fd%*@V506TzD$=M8OW$NnS3}9yYYZrh~^B*7ptbf~I
z6r}BeW}bg1*Z~|Y{~DV+{Jq8mPysNiI5@ZhIRAC7`WH|D2j_om=l(C0xc@6MjM8EN
zT|Ooj4pS3WCN@)ZE*54k6IL^0b7LkJAQKa-F&hiBDNulq#f-@e$iiZ5%*MpQX>P_0
zGzOY;7_*xKSvdc;zbo|r!QaKz+057u)-%)81ZcEvVPs-t#05i=wiUE00Z4FyNu>jg
z&m;t>%tDBbIR;97gJF83N~K36QJ3x8=KzdS>B5`P8iK^vuLD%P5VSr7kw=?;1xDWZ
z?+DcD!~Z0Wh5(8DiO}=USN@+5`v2m4|5pV6e>H~v$F=^=S|wu(GZz3W_rJXDU#>4|
z>}qW5VDX>G$n~G@_-}cj3SejYUu@yx{NMe^$mky@`kdd_fy3mz%z~@BmKGVG4l(<$1rRxUYuLb1@2LWBGvzJC}NI-?Ft*R`v&GhdfT8%aK
za9OF68$bK@xL+5p`mQxyqjkTmiDl?RDo;vK$JXBV+Gb2H1-+$Z6T#1^$vKJCQ6YQe
z5iZ-@A-K6A*xBaW+TrW-v39XHzwr@1GM-c29g4mtCEbS|qmo2!=G$PQDBvpM_uc#1
zan$}vEEdVb0SPJA0qLeBx;Pi%7mZ52?&}6I!~33dO)dG4o<}0B#tdeT`NBr|jEf>?
z;7{wvbn1wivA7g(>eX|v%($J2%gGB>+J4T!pilrb@``?f#p>s6Q(;9*i&o9T<@H$&
z(o@R02hr6gQTCkR=|&G@^ajD^$I{2c=aKtGY(KPn77viZ&|3Zv?|I_BKeuG>{`oaO
zuT;VX$+8x#!V8&1yk@mBFz@{G=Y=_mZqc>$V}5tK>@1nl(xo?hczp^7GV)$9@g7eW
zJ_(syo5kTq#Uqk37j-5jM1!N!mOrD{JC7!2qHD9^Z2@wAE{yctv!|LyRw=o>4|huc
z^{nv83T0l~^V{N355w-X7%3hO#CIFqg6-c1oXb~?e$UcuoX@vw5^=EIFZ}erTTEz;
zL9tiqoLDuC-7$IW{rHZ<0Ag4L*z1yeMtU4$Py^a|1}}9b*Z0D(1`PBrBst8y7Keg*
z{paa;j3Zd5+L%8gRqnRCkt$VW1-UT8v0MvDQB)R&vt>;{{)ymgj37y#ES}^*o&uE%
zi#@He7j_;kcRHY;?m}Sn=%TC}1cC+h#%Sxd_it4Oqxhv$xh+%U;ckyEo?y#KIGjOx
z3uMk|fS+@iaSCcoY3l=1e)L@_E)k3;#4?6C^owz2ZH9(%=w07Q=u6>IVu=gnn0r)Z
zZ>Rbc7YehZEDkOyI?Ty*BsOLcJWZy=enhX0N*zBfKDv{nQ_#6Iq$(xt7BbPzXyUg0
zz|~QE&_h!Q)0{@MRlu0W#f~%p&U?Yx*qVA;L^C+gY{%ypuo6bXBdVSLym+)cjx}-5
zfK)Id1Ht{1OHn2L=g$*OXkHl=v}N^84)5bUkG721A-!Rf>$VOt)r>B1VP*y=yeemV
zR!&G7fw^)~iF5ZC$(?P~>=4$J%J>{S_<7mooUUwv&uwt1qOLkP&e8&1_|w5x+@k#)#S&d|y%;=Uz3`v_VRO3`T%8un?;Vda}N>n8m_e}EAVDQqgx~i3D
zRGnGUvs#;p<%LJW#!=MLS4kCCCxt0QtDbU8VRg1=*fGmVeVA5YeZbM1qc(rsN3b@ehrxh-T5})Xyl(HEYLaEPyuV9cS
z*Frf#FJ`=u^TQ`V)Fo0@1QMs&gR#)2|0!g$c5A~x1y-%^q6ZhgQghgZ`be>^Bg7#k
zuN)O~XX-_AJZs7ZWedl}Dr$g`WZI3^v2-`>r&d=&d
z2A)L^7JMtRA~!3viRNbXhAj7!8{ru*AtIsssW+2CE%$Hz7+yYXy#**kBW>k(oZ#*H
z>bSd5wCpg6cJ!KK40`Zvp_bd0L
zZ15AaE*J|yiBt-#*Z4i)=vnb~u`7{~m%NXE$>@V<@$`LBA223>C))Nmy4OnDjYKrv
zcTG=srWn)`s5dj#5|sVN=heOV5T4s_I7Hv_#vMsh^zV$wej0R_fr<+9@5aNs`DA+Y
zNp?pEM%>(6ZqA%a5opKXES^E3`C^(XY@skL5Qd`&-gseT`*+1jd{;IR8A&88onS4`V>tfoQQS}ErvYu5*xsM-E
zE4-S&+eU)m((n+G=L2c#HB#FsChm?dw`>Hva#cR(Hl+i*VO52D*
z0Ky5TmowZxy}mgL
zae)GyoRqV-4nVjisc;cNNkP+%GS|0#7`U{p<{i&JU#z8f!tGe}w>EGN8%%NkZ~C_@>b~e
zJ=Dmt5aB!p9*>h!K$L8K6`{QRnevDtPG
zZck#a;SL^xpMU}tCCIr1-dDGYfG>s{0{iz%LGrJx
zq!h{TU_Jr;K_IySOwb@;Fj3%Qp)a6*Ul#@7VP9=XpZ?bB@l5DK@39w~ne&Fa?qBoZ
z`2L8{l-oUBjY^zTp@}W?=m!AWXOjkNtZ+bqN8rOubO9tT7x)(_0LX*Eb}})tux3cusyG*s#%0XA(m~
zAOahPd4h4<(b1n0xp*Tt!e8G)L4B_M0TD#K;qO?T#08&WBDFEu7J@^#}qxzGXA
z4~9zUy+@CDpOOTF2+`eXH(Q?_@t;_qAHsnm{CUWotJLUXEDN9dmUrJn@w1>D?WDXi
z?IyX>(2iMu*gL%mha~>i{^apQ@uf*wdCLa+sYmYZ@8ItxPiu&>D~RpEZ4|?8$yPvg
z%{EbVrlE{o?zHGStLwvioCHE5E&JAF`bG!g+jANxRTJs{b5BFpCDCZL?e?lxDG-5$PM
zi$R%qVAe;C_z*bxXd4vjEy@Z@9!^T%d4xIXJq9OwnIvN`x5^3X&NqxjD7;#251jmG6F{6%i~*PG@V7Ve>zS1ttd{<*&6n
ziJuVY^W5MPkgQ#7w-=Bi$IrdsI|<&0h+=lQv6`@2=>WqhIyz+6{eO17zPR-cgy4Xl
z(P=gy64g@fD4fyH-hub*7-NuK;x(8CkMOcUl49R?(QOOF5vYcdJtk&x4)brA6)q#P
zq`HPO7ql!~K+#|={^^XY=55-v6&3*=(G@NA2$Honv0d2K9%AyCssbSiqUD=Xl+J`U
zPc(ZXOi*T~tC_sp7LyqqmsG{p@=poQ8^>Xn6Vl^*
zM|~|8>unykU6oqT{abN9XUmpz<}c{PP?+Is+qTF?ySM;lnh}fru2@eC2=~TT7X|J`jz&rOLxg6d`U-K<*m_swnI|$3(U5ImUp#7NzPk5$`pFU}QK9d&FJn>XeU12e3
z?U2*^21bW{%dwC9?rK;I9Qbm5P_Bkjk9bP29;_NQ$fS_SFFO$4OesJ|o*pI{!}mDV
z6mP^Y>nl_#R#7HlE$ctcp-`z{8foidyeex1-k3T!L*){sbVekkGEiQH0!>xM&@jy-
z%W>r)^^N7L%y11k3s1C>mpU=O0?e$_hqsU6@&!)%O0-bhsq{B+ld
zxh4yDI7`}stdI-yt|sI*q-_!BJ{>P&d7r*JQgT!^W?|nolbKUV61}bSn9funYMDXr
zkQ*`#KC4HV+>X$ugE3FUbrX4Q;2#ct%ZnBTu6hVe#55Hd)bm^9Q#_@TO=HSd
zRdg<=rd*k{$bmSf1$eG(L2U8|XV)8}Ge}XFEN5=5Ns}FoQKYQ2G#X^jACH3%+
zk7vOE>etHF=I0z1q>5s7Z!}{pA#&tLnusDs;`Kl)=vTm0^DbI{Npa0m)a4{Q{OadP
zH6~>S3s;gWS}~;7vxN2e&I0(!FdxC2@H_8Q<)Qg#M8)bX_iIj3isGd4FtOvCY&=ko
z$%z&x%i+MUb<6=yQP!;1d?|4h)h5wt$uZP`jWy!Cr~}TfbA|Gik#C7ptE4D^eBkbP
z&qRGI)Vxyh`WN9zkl+!4Q#n~OJfKaT>giex;*mD+?$C2Y?fLa7&lMT6ou$t4tyOlo
z(bL07*qzH=$yR&>ecp+cFk=X%ywrs+UFTY@FrH!Oz~hF`!-}`aofa*|zUJAn>JEsH
z==A3ufd+4fy6pTLS{_Lyg)vKUt1lQ@DBC$~(VKNi-B6Vq*&!<$CWZF?LbUW##rPb9
z1&ZDS8n`QJ?1@bP%e_KZeo5p5ZZy^+k%iorkJ@$3YXsMep9-q@A7CPw7cW&G);+k<
z_@L+~N{!hjBgGFXj|gufNxhlhP&4VJc)_WERH!S;^oh}jj1qvIp(h6uU7ZF#LR`ff
zS=fM<&`@8GjgN_JBz_j|C!WD1;qVaEQZSC8stcgW!@?pFAQOmLVlhTzmQq%`9lzf1
z=}25iD)~4!Fx5`KJ?kOdnqX+@7>(mpz1RGtoliK#O*`;>V8>b{M@&>-i=?pW`Z@eL!OO090m#(?Wj7gbO{;%dejIOjy>{OPUJ_xTd^=Z#~8hH30(T|)FK-`#k;
zt}{^JA!fOW{_kWQ8_x{7Nfk)n(kU~a3T^88^@kXBMy0BQ14$p7u)NHOOj6a1)(?@6
zh{9)&StlYOUz0m*16HQSo}T?t5of6-#FX{XpHY0Xp9Ll{BP}d&b5?82hYMs+i>;Fc
zH(}T(i
nv1rZy-b*;FxZsZHnL92a7IKKl`Wvrss*OFt{{K^|<_
zwjZsgddl4l&hs_R#-|(WBSnDX+_}_utk>UH4jmdF+9qI?mrkL&Or2%S;a9B6KALzT
zJ(n(*itcLQrJA5d^l6G+t@k~qs4rO({pvr(_xk
zPq<66S$uap21qh(>s!yQSfot3ikBA`Idz@=#%jAlfVKgL0wi+{fvv$1+X|-`L>;CtKHU!y
zO`e|(vnduA7?04r{7O0O??;KGt7y1HH#d$Aui&QUpjzxXKGK=fd?UqEkzu!zXYd>(
z+>Z!?>9EuC?|#jUa5x#Wki%u$V_(Odc?{$sdMXtwHPGA$chT@dCY{i#Ta_q=5r_NW
zut+~-%aDRY`X&-dbjr8f+8lF7&u!+^Z-Qy18cRH9w7`5~c;8GhHqL|){xj=EAL_!f
zUfF7*bfEEDgkZ|IDmqZEMv8KTz45@snKMjRq2UHmPOz?B$QlbsL}-~biN_+3SodKV
z%t6WEKt}GK7X4QB-KGwwMAC9Qg>L9YpQApoNt-R20TWgB}1bs=A&$nhbE=-UH`BGt!mA%1oX?G#Cw_AGj3Z21|x}|fq
zGMEOZH$}OjoA!40%GRG$QuKQW+YL(8sI6uni+R_>gKD&1dkN9;bajv$CrvMN`Hf
zj|YQAy(7cf3~Iq0=G}G>M5!(@#HVv$%AXH#jpl4?OQy_*h}X2e=*;YgqRkZQEWqYZ
zuOJv8rf73oyezHp22*I;OUa+k=GZm9j-hY*+PqN~OloIzJm{3n#S)c@59+xvy`7}+
zXT~UqSS+5-uhD2f*rspe<%Yc=E>KP@UMsi{B~Jzp#Lx!Q0$xo5iN7a+4G1f{H_62O
z>7odWwJHcNLXL|$J$gQ1H4rPlgedl{Vaf272vlGvv}_q&)5&eAoa1s7PFz#&Vra~J
zBmEivJzH@`@JO_6f5&fp@e5jcwu=eQqTADpd+BJ|L-}Gm25fc@T(sgmJz&4%7CjiD
zw(#7ey5ejhI0|NavklX{a?<_0`Y*!zAGGhAg9a^n<(6mXUfozfXzbMQ=mI2pEDl2t
z6)RITDYX@6=c+P;>u-F%H(Ko0saR35d>2h{&~3;!>rCqptys8is_-fgNGjKJVq$GV
zL0dfqhn)5XtUbI}p&kLl#ZC&ZFD!%ts7tx|iaTHKNE^E97Z}I3*P>r9kw%=i4Q=>2
zhC8*YZB=R%MDQ`WgdV_N#q^2%@sUZMSJYc5Y<
zet>-1;f=hc6B~_Xz`AZ_$CA+r#
zfvP*CnDZd8lCo`!BhI9MwmsZ^6ffbd{y9bqE&8JCd>o`|(bVgE8-_*nuGWTGUbc@B
zX4VN*ZL0EOu1gO!h&Pa_B-7BLwFBa6hXh%V{Cw=uy$fNIEG=npnsJH$9baUF0>G9
zUxAy_$hq-)RXWFsj~d{W)@!57EO*Te!D&XPt_MP4&5-NvqvNz!ql2%8=>ZAWK74HeeN|0qbU(T)j6Z
zH`T)LbA1jp@7jL)N2^nI^d}|h5j0-?lBdc`69*Aw8-;X~rj-!m%V5}7e3{F*!VW&E
z9y>2x1UsW>-WDKwoVBoYd^g{cH1aMLB|9+kga(-Y3mC#|ywi$_17wSdXDac%A)%^0
zFHD=q1pjORy^2Hdl%1^Qorl*jHX`Ba8jLiLs*w5a1mvl6t;HoIcs%!a-_o06!
z?-aQhSZ?-~6Jz<5$dn)(pW!FUwovT-lZ-{Hl5!^p#oDZ^Y>>=Zb`qAy=O_|E3C;4L~&`QE$^T@=+AL7hYHYgq1IEDVQ-xg7s1Xd3EgSr>%ed4Z)PrYyX
zlis|ddTPUP48e$4H^XFzEP5KByQI?cMj|;H=I+Ho27Z6;{AzU8D^cS#rMM}@aY>~V
z`}oBS=DRX%n|Y_4|=myk#RbVHl!Pt
zwz(6YTCzIpt8=omTEbTzfO5?6emP7ZB6o2hal!&*r|cy7k%2^&(Rr0ohc;Kgez)(YQs7y5{h2pc!e
zks7kbB!0g`7AJDdYwH3M(6Xcq7BdF>Ix6W$0wOm~hHybW-#}ll%E;2m
zkN-iw7!zO>=R+^4S#}w^`MvTTD1xke&s{tE2epViyS#K@j{3@XWPw+
z_N;a6Vjx)CeCcAVE>7fTYA@#1pv^lXecP!rYOVEt2DNx9*ZE#;$Sv!PjjhA$)Z^AyhnTFP?dBZq#w
zrtJ0dk^EcnspH@Z@ub}#1Y;Za`3>sNUW{r$i+H8t=E#y^DNRr!?QwI|Y^A-Ra)cs^3#8cg{KHm5(s-w{DTo5h}>?7(O0N
zcl&Knlh%nL>-3o3^&bK5qGT-P)!vTN)da;(|5a1ddOSl>Kh!m&{QYp{7cWXWTLNpj
zKftE6K%ryIgh)N(0p)Lb!qdq`<-1njC{-Bb9lqW>^M@qba(~#JFpGU~leN!NUIeO~
zutwTKS%En1YqkfgdA$UU@u+XDi*>?(jkYy9r+N{u_pxFjx14S4XsIIg5@EeF>mFRS
z?gf;jfKMQl>WXvnm#;fZr~k<8V4F0grQYo_y=fQ-qS1{i`_&)g0y1-w0m<>d6b6%G%_Yv=C}^{FKrkAkSeIxUPOUMn1
zb{QuT2(3XaZaz{G9d=8HJBDpKHaPvFF&XPCh%U7)v_^%Sf7b0(yva^Jc~jK1eh+NY
zLUbioGa>zbRVi(*@xAX#7SG=+L=rdM&GL`!x$Q}F@w;Aty5#Q91y3oT&xtw3`(6{(
z24$A$3I(#Aedi&SyN}f6&?xzVNJ!sq=y~4ew^KL;Ss1>u3aJvru{Ye$;i&a)249Y0
z8WOXsP9d(Pp?xk25v^02wks`x^QahmXa%s@Br-A>kqN1O;x@9T0&NwZ^FcESSZM?Q
z2`=#m>50$pYPD9I5x|)6rX%G$Of%?tvtw^lfsw%{U%L(0nxtRp!qwhM`><-4n4Uqi
z>4|Uazep@t2Q1tj+I7;(AHda8*x*m^N`w5NJ->lpIF33-QH*`Bxa4c9WpI&{ZKi{h
zB-E^C^BNhNXZKtDylpS;i!b~Rlw}%73)amL2I<*;*0vnGXFk$M|MntY2xqL)=y*#Y
zXQF^$Bc}AX62l3~7jV4(u0{C_XLd#)ah{3f=W~`LSL*1+-%YCVl6pWo{$6{{ZLoCO
z(NRrF=&p@B%8h9kw7fF*NH>NTAOu%cOL$w>^~Y1h)QNIU0ZuY{0!ov7krz8{+4M9x
z-CA{vv)!b-0-;qehqn*EKK3+7|Ku@?CrK;D9$k5EC$K=UG@RZ`0?ik
zdSWcnqrSMxV@Pj8nXB$VAQaiaV`+F}Es@OnOBVeT*qi0#Lb^tU0PhZ$+3@s*zxR!V
z@-T7Eriek3EVeYs(mqMU0<8gm+1Kjt=$!;sz4#d%Ve!F53gD5|TdsXb2E>9}O{V@H
z4T*^jrEh_s;5zB|F3DtPT^rAWiy2DJFlUw|sm<>Cvqy3Id8J<4PIw+s2B+kUYU^EA
zqzema?pQ2A{1)8LPLqa)*L@t@91|hnSX=@zv2}W3uu`1N+ez&tIUNbXWuK!30%uGQ
zUf+7DbuyWWfn#zDF5D#j0=B0^NoAa@u_%&{DNPyg)V1qcDgEyyVOk+YEjH|yVffOY
zR#x!$mJ0ANH3)0e$d186#m!qX(RJ!dL-(#&8UDTZU5vTnD?}5Dz9WPgWSgPfT5BEx
z3B5_`OA`kb0naF=tckjI@FmM;g|X&be?v^=+b2@M&dGR_#(dVp=`J@*0yqDaA>(qE
zJoS&EN;{_4qg5n1RX$wCq8kA#M@!EL0X4pPOXJ3+qYtHmeZ=r6AR%VRcw{KD=alaD
zuF{apbryn7dTkZBh39ai
zI85JR8Dt-r1FrYTE^fSD$s+7D+2311PD_gg<~|=IvFLn#t_Fr{OZ?VZG=JQLfRi+L
zi_^1UM+~X#ms$yVT&)E@jA5@!ClD@gDL9ukO!d#n=Hm^$069UgVicAMI%jNN_$acW
zPo?a_CxXU=!jkUtQRIxfN^uyJLK*U~x-wJDMdbPDHy;Q3niferh4#5Q8<0idJJw!A
z8#WI0PZU`-Ju%~WNWK2pF4~~&n#raR1XD_%~8i_O385pvj?>(`ObZV=g@Oq_VF_oi2dGMCEq8@!!cHQ3o~M-UZxT`SuN
znjZz+w8_fzE}<~~IjZWa+u*t>Uy`LeiBTm~j48kK$@Z>!dnCAp4)Nf_9ws=AVixJb
zpuX_mt>dn!PZr@s_LAaU?3OYLzggr?+jhF#E6=fh=df!*zDtZec{B?Qxj)*rOXa0Q
zmpuVoMKQiv_^4k|Ac%8UnSh28;+%t>iE>WOQmF>E=I(lPh2=RA{<{9qQP!GXX1xBz
zd|D!Lv+#12VTxgC=z=!O#qE{utNlFIXz9xDObzd~p~kuq{hj@mwIBogo;tMDQT$+2
zw95Lm#wDumc%PMQ)`zP~kB5S~6V(x%x@2VDCEMvSE>to1->85
z7N);e@LCBd#gT5__hU9gPe)Nz+Omd+Y8=nx)oP%C>R{t`E?@BxX6zo<)Mc&x+v3R%
zXHSssE`bF$0x9k!E52L5N6sMiCk@*W$Bt=fcX?@yp9j9f>ThWeukbTnHHjNwbzX9H
zWjrp#^FLC)DxY;aiG;H8JID!_k#_ZvKRLmCblB~3HpDvrk=f5SM*xN`4r2Q!5~K@p
zdt_tn-Pl$!BOVPxG-!AqJcIr${@r_YGv$Rwx*GHpKfk25i*}N;7`CL-`LvmN$;Abx
z%GZ@BxLOa-XhMEY7NcjBj9|j|wrg;hdqL8I^J$k&W__lwu^mecs)xh_h=8K|8(~@q@Y`t?nCBC7cYQ6@weA&)LKkQNz_es$VD9dWni|#nH}|P
zZe7P$MxL{>t!{0uR66gh&Ue+I%a>T1k;I%`Zp2%MpD;znXMCT$_R+S%)s7ZIv5D{w
z*g@vTI0USRL8Nn)`tWE?Y&4^yK05kTpNWW^)I~dT9UANG|AJf-^v-WQpS3j$C($Wo
zveLV9%_?G-S(3TTXD`ZPyu|$D>o@ik=jIL>-nGe}!3va!YGa9i=U%oL7AMu{xdAWn
zg0Zc6Pbcz$F)&8`wW3a~$)Zsk4-%H8gc=-F^3zY^J#e(F437R?+rUWPB}swHa~`4t
z8%<5nwlsc6cGckK{P_EVPwyZo$71TpgRby7@@yZEGhGihZs_tKI;$LkXleWlX_VJ3
zo!G!l796X@-T<#$Kh*b-d`B-^7u1p7uML$o%r(>;DS&y4VN4=%T|;Su?@O#KHc*NmQd<|7s>KmN@jm=JEzX=D1xwB3wP-2S7w8dYSg6JV;fd
z*rYtD=12elYHDIBsc^8Mh4Aj~qs*uGFP*Ix^D2vM?<-u9`DrvpM!{_1f??VYMA5
zGR8PXA=KQ$A`@725NK%V8yIM4)Y^Jnk@)Jko(qV|VdM}>bi~AWq!3gvFpR-mqLAc4BM
zifk^uykYc$9zuYSlMQg5?hPuy_~!kHrpgViF%>FpDN-+1q3);ZNz>}
zJL?-c5@DZSC4!@yUtQb4doz0Ykzy|lz~xuJL%G6PMu7ncK_VDe
zBEK~MDwsTeJ5XMyyts#fB=N2jY&-Hol7XCpw0)2YeGlp+1|jQ*Lk)OU91&E65CZfP
z!b*Uh17ei0`+6F-(uooMvmBmc175-CAnZ?|AfVr0Kh7pke;GeIrdDkA?DS|(IOJCw
znHTqdSp3!YVqolagP_;sG6iTViKu~qpktyyMnuAZfqkY)VL^P%|MrKd7{K2KiR^jp
z>MHH=e*6>#ixGs~fp}+4;duYmjtnx=lV(p1AOY$21^Jrx`69UeDtM`(`=Xuy>L68T
z)Lh>3i|GORiY3~IbbELUZY`?Dy48Txxz=Uw{lv2ddy(zXLG~_9S@ZW^jL+5Ors~Dl
z|8k30QdBQx95ld+g5doaO6@t9=xIEJ4Hb6X$(}JZ!~$Vd658(ZX#oT8Soag=bFg|@
z`_{HNEht;w+w1sdD1wHL@+|-vI*zFCBHcle1O)wBBmNP2YfB9B`mS&L_Zo8Vg(oNo
z6j#vpvck|e(D#;#a4r&|YN-gu+mt89aFBql`SHn%r<5zhZ2tvFZ(`&YlK08jwc$^J
zFAYA3T{uv*3HgCOm7S@F9XpFA*e74lWl5kweRT%V`8NL$`NBXj(rKQ{#vsH`B9o>N
zp_5!&OMQnc{%g=P^pBO*V6@krTFt}mP0=LU$IXLA&?<9z_iR2vXqbVQ508Q9OZ12)
zVQjRh9+U12FHzm$ch5+)Gt9W0mrm6?yJPyCFJ$hn>K0|va;KwupCHaYs!f(cU;_IV
zgLhOI4%Db@?1;GgvA4(V{ynMo{&
zzIdz9Dbp;JDc5FRx|-AuXU=-o8)dSL&LeKCYihjhFY_=e%qtm^7EmF)n5c*qyr$mi
zmyq>55zMY3l-r(b`a^
zD$HKd-z?!P%0ka%sMugrV0sH>C}l!Co4a0qL>*WEQq_@GGmQ%UiNQbH)@Y@`@GNI;
z@-dkP*dzi>9K)h7*xMvKOgOCADOP8Mx~hWWdG{g1?r3;hW
zzO1fT!uN(!NkS9Iqn)GB@%MR-Ql`Z6L|SxrM*>T?!z%VKTX>6E)(P(
zg?%>&U3hS2SoJEyN}wr>-s9=_&~{QZIysZ3t4v|bOmAmj3{sn|xsb7Sx2j|@8s(Y$2@tA0ecdqSS1w%%OZ0(5a2W4>a0`6$7#VPj{?h?l;<1Z4c@Voshl{bOaNT$VsDoP}-s&Xoucw+#;=OxWdJ!_?``+I|h{sVfx
zUmu>`On`U}t0eXmwC>yM4s$v71op-DQ5Jws$@j*6WK5S*=F*aRD$|zDTq#4`w3M9W>O-1m|nqJm}JgH6pfv%%dHty)wWsPdgMs8CeOboRyu
zeBsQ|<&j$K@$;n3T~_Q??hlUkf$T65VNtI(cz50j*kvI{;1jd(9Ic>CWxAl}k(y%1
zPWsmh;}jlXqTIMM&We-Souy;E*gv}51QkBr&~gp9H7gM@hqOSxO1|HQz8W&?LxX2H
zv{v3#JXUl`)4|zUKd?zoBoB99pod~DfNfJcWO>aAf+(w4vu4x)Wbj^acj%|3TGUXDk=Ya(`Cjz2iU(eTR9DT$dev?-
zvVz9@RH#JCQsfaaJ{9?|Kq>Mx5e}$3p2&!p)ynVdUR@Jk}>j=wOgh(cJ67uYFj_xaSQx^lO==KJP_c
z%YV)<>RX^z8Q*D>-vjWMk_0Tj&RC54NG{dY?QdL*W}49O0}9+TA?DkYo(WzQb8@61
zV>RmS?kJq7!eO90dFc3E9hLJ(ifW-ps}u~ci=qvIDL2vQ957zbRp*FoalMJHWWRpi
zmd{b1@)76N3YV1fuXuLw@PMVWzfh^Tq#f=lE+w()EF^82P=wLoUXVAC2|v)ynC!G4
z0p6;=q1gUm1xsi!8LH@;x`2C!h)-H`dt(NL40*#)3}AN}1|Rp-sh1Pd@{4`$D&+8;!hV{^_f>(daYlnar>U$P5DaUx544<3Pz@O$AUgsxys-=m`DBY@*ZOGF#yJONf
zkw;F2l~Jw>>z(p(;`~!I^j&6&^=g$dxo-JTlYPpg5#y|?KZ+Xh<=sG3Q7*)b;aXg2
z_U4L+sUTiITskS4wr$9Xn5AWJ@IfCKdZ|4lEjo-6#
zOoo|~SK!7hcAiP9?9S%35YA->jaVW|-Ls1?rF#}$aktU(KKv-zfb%s2dM
zW+#DW{`YstB#l<8A3!w;;DZZoPK_)#rM3+00k_rpl*S7S78Y**?8?af8x1T!i?|zU
zf~XEpVs1B#z3DvYkHr*sz90AYx!l#iw9=D|l_TNrR&*-*@|T*AYe(3d;e!jD(bb%!
zu1FUr!E#nnLI4(9*!-sO18iToS2V>j9$C=lj8-k3hDzFcr4YTR2;(aVuM^L2cUQ;V
zf$>z0;1ut9B440ZE{$lOBt&!7hO;}9U7}rw2fdknE#I0d(UMWx#NBwBbXAux;Rik>2mPJN?->|E0}P)E?O
zu`2XxZJ2Q05zXJ_Iz=cRqDRYU-AZAW!
zTxINcv9~@eX{pCkOaq1wLw|htHUXH0ziUv%@r|}c2J5HGh+02#nI08qc+LRJOLt-$
z3oh}WJYOl(uzk(z#6?`+EK_8b`kE`q0n0ukl~SGIS>Iq0Bej&_}E1lUR>
zRYeLFPwa;h`~;7T8ud*bbM>u#(OH|cuJNBNVTEMNNObox_kz{36LW33s~%$6Z>~iM
zI=-Q=af^pRov;o;?u!u8FZ6QbS$r%=uhb#Id|yy40mr47qvFV{J!M{wTgf?yeU
z*KZ{cYx9X#!nx*iXfj$IW^jbStgK(3Z+3p_IbUIFllrAA;~D@$-dgQH9BWJ9CQF^xaiqiL=FSx`<+1GjV>a>JRSZ;^=cWifONn+cV!mD!J1
z@t>|o;zUMBFJzaGgNyiiWH334&qV9XW_>}4#7DGFW)5-g$d&i=^h!TQ_|$5H=FwB_
z|M*GP@Wfx+v$P6@7nn)Xu-7(``T!0m@9M
z)1_YKs_zRMn#FfIAQTTq%9A6^HX9IZ%h!3P)=V`E{h$k;YDU>(sfql~Wc
zbps6-S$Ox!BV4eOwaYMD+~I0&qi?$Ox_KWlOwWBTVSUkHwFmQX!|iW0FKc*as~=hw
zUzRZ)n2cw^jl24D#o#x3a0X@bq4Bu&YcqV9Rg6dnQb(v}y~WB1G488a^8p+&!|Hks
z%`Z#MUs6(8L^X{O^t~y%MAm1!o^eBDi2}~}11Q-c{uk#z!cp@C>Ip-d$`W4Le(rZ=k0m~+IzjY
zA;R-#TTAMYx|?RMy_yHnUI8mUATCUSwFcqQGtIag^1S_H;pZ0<27WfeXt7C035N+b
zI%`He(lUo@593X9ZZd^S*@P9?PznCm(3jjRLaFh*m&?o6NaRif)Ssy#tI1{3*W`mh2e?4>J$jw
zg0a%QobT^KjmNe7dN%{*)dqDf&bT(Co!sHHP$ptkMmm*LEH1oMrl^>k_)5vzM1LE~
zV1VjSQ})roNFBBikL~Ics!o}OFSE{`RG!q0AS_wMWR6*&{+hgH#(9bHh3kZy_4vh{
zfJ3eExKcXr`NADaKO$>#24=HDY9pqtbIY1rMiJvGK3|=sSbA|xL51Jx9zFRwx?FBT
zApu*_Uj9Zvu|w?k#$#E-t-8g?l47~}p17|j5_^_77^8X?=d$us5QcdkS#Wob>XUqU
zVcgev%78LUlUk=$=kY2`T8Bd=sJaBkBcPu$`n?#7xrR@;i4APxO$!!-H(CCJ5_zy8
z`4D|sOiuiwqwafz-p%>VkWNEQAhcj4S4pcun_ca^o&wMOw4($QXeiFo@-uXnXTsx4
z&NfMXVkkLZ`S8_vnENx^yU&1ZRLWpe$l#!r@(;L$woIUgu061Jmrf&>3^bY5Z3
zCi1!mnkF81(!K5#wzikZgjH(9S1%D!$8o5v%L8X=!eUKoO$l@q8KhPLZtc?0PBU>V
zg_VU!zDuJWhFkA+hA}>hikfLzno$;`^3gw5zeKg;_;T@04V8yX>q1<#we<;#bc|ZF
zG|^EnxPY*T1QlntDRlXvviFij+WC(I6^IUhGPSzM6;|TaT7O8uN1+cz{}0B_u{jfH
z?b5N;amTi8+qP{xd15>1*zDN0ZQHi3=`&R`HB)syyuV`KwXe0VHRRQ0X=BK*YQO1C
z9(6+QIViio?9P-S@2;XPrs^!rlXwYgkIDaff_t}ZCGJm!*1Uqh=b$;*46?>b?@C13@E^jrl)R!{gt6~)L1
zun@{QX#5#KeUkKS$jd(jaJYM`zrkGxXYMIAUFvNJjTCv5aG~b?HWd9iy}*KKa_Hus
zZ)0yhiBPgS{wQ6HZ#4{bSA8K{!X(UOy!f01f~Z7Fu}6K)JxUiy(uz)S+fg|Oi!E<&
zU?6jdIkchyrgk$E#our*@GT8PYlAn-x=nc6c%Sz@$RR}pP@NjmMI3c%y*R;I7KkqB
zRVdOek?SqIDD8pgpU`EF6q9ZiKFSukN8!DGHGccl8fVF`G;fO-cx36`
zdKdK$KZ2}>zl6k5=c18JKdot4%;J5$5dr9xn>58j{gzoCW>wS9%`v|A%%_xzFL+dE
zY<1N%4w#m@E(KBLr81`FinlG?5+QcuZwx3A5_;)PgIHc;YUGof*dk_nuzJ3mI2q&d=p=^6cPoKe1
zA9xxZESkJt!}fv9Gn&T!LW#ojg(<=cfF?*TjIdbYr&m9Kt1#m-Y{+cX8O@@M)qCbp
zY#_OA7=sJfXc8&sS}YMTu!P@StCg&Y*UM~2YUl3ElY~LAR0Wo-T1J*4HiNIM3(qx7
z{zW4bU^)#x2y|GvrFR`>?-<&yMs
z*3pt4_^5!bmp7lF^kNrRE|ul(*DIlnPjM>w`At0sY+RpkrR-BaB~}N7VlwpZDjArz
zad)<9OnkIjY)(i|4w4^`gEsOZtI4=eP@%fftDZ=Qh|o}|^_95MnxL4HuR>spWRr-d
zPbGdLK(
zpp}PTE$luk)5qTV;k0F-g~7CsraNbDE4ber&0g4##LKdr^-?qQuwr9AqV?e&bMy-L
z=oW{N`MYp*PKsU0TD5Pc7?-#OUlvft^j9#8G)7*7^Xs+o{`cFOvid3HX7k~BwZ&ed
z0y5W)mnZj}CTO9+$ECqyVwywdanrKkFcWRObPBbIW|bt#D`CVLn0D^T1vv}fO<(w)jC
z7-QdlZz5zzUnxmaN|f(W>`ip{P?s+HN#*%|`Js
zWHiD<_pOU(RJT5qvagwZu`x1JgYS?&8DM0WXqTH>(xB}@6jxWd>BhEIK5p>Gg*L5k
z->aT43E9wf0rHjD^zUZpkN^-!_Onz-8Q5}%|r%!
zKvw)d_gawWBbHhrKJfQ3(z33o?9W=_Gn9?mlJoAJc<0bHQ?x
zZKOOVIq=y9Dk5I79*a>V=8Ucrw`;ry%v_&WM3Y`;MT3Sc0c$Zylr~Be>Xv{$NBJm(
zXM}+``hiJQy-ZyjRUXVc6|;@LKG`IzS&4RW6csgO`yDSfl$=dI8(x9Na2yX++TvWB
zA=>f0!K>N3SjZVRf%~Ozb+mnJYssjE*t1=SiH^5xF`uZ{1HlWOq7(DVM}YnmzOBG%0
zD(BG4i*NX^BxRicg#`Ww*4!<
zvq0M8Hn**h_Lrty*4jFr`Ge#JF^#^YU(=X+4EPc_d3j}J5D>ru1i*Yq;km&vviPx%
z!C$82hRnhFvkt)xulz))3Jg#X*2=*KwE-DW=Dhv+
zk~jo@?ZdP{Slk2S5oH-#AhUsk&4YrsGz}Qcyj}e21wI1v9~u<#@GSv7%rc=36FlS*qDr;bc1Mkg2m{nc?
zvLH5`_5-v2{M8Hk`rrg)z<296{+0e!fwcMN&IAS{%0Wmtjptyl?GL~C3u0Dnd3T`I
z*aHa3{6aqfNt^{F6VWlG7ne|N^&blq1{!zb0)k4}%l({HK*fm=e8}I6?co6NOYYNa
zNNi{V=^ukWju!m$4+Z{;4HT?G
zK1BCJLR$yYi6qzC6J<$QJ0Akf@vYWQDFFpG
z^bP!z`}ECy^h5rjullWC{NpY@E{}`r_rduM_3HPDMBZ9BlKV^JjBm(bMF1s07vkgx
zfi>`}t|NoN`c=8)=egXFVAVC=xp_z`1A}H168UogL7aME%Wyev7qfH=zy58&?$&w_
zXK%Vz9E#<0g&HCg9ONq%vBOjW^3obCX6YE84hpNoDQzd{GsJMU_}v{}YFZ)qspjec
z0~ta$28kk3KL{NK6ezz(rf04u
z)_?iO-v9{dnSGE7EBqA^6&V~TVYQFwI{^qC1ZeKZzaNO;*nTvw>iQe|I|}rX5+;Q7
zP1{E!&~I<21_g5x7lJfBM@WD)@UkLEEA}7a*z!;hC53KQj*WTq411W0VAzr}Mvrpz
zO8?D#UXxt16OcT0wb68_8{5$Bv-zM^ZCL$;#B*q>rq^KF?8WHn>S0T?eG$I5jp|7}
zEnP_BNp?r1!ahwrED?!d^xJyFj+f2p269O^cYkZOEGk(P52D4Q$yEj2++vm?{I~B<
zd6Z@S`GWqh^%6k**V38iu2PbvN4?rQuj^PdN+L%KOk~LRcem!advtcfH=-`6nwy3&
zLy{CS04_3cg&NM>**?b{qs{KGqNirrX5v=kHC_6N3|IB?dXx6{7K`zo#3@o;gG_A%
zh~Ep3VUftR(nLv~)4dvTCBJzH(*f(F)Chh)e23CrxqVL(z|_S96RYx?k$H}_-Qin>
zS98jwh&((XPQGRC&Z7=r!*`=I0!tcS;MwY
z99UramN9UX4AAq!aO+ix{OHFj(V#9lblJ%@D}|g3Bo^4$y2N*FKl7}M$b^_B5?uB|
z?(}uh?sur%Qfp;z$wXE6$~ZYMadED1-Vqig=bYUQsTTNBLBVj%RmXOxlYL-H#ym1&
z_&ggAH|wu&rfJJYys4VOVPpp>b$tg}Imi)j8l}BtHx+k^RiBgpB(SDTxhLO8@qVH;
zcGmAr`M%Z*U6eKZ!v=dyT|pf@bcO2)G4T1ekmDb4@zf#qlIAzNN4H}Bw@26ivYI%D
zqOi%BGYI*9t-0#WJ#(|5aXTrdLJFVa9p@4WFdcp6o8{4PByNkg`Yq|1XL~2x?^dg-
ztvo!if@D9z)^SQyVV;$37YEvsPj*T05u9yhjPonbSUXXh(#^#SzOU^PY{sWFKDE;r
zn@#x`Xml+JT#~)3Ft23qeLJJ!dRvIQP?SZcxgZpFWr3TLZ4PRBg@A4J_d;d{9ex1@
za~wLR=l3RI*a*)!6`k#fb6y0L5El}S1)+Rvqhpl6)pMo!D{AKyFPAWcb)A3^PnvDKg?E;@{3w=MvC_t>eQ>Fn}LOMUq8CCb0B_~E$
z?Z&*syu2P0Z|YrprD5?yQUmt*_zWXn9ya2ECc9l}C#;Xw(hyQ86RqQqm9hW|-lyg@TTb{+H7uD$-|=Eekd-S-Km(Hqs=mDY
zCdb?XLb3@&d&&-<;zp+_V{Lk1RnTRdpqcY+VCtg?3qwicesUm+kuNyQq}urd^4nYN
z6FWUOmf#swdHBV#U1SJ%JwrC&BJ<{!jlkhzr0^KF{>qg}M1rZ+A56HZ$H)B-4)Nt>
zbea2)Kb-xeUOJZxU@0)zMF0KstBub{g(^2{Pwn6%KsnB*=j>xtJGin8VgN2)sK=^D
zh7k9g9Av*S9sUuJ7^f=M)jOiDAk5k>#bby7n{?cD;2=}ml&inHXQ34;#Stt8I5@v+>z~f5P*w%Bk8imAEF3trXuG1z;kY?ees_JW>Z28NvCczOD}RE14R3AyFvHzbRpkbYjdPWXf0b>
z>4&is^;Pl3)t`4eI+U8W@9(tLj!k8IQtd>i`V~*k@=6P>LlR2Qy4vh=cV6ih0$ens
zt`%x+vJ`GfT>ZMup2ziKski3cXjD#IRaqIu_t+zVf26XpAtnW3Br2K+H6sq_z;PH?
zxjO2h#YrTuJ#WXN{s^TTu3MnW4aOycv?_MMsv#pDW>GSQix(-55ad@~WSl8gPEDMMH_y0zK5W{ASMUr*ZX6
z-fkH4ldH($y|W7(F9OzRrVB=-2&JCmE_bsv7FlBsXsVr>*+o&n#hAG(jH&II5JDiX
zgOqH_lvnjHr>YH&x_WF-EfDq@dOM&(4E_l7`naz$dFiz3T1Mqjj^mO$;bxlB47CPE
zyf{mfgKA6vIK?IC<0NCrX$WGYRP|LE!?#^*J(jUKEplKjvj7|BT+{OHrYZ?{_te#^
znG&3}8~+Fy%t$c0z3yYQ9(YzbO0y
z6jsX&!Ot~GEN?m9Y|*4Z9EHDq_k|BnbX+iF-65mTNL0Ee;+5Aevy;2>ULU-QNFNkk
z)Vp0!+~h;sX4Oogg6Ck$D@8a=t#G67E_6ETvjd%FPN~Cr@qjVyo-hT76nQH?i
z#o_=|NE*qd9D
zIuCf2FvAlY$#N(IcXUd^7)@;TTGXV+N-XelzQ*`Sx=D9qG4DF7Fhnhm%gJf
zSIfqFlUi2eUZ$F?J?6)UGpl(ZSqjLKyoPYC(|220N7xmOOHf&tW;ji<8H!@C)05<7
z-YEY(qQ#kBY1rTp3i&s}Fj4ghz~Od;k$Ud%L-}rPN#XD27+YE)(fBSAKv)UThVAi69W!&gJHRnfM0G3-#loyCa2mPBZKx5I()e!`_8dB1RfZOztBwY90&rKKiDb
zdX4;MmWz^4N}WLNV?r30LEcu1uv&Y=F?I&Ak1P>@l=b=QKgwp!W8i~wVS*-SQ@%+Y
zKO(j*r|xi6SpwG{L~$;-@0Tz-lMra_GwQt(abVD2X0}V2letBw$9(HXQ@v~7>kcFz
zJRs42Ay&{uuUZPtfz{Bo6Jwom*D80T$Vpl7VAH!3o|Bw#0&ZzRciLs8_qUzO>1p>Y
zbR4mrx{ny%+=#OSrS@cdJgN}ak{NG~yGVh~S6YH8xekxx$h>H2Q#US$0*YGQ9dZ_V
zUOL)YC`=Bx(EhT2HLBD1v}5w4P_OmW-BU!OMVRX!ugo=EFNZ)Mhhq2zq@M8m@Fpxd
z@Bv$}Qk>$g3fA!2O*bMwkC8G0q7+qETf4XX`jcQt6m@ifJI~0U0|&Ng6N>kfrMfHg
z>^CsmZha?ClHsc0TzMdd4nrJK=O%fS38eP6v5YKC(tPJVB22(*e~SE36ISY}x?+{p
zV%+-ovU(m!_5JfunQJ;g)N<$btsA=KO(C98ZeIm2M4MeKbMqE*Ajai(*}?y*~{)vrdv;iK%9O>si=IU;sz>NJ$f7c_=sU}b+SiZE>zZ`n$}|v6)D`;E{qV{7`mIv
zQc|~>69VI`Sif|B*ml2`R+x1$`{!Bh>VBI7ASoXJCI$bh=VnTVuWW`(6=h_^fx;%E
zgE^pvcDoL_Ita|*BaP|DOk3hoPDU{218W$^-=>9s)+1D7or&>ziZGv}rg%e=3O>(x
zH0ePh^7y;`A#fgv;%Bsv+#IeV6)fg=ml>o3!-Vfr5fW%+gQ%q3P%f>RT0nzw~!I21gB#YftgN+bxpK1fLtueH!
zEiCx$kK`@>(7jb(UlYx$*4}P|C=Y6+bbs#$y_C+0H!~<~=Pi~iRoaL;gY2;Nyn&Se
z72wGXQdDh6ZDxD0aHuvDD%d|&z8Ogs9))NiS^A)(MvmLT
zNG9-pc4~RHLX4S7v+Y)-G_9!pgROnRPyX*Nf17(~7ikR9^no46`0y*X@)6}ga+X_f
zY9Xt4{ocE|x*xDFJzUUl4|_2?G5h>jR36kG*V}iE4CeA*Vox+Q4DM*w&3G2?Czse06^k#o|4<9nroDo#mEcufU(oy~_Ss)mNlGfMtMOUcap2;wYIf?6`)f8?
zmCOI9q6uCx0)Kw~BF6vuRz8c}Pek!9WRf;QhH5a4dh~=wtXfq`dMaNpT8r#T$(*A-
z$?-OGs;R`P@059I1zCVKddD`JV2
zSEyhNQ_hY84Tp;hRdbB%!r=y9>U3C)(|jo8!8NJ+ADs*0c4I!O##N)#)1OLd*J*sT^%@3D5p=>!nSSW^A*oZ9+?;c>GW5hC_x
zb{Tnt!b)8}Z)+kS^zM-F+MO-Sf(SdBB81iQ1v{vFYw7iV$+LK3MW0Mcg0FAt2gUbt
zb-zt(nMR(I*V$BqDAJ^l%A{^H(bceSaW+-K`|oqw)cJ7}vRKe(Zf742pV9)lJac*G
zs(PGa>!<93$1Taj-gs{BTj$v~t5R>e>_u2-v_)J~Fp)Yvw;6wwG%_g`^?c1FRme2RPB$Wn`Z6uDG$8(@0T73R&z>*j#6r+t
z4l0QV)g`y>vXZP)U=K}o9iRrW=Y#Byj=a;#;yTG^$;l_W&j~mFIesrZfa2pBFk6VB
zfq8sle|Jfr%Vo5>_wq^%kSg_5aTz&Q61U02x`|qUu!5iKSG-*^P$t>fM)S!k#gxG`
zx-kevR%65B@86sUCgn)bHrW^;>SrImxPs
zl=k(4a5jtFYR)
zQGbKnJgWV+R4D|w@2qbXAD`)SN{Kx_DXHBsTG#N|7E(e)AQRd(IWFkhy`t*FuPbb&
z7!jSzpzn7g(t_?8A^lDH-`b~^?lL~q<31fZZS5URbJu&C!iMGu!gOJP$K)j#jF=>L
zvdA1rE_B3#a|lj08}(&`d{X$#Ee9#@K4WNc`t-K6T|$ld*}U@_Xwj@PksR@$o*<@Z;+9ld;Ap(p8$OORkiX6z2EyUTsCIO6T5qG6B}
z8~u|NOATr9kg)x7efb_jZ!!kU_Tmy!x_73y;{e)kuRWfGfJuz$BWPXf=DCL7A}T@p
z;~6f&w=u=;UENufgX@kYq%~eKTfw3JFA(TmxJpr+1}>EX>-31y>nal182jm7h+GYr
z0vV9uA8woxuFf1qu&tr;5hIa3FL$sZYfY85?A{f3(7acTi=IjDENH!!
zZx5>Vv2ylbTqAE!#C;xw>w{Pi1-66VXyFWEM1*K`(&>b{rc?Xau)4mfe}bB&
z8L>wZGSfYE%sZvC*z)lh+FUJtl`j#W+%r|kut@M?=mwkaai1!6>k&`;-$Pb3quDSd
zLiMw#wyJLwt=G}{jyaVVZcP4(Cvl!7auK#7d;Vqw2eVh{{T8~apR~YTq!si9(genB(Z!Wo#t)M^R<*s1P!^A0?y^~;7
zGp%8=aVMFM`XLk(Nb;~gm7FiSw6U|xo=WJR&bxyRCnKQODGNg>Dp$$gi7$UF$}5Jx
zgd<qPfFYmD(2O|8<@P%}MLg!*=rff;88OG1vYS4!OR2!?sz
zK*=pk-``N$N;B=`e;p|I$ZaNx^vUuG#m?Mk8)!7EqU2h#_Dr!Z1A-m-JhvM
zV@~z~ja*4VhFpKMq;WHZ)LN%}OHvra{_6e^L<9w{n0|l=YXVha*>5O$}}?&M&e@&(0kpP5{gT>X|u$$drLpBNeC=R#K4i^IL&1Z5TwJ|f8GBg2F;%Uf_qHPt
zi?o_OB1W06m$x$YjAn!vvj1?+qTm4>c_toPl<^qvq2>S;4qmxhSiG**Mw9m3SQKHo
z=G_)nFNs%tR2MLw(Q2|sf4Z0PjaL^I>^5(R(g^MVlT!T;S(Q`Hh0>pbf~|g7F&W31
zqrr&*kM$y*@P7=XsRp&$4dLv7xIp4;CPJ2t@AtnWOHi^kbom%#3zW@JSdr+P__)5l
zx?aVfuv&6`_#ZhmF!zKsvz2u>oW2|^)r)2aU(`Hf4O6ETg?nt{qveGQ_o=5US?l{|
z6CVss&w{(C29%8Hebx>GcW3Q(dYv~+>wL4DA_dFo`HUPpm;}UM7H7%PZlOf^aZ6127^jN&6|Ru5XAk
z{$jOJfsR6N**ULeXvoLD3jMmtwP)2#m9WS0YALYEffO4p}xQd9MX-)pG_e$
zF|JdkS;nr)$hv;-j+W-``VRe=To~UC_P!Bc%}SE1H*V-*gsmknh7%y|#{|>?;Cb
zFxaz?Az(tB^gKlm@cYmTk)_Z)_9e(XHM+mB##eq^!v
zTH0R}c`28Fr9^l%CXuZsXagcoSuC(@Rra}*_He`uAiHOsX#zdB#|3oqu4fU<)$qG*
z$?$Lb-1=&OHA2qXPPZ%c>CYN?_R@`O(V{Ot@;^<_FZ`EW0L%Y47r@N%f0F=A1Z)f}
zZ2v76z{bhR_W$Ps{?ib?d8XScLrx5mSef10f=^^(0FCa2V`PDv&qhWjf)8vYAfVbJ
zz)hUTg@Fsa#Xrb;_{sKOX?LH}+VSzeF~4!Yap#{I=`S)LB}NS05K`G?07K-bR{+T?
zt*WAf0|Ei}3=jYYK}RR1=>L7cBHL>O;`rjwzOtpF(wcAn!
zxZels?jFCl3*jOBD;5Ye9CC0A76jrG3o{SYDd00bI@KTC;1KHR^?*HigSb=h8VP88
z53VVwmq+1u4gF5QhKq>G~
z?1|wCf~%;AW`vY~-!YZNS4=q{@ZRT$8!5KbOL
z;E#%U8{xB`&Eox5J|7S)L8SL5&~D96&rYSnBglZ^boWod&o+H-KxbrZ0NzSF2r
zg8v85C%7mu4@kcNs&2?2a6xHmubaf9A9OYoUM+uMzG^1*-5&p+P_26hXj+eSDd*dq-e{h!rS-7AFIM
zyj!{ZYFHl%-KHTwj)-5yb-Cr;-52|M&iuI^^`Gq>g$ekOxC7fPTeD48|FqY>jAD6e
z+2_RkqP#4WIV1+oNg%T35ox)9Jy=2=*v#^rTA^~*{iIr!=R2opCDf;z@_Ep&F}Jxz
z<2o@^S#vXJl+Ebo70;D<>dEtFkbOs>-C@xU5G+{i!j_HWOSweprdiG3h!0`$uc~%t
zTgrUWOOGrSd-cvn%(WVKYNR+Dlzr~OBFM1)h-M4!QEoT_xJtt5Mm0oF&yIQJQ9kV@
z5)5@@*c7|x*#~q+b@M)_hpLYb-wi;4wbh&8XD1@rHH`@YkGblVt>`V|`e`q9IC<}0
zN1DdEm}F0v9lW3AprMp#uS}4g({+9s(Jm#GXud&%QaTNcvF;?&mQWKLO27ELit~;4
zht{SI57z{fjIlQ{=A3^ZH~amL+d$%Kx5#~*t)dq8$6d^J3Grxe(`S2M!%y_6Pd(1fdV|SJ$ly8i5@s_>i
zu|W_pe=@{7I>U&T{ZA0RuxZKpt}aqj4Kl1tD@%$7>Y~04^wkZF-g)upcyWtS0-w_m
zmVt*c21B!0IV2`3Sm6RDKWd~i4Pi7K!Tto{G+fUx#FD&S!!kFc92};Bjq-}QP4hEZ$LW0f#YZlemw?Y`l#knDvWeoufVF{
z1|)vE)yl~+_)K|0Px@-5oPH2GasS
z3$1^#Xs@RKRqY(H++~Y88M9*I1wWTYrH|LN7+A?AeErtr^e@4
zh@Mt?St6ISg8qf1!O4Z4EuC{foAAEY
z)O@pV?`Nhep0YdnwhV`=v9q?BuhD6SBP!ZDqENOf6e%}T?_TW8SGu_*Z&V;*Zfa&y
z_a$p9TF*9G8<`G^oL^kHl1886xq`3z?Yh}qT69DGlRD&PC^&0O+tWwt)4x7;1|qTf
zd$f-oBs`wc{cyA)*2Fj_--yHtW5%vrzEV0BYPdLdj<1H6<;q<#6AHNA(e75>V)y2H
zX|3XKt;J~Ua{l}+rW;GiZA6UvgL=}z?dO7nKJAsE)plnER>+-Ho2F4&z{n_?|FTqn
zsD!1thFA~)#UUj;x@;FY0{v#_QG8>r(jAawV^u`ae+}3#95T4!uFg^xoVW7Y`wJaQ
zi7Yl5y1hCS%&yoCSNZNp&=+H;|4}G(YA*2{e)*P<4qsH^SNR8~qU+O5Kb{1TI0%gQ4ZYgDRZ==K`2fgG@t|9sXea&-n)l~cE{pOLD8qQ&dT
ziswpaED*rr&d*sSLB^X}OBy4=SjV@`$4Uq^4|QvXQ1KP$y+^B7bii8#+bhWvmmA+`
zPJpY{q3H1@UPp_(8FvU&wClX3S$!0Oj2egwwSMu5d>Yz{E){Pk;libzyILN-f9d1w
zi=cd}dP)XesE(4sZJzAJkFgr~m=0g8Un`kK6`u(mxqUP6Xw77cnYr9fjkKL1ea0DY
zzY7Wj)(SRlZ)p$Q`Qk2n#9Fi|`sy~hx=miVY`R84+%QiRh!MxqKyVnN#jE~^N7Tp&f>cG{ySJ2`0mr9e(l)l?TV~o2=K$mev6rg{!S0vl?yo@P6
z8@l;)6fOGqFW&bCA$eAGXt&7Mk^R`b$d!6|H6W-X
zD&yBa(P}PM2aYggbgnm50=ph8Q&t<8OkBmc#))iLuv<}hDxq!2KBtXU7c*=2e9k`+
zRZ7n*R^BU#8}
z4%#Vp;txrfmtR>E2>ulGT=yfnF2%*D_GPnuG(=-;RJ1}=h#Q23uP?r*-OBK=7ILUe
zcr47kx}L6P)CHeMwk;8A3N)Ss(Y6bTDu1KR7W9p~5C9bykp!qd#vWw)T#1LD`l{Uq|RVJSCP)Eyy4%moXBCe
znws;wVG(>w*dZXz@quyJNC{#~c1}hJ%m~ZUP9WRqC?{RDuBCrW*a=0|>3Su>9IeOa
z_MN*(nn!t@QikTHKtyruSy)+i7jg<+;m8C!;ci2|hJ7_<@YEi{BfA`9|BbQl1AcP}
zL+40|@vLZD)|}uJ{l_N}
z%M!_jJyb{)Vs!MjSwm;Wlpi~X;e0-9j<>b!nq;sq#{7)`?@LNek6TJ2Cad#khNasF
z(4T}QL?U`4O?;pG$s9K=b){MFq*UixQ~nK_6WPUAI(X->;%#JGhuke=AHg8dxVLfn
zq;f{;+q_~cs1bGEFoJ?4|muQ3`zeXKq|x
z7}^tZ^}VUD$p7pD+`RJl{a>3vMu@3RBRM8{fQz7)MeqbL{=~74f6Vk$W7WZG0cZld
zsrS_ND72Rm!}6(V*Rd84q9yyx^ZusQClHL@1|@9{}@;$$T$UQ~4OIDxpHu?V>hmaVIi2S-USe_3p!
zUaQCOs(9zhVVHugR!#(~)#_mkp8*N3by$Nu=)7bYuI#x|bs{;Ey<(s!hNvA@9G>g`2(3uw+lzFWNA@BWRDB|o|aLs#ck
z^yFsHC%pKI1a2j}o$_-$z7nUqH9;wcZEQh>gI^p4zuO!d@}4B72XsQ8sYF5~I|1LI
zJkoPsE|ZU+dAAg$?HIUH7ia%!pV8A>48CA?ye+M`GvsB&b93+L<2j~{bpo52y5^^d
zFdp{SboHhI03l>vCB+#Cuze@hYp~s*98+o~8vyy@xoAtS|F*5(t^WR$?hk-Y?1X=g
z6|&_VV8J!Xw^|Zsv+H)4YTqbGEOA!RmLI)`LFWiyma3^|gO^@fA3@%!FPb_R$!XN*
zyn|ka1PqxRHMcx*x2H>#p@7<6GLEp}MDNbjJZq@5m?OloYEZ)Ik1I5X%J3i^Q#HINFecs!re1PRIR|^w?y^I!ZkI3
z9wi1c-*8*2cq7)3yH(5YrAj?I+h*Qv+iyPcb2gbV8X9#)8)0+sxpE=%uv1DJHFI4W
z;?2*z|EeEsgR!4}Ak0obBA_FhY@Xvl_MEu;qb2BL4TJp%)5n*S_p_`q6zy;3UVqlu
zOf*e&CisCk$+{-eb{RIta>Ezf-{eTr2fnMUnYx546F?Y
zd&|*PBQkHAm}SDAEZeWg2TBR4FE@tk^Nm-3ForlgqEg&XF6MeyI*T+)-EkS%DeRQ#`a@sB($RLwMhEUpg6WqFsBo!g~
ziV60^k&;TKgQ3)EFN97$<1{$H6{BHXW5aIH8vW{I^VCMqA>i|RZm18@Q$HJIqAHq=
z*A30~S`v0ZK{lpv_29TF=c{=9tF$CRQq;HXB=+caIqqRBcXN-dPQVAS3paNhclkRT
z{<#>Y&nPF=Qr{~^(8*(5t|-ag-*1$BHdQ$KR9lp0IiP6X!Xd{)yEv&aS=t@9~h3+nF?d8RXZtIzh6Q(Q@Wz%6!T~hdbRq
zrKS`L-aSF^W;c&fVw7d12L09)njSGUdlHDJsD1`t`#u8F$O3rkQ!sx9`r%S<7{Vi`4C0^%a9T)
zCJT3T1NU<0sQSzu>9kD7)%~Nt*{*9To=&~^jy)OLH8DXCvtiEe6X$b05qDKQ4Ec>1lsFPn`h_>NwLZuGY~
zF*j7}NIPgp=!CUohRnM2wg8PhY(56*F((BKjg$=helzNPYy3=_J|XpHj`T9c;Jl?b
zvpO1@4(s`3k9BBb1|upC9m)=0<`celG^4$dE#7#*qFbM?kNv@3yoq?3^&@GnGl@1^
zJY+th_X@966$oGE0*{$7?3BkU_p_e8Xci-D#QKh$y0EvWM`aLar^f){@&)`s#6|uo
zyK?vGuC^}fQSI7oej26H_Oe4Z9t_@x)U%KUb?8AnW
z41=`HwUc!aD)nWnzqPykJ(gS=+Fkp;$Gd^dzX=chMu9orlGA2jg@i+<)EPnZl-}GY
zjL8`_C!0V&2$C?5yYu{i$1bWuH4CG~!|AOg2whe85wq{!UcJZXdiO+%t5xyJk{-o?
zs{Y8}LRur!(;M0b1G|1G-GK^@8sR{?hztPN-`oGXbT9>=8Uuu(Kc`tHd+Uqwi>X|S
zbg2A^7GtP1*tfto9`uhxK(ngz*7h&8T-hZGX5osq!}N*SMf4r71ELW(uB7!k7fHNZ
zh?04gWw4uUrRG)itqR@=&$SaoVK)Hp<(O{5Bj8Rf3Y`+9o=T$cNJ+WAgnouoHSE#%
zkey5h+P%7R9|pFwJ_qS0lQ3x#405Cqj=4u}<4u#qcJX0w?~Zy<>W=$HfO69T#HW)W
z!GTWr%U-QcH)wRjd*~9G6Yu8Z>LVwJd&r8TjmythCX#(K}xYql3lCAE3G)XS={Cqhm=S
zmVIrV+rAV!zp%QaL@NPImx1cA;bSqQ|Eiq!=Np$No+xw8J|f{|Z||Td-_q)xQ0O`Z>p50cPcS!(XprYb4@#*M;*BHwz0N!Dp@#y4s7osU|15cSL2j6uI
zz}Ocnv@Ow+w-)Dh$jUm?q1R0JRV(U9_ek^rdyti--9bvMlLF1h6m#(qH
zf0$x}yvf)vjO*y9D_oPd8IMMUpYRbbqR3R#P;+?JW`nudIew6R6P-RY8><%T;zvo+
zefTm>m72PMjQeH)A2b{dgnlUAzpd~lY}ltVmM!IZ^*ASFDP4CC8_l#qsTMD267_+;
zHj+Vi5j4q@HYPLf+F@qfWzCz1M_0Vhn(Nh8K2Oq0zb5*{+PrJ1CS$hbBT;{Td-`BQ
z9GzM=sO#pY`p7mZH8kH{6~NUcj;#xw+P?F%He}xX2Z+b|Uqd_=j{m#d%kiHe9tR@>
z)Bg|g{%L+G^If3F=3tp!B;DOH`T&4o7>8i8iM9!K7q$rqx1)&`A_xdcDHps8drrGf
zd4GFXUaK`P)6H*vuD`D?cUF7S&zqmyOsleJ2qNSdK-j~;DZt_u=M)gZ0RDdQ2oT`Y
zF*ov|>;t?{Mo-#6I0g%68yNip#yJQ3BTD4*VEi4jh_gn=m&FpYq4xkq
z*MM9I9l|QPhoJ5v83d58Al?U~z*8~v?4g5y?=LwuiFx{J5C9hT0h)vQ_Qqh?(@=*{
z{l7Q_}I;a
z7|J5CMMQt-Ar^u^TW7%n03d)wgWg5o01(gth87o6Ue!H(=*`D&3C>cn$NOeS*T*pp
zqDcVn1GR+X{Mz^&>bUCkTr@fekh%aZA^@O`=@P82R8YJ|mLpx4WV9#$j?$gvVwu^sHLiY#q@BWyn@E6`8J$8UjsozUJK%+~;
zN3*+kfDk}kCG{FKI;Uq5Da0KhA^H;3!MpZ4fF9oe`T>9hoL+!6xZ4kYu$UnzAohZP
z9=;jlk@kYWH&IXk@3@G`PfecjAxwb2c1sW-EIIx6TYdo%fbNKX*xut%dHphfEw&b>
zmr=*BT6f~AeoTLRcnJ{X!$@xisuGL;)am*-e0o&FG=sm66oH%wZnQJvznbJzvKa{&
zZrHFY(sNrYR_i$C;}=<2trk;WI^{fi+zgp_|E-yq-iykVyU&Ep7X7-~#=MY8n3cy0
z(F{OK;weN~7dIlU0jAh!QVjYRy;frb_M8Igse1N#l*FScDvlVaAiU1V-fk||yf|Vh
z2=TJ+2vdtR{D$pUmRi|j9c@e1FU%D!vNB^RlXTJBBlBEB@WsT!)g!woy$<)xzrbs9
z97Bm9P(r{jiAV3NVEp%4>z$!>+?^(PsaGJ1S2gqFn$A(d>W$|#Xo^HcP-DJm!)!cP
zBiO;VXw~-3CVixAi&qQljWRYovxM`Y*e+BLg26|M
z|6TKW^%o#m(xrLA3B??@oPGz&AC?5WxN!17WgQ8}KvnaH=G$~JBGwyv3)^2SF7|bu
z3IDVoUiK1h`s>iGWgstrQSnOl$=VH?*dFZdIT3k2!*KskN-md%{TN<
zV+QGc{=3fn9X(jeb*zt73uZ$mfkiUMLTlEq2A;5t!Sr24
z%WRp*@>=dgyo?bHUur!a;
zeY!q=7X%MoxKI6TCX$@6Ob8;rOh%QPYa{i-Eo%q!Y#oP1oO|S8I%iTBh1xPAPTX&j
z3e<51#iaX?qK=Vhpu6J=SXQ08|EWo4a3-DE5#J6+!<2)%rhK1WY6^SxVh^sfF5BUJ
zQoK04Wpo&leP4$95*eye&1zqSql%}IH+jWjjM=eMCn?QqlZ*ie_2?O=aE~Yw1=FO`
zBbU-~NNW107u+<|L^6r5ur=A_+Ir?oOI0bdr25$f>FHTC88Y$qlP<^wPxc#BB|@Wj
zdzPX4BrnBaw
z`Xx^d?rt4>&jo{%^dB+m-t)osghayyDrOhCp-rAp6(fo!-XxJ*=;671_{?pT*o+#<
zr`Q^6Cb8DJ+wtmdeSOr@0T*)qnI5QH_0X>St?Q4rWUolvEO84F@$LT7buYj6;rK7O
zy~dY?pjlV*EltJR&XJBIz>V22Ot!Ct3?)J6zX*;!Z2Tp}SWpvsL^>{8dFywh!|fedO&*}1SZXxqa>dLdohO=ws@7P|q0cY^tJBNncX=+#BAEa&a+P@Vq8
z`1#oIsB5AKlFM2XbgDHya-Z{V{&F4^dFP1I>pfIa2zxKy#l_S<;N3J$a>vz}mV>fAGObAHxVzZ?jM(mjqg%=ibHrP
zp>3T1COvc3Q1^F`+#E|yKjAX}f<5nAj$jzt_L)gvOIQno`mI6!sx1NfW8Y4(K!zEB
zxoGeti_0G|@}#T6b)3d=A#xXNuQPi-qJ__v2(1``fhN`ZW~svsMCxYg-UMJ32fKn~
zk*vSeFRZHNYg>&{jic#H-f-2AOAMXLEhp$bD{r9(b_DGpiMfDEi^melPK(&^q=seU
zgKK5weCF{K-O-3X`vBQKE8;%RJZvdEp%Cig0Lh~jII#S0N`pkLdcG7F5x#xlWXKZE
zG_VOj7L7W37Gey5A6fLSl1GxAK=AhuU2|!Zjp%+%&)ABrG2fvIyQL>GAyCpF^hXVfIs7jVB&gacc>CGbc3>D3n;r4moHSnWBa
z@yFGO9z;d-?(XJOBlL0dl1~N}u5W|N`9YZ)%tR?>IUCQ#A^w1MDE|Q}FEIx(jE=T=
zQ6Q^7lr9cRK6G3)+Mj|{*0+V7k()kB`spX_YPT(f)3WbcN`g#Q$_opXjgZMJ1T4j?
znA(wXh*DQQBlPss%2p=}B@~U|`R?(8MxsrnxY9d9XYm2LwQPlxb>tJftkPL|>xaiP
z=SVR45!b!4A7EAdvfM{hYBRL(k@*j^{mg~yXdgSqTn`mq5+`DMon+BLrF
zLLzFP3lTv*5T7q1QlM7Tm^u&7CQ7rK<-Me`OCNN1<2yWu+L2FX(x+VNRM}R9n)jqj57o#sZ
z9|>g#CxwDftk#3__59G>pkU%Lpa3I)y7$dju(vTB^)_vcBWM((XcrtrIO^YPNU(Q@
zx2|&OPvjVBa|^z2vyl!b&{wxwet~aYZd9esawGrBY9xAAvae3$oSN
zrkgL~xDRWV^zCggR>W^W@9JGW8>}f|ALvvcOCk}-e=9z-=|jco)O3fSCwC;
zP@XxyCyzcUZ{VWLtAxbUUkkBBW)chTlGM3O15SdOp>tM+P6xu@2+7tWbBqr!vG=?5
zR90r;9oRlCt
zm>#I=kti&ztWa6w3pws8S-al9dca-Rw==q?A6H62YSI2OJ7;YUtMw%|@1wCT@(}(O
zAqWiZ#IdLOs2~a4nihY&tMNkL^&@mIC$1rD!~%HktaQ95Sg*XUvW4feh{kghbhAAz
z<7t(sYQizJaFER$B3yBf>4?q|<#M57FM!}XI(Ezh80B>f^QILb0j%3+|DcDB+cmR|
znVlXuk^T^!ne;}r=_snGz(U0jF!SaO>L%AxA;#z7QeDl#g9HV0EWtTVglG*x#j*(wS)e~)}?4RX9~db1wHxjvntvAAWK
zr1@O<`+&{8UWQX&F!Q`hr>4Zob_ceuNAE6rlz}ZHDI1JTXKLgGPKB=lnDh29X5$ta
z$j_KSCej3@tQzA>P3%YnL^h9jH{I$x7qk1YEo=PE)#*AwW4X8OEnv3eXEZ8IsuwfX
zRR{#4K;V>_dTsvv~n$mwP0`|(gt#yC^R!-iWJLpE9Z1_#kMXgubf
z;hzx_HobP5;sG1$v5<6A))G4!L$cgXvirQigHst`u9Xy5`rTkTes
z(bCnE?%C}9w)j7Y<5SnA#MnF14}Y?S$_#_?sl*pvdb&IVR=%f7du-KnHZ`q9h+cfO
zCC12mpWLlj+y}X6z~G@)Lqo@J@A)jgDQ;BLbQ~6c@gC;16?vy4-V$F~uB1v5qkh<;;hNN?3F(f&95-f4KPcrZj>&F~E&yYtN#4xpAI&i~7
zmuJl=3(DAXQR_(PO3vC_v$vU)D~m6#L~81R*r0(f>g@2K!bTWey`u<~M^f+sGybeM
zG)CKn0Lf}S9ooF^F`2N-AK6jV8O-coC{fgz`afvNL|HAlhVbuFr-{{Em)kN)a*P)@{sJu=uWA4
zv$9s+BH<&@JbL$rr79AX7@B)`y*FcCrvwa{uW>UDMif$VbU})
z^Q3ltU)R=GQKzw--|C(bv)jQUV5;NMvx);g=;MncYl}74^YWFAS=PTdT&}*fCpOm>
zEO7FHBwQ=lutA8bb&v5)!IQIT-pWDc?+87!7`ITUaB85X-AKbjhq)tQY?(T#%@3fv
zx1ZVGPx#BHBbW?`aO{wdU4vDn`ojuAY`GZLP4K(Y^m&xambqM+sNtY+YOCVPiyp-D
z1ut})Bd#DG!%&q%`jtf*^NS+Sap2Q}SpcCK({tHuPim|V4o`%W@a@oe>~>pw8u`w#
zQ3AID^BG5d@17OUWl3!n&4-?ULUWMt)1DY7v0K%%hPwCHtm
zpHYFk(J0GX(x}l}b}isZ@aF540_=P5NjIY-kCBV9O|%NTzTJutZ9HWvPjJ}&g522J
zu4N3A!c{NjVio~^kxgUkk`rgFSr`mbKAoYVy5^Q-l3bNHu5Qrf*h||}xxc@(v;SnG
zxLqN(fGzV*P;i27xhPm`(aLumJ8tm7!hE!U#(3;wW_vs(A`F_4O-8-DuUZJr9P`C;
z=oHRW0BRAa4iC0ApklFcNVwdJIbjOVK``%aPpimIDWLwH*fIw*ygevKQcsWez`lcV
z-V#P@H-glmRxe#i3;`jrVhZIax2JFc?TC2QK5C~l?ew4@KlR_(i-et`#iXkR&rG+GaSm{yyR+TmbQ^Q{JElV187WOVXP4r0lN
z<6hcTxRZKlo2@U%hj-uV1YiQLNLRBWNus)>AS-%H!?dzegmkV|;R&(0Tq*~Kbb$D>O9FOYtsY_|KtQ_WS{%R>gHo1p*a9iRrxZM$
zW4_jRXWK=$+{Oj_*6{%hF_1K$BR8KpIUBHvW=ie+#)F{`4=flnBnzI246q2xM@d6*
z<^AvP{qaeGX%|;Hy->A-S}tQRRl4kvBImYe@N~S=TXLCbH{Oq0_(|8JTxGMDcj?Ht
z#%`lFA0{8;I9al_#QYI|E?SCOKd%62Sy^YVGb#LwyfIUE3Pt39jMMm<^0k?FUE}IU
z673N@wC^asmCl$Jy7l(ez#~YqZHYUZR(H=Bva-f^v78s3jD{+p1x>r66u92fa$vk?
zEtTSkwtkB2eHRT#J<_ckFUvv~9uzAfPZkecQ%2qY1${0z@&i>T*bonN3;vj!IJZ1(
zHI=ZOioz-vr~A(x1v>BvZE;ROF)`-H-uUF59dGn?Gu_?mBXm4q1|Zm{3pVF-I>#3L
zqdH8nvSjTco-Ah^liBr=ad-mxIGEL%D@N}b+}eI_jaC&d-)1nSLNjRE(Y!8{d7cq)BV8t`J+!r&Y*7Z
zPzkyZWSUVYAvn(GQIV{kK-V^1@2zF$=d0c1QLZx~^JcHFBaI=BfkB3UUdikRYQ$
zc?sb<1kJd}F0xgFF8^(_FDAa@{Jp}4V_rY(LsJVpKM+cvv5s*gBAw5h=cRUecg#Z*
zS-9b6&Wx!#i-zBl5QwXAVX@TmZ2AhPLD=0j9XYuyBB+bDeYf=NjgpoN+xI#-_5$*L
zvC8t@B=ERq1dOCr(;WF9bz_6~x2C}Nj*@f@%Uh2qnN-Xk_eXTsc}iX8@&djP{%fzd
zsrFg1T@giSK8A$C-zI+U)`3uR4H|6elYB2-N9p-NC)GjKL7KL~uF*SLE{X5X3lrV0
zL$(~n4*7;LQFt#i*u=jm;jjBy*IAC-IkTZ)NkOL@Tc0o0w(CkFoSK}TyRZ5(oXj90
zE)UeZgB`V{;j0z@%BtF4$YzfEtDvBGk1?&uunskhN+V&8;7o)JPlc*)9n+bm9iC(k
zPNys{D?`p^bcDDWNrGHCORB})hHl?b%rVR#&nU~^DJexcIh5r!i9^$|G#uh@$2b0t
zpLJxZPw1@mnWF8Y0&e-Scq8mZB{%Ecwy_`>yVr~hqcOso^l%$V`H4A8d
zwcRUU&$yU8eZd%g|cpWC>HZLl|2!bJZ(M2I#SuYM3UX9qOT6s_J^&!`hpm3_s0OBS9(
zYQzmHm3^2;Y~eh@NWm|74X}6{9;>!zPZBXQ=8^_MzSIph-7__IJX))#b%ijW=q3v!
z+=(}{o_=9ky*iA3+B&Z3S=u%?rn_PE4e`HM!Y<19dsSaaCaEYm4?Z>SYQ*FOFd7Lp
zg3;2wp;57?1k`VBRxdJsKYh`*FjrHFRA!i!k4Od;WqnR@Z*Ezwz#u7)S>oz`)1eVa
zk$+EfE@C}m%G>cd^Ih|q89YG|71grt!wHJk@hD~(WR0OEWTgB!Oqc7&cc;Zk3w#D1
zTL&8*_QSIfABqclQZlw7YacmZoNHBYkVWD?TK(g<`eYHu89iY=D(Jf(%0bidB
z%P8a|^q@0n_>yc_A!PL|{DtDm*F+2-RB#RV+s8FnN-}xI&^WvL3Q?Z2!Y0cMsk8!P~$LiYWPT(s?FL%3bFu&2aFYN`PmX?jm)ybP$!vM!L?
zgsc&Jkox`Q-dsS!=w#)!i%TLpzJ=
z3aDPZ>g4C9ArDJ!0dZJYbUOlAJAw|v7a5Q~xJ|{1rXB$`*Is}cLwE0-T!_@kw>gl|
zI+2+ihEWhx(@t%h|DJdQ8T+hR*N)AgzC!H5bW(rOnPoPFk&Od+(#VM=8A~kL1~PL@+i&aBZN~qd!xA
zn>va0{{S1J)mE}~u8W6pyv{goL|ghAjK#X1@g*)Srs5fbwjeeyMhYi#wzl1m^TA{{
zax1ce>cyV0NL)D>ZT1KSDY1Si?exwX5R%bJ?Mr2ShGTNVosmKZt@f3RK^dI3qAGC@
zW@w2>-?#uxXs|isH$@c&MR?VX%yD(DU?c%RzplK&iyGFV9|9~PBUTatYdJX-X4OV9=vDWVUiat6V|p0DRU1#wb-
zeyX<)F?;rHl4?w!$kDs59)^tQ{J0Z*;Q4=Be(rA!dUQ`c#^GmZ$AT6ZfCE}*nky-b
zjxJ~4wYjuVM9w-)Q65YJ_k&W)NwVC{lKS#v^kIVDx
zup1;t@53il%4#4@D9j~Oq^K7;Z?B7E)Ghn1D5%{+AHVsUiH&-9b2!mLa1ke}zKZv_Ba^~*W>Uf1
zaQYZGcgl_+h?RcgtgG;kt*mn~Y0y6Q`*~QZkX*#9zuG8VajNb7!Sx;#67I3*gqF5E
zipa3W779p@QMR;enxAas*@PZ3F>BW}e0(K4Y30Vly&wI+-+CRI{SUDKw*NX7z{>W2
z+Pq8z94yQ%|0x#0$-@5sbbFh?S#U1U*s3CTys+m#qjsbbNG~h|T>=$DqWUf7tz8rg
z+zVdO0?uOOo^~J+6$3=Poo3o!x4eG+s&BO$SEhKp_`Q0)ZeQ2wu^VIXas#R>S&z!8
zVfw)jz@>mtSo;YC0T3vL;6b1c8tTu55oh9hr`v2o5ZbtxP|4o$K}0!*pzaNn8-#f7
zSab~mT;a_DBp?8gl0m{Hf&Kyr5-1$#i>SAe2#il4TS3nqftPg-5ZtucMAX>rIFxk*
zAMB_3eSZQ_IjNpX_yk12)&b?1q>7WCj3%Jx~5+l;5%*4EsOEjiCepL;?f~GC~*t
z9+3V7wm2ZZrK_)QfnVn!-)#IYd$*S-7hrW>7C;B^&4D~$dmkOz9zp;RZQw(@um8;7
z(GG$H{2_I`IYU8?f@)B(T9Rbb6d
zq2k^u*Fq`3D-C9QZ*w1SxA%a)-05gn!RLhlvVJYTKovkN9`8Uu{M0^j34i^7ezT8%
zOYVPZ&&op^A9L+y_`iSgTa%%e)<5kB0?l|4;6GMfeAa;0ewCsL{I09WhR`ndAA0pz
zgO&&JDEh9le|g2qK9wnuj4FXe*EqgNQ+lt!dQ+z`p#sm^I)wdtsQ~y85Z?HELZ=%X
zJ^yfS;iJ5lLO;}T{Q49zO^qzSyoNwVgaK9UIZ)f{>;=Ywh>8I81rz)(F$nnM
zpG5qD0OV;pg|BlCKK$uXWMuUBKe1oTl{f&@{Kkfa1_r@XTRX;whM)jJsQZO~>vMR6
zrvO6m{{a>h@CUfcwJ87qYz>8WZ~lfK5$5^g-xKco^y>?S80y_01OY+NtNCpM6$Ajh
z^;?Jp2Jt4i>;3v=CBla1_}Y(uQyzkU{6znG6b%rFL%`k|=2XWnR~Y@6i@DSS<)ZJ|
zc1*`?(JgeLb84GC!+)>gW{uRac16^f4Z2u``GDqZjNyjv=g#XJd^UeAe^O8>VLISDG$0n
zr{BYa#n)QdsZRU>b8G(2qF*IA6`8l7+2Vb9CBGC~kKhdx+a}pd6mCXeYbN1Lev`h0
z?BVboYaATmBg+PIXvgEZ$G#JBgfz6_*42;ZCD*eEOEw4eZ;msr^yqiL@$>qKcPH-I$r(^1e9qw-0%Vs<@K
znGMpt>V{^G0C*^Q^|E!s_J(8NthB^`8Uw(sP{hK}?uZV2vsu?sLoq1-94M^baWDqg=$?+{GV6o!P%Fw{^HR{`tG
zkP^#2(J)(DgnGmc5UcpgXL}%GlaH7}Vzv%#ncr8Tp~$Ox>tYM-Y>xdF8-d_D;8}9+
z(u9TmnJtTGO3!2u)zjf(juPrd7J@fBNUBcQV5%}a@llh`lCYc7Du7|L28!ibFNu>1
zb|iJHmcDcCY@nsMn?u0kM)34RODZRLnvruz^NY$S+OrO>X#702fJ7=ceG30;-Lp24
zl|HR)AhkGD+oMx8FJms6S)pDY1;nu)&E@wRt`f)c-J
z&!UoDII16|U^?M|AB5~aWcYhtOn6m)>J{adb~*>^3;3=48vKn^S4BFH2o4wameLzT
zYNn$|-?8tQ<0fOZ{wJw-N5%n-LXW~Z=2^n1cdR^+^Mv=YGXSS%#0~vYPr|kCrrK<{
zrNY?p1g3m#7{m2ozo))rPQL-dGPQH)xet~!t&`;b%ZW8L$LgNfB|FoLpnu@jgoG~LI{9*B_+%kIO?r$sR`)kHoey;1?Z50`H!O3v>ivl
z$R^*Oy}ba9`JR!i_$G48d!rbuUCa8wG9sYR1<*x{Tdb2!T1w$Af9yFsAII*(VyYL$`F4?CI%xvG3H3cRi`GR{3h-n^lLS
z%bj1U{u%50$d`qv5c179>8eWwhnph_?(p8xns_NnbZiw=2|61@Ibiy7rC#)R1yi8|5ysiiq#gSxFH#aRl|jR?zC+K4zV5ovh8g{1Uus6?8-zOA{eeYcD5=xi*S
z-!qV<8`I*U4zYDw#vZa7E|H^c@uZnJwDC0@gTbj0alFEN^yP3on?_YDsHcePS&SQO
z{oG$BfzyxDv3B#-F2n7sHcj6nAE`Kdk!gZjqn1fJtDFddW}H*{hw41=6RReY*ZQ(R
zg(}R2F@No$0#C
zf|Fkc7v(=hP`uPk9mVkwKOa2)L|vUYbY)_xqH5EUA3j3QCdKnI`Y9BGR5%9(*Zb5;HQwJBmrIGbcgeGlcH<4mT8AZ^uauin9jZ#8T2!~J+nywH+K=3
z8;+fXl!QVfMw>%N`lIyuL)m)*lTZKLDO(N$N^rHpRjxJD7(1n5
zoh8m|YtR`|rJuwb`^@nu9>9{revTN4J^vc6<$_^57Hmx0`y&U1H(?6$4Cn?8YrQ(}TMLs%pV4Q$`KbGi`Ae$4XC{d^eRXd3RDWc%tAe*fgUe
zyNvst7jVnSBZe5`jf5*2>)oi49jb@`56K#|+4T*Fb09JA*vo-hW
zKzmJmL5fy{3N;hf;yXh;sN3_JMLTsNOG}2|m0Nr0lERp|{5DlPHv7m9-qV@iht3%;
zl)e`!ueM-;QtwY+af7GU-2_ipjc5>bn+k@EzZScER!7<^21I2W+o9AM@6ib5&X)VR
zD851d0PTylS>qJqBz>aOIkKT8hK536v2&pjIui8QAAv*+XN`a%X+|SEtOz{way7^t
z*U&^&5U65}sNFzmXKRWR4-&uy>=UY;p=v%$7yjykrc=h=$WmBk7muil}EP4x#5J(I;2(|JYa%reF=c*W1V7^Ya5pjd*N#jk+!LVK$1Y+zkN
zr7j(QX6pc2XZ2mwq$y?1BXpJqTSfPg=awfs_U&kb*DV{O?0OQ+su+U?*g0sL(>;Kb58Kd(2T{fDN$~VG)6f62qA*Ejl%Zx6-`J^>bLUT0wJ#QHT1^c
zilF4|aiF-7#El3@CA8;k&!v*u?bBY*SuM=1vNC@ZV*sb5`%}Y+x1=3zKAy{b48}T&08o1O2PFoThmp=SICN(#_ud7uf{#l
z3MzD}u^sW6v_*VG30pZJg!W*&-q;)UGDA#Pa-7EMYGRYH3DzxyC1hEhWTWaja@gL~
zWNNeKoNZ$fips_3?J+(>4kG8P2qQN;=*%(tv>#dRvpJw<+=zx5SE3EbSRjWm&AL(2
z&e^V}A9_}ZZeJs+aSqy^&pw=RS|+&P1cLC0SjHeq%!1XEIIWKb6G_WzlD}gnF>hdg
z9jo=VroJ5DfhX4qewC1Lm0(kT1OU88nRMm_zVvMfs#?gWWTkkW^lXn8?LW#_AR2
zWK0x{cfXZloB)h%XOV=mBG&Y&UybBwCQfSwsPu*~+1nf;bd
zN{@8Ex5FbRK1>3H=?uzP