diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa65608 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.ipynb diff --git a/index.html b/index.html index 1fde96e..db6cb70 100644 --- a/index.html +++ b/index.html @@ -22,10 +22,10 @@ https://atar-wace-archive.github.io/

Maths page - specialist and methods ramblings
- https://atar-wace-archive.github.io/math
+ https://npc-strider.github.io/math

Programming ramblings - do not expect clean code here!
- https://atar-wace-archive.github.io/code
+ https://npc-strider.github.io/code



diff --git a/math/2.5d rotations.html b/math/2.5d rotations.html new file mode 100644 index 0000000..78cfa10 --- /dev/null +++ b/math/2.5d rotations.html @@ -0,0 +1,420 @@ + + + + + πŸ“ 2.5d rotations wtih shear transformation + + + MathJax example + + + + + + + + + + + + + + +
+

2.5d rotations with matrix transformations

+

(WACE) Mathematics Specialist ATAR**

+
+
+
+

⚠WARNING⚠

+
At this point this article is probably outside of the curriculum. The transformations are in the curriculum, but most of this article is on a real math problem I've experienced which of course requires a bit of programming.
+
+
+ + πŸ”— Back to MATHS home page
+ πŸ”— Back to home page
+ + Warning: This page requires javascript to render the math. + +

+
+
+
Introduction - What is '2.5d'?
+ '2.5d' is not an actual dimension, but refers to techniques in computer graphics which aim to create the presence of 3d depth, but in a 2d level or environment.

+
+ +
+ This box is a simplified example of 2.5d graphics.
+ The gray on the front-facing side and the white top side is an example of shading, and creates the illusion of a 3d environment as a result of basic lighting. The camera is placed at a 45 degree angle, as we see equal proportions of the top and front faces of the box
+ However, this is not real 3d graphics, as we're representing this box within a 2d space with only 2d position vectors.
+ Therefore, this is 2.5d graphics. +
+
+
+ +
+
+
The problem
+ I was making a mod for a game that added in rockets. The rockets took a ballistic trajectory to reach a target point
+ Of course, because this is a 2.5d game I couldn't simply model the flight with the actual equations, because there is no concept of 'height' or 'altitude' in the game
+
+
+ +
+ This parabola works fine for targets on the same \(\vec{j}\) as the silo
+ What if we want a trajectory like this? +
+ +
+ We can try rotating the parabola, but that results in a trajectory which looks very unrealistic. +
+ +
+ The blue dashed parabola represents the pre-transformed trajectory (we are only given the distance \(d\) from target \(\mathbf{T}\) to silo \(\mathbf{S}\))
+ + +
+
+
+ +
+
+
Shear matrices
+ \begin{align} + \text{Parallel to the y-axis, Vertical shear}\quad + \mathbf{X'} &= \begin{bmatrix} + 1 & 0\\ + m & 1 + \end{bmatrix}\mathbf{X}\\ + &= \begin{bmatrix} + x\\ + mx+y + \end{bmatrix} \\\\ + \text{Parallel to the x-axis, Horizontal shear}\quad + \mathbf{X'} &= \begin{bmatrix} + 1 & m\\ + 0 & 1 + \end{bmatrix}\mathbf{X} \\ + &= \begin{bmatrix} + x+my\\ + y + \end{bmatrix}\\\\ + \text{Where}\quad\mathbf{X} &= \begin{bmatrix} + x\\ + y + \end{bmatrix}\\ + \end{align} +
+
+ +


+ + +
+
+
The solution: shear matrices

+ A shear matrix is better explained visually. +
+ In this case we applied a vertical shear (parallel to the y-axis). Our x-values are the same, but our y-values have been transformed in a way that they match the line \(y'=mx+y\) (see the matrix representation).
+ It has almost all of the properties required for our 2.5d rotation - we're only distorting the matrix on one axis and preserving the other. The only issue is that our transformed object will appear longer.
+
+ In my case, I do not need to know the angle - I can use the gradient between the silo \(\mathbf{S}\) and target \(\mathbf{T}\). + \[m=\frac{\mathbf{S}_y-\mathbf{T}_y}{\mathbf{S}_x-\mathbf{T}_x}\] + \(m\) can also be obtained with a trig ratio, yielding the following shear transformation that involve angles rather than gradients. + \begin{align} + \text{Parallel to the y-axis, Vertical shear}\quad + \mathbf{X'} &= \begin{bmatrix} + 1 & 0\\ + \sin(\theta) & 1 + \end{bmatrix}\mathbf{X}\\\\ + \text{Parallel to the x-axis, Horizontal shear}\quad + \mathbf{X'} &= \begin{bmatrix} + 1 & \sin(\theta)\\ + 0 & 1 + \end{bmatrix}\mathbf{X}\\\\ + \end{align} + To resolve our issue with the transformed object being 'lengthened', we need to scale it back.
+
+ + Let's choose two points, \(\mathbf{P_1}\) and \(\mathbf{P_2}\).
+ We obtain the original distance, \(d\) and the transformed distance, \(d'\) + \begin{align} + d &= \|\mathbf{P_1}-\mathbf{P_2}\| \\ + &= \sqrt{(\mathbf{P_1}_x-\mathbf{P_2}_x)^2+(\mathbf{P_1}_y-\mathbf{P_2}_y)^2} \\ + d' &= \|\mathbf{P'_1}-\mathbf{P'_2}\| \\ + &= \sqrt{(\mathbf{P'_1}_x-\mathbf{P'_2}_x)^2+(\mathbf{P'_1}_y-\mathbf{P'_2}_y)^2}\\\\ + \text{ where }\quad\mathbf{P'_1},\mathbf{P'_2} &= \begin{bmatrix} + 1 & 0\\ + \frac{\mathbf{S}_y-\mathbf{T}_y}{\mathbf{S}_x-\mathbf{T}_x} & 1 + \end{bmatrix}\mathbf{P_1},\mathbf{P_2}\\ + &= \begin{bmatrix} + 1 & 0\\ + \sin(\theta) & 1 + \end{bmatrix}\mathbf{P_1},\mathbf{P_2}\\ + + \end{align} + Note that \(d\) is also the distance from the silo \(\mathbf{S}\) and target \(\mathbf{T}\)
+ \(\mathbf{P_1}\) and \(\mathbf{P_2}\) are not the same as \(\mathbf{S}\) and \(\mathbf{T}\), because we've created these points with \(\begin{bmatrix}0\\0\end{bmatrix}\) as the origin, not \(\mathbf{S}\). We will translate all of the points later so that our starting point is \(\mathbf{S}\) after rotating.
+ However, the distances are the same, so we might as well use \(\mathbf{S}\) and \(\mathbf{T}\) to calculate \(d\). + \[d = \|\mathbf{P_1}-\mathbf{P_2}\| = \|\mathbf{T}-\mathbf{S}\|\] + Our scale factor is simply the ratio between the two. + \begin{align} + s &= \frac{d}{d'} \\ + &= \frac{\|\mathbf{T}-\mathbf{S}\|}{\|\mathbf{P'_1}-\mathbf{P'_2}\|} + \end{align} + Putting it all together, our 2.5d rotation is now: + \begin{align} + \mathbf{X'} &= s\begin{bmatrix} + 1 & 0\\ + m & 0 + \end{bmatrix}\mathbf{X}\\ + &= \frac{\|\mathbf{T}-\mathbf{S}\|}{\|\mathbf{P'_1}-\mathbf{P'_2}\|}\cdot\begin{bmatrix} + 1 & 0\\ + \frac{\mathbf{S}_y-\mathbf{T}_y}{\mathbf{S}_x-\mathbf{T}_x} & 1 + \end{bmatrix}\mathbf{X}\\ + \text{ or }\quad &= \frac{\|\mathbf{T}-\mathbf{S}\|}{\|\mathbf{P'_1}-\mathbf{P'_2}\|}\cdot\begin{bmatrix} + 1 & 0\\ + \sin(\theta) & 1 + \end{bmatrix}\mathbf{X}\\\\ + \end{align} + So we need a 'pre transformation' on two points, \(\mathbf{P_1}\) and \(\mathbf{P_2}\) in order to obtain our scale factor +

+
+ The limitation of this technique is that we need to perform the rotation about \(\begin{bmatrix}0\\0\end{bmatrix}\), the origin. After this we can translate the rotated matrix to match the silo and target location.
+ You can use homogeneous coordinates to achieve this (see the yellow box earlier), or programatically do it.
+
+ We also have to solve one last issue with this method: it only works within the domain \(\left(\frac{\pi}{2}, -\frac{\pi}{2}\right)\).
+ This is because the gradient can only describe so much information.
+ For instance, the line \(f(x)=1\cdot x\).
+ We cannot tell if the line is going from the top-right to bottom-left, or bottom-left to top-right because it describes both situations.
+ We need to adjust the signs on the shear matrix according to the quadrant our target is in. +
import math
+import numpy as np
+
+def quad(A,B):  #A is our origin/fix point, B is our other point.
+    if B[0] > A[0] and B[1] > A[1]:
+        return 1    #First quadrant
+    elif B[0] < A[0] and B[1] > A[1]:
+        return 2    #Second quadrant
+    elif B[0] < A[0] and B[1] < A[1]:
+        return 3    #Third quadrant
+    else:
+        return 4    #Fourth quadrant
+                    #By elimination. We could do another if but it's unnecessary
+                    #   elif B[0] < A[0] and B[1] > A[1]:
+
+def trajectory(distance, n):
+    # Here we create a list of points. n is the amount we create
+    # (higher n results in greater precision)
+    # Not going to include it here - uses bezier interpolation and stuff to create
+    # the illusion of a ballistic trajectory with gravity (not a simple quadratic function)
+    #
+    return points
+
+S = np.array([10,4])        #Silo position vector
+T = np.array([5204,954])    #Target position vector
+
+d = np.linalg.norm(T - S)     #Get the distance: d = ((Tx-Sx)^2+(Ty-Sy)^2)^(0.5)
+m = (T[1]-S[1])/(T[0]-S[0]) #Gradient of line between target and silo.
+
+
+X = trajectory(d, 50)   #50 is a constant for n. only affects trajectory precision
+                        #X now contains a 'flat trajectory', a list of points which have the correct
+                        #distance but the wrong angle and offset.
+                        #It does not intersect with the target T.
+
+def shear(m, X):
+    q = quad(S,T)       #Silo and target is passed to the quadrant finding function.
+                        #q is the quadrant
+    if q == 1 or q == 4:
+        return np.array([[1,0],
+                         [m,1]])   #shear matrix.
+    else:
+        return np.array([[-1,0],
+                         [m,-1]])   #shear matrix, but for quadrants 2 and 3 (negative x).
+    # AN easier way to do this would be to just compare S[0] > T[0]. Forget about the quadrant stuff.
+    # because we only need to know if it's in the negative or positive x.
+
+
+
+SHEAR = shear(m, X)     #we get the shear matrix, which the function returns
+
+P_ = np.matmul(SHEAR, X[(0,-1),])   #first, take a slice of the array X to obtain the first (P1)
+                                    # and last (P2) points. Then multiply this new 2x2 matrix
+                                    # containing P1 and P2 by the shear matrix
+                                    # to get P_, which contains P'1 and P'2
+
+d_ = np.linalg.norm(P_[1] - P_[0])  #adjusted distance
+s = d/d_    #scale factor
+
+X_ = s * np.matmul(SHEAR, X) + S    # shear, then scale every point by s.
+                                    # Then add S, the silo position, to each position to yield the 
+                                    # correct positions
+# X_ (X') is now a numpy array containing the shifted position vectors
+# that have been transformed through the 2.5d rotation.
+# The trajectory will still look 'realistic', not curving to the side but still
+# 'visually correct' and will be functionally correct in that it
+# starts at silo S and ends at target T.
+                
+
+
+ + \ No newline at end of file diff --git a/math/7620f557a41f2bf40820e76ba1fd4d89a484859d.gz b/math/7620f557a41f2bf40820e76ba1fd4d89a484859d.gz new file mode 100644 index 0000000..98814e5 Binary files /dev/null and b/math/7620f557a41f2bf40820e76ba1fd4d89a484859d.gz differ diff --git a/math/de moivre theorem.html b/math/de moivre theorem.html index 0224280..4021073 100644 --- a/math/de moivre theorem.html +++ b/math/de moivre theorem.html @@ -66,7 +66,7 @@
The polar form of a complex number is useful because of its properties.
- Simplify \(\boxed{\frac{(i+1)^{2020}}{(i-1)^{2020}}}\) + Simplify \(\boxed{\frac{(i+1)^{2020}}{(i-1)^{2020}}}\)   (no calculator)
Some defining may be useful right now. \begin{align} @@ -111,7 +111,7 @@ Let's try something harder.

- Express \(\boxed{\prod_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right]}\) in the form \(\boxed{r\cdot\cis(\alpha)}\)
+ Express \(\boxed{\prod_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right]}\) in the form \(\boxed{r\cdot\cis(\alpha)}\)   (no calculator)
What can we do? Firstly, we can expand the capital pi \(\Pi\) to reveal the terms. \[\prod_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = \cis\left(\frac{\pi}{2}\right) \times 2\cis\left(\frac{\pi}{2}\right)^2 \times 3\cis\left(\frac{\pi}{2}\right)^3 \times [\dots] \times 2020\cis\left(\frac{\pi}{2}\right)^{2020}\] @@ -141,19 +141,80 @@ Another math puzzle.

- Express \(\boxed{\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right]}\) in the form \(\boxed{\alpha + \beta i}\) + Express \(\boxed{\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right]}\) in the form \(\boxed{\alpha + \beta i}\)    (3 marks, no calculator)

Hold up, haven't we done this already? No. This uses the summation formula. Also we want it in rectangular form - not polar form!
+ There are two mindsets to evaluate this expression: one which is 'local' and the other 'global'
+ To be honest, I just skipped this question entirely. It was 3 marks and I was unprepared for this sort of question (I was close to a pattern, but the coefficients were not periodic and threw me off.)
+ Method one: Local
+ A 'local' approach aims to identify how the function or expression behaves at a small or local level.
+ Let's define the part within the summation as \(f(x)\) + \[\text{Define: } f(x) = n\cdot\cis\left(\frac{\pi}{2}\right)^n\] + Let's see how the function behaves for a *few* values of \(x\).
+ We're trying to see how the function within the summation of the original expression behaves at a local level, so we don't test all 2020 terms. The goal is to find a pattern that applies for the remaining terms. + + \begin{align} + f(1) &= 1\cdot\cis\left(\frac{\pi}{2}\right)^1 \\ + f(2) &= 2\cdot\cis\left(\frac{\pi}{2}\right)^2 \\ + f(3) &= 3\cdot\cis\left(\frac{\pi}{2}\right)^3 \\ + f(4) &= 4\cdot\cis\left(\frac{\pi}{2}\right)^4 \\ + f(5) &= 5\cdot\cis\left(\frac{\pi}{2}\right)^5 \\ + f(6) &= 6\cdot\cis\left(\frac{\pi}{2}\right)^6 \\ + f(7) &= 7\cdot\cis\left(\frac{\pi}{2}\right)^7 \\ + f(8) &= 8\cdot\cis\left(\frac{\pi}{2}\right)^8 \\ + \end{align} + + Let's apply De Moivre's theorem. + + \begin{alignat}{2} + f(1) &= 1\cdot\cis\left(\frac{\pi}{2}\right) &&= \cis\left(\frac{\pi}{2}\right) \\ + f(2) &= 2\cdot\cis\left(\frac{2\pi}{2}\right) &&= 2\cdot\cis\left(\pi\right) \\ + f(3) &= 3\cdot\cis\left(\frac{3\pi}{2}\right) &&= 3\cdot\cis\left(\frac{3\pi}{2}\right)\\ + f(4) &= 4\cdot\cis\left(\frac{4\pi}{2}\right) &&= 4\cdot\cis\left(2\pi\right) \\ + f(5) &= 5\cdot\cis\left(\frac{5\pi}{2}\right) &&= 5\cdot\cis\left(\frac{\pi}{2}\right) \\ + f(6) &= 6\cdot\cis\left(\frac{6\pi}{2}\right) &&= 6\cdot\cis\left(\pi\right) \\ + f(7) &= 7\cdot\cis\left(\frac{7\pi}{2}\right) &&= 7\cdot\cis\left(\frac{3\pi}{2}\right) \\ + f(8) &= 8\cdot\cis\left(\frac{8\pi}{2}\right) &&= 8\cdot\cis\left(2\pi\right) \\ + \end{alignat} + + At this point we seem to be close to a pattern (periodic nature of \(\cis\)), but it doesn't quite seem like one due to the coefficients which are not repeating.
+ If we try summing by the pattern that exists (the \(\cis\)), we may see a pattern emerge + + \begin{align} + \sum_{n=1}^{4}\left[f(n)\right] &= f(1)+f(2)+f(3)+f(4) \\ + &= i -2 -3i +4 \\ + &= 2 - 2i \\ + \sum_{n=5}^{8}\left[f(n)\right] &= f(5)+f(6)+f(7)+f(8) \\ + &= 5i -6 -7i +8 \\ + &= 2 - 2i + \end{align} + + In fact we do see a pattern - this sort of local behavior applies for the whole 2020 terms.
+ + \begin{align} + \sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] &= \sum_{n=1}^{4}\left[f(n)\right] + \sum_{n=5}^{8}\left[f(n)\right] + [\dots] + \sum_{n=2015}^{2020}\left[f(n)\right] \\ + &= (2-2i) + (2-2i) + [\dots] + (2-2i) \\ + &= \frac{2020}{4}\cdot(2-2i) \\ + &= 1010 - 1010i + \end{align} + + Hopefully this explains what I mean by 'local' : a bit of an odd term but it differentiates this line of thinking from the next one I will show.

+ The main downside to this mindset is that you may end up wasting time by testing to find a pattern. For a 3 mark question, I didn't even consider using this method (although this was the intended method, from what I can see)
+ Compared to the global method it has some benefits. In this case it avoids the use of a complicated summation formula. More generally, it also requires smaller calculations as we're not looking at the large behavior - this can minimize mistakes. + +
+ Method two: Global
+ The 'global' approach observes how the function or expression behaves as a whole.
Instantly, let's unpack the summation then, apply De Moivre's theorem. \begin{align} \sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] &= \cis\left(\frac{\pi}{2}\right) + 2\cis\left(\frac{\pi}{2}\right)^2 + 3\cis\left(\frac{\pi}{2}\right)^3 + 4\cis\left(\frac{\pi}{2}\right)^4 + 5\cis\left(\frac{\pi}{2}\right)^5 + 6\cis\left(\frac{\pi}{2}\right)^6 + [\dots] + 2020\cis\left(\frac{\pi}{2}\right)^{2020} \\ &= \cis\left(\frac{\pi}{2}\right) + 2\cis\left(\frac{\pi}{2}\cdot 2\right) + 3\cis\left(\frac{\pi}{2}\cdot 3\right) + 4\cis\left(\frac{\pi}{2}\cdot 4\right) + 5\cis\left(\frac{\pi}{2}\cdot 5\right) + 6\cis\left(\frac{\pi}{2}\cdot 6\right) + [\dots] + 2020\cis\left(\frac{\pi}{2}\cdot 2020\right) \end{align} What we have here is essentially a series of rotating vectors. So that means we can expect to simplify quite a few of the cis terms, as they repeat periodically.
- For example, \(\cis\left(\frac{\pi}{2}\right)=\cis\left(\frac{5\pi}{2}\right)=\cis\left(\frac{9\pi}{2}\right)=[...]=\cis\left(\frac{\pi}{2}+k\cdot 2\pi\right)\) for integer \(k\) + For example, \(\cis\left(\frac{\pi}{2}\right)=\cis\left(\frac{5\pi}{2}\right)=\cis\left(\frac{9\pi}{2}\right)=[\dots]=\cis\left(\frac{\pi}{2}+k\cdot 2\pi\right)\) for integer \(k\) \[\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = \cis\left(\frac{\pi}{2}\right) + 2\cis\left(\pi\right) + 3\cis\left(\frac{3\pi}{2}\right) + 4\cis\left(2\pi\right) + 5\cis\left(\frac{\pi}{2}\right) + 6\cis\left(\pi\right) + [\dots] + 2020\cis\left(2\pi\right)\] Alright, let's collect the cis terms according to their (simplified) angle. - \[\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = (1+5+9+13+[...])\times\cis\left(\frac{\pi}{2}\right) + (2+6+10+14+[...])\times\cis\left(\pi\right) + (3+7+11+15+[...])\times\cis\left(\frac{3\pi}{2}\right) + (4+8+16+20+[...])\times\cis\left(2\pi\right)\] + \[\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = (1+5+9+13+[\dots])\times\cis\left(\frac{\pi}{2}\right) + (2+6+10+14+[\dots])\times\cis\left(\pi\right) + (3+7+11+15+[\dots])\times\cis\left(\frac{3\pi}{2}\right) + (4+8+16+20+[\dots])\times\cis\left(2\pi\right)\] We need to use the arithmetic progression sum formula, because we have a common difference \(d\) of 4 between each number, not 1 like last time. Also for our terms, we have different starting values, \(a_0\) \[\boxed{\sum_{k=1}^{n-1}\left[a_0+k\cdot d\right] = \frac{n}{2}\left[(n-1)\cdot d+2a_0\right]}\] Now, we have \(\frac{2020}{4}\) terms for each unique angle for \(\cis\) because 2020 is divisible by 4 (The number of \(\cis\) with unique angles) evenly. In other scenarios this may not be the case and \(n\) may vary for each sum.
@@ -165,7 +226,12 @@ &= 511060 - 510050 + (509545 - 510555)i\\ \sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] &= 1010 - 1010i \end{align} - And there we have it! + And there we have it!

+ The downside to this method is that you end up needing to handle large numbers - which also wastes time and increases chances of making a mistake.
+ For this particular question, there is also the downside of requiring previous year content (the AP formula), which I certainly did not remember.
+ +
+ To be completely honest, this question should be worth more than just three marks. In the exam, I decided that this was not worth my time.

πŸ”— Back to MATHS home page
diff --git a/math/ef253ef29e2f057334f77ead7f06ed8f22607d38.wasm b/math/ef253ef29e2f057334f77ead7f06ed8f22607d38.wasm new file mode 100644 index 0000000..da72374 Binary files /dev/null and b/math/ef253ef29e2f057334f77ead7f06ed8f22607d38.wasm differ diff --git a/math/index.html b/math/index.html index 12b9bb4..224176d 100644 --- a/math/index.html +++ b/math/index.html @@ -25,12 +25,18 @@

Hello!

Welcome to my math page.
The content here will apply throughout the universe, because as far as I know, logic is the same everywhere. \(1+1\) does equal \(2\) whether you are in WA or on Mars.
- However, do take note that these ramblings are influenced by WACE curriculum. For instance, we don't get taught Euler's formula \(e^{i\theta}=\cos(\theta)+i \sin(\theta)\). Instead, we get taught the rarer \(\cis(\theta)=\cos(\theta)+i \sin(\theta)\)
+ However, do take note that these ramblings are influenced by WACE curriculum. For instance, we don't get taught Euler's formula \(e^{i\theta}=\cos(\theta)+i \sin(\theta)\). Instead, we get taught the rarer \(\cis(\theta)=\cos(\theta)+i \sin(\theta)\)

Also note that I'm writing these because I want to, not because I have to. So these pages will probably never cover the whole curriculum and they will probably be incomplete, only showcasing the most interesting or unique problems. Therefore, they are not a textbook.

Here is a list of pages:
- Polar form of complex number, De Moivre's theorem + Year 12
+ Polar form of complex number, De Moivre's theorem
+ Year 11
+ '2.5d' rotations using matrix transformations ⚠ +
+
+ *⚠: advanced content, not really useful here
diff --git a/math/tikzjax.js b/math/tikzjax.js new file mode 100644 index 0000000..ff96a09 --- /dev/null +++ b/math/tikzjax.js @@ -0,0 +1,22316 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "/"; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./src/index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "../dvi2html/lib/html.js": +/*!*******************************!*\ + !*** ../dvi2html/lib/html.js ***! + \*******************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var __extends = this && this.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + }; + + return extendStatics(d, b); + }; + + return function (d, b) { + extendStatics(d, b); + + function __() { + this.constructor = d; + } + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var machine_1 = __webpack_require__(/*! ./machine */ "../dvi2html/lib/machine.js"); + +var HTMLMachine = +/** @class */ +function (_super) { + __extends(HTMLMachine, _super); + + function HTMLMachine(o) { + var _this = _super.call(this) || this; + + _this.output = o; + _this.color = 'black'; + _this.colorStack = []; + _this.svgDepth = 0; + return _this; + } + + HTMLMachine.prototype.pushColor = function (c) { + this.colorStack.push(this.color); + this.color = c; + }; + + HTMLMachine.prototype.popColor = function () { + this.color = this.colorStack.pop(); + }; + + HTMLMachine.prototype.setPapersize = function (width, height) { + this.paperwidth = width; + this.paperheight = height; + }; + + HTMLMachine.prototype.putSVG = function (svg) { + var left = this.position.h * this.pointsPerDviUnit; + var top = this.position.v * this.pointsPerDviUnit; + this.svgDepth += (svg.match(//g) || []).length; + this.svgDepth -= (svg.match(/<\/svg>/g) || []).length; + svg = svg.replace("", ""); + svg = svg.replace(/{\?x}/g, left.toString()); + svg = svg.replace(/{\?y}/g, top.toString()); + this.output.write(svg); + }; + + HTMLMachine.prototype.preamble = function (numerator, denominator, magnification, comment) { + var dviUnit = magnification * numerator / 1000.0 / denominator; + var resolution = 300.0; // ppi + + var tfm_conv = 25400000.0 / numerator * (denominator / 473628672) / 16.0; + var conv = numerator / 254000.0 * (resolution / denominator); + conv = conv * (magnification / 1000.0); + this.pointsPerDviUnit = dviUnit * 72.27 / 100000.0 / 2.54; + }; + + HTMLMachine.prototype.putRule = function (rule) { + var a = rule.a * this.pointsPerDviUnit; + var b = rule.b * this.pointsPerDviUnit; + var left = this.position.h * this.pointsPerDviUnit; + var bottom = this.position.v * this.pointsPerDviUnit; + var top = bottom - a; + this.output.write("\n"); + }; + + HTMLMachine.prototype.putText = function (text) { + var textWidth = 0; + var textHeight = 0; + var textDepth = 0; + var htmlText = ""; + + for (var i = 0; i < text.length; i++) { + var c = text[i]; + var metrics = this.font.metrics.characters[c]; + if (metrics === undefined) throw Error("Could not find font metric for " + c); + textWidth += metrics.width; + textHeight = Math.max(textHeight, metrics.height); + textDepth = Math.max(textDepth, metrics.depth); + + if (c < 32) { + htmlText += "&#" + (127 + c + 32 + 4) + ";"; + } else { + htmlText += String.fromCharCode(c); + } + } // tfm is based on 1/2^16 pt units, rather than dviunit which is 10^βˆ’7 meters + + + var dviUnitsPerFontUnit = this.font.metrics.designSize / 1048576.0 * 65536 / 1048576; + var top = (this.position.v - textHeight * dviUnitsPerFontUnit) * this.pointsPerDviUnit; + var left = this.position.h * this.pointsPerDviUnit; + var width = textWidth * this.pointsPerDviUnit * dviUnitsPerFontUnit; + var height = textHeight * this.pointsPerDviUnit * dviUnitsPerFontUnit; + var depth = textDepth * this.pointsPerDviUnit * dviUnitsPerFontUnit; + var top = this.position.v * this.pointsPerDviUnit; + var fontsize = this.font.metrics.designSize / 1048576.0 * this.font.scaleFactor / this.font.designSize; + + if (this.svgDepth == 0) { + this.output.write("" + htmlText + "\n"); + } else { + var bottom = this.position.v * this.pointsPerDviUnit; // No 'pt' on fontsize since those units are potentially scaled + + this.output.write("" + htmlText + "\n"); + } + + return textWidth * dviUnitsPerFontUnit * this.font.scaleFactor / this.font.designSize; + }; + + return HTMLMachine; +}(machine_1.Machine); + +exports.default = HTMLMachine; + +/***/ }), + +/***/ "../dvi2html/lib/index.js": +/*!********************************!*\ + !*** ../dvi2html/lib/index.js ***! + \********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : new P(function (resolve) { + resolve(result.value); + }).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +var __generator = this && this.__generator || function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, + f, + y, + t, + g; + return g = { + next: verb(0), + "throw": verb(1), + "return": verb(2) + }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { + return this; + }), g; + + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + + switch (op[0]) { + case 0: + case 1: + t = op; + break; + + case 4: + _.label++; + return { + value: op[1], + done: false + }; + + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + + case 7: + op = _.ops.pop(); + + _.trys.pop(); + + continue; + + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + + if (t && _.label < t[2]) { + _.label = t[2]; + + _.ops.push(op); + + break; + } + + if (t[2]) _.ops.pop(); + + _.trys.pop(); + + continue; + } + + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + + if (op[0] & 5) throw op[1]; + return { + value: op[0] ? op[1] : void 0, + done: true + }; + } +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var color_1 = __webpack_require__(/*! ./specials/color */ "../dvi2html/lib/specials/color.js"); + +var svg_1 = __webpack_require__(/*! ./specials/svg */ "../dvi2html/lib/specials/svg.js"); + +var papersize_1 = __webpack_require__(/*! ./specials/papersize */ "../dvi2html/lib/specials/papersize.js"); + +var html_1 = __webpack_require__(/*! ./html */ "../dvi2html/lib/html.js"); + +var text_1 = __webpack_require__(/*! ./text */ "../dvi2html/lib/text.js"); + +exports.Machines = { + HTML: html_1.default, + text: text_1.default +}; + +var parser_1 = __webpack_require__(/*! ./parser */ "../dvi2html/lib/parser.js"); + +exports.dviParser = parser_1.dviParser; +exports.execute = parser_1.execute; +exports.mergeText = parser_1.mergeText; +exports.specials = { + color: color_1.default, + svg: svg_1.default, + papersize: papersize_1.default +}; + +function dvi2html(dviStream, htmlStream) { + return __awaiter(this, void 0, void 0, function () { + var parser, machine; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + parser = papersize_1.default(svg_1.default(color_1.default(parser_1.mergeText(parser_1.dviParser(dviStream))))); + machine = new html_1.default(htmlStream); + return [4 + /*yield*/ + , parser_1.execute(parser, machine)]; + + case 1: + _a.sent(); + + return [2 + /*return*/ + , machine]; + } + }); + }); +} + +exports.dvi2html = dvi2html; + +var index_1 = __webpack_require__(/*! ./tfm/index */ "../dvi2html/lib/tfm/index.js"); + +exports.tfmData = index_1.tfmData; + +/***/ }), + +/***/ "../dvi2html/lib/machine.js": +/*!**********************************!*\ + !*** ../dvi2html/lib/machine.js ***! + \**********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // var path = execSync('kpsewhich ' + name + '.tfm').toString().split("\n")[0]; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var index_1 = __webpack_require__(/*! ./tfm/index */ "../dvi2html/lib/tfm/index.js"); + +var Position = +/** @class */ +function () { + function Position(properties) { + if (properties) { + this.h = properties.h; + this.v = properties.v; + this.w = properties.w; + this.x = properties.x; + this.y = properties.y; + this.z = properties.z; + } else { + this.h = this.v = this.w = this.x = this.y = this.z = 0; + } + } + + return Position; +}(); + +var DviFont = +/** @class */ +function () { + function DviFont(properties) { + this.name = properties.name; + this.checksum = properties.checksum; + this.scaleFactor = properties.scaleFactor; + this.designSize = properties.designSize; + } + + return DviFont; +}(); + +exports.DviFont = DviFont; + +var Machine = +/** @class */ +function () { + function Machine() { + this.fonts = []; + } + + Machine.prototype.preamble = function (numerator, denominator, magnification, comment) {}; + + Machine.prototype.pushColor = function (c) {}; + + Machine.prototype.popColor = function () {}; + + Machine.prototype.setPapersize = function (width, height) {}; + + Machine.prototype.push = function () { + this.stack.push(new Position(this.position)); + }; + + Machine.prototype.pop = function () { + this.position = this.stack.pop(); + }; + + Machine.prototype.beginPage = function (page) { + this.stack = []; + this.position = new Position(); + }; + + Machine.prototype.endPage = function () {}; + + Machine.prototype.post = function (p) {}; + + Machine.prototype.postPost = function (p) {}; + + Machine.prototype.putRule = function (rule) {}; + + Machine.prototype.moveRight = function (distance) { + this.position.h += distance; + }; + + Machine.prototype.moveDown = function (distance) { + this.position.v += distance; + }; + + Machine.prototype.setFont = function (font) { + this.font = font; + }; + + Machine.prototype.putSVG = function (svg) {}; // Returns the width of the text + + + Machine.prototype.putText = function (text) { + return 0; + }; + + Machine.prototype.loadFont = function (properties) { + var f = new DviFont(properties); + f.metrics = index_1.loadFont(properties.name); + return f; + }; + + return Machine; +}(); + +exports.Machine = Machine; + +/***/ }), + +/***/ "../dvi2html/lib/parser.js": +/*!*********************************!*\ + !*** ../dvi2html/lib/parser.js ***! + \*********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(Buffer) { + +var __extends = this && this.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + }; + + return extendStatics(d, b); + }; + + return function (d, b) { + extendStatics(d, b); + + function __() { + this.constructor = d; + } + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : new P(function (resolve) { + resolve(result.value); + }).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +var __generator = this && this.__generator || function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, + f, + y, + t, + g; + return g = { + next: verb(0), + "throw": verb(1), + "return": verb(2) + }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { + return this; + }), g; + + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + + switch (op[0]) { + case 0: + case 1: + t = op; + break; + + case 4: + _.label++; + return { + value: op[1], + done: false + }; + + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + + case 7: + op = _.ops.pop(); + + _.trys.pop(); + + continue; + + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + + if (t && _.label < t[2]) { + _.label = t[2]; + + _.ops.push(op); + + break; + } + + if (t[2]) _.ops.pop(); + + _.trys.pop(); + + continue; + } + + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + + if (op[0] & 5) throw op[1]; + return { + value: op[0] ? op[1] : void 0, + done: true + }; + } +}; + +var __asyncValues = this && this.__asyncValues || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], + i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { + return this; + }, i); + + function verb(n) { + i[n] = o[n] && function (v) { + return new Promise(function (resolve, reject) { + v = o[n](v), settle(resolve, reject, v.done, v.value); + }); + }; + } + + function settle(resolve, reject, d, v) { + Promise.resolve(v).then(function (v) { + resolve({ + value: v, + done: d + }); + }, reject); + } +}; + +var __await = this && this.__await || function (v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +}; + +var __asyncGenerator = this && this.__asyncGenerator || function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), + i, + q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { + return this; + }, i; + + function verb(n) { + if (g[n]) i[n] = function (v) { + return new Promise(function (a, b) { + q.push([n, v, a, b]) > 1 || resume(n, v); + }); + }; + } + + function resume(n, v) { + try { + step(g[n](v)); + } catch (e) { + settle(q[0][3], e); + } + } + + function step(r) { + r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); + } + + function fulfill(value) { + resume("next", value); + } + + function reject(value) { + resume("throw", value); + } + + function settle(f, v) { + if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); + } +}; + +var __asyncDelegator = this && this.__asyncDelegator || function (o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { + throw e; + }), verb("return"), i[Symbol.iterator] = function () { + return this; + }, i; + + function verb(n, f) { + i[n] = o[n] ? function (v) { + return (p = !p) ? { + value: __await(o[n](v)), + done: n === "return" + } : f ? f(v) : v; + } : f; + } +}; + +var __values = this && this.__values || function (o) { + var m = typeof Symbol === "function" && o[Symbol.iterator], + i = 0; + if (m) return m.call(o); + return { + next: function () { + if (o && i >= o.length) o = void 0; + return { + value: o && o[i++], + done: !o + }; + } + }; +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var Opcode; + +(function (Opcode) { + Opcode[Opcode["set_char"] = 0] = "set_char"; + Opcode[Opcode["set1"] = 128] = "set1"; + Opcode[Opcode["set2"] = 129] = "set2"; + Opcode[Opcode["set3"] = 130] = "set3"; + Opcode[Opcode["set4"] = 131] = "set4"; + Opcode[Opcode["set_rule"] = 132] = "set_rule"; + Opcode[Opcode["put_char"] = 133] = "put_char"; + Opcode[Opcode["put2"] = 134] = "put2"; + Opcode[Opcode["put3"] = 135] = "put3"; + Opcode[Opcode["put4"] = 136] = "put4"; + Opcode[Opcode["put_rule"] = 137] = "put_rule"; + Opcode[Opcode["nop"] = 138] = "nop"; + Opcode[Opcode["bop"] = 139] = "bop"; + Opcode[Opcode["eop"] = 140] = "eop"; + Opcode[Opcode["push"] = 141] = "push"; + Opcode[Opcode["pop"] = 142] = "pop"; + Opcode[Opcode["right"] = 143] = "right"; + Opcode[Opcode["right2"] = 144] = "right2"; + Opcode[Opcode["right3"] = 145] = "right3"; + Opcode[Opcode["right4"] = 146] = "right4"; + Opcode[Opcode["w"] = 147] = "w"; + Opcode[Opcode["w1"] = 148] = "w1"; + Opcode[Opcode["w2"] = 149] = "w2"; + Opcode[Opcode["w3"] = 150] = "w3"; + Opcode[Opcode["w4"] = 151] = "w4"; + Opcode[Opcode["x"] = 152] = "x"; + Opcode[Opcode["x1"] = 153] = "x1"; + Opcode[Opcode["x2"] = 154] = "x2"; + Opcode[Opcode["x3"] = 155] = "x3"; + Opcode[Opcode["x4"] = 156] = "x4"; + Opcode[Opcode["down"] = 157] = "down"; + Opcode[Opcode["down2"] = 158] = "down2"; + Opcode[Opcode["down3"] = 159] = "down3"; + Opcode[Opcode["down4"] = 160] = "down4"; + Opcode[Opcode["y"] = 161] = "y"; + Opcode[Opcode["y1"] = 162] = "y1"; + Opcode[Opcode["y2"] = 163] = "y2"; + Opcode[Opcode["y3"] = 164] = "y3"; + Opcode[Opcode["y4"] = 165] = "y4"; + Opcode[Opcode["z"] = 166] = "z"; + Opcode[Opcode["z1"] = 167] = "z1"; + Opcode[Opcode["z2"] = 168] = "z2"; + Opcode[Opcode["z3"] = 169] = "z3"; + Opcode[Opcode["z4"] = 170] = "z4"; + Opcode[Opcode["fnt"] = 171] = "fnt"; + Opcode[Opcode["fnt1"] = 235] = "fnt1"; + Opcode[Opcode["fnt2"] = 236] = "fnt2"; + Opcode[Opcode["fnt3"] = 237] = "fnt3"; + Opcode[Opcode["fnt4"] = 238] = "fnt4"; + Opcode[Opcode["xxx"] = 239] = "xxx"; + Opcode[Opcode["xxx2"] = 240] = "xxx2"; + Opcode[Opcode["xxx3"] = 241] = "xxx3"; + Opcode[Opcode["xxx4"] = 242] = "xxx4"; + Opcode[Opcode["fnt_def"] = 243] = "fnt_def"; + Opcode[Opcode["fnt_def2"] = 244] = "fnt_def2"; + Opcode[Opcode["fnt_def3"] = 245] = "fnt_def3"; + Opcode[Opcode["fnt_def4"] = 246] = "fnt_def4"; + Opcode[Opcode["pre"] = 247] = "pre"; + Opcode[Opcode["post"] = 248] = "post"; + Opcode[Opcode["post_post"] = 249] = "post_post"; +})(Opcode || (Opcode = {})); + +var DviCommand = +/** @class */ +function () { + function DviCommand(properties) { + this.special = false; + Object.assign(this, properties); + } + + DviCommand.prototype.execute = function (machine) {}; + + DviCommand.prototype.toString = function () { + return "DviCommand { }"; + }; + + return DviCommand; +}(); + +exports.DviCommand = DviCommand; // 133 put1 c[1] typeset a character +// 134 put2 c[2] +// 135 put3 c[3] +// 136 put4 c[4] + +var PutChar = +/** @class */ +function (_super) { + __extends(PutChar, _super); + + function PutChar(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.put_char; + return _this; + } + + PutChar.prototype.execute = function (machine) { + machine.putText(Buffer.from([this.c])); + }; + + PutChar.prototype.toString = function () { + return "PutChar { c: '" + String.fromCharCode(this.c) + "' }"; + }; + + return PutChar; +}(DviCommand); // 0...127 set_char_i typeset a character and move right +// 128 set1 c[1] typeset a character and move right +// 129 set2 c[2] +// 130 set3 c[3] +// 131 set4 c[4] + + +var SetChar = +/** @class */ +function (_super) { + __extends(SetChar, _super); + + function SetChar(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.set_char; + return _this; + } + + SetChar.prototype.execute = function (machine) { + var text = Buffer.from([this.c]); + var width = machine.putText(text); + machine.moveRight(width); + }; + + SetChar.prototype.toString = function () { + return "SetChar { c: '" + String.fromCharCode(this.c) + "' }"; + }; + + return SetChar; +}(DviCommand); + +var SetText = +/** @class */ +function (_super) { + __extends(SetText, _super); + + function SetText(properties) { + return _super.call(this, properties) || this; + } + + SetText.prototype.execute = function (machine) { + var width = machine.putText(this.t); + machine.moveRight(width); + }; + + SetText.prototype.toString = function () { + return "SetText { t: \"" + this.t.toString() + "\" }"; + }; + + return SetText; +}(DviCommand); // 137 put_rule a[4], b[4] typeset a rule + + +var PutRule = +/** @class */ +function (_super) { + __extends(PutRule, _super); + + function PutRule(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.put_rule; + return _this; + } + + PutRule.prototype.execute = function (machine) { + machine.putRule(this); + }; + + PutRule.prototype.toString = function () { + return "PutRule { a: " + this.a + ", b: " + this.b + " }"; + }; + + return PutRule; +}(DviCommand); // 132 set_rule a[4], b[4] typeset a rule and move right + + +var SetRule = +/** @class */ +function (_super) { + __extends(SetRule, _super); + + function SetRule(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.set_rule; + return _this; + } + + SetRule.prototype.execute = function (machine) { + machine.putRule(this); + machine.moveRight(this.b); + }; + + SetRule.prototype.toString = function () { + return "SetRule { a: " + this.a + ", b: " + this.b + " }"; + }; + + return SetRule; +}(DviCommand); // 138 nop no operation + + +var Nop = +/** @class */ +function (_super) { + __extends(Nop, _super); + + function Nop(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.nop; + return _this; + } + + Nop.prototype.toString = function () { + return "Nop { }"; + }; + + return Nop; +}(DviCommand); // 139 bop c_0[4]..c_9[4], p[4] beginning of page + + +var Bop = +/** @class */ +function (_super) { + __extends(Bop, _super); + + function Bop(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.bop; + return _this; + } + + Bop.prototype.execute = function (machine) { + machine.beginPage(this); + }; + + Bop.prototype.toString = function () { + return "Bop { ... }"; + }; + + return Bop; +}(DviCommand); // 140 eop ending of page + + +var Eop = +/** @class */ +function (_super) { + __extends(Eop, _super); + + function Eop(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.eop; + return _this; + } + + Eop.prototype.execute = function (machine) { + if (machine.stack.length) throw Error('Stack should be empty at the end of a page.'); + machine.endPage(); + }; + + Eop.prototype.toString = function () { + return "Eop { }"; + }; + + return Eop; +}(DviCommand); // 141 push save the current positions + + +var Push = +/** @class */ +function (_super) { + __extends(Push, _super); + + function Push(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.push; + return _this; + } + + Push.prototype.execute = function (machine) { + machine.push(); + }; + + Push.prototype.toString = function () { + return "Push { }"; + }; + + return Push; +}(DviCommand); // 142 pop restore previous positions + + +var Pop = +/** @class */ +function (_super) { + __extends(Pop, _super); + + function Pop(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.pop; + return _this; + } + + Pop.prototype.execute = function (machine) { + machine.pop(); + }; + + Pop.prototype.toString = function () { + return "Pop { }"; + }; + + return Pop; +}(DviCommand); // 143 right1 b[1] move right +// 144 right2 b[2] +// 145 right3 b[3] +// 146 right4 b[4] + + +var MoveRight = +/** @class */ +function (_super) { + __extends(MoveRight, _super); + + function MoveRight(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.right; + return _this; + } + + MoveRight.prototype.execute = function (machine) { + machine.moveRight(this.b); + }; + + MoveRight.prototype.toString = function () { + return "MoveRight { b: " + this.b + " }"; + }; + + return MoveRight; +}(DviCommand); // 147 w0 move right by w +// 148 w1 b[1] move right and set w +// 149 w2 b[2] +// 150 w3 b[3] +// 151 w4 b[4] + + +var MoveW = +/** @class */ +function (_super) { + __extends(MoveW, _super); + + function MoveW(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.w; + return _this; + } + + MoveW.prototype.execute = function (machine) { + if (this.length > 1) machine.position.w = this.b; + machine.moveRight(machine.position.w); + }; + + MoveW.prototype.toString = function () { + if (this.length > 1) return "MoveW { b: " + this.b + " }";else return "MoveW0 { }"; + }; + + return MoveW; +}(DviCommand); // 152 x0 move right by x +// 153 x1 b[1] move right and set x +// 154 x2 b[2] +// 155 x3 b[3] +// 156 x4 b[4] + + +var MoveX = +/** @class */ +function (_super) { + __extends(MoveX, _super); + + function MoveX(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.x; + return _this; + } + + MoveX.prototype.execute = function (machine) { + if (this.length > 1) machine.position.x = this.b; + machine.moveRight(machine.position.x); + }; + + MoveX.prototype.toString = function () { + if (this.length > 1) return "MoveX { b: " + this.b + " }";else return "MoveX0 { }"; + }; + + return MoveX; +}(DviCommand); // 157 down1 a[1] move down +// 158 down2 a[2] +// 159 down3 a[3] +// 160 down4 a[4] + + +var MoveDown = +/** @class */ +function (_super) { + __extends(MoveDown, _super); + + function MoveDown(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.down; + return _this; + } + + MoveDown.prototype.execute = function (machine) { + machine.moveDown(this.a); + }; + + MoveDown.prototype.toString = function () { + return "MoveDown { a: " + this.a + " }"; + }; + + return MoveDown; +}(DviCommand); // 161 y0 move down by y +// 162 y1 a[1] move down and set y +// 163 y2 a[2] +// 164 y3 a[3] +// 165 y4 a[4] + + +var MoveY = +/** @class */ +function (_super) { + __extends(MoveY, _super); + + function MoveY(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.y; + return _this; + } + + MoveY.prototype.execute = function (machine) { + if (this.length > 1) machine.position.y = this.a; + machine.moveDown(machine.position.y); + }; + + MoveY.prototype.toString = function () { + if (this.length > 1) return "MoveY { a: " + this.a + " }";else return "MoveY0 { }"; + }; + + return MoveY; +}(DviCommand); // 166 z0 move down by z +// 167 z1 a[1] move down and set z +// 168 z2 a[2] +// 169 z3 a[3] +// 170 z4 a[4] + + +var MoveZ = +/** @class */ +function (_super) { + __extends(MoveZ, _super); + + function MoveZ(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.z; + return _this; + } + + MoveZ.prototype.execute = function (machine) { + if (this.length > 1) machine.position.z = this.a; + machine.moveDown(machine.position.z); + }; + + MoveZ.prototype.toString = function () { + if (this.length > 1) return "MoveZ { a: " + this.a + " }";else return "MoveZ0 { }"; + }; + + return MoveZ; +}(DviCommand); // 171...234 fnt_num_i set current font to i +// 235 fnt1 k[1] set current font +// 236 fnt2 k[2] +// 237 fnt3 k[3] +// 238 fnt4 k[4] + + +var SetFont = +/** @class */ +function (_super) { + __extends(SetFont, _super); + + function SetFont(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.fnt; + return _this; + } + + SetFont.prototype.execute = function (machine) { + if (machine.fonts[this.k]) { + machine.setFont(machine.fonts[this.k]); + } else throw "Could not find font " + this.k + "."; + }; + + SetFont.prototype.toString = function () { + return "SetFont { k: " + this.k + " }"; + }; + + return SetFont; +}(DviCommand); // 239 xxx1 k[1], x[k] extension to DVI primitives +// 240 xxx2 k[2], x[k] +// 241 xxx3 k[3], x[k] +// 242 xxx4 k[4], x[k] + + +var Special = +/** @class */ +function (_super) { + __extends(Special, _super); + + function Special(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.xxx; + _this.special = true; + return _this; + } + + Special.prototype.toString = function () { + return "Special { x: '" + this.x + "' }"; + }; + + return Special; +}(DviCommand); // 243 fnt_def1 k[1], c[4], s[4], d[4], +// a[1], l[1], n[a+l] define the meaning of a font number +// 244 fnt_def2 k[2], c[4], s[4], d[4], +// a[1], l[1], n[a+l] +// 245 fnt_def3 k[3], c[4], s[4], d[4], +// a[1], l[1], n[a+l] +// 246 fnt_def4 k[4], c[4], s[4], d[4], +// a[1], l[1], n[a+l] + + +var FontDefinition = +/** @class */ +function (_super) { + __extends(FontDefinition, _super); + + function FontDefinition(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.fnt_def; + return _this; + } + + FontDefinition.prototype.execute = function (machine) { + machine.fonts[this.k] = machine.loadFont({ + name: this.n, + checksum: this.c, + scaleFactor: this.s, + designSize: this.d + }); + }; + + FontDefinition.prototype.toString = function () { + return "FontDefinition { k: " + this.k + ", n: '" + this.n + "', ... }"; + }; + + return FontDefinition; +}(DviCommand); // 247 pre i[1], num[4], den[4], mag[4], k[1], x[k] preamble + + +var Preamble = +/** @class */ +function (_super) { + __extends(Preamble, _super); + + function Preamble(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.pre; + return _this; + } + + Preamble.prototype.execute = function (machine) { + if (this.num <= 0) throw Error('Invalid numerator (must be > 0)'); + if (this.den <= 0) throw Error('Invalid denominator (must be > 0)'); + + if (this.i != 2) { + throw Error('DVI format must be 2.'); + } + + machine.preamble(this.num, this.den, this.mag, this.x); + }; + + Preamble.prototype.toString = function () { + return "Preamble { i: " + this.i + ", num: " + this.num + ", den: " + this.den + ", mag: " + this.mag + ", x: '" + this.x + "' }"; + }; + + return Preamble; +}(DviCommand); // 248 post p[4], num[4], den[4], mag[4], l[4], u[4], s[2], t[2] +// < font definitions > postamble beginning + + +var Post = +/** @class */ +function (_super) { + __extends(Post, _super); + + function Post(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.post; + return _this; + } + + Post.prototype.execute = function (machine) { + machine.post(this); + }; + + Post.prototype.toString = function () { + return "Post { p: " + this.p + ", num: " + this.num + ", den: " + this.den + ", mag: " + this.mag + ", ... }"; + }; + + return Post; +}(DviCommand); // 249 post_post q[4], i[1]; 223's postamble ending + + +var PostPost = +/** @class */ +function (_super) { + __extends(PostPost, _super); + + function PostPost(properties) { + var _this = _super.call(this, properties) || this; + + _this.opcode = Opcode.post_post; + return _this; + } + + PostPost.prototype.execute = function (machine) { + machine.postPost(this); + }; + + PostPost.prototype.toString = function () { + return "PostPost { q: " + this.q + ", i: " + this.i + " }"; + }; + + return PostPost; +}(DviCommand); + +function parseCommand(opcode, buffer) { + if (opcode >= Opcode.set_char && opcode < Opcode.set1) { + return new SetChar({ + c: opcode, + length: 1 + }); + } + + if (opcode >= Opcode.fnt && opcode < Opcode.fnt1) return new SetFont({ + k: opcode - 171, + length: 1 + }); // Technically these are undefined opcodes, but we'll pretend they are NOPs + + if (opcode >= 250 && opcode <= 255) { + throw Error("Undefined opcode " + opcode); + return new Nop({ + length: 1 + }); + } + + switch (opcode) { + case Opcode.set1: + case Opcode.set2: + case Opcode.set3: + case Opcode.set4: + if (buffer.length < opcode - Opcode.set1 + 1) return undefined; + return new SetChar({ + c: buffer.readUIntBE(0, opcode - Opcode.set1 + 1), + length: opcode - Opcode.set1 + 1 + 1 + }); + + case Opcode.set_rule: + if (buffer.length < 8) return undefined; + return new SetRule({ + a: buffer.readInt32BE(0), + b: buffer.readInt32BE(4), + length: 9 + }); + + case Opcode.put_char: + case Opcode.put2: + case Opcode.put3: + case Opcode.put4: + if (buffer.length < opcode - Opcode.put_char + 1) return undefined; + return new PutChar({ + c: buffer.readIntBE(0, opcode - Opcode.put_char + 1), + length: opcode - Opcode.put_char + 1 + 1 + }); + + case Opcode.put_rule: + if (buffer.length < 8) return undefined; + return new PutRule({ + a: buffer.readInt32BE(0), + b: buffer.readInt32BE(4), + length: 9 + }); + + case Opcode.nop: + return new Nop({ + length: 1 + }); + + case Opcode.bop: + if (buffer.length < 44) return undefined; + return new Bop({ + c_0: buffer.readUInt32BE(0), + c_1: buffer.readUInt32BE(4), + c_2: buffer.readUInt32BE(8), + c_3: buffer.readUInt32BE(12), + c_4: buffer.readUInt32BE(16), + c_5: buffer.readUInt32BE(20), + c_6: buffer.readUInt32BE(24), + c_7: buffer.readUInt32BE(28), + c_8: buffer.readUInt32BE(32), + c_9: buffer.readUInt32BE(36), + p: buffer.readUInt32BE(40), + length: 45 + }); + + case Opcode.eop: + return new Eop({ + length: 1 + }); + + case Opcode.push: + return new Push({ + length: 1 + }); + + case Opcode.pop: + return new Pop({ + length: 1 + }); + + case Opcode.right: + case Opcode.right2: + case Opcode.right3: + case Opcode.right4: + if (buffer.length < opcode - Opcode.right + 1) return undefined; + return new MoveRight({ + b: buffer.readIntBE(0, opcode - Opcode.right + 1), + length: opcode - Opcode.right + 1 + 1 + }); + + case Opcode.w: + return new MoveW({ + b: 0, + length: 1 + }); + + case Opcode.w1: + case Opcode.w2: + case Opcode.w3: + case Opcode.w4: + if (buffer.length < opcode - Opcode.w) return undefined; + return new MoveW({ + b: buffer.readIntBE(0, opcode - Opcode.w), + length: opcode - Opcode.w + 1 + }); + + case Opcode.x: + return new MoveX({ + b: 0, + length: 1 + }); + + case Opcode.x1: + case Opcode.x2: + case Opcode.x3: + case Opcode.x4: + if (buffer.length < opcode - Opcode.x) return undefined; + return new MoveX({ + b: buffer.readIntBE(0, opcode - Opcode.x), + length: opcode - Opcode.x + 1 + }); + + case Opcode.down: + case Opcode.down2: + case Opcode.down3: + case Opcode.down4: + if (buffer.length < opcode - Opcode.down + 1) return undefined; + return new MoveDown({ + a: buffer.readIntBE(0, opcode - Opcode.down + 1), + length: opcode - Opcode.down + 1 + 1 + }); + + case Opcode.y: + return new MoveY({ + a: 0, + length: 1 + }); + + case Opcode.y1: + case Opcode.y2: + case Opcode.y3: + case Opcode.y4: + if (buffer.length < opcode - Opcode.y) return undefined; + return new MoveY({ + a: buffer.readIntBE(0, opcode - Opcode.y), + length: opcode - Opcode.y + 1 + }); + + case Opcode.z: + return new MoveZ({ + a: 0, + length: 1 + }); + + case Opcode.z1: + case Opcode.z2: + case Opcode.z3: + case Opcode.z4: + if (buffer.length < opcode - Opcode.z) return undefined; + return new MoveZ({ + a: buffer.readIntBE(0, opcode - Opcode.z), + length: opcode - Opcode.z + 1 + }); + + case Opcode.fnt1: + case Opcode.fnt2: + case Opcode.fnt3: + case Opcode.fnt4: + if (buffer.length < opcode - Opcode.fnt1 + 1) return undefined; + return new SetFont({ + k: buffer.readIntBE(0, opcode - Opcode.fnt1 + 1), + length: opcode - Opcode.fnt1 + 1 + 1 + }); + + case Opcode.xxx: + case Opcode.xxx2: + case Opcode.xxx3: + case Opcode.xxx4: + { + var i = opcode - Opcode.xxx + 1; + if (buffer.length < i) return undefined; + var k = buffer.readUIntBE(0, i); + if (buffer.length < i + k) return undefined; + return new Special({ + x: buffer.slice(i, i + k).toString(), + length: i + k + 1 + }); + } + + case Opcode.fnt_def: + case Opcode.fnt_def2: + case Opcode.fnt_def3: + case Opcode.fnt_def4: + { + var i = opcode - Opcode.fnt_def + 1; + if (buffer.length < i) return undefined; + var k = buffer.readIntBE(0, i); + if (buffer.length < i + 14) return undefined; + var c = buffer.readUInt32BE(i + 0); + var s = buffer.readUInt32BE(i + 4); + var d = buffer.readUInt32BE(i + 8); + var a = buffer.readUInt8(i + 12); + var l = buffer.readUInt8(i + 13); + if (buffer.length < i + 14 + a + l) return undefined; + var n = buffer.slice(i + 14, i + 14 + a + l).toString(); + return new FontDefinition({ + k: k, + c: c, + s: s, + d: d, + a: a, + l: l, + n: n, + length: i + 14 + a + l + 1 + }); + } + + case Opcode.pre: + { + if (buffer.length < 14) return undefined; + var i = buffer.readUInt8(0); + var num = buffer.readUInt32BE(1); + var den = buffer.readUInt32BE(5); + var mag = buffer.readUInt32BE(9); + var k = buffer.readUInt8(13); + if (buffer.length < 14 + k) return undefined; + return new Preamble({ + i: i, + num: num, + den: den, + mag: mag, + x: buffer.slice(14, 14 + k).toString(), + length: 14 + k + 1 + }); + } + + case Opcode.post: + if (buffer.length < 4 + 4 + 4 + 4 + 4 + 4 + 2 + 2) return undefined; + return new Post({ + p: buffer.readUInt32BE(0), + num: buffer.readUInt32BE(4), + den: buffer.readUInt32BE(8), + mag: buffer.readUInt32BE(12), + l: buffer.readUInt32BE(16), + u: buffer.readUInt32BE(20), + s: buffer.readUInt16BE(24), + t: buffer.readUInt16BE(26), + length: 29 + }); + + case Opcode.post_post: + if (buffer.length < 5) return undefined; + return new PostPost({ + q: buffer.readUInt32BE(0), + i: buffer.readUInt8(4), + length: 6 + }); + } + + return undefined; +} + +function dviParser(stream) { + return __asyncGenerator(this, arguments, function dviParser_1() { + var e_1, _a, buffer, isAfterPostamble, stream_1, stream_1_1, chunk, offset, opcode, command, e_1_1; + + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + buffer = Buffer.alloc(0); + isAfterPostamble = false; + _b.label = 1; + + case 1: + _b.trys.push([1, 12, 13, 18]); + + stream_1 = __asyncValues(stream); + _b.label = 2; + + case 2: + return [4 + /*yield*/ + , __await(stream_1.next())]; + + case 3: + if (!(stream_1_1 = _b.sent(), !stream_1_1.done)) return [3 + /*break*/ + , 11]; + chunk = stream_1_1.value; + buffer = Buffer.concat([buffer, chunk]); + offset = 0; + _b.label = 4; + + case 4: + if (!(offset < buffer.length)) return [3 + /*break*/ + , 9]; + opcode = buffer.readUInt8(offset); + + if (isAfterPostamble) { + if (opcode == 223) { + offset++; + return [3 + /*break*/ + , 4]; + } else { + throw Error('Only 223 bytes are permitted after the post-postamble.'); + } + } + + command = parseCommand(opcode, buffer.slice(offset + 1)); + if (!command) return [3 + /*break*/ + , 7]; + return [4 + /*yield*/ + , __await(command)]; + + case 5: + return [4 + /*yield*/ + , _b.sent()]; + + case 6: + _b.sent(); + + offset += command.length; + if (command.opcode == Opcode.post_post) isAfterPostamble = true; + return [3 + /*break*/ + , 8]; + + case 7: + return [3 + /*break*/ + , 9]; + + case 8: + return [3 + /*break*/ + , 4]; + + case 9: + buffer = buffer.slice(offset); + _b.label = 10; + + case 10: + return [3 + /*break*/ + , 2]; + + case 11: + return [3 + /*break*/ + , 18]; + + case 12: + e_1_1 = _b.sent(); + e_1 = { + error: e_1_1 + }; + return [3 + /*break*/ + , 18]; + + case 13: + _b.trys.push([13,, 16, 17]); + + if (!(stream_1_1 && !stream_1_1.done && (_a = stream_1.return))) return [3 + /*break*/ + , 15]; + return [4 + /*yield*/ + , __await(_a.call(stream_1))]; + + case 14: + _b.sent(); + + _b.label = 15; + + case 15: + return [3 + /*break*/ + , 17]; + + case 16: + if (e_1) throw e_1.error; + return [7 + /*endfinally*/ + ]; + + case 17: + return [7 + /*endfinally*/ + ]; + + case 18: + return [2 + /*return*/ + ]; + } + }); + }); +} + +exports.dviParser = dviParser; + +function execute(commands, machine) { + var commands_1, commands_1_1; + return __awaiter(this, void 0, void 0, function () { + var e_2, _a, command, e_2_1; + + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _b.trys.push([0, 5, 6, 11]); + + commands_1 = __asyncValues(commands); + _b.label = 1; + + case 1: + return [4 + /*yield*/ + , commands_1.next()]; + + case 2: + if (!(commands_1_1 = _b.sent(), !commands_1_1.done)) return [3 + /*break*/ + , 4]; + command = commands_1_1.value; // console.log(command.toString()); + + command.execute(machine); + _b.label = 3; + + case 3: + return [3 + /*break*/ + , 1]; + + case 4: + return [3 + /*break*/ + , 11]; + + case 5: + e_2_1 = _b.sent(); + e_2 = { + error: e_2_1 + }; + return [3 + /*break*/ + , 11]; + + case 6: + _b.trys.push([6,, 9, 10]); + + if (!(commands_1_1 && !commands_1_1.done && (_a = commands_1.return))) return [3 + /*break*/ + , 8]; + return [4 + /*yield*/ + , _a.call(commands_1)]; + + case 7: + _b.sent(); + + _b.label = 8; + + case 8: + return [3 + /*break*/ + , 10]; + + case 9: + if (e_2) throw e_2.error; + return [7 + /*endfinally*/ + ]; + + case 10: + return [7 + /*endfinally*/ + ]; + + case 11: + return [2 + /*return*/ + ]; + } + }); + }); +} + +exports.execute = execute; + +function merge(commands, filter, merge) { + return __asyncGenerator(this, arguments, function merge_1() { + var e_3, _a, queue, commands_2, commands_2_1, command, e_3_1; + + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + queue = []; + _b.label = 1; + + case 1: + _b.trys.push([1, 12, 13, 18]); + + commands_2 = __asyncValues(commands); + _b.label = 2; + + case 2: + return [4 + /*yield*/ + , __await(commands_2.next())]; + + case 3: + if (!(commands_2_1 = _b.sent(), !commands_2_1.done)) return [3 + /*break*/ + , 11]; + command = commands_2_1.value; + if (!filter(command)) return [3 + /*break*/ + , 4]; + queue.push(command); + return [3 + /*break*/ + , 10]; + + case 4: + if (!(queue.length > 0)) return [3 + /*break*/ + , 7]; + return [5 + /*yield**/ + , __values(__asyncDelegator(__asyncValues(merge(queue))))]; + + case 5: + return [4 + /*yield*/ + , __await.apply(void 0, [_b.sent()])]; + + case 6: + _b.sent(); + + queue = []; + _b.label = 7; + + case 7: + return [4 + /*yield*/ + , __await(command)]; + + case 8: + return [4 + /*yield*/ + , _b.sent()]; + + case 9: + _b.sent(); + + _b.label = 10; + + case 10: + return [3 + /*break*/ + , 2]; + + case 11: + return [3 + /*break*/ + , 18]; + + case 12: + e_3_1 = _b.sent(); + e_3 = { + error: e_3_1 + }; + return [3 + /*break*/ + , 18]; + + case 13: + _b.trys.push([13,, 16, 17]); + + if (!(commands_2_1 && !commands_2_1.done && (_a = commands_2.return))) return [3 + /*break*/ + , 15]; + return [4 + /*yield*/ + , __await(_a.call(commands_2))]; + + case 14: + _b.sent(); + + _b.label = 15; + + case 15: + return [3 + /*break*/ + , 17]; + + case 16: + if (e_3) throw e_3.error; + return [7 + /*endfinally*/ + ]; + + case 17: + return [7 + /*endfinally*/ + ]; + + case 18: + if (!(queue.length > 0)) return [3 + /*break*/ + , 21]; + return [5 + /*yield**/ + , __values(__asyncDelegator(__asyncValues(merge(queue))))]; + + case 19: + return [4 + /*yield*/ + , __await.apply(void 0, [_b.sent()])]; + + case 20: + _b.sent(); + + _b.label = 21; + + case 21: + return [2 + /*return*/ + ]; + } + }); + }); +} + +exports.merge = merge; + +function mergeText(commands) { + return merge(commands, function (command) { + return command instanceof SetChar; + }, function (queue) { + var text; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + text = Buffer.from(queue.map(function (command) { + return command.c; + })); + return [4 + /*yield*/ + , new SetText({ + t: text + })]; + + case 1: + _a.sent(); + + return [2 + /*return*/ + ]; + } + }); + }); +} + +exports.mergeText = mergeText; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../tikzjax/node_modules/buffer/index.js */ "./node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "../dvi2html/lib/specials/color.js": +/*!*****************************************!*\ + !*** ../dvi2html/lib/specials/color.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var __extends = this && this.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + }; + + return extendStatics(d, b); + }; + + return function (d, b) { + extendStatics(d, b); + + function __() { + this.constructor = d; + } + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); + +var __generator = this && this.__generator || function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, + f, + y, + t, + g; + return g = { + next: verb(0), + "throw": verb(1), + "return": verb(2) + }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { + return this; + }), g; + + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + + switch (op[0]) { + case 0: + case 1: + t = op; + break; + + case 4: + _.label++; + return { + value: op[1], + done: false + }; + + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + + case 7: + op = _.ops.pop(); + + _.trys.pop(); + + continue; + + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + + if (t && _.label < t[2]) { + _.label = t[2]; + + _.ops.push(op); + + break; + } + + if (t[2]) _.ops.pop(); + + _.trys.pop(); + + continue; + } + + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + + if (op[0] & 5) throw op[1]; + return { + value: op[0] ? op[1] : void 0, + done: true + }; + } +}; + +var __asyncValues = this && this.__asyncValues || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], + i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { + return this; + }, i); + + function verb(n) { + i[n] = o[n] && function (v) { + return new Promise(function (resolve, reject) { + v = o[n](v), settle(resolve, reject, v.done, v.value); + }); + }; + } + + function settle(resolve, reject, d, v) { + Promise.resolve(v).then(function (v) { + resolve({ + value: v, + done: d + }); + }, reject); + } +}; + +var __await = this && this.__await || function (v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +}; + +var __asyncGenerator = this && this.__asyncGenerator || function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), + i, + q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { + return this; + }, i; + + function verb(n) { + if (g[n]) i[n] = function (v) { + return new Promise(function (a, b) { + q.push([n, v, a, b]) > 1 || resume(n, v); + }); + }; + } + + function resume(n, v) { + try { + step(g[n](v)); + } catch (e) { + settle(q[0][3], e); + } + } + + function step(r) { + r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); + } + + function fulfill(value) { + resume("next", value); + } + + function reject(value) { + resume("throw", value); + } + + function settle(f, v) { + if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); + } +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var parser_1 = __webpack_require__(/*! ../parser */ "../dvi2html/lib/parser.js"); + +var PushColor = +/** @class */ +function (_super) { + __extends(PushColor, _super); + + function PushColor(color) { + var _this = _super.call(this, {}) || this; + + _this.color = color; + return _this; + } + + PushColor.prototype.execute = function (machine) { + machine.pushColor(this.color); + }; + + PushColor.prototype.toString = function () { + return "PushColor { color: '" + this.color + "' }"; + }; + + return PushColor; +}(parser_1.DviCommand); + +var PopColor = +/** @class */ +function (_super) { + __extends(PopColor, _super); + + function PopColor() { + return _super.call(this, {}) || this; + } + + PopColor.prototype.execute = function (machine) { + machine.popColor(); + }; + + PopColor.prototype.toString = function () { + return "PopColor { }"; + }; + + return PopColor; +}(parser_1.DviCommand); + +function intToHex(n) { + return ("00" + Math.round(n).toString(16)).substr(-2); +} + +function texColor(name) { + if (name == 'gray 0') return 'black'; + if (name == 'gray 1') return 'white'; + + if (name.startsWith('rgb ')) { + return '#' + name.split(' ').slice(1).map(function (x) { + return intToHex(parseFloat(x) * 255); + }).join(''); + } + + if (name.startsWith('gray ')) { + var x = name.split(' ')[1]; + return texColor('rgb ' + x + ' ' + x + ' ' + x); + } + + return 'black'; +} + +function default_1(commands) { + return __asyncGenerator(this, arguments, function () { + var e_1, _a, queue, commands_1, commands_1_1, command, color, e_1_1; + + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + queue = []; + _b.label = 1; + + case 1: + _b.trys.push([1, 17, 18, 23]); + + commands_1 = __asyncValues(commands); + _b.label = 2; + + case 2: + return [4 + /*yield*/ + , __await(commands_1.next())]; + + case 3: + if (!(commands_1_1 = _b.sent(), !commands_1_1.done)) return [3 + /*break*/ + , 16]; + command = commands_1_1.value; + if (!!command.special) return [3 + /*break*/ + , 6]; + return [4 + /*yield*/ + , __await(command)]; + + case 4: + return [4 + /*yield*/ + , _b.sent()]; + + case 5: + _b.sent(); + + return [3 + /*break*/ + , 15]; + + case 6: + if (!!command.x.startsWith('color ')) return [3 + /*break*/ + , 9]; + return [4 + /*yield*/ + , __await(command)]; + + case 7: + return [4 + /*yield*/ + , _b.sent()]; + + case 8: + _b.sent(); + + return [3 + /*break*/ + , 15]; + + case 9: + if (!command.x.startsWith('color push ')) return [3 + /*break*/ + , 12]; + color = texColor(command.x.replace(/^color push /, '')); + return [4 + /*yield*/ + , __await(new PushColor(color))]; + + case 10: + return [4 + /*yield*/ + , _b.sent()]; + + case 11: + _b.sent(); + + _b.label = 12; + + case 12: + if (!command.x.startsWith('color pop')) return [3 + /*break*/ + , 15]; + return [4 + /*yield*/ + , __await(new PopColor())]; + + case 13: + return [4 + /*yield*/ + , _b.sent()]; + + case 14: + _b.sent(); + + _b.label = 15; + + case 15: + return [3 + /*break*/ + , 2]; + + case 16: + return [3 + /*break*/ + , 23]; + + case 17: + e_1_1 = _b.sent(); + e_1 = { + error: e_1_1 + }; + return [3 + /*break*/ + , 23]; + + case 18: + _b.trys.push([18,, 21, 22]); + + if (!(commands_1_1 && !commands_1_1.done && (_a = commands_1.return))) return [3 + /*break*/ + , 20]; + return [4 + /*yield*/ + , __await(_a.call(commands_1))]; + + case 19: + _b.sent(); + + _b.label = 20; + + case 20: + return [3 + /*break*/ + , 22]; + + case 21: + if (e_1) throw e_1.error; + return [7 + /*endfinally*/ + ]; + + case 22: + return [7 + /*endfinally*/ + ]; + + case 23: + return [2 + /*return*/ + ]; + } + }); + }); +} + +exports.default = default_1; + +/***/ }), + +/***/ "../dvi2html/lib/specials/papersize.js": +/*!*********************************************!*\ + !*** ../dvi2html/lib/specials/papersize.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var __extends = this && this.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + }; + + return extendStatics(d, b); + }; + + return function (d, b) { + extendStatics(d, b); + + function __() { + this.constructor = d; + } + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); + +var __generator = this && this.__generator || function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, + f, + y, + t, + g; + return g = { + next: verb(0), + "throw": verb(1), + "return": verb(2) + }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { + return this; + }), g; + + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + + switch (op[0]) { + case 0: + case 1: + t = op; + break; + + case 4: + _.label++; + return { + value: op[1], + done: false + }; + + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + + case 7: + op = _.ops.pop(); + + _.trys.pop(); + + continue; + + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + + if (t && _.label < t[2]) { + _.label = t[2]; + + _.ops.push(op); + + break; + } + + if (t[2]) _.ops.pop(); + + _.trys.pop(); + + continue; + } + + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + + if (op[0] & 5) throw op[1]; + return { + value: op[0] ? op[1] : void 0, + done: true + }; + } +}; + +var __asyncValues = this && this.__asyncValues || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], + i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { + return this; + }, i); + + function verb(n) { + i[n] = o[n] && function (v) { + return new Promise(function (resolve, reject) { + v = o[n](v), settle(resolve, reject, v.done, v.value); + }); + }; + } + + function settle(resolve, reject, d, v) { + Promise.resolve(v).then(function (v) { + resolve({ + value: v, + done: d + }); + }, reject); + } +}; + +var __await = this && this.__await || function (v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +}; + +var __asyncGenerator = this && this.__asyncGenerator || function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), + i, + q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { + return this; + }, i; + + function verb(n) { + if (g[n]) i[n] = function (v) { + return new Promise(function (a, b) { + q.push([n, v, a, b]) > 1 || resume(n, v); + }); + }; + } + + function resume(n, v) { + try { + step(g[n](v)); + } catch (e) { + settle(q[0][3], e); + } + } + + function step(r) { + r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); + } + + function fulfill(value) { + resume("next", value); + } + + function reject(value) { + resume("throw", value); + } + + function settle(f, v) { + if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); + } +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var parser_1 = __webpack_require__(/*! ../parser */ "../dvi2html/lib/parser.js"); + +var Papersize = +/** @class */ +function (_super) { + __extends(Papersize, _super); + + function Papersize(width, height) { + var _this = _super.call(this, {}) || this; + + _this.width = width; + _this.height = height; + return _this; + } + + Papersize.prototype.execute = function (machine) { + machine.setPapersize(this.width, this.height); + }; + + Papersize.prototype.toString = function () { + return "Papersize { width: " + this.width + ", height: " + this.height + " }"; + }; + + return Papersize; +}(parser_1.DviCommand); + +function default_1(commands) { + return __asyncGenerator(this, arguments, function () { + var e_1, _a, commands_1, commands_1_1, command, sizes, width, height, e_1_1; + + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _b.trys.push([0, 13, 14, 19]); + + commands_1 = __asyncValues(commands); + _b.label = 1; + + case 1: + return [4 + /*yield*/ + , __await(commands_1.next())]; + + case 2: + if (!(commands_1_1 = _b.sent(), !commands_1_1.done)) return [3 + /*break*/ + , 12]; + command = commands_1_1.value; + if (!!command.special) return [3 + /*break*/ + , 5]; + return [4 + /*yield*/ + , __await(command)]; + + case 3: + return [4 + /*yield*/ + , _b.sent()]; + + case 4: + _b.sent(); + + return [3 + /*break*/ + , 11]; + + case 5: + if (!!command.x.startsWith('papersize=')) return [3 + /*break*/ + , 8]; + return [4 + /*yield*/ + , __await(command)]; + + case 6: + return [4 + /*yield*/ + , _b.sent()]; + + case 7: + _b.sent(); + + return [3 + /*break*/ + , 11]; + + case 8: + sizes = command.x.replace(/^papersize=/, '').split(','); + if (sizes.length != 2) throw Error('Papersize special requires two arguments.'); + if (!sizes[0].endsWith('pt')) throw Error('Papersize special width must be in points.'); + if (!sizes[1].endsWith('pt')) throw Error('Papersize special height must be in points.'); + width = parseFloat(sizes[0].replace(/pt$/, '')); + height = parseFloat(sizes[1].replace(/pt$/, '')); + return [4 + /*yield*/ + , __await(new Papersize(width, height))]; + + case 9: + return [4 + /*yield*/ + , _b.sent()]; + + case 10: + _b.sent(); + + _b.label = 11; + + case 11: + return [3 + /*break*/ + , 1]; + + case 12: + return [3 + /*break*/ + , 19]; + + case 13: + e_1_1 = _b.sent(); + e_1 = { + error: e_1_1 + }; + return [3 + /*break*/ + , 19]; + + case 14: + _b.trys.push([14,, 17, 18]); + + if (!(commands_1_1 && !commands_1_1.done && (_a = commands_1.return))) return [3 + /*break*/ + , 16]; + return [4 + /*yield*/ + , __await(_a.call(commands_1))]; + + case 15: + _b.sent(); + + _b.label = 16; + + case 16: + return [3 + /*break*/ + , 18]; + + case 17: + if (e_1) throw e_1.error; + return [7 + /*endfinally*/ + ]; + + case 18: + return [7 + /*endfinally*/ + ]; + + case 19: + return [2 + /*return*/ + ]; + } + }); + }); +} + +exports.default = default_1; + +/***/ }), + +/***/ "../dvi2html/lib/specials/svg.js": +/*!***************************************!*\ + !*** ../dvi2html/lib/specials/svg.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var __extends = this && this.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + }; + + return extendStatics(d, b); + }; + + return function (d, b) { + extendStatics(d, b); + + function __() { + this.constructor = d; + } + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); + +var __generator = this && this.__generator || function (thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, + f, + y, + t, + g; + return g = { + next: verb(0), + "throw": verb(1), + "return": verb(2) + }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { + return this; + }), g; + + function verb(n) { + return function (v) { + return step([n, v]); + }; + } + + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + + switch (op[0]) { + case 0: + case 1: + t = op; + break; + + case 4: + _.label++; + return { + value: op[1], + done: false + }; + + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + + case 7: + op = _.ops.pop(); + + _.trys.pop(); + + continue; + + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + + if (t && _.label < t[2]) { + _.label = t[2]; + + _.ops.push(op); + + break; + } + + if (t[2]) _.ops.pop(); + + _.trys.pop(); + + continue; + } + + op = body.call(thisArg, _); + } catch (e) { + op = [6, e]; + y = 0; + } finally { + f = t = 0; + } + + if (op[0] & 5) throw op[1]; + return { + value: op[0] ? op[1] : void 0, + done: true + }; + } +}; + +var __asyncValues = this && this.__asyncValues || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], + i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { + return this; + }, i); + + function verb(n) { + i[n] = o[n] && function (v) { + return new Promise(function (resolve, reject) { + v = o[n](v), settle(resolve, reject, v.done, v.value); + }); + }; + } + + function settle(resolve, reject, d, v) { + Promise.resolve(v).then(function (v) { + resolve({ + value: v, + done: d + }); + }, reject); + } +}; + +var __await = this && this.__await || function (v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +}; + +var __asyncGenerator = this && this.__asyncGenerator || function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), + i, + q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { + return this; + }, i; + + function verb(n) { + if (g[n]) i[n] = function (v) { + return new Promise(function (a, b) { + q.push([n, v, a, b]) > 1 || resume(n, v); + }); + }; + } + + function resume(n, v) { + try { + step(g[n](v)); + } catch (e) { + settle(q[0][3], e); + } + } + + function step(r) { + r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); + } + + function fulfill(value) { + resume("next", value); + } + + function reject(value) { + resume("throw", value); + } + + function settle(f, v) { + if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); + } +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var parser_1 = __webpack_require__(/*! ../parser */ "../dvi2html/lib/parser.js"); + +var SVG = +/** @class */ +function (_super) { + __extends(SVG, _super); + + function SVG(svg) { + var _this = _super.call(this, {}) || this; + + _this.svg = svg; + return _this; + } + + SVG.prototype.execute = function (machine) { + machine.putSVG(this.svg); + }; + + return SVG; +}(parser_1.DviCommand); + +function specialsToSVG(commands) { + return __asyncGenerator(this, arguments, function specialsToSVG_1() { + var e_1, _a, commands_1, commands_1_1, command, svg, e_1_1; + + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _b.trys.push([0, 13, 14, 19]); + + commands_1 = __asyncValues(commands); + _b.label = 1; + + case 1: + return [4 + /*yield*/ + , __await(commands_1.next())]; + + case 2: + if (!(commands_1_1 = _b.sent(), !commands_1_1.done)) return [3 + /*break*/ + , 12]; + command = commands_1_1.value; + if (!!command.special) return [3 + /*break*/ + , 5]; + return [4 + /*yield*/ + , __await(command)]; + + case 3: + return [4 + /*yield*/ + , _b.sent()]; + + case 4: + _b.sent(); + + return [3 + /*break*/ + , 11]; + + case 5: + if (!!command.x.startsWith('dvisvgm:raw ')) return [3 + /*break*/ + , 8]; + return [4 + /*yield*/ + , __await(command)]; + + case 6: + return [4 + /*yield*/ + , _b.sent()]; + + case 7: + _b.sent(); + + return [3 + /*break*/ + , 11]; + + case 8: + svg = command.x.replace(/^dvisvgm:raw /, ''); + return [4 + /*yield*/ + , __await(new SVG(svg))]; + + case 9: + return [4 + /*yield*/ + , _b.sent()]; + + case 10: + _b.sent(); + + _b.label = 11; + + case 11: + return [3 + /*break*/ + , 1]; + + case 12: + return [3 + /*break*/ + , 19]; + + case 13: + e_1_1 = _b.sent(); + e_1 = { + error: e_1_1 + }; + return [3 + /*break*/ + , 19]; + + case 14: + _b.trys.push([14,, 17, 18]); + + if (!(commands_1_1 && !commands_1_1.done && (_a = commands_1.return))) return [3 + /*break*/ + , 16]; + return [4 + /*yield*/ + , __await(_a.call(commands_1))]; + + case 15: + _b.sent(); + + _b.label = 16; + + case 16: + return [3 + /*break*/ + , 18]; + + case 17: + if (e_1) throw e_1.error; + return [7 + /*endfinally*/ + ]; + + case 18: + return [7 + /*endfinally*/ + ]; + + case 19: + return [2 + /*return*/ + ]; + } + }); + }); +} + +function default_1(commands) { + return parser_1.merge(specialsToSVG(commands), function (command) { + return command.svg; + }, function (commands) { + var svg; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + svg = commands.map(function (command) { + return command.svg; + }).join('').replace(/{\?nl}/g, "\n"); + return [4 + /*yield*/ + , new SVG(svg)]; + + case 1: + _a.sent(); + + return [2 + /*return*/ + ]; + } + }); + }); +} + +exports.default = default_1; + +/***/ }), + +/***/ "../dvi2html/lib/text.js": +/*!*******************************!*\ + !*** ../dvi2html/lib/text.js ***! + \*******************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var __extends = this && this.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + }; + + return extendStatics(d, b); + }; + + return function (d, b) { + extendStatics(d, b); + + function __() { + this.constructor = d; + } + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); + +var __values = this && this.__values || function (o) { + var m = typeof Symbol === "function" && o[Symbol.iterator], + i = 0; + if (m) return m.call(o); + return { + next: function () { + if (o && i >= o.length) o = void 0; + return { + value: o && o[i++], + done: !o + }; + } + }; +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var machine_1 = __webpack_require__(/*! ./machine */ "../dvi2html/lib/machine.js"); + +var epsilon = 0.00001; + +var TextMachine = +/** @class */ +function (_super) { + __extends(TextMachine, _super); + + function TextMachine(o) { + var _this = _super.call(this) || this; + + _this.output = o; + _this.snippets = []; + return _this; + } + + TextMachine.prototype.putRule = function (rule) {}; + + TextMachine.prototype.beginPage = function (page) { + _super.prototype.beginPage.call(this, page); + + this.snippets = []; + }; + + TextMachine.prototype.endPage = function () { + var e_1, _a; + + this.snippets = this.snippets.sort(function (a, b) { + if (a[1] < b[1]) return -1; + if (a[1] > b[1]) return 1; + if (a[0] < b[0]) return -1; + if (a[0] > b[0]) return 1; + return 0; + }); + if (this.snippets.length == 0) return; + var previousH = this.snippets[0][0]; + var previousV = this.snippets[0][1]; + + try { + for (var _b = __values(this.snippets), _c = _b.next(); !_c.done; _c = _b.next()) { + var snippet = _c.value; + var h = snippet[0]; + var v = snippet[1]; + var text = snippet[2]; + if (v > previousV) this.output.write("\n"); + if (h > previousH + epsilon) this.output.write(" "); + this.output.write(text.toString()); + previousV = v; + previousH = h; + } + } catch (e_1_1) { + e_1 = { + error: e_1_1 + }; + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } finally { + if (e_1) throw e_1.error; + } + } + }; + + TextMachine.prototype.putText = function (text) { + this.snippets.push([this.position.h, this.position.v, text]); + return epsilon; + }; + + TextMachine.prototype.postPost = function (p) { + this.output.end(); + }; + + return TextMachine; +}(machine_1.Machine); + +exports.default = TextMachine; + +/***/ }), + +/***/ "../dvi2html/lib/tfm/fonts.json": +/*!**************************************!*\ + !*** ../dvi2html/lib/tfm/fonts.json ***! + \**************************************/ +/*! exports provided: cmb10, cmbsy10, cmbsy6, cmbsy7, cmbsy8, cmbsy9, cmbx10, cmbx12, cmbx5, cmbx6, cmbx7, cmbx8, cmbx9, cmbxsl10, cmbxti10, cmcsc10, cmcsc8, cmcsc9, cmdunh10, cmex10, cmex7, cmex8, cmex9, cmff10, cmfi10, cmfib8, cminch, cmitt10, cmmi10, cmmi12, cmmi5, cmmi6, cmmi7, cmmi8, cmmi9, cmmib10, cmmib6, cmmib7, cmmib8, cmmib9, cmr10, cmr12, cmr17, cmr5, cmr6, cmr7, cmr8, cmr9, cmsl10, cmsl12, cmsl8, cmsl9, cmsltt10, cmss10, cmss12, cmss17, cmss8, cmss9, cmssbx10, cmssdc10, cmssi10, cmssi12, cmssi17, cmssi8, cmssi9, cmssq8, cmssqi8, cmsy10, cmsy5, cmsy6, cmsy7, cmsy8, cmsy9, cmtcsc10, cmtex10, cmtex8, cmtex9, cmti10, cmti12, cmti7, cmti8, cmti9, cmtt10, cmtt12, cmtt8, cmtt9, cmu10, cmvtt10, euex10, euex7, euex8, euex9, eufb10, eufb5, eufb6, eufb7, eufb8, eufb9, eufm10, eufm5, eufm6, eufm7, eufm8, eufm9, eurb10, eurb5, eurb6, eurb7, eurb8, eurb9, eurm10, eurm5, eurm6, eurm7, eurm8, eurm9, eusb10, eusb5, eusb6, eusb7, eusb8, eusb9, eusm10, eusm5, eusm6, eusm7, eusm8, eusm9, msam10, msam5, msam6, msam7, msam8, msam9, msbm10, msbm5, msbm6, msbm7, msbm8, msbm9, default */ +/***/ (function(module) { + +module.exports = {"cmb10":"AU4AEgAAAH8AMAAPAAoABQBYAAkAAAAH0gueJgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNQgAAAAAAAAAAAAAAAAAAAAAAAADqF7AAACqwAAAmsAAAHrAAABuwAAAnsAAAILAAACawAAAgsAAAJrAAACCwAAAWwBEKFMAAABTAAAAqwAAAKsAAAAEwAAAEOAAAD8AAAA/AAAAPgAAAD8AAAA9wAAAiwAAACwYAABXAAAAgMAAAJjAAAA9VAAArsAAALrAAACbSAAABMAEAA8ABFxPAAAAqxwAAD+MAACrjAAAmwAAAAcABEgbpAAAG6QAAD+AAACZkAAABGAAABTABFQEQAAAP6QAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAAEwAAABOAAAA0gAACYhAAANSAAADcABGCbAAAAisAFMH7AAACCwAAAksAE1GrAAABmwASQpsAAAJ7AAAAmwAVcQsAAAKLABKhewAVIssAAAJ7AAACGwATUcsAEeIbgAACOwAUwUsAAAHbABLiWwAAAisAUkL7AFJCKwASoisAkvGLAAAALpAAATwAAAAukAAA/AAAABwAAAAcABEQ4wAUgUwAFCCzABQBTAAAAMMAAABMARAg84BVYUwAE6AcAAAATIAAASwAEZAcAAACowAToUMAE6DzABQhQ4AUIROAAACjAAAAgwAAAHkAFKFDABSxIwBRkgMAUaEjAAABI4BR8LMAAADzANFi0wDAAPwAAAD8AAAA/AAAAAAAAAAARxyAAEeuMABOOOAATjkAAFVVYABjjlAAY+lQAGT6YABlsIAAbYMAAHHHMAB3d4AAeOOwAHxx4ACAACAAhERgAIccgACHHKAAi2DQAI45AACPSgAAlVWAAJmZ0ACcceAAoLZQAKfSsACqqtAAru8gALHHUACzM2AAtgugALjjsADAADAAwWxQAMJ9UADERIAAxPqAAMccoADIiLAAyIjQAMk+0ADVVYAA59KwAPMzYAEAADABBESAAQiI0AAAAAAAJ9KAAGQf4ABxxyAAgAAAAIqqsACVVWAAmJqgAKHHIACiijAApPpQAK+lAACxxyAAvBbQAMAAAAAAAA//5B/gAAxx0AAOOOAAFVVgABjjoAArjjAAMccAADHHIABAAAAAAAAAAAOOMAAGZmAABxyAABxx0AbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AAoAhgAKALQB7gC0AfIBgADyAYAA+AGGAAwBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AFAGWABQB1gAUAcoAFAGGABQBBgAYAT4AEAEOABABHgASAUYAEAHmABABlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAHSABAB1gAQAYoAEAHmABAB2gASAd4AEAGiABIBrgAQAZYAHAG+ABwB4gAQAZIAHAGOABwBxgAcAdoAEAGqACAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAGgFeABoBqgAeASYAH//uOOP/6mZYAAccd//8ccv//jjj//qqq//444wAAccgAAOOOAAAAAAAFVVYAAqqrAAHHHQAHHHIAEAADAAHHHQ==","cmbsy10":"ARcAEgAAAH8ALAAPABAAEAAHAAcAAAAW4MmMDACgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNQlNZAAAAAAAAAAAAAAAAAAAAAADqH6oAAAJTAAAfqgAACEIAAB+qAAAIUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACnMAAAIUwAACFMAAB9kAAAfZAAAH90AAB/dAAAf3QAAH90AAB/dAAAf3QAAHyEAAB91AAAflwAAH5cAACmXAAAplwAAH5cAAB+XAAApIQAAKSEAAAjLAAAIywAAKSEAACnLAAApywAAH2QAACkhAAApIQAAEMsAABDLAAApIQAAKcsAACnLAAAfMAAAA4AAACkwAAAVlwAAFZcAACjMAAAozAAAAcsAAAEhAAALwAAAC8AAABUwAAAI5gAAHMAAABzAAAAfwAAAH8AAABDAAAAisAEGE7AFBAqwDQQesAkCCbAhAxmwKQMOuBEDJrABAwywHQAWuDkFHbABARewAQQrsAEEI7A1AiGwCQMYsCUCJLgBAyewAQIPsBUEDbA9ABGwKQISsCUAKrAlAhqwMQQUuCUCG7AZBBWAAAAVgAAAFYAAABWAAAAVgAAAEMAAABDAAAAF7gAABe4AAAXuAAAF7gAACO4AAAjuAAAE7gAABO4AAALuAAAI7gAACO4AABDuAAAI7gAAAssAACUfAAAgsAAAJbAAAAfMLAAVgAAAFYAAAB/dAAAf3QAABswAAAXMAAAFzAAAEMwAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAFHHAABYLWAAcn0AAILYAACGwVAAkZmgAJMzAACbYIAAnOxgAKOOAACkc7AApOaAAK59AACyRlAAs+kAALb3gAC8w4AAv3KwAMI0MADERAAAx4lgAMnG0ADPUtAA0GggANEUsADRh1AA1J8AAN8KMADkX1AA5PoAAOZmIADn0jAA67TQAO/0UADwbOAA9VUAAPzFgAD9VOABBbAAASZmAAErKbABYLkwAAAAAAAPXDAAZB/gAHHHIAB446AAeT6AAICRsACGQgAAjjkAAJXnAACiIgAAr6UAALHHIACyWNAAwAAAAAAAD//kH+//+OOv//k+gAAAkbAABkIAAA444AAV5wAAGOOgACEvYAAiIgAAMccAADHHIAAyWNAAQAAAAPCj0AAAAAAABcMwAAgtgAAMEbAADkSwABJAAAAU1dAAFNegABU54AAVpzAAGgtgACC2AAAlo2AAJupgADAAIABEcdgDCAAIAwgAGAMIACgDCAA4AwgASAMIAFgDCABgAAgtgAAQWwAAGIiAACC2AAAo44AAMREAADk+gABAAAAAAAAAAAAAAAAAAAAAcccgASZmAAAAAAAAvyiAAGyG4AB5U7AAwZNgAGAC0ABps1AAXOaAAEn0oAAmZmAATykAAGLYAAAMzNACY9cAAQKPYABAAA","cmbsy6":"ARkAEgAAAH8ALQAPABAAEQAHAAcAAAAWIa9YWABgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNQlNZIFYyLjIAAAAAAAAAAAAAAADyH8wAAAJTAAAfzAAACEIAAB/MAAAIUwAAH8wAAB/MAAAfzAAAH8wAAB/MAAAfzAAAH8wAACq7AAAIUwAACFMAAB9kAAAfZAAAH+4AAB/uAAAf7gAAH+4AAB/uAAAf7gAAHyEAAB+GAAAfmQAAH5kAACqZAAAqmQAAH5kAAB+ZAAAqIQAAKiEAAAi6QAAIugAAKiEAACq6AAAqugAAH2QAACohAAAqIQAAELoAABC6AAAqIQAAKroAACq6AAAfMAAAA3AAACowAAAVmQAAFZkAACm7AAApuwAAAboAAAEhAAALsAAAC7AAABUwAAAI1QAAHLAAABywAAAfsAAAH7AAABCwAAAioAEGEqAFBAqgCQQhoA0CCaAdAxigKQMOpxEDJ6ABAwygFQAWpzkFHaABARegAQQsoAEEI6A1AiCgDQMboCUCJKcBAyigAQIPoBkEDaA9ABGgKQIToCUAK6AlAhqgLQQUpyUCGaAhBBVwAAAVcAAAFXAAABVwAAAVcAAAELAAABCwAAAF3QAABd0AAAXdAAAF3QAACN0AAAjdAAAE3QAABN0AAALdAAAI3QAACN0AABDdAAAI3QAAAroAACUfAAAeoAAAJqAAAAe7MAAVcAAAFXAAAB/uAAAf7gAABrsAAAW7AAAFuwAAELsAAB+4AAAfuAAAH7gAAB+4AAAAAAAAAAAAAAAGl7MABtv1AAj+GAAKMUsACmSAAArv4AALZH0AC/4bAAw/ywAMl7AADPf7AA0IPQANWNUADawtAA3K4wAN3LAADn71AA6kZQAOpnsADv4VAA87iAAPTSsAD6ULAA+t4wAP3VUAD/6oABAxSAAQ3IsAEVVQABFkewARaQgAEXGTABHvGwASFCMAEjuIABJL0wASl60AE3LYABN3QAATyuAAFjFFABa9+wAaR6UAAAAAAAFA2wAGsF0ABxxzAAeOOwAIMzMACMBLAAjjkAAJKeMACjoIAAr6UAALHHMACzMwAAwAAAAMSfgAAAAA//6wXf//jjsAADMzAADASwAA440AASnjAAGOOwACEvgAAjoIAAMccAADHHMAAzMwAAQAAAAESfgADr8lAAAAAAAALyMAAIDwAACZmwAAzuUAAQmDAAENdQABLPAAAVZ4AAFl1QABrBgAAlo4AAJmZQAChWgAAwtjAASLYwAMIiOAMIAAgDCAAYAwgAKAMIADgDCABIAwgAWAMIAGAACZmwABMzUAAczQAAJmawADAAUAA5mgAAQzOwAEAAAAAAAAAAAAAAAAAAAABxxzABbI+wAAAAAADQDQAAZG/QAHwkAADdFlAAberQAIDCgABrbTAASXtQACqqsABVVVAAaXsAABVVUAH7u7ABWZmwAEAAA=","cmbsy7":"ARgAEgAAAH8ALQAPAA8AEQAHAAcAAAAW0ZKjnwBwAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNQlNZIFYyLjIAAAAAAAAAAAAAAADwH6oAAAJTAAAfqgAACEIAAB+qAAAIUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACrLAAAIUwAACFMAAB9kAAAfZAAAH9wAAB/cAAAf3AAAH9wAAB/cAAAf3AAAHyEAAB+GAAAfmAAAH5gAACqYAAAqmAAAH5gAAB+YAAAqIQAAKiEAAAjLQAAIywAAKiEAACrLAAAqywAAH2QAACohAAAqIQAAEMsAABDLAAAqIQAAKssAACrLAAAfMAAAA3AAACowAAAVmAAAFZgAACnLAAApywAAAcsAAAEhAAALwAAAC8AAABUwAAAI5QAAHMAAABzAAAAfwAAAH8AAABDAAAAisAEGErAFBAqwDQQgsAkCCbAdAxiwKQMOtxEDJ7ABAwywGQAWtzkFHbABARewAQQssAEEI7A1AiGwCQMbsCUCJLcBAyiwAQIPsBUEDbA9ABGwKQITsCUAK7AlAhqwMQQUtyUCGbAhBBVwAAAVcAAAFXAAABVwAAAVcAAAEMAAABDAAAAF7QAABe0AAAXtAAAF7QAACO0AAAjtAAAE7QAABO0AAALtAAAI7QAACO0AABDtAAAI7QAAAssAACUeAAAesAAAJrAAAAfLLAAVcAAAFXAAAB/cAAAf3AAABssAAAXLAAAFywAAEMsAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAF78AABjQCAAg1pQAJWJcACZwLAAo7vgAKe4kACw0CAAtAFQALnnsAC+GCAAvuiQAMWSAADKRVAAzBbgAM4ZcADXcbAA2D6QANoEcADeRgAA4ekAAONrUADpUSAA6hKwAOvR4ADsiAAA8HUgAPsPUAECilABAqRQAQLzsAED1yABCp1wAQ2ekAEPXuABEstQARTTcAEgSeABIKqQAScCkAFLYOABUvywAYrisAAAAAAAEqawAGkvAABxxyAAeOOQAH+lAACJCrAAjjkAAI9p4ACgFOAArRrgAK+lAACxxyAAv/CQAMAAAAAAAA//6S8P//jjn///pQAACQqwAA444AAPaeAAGOOQACAU4AAhL3AALRrgADHHIAA/8JAAQAAAAO1ZUAAAAAAAA/OwAAkXkAAJfZAADWiQABFYUAASXXAAE6vgABUzcAAWHFAAGoBwACReUAAlo3AAJ9RwADB1IABHMAAAtvV4AwgACAMIABgDCAAoAwgAOAMIAEgDCABYAwgAYAAJF5AAEi8gABtGsAAkXlAALXXgADaNcAA/pQAAQAAAAAAAAAAAAAAAAAAAAHHHIAFPcSAAAAAAALt44ABiR3AAeKDgAMCM4ABYHnAAgKawAG5dkABJJJAAJJJQAEkkkABaaXAAEkkgAbMzIAEoOpAAQAAA==","cmbsy8":"ARgAEgAAAH8ALAAPABAAEQAHAAcAAAAWecSZzACAAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNQlNZIFYyLjIAAAAAAAAAAAAAAADuH6oAAAJTAAAfqgAACEIAAB+qAAAIUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACnMAAAIUwAACFMAAB9kAAAfZAAAH90AAB/dAAAf3QAAH90AAB/dAAAf3QAAHyEAAB91AAAfmAAAH5gAACmYAAApmAAAH5gAAB+YAAApIQAAKSEAAAjLQAAIywAAKSEAACnLAAApywAAH2QAACkhAAApIQAAEMsAABDLAAApIQAAKcsAACnLAAAfMAAAA4AAACkwAAAVmAAAFZgAACjMAAAozAAAAcsAAAEhAAALwAAAC8AAABUwAAAI5gAAHMAAABzAAAAfwAAAH8AAABDAAAAisAEGE7AFBAqwDQQesAkCCbAdAxiwKQMOtxEDJrABAwywGQAWtzkFHbABARewAQQrsAEEI7A1AiGwCQMasCUCJLcBAyewAQIPsBUEDbA9ABGwKQISsCUAKrAlAhuwMQQUtyUCGbAhBBWAAAAVgAAAFYAAABWAAAAVgAAAEMAAABDAAAAF7gAABe4AAAXuAAAF7gAACO4AAAjuAAAE7gAABO4AAALuAAAI7gAACO4AABDuAAAI7gAAAssAACUfAAAgsAAAJbAAAAfMLAAVgAAAFYAAAB/dAAAf3QAABswAAAXMAAAFzAAAEMwAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAFccoABdKAAAefTgAIthAACPd8AAmmaAAJzNIAClg2AAqAUAAK45QACxCsAAsbQAALmVgAC954AAv6VgAMJUgADKuOAAyxPgAM26AADREYAA1I2gANZd4ADckeAA3XpAAN3+YADeT4AA4n2gAO0EQADz18AA8+nAAPRyIAD1zEAA+15AAP7kIAEAHAABBVXgAQ8fYAEPk4ABFsIAATmaQAFAUsABd7EAAAAAAAARR6AAZ1xAAHHHIAB446AAfPqAAIYUoACMOWAAjjkAAJyNIACoiMAAr6UAALHHIAC7RYAAwAAAAAAAD//nXE//+OOv//z6gAAGFKAADDlgAA444AAY46AAHI0gACEvYAAoiMAAMccAADHHIAA7RYAAQAAAAO64YAAAAAAABLTgAAi2IAAKkIAADcRAABG44AATsWAAFFGgABUMgAAV64AAGk+gACLYQAAlo2AAJ3MAADBEQABGC4AArpPoAwgACAMIABgDCAAoAwgAOAMIAEgDCABYAwgAYAAItiAAEWxAABoiYAAi2IAAK46gADREwAA8+uAAQAAAAAAAAAAAAAAAAAAAAHHHIAE5mkAAAAAAALJCwABoqUAAdRsAAL/FoABkZQAAaljAAFpYwABI44AAIAAAAEAAAABlVWAAEAAAAXzMwAEjM0AAQAAA==","cmbsy9":"ARYAEgAAAH8ALAAPAA8AEAAHAAcAAAAWZyQtUgCQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNQlNZIFYyLjIAAAAAAAAAAAAAAADsH6oAAAJTAAAfqgAACEIAAB+qAAAIUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACnLAAAIUwAACFMAAB9kAAAfZAAAH9wAAB/cAAAf3AAAH9wAAB/cAAAf3AAAHyEAAB91AAAfmAAAH5gAACmYAAApmAAAH5gAAB+YAAApIQAAKSEAAAjLAAAIywAAKSEAACnLAAApywAAH2QAACkhAAApIQAAEMsAABDLAAApIQAAKcsAACnLAAAfMAAAA4AAACkwAAAVmAAAFZgAACjLAAAoywAAAcsAAAEhAAALwAAAC8AAABUwAAAI5gAAHMAAABzAAAAfwAAAH8AAABDAAAAisAEGE7AFBAqwDQQesAkCCbAdAxiwKQMOtxEDJrABAwywGQAWtzkFHbABARewAQQrsAEEI7A1AiGwCQMZsCUCJLcBAyewAQIPsBUEDbA9ABGwKQISsCUAKrAlAhuwMQQUtyUCGrAhBBWAAAAVgAAAFYAAABWAAAAVgAAAEMAAABDAAAAF7QAABe0AAAXtAAAF7QAACO0AAAjtAAAE7QAABO0AAALtAAAI7QAACO0AABDtAAAI7QAAAssAACUeAAAgsAAAJbAAAAfLLAAVgAAAFYAAAB/cAAAf3AAABssAAAXLAAAFywAAEMsAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAFQlsABbk1AAdc5QAIaisACKoEAAlk0AAJd3AACf4VAAodpQAKhLUACqC5AAqpaQALNrAAC3cOAAuR+wALwDwADDXEAAxJ1QAMdSkADJ9AAAzVGwAM9esADVz3AA1ddAANbWQADW9VAA2shQAOU/wADrPrAA65ywAOyjwADuB7AA8qoAAPaXIAD3ZJAA/HEAAQTskAEFb8ABDUVQAS7uAAE09XABa+pQAAAAAAAQNrAAZbBwAHHHIAB445AAeudAAINFcACJMCAAjjkAAJkscACk+gAAr6UAALHHIAC2wXAAwAAAAAAAD//lsH//+OOf//rnQAADRXAACTAgAA444AAY45AAGSxwACEvcAAk+gAAMccgADbBcABAAAAA78lQAAAAAAAFSwAACGpAAAtmcAAOC5AAEgPgABS6AAAU0rAAFO4gABXFkAAaKbAAIaiwACWjUAAnJwAAMB5QAEUnyAMIAAgDCAAYAwgAKAMIADgDCABIAwgAWAMIAGAACGpAABDUcAAZPrAAIajgACoTIAAyfVAAOueQAEAAAAAAAAAAAAAAAAAAAABxxyABLu4AAAAAAAClkLAAaOJAAHMnwACtoAAAVt6wAHr5UABswHAASXtAABxxwAAtCeAAWhNAAA444AKn0nABAthAAEAAA=","cmbx10":"AUwAEgAAAH8ALQAPAAoABQBYAAoAAAAHGvIiVgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADqFLAAACewAAAjsAAAG7AAABiwAAAksAAAHbAAACOwAAAdsAAAI7AAAB2wAAATwBEKEsAAABLAAAAnwAAAJ8AAAAEwAAADOAAADcAAAA3AAAANcAAADcAAAA1gAAAgwAAACQYAAA/AAAAdMAAAIzAAAA1UAAAosAAAK7AAACPSAAABMAEAAsABFxDAAAAnxwAADeMAACfjAAAjwAAAAcABEgbpAAAG6QAADeAAACOFAAABGAAABDABFQEQAAAN6QAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAEwAAABOAAAAkgAACMhAAALSAAAC8ABGCPAAAAgsAFMHLAAAB2wAAAhsAE1F7AAABawASQmsAAAJLAAAAWwAVcOsAAAJbABKhSwAVIpsAAAJLAAAB+wATUZsAEeH7gAAB6wAUwSsAAAGrABLiKwAAAgsAUkLLAFJCCwASogsAkvFbAAAAHpAAAQwAAAAekAAA3AAAABwAAAAcABEQwwAUgSwAFCCTABQBLAAAAKMAAAA8ARAg04BVYSwAE6AcAAAAPIAAARwAEZAcAAACcwAToSMAE6DTABQhI4AUIROAAACDAAAAcwAAAGkAFKEjABSxEwBRkdMAUaETAAABE4BR8JMAAADTANFiowDAANwAAADcAAAA3AAAAAAAAAAAUccAAFmZgABZ9IAAYiIAAG+k4AByfQAAdB+wAHk+gACC2AAAhu7QAIsFgACPHDAAkzMAAJgtUACY42AAmk+AAJtggACjjgAAq7uAALEQ0ACz6QAAuT5QAMFr0ADERAAAyT5QAMzMgADOOKAA0WvQANSfAADczIAA3SeAAN6ToADhxtAA4nzgAOT6AADmZiAA5sEgAOd3MAD1VQABCqpQARd3IAEmZgABK2BQATBaoAAAAAAAJ9KAAGQf4ABxxyAAgAAAAIqqsACYmqAAoccgAKIiAACiijAApPpQAK+lAACxxyAAvBbQAMAAAAAAAA//5B/gAAxx0AAOOOAAGOOgACIiAAArjjAAMccAADHHIABAAAAAAAAAAAQW0AAHXCAACC2AABvpMAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//rjkP/59KAAAb6TAAILYP/++lD//30o//53eP/99KAAAILYAAEFsAAAAAAABiIgAAMREAACC2AABxxyABJmYAACC2A=","cmbx12":"AUsAEgAAAH8ALAAPAAoABQBYAAoAAAAHwtZOoADAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADmE7AAACawAAAisAAAGrAAABewAAAjsAAAHLAAACKwAAAcsAAAIrAAABywAAASwBEKEcAAABHAAAAmwAAAJsAAAAEwAAADOAAADcAAAA3AAAANgAAADcAAAA1gAAAfwAAACQYAAA7AAAAcMAAAIjAAAA1UAAAnsAAAKrAAACLSAAABMAEAAsABFw/AAAAmxwAADeMAACbjAAAiwAAAAcABEgbpAAAG6QAADeAAACJ1AAABGAAABDABFQEQAAAN6QAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAEwAAABOAAAAkgAACIhAAALSAAAC8ABGCLAAAAfsAFMG7AAABywAAAgsAE1FrAAABWwASQlsAAAI7AAAAWwAVcPsAAAJLABKhOwAVIosAAAI7AAAB6wATUYsAEeHrgAAB2wAUwRsAAAGbABLiGwAAAfsAUkK7AFJB+wASofsAkvFLAAAAHpAAAPwAAAAekAAA3AAAABwAAAAcABEQwwAUgRwAFCCTABQBHAAAAKMAAAA8ARAg04BVYRwAE6AcAAAAPIAAAQwAEZAcAAACYwAToRMAE6DTABQhE4AUIQOAAACDAAAAcwAAAGkAFKETABSxAwBRkcMAUaEDAAABA4BR8JMAAADTANFikwDAANwAAADcAAAA3AAAAAAAAAAAUAAAAFe0MABYAAAAYAAAAGtCcABwAAAAcZmwAHWhQACAAAAAg2hQAIgAAACMAAAAkAAAAJL2kACUvbAAmAAAAKAAAACoAAAArQmAALAAAAC1CYAAvQmAAMAAAADEvbAAyEvQAMl7UADMvbAA0AAAANbQsADYS9AA2XtQANy9sADdVXAA4AAAAOEvgADhe1AA4l7QAPAAAAEEvbABES+AASAAAAEkvbABKXtQAAAAAAAkvbAAYupwAHHHEACAAAAAiqqwAJe6EACgAAAAoccQAKKKMACk+lAAr6UAALHHEAC8FsAAwAAAAAAAD//i6nAADHHAAA448AAY45AAIAAAACuOMAAxxwAAMccQAEAAAAAAAAAABAAAAAczMAAIAAAAGjjwBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+wAA//ol7AABo48AAgAA//8AAP//gAD//oAA//4AAAAAgAAAAQAAAAAAAAAGAAAAAwAAAAIAAAAHHHEAEgAAAAIAAA==","cmbx5":"AU0AEgAAAH8ALwAPAAkABQBYAAoAAAAHqy2MaABQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAAD0FaAAACmgAAAnoAAAHKAAABqgAAAloAAAH6AAACegAAAfoAAAJ6AAAB+gAAAWsBEKFLAAABSwAAAqsAAAKrAAAAEwAAAENgAADrAAAA6wAAAOcAAADrAAAA5gAAAhsAAACgUAAA+wAAAfMAAAJzAAAA5UAAAroAAALaAAACfSAAABMAEAA7ABFxCwAAAptgAADuMAACnjAAAnsAAAAbABEgfoAAAH6AAADuAAACfHAAABFgAABTABFQEQAAAO6AAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAAEwAAABNgAAA0YAACchAAAMRgAADLABGCewAAAhoAFMHqAAAB+gAAAkoAE1GaAAABigASQooAAAJaAAAAagAVcRoAAAJqABKhWgAVIsoAAAJaAAACKgATUboAEeIqYAACCgAUwToAAAHaABLiOgAAAhoAUkLqAFJCGgASohoAkvF6AAAALoAAAQsAAAAugAAA6wAAABsAAAAbABEQ0wAUgTsAFCCjABQBOwAAALMAAABLARAg42BVYTsAE6AbAAAAS2AAASsAEZAbAAACkwAToTMAE6DjABQhM2AUISNgAACTAAAAgwAAAHgAFKEzABSxIwBRkfMAUaEjAAABI2BR8KMAAADjANFi4wDAAOsAAADrAAAA6wAAAAAAAAAAb6RgAHBW0AB5mQAAefQAAIRDoACMzAAAmOLQAJry0ACfSWAArYIAALE90AC30aAAvPlgAMIhMADDMtAAxPmgAMZlYADMcNAA1sBgAN9I0ADlrzAA6ZhgAOtfoADv/tAA+k5gAP/+0AEEQwABCIcwAQqpYAEOkqABFJ4AARpOYAEdJmABH0igASIg0AEjMdABJxsAASd2AAEpPTABK19gAT3cYAFO7TABVr/QAWT4oAF//jABhEJgAAAAAAAsFtAAbSQwAHHHMACAAAAAiqrQAJ2VAAChxzAAoopgAKT6YACvpQAAsccwALu7MAC8FtAAwAAAAAAAD//tJDAADHHQAA440AAY46AAK45gADHHMAA7uzAAQAAAAAAAAAAFJ9AACUegAApPoAAhPqAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/5Bbr/+Bx9AAIT6gACk+b//rYN//9bBv/+ERP//WwaAACk+gABSfMAAAAAAAhEOgAD3doAApPmAAcccwAYRCYAApPm","cmbx6":"AVAAEgAAAH8AMQAPAAoABQBYAAoAAAAHgEXAdABgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADyF6AAACqgAAAooAAAHaAAABugAAAmoAAAIKAAACigAAAgoAAAKKAAACCgAAAWsBEKFbAAABWwAAArsAAAK7AAAAEwAAAENwAADrAAAA6wAAAOcAAADrAAAA5gAAAisAAACgUAAA+wAAAgMAAAKDAAAA5UAAAsoAAALqAAACjSAAABMAEAA7ABFxCwAAAqtgAADuMAACrjAAAosAAAAbABEgfpAAAH6QAADuAAACjIAAABFwAABTABFQEQAAAO6QAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAAEwAAABNwAAA0cAACghAAAMRwAADLABGCiwAAAioAFMH6AAACCgAAAloAE1GqAAABmgASQpoAAAJqAAAAagAVcRoAAAJ6ABKhegAVItoAAAJqAAACOgATUcoAEeI6cAACGgAUwUoAAAHqABLiSgAAAioAUkMKAFJCKgASoioAkvGKAAAALpAAAQsAAAAukAAA6wAAABsAAAAbABEQ0wAUgUsAFCCjABQBSwAAALMAAABLARAg43BVYUsAE6AbAAAAS3AAATsAEZAbAAACowAToUMAE6DjABQhQ3AUISNwAACTAAAAgwAAAHgAFKFDABSxMwBRkgMAUaEzAAABM3BR8KMAAADjANFi8wDAAOsAAADrAAAA6wAAAAAAAAAAZL2AAGUq0ABt/AAAblcwAHfwsACBqNAAiyPQAI0PUACSMVAAnlcAAKJPgACn8LAArL1QALGKMAC1NwAAtc6AALYLMAC7I7AAuyPQAMS9UADJewAA0xSwANMzAADX8IAA3MywAOZmMADrI7AA76SwAPQlsAD1GFAA+T5QAP5W0AEE+gABB1jQAQhLgAEL+DABDHGAARCXUAEQ8oABEYoAARPKgAEkvTABLjiAATxxUAFKMNABYtewAWMUUAFnWLAAAAAAACqqsABrBdAAcccwAIAAAACKqtAAnHGwAKHHMACiilAApPpQAK+lAACxxzAAszMAALwW0ADAAAAAAAAP/+sF0AAMcdAADjjQABjjsAArjlAAMccAADHHMAAzMwAAQAAAAAAAAAAEzNAACKPQAAmZsAAf8NAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/5tCj/+MzLAAH/DQACZmX//szN//9mZf/+MzP//ZmbAACZmwABMzMAAAAAAAd/CwADmZgAAmZlAAcccwAWMUUAAmZl","cmbx7":"AU4AEgAAAH8AMAAPAAkABQBYAAoAAAAHZhck2ABwAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADwFrAAACmwAAAmsAAAHLAAABqwAAAlsAAAH7AAACawAAAfsAAAJrAAAB+wAAAVwBEKFMAAABTAAAAqwAAAKsAAAAEwAAAENwAADsAAAA7AAAAOcAAADsAAAA5gAAAhwAAACgUAABHAAAAfMAAAJjAAAA5UAAArsAAALrAAACbSAAABMAEAA8ABFxDAAAApxwAADuMAACnjAAAmwAAAAcABEgfoAAAH6AAADuAAACamAAABFwAABTABFQEQAAAO6AAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAA6QAAAOkAAADpAAAAEwAAABNwAAA0cAACYhAAAMRwAADMABGCbAAAAhsAFMHrAAAB+wAAAksAE1GbAAABiwASQosAAAJbAAAAawAVcPsAAAJ7ABKhawAVIssAAAJbAAACKwATUbsAEeIrcAACCwAUwTsAAAHbABLiOwAAAhsAUkL7AFJCGwASohsAkvF7AAAALoAAAQwAAAAugAAA7AAAABwAAAAcABEQ0wAUgTwAFCCjABQBPAAAALMAAABMARAg43BVYTwAE6AcAAAATHAAASwAEZAcAAACkwAToTMAE6DjABQhM3AUISNwAACTAAAAgwAAAHgAFKEzABSxIwBRkfMAUaEjAAABI3BR8KMAAADjANFi0wDAAOwAAADsAAAA7AAAAAAAAAAAXPOwAF0vkABlsFAAZgtQAG8i4AB6t5AAgVIAAIMjkACI1pAAk4EgAJelAACcmLAAoSRwAKWwUACqXJAAqviQAKs5sACux+AAt99wALnncADC/wAAxf5QAMoOkADPFeAA2C1wANw9sADg6gAA5ZZQAOWwUADqAZAA7mzgAPW9UAD3xXAA999wAPwjsAD8MLABAIIAAQCcAAEA3QABAvIgARLLIAEW2yABKaaQATcPcAFLYJABTgTgAVKxIAAAAAAAKaaQAGkvAABxxyAAgAAAAIqqsACbObAAoccgAKKKUACk+lAArRrgAK+lAACxxyAAvBbgAMAAAAAAAA//6S8AAAxx4AAOOOAAGOOQACuOUAAtGuAAMccgAEAAAAAAAAAABIvgAAgu4AAJF5AAHwJwBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+jDF//lCpQAB8CcAAkXl//7dDv//bof//kuV//26GwAAkXkAASLyAAAAAAAG8i4AA2jXAAJF5QAHHHIAFLYJAAJF5Q==","cmbx8":"AU0AEgAAAH8ALgAPAAoABQBYAAoAAAAHMsdAyQCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADuFbAAACiwAAAksAAAHLAAABmwAAAlsAAAHrAAACSwAAAesAAAJLAAAB6wAAAUwBEKE8AAABPAAAAowAAAKMAAAAEwAAADOAAADcAAAA3AAAANcAAADcAAAA1gAAAhwAAACQYAABDAAAAeMAAAJDAAAA1UAAApsAAALLAAACTSAAABMAEAAsABFw/AAAAoxwAADeMAACjjAAAkwAAAAcABEgbpAAAG6QAADeAAACSlAAABGAAABDABFQEQAAAN6QAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAAEwAAABOAAAAkgAACQhAAALSAAAC8ABGCTAAAAhsAFMHbAAAB6wAAAisAE1GLAAABewASQnsAAAJbAAAAWwAVcOsAAAJrABKhWwAVIqsAAAJbAAACCwATUasAEeILgAAB+wAUwTsAAAG7ABLiOwAAAhsAUkLbAFJCGwASohsAkvFrAAAAHpAAAPwAAAAekAAA3AAAABwAAAAcABEQwwAUgTwAFCCTABQBPAAAAKMAAAA8ARAg04BVYTwAE6AcAAAAPIAAASwAEZAcAAACgwAToTMAE6DTABQhM4AUIROAAACDAAAAcwAAAGgAFKEzABSxIwBRkeMAUaEjAAABI4BR8JMAAADTANFiswDAANwAAADcAAAA3AAAAAAAAAAAVxygAF93oABf0sAAaIjAAHWC4AB59OAAe7LgAIGZ4ACLYQAAj6VAAJQXIACYciAAnM0gAKGZ4ACi2GAAo0ogAKWDIAClg0AArjlAALbvYAC8FyAAv6VgAMTNQADNg0AA0RGAANXeQADaIqAA2qsAAN6UYADifaAA6lAAAOuOwADsFyAA8ACAAPBEoADz6cAA9HIgAPTNQAD2UCABBVXgARuOwAEotoABOZpAAT5nAAFDM8AAAAAAACjjgABnXEAAcccgAIAAAACKqsAAmiIAAKHHIACiikAApPpgAKiIwACvpQAAsccgALwWwADAAAAAAAAP/+dcQAAMccAADjjgABjjoAAoiMAAK45AADHHAAAxxyAAQAAAAAAAAAAEWwAAB9cAAAi2IAAeT6AGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/6jjb/+ZsCAAHk+gACLYT//uk+//90nv/+Xdz//dJ8AACLYgABFsIAAAAAAAaIjAADREYAAi2EAAcccgATmaQAAi2E","cmbx9":"AUwAEgAAAH8ALgAPAAkABQBYAAoAAAAHdAyJOgCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNQlgAAAAAAAAAAAAAAAAAAAAAAADsFbAAACiwAAAksAAAHLAAABmwAAAlsAAAHrAAACSwAAAesAAAJLAAAB6wAAAUwBEKE8AAABPAAAAowAAAKMAAAAEwAAADNwAADcAAAA3AAAANcAAADcAAAA1gAAAhwAAACQYAAA/AAAAeMAAAJDAAAA1UAAApsAAALLAAACTSAAABMAEAAsABFxDAAAAoxwAADeMAACjjAAAkwAAAAcABEgboAAAG6AAADeAAACSVAAABFwAABDABFQEQAAAN6AAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAEwAAABNwAAAkcAACQhAAALRwAAC8ABGCTAAAAhsAFMHbAAAB6wAAAisAE1GLAAABewASQnsAAAJbAAAAWwAVcOsAAAJrABKhWwAVIqsAAAJbAAACCwATUasAEeILcAAB+wAUwTsAAAG7ABLiOwAAAhsAUkLbAFJCGwASohsAkvFrAAAAHoAAAQwAAAAegAAA3AAAABwAAAAcABEQwwAUgTwAFCCTABQBPAAAAKMAAAA8ARAg03BVYTwAE6AcAAAAPHAAASwAEZAcAAACgwAToTMAE6DTABQhM3AUIRNwAACDAAAAcwAAAGgAFKEzABSxIwBRkeMAUaEjAAABI3BR8JMAAADTANFiswDAANwAAADcAAAA3AAAAAAAAAAAVCWwAFw04ABcj+AAZPoAAHJAUAB1zlAAd31AAHz1IACGorAAiwBQAI8M4ACTQeAAl3cAAJxdIACd5+AAnhpAAJ/hIACf4UAAqEtQALC1kAC19pAAuR+wAL5gwADGyuAAyfQAAM7aIADSuSAA08BAANdEUADayFAA4wAgAOONcADklJAA6BiwAOicQADrnLAA7KPAAOz+wADuD8AA/HEAARIrcAEfIMABLu4AATPUIAE4ukAAAAAAAChL4ABlsHAAcccgAIAAAACKqrAAmUiwAKHHIACiikAApPoAAKT6UACvpQAAsccgALwWwADAAAAAAAAP/+WwcAAMccAADjjgABjjkAAk+gAAK45AADHHIABAAAAAAAAAAAQ1IAAHksAACGpAABz6UAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//q9pf/5zM4AAc+lAAIai//+8rv//3lc//5sF//95XUAAIakAAENRQAAAAAABk+gAAMn0AACGosABxxyABLu4AACGos=","cmbxsl10":"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","cmbxti10":"AX8AEgAAAH8ANgAQAAoAOgBNAAkAAAAHRg1DlgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNQlhUSQAAAAAAAAAAAAAAAAAAAADqF7CkAC2wAAApsEgAILAAAB2wwAAssNQAIrCQACmweAAisBgAKbB4ACKwZAAb2OUIFth8ABjYfAAw2HwAMdh8AAIwUAAEOBAAENAAABDQRAAQgDwAENBsABBgcAAu0AAADQYAABXYXAAiMEAAIjBAABBUVAAvsJAAM7CQACniSAABMAEPBdCNFxPQNAAt1ygAJtAAAC3zoAAp0EQAAtCpEgn5yAAJ+QwAEPC4ACl1DAACGAAABzAJFQIQAAAQ+cgAEKCsABCgrAAQoKwAEKCsABCorAAQoKwAEKCsABCorAAQoKwAEKCsAAIwIAACOCAABUgcACkhKAAQSAAAENCVGCnQTAAlsAEwIbBkACKwtAAnsEkrHLCQABqwpRorsCwALLDUAAiwxAARsLwAKrC1IBewAUEysNQALLDUACOwSSsesGUqI7hIACSwBTAUsIQAH7ClJCiw1AAlsNkaNLDZKiWwxSAlsOElGbC0AAP53AAT0NAAA/loABDQJAAC0KgAAtCpERAwUAAN0DFFDTAVRRDQfRkNMEFFBtjlAA04dAAQ0FAAAsCIAALIzAAN0IAAAdB9GS0wUAAUMFFMEDAxRRA4MUUNOHQADDCBRQowOAAEkFgAEjBQAA0wgAAdMIEZDjCcAA84dAALMLAAEDBhFjUwYAAQ0JQAENCUABDQmAAAAAAAAAS/IwAFsFgABbKgAAYo8wAGLYAABmZoAAahjQAHi/AAB5LCAAfKgwAH2U4ACAbSAAiD9gAI+AYACPySAAl1KwAJxNAACe3GAAntyAAKZmAACqPWAArKhQALKhIAC0MeAAtXlQALoq0ADBbAAAwbRgAMSMoADJhuAAy81gAM6BMADREKAA05/gANrgsADcBCAA3ZSAAN5YMADgI+AA4X3QAOKzMADlHjAA5TBgAOVnAADxxoAA8unQAQXUIAELcqABDzdgARKg4AEj+rABKPUAAS6lYAAAAAAAJbBgAGQf4ABxxyAAgAAAAIqqsACYLWAAmnPQAKHHIACiijAApPpQAK+lAACxeTAAsccgALwW0ADAAAAAAAAP/+Qf4AAMcdAADjjgABjjoAAac9AAK44wADHHAAAxxyAAQAAAAAAAAAAGjTAABq8wAAh2UAALziAADV6AAA5q4AAQyFAAESNgABEsgAARflAAEs8gABQf4AAUUwAAFOggABUsgAAVwrAAFdTQABczMAAXkrAAGCGAABg2sAAYrQAAGOygABkeAAAZZVAAGYeAABp0IAAavOAAGuFgABuXUAAbziAAHHHQABzWAAAdJrAAHTogAB1DMAAdXoAAHV6gACA2oAAg7LAAIQggACEjYAAhtOAAI45QACRfoAAksYAAJR7QACaigAAoJIAAKHZQACrN4AAq79AALA2wAC+uIAAwAAAAMrIAADfAUAaQAMAGYACwBsAA0AJ4AAAD+AAAAhgAAAKYAAgF2AAABpAA4AbAAPACeAAAA/gAAAIYAAACmAAIBdgAAAbIABgEyAAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+gGyABABvgAUAZYAFAHWABQBygAUAYYAFAEGABgBPgAcAQ4AHAEeAB4BRgAcAeYAFAGWABQBvgAUAcoAFAGGABQB1gAWAQYAFAFiABwBXgAcAQYAHAFaAB4BZgAcAboAHAGyABwBygAcAdYAHAG2ABwB0gAcAaYAHAEOABwBPgAcAR4AHAGiABwBigAcAVYAHAGuABwB2gAcAd4AHAFGABwBUgAUAWYAFAFaABgBXgAYAZYAIAGGACABvgAgAZIAIAGOACABngAiAcYAIgCeABgABtOj/+0Dd//nadgAB4moAAPE1//6WMP/+HZb//4dl//8OywAEAAAABqGNAALTngAB4moABxxyABLqVgAB4mo=","cmcsc10":"AUUAEgAAAH8AMQAQAAsABgBJAAsAAAAHjC34FACgAAAcVGVYIHRleHQgd2l0aG91dCBmLWxpZ2F0dXJlcwAAAAAAAAAAAAAABUNNQ1NDAAAAAAAAAAAAAAAAAAAAAADqGsAAACvAAAApwAAAIMAAABzAAAAkwAAAIsAAACnAAAAiwAAAKcAAACLAAAAN2AAADdgAAALQAAACSQAAC0kAAAFQAAAFUAAADdAAAA3QAAANkAAADdAAAA1wAAAk0AAACAcAACxQAAAdUAAAJVAAABZzAAAtwAAAL8AAACnjAAACMAEAAtABCA3QAAAr2AAADfQAACv0AAAp0AAAAtABAwb6AAAG+gAADfAAACmFAAACGQAAAzABBgIQAAAN+gAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAIwAAACOQAAKWIAACkhAAApYgAAC9ABCSnQAAAkwAEgIcAAACLAAAAmwAEWHsAAABvAAQwqwAAAJMAAAATAATIPwAAAKMABDhrAASouwAAAJMAAACnAARYewAEKKckAACPAASATwAAAIsABCiTAAAAkwAkMMMAJDCTAAQ4kwBEKGcAAAAL6AAAN0AAAAvoAAA3QAAACsAAAAtABAhRQAT4QUAAAEVAAABVQATkOUAAADFABNBhQAAAUUAAAAVABSAVQAAAXUAE1ClABQx9QAAAUUAAAFlABOQ5QATMWVgAAElABPgdQAAARUAEzFFAAABRQBTQnUAU0FFABNRRQDTMJUAAADTAVBzAwFAAN0AAADbAAAA2wAAAAAAAAAATV5gAFHG4ABgtdAAZ9IwAGyoUABvpLAAdTDQAH6ToACAkYAAg2mwAIYLIACJGiAAjYKAAI7KYACRELAAlHrQAJdS4ACaKyAAnHFgAJ0DUACf24AAorOgAKKzsACkH7AAq2BQAK7ugAC2ZgAAuk8wALxNMAC93WAAvyVgAMFroADFVOAAyT4gAMzMUADQWoAA0w6gANRD0ADV5tAA19IAANgtAADZ9CAA5xvgAOphoAD5mQAA/ScwARd20AEbBQAAAAAAABsFsABd64AAbjjgAIAAAACDjjAAigJQAJCs4ACZmWAAoOOgAKT6UACq+NAAru7gALHHIAC7YLAAwAAAAAAAD//d64AACgJQAAxx0AAOOOAAGZlgACT6UAArjjAAMccAADHHIABAAAAAAAAAAALYMAADu7AABR6wAAa4UAAHd4AGyAAIBMgAGAYABcACcAIgA/gAKAIYACgC0Ae4AtAHyAYAAOgGAADwBhgAOAQYADAGGABABBgAQAb4AFAE+ABQBjgAUAQ4AFAGeABQBHgAUAcYAFgFGABQB4gAUAWIAFAHeABQBXgAUAYYAFAEGABQB2gAUAVoAFAHmABYBZgAUAY4AFAEOABQBvgAUAT4AFAGeABQBHgAUAdYAFAFWABQBxgAUAUYAFAFSAAwB0gAMAWYADAHmAAwBWgAQAdoAEAFeABIB3gASASYAGgGGABwBhgAgAb4AJAGOACQBngAmAcYAJAHiACQB3gAkAYYAJAHaACYB5gAkAY4AJAG+ACQBngAkAdYAJAHGACQAngAcAdIAHAHmABwB2gAiAd4AIgGmACv/645L/+jM2AAHd3f/+mZr//iIj//+IiAAAd3j//u7u//6T6v//pPoAAFsGAAAAAAAGC10AAszLAAHd3QAG444AEbBQAAHd3Q==","cmcsc8":"AUYAEgAAAH8AMgAQAAsABgBJAAsAAAAHoWaF5QCAAAAcVGVYIHRleHQgd2l0aG91dCBmLWxpZ2F0dXJlcwAAAAAAAAAAAAAACkNNQ1NDIFYyLjIAAAAAAAAAAAAAAADuGsAAACvAAAApwAAAIMAAAB3AAAAlwAAAIsAAACnAAAAiwAAAKcAAACLAAAAO2AAADtgAAALQAAACSQAAC0kAAAFQAAAFUAAADtAAAA7QAAAOkAAADtAAAA6AAAAl0AAACAcAACxQAAAcUAAAJFAAABdiAAAtwAAAL8AAACniAAACMAEAAtABCA7QAAAr2AAADvMAACvzAAAp0AAAAtABAwb6AAAG+gAADvAAACmVAAACGQAAAzABBgIQAAAO+gAADqAAAA6gAAAOoAAADqAAAA6gAAAOoAAADqAAAA6gAAAOoAAADqAAAAIwAAACOQAAKXQAACkhAAApdAAAC9ABCSnQAAAlwAEgIcAAACLAAAAnwAEWH8AAABvAAQwqwAAAJcAAAATAATIPwAAAKMABDhrAASouwAAAJcAAACnAARYfwAEKKckAACPAASAUwAAAIsABCiXAAAAlwAkMMcAJDCXAAQ4lwBEKGcAAAAL6AAAO0AAAAvoAAA7QAAACsAAAAtABAhNQAT4QUAAAEVAAABVQATkNUAAADFABNBhQAAATUAAAAVABSAVQAAAWUAE1ClABQx5QAAATUAAAF1ABOQ1QATMXVgAAElABPgdQAAARUAEzE1AAABNQBTQmUAU0E1ABNRNQDTMJUAAADjAVBzAwFAAO0AAADrAAAA6wAAAAAAAAAAUT7AAFRxwABkccAAa7vAAHGDIAB0ccAAeqsAAIRxwACGOUAAiJ+gAIxxwACOZsAAlC3gAJRxwACYFsAAmfUAAJ1VwACfvCAAoiKAAKRxwAClg0AAp+mgAKjkAACqF0AAtHHAALgWwADAFsAAwmbgAMRxwADEzUAAyBbAAMu7wADQFsAA1HHAANgWwADZg2AA27vAANvpwADgFsAA47vAAORxwADmREAA9HHAAPVWAAEIFsABC7vAASgWwAEo44ABK7vAAAAAAAAcccAAYMPAAG444ACAAAAAgZmgAI4LYACQKQAAktggAKBxwACk+mAAq67AAK7u4ACxxyAAu2CgAMAAAAAAAA//4MPAAAxxwAAOOOAAECkAACAAAAAhxyAAK45AADHHAAAxxyAAQAAAAAAAAAAC46AABAAAAAUzQAAHM0AACAAABsgACATIABgGAAXAAnACIAP4ACgCGAAoAtAHuALQB8gGAADoBgAA8AYYADgEGAAwBhgAQAQYAEAG+ABQBPgAUAY4AFAEOABQBngAUAR4AFAHGABYBRgAUAeIAFAFiABQB3gAUAV4AFAGGABQBBgAUAdoAFAFaABQB5gAWAWYAFAGOABQBDgAUAb4AFAE+ABQBngAUAR4AFAHWABQBVgAUAcYAFAFGABQBUgAMAdIADAFmAAwB5gAMAVoAEAHaABABXgASAd4AEgEmABoBhgAcAYYAIAG+ACQBjgAkAZ4AJgHGACQB4gAkAd4AJAGGACQB2gAmAeYAJAGOACQBvgAkAZ4AJAHWACQBxgAkAJ4AHAHSABwB5gAcAdoAIgHeACIBpgAr/+rjk//n+lAACAAD//oAA//4AAP//gAAAAIAA//7qqv/+jjj//6OOAABccgAAAAAABkccAAMAAAACAAAABuOOABKOOAACAAA=","cmcsc9":"AUUAEgAAAH8AMgAQAAoABgBJAAsAAAAH0AkarQCQAAAcVGVYIHRleHQgd2l0aG91dCBmLWxpZ2F0dXJlcwAAAAAAAAAAAAAACkNNQ1NDIFYyLjIAAAAAAAAAAAAAAADsGsAAACvAAAAowAAAH8AAABzAAAAkwAAAIsAAACjAAAAiwAAAKMAAACLAAAAN2AAADdgAAALQAAACSAAACkgAAAFQAAAGUAAADdAAAA3QAAANkAAADdAAAA1wAAAk0AAACAcAACxQAAAeUAAAJlAAABdyAAAtwAAAL8AAACjiAAACMAEAAtABCA3QAAAr2AAADfQAACv0AAAo0AAAAtABAwX5AAAF+QAADfAAACiFAAACGAAAAzABBgIQAAAN+QAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAA2gAAANoAAADaAAAAIwAAACOAAAKGMAACghAAAoYwAACtABCSjQAAAkwAEgIcAAACLAAAAlwAEWHcAAABvAAQwqwAAAJMAAAATAATIOwAAAJ8ABDhrAASouwAAAJMAAACjAARYdwAEKKMgAACPAASASwAAAIsABCiTAAAAkwAkMMcAJDCTAAQ4kwBEKGcAAAAL5AAAN0AAAAvkAAA3QAAACsAAAAtABAhRQAT4QUAAAEVAAABVQATkPUAAADFABNBhQAAAUUAAAAVABSAZQAAAWUAE1C1ABQyBQAAAUUAAAF1ABOQ9QATMXVgAAE1ABPgdQAAARUAEzFFAAABRQBTQpUAU0FFABNRRQDTMJUAAADTAVBzAwFAAN0AAADbAAAA2wAAAAAAAAAAT6TgAFCXkABfmrAAZt+QAG6dwABvU8AAeBjgAH2g4ACDjcAAhSJwAIY9kACL+AAAjKQAAJBGcACRsnAAl2zgAJp3kACbpyAAnSdQAJ/XIACi4cAApZGQAKXscACnRFAAqqpAAK5MsAC1zkAAua1QAL1PwAC/hgAAwPJAAMI1wADE0VAAyLBwAMxS4ADP9VAA09RwANZvwADXduAA17OQANkfkADZhMAA5rawAPAxwAD5XEAA/P6wARdicAEZSAABGwTgAAAAAAAbp5AAX06QAG444ACAAAAAhqMgAI0MkACSllAAmhKwAKDjkACk+lAAq0mwAK7u4ACxxyAAu2CwAMAAAAAAAA//306QAAxxwAANDJAADjjgABoSsAAjjkAAK45AADHHIABAAAAAAAAAAALdQAADwMAABSfAAAbBUAAHgZAGyAAIBMgAGAYABcACcAIgA/gAKAIYACgC0Ae4AtAHyAYAAOgGAADwBhgAOAQYADAGGABABBgAQAb4AFAE+ABQBjgAUAQ4AFAGeABQBHgAUAcYAFgFGABQB4gAUAWIAFAHeABQBXgAUAYYAFAEGABQB2gAUAVoAFAHmABYBZgAUAY4AFAEOABQBvgAUAT4AFAGeABQBHgAUAdYAFAFWABQBxgAUAUYAFAFSAAwB0gAMAWYADAHmAAwBWgAQAdoAEAFeABIB3gASASYAGgGGABwBhgAgAb4AJAGOACQBngAmAcYAJAHiACQB3gAkAYYAJAHaACYB5gAkAY4AJAG+ACQBngAkAdYAJAHGACQAngAcAdIAHAHmABwB2gAiAd4AIgGmACv/69of/+kRHAAHgZP/+l7X//h+c//+H5wAAeBn//u0L//6RZP//pFkAAFunAAAAAAAF+asAAtCVAAHgZAAG444AEZSAAAHgZA==","cmdunh10":"AUQAEgAAAH8AJAAQAAoABQBYAAoAAAAHS/FgeQCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNRFVOSAAAAAAAAAAAAAAAAAAAAADqEsAAAB7AAAAcwAAAFsAAABTAAAAawAAAGMAAABzAAAAYwAAAHMAAABjAAAAQ0BEKD9AAAA/QAAAe0AAAHtAAAAEwAAACNwAACqAAAAqgAAAKgAAACqAAAApwAAAa0AAACAYAAAvQAAAYMAAAHDAAAApFAAAfwAAAIsAAABziAAABMAEAAdABFwrQAAAe2AAACvMAAB7zAAAc0AAAAdABEgX5AAAF+QAACvAAABxUAAABFwAAAzABFQEQAAAK+QAACrAAAAqwAAAKsAAACrAAAAqwAAAKsAAACrAAAAqwAAAKsAAACrAAAAEwAAABNwAAAZcAABwhAAAJlwAACdABGBzQAAAawAFMF8AAABjAAAAbwAE1FcAAABPAASQdwAAAGsAAAATAAVcMwAAAHMABKhLAAVIgwAAAGsAAABzAATUVwAEeHMcAABnAAUwPwAAAGMABLhrAAAAawAUkI8AFJBrAASoawAkvEcAAAAH5AAAK0AAAAfkAAAqgAAABcAAAAdABEQowAUgP0AFCCDABQA/QAAAIMAAAAtARAgo3BVYP0AE6AXAAAAJ3AAAO0AEZAdAAAB4wAToPMAE6CjABQg83AUINNwAABjAAAAcwAAAFYAFKDzABSw4wBRkYMAUaDjAAAA43BR8IMAAACjANFiEwDAAKoAAACnAAAApwAAAAAAAAAARxyAAE45AABVVWAAXHHQAGOOUABkRGAAZPpgAHHHMAB447AAgAAgAIAAMACDjlAAhxyAAIccoACOOQAAlVWAAJxx4ACgACAApxygAKqq0ACuOQAAsccwALVVgAC447AAvHHgAMAAIADDjmAAxxygAMjjsADVVYAA5xygAOqq0AEAADABA45gAQccoAAAAAAAGwWwAF3rgABuOOAAhxyAAJVVYACddeAArGIgAMDjoADHHIAA3HHQAOwW0AD2C2AA+OOgAQJ9MAEHHGAAAAAP/93rgAAMcdAADjjQABVVYAAY46AAK44wADHHIAB446AAhxxgAAAAAAADjjAABmZgAAccgAAT6VAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/7jjj/+uONAAE+lQABxx3//xxy//+OOP/+qqr//jjjAABxyAAA444AAAAAAAVVVgACqqsAAccdAAbjjgAQAAMAAccd","cmex10":"APgAEgAAAH8AIAAGAA4AAwAAAAAAHAAN+rF1EgCgAAASVGVYIG1hdGggZXh0ZW5zaW9uAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNRVgAAAAAAAAAAAAAAAAAAAAAAADqBBcCEAQXAhECFwJoAhcCaQYXAmoGFwJrBhcCbAYXAm0KFwJuChcCbwYXAkQGFwJFAQMDAAgDAwEJFwIuCRcCLwsZAhILGQITDxwCIA8cAiEHHAIiBxwCIwocAiQKHAIlChwCJgocAicQHAIoEBwCKRAcAioQHAIrGhwCLBocAi0SHQIwEh0CMQodAjIKHQIzDR0CNA0dAjUNHQI2DR0CNxMdAjgTHQI5Ex0AABMdAAAdHQAAHR0AABQZAh4UGQIfFhkDAhYZAwMOGQMEDhkDBQ4ZAwYOGQMHDgMDCA4DAwkXBAMKFwQDCxcEAwwXBAMNFwoDDhcKAw8XAQMQDgMDERYZAxIWGQMTFgMDFBYDAxUMGQIcDBkCHRUFAkccKAAABQYGSQgLCAAcBQJLHygAABwFAk0fKAAAHAUCTx8oAAAbBQJYGAUCWQUGBloVBQJbFQUCXBUFAl0VBQJeFQUCXx4oAAAdKAAACAsIABwoAAAcKAAAHCgAABwoAAAcKAAAGAUCYR0oAAAIQAJjGVACZB5QAAAIQAJmGVACZx5QAAAGGQIUBhkCFQcZAhYHGQIXBxkCGAcZAhkOGQIaDhkCGxkXAnEZGQJyGRwCcxkdAnQbCgMWGwMAABsSAAARAwMXDgMDGA4DAxkDMAAAAzAAAAMwAAADMAAAEQMDGhEDAxsAAAAAAAVVVgAGqq0ABzM4AAdVWAAHjjoAB447AAhxygAI45AACT6VAAlVWAAJjjsACcceAAo45gAKqq0AC8cgAAwAAgAMccoADKquAAzjkwAM+lMADVVYAA4AAwAOOOYADxx1ABAAAwAQtg4AEOOSABHHIAAUccsAFxx2ABgtiAAAAAAAAKPWAAGZmwAB64MAC446AAwAAAAAAAAABMzQAAj1ygAJmaAADmZwABAADgARxygAEo9qABgADQAcKQoAHMzgACOOUgAlwqoAL1xKAAAAAAADHHMABxxzAAAADAAAAA0wAEBCMQBBQzIANDYzADU3AAA0NgAANTcyAAA2MwAANzg8Oj45PTs+OAA6PjkAOz4AAAA/AAAAdwAAAD54AHk/OAA7PjkAOj4AAABCAAAAQ3YAdHV+AH93eAAAPwAAeT9+AAB3AAB/dwAAAAAAAAAAAAAAAAAAAAAABuOOABAAAwAAAAAAAKPWAAHHHQACqqsAAzMzAAmZmgABmZo=","cmex7":"APsAEgAAAH8AIwAGAA4AAwAAAAAAHAANFyOwrQBwAAASVGVYIG1hdGggZXh0ZW5zaW9uAAAAAAAAAAAAAAAAAAAAAAAAAAAACUNNRVggVjIuMgAAAAAAAAAAAAAAAADwBBcCEAQXAhEDFwJoAxcCaQYXAmoGFwJrBhcCbAYXAm0KFwJuChcCbwYXAkQGFwJFAQMDAAkDAwEIFwIuCBcCLwsZAhILGQITDxwCIA8cAiEHHAIiBxwCIwocAiQKHAIlChwCJgocAicQHAIoEBwCKRAcAioQHAIrGxwCLBscAi0THQIwEx0CMQodAjIKHQIzDR0CNA0dAjUNHQI2DR0CNxQdAjgUHQI5FB0AABQdAAAfHQAAHx0AABIZAh4SGQIfFhkDAhYZAwMOGQMEDhkDBQ4ZAwYOGQMHDgMDCA4DAwkXBAMKFwQDCxcEAwwXBAMNFwoDDhcKAw8XAQMQDgMDERYZAxIWGQMTFgMDFBYDAxUMGQIcDBkCHRUFAkceKAAABQYGSQkLCAAeBQJLIigAAB4FAk0iKAAAHgUCTyIoAAAdBQJYGAUCWQUGBloVBQJbFQUCXBUFAl0VBQJeFQUCXyEoAAAgKAAACQsIAB4oAAAeKAAAHigAAB4oAAAeKAAAGAUCYSAoAAAJQAJjGlACZCFQAAAJQAJmGlACZyFQAAAGGQIUBhkCFQcZAhYHGQIXBxkCGAcZAhkOGQIaDhkCGxkXAnEZGQJyGRwCcxkdAnQcCgMWHAMAABwSAAARAwMXDgMDGA4DAxkCMAAAAjAAAAIwAAACMAAAEQMDGhEDAxsAAAAAAAZpqQAHtUIAB+OSAAighwAI34AACN+CAAnbcgAKPCcACllpAArXYgALFl4AC1VZAAvTUgAMUUkADYw3AA3LMAAOSSkADl5JAA6IJwAOxyUAD0UZABACDgAQQQkAETz5ABH35QASOOkAEoBuABLz1QATNNkAFDDJABaikAAXJJkAGhhpABtGuwAAAAAAAMbyAAGZmwACVNcAC445AAwAAAAAAAAABMzQAAjSrgAJmaAADmZwABAADgARxykAEmxOABgADgAcBe4AHMzgACOOUgAln44ALzkuAAAAAAADcckAB9+AAAAADAAAAA0wAEBCMQBBQzIANDYzADU3AAA0NgAANTcyAAA2MwAANzg8Oj45PTs+OAA6PjkAOz4AAAA/AAAAdwAAAD54AHk/OAA7PjkAOj4AAABCAAAAQ3YAdHV+AH93eAAAPwAAeT9+AAB3AAB/dwAAAAAAAAAAAAAAAAAAAAAABuOOABK68gAAAAAAAMbyAAHHGwACqqsAAzMyAAnHGwACSSU=","cmex8":"APcAEgAAAH8AHwAGAA4AAwAAAAAAHAANAQFhNgCAAAASVGVYIG1hdGggZXh0ZW5zaW9uAAAAAAAAAAAAAAAAAAAAAAAAAAAACUNNRVggVjIuMgAAAAAAAAAAAAAAAADuBBcCEAQXAhECFwJoAhcCaQUXAmoFFwJrBRcCbAUXAm0JFwJuCRcCbwUXAkQFFwJFAQMDAAcDAwEIFwIuCBcCLwoZAhIKGQITDhwCIA4cAiEGHAIiBhwCIwkcAiQJHAIlCRwCJgkcAicPHAIoDxwCKQ8cAioPHAIrGRwCLBkcAi0RHQIwER0CMQkdAjIJHQIzDB0CNAwdAjUMHQI2DB0CNxIdAjgSHQI5Eh0AABIdAAAcHQAAHB0AABMZAh4TGQIfFRkDAhUZAwMNGQMEDRkDBQ0ZAwYNGQMHDQMDCA0DAwkWBAMKFgQDCxYEAwwWBAMNFgoDDhYKAw8WAQMQDQMDERUZAxIVGQMTFQMDFBUDAxULGQIcCxkCHRQFAkcbKAAABQYGSQcLCAAbBQJLHigAABsFAk0eKAAAGwUCTx4oAAAaBQJYFwUCWQUGBloUBQJbFAUCXBQFAl0UBQJeFAUCXx0oAAAcKAAABwsIABsoAAAbKAAAGygAABsoAAAbKAAAFwUCYRwoAAAHQAJjGFACZB1QAAAHQAJmGFACZx1QAAAFGQIUBRkCFQYZAhYGGQIXBhkCGAYZAhkNGQIaDRkCGxgXAnEYGQJyGBwCcxgdAnQaCgMWGgMAABoSAAAQAwMXDQMDGA0DAxkDMAAAAzAAAAMwAAADMAAAEAMDGhADAxsAAAAAAAWqsAAHFVwABzM4AAfKsgAIByQACPjsAAlx0AAJ0oYACeq0AAonJgAKY5gACtx8AAtVYAAMg5oADMAMAA048AANdWIADbHUAA3KAgAOKrgADuAOAA8cgAAQDkgAEQAQABHBfAAR8dgAEuOgABW4+AAYjlAAGbB0AAAAAAAAuFIAAZmaAAIo9gALjjoADAAAAAAAAAAEzNAACOFOAAmZoAAOZnAAEAAOABHHKAASeu4AGAAMABwUjgAczOAAI45SACWuLgAvR84AAAAAAANOPAAHjkAAAAAMAAAADTAAQEIxAEFDMgA0NjMANTcAADQ2AAA1NzIAADYzAAA3ODw6Pjk9Oz44ADo+OQA7PgAAAD8AAAB3AAAAPngAeT84ADs+OQA6PgAAAEIAAABDdgB0dX4Af3d4AAA/AAB5P34AAHcAAH93AAAAAAAAAAAAAAAAAAAAAAAG444AEQAQAAAAAAAAuFIAAcccAAKqqgADMzQACbjkAAIAAA==","cmex9":"APkAEgAAAH8AIQAGAA4AAwAAAAAAHAANesDTaQCQAAASVGVYIG1hdGggZXh0ZW5zaW9uAAAAAAAAAAAAAAAAAAAAAAAAAAAACUNNRVggVjIuMgAAAAAAAAAAAAAAAADsBBcCEAQXAhECFwJoAhcCaQUXAmoFFwJrBRcCbAUXAm0LFwJuCxcCbwYXAkQGFwJFAQMDAAgDAwEJFwIuCRcCLwwZAhIMGQITEBwCIBAcAiEHHAIiBxwCIwocAiQKHAIlChwCJgocAicRHAIoERwCKREcAioRHAIrGxwCLBscAi0THQIwEx0CMQodAjIKHQIzDh0CNA4dAjUOHQI2Dh0CNxQdAjgUHQI5FB0AABQdAAAeHQAAHh0AABUZAh4VGQIfFxkDAhcZAwMPGQMEDxkDBQ8ZAwYPGQMHDwMDCA8DAwkYBAMKGAQDCxgEAwwYBAMNGAoDDhgKAw8YAQMQDwMDERcZAxIXGQMTFwMDFBcDAxUNGQIcDRkCHRYFAkcdKAAABQYGSQgLCAAdBQJLICgAAB0FAk0gKAAAHQUCTyAoAAAcBQJYGQUCWQUGBloWBQJbFgUCXBYFAl0WBQJeFgUCXx8oAAAeKAAACAsIAB0oAAAdKAAAHSgAAB0oAAAdKAAAGQUCYR4oAAAIQAJjGlACZB9QAAAIQAJmGlACZx9QAAAFGQIUBRkCFQcZAhYHGQIXBxkCGAcZAhkPGQIaDxkCGxoXAnEaGQJyGhwCcxodAnQcCgMWHAMAABwSAAASAwMXDwMDGA8DAxkDMAAAAzAAAAMwAAADMAAAEgMDGhIDAxsAAAAAAAV7QAAG2hAABzM5AAeJdwAHw/AAB8PyAAit0AAJIsAACYBMAAmXsAAJl7IACdInAAoMoAAKgZAACvaAAAwa1wAMVVIADMpAAA0EtwANPzAADVaUAA20IAAOY4cADp4AAA+H4AAQccAAESzbABFboAASRYAAFQMgABfAwAAY2WUAAAAAAACs8gABmZsAAgbVAAuOOQAMAAAAAAAAAATM0AAI7K4ACZmgAA5mcAAQAA4AEccpABKGTgAYAAwAHB/uABzM4AAjjlIAJbmOAC9TLgAAAAAAAzKQAAdPAAAAAAwAAAANMABAQjEAQUMyADQ2MwA1NwAANDYAADU3MgAANjMAADc4PDo+OT07PjgAOj45ADs+AAAAPwAAAHcAAAA+eAB5PzgAOz45ADo+AAAAQgAAAEN2AHR1fgB/d3gAAD8AAHk/fgAAdwAAf3cAAAAAAAAAAAAAAAAAAAAAAAbjjgAQccAAAAAAAACs8gABxxwAAqqrAAMzNAAJrdQAAccc","cmff10":"AUsAEgAAAH8AMAAOAAsAAQBYAAoAAAAHjRUb6wCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNRkYAAAAAAAAAAAAAAAAAAAAAAADqG6AAACqgAAAnoAAAGqAAAB2gAAAaoAAAI6AAACegAAAjoAAAJ6AAACOgAAAYkAEKF5AAABeQAAArkAAAK5AAAAJQAAAFWAAAEpAAABKQAAAScAAAEpAAABKAAAAekAAADQcAABGQAAAjUAAAJ1AAABK1AAAsoAAALqAAACfTAAACUAEAAZABFxKQAAAqmQAAEsIAACrCAAAlkAAAA5ABEgrKAAAKygAAEsAAACdEAAADFgAACFABFQMQAAASygAAEmAAABJgAAASYAAAEmAAABJgAAASYAAAEmAAABJgAAASYAAAEmAAAANQAAADVgAAATgAACchAAAOOAAADpABGCeQAAAgoAFMH6AAACOgAAAkoAE1IqAAAB+gASQmoAAAGqAAAAagAVcPoAAAI6ABKhugAVIooAAAGqAAACqgATUboAEeKqYAACKgAUwWoAAAJ6ABLhygAAAgoAEkLaABJCCgASogoAEvGaAAAATKAAASkAAABMoAABKQAAADkAAAA5ABERBQAUgVkAFCDVABQBWQAAANUAAAB5ABAhJYAVYVkAE6ApAAAAWYAAAUkAEZApAAAClQAToVUAE6ElABQhVYAUITWAAACVAAAAtQAAAKkAFKFVABSxRQARkhUAEaFFAAABRYAR8MUAAAElABFi9QAAASkAAAEpAAABKQAAAAAAAAAAMFsAADd3gAA7u7AAPHHQAD0n4ABBbAAAQWwgAEccYABQWwAAUn0gAFOgYABczLAAXd3QAGOOMABmZlAAZxxgAGccgABpPoAAaqqgAGqqsABwWwAAdJ8wAHVVUAB9J9AAf//gAIWwMACIiGAAi2CAAItgoACOOLAAjjjQAJEQ4ACSfSAAk+kgAJbBUACZmYAAn//gAKC14ACiIgAAp9JQAKk+gACtgrAAsREAALYLMADJ9GAAzMygANJ9AAAAAAAAEn0wAE9J4ABVVWAAa2CgAIccYACVVVAAlxyAAJniUACccdAAoAAAAKqqoACqqrAAsccgAAAAAAABESAADjjgABHHIAAdJ9AAI44wADHHIAA+OOAARxxgAE45AABccdAAAAAABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj//IiI//w44wAA444AAWwW//9J9f//pPr//u7u//6T6gAAWwYAALYL//5mYAAEccYAAiIiAAFsFgAIccYADSfQAAFsFg==","cmfi10":"AWQAEgAAAH8AMgAOAAsAJABNAAkAAAAHEwuEjgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNRkkAAAAAAAAAAAAAAAAAAAAAAADqF6CAAC2gAAAooCQAGKAAABugWAAaoAAAI6BoACigOAAjoAgAKKA4ACOgMAAVmI0IEJhwABOYcAApmHAALJhwAANQcAAFWAAAD5AAAA+QAAAPcAAAD5AAAA+AKAAikAAACwcAABKYAAAjUCwAI1AsAA+0TAAuoGgAMKBoACjTJAABUAEPApARFw+QAAAtmQQAHpAAAC3CHAAokAAAA5ABEgjKVAAIygAAD8A8AChGAAADFQAAB1ABFQMQAAAPylQAD2BIAA9gSAAPYEgAD2BIAA9oSAAPYEgAD2BIAA9oSAAPYEgAD2BIAANQAAADVQAAAjgAACghBAAPOAAAD5ANGCiQIAAhoAEwH6AwACOgUAAloCUrIKBoAByggRonoAAAGqAAAAagXAAOoAAAJKBRIBegAUEroAAAGqAAACqgJSsZoDEqKqUkACKgATAUoBQAJqCBJB2gAAAhoIUaL6CFKiGgXSAhoIklFqBQAAPKdAAPkGQAA8oAAA+QAAADkAAAA5ABEQ9QcAALkBlFC1ABRQ+QcRkLUC1FBJiNAAtYNAAPkHAAA5BwAAOYRAALkGAAAZBxGS1QcAAUUHFMD1AZRQ9YGUULWDQAClBhRQhQQAAFkHAAEVBwAAtQYAAbUGEZDFB4AA1YNAAJUHwAD1BtFjFQbAAPkAwAD5AMAA+QAAAAAAAAAAPpPQAEIiAABNgrAATYLQAFT6MABWwTAAXHGgAGtggABrYKAAbxxQAHpPYAB6T4AAgcbgAIZmIACJPlAAjBagAJC10ACQteAAk44AAJgtMACbBYAApxwgAK+koACwWqAAszLQALPo0AC2CwAAtxwgALmZIAC6T2AAuqpQAL6TgAC/SYAAwiGwAMT54ADGwQAAyZkwANBaoADSfLAA0+jQAN1VAADfSYAA4LWAAOEQsADi17AA7u5gAQn0AAEMzDABEnygAAAAAAASfTAAT0ngAFVVYACAtdAAhxxgAJVVUACXHIAAmphgAJxx0ACgAAAAqqqgAKqqsACxxyAAAAAAAAERIAAOOOAAEccgACOOMAAxxyAAMn0AAD444ABHHGAATjkAAFxx0AAAAAAAAHZgAACIoAAAtlAAALZgAAERYAAB/eAAAiJgAAN8IAADu+AABEKwAASBAAAEiLAABJ+gAAVVgAAF3iAABgugAAbBsAAHd7AAB3fQAAiI0AAJmdAACsZQAAxEoAANgyAADibgAA45MAAP0VAAD+HQABERUAARPtAAEWxgABH1AAATvAAAFrigABrYYAaQAMAGYACwBsAA0AJ4AAAD+AAAAhgAAAKYAAgF2AAABpAA4AbAAPACeAAAA/gAAAIYAAACmAAIBdgAAAbIABgEyAAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+gGyABABvgAUAZYAFAHWABQBygAUAYYAFAEGABgBPgAcAQ4AHAEeAB4BRgAcAeYAFAGWABQBvgAUAcoAFAGGABQB1gAWAQYAFAFiABwBXgAcAQYAHAFaAB4BZgAcAboAHAGyABwBygAcAdYAHAG2ABwB0gAcAaYAHAEOABwBPgAcAR4AHAGiABwBigAcAVYAHAGuABwB2gAcAd4AHAFGABwBUgAUAWYAFAFaABgBXgAYAZYAIAGGACABvgAgAZIAIAGOACABngAiAcYAIgCeABgAA1Vb//BbD//tVWAAB3d0AAO7u//6Zmv/+IiP//4iI//8REgABmaAABccaAALMywAB3d0ACHHGABEnygAB3d0=","cmfib8":"AUAAEgAAAH8AJQAOAAcABQBYAAoAAAAHza9mPQCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNRklCAAAAAAAAAAAAAAAAAAAAAADuF8AAACLAAAAfwAAAGcAAABnAAAAcwAAAHMAAAB/AAAAcwAAAH8AAABzAAAAWwBEKFMAAABTAAAAhwAAAIcAAAAEwAAAENgAAEMAAABDAAAAQgAAAEMAAABBgAAAcwAAACwUAAA/AAAAcMAAAHzAAABBDAAAjwAAAJMAAAB/SAAABMAEAAsABFxDAAAAixgAAEMAAACLAAAAewAAAAsABEgfGAAAHxgAAEMAAAB+UAAACFgAABjABFQIQAAAQxgAAEMAAABDAAAAQwAAAEMAAABDAAAAQwAAAEMAAABDAAAAQwAAAEMAAAAIwAAACNgAAAlYAAB8hAAANVgAADcABGB/AAAAcwAFMGsAAABzAAAAdwAE1GcAAABjAASQfwAAAHMAAAAbAAVcQwAAAHcABKhfAAVIjwAAAHMAAAB/AATUZwAEeH8YAABzAAUwVwAAAHMABLhzAAAAcwAUkJMAFJBzAASocwAkvF8AAAAPGAAAQwAAAA8YAABDAAAACsAAAAsABEQ4wAUgTwAFCCzABQBPAAAAMMAAABcARAhA2BVYTwAE6AbAAAAS2AAASwAEZAcAAACAwAToTMAE6EDABQhM2AUIRNgAACDAAAAkwAAAHcAFKEzABSxIwBRkbMAUaEjAAABI2BR8KMAAAEDANFiQwDAAQwAAAEKAAABCwAAAAAAAAAAWcbgAF1VIABdVUAAYxxAAGaqgABv/8AAgqpgAIMcQACEiEAAlHFgAJVVAACYqmAAnqpgAKGN4ACmOKAAp/+gAK3GoACtxsAAtxwAALjjIAC6qkAAw/+gAM1U4ADWqkAA3/+AAOlU4ADvG+AA8qogAPv/gAEDjaABBVTAARRxIAEWOEABF/9gASqqAAFP/0AAAAAAAB444AB3pQAAgAAAAJhxwACeOQAAru7gALbbgAC7VWAAvxxAAMX4AADIMOAAzxyAANtVYAAAAA//2WwAAAw44AAYccAAIONAACrHIAAw44AAAAAAAASqoAAIZmAACVVgABmOQAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//pjkv/5scoAAZjkAAJVVP/+1Vb//2qq//5AAP/9qqwAAJVWAAEqqgAAAAAABv/8AAN//gACVVQACAAAABT/9AACVVQ=","cminch":"AHsAEgAwAFoAEQACAAIAAwAVAAQAAAAH3j5hywaBGaAVQVNDSUkgY2FwcyBhbmQgZGlnaXRzAAAAAAAAAAAAAAAAAAAAAAAABkNNSU5DSAAAAAAAAAAAAAAAAAAAAAAuAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKEAELCxAAAAkQAAAOEAEGBhAAAAUQAQELEAAADRAAAAEQARQCEAAADBABAgQQARAPEAAADRAAAA4QAQYIEAEADhEAAAgQAAAFEAAACxABAAwQAAAKEAUBEBAFAQoQAQIKEAkABxAAAAAAAAAABUn1AAhPpQAIzM0ACUn0AAnHHAAKREQACsFsAAs+lAALPpQAC7u7AAu7vAAMOOMADLYLAAy2CwAPpPoAEJ9KAAAAAAALHHIAAAAAAAGwWwAAAAAAAD6UAABwpIBBgAAAQYAAAE+AAQBDgAEAR4ABgFGAAQBYgAEAV4ABAEGAAQBWgAGAWYABAEOAAQBPgAEAR4ABAFWAAQBRgAEAVIAAAFmAAgBWgACAV4ACgEmAA//+iIj//4LY//4LYQAAfSgAAAAAAAXd3gAC7u8AAfSfAAdVVQARmZkAAfSf","cmitt10":"AMAAEgAAAH8AAgAPAAwAAgACAAAAAAAH3+o8eACgAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNSVRUAAAAAAAAAAAAAAAAAAAAAADqAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABOwQAATsEAAFQBAABWwQAAcAEAAHABAABsAQAAcAEAAGgBAABwAQAAQoEAAHLBAABUAQAAVAEAAGIBAABwAQAAcAEAAHUBAABKAQAAcAFAAHABAABwAQAAcAEAAHmBAABwAQAAcAEAAHlBAAB5QQAAWAEAAFyBAABGQQAAXIEAAEQBAAB5QQAAcAEAAHABAABwAQAAcAEAAHLBAABwAQAAcAEAAHLBAABwAQAAcAEAAFQBAABWQQAAZMEAAFBBAABkwQAAcAFAQHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAckEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHABAABwAQAAcAEAAHlBAAB5QQAAeUEAAHABAABBwQAAcAEAAFQBAABwAQAAVAEAAHABAABUAQAAcsEAAFbBAABwAQAAcAEAAHLBAABwAQAAcAEAAFQBAABUAQAAVAEAAFbBAABWwQAAVAEAAFQBAABwAQAAVAEAAFQBAABUAQAAVAEAAFbBAABUAQAAeUEAAHlBAAB5QQAAcAEAAHABAAAAAAAAAhmYgAAAAAAAgAAAAOC2AAGOOMABqZlAAbjjgAIVVYACH0mAAiqqwAI444ACQyDAAkOOgAJxx0ACqqrAAsccgAAAAD//N9I//62Cv//HHIAAOOOAAFVUwABVVUAAYWtAAHHHQACOOMAAxxzAAOOOgAAAAAAAscdgGAADoBgAA8ABAAAAAhmYgAAAAAAAAAAAAbjjgAQzMMACGZi","cmmi10":"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","cmmi12":"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","cmmi5":"AXkAEgAAAH8AYAAPAAkAHgA6AAsAAAAGTw3aXABQAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNTUkAAAAAAAAAAAAAAAAAAAAAAAD0MrBtHVuwASdPsBkYR7ABJ0uwSRhXsE0QUrAtGDOwbQxFsAEYP7BlCFCwJRhAQAEDKcctGCRHPAAPwBUJC0ABCxHHMRgjRx0LFsAZGARAAQsuQAAAM8AAADZHAQMcQEEBEccNITBAHAAeRwEYLEAdLxdAXQErQB0DNMcBGDlHAQtCxx0hPUAcABRAARg3wAEYWkAYAB5HARgHRUUYQUcBGF8yAABfMgAAXzIAAF8yAAABZAAAAWQAACBTAAAgUwAAIEAAACBAAAAgQAAAIEcAACBHAAAgRwAAIJAAACBHAAAgkAAAIEcAAAEQAAABFwAAVXYAACDoATRVdgAAIFMAACXAPRhNsAEiTrAlGEiwORVWsBkLSbAtGDqwbR1RsAEYV7BNEAywUSEnsFUrWbA5CEawAQNesFkZU7BZFE+wGRg7sG0dVLcBGEywBRg4sCkZMbBtFUSwWQQvsHExXbBtMViwURQtsHExQ7A5GQrgAAAKxwAACscAAF8hAABfIQAACcABIShAAAANwAAADkABCyHAASMVQAELGMdhKBpHHQMuwAEAA6AAAAinNS8mwAgAAsABGFxAAAA8QAAAG0ABCyJHARgQRx0YE0AZCRJAAQsGgAEYNUABAx1AHQNKQBEYKkABAx9HHQsZQCELA0ABAwVHARg+RwEhINBoAAHAdAAAAAAAAAdVWgAHr20ACImDAAjL4AAI2woACQTGAAlABgAJaUMACY49AAmOQAAJ0RYACgcjAAoiJgAKZA0ACnd9AAqK7QAKqrMACrjqAAq9qgAKy2YACtUQAArVWgAK590ACvHNAAsExgALNZoACz6aAAtkigALjkMAC53mAAuwZgALxyYAC9XWAAvV2gAL5nMAC/NTAAv7wAAMIToADF3mAAxkEAAMpnAADKqzAAyqtgANCvAADTBmAA09rQANPqAADUxgAA1RHQANUoYADXHTAA13gAANiYoADZizAA2vdgANs0AADdVgAA3gwAAOAXYADhfDAA4ugwAOOl0ADku2AA6c9gAOsGYADuOdAA8W0AAPGjYADxyAAA9KAwAPd4YAD++QABAcgAAQJM0AEEiWABB6ugAQk/oAEJeGABDCnQAQ+D0AEQZQABELcAARNhoAEVDWABFVZgARwg0AEcRTABHOSgASOPYAElEjABJx2gATpgMAFHeNABSLcwAVxzMAAAAAAAH0oAAFuOMABletAAbjjQAHccYACDymAAmdWgAJ110ACk+mAAqp2gAK7vAACxxzAAuPIwAMAAAAAAAA//244//+V63//3HGAAA8pgABjjoAAZ1aAAMccwAEAAAAAAAAAAAGwAAAQl0AAEqqAABuOgAAhEMAAI46AACS9gAAl7MAAL9KAADPowAA0n0AANjjAADxkwABFsAAARxzAAEhMAABKqoAASwWAAEwWgABOlAAAYWwAAG+kwAB2wYAAeOQAAHtPQACdg0AAscgAARxzQAJTXOAf4AAADuAAQA6gAGAf4ACADuAAwA6gAMAPYABgH+AAgA9gAEAO4ABADqAAYB/gAQAPYABADuAAwA6gAOAf4AEAD2AAQA7gAEAOoABgH+ABAA9gAUAPYAAADuAAQA6gAGAf4AGAD2AAQA7gAEAOoABgH+ABgA9gAEAO4ADADqAA4B/gAaAf4AHgH+ACABZgAQAWoABAGqAAwBmgAmAf4AKADuAAQA6gAGAf4AKAD2AAQA7gAMAOoADgH+ACgA7gAGAOoABADuACQA6gAmAPYADAAGAAQBBgAEATYABAE6AAQBZgASAWoAB//9xxv/+440AAI46//3HGgABHHP//lVTAAGqrQACOOYAAscg//yqpgADVVoABAAAAAAAAAAAAAAAAAAAAAbjjQAXjk0=","cmmi6":"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","cmmi7":"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","cmmi8":"AXwAEgAAAH8AYQAPAAkAIAA6AAsAAAAG1wEXMgCAAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNTUkAAAAAAAAAAAAAAAAAAAAAAADuOLBxHVuwASdQsBUYSLABJ0ywTRhYsFEQUrA1GDSwcQxEsAEYO7BpCFGwKRhBQAEDK8ctGCVHPAARwB0JCkABCxDHRRghRxkLGcAVGAVAAQsvQAAANMAAADdHAQMeQEEBEMchIS5AGAAjRwEYLUAZLxJAbQEpQBkDNccBGDxHAQtDxxkhPUAYABVAARg2wAEYWkAUACNHARgHRlkYQkcBGGAyAABgMgAAYDIAAGAyAAABZAAAAWQAACBTAAAgUwAAIEAAACBAAAAgQAAAIEcAACBHAAAgRwAAIJAAACBHAAAgkAAAIEcAAAEQAAABFwAAU3UAACDoATRTdQAAIFMAACfAPRhNsAEiT7ApGEmwSRVXsBULS7A1GD6wcR1UsAEYWLBREA+wVSEqsF0rXLBJCEewAQNfsGEZVrBhFFCwFRhAsHEdVbcBGE6wBRg6sDEZMrBxFUWwYQQzsHkxXrBxMVmwVRQxsHkxRrBJGQngAAAJxwAACccAAGAhAABgIQAADMABIShAAAANwAAADkABCyTAASMXQAELG8dlKBpHGQMvwAEABKAAAAunOS8mwAwAAsAJGF1AAAA5QAAAHEABCyJHARgTRxkYFEAVCRZAAQsGgAEYMEABAx1AGQNKQBEYLEABAx9HGQsYQCULA0ABAwhHARg/RwEhINB0AAHAfAAAAAAAAAS46AAFEvoABZe4AAXJtAAGBMIABiOUAAY46gAGZyAABpx4AAbfUAAG4AQABvHMAAdFuAAHXPIAB172AAd47AAHhbgAB4toAAeXBgAHq+AAB9mgAAfceAAH4uAAB+hSAAfuPgAIFwYACCqwAAg3gAAIRyQACFtKAAhnJAAIgAgACIfaAAiOugAItKYACL9QAAjBjAAI2hoACPSmAAkHngAJOOwACUlGAAmJ/AAJkc4ACbcIAAnDHgAJy+IACde8AAnaWgAJ5boACeZwAAnqtAAKGxAAChz0AAo6GgAKSUYAClCgAApWygAKeewACo5AAAqSDgAKwioACsZwAArHJAAK6y4ACxP0AAscfAALVWAAC4BAAAuFBAALj7AAC8oAAAwdxAAMMwIADHVgAAyI7gAMu8gADM26AAzSiAAM5igADREcAA0s2AANOPAADT8wAA1fDAANfkQADfJkAA33KAAN+24ADh00AA4quAAOVhgADwmIABAKBAAQU5wAEQAQAAAAAAABxxwABbjkAAYMPAAG444AB3HIAAe8TgAJApAACddeAApPpgAKk9AACu7uAAsccgALeJwADAAAAAAAAP/9uOT//gw8//9xyP//vE4AAQKQAAGOOgADHHIABAAAAAAAAAAAGWwAADCWAABtCgAAbjgAAHjkAACS9gAAmZgAAJ/+AACtCgAAyfQAANJ8AADk+gAA5bAAAOwQAADxyAABC9oAARjiAAEhbAABM44AATtgAAE/pAABQAAAAYC2AAG0RAABw44AAc08AAHY5AACXHQAAnYMAAPHIAAGsQCAf4AAADuAAQA6gAGAf4ACADuAAwA6gAMAPYABgH+AAgA9gAEAO4ABADqAAYB/gAQAPYABADuAAwA6gAOAf4AEAD2AAQA7gAEAOoABgH+ABAA9gAUAPYAAADuAAQA6gAGAf4AGAD2AAQA7gAEAOoABgH+ABgA9gAEAO4ADADqAA4B/gAaAf4AHgH+ACABZgAQAWoABAGqAAwBmgAmAf4AKADuAAQA6gAGAf4AKAD2AAQA7gAMAOoADgH+ACgA7gAGAOoABADuACQA6gAmAPYADAAGAAQBBgAEATYABAE6AAQBZgASAWoAB//+HHP//DjgAAHjk//4ccAAA8cj//pVUAAFqrAAB45AAAlx0//0qqAAC1VgABAAAAAAAAAAAAAAAAAAAAAbjjgARABA=","cmmi9":"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","cmmib10":"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","cmmib6":"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","cmmib7":"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","cmmib8":"AX4AEgAAAH8AYwAOAAkAIAA6AAwAAAAGojUtLgCAAAAPVGVYIG1hdGggaXRhbGljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkNNTUlCIFYyLjIAAAAAAAAAAAAAAADuLKB1HVugASdQoB0YSaABJ06gTRhdoFkQVqA1GDCgdQxGoAEYP6BpCFSgLRhFQAEDLbcZGCBHQAARsCUJDEABCw63ORglRyELGrAdGAVAAQsvQAAAMbAAADpHAQMdQEkBDrcRITZAIAAkRwEYNUAhLxRAbQEpQCEDO7cBGD1HAQtEtyEhPkAgABJAARg5sAEYXkAcACRHARgHRVEYQkcBGGIyAABiMgAAYjIAAGIyAAABZAAAAWQAAB5TAAAeUwAAHkAAAB5AAAAeQAAAHkcAAB5HAAAeRwAAHpAAAB5HAAAekAAAHkcAAAEQAAABFwAAV3YAAB7YATRXdgAAHlMAACiwQRhToAEiT6AtGEugRRVYoB0LSqA1GDSgdR1VoAEYXaBZEA2gVSEnoF0rXKBFCEOgAQNhoGEZWaBhFEygHRg8oHUdUacBGFKgCRg3oDEZKqB1FUigYQQzoHkxYKB1MVqgVRQyoHkxR6BFGQnQAAAJtwAACbcAAGIhAABiIQAAC7ABIStAAAAQsAAAD0ABCyKwASMYQAELG7dlKBdHIQMvsAEABLAAAAq3PS8msAwAArAFGF9AAABAQAAAH0ABCyNHARgWRyEYFUAdCRNAAQsGgAEYOEABAxxAIQNNQBUYLkABAyFHIQsZQCkLA0ABAwhHARhBRwEhHsBwAAGwfAAAAAAAAAVxygAF8VAABtdCAAbhrAAHCBQAByjMAAdHIAAHT6gAB59OAAfbCAAH7BoACDHKAAiGaAAIszgACLyyAAjPqAAI2DAACO9MAAkBbAAJAXIACRZMAAkvbAAJQHwACWHcAAl3BAAJe74ACaT4AAm0pgAJwH4ACczSAAnmagAKAdoAChsOAApGqAAKRqoACkiMAApLagAKTFoACpYOAAqZnAAKy2gACs2IAArSCgAK+8AACyZsAAsu8gALYxwAC27yAAtu9gALbzwAC30sAAuHIgALoqAAC64EAAu3fgALvawAC9dkAAwFPgAME+4ADCiMAAwqrgAMO4QADD3AAAxJDAAMiI4ADLBgAAzYNAAM+OwADP+OAA0RFgANE/AADX+8AA2qsAANrvYADeNMAA4vzgAONZwADj+aAA6rDgAOtX4ADrswAA67OgAOwXIADumiAA785AAO/pwADz6cAA/VEgAP+OgAD/3kABBVXgAQZm4AEIRKABCgwAARutYAEpEYABM9LgATmaQAAAAAAAKOOAAFxx4ABnXEAAcccgAHjjoACGFKAAnI0gAKKKQACk+mAAr6UAALHHIAC6awAAwAAAAAAAD//cce//51xP//jjoAAGFKAAGOOgAByNIAAxxyAAQAAAAAAAAAAAACAAAJxgAAMNIAAFmYAABxxgAAhbAAAItiAACXtAAAnd4AAKQGAADBxgAA0+gAANbAAADk+AABAAAAARbCAAEZmAABIxYAAS6AAAE7ugABPHIAAT0mAAGTNAAByIgAAdESAAHqGAACLYQAAnpQAAK45gAEWwgAB5KCgH+AAAA7gAEAOoABgH+AAgA7gAMAOoADAD2AAYB/gAIAPYABADuAAQA6gAGAf4AEAD2AAQA7gAMAOoADgH+ABAA9gAEAO4ABADqAAYB/gAQAPYAFAD2AAAA7gAEAOoABgH+ABgA9gAEAO4ABADqAAYB/gAYAPYABADuAAwA6gAOAf4AGgH+AB4B/gAgAWYAJAFqAAQBqgAMAZoAKgH+ACwA7gAEAOoABgH+ACwA9gAEAO4ADADqAA4B/gAsAO4ABgDqAAQA7gAoAOoAKgD2AAwABgAEAQYABAE2AAQBOgAEAWYAJgFqAAf//dJ7//uk+AACLYv/90nwAARbE//5d3AABoiYAAi2IAAK46gABFsL//Lu6AANETAAEAAAAAAAAAAAAAAAAAAAABxxyABOZpA==","cmmib9":"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","cmr10":"AUQAEgAAAH8AJAAQAAoABQBYAAoAAAAHS/FgeQCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADqEsAAAB7AAAAcwAAAFsAAABTAAAAawAAAGMAAABzAAAAYwAAAHMAAABjAAAAQ0BEKD9AAAA/QAAAe0AAAHtAAAAEwAAACOAAACtAAAArQAAAKkAAACtAAAApgAAAa0AAACAYAAAvQAAAYMAAAHDAAAApVAAAfwAAAIsAAABziAAABMAEAAdABFwrQAAAe1wAACvMAAB7zAAAc0AAAAdABEgX5AAAF+QAACvAAABx0AAABGAAAAzABFQEQAAAK+QAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAEwAAABOAAAAUgAABwhAAAJSAAACdABGBzQAAAawAFMF8AAABjAAAAbwAE1FcAAABPAASQdwAAAGsAAAATAAVcMwAAAHMABKhLAAVIgwAAAGsAAABzAATUVwAEeHMgAABnAAUwPwAAAGMABLhrAAAAawAUkI8AFJBrAASoawAkvEcAAAAH5AAAK0AAAAfkAAArQAAABsAAAAdABEQowAUgP0AFCCDABQA/QAAAIMAAAAtARAgo4BVYP0AE6AbAAAAK4AAAO0AEZAdAAAB4wAToPMAE6CjABQg84AUINOAAABjAAAAcwAAAFgAFKDzABSw4wBRkYMAUaDjAAAA44BR8IMAAACjANFiEwDAAK0AAACrAAAAqwAAAAAAAAAARxyAAE45AABVVWAAXHHQAGOOUABkRGAAZPpgAHHHMAB447AAgAAgAIAAMACDjlAAhxyAAIccoACOOQAAlVWAAJxx4ACgACAApxygAKqq0ACuOQAAsccwALVVgAC447AAvHHgAMAAIADDjmAAxxygAMjjsADVVYAA5xygAOqq0AEAADABA45gAQccoAAAAAAAGwWwAF3rgABuOOAAgAAAAIccgACRWdAAlVVgAJ114ACg46AApPpQAKr40ACu7uAAsccgALtgsADAAAAAAAAP/93rgAAMcdAADjjgABVVYAAY46AAK44wADHHAAAxxyAAQAAAAAAAAAADjjAABmZgAAccgAAT6VAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/7jjj/+uONAAE+lQABxx3//xxy//+OOP/+qqr//jjjAABxyAAA444AAAAAAAVVVgACqqsAAccdAAbjjgAQAAMAAccd","cmr12":"AUIAEgAAAH8AIgAQAAoABQBYAAoAAAAHWKtRCwDAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADmD8AAABzAAAAawAAAE8AAABHAAAAXwAAAFcAAABrAAAAVwAAAGsAAABXAAAAN0BEKDNAAAAzQAAAc0AAAHNAAAAEwAAACOAAACdAAAAnQAAAJkAAACdAAAAlgAAAX0AAABwYAAAnQAAAVMAAAGjAAAAlVAAAdwAAAIMAAABriAAABMAEAAdABFwnQAAAc1wAACfMAABzzAAAa0AAAAdABEgX5AAAF+QAACfAAABp0AAABGAAAAzABFQEQAAAJ+QAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAEwAAABOAAAAUgAABohAAAISAAACNABGBrQAAAXwAFMFMAAABXAAAAYwAE1EsAAABDAASQbwAAAF8AAAATAAVcKwAAAGcABKg/AAVIewAAAF8AAABrAATUSwAEeGsgAABbAAUwMwAAAFcABLhfAAAAXwAUkIcAFJBfAASoXwAkvDsAAAAH5AAAJ0AAAAfkAAAnQAAABsAAAAdABEQkwAUgM0AFCBzABQAzQAAAHMAAAAtARAgk4BVYM0AE6AbAAAAK4AAAL0AEZAdAAABwwAToMMAE6CTABQgw4AUILOAAABTAAAAYwAAAFgAFKDDABSwswBRkVMAUaCzAAAAs4BR8HMAAACTANFh8wDAAJ0AAACbAAAAmwAAAAAAAAAARaEAAEyXgABTjgAAWm3QAGF7AABi34AAb2gAAHZegAB9VQAAgMTwAIRLgACLQgAAkjiAAJkvAACcnvAAo5VwAKccAACqi/AArfvQALGCcAC1CQAAuHjwALvo0AC/b3AAwt9QAML2AADErgAA0OMAAOI/8ADlr9AA+qoAAP4Z8AEBidAAAAAAABjjkABcZBAAbjjwAIAAAACHHIAAkJeQAJOOAACddfAAoOOQAKT6UACp58AAru7wALHHEAC7YLAAwAAAAAAAD//cZBAADHHAAA448AATjgAAGOOQACuOMAAxxwAAMccQAEAAAAAAAAAAA3tAAAZEQAAG9oAAEdoQBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+6Xw//r/iQABHaEAAb2g//8hMP//kJj//rHI//5CYAAAb2gAAN7QAAAAAAAFOOAAApxwAAG9oAAG448AD6qgAAG9oA==","cmr17":"AUMAEgAAAH8AJAAQAAkABQBYAAoAAAAHRNPtdAEUeuAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADbEMAAAB7AAAAbwAAAFMAAABLAAAAYwAAAFsAAABvAAAAWwAAAG8AAABbAAAAO0BEKDNAAAAzQAAAd0AAAHdAAAAEwAAACNwAACdAAAAnQAAAJkAAACdAAAAlgAAAY0AAABwYAAAnQAAAWMAAAGzAAAAlVAAAfwAAAIsAAABviAAABMAEAAdABFwnQAAAe1wAACfMAAB7zAAAb0AAAAdABEgX4AAAF+AAACfAAABt0AAABFwAAAzABFQEQAAAJ+AAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAEwAAABNwAAAUcAABshAAAIRwAACNABGBvQAAAYwAFMFcAAABbAAAAZwAE1E8AAABHAASQcwAAAGMAAAATAAVcKwAAAGsABKhDAAVIgwAAAGMAAABvAATUTwAEeG8cAABfAAUwNwAAAFsABLhjAAAAYwAUkI8AFJBjAASoYwAkvD8AAAAH4AAAJ0AAAAfgAAAnQAAABsAAAAdABEQkwAUgN0AFCBzABQA3QAAAHMAAAAtARAgk3BVYN0AE6AbAAAAK3AAAL0AEZAdAAAB4wAToNMAE6CTABQg03AUILNwAABTAAAAYwAAAFgAFKDTABSwswBRkWMAUaCzAAAAs3BR8HMAAACTANFiEwDAAJ0AAACbAAAAmwAAAAAAAAAAP+igAEaYkABNSIAAU94gAFqoUABb/sAAaAgwAG64IAB1aAAAeLLgAHwX8AB/0VAAgsfgAIaBQACQJ7AAk3KAAJoicACdh5AAoNJgAKQdMACnglAAqudgAK4yMACxfRAAtOIgALgs8AC4R0AAueygAL+58ADFpxAA1lHAANmckADq0BAA8RFwAPRcQAAAAAAAFPzgAFsHMABuNLAAf/vAAIcaYACPPgAAkDzwAJ1v4ACg4oAApQVAAKfuUACu5bAAsccgALtYkAC/xQAAAAAP/9sLcAAMcuAADf3gABBBMAAY5bAAK5HwADHLUAA/yTAAAAAAAANX8AAGBMAABq/wAA8swAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//wBdv/7YcoAAPLMAAGr+///KgP//5UB//6/BP/+VAUAAGr/AADV/QAAAAAABNSIAAKB+AABq/sABuNLAA6tAQABq/s=","cmr5":"ATEAEgAAAH8AIQAQAAoABQBJAAkAAAAHhgObWgBQAAAcVGVYIHRleHQgd2l0aG91dCBmLWxpZ2F0dXJlcwAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAAD0DsAAABvAAAAZwAAAEsAAABDAAAAWwAAAFMAAABnAAAAUwAAAGcAAABTAAAAJ2AAACdgAAAHQAAABSAAACEgAAAEwAAACOAAACdAAAAnQAAAJkAAACdAAAAlgAAAW0AAABwcAAAnQAAAUMAAAGTAAAAlUAAAcwAAAHsAAABniAAABMAEAAdABCAnQAAAb2AAACfMAABvzAAAZ0AAAAdABAwX5AAAF+QAACfAAABm2AAABGAAAAzABBgEQAAAJ+QAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAEwAAABOAAAGXUAABkhAAAZdQAACNABCRnQAAAWwAE9E8AAABTAAAAXwAEmEcAAAA/AARUawAAAFsAAAATAAUgKwAAAGMABGw7AAUMdwAAAFsAAABnAASYRwAEPGcgAABXAAT0MwAAAFMABHxbAAAAWwAUVH8AFFRbAARsWwAkgDcAAAAH5AAAJ0AAAAfkAAAnQAAABwAAAAdABAgkwATkM0AEzBzABMQzQAAAHMAAAAtAQAAk4BUcM0AErAcAAAALIAAAL0AEKAdAAABswASsMMAErCTABMww4ATMLOAAABTAAAAYwAAAFgAE7DDABPAswBQoUMAULCzAAAAs4BRAHMAAACTANByAwDAAJ0AAACcAAAAnAAAAAAAAAAAZxzQAHAAYAB45AAAfpRgAIqrMACMcmAAnHJgAKVWAACuOaAAsRHQALcdMADAANAA0cgAANSgMADdg9AA448wAOZnYADpP6AA70sAAPVWYAD4LqAA+wbQAQESMAED6mABBx2gAQiJ0AEY5NABLYQwATBcYAFREqABU+rQAVxzMAAAAAAAH0oAAGV60ABuONAAgAAAAIccYACUnzAAmdWgAJ110ACg46AApPpgAKqrMACuBNAAsccwALtg0ADAAAAAAAAP/+V60AAMcdAADjjQABjjoAAZ1aAAKqswACuOYAAxxzAAQAAAAAAAAAAEcdAACAAAAAjjoAAWk9AGyAAIBMgAGAYABcACcAIgA/gAKAIYACgC0Ae4AtAHyAYAAOgGAADwBhgAMAZYAEAGGABABvgASAY4AEAEGABQBvgAQAZYAEAGGABAAugAWALIAFAG+ABQBlgAUAdYAFAHKABQBhgAUAQYAGAE+ABABDgAQAR4AEgFGABAB5gAQAZYAFAG+ABQBygAUAYYAFAEGABYB1gAUAWIAEAFeABABBgAQAVoAEgFmABAB0gAQAdYAEAGKABAB5gAQAdoAEgHeABABogASAa4AEAGWABwBvgAcAeIAEAGSABwBjgAcAcYAHAHaABABqgAgAeYAEgHeABAB0gAQAQ4AEAE+ABABHgAQAVYAEAFGABABUgAUAWYAFAFaABoBXgAaAaoAHgEmAB//5jjP/+NJ2AAI45v/+443//3HG//5VU//9xxoAAI46AAEccwAAAAAAB45AAANVWgACOOYABuONABXHMwACOOY=","cmr6":"AUUAEgAAAH8AJQAQAAoABQBYAAoAAAAHuUFhqABgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADyEcAAAB7AAAAcwAAAFcAAABPAAAAZwAAAF8AAABzAAAAXwAAAHMAAABfAAAAP0BEKDtAAAA7QAAAf0AAAH9AAAAEwAAACOAAACtAAAArQAAAKgAAACtAAAApgAAAZ0AAABwYAAArQAAAXMAAAHDAAAApUAAAgwAAAIsAAABziAAABMAEAAdABFwrQAAAe1wAACvMAAB7zAAAc0AAAAdABEgX5AAAF+QAACvAAAByVAAABGAAAAzABFQEQAAAK+QAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAEwAAABOAAAAUgAABwhAAAJSAAACdABGBzQAAAZwAFMFsAAABfAAAAawAE1FMAAABLAASQdwAAAGcAAAATAAVcLwAAAG8ABKhHAAVIhwAAAGcAAABzAATUUwAEeHMgAABjAAUwNwAAAF8ABLhnAAAAZwAUkI8AFJBnAASoZwAkvEMAAAAH5AAAK0AAAAfkAAArQAAABsAAAAdABEQowAUgN0AFCBzABQA3QAAAIMAAAAtARAgo4BVYN0AE6AbAAAAK4AAAM0AEZAdAAAB4wAToNMAE6CjABQg04AUIMOAAABTAAAAYwAAAFcAFKDTABSwwwBRkXMAUaDDAAAAw4BR8HMAAACjANFiQwDAAK0AAACrAAAAqwAAAAAAAAAAWhKwAGJegABqqlAAcU1QAHtCAAB86tAAi9mwAIvZ0ACUJYAAnHFQAJ/C0ACkvTAArQkAALQlUAC8cTAAvaCwAMDyMADJPgAAzjhQANGJ0ADU21AA2dWwAN7QAADiIYAA5XMAAOptUADtvtAA72ewAPEQgAD//1ABDjgAARPogAEXOgABNRfQAThpUAE44rAAAAAAAB7QsABj0oAAbjjQAIAAAACHHIAAlCXQAJ110ACg47AAo44AAKT6UACs3jAAru8AALHHMAC7YNAAwAAAAAAAD//j0oAADHHQAA440AAY47AAI44AACuOUAAxxwAAMccwAEAAAAAAAAAABCYAAAd3gAAIS9AAFL2ABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+l7V//mlAAABS9gAAhL1//72hf//e0P//nHI//3tCwAAhL0AAQl7AAAAAAAGqqUAAxxwAAIS9QAG440AE44rAAIS9Q==","cmr7":"AUUAEgAAAH8AJgAQAAkABQBYAAoAAAAH2ZOgUgBwAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADwEsAAAB/AAAAdwAAAFsAAABTAAAAawAAAGMAAAB3AAAAYwAAAHcAAABjAAAAQ0BEKD9AAAA/QAAAg0AAAINAAAAEwAAACNwAACdAAAAnQAAAJkAAACdAAAAlgAAAa0AAABwYAAArQAAAYMAAAHTAAAAlUAAAhwAAAI8AAAB3iAAABMAEAAdABFwnQAAAf1wAACfMAAB/zAAAd0AAAAdABEgX4AAAF+AAACfAAAB2FAAABFwAAAzABFQEQAAAJ+AAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAmgAAAJoAAACaAAAAEwAAABNwAAAUcAAB0hAAAIRwAACNABGB3QAAAawAFMF8AAABjAAAAbwAE1FcAAABPAASQewAAAGsAAAATAAVcLwAAAHMABKhLAAVIiwAAAGsAAAB3AATUVwAEeHccAABnAAUwOwAAAGMABLhrAAAAawAUkJcAFJBrAASoawAkvEcAAAAH4AAAJ0AAAAfgAAAnQAAABsAAAAdABEQkwAUgO0AFCBzABQA7QAAAHMAAAAtARAgk3BVYO0AE6AbAAAAK3AAAN0AEZAdAAAB8wAToOMAE6CTABQg43AUIMNwAABTAAAAYwAAAFcAFKDjABSw0wBRkYMAUaDTAAAA03BR8HMAAACTANFiQwDAAJ0AAACbAAAAmwAAAAAAAAAAUstQAFqq4ABiilAAaabgAHJJUABz3HAAgghQAInn4ACRx1AAkcdwAJVVkACZprAAmabgAKGGUACllpAArXYgALFFUAC005AAvLMgAMEEUADEkpAAyCDgAMxyIADQw1AA1FGQANff4ADcMSAA379wAOCCUADiSXAA8EFQAPhh4AEDjpABBxzgASMMkAEjjpABJprgAAAAAAAddeAAYlMAAG444ACAAAAAhxxwAJL/AACddeAAnnoAAKDjkACk+lAArDDgAK7vAACxxyAAu2DgAMAAAAAAAA//4lMAAAxx4AAOOOAAGOOQAB56AAArjlAAMccgAEAAAAAAAAAAA++wAAcWAAAH35AAFHHgBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+tNL//ocbgABRx4AAffg//8EEP//ggf//oYX//4IIAAAffkAAPvwAAAAAAAGKKUAAvPQAAH34AAG444AEjjpAAH34A==","cmr8":"AUMAEgAAAH8AIwAQAAoABQBYAAoAAAAHfHtZBwCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADuEMAAAB3AAAAbwAAAFMAAABLAAAAYwAAAFsAAABvAAAAWwAAAG8AAABbAAAAO0BEKDdAAAA3QAAAd0AAAHdAAAAEwAAACOAAACtAAAArQAAAKkAAACtAAAApgAAAY0AAACAYAAArQAAAWMAAAGzAAAApUAAAewAAAIcAAABviAAABMAEAAdABFwrQAAAd1wAACvMAAB3zAAAb0AAAAdABEgX5AAAF+QAACvAAABt1AAABGAAAAzABFQEQAAAK+QAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAEwAAABOAAAAUgAABshAAAJSAAACdABGBvQAAAYwAFMFcAAABbAAAAZwAE1E8AAABHAASQcwAAAGMAAAATAAVcLwAAAGsABKhDAAVIfwAAAGMAAABvAATUTwAEeG8gAABfAAUwNwAAAFsABLhjAAAAYwAUkIsAFJBjAASoYwAkvD8AAAAH5AAAK0AAAAfkAAArQAAABsAAAAdABEQowAUgN0AFCCDABQA3QAAAIMAAAAtARAgo4BVYN0AE6AbAAAAK4AAAM0AEZAdAAAB0wAToNMAE6CjABQg04AUIMOAAABjAAAAcwAAAFgAFKDTABSwwwBRkWMAUaDDAAAAw4BR8IMAAACjANFiAwDAAK0AAACrAAAAqwAAAAAAAAAAS46AAFMcwABaqwAAYfUAAGnHgABqAGAAa0pgAHjkAACAckAAiACAAIulgACPjsAAlx0AAJ6rQACmOYAAqd6AALFswAC1VgAAuPsAALygAADAiUAAxHKAAMgXgADLvIAAz6XAANNKwADTjwAA1WGAAOKrgAD1bQAA+RIAARABAAETpgABF0sAAAAAAAAcccAAYMPAAG444ACAAAAAhxyAAJLYIACaqwAAnXXgAKDjoACk+mAAq67AAK7u4ACxxyAAu2CgAMAAAAAAAA//4MPAAAxxwAAOOOAAGOOgABqrAAArjkAAMccAADHHIABAAAAAAAAAAAPHIAAGzOAAB45AABQ44AbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//tHGP/6k+QAAUOOAAHjkP//Djj//4cc//6VVP/+HHAAAHjkAADxyAAAAAAABaqwAALVWAAB45AABuOOABEAEAAB45A=","cmr9":"AUMAEgAAAH8AJAAQAAkABQBYAAoAAAAHb7SLxwCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNUgAAAAAAAAAAAAAAAAAAAAAAAADsEcAAAB7AAAAcwAAAFcAAABPAAAAZwAAAF8AAABzAAAAXwAAAHMAAABfAAAAP0BEKDtAAAA7QAAAe0AAAHtAAAAEwAAACNwAAC9AAAAvQAAALkAAAC9AAAAtgAAAZ0AAACAYAAAvQAAAXMAAAHDAAAAtVAAAfwAAAIsAAABziAAABMAEAAdABFwvQAAAe1wAAC/MAAB7zAAAc0AAAAdABEgX4AAAF+AAAC/AAABx0AAABFwAAAzABFQEQAAAL+AAAC6AAAAugAAALoAAAC6AAAAugAAALoAAAC6AAAAugAAALoAAAC6AAAAEwAAABNwAAAUcAABwhAAAKRwAACtABGBzQAAAZwAFMFsAAABfAAAAawAE1FMAAABLAASQdwAAAGcAAAATAAVcMwAAAG8ABKhHAAVIgwAAAGcAAABzAATUUwAEeHMcAABjAAUwOwAAAF8ABLhnAAAAZwAUkI8AFJBnAASoZwAkvEMAAAAH4AAAL0AAAAfgAAAvQAAABsAAAAdABEQswAUgO0AFCCDABQA7QAAAJMAAAAtARAgs3BVYO0AE6AbAAAAK3AAAN0AEZAdAAAB4wAToOMAE6CzABQg43AUINNwAABjAAAAcwAAAFgAFKDjABSw0wBRkXMAUaDTAAAA03BR8IMAAACzANFiEwDAAL0AAAC7AAAAuwAAAAAAAAAASRYAAFBlAABXtAAAXvjgAGZSAABm6cAAZ8hAAHTwAAB1CVAAfD8AAIOOAACHMHAAit0AAJIsAACZewAAoMoAAKRscACru3AAr2gAALMKcAC2rOAAullwAL4GAADBqHAAxUrgAMj3cADMmeAAzKQAAM51QADbQgAA7YJwAPEk4AEHHAABCr5wAQ5g4AAAAAAAG6eQAF9OkABuOOAAgAAAAIcccACSF+AAl7QAAJ114ACg45AApPpQAKtJsACu7uAAsccgALtgsADAAAAAAAAP/99OkAAMccAADjjgABe0AAAY45AAK45AADHHIABAAAAAAAAAAAOnkAAGk+AAB08AABQMkAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGGABABlgAUAYYAFAG+ABYBjgAUAQYAGAG+ABQBlgAUAYYAFAC6ABoAsgAYAb4AGAGWABgB1gAYAcoAGAGGABgBBgAcAT4AFAEOABQBHgAWAUYAFAHmABQBlgAYAb4AGAHKABgBhgAYAQYAGgHWABgBYgAUAV4AFAEGABQBWgAWAWYAFAHSABQB1gAUAYoAFAHmABQB2gAWAd4AFAGiABYBrgAUAZYAIAG+ACAB4gAUAZIAIAGOACABxgAgAdoAFAGqACQB5gAWAd4AFAHSABQBDgAUAT4AFAEeABQBVgAUAUYAFAFSABgBZgAYAVoAHgFeAB4BqgAiASYAI//tuoP/6v4kAAUDJAAHTwP//FiD//4sQ//6hMP/+LEAAAHTwAADp4AAAAAAABXtAAAK9oAAB08AABuOOABBxwAAB08A=","cmsl10":"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","cmsl12":"AXgAEgAAAH8AIwAQAAoAOgBYAAoAAAAHfWgh0wDAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU0wAAAAAAAAAAAAAAAAAAAAAAADmD8CoAB3AAAAawGQAE8AAABHAxAAXwMwAFcCIABrAlAAVwDQAGsCUABXAgAAN0OUKDNBMAAzQTAAd0EwAHdBMAAEwAAACOAAACdAAAAnQPAAJkBwACdBUAAlgaAAc0AAABwYAAAnQkAAVMGwAGjBsAAlVBAAewIgAIcCIABriZAABMAEAAdB5FwnQAAAd1zgACfOwAB3znAAa0FgAAdB5EgX5yAAF+RQACfC0ABp0FAABGAAAAzAJFQEQAAAJ+cgACaCwAAmgsAAJoLAACaCwAAmgsAAJoLAACaCwAAmgsAAJoLAACaCwAAEwEAABOBAAAUgoABohOAAISAAACNDBGBrQcAAXwAFMFMCAABXAvAAYwGU1EsCIABDAqSQbwCwAF8DMAATA0VcKwKwAGcC9Kg/AAVIfwMwAF8DMABrAZTUSwIEeGshkABbAAUwMwIQAFcCpLhfAzAAXwN0kIsDdJBfA0SoXwOEvDsC8AAH52AAJ0NQAAflEAAnQDAABsGAAAdB5EQkwAUgM0BlCBzCNQAzQTAAHMGwAAtDlAgk4uVYM0AE6AbBgAAK4QAAL0I0ZAdBMAB0wAToMMAE6CTBdQgw4MUILOCAABTCkAAYwUAAFgCVKDDABSwswuRkVMLkaCzCYAAs4uR8HMHQACTChFiAwoAAJ0JAACbB8AAmwSAAAAAAAAARaEAAEyXgABTjgAAWm3QAGF7AABi34AAb2gAAHZegAB9VQAAgMTwAIRLgACLQgAAkjiAAJkvAACcnvAAo5VwAKccAACqi/AArfvQALGCcAC1CQAAuHjwALvo0AC/b3AAwt9QAML2AADErgAAyuwQANDjAADiP/AA5a/QAPqqAAD+GfABAYnQAAAAAAAY45AAXGQQAG448ACAAAAAhxyAAJCXkACTjgAAnXXwAKDjkACk+lAAqefAAK7u8ACxxxAAu2CwAMAAAAAAAA//3GQQAAxxwAAOOPAAE44AABjjkAArjjAAMccAADHHEABAAAAAAAAAAACq8AACOQAAAnIAAAL20AADtEAABQmwAAVCsAAFx1AABdaAAAXtUAAGjJAAByBwAAedgAAIb7AACL3wAAjDUAAI18AACW4QAAoTQAAKtkAAC0KwAAzNAAAM3BAADOlQAA1yUAANp7AADaywAA3HQAAOMYAADjlAAA5kgAAO54AADzsQAA9wMAAPlgAAD7RwABBcwAARrMAAEhNAABJREAASXwAAEutwABN/cAAUiMAAFY6AABXaQAAWMZAAF7RQABhIUAAZCcAAGZJQABms0AAcPPAAIABAACCjUAAjbFAAL3uABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AYYAEAGWABQBhgAUAb4AFgGOABQBBgAYAb4AFAGWABQBhgAUALoAGgCyABgBvgAYAZYAGAHWABgBygAYAYYAGAEGABwBPgAUAQ4AFAEeABYBRgAUAeYAFAGWABgBvgAYAcoAGAGGABgBBgAaAdYAGAFiABQBXgAUAQYAFAFaABYBZgAUAdIAFAHWABQBigAUAeYAFAHaABYB3gAUAaIAFgGuABQBlgAgAb4AIAHiABQBkgAgAY4AIAHGACAB2gAUAaoAJAHmABYB3gAUAdIAFAEOABQBPgAUAR4AFAFWABQBRgAUAVIAGAFmABgBWgAeAV4AHgGqACIBJgAj/+6Xw//r/iQABHaEAAb2g//8hMP//kJj//rHI//5CYAAAb2gAAN7QAAKqsAAFOOAAApxwAAG9oAAG448AD6qgAAG9oA==","cmsl8":"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","cmsl9":"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","cmsltt10":"AMEAEgAAAH8AAgAQAAwAAgACAAAAAAAH3+o8eACgAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNU0xUVAAAAAAAAAAAAAAAAAAAAADqAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAABOwQAATsEAAFQBAABWwQAAdAEAAHQBAABwAQAAdAEAAGwBAAB0AQAAQoEAAHQBAABUAQAAVAEAAGIBAAB0AQAAdAEAAHkBAABKAQAAdAFAAHQBAAB0AQAAfYEAAH2BAAB0AQAAdAEAAH1BAAB9QQAAWAEAAFyBAABGQQAAXIEAAEQBAAB9QQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAFQBAABWQQAAaMEAAFBBAABowQAAdAFAQHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdkEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAHQBAAB0AQAAdAEAAH1BAAB9QQAAfUEAAHQBAABBwQAAdAEAAFQBAAB0AQAAVAEAAHQBAABUAQAAdAEAAFbBAAB0AQAAdAEAAHbBAAB0AQAAdAEAAFQBAABUAQAAVAEAAFbBAABWwQAAVAEAAFQBAABkAQAAVAEAAFQBAABUAQAAVAEAAFbBAABUAQAAfUEAAH1BAAB9QQAAdAEAAHQBAAAAAAAAAhmYgAAAAAAAgAAAAOC2AAGOOMABqZlAAbjjgAIVVYACH0mAAiqqwAI23IACOOOAAkMgwAJDjoACccdAAqqqwALHHIAAAAA//zfSP/+tgr//xxyAADjjgABVVMAAVVVAAGFrQABxx0AAjjjAAMccwADjjoAAAAAAAHaFoBgAA6AYAAPAAKqsAAIZmIAAAAAAAAAAAAG444AEMzDAAhmYg==","cmss10":"AUkAEgAAAH8ANAAQAAsABQBOAAgAAAAHbSO9UgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADqF9AAAC7QAAAr0AAAHdAAACDQAAAm0AAAJ9AAACvQAAAn0AAAK9AAACfQAAAa0BEKFtAAABbQAAAt0AAALdAAAAEwAAACOQAAFNAAABTQAAAUkAAAFNAAABSAAAAh0AAADgcAABLQAAAnMAAAKzAAABRVAAAv0AAAMtAAACviAAABMAEAB9ABFxTQAAAu2AAAFPMAAC7zAAAq0AAAA9ABEgz6AAAM+gAAFPAAACt0AAADFgAACDABFQMQAAAU+gAAFKAAABSgAAAUoAAAFKAAABSgAAAUoAAAFKAAABSgAAAUoAAAFKAAAAMwAAADNgAAB0kAACshAAAQSQAAENABGCDQAAAh0AFCIdAAAB7QAAAo0AE0G9AAABnQASMg0AAAJtAAAATQAU0Q0AAAJdABKRfQAUgw0AAAJtAAACnQATQe0AEdKdYAAB/QAAAY0AAAItABLSTQAAAh0AUjMdAFIyHQASkh0AkuHNAAAAX6AAAU0AAABfoAABTQAAADwAAAA9ABEREwAT8V0AE5DjAAABXQAAAOMAAABtARAhQ5BUwV0AAAAcAAAALJAAAT0AEZAdAAACwwAAAVMAAAFDABORU5ATkVOQAACTAEAAswAAAKYAFAFTABQQ8wBAAjMAUZDzAAAA85BR4NMAAAFDANFjMwDAAU0AAAFLAAABTAAAAAAAAAAAPSfgAEREYABHHIAARxygAEn0sABOOQAAUccwAFVVYABXd6AAXHHQAGIiMABjjlAAb0oAAHHHMAB2C4AAeOOwAHsF0AB7BeAAfSgAAIAAIACERGAAiT6wAIqq0ACOOQAAkcdQAJVVgACY47AAnHHgAJxyAACjjmAApVWAAKqq0ACqquAArjkAAK7vIACwAFAAscdgALVVoAC447AAuOPQALxx4ADCIlAAxxygAMtg4ADQWzAA1VWAANxyAADgAFAA8cdgAPjj0AEAADAAAAAAABVVUABeuFAAcccgAIAAAACKqrAAkklQAJVVYACb4AAAoccgAKfSgACtNOAArergALHHIAC+OOAAwAAAAAAAD//euFAADHHQAA444AAVVWAAGOOgACAAAAArjjAAMccAADHHIABAAAAAAAAAAAOOMAAGZmAABxyAABHHIAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb//C2C//vd2wABHHIAAccd//+OOP/+qqoAAHHI//444wAAAAAABVVWAAKqqwABxx0ABxxyABAAAwABxx0=","cmss12":"AUsAEgAAAH8ANgAQAAsABQBOAAgAAAAHgs5SNgDAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADmF9AAADDQAAAt0AAAHNAAACPQAAAo0AAAKtAAAC3QAAAq0AAALdAAACrQAAAa0BEKFtAAABbQAAAv0AAAL9AAAAEwAAACOQAAFNAAABTQAAAUkAAAFNAAABSAAAAh0AAADgcAABLQAAAqMAAALTAAABRVAAAx0AAANNAAAC3iAAABMAEAB9ABFxTQAAAw2AAAFPMAADDzAAAs0AAABNABEgz6AAAM+gAAFPAAAC10AAAEFgAACDABFQQQAAAU+gAAFKAAABSgAAAUoAAAFKAAABSgAAAUoAAAFKAAABSgAAAUoAAAFKAAAAQwAAAENgAAB0kAAC0hAAARSQAAEdABGCPQAAAh0AFCItAAAB/QAAAp0AE0G9AAABnQASMj0AAAKNAAAAPQAU0Q0AAAJ9ABKRfQAUgy0AAAKNAAACvQATQe0AEdK9YAACDQAAAY0AAAJtABLSXQAAAh0AUjM9AFIyHQASkh0AkuHdAAAAX6AAAU0AAABfoAABTQAAAEwAAABNABERIwAT8V0AE5DjAAABXQAAAOMAAABtARAhQ5BUwV0AAAAcAAAALJAAAT0AEZAdAAAC4wAAAVMAAAFDABORU5ATkVOQAACTAEAAswAAAKYAFAFTABQQ8wBAAkMAUZDzAAAA85BR4NMAAAFDANFjUwDAAU0AAAFLAAABTAAAAAAAAAAAOvZQAEHs0ABEJbAARaEAAEhxsABMl4AAT7QAAFOOAABVLzAAWoSAAGAWgABhewAAbL1QAG9oAAByqlAAdaDQAHZegAB3/7AAeaDQAH1VAACAl1AAheywAIdn0ACLQgAAjl5QAJI4gACVVNAAl7OwAJkvAACfZ9AAoCWAAKFU0ACloLAApl5QAKccAACqXlAAqqowAKr2AACslzAAr7OwALRLUAC1CQAAuOMAAL2gsADC9gAAxjhQAMuNsADQ4wAA1xvQANl6sADrQbAA8vXQAPqqAAAAAAAAFL2wAF0nwABxxxAAgAAAAIqqsACSSVAAk44AAJudUAChxxAAp7QwAKzpAACtgLAAsccQAL440ADAAAAAAAAP/90nwAAMccAADjjwABOOAAAY45AAIAAAACuOMAAxxwAAMccQAEAAAAAAAAAAA3tAAAZEQAAG9oAAEWhABsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AZYAEAGGABABvgASAY4AEAEGABQBvgAQAZYAEAGGABAAugAWALIAFAG+ABABlgAQAdYAEAHKABABhgAQAQYAFAE+ABABDgAQAR4AEgFGABAB5gAUAZYAFAG+ABQBygAUAYYAFAEGABYB1gAUAWIAEAFeABABBgAQAVoAEgFmABABlgAYAb4AGAHiABABkgAYAY4AGAHGABgBygAQAeYAEgHeABAB0gAQAQ4AEAE+ABABHgAQAVYAEAFGABABUgAUAWYAFAFaAB4BXgAeAaoAGgEmABv/8UJv//AcgAAEWhAABvaD//5CY//6xyAAAb2j//kJgAAAAAAAFOOAAApxwAAG9oAAHHHEAD6qgAAG9oA==","cmss17":"AUoAEgAAAH8ANgAQAAoABQBOAAgAAAAHBdbGHwEUeuAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADbF9AAADDQAAAt0AAAHNAAACPQAAAo0AAAKtAAAC3QAAAq0AAALdAAACrQAAAa0BEKFtAAABbQAAAv0AAAL9AAAAEwAAACOAAAFNAAABTQAAAUkAAAFNAAABSAAAAh0AAADgcAABLQAAAqMAAALTAAABRVAAAx0AAANNAAAC3iAAABMAEAB9ABFxTQAAAw2AAAFPMAADDzAAAs0AAABNABEgz5AAAM+QAAFPAAAC10AAAEFgAACDABFQQQAAAU+QAAFLAAABSwAAAUsAAAFLAAABSwAAAUsAAAFLAAABSwAAAUsAAAFLAAAAQwAAAENgAAB0gAAC0hAAARSAAAEdABGCPQAAAh0AFCItAAAB/QAAAp0AE0G9AAABnQASMj0AAAKNAAAAPQAU0Q0AAAJ9ABKRfQAUgy0AAAKNAAACvQATQe0AEdK9YAACDQAAAY0AAAJNABLSbQAAAh0AUjM9AFIyHQASkh0AkuHdAAAAX5AAAU0AAABfkAABTQAAAEwAAABNABERIwAT8V0AE5DjAAABXQAAAOMAAABtARAhQ4BUwV0AAAAcAAAALIAAAT0AEZAdAAAC4wAAAVMAAAFDABORU4ATkVOAAACTAEAAswAAAKYAFAFTABQQ8wBAAlMAUZDzAAAA84BR4NMAAAFDANFjUwDAAU0AAAFKAAABTAAAAAAAAAAAOP7gAD+uwABCQSAAQt8wAEXbEABJjyAATL+gAFA/EABR/tAAVu8AAFxIkABdnuAAaIagAGr+wABufkAAcV+gAHGusABzbnAAdS4gAHhekAB73hAAgM5AAII+4ACFvnAAiO7QAIxuYACPnsAAkoAwAJMeQACZfyAAmc4wAJs+0ACf4AAAoC8QAKB+IACj/ZAAo/2gAKTQQACmj/AAqcBwAK2O4ACt3fAAsV1gALZNoAC7PdAAvr1QAMOtcADInaAAzv6AANHf8ADiv0AA6b4wAPC9MAAAAAAAFJOAAFsHMABuNLAAf/vAAIcaYACNsaAAkDzwAJmc4ACg4oAAp7mgAKfmsACoIwAAsccgAL46AAC/xQAAAAAP/9sLcAAMcuAADf3gABBBMAAY5bAAIBlQACuR8AAxy1AAP8kwAAAAAAADV/AABgTAAAav8AAQt9AGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//xwEv/8JgAAAQt9AAGr+///lQH//r8EAABq///+VAUAAAAAAAUD8QACgfgAAav7AAbjSwAPC9MAAav7","cmss8":"AUQAEgAAAH8ALwAQAAsABQBOAAgAAAAHxnM2kQCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADuFdAAACnQAAAm0AAAGtAAAB3QAAAi0AAAI9AAACbQAAAj0AAAJtAAACPQAAAY0BEKFNAAABTQAAAo0AAAKNAAAAEwAAACOQAAEtAAABLQAAASkAAAEtAAABKAAAAd0AAADQcAABDQAAAjMAAAJjAAABJUAAAq0AAALdAAACbiAAABMAEABtABFxLQAAAp2AAAEvMAACnzAAAl0AAAA9ABEgv6AAAL+gAAEvAAACZ1AAADFgAABzABFQMQAAAS+gAAEqAAABKgAAASoAAAEqAAABKgAAASoAAAEqAAABKgAAASoAAAEqAAAAMwAAADNgAABkkAACYhAAAPSQAAD9ABGB3QAAAd0AFCHdAAABvQAAAj0AE0GdAAABfQASMd0AAAItAAAAPQAU0P0AAAIdABKRXQAUgr0AAAItAAACTQATQb0AEdJNYAABzQAAAW0AAAH9ABLSDQAAAd0AUjLNAFIx3QASkd0AkuGtAAAAT6AAAS0AAABPoAABLQAAADwAAAA9ABERAwAT8T0AE5DTAAABPQAAANMAAABdARAhI5BUwT0AAAAcAAAALJAAAR0AEZAdAAACcwAAATMAAAEjABORM5ATkTOQAACDAEAAowAAAJYAFAEzABQQ4wBAAeMAUZDjAAAA45BR4MMAAAEjANFi4wDAAS0AAAErAAABLAAAAAAAAAAAQOPAAEhyAABLjoAATxzAAFMcwABWOSAAWqsAAFzj4ABiOUAAaESgAGnHgAB2OUAAeOQAAH1VwACAckAAgqsgAITkAACIAIAAjHJAAJHHoACUAKAAlx0AAJuO4ACeq0AAox0gAKY5gACtx8AAsACgALVWAAC5x8AAucfgALqrYAC85EAAwACgAMRygADI5GAAzjmgANOPAADYAMAA3VYgAOKrgADqOcAA7VYgAQDkgAEIcsABEAEAAAAAAAAXHIAAYaLAAHHHIACAAAAAiqrAAJJJYACaqwAAnVVAAKHHIACoAAAArhiAAK9t4ACxxyAAvjjgAMAAAAAAAA//4aLAAAxxwAAOOOAAGOOgABqrAAAg44AAK45AADHHAAAxxyAAQAAAAAAAAAADxyAABszgAAeOQAAS46AGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//vxxP/7nG4AAS46AAHjkP//hxz//pVUAAB45P/+HHAAAAAAAAWqsAAC1VgAAeOQAAcccgARABAAAeOQ","cmss9":"AUoAEgAAAH8ANgAQAAoABQBOAAgAAAAH0m/HdwCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1MAAAAAAAAAAAAAAAAAAAAAAADsGNAAADDQAAAt0AAAHtAAACLQAAAo0AAAKdAAAC3QAAAp0AAALdAAACnQAAAb0BEKF9AAABfQAAAv0AAAL9AAAAEwAAACOAAAFdAAABXQAAAVkAAAFdAAABWAAAAk0AAADgcAABPQAAApMAAALTAAABVVAAAx0AAANNAAAC3iAAABMAEAB9ABFxXQAAAw2AAAFfMAADDzAAAs0AAAA9ABEgz5AAAM+QAAFfAAAC10AAADFgAACDABFQMQAAAV+QAAFaAAABWgAAAVoAAAFaAAABWgAAAVoAAAFaAAABWgAAAVoAAAFaAAAAMwAAADNgAAB0gAAC0hAAARSAAAEdABGCLQAAAk0AFCI9AAAB/QAAAq0AE0HNAAABrQASMi0AAAKNAAAATQAU0S0AAAJ9ABKRjQAUgy0AAAKNAAACvQATQg0AEdK9YAACHQAAAZ0AAAJdABLSbQAAAk0AUjM9AFIyTQASkk0AkuHdAAAAX5AAAV0AAABfkAABXQAAADwAAAA9ABERMwAT8W0AE5DjAAABbQAAAPMAAABtARAhU4BUwW0AAAAcAAAALIAAAU0AEZAdAAAC4wAAAWMAAAFTABORY4ATkWOAAACTAEAAswAAAKYAFAFjABQRAwBAAlMAUZEDAAABA4BR4NMAAAFTANFjUwDAAV0AAAFbAAABXAAAAAAAAAAAPtBwAEYfcABJFgAASXsgAExxsABQZQAAU1uQAFe0AABZ4EAAXwMAAGTb4ABmUgAAcl6QAHTwAAB08CAAeUhwAHw/AAB8cZAAfmtAAICXcACDjgAAh+ZwAI0JQACPaAAAkiwAAJa3AACZewAAngYAAKDKAAChLyAAqBkAAKhLkACqd8AAr2gAAK+akACvzSAAs8BwALTv4AC3HCAAuhKwAL4GAAC+OJAAwl5wAMeBQADMpAAA0PxwANYfQADbQgAA4sOQAOXssAD44yAA//+QAQccAAAAAAAAFh+QAGAkcABxxyAAgAAAAIqqsACSSVAAl7QAAJzrIAChxyAAp4GQAK2aAACuyXAAsccgAL444ADAAAAAAAAP/+AkcAAMccAADjjgABe0AAAY45AAIGUgACuOQAAxxyAAQAAAAAAAAAADp5AABpPgAAdPAAASRZAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//wS+f/7vaQAASRZAAHTwP//ixD//qEwAAB08P/+LEAAAAAAAAV7QAACvaAAAdPAAAcccgAQccAAAdPA","cmssbx10":"AT4AEgAAAH8ALAANAAsABQBOAAgAAAAH8WtBSACgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNU1NCWAAAAAAAAAAAAAAAAAAAAADqF6AAACWgAAAioAAAG6AAAB2gAAAgoAAAIKAAACKgAAAgoAAAIqAAACCgAAAaoBEKGKAAABigAAAkoAAAJKAAAAEwAAACOQAAE6AAABOgAAATgAAAE6AAABOQAAAdoAAADQcAABagAAAgMAAAIjAAABNUAAAmoAAAKqAAACKyAAABMAEAB6ABFxSgAAAlqAAAE8MAACjDAAAhoAAAA6ABEgvKAAALygAAE8AAACJ2AAADFQAABzABFQMQAAATygAAE6AAABOgAAAToAAAE6AAABOgAAAToAAAE6AAABOgAAAToAAAE6AAAAMwAAADNQAAB0kAACIhAAAQSQAAEKABGB2gAAAdoAFCHaAAABygAAAgoAE0GqAAABmgASMdoAAAIKAAAASgAU0QoAAAH6ABKRegAUgnoAAAIKAAACCgATQcoAEdIKUAABygAAAZoAAAHaABLR+gAAAdoAUjKaAFIx2gASkdoAkuG6AAAAbKAAAUoAAABsoAABOgAAADoAAAA6ABEREwAT8VoAE5DTAAABWgAAAPMAAABaARAhM5BUwVoAAAAaAAAAKpAAASoAEZAaAAACMwAAAVMAAAEzABORU5ATkVOQAACDAEAAowAAAJYAFAFTABQQ4wBAAeMAUZDjAAAA45BR4MMAAAEzANFiswDAAToAAAE6AAABOgAAAAAAAAAAQWwwAEk+sABOOQAAVJ9gAFYLgABX0qAAXd4AAF9KIABnd6AAa/KAAG2DAAB59NAAfSgAAIAAMACC2GAAhPqAAIZmoACH0rAAjM0AAI7vIACPpTAAkLYwAJSfgACWC6AAnHIAAKREgACsFwAAs+mAALu8AAC+lDAAw46AAMthAADUn6AA2wYAAN3eMADkRKAA6qsAAPJ9gAD6UAABB3RQAQn1AAERx4ABGZoAAAAAAAAhbCAAaAAAAHVVUACAAAAAjjjgAJbboACd3gAAoqqwAKNFUACxxyAAvjjgAMAAAAAAAA//6AAAAAxx0AAOOOAAGOOgABsFsAAd3gAAK44wADHHAAAxxyAAQAAAAAAAAAAD6VAABwowAAfSgAATjlAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//vpPf/7T6MAATjlAAH0oP//gtj//oiIAAB9KP/+C2AAAAAAAAXd4AAC7vAAAfSgAAdVVQARmaAAAfSg","cmssdc10":"AUwAEgAAAH8AOgANAAsABQBOAAgAAAAHcNrjaQCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNU1NEQwAAAAAAAAAAAAAAAAAAAADqGqAAADOgAAAwoAAAIKAAACSgAAAroAAALKAAADCgAAAsoAAAMKAAACygAAAdoBEKGaAAABmgAAAyoAAAMqAAAAEwAAACOQAAFqAAABagAAAWkAAAFqAAABaAAAAmoAAADgcAABWgAAAsMAAAMDAAABZVAAA0oAAAOKAAADCyAAABMAEAB6ABFxegAAAzqAAAFsQAADbEAAAvoAAAA6ABEgzKAAAMygAAFsAAADBjAAADFgAACDABFQMQAAAWygAAFqAAABagAAAWoAAAFqAAABagAAAWoAAAFqAAABagAAAWoAAAFqAAAAMwAAADNgAAB0kAADAhAAARSQAAEaABGCSgAAAmoAFCJaAAACGgAAAtoAE0HqAAABygASMkoAAAK6AAAASgAU0SoAAAKqABKRqgAUg1oAAAK6AAAC6gATQioAEdLqYAACOgAAAboAAAKKABLSmgAAAmoAUjN6AFIyagASkmoAkuH6AAAAbKAAAXoAAABsoAABagAAADoAAAA6ABERMwAT8YoAE5DjAAABigAAAQMAAABaARAhg5AUwYoAAAAaAAAAKpAAAUoAEZAaAAADEwAAAYMAAAFjABORg5ATkYOQAACTAEAAswAAAKcAFAGDABQQ8wBAAnMAUZDzAAAA85BR4NMAAAFjANFjkwDAAWoAAAFqAAABagAAAAAAAAAAOC0wAD7uoABDjgAASIhgAEpPYABLBYAATjiwAFEQ0ABSIdAAWIhQAF050ABek6AAaT4wAGwWYABuOGAAcC0wAHLX0ABzMtAAc+jQAHT50AB30lAAeZkwAHmZUAB7uzAAgWugAIONsACHHAAAik8gAI3dYACREIAAlJ7QAJVU0ACbYDAAm7swAJ0nMACiIaAAonygAKLXoACkQ6AApPmwAKgtAACpmQAArYJQAK+kYACv/2AAsnyAALd20AC9JzAAv0kwAMT5oADKqgAA0cZgANYKsADhIyAA5mWgAOzMAADzMmAAAAAAABsFsABpdTAAeOOgAIccYACOOQAAlJ8AAJtuAACiauAAo44wALHHIAC8cdAAwAAAAAAAD//iWNAACqqwAA2CoAAOOOAAFVVgABxx0AAlVWAAKqqgACqqsAA446AAAAAAAANgsAAGFGAABsFgABDjgAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb//H0t//v6UwABDjgAAbBa//+T6v/+u70AAGwW//5PpgAAAAAABRENAAKIhgABsFoAB446AA8zJgABsFo=","cmssi10":"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","cmssi12":"AX8AEgAAAH8ANwAQAAsAOABOAAgAAAAH2gMizQDAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NJAAAAAAAAAAAAAAAAAAAAAADmF9DIADHQAAAu0FQAHNAAACPQwAAo0HAAKtC8AC7QjAAq0DQALtCMACrQaAAa0N0KFtCoABbQoAAw0KgAMNCgAAEwMAACOTAAFNAAABTQlAAUkHQAFNCcABSAfAAr0AAADgcAABLQlAAqMEwALjBMABRVOAAy0LwANdC8AC7iVAABMAEAB9BBFxTQBAAx2DwAFPOwADHzJAAt0CgABNBhEgz6xAAM+hgAFPC4AC50GAAEFgAACDARFQQQAAAU+sQAFKCwABSgsAAUoLAAFKCwABSgsAAUoLAAFKCwABSgsAAUoLAAFKCwAAQwHAAENhwAB0kMAC4hPAARSQAAEdC1GCPQVAAh0AFCItBoAB/QvAAp0FU0G9C8ABnQySMj0LwAKNBwAAPQyU0Q0HAAJ9C9KRfQAUgz0HAAKNBwACzQVTQe0GkdLNZUACDQaAAY0JQAJtDJLSXQcAAh0NUjNNDVIyHQySkh0NkuHdC8AAX60AAU0MwABfqEABTQZAAEwFgABNBhERIwCT8V0CE5DjBsABXQoAAOMEwABtDdAhQ5rUwV0BQAAcCkAALJmAAT0G0ZAdCgAC8wFAAVMBQAFDBJORU5LTkVOTAACTCsAAswXAAKYFFAFTAxQQ8wrAAkMK0ZDzCQAA85rR4NMIAAFDB5FjYweAAU0JQAFLCIABTARAAAAAAAAAOvZQAEHs0ABEJbAARaEAAEhxsABMl4AAT7QAAFOOAABVLzAAWoSAAGAWgABhewAAbL1QAG9oAAByqlAAdaDQAHZegAB3/7AAeaDQAH1VAACAl1AAheywAIdn0ACLQgAAjl5QAJI4gACVVNAAl7OwAJkvAACfZ9AAoCWAAKFU0ACloLAApl5QAKccAACqXlAAqqowAKr2AACslzAAr7OwALRLUAC1CQAAt8QAALjjAAC9oLAAwvYAAMY4UADLjbAA0OMAANcb0ADZerAA60GwAPL10AD6qgAAAAAAABS9sABdJ8AAcccQAIAAAACKqrAAkklQAJOOAACbnVAAoccQAKe0MACs6QAArYCwALHHEAC+ONAAwAAAAAAAD//dJ8AADHHAAA448AATjgAAGOOQACAAAAArjjAAMccAADHHEABAAAAAAAAAAAFuwAADd3AABLBQAAUhEAAFdfAABqQAAAaz8AAH8cAACCbwAAig8AAKCIAAC3GQAAvuUAAMztAADNZwAA9E8AAQgkAAEO3AABGIwAASnRAAE30AABP9gAAUAZAAFE5wABS8AAAVYMAAFWYQABWjwAAV3kAAFejAABah0AAWrEAAFrywABbTwAAXRHAAF3zQABfckAAYI4AAGJpAABkMEAAZUtAAGaPAABuqUAAcrvAAHjrwAB5dwAAe0xAAIOnQACHZAAAiTlAAJGUQACjPgAApRNAALA3QADcx0AbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb//FCb//wHIAABFoQAAb2g//+QmP/+scgAAG9o//5CYAADZqAABTjgAAKccAABvaAABxxxAA+qoAABvaA=","cmssi17":"AX4AEgAAAH8ANwAQAAoAOABOAAgAAAAHoI/udQEUeuAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NJAAAAAAAAAAAAAAAAAAAAAADbF9DIADHQAAAu0FwAHNAAACPQwAAo0HgAKtC8AC7QjAAq0DQALtCMACrQcAAa0N0KFtCoABbQpAAw0KgAMNCkAAEwMAACODAAFNAAABTQmAAUkIAAFNCgABSAhAAs0AAADgcAABLQmAAqMEwALjBMABRVPAAy0LwANdC8AC7iXAABMAEAB9BFFxTQBAAx2DgAFPOwADHzKAAt0CQABNBtEgz5xAAM+RgAFPC4AC50GAAEFgAACDANFQQQAAAU+cQAFLCwABSwsAAUsLAAFLCwABSwsAAUsLAAFLCwABSwsAAUsLAAFLCwAAQwHAAENhwAB0gUAC4hOAARSAAAEdC1GCPQXAAh0AFCItBwAB/QvAAp0F00G9C8ABnQySMj0LwAKNB4AAPQyU0Q0HgAJ9C9KRfQAUgz0HgAKNB4ACvQXTQe0HEdK9ZcACDQcAAY0JgAJNDJLSbQeAAh0NUjNNDVIyHQySkh0NkuHdC8AAX50AAU0MwABfmUABTQZAAEwFgABNBtERIwCT8V0CE5DjBgABXQpAAOMEwABtDdAhQ4rUwV0BAAAcCcAALIkAAT0GEZAdCkAC8wEAAVMBAAFDBJORU4LTkVODAACTCsAAswVAAKYFFAFTAxQQ8wrAAlMK0ZDzCIAA84rR4NMHQAFDBpFjYwaAAU0JgAFKB8ABTAQAAAAAAAAAOP7gAD+uwABCQSAAQt8wAEXbEABJjyAATL+gAFA/EABR/tAAVu8AAFxIkABdnuAAaIagAGr+wABufkAAcV+gAHGusABzbnAAdS4gAHhekAB73hAAgM5AAII+4ACFvnAAiO7QAIxuYACPnsAAkoAwAJMeQACZfyAAmc4wAJs+0ACf4AAAoC8QAKB+IACj/ZAAo/2gAKTQQACmj/AAqcBwAK2O4ACt3fAAsV1gALMGgAC2TaAAuz3QAL69UADDrXAAyJ2gAM7+gADR3/AA4r9AAOm+MADwvTAAAAAAABSTgABbBzAAbjSwAH/7wACHGmAAjbGgAJA88ACZnOAAoOKAAKe5oACn5rAAqCMAALHHIAC+OgAAv8UAAAAAD//bC3AADHLgAA394AAQQTAAGOWwACAZUAArkfAAMctQAD/JMAAAAAAAA4dQAAOZcAAFBnAABYVQAAXN8AAG6iAABvbQAAgCUAAITTAACG1wAAoD0AALSQAADDTgAAypQAANIXAAEFiAABBjcAAQZbAAEUzgABITQAATaaAAE7BwABPDkAAUwAAAFR4QABUqEAAVU7AAFadQABXhwAAWDCAAFkbAABZQcAAWntAAFsGQABeLAAAXmUAAF68AABhpwAAYoKAAGYuAABml4AAaQ9AAGsTAAB0AQAAeOvAAHrsQAB8ZsAAhG0AAIhMQACJxoAAkczAAKMLwACkhkAArzmAANoFwBsgACATIABAGkADABmAAsAbAANACeAAgA/gAIAIYACACmAAoBdgAIAaQAOAGwADwAngAIAP4ACACGAAgApgAKAXYACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD4AZYAEAGGABABvgASAY4AEAEGABQBvgAQAZYAEAGGABAAugAWALIAFAG+ABABlgAQAdYAEAHKABABhgAQAQYAFAE+ABABDgAQAR4AEgFGABAB5gAUAZYAFAG+ABQBygAUAYYAFAEGABYB1gAUAWIAEAFeABABBgAQAVoAEgFmABABlgAYAb4AGAHiABABkgAYAY4AGAHGABgBygAQAeYAEgHeABAB0gAQAQ4AEAE+ABABHgAQAVYAEAFGABABUgAUAWYAFAFaAB4BXgAeAaoAGgEmABv/8cBL//CYAAAELfQABq/v//5UB//6/BAAAav///lQFAANmoAAFA/EAAoH4AAGr+wAG40sADwvTAAGr+w==","cmssi8":"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","cmssi9":"AX0AEgAAAH8ANwAQAAoANwBOAAgAAAAHK6GXFwCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NJAAAAAAAAAAAAAAAAAAAAAADsGNDEADHQAAAu0FAAHtAAACLQvAAo0GQAKdC4AC7QiAAp0DAALtCIACnQaAAb0NkKF9CgABfQnAAw0KAAMNCcAAEwLAACOCwAFdAAABXQjAAVkGwAFdCYABWAhAAr0AAADgcAABPQjAApMEgALjBIABVVNAAy0LgANdC4AC7iUAABMAEAB9A9FxXQAAAx2DgAFfOsADHzIAAt0BwAA9BVEgz5wAAM+RgAFfCwAC50GAADFgAACDARFQMQAAAV+cAAFaCsABWgrAAVoKwAFaCsABWgrAAVoKwAFaCsABWgrAAVoKwAFaCsAAMwFAADNhQAB0gIAC4hOAARSAAAEdC1GCLQUAAk0AFCI9BoAB/QuAAq0FE0HNC4ABrQxSMi0LgAKNBkAATQxU0S0GQAJ9C5KRjQAUgz0GQAKNBkACzQUTQg0GkdLNZQACHQaAAZ0IwAJdDFLSbQZAAk0NEjNNDRIyTQxSkk0NUuHdC4AAX5zAAV0MgABfl0ABXQXAADwGAAA9BVERMwBT8W0CU5DjBwABbQnAAPMEgABtDZAhU4qUwW0AwAAcCkAALIlAAU0HEZAdCcAC8wDAAWMAwAFTBFORY4KTkWOCwACTCoAAswWAAKYE1AFjAtQRAwqAAlMKkZEDCQABA4qR4NMIAAFTB5FjYweAAV0IwAFbB8ABXAQAAAAAAAAAPtBwAEYfcABJFgAASXsgAExxsABQZQAAU1uQAFe0AABZ4EAAXwMAAGTb4ABmUgAAcl6QAHTwAAB08CAAeUhwAHw/AAB8cZAAfmtAAICXcACDjgAAh+ZwAI0JQACPaAAAkiwAAJa3AACZewAAngYAAKDKAAChLyAAqBkAAKhLkACqd8AAr2gAAK+akACvzSAAs8BwALTv4AC3HCAAuhKwAL4GAAC+OJAAwfBwAMJecADHgUAAzKQAAND8cADWH0AA20IAAOLDkADl7LAA+OMgAP//kAEHHAAAAAAAABYfkABgJHAAcccgAIAAAACKqrAAkklQAJe0AACc6yAAoccgAKeBkACtmgAArslwALHHIAC+OOAAwAAAAAAAD//gJHAADHHAAA444AAXtAAAGOOQACBlIAArjkAAMccgAEAAAAAAAAAAApRAAAPmAAAEn1AABMiQAAYC4AAGS5AAB2TgAAfOcAAIJEAAClVwAArAkAALlcAADDDAAA0gcAAOerAAEIKQABDtwAARwgAAElZQABMkkAATnXAAE8xwABPrcAAUKiAAFJpQABUIQAAVDbAAFULAABY+QAAWQUAAFkhQABZd4AAWZAAAFuvgABcrsAAXdAAAF7hQABgokAAYWyAAGMBAABlM4AAb1rAAHEuwAB3ZAAAeOuAAHnqwACCr4AAhgJAAIiIgACRTcAAoz5AAKXFAACxdkAA4D0AGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBlgAQAYYAEAG+ABIBjgAQAQYAFAG+ABABlgAQAYYAEAC6ABYAsgAUAb4AEAGWABAB1gAQAcoAEAGGABABBgAUAT4AEAEOABABHgASAUYAEAHmABQBlgAUAb4AFAHKABQBhgAUAQYAFgHWABQBYgAQAV4AEAEGABABWgASAWYAEAGWABgBvgAYAeIAEAGSABgBjgAYAcYAGAHKABAB5gASAd4AEAHSABABDgAQAT4AEAEeABABVgAQAUYAEAFSABQBZgAUAVoAHgFeAB4BqgAaASYAG//wS+f/7vaQAASRZAAHTwP//ixD//qEwAAB08P/+LEAAA2agAAV7QAACvaAAAdPAAAcccgAQccAAAdPA","cmssq8":"AUYAEgAAAH8ANQAPAAgABQBOAAgAAAAHS3RFbwCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNU1NRAAAAAAAAAAAAAAAAAAAAAADuF6AAADCgAAAsoAAAGaAAACSgAAAhoAAAKaAAACygAAApoAAALKAAACmgAAAYsBEKFbAAABWwAAAusAAALrAAAAEwAAACNgAAE7AAABOwAAATYAAAE7AAABNwAAAfsAAADgQAABKwAAApMAAALDAAABNTAAAxoAAAM6AAACzSAAABMAEABrABFxOwAAAwtQAAE+MAADDjAAAqsAAABLABEgznAAAM5wAAE+AAACzGAAAEFgAACDABFQQQAAAT5wAAE4AAABOAAAATgAAAE4AAABOAAAATgAAAE4AAABOAAAATgAAAE4AAAAQwAAAENgAABkYAACwhAAARRgAAEbABGCSwAAAfoAFCI6AAAB6gAAAnoAE0HKAAABqgASMkoAAAIaAAAAOgAU0QoAAAJqABKRegAUgvoAAAIaAAACugATQdoAEdK6YAACKgAAAWoAAAKKABLSCgAAAfoAUjMqAFIx+gASkfoAkuG6AAAAXnAAATsAAABecAABOwAAAEsAAABLABEREwAT8UsAE5DjAAABSwAAAOMAAAB7ARAhQ2AUwUsAAAAbAAAAK2AAASsAEZAbAAAC0wAAAUMAAAEzABORQ2ATkUNgAACTAEAAswAAAKkAFAFDABQQ8wBAAlMAUZDzAAAA82BR4NMAAAEzANFjQwDAATsAAAE7AAABOwAAAAAAAAAARxygAFAAQABRx0AAWOOgAFo5AABaqsAAYcdAAGqqwABqquAAc45AAHqqwAB8ceAAicdAAI45AACOOSAAk45gAJccoACXHMAAoAAgAKAAQACo48AAscdAALVVgAC6quAAvHIAAL45IADDjmAAxxygAMjjwADMcgAAzjkgAM8cwADQAEAA0OPAANHHYADVVYAA1VWgANccwADjjoAA5VWAAOccoADwAEAA9xygAPjjwAD44+ABAcdgAQVVoAEKquABEABAASccwAEzjoABQABAAAAAAAAY44AAbgAAAIVVYACOOOAAlxyAAKaqwACn/+AAqOOAAKtuAACvHIAAsccgALHHQAC4ACAAw45AAAAAD//fxwAACOOgABHHIAAfHIAAI44AACOOQAA1VUAAAAAAAARxwAAIAAAACOOgABY44AbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb/+442//s44AABY44AAjjk//9xxv/+VVQAAI46//3HHAAAAAAABqqsAANVVgACOOQACFVWABQABAACOOQ=","cmssqi8":"AXYAEgAAAH8ANgAPAAgANABOAAgAAAAHnQUCAQCAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNU1NRSQAAAAAAAAAAAAAAAAAAAADuF6C0ADGgAAAtoEwAGaAAACSgrAAhoFAAKqCkAC2geAAqoCwALaB4ACqgXAAYsM0KFbCMABWwgAAvsIwAL7CAAAEwOAACNjgAE7AAABOwdAATYHAAE7BkABNwhAAnsAAADgQAABKwdAAqMFgALTBYABNTJAAyoKQANKCkAC3STAABMAEABrA9FxOwAAAxtUAAE+OYADHjFAArsDQABLBFEgznsAAM5xgAE+CgAC3GGAAEFgAACDANFQQQAAAT57AAE4CYABOAmAATgJgAE4CYABOAmAATgJgAE4CYABOAmAATgJgAE4CYAAQwCAAENggABkYcAC0hQAARRgAAEbCpGCSwVAAfoAFCI6BcAB6gpAAooE00HKCkABqgtSMkoKQAIaBQAAOgtU0QoFAAJqClKRegAUgwoFAAIaBQACygTTQdoF0dLKZMACKgXAAWoGgAKaC1LSCgUAAfoMUjM6DFIx+gtSkfoMkuG6CkAAXnwAATsLwABedIABOwYAAEsEQABLBFEREwBT8UsCE5DjCQABSwgAAOMFgAB7DNAhQ2OUwUsBAAAbCMAAK2gAASsJEZAbCAAC4wEAAUMBAAEzBtORQ2KTkUNjgACTC4AAswiAAKkH1AFDA5QQ8wuAAlMLkZDzCcAA82uR4NMJwAEzCVFjUwlAATsHQAE7B0ABOwMAAAAAAAAARxygAFAAQABRx0AAWOOgAFo5AABaqsAAYcdAAGqqwABqquAAc45AAHqqwAB8ceAAicdAAI45AACOOSAAk45gAJccoACXHMAAoAAgAKAAQACo48AAscdAALVVgAC6quAAvHIAAL45IADDjmAAxxygAMjjwADMcgAAzjkgAM8cwADQAEAA0OPAANHHYADVVYAA1VWgANccwADa0aAA446AAOVVgADnHKAA8ABAAPccoAD448AA+OPgAQHHYAEFVaABCqrgARAAQAEnHMABM46AAUAAQAAAAAAAGOOAAG4AAACFVWAAjjjgAJccgACmqsAAp//gAKjjgACrbgAArxyAALHHIACxx0AAuAAgAMOOQAAAAA//38cAAAjjoAARxyAAHxyAACOOAAAjjkAANVVAAAAAAAADFCAABTrAAAVIAAAFSIAABjnAAAY54AAGOsAABp1gAAkCIAAJSAAACbigAAo7YAAKkAAAC+VgAA3JgAAOfeAADq0gABA7oAARKmAAEThgABGP4AASneAAEwbAABMVQAATHuAAE3FgABPWoAAT3sAAFAKAABTjQAAVOuAAFVfAABZgIAAXAeAAF5CgABjJAAAaZ4AAGwJAABtzoAAcO6AAHFTgAB464AAe/6AAIK1gACDGwAAgyQAAJAKAACmRAAApqkAALTiAADwCgAbIAAgEyAAQBpAAwAZgALAGwADQAngAIAP4ACACGAAgApgAKAXYACAGkADgBsAA8AJ4ACAD+AAgAhgAIAKYACgF2AAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+AGWABABhgAQAb4AEgGOABABBgAUAb4AEAGWABABhgAQALoAFgCyABQBvgAQAZYAEAHWABABygAQAYYAEAEGABQBPgAQAQ4AEAEeABIBRgAQAeYAFAGWABQBvgAUAcoAFAGGABQBBgAWAdYAFAFiABABXgAQAQYAEAFaABIBZgAQAZYAGAG+ABgB4gAQAZIAGAGOABgBxgAYAcoAEAHmABIB3gAQAdIAEAEOABABPgAQAR4AEAFWABABRgAQAVIAFAFmABQBWgAeAV4AHgGqABoBJgAb/+442//s44AABY44AAjjk//9xxv/+VVQAAI46//3HHAADZqAABqqsAANVVgACOOQACFVWABQABAACOOQ=","cmsy10":"ARkAEgAAAH8ALAAPABAAEgAHAAcAAAAWISIsmgCgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADqIKgAAANCAAAgqAAACGQAACCoAAAIQgAAIKgAACCoAAAgqAAAIKgAACCoAAAgqAAAIKgAACrdAAAIQgAACEIAACBTAAAgUwAAILsAACC7AAAguwAAILsAACC7AAAguwAAICEAACB1AAAghgAAIIYAACqGAAAqhgAAIIYAACCGAAAqIQAAKiEAAAjcAAAI3AAAKiEAACrcAAAq3AAAIFMAACohAAAqIQAAENwAABDcAAAqIQAAKtwAACrcAAAgMAAAApAAACowAAAUhgAAFIYAACjdAAAo3QAAAdwAAAEhAAAN0AAADdAAABQwAAAI5wAAG9AAABvQAAAg0AAAINAAABDQAAAiwAEGE8ARBAnAFQQfwA0CCsAtAxrAMQMOyRkDJsAFAwvAHQAWyUEFHsAJARfAAQQrwAEEJMA9AiHADQMYwCkCI8kBAyfAAQIPwCEEDMBFABLAMQIRwCkAKcApAhnAOQQVySkCHMAlBBSQAAAUkAAAFJAAABSQAAAUkAAAENAAABDQAAAG7gAABu4AAAbuAAAG7gAACO4AAAjuAAAE7gAABO4AAAPuAAAI7gAACO4AABDuAAAI7gAAA9wAACUfAAAdwAAAJcAAAAXdNAAUkAAAFJAAACC7AAAguwAAB90AAAbdAAAG3QAAEN0AACDaAAAg2gAAINoAACDaAAAAAAAAAAAAAAAEZmYABHHIAAY45QAGqq0ABxxzAAccdQAIAAIACGyqAAhxywAItlYACLbdAAjjkAAJhJIACbBeAAnHHgAJzfUACgNoAAqCSwAKqq0ACrGCAArYMAALCR0ACyEDAAtpqgALf/4AC447AAuYegAMAAIADDDzAAxXoAAMccoADLziAAzGigANERUADSC7AA1VWAANgyUADY9gAA445gAPzfYAEAADABM24wAAAAAAAKPWAAXeuAAG444ABxxzAAdrgwAHccgAB7reAAigJQAI45AACVVWAAos8AAK7u4ACxxyAAwAAAAAAAD//d64//8cc///a4P//3HI//+63gAAoCUAAOOOAAFVVgABjjoAAhL2AAIs8AADHHAAAxxyAAQAAAAPXCoAAAAAAAAniwAAOysAAHHIAAB8kgAA7vIAAPLoAAEuYAABMy4AAUVmAAFQyAABbloAAZbCAAHHHQACV8UAAluWAAL0ngAEERKAMIAAgDCAAYAwgAKAMIADgDCABIAwgAWAMIAGAABxyAAA45AAAVVYAAHHIAACOOgAAqqwAAMceAAEAAAAAAAAAAAAAAAAAAAABuOOABAAAwAAAAAACtL6AAZMugAHGYYACvmoAAWEeAAGmzUABc5oAASfSgACZmYAA/SaAAYtgAAAzM0AJj1wABAo9gAEAAA=","cmsy5":"ARYAEgAAAH8ALAAPAA8AEAAHAAcAAAAWsNwwbgBQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAAD0HqoAAANTAAAeqgAAB0IAAB6qAAAHUwAAHqoAAB6qAAAeqgAAHqoAAB6qAAAeqgAAHqoAACnLAAAHUwAAB1MAAB5kAAAeZAAAHtwAAB7cAAAe3AAAHtwAAB7cAAAe3AAAHiEAAB51AAAemAAAHpgAACmYAAApmAAAHpgAAB6YAAApIQAAKSEAAAfLAAAHywAAKSEAACnLAAApywAAHmQAACkhAAApIQAAEMsAABDLAAApIQAAKcsAACnLAAAeMAAAAoAAACkwAAAUmAAAFJgAACjLAAAoywAAAcsAAAEhAAAKwAAACsAAABQwAAAH5gAAG8AAABvAAAAewAAAHsAAABDAAAAisAEGErAFBAmwDQQfsAkCCLAdAxewKQMNtxUDJrABAwuwEQAVtzkFHbABARawAQQrsAEEI7A1AiCwCQMasCUCJLcBAyewAQIOsBkEDLA9AA+wKQIRsCUAKrAlAhmwMQQTtyUCGLAhBBSAAAAUgAAAFIAAABSAAAAUgAAAEMAAABDAAAAG7QAABu0AAAbtAAAG7QAAB+0AAAftAAAE7QAABO0AAAPtAAAH7QAAB+0AABDtAAAH7QAAA8sAACEeAAAcsAAAJbAAAAXLLAAUgAAAFIAAAB7cAAAe3AAABssAAAbLAAAGywAAEMsAAB7JAAAeyQAAHskAAB7JAAAAAAAAAAAAAAAHDj0AB1VaAAmOQAAKHHoACqqzAAvHJgAMVWAADINzAAzjmgANHMoADSiwAA2bXQAN45oADfrqAA4ADQAOYeoADrWGAA7fEAAPHIAAD1VjAA9vkAAPz7AAD9zKAA/yPQAP9mYAEDjzABCT+gAQ4V0AEVVmABFXsAARbUoAEY5NABHQ1gASBFYAEhyDABJx2gATHNAAEyNdABOOTQAVxzMAFeHzABkV9gAAAAAAAOVgAAZXrQAG440AB3HGAAfjkwAIPKYACJ2mAAjjkAAJnVoACqqzAAru8AALHHMAC4JWAAwAAAAAAAD//let//9xxv//45MAADymAACdpgAA440AAY46AAGdWgACEvYAAqqzAAMccwADglYABAAAAA8aoAAAAAAAAEQ9AACOOgAAnroAANWgAADYKgABFwYAAT39AAFQxgABXwAAAaT6AAI45gACV8YAAngKAAMC2gAEZmqAMIAAgDCAAYAwgAKAMIADgDCABIAwgAWAMIAGAACOOgABHHMAAaqtAAI45gACxyAAA1VaAAPjkwAEAAAAAAAAAAAAAAAAAAAABuONABeOTQAAAAAADs3KAAYzDQAIEO0AEGdjAAiCswAIDpAABnT2AAS2DQADMzMABmZmAAfpQAABmZoAH64TABa4UwAEAAA=","cmsy6":"ARcAEgAAAH8ALAAPABAAEAAHAAcAAAAWcaElCwBgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADyH6oAAANTAAAfqgAAB0IAAB+qAAAHUwAAH6oAAB+qAAAfqgAAH6oAAB+qAAAfqgAAH6oAACnMAAAHUwAAB1MAAB9kAAAfZAAAH90AAB/dAAAf3QAAH90AAB/dAAAf3QAAHyEAAB91AAAflwAAH5cAACmXAAAplwAAH5cAAB+XAAApIQAAKSEAAAfLAAAHywAAKSEAACnLAAApywAAH2QAACkhAAApIQAAD8sAAA/LAAApIQAAKcsAACnLAAAfMAAAAoAAACkwAAAUlwAAFJcAACjMAAAozAAAAcsAAAEhAAAKwAAACsAAABQwAAAH5gAAG8AAABvAAAAfwAAAH8AAAA/AAAAhsAEGErAFBAmwDQQesAkCCLAhAxiwKQMNuBEDJrABAwuwFQAVuDkFHbABARawAQQrsAEEI7A1AiCwCQMXsCUCJLgBAyewAQIOsBkEDLA9ABCwKQIRsCUAKrAlAhmwMQQTuCUCGrAdBBSAAAAUgAAAFIAAABSAAAAUgAAAD8AAAA/AAAAG7gAABu4AAAbuAAAG7gAAB+4AAAfuAAAE7gAABO4AAAPuAAAH7gAAB+4AAA/uAAAH7gAAA8sAACIfAAAcsAAAJbAAAAXMLAAUgAAAFIAAAB/dAAAf3QAABswAAAbMAAAGzAAAD8wAAB/JAAAfyQAAH8kAAB/JAAAAAAAAAAAAAAAF2hMABhL1AAgl6wAIqqsACS9lAAo44AAKvZ0ACtqgAAtCWwALWWMAC2GAAAvygwAMMUgADEvVAAxkFQAMkEsADQM1AA0upQANVVAADYpoAA2sKwAODgMADhPgAA4jdQAOJMUADl7LAA7I+wAPBU0AD2EQAA9oRQAPkTsAD9bNAA//+AAQFzUAECIbABBxwAAQ8vgAEPtrABF7OwATjjAAE5BFABbV8AAAAAAAANOgAAY9KAAG440AB3HIAAehLQAIEIAACG34AAjjkAAJaGUACjjgAAru8AALHHMACzu9AAwAAAAAAAD//j0o//9xyP//oS0AABCAAABt+AAA440AAWhlAAGOOwACEvgAAjjgAAMccAADHHMAAzu9AAQAAAAPLGAAAAAAAABXBQAAhL0AALl7AADhGAAA9CsAASBrAAFM/QABTiAAAVpDAAGgPQACEvUAAlfIAAJujQAC/h0ABEn1gDCAAIAwgAGAMIACgDCAA4AwgASAMIAFgDCABgAAhL0AAQl7AAGOOAACEvUAApezAAMccAADoS0ABAAAAAAAAAAAAAAAAAAAAAbjjQAUccAAAAAAAA0A0AAGRv0AB8JAAA3RZQAG3q0ACAwoAAa20wAEl7UAAqqrAAVVVQAGl7AAAVVVAB+7uwAVmZsABAAA","cmsy7":"ARgAEgAAAH8ALQAPAA8AEQAHAAcAAAAWTyHihQBwAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADwIKkAAANTAAAgqQAACEIAACCpAAAIUwAAIKkAACCpAAAgqQAAIKkAACCpAAAgqQAAIKkAACvcAAAIUwAACFMAACBkAAAgZAAAIMsAACDLAAAgywAAIMsAACDLAAAgywAAICEAACB1AAAglwAAIJcAACuXAAArlwAAIJcAACCXAAArIQAAKyEAAAjcAAAI3AAAKyEAACvcAAAr3AAAIGQAACshAAArIQAAENwAABDcAAArIQAAK9wAACvcAAAgMAAAAoAAACswAAAVlwAAFZcAACncAAAp3AAAAdwAAAEhAAAM0AAADNAAABUwAAAI5gAAHNAAABzQAAAg0AAAINAAABDQAAAisAEGE7AJBAqwEQQfsA0CCbApAxmwLQMOuBUDJ7ABAwuwGQAWuD0FHrAFARewAQQssAEEI7A5AiGwDQMYsCUCJLgBAyiwAQIPsB0EDbBBABGwLQISsCUAKrAlAhqwNQQUuCUCG7AhBBWAAAAVgAAAFYAAABWAAAAVgAAAENAAABDQAAAG7QAABu0AAAbtAAAG7QAACO0AAAjtAAAE7QAABO0AAAPtAAAI7QAACO0AABDtAAAI7QAAA9wAACUeAAAdsAAAJrAAAAXcMAAVgAAAFYAAACDLAAAgywAAB9wAAAbcAAAG3AAAENwAACDaAAAg2gAAINoAACDaAAAAAAAAAAAAAAAFRRUABW25AAdlmQAH5ZsACGGJAAhhiwAJXXkACdt1AAnsRwAKWBIACllpAApdeQALBCsACzwpAAtVWQALfBsAC4TSAAwOFQAMOt4ADFFJAAyDrgAMqtsADPJJAA0X+wANGgkADSuXAA1NOQANvwIADfJlAA47MAAOSSkADn5QAA6ugAAO+BkADvmHAA8EFQAPRRkAD6iHAA+yUgAQQQkAEilnABI46QAVe6cAAAAAAADG8gAGJTAABuOOAAdxxwAHcckAB+blAAhA1QAI45AACTX3AAnnoAAK7vAACveuAAsccgAMAAAAAAAA//4lMP//ccf//3HJ///m5QAAQNUAAOOOAAE19wABjjkAAeegAAIS9wAC964AAxxyAAQAAAAPOQ4AAAAAAAAFiQAAZHAAAH35AADMkgAA53IAAQn3AAEnIAABSkcAAVbiAAFZoAABnNkAAffgAAJXxQACZ8kAAvq3AAQ1pYAwgACAMIABgDCAAoAwgAOAMIAEgDCABYAwgAYAAH35AAD78gABeesAAfflAAJ13gAC89cAA3HQAAQAAAAAAAAAAAAAAAAAAAAG444AErryAAAAAAALt44ABiR3AAeKDgAMCM4ABYHnAAgKawAG5dkABJJJAAJJJQAEkkkABaaXAAEkkgAbMzIAEoOpAAQAAA==","cmsy8":"ARgAEgAAAH8AKwAPABAAEgAHAAcAAAAWvkvICwCAAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADuH6kAAANCAAAfqQAAB1MAAB+pAAAHQgAAH6kAAB+pAAAfqQAAH6kAAB+pAAAfqQAAH6kAACndAAAHQgAAB0IAAB9kAAAfZAAAH7sAAB+7AAAfuwAAH7sAAB+7AAAfuwAAHyEAAB91AAAflwAAH5cAACmXAAAplwAAH5cAAB+XAAApIQAAKSEAAAfcAAAH3AAAKSEAACncAAAp3AAAH2QAACkhAAApIQAAD9wAAA/cAAApIQAAKdwAACncAAAfMAAAAoAAACkwAAAUlwAAFJcAACfdAAAn3QAAAdwAAAEhAAAM0AAADNAAABQwAAAH5gAAG9AAABvQAAAf0AAAH9AAAA/QAAAhwAEGEsANBAnAFQQewBECCMAtAxnAMQMNyBkDJcAFAwrAHQAVyEEFHcAJARbAAQQqwAEEI8A9AiDAEQMXwCkCIsgBAybAAQIOwCEEC8BFABHAMQIQwCkAKMApAhjAOQQTyCkCGsAlBBSAAAAUgAAAFIAAABSAAAAUgAAAD9AAAA/QAAAG7gAABu4AAAbuAAAG7gAAB+4AAAfuAAAE7gAABO4AAAPuAAAH7gAAB+4AAA/uAAAH7gAAA9wAACQfAAAcwAAAJMAAAAXdNAAUgAAAFIAAAB+7AAAfuwAABt0AAAbdAAAG3QAAD90AAB/aAAAf2gAAH9oAAB/aAAAAAAAAAAAAAAAEnHIABLjoAAaceAAHGOoAB45AAAiACAAI+OwACQCaAAleLgAJYZAACXHQAAoYgAAKS2oACmOYAAp/xAAKmuYACx1WAAtLIgALVWAAC4W8AAuw9gAL5JoADBoMAAwiKAAMN8wADEcoAAy7yAAM60wADSXiAA048AANdzoADZdcAA3iMAAN594ADiq4AA53zgAOgp4ADxyAABDfygARABAAFDt6AAAAAAAAuFIABgw8AAbjjgAHTjwAB3HIAAe8TgAIErYACOOQAAkCkAAJqrAACrKiAAru7gALHHIADAAAAAAAAP/+DDz//048//9xyP//vE4AABK2AADjjgABApAAAY46AAGqsAACEvYAArKiAAMccAADHHIABAAAAA9HrgAAAAAAAATYAAAb4AAAbn4AAHjkAADa5AAA7DoAARbEAAEsJgABSD4AAVRWAAFiRAABmlAAAeOQAAJXxgACYrQAAvguAAQmaIAwgACAMIABgDCAAoAwgAOAMIAEgDCABYAwgAYAAHjkAADxyAABaqwAAeOQAAJcdAAC1VgAA048AAQAAAAAAAAAAAAAAAAAAAAG444AEQAQAAAAAAALJCwABoqUAAdRsAAL/FoABkZQAAaljAAFpYwABI44AAIAAAAEAAAABlVWAAEAAAAXzMwAEjM0AAQAAA==","cmsy9":"ARcAEgAAAH8AKwAPAA8AEgAHAAcAAAAWqbGQygCQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNU1kAAAAAAAAAAAAAAAAAAAAAAADsH6gAAANCAAAfqAAAB1MAAB+oAAAHQgAAH6gAAB+oAAAfqAAAH6gAAB+oAAAfqAAAH6gAACncAAAHQgAAB0IAAB9kAAAfZAAAH7sAAB+7AAAfuwAAH7sAAB+7AAAfuwAAHyEAAB91AAAfhgAAH4YAACmGAAAphgAAH4YAAB+GAAApIQAAKSEAAAfcAAAH3AAAKSEAACncAAAp3AAAH2QAACkhAAApIQAAD9wAAA/cAAApIQAAKdwAACncAAAfMAAAApAAACkwAAAUhgAAFIYAACfcAAAn3AAAAdwAAAEhAAAM0AAADNAAABQwAAAH5wAAG9AAABvQAAAf0AAAH9AAAA/QAAAhwAEGEsARBAnAFQQewA0CCMAtAxnAMQMNyRkDJcAFAwrAHQAVyUEFHcAJARbAAQQqwAEEI8A9AiDADQMXwCkCIskBAybAAQIOwCEEC8BFABHAMQIQwCkAKMApAhjAOQQTySkCGsAlBBSQAAAUkAAAFJAAABSQAAAUkAAAD9AAAA/QAAAG7QAABu0AAAbtAAAG7QAAB+0AAAftAAAE7QAABO0AAAPtAAAH7QAAB+0AAA/tAAAH7QAAA9wAACQeAAAcwAAAJMAAAAXcNAAUkAAAFJAAAB+7AAAfuwAABtwAAAbcAAAG3AAAD9wAAB/aAAAf2gAAH9oAAB/aAAAAAAAAAAAAAAAEeBkABJFgAAZlIAAG2hIAB08AAAg44AAIrdAACK5gAAkA5QAJArAACSLAAAnGRwAJ9TwACgygAAoc8AAKRrQACscpAAr1wgAK9oAACyVFAAtTrAALd+QAC7gEAAvIBwAL3z4AC+BgAAxUrgAMg7kADLM+AAzKQAAND6cADSNLAA1t9QANeS4ADbQgAA3v0AAN+2sADp4AABBHlwAQccAAE6qkAAAAAAAArPIABfTpAAbjjgAHMpAAB3HHAAeTVwAH5jkACNDJAAjjkAAJe0AACm83AAru7gALHHIADAAAAAAAAP/99On//zKQ//9xx///k1f//+Y5AADQyQAA444AAXtAAAGOOQACEvcAAm83AAMccgAEAAAAD1MOAAAAAAAAGCIAAC1HAAB08AAAdlIAAOYLAADv8AABI+QAATAOAAFGqwABUlwAAWj8AAGYVQAB08AAAlfFAAJewAAC9jUABBqMgDCAAIAwgAGAMIACgDCAA4AwgASAMIAFgDCABgAAdPAAAOngAAFe0AAB08AAAkiwAAK9oAADMpAABAAAAAAAAAAAAAAAAAAAAAbjjgAQccAAAAAAAApZCwAGjiQABzJ8AAraAAAFbesAB6+VAAbMBwAEl7QAAcccAALQngAFoTQAAOOOACp9JwAQLYQABAAA","cmtcsc10":"AMIAEgAAAH8AAwAQAA0AAQACAAAAAAAH0zcZrQCgAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABkNNVENTQwAAAAAAAAAAAAAAAAAAAADqAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAABPAAAATwAAAFgAAABYAAAAdAAAAHQAAABwAAAAdAAAAGwAAAB0AAAAQsAAAJgAAABYAAAAWAAAAGEAAAB0AAAAdAAAAHkAAABKQAAAdABAAHQAAAB0AAAAfYAAAH2AAAB0AAAAdAAAAH1AAAB9QAAAXAAAAGSAAABGgAAAZIAAAEQAAAB9QAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWgAAAaMAAAFBAAABowAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdoAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH1AAAB9QAAAfUAAAHQAAABBwAAAdAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABaAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAfUAAAH1AAAB9QAAAdAAAAHQAAAAAAAAAAhmYgAQzMMAAAAAAAIAAAADgtgABjjjAAamZQAG444AB446AAhVVgAIccgACH0mAAjjjgAJDIMACQ46AAnHHQAKqqsACxxyAAAAAP/830j//rYK//8ccgAA444AAVVTAAFVVQABha0AAbBbAAHHHQACOOMAAxxzAAOOOgAAAACAYAAOgGAADwAAAAAACGZiAAAAAAAAAAAABuOOABDMwwAIZmI=","cmtex10":"AMAAEgAAAH8AAgAQAA4AAQAAAAAAAAAH3+o8eACgAAASVGVYIGV4dGVuZGVkIEFTQ0lJAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNVEVYAAAAAAAAAAAAAAAAAAAAAADqAWMAAAHAAAABMAAAAc0AAAFAAAABMAAAAaUAAAEwAAABwAAAAT0AAAHAAAABwAAAAYQAAAGEAAABMAAAAcAAAAGlAAABpQAAAUAAAAFAAAABwAAAAcAAAAGEAAABtgAAASEAAAEhAAAB6AAAAWMAAAHXAAAB1wAAAVIAAAFAAAABAAAAAcAAAAHAAAABwAAAAfoAAAH6AAABwAAAAcAAAAH5AAAB+QAAAXAAAAGEAAABHAAAAYQAAAEQAAAB+QAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAEwAAABPAAAAaUAAAEhAAABpQAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcwAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAH5AAAB+QAAAfkAAAHAAAABCwAAAcAAAAEwAAABwAAAATAAAAHAAAABMAAAAcAAAAE9AAABwAAAAcAAAAHNAAABwAAAAcAAAAEwAAABMAAAATAAAAE9AAABPQAAATAAAAEwAAABkAAAATAAAAEwAAABMAAAATAAAAE9AAABMAAAAfkAAAH5AAAB+QAAAcAAAAHNAAAAAAAAAAhmYgAAAAAAAgAAAAamZQAG444AB9KAAAfbAgAIJ9IACFVWAAh9JgAI23IACOOOAAmVVQAJxx0AChgrAApEOwALHHIAAAAA//zfSP/+E+X//mC1//62Cv//HHL//844AABRDgAAfR4AAVVTAAFVVQABha0AAjjjAAOOOgAAAAAAAAAAAAhmYgAAAAAAAAAAAAbjjgAQzMMACGZi","cmtex8":"AMAAEgAAAH8AAgAQAA4AAQAAAAAAAAAH30PKcwCAAAASVGVYIGV4dGVuZGVkIEFTQ0lJAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNVEVYAAAAAAAAAAAAAAAAAAAAAADuAWMAAAHAAAABMAAAAc0AAAFAAAABMAAAAaUAAAEwAAABwAAAAT0AAAHAAAABwAAAAYQAAAGEAAABMAAAAcAAAAGlAAABpQAAAUAAAAFAAAABwAAAAcAAAAGEAAABtgAAASEAAAEhAAAB6AAAAWMAAAHXAAAB1wAAAVIAAAFAAAABAAAAAcAAAAHAAAABwAAAAfoAAAH6AAABwAAAAcAAAAH5AAAB+QAAAXAAAAGEAAABHAAAAYQAAAEQAAAB+QAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAEwAAABPAAAAaUAAAEhAAABpQAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcwAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAH5AAAB+QAAAfkAAAHAAAABCwAAAcAAAAEwAAABwAAAATAAAAHAAAABMAAAAcAAAAE9AAABwAAAAcAAAAHNAAABwAAAAcAAAAEwAAABMAAAATAAAAE9AAABPQAAATAAAAEwAAABkAAAATAAAAEwAAABMAAAATAAAAE9AAABMAAAAfkAAAH5AAAB+QAAAcAAAAHNAAAAAAAAAAiACAAAAAAAAiceAAa0ngAG444AB9J+AAfpOgAIMcoACFVWAAiIJAAI23AACPHIAAmjjgAJxxwACiZkAApSdAALHHIAAAAA//ztgv/+Ih7//mqu//7BCP//Kqz//9xyAABfSAAAi1gAAVVUAAFVVgABk+QAAjjkAAOOOAAAAAAAAAAAAAiACAAAAAAAAAAAAAbjjgARABAACIAI","cmtex9":"AL8AEgAAAH8AAgAQAA0AAQAAAAAAAAAH36ROAACQAAASVGVYIGV4dGVuZGVkIEFTQ0lJAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNVEVYAAAAAAAAAAAAAAAAAAAAAADsAWMAAAHAAAABMAAAAcwAAAFAAAABMAAAAaUAAAEwAAABwAAAATwAAAHAAAABwAAAAYQAAAGEAAABMAAAAcAAAAGlAAABpQAAAUAAAAFAAAABwAAAAcAAAAGEAAABtgAAASEAAAEhAAAB6AAAAWMAAAHXAAAB1wAAAVIAAAFAAAABAAAAAcAAAAHAAAABwAAAAfkAAAH5AAABwAAAAcAAAAH5AAAB+QAAAXAAAAGEAAABGwAAAYQAAAEQAAAB+QAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAEwAAABOwAAAaUAAAEhAAABpQAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcsAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAH5AAAB+QAAAfkAAAHAAAABCgAAAcAAAAEwAAABwAAAATAAAAHAAAABMAAAAcAAAAE8AAABwAAAAcAAAAHMAAABwAAAAcAAAAEwAAABMAAAATAAAAE8AAABPAAAATAAAAEwAAABkAAAATAAAAEwAAABMAAAATAAAAE8AAABMAAAAfkAAAH5AAAB+QAAAcAAAAHMAAAAAAAAAAhmYAAAAAAAAgl8AAav4gAG444AB9KAAAfkgAAIJ9AACFVVAAh9JQAI23AACO0LAAme0gAJxxwACiGpAApNvAALHHIAAAAA//zoxf/+HWT//mC0//62Cf//Je7//9e1AABajAAAhqAAAVVVAAGPKwACOOQAA445AAAAAAAAAAAACGZgAAAAAAAAAAAABuOOABDMwAAIZmA=","cmti10":"AXIAEgAAAH8AKQAQAAoAOgBNAAkAAAAH/QAnOgCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVEkAAAAAAAAAAAAAAAAAAAAAAADqEsCoACDAAAAcwFQAFsAAABTAxAAawNAAGMCUABzAhAAYwBwAHMCEABjAaAAR2OUID9hsABDYbAAi2GwAJNhsAAIwOAADOAwAC9AAAAvQYAALgEAAC9CAAAtgbAAh0AAACAYAAA7YdAAYMDAAGDAwAAtVTAAjwJQAJsCUABziVAABMAEPAtClFwzQLAAg1yQAHtAAACDzsAAc0GAAAtClEgb5zAAG+QgAC/DAABxkCAACGAAABDAFFQIQAAAL+cwAC5CsAAuQrAALkKwAC5CsAAuYrAALkKwAC5CsAAuYrAALkKwAC5CsAAIwGAACOBgAAkg0ABwhJAALSAAAC9CdGBzQXAAawAEwF8BoABjAvAAbwFUrFcCUABPAqRofwEQAGsDQAAXAyAANwLQAHcC9IBLAAUElwNAAGsDQABzAVSsVwGkqHMhUABnAETAPwJAAGMCpJBrA0AAawNkaJ8DZKhrAySAawOElEcC8AAL53AAM0NQAAvl4AAvQKAACsIwAAtClEQswOAAI0CFFCDAVRQvQbRkIMDFFAtjlAAg4SAAL0DgAAqBkAAKouAAI0HwAAdBtGSAwOAAPMDlMCzAhRQs4IUUIOEgABzB9RQYwPAADcFgADjA4AAgwfAAUMH0ZCTCYAAo4SAAGMKAACzBRFigwUAAL0JwAC7CIAAuwcAAAAAAAAAQWwAAE6BoABVDGAAW5cwAGKzoABorNAAa/IwAHXCYAB2wVAAfE0wAILYAACDsoAAhmYwAIli0ACP7aAAlnhgAJ0DMACgkWAApxwwAKoY0ACtpwAAsTUwALQx0AC3LmAAurygAL5K0ADBR2AAxEQAAMTVoADE41AAxgsgANFZoADUz4AA4bSgAOH9YADk+gAA5YugAPwooAD/ttABBbAAAAAAAAAbBbAAXeuAAG444ACAAAAAhxyAAI/JUACddeAAoOOgAKT6UACnxaAAqvjQAK7u4ACxxyAAu2CwAMAAAAAAAA//3euAAAxx0AAOOOAADoGgABjjoAArjjAAMccAADHHIABAAAAAAAAAAAc8UAAJdTAACZCAAAnnAAAOeKAADuXgAA9TIAAQKOAAEPAgABEDgAAR0iAAEzxQABNXsAATo4AAFQNgABU8YAAWVDAAFqYgABeJsAAXkoAAGBIwABhI0AAYkaAAGNFgABoV4AAaQgAAGnQgABrQgAAa6lAAGvOAABuOMAAbqaAAHHHQAB2ooAAeFeAAHqYgAB7KgAAe06AAH1wwAB93gAAfyYAAIg/gACKz0AAi6mAAI+lQACUJUAAlMOAAJi/QACcnUAAodlAAKXUwACn0sAArItAALwEgADAAAAAxnwAANkIABpAAwAZgALAGwADQAngAAAP4AAACGAAAApgACAXYAAAGkADgBsAA8AJ4AAAD+AAAAhgAAAKYAAgF2AAABsgAGATIACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD6AbIAEAG+ABQBlgAUAdYAFAHKABQBhgAUAQYAGAE+ABwBDgAcAR4AHgFGABwB5gAUAZYAFAG+ABQBygAUAYYAFAHWABYBBgAUAWIAHAFeABwBBgAcAVoAHgFmABwBugAcAbIAHAHKABwB1gAcAbYAHAHSABwBpgAcAQ4AHAE+ABwBHgAcAaIAHAGKABwBVgAcAa4AHAHaABwB3gAcAUYAHAFSABQBZgAUAVoAGAFeABgBlgAgAYYAIAG+ACABkgAgAY4AIAGeACIBxgAiAJ4AGAAGrPf/76UD/+t8DAAGiswAA0Vr//sX6//5dTf//l1P//y6mAAQAAAAFuXMAAnQNAAGiswAG444AEFsAAAGisw==","cmti12":"AXMAEgAAAH8AKQAQAAoAOwBNAAkAAAAHm7uIQADAAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVEkAAAAAAAAAAAAAAAAAAAAAAADmEsCsACDAAAAcwFQAFsAAABTAyAAawMwAGMCgABzAiAAYwBwAHMCIABjAbAAR2OkID9h0ABDYdAAi2HQAJNh0AAIwOAADOAwAC9AAAAvQYAALkEAAC9CEAAtwcAAh0AAACQYAAA3YfAAYMDQAGDA0AAtVUAAjwKAAJsCgABziVAABMAEPAtClFwvQKAAg1yQAHtAAACD0uAAc0GAAAtClEgb51AAG+QgAC/DEABxjCAACGAAABDAFFQIQAAAL+dQAC6C0AAugtAALoLQAC6C0AAuotAALoLQAC6C0AAuotAALoLQAC6C0AAIwFAACOBQAAkgwABwhJAALSAAAC9CpGBzQXAAawAEwF8BsABjAwAAbwFUrFcCgABPArRofwEgAGsDMAAXA0AAMwLAAHcDBIBLAAUElwMwAGsDMABzAVSsVwG0qHMhUABnAETAOwJgAGMCtJBrAzAAawN0aJ8DdKhrA0SAawOUlEcDAAAL54AAL0NgAAvl4AAvQLAACsIwAAtClEQswOAAJ0CFFCTAZRQvQdRkJMDVFAtjpAAk4RAAL0DgAAqBkAAKovAAJ0IAAAdB1GSAwOAAOMDlMCzAhRQs4IUUJOEQACDCBRQcwPAADgFgADTA4AAkwgAAUMIEZCTCUAAo4RAAGMJwACzBNFigwTAAL0KgAC7CQAAuwaAAAAAAAAAQAAwAEzNAABTM3AAWZnQAGB5sABmZrAAZmbAAGmZ8ABzM4AAeZnwAIAAUACDcEAAhmbAAIzNMACMzUAAkzOwAJmaAACdCfAAo3BQAKZm0ACp1sAArUawALA9MACzM7AAtqOQALoTgAC9CgAAwACAAMB58ADBVcAAwbiAAMzNUADQmEAA3M2AAN0KEADgALAA4HoAAPajwAD6E7ABAACwAAAAAAAY45AAXGQQAG448ACAAAAAhxyAAIzNAACQWwAAnXXwAKDjkACl9cAAqefAAK7u8ACxxxAAu2CwAMAAAAAAAA//3GQQAAxxwAAMzQAADjjwABjjkAArjjAAMccAADHHEABAAAAAAAAAAAdgwAAJmZAACajAAApmUAAOZnAADsFwAA93gAAPrIAAELKQABDaUAARJ8AAEtgwABMkAAATJBAAFSfQABVgsAAWdZAAFtCAABduMAAXfxAAGDaQABhbAAAYtgAAGT6AABmd8AAaHtAAGmZwABp9EAAajEAAGxfQABszEAAbjkAAG8NAAByWQAAdUhAAHa0QAB7BgAAe7vAAHxyAAB8rkAAfSfAAH6TwACJewAAiqpAAItgwACMzMAAko7AAJVVQACZmUAAnQNAAKEvAACiIgAApmZAAKyoQAC7vAAAwAAAAMX5QADYLcAaQAMAGYACwBsAA0AJ4AAAD+AAAAhgAAAKYAAgF2AAABpAA4AbAAPACeAAAA/gAAAIYAAACmAAIBdgAAAbIABgEyAAoBgAFwAJwAiAD+AA4AhgAOALQB7gC0AfIBgADyAYAA+gGyABABvgAUAZYAFAHWABQBygAUAYYAFAEGABgBPgAcAQ4AHAEeAB4BRgAcAeYAFAGWABQBvgAUAcoAFAGGABQB1gAWAQYAFAFiABwBXgAcAQYAHAFaAB4BZgAcAboAHAGyABwBygAcAdYAHAG2ABwB0gAcAaYAHAEOABwBPgAcAR4AHAGiABwBigAcAVYAHAGuABwB2gAcAd4AHAFGABwBUgAUAWYAFAFaABgBXgAYAZYAIAGGACABvgAgAZIAIAGOACABngAiAcYAIgCeABgABp9T/+//9//r8MQABmZsAAMzN//7MzP/+ZmX//5mZ//8zMwAEAAAABZmdAAJmaAABmZsABuOPABAACwABmZs=","cmti7":"AXUAEgAAAH8ALQAQAAkAOgBNAAkAAAAHdH1cygBwAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVEkAAAAAAAAAAAAAAAAAAAAAAADwFcCoACXAAAAiwFgAGsAAABjAyAAewMQAHMCUACLAhAAcwCAAIsCEABzAeAAW1+UIEtdgABPXYAAo12AAKddgAAIwTAAENwwADdAAAA3QRAANkDgADdCAAA1gfAAk0AAACgYAABDXdAAcMDQAHDA0AA1UUAAmwJQAKsCUACLiWAABMAEPAtCZFw3QGAAl1zAAH9AAACXzsAAi0EQAAtCZEgf40AAH+BAADfDAACJ1EAACFwAABTAFFQIQAAAN+NAADaC0AA2gtAANoLQADaC0AA2ntAANoLQADaC0AA2ntAANoLQADaC0AAIwFAACNxQAAkcsACIhMAANRwAADdCdGCLQXAAewAEwG8B4ABzAuAAgwFkrGcCUABfAqRojwDwAHsDEAAbAzAAOwKQAIcC5IBXAAUEnwMQAHsDEACLAWSsZwHkqIsdYAB3ACTARwJQAHMCpJB7AxAAewNkaK8DZKh7AzSAewOElFMC4AAL43AAN0NQAAvhsAA3QJAACwIwAAtCZEQ0wTAAK0ClFCjAdRQ3QYRkKMDVFA9flAAo3SAAN0EwAArBUAAK3vAAK0IgAAdBhGSUwTAARME1MDTApRQ03KUUKN0gACTCJRQcwQAAEgGQADzBMAAowiAAYMIkZCzCgAAw3SAAIMKwADTBxFiwwcAAN0JwADcCQAA3AaAAAAAAAAATz0gAF5GIABeRlAAZcqwAG1PIAB0a7AAfFggAHxYUACAGnAAi2EgAIthUACS5bAAmmogAJ34cACh7rAAoe7gAKlzIACtg5AAtQgAALh8IAC8CnAAvIxwAMOPAADHhSAAyxNwAM6hsADSmAAA1o4gANoccADdqrAA4VYAAOGhAADlL1AA5ZcgAOdeUAD0L3AA9KAgAQc3cAEKxbABD4vgARNOIAElSXABKNewATTUUAAAAAAAHXXgAGJTAABuOOAAgAAAAIcccACSsQAAmjYAAJ114ACg45AApPpQAKggkACtj+AAsccgALtg4ADAAAAAAAAP/+JTAAAMceAADjjgABjjkAAaNgAAK45QADHHIABAAAAAAAAAAAZCkAAGfSAABuHgAAh7cAAMN1AADELgAAyFUAAOWVAADwWwAA8ssAAQqQAAERAgABKqsAATPpAAE2cAABQJsAAV5FAAFergABYJcAAWTHAAFqDgABcYcAAXl+AAF8VwABfMAAAX8wAAGCWQABiMUAAY9wAAGUhQABllkAAZcpAAG3ggABuOUAAbtVAAHANQAByysAAdGuAAHWjgAB9QkAAfy7AAIHUAACDjsAAg9wAAIboAACQ3IAAkZLAAJLlQACXkIAAmeJAAJ/lwACh7cAAq8QAAL34AADAAAAAyf7AAN7iQBpAAwAZgALAGwADQAngAAAP4AAACGAAAApgACAXYAAAGkADgBsAA8AJ4AAAD+AAAAhgAAAKYAAgF2AAABsgAGATIACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD6AbIAEAG+ABQBlgAUAdYAFAHKABQBhgAUAQYAGAE+ABwBDgAcAR4AHgFGABwB5gAUAZYAFAG+ABQBygAUAYYAFAHWABYBBgAUAWIAHAFeABwBBgAcAVoAHgFmABwBugAcAbIAHAHKABwB1gAcAbYAHAHSABwBpgAcAQ4AHAE+ABwBHgAcAaIAHAGKABwBVgAcAa4AHAHaABwB3gAcAUYAHAFSABQBZgAUAVoAGAFeABgBlgAgAYYAIAG+ACABkgAgAY4AIAGeACIBxgAiAJ4AGAAHCpf/7DC7/+eK5AAHhIAAA8JD//pcn//4e4P//h7f//w9wAAQAAAAG1PIAAtGwAAHhIAAG444AE01FAAHhIA==","cmti8":"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","cmti9":"AXEAEgAAAH8AKQAQAAkAOgBNAAkAAAAHvGqRuQCQAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVEkAAAAAAAAAAAAAAAAAAAAAAADsEsCoACDAAAAdwFQAFsAAABTAxAAawMwAGMCUAB3AiAAYwBwAHcCIABjAaAAR1+UID9dsABDXbAAi12wAJNdsAAIwOAADNxAAC9AAAAvQXAALgEAAC9CAAAtgcAAh0AAACAYAAA7XfAAYMDQAGDA0AAtVTAAjwJQAJsCUAB3iVAABMAEPAtChFwzQKAAg1ywAHNAAACDzsAAd0FwAAtChEgb40AAG+AgAC/DAAB1kCAACFwAABDAFFQIQAAAL+NAAC5CsAAuQrAALkKwAC5CsAAuXrAALkKwAC5CsAAuXrAALkKwAC5CsAAIwGAACNxgAAkcwAB0hLAALRwAAC9CdGB3QYAAawAEwF8BoABjAuAAbwFUrFcCUABPAqRofwEQAGsDMAAXAyAANwLQAHsC5IBLAAUElwMwAGsDMAB3AVSsVwGkqHcdUABnADTAPwJQAGMCpJBrAzAAawNkaJ8DZKhrAySAawOElEcC4AAL43AAM0NQAAvh4AAvQJAACsJAAAtChEQswOAAI0CFFCDAVRQvQbRkIMDVFAtflAAg3SAAL0DgAAqBkAAKnvAAI0IQAAdBtGSAwOAAPMDlMCzAhRQs3IUUIN0gABzCFRQYwPAADcFgADjA4AAgwhAAUMIUZCTCYAAo3SAAGMKQACzBRFigwUAAL0JwAC7CMAAuwdAAAAAAAAAQylQAFCYAABXT1AAXgawAGVLkABrdVAAbtEAAHjkAAB5SSAAf5tQAIZSsACHHOAAifUgAI0KAACTwVAAmniwAKEwAACk0nAAq4nAAK6esACyQSAAteOQALj4cAC8DVAAv6/AAMNSQADGZyAAyTywAMl8AADKCZAAy01AANbqsADZ1wAA57UAAOf7wADrELAA655AAQLZIAEGe5ABDKVQAAAAAAAbp5AAX06QAG444ACAAAAAhxxwAJEvcACddeAAoOOQAKT6UACnu3AAq0mwAK7u4ACxxyAAu2CwAMAAAAAAAA//306QAAxxwAAOOOAAEJgAABjjkAArjkAAMccgAEAAAAAAAAAABw/AAAlIsAAJSyAACWHgAA4fkAAOhLAADyaQABAg4AAQ1uAAEQbAABEcUAAS9nAAE1aQABQ/UAAU1uAAFQ/AABXEkAAW0JAAF4GQABe/AAAX5bAAGDKQABhLwAAYZSAAGVcgABoVcAAaRXAAGl7AABptQAAaikAAGpFQABt04AAbjkAAHEVQAB1jwAAdyOAAHk0gAB7p4AAfAyAAH2hAAB/mwAAhqMAAIodAACKRUAAi3UAAJQRwACUxQAAl7QAAJwhAAChgIAAo45AAKUiwACsZ4AAvF3AAMAAAADHHQAA2hMAGkADABmAAsAbAANACeAAAA/gAAAIYAAACmAAIBdgAAAaQAOAGwADwAngAAAP4AAACGAAAApgACAXYAAAGyAAYBMgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPoBsgAQAb4AFAGWABQB1gAUAcoAFAGGABQBBgAYAT4AHAEOABwBHgAeAUYAHAHmABQBlgAUAb4AFAHKABQBhgAUAdYAFgEGABQBYgAcAV4AHAEGABwBWgAeAWYAHAG6ABwBsgAcAcoAHAHWABwBtgAcAdIAHAGmABwBDgAcAT4AHAEeABwBogAcAYoAHAFWABwBrgAcAdoAHAHeABwBRgAcAVIAFAFmABQBWgAYAV4AGAGWACABhgAgAb4AIAGSACABjgAgAZ4AIgHGACIAngAYAAa9p//vNa//6vFkAAa3VAADW6//+vaD//lIr//+Ui///KRUABAAAAAXgawAChMAAAa3VAAbjjgAQylUAAa3V","cmtt10":"AMAAEgAAAH8AAgAQAAwAAQACAAAAAAAH3+o8eACgAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVFQAAAAAAAAAAAAAAAAAAAAAAADqAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAABOwAAATsAAAFQAAABWwAAAdAAAAHQAAABwAAAAdAAAAGwAAAB0AAAAQoAAAHQAAABUAAAAVAAAAGIAAAB0AAAAdAAAAHkAAABKAAAAdABAAHQAAAB0AAAAfYAAAH2AAAB0AAAAdAAAAH1AAAB9QAAAWAAAAFyAAABGQAAAXIAAAEQAAAB9QAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWQAAAaMAAAFBAAABowAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdkAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH1AAAB9QAAAfUAAAHQAAABBwAAAdAAAAFQAAAB0AAAAVAAAAHQAAABUAAAAdAAAAFbAAAB0AAAAdAAAAHbAAAB0AAAAdAAAAFQAAABUAAAAVAAAAFbAAABWwAAAVAAAAFQAAABkAAAAVAAAAFQAAABUAAAAVAAAAFbAAABUAAAAfUAAAH1AAAB9QAAAdAAAAHQAAAAAAAAAAhmYgAAAAAAAgAAAAOC2AAGOOMABqZlAAbjjgAIVVYACH0mAAiqqwAI23IACOOOAAkMgwAJDjoACccdAAqqqwALHHIAAAAA//zfSP/+tgr//xxyAADjjgABVVMAAVVVAAGFrQABxx0AAjjjAAMccwADjjoAAAAAgGAADoBgAA8AAAAAAAhmYgAAAAAAAAAAAAbjjgAQzMMACGZi","cmtt12":"AMEAEgAAAH8AAgAQAA0AAQACAAAAAAAH34a1VADAAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVFQAAAAAAAAAAAAAAAAAAAAAAADmAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB1AAAAdQAAAHQAAABPAAAATwAAAFQAAABXAAAAdAAAAHQAAABwAAAAdAAAAGwAAAB0AAAAQsAAAHQAAABUAAAAVAAAAGJAAAB0AAAAdAAAAHlAAABKQAAAdABAAHQAAAB1AAAAfcAAAH3AAAB0AAAAdAAAAH2AAAB9gAAAWAAAAFyAAABGgAAAXIAAAEQAAAB9gAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWgAAAZMAAAFBAAABkwAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdoAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH2AAAB9gAAAfYAAAHQAAABCAAAAdAAAAFQAAAB0AAAAVAAAAHQAAABUAAAAdAAAAFcAAAB0AAAAdAAAAHcAAAB0AAAAdAAAAFQAAABUAAAAVAAAAFcAAABXAAAAVAAAAFQAAABoAAAAVAAAAFQAAABUAAAAVAAAAFcAAABUAAAAfYAAAH2AAAB9gAAAdAAAAHQAAAAAAAAAAg7vAAAAAAAAc44AAOEvQAGOOMABpzpAAbjjwAIVVcACGrgAAiqrAAI2hQACNtxAAj+GQAJDjkACcccAAqqqwALHHEAAAAA//zVzP/+o8P//xL3/////QAA448AAVVTAAFVVQABfDAAAccdAAI45AADHHMAA445AAAAAIBgAA6AYAAPAAAAAAAIO7wAAAAAAAAAAAAG448AEHd4AAg7vA==","cmtt8":"AMAAEgAAAH8AAgAQAAwAAQACAAAAAAAH30PKcwCAAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVFQAAAAAAAAAAAAAAAAAAAAAAADuAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAABOwAAATsAAAFQAAABWwAAAdAAAAHQAAABsAAAAdAAAAHAAAAB0AAAAQoAAAHQAAABUAAAAVAAAAGIAAAB0AAAAdAAAAHkAAABKAAAAdABAAHQAAAB0AAAAfYAAAH2AAAB0AAAAdAAAAH1AAAB9QAAAWAAAAFyAAABGQAAAXIAAAEQAAAB9QAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWQAAAaMAAAFBAAABowAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdkAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH1AAAB9QAAAfUAAAHQAAABBwAAAdAAAAFQAAAB0AAAAVAAAAHQAAABUAAAAdAAAAFbAAAB0AAAAdAAAAHbAAAB0AAAAdAAAAFQAAABUAAAAVAAAAFbAAABWwAAAVAAAAFQAAABkAAAAVAAAAFQAAABUAAAAVAAAAFbAAABUAAAAfUAAAH1AAAB9QAAAdAAAAHQAAAAAAAAAAiACAAAAAAAAiceAAOAAAAGOOQABrSeAAbjjgAIVVYACIgkAAiqqgAI23AACPHIAAkOOAAJIiAACcccAAqqqgALHHIAAAAA//ztgv/+wQj//yqsAADjjgABVVQAAVVWAAGT5AABxxwAAjjkAAMccgADjjgAAAAAgGAADoBgAA8AAAAAAAiACAAAAAAAAAAAAAbjjgARABAACIAI","cmtt9":"AL8AEgAAAH8AAgAQAAsAAQACAAAAAAAH36ROAACQAAATVGVYIHR5cGV3cml0ZXIgdGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAABENNVFQAAAAAAAAAAAAAAAAAAAAAAADsAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAABOgAAAToAAAFQAAABWgAAAdAAAAHQAAABsAAAAdAAAAHAAAAB0AAAAQkAAAHQAAABUAAAAVAAAAGHAAAB0AAAAdAAAAHkAAABJwAAAdABAAHQAAAB0AAAAfUAAAH1AAAB0AAAAdAAAAH1AAAB9QAAAWAAAAFyAAABGAAAAXIAAAEQAAAB9QAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAFQAAABWAAAAaMAAAFBAAABowAAAdABAQHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdgAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAHQAAAB0AAAAdAAAAH1AAAB9QAAAfUAAAHQAAABBgAAAdAAAAFQAAAB0AAAAVAAAAHQAAABUAAAAdAAAAFaAAAB0AAAAdAAAAHaAAAB0AAAAdAAAAFQAAABUAAAAVAAAAFaAAABWgAAAVAAAAFQAAABkAAAAVAAAAFQAAABUAAAAVAAAAFaAAABUAAAAfUAAAH1AAAB9QAAAdAAAAHQAAAAAAAAAAhmYAAAAAAAAgl8AAOBlQAGOOQABq/iAAbjjgAIVVUACH0lAAiqqwAI23AACO0LAAkOOQAJHHAACcccAAqqqwALHHIAAAAA//zoxf/+tgn//yXuAADjjgABVVUAAY8rAAHHHAACOOQAAxxyAAOOOQAAAACAYAAOgGAADwAAAAAACGZgAAAAAAAAAAAABuOOABDMwAAIZmA=","cmu10":"AT8AEgAAAH8AKQAQAAoABwBNAAkAAAAHEyBQ4gCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NNVQAAAAAAAAAAAAAAAAAAAAAAAADqFMAAACHAAAAfwAAAGcAAABfAAAAdwAAAG8AAAB/AAAAbwAAAH8AAABvAAAAT2BkIEdgUABLYFAAi2BQAJNgUAAIwFAAEOAAADdAAAA3QAAANkAAADdAAAA1gAAAd0AAACgYAABDYAAAbMAAAGzAAAA1VAAAjwAAAJsAAAB/iAAABMAEPAtABFw3QAAAh1wAAFdAAACHzAAAf0AAAAtABEgf5AAAH+QAADfAAAB90AAACGAAABTABFQIQAAAN+QAADaAAAA2gAAANoAAADaAAAA2oAAANoAAADaAAAA2oAAANoAAADaAAAAIwAAACOAAAAkgAAB8hAAANSAAADdABGB/QAAAdwAEwGsAAABvAAAAewAErGMAAABbAARogwAAAHcAAAAbAAAAOwAAAH8ABIBTAAUElwAAAHcAAAB/AASsYwAEqH8gAABzAATARwAAAG8ABJB3AAAAdwAkaJ8AJKh3AASAdwA0lE8AAAAL5AAAN0AAAAvkAAA3QAAACsAAAAtABEQ0wFAAK0AFFCjABRQ3QFRkKMAFFA9gZAAo4AAAN0BQAArAUAAK4AAAK0AAAAdAVGSEwFAARMBVMDTABRQ04AUUKOAAACTABRQcwAAAEgBQADzAUAAowAAAXMAEZCzAUAAw4AAAIMAQADTARFigwEAAN0AAADbAAAA2wAAAAAAAAAARxxgAFVVUABVVWAAXHHQAGOOMABqqqAAcccgAHHHMAB1VWAAgAAAAIIiMACHHIAAjjjgAJHHIACVVWAAlVWAAJxx0ACjjjAAqqqwAK444ACxxyAAtVVgALjjoAC8cdAAwAAAAMOOUADHHIAAyqqwAM444ADRxzAA1VVgANccgADjjlAA9VVQAPVVYAD444AA+OOgARHHMAEVVWABHHHQAAAAAAAbBbAAXeuAAG444ACAAAAAhxyAAJFZ0ACVVWAAnXXgAKDjoACk+lAAqhUwAK7u4ACxxyAAu2CwAMAAAAAAAA//3euAAAxx0AAOOOAAFVVgABjjoAArjjAAMccAADHHIABAAAAAAAAAAAMzMAADjjAABmZgAAccgAAKT7AACqqwBpAAwAZgALAGwADQAngAAAP4AAACGAAAApgACAXYAAAGkADgBsAA8AJ4AAAD+AAAAhgAAAKYAAgF2AAABsgAGATIACgGAAXAAnACIAP4ADgCGAA4AtAHuALQB8gGAAPIBgAD6AbIAEAG+ABQBlgAUAdYAFAHKABQBhgAUAQYAGAE+ABwBDgAcAR4AHgFGABwB5gAUAZYAFAG+ABQBygAUAYYAFAHWABYBBgAUAWIAHAFeABwBBgAcAVoAHgFmABwBugAcAbIAHAHKABwB1gAcAbYAHAHSABwBpgAcAQ4AHAE+ABwBHgAcAaIAHAGKABwBVgAcAa4AHAHaABwB3gAcAUYAHAFSABQBZgAUAVoAGAFeABgBlgAgAYYAIAG+ACABkgAgAY4AIAGeACIBxgAiAJ4AGAACqq//7jjr/+nHIAAHHHQAA447//qqq//444///jjj//xxyAAAAAAAGOOMAAqqrAAHHHQAG444AEccdAAHHHQ==","cmvtt10":"ATgAEgAAAH8AGgAOAAoABQBYAAoAAAAHwqDVmQCgAAAIVGVYIHRleHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUNNVlRUAAAAAAAAAAAAAAAAAAAAAADqEKAAABegAAAWoAAAEqAAABKgAAAUoAAAFKAAABagAAAUoAAAFqAAABSgAAAPoBEKDqAAAA6gAAAXoAAAF6AAAAFAAAADSQAACqAAAAqgAAAKkAAACqAAAAqAAAAUoAAABwgAAAugAAAUQAAAFkAAAApmAAAYoAAAGaAAABbDAAABQAEAAaABFwqgAAAXoAAACtUAABfVAAAWoAAAAaABEgXUAAAF1AAAClAAABayAAABFwAABEABFQEQAAAK1AAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAqgAAAKoAAACqAAAAFAAAABRwAAASkAABYxAAAIKQAACKABGBKgAAAUoAFME6AAABSgAAAVoAE1EqAAABGgASQWoAAAFKAAAASgAVcKoAAAFaABKhCgAVIYoAAAFKAAABagATUSoAEeFqcAABSgAUwOoAAAFKABLhSgAAAUoAUkGaAFJBSgASoUoAkvEKAAAALUAAAKoAAAAtQAAAqgAAABoAAAAaABEQlAAUgOoAFCB0ABQA6gAAAHQAAAA6ARAgpJBVYOoAE6AaAAAAOpAAANoAEZAaAAABdAAToOQAE6CkABQg5JAUIMSQAABUAAAAZAAAAFcAFKDkABSw1ABRkUQAUaDUAAAA1JBR8HQAAACkANFhlADAAKoAAACqAAAAqgAAAAAAAAAASqqAAEwWsABSIgAAWZlgAGiIUABqBqAAd3cwAH7usACCqmAAhmYgAIZmMACN3YAAjd2gAJVVAACczIAApEPgAKu7YACzMtAAuqpQAMIhsADJmTAA0RCgAN//gADu7mABDMwwAAAAAAAZmaAAY44wAGpmUABuOOAAhVVgAIqqsACNtyAAkMgwAJDjoACccdAAp9JQAKqqsACxxyAAAAAP/830gAALYIAADjjgABVVMAAVVVAAHHHQACOOMAAxxzAAOOOgAAAAAAADu7AABrhQAAd3gAATBbAGyAAIBMgAEAaQAMAGYACwBsAA0AJ4ACAD+AAgAhgAIAKYACgF2AAgBpAA4AbAAPACeAAgA/gAIAIYACACmAAoBdgAKAYABcACcAIgA/gAOAIYADgC0Ae4AtAHyAYAA8gGAAPgBhgAQAZYAFAGGABQBvgAWAY4AFAEGABgBvgAUAZYAFAGGABQAugAaALIAGAG+ABgBlgAYAdYAGAHKABgBhgAYAQYAHAE+ABQBDgAUAR4AFgFGABQB5gAUAZYAGAG+ABgBygAYAYYAGAEGABoB1gAYAWIAFAFeABQBBgAUAVoAFgFmABQB0gAUAdYAFAGKABQB5gAUAdoAFgHeABQBogAWAa4AFAGWACABvgAgAeIAFAGSACABjgAgAcYAIAHaABQBqgAkAeYAFgHeABQB0gAUAQ4AFAE+ABQBHgAUAVYAFAFGABQBUgAYAWYAGAFaAB4BXgAeAaoAIgEmACP/7VVj/+t3gAAEwWwAB3d3//xES//+IiP/+mZr//iIjAAB3eAAA7u4AAAAAAAWZlgACzMsAAd3dAAbjjgAQzMMAAd3d","euex10":"AMoAEgAIAH0ADgAIAA8AAwAAAAAABwANYgdhMQCgAAAYZXVsZXIgc3Vic3RpdHV0aW9ucyBvbmx5AAAAAAAAAAAAAAAAAAAACUVVRVggVjIuMgAAAAAAAAAAAAAAAADqBRgCCgUYAgsGGgIMBhoCDQcdAg4HHQIPCB4COAgeAjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApBAAAKQQAACkEAAApBAAAAAAAAAAAAAAAAAAAAAAAACkEAAApBAAADYgAAA2IAAApBAAAKYgAACmIAAAAAAAAKQQAACkEAAAZiAAAGYgAACkEAAApiAAAKYgAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQUDAAkFAwEJBQMCCQUDAwkLAAAJCwAACQQDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQHBkkBDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwYCWAsGAlkEBwZaAAAAAAAAAAAAAAAAAAAAAAAAAAANOQAADDkAAAEMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGAmEMOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzAAAGcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAIgAAACIAAAAiAAAAAAAAAABxxzAAczOAAIAAIACHHIAAlVWAAKqq0ADAACAAzjkwAOOOYAEAADABDjkgAWk+0AFxx2AAAAAAAAo9YAAY44AAGZmwAF3rgABuOOAAsccgAMAAAAAAAA//3euAADHHAABAAAAATM0AAOZnAAEAAOABHHKAASj2oAGAANABwpCgAczOAAI45SACXCqgAvXEoAAAAAAABxyAABxx04PDo+OT07PjgAOj45ADs+AAAAPjgAOz45ADo+AAAAAAAAAAAAAAAAAAAAAAAG444AEAADAAAAAAAAo9YAAccdAAKqqwADMzMACZmaAAGZmg==","euex7":"AMoAEgAIAH0ADgAIAA8AAwAAAAAABwANaxPfkQBwAAAYZXVsZXIgc3Vic3RpdHV0aW9ucyBvbmx5AAAAAAAAAAAAAAAAAAAACUVVRVggVjIuMgAAAAAAAAAAAAAAAADwBRgCCgUYAgsGGgIMBhoCDQcdAg4HHQIPCB4COAgeAjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApBAAAKQQAACkEAAApBAAAAAAAAAAAAAAAAAAAAAAAACkEAAApBAAADYgAAA2IAAApBAAAKYgAACmIAAAAAAAAKQQAACkEAAAZiAAAGYgAACkEAAApiAAAKYgAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQUDAAkFAwEJBQMCCQUDAwkLAAAJCwAACQQDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQHBkkCDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwYCWAsGAlkEBwZaAAAAAAAAAAAAAAAAAAAAAAAAAAANKQAADCkAAAIMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGAmEMKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzAAAGcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAEwAAABMAAAATAAAAAAAAAAB3Q+AAgghQAJHHUACZprAAqWXgAMEEUADYorAA6GIAAQAAUAEfflABLz1QAZQDsAGddlAAAAAAAAxvIAAZmbAAGmmQAGJTAABuOOAAsccgAMAAAAAAAA//4lMAADHHIABAAAAATM0AAOZnAAEAAOABHHKQASbE4AGAAOABwF7gAczOAAI45SACWfjgAvOS4AAAAAAAB9+QAB9+A4PDo+OT07PjgAOj45ADs+AAAAPjgAOz45ADo+AAAAAAAAAAAAAAAAAAAAAAAG444AEjjpAAAAAAAAxvIAAccbAAKqqwADMzIACccbAAJJJQ==","euex8":"AMoAEgAIAH0ADgAIAA8AAwAAAAAABwANJAX55wCAAAAYZXVsZXIgc3Vic3RpdHV0aW9ucyBvbmx5AAAAAAAAAAAAAAAAAAAACUVVRVggVjIuMgAAAAAAAAAAAAAAAADuBRgCCgUYAgsGGgIMBhoCDQcdAg4HHQIPCB4COAgeAjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApBAAAKQQAACkEAAApBAAAAAAAAAAAAAAAAAAAAAAAACkEAAApBAAADYgAAA2IAAApBAAAKYgAACmIAAAAAAAAKQQAACkEAAAZiAAAGYgAACkEAAApiAAAKYgAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQUDAAkFAwEJBQMCCQUDAwkLAAAJCwAACQQDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQHBkkCDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwYCWAsGAlkEBwZaAAAAAAAAAAAAAAAAAAAAAAAAAAANKQAADCkAAAIMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsGAmEMKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzAAAGcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAEwAAABMAAAATAAAAAAAAAABzM4AAeOQAAIgAgACPjsAAnqtAALVWAADMAMAA2x1AAPHIAAEQAQABHx2AAX/T4AGI5QAAAAAAAAuFIAAZmaAAGccAAGDDwABuOOAAsccgAMAAAAAAAA//4MPAADHHAABAAAAATM0AAOZnAAEAAOABHHKAASeu4AGAAMABwUjgAczOAAI45SACWuLgAvR84AAAAAAAB45AAB45A4PDo+OT07PjgAOj45ADs+AAAAPjgAOz45ADo+AAAAAAAAAAAAAAAAAAAAAAAG444AEQAQAAAAAAAAuFIAAcccAAKqqgADMzQACbjkAAIAAA==","euex9":"AMsAEgAIAH0ADwAIAA8AAwAAAAAABwANhtgXiQCQAAAYZXVsZXIgc3Vic3RpdHV0aW9ucyBvbmx5AAAAAAAAAAAAAAAAAAAACUVVRVggVjIuMgAAAAAAAAAAAAAAAADsBRgCCgUYAgsGGgIMBhoCDQcdAg4HHQIPCB4COAgeAjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApBAAAKQQAACkEAAApBAAAAAAAAAAAAAAAAAAAAAAAACkEAAApBAAADYgAAA2IAAApBAAAKYgAACmIAAAAAAAAKQQAACkEAAAZiAAAGYgAACkEAAApiAAAKYgAAAAAAAAAAAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQUDAAkFAwEJBQMCCQUDAwkLAAAJCwAACQQDBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQHBkkCDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwYCWAwGAlkEBwZaAAAAAAAAAAAAAAAAAAAAAAAAAAAOOQAADTkAAAIMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGAmENOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzAAAGcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEgAAABIAAAASAAAAAAAAAABzM5AAdPAAAIOOAACK3QAAmXsgAK9oAADFVSAA0/MAAOngAAEHHAABFboAARW6IAFzRsABfAwAAAAAAAAKzyAAGUiQABmZsABfTpAAbjjgALHHIADAAAAAAAAP/99OkAAxxyAAQAAAAEzNAADmZwABAADgARxykAEoZOABgADAAcH+4AHMzgACOOUgAluY4AL1MuAAAAAAAAdPAAAdPAODw6Pjk9Oz44ADo+OQA7PgAAAD44ADs+OQA6PgAAAAAAAAAAAAAAAAAAAAAABuOOABBxwAAAAAAAAKzyAAHHHAACqqsAAzM0AAmt1AABxxw=","eufb10":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAW2JYM5wCgAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADqGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABAFoAAQOeAAEFQAABBuIAAU+0wAFTTIABU6AAAVjZgAFllgABjMYAAY3AwAGSpsABkvqAAZc5QAG2P0AB1eyAAdaTgAHYNYAB2tKAAdsmAAHjUAACFzyAAisoAAJTpoACWYdAAlrVgAJbKUACXCQAAl7AwAJhCgACYgTAAmk0AAJqLsACatYAAm+8AAJ2RAACm9IAAp10AAKebsAC1+iAAuMCwALkpMAC6DyAAyFigAMlTYADKD4AAyjlQANjrUADZaLAA2bxQAN8K0ADkmAAA6uFQAOvcIADtaTAA+fvQAPoloAD6T2AA+nkwAPsLgAD7SjAA+18gAPuI4AD7x6ABCzWwATwxsAE9QWAAAAAAABuoAAB5sAAAhtLgAJU0oAChGQAAsQAAAL/dgAAAAAAACa4AABAiAAAVS6AAIEQAADBmAAA/9IAAAAAAAAAAAABVVVAAAAAAAAAAAAB5sAABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eufb5":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWouDdiQBQAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAAD0GVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAAB8bwAAfVUAAH3IAAB+OwAAkkQAAJNBAACTWAAAlMgAAJhJAACjEQAAo1YAAKSvAACkxgAApfEAAK56AAC3MQAAt18AALfSAAC4igAAuKEAALrgAADJKQAAzqQAANnIAADbZgAA28IAANvZAADcHgAA3NYAAN13AADdvAAA37YAAN/7AADgKQAA4YIAAONOAADtowAA7hYAAO5bAAD+KwABATkAAQGsAAECqQABEmIAARN2AAEURQABFHMAASSfAAElKQABJYUAAStcAAExeAABOGMAATl3AAE7LAABSQIAAUkwAAFJXgABSYwAAUotAAFKcgABSokAAUq3AAFK/AABW/cAAZHfAAGTCgAAAAAAABvQAAB6YAAAh5YAAJYMYACiAgAAsgAAAMDzAAAAAAAACbwAABA5YAAVamAAIHKgADCsAABAUQAAAAAAAAAAAABVVWAAAAAAAAAAAAB6YAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eufb6":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWONiU4gBgAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADyGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABd8tAAXtCAAF8/UABfrjAAcv1QAHPxMAB0B1AAdWoAAHjKgACDLoAAg3EAAIS9gACE07AAhfPQAI4tsACWk9AAlsAwAJcvAACX4FAAl/aAAJogsACn5TAArS1QALfqAAC5eQAAudGwALnn0AC6KlAAutuwALt20AC7uVAAvaEAAL3jgAC+D9AAv1xQAMEXsADLDNAAy3uwAMu+MADa+4AA3e0wAN5cAADfT9AA7ncAAO+BAADwSIAA8HTQAQAK0AEAj9ABAOiAAQaJUAEMbLABExeAARQhgAEVxrABIxxQASNIsAEjdQABI6FQASQ8gAEkfwABJJUwASTBgAElBAABNWGAAWlVgAFqdbAAAAAAABuasAB5dVAAhpIAAJTssACgy1AAsKqwAL+BAAAAAAAACalQABAaMAAVQVAAIDSAADBOsAA/1bAAAAAAAAAAAABVVVAAAAAAAAAAAAB5dVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eufb7":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWjMZs2QBwAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADwGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABR5nAAUrtQAFMlsABTkCAAZhrgAGcFAABnGlAAaG7gAGutAAB1p1AAdecgAHcmcAB3O7AAeFBwAIA2kACIR1AAiHHgAIjcUACJhpAAiZvgAIuwAACY6HAAnfrgAKhKUACpyXAAqh6QAKoz4ACqc7AAqx4AAKuzAACr8uAArccgAK4HAACuMZAAr3DgALEakAC6qnAAuxTgALtUsADJ9wAAzMqwAM01IADOH1AA3KxQAN2rsADea1AA3pXgAO2NUADuDQAA7mIgAPPJsAD5cSAA/9ggAQDXkAECbAABDzoAAQ9kkAEPjyABD7mwARBOsAEQjpABEKPgARDOcAERDlABIMVQAVKosAFTvXAAAAAAAButsAB5ySAAhu7gAJVTcAChOlAAsSSQAMAFIAAAAAAACbAAABAlUAAVUAAAIEqwADBwAABAAbAAAAAAAAAAAABVVVAAAAAAAAAAAAB5ySABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eufb8":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWsafUNwCAAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADuGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABAxyAAQZpgAEIEAABCbaAAVNSAAFW84ABV0gAAVyQAAFpb4ABkQuAAZIJAAGW/IABl1EAAZubgAG69wAB2vuAAdukgAHdSwAB3+8AAeBDgAHohAACHP+AAjEiAAJaEAACYAEAAmFTAAJhp4ACYqUAAmVJAAJnmIACaJYAAm/ZAAJw1oACcX+AAnZzAAJ9DQACowKAAqSpAAKlpoAC376AAur3gALsngAC8D+AAyoDAAMt+QADMPGAAzGagANtBIADbv+AA3BRgAOFxgADnDgAA7WigAO5mIADv94AA/KzAAPzXAAD9AUAA/SuAAP2/YAD9/sAA/hPgAP4+IAD+fYABDhYgAT+ZIAFAq8AAAAAAABu8AAB6CAAAhzSAAJWggAChjYAAsYAAAMBoQAAAAAAACbUAABAtoAAVWwAAIFtgADCJAABAIsAAAAAAAAAAAABVVWAAAAAAAAAAAAB6CAABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eufb9":"AQEAEgABAH8ARAAIAAcAAQAAAAAAAAAWTTF9WgCQAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRkIgVjIuMgAAAAAAAAAAAAAAAADsGVAAAA1lAAAKUAAAHWUAAAxgAAAOYAAAAAAAADxgAAArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAAAAAAAAAAADNgAAABYAAAEHYAABB2AAAFUAAANEMAAAUQAAA0QwAABRAAAB12AAAdIAAAHSAAAB0gAAAdJQAAHSUAAB0lAAAdYAAAHSUAAB1gAAAdJQAAAyAAAAMkAAAAAAAAGCAAAAAAAAAPYAAAAAAAADBgAABBYAAAKmAAAD5gAAAsYAAAKWQAADdgAAAyYgAAJ2AAACVkAAAuYAAALWAAAENgAAA/YAAAOGAAADllAAA4YQAAOmAAADtgAAAvYAAAMmAAAD1gAABCYAAAMWAAAEBlAAAoZAAABHYAAAAAAAAEdgAAHGAAAAAAAAAAAAAAICAAABxgAAATIAAAGlAAABUgAAALZQAAHiUAACRlAAAGYAAAB2AAABRgAAAIYAAANiAAACYgAAAjIAAAITUAAB8lAAARIAAAFiAAAAxQAAAaIAAAIjAAADUwAAAQJQAAGyUAABIlAAAAAAAAAAAAAAJgAAAAAAAAF2AAAAAAAAAABADcAAQN6wAEFHIABBr5AAU+HAAFTHkABU3HAAViqwAFlZUABjJAAAY2KwAGScAABksOAAZcBwAG2A4AB1ayAAdZTgAHX9UAB2pHAAdrlQAHjDkACFvOAAircgAJTVUACWTVAAlqDgAJa1wACW9HAAl5uQAJgtwACYbHAAmjgAAJp2sACaoHAAm9nAAJ17kACm3cAAp0ZAAKeE4AC14VAAuKeQALkQAAC59cAAyD1QAMk4AADJ9AAAyh3AANjNwADZSyAA2Z6wAN7scADkeOAA6sFQAOu8AADtSOAA+dnAAPoDkAD6LVAA+lcgAPrpUAD7KAAA+zzgAPtmsAD7pVABCxFQATwGsAE9FkAAAAAAABuasAB5dVAAhpIAAJTssACgy1AAsKqwAL+BAAAAAAAACalQABAaQAAVQVAAIDRwADBOsAA/1bAAAAAAAAAAAABVVVAAAAAAAAAAAAB5dVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","eufm10":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWjyVusgCgAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADqGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAANkaAADb3gAA3UAAARxOgAEdsIABHj4AAR+gAAEu1gABThaAAVEhQAFVAIABVUdAAVYbgAFzJYABgzAAAY35QAGOhsABjs2AAY/owAGaJIABxUlAAfSUAAH02sAB/W2AAf5CAAH+iMAB/s+AAf+kAAIAeIACAL9AAgHagAIDg0ACA8oAAgwWAAINeAACEZ4AAhXEAAIbTAACNZIAAjfIgAJodUACcdyAAnM+gAKVQsACpq9AAqoAwAKsfgACrQuAAt7TgALgfIAC4ZeAAvORgAMGYAADESlAAxgTQAMkPoADTtWAA09jQANP8MADUH6AA1NCgANTiUADVBbAA1TrQAOJMIAELyCABDK4wAAAAAAAbqAAAXmCAAHmwAACGIgAAlTSgAJ8GAACxAAAAv92AAAAAD//ed4AACa4AABAiAAAVS6AAIEQAADBmAAA/9IAAAAAAAAAAAABVVVAAAAAAAAAAAAB5sAABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eufm5":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWuMmv1ABQAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAAD0GGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAAcrIAAHOGAABz8AAAhtGgAIc7oACHZgAAh9AAAIxeAACVuaAAlqLQAJfLoACX4NAAmCBgAKDSYACloAAAqNrQAKkFMACpGmAAqW8wAKx/oAC5atAAx5QAAMepMADKOmAAynoAAMqPMADKpGAAyuQAAMsjoADLONAAy42gAMwM0ADMIgAAzp4AAM8IAADQRgAA0YQAANMsAADbCgAA27OgAOpG0ADtF6AA7YGgAPexMAD86NAA/ecwAP6mAAD+0GABDbhgAQ43oAEOjGABE+5gARmQAAEcytABHtzQASKBoAEvQmABL2zQAS+XMAEvwaABMJWgATCq0AEw1TABMRTQAUC7oAFya6ABc38wAAAAAAAb0AAAXukAAHpgAACG5AAAlgxgAJ/sAACyAAAAwPMAAAAAD//eRwAACbwAABA5YAAVamAAIHKgADCsAABAUQAAAAAAAAAAAABVVWAAAAAAAAAAAAB6YAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eufm6":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWZRZ7xABgAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADyGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAAVXjQAFZCgABWp1AAaJ1QAGkCMABpKoAAaY9QAG3kgAB2y1AAd6kwAHjDgAB417AAeRQwAIFZsACF61AAiP3QAIkmMACJOlAAiYsAAIx1MACYvzAApjewAKZL0ACovQAAqPmAAKkNsACpIdAAqV5QAKma0ACprwAAqf+wAKp4sACqjNAArOnQAK1OsACufTAAr6uwALE/AAC4utAAuVwwAMc5gADJ5zAAykwAANP8gADY8wAA2eUAANqagADawtAA6PDQAOlp0ADpuoAA7tlQAPQ0sAD3RzAA+T9QAPy2sAEI2FABCQCwAQkpAAEJUVABChsAAQovMAEKV4ABCpQAARl3gAFIu4ABScGwAAAAAAAbmrAAXjMAAHl1UACF4VAAlOywAJ65UACwqrAAv4EAAAAAD//eh7AACalQABAaMAAVQVAAIDSAADBOsAA/1bAAAAAAAAAAAABVVVAAAAAAAAAAAAB5dVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eufm7":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWWO0mAgBwAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADwGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAASaewAEpnIABKxuAAW9NwAFwzIABcWXAAXLkgAGDWAABpSSAAahuwAGsnsABrOuAAa3RQAHNOUAB3pJAAeo8gAHq1cAB6yJAAexUgAH3ZcACJg7AAlk0gAJZgUACYsbAAmOsgAJj+UACZEXAAmUrgAJmEUACZl3AAmeQAAJpW4ACaagAAnKhQAJ0IAACeJyAAn0ZQAKDFIACn37AAqHjgALWiAAC4LOAAuIyQAMG/IADGdSAAx1rgAMgHIADILXAA1aMgANYWAADWYpAA2z7gAOBUkADjPyAA5R2wAOhoAADz7AAA9BJQAPQ4kAD0XuAA9R5QAPUxcAD1V7AA9ZEgAQOzIAEwkOABMYmwAAAAAAAbrbAAXnQAAHnJIACGPbAAlVNwAJ8m4ACxJJAAwAUgAAAAD//ecJAACbAAABAlUAAVUAAAIEqwADBwAABAAbAAAAAAAAAAAABVVVAAAAAAAAAAAAB5ySABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eufm8":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAWXJeCJQCAAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADuGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAAOFhgADkQIAA5bAAAScmAAEolYABKSiAASqYAAE6YoABWtQAAV38gAFiAYABYksAAWMngAGBTQABkfQAAZ0mgAGduYABngMAAZ8pAAGpyIAB1pKAAgerAAIH9IACENsAAhG3gAISAQACEkqAAhMnAAIUA4ACFE0AAhVzAAIXLAACF3WAAiASgAIhggACJdCAAiofAAIv3QACSyOAAk1vgAJ/94ACibqAAosqAAKueoACwJEAAsQDAALGmIACxyuAAvrZgAL8koAC/biAAxBiAAMj6AADLxqAAzZIAANC6gADbyEAA2+0AANwRwADcNoAA3O5AAN0AoADdJWAA3VyAAOrtYAEV/mABFu1AAAAAAAAbvAAAXqTAAHoIAACGgwAAlaCAAJ95AACxgAAAwGhAAAAAD//eX0AACbUAABAtoAAVWwAAIFtgADCJAABAIsAAAAAAAAAAAABVVWAAAAAAAAAAAAB6CAABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eufm9":"AQQAEgAAAH8ARAAJAAgAAQAAAAAAAAAW+DPzrwCQAAAPVGVYIHRleHQgc3Vic2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUVVRk0gVjIuMgAAAAAAAAAAAAAAAADsGGAAABlgAAAMdgAACnYAACA2AAALcAAADWAAAB4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAAA0cAAAAXAAABCHAAAQhwAABGAAADVUAAAEEAAANVQAAAQQAAAfhwAAHzAAAB8wAAAfMAAAHzYAAB82AAAfNgAAH3AAAB82AAAfcAAAHzYAAAMwAAADNQAAAAAAADUhAAAAAAAADnAAAAAAAAAxcAAAQXAAACtwAAA+cAAALXAAACp1AAA4cAAAM3MAAChwAAAndQAAL3AAAC5wAABDcAAAP3AAADlwAAA6dgAAOXIAADtwAAA8cAAAMHAAACxwAAA9cAAAQnAAADJwAABAdgAAKXUAAASHAAAAAAAABIcAABxwAAAAAAAAAAAAAB0wAAAjcAAAEjAAABpgAAAUMAAACXYAACE2AAAldgAABXAAAAdwAAAScAAABnAAADYwAAAmMAAAFjAAAB1GAAAXNgAAETAAABUwAAALYAAAJDAAACJAAAA3QAAAEDYAABs2AAATNgAAAAAAAAAAAAACcAAAAAAAAA9wAAAAAAAAAAN4lAADg+UAA4mOAASLpAAEkUwABJOQAASZOQAE13sABVdkAAVj1wAFc7AABXTSAAV4NwAF7xIABjC5AAZc3gAGXyIABmBEAAZkywAGjqwABz9CAAgA0gAIAfQACCULAAgocAAIKZIACCq0AAguGQAIMX4ACDKgAAg3JwAIPfIACD8UAAhhCQAIZrIACHesAAiIpwAIn0sACQrUAAkT4gAJ2xsACgGXAAoHQAAKknsACtnLAArnYAAK8ZAACvPUAAu/lAALxl4AC8rlAAwUeQAMYXIADI2XAAyp5AAM27IADYoEAA2MRwANjosADZDOAA2cIAANnUIADZ+FAA2i6wAOeNsAESAFABEuvAAAAAAAAbmrAAXjMAAHl1UACF4VAAlOywAJ65UACwqrAAv4EAAAAAD//eh7AACalQABAaQAAVQVAAIDRwADBOsAA/1bAAAAAAAAAAAABVVVAAAAAAAAAAAAB5dVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","eurb10":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWkWV3yACgAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADqEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAE5OAABapQAAXHkAAFzuAABd/wAAXmCAAGkeAABuTAAAb/kAAHUnAAB2EQAAfzUAAH+qAACGEAAAhoUAAIgyAACJS6AAixSwAItlAACL2gAAjJ0AAIzrAACNhwAAlLAAAJVMAACVf+AAlYaAAJZwgACWhAAAmKYAAJxhgACcdQAAnSSAAJ7lAACfMwAAo3cAAKOxgACj/4AApK8AAKVegAClcgAApiGAAKbRAACnC4AAp5QAAKh+AACpooAAqheAAKorAACqPoAAq4oAAKudgACrxIAAq/8AAKxNAACsYIAArK6AALM7gAC2boAAttAAALb3AAC574AAu9cAALzBAAC+2CAAv38AAMgagADIaIAAyhWAAMthAADRKwAA0mMAANRxgADYVAAA2I6AANkDgADbYAAA29UAAN+kAADh2YAA5muAAOtLgADrXwAA7CIAAO7gAAD1uwAA9/CAAPkogAD5PAAA/TIAASAs0AEoiYAAAAAAABuoAAB8dAAAoRkAALPEAAC/3YAAAAAAACBEAAAwZgAAP/SAAAAAAAAH1DAAD6hgABd8oAAfUNgH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAH1DAAD6hgAB9Q3//wV6//6INgAAAAAABVVVAAAAAAAAAAAAB8dAABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eurb5":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWKiAvnABQAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAAD0EkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAI+40ACeBgAAoCRgAKCsAACh6GAAollgAK7MAAC0zNAAtr4AALy+0AC9zgAAyGYAAMjtoADQWAAA0N+gANLQ0ADUFzAA1ikAANaGAADXDaAA1++gANhKAADY/tAA4UswAOIAAADiPDAA4kPQAONTAADjaaAA5eJgAOo10ADqTGAA6xfQAO0foADtegAA8mugAPKvYADzCdAA89UwAPSgoAD0tzAA9YKgAPZOAAD2kdAA9zAAAPg/MAD5kjAA+hnQAPowYAD6RwAA+8cwAPvd0AD8CwAA/E7QAPypMAD8v9AA/RowAQSx0AEIZwABCNgAAQkFMAEMdqABDqugAQ+60AESJwABEuhgARziMAEdPKABHy3QASCuAAEnY6ABKM0wASsvYAEvsAABL/PQATB7YAEzOAABM7+gATgpoAE6uQABQAUAAUWrYAFFwgABRqQAAUnRoAFRw6ABVFMAAVW8oAFV0zABWmpgAYL00AGMpdAAAAAAABvQAAB9KAAAogIAALTIAADA8wAAAAAAACByoAAwrAAAQFEAAAAAAAAJEtAAEiWgABs4YAAkSzgH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAJEtAAEiWgACRLP//t2m//5MegAAAAAABVVWAAAAAAAAAAAAB9KAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eurb6":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWojUPnQBgAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADyEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAHFCsAB/E7AAgR+wAIGisACC1FAAg0GAAI9IAACVFLAAlvUAAJzBsACdx7AAqAOwAKiGsACvsLAAsDOwALIUAACzT1AAtU8wALWpAAC2LAAAtwZQALddsAC4DFAAwBCwAMC/UADA+YAAwQDQAMIG0ADCHLAAxIAAAMit0ADIw7AAyYgwAMt+UADL1bAA0JxQANDd0ADRNTAA0fmwANK+MADS1AAA05iAANRdAADUnoAA1TdQANY9UADXhNAA2AfQANgdsADYM4AA2aawANm8gADZ6DAA2imwANqBAADaltAA2u4wAOJD0ADl2NAA5kYAAOZxsADpxTAA6+cAAOztAADvRDAA7/8AAPmiMAD5+YAA+9nQAP1NAAEDyFABBSWwAQdzMAELzLABDA4wAQyRMAEPNgABD7kAARP8sAEWddABG5PQASEJMAEhHwABIflQASULUAEsuFABLzGAATCO0AEwpLABNRQAAVw+UAFlmzAAAAAAABuasAB8OAAAoMtQALNtUAC/gQAAAAAAACA0gAAwTrAAP9WwAAAAAAAIxAAAEYgAABpMAAAjEAgH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAIxAAAEYgAACMQD//ueA//5bQAAAAAAABVVVAAAAAAAAAAAAB8OAABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eurb7":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWSWQ5hwBwAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADwEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAGYa4ABzkyAAdZIAAHYRsAB3O7AAd6YgAINfcACJBuAAitsgAJCCkACRggAAm3xQAJv8AACi+AAAo3ewAKVMAACmf3AAqHJwAKjKAACpSbAAqh6QAKpzsACrHgAAsu7gALOZIACz0eAAs9kAALTYcAC07bAAt0GwALtUsAC7agAAvCmQAL4TIAC+aFAAwxBQAMNQIADDpVAAxGTgAMUkcADFObAAxflQAMa44ADG+LAAx42wAMiNIADJzHAAykwgAMphcADKdrAAy+CQAMv14ADMIHAAzGBQAMy1cADMyrAAzR/gANRGcADXxHAA2C7gANhZcADbl5AA3auwAN6rIADg81AA4alwAOsOsADrY+AA7TggAO6iAAD087AA9khQAPiHAAD8xJAA/QRwAP2EIAEAGAABAJewAQTAAAEHKVABDCZwARF4sAERjgABEmLgARVhIAEc3OABH0YgASCasAEgsAABJQLgAUsxsAFUUnAAAAAAAButsAB8jbAAoTpQALPpIADABSAAAAAAACBKsAAwcAAAQAGwAAAAAAAIi7AAERdwABmjIAAiLugH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAIi7AAERdwACIu7//u6J//5lzgAAAAAABVVVAAAAAAAAAAAAB8jbABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eurb8":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWgDKNzQCAAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADuEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAFNTAABgdIAAYmaAAGLjAABkBYAAZG1AAG/bAAB1XgAAdyaAAHypgAB9ooAAh1yAAIfZAACOqAAAjySAAJDtAACSGMAAk/9AAJRUgACU0QAAlaCAAJXzgACWmYAAnjgAAJ7eAACfFWAAnxxAAKAVQACgKgAAom8AAKZnwACmfIAApzdAAKkUgACpZ4AArfGAAK4vwACugsAArz2AAK/4QACwDQAAsMfAALGCgACxwMAAslIAALNLAAC0gkAAtP7AALUTgAC1KEAAtokAALadwAC2x0AAtwWAALdYgAC3bUAAt8BAAL64wADCIEAAwogAAMKxgADF2sAAx+GAAMjagADLFAAAy8WAANTuQADVQUAA1wnAANhqgADek4AA39+AAOIPwADmMgAA5nBAAObswADpcAAA6eyAAO36AADwU8AA9TDAAPpgwAD6dYAA+0UAAP4wAAEFe4ABB9VAAQkhQAEJNgABDW0AATKl4AE7i8AAAAAAABu8AAB8zgAAoY2AALRGAADAaEAAAAAAACBbYAAwiQAAQCLAAAAAAAAIVKAAEKlAABj94AAhUogH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAIVKAAEKlAACFSj//vVs//5wIgAAAAAABVVWAAAAAAAAAAAAB8zgABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eurb9":"AS4AEgAAAH8AXgAGAAQABQAOAAUAAAAWgtT4EwCQAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUkIgVjIuMgAAAAAAAAAAAAAAAADsEkAJBUVAAQBYQAEATUABAC1AAABLQAEAPEAAAEdAAQBaQAAAREABAFdAAAA+IAAAO0IAACkiAAAcQAAAHSAAAA9BAQEsIgAAK0ABAAMgAAAaIAAAH0ABAyoiAAAlIAAAHkEAADEgAQEgIgEAOyAAABkgAQEkIAAAUEIAAB0iAABJQgEAWSABABEgAAAmQAAAVjAAAAAAAAAAAAAASCABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAABdAAAAXQAAAF0AAAAIQAAACEAAABSAAABhTAQgEIAAAAAAAAChAAABKQAAAP0AAAEZAAQFSQAAAJ0AAABBAAQVMQAEATkABAAxAAAALQQAAQ0AAACNAAABdQAAAVUAAAFFAAQAzQAEGU0IAAD1AAAAuQAEAE0ARBU9AAABCQAkEXEAFBEFAAQEbQA0EQEABAQAAAAAAAAAAAAAAAAAAAAAAAAAACEAAADMgAQA5QAAAFiABADlAAAAiIAEACUABAi8iAQAyQAAABkAAAAVCAAAhQAAAB0AAAFsgAAA2IAAAOCABADAiAAA3IgAADSAAAA4gAQAKMAAANSAAABUgAABUIAAAFyAAADQiAAAUIAEABiAAAAYgAAA6IAEBAAAAAAEAAAAAAAAAAAAAAAAE/dwABcc8AAXlEgAF7IcABf3uAAYEJQAGs2sABwfyAAcjSwAHd9IAB4a8AAgb5wAII1wACIvHAAiTPAAIrpUACMCLAAjdsAAI4ssACOpAAAj2rgAI+6cACQWZAAl6cgAJhGQACYe1AAmIHgAJlwkACZhHAAm7FQAJ9/4ACfk8AAoEbAAKIQQACiX8AAprmQAKb1QACnRMAAp/fAAKiqwACovrAAqXGwAKoksACqYFAAquuQAKvaQACtBJAArXvgAK2PwACto7AArvXAAK8JsACvMXAAr20gAK+8sACv0JAAsCAgALbOkAC6EeAAunVQALqdIAC9pMAAv5YAAMCEsADCppAAw1CwAMwYIADMZ7AAzh1AAM9vUADVVuAA1pUgANiuIADcpHAA3OAgAN1XcADfwAAA4DdQAOQZwADmWpAA6wPgAO/8wADwELAA8NeQAPOjkAD6oZAA/OJQAP4gkAD+NHABAj6wASXsIAEuc3AAAAAAABuasAB8OAAAoMtQALNtUAC/gQAAAAAAACA0cAAwTrAAP9WwAAAAAAAH/CAAD/hAABf0UAAf8HgH+AAIB/gAGAf4ACgH+AAwB/gAEAPYADADuABIA6gAQAQYADAGGAAwBngAMAAYADAAOAA4ALgAMAAH/CAAD/hAAB/wf//wB8//6AuwAAAAAABVVVAAAAAAAAAAAAB8OAABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","eurm10":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAWIvvBOQCgAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADqDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAEcToABU+VAAVUAgAFW8AABcKiAAXYwgAGNsoABk8gAAZvNQAGqvIABrg4AAbbfQAG6gAAB0taAAeIMgAHyFsAB8qSAAfixgAH7fgAB/11AAf+kAAIBBgACAdqAAgxcwAIOTIACGr6AAirIwAIxJUACM1uAAjVLQAI2ZoACN4GAAjh1QAI4nMACOSqAAjqMgAI8fAACPZdAAj3eAAJA6MACRnDAAk3ogAJOdgACWT9AAlqhQAJbvIACYClAAmJfgAJlsUACamTAAmrygAJrgAACa8bAAmwNgAJvGIACb6YAAnh/gAJ8pYACkfFAApW4gAKWF0ACnzeAAqJCgAKmaIACqFgAAqoAwAKqjoACrMTAAtArQALaZsAC28jAAt1xgALkFMAC6Q9AAwRwgAMGYAADB8IAAw2QwAMPx0ADFQiAAxVPQAMY54ADIggAAzZ/QAM/n4ADUDeAA1DFQANRmYADVTIAA2dywAOAnYADgOSAA6nSwAPyIMAELTDAAAAAAABuoAAB1igAAhRiAAKEZAACxAAAAv92AAAAAAAAFL4AAIEQAADBmAAA/9IAAAAAAAAbqAAAONmAAFVGgABxs2Af4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAcbMAAONmAAHGzf//HJr//qrmAAAAAAAFVVUAAAAAAAAAAAAHWKAAEAAAAAAAAAAGDMAABFJAAATA4AAGDMAAApfAAAZ7YAAGDMAABS+AAAMGYAAD46AABntgAABuoAAjLN0AD/0gAAQa8A==","eurm5":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAWNzvG5wBQAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAAD0DVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAIbRoACXdtAAl8ugAJhgAACgE6AAobugAKjFoACqmAAArP7QALF3oACydgAAtRpgALYwAAC9eaAAwgegAMbVMADG/6AAyNAAAMmmAADKztAAyuQAAMtOAADLjaAAzrMwAM9HoADTAaAA188wANm20ADaYGAA2vTQANtJoADbnmAA2+egANvzMADcHaAA3IegAN0cAADdcNAA3YYAAN5vMADgFzAA4lOgAOJ+AADluNAA5iLQAOZ3oADnytAA6HRgAOly0ADq2zAA6wWgAOswAADrRTAA61pgAOxDoADsbgAA7xRgAPBSYAD2stAA99TQAPfw0AD6rGAA+5WgAPzToAD9aAAA/ecwAP4RoAD+uzABCVTQAQxlMAEMzzABDU5gAQ9LMAEQyNABGPugARmQAAEZ+gABG7cwARxg0AEd86ABHgjQAR8cYAEh2AABJ/jQASq0YAEvrGABL9bQATAWYAExKgABNqEwAT4qYAE+P6ABSoEwAWAoAAFx1zAAAAAAABvQAAB2NAAAhdkAAKICAACyAAAAwPMAAAAAAAAFNwAAIHKgADCsAABAUQAAAAAAAAhIAAARBaAAGYhgACILOAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAiC0AARBaAAIgs//+76b//md6AAAAAAAFVVYAAAAAAAAAAAAHY0AAEAAAAAAAAAAGFYAABFiAAATHwAAGFYAAApuAAAaEwAAGFYAABTcAAAMKwAAD6UAABoTAAABvQAAjX70AEBRAAAQg4A==","eurm6":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAW5Ax4JwBgAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADyDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAGpYAAB6cIAAesKAAHtSAACCxIAAhF6AAIstAACM8AAAj0KAAJOVgACUi4AAlxkAAJgmAACfMgAAo5mAAKg+gACoZ4AAqigAAKr3gACsFoAArCsAAKyRgACszwAAr9oAALBpgAC0BAAAuKkAALqAgAC7JIAAu7QAALwGAAC8WAAAvJ6AALyqAAC80wAAvTmAAL3JAAC+GwAAvi+AAL8RAADAqwAAwtSAAML9gADGHQAAxoOAAMbVgADIHYAAyMGAAMm3gADLFAAAyz0AAMtmAADLeoAAy48AAMxwgADMmYAAzymAANBdAADWh4AA15+AANe7AADaX4AA20EAANx0gADdBAAA3X8AAN2oAADeTAAA6IwAAOuCgADr6QAA7GQAAO5QAADvwQAA966AAPg+AAD4pIAA+lMAAPr3AAD8fIAA/JEAAP2bgAEAQAABBi0AAQjRgAENn4ABDciAAQ4GAAEPEIABFFmAARujAAEbt4ABJ5GAATyBAAFNmwAAAAAAABuasAB1UVAAhNhQAKDLUACwqrAAv4EAAAAAAAAFLQAAIDSAADBOsAA/1bAAAAAAAAgCAAAQdgAAGLEAACDsCAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAg7AAAQdgAAIOwP/++KD//nTwAAAAAAAFVVUAAAAAAAAAAAAHVRUAEAAAAAAAAAAGCdUABFArAAS+lQAGCdUAApaAAAZ4QAAGCdUABS0AAAME6wAD4cAABnhAAABuawAjG+gAD/VrAAQY9Q==","eurm7":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAW+ruHXABwAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADwDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAF/wAABvpAAAb/QAAHCAAAB3xAAAeVQAAH/4AACBsAAAg/QAAIgsAACJHAAAi5mwAIygAACTgAAAl8wAAJxUAACcfAAAnjGwAJ78AACgFAAAoCgAAKCMAACgyAAAo8AAAKRMAACn0AAArFgAAK4kAACuxAAAr1AAAK+gAACv8AAAsDTgALBAAACwaAAAsMwAALFYAACxqAAAsbwAALKYAAC0KAAAtkQAALZsAAC5eAAAudwAALosAAC7bAAAvAwAALz8AAC+UAAAvngAAL6gAAC+tAAAvsgAAL+kAAC/zAAAwkwAAMN4AADJfAAAyo1QAMqoAADNPAAAzhgAAM9EAADP0AAA0EgAANBwAADREAAA2xAAAN30AADeWAAA3tAAAOCwAADiGAAA6dQAAOpgAADqxAAA7GgAAO0IAADuhAAA7pgAAO+cAADyMAAA9/gAAPqMAAD/PAAA/2QAAP+gAAEApAABBcwAAQzoAAEM/AABGIwAASz44AE9qAAAAAAAAButsAB1olAAhTQAAKE6UACxJJAAwAUgAAAAAAAFMJAAIEqwADBwAABAAbAAAAAAAAfQAAAQDyAAGBawACAeWAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAgHkAAQDyAAIB5f/+/w7//n6VAAAAAAAFVVUAAAAAAAAAAAAHWiUAEAAAAAAAAAAGDgAABFMlAATB2wAGDgAAAphJAAZ8twAGDgAABTCSAAMHAAAD5G4ABny3AAButwAjNCIAEABuAAQbyQ==","eurm8":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAWeMbKNgCAAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADuDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAEzMgABb0KAAXB0gAFyjAABjlaAAZRQgAGttwABtEoAAbz0gAHNF4AB0K2AAdo1AAHeIAAB+GwAAgjbgAIaMIACGsmAAiFUAAIkWYACKIiAAijVAAIqU4ACKzkAAjaUAAI4q4ACRh4AAldzAAJeUoACYLaAAmLOAAJkAAACZTIAAmY5gAJmZAACZv0AAmh7gAJqkwACa8UAAmwRgAJvWwACdVUAAn1mgAJ9/4ACiacAAoslgAKMV4ACkR+AApODgAKXGYACnC4AApzHAAKdYAACnayAAp35AAKhQoACoduAAqtrgAKv5wACxumAAsr/AALLZQAC1UGAAtiLAALdBoAC3x4AAuDpAALhggAC4+YAAwomAAMVNIADFrMAAxh+AAMfqgADJQsAA0KggANEuAADRjaAA0x9AANO4QADVI6AA1TbAANYvYADYpoAA3i3AAOCk4ADlIGAA5UagAOWAAADmeKAA62bgAPIzQADyRmAA/VTgARDdAAEg0UAAAAAAABu8AAB13wAAhXjAAKGNgACxgAAAwGhAAAAAAAAFM0AAIFtgADCJAABAIsAAAAAAAAd4gAAPW0AAFwjgAB62iAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAetoAAPW0AAHraP//Ckz//o9yAAAAAAAFVVYAAAAAAAAAAAAHXfAAEAAAAAAAAAAGESAABFVgAATEUAAGESAAApmgAAaAEAAGESAABTNAAAMIkAAD5nAABoAQAABu8AAjRkwAEAiwAAQd6A==","eurm9":"ATMAEgAAAH8AYQAHAAUABQAOAAUAAAAWlSOt9QCQAAAWVGVYIG1hdGggaXRhbGljIHN1YnNldAAAAAAAAAAAAAAAAAAAAAAACUVVUk0gVjIuMgAAAAAAAAAAAAAAAADsDVARBUdQAQBOUAEAUlABADFQAABKUAEAPlAAAElQAQBaUAAARlABAFxQAABAIAAAQVMAADgjAAAXUAAAHiAAABlSAQEnIwAAIVABAAUgAAAjIAAAHFABAzojAAAyIAAAIFIAADkgAQEdIwEANiAAABogAQEtIAAAS1MAACwjAABMUwEAWyABABEgAAAfUAAAXUAAAAAAAAAAAAAATyABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAABZQAAAWUAAAFlAAAAIQAAACEAAATTEAABhkAQhNMQAAAAAAAChQAABRUAAAP1AAAEhQAQFXUAAANVAAABVQAQVQUAEAVFAAAAlQAAAKUgAARVAAACZQAABgUAAAWVAAAFVQAQArUAUGWFMAADlQAAAlUAEAE1ARBVNQAAA9UA0EX1AJBENQAQEiUAkERFABAQAAAAAAAAAAAAAAAAAAAAAAAAAACFAAADkgAQAuUAAAEiABADNQAAAWIAEADFABAiojAQA7UAAABlAAAANTAAAkUAAAB1AAAF4gAABCIAAAKSABAC8jAAA3IwAADiAAAA8gAQALQAAAPCAAABQgAABWIAAAGyAAADAjAAAQIAEABCAAAAMjAAA0IAEBAAAAAAEAAAAAAAAAAAAAAAAEkscABXeyAAV8QAAFhDkABe4kAAYE6wAGZbkABn7HAAafzgAG3U4ABur5AAcPRwAHHjkAB4JyAAfBFQAIAyQACAVrAAgeVQAIKdwACDnOAAg68gAIQKQACEQOAAhvVQAId04ACKqOAAjsnAAJBs4ACQ/rAAkX5AAJHHIACSEAAAkk6wAJJY4ACSfVAAkthwAJNYAACToOAAk7MgAJR7kACV6AAAl9QAAJf4cACavyAAmxpAAJtjIACchrAAnRhwAJ3zIACfKOAAn01QAJ9xwACfhAAAn5ZAAKBesACggyAAospAAKPbkACpVrAAqk+QAKpoAACswVAArYnAAK6bIACvGrAAr4gAAK+scACwPkAAuVqwALv84AC8WAAAvMVQAL56sAC/wrAAxs6wAMdOQADHqVAAySgAAMm5wADLFAAAyyZAAMwTIADObHAA07DgANYKQADaT5AA2nQAANqqsADbl5AA4EpAAObEcADm1rAA8V+QAQP7kAETLyAAAAAAABuasAB1UVAAhNhQAKDLUACwqrAAv4EAAAAAAAAFLQAAIDRwADBOsAA/1bAAAAAAAAceQAAOocAAFfKwAB1DmAf4AAgH+AAYB/gAKAf4ADAH+AAQA9gAMAO4AEgDqABABBgAMAYYADAGeAAwABgAMAA4ADgAuAAwAAdQ4AAOocAAHUOf//FeT//qDVAAAAAAAFVVUAAAAAAAAAAAAHVRUAEAAAAAAAAAAGCdUABFArAAS+lQAGCdUAApaAAAZ4QAAGCdUABS0AAAME6wAD4cAABnhAAABuawAjG+cAD/VrAAQY9Q==","eusb10":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWsJWMkwCgAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADqGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAPbgAAFyUAACQOAAAkSgAAJJoAACU/AAAmUgAAJ+IAACgZAAAp2wAAK5MAACu2AAAr/AAAL4AAAC/GAAAwEQAAMFcAADD8AAAxfgAAMycAADMsAAAzvQAAM9YAADREAAA2sAAAN1AAADf6AAA4BAAAOA4AADizAAA7gwAAO+IAADwPAAA/9wAARwkAAEeLAAAAAAAADBmAAB8dAAAlTSgALPEAAC/3YAAAAAAABVLoAAgRAAAP/SAAAAAAAAPoAgDCAAIAwgAEAAoJgAAEA8wAAAAAABVVVAAAAAAAAAAAAB8dAABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eusb5":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWKR7o6wBQAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAAD0GjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAerYAAJ2VAADX76AA2P7QANpoYADdUjAA4i0wAOk9MADqNdAA8ifQAPnsoAD6itAA+8cwAQurMAEM56ABDjqgAQ93AAESYNABFKxgARwtYAEcRAABHtNgAR9EYAEhNaABLCgAAS77MAEx+6ABMijQATJWAAE1P9ABQfYwAUOjoAFEbwABVhcAAXYMMAF4V9AAAAAAADCsAAB9KAAAlgxgALTIAADA8wAAAAAAABVqYAAgcqAAQFEAAAAAAAARqAgDCAAIAwgAEAAtXgAAEiWgAAAAAABVVWAAAAAAAAAAAAB9KAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eusb6":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWjvSeXgBgAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADyGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAXawAAH+eAAC4bAAAuXQAALrUAAC9qgAAwmQAAMlEAADKNgAA0fIAANmCAADaHAAA21AAAOrIAADr/AAA7UYAAO56AADxUAAA84wAAPraAAD68AAA/W4AAP3cAAD/wAABCmgAAQ0oAAEQFAABEEAAARBsAAETQgABH6IAASFEAAEiCgABMzoAAVJWAAFUkgAAAAAAADBOsAB8OAAAlOywALNtUAC/gQAAAAAAABVBUAAgNIAAP9WwAAAAAAARMAgDCAAIAwgAEAAsKdAAEapQAAAAAABVVVAAAAAAAAAAAAB8OAABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eusb7":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAW249NFwBwAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADwGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAUt5QAHPukACrQuAArEQAAK2a4ACwXgAAtPiQALuq4AC8lpAAxB8gAMt84ADMEuAAzT7gANxQAADdfAAA3r1wAN/pcADirJAA5NmwAOv3IADsDJAA7noAAO7lIADwvJAA+x2wAP3LcAEApAABAM7gAQD5sAEDvOABD8qQARFhsAESIpABIuBQAUEtcAFDWpAAAAAAADBwAAB8jbAAlVNwALPpIADABSAAAAAAABVQAAAgSrAAQAGwAAAAAAAQvbgDCAAIAwgAEAArBCAAETTgAAAAAABVVVAAAAAAAAAAAAB8jbABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eusb8":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWZ1+2OgCAAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADuGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAQGtAAGCg4ACWh0AAl4HAAJjPwACbgKAAn/zAAKaCwACnaGAArr8gALXsIAC2fkAAt6KAAMZQAADHdEAAyK1gAMnRoADMgoAAzqFAANWPoADVpIAA2AHgANhqQADaNYAA5FIAAObuAADps8AA6d2AAOoHQADsuCAA+HYgAPoCwAD6vqABCw2gASiSYAEqsSAAAAAAADCJAAB8zgAAlaCAALRGAADAaEAAAAAAABVbAAAgW2AAQCLAAAAAAAAQTwgDCAAIAwgAEAAp54AAEMMAAAAAAABVVWAAAAAAAAAAAAB8zgABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eusb9":"AN0AEgAAAHgAJgAGAAQAAgACAAIAAAAWHpN8ugCQAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU0IgVjIuMgAAAAAAAAAAAAAAAADsGjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgAAAAAAAAIUAAAApAAAAAAAAAAAAAAB1AAAAfQAEAG0AAAAxAAAAiQAAADkAAABJAAAANQgAAI0AAAARAAQEGQgEBIEAAABdAAAAkQAAAHEAAABZAAAAQQAAAE0AAABlAAAAIQAAAC0AEABVAAAARQAAAJUAAABhAAAAMQAAAD0AAAAAAAAAAAAAAAAAAAB5AAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAPr9QAF4fAACSn1AAk5NQAJTYsACXd7AAm9YAAKIwsACjEFAAqjZQALEzsACxwgAAst6wAMEqsADCR1AAw3hQAMSVAADHNAAAyUSwANAFAADQGVAA0mcAANLMsADUjAAA3mVQAODwAADjo1AA48wAAOP0sADmk7AA8gOwAPOGAAD0PQABBB+wASDgUAEi8QAAAAAAADBOsAB8OAAAlOywALNtUAC/gQAAAAAAABVBUAAgNHAAP9WwAAAAAAAP4rgDCAAIAwgAEAAo0OAAEFOQAAAAAABVVVAAAAAAAAAAAAB8OAABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","eusm10":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWTFKnrgCgAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADqGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAANp8AAFHugABuR4AAgHagAIGR0ACD2eAAisPgAI0vYACN8iAAlj4gAJiGMACaQLAAmrygAJu0YACmNtAAqCZgAKkeMACpmiAAqiewAK8z0AC1JgAAts7QALcnUAC3f9AAuQUwAMGYAADC1qAAxUIgAMYoMADGS6AAxm8AANKr4ADT/DAA1JuAAOJvgAD7duAA/UMgAAAAAAAwZgAAdYoAAJU0oACzxAAAv92AAAAAAAAVS6AAIEQAAD/0gAAAAAAAA3UAAAbqAAAKXwgDCAAIAwgAEAAjiAAADjZgAAAAAABVVVAAAAAAAAAAAAB1igABAAAAAAAAAABgzAAARSQAAEwOAABgzAAAKXwAAGe2AABgzAAAUvgAADBmAAA+OgAAZ7YAAAbqAAIyzdAA/9IAAEGvA=","eusm5":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWlB1XVwBQAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAAD0GzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAcxwAAJPSAAC1xgAAy42gAMzg0ADPnGAA1+RgANrKYADbs6AA5aOgAOhfMADqcTAA6wWgAOwuYAD4xNAA+xZgAPw/MAD806AA/X0wAQOI0AEKqAABDKTQAQ0O0AENeNABD0swARmQAAEbDaABHfOgAR8HMAEfMaABH1wAAS4EYAEvlzABMFYAAUDmAAFe4GABYQegAAAAAAAwrAAAdjQAAJYMYAC0yAAAwPMAAAAAAAAVamAAIHKgAEBRAAAAAAAABCQAAAhIAAAMbAgDCAAIAwgAEAAqjgAAEQWgAAAAAABVVWAAAAAAAAAAAAB2NAABAAAAAAAAAABhWAAARYgAAEx8AABhWAAAKbgAAGhMAABhWAAAU3AAADCsAAA+lAAAaEwAAAb0AAI1+9ABAUQAAEIOA=","eusm6":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAW/BiHugBgAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADyGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAV0kAAHbqgACXv4AArM8AAK4XAACwu4AAuL2AALuLAAC8bIAAxgiAAMitAADKrYAAyz0AAMxcAADYiAAA2sYAANvlAADcdIAA3RiAAOLxAADp1AAA68AAAOwmgADsjQAA7lAAAPg+AAD5rwAA/HyAAP2HAAD9sAAA/dkAAQwFgAENiwABDkOAAR5HgAE7RIABPVmAAAAAAAAwTrAAdVFQAJTssACzbVAAv4EAAAAAAAAVQVAAIDSAAD/VsAAAAAAABAEAAAgCAAAMAwgDCAAIAwgAEAApJwAAEHYAAAAAAABVVVAAAAAAAAAAAAB1UVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvoAA/1awAEGPU=","eusm7":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWahQE5gBwAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADwGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAATVgAAGw0AACMPAAAoMgAAKIIAACknAAArGwAAK8oAACwBAAAuWQAALv4AAC97AAAvngAAL+QAADLcAAAzaAAAM64AADPRAAAz+QAANWYAADcUAAA3jAAAN6UAADe+AAA4LAAAOpgAADryAAA7oQAAO+IAADvsAAA79gAAP2sAAD/KAAA/9wAAQ98AAErxAABLcwAAAAAAAAwcAAAdaJQAJVTcACz6SAAwAUgAAAAAAAVUAAAIEqwAEABsAAAAAAAA+gAAAfQAAALuAgDCAAIAwgAEAAoJeAAEA8gAAAAAABVVVAAAAAAAAAAAAB1olABAAAAAAAAAABg4AAARTJQAEwdsABg4AAAKYSQAGfLcABg4AAAUwkgADBwAAA+RuAAZ8twAAbrcAIzQiABAAbgAEG8k=","eusm8":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWoul3jACAAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADuGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAO2eAAFkbQAB378AAi7aAAIzqgACPZcAAlurAAJmMgACaYEAAo2ZAAKXhgACnwsAAqEmAAKlXAAC0xQAAtuAAALftgAC4dEAAuQ5AAL6LgADFAwAAxtEAAMcxQADHkYAAyTkAANKMAADT5oAA1ohAANeCgADXqQAA18+AAOUewADmjIAA5znAAPZDwAERfEABE3DAAAAAAAAwiQAAdd8AAJWggAC0RgAAwGhAAAAAAAAVWwAAIFtgAEAiwAAAAAAAA8KAAAeFAAALR4gDCAAIAwgAEAAmpIAAD3UAAAAAAABVVWAAAAAAAAAAAAB13wABAAAAAAAAAABhEgAARVYAAExFAABhEgAAKZoAAGgBAABhEgAAUzQAADCJAAA+ZwAAaAEAAAbvAAI0ZMABAIsAAEHeg=","eusm9":"AOAAEgAAAHgAJwAGAAQABAACAAIAAAAWdd5K2ACQAAAXVGVYIG1hdGggc3ltYm9scyBzdWJzZXQAAAAAAAAAAAAAAAAAAAAACUVVU00gVjIuMgAAAAAAAAAAAAAAAADsGzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUgAAAAAAAAIkAAAApAAAAAAAAAAAAAAB9AAAAdQAEAHEAAAA1AAAAjQAAAD0AAABBACAAOQgAAJEAEAARAAQEGQgEBIUAAABhAAAAlQAAAHkAEABZAAAASQAAAE0AAABpAAAAIQAAAC0AMABdAAAAUQAAAJkAAABlAAAAMQAAAEUAAAAAAAAAAAAAAAAAAACBAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1MAAANTAAAAAAAAAAAAAAJTAAAAAAAAAAAAAAAAAAAFUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAAAAAAOOsgAFVgsABy6uAAhd3AAIcE4ACJZZAAkJoAAJMfkACT6nAAnI/AAJ7wcACgvZAAoT6wAKJA4ACtNHAArzjgALA7IACwvEAAsU/AALaSQAC8xHAAvn8gAL7bUAC/N5AAwM1QAMm8cADLCHAAzY4AAM59wADOorAAzseQANuIQADc5rAA3YywAOv1kAEGCnABB+oAAAAAAAAwTrAAdVFQAJTssACzbVAAv4EAAAAAAAAVQVAAIDRwAD/VsAAAAAAAA5pAAAc0cAAKzrgDCAAIAwgAEAAlBlAADs9QAAAAAABVVVAAAAAAAAAAAAB1UVABAAAAAAAAAABgnVAARQKwAEvpUABgnVAAKWgAAGeEAABgnVAAUtAAADBOsAA+HAAAZ4QAAAbmsAIxvnAA/1awAEGPU=","msam10":"AOUAEgAAAH8AFQAQABAAAgAAAAAAAAAWl7PuzQCgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADqC4AAAAuAAAALgAAAC4AAAAuAAAACUAAAB5cAAAeXAAALZgAAC2YAABFDAAARQwAAC4AAAAiQAAANkAAABpAAABFDAAARQwAAEYoAABGKAAAMmwAADJsAAAObAAADmwAAA5sAAAObAAASQwAAEkMAABGKAAARigAABJAAAASQAAAREQAAFBEAABFQAAARUAAAC6wAAAusAAALrAAAC70AABJQAAAHkAAAB5AAAAtmAAAL5gAAC6wAAAusAAALvQAAC3gAAAt4AAALeAAAC3gAAAt4AAALvQAAC3gAAAuKAAABUAAABDIAAAtmAAALZgAAC3gAAAu9AAALeAAAC4oAAAtUAAALVAAAC1QAAAtUAAALeAAAC3gAAA+bAAAEvQAACFAAAAtUAAALVAAABDIAAAQyAAAIUAAACFAAAAhQAAALkAAAC94AAAveAAAL/wAAC/8AAAmABAAReAAAEXgAAAyQAAAGmwAABpsAAAa7AAAIkAAACJAAAAhEAAALkAAAC5sAAAubAAALVAAAC1QAAAdQAAAHUAAAClAAAApQAAALkAAAC5AAAAu9AAALvQAAC1UAAAtVAAATVAAAE1QAAASQAAAEkAAAEJkAAA6ZAAAHkAAAC5YAAAsRAAALMgAABBAAAAQQAAAMkAAABMAAAAUrAAALZgAAC2YAAAtmAAAAAAAAAARmZgAEccgABqqtAAgAAgAI45AACcceAAqqrQALjjsADAACAAwqqwAMccoADVVYAA445gAOb30ADxxzAA8liAAQAAMAEccgABVVWgAWOOgAAAAAAAYLzgAG444AB2ydAAhbugAIzDoACU/IAAovyAAKzM0ACxNrAAusXQAMF+UADTM4AA4rygAOqq0AD7iWAAAAAP/93rj//2ydAAA3dQAAkBIAAPhQAAFPyAABxx0AAi/IAAJ9SgAC5JAAAxxwAAOsXQAEF+UABivKAAe4lgAAAAAAAGZmAAAAAAAAAAAAAAAAAAAAAAAG444AEAADAAAAAAAK0voABky6AAcZhgAK+agABYR4AAabNQAFzmgABJ9KAAJmZgAD9JoABi2AAADMzQAmPXAAECj2AAQAAA==","msam5":"AOcAEgAAAH8AFwAQABAAAgAAAAAAAAAWIokceABQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAAD0EKAAABCgAAAQoAAAEKAAABCgAAACQAAACXUAAAl1AAAQdgAAEHYAABNDAAATQwAAEKAAAAxwAAAScAAACHAAABNDAAATQwAAE4cAABOHAAARdwAAEXcAAAR3AAAEdwAABHcAAAR3AAAUQwAAFEMAABOHAAAThwAABXAAAAVwAAATEQAAFhEAABNAAAATQAAAELwAABCsAAAQrAAAEM0AABRAAAAJcAAACXAAABB2AAAK5gAAEKsAABCrAAAQzQAAEIgAABCIAAAQiAAAEIgAABCIAAAQvQAAEIgAABCaAAABQAAAAzIAABBmAAAQZgAAEIgAABC9AAAQiAAAEJoAABBUAAAQVAAAEFQAABBUAAAQiAAAEIgAAA93AAAFmQAAB0AAABBUAAAQVAAAAzIAAAMyAAAHQAAAB0AAAAdAAAAQcAAAEN4AABDeAAAQ/wAAEP8AAA5wBAATdwAAE3cAABFwAAAIdwAACHcAAAiXAAAMcAAADHAAAAxDAAAQcAAAEHcAABB3AAAQVAAAEFQAAAlAAAAJQAAADUAAAA1AAAAQcAAAEHAAABC9AAAQvQAAEGUAABBlAAAVVAAAFVQAAAVwAAAFcAAADoYAAAuGAAAJcAAAEKYAABARAAAQMgAABTAAAAUwAAARcAAABaAAAAYnAAAQdgAAEHYAABB2AAAAAAAAAAcOPQAHVVoACgANAAocegALxyYADOOaAA4AAwAOAA0ADxyAAA+OTQAP0o0AEDjzABCOOgAQk/oAERxzABFVZgAScdoAE45NABXHMwAYABoAHHHmAB2OWgAAAAAABletAAbjjQAICCYACLHGAAmdWgAKWvoACuOTAAt3nQAMPe0ADRydAA2iFgAOCLoAEFaTABFVZgASO5AAAAAA//5XrQAAQuYAAIfTAAGdWgACLUMAAp+DAAMfCgADglYABAAAAAR73QAE9KAABV/mAAXxXQAIVpMACjuQAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAbjjQAXjk0AAAAAAA7NygAGMw0ACBDtABBnYwAIgrMACA6QAAZ09gAEtg0AAzMzAAZmZgAH6UAAAZmaAB+uEwAWuFMABAAA","msam6":"AOgAEgAAAH8AGAAQABAAAgAAAAAAAAAWDEXqNgBgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADyD6AAAA+gAAAPoAAAD6AAAA+gAAACQAAACXUAAAl1AAAPZgAAD2YAABRDAAAUQwAAD6AAAApwAAATcAAAB3AAABRDAAAUQwAAFHkAABR5AAASeQAAEnkAAAN5AAADeQAAA3kAAAN5AAAVQwAAFUMAABR5AAAUeQAABXAAAAVwAAAUEQAAFxEAABRAAAAUQAAAD7wAAA+8AAAPvAAAD80AABVAAAAJcAAACXAAAA9mAAAL5gAAD6sAAA+rAAAPzQAAD4kAAA+JAAAPiQAAD4kAAA+JAAAPzQAAD4kAAA+aAAABQAAABDIAAA9mAAAPZgAAD4kAAA/NAAAPiQAAD5oAAA9UAAAPVAAAD1QAAA9UAAAPiQAAD4kAABF5AAAFmgAACEAAAA9UAAAPVAAABDIAAAQyAAAIQAAACEAAAAhAAAAPcAAAD94AAA/eAAAP/wAAD/8AAAxwBAAUeAAAFHgAABJwAAAHeQAAB3kAAAeZAAAKcAAACnAAAApDAAAPcAAAD3kAAA95AAAPVAAAD1QAAAlAAAAJQAAADUAAAA1AAAAPcAAAD3AAAA/NAAAPzQAAD2UAAA9lAAAWVAAAFlQAAAVwAAAFcAAAEHcAAA53AAAJcAAAD5YAAA8RAAAPMgAABSAAAAUgAAAScAAABbAAAAYpAAAPZgAAD2YAAA9mAAAAAAAAAAXaEwAGEvUACKqoAAlVUAAKOOAAC0JbAAxL1QAM45AADVVQAA5eywAOhLUADsj7AA8GowAPaDUAD2hFABAl1QAQJfAAEHHAABF7OwATjjAAFaElABnHEAAa0IsAAAAAAAY9KAAHEvMACAg9AAiwyAAJaGUAChjAAArzyAALO70ADCXrAAyTcAANGvgADY8wAA/lTQAQccAAEbilAAAAAP/+PSgAAAg9AAB/AAABaGUAAftlAAJDQwACqB0AAtedAAMsFQAEFEgABLUjAAUC4wAFjzAAB+VNAAm4pQAAAAAAAHd4AAAAAAAAAAAAAAAAAAAAAAAG440AFHHAAAAAAAANANAABkb9AAfCQAAN0WUABt6tAAgMKAAGttMABJe1AAKqqwAFVVUABpewAAFVVQAfu7sAFZmbAAQAAA==","msam7":"AOgAEgAAAH8AGAAQABAAAgAAAAAAAAAWuHXuNwBwAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADwDqAAAA6gAAAOoAAADqAAAA6gAAACUAAACJYAAAiWAAAOZgAADmYAABRDAAAUQwAADqAAAAqQAAATkAAAB5AAABRDAAAUQwAAFJgAABSYAAAQmAAAEJgAAAOYAAADmAAAA5gAAAOYAAAVQwAAFUMAABSYAAAUmAAABZAAAAWQAAAUEQAAFxEAABRQAAAUUAAADrsAAA67AAAOuwAADs0AABVQAAAIkAAACJAAAA5mAAAM5gAADroAAA66AAAOzQAADpgAAA6YAAAOmAAADpgAAA6YAAAOzAAADpgAAA6pAAABUAAABDIAAA52AAAOdgAADpgAAA7MAAAOmAAADqkAAA5UAAAOVAAADlQAAA5UAAAOmAAADpgAABGYAAAFqQAACVAAAA5UAAAOVAAABDIAAAQyAAAJUAAACVAAAAlQAAAOkAAADt4AAA7eAAAO/wAADv8AAAuQBAAUhwAAFIcAABCQAAAHmAAAB5gAAAeoAAAKkAAACpAAAApDAAAOkAAADpgAAA6YAAAOVAAADlQAAAhQAAAIUAAADVAAAA1QAAAOkAAADpAAAA7MAAAOzAAADmUAAA5lAAAWVAAAFlQAAAWQAAAFkAAAEocAAA+HAAAIkAAADqYAAA4RAAAOMgAABSAAAAUgAAAQkAAABcAAAAYoAAAOZgAADmYAAA5mAAAAAAAAAAVFFQAFbbkAB+OSAAjbcAAJXXkACllpAAtVWQAMUUkADFlpAA1NOQANvwIADccgAA4WxQAOSSkADxxuAA9FGQAPtuAAD9dZABBBCQASOOkAFDDJABggiQAZHHkAAAAAAAYlMAAG444AB9lSAAh2MAAJDMIACcgeAAoMFQAKlUAACwWwAAvnoAAMksAADTIZAA92kAAPz0AAEThHAAAAAP/+JTD//9lSAAB2MAABNfcAAaibAAH52QACp3IAAwoQAAPr5wAEdacABKqLAAUc2wAFR1kAB3aQAAk4RwAAAAAAAHFgAAAAAAAAAAAAAAAAAAAAAAAG444AErryAAAAAAALt44ABiR3AAeKDgAMCM4ABYHnAAgKawAG5dkABJJJAAJJJQAEkkkABaaXAAEkkgAbMzIAEoOpAAQAAA==","msam8":"AOYAEgAAAH8AFgAQABAAAgAAAAAAAAAWr1pEswCAAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADuDJAAAAyQAAAMkAAADJAAAAyQAAACUAAAB4cAAAeHAAAMZgAADGYAABJDAAASQwAADJAAAAmAAAAPgAAABoAAABJDAAASQwAAEokAABKJAAANiQAADYkAAAOJAAADiQAAA4kAAAOJAAATQwAAE0MAABKJAAASiQAABIAAAASAAAASEQAAFREAABJQAAASUAAADKwAAAy8AAAMvAAADM0AABNQAAAHgAAAB4AAAAxmAAAM5gAADKwAAAysAAAMzQAADHgAAAx4AAAMeAAADHgAAAx4AAAMzQAADHgAAAyaAAABUAAABDIAAAxmAAAMZgAADHgAAAzNAAAMeAAADJoAAAxUAAAMVAAADFQAAAxUAAAMeAAADHgAABCJAAAEqwAACFAAAAxUAAAMVAAABDIAAAQyAAAIUAAACFAAAAhQAAAMgAAADO4AAAzuAAAM/wAADP8AAAqABAASeAAAEngAAA2AAAAGiQAABokAAAapAAAJgAAACYAAAAlDAAAMgAAADIkAAAyJAAAMVAAADFQAAAdQAAAHUAAAC1AAAAtQAAAMgAAADIAAAAzNAAAMzQAADGUAAAxlAAAUVAAAFFQAAASAAAAEgAAAEYgAAA6IAAAHgAAADJYAAAwRAAAMMgAABCAAAAQgAAANgAAABNAAAAUpAAAMZgAADGYAAAxmAAAAAAAAAASccgAEuOgABxVcAAiACAAJcdAACmOYAAtVYAALuOgADEcoAAy7yAANE+wADTjwAA4quAAO45gADxyAAA8qrAAPnHwAEQAQABLjoAAWqsAAF5yIAAAAAAAGDDwABsACAAewcgAIbV4ACPMQAAmadAAKmwYACwWwAAtx0AAMJVYADFz0AAzTDAANMzgADy4aABC26AAAAAD//gw8//+wcgAAbV4AAQKQAAFsYAABuZwAAeOQAAKbBgADEO4AA4YSAAQAAAAESY4ABNMMAAcG1gAItugAAAAAAABszgAAAAAAAAAAAAAAAAAAAAAABuOOABEAEAAAAAAACyQsAAaKlAAHUbAAC/xaAAZGUAAGpYwABaWMAASOOAACAAAABAAAAAZVVgABAAAAF8zMABIzNAAEAAA=","msam9":"AOYAEgAAAH8AFgAQABAAAgAAAAAAAAAW07GMBwCQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQU0gVjIuMgAAAAAAAAAAAAAAAADsDJAAAAyQAAAMkAAADJAAAAyQAAACYAAAB5gAAAeYAAAMdwAADHcAABJTAAASUwAADJAAAAmQAAAOkAAABpAAABJTAAASUwAAEpoAABKaAAANmwAADZsAAAObAAADmwAAA5sAAAObAAATUwAAE1MAABKaAAASmgAABJAAAASQAAASEQAAFREAABJgAAASYAAADLwAAAy8AAAMvAAADM0AABNgAAAHkAAAB5AAAAx3AAAM5wAADLwAAAy8AAAMzQAADIkAAAyJAAAMiQAADIkAAAyJAAAMzQAADIkAAAybAAABYAAABEIAAAx3AAAMdwAADIkAAAzNAAAMiQAADJsAAAxlAAAMZQAADGUAAAxlAAAMiQAADIkAABCbAAAEvAAACGAAAAxlAAAMZQAABEIAAARCAAAIYAAACGAAAAhgAAAMkAAADO4AAAzuAAAM/wAADP8AAAqQBAASiQAAEokAAA2QAAAGmwAABpsAAAa7AAAJkAAACZAAAAlUAAAMkAAADJsAAAybAAAMZQAADGUAAAdgAAAHYAAAC2AAAAtgAAAMkAAADJAAAAzNAAAMzQAADHYAAAx2AAAUZQAAFGUAAASQAAAEkAAAEZkAAA+ZAAAHkAAADKcAAAwRAAAMQgAABCAAAAQgAAANkAAABNAAAAU7AAAMdwAADHcAAAx3AAAAAAAAAAR4GQAEkWAABtoQAAg44AAJIsAACgygAAr2gAALoTAAC+BgAAxUrgAMnB4ADMpAAA20IAAOngAADqqcAA8ixAAPYesAEHHAABJFgAAV7QAAFtbgAAAAAAAF9OkABmUgAAbjjgAHjLcACGSMAAjaLAAJXQQACmTVAAsXMgALTwAAC/9OAAx3QAANMzkADsegABA3MAAAAAD//fTp//+MtwAASRkAAIAAAADQyQABMccAAYHAAAHTwAACbMUAAvPHAAMpMgAD/04ABHdAAAaYwAAINzAAAAAAAABpPgAAAAAAAAAAAAAAAAAAAAAABuOOABBxwAAAAAAAClkLAAaOJAAHMnwACtoAAAVt6wAHr5UABswHAASXtAABxxwAAtCeAAWhNAAA444AKn0nABAthAAEAAA=","msbm10":"AOMAEgAAAH8AEwAQABAAAgAAAAAAAAAWiLYWyACgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADqDbsAAA27AAANzgAADc4AAA2ZAAANmQAADZkAAA2ZAAANuwAADbsAAA3OAAANzgAADXYAAA12AAANzgAADc4AAA2qAAANqgAADaoAAA2qAAAN/wAADf8AAA27AAANuwAADbwAAA28AAANvAAADbwAAA0RAAANzgAADogAAA6oAAANdgAADXYAAA27AAANuwAADc0AAA3NAAANuwAADbsAAA12AAANdgAADc4AAA3OAAAGqwAAAqsAAAFlAAADZQAACYAAAAyAAAAJgAAADIAAAA3OAAANzgAADZkAAA2ZAAAQEQAAEBEAABARAAAQEQAAEBEAABARAAANZQAADWUAAAiAAAAMgAAAC4AAAAyAAAAMgAAAC4AAAAmAAAANgAAADYAAAAOAAAAGhwAADYAAAAuAAAAPgAAADIAAAA2HAAAJgAAADYcAAAyAAAAIgAAAC4AAAAyAAAAMgAAAEIAAAAyAAAAMgAAAC4AAABHQAlwS0AAAEdACXhLgAAAAAAAACIAAAAqAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAiAAAANMgAAC4AAAAWAAAALgAAADVQAAA1UAAANZQAADWUAAAFlAAADZQAADWUAAA0RAAANQwAADWUAAA28AAANvAAAECAAABAgAAANZQAACyAEAAiAAAAHgAAAB4AAAAQgAAAAAAAAAAOOOgAEccgABjjlAAbd4AAHHHMACAACAAik/QAI45AACcceAAo45QAKqq0AC447AAxxygAOOOYADxx1ABAAAwAeOOoAJVVdAAAAAAAF3rgABuOOAAdrgwAHut4ACKAlAAlOgAAKLPAACwWwAAtK0AAL25YADB26AAyzhgANMzgADmZlAA62UwAAAAD//d64//9rg///ut4AAKAlAAFOgAACLPAAAqqrAAMccAADStAAA7ctAAQF0wAEL8sABI6aAATYCAAGtlMAAAAAAACk+wAEAAAABMzQAAJmYAABmaAAB2hNABAAAAABmaAACtL6AAZMugAHGYYACvmoAAWEeAAGmzUABc5oAASfSgACZmYAA/SaAAYtgAAAzM0AJj1wABAo9gAEAAA=","msbm5":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAW/fYhFwBQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAAD0FssAABbLAAAW7gAAFu4AABapAAAWqQAAFqkAABapAAAWywAAFssAABbuAAAW7gAAFocAABaHAAAW7gAAFu4AABapAAAWugAAFqkAABa6AAAW/wAAFv8AABbLAAAWywAAFswAABbMAAAWzAAAFswAABYRAAAW7gAAF3YAABeWAAAWhwAAFocAABbLAAAWywAAFt0AABbdAAAWywAAFssAABaHAAAWhwAAFu4AABbuAAAMmAAAA5gAAAJlAAAGZQAAEHAAABVwAAAQcAAAFXAAABbuAAAW7gAAFqkAABapAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAWZQAAFmUAAA9wAAALcAAACXAAAAtwAAALcAAACXAAAAdwAAANcAAADXAAAAFwAAAEdQAADXAAAAlwAAAScAAAC3AAAA11AAAHcAAADXUAAAtwAAAFcAAACXAAAAtwAAALcAAAFHAAAAtwAAALcAAACXAAABmwAlwasAAAGbACXhrQAAAAAAAAD3AAABFwAAAAAAAAAAAAAAAAAAAAAAAAFXAAAA9wAAAWMgAAE3AAAApwAAATcAAAFlQAABZUAAAWZQAAFmUAAAJlAAAGZQAAFmUAABYRAAAWQwAAFmUAABbMAAAWzAAAGCAAABggAAAWZQAAEyAEAAVwAAAOcAAADnAAAAggAAAAAAAAAAY42gAGOOYAB1VaAAf/8wAI44AACY5AAAnHDQAKVV0ACqqaAAqqswALjiYAC8cmAAxxswAMqrYADOOaAA4ADQAOjkYADxxaAA8cgAAP/+YAEDjzABFVZgATjk0AFcczACeOZgAwcgAAAAAAAAZXrQAG440ACDymAAidpgAJnVoACpaqAAsFsAALglYADAAAAAzzqgANRG0ADfFdAA5wNgAO7uYAES9aAAAAAP/+V60AADymAACdpgABnVoAApaqAAMccwADglYABAAAAATzqgAFVaAABdoAAAYIugAGeg0ABu7mAAkvWgAAAAAAAOOQAAQAAAAEzNAAAmZgAAGZoAAHaEAAEAAAAAGZoAAOzcoABjMNAAgQ7QAQZ2MACIKzAAgOkAAGdPYABLYNAAMzMwAGZmYAB+lAAAGZmgAfrhMAFrhTAAQAAA==","msbm6":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAWTxoEKwBgAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADyFcwAABXMAAAV7gAAFe4AABWpAAAVqQAAFakAABWpAAAVzAAAFcwAABXuAAAV7gAAFYcAABWHAAAV7gAAFe4AABWqAAAVuwAAFaoAABW7AAAV/wAAFf8AABXMAAAVzAAAFcwAABXMAAAVzAAAFcwAABURAAAV7gAAF3cAABeXAAAVhwAAFYcAABXMAAAVzAAAFd0AABXdAAAVzAAAFcwAABWHAAAVhwAAFe4AABXuAAAKmAAAApgAAAFlAAAFZQAAD3AAABNwAAAPcAAAE3AAABXuAAAV7gAAFakAABWpAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAVZQAAFWUAAA1wAAAOcAAAC3AAAA5wAAAOcAAAC3AAAAlwAAAQcAAAEHAAAANwAAAEdgAAEHAAAAtwAAAUcAAADnAAABB2AAAJcAAAEHYAAA5wAAAGcAAAC3AAAA5wAAAOcAAAFnAAAA5wAAAOcAAAC3AAABmwAlwasAAAGbACXhrgAAAAAAAADXAAABFwAAAAAAAAAAAAAAAAAAAAAAAAE3AAAA1wAAAVMgAAEnAAAAhwAAAScAAAFVQAABVUAAAVZQAAFWUAAAFlAAAFZQAAFWUAABURAAAVQwAAFWUAABXMAAAVzAAAGCAAABggAAAVZQAAEiAEAAZwAAAMcAAADHAAAAcgAAAAAAAAAAUJewAGEvUABjjdAAf/+AAIJesACOOFAAjjjQAJL2UACccTAAo44AAKqqAACwl4AAtCWwALji0ADEvVAAxxuwAM0JMADVVQAA5eywAPHGMAD2hFAA//8AARezsAE44wACQl2wAscbAAAAAAAAY9KAAG440ACBCAAAht+AAJaGUACj0YAAsFsAALO70ADAAAAAyc+wANGvgADY8wAA4THQAOZeAAEJVVAAAAAP/+PSgAABCAAABt+AABaGUAAj0YAAKqqAADLBUABAAAAASE1QAEtSMABQK7AAWPMAAGEx0ABmXgAAiVVQAAAAAAANCYAAQAAAAEzNAAAmZgAAGZoAAHaEUAEAAAAAGZoAANANAABkb9AAfCQAAN0WUABt6tAAgMKAAGttMABJe1AAKqqwAFVVUABpewAAFVVQAfu7sAFZmbAAQAAA==","msbm7":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAWcXnAgQBwAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADwFLsAABS7AAAU3gAAFN4AABSIAAAUiAAAFIgAABSIAAAUuwAAFLsAABTeAAAU3gAAFHcAABR3AAAU3gAAFN4AABSZAAAUqgAAFJkAABSqAAAU/wAAFP8AABS7AAAUuwAAFLwAABS8AAAUvAAAFLwAABQRAAAU3gAAF3cAABeHAAAUdwAAFHcAABS7AAAUuwAAFM0AABTNAAAUuwAAFLsAABR3AAAUdwAAFN4AABTeAAAJiAAAAogAAAFlAAAEZQAADnAAABNwAAAOcAAAE3AAABTeAAAU3gAAFIgAABSIAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAUZQAAFGUAAAxwAAAPcAAADXAAAA9wAAAPcAAADXAAAApwAAAScAAAEnAAAANwAAAFdgAAEnAAAA1wAAAVcAAAD3AAABJ2AAAKcAAAEnYAAA9wAAAIcAAADXAAAA9wAAAPcAAAFnAAAA9wAAAPcAAADXAAABmwAlwasAAAGbACXhrgAAAAAAAADHAAABBwAAAAAAAAAAAAAAAAAAAAAAAAE3AAAAxwAAAUMgAAEXAAAAdwAAARcAAAFFQAABRUAAAUZQAAFGUAAAFlAAAEZQAAFGUAABQRAAAUQwAAFGUAABS8AAAUvAAAGCAAABggAAAUZQAAESAEAAhwAAALcAAAC3AAAAYgAAAAAAAAAARxyQAFbbkABjjgAAdlmQAH//sACBx1AAhhiQAI44kACV15AAnHFwAKIIcACllpAAqqpQALVVkAC44yAAvTUAAMUUkADHHAAA1NOQAOSSkADxxpAA//9wAQQQkAEjjpACH36QAp12kAAAAAAAYlMAAG444AB+blAAhA1QAJNfcACfUVAAsFsAAMFOIADHWnAAyv2QANMhkADbFFAA3zqQAOZmUAEBCrAAAAAP/+JTD//+blAABA1QABNfcAAfUVAAKqqQADChAABBTiAAR1pwAEr9kABRzbAAVHWQAFsUUABfOpAAgQqwAAAAAAAMMOAAQAAAAEzNAAAmZgAAGZoAAHaEcAEAAAAAGZoAALt44ABiR3AAeKDgAMCM4ABYHnAAgKawAG5dkABJJJAAJJJQAEkkkABaaXAAEkkgAbMzIAEoOpAAQAAA==","msbm8":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAWcMpwzACAAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADuFLsAABS7AAAU3gAAFN4AABSYAAAUmAAAFJgAABSYAAAUuwAAFLsAABTeAAAU3gAAFHYAABR2AAAU3gAAFN4AABSqAAAUqgAAFKoAABSqAAAU/wAAFP8AABS7AAAUuwAAFLwAABS8AAAUvAAAFLwAABQRAAAU3gAAFocAABaXAAAUdgAAFHYAABS7AAAUuwAAFM0AABTNAAAUuwAAFLsAABR2AAAUdgAAFN4AABTeAAAImQAAApkAAAFlAAAEZQAADYAAABKAAAANgAAAEoAAABTeAAAU3gAAFJgAABSYAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAUZQAAFGUAAAuAAAARgAAADoAAABGAAAARgAAADoAAAAyAAAATgAAAE4AAAAOAAAAHhgAAE4AAAA6AAAAVgAAAEYAAABOGAAAMgAAAE4YAABGAAAAJgAAADoAAABGAAAARgAAAF4AAABGAAAARgAAADoAAABnAAlwawAAAGcACXhrgAAAAAAAAC4AAAA+AAAAAAAAAAAAAAAAAAAAAAAAAEoAAAAuAAAAUMgAAEIAAAAaAAAAQgAAAFFQAABRUAAAUZQAAFGUAAAFlAAAEZQAAFGUAABQRAAAUQwAAFGUAABS8AAAUvAAAGCAAABggAAAUZQAAECAEAAmAAAAKgAAACoAAAAUgAAAAAAAAAAPHIAAEuOgABjjiAAaceAAHTkAAB45AAAf//gAIgAgACOOMAAk47AAJcdAACccaAApjmAAKqqgACtx8AAtVYAALjjYADEcoAAxxxAANOPAADxxuAA8cgAAP//wAEQAQACAckAAnqtAAAAAAAAYMPAAG444AB7xOAAgStgAJApAACba8AAqyogALBbAAC+v0AAxJjgAM0wwADUBUAA2L0AAOZmQAD5Q0AAAAAP/+DDz//7xOAAAStgABApAAAba8AAKupgADHHAAA9foAAQAAAAESY4ABL7cAATnPAAFTXIABYvQAAeUNAAAAAAAALjkAAQAAAAEzNAAAmZgAAGZoAAHaEoAEAAAAAGZoAALJCwABoqUAAdRsAAL/FoABkZQAAaljAAFpYwABI44AAIAAAAEAAAABlVWAAEAAAAXzMwAEjM0AAQAAA==","msbm9":"AOsAEgAAAH8AGwAQABAAAgAAAAAAAAAWqgC1YQCQAAAQVGVYIG1hdGggc3ltYm9scwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU1TQk0gVjIuMgAAAAAAAAAAAAAAAADsFLsAABS7AAAU3gAAFN4AABSZAAAUmQAAFJkAABSZAAAUuwAAFLsAABTeAAAU3gAAFHYAABR2AAAU3gAAFN4AABSqAAAUqgAAFKoAABSqAAAU/wAAFP8AABS7AAAUuwAAFLwAABS8AAAUvAAAFLwAABQRAAAU3gAAFYgAABWoAAAUdgAAFHYAABS7AAAUuwAAFM0AABTNAAAUuwAAFLsAABR2AAAUdgAAFN4AABTeAAAIqgAAAqoAAAFlAAAEZQAADYAAABKAAAANgAAAEoAAABTeAAAU3gAAFJkAABSZAAAYEQAAGBEAABgRAAAYEQAAGBEAABgRAAAUZQAAFGUAAAuAAAARgAAAD4AAABGAAAARgAAAD4AAAAyAAAATgAAAE4AAAAOAAAAHhwAAE4AAAA+AAAAWgAAAEYAAABOHAAAMgAAAE4cAABGAAAAJgAAAD4AAABGAAAARgAAAF4AAABGAAAARgAAAD4AAABnQAlwa0AAAGdACXhrgAAAAAAAAC4AAAA6AAAAAAAAAAAAAAAAAAAAAAAAAEoAAAAuAAAAUMgAAEIAAAAaAAAAQgAAAFFQAABRUAAAUZQAAFGUAAAFlAAAEZQAAFGUAABQRAAAUQwAAFGUAABS8AAAUvAAAGCAAABggAAAUZQAAECAEAAmAAAAKgAAACoAAAAUgAAAAAAAAAAOngAAEkWAABjjkAAZlIAAHD8sAB08AAAgAAAAIOOAACOOOAAjmtAAJIsAACcccAAoMoAAKgZAACqqrAAr2gAALjjkAC+BgAAxxxwAMykAADp4AAA8ccgAQAAAAEHHAAB8PwAAmXsAAAAAAAAX06QAG444AB5NXAAfmOQAI0MkACX/0AApvNwALBbAAC45pAAwAXAAMd0AADOzkAA0wBwAOZmQADyHAAAAAAP/99On//5NX///mOQAA0MkAAX/0AAJvNwACqqsAAxxyAAOOaQAEAFwABGQgAASKYAAE7OQABS5LAAchwAAAAAAAAK3UAAQAAAAEzNAAAmZgAAGZoAAHaEwAEAAAAAGZoAAKWQsABo4kAAcyfAAK2gAABW3rAAevlQAGzAcABJe0AAHHHAAC0J4ABaE0AADjjgAqfScAEC2EAAQAAA=="}; + +/***/ }), + +/***/ "../dvi2html/lib/tfm/index.js": +/*!************************************!*\ + !*** ../dvi2html/lib/tfm/index.js ***! + \************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(Buffer) { // PyDvi - A Python Library to Process DVI Stream +// Copyright (C) 2014 Fabrice Salvaire +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +///////////////////////////////////////////////////////////////////////////// + +var __read = this && this.__read || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), + r, + ar = [], + e; + + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } catch (error) { + e = { + error: error + }; + } finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } finally { + if (e) throw e.error; + } + } + + return ar; +}; + +var __spread = this && this.__spread || function () { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + + return ar; +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var Tfm = __webpack_require__(/*! ./tfm */ "../dvi2html/lib/tfm/tfm.js"); + +var fontdata = __webpack_require__(/*! ./fonts.json */ "../dvi2html/lib/tfm/fonts.json"); + +var NO_TAG = 0; +var LIG_TAG = 1; +var LIST_TAG = 2; +var EXT_TAG = 3; +var KERN_OPCODE = 128; // Defines the tables present in a TFM file. + +var tables = { + header: 0, + character_info: 1, + width: 2, + height: 3, + depth: 4, + italic_correction: 5, + lig_kern: 6, + kern: 7, + extensible_character: 8, + font_parameter: 9 +}; +/*** Compute the pointer to the word element index *index* from the base *base*. A word + element has a size of 32-bit. + + ``prt = base + 4*index`` +***/ + +function word_ptr(base, index) { + return base + 4 * index; +} + +var TFMParser = +/** @class */ +function () { + function TFMParser(buffer) { + this.position = 0; + this.stream = buffer; + this.read_lengths(); + this.read_header(); + this.read_font_parameters(); + this.read_lig_kern_programs(); + this.read_characters(); + } + + TFMParser.prototype.seek = function (position) { + this.position = position; + }; + + TFMParser.prototype.read_unsigned_byte1 = function (p) { + if (p) this.position = p; + var result = this.stream.readUInt8(this.position); + this.position = this.position + 1; + return result; + }; + + TFMParser.prototype.read_unsigned_byte2 = function (p) { + if (p) this.position = p; + var result = this.stream.readUInt16BE(this.position); + this.position = this.position + 2; + return result; + }; + + TFMParser.prototype.read_unsigned_byte4 = function (p) { + if (p) this.position = p; + var result = this.stream.readUInt32BE(this.position); + this.position = this.position + 4; + return result; + }; + + TFMParser.prototype.read_four_byte_numbers_in_table = function (table, index) { + /*** Return the four numbers in table *table* at index *index*. + ***/ + this.seek(this.position_in_table(table, index)); + return [this.read_unsigned_byte1(), this.read_unsigned_byte1(), this.read_unsigned_byte1(), this.read_unsigned_byte1()]; + }; + + TFMParser.prototype.read_extensible_recipe = function (index) { + /*** Return the extensible recipe, four numbers, at index *index*. + Extensible characters are specified by an extensible recipe, which consists of four bytes + called top, mid, bot, and rep (in this order). These bytes are the character codes of + individual pieces used to build up a large symbol. If top, mid, or bot are zero, they are + not present in the built-up result. For example, an extensible vertical line is like an + extensible bracket, except that the top and bottom pieces are missing. + ***/ + return this.read_four_byte_numbers_in_table(tables.extensible_character, index); + }; // BADBAD + + + TFMParser.prototype.read_fix_word = function (p) { + if (p) this.position = p; + var result = this.stream.readUInt32BE(this.position); + this.position = this.position + 4; + return result; + }; + + TFMParser.prototype.read_fix_word_in_table = function (table, position) { + return this.read_fix_word(this.position_in_table(table, position)); + }; // BADBAD + + + TFMParser.prototype.read_bcpl = function (position) { + if (position) this.position = position; + var length = this.read_unsigned_byte1(); + var result = this.stream.slice(this.position, this.position + length).toString('ascii'); + this.position += length; + return result; + }; + + TFMParser.prototype.seek_to_table = function (table, position) { + if (position) this.seek(this.position_in_table(table, position));else this.seek(this.table_pointers[table]); + }; + + TFMParser.prototype.position_in_table = function (table, index) { + return word_ptr(this.table_pointers[table], index); + }; + /* The fist 24 bytes (6 words) of a TFM file contain twelve 16-bit + integers that give the lengths of the various subsequent + portions of the file. These twelve integers are, in order: + + * lf = length of the entire file, in words; + * lh = length of the header data, in words; + * bc = smallest character code in the font; + * ec = largest character code in the font; + * nw = number of words in the width table; + * nh = number of words in the height table; + * nd = number of words in the depth table; + * ni = number of words in the italic correction table; + * nl = number of words in the lig/kern table; + * nk = number of words in the kern table; + * ne = number of words in the extensible character table; + * np = number of font parameter words. + + They are all nonnegative and less than 2**15. We must have + ``bc - 1 <= ec <= 255``, ``ne <= 256``, and + + ``lf = 6 + lh + (ec - bc + 1) + nw + nh + nd + ni + nl + nk + ne + np``. + Note that a font may contain as many as 256 characters (if ``bc = 0`` and ``ec = 255``), and + as few as 0 characters (if ``bc = ec + 1``). + + The rest of the TFM file may be regarded as a sequence of ten data arrays having the + informal specification: + ========== ===================== ==================== + header array [0 ... lh - 1] of stuff + char info array [bc ... ec ] of char info word + width array [0 ... nw - 1] of fix word + height array [0 ... nh - 1] of fix word + depth array [0 ... nd - 1] of fix word + italic array [0 ... ni - 1] of fix word + lig kern array [0 ... nl - 1] of lig kern command + kern array [0 ... nk - 1] of fix word + exten array [0 ... ne - 1] of extensible recipe + param array [1 ... np ] of fix word + ========== ===================== ==================== + ***/ + + + TFMParser.prototype.read_lengths = function () { + ////////////////////// + // Read and set table lengths + this.table_lengths = []; + this.seek(0); + this.entire_file_length = this.read_unsigned_byte2(); + var header_length = this.read_unsigned_byte2(); + this.smallest_character_code = this.read_unsigned_byte2(); + this.largest_character_code = this.read_unsigned_byte2(); + var header_data_length_min = 18; + this.table_lengths[tables.header] = Math.max(header_data_length_min, header_length); + this.number_of_chars = this.largest_character_code - this.smallest_character_code + 1; + this.table_lengths[tables.character_info] = this.number_of_chars; // read the last lengths + + for (var i = tables.width; i <= tables.font_parameter; i++) { + this.table_lengths[i] = this.read_unsigned_byte2(); + } ////////////////////// + // Compute table pointers + + + this.table_pointers = []; // The header starts at 24 bytes + + this.table_pointers[tables.header] = 24; + + for (var table = tables.header; table < tables.font_parameter; table++) { + this.table_pointers[table + 1] = this.position_in_table(table, this.table_lengths[table]); + } ////////////////////// + // Sanity check + + + var length = this.position_in_table(tables.font_parameter, this.table_lengths[tables.font_parameter]); + + if (length != word_ptr(0, this.entire_file_length)) { + throw Error('Bad TFM file'); + } + + return; + }; + /*** The first data array is a block of header information, which contains general facts + about the font. The header must contain at least two words, and for TFM files to be used + with Xerox printing software it must contain at least 18 words, allocated as described + below. + ``header[0]`` is a 32-bit check sum that TEX will copy into + the DVI output file whenever it uses the font. Later on when + the DVI file is printed, possibly on another computer, the + actual font that gets used is supposed to have a check sum + that agrees with the one in the TFM file used by TEX. In this + way, users will be warned about potential incompatibilities. + (However, if the check sum is zero in either the font file or + the TFM file, no check is made.) The actual relation between + this check sum and the rest of the TFM file is not important; + the check sum is simply an identification number with the + property that incompatible fonts almost always have distinct + check sums. + ``header[1]`` is a fix word containing the design size of the font, in units of TEX points + (7227 TEX points = 254 cm). This number must be at least 1.0; it is fairly arbitrary, but + usually the design size is 10.0 for a "10 point" font, i.e., a font that was designed to + look best at a 10-point size, whatever that really means. When a TEX user asks for a font + "at delta pt", the effect is to override the design size and replace it by delta, and to + multiply the x and y coordinates of the points in the font image by a factor of delta + divided by the design size. All other dimensions in the TFM file are fix word numbers in + design-size units. Thus, for example, the value of ``param[6]``, one em or ``\quad``, is + often the fix word value ``2**20 = 1.0``, since many fonts have a design size equal to one + em. The other dimensions must be less than 16 design-size units in absolute value; thus, + ``header[1]`` and ``param[1]`` are the only fix word entries in the whole TFM file whose + first byte might be something besides 0 or 255. + + ``header[2 ... 11]``, if present, contains 40 bytes that identify the character coding + scheme. The first byte, which must be between 0 and 39, is the number of subsequent ASCII + bytes actually relevant in this string, which is intended to specify what + character-code-to-symbol convention is present in the font. Examples are ASCII for standard + ASCII, TeX text for fonts like cmr10 and cmti9, TeX math extension for cmex10, XEROX text + for Xerox fonts, GRAPHIC for special-purpose non- alphabetic fonts, UNSPECIFIED for the + default case when there is no information. Parentheses should not appear in this name. + (Such a string is said to be in BCPL format.) + ``header[12 ... 16]``, if present, contains 20 bytes that name the font family (e.g., CMR or + HELVETICA), in BCPL format. This field is also known as the "font identifier." + ``header[17]``, if present, contains a first byte called the ``seven_bit_safe_flag``, then + two bytes that are ignored, and a fourth byte called the *face*. If the value of the fourth + byte is less than 18, it has the following interpretation as a "weight, slope, and + expansion": Add 0 or 2 or 4 (for medium or bold or light) to 0 or 1 (for roman or italic) to + 0 or 6 or 12 (for regular or condensed or extended). For example, 13 is ``0+1+12``, so it + represents medium italic extended. A three-letter code (e.g., MIE) can be used for such + face data. + ``header[18 ... whatever]`` might also be present; the individual words are simply called + ``header[18]``, ``header[19]``, etc., at the moment. + ***/ + + + TFMParser.prototype.read_header = function () { + this.seek_to_table(tables.header); // Read header[0 ... 1] + + var checksum = this.read_unsigned_byte4(); + var designSize = this.read_fix_word(); // Read header[2 ... 11] if there + + var character_info_table_position = this.table_pointers[tables.character_info]; + var position = this.position; + var character_coding_scheme; + if (position < character_info_table_position) character_coding_scheme = this.read_bcpl(); // Read header[12 ... 16] if there + + var character_coding_scheme_length = 40; // bytes (11 - 2 + 1) * 4 = 10 * 4 + + position += character_coding_scheme_length; + var family; + if (position < character_info_table_position) family = this.read_bcpl(position); // Read header[12 ... 16] if there + + var family_length = 20; // bytes (16 - 12 +1) * 4 = 5 * 4 + + position += family_length; + + if (position < character_info_table_position) { + var seven_bit_safe_flag = this.read_unsigned_byte1(position); + this.read_unsigned_byte2(); + var face = this.read_unsigned_byte1(); + } // Fixme: complete + // don't read header [18 ... whatever] + + + this.tfm = new Tfm.Tfm(this.smallest_character_code, this.largest_character_code, checksum, designSize, character_coding_scheme, family); + }; + /*** The final portion of a TFM fie is the param array, which is another sequence of fix word + values. + * param[1] = ``slant`` is the amount of italic slant, which is used to help position + accents. For example, slant = .25 means that when you go up one unit, you also go .25 + units to the right. The slant is a pure number; it's the only fix word other than the + design size itself that is not scaled by the design size. + * param[2] = ``space`` is the normal spacing between words in text. Note that character " " + in the font need not have anything to do with blank spaces. + * param[3] = ``space_stretch`` is the amount of glue stretching between words. + * param[4] = ``space_shrink`` is the amount of glue shrinking between words. + * param[5] = ``x_height`` is the height of letters for which accents don't have to be + raised or lowered. + * param[6] = ``quad`` is the size of one em in the font. + * param[7] = ``extra_space`` is the amount added to param[2] at the ends of sentences. + When the character coding scheme is ``TeX math symbols``, the font is supposed to have 15 + additional parameters called ``num1``, ``num2``, ``num3``, ``denom1``, ``denom2``, ``sup1``, + ``sup2``, ``sup3``, ``sub1``, ``sub2``, ``supdrop``, ``subdrop``, ``delim1``, ``delim2``, + and ``axis_height``, respectively. When the character coding scheme is ``TeX math + extension``, the font is supposed to have six additional parameters called + ``defaul_rule_thickness`` and ``big_op_spacing1`` through ``big_op_spacing5``. + ***/ + + + TFMParser.prototype.read_font_parameters = function () { + this.seek_to_table(tables.font_parameter); + var stream = this; + + if (this.tfm.character_coding_scheme == 'TeX math italic') {// undocumented in tftopl web + //throw 'undocumented character coding scheme'; + } else { + // Read the seven fix word parameters + this.tfm.set_font_parameters(__spread(Array(7).keys()).map(function () { + return stream.read_fix_word(); + })); + } + + if (this.tfm.character_coding_scheme == 'TeX math symbols') { + // Read the additional 15 fix word parameters + this.tfm.set_math_symbols_parameters(__spread(Array(15).keys()).map(function () { + return stream.read_fix_word(); + })); + } + + if (this.tfm.character_coding_scheme == 'TeX math extension' || this.tfm.character_coding_scheme == 'euler substitutions only') { + // Read the additional 6 fix word parameters + this.tfm.set_math_extension_parameters(__spread(Array(6).keys()).map(function () { + return stream.read_fix_word(); + })); + } + }; + /*** The lig kern array contains instructions in a simple programming language that explains + what to do for special letter pairs. Each word is a lig kern command of four bytes. + * first byte: ``skip_byte``, indicates that this is the final program step if the byte is + 128 or more, otherwise the next step is obtained by skipping this number of intervening + steps. + * second byte: ``next_char``, "if ``next_char`` follows the current character, then perform + the operation and stop, otherwise continue." + * third byte: ``op_byte``, indicates a ligature step if less than 128, a kern step otherwise. + * fourth byte: ``remainder``. + In a kern step, an additional space equal to ``kern[256 * (op_byte + 128) + remainder]`` is + inserted between the current character and next char. This amount is often negative, so + that the characters are brought closer together by kerning; but it might be positive. + There are eight kinds of ligature steps, having ``op_byte`` codes ``4a+2b+c`` where ``0 <= a + <= b+c`` and ``0 <= b; c <= 1``. The character whose code is remainder is inserted between + the current character and next char; then the current character is deleted if ``b = 0``, and + next char is deleted if ``c = 0``; then we pass over a characters to reach the next current + character (which may have a ligature/kerning program of its own). + + Notice that if ``a = 0`` and ``b = 1``, the current character is unchanged; if ``a = b`` and + ``c = 1``, the current character is changed but the next character is unchanged. + If the very first instruction of the lig kern array has ``skip_byte = 255``, the + ``next_char`` byte is the so-called right boundary character of this font; the value of + ``next_char`` need not lie between ``bc`` and ``ec``. If the very last instruction of the + lig kern array has ``skip_byte = 255``, there is a special ligature/kerning program for a + left boundary character, beginning at location ``256 * op_byte + remainder``. The + interpretation is that TEX puts implicit boundary characters before and after each + consecutive string of characters from the same font. These implicit characters do not + appear in the output, but they can affect ligatures and kerning. + If the very first instruction of a character's ``lig_kern`` program has ``skip_byte > 128``, + the program actually begins in location ``256 * op_byte + remainder``. This feature allows + access to large lig kern arrays, because the first instruction must otherwise appear in a + location ``<= 255``. + Any instruction with ``skip_byte > 128`` in the lig kern array must have ``256 * op_byte + + remainder < nl``. If such an instruction is encountered during normal program execution, it + denotes an unconditional halt; no ligature command is performed. + ***/ + + + TFMParser.prototype.read_lig_kern_programs = function () { + // Fixme: complete special cases + this.seek_to_table(tables.lig_kern); // Read very first instruction of the table + + var first_skip_byte = this.read_unsigned_byte1(); + var next_char = this.read_unsigned_byte1(); + var op_byte = this.read_unsigned_byte1(); + var remainder = this.read_unsigned_byte1(); + + if (first_skip_byte == 255) { + var right_boundary_char = next_char; + throw Error('Font has right boundary char'); + } + + this.seek_to_table(tables.lig_kern, this.table_lengths[tables.lig_kern] - 1); + var last_skip_byte = this.read_unsigned_byte1(); + next_char = this.read_unsigned_byte1(); + op_byte = this.read_unsigned_byte1(); + remainder = this.read_unsigned_byte1(); + + if (last_skip_byte == 255) { + var left_boundary_char_program_index = 256 * op_byte + remainder; + throw Error('Font has left boundary char program'); + } // Read the instructions + + + var first_instruction = true; + + for (var i = 0; i < this.table_lengths[tables.lig_kern]; i++) { + this.seek_to_table(tables.lig_kern, i); + var skip_byte = this.read_unsigned_byte1(); + next_char = this.read_unsigned_byte1(); + op_byte = this.read_unsigned_byte1(); + remainder = this.read_unsigned_byte1(); // Large lig/kern table ? + + if (first_instruction && skip_byte > 128) { + var large_index = 256 * op_byte + remainder; + skip_byte = this.read_unsigned_byte1(); + next_char = this.read_unsigned_byte1(); + op_byte = this.read_unsigned_byte1(); + remainder = this.read_unsigned_byte1(); + } // Last step ? + + + var stop = skip_byte >= 128; + + if (op_byte >= KERN_OPCODE) { + // Kern step + var kern_index = 256 * (op_byte - KERN_OPCODE) + remainder; + var kern = this.read_fix_word_in_table(tables.kern, kern_index); // Fixme: self registration ? + + new Tfm.TfmKern(this.tfm, i, stop, next_char, kern); + } else { + // Ligature step + var number_of_chars_to_pass_over = op_byte >> 2; + var current_char_is_deleted = (op_byte & 0x02) == 0; + var next_char_is_deleted = (op_byte & 0x01) == 0; + var ligature_char_code = remainder; // Fixme: self registration ? + + new Tfm.TfmLigature(this.tfm, i, stop, next_char, ligature_char_code, number_of_chars_to_pass_over, current_char_is_deleted, next_char_is_deleted); + } + + first_instruction = stop == true; + } + }; + /*** Next comes the char info array, which contains one char info word per character. Each + char info word contains six fields packed into four bytes as follows. + * first byte: ``width_index`` (8 bits) + * second byte: ``height_index`` (4 bits) times 16, plus depth index (4 bits) + * third byte: ``italic_index`` (6 bits) times 4, plus tag (2 bits) + * fourth byte: ``remainder`` (8 bits) + The actual width of a character is ``width[width_index]``, in design-size units; this is a + device for compressing information, since many characters have the same width. Since it is + quite common for many characters to have the same height, depth, or italic correction, the + TFM format imposes a limit of 16 different heights, 16 different depths, and 64 different + italic corrections. + Incidentally, the relation ``width[0] = height[0] = depth[0] = italic[0] = 0`` should + always hold, so that an index of zero implies a value of zero. The width index should never + be zero unless the character does not exist in the font, since a character is valid if and + only if it lies between ``bc`` and ``ec`` and has a nonzero width index. + The tag field in a char info word has four values that explain how to interpret the remainder field. + * ``tag = 0`` (``no_tag``) means that remainder is unused. + * ``tag = 1`` (``lig_tag``) means that this character has a ligature/kerning program + starting at ``lig_kern[remainder]``. + * ``tag = 2`` (``list_tag``) means that this character is part of a chain of characters of + ascending sizes, and not the largest in the chain. The remainder field gives the + character code of the next larger character. + * ``tag = 3`` (``ext_tag``) means that this character code represents an extensible + character, i.e., a character that is built up of smaller pieces so that it can be made + arbitrarily large. The pieces are specified in ``exten[remainder]``. + * ``no_tag = 0`` vanilla character + * ``lig_tag = 1`` character has a ligature/kerning program + * ``list_tag = 2`` character has a successor in a charlist + * ``ext_tag = 3`` character is extensible + ***/ + + + TFMParser.prototype.read_characters = function () { + // Read the character information table + for (var c = this.smallest_character_code; c < this.largest_character_code; c++) { + this.process_char(c); + } + }; + + TFMParser.prototype.process_char = function (c) { + /*** Process the character code *c* in the character information table. + ***/ + var info = this.read_char_info(c); + var width_index = info.width_index; + var height_index = info.height_index; + var depth_index = info.depth_index; + var italic_index = info.italic_index; + var tag = info.tag; + var remainder = info.remainder; // Get the parameters in the corresponding tables + + var width = 0; + if (width_index != 0) width = this.read_fix_word_in_table(tables.width, width_index); // warning: euex10 has zero width characters + + var height = 0; + if (height_index != 0) height = this.read_fix_word_in_table(tables.height, height_index); + var depth = 0; + if (depth_index != 0) depth = this.read_fix_word_in_table(tables.depth, depth_index); + var italic_correction = 0; + if (italic_index != 0) italic_correction = this.read_fix_word_in_table(tables.italic_correction, italic_index); // Interpret the tag field + + var lig_kern_program_index; + var next_larger_char; + var extensible_recipe; + if (tag == LIG_TAG) lig_kern_program_index = remainder; + if (tag == LIST_TAG) next_larger_char = remainder; + if (tag == EXT_TAG) extensible_recipe = this.read_extensible_recipe(remainder); + + if (extensible_recipe !== undefined) { + // Fixme: self registration ? + new Tfm.TfmExtensibleChar(this.tfm, c, width, height, depth, italic_correction, extensible_recipe, lig_kern_program_index, next_larger_char); + } else { + // Fixme: self registration ? + new Tfm.TfmChar(this.tfm, c, width, height, depth, italic_correction, lig_kern_program_index, next_larger_char); + } + }; + + TFMParser.prototype.read_char_info = function (c) { + /*** Read the character code *c* data in the character information table. + ***/ + var index = c - this.smallest_character_code; + var bytes = []; + this.seek_to_table(tables.character_info, index); + bytes[0] = this.read_unsigned_byte1(); + bytes[1] = this.read_unsigned_byte1(); + bytes[2] = this.read_unsigned_byte1(); + bytes[3] = this.read_unsigned_byte1(); + return { + width_index: bytes[0], + height_index: bytes[1] >> 4, + depth_index: bytes[1] & 0xF, + italic_index: bytes[2] >> 6, + tag: bytes[2] & 0x3, + remainder: bytes[3] + }; + }; + + return TFMParser; +}(); + +function parse(buffer) { + var p = new TFMParser(buffer); + return p.tfm; +} + +function tfmData(fontname) { + if (fontdata[fontname]) { + var buffer = Buffer.from(fontdata[fontname], 'base64'); + return buffer; + } + + throw Error("Could not find font " + fontname); +} + +exports.tfmData = tfmData; + +function loadFont(fontname) { + return parse(tfmData(fontname)); +} + +exports.loadFont = loadFont; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../tikzjax/node_modules/buffer/index.js */ "./node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "../dvi2html/lib/tfm/tfm.js": +/*!**********************************!*\ + !*** ../dvi2html/lib/tfm/tfm.js ***! + \**********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // PyDvi - A Python Library to Process DVI Stream +// Copyright (C) 2014 Fabrice Salvaire +//; +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +///////////////////////////////////////////////////////////////////////////// + +var __extends = this && this.__extends || function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + }; + + return extendStatics(d, b); + }; + + return function (d, b) { + extendStatics(d, b); + + function __() { + this.constructor = d; + } + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +}(); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +/* This module handles TeX Font Metric. + +The class :class:`PyDvi.Tfm` handles the font's metric. To get a :class:`PyDvi.Tfm` instance for a +particular font use the static method :meth:`PyDvi.TfmParser.TfmParser.parse`. For example use this +code for the font "cmr10":: + + tfm = TfmParser.parse('cmr10', '/usr/share/texmf/fonts/tfm/public/cm/cmr10.tfm') + +The number of characters in the font can be obtained using the function :func:`len`:: + + >>> len(tfm) + 128 + +Each character's metric is stored in a :class:`TfmChar` instance that can be accessed using the char +code as index on the :class:`Tfm` class instance. For example to get the metric of the character +"A" use:: + + tfm[ord('A')] + + */ +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////; + +var TfmChar = +/** @class */ +function () { + function TfmChar(tfm, char_code, width, height, depth, italic_correction, lig_kern_program_index, next_larger_char) { + this.tfm = tfm; + tfm.set_char(char_code, this); + this.char_code = char_code; + this.width = width; + this.height = height; + this.depth = depth; + this.italic_correction = italic_correction; + this.lig_kern_program_index = lig_kern_program_index; + this.next_larger_char = next_larger_char; + } + + TfmChar.prototype.scaled_width = function (scale_factor) { + /* Return the scaled width by *scale_factor*. */ + return this.width * scale_factor; + }; + + TfmChar.prototype.scaled_height = function (scale_factor) { + /* Return the scaled height by *scale_factor*. */ + return this.height * scale_factor; + }; + + TfmChar.prototype.scaled_depth = function (scale_factor) { + /* Return the scaled depth by *scale_factor*. */ + return Number(this.depth * scale_factor); + }; + + TfmChar.prototype.scaled_dimensions = function (scale_factor) { + /* Return the 3-tuple made of the scaled width, height and depth by *scale_factor*. */ + return [this.width, this.height, this.depth].map(function (x) { + return x * scale_factor; + }); + }; + + TfmChar.prototype.next_larger_tfm_char = function () { + /* Return the :class:`TfmChar` instance for the next larger char if it exists else return + :obj:`None`. */ + ; + + if (this.next_larger_char !== null) { + return this.tfm.get_char(this.next_larger_char); + } else { + return null; + } + }; + + TfmChar.prototype.get_lig_kern_program = function (self) { + /* Get the ligature/kern program of the character. */ + ; + + if (this.lig_kern_program_index !== null) { + return this.tfm.get_lig_kern_program(this.lig_kern_program_index); + } else { + return null; + } + }; + + return TfmChar; +}(); + +exports.TfmChar = TfmChar; +/* This class encapsulates a TeX Font Metric for an extensible Glyph. */ + +var TfmExtensibleChar = +/** @class */ +function (_super) { + __extends(TfmExtensibleChar, _super); + + function TfmExtensibleChar(tfm, char_code, width, height, depth, italic_correction, extensible_recipe, lig_kern_program_index, next_larger_char) { + var _this = _super.call(this, tfm, char_code, width, height, depth, italic_correction, lig_kern_program_index, next_larger_char) || this; // BADBAD + + + _this.top, _this.mid, _this.bot, _this.rep = extensible_recipe; + return _this; + } + + return TfmExtensibleChar; +}(TfmChar); + +exports.TfmExtensibleChar = TfmExtensibleChar; + +var TfmLigKern = +/** @class */ +function () { + function TfmLigKern(tfm, index, stop, next_char) { + this.tfm = tfm; + this.stop = stop; + this.index = index; + this.next_char = next_char; + this.tfm.add_lig_kern(this); + } + + return TfmLigKern; +}(); + +exports.TfmLigKern = TfmLigKern; +/* This class represents a Kerning Program Instruction. */ + +var TfmKern = +/** @class */ +function (_super) { + __extends(TfmKern, _super); + + function TfmKern(tfm, index, stop, next_char, kern) { + var _this = _super.call(this, tfm, index, stop, next_char) || this; + + _this.kern = kern; + return _this; + } + + return TfmKern; +}(TfmLigKern); + +exports.TfmKern = TfmKern; +/* This class represents a Ligature Program Instruction. */ + +var TfmLigature = +/** @class */ +function (_super) { + __extends(TfmLigature, _super); + + function TfmLigature(tfm, index, stop, next_char, ligature_char_code, number_of_chars_to_pass_over, current_char_is_deleted, next_char_is_deleted) { + var _this = _super.call(this, tfm, index, stop, next_char) || this; + + _this.ligature_char_code = ligature_char_code; + _this.number_of_chars_to_pass_over = number_of_chars_to_pass_over; + _this.current_char_is_deleted = current_char_is_deleted; + _this.next_char_is_deleted = next_char_is_deleted; + return _this; + } + + return TfmLigature; +}(TfmLigKern); + +exports.TfmLigature = TfmLigature; +/* This class encapsulates a TeX Font Metric for a font. */ + +var Tfm = +/** @class */ +function () { + function Tfm(smallest_character_code, largest_character_code, checksum, designSize, character_coding_scheme, family) { + this.smallest_character_code = smallest_character_code; + this.largest_character_code = largest_character_code; + this.checksum = checksum; + this.designSize = designSize; + this.character_coding_scheme = character_coding_scheme; + this.family = family; + this._lig_kerns = []; + this.characters = {}; + } + + Tfm.prototype.get_char = function (x) { + return this.characters[x]; + }; + + Tfm.prototype.set_char = function (x, y) { + this.characters[x] = y; + }; + + Tfm.prototype.set_font_parameters = function (parameters) { + /* Set the font parameters. */ + ; + this.slant = parameters[0]; + this.spacing = parameters[1]; + this.space_stretch = parameters[2]; + this.space_shrink = parameters[3]; + this.x_height = parameters[4]; + this.quad = parameters[5]; + this.extra_space = parameters[6]; + }; + + Tfm.prototype.set_math_symbols_parameters = function (parameters) { + /* Set the math symbols parameters. */ + ; + this.num1 = parameters[0]; + this.num2 = parameters[1]; + this.num3 = parameters[2]; + this.denom1 = parameters[3]; + this.denom2 = parameters[4]; + this.sup1 = parameters[5]; + this.sup2 = parameters[6]; + this.sup3 = parameters[7]; + this.sub1 = parameters[8]; + this.sub2 = parameters[9]; + this.supdrop = parameters[10]; + this.subdrop = parameters[11]; + this.delim1 = parameters[12]; + this.delim2 = parameters[13]; + this.axis_height = parameters[14]; + }; + + Tfm.prototype.set_math_extension_parameters = function (parameters) { + this.default_rule_thickness = parameters[0]; + this.big_op_spacing = parameters.slice(1); + }; + + Tfm.prototype.add_lig_kern = function (obj) { + /* Add a ligature/kern program *obj*. */ + ; + + this._lig_kerns.push(obj); + }; + + Tfm.prototype.get_lig_kern_program = function (i) { + /* Return the ligature/kern program at index *i*. */ + ; + return this._lig_kerns[i]; + }; + + return Tfm; +}(); + +exports.Tfm = Tfm; + +/***/ }), + +/***/ "./node_modules/base64-js/index.js": +/*!*****************************************!*\ + !*** ./node_modules/base64-js/index.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.byteLength = byteLength; +exports.toByteArray = toByteArray; +exports.fromByteArray = fromByteArray; +var lookup = []; +var revLookup = []; +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i]; + revLookup[code.charCodeAt(i)] = i; +} // Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications + + +revLookup['-'.charCodeAt(0)] = 62; +revLookup['_'.charCodeAt(0)] = 63; + +function getLens(b64) { + var len = b64.length; + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4'); + } // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + + + var validLen = b64.indexOf('='); + if (validLen === -1) validLen = len; + var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4; + return [validLen, placeHoldersLen]; +} // base64 is 4/3 + up to two characters of the original data + + +function byteLength(b64) { + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; +} + +function _byteLength(b64, validLen, placeHoldersLen) { + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; +} + +function toByteArray(b64) { + var tmp; + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); + var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars + + var len = placeHoldersLen > 0 ? validLen - 4 : validLen; + + for (var i = 0; i < len; i += 4) { + tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)]; + arr[curByte++] = tmp >> 16 & 0xFF; + arr[curByte++] = tmp >> 8 & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + + if (placeHoldersLen === 2) { + tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4; + arr[curByte++] = tmp & 0xFF; + } + + if (placeHoldersLen === 1) { + tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2; + arr[curByte++] = tmp >> 8 & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + + return arr; +} + +function tripletToBase64(num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]; +} + +function encodeChunk(uint8, start, end) { + var tmp; + var output = []; + + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF); + output.push(tripletToBase64(tmp)); + } + + return output.join(''); +} + +function fromByteArray(uint8) { + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + // go through the array every three bytes, we'll deal with trailing stuff later + + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength)); + } // pad the end with zeros, but make sure to not forget the extra bytes + + + if (extraBytes === 1) { + tmp = uint8[len - 1]; + parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '=='); + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1]; + parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '='); + } + + return parts.join(''); +} + +/***/ }), + +/***/ "./node_modules/buffer/index.js": +/*!**************************************!*\ + !*** ./node_modules/buffer/index.js ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global) {/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +/* eslint-disable no-proto */ + + +var base64 = __webpack_require__(/*! base64-js */ "./node_modules/base64-js/index.js"); + +var ieee754 = __webpack_require__(/*! ieee754 */ "./node_modules/ieee754/index.js"); + +var isArray = __webpack_require__(/*! isarray */ "./node_modules/isarray/index.js"); + +exports.Buffer = Buffer; +exports.SlowBuffer = SlowBuffer; +exports.INSPECT_MAX_BYTES = 50; +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ + +Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport(); +/* + * Export kMaxLength after typed array support is determined. + */ + +exports.kMaxLength = kMaxLength(); + +function typedArraySupport() { + try { + var arr = new Uint8Array(1); + arr.__proto__ = { + __proto__: Uint8Array.prototype, + foo: function () { + return 42; + } + }; + return arr.foo() === 42 && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray` + } catch (e) { + return false; + } +} + +function kMaxLength() { + return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff; +} + +function createBuffer(that, length) { + if (kMaxLength() < length) { + throw new RangeError('Invalid typed array length'); + } + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = new Uint8Array(length); + that.__proto__ = Buffer.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + if (that === null) { + that = new Buffer(length); + } + + that.length = length; + } + + return that; +} +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + + +function Buffer(arg, encodingOrOffset, length) { + if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { + return new Buffer(arg, encodingOrOffset, length); + } // Common case. + + + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new Error('If encoding is specified then the first argument must be a string'); + } + + return allocUnsafe(this, arg); + } + + return from(this, arg, encodingOrOffset, length); +} + +Buffer.poolSize = 8192; // not used by this implementation +// TODO: Legacy, not needed anymore. Remove in next major version. + +Buffer._augment = function (arr) { + arr.__proto__ = Buffer.prototype; + return arr; +}; + +function from(that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number'); + } + + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer(that, value, encodingOrOffset, length); + } + + if (typeof value === 'string') { + return fromString(that, value, encodingOrOffset); + } + + return fromObject(that, value); +} +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ + + +Buffer.from = function (value, encodingOrOffset, length) { + return from(null, value, encodingOrOffset, length); +}; + +if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype; + Buffer.__proto__ = Uint8Array; + + if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) { + // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true + }); + } +} + +function assertSize(size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number'); + } else if (size < 0) { + throw new RangeError('"size" argument must not be negative'); + } +} + +function alloc(that, size, fill, encoding) { + assertSize(size); + + if (size <= 0) { + return createBuffer(that, size); + } + + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill); + } + + return createBuffer(that, size); +} +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ + + +Buffer.alloc = function (size, fill, encoding) { + return alloc(null, size, fill, encoding); +}; + +function allocUnsafe(that, size) { + assertSize(size); + that = createBuffer(that, size < 0 ? 0 : checked(size) | 0); + + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < size; ++i) { + that[i] = 0; + } + } + + return that; +} +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ + + +Buffer.allocUnsafe = function (size) { + return allocUnsafe(null, size); +}; +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ + + +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(null, size); +}; + +function fromString(that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8'; + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding'); + } + + var length = byteLength(string, encoding) | 0; + that = createBuffer(that, length); + var actual = that.write(string, encoding); + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + that = that.slice(0, actual); + } + + return that; +} + +function fromArrayLike(that, array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0; + that = createBuffer(that, length); + + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255; + } + + return that; +} + +function fromArrayBuffer(that, array, byteOffset, length) { + array.byteLength; // this throws if `array` is not a valid ArrayBuffer + + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds'); + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds'); + } + + if (byteOffset === undefined && length === undefined) { + array = new Uint8Array(array); + } else if (length === undefined) { + array = new Uint8Array(array, byteOffset); + } else { + array = new Uint8Array(array, byteOffset, length); + } + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = array; + that.__proto__ = Buffer.prototype; + } else { + // Fallback: Return an object instance of the Buffer class + that = fromArrayLike(that, array); + } + + return that; +} + +function fromObject(that, obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0; + that = createBuffer(that, len); + + if (that.length === 0) { + return that; + } + + obj.copy(that, 0, 0, len); + return that; + } + + if (obj) { + if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) { + if (typeof obj.length !== 'number' || isnan(obj.length)) { + return createBuffer(that, 0); + } + + return fromArrayLike(that, obj); + } + + if (obj.type === 'Buffer' && isArray(obj.data)) { + return fromArrayLike(that, obj.data); + } + } + + throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.'); +} + +function checked(length) { + // Note: cannot use `length < kMaxLength()` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes'); + } + + return length | 0; +} + +function SlowBuffer(length) { + if (+length != length) { + // eslint-disable-line eqeqeq + length = 0; + } + + return Buffer.alloc(+length); +} + +Buffer.isBuffer = function isBuffer(b) { + return !!(b != null && b._isBuffer); +}; + +Buffer.compare = function compare(a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers'); + } + + if (a === b) return 0; + var x = a.length; + var y = b.length; + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break; + } + } + + if (x < y) return -1; + if (y < x) return 1; + return 0; +}; + +Buffer.isEncoding = function isEncoding(encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true; + + default: + return false; + } +}; + +Buffer.concat = function concat(list, length) { + if (!isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + + if (list.length === 0) { + return Buffer.alloc(0); + } + + var i; + + if (length === undefined) { + length = 0; + + for (i = 0; i < list.length; ++i) { + length += list[i].length; + } + } + + var buffer = Buffer.allocUnsafe(length); + var pos = 0; + + for (i = 0; i < list.length; ++i) { + var buf = list[i]; + + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + + buf.copy(buffer, pos); + pos += buf.length; + } + + return buffer; +}; + +function byteLength(string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length; + } + + if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { + return string.byteLength; + } + + if (typeof string !== 'string') { + string = '' + string; + } + + var len = string.length; + if (len === 0) return 0; // Use a for loop to avoid recursion + + var loweredCase = false; + + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len; + + case 'utf8': + case 'utf-8': + case undefined: + return utf8ToBytes(string).length; + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2; + + case 'hex': + return len >>> 1; + + case 'base64': + return base64ToBytes(string).length; + + default: + if (loweredCase) return utf8ToBytes(string).length; // assume utf8 + + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } +} + +Buffer.byteLength = byteLength; + +function slowToString(encoding, start, end) { + var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + + if (start === undefined || start < 0) { + start = 0; + } // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + + + if (start > this.length) { + return ''; + } + + if (end === undefined || end > this.length) { + end = this.length; + } + + if (end <= 0) { + return ''; + } // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + + + end >>>= 0; + start >>>= 0; + + if (end <= start) { + return ''; + } + + if (!encoding) encoding = 'utf8'; + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end); + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end); + + case 'ascii': + return asciiSlice(this, start, end); + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end); + + case 'base64': + return base64Slice(this, start, end); + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end); + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = (encoding + '').toLowerCase(); + loweredCase = true; + } + } +} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect +// Buffer instances. + + +Buffer.prototype._isBuffer = true; + +function swap(b, n, m) { + var i = b[n]; + b[n] = b[m]; + b[m] = i; +} + +Buffer.prototype.swap16 = function swap16() { + var len = this.length; + + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits'); + } + + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1); + } + + return this; +}; + +Buffer.prototype.swap32 = function swap32() { + var len = this.length; + + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits'); + } + + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3); + swap(this, i + 1, i + 2); + } + + return this; +}; + +Buffer.prototype.swap64 = function swap64() { + var len = this.length; + + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits'); + } + + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7); + swap(this, i + 1, i + 6); + swap(this, i + 2, i + 5); + swap(this, i + 3, i + 4); + } + + return this; +}; + +Buffer.prototype.toString = function toString() { + var length = this.length | 0; + if (length === 0) return ''; + if (arguments.length === 0) return utf8Slice(this, 0, length); + return slowToString.apply(this, arguments); +}; + +Buffer.prototype.equals = function equals(b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer'); + if (this === b) return true; + return Buffer.compare(this, b) === 0; +}; + +Buffer.prototype.inspect = function inspect() { + var str = ''; + var max = exports.INSPECT_MAX_BYTES; + + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' '); + if (this.length > max) str += ' ... '; + } + + return ''; +}; + +Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { + if (!Buffer.isBuffer(target)) { + throw new TypeError('Argument must be a Buffer'); + } + + if (start === undefined) { + start = 0; + } + + if (end === undefined) { + end = target ? target.length : 0; + } + + if (thisStart === undefined) { + thisStart = 0; + } + + if (thisEnd === undefined) { + thisEnd = this.length; + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index'); + } + + if (thisStart >= thisEnd && start >= end) { + return 0; + } + + if (thisStart >= thisEnd) { + return -1; + } + + if (start >= end) { + return 1; + } + + start >>>= 0; + end >>>= 0; + thisStart >>>= 0; + thisEnd >>>= 0; + if (this === target) return 0; + var x = thisEnd - thisStart; + var y = end - start; + var len = Math.min(x, y); + var thisCopy = this.slice(thisStart, thisEnd); + var targetCopy = target.slice(start, end); + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i]; + y = targetCopy[i]; + break; + } + } + + if (x < y) return -1; + if (y < x) return 1; + return 0; +}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf + + +function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1; // Normalize byteOffset + + if (typeof byteOffset === 'string') { + encoding = byteOffset; + byteOffset = 0; + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff; + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000; + } + + byteOffset = +byteOffset; // Coerce to Number. + + if (isNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : buffer.length - 1; + } // Normalize byteOffset: negative offsets start from the end of the buffer + + + if (byteOffset < 0) byteOffset = buffer.length + byteOffset; + + if (byteOffset >= buffer.length) { + if (dir) return -1;else byteOffset = buffer.length - 1; + } else if (byteOffset < 0) { + if (dir) byteOffset = 0;else return -1; + } // Normalize val + + + if (typeof val === 'string') { + val = Buffer.from(val, encoding); + } // Finally, search either indexOf (if dir is true) or lastIndexOf + + + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1; + } + + return arrayIndexOf(buffer, val, byteOffset, encoding, dir); + } else if (typeof val === 'number') { + val = val & 0xFF; // Search for a byte value [0-255] + + if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset); + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset); + } + } + + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir); + } + + throw new TypeError('val must be string, number or Buffer'); +} + +function arrayIndexOf(arr, val, byteOffset, encoding, dir) { + var indexSize = 1; + var arrLength = arr.length; + var valLength = val.length; + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase(); + + if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1; + } + + indexSize = 2; + arrLength /= 2; + valLength /= 2; + byteOffset /= 2; + } + } + + function read(buf, i) { + if (indexSize === 1) { + return buf[i]; + } else { + return buf.readUInt16BE(i * indexSize); + } + } + + var i; + + if (dir) { + var foundIndex = -1; + + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i; + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize; + } else { + if (foundIndex !== -1) i -= i - foundIndex; + foundIndex = -1; + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; + + for (i = byteOffset; i >= 0; i--) { + var found = true; + + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false; + break; + } + } + + if (found) return i; + } + } + + return -1; +} + +Buffer.prototype.includes = function includes(val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1; +}; + +Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true); +}; + +Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false); +}; + +function hexWrite(buf, string, offset, length) { + offset = Number(offset) || 0; + var remaining = buf.length - offset; + + if (!length) { + length = remaining; + } else { + length = Number(length); + + if (length > remaining) { + length = remaining; + } + } // must be an even number of digits + + + var strLen = string.length; + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string'); + + if (length > strLen / 2) { + length = strLen / 2; + } + + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16); + if (isNaN(parsed)) return i; + buf[offset + i] = parsed; + } + + return i; +} + +function utf8Write(buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); +} + +function asciiWrite(buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length); +} + +function latin1Write(buf, string, offset, length) { + return asciiWrite(buf, string, offset, length); +} + +function base64Write(buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length); +} + +function ucs2Write(buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); +} + +Buffer.prototype.write = function write(string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8'; + length = this.length; + offset = 0; // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset; + length = this.length; + offset = 0; // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0; + + if (isFinite(length)) { + length = length | 0; + if (encoding === undefined) encoding = 'utf8'; + } else { + encoding = length; + length = undefined; + } // legacy write(string, encoding, offset, length) - remove in v0.13 + + } else { + throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported'); + } + + var remaining = this.length - offset; + if (length === undefined || length > remaining) length = remaining; + + if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds'); + } + + if (!encoding) encoding = 'utf8'; + var loweredCase = false; + + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length); + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length); + + case 'ascii': + return asciiWrite(this, string, offset, length); + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length); + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length); + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length); + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } +}; + +Buffer.prototype.toJSON = function toJSON() { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + }; +}; + +function base64Slice(buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf); + } else { + return base64.fromByteArray(buf.slice(start, end)); + } +} + +function utf8Slice(buf, start, end) { + end = Math.min(buf.length, end); + var res = []; + var i = start; + + while (i < end) { + var firstByte = buf[i]; + var codePoint = null; + var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1; + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint; + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte; + } + + break; + + case 2: + secondByte = buf[i + 1]; + + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F; + + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint; + } + } + + break; + + case 3: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F; + + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint; + } + } + + break; + + case 4: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + fourthByte = buf[i + 3]; + + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F; + + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint; + } + } + + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD; + bytesPerSequence = 1; + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000; + res.push(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + + res.push(codePoint); + i += bytesPerSequence; + } + + return decodeCodePointsArray(res); +} // Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety + + +var MAX_ARGUMENTS_LENGTH = 0x1000; + +function decodeCodePointsArray(codePoints) { + var len = codePoints.length; + + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints); // avoid extra slice() + } // Decode in chunks to avoid "call stack size exceeded". + + + var res = ''; + var i = 0; + + while (i < len) { + res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)); + } + + return res; +} + +function asciiSlice(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F); + } + + return ret; +} + +function latin1Slice(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]); + } + + return ret; +} + +function hexSlice(buf, start, end) { + var len = buf.length; + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + var out = ''; + + for (var i = start; i < end; ++i) { + out += toHex(buf[i]); + } + + return out; +} + +function utf16leSlice(buf, start, end) { + var bytes = buf.slice(start, end); + var res = ''; + + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); + } + + return res; +} + +Buffer.prototype.slice = function slice(start, end) { + var len = this.length; + start = ~~start; + end = end === undefined ? len : ~~end; + + if (start < 0) { + start += len; + if (start < 0) start = 0; + } else if (start > len) { + start = len; + } + + if (end < 0) { + end += len; + if (end < 0) end = 0; + } else if (end > len) { + end = len; + } + + if (end < start) end = start; + var newBuf; + + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = this.subarray(start, end); + newBuf.__proto__ = Buffer.prototype; + } else { + var sliceLen = end - start; + newBuf = new Buffer(sliceLen, undefined); + + for (var i = 0; i < sliceLen; ++i) { + newBuf[i] = this[i + start]; + } + } + + return newBuf; +}; +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ + + +function checkOffset(offset, ext, length) { + if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint'); + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length'); +} + +Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + + return val; +}; + +Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + + if (!noAssert) { + checkOffset(offset, byteLength, this.length); + } + + var val = this[offset + --byteLength]; + var mul = 1; + + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul; + } + + return val; +}; + +Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length); + return this[offset]; +}; + +Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] | this[offset + 1] << 8; +}; + +Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] << 8 | this[offset + 1]; +}; + +Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000; +}; + +Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); +}; + +Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; +}; + +Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) { + offset = offset | 0; + byteLength = byteLength | 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var i = byteLength; + var mul = 1; + var val = this[offset + --i]; + + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul; + } + + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; +}; + +Buffer.prototype.readInt8 = function readInt8(offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length); + if (!(this[offset] & 0x80)) return this[offset]; + return (0xff - this[offset] + 1) * -1; +}; + +Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset] | this[offset + 1] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; +}; + +Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset + 1] | this[offset] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; +}; + +Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; +}; + +Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; +}; + +Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return ieee754.read(this, offset, true, 23, 4); +}; + +Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length); + return ieee754.read(this, offset, false, 23, 4); +}; + +Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length); + return ieee754.read(this, offset, true, 52, 8); +}; + +Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length); + return ieee754.read(this, offset, false, 52, 8); +}; + +function checkInt(buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds'); + if (offset + ext > buf.length) throw new RangeError('Index out of range'); +} + +Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + + var mul = 1; + var i = 0; + this[offset] = value & 0xFF; + + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + + return offset + byteLength; +}; + +Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + byteLength = byteLength | 0; + + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + + var i = byteLength - 1; + var mul = 1; + this[offset + i] = value & 0xFF; + + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + + return offset + byteLength; +}; + +Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0); + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + this[offset] = value & 0xff; + return offset + 1; +}; + +function objectWriteUInt16(buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1; + + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { + buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8; + } +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + } else { + objectWriteUInt16(this, value, offset, true); + } + + return offset + 2; +}; + +Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + } else { + objectWriteUInt16(this, value, offset, false); + } + + return offset + 2; +}; + +function objectWriteUInt32(buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1; + + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { + buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff; + } +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = value >>> 24; + this[offset + 2] = value >>> 16; + this[offset + 1] = value >>> 8; + this[offset] = value & 0xff; + } else { + objectWriteUInt32(this, value, offset, true); + } + + return offset + 4; +}; + +Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + } else { + objectWriteUInt32(this, value, offset, false); + } + + return offset + 4; +}; + +Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = 0; + var mul = 1; + var sub = 0; + this[offset] = value & 0xFF; + + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1; + } + + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + + return offset + byteLength; +}; + +Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset | 0; + + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + + var i = byteLength - 1; + var mul = 1; + var sub = 0; + this[offset + i] = value & 0xFF; + + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1; + } + + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + + return offset + byteLength; +}; + +Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); + if (value < 0) value = 0xff + value + 1; + this[offset] = value & 0xff; + return offset + 1; +}; + +Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + } else { + objectWriteUInt16(this, value, offset, true); + } + + return offset + 2; +}; + +Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + } else { + objectWriteUInt16(this, value, offset, false); + } + + return offset + 2; +}; + +Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + this[offset + 2] = value >>> 16; + this[offset + 3] = value >>> 24; + } else { + objectWriteUInt32(this, value, offset, true); + } + + return offset + 4; +}; + +Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { + value = +value; + offset = offset | 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (value < 0) value = 0xffffffff + value + 1; + + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + } else { + objectWriteUInt32(this, value, offset, false); + } + + return offset + 4; +}; + +function checkIEEE754(buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range'); + if (offset < 0) throw new RangeError('Index out of range'); +} + +function writeFloat(buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38); + } + + ieee754.write(buf, value, offset, littleEndian, 23, 4); + return offset + 4; +} + +Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert); +}; + +Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert); +}; + +function writeDouble(buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308); + } + + ieee754.write(buf, value, offset, littleEndian, 52, 8); + return offset + 8; +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert); +}; + +Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert); +}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) + + +Buffer.prototype.copy = function copy(target, targetStart, start, end) { + if (!start) start = 0; + if (!end && end !== 0) end = this.length; + if (targetStart >= target.length) targetStart = target.length; + if (!targetStart) targetStart = 0; + if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done + + if (end === start) return 0; + if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions + + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds'); + } + + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds'); + if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob? + + if (end > this.length) end = this.length; + + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start; + } + + var len = end - start; + var i; + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start]; + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; ++i) { + target[i + targetStart] = this[i + start]; + } + } else { + Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart); + } + + return len; +}; // Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) + + +Buffer.prototype.fill = function fill(val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start; + start = 0; + end = this.length; + } else if (typeof end === 'string') { + encoding = end; + end = this.length; + } + + if (val.length === 1) { + var code = val.charCodeAt(0); + + if (code < 256) { + val = code; + } + } + + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string'); + } + + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding); + } + } else if (typeof val === 'number') { + val = val & 255; + } // Invalid ranges are not set to a default, so can range check early. + + + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index'); + } + + if (end <= start) { + return this; + } + + start = start >>> 0; + end = end === undefined ? this.length : end >>> 0; + if (!val) val = 0; + var i; + + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val; + } + } else { + var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString()); + var len = bytes.length; + + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len]; + } + } + + return this; +}; // HELPER FUNCTIONS +// ================ + + +var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g; + +function base64clean(str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to '' + + if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + + while (str.length % 4 !== 0) { + str = str + '='; + } + + return str; +} + +function stringtrim(str) { + if (str.trim) return str.trim(); + return str.replace(/^\s+|\s+$/g, ''); +} + +function toHex(n) { + if (n < 16) return '0' + n.toString(16); + return n.toString(16); +} + +function utf8ToBytes(string, units) { + units = units || Infinity; + var codePoint; + var length = string.length; + var leadSurrogate = null; + var bytes = []; + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i); // is surrogate component + + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } // valid lead + + + leadSurrogate = codePoint; + continue; + } // 2 leads in a row + + + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + leadSurrogate = codePoint; + continue; + } // valid surrogate pair + + + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + } + + leadSurrogate = null; // encode utf8 + + if (codePoint < 0x80) { + if ((units -= 1) < 0) break; + bytes.push(codePoint); + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break; + bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break; + bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break; + bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else { + throw new Error('Invalid code point'); + } + } + + return bytes; +} + +function asciiToBytes(str) { + var byteArray = []; + + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF); + } + + return byteArray; +} + +function utf16leToBytes(str, units) { + var c, hi, lo; + var byteArray = []; + + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break; + c = str.charCodeAt(i); + hi = c >> 8; + lo = c % 256; + byteArray.push(lo); + byteArray.push(hi); + } + + return byteArray; +} + +function base64ToBytes(str) { + return base64.toByteArray(base64clean(str)); +} + +function blitBuffer(src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if (i + offset >= dst.length || i >= src.length) break; + dst[i + offset] = src[i]; + } + + return i; +} + +function isnan(val) { + return val !== val; // eslint-disable-line no-self-compare +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + +/***/ }), + +/***/ "./node_modules/core-util-is/lib/util.js": +/*!***********************************************!*\ + !*** ./node_modules/core-util-is/lib/util.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(Buffer) {// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + + return objectToString(arg) === '[object Array]'; +} + +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} + +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} + +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} + +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} + +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} + +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} + +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} + +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} + +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} + +exports.isDate = isDate; + +function isError(e) { + return objectToString(e) === '[object Error]' || e instanceof Error; +} + +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} + +exports.isPrimitive = isPrimitive; +exports.isBuffer = Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../buffer/index.js */ "./node_modules/buffer/index.js").Buffer)) + +/***/ }), + +/***/ "./node_modules/events/events.js": +/*!***************************************!*\ + !*** ./node_modules/events/events.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + +var R = typeof Reflect === 'object' ? Reflect : null; +var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); +}; +var ReflectOwnKeys; + +if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys; +} else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); + }; +} else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; +} + +function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); +} + +var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; +}; + +function EventEmitter() { + EventEmitter.init.call(this); +} + +module.exports = EventEmitter; // Backwards-compat with node 0.10.x + +EventEmitter.EventEmitter = EventEmitter; +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._eventsCount = 0; +EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. + +var defaultMaxListeners = 10; +Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function () { + return defaultMaxListeners; + }, + set: function (arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + + defaultMaxListeners = arg; + } +}); + +EventEmitter.init = function () { + if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +}; // Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. + + +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { + throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); + } + + this._maxListeners = n; + return this; +}; + +function $getMaxListeners(that) { + if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} + +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return $getMaxListeners(this); +}; + +EventEmitter.prototype.emit = function emit(type) { + var args = []; + + for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); + + var doError = type === 'error'; + var events = this._events; + if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw. + + if (doError) { + var er; + if (args.length > 0) er = args[0]; + + if (er instanceof Error) { + // Note: The comments on the `throw` lines are intentional, they show + // up in Node's output if this results in an unhandled exception. + throw er; // Unhandled 'error' event + } // At least give some kind of context to the user + + + var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); + err.context = er; + throw err; // Unhandled 'error' event + } + + var handler = events[type]; + if (handler === undefined) return false; + + if (typeof handler === 'function') { + ReflectApply(handler, this, args); + } else { + var len = handler.length; + var listeners = arrayClone(handler, len); + + for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args); + } + + return true; +}; + +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } + + events = target._events; + + if (events === undefined) { + events = target._events = Object.create(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener !== undefined) { + target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + + events = target._events; + } + + existing = events[type]; + } + + if (existing === undefined) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append. + } else if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } // Check for listener leak + + + m = $getMaxListeners(target); + + if (m > 0 && existing.length > m && !existing.warned) { + existing.warned = true; // No error code for this since it is a Warning + // eslint-disable-next-line no-restricted-syntax + + var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + ProcessEmitWarning(w); + } + } + + return target; +} + +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.prependListener = function prependListener(type, listener) { + return _addListener(this, type, listener, true); +}; + +function onceWrapper() { + var args = []; + + for (var i = 0; i < arguments.length; i++) args.push(arguments[i]); + + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + ReflectApply(this.listener, this.target, args); + } +} + +function _onceWrap(target, type, listener) { + var state = { + fired: false, + wrapFn: undefined, + target: target, + type: type, + listener: listener + }; + var wrapped = onceWrapper.bind(state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} + +EventEmitter.prototype.once = function once(type, listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } + + this.on(type, _onceWrap(this, type, listener)); + return this; +}; + +EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } + + this.prependListener(type, _onceWrap(this, type, listener)); + return this; +}; // Emits a 'removeListener' event if and only if the listener was removed. + + +EventEmitter.prototype.removeListener = function removeListener(type, listener) { + var list, events, position, i, originalListener; + + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } + + events = this._events; + if (events === undefined) return this; + list = events[type]; + if (list === undefined) return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) this._events = Object.create(null);else { + delete events[type]; + if (events.removeListener) this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) return this; + if (position === 0) list.shift();else { + spliceOne(list, position); + } + if (list.length === 1) events[type] = list[0]; + if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener); + } + + return this; +}; + +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + +EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { + var listeners, events, i; + events = this._events; + if (events === undefined) return this; // not listening for removeListener, no need to emit + + if (events.removeListener === undefined) { + if (arguments.length === 0) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (events[type] !== undefined) { + if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type]; + } + + return this; + } // emit removeListener for all listeners on all events + + + if (arguments.length === 0) { + var keys = Object.keys(events); + var key; + + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + + this.removeAllListeners('removeListener'); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners !== undefined) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; +}; + +function _listeners(target, type, unwrap) { + var events = target._events; + if (events === undefined) return []; + var evlistener = events[type]; + if (evlistener === undefined) return []; + if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} + +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; + +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; + +EventEmitter.listenerCount = function (emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; + +EventEmitter.prototype.listenerCount = listenerCount; + +function listenerCount(type) { + var events = this._events; + + if (events !== undefined) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener !== undefined) { + return evlistener.length; + } + } + + return 0; +} + +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; +}; + +function arrayClone(arr, n) { + var copy = new Array(n); + + for (var i = 0; i < n; ++i) copy[i] = arr[i]; + + return copy; +} + +function spliceOne(list, index) { + for (; index + 1 < list.length; index++) list[index] = list[index + 1]; + + list.pop(); +} + +function unwrapListeners(arr) { + var ret = new Array(arr.length); + + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + + return ret; +} + +/***/ }), + +/***/ "./node_modules/fetch-readablestream/lib/defaultTransportFactory.js": +/*!**************************************************************************!*\ + !*** ./node_modules/fetch-readablestream/lib/defaultTransportFactory.js ***! + \**************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = defaultTransportFactory; + +var _fetch = __webpack_require__(/*! ./fetch */ "./node_modules/fetch-readablestream/lib/fetch.js"); + +var _fetch2 = _interopRequireDefault(_fetch); + +var _xhr = __webpack_require__(/*! ./xhr */ "./node_modules/fetch-readablestream/lib/xhr.js"); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} // selected is used to cache the detected transport. + + +var selected = null; // defaultTransportFactory selects the most appropriate transport based on the +// capabilities of the current environment. + +function defaultTransportFactory() { + if (!selected) { + selected = detectTransport(); + } + + return selected; +} + +function detectTransport() { + if (typeof Response !== 'undefined' && Response.prototype.hasOwnProperty("body")) { + // fetch with ReadableStream support. + return _fetch2.default; + } + + var mozChunked = 'moz-chunked-arraybuffer'; + + if (supportsXhrResponseType(mozChunked)) { + // Firefox, ArrayBuffer support. + return (0, _xhr.makeXhrTransport)({ + responseType: mozChunked, + responseParserFactory: function responseParserFactory() { + return function (response) { + return new Uint8Array(response); + }; + } + }); + } // Bog-standard, expensive, text concatenation with byte encoding :( + + + return (0, _xhr.makeXhrTransport)({ + responseType: 'text', + responseParserFactory: function responseParserFactory() { + var encoder = new TextEncoder(); + var offset = 0; + return function (response) { + var chunk = response.substr(offset); + offset = response.length; + return encoder.encode(chunk, { + stream: true + }); + }; + } + }); +} + +function supportsXhrResponseType(type) { + try { + var tmpXhr = new XMLHttpRequest(); + tmpXhr.responseType = type; + return tmpXhr.responseType === type; + } catch (e) { + /* IE throws on setting responseType to an unsupported value */ + } + + return false; +} + +/***/ }), + +/***/ "./node_modules/fetch-readablestream/lib/entry.js": +/*!********************************************************!*\ + !*** ./node_modules/fetch-readablestream/lib/entry.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./index */ "./node_modules/fetch-readablestream/lib/index.js").default; + +/***/ }), + +/***/ "./node_modules/fetch-readablestream/lib/fetch.js": +/*!********************************************************!*\ + !*** ./node_modules/fetch-readablestream/lib/fetch.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = fetchRequest; // thin wrapper around `fetch()` to ensure we only expose the properties provided by +// the XHR polyfil; / fetch-readablestream Response API. + +function fetchRequest(url, options) { + return fetch(url, options).then(function (r) { + return { + body: r.body, + headers: r.headers, + ok: r.ok, + status: r.status, + statusText: r.statusText, + url: r.url + }; + }); +} + +/***/ }), + +/***/ "./node_modules/fetch-readablestream/lib/index.js": +/*!********************************************************!*\ + !*** ./node_modules/fetch-readablestream/lib/index.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = fetchStream; + +var _defaultTransportFactory = __webpack_require__(/*! ./defaultTransportFactory */ "./node_modules/fetch-readablestream/lib/defaultTransportFactory.js"); + +var _defaultTransportFactory2 = _interopRequireDefault(_defaultTransportFactory); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} + +function fetchStream(url) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var transport = options.transport; + + if (!transport) { + transport = fetchStream.transportFactory(); + } + + return transport(url, options); +} // override this function to delegate to an alternative transport function selection +// strategy; useful when testing. + + +fetchStream.transportFactory = _defaultTransportFactory2.default; + +/***/ }), + +/***/ "./node_modules/fetch-readablestream/lib/polyfill/Headers.js": +/*!*******************************************************************!*\ + !*** ./node_modules/fetch-readablestream/lib/polyfill/Headers.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} // Headers is a partial polyfill for the HTML5 Headers class. + + +var Headers = exports.Headers = function () { + function Headers() { + var _this = this; + + var h = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, Headers); + + this.h = {}; + + if (h instanceof Headers) { + h.forEach(function (value, key) { + return _this.append(key, value); + }); + } + + Object.getOwnPropertyNames(h).forEach(function (key) { + return _this.append(key, h[key]); + }); + } + + _createClass(Headers, [{ + key: "append", + value: function append(key, value) { + key = key.toLowerCase(); + + if (!Array.isArray(this.h[key])) { + this.h[key] = []; + } + + this.h[key].push(value); + } + }, { + key: "set", + value: function set(key, value) { + this.h[key.toLowerCase()] = [value]; + } + }, { + key: "has", + value: function has(key) { + return Array.isArray(this.h[key.toLowerCase()]); + } + }, { + key: "get", + value: function get(key) { + key = key.toLowerCase(); + + if (Array.isArray(this.h[key])) { + return this.h[key][0]; + } + } + }, { + key: "getAll", + value: function getAll(key) { + return this.h[key.toLowerCase()].concat(); + } + }, { + key: "entries", + value: function entries() { + var items = []; + this.forEach(function (value, key) { + items.push([key, value]); + }); + return makeIterator(items); + } // forEach is not part of the official spec. + + }, { + key: "forEach", + value: function forEach(callback, thisArg) { + var _this2 = this; + + Object.getOwnPropertyNames(this.h).forEach(function (key) { + _this2.h[key].forEach(function (value) { + return callback.call(thisArg, value, key, _this2); + }); + }, this); + } + }]); + + return Headers; +}(); + +function makeIterator(items) { + return _defineProperty({ + next: function next() { + var value = items.shift(); + return { + done: value === undefined, + value: value + }; + } + }, Symbol.iterator, function () { + return this; + }); +} + +/***/ }), + +/***/ "./node_modules/fetch-readablestream/lib/xhr.js": +/*!******************************************************!*\ + !*** ./node_modules/fetch-readablestream/lib/xhr.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.makeXhrTransport = makeXhrTransport; +exports.parseResposneHeaders = parseResposneHeaders; + +var _Headers = __webpack_require__(/*! ./polyfill/Headers */ "./node_modules/fetch-readablestream/lib/polyfill/Headers.js"); + +function createAbortError() { + // From https://github.com/mo/abortcontroller-polyfill/blob/master/src/abortableFetch.js#L56-L64 + try { + return new DOMException('Aborted', 'AbortError'); + } catch (err) { + // IE 11 does not support calling the DOMException constructor, use a + // regular error object on it instead. + var abortError = new Error('Aborted'); + abortError.name = 'AbortError'; + return abortError; + } +} + +function makeXhrTransport(_ref) { + var responseType = _ref.responseType, + responseParserFactory = _ref.responseParserFactory; + return function xhrTransport(url, options) { + var xhr = new XMLHttpRequest(); + var responseParser = responseParserFactory(); + var responseStreamController = void 0; + var cancelled = false; + var responseStream = new ReadableStream({ + start: function start(c) { + responseStreamController = c; + }, + cancel: function cancel() { + cancelled = true; + xhr.abort(); + } + }); + var _options$method = options.method, + method = _options$method === undefined ? 'GET' : _options$method, + signal = options.signal; + xhr.open(method, url); + xhr.responseType = responseType; + xhr.withCredentials = options.credentials !== 'omit'; + + if (options.headers) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = options.headers.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var pair = _step.value; + xhr.setRequestHeader(pair[0], pair[1]); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + } + + return new Promise(function (resolve, reject) { + if (options.body && (method === 'GET' || method === 'HEAD')) { + reject(new TypeError("Failed to execute 'fetchStream' on 'Window': Request with GET/HEAD method cannot have body")); + } + + if (signal) { + if (signal.aborted) { + // If already aborted, reject immediately & send nothing. + reject(createAbortError()); + return; + } else { + signal.addEventListener('abort', function () { + // If we abort later, kill the XHR & reject the promise if possible. + xhr.abort(); + + if (responseStreamController) { + responseStreamController.error(createAbortError()); + } + + reject(createAbortError()); + }, { + once: true + }); + } + } + + xhr.onreadystatechange = function () { + if (xhr.readyState === xhr.HEADERS_RECEIVED) { + return resolve({ + body: responseStream, + headers: parseResposneHeaders(xhr.getAllResponseHeaders()), + ok: xhr.status >= 200 && xhr.status < 300, + status: xhr.status, + statusText: xhr.statusText, + url: makeResponseUrl(xhr.responseURL, url) + }); + } + }; + + xhr.onerror = function () { + return reject(new TypeError('Network request failed')); + }; + + xhr.ontimeout = function () { + reject(new TypeError('Network request failed')); + }; + + xhr.onprogress = function () { + if (!cancelled) { + var bytes = responseParser(xhr.response); + responseStreamController.enqueue(bytes); + } + }; + + xhr.onload = function () { + responseStreamController.close(); + }; + + xhr.send(options.body); + }); + }; +} + +function makeHeaders() { + // Prefer the native method if provided by the browser. + if (typeof Headers !== 'undefined') { + return new Headers(); + } + + return new _Headers.Headers(); +} + +function makeResponseUrl(responseUrl, requestUrl) { + if (!responseUrl) { + // best guess; note this will not correctly handle redirects. + if (requestUrl.substring(0, 4) !== "http") { + return location.origin + requestUrl; + } + + return requestUrl; + } + + return responseUrl; +} + +function parseResposneHeaders(str) { + var hdrs = makeHeaders(); + + if (str) { + var pairs = str.split('\r\n'); + + for (var i = 0; i < pairs.length; i++) { + var p = pairs[i]; + var index = p.indexOf(': '); + + if (index > 0) { + var key = p.substring(0, index); + var value = p.substring(index + 2); + hdrs.append(key, value); + } + } + } + + return hdrs; +} + +/***/ }), + +/***/ "./node_modules/ieee754/index.js": +/*!***************************************!*\ + !*** ./node_modules/ieee754/index.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? nBytes - 1 : 0; + var d = isLE ? -1 : 1; + var s = buffer[offset + i]; + i += d; + e = s & (1 << -nBits) - 1; + s >>= -nBits; + nBits += eLen; + + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : (s ? -1 : 1) * Infinity; + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; + var i = isLE ? 0 : nBytes - 1; + var d = isLE ? 1 : -1; + var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = e << mLen | m; + eLen += mLen; + + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128; +}; + +/***/ }), + +/***/ "./node_modules/inherits/inherits_browser.js": +/*!***************************************************!*\ + !*** ./node_modules/inherits/inherits_browser.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + + var TempCtor = function () {}; + + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + }; +} + +/***/ }), + +/***/ "./node_modules/isarray/index.js": +/*!***************************************!*\ + !*** ./node_modules/isarray/index.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +/***/ }), + +/***/ "./node_modules/pako/index.js": +/*!************************************!*\ + !*** ./node_modules/pako/index.js ***! + \************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Top level file is just a mixin of submodules & constants + + +var assign = __webpack_require__(/*! ./lib/utils/common */ "./node_modules/pako/lib/utils/common.js").assign; + +var deflate = __webpack_require__(/*! ./lib/deflate */ "./node_modules/pako/lib/deflate.js"); + +var inflate = __webpack_require__(/*! ./lib/inflate */ "./node_modules/pako/lib/inflate.js"); + +var constants = __webpack_require__(/*! ./lib/zlib/constants */ "./node_modules/pako/lib/zlib/constants.js"); + +var pako = {}; +assign(pako, deflate, inflate, constants); +module.exports = pako; + +/***/ }), + +/***/ "./node_modules/pako/lib/deflate.js": +/*!******************************************!*\ + !*** ./node_modules/pako/lib/deflate.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var zlib_deflate = __webpack_require__(/*! ./zlib/deflate */ "./node_modules/pako/lib/zlib/deflate.js"); + +var utils = __webpack_require__(/*! ./utils/common */ "./node_modules/pako/lib/utils/common.js"); + +var strings = __webpack_require__(/*! ./utils/strings */ "./node_modules/pako/lib/utils/strings.js"); + +var msg = __webpack_require__(/*! ./zlib/messages */ "./node_modules/pako/lib/zlib/messages.js"); + +var ZStream = __webpack_require__(/*! ./zlib/zstream */ "./node_modules/pako/lib/zlib/zstream.js"); + +var toString = Object.prototype.toString; +/* Public constants ==========================================================*/ + +/* ===========================================================================*/ + +var Z_NO_FLUSH = 0; +var Z_FINISH = 4; +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_SYNC_FLUSH = 2; +var Z_DEFAULT_COMPRESSION = -1; +var Z_DEFAULT_STRATEGY = 0; +var Z_DEFLATED = 8; +/* ===========================================================================*/ + +/** + * class Deflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[deflate]], + * [[deflateRaw]] and [[gzip]]. + **/ + +/* internal + * Deflate.chunks -> Array + * + * Chunks of output data, if [[Deflate#onData]] not overridden. + **/ + +/** + * Deflate.result -> Uint8Array|Array + * + * Compressed result, generated by default [[Deflate#onData]] + * and [[Deflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Deflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Deflate.err -> Number + * + * Error code after deflate finished. 0 (Z_OK) on success. + * You will not need it in real life, because deflate errors + * are possible only on wrong options or bad `onData` / `onEnd` + * custom handlers. + **/ + +/** + * Deflate.msg -> String + * + * Error message, if [[Deflate.err]] != 0 + **/ + +/** + * new Deflate(options) + * - options (Object): zlib deflate options. + * + * Creates new deflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `level` + * - `windowBits` + * - `memLevel` + * - `strategy` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw deflate + * - `gzip` (Boolean) - create gzip wrapper + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * - `header` (Object) - custom header for gzip + * - `text` (Boolean) - true if compressed data believed to be text + * - `time` (Number) - modification time, unix timestamp + * - `os` (Number) - operation system code + * - `extra` (Array) - array of bytes with extra data (max 65536) + * - `name` (String) - file name (binary string) + * - `comment` (String) - comment (binary string) + * - `hcrc` (Boolean) - true if header crc should be added + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var deflate = new pako.Deflate({ level: 3}); + * + * deflate.push(chunk1, false); + * deflate.push(chunk2, true); // true -> last chunk + * + * if (deflate.err) { throw new Error(deflate.err); } + * + * console.log(deflate.result); + * ``` + **/ + +function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: '' + }, options || {}); + var opt = this.options; + + if (opt.raw && opt.windowBits > 0) { + opt.windowBits = -opt.windowBits; + } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) { + opt.windowBits += 16; + } + + this.err = 0; // error code, if happens (0 = Z_OK) + + this.msg = ''; // error message + + this.ended = false; // used to avoid multiple onEnd() calls + + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + var status = zlib_deflate.deflateInit2(this.strm, opt.level, opt.method, opt.windowBits, opt.memLevel, opt.strategy); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + + if (opt.dictionary) { + var dict; // Convert data if needed + + if (typeof opt.dictionary === 'string') { + // If we need to compress text, change encoding to utf8. + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + this._dict_set = true; + } +} +/** + * Deflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be + * converted to utf8 byte sequence. + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. + * + * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with + * new compressed chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the compression context. + * + * On fail call [[Deflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * array format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ + + +Deflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + + var status, _mode; + + if (this.ended) { + return false; + } + + _mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH; // Convert data if needed + + if (typeof data === 'string') { + // If we need to compress text, change encoding to utf8. + strm.input = strings.string2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + + status = zlib_deflate.deflate(strm, _mode); + /* no bad return value */ + + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + + if (strm.avail_out === 0 || strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) { + if (this.options.to === 'string') { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); // Finalize on the last chunk. + + + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } // callback interim results if Z_SYNC_FLUSH. + + + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; +/** + * Deflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): output data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ + + +Deflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; +/** + * Deflate#onEnd(status) -> Void + * - status (Number): deflate status. 0 (Z_OK) on success, + * other if not. + * + * Called once after you tell deflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ + + +Deflate.prototype.onEnd = function (status) { + // On success - join + if (status === Z_OK) { + if (this.options.to === 'string') { + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; +/** + * deflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * Compress `data` with deflate algorithm and `options`. + * + * Supported options are: + * + * - level + * - windowBits + * - memLevel + * - strategy + * - dictionary + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); + * + * console.log(pako.deflate(data)); + * ``` + **/ + + +function deflate(input, options) { + var deflator = new Deflate(options); + deflator.push(input, true); // That will never happens, if you don't cheat with options :) + + if (deflator.err) { + throw deflator.msg || msg[deflator.err]; + } + + return deflator.result; +} +/** + * deflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ + + +function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); +} +/** + * gzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but create gzip wrapper instead of + * deflate one. + **/ + + +function gzip(input, options) { + options = options || {}; + options.gzip = true; + return deflate(input, options); +} + +exports.Deflate = Deflate; +exports.deflate = deflate; +exports.deflateRaw = deflateRaw; +exports.gzip = gzip; + +/***/ }), + +/***/ "./node_modules/pako/lib/inflate.js": +/*!******************************************!*\ + !*** ./node_modules/pako/lib/inflate.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var zlib_inflate = __webpack_require__(/*! ./zlib/inflate */ "./node_modules/pako/lib/zlib/inflate.js"); + +var utils = __webpack_require__(/*! ./utils/common */ "./node_modules/pako/lib/utils/common.js"); + +var strings = __webpack_require__(/*! ./utils/strings */ "./node_modules/pako/lib/utils/strings.js"); + +var c = __webpack_require__(/*! ./zlib/constants */ "./node_modules/pako/lib/zlib/constants.js"); + +var msg = __webpack_require__(/*! ./zlib/messages */ "./node_modules/pako/lib/zlib/messages.js"); + +var ZStream = __webpack_require__(/*! ./zlib/zstream */ "./node_modules/pako/lib/zlib/zstream.js"); + +var GZheader = __webpack_require__(/*! ./zlib/gzheader */ "./node_modules/pako/lib/zlib/gzheader.js"); + +var toString = Object.prototype.toString; +/** + * class Inflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[inflate]] + * and [[inflateRaw]]. + **/ + +/* internal + * inflate.chunks -> Array + * + * Chunks of output data, if [[Inflate#onData]] not overridden. + **/ + +/** + * Inflate.result -> Uint8Array|Array|String + * + * Uncompressed result, generated by default [[Inflate#onData]] + * and [[Inflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Inflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Inflate.err -> Number + * + * Error code after inflate finished. 0 (Z_OK) on success. + * Should be checked if broken data possible. + **/ + +/** + * Inflate.msg -> String + * + * Error message, if [[Inflate.err]] != 0 + **/ + +/** + * new Inflate(options) + * - options (Object): zlib inflate options. + * + * Creates new inflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `windowBits` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw inflate + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * By default, when no options set, autodetect deflate/gzip data format via + * wrapper header. + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var inflate = new pako.Inflate({ level: 3}); + * + * inflate.push(chunk1, false); + * inflate.push(chunk2, true); // true -> last chunk + * + * if (inflate.err) { throw new Error(inflate.err); } + * + * console.log(inflate.result); + * ``` + **/ + +function Inflate(options) { + if (!(this instanceof Inflate)) return new Inflate(options); + this.options = utils.assign({ + chunkSize: 16384, + windowBits: 0, + to: '' + }, options || {}); + var opt = this.options; // Force window size for `raw` data, if not set directly, + // because we have no header for autodetect. + + if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) { + opt.windowBits = -opt.windowBits; + + if (opt.windowBits === 0) { + opt.windowBits = -15; + } + } // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate + + + if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) { + opt.windowBits += 32; + } // Gzip header has no info about windows size, we can do autodetect only + // for deflate. So, if window size not set, force it to max when gzip possible + + + if (opt.windowBits > 15 && opt.windowBits < 48) { + // bit 3 (16) -> gzipped data + // bit 4 (32) -> autodetect gzip/deflate + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + + this.err = 0; // error code, if happens (0 = Z_OK) + + this.msg = ''; // error message + + this.ended = false; // used to avoid multiple onEnd() calls + + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + var status = zlib_inflate.inflateInit2(this.strm, opt.windowBits); + + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + + this.header = new GZheader(); + zlib_inflate.inflateGetHeader(this.strm, this.header); // Setup dictionary + + if (opt.dictionary) { + // Convert data if needed + if (typeof opt.dictionary === 'string') { + opt.dictionary = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + opt.dictionary = new Uint8Array(opt.dictionary); + } + + if (opt.raw) { + //In raw mode we need to set the dictionary early + status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary); + + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + } + } +} +/** + * Inflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. + * + * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with + * new output chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the decompression context. + * + * On fail call [[Inflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ + + +Inflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + + var status, _mode; + + var next_out_utf8, tail, utf8str; // Flag to properly process Z_BUF_ERROR on testing inflate call + // when we check that all output data was flushed. + + var allowBufError = false; + + if (this.ended) { + return false; + } + + _mode = mode === ~~mode ? mode : mode === true ? c.Z_FINISH : c.Z_NO_FLUSH; // Convert data if needed + + if (typeof data === 'string') { + // Only binary strings can be decompressed on practice + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + + status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); + /* no bad return value */ + + if (status === c.Z_NEED_DICT && dictionary) { + status = zlib_inflate.inflateSetDictionary(this.strm, dictionary); + } + + if (status === c.Z_BUF_ERROR && allowBufError === true) { + status = c.Z_OK; + allowBufError = false; + } + + if (status !== c.Z_STREAM_END && status !== c.Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + + if (strm.next_out) { + if (strm.avail_out === 0 || status === c.Z_STREAM_END || strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH)) { + if (this.options.to === 'string') { + next_out_utf8 = strings.utf8border(strm.output, strm.next_out); + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string(strm.output, next_out_utf8); // move tail + + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + + if (tail) { + utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); + } + + this.onData(utf8str); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } // When no more input data, we should check that internal inflate buffers + // are flushed. The only way to do it when avail_out = 0 - run one more + // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. + // Here we set flag to process this error properly. + // + // NOTE. Deflate does not return error in this case and does not needs such + // logic. + + + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); + + if (status === c.Z_STREAM_END) { + _mode = c.Z_FINISH; + } // Finalize on the last chunk. + + + if (_mode === c.Z_FINISH) { + status = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === c.Z_OK; + } // callback interim results if Z_SYNC_FLUSH. + + + if (_mode === c.Z_SYNC_FLUSH) { + this.onEnd(c.Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; +/** + * Inflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): output data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ + + +Inflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; +/** + * Inflate#onEnd(status) -> Void + * - status (Number): inflate status. 0 (Z_OK) on success, + * other if not. + * + * Called either after you tell inflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ + + +Inflate.prototype.onEnd = function (status) { + // On success - join + if (status === c.Z_OK) { + if (this.options.to === 'string') { + // Glue & convert here, until we teach pako to send + // utf8 aligned strings to onData + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; +/** + * inflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Decompress `data` with inflate/ungzip and `options`. Autodetect + * format via wrapper header by default. That's why we don't provide + * separate `ungzip` method. + * + * Supported options are: + * + * - windowBits + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) + * , output; + * + * try { + * output = pako.inflate(input); + * } catch (err) + * console.log(err); + * } + * ``` + **/ + + +function inflate(input, options) { + var inflator = new Inflate(options); + inflator.push(input, true); // That will never happens, if you don't cheat with options :) + + if (inflator.err) { + throw inflator.msg || msg[inflator.err]; + } + + return inflator.result; +} +/** + * inflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * The same as [[inflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ + + +function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate(input, options); +} +/** + * ungzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Just shortcut to [[inflate]], because it autodetects format + * by header.content. Done for convenience. + **/ + + +exports.Inflate = Inflate; +exports.inflate = inflate; +exports.inflateRaw = inflateRaw; +exports.ungzip = inflate; + +/***/ }), + +/***/ "./node_modules/pako/lib/utils/common.js": +/*!***********************************************!*\ + !*** ./node_modules/pako/lib/utils/common.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var TYPED_OK = typeof Uint8Array !== 'undefined' && typeof Uint16Array !== 'undefined' && typeof Int32Array !== 'undefined'; + +function _has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} + +exports.assign = function (obj +/*from1, from2, from3, ...*/ +) { + var sources = Array.prototype.slice.call(arguments, 1); + + while (sources.length) { + var source = sources.shift(); + + if (!source) { + continue; + } + + if (typeof source !== 'object') { + throw new TypeError(source + 'must be non-object'); + } + + for (var p in source) { + if (_has(source, p)) { + obj[p] = source[p]; + } + } + } + + return obj; +}; // reduce buffer size, avoiding mem copy + + +exports.shrinkBuf = function (buf, size) { + if (buf.length === size) { + return buf; + } + + if (buf.subarray) { + return buf.subarray(0, size); + } + + buf.length = size; + return buf; +}; + +var fnTyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + if (src.subarray && dest.subarray) { + dest.set(src.subarray(src_offs, src_offs + len), dest_offs); + return; + } // Fallback to ordinary array + + + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + var i, l, len, pos, chunk, result; // calculate data length + + len = 0; + + for (i = 0, l = chunks.length; i < l; i++) { + len += chunks[i].length; + } // join chunks + + + result = new Uint8Array(len); + pos = 0; + + for (i = 0, l = chunks.length; i < l; i++) { + chunk = chunks[i]; + result.set(chunk, pos); + pos += chunk.length; + } + + return result; + } +}; +var fnUntyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + return [].concat.apply([], chunks); + } +}; // Enable/Disable typed arrays use, for testing +// + +exports.setTyped = function (on) { + if (on) { + exports.Buf8 = Uint8Array; + exports.Buf16 = Uint16Array; + exports.Buf32 = Int32Array; + exports.assign(exports, fnTyped); + } else { + exports.Buf8 = Array; + exports.Buf16 = Array; + exports.Buf32 = Array; + exports.assign(exports, fnUntyped); + } +}; + +exports.setTyped(TYPED_OK); + +/***/ }), + +/***/ "./node_modules/pako/lib/utils/strings.js": +/*!************************************************!*\ + !*** ./node_modules/pako/lib/utils/strings.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// String encode/decode helpers + + +var utils = __webpack_require__(/*! ./common */ "./node_modules/pako/lib/utils/common.js"); // Quick check if we can use fast array to bin string conversion +// +// - apply(Array) can fail on Android 2.2 +// - apply(Uint8Array) can fail on iOS 5.1 Safari +// + + +var STR_APPLY_OK = true; +var STR_APPLY_UIA_OK = true; + +try { + String.fromCharCode.apply(null, [0]); +} catch (__) { + STR_APPLY_OK = false; +} + +try { + String.fromCharCode.apply(null, new Uint8Array(1)); +} catch (__) { + STR_APPLY_UIA_OK = false; +} // Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff + + +var _utf8len = new utils.Buf8(256); + +for (var q = 0; q < 256; q++) { + _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1; +} + +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start +// convert string to array (typed, when possible) + +exports.string2buf = function (str) { + var buf, + c, + c2, + m_pos, + i, + str_len = str.length, + buf_len = 0; // count binary size + + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + + if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) { + c2 = str.charCodeAt(m_pos + 1); + + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00); + m_pos++; + } + } + + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } // allocate buffer + + + buf = new utils.Buf8(buf_len); // convert + + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + + if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) { + c2 = str.charCodeAt(m_pos + 1); + + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00); + m_pos++; + } + } + + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | c >>> 6; + buf[i++] = 0x80 | c & 0x3f; + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | c >>> 12; + buf[i++] = 0x80 | c >>> 6 & 0x3f; + buf[i++] = 0x80 | c & 0x3f; + } else { + /* four bytes */ + buf[i++] = 0xf0 | c >>> 18; + buf[i++] = 0x80 | c >>> 12 & 0x3f; + buf[i++] = 0x80 | c >>> 6 & 0x3f; + buf[i++] = 0x80 | c & 0x3f; + } + } + + return buf; +}; // Helper (used in 2 places) + + +function buf2binstring(buf, len) { + // On Chrome, the arguments in a function call that are allowed is `65534`. + // If the length of the buffer is smaller than that, we can use this optimization, + // otherwise we will take a slower path. + if (len < 65534) { + if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + + return result; +} // Convert byte array to binary string + + +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; // Convert binary string (typed, when possible) + + +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + + return buf; +}; // convert array to string + + +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + + var utf16buf = new Array(len * 2); + + for (out = 0, i = 0; i < len;) { + c = buf[i++]; // quick process ascii + + if (c < 0x80) { + utf16buf[out++] = c; + continue; + } + + c_len = _utf8len[c]; // skip 5 & 6 byte codes + + if (c_len > 4) { + utf16buf[out++] = 0xfffd; + i += c_len - 1; + continue; + } // apply mask on first byte + + + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; // join the rest + + while (c_len > 1 && i < len) { + c = c << 6 | buf[i++] & 0x3f; + c_len--; + } // terminated by end of string? + + + if (c_len > 1) { + utf16buf[out++] = 0xfffd; + continue; + } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | c >> 10 & 0x3ff; + utf16buf[out++] = 0xdc00 | c & 0x3ff; + } + } + + return buf2binstring(utf16buf, out); +}; // Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); + + +exports.utf8border = function (buf, max) { + var pos; + max = max || buf.length; + + if (max > buf.length) { + max = buf.length; + } // go back from last position, until start of sequence found + + + pos = max - 1; + + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { + pos--; + } // Very small and broken sequence, + // return max, because we should return something anyway. + + + if (pos < 0) { + return max; + } // If we came to start of buffer - that means buffer is too small, + // return max too. + + + if (pos === 0) { + return max; + } + + return pos + _utf8len[buf[pos]] > max ? pos : max; +}; + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/adler32.js": +/*!***********************************************!*\ + !*** ./node_modules/pako/lib/zlib/adler32.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // Note: adler32 takes 12% for level 0 and 2% for level 6. +// It isn't worth it to make additional optimizations as in original. +// Small size is preferable. +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +function adler32(adler, buf, len, pos) { + var s1 = adler & 0xffff | 0, + s2 = adler >>> 16 & 0xffff | 0, + n = 0; + + while (len !== 0) { + // Set limit ~ twice less than 5552, to keep + // s2 in 31-bits, because we force signed ints. + // in other case %= will fail. + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = s1 + buf[pos++] | 0; + s2 = s2 + s1 | 0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return s1 | s2 << 16 | 0; +} + +module.exports = adler32; + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/constants.js": +/*!*************************************************!*\ + !*** ./node_modules/pako/lib/zlib/constants.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +module.exports = { + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + + /* The deflate compression method */ + Z_DEFLATED: 8 //Z_NULL: null // Use -1 or null inline, depending on var type + +}; + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/crc32.js": +/*!*********************************************!*\ + !*** ./node_modules/pako/lib/zlib/crc32.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // Note: we can't get significant speed boost here. +// So write code to minimize size - no pregenerated tables +// and array tools dependencies. +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// Use ordinary array, since untyped makes no boost here + +function makeTable() { + var c, + table = []; + + for (var n = 0; n < 256; n++) { + c = n; + + for (var k = 0; k < 8; k++) { + c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1; + } + + table[n] = c; + } + + return table; +} // Create table on load. Just 255 signed longs. Not a problem. + + +var crcTable = makeTable(); + +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return crc ^ -1; // >>> 0; +} + +module.exports = crc32; + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/deflate.js": +/*!***********************************************!*\ + !*** ./node_modules/pako/lib/zlib/deflate.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = __webpack_require__(/*! ../utils/common */ "./node_modules/pako/lib/utils/common.js"); + +var trees = __webpack_require__(/*! ./trees */ "./node_modules/pako/lib/zlib/trees.js"); + +var adler32 = __webpack_require__(/*! ./adler32 */ "./node_modules/pako/lib/zlib/adler32.js"); + +var crc32 = __webpack_require__(/*! ./crc32 */ "./node_modules/pako/lib/zlib/crc32.js"); + +var msg = __webpack_require__(/*! ./messages */ "./node_modules/pako/lib/zlib/messages.js"); +/* Public constants ==========================================================*/ + +/* ===========================================================================*/ + +/* Allowed flush values; see deflate() and inflate() below for details */ + + +var Z_NO_FLUSH = 0; +var Z_PARTIAL_FLUSH = 1; //var Z_SYNC_FLUSH = 2; + +var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; //var Z_TREES = 6; + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +var Z_OK = 0; +var Z_STREAM_END = 1; //var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; + +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; //var Z_MEM_ERROR = -4; + +var Z_BUF_ERROR = -5; //var Z_VERSION_ERROR = -6; + +/* compression levels */ +//var Z_NO_COMPRESSION = 0; +//var Z_BEST_SPEED = 1; +//var Z_BEST_COMPRESSION = 9; + +var Z_DEFAULT_COMPRESSION = -1; +var Z_FILTERED = 1; +var Z_HUFFMAN_ONLY = 2; +var Z_RLE = 3; +var Z_FIXED = 4; +var Z_DEFAULT_STRATEGY = 0; +/* Possible values of the data_type field (though see inflate()) */ +//var Z_BINARY = 0; +//var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT + +var Z_UNKNOWN = 2; +/* The deflate compression method */ + +var Z_DEFLATED = 8; +/*============================================================================*/ + +var MAX_MEM_LEVEL = 9; +/* Maximum value for memLevel in deflateInit2 */ + +var MAX_WBITS = 15; +/* 32K LZ77 window */ + +var DEF_MEM_LEVEL = 8; +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1; +var PRESET_DICT = 0x20; +var INIT_STATE = 42; +var EXTRA_STATE = 69; +var NAME_STATE = 73; +var COMMENT_STATE = 91; +var HCRC_STATE = 103; +var BUSY_STATE = 113; +var FINISH_STATE = 666; +var BS_NEED_MORE = 1; +/* block not completed, need more input or more output */ + +var BS_BLOCK_DONE = 2; +/* block flush performed */ + +var BS_FINISH_STARTED = 3; +/* finish started, need only more output at next deflate */ + +var BS_FINISH_DONE = 4; +/* finish done, accept no more input or output */ + +var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. + +function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; +} + +function rank(f) { + return (f << 1) - (f > 4 ? 9 : 0); +} + +function zero(buf) { + var len = buf.length; + + while (--len >= 0) { + buf[len] = 0; + } +} +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->output buffer and copying into it. + * (See also read_buf()). + */ + + +function flush_pending(strm) { + var s = strm.state; //_tr_flush_bits(s); + + var len = s.pending; + + if (len > strm.avail_out) { + len = strm.avail_out; + } + + if (len === 0) { + return; + } + + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + + if (s.pending === 0) { + s.pending_out = 0; + } +} + +function flush_block_only(s, last) { + trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last); + + s.block_start = s.strstart; + flush_pending(s.strm); +} + +function put_byte(s, b) { + s.pending_buf[s.pending++] = b; +} +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ + + +function putShortMSB(s, b) { + // put_byte(s, (Byte)(b >> 8)); + // put_byte(s, (Byte)(b & 0xff)); + s.pending_buf[s.pending++] = b >>> 8 & 0xff; + s.pending_buf[s.pending++] = b & 0xff; +} +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->input buffer and copying from it. + * (See also flush_pending()). + */ + + +function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + + if (len > size) { + len = size; + } + + if (len === 0) { + return 0; + } + + strm.avail_in -= len; // zmemcpy(buf, strm->next_in, len); + + utils.arraySet(buf, strm.input, strm.next_in, len, start); + + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + + strm.next_in += len; + strm.total_in += len; + return len; +} +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ + + +function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; + /* max hash chain length */ + + var scan = s.strstart; + /* current string */ + + var match; + /* matched string */ + + var len; + /* length of current match */ + + var best_len = s.prev_length; + /* best match length so far */ + + var nice_match = s.nice_match; + /* stop if match long enough */ + + var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0 + /*NIL*/ + ; + var _win = s.window; // shortcut + + var wmask = s.w_mask; + var prev = s.prev; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + + + if (nice_match > s.lookahead) { + nice_match = s.lookahead; + } // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + + do { + // Assert(cur_match < s->strstart, "no future"); + match = cur_match; + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ + + if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) { + continue; + } + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + + + scan += 2; + match++; // Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + + do { + /*jshint noempty:false*/ + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend); // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + + if (len >= nice_match) { + break; + } + + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + + if (best_len <= s.lookahead) { + return best_len; + } + + return s.lookahead; +} +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ + + +function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = s.window_size - s.lookahead - s.strstart; // JS ints have 32 bit, block below not needed + + /* Deal with !@#$% 64K limit: */ + //if (sizeof(int) <= 2) { + // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + // more = wsize; + // + // } else if (more == (unsigned)(-1)) { + // /* Very unlikely, but possible on 16 bit machine if + // * strstart == 0 && lookahead == 1 (input done a byte at time) + // */ + // more--; + // } + //} + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + /* we now have strstart >= MAX_DIST */ + + s.block_start -= _w_size; + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + + n = s.hash_size; + p = n; + + do { + m = s.head[--p]; + s.head[p] = m >= _w_size ? m - _w_size : 0; + } while (--n); + + n = _w_size; + p = n; + + do { + m = s.prev[--p]; + s.prev[p] = m >= _w_size ? m - _w_size : 0; + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); + + more += _w_size; + } + + if (s.strm.avail_in === 0) { + break; + } + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + //Assert(more >= 2, "more < 2"); + + + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + /* Initialize the hash value now that we have some input: */ + + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ + + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask; //#if MIN_MATCH != 3 + // Call update_hash() MIN_MATCH-3 more times + //#endif + + while (s.insert) { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + // if (s.high_water < s.window_size) { + // var curr = s.strstart + s.lookahead; + // var init = 0; + // + // if (s.high_water < curr) { + // /* Previous high water mark below current data -- zero WIN_INIT + // * bytes or up to end of window, whichever is less. + // */ + // init = s.window_size - curr; + // if (init > WIN_INIT) + // init = WIN_INIT; + // zmemzero(s->window + curr, (unsigned)init); + // s->high_water = curr + init; + // } + // else if (s->high_water < (ulg)curr + WIN_INIT) { + // /* High water mark at or above current data, but below current data + // * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + // * to end of window, whichever is less. + // */ + // init = (ulg)curr + WIN_INIT - s->high_water; + // if (init > s->window_size - s->high_water) + // init = s->window_size - s->high_water; + // zmemzero(s->window + s->high_water, (unsigned)init); + // s->high_water += init; + // } + // } + // + // Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + // "not enough room for search"); + +} +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ + + +function deflate_stored(s, flush) { + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + var max_block_size = 0xffff; + + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + /* Copy as much as possible from input to output: */ + + + for (;;) { + /* Fill the window as much as possible: */ + if (s.lookahead <= 1) { + //Assert(s->strstart < s->w_size+MAX_DIST(s) || + // s->block_start >= (long)s->w_size, "slide too late"); + // if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || + // s.block_start >= s.w_size)) { + // throw new Error("slide too late"); + // } + fill_window(s); + + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + /* flush the current block */ + + } //Assert(s->block_start >= 0L, "block gone"); + // if (s.block_start < 0) throw new Error("block gone"); + + + s.strstart += s.lookahead; + s.lookahead = 0; + /* Emit a stored block if pending_buf will be full: */ + + var max_start = s.block_start + max_block_size; + + if (s.strstart === 0 || s.strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + /*** FLUSH_BLOCK(s, 0); ***/ + + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + + + if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + } + + s.insert = 0; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + + + return BS_FINISH_DONE; + } + + if (s.strstart > s.block_start) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + + return BS_NEED_MORE; +} +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ + + +function deflate_fast(s, flush) { + var hash_head; + /* head of the hash chain */ + + var bflush; + /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + /* flush the current block */ + } + } + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + + + hash_head = 0 + /*NIL*/ + ; + + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + + + if (hash_head !== 0 + /*NIL*/ + && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + } + + if (s.match_length >= MIN_MATCH) { + // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only + + /*** _tr_tally_dist(s, s.strstart - s.match_start, + s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + s.lookahead -= s.match_length; + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + + if (s.match_length <= s.max_lazy_match + /*max_insert_length*/ + && s.lookahead >= MIN_MATCH) { + s.match_length--; + /* string at strstart already in table */ + + do { + s.strstart++; + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s.match_length !== 0); + + s.strstart++; + } else { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ + + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask; //#if MIN_MATCH != 3 + // Call UPDATE_HASH() MIN_MATCH-3 more times + //#endif + + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s.window[s.strstart])); + + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + } + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + } + + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + + + return BS_FINISH_DONE; + } + + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + + return BS_BLOCK_DONE; +} +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ + + +function deflate_slow(s, flush) { + var hash_head; + /* head of hash chain */ + + var bflush; + /* set if current block must be flushed */ + + var max_insert; + /* Process the input block. */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + /* flush the current block */ + + } + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + + + hash_head = 0 + /*NIL*/ + ; + + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + /* Find the longest match, discarding those <= prev_length. + */ + + + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + + if (hash_head !== 0 + /*NIL*/ + && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD + /*MAX_DIST(s)*/ + ) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + + if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096 + /*TOO_FAR*/ + )) { + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s.match_length = MIN_MATCH - 1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + + + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + //check_match(s, s.strstart-1, s.prev_match, s.prev_length); + + /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, + s.prev_length - MIN_MATCH, bflush);***/ + + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + + do { + if (++s.strstart <= max_insert) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + } while (--s.prev_length !== 0); + + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + } else if (s.match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + if (bflush) { + /*** FLUSH_BLOCK_ONLY(s, 0) ***/ + flush_block_only(s, false); + /***/ + } + + s.strstart++; + s.lookahead--; + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } //Assert (flush != Z_NO_FLUSH, "no flush?"); + + + if (s.match_available) { + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + s.match_available = 0; + } + + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + + + return BS_FINISH_DONE; + } + + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + + return BS_BLOCK_DONE; +} +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ + + +function deflate_rle(s, flush) { + var bflush; + /* set if current block must be flushed */ + + var prev; + /* byte at distance one to match */ + + var scan, strend; + /* scan goes up to strend for length of run */ + + var _win = s.window; + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + /* flush the current block */ + + } + /* See how many times the previous byte repeats */ + + + s.match_length = 0; + + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + + do { + /*jshint noempty:false*/ + } while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend); + + s.match_length = MAX_MATCH - (strend - scan); + + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + + } + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + + + if (s.match_length >= MIN_MATCH) { + //check_match(s, s.strstart, s.strstart - 1, s.match_length); + + /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s->window[s->strstart])); + + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + } + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + } + + s.insert = 0; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + + + return BS_FINISH_DONE; + } + + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + + return BS_BLOCK_DONE; +} +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ + + +function deflate_huff(s, flush) { + var bflush; + /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s.lookahead === 0) { + fill_window(s); + + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + break; + /* flush the current block */ + } + } + /* Output a literal byte */ + + + s.match_length = 0; //Tracevv((stderr,"%c", s->window[s->strstart])); + + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + } + + s.insert = 0; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + + + return BS_FINISH_DONE; + } + + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + } + + return BS_BLOCK_DONE; +} +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ + + +function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; +} + +var configuration_table; +configuration_table = [ +/* good lazy nice chain */ +new Config(0, 0, 0, 0, deflate_stored), +/* 0 store only */ +new Config(4, 4, 8, 4, deflate_fast), +/* 1 max speed, no lazy matches */ +new Config(4, 5, 16, 8, deflate_fast), +/* 2 */ +new Config(4, 6, 32, 32, deflate_fast), +/* 3 */ +new Config(4, 4, 16, 16, deflate_slow), +/* 4 lazy matches */ +new Config(8, 16, 32, 32, deflate_slow), +/* 5 */ +new Config(8, 16, 128, 128, deflate_slow), +/* 6 */ +new Config(8, 32, 128, 256, deflate_slow), +/* 7 */ +new Config(32, 128, 258, 1024, deflate_slow), +/* 8 */ +new Config(32, 258, 258, 4096, deflate_slow) +/* 9 max compression */ +]; +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ + +function lm_init(s) { + s.window_size = 2 * s.w_size; + /*** CLEAR_HASH(s); ***/ + + zero(s.head); // Fill with NIL (= 0); + + /* Set the default configuration parameters: + */ + + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; +} + +function DeflateState() { + this.strm = null; + /* pointer back to this zlib stream */ + + this.status = 0; + /* as the name implies */ + + this.pending_buf = null; + /* output still pending */ + + this.pending_buf_size = 0; + /* size of pending_buf */ + + this.pending_out = 0; + /* next pending byte to output to the stream */ + + this.pending = 0; + /* nb of bytes in the pending buffer */ + + this.wrap = 0; + /* bit 0 true for zlib, bit 1 true for gzip */ + + this.gzhead = null; + /* gzip header information to write */ + + this.gzindex = 0; + /* where in extra, name, or comment */ + + this.method = Z_DEFLATED; + /* can only be DEFLATED */ + + this.last_flush = -1; + /* value of flush param for previous deflate call */ + + this.w_size = 0; + /* LZ77 window size (32K by default) */ + + this.w_bits = 0; + /* log2(w_size) (8..16) */ + + this.w_mask = 0; + /* w_size - 1 */ + + this.window = null; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. + */ + + this.window_size = 0; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + this.prev = null; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + this.head = null; + /* Heads of the hash chains or NIL. */ + + this.ins_h = 0; + /* hash index of string to be inserted */ + + this.hash_size = 0; + /* number of elements in hash table */ + + this.hash_bits = 0; + /* log2(hash_size) */ + + this.hash_mask = 0; + /* hash_size-1 */ + + this.hash_shift = 0; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + this.block_start = 0; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + this.match_length = 0; + /* length of best match */ + + this.prev_match = 0; + /* previous match */ + + this.match_available = 0; + /* set if previous match exists */ + + this.strstart = 0; + /* start of string to insert */ + + this.match_start = 0; + /* start of matching string */ + + this.lookahead = 0; + /* number of valid bytes ahead in window */ + + this.prev_length = 0; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + this.max_chain_length = 0; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + this.max_lazy_match = 0; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ + // That's alias to max_lazy_match, don't use directly + //this.max_insert_length = 0; + + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + this.level = 0; + /* compression level (1..9) */ + + this.strategy = 0; + /* favor or force Huffman coding*/ + + this.good_match = 0; + /* Use a faster search when the previous match is longer than this */ + + this.nice_match = 0; + /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + + /* Didn't use ct_data typedef below to suppress compiler warning */ + // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + // Use flat array of DOUBLE size, with interleaved fata, + // because JS does not support effective + + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + this.l_desc = null; + /* desc. for literal tree */ + + this.d_desc = null; + /* desc. for distance tree */ + + this.bl_desc = null; + /* desc. for bit length tree */ + //ush bl_count[MAX_BITS+1]; + + this.bl_count = new utils.Buf16(MAX_BITS + 1); + /* number of codes at each bit length for an optimal tree */ + //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + + this.heap = new utils.Buf16(2 * L_CODES + 1); + /* heap used to build the Huffman trees */ + + zero(this.heap); + this.heap_len = 0; + /* number of elements in the heap */ + + this.heap_max = 0; + /* element of largest frequency */ + + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; + + zero(this.depth); + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + this.l_buf = 0; + /* buffer index for literals or lengths */ + + this.lit_bufsize = 0; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + this.last_lit = 0; + /* running index in l_buf */ + + this.d_buf = 0; + /* Buffer index for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + this.opt_len = 0; + /* bit length of current block with optimal trees */ + + this.static_len = 0; + /* bit length of current block with static trees */ + + this.matches = 0; + /* number of string matches in current block */ + + this.insert = 0; + /* bytes at end of window left to insert */ + + this.bi_buf = 0; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + + this.bi_valid = 0; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + // Used for window memory init. We safely ignore it for JS. That makes + // sense only for pointers and memory check tools. + //this.high_water = 0; + + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ +} + +function deflateResetKeep(strm) { + var s; + + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + s = strm.state; + s.pending = 0; + s.pending_out = 0; + + if (s.wrap < 0) { + s.wrap = -s.wrap; + /* was made negative by deflate(..., Z_FINISH); */ + } + + s.status = s.wrap ? INIT_STATE : BUSY_STATE; + strm.adler = s.wrap === 2 ? 0 // crc32(0, Z_NULL, 0) + : 1; // adler32(0, Z_NULL, 0) + + s.last_flush = Z_NO_FLUSH; + + trees._tr_init(s); + + return Z_OK; +} + +function deflateReset(strm) { + var ret = deflateResetKeep(strm); + + if (ret === Z_OK) { + lm_init(strm.state); + } + + return ret; +} + +function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + + if (strm.state.wrap !== 2) { + return Z_STREAM_ERROR; + } + + strm.state.gzhead = head; + return Z_OK; +} + +function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { + // === Z_NULL + return Z_STREAM_ERROR; + } + + var wrap = 1; + + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + + if (windowBits < 0) { + /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } else if (windowBits > 15) { + wrap = 2; + /* write gzip wrapper instead */ + + windowBits -= 16; + } + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + + if (windowBits === 8) { + windowBits = 9; + } + /* until 256-byte window bug fixed */ + + + var s = new DeflateState(); + strm.state = s; + s.strm = strm; + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); // Don't need mem init magic for JS. + //s.high_water = 0; /* nothing written to s->window yet */ + + s.lit_bufsize = 1 << memLevel + 6; + /* 16K elements by default */ + + s.pending_buf_size = s.lit_bufsize * 4; //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + //s->pending_buf = (uchf *) overlay; + + s.pending_buf = new utils.Buf8(s.pending_buf_size); // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) + //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + + s.d_buf = 1 * s.lit_bufsize; //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s.l_buf = (1 + 2) * s.lit_bufsize; + s.level = level; + s.strategy = strategy; + s.method = method; + return deflateReset(strm); +} + +function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +} + +function deflate(strm, flush) { + var old_flush, s; + var beg, val; // for gzip header write only + + if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + + s = strm.state; + + if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush !== Z_FINISH) { + return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + + s.strm = strm; + /* just in case */ + + old_flush = s.last_flush; + s.last_flush = flush; + /* Write the header */ + + if (s.status === INIT_STATE) { + if (s.wrap === 2) { + // GZIP header + strm.adler = 0; //crc32(0L, Z_NULL, 0); + + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + + if (!s.gzhead) { + // s->gzhead == Z_NULL + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } else { + put_byte(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16)); + put_byte(s, s.gzhead.time & 0xff); + put_byte(s, s.gzhead.time >> 8 & 0xff); + put_byte(s, s.gzhead.time >> 16 & 0xff); + put_byte(s, s.gzhead.time >> 24 & 0xff); + put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0); + put_byte(s, s.gzhead.os & 0xff); + + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 0xff); + put_byte(s, s.gzhead.extra.length >> 8 & 0xff); + } + + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } else // DEFLATE header + { + var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8; + var level_flags = -1; + + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + + header |= level_flags << 6; + + if (s.strstart !== 0) { + header |= PRESET_DICT; + } + + header += 31 - header % 31; + s.status = BUSY_STATE; + putShortMSB(s, header); + /* Save the adler32 of the preset dictionary: */ + + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + strm.adler = 1; // adler32(0L, Z_NULL, 0); + } + } //#ifdef GZIP + + + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra + /* != Z_NULL*/ + ) { + beg = s.pending; + /* start of bytes to update crc */ + + while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + + flush_pending(strm); + beg = s.pending; + + if (s.pending === s.pending_buf_size) { + break; + } + } + + put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); + s.gzindex++; + } + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } else { + s.status = NAME_STATE; + } + } + + if (s.status === NAME_STATE) { + if (s.gzhead.name + /* != Z_NULL*/ + ) { + beg = s.pending; + /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + + flush_pending(strm); + beg = s.pending; + + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } // JS specific: little magic to add zero terminator to end of string + + + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } else { + s.status = COMMENT_STATE; + } + } + + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment + /* != Z_NULL*/ + ) { + beg = s.pending; + /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + + flush_pending(strm); + beg = s.pending; + + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } // JS specific: little magic to add zero terminator to end of string + + + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + + if (val === 0) { + s.status = HCRC_STATE; + } + } else { + s.status = HCRC_STATE; + } + } + + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 0xff); + put_byte(s, strm.adler >> 8 & 0xff); + strm.adler = 0; //crc32(0L, Z_NULL, 0); + + s.status = BUSY_STATE; + } + } else { + s.status = BUSY_STATE; + } + } //#endif + + /* Flush as much pending output as possible */ + + + if (s.pending !== 0) { + flush_pending(strm); + + if (strm.avail_out === 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s.last_flush = -1; + return Z_OK; + } + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + /* User must not provide more input after the first FINISH: */ + + + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + /* Start a new block or continue the current one. + */ + + + if (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== Z_NO_FLUSH && s.status !== FINISH_STATE) { + var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : s.strategy === Z_RLE ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush); + + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR next call, see above */ + } + + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } else if (flush !== Z_BLOCK) { + /* FULL_FLUSH or SYNC_FLUSH */ + trees._tr_stored_block(s, 0, 0, false); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + + + if (flush === Z_FULL_FLUSH) { + /*** CLEAR_HASH(s); ***/ + + /* forget history */ + zero(s.head); // Fill with NIL (= 0); + + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + + flush_pending(strm); + + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR at next call, see above */ + + return Z_OK; + } + } + } //Assert(strm->avail_out > 0, "bug2"); + //if (strm.avail_out <= 0) { throw new Error("bug2");} + + + if (flush !== Z_FINISH) { + return Z_OK; + } + + if (s.wrap <= 0) { + return Z_STREAM_END; + } + /* Write the trailer */ + + + if (s.wrap === 2) { + put_byte(s, strm.adler & 0xff); + put_byte(s, strm.adler >> 8 & 0xff); + put_byte(s, strm.adler >> 16 & 0xff); + put_byte(s, strm.adler >> 24 & 0xff); + put_byte(s, strm.total_in & 0xff); + put_byte(s, strm.total_in >> 8 & 0xff); + put_byte(s, strm.total_in >> 16 & 0xff); + put_byte(s, strm.total_in >> 24 & 0xff); + } else { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + + if (s.wrap > 0) { + s.wrap = -s.wrap; + } + /* write the trailer only once! */ + + + return s.pending !== 0 ? Z_OK : Z_STREAM_END; +} + +function deflateEnd(strm) { + var status; + + if (!strm + /*== Z_NULL*/ + || !strm.state + /*== Z_NULL*/ + ) { + return Z_STREAM_ERROR; + } + + status = strm.state.status; + + if (status !== INIT_STATE && status !== EXTRA_STATE && status !== NAME_STATE && status !== COMMENT_STATE && status !== HCRC_STATE && status !== BUSY_STATE && status !== FINISH_STATE) { + return err(strm, Z_STREAM_ERROR); + } + + strm.state = null; + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; +} +/* ========================================================================= + * Initializes the compression dictionary from the given byte + * sequence without producing any compressed output. + */ + + +function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + + if (!strm + /*== Z_NULL*/ + || !strm.state + /*== Z_NULL*/ + ) { + return Z_STREAM_ERROR; + } + + s = strm.state; + wrap = s.wrap; + + if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) { + return Z_STREAM_ERROR; + } + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + + + if (wrap === 1) { + /* adler32(strm->adler, dictionary, dictLength); */ + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + + s.wrap = 0; + /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + + if (dictLength >= s.w_size) { + if (wrap === 0) { + /* already empty otherwise */ + + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + /* use the tail */ + // dictionary = dictionary.slice(dictLength - s.w_size); + + + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + /* insert dictionary into window and hash */ + + + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + + do { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + } while (--n); + + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; +} + +exports.deflateInit = deflateInit; +exports.deflateInit2 = deflateInit2; +exports.deflateReset = deflateReset; +exports.deflateResetKeep = deflateResetKeep; +exports.deflateSetHeader = deflateSetHeader; +exports.deflate = deflate; +exports.deflateEnd = deflateEnd; +exports.deflateSetDictionary = deflateSetDictionary; +exports.deflateInfo = 'pako deflate (from Nodeca project)'; +/* Not implemented +exports.deflateBound = deflateBound; +exports.deflateCopy = deflateCopy; +exports.deflateParams = deflateParams; +exports.deflatePending = deflatePending; +exports.deflatePrime = deflatePrime; +exports.deflateTune = deflateTune; +*/ + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/gzheader.js": +/*!************************************************!*\ + !*** ./node_modules/pako/lib/zlib/gzheader.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +function GZheader() { + /* true if compressed data believed to be text */ + this.text = 0; + /* modification time */ + + this.time = 0; + /* extra flags (not used when writing a gzip file) */ + + this.xflags = 0; + /* operating system */ + + this.os = 0; + /* pointer to extra field or Z_NULL if none */ + + this.extra = null; + /* extra field length (valid if extra != Z_NULL) */ + + this.extra_len = 0; // Actually, we don't need it in JS, + // but leave for few code modifications + // + // Setup limits is not necessary because in js we should not preallocate memory + // for inflate use constant limit in 65536 bytes + // + + /* space at extra (only when reading header) */ + // this.extra_max = 0; + + /* pointer to zero-terminated file name or Z_NULL */ + + this.name = ''; + /* space at name (only when reading header) */ + // this.name_max = 0; + + /* pointer to zero-terminated comment or Z_NULL */ + + this.comment = ''; + /* space at comment (only when reading header) */ + // this.comm_max = 0; + + /* true if there was or will be a header crc */ + + this.hcrc = 0; + /* true when done reading gzip header (not used when writing a gzip file) */ + + this.done = false; +} + +module.exports = GZheader; + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/inffast.js": +/*!***********************************************!*\ + !*** ./node_modules/pako/lib/zlib/inffast.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// See state defs from inflate.js + +var BAD = 30; +/* got a data error -- remain here until reset */ + +var TYPE = 12; +/* i: waiting for type bits, including last-flag bit */ + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state.mode === LEN + strm.avail_in >= 6 + strm.avail_out >= 258 + start >= strm.avail_out + state.bits < 8 + + On return, state.mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm.avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm.avail_out >= 258 for each loop to avoid checking for + output space. + */ + +module.exports = function inflate_fast(strm, start) { + var state; + + var _in; + /* local strm.input */ + + + var last; + /* have enough input while in < last */ + + var _out; + /* local strm.output */ + + + var beg; + /* inflate()'s initial strm.output */ + + var end; + /* while out < end, enough space available */ + //#ifdef INFLATE_STRICT + + var dmax; + /* maximum distance from zlib header */ + //#endif + + var wsize; + /* window size or zero if not using window */ + + var whave; + /* valid bytes in the window */ + + var wnext; + /* window write index */ + // Use `s_window` instead `window`, avoid conflict with instrumentation tools + + var s_window; + /* allocated sliding window, if wsize != 0 */ + + var hold; + /* local strm.hold */ + + var bits; + /* local strm.bits */ + + var lcode; + /* local strm.lencode */ + + var dcode; + /* local strm.distcode */ + + var lmask; + /* mask for first level of length codes */ + + var dmask; + /* mask for first level of distance codes */ + + var here; + /* retrieved table entry */ + + var op; + /* code bits, operation, extra bits, or */ + + /* window position, window bytes to copy */ + + var len; + /* match length, unused bytes */ + + var dist; + /* match distance */ + + var from; + /* where to copy match from */ + + var from_source; + var input, output; // JS specific, because we have no pointers + + /* copy state to local variables */ + + state = strm.state; //here = state.here; + + _in = strm.next_in; + input = strm.input; + last = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); //#ifdef INFLATE_STRICT + + dmax = state.dmax; //#endif + + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + top: do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + + here = lcode[hold & lmask]; + + dolen: for (;;) { + // Goto emulation + op = here >>> 24 + /*here.bits*/ + ; + hold >>>= op; + bits -= op; + op = here >>> 16 & 0xff + /*here.op*/ + ; + + if (op === 0) { + /* literal */ + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + output[_out++] = here & 0xffff + /*here.val*/ + ; + } else if (op & 16) { + /* length base */ + len = here & 0xffff + /*here.val*/ + ; + op &= 15; + /* number of extra bits */ + + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + + len += hold & (1 << op) - 1; + hold >>>= op; + bits -= op; + } //Tracevv((stderr, "inflate: length %u\n", len)); + + + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + + here = dcode[hold & dmask]; + + dodist: for (;;) { + // goto emulation + op = here >>> 24 + /*here.bits*/ + ; + hold >>>= op; + bits -= op; + op = here >>> 16 & 0xff + /*here.op*/ + ; + + if (op & 16) { + /* distance base */ + dist = here & 0xffff + /*here.val*/ + ; + op &= 15; + /* number of extra bits */ + + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + + dist += hold & (1 << op) - 1; //#ifdef INFLATE_STRICT + + if (dist > dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } //#endif + + + hold >>>= op; + bits -= op; //Tracevv((stderr, "inflate: distance %u\n", dist)); + + op = _out - beg; + /* max distance in output */ + + if (dist > op) { + /* see if copy from window */ + op = dist - op; + /* distance back in window */ + + if (op > whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } // (!) This block is disabled in zlib defaults, + // don't enable it for binary compatibility + //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + // if (len <= op - whave) { + // do { + // output[_out++] = 0; + // } while (--len); + // continue top; + // } + // len -= op - whave; + // do { + // output[_out++] = 0; + // } while (--op > whave); + // if (op === 0) { + // from = _out - dist; + // do { + // output[_out++] = output[from++]; + // } while (--len); + // continue top; + // } + //#endif + + } + + from = 0; // window index + + from_source = s_window; + + if (wnext === 0) { + /* very common case */ + from += wsize - op; + + if (op < len) { + /* some from window */ + len -= op; + + do { + output[_out++] = s_window[from++]; + } while (--op); + + from = _out - dist; + /* rest from output */ + + from_source = output; + } + } else if (wnext < op) { + /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + + if (op < len) { + /* some from end of window */ + len -= op; + + do { + output[_out++] = s_window[from++]; + } while (--op); + + from = 0; + + if (wnext < len) { + /* some from start of window */ + op = wnext; + len -= op; + + do { + output[_out++] = s_window[from++]; + } while (--op); + + from = _out - dist; + /* rest from output */ + + from_source = output; + } + } + } else { + /* contiguous in window */ + from += wnext - op; + + if (op < len) { + /* some from window */ + len -= op; + + do { + output[_out++] = s_window[from++]; + } while (--op); + + from = _out - dist; + /* rest from output */ + + from_source = output; + } + } + + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + + if (len) { + output[_out++] = from_source[from++]; + + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } else { + from = _out - dist; + /* copy direct from output */ + + do { + /* minimum length is three */ + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + + if (len) { + output[_out++] = output[from++]; + + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } else if ((op & 64) === 0) { + /* 2nd level distance code */ + here = dcode[(here & 0xffff) + ( + /*here.val*/ + hold & (1 << op) - 1)]; + continue dodist; + } else { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } else if ((op & 64) === 0) { + /* 2nd level length code */ + here = lcode[(here & 0xffff) + ( + /*here.val*/ + hold & (1 << op) - 1)]; + continue dolen; + } else if (op & 32) { + /* end-of-block */ + //Tracevv((stderr, "inflate: end of block\n")); + state.mode = TYPE; + break top; + } else { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } while (_in < last && _out < end); + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + + + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + /* update state and return */ + + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last); + strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end); + state.hold = hold; + state.bits = bits; + return; +}; + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/inflate.js": +/*!***********************************************!*\ + !*** ./node_modules/pako/lib/zlib/inflate.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = __webpack_require__(/*! ../utils/common */ "./node_modules/pako/lib/utils/common.js"); + +var adler32 = __webpack_require__(/*! ./adler32 */ "./node_modules/pako/lib/zlib/adler32.js"); + +var crc32 = __webpack_require__(/*! ./crc32 */ "./node_modules/pako/lib/zlib/crc32.js"); + +var inflate_fast = __webpack_require__(/*! ./inffast */ "./node_modules/pako/lib/zlib/inffast.js"); + +var inflate_table = __webpack_require__(/*! ./inftrees */ "./node_modules/pako/lib/zlib/inftrees.js"); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; +/* Public constants ==========================================================*/ + +/* ===========================================================================*/ + +/* Allowed flush values; see deflate() and inflate() below for details */ +//var Z_NO_FLUSH = 0; +//var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +//var Z_FULL_FLUSH = 3; + +var Z_FINISH = 4; +var Z_BLOCK = 5; +var Z_TREES = 6; +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_NEED_DICT = 2; //var Z_ERRNO = -1; + +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; //var Z_VERSION_ERROR = -6; + +/* The deflate compression method */ + +var Z_DEFLATED = 8; +/* STATES ====================================================================*/ + +/* ===========================================================================*/ + +var HEAD = 1; +/* i: waiting for magic header */ + +var FLAGS = 2; +/* i: waiting for method and flags (gzip) */ + +var TIME = 3; +/* i: waiting for modification time (gzip) */ + +var OS = 4; +/* i: waiting for extra flags and operating system (gzip) */ + +var EXLEN = 5; +/* i: waiting for extra length (gzip) */ + +var EXTRA = 6; +/* i: waiting for extra bytes (gzip) */ + +var NAME = 7; +/* i: waiting for end of file name (gzip) */ + +var COMMENT = 8; +/* i: waiting for end of comment (gzip) */ + +var HCRC = 9; +/* i: waiting for header crc (gzip) */ + +var DICTID = 10; +/* i: waiting for dictionary check value */ + +var DICT = 11; +/* waiting for inflateSetDictionary() call */ + +var TYPE = 12; +/* i: waiting for type bits, including last-flag bit */ + +var TYPEDO = 13; +/* i: same, but skip check to exit inflate on new block */ + +var STORED = 14; +/* i: waiting for stored size (length and complement) */ + +var COPY_ = 15; +/* i/o: same as COPY below, but only first time in */ + +var COPY = 16; +/* i/o: waiting for input or output to copy stored block */ + +var TABLE = 17; +/* i: waiting for dynamic block table lengths */ + +var LENLENS = 18; +/* i: waiting for code length code lengths */ + +var CODELENS = 19; +/* i: waiting for length/lit and distance code lengths */ + +var LEN_ = 20; +/* i: same as LEN below, but only first time in */ + +var LEN = 21; +/* i: waiting for length/lit/eob code */ + +var LENEXT = 22; +/* i: waiting for length extra bits */ + +var DIST = 23; +/* i: waiting for distance code */ + +var DISTEXT = 24; +/* i: waiting for distance extra bits */ + +var MATCH = 25; +/* o: waiting for output space to copy string */ + +var LIT = 26; +/* o: waiting for output space to write literal */ + +var CHECK = 27; +/* i: waiting for 32-bit check value */ + +var LENGTH = 28; +/* i: waiting for 32-bit length (gzip) */ + +var DONE = 29; +/* finished check, done -- remain here until reset */ + +var BAD = 30; +/* got a data error -- remain here until reset */ + +var MEM = 31; +/* got an inflate() memory error -- remain here until reset */ + +var SYNC = 32; +/* looking for synchronization bytes to restart inflate() */ + +/* ===========================================================================*/ + +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var MAX_WBITS = 15; +/* 32K LZ77 window */ + +var DEF_WBITS = MAX_WBITS; + +function zswap32(q) { + return (q >>> 24 & 0xff) + (q >>> 8 & 0xff00) + ((q & 0xff00) << 8) + ((q & 0xff) << 24); +} + +function InflateState() { + this.mode = 0; + /* current inflate mode */ + + this.last = false; + /* true if processing last block */ + + this.wrap = 0; + /* bit 0 true for zlib, bit 1 true for gzip */ + + this.havedict = false; + /* true if dictionary provided */ + + this.flags = 0; + /* gzip header method and flags (0 if zlib) */ + + this.dmax = 0; + /* zlib header max distance (INFLATE_STRICT) */ + + this.check = 0; + /* protected copy of check value */ + + this.total = 0; + /* protected copy of output count */ + // TODO: may be {} + + this.head = null; + /* where to save gzip header information */ + + /* sliding window */ + + this.wbits = 0; + /* log base 2 of requested window size */ + + this.wsize = 0; + /* window size or zero if not using window */ + + this.whave = 0; + /* valid bytes in the window */ + + this.wnext = 0; + /* window write index */ + + this.window = null; + /* allocated sliding window, if needed */ + + /* bit accumulator */ + + this.hold = 0; + /* input bit accumulator */ + + this.bits = 0; + /* number of bits in "in" */ + + /* for string and stored block copying */ + + this.length = 0; + /* literal or length of data to copy */ + + this.offset = 0; + /* distance back to copy string from */ + + /* for table and code decoding */ + + this.extra = 0; + /* extra bits needed */ + + /* fixed and dynamic code tables */ + + this.lencode = null; + /* starting table for length/literal codes */ + + this.distcode = null; + /* starting table for distance codes */ + + this.lenbits = 0; + /* index bits for lencode */ + + this.distbits = 0; + /* index bits for distcode */ + + /* dynamic table building */ + + this.ncode = 0; + /* number of code length code lengths */ + + this.nlen = 0; + /* number of length code lengths */ + + this.ndist = 0; + /* number of distance code lengths */ + + this.have = 0; + /* number of code lengths in lens[] */ + + this.next = null; + /* next available space in codes[] */ + + this.lens = new utils.Buf16(320); + /* temporary storage for code lengths */ + + this.work = new utils.Buf16(288); + /* work area for code table building */ + + /* + because we don't have pointers in js, we use lencode and distcode directly + as buffers so we don't need codes + */ + //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ + + this.lendyn = null; + /* dynamic table for length/literal codes (JS specific) */ + + this.distdyn = null; + /* dynamic table for distance codes (JS specific) */ + + this.sane = 0; + /* if false, allow invalid distance too far */ + + this.back = 0; + /* bits back of last unprocessed length/lit */ + + this.was = 0; + /* initial length of match */ +} + +function inflateResetKeep(strm) { + var state; + + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ''; + /*Z_NULL*/ + + if (state.wrap) { + /* to support ill-conceived Java test suite */ + strm.adler = state.wrap & 1; + } + + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null + /*Z_NULL*/ + ; + state.hold = 0; + state.bits = 0; //state.lencode = state.distcode = state.next = state.codes; + + state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); + state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); + state.sane = 1; + state.back = -1; //Tracev((stderr, "inflate: reset\n")); + + return Z_OK; +} + +function inflateReset(strm) { + var state; + + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); +} + +function inflateReset2(strm, windowBits) { + var wrap; + var state; + /* get the state */ + + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + + state = strm.state; + /* extract wrap request from windowBits parameter */ + + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } else { + wrap = (windowBits >> 4) + 1; + + if (windowBits < 48) { + windowBits &= 15; + } + } + /* set number of window bits, free window if different */ + + + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + /* update state and reset the rest of it */ + + + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); +} + +function inflateInit2(strm, windowBits) { + var ret; + var state; + + if (!strm) { + return Z_STREAM_ERROR; + } //strm.msg = Z_NULL; /* in case we return an error */ + + + state = new InflateState(); //if (state === Z_NULL) return Z_MEM_ERROR; + //Tracev((stderr, "inflate: allocated\n")); + + strm.state = state; + state.window = null + /*Z_NULL*/ + ; + ret = inflateReset2(strm, windowBits); + + if (ret !== Z_OK) { + strm.state = null + /*Z_NULL*/ + ; + } + + return ret; +} + +function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); +} +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ + + +var virgin = true; +var lenfix, distfix; // We have no pointers in JS, so keep tables separate + +function fixedtables(state) { + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + var sym; + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + /* literal/length table */ + + sym = 0; + + while (sym < 144) { + state.lens[sym++] = 8; + } + + while (sym < 256) { + state.lens[sym++] = 9; + } + + while (sym < 280) { + state.lens[sym++] = 7; + } + + while (sym < 288) { + state.lens[sym++] = 8; + } + + inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { + bits: 9 + }); + /* distance table */ + + sym = 0; + + while (sym < 32) { + state.lens[sym++] = 5; + } + + inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { + bits: 5 + }); + /* do this just once */ + + virgin = false; + } + + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; +} +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ + + +function updatewindow(strm, src, end, copy) { + var dist; + var state = strm.state; + /* if it hasn't been done already, allocate space for the window */ + + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + state.window = new utils.Buf8(state.wsize); + } + /* copy state->wsize or less output bytes into the circular window */ + + + if (copy >= state.wsize) { + utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); + state.wnext = 0; + state.whave = state.wsize; + } else { + dist = state.wsize - state.wnext; + + if (dist > copy) { + dist = copy; + } //zmemcpy(state->window + state->wnext, end - copy, dist); + + + utils.arraySet(state.window, src, end - copy, dist, state.wnext); + copy -= dist; + + if (copy) { + //zmemcpy(state->window, end - copy, copy); + utils.arraySet(state.window, src, end - copy, copy, 0); + state.wnext = copy; + state.whave = state.wsize; + } else { + state.wnext += dist; + + if (state.wnext === state.wsize) { + state.wnext = 0; + } + + if (state.whave < state.wsize) { + state.whave += dist; + } + } + } + + return 0; +} + +function inflate(strm, flush) { + var state; + var input, output; // input/output buffers + + var next; + /* next input INDEX */ + + var put; + /* next output INDEX */ + + var have, left; + /* available input and output */ + + var hold; + /* bit buffer */ + + var bits; + /* bits in bit buffer */ + + var _in, _out; + /* save starting available input and output */ + + + var copy; + /* number of stored or match bytes to copy */ + + var from; + /* where to copy match bytes from */ + + var from_source; + var here = 0; + /* current decoding table entry */ + + var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) + //var last; /* parent table entry */ + + var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) + + var len; + /* length to copy for repeats, bits to drop */ + + var ret; + /* return code */ + + var hbuf = new utils.Buf8(4); + /* buffer for gzip header crc calculation */ + + var opts; + var n; // temporary var for NEED_BITS + + var order = + /* permutation of code lengths */ + [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + + if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) { + return Z_STREAM_ERROR; + } + + state = strm.state; + + if (state.mode === TYPE) { + state.mode = TYPEDO; + } + /* skip check */ + //--- LOAD() --- + + + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; //--- + + _in = have; + _out = left; + ret = Z_OK; + + inf_leave: // goto emulation + for (;;) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } //=== NEEDBITS(16); + + + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + if (state.wrap & 2 && hold === 0x8b1f) { + /* gzip header */ + state.check = 0 + /*crc32(0L, Z_NULL, 0)*/ + ; //=== CRC2(state.check, hold); + + hbuf[0] = hold & 0xff; + hbuf[1] = hold >>> 8 & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); //===// + //=== INITBITS(); + + hold = 0; + bits = 0; //===// + + state.mode = FLAGS; + break; + } + + state.flags = 0; + /* expect zlib header */ + + if (state.head) { + state.head.done = false; + } + + if (!(state.wrap & 1) || + /* check if zlib header allowed */ + (((hold & 0xff) << + /*BITS(8)*/ + 8) + (hold >> 8)) % 31) { + strm.msg = 'incorrect header check'; + state.mode = BAD; + break; + } + + if ((hold & 0x0f) !== + /*BITS(4)*/ + Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } //--- DROPBITS(4) ---// + + + hold >>>= 4; + bits -= 4; //---// + + len = (hold & 0x0f) + + /*BITS(4)*/ + 8; + + if (state.wbits === 0) { + state.wbits = len; + } else if (len > state.wbits) { + strm.msg = 'invalid window size'; + state.mode = BAD; + break; + } + + state.dmax = 1 << len; //Tracev((stderr, "inflate: zlib header ok\n")); + + strm.adler = state.check = 1 + /*adler32(0L, Z_NULL, 0)*/ + ; + state.mode = hold & 0x200 ? DICTID : TYPE; //=== INITBITS(); + + hold = 0; + bits = 0; //===// + + break; + + case FLAGS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + state.flags = hold; + + if ((state.flags & 0xff) !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + + if (state.flags & 0xe000) { + strm.msg = 'unknown header flags set'; + state.mode = BAD; + break; + } + + if (state.head) { + state.head.text = hold >> 8 & 1; + } + + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = hold >>> 8 & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); //===// + } //=== INITBITS(); + + + hold = 0; + bits = 0; //===// + + state.mode = TIME; + + /* falls through */ + + case TIME: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + if (state.head) { + state.head.time = hold; + } + + if (state.flags & 0x0200) { + //=== CRC4(state.check, hold) + hbuf[0] = hold & 0xff; + hbuf[1] = hold >>> 8 & 0xff; + hbuf[2] = hold >>> 16 & 0xff; + hbuf[3] = hold >>> 24 & 0xff; + state.check = crc32(state.check, hbuf, 4, 0); //=== + } //=== INITBITS(); + + + hold = 0; + bits = 0; //===// + + state.mode = OS; + + /* falls through */ + + case OS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + if (state.head) { + state.head.xflags = hold & 0xff; + state.head.os = hold >> 8; + } + + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = hold >>> 8 & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); //===// + } //=== INITBITS(); + + + hold = 0; + bits = 0; //===// + + state.mode = EXLEN; + + /* falls through */ + + case EXLEN: + if (state.flags & 0x0400) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + state.length = hold; + + if (state.head) { + state.head.extra_len = hold; + } + + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = hold >>> 8 & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); //===// + } //=== INITBITS(); + + + hold = 0; + bits = 0; //===// + } else if (state.head) { + state.head.extra = null + /*Z_NULL*/ + ; + } + + state.mode = EXTRA; + + /* falls through */ + + case EXTRA: + if (state.flags & 0x0400) { + copy = state.length; + + if (copy > have) { + copy = have; + } + + if (copy) { + if (state.head) { + len = state.head.extra_len - state.length; + + if (!state.head.extra) { + // Use untyped array for more convenient processing later + state.head.extra = new Array(state.head.extra_len); + } + + utils.arraySet(state.head.extra, input, next, // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len); //zmemcpy(state.head.extra + len, next, + // len + copy > state.head.extra_max ? + // state.head.extra_max - len : copy); + } + + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + + have -= copy; + next += copy; + state.length -= copy; + } + + if (state.length) { + break inf_leave; + } + } + + state.length = 0; + state.mode = NAME; + + /* falls through */ + + case NAME: + if (state.flags & 0x0800) { + if (have === 0) { + break inf_leave; + } + + copy = 0; + + do { + // TODO: 2 or 1 bytes? + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + + if (state.head && len && state.length < 65536 + /*state.head.name_max*/ + ) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy < have); + + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + + have -= copy; + next += copy; + + if (len) { + break inf_leave; + } + } else if (state.head) { + state.head.name = null; + } + + state.length = 0; + state.mode = COMMENT; + + /* falls through */ + + case COMMENT: + if (state.flags & 0x1000) { + if (have === 0) { + break inf_leave; + } + + copy = 0; + + do { + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + + if (state.head && len && state.length < 65536 + /*state.head.comm_max*/ + ) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy < have); + + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + + have -= copy; + next += copy; + + if (len) { + break inf_leave; + } + } else if (state.head) { + state.head.comment = null; + } + + state.mode = HCRC; + + /* falls through */ + + case HCRC: + if (state.flags & 0x0200) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + if (hold !== (state.check & 0xffff)) { + strm.msg = 'header crc mismatch'; + state.mode = BAD; + break; + } //=== INITBITS(); + + + hold = 0; + bits = 0; //===// + } + + if (state.head) { + state.head.hcrc = state.flags >> 9 & 1; + state.head.done = true; + } + + strm.adler = state.check = 0; + state.mode = TYPE; + break; + + case DICTID: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + strm.adler = state.check = zswap32(hold); //=== INITBITS(); + + hold = 0; + bits = 0; //===// + + state.mode = DICT; + + /* falls through */ + + case DICT: + if (state.havedict === 0) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; //--- + + return Z_NEED_DICT; + } + + strm.adler = state.check = 1 + /*adler32(0L, Z_NULL, 0)*/ + ; + state.mode = TYPE; + + /* falls through */ + + case TYPE: + if (flush === Z_BLOCK || flush === Z_TREES) { + break inf_leave; + } + + /* falls through */ + + case TYPEDO: + if (state.last) { + //--- BYTEBITS() ---// + hold >>>= bits & 7; + bits -= bits & 7; //---// + + state.mode = CHECK; + break; + } //=== NEEDBITS(3); */ + + + while (bits < 3) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + state.last = hold & 0x01 + /*BITS(1)*/ + ; //--- DROPBITS(1) ---// + + hold >>>= 1; + bits -= 1; //---// + + switch (hold & 0x03) { + /*BITS(2)*/ + case 0: + /* stored block */ + //Tracev((stderr, "inflate: stored block%s\n", + // state.last ? " (last)" : "")); + state.mode = STORED; + break; + + case 1: + /* fixed block */ + fixedtables(state); //Tracev((stderr, "inflate: fixed codes block%s\n", + // state.last ? " (last)" : "")); + + state.mode = LEN_; + /* decode codes */ + + if (flush === Z_TREES) { + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; //---// + + break inf_leave; + } + + break; + + case 2: + /* dynamic block */ + //Tracev((stderr, "inflate: dynamic codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = TABLE; + break; + + case 3: + strm.msg = 'invalid block type'; + state.mode = BAD; + } //--- DROPBITS(2) ---// + + + hold >>>= 2; + bits -= 2; //---// + + break; + + case STORED: + //--- BYTEBITS() ---// /* go to byte boundary */ + hold >>>= bits & 7; + bits -= bits & 7; //---// + //=== NEEDBITS(32); */ + + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + if ((hold & 0xffff) !== (hold >>> 16 ^ 0xffff)) { + strm.msg = 'invalid stored block lengths'; + state.mode = BAD; + break; + } + + state.length = hold & 0xffff; //Tracev((stderr, "inflate: stored length %u\n", + // state.length)); + //=== INITBITS(); + + hold = 0; + bits = 0; //===// + + state.mode = COPY_; + + if (flush === Z_TREES) { + break inf_leave; + } + + /* falls through */ + + case COPY_: + state.mode = COPY; + + /* falls through */ + + case COPY: + copy = state.length; + + if (copy) { + if (copy > have) { + copy = have; + } + + if (copy > left) { + copy = left; + } + + if (copy === 0) { + break inf_leave; + } //--- zmemcpy(put, next, copy); --- + + + utils.arraySet(output, input, next, copy, put); //---// + + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } //Tracev((stderr, "inflate: stored end\n")); + + + state.mode = TYPE; + break; + + case TABLE: + //=== NEEDBITS(14); */ + while (bits < 14) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + state.nlen = (hold & 0x1f) + + /*BITS(5)*/ + 257; //--- DROPBITS(5) ---// + + hold >>>= 5; + bits -= 5; //---// + + state.ndist = (hold & 0x1f) + + /*BITS(5)*/ + 1; //--- DROPBITS(5) ---// + + hold >>>= 5; + bits -= 5; //---// + + state.ncode = (hold & 0x0f) + + /*BITS(4)*/ + 4; //--- DROPBITS(4) ---// + + hold >>>= 4; + bits -= 4; //---// + //#ifndef PKZIP_BUG_WORKAROUND + + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = 'too many length or distance symbols'; + state.mode = BAD; + break; + } //#endif + //Tracev((stderr, "inflate: table sizes ok\n")); + + + state.have = 0; + state.mode = LENLENS; + + /* falls through */ + + case LENLENS: + while (state.have < state.ncode) { + //=== NEEDBITS(3); + while (bits < 3) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + state.lens[order[state.have++]] = hold & 0x07; //BITS(3); + //--- DROPBITS(3) ---// + + hold >>>= 3; + bits -= 3; //---// + } + + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } // We have separate tables & no pointers. 2 commented lines below not needed. + //state.next = state.codes; + //state.lencode = state.next; + // Switch to use dynamic table + + + state.lencode = state.lendyn; + state.lenbits = 7; + opts = { + bits: state.lenbits + }; + ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + + if (ret) { + strm.msg = 'invalid code lengths set'; + state.mode = BAD; + break; + } //Tracev((stderr, "inflate: code lengths ok\n")); + + + state.have = 0; + state.mode = CODELENS; + + /* falls through */ + + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (;;) { + here = state.lencode[hold & (1 << state.lenbits) - 1]; + /*BITS(state.lenbits)*/ + + here_bits = here >>> 24; + here_op = here >>> 16 & 0xff; + here_val = here & 0xffff; + + if (here_bits <= bits) { + break; + } //--- PULLBYTE() ---// + + + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; //---// + } + + if (here_val < 16) { + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; //---// + + state.lens[state.have++] = here_val; + } else { + if (here_val === 16) { + //=== NEEDBITS(here.bits + 2); + n = here_bits + 2; + + while (bits < n) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + //--- DROPBITS(here.bits) ---// + + + hold >>>= here_bits; + bits -= here_bits; //---// + + if (state.have === 0) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + + len = state.lens[state.have - 1]; + copy = 3 + (hold & 0x03); //BITS(2); + //--- DROPBITS(2) ---// + + hold >>>= 2; + bits -= 2; //---// + } else if (here_val === 17) { + //=== NEEDBITS(here.bits + 3); + n = here_bits + 3; + + while (bits < n) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + //--- DROPBITS(here.bits) ---// + + + hold >>>= here_bits; + bits -= here_bits; //---// + + len = 0; + copy = 3 + (hold & 0x07); //BITS(3); + //--- DROPBITS(3) ---// + + hold >>>= 3; + bits -= 3; //---// + } else { + //=== NEEDBITS(here.bits + 7); + n = here_bits + 7; + + while (bits < n) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + //--- DROPBITS(here.bits) ---// + + + hold >>>= here_bits; + bits -= here_bits; //---// + + len = 0; + copy = 11 + (hold & 0x7f); //BITS(7); + //--- DROPBITS(7) ---// + + hold >>>= 7; + bits -= 7; //---// + } + + if (state.have + copy > state.nlen + state.ndist) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + + while (copy--) { + state.lens[state.have++] = len; + } + } + } + /* handle error breaks in while */ + + + if (state.mode === BAD) { + break; + } + /* check for end-of-block code (better have one) */ + + + if (state.lens[256] === 0) { + strm.msg = 'invalid code -- missing end-of-block'; + state.mode = BAD; + break; + } + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + + + state.lenbits = 9; + opts = { + bits: state.lenbits + }; + ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + + state.lenbits = opts.bits; // state.lencode = state.next; + + if (ret) { + strm.msg = 'invalid literal/lengths set'; + state.mode = BAD; + break; + } + + state.distbits = 6; //state.distcode.copy(state.codes); + // Switch to use dynamic table + + state.distcode = state.distdyn; + opts = { + bits: state.distbits + }; + ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + + state.distbits = opts.bits; // state.distcode = state.next; + + if (ret) { + strm.msg = 'invalid distances set'; + state.mode = BAD; + break; + } //Tracev((stderr, 'inflate: codes ok\n')); + + + state.mode = LEN_; + + if (flush === Z_TREES) { + break inf_leave; + } + + /* falls through */ + + case LEN_: + state.mode = LEN; + + /* falls through */ + + case LEN: + if (have >= 6 && left >= 258) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; //--- + + inflate_fast(strm, _out); //--- LOAD() --- + + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; //--- + + if (state.mode === TYPE) { + state.back = -1; + } + + break; + } + + state.back = 0; + + for (;;) { + here = state.lencode[hold & (1 << state.lenbits) - 1]; + /*BITS(state.lenbits)*/ + + here_bits = here >>> 24; + here_op = here >>> 16 & 0xff; + here_val = here & 0xffff; + + if (here_bits <= bits) { + break; + } //--- PULLBYTE() ---// + + + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; //---// + } + + if (here_op && (here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + + for (;;) { + here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> + /*BITS(last.bits + last.op)*/ + last_bits)]; + here_bits = here >>> 24; + here_op = here >>> 16 & 0xff; + here_val = here & 0xffff; + + if (last_bits + here_bits <= bits) { + break; + } //--- PULLBYTE() ---// + + + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; //---// + } //--- DROPBITS(last.bits) ---// + + + hold >>>= last_bits; + bits -= last_bits; //---// + + state.back += last_bits; + } //--- DROPBITS(here.bits) ---// + + + hold >>>= here_bits; + bits -= here_bits; //---// + + state.back += here_bits; + state.length = here_val; + + if (here_op === 0) { + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + state.mode = LIT; + break; + } + + if (here_op & 32) { + //Tracevv((stderr, "inflate: end of block\n")); + state.back = -1; + state.mode = TYPE; + break; + } + + if (here_op & 64) { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break; + } + + state.extra = here_op & 15; + state.mode = LENEXT; + + /* falls through */ + + case LENEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + + while (bits < n) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + state.length += hold & (1 << state.extra) - 1 + /*BITS(state.extra)*/ + ; //--- DROPBITS(state.extra) ---// + + hold >>>= state.extra; + bits -= state.extra; //---// + + state.back += state.extra; + } //Tracevv((stderr, "inflate: length %u\n", state.length)); + + + state.was = state.length; + state.mode = DIST; + + /* falls through */ + + case DIST: + for (;;) { + here = state.distcode[hold & (1 << state.distbits) - 1]; + /*BITS(state.distbits)*/ + + here_bits = here >>> 24; + here_op = here >>> 16 & 0xff; + here_val = here & 0xffff; + + if (here_bits <= bits) { + break; + } //--- PULLBYTE() ---// + + + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; //---// + } + + if ((here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + + for (;;) { + here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> + /*BITS(last.bits + last.op)*/ + last_bits)]; + here_bits = here >>> 24; + here_op = here >>> 16 & 0xff; + here_val = here & 0xffff; + + if (last_bits + here_bits <= bits) { + break; + } //--- PULLBYTE() ---// + + + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; //---// + } //--- DROPBITS(last.bits) ---// + + + hold >>>= last_bits; + bits -= last_bits; //---// + + state.back += last_bits; + } //--- DROPBITS(here.bits) ---// + + + hold >>>= here_bits; + bits -= here_bits; //---// + + state.back += here_bits; + + if (here_op & 64) { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break; + } + + state.offset = here_val; + state.extra = here_op & 15; + state.mode = DISTEXT; + + /* falls through */ + + case DISTEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + + while (bits < n) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + state.offset += hold & (1 << state.extra) - 1 + /*BITS(state.extra)*/ + ; //--- DROPBITS(state.extra) ---// + + hold >>>= state.extra; + bits -= state.extra; //---// + + state.back += state.extra; + } //#ifdef INFLATE_STRICT + + + if (state.offset > state.dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } //#endif + //Tracevv((stderr, "inflate: distance %u\n", state.offset)); + + + state.mode = MATCH; + + /* falls through */ + + case MATCH: + if (left === 0) { + break inf_leave; + } + + copy = _out - left; + + if (state.offset > copy) { + /* copy from window */ + copy = state.offset - copy; + + if (copy > state.whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } // (!) This block is disabled in zlib defaults, + // don't enable it for binary compatibility + //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + // Trace((stderr, "inflate.c too far\n")); + // copy -= state.whave; + // if (copy > state.length) { copy = state.length; } + // if (copy > left) { copy = left; } + // left -= copy; + // state.length -= copy; + // do { + // output[put++] = 0; + // } while (--copy); + // if (state.length === 0) { state.mode = LEN; } + // break; + //#endif + + } + + if (copy > state.wnext) { + copy -= state.wnext; + from = state.wsize - copy; + } else { + from = state.wnext - copy; + } + + if (copy > state.length) { + copy = state.length; + } + + from_source = state.window; + } else { + /* copy from output */ + from_source = output; + from = put - state.offset; + copy = state.length; + } + + if (copy > left) { + copy = left; + } + + left -= copy; + state.length -= copy; + + do { + output[put++] = from_source[from++]; + } while (--copy); + + if (state.length === 0) { + state.mode = LEN; + } + + break; + + case LIT: + if (left === 0) { + break inf_leave; + } + + output[put++] = state.length; + left--; + state.mode = LEN; + break; + + case CHECK: + if (state.wrap) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + + have--; // Use '|' instead of '+' to make sure that result is signed + + hold |= input[next++] << bits; + bits += 8; + } //===// + + + _out -= left; + strm.total_out += _out; + state.total += _out; + + if (_out) { + strm.adler = state.check = + /*UPDATE(state.check, put - _out, _out);*/ + state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out); + } + + _out = left; // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too + + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = 'incorrect data check'; + state.mode = BAD; + break; + } //=== INITBITS(); + + + hold = 0; + bits = 0; //===// + //Tracev((stderr, "inflate: check matches trailer\n")); + } + + state.mode = LENGTH; + + /* falls through */ + + case LENGTH: + if (state.wrap && state.flags) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { + break inf_leave; + } + + have--; + hold += input[next++] << bits; + bits += 8; + } //===// + + + if (hold !== (state.total & 0xffffffff)) { + strm.msg = 'incorrect length check'; + state.mode = BAD; + break; + } //=== INITBITS(); + + + hold = 0; + bits = 0; //===// + //Tracev((stderr, "inflate: length matches trailer\n")); + } + + state.mode = DONE; + + /* falls through */ + + case DONE: + ret = Z_STREAM_END; + break inf_leave; + + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + + case MEM: + return Z_MEM_ERROR; + + case SYNC: + /* falls through */ + + default: + return Z_STREAM_ERROR; + } + } // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + //--- RESTORE() --- + + + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; //--- + + if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) { + if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + + if (state.wrap && _out) { + strm.adler = state.check = + /*UPDATE(state.check, strm.next_out - _out, _out);*/ + state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out); + } + + strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + + if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + + return ret; +} + +function inflateEnd(strm) { + if (!strm || !strm.state + /*|| strm->zfree == (free_func)0*/ + ) { + return Z_STREAM_ERROR; + } + + var state = strm.state; + + if (state.window) { + state.window = null; + } + + strm.state = null; + return Z_OK; +} + +function inflateGetHeader(strm, head) { + var state; + /* check state */ + + if (!strm || !strm.state) { + return Z_STREAM_ERROR; + } + + state = strm.state; + + if ((state.wrap & 2) === 0) { + return Z_STREAM_ERROR; + } + /* save header structure */ + + + state.head = head; + head.done = false; + return Z_OK; +} + +function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + var state; + var dictid; + var ret; + /* check state */ + + if (!strm + /* == Z_NULL */ + || !strm.state + /* == Z_NULL */ + ) { + return Z_STREAM_ERROR; + } + + state = strm.state; + + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + /* check for correct dictionary identifier */ + + + if (state.mode === DICT) { + dictid = 1; + /* adler32(0, null, 0)*/ + + /* dictid = adler32(dictid, dictionary, dictLength); */ + + dictid = adler32(dictid, dictionary, dictLength, 0); + + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + + + ret = updatewindow(strm, dictionary, dictLength, dictLength); + + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + + state.havedict = 1; // Tracev((stderr, "inflate: dictionary set\n")); + + return Z_OK; +} + +exports.inflateReset = inflateReset; +exports.inflateReset2 = inflateReset2; +exports.inflateResetKeep = inflateResetKeep; +exports.inflateInit = inflateInit; +exports.inflateInit2 = inflateInit2; +exports.inflate = inflate; +exports.inflateEnd = inflateEnd; +exports.inflateGetHeader = inflateGetHeader; +exports.inflateSetDictionary = inflateSetDictionary; +exports.inflateInfo = 'pako inflate (from Nodeca project)'; +/* Not implemented +exports.inflateCopy = inflateCopy; +exports.inflateGetDictionary = inflateGetDictionary; +exports.inflateMark = inflateMark; +exports.inflatePrime = inflatePrime; +exports.inflateSync = inflateSync; +exports.inflateSyncPoint = inflateSyncPoint; +exports.inflateUndermine = inflateUndermine; +*/ + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/inftrees.js": +/*!************************************************!*\ + !*** ./node_modules/pako/lib/zlib/inftrees.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = __webpack_require__(/*! ../utils/common */ "./node_modules/pako/lib/utils/common.js"); + +var MAXBITS = 15; +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; +var lbase = [ +/* Length codes 257..285 base */ +3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0]; +var lext = [ +/* Length codes 257..285 extra */ +16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78]; +var dbase = [ +/* Distance codes 0..29 base */ +1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0]; +var dext = [ +/* Distance codes 0..29 extra */ +16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64]; + +module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) { + var bits = opts.bits; //here = opts.here; /* table entry for duplication */ + + var len = 0; + /* a code's length in bits */ + + var sym = 0; + /* index of code symbols */ + + var min = 0, + max = 0; + /* minimum and maximum code lengths */ + + var root = 0; + /* number of index bits for root table */ + + var curr = 0; + /* number of index bits for current table */ + + var drop = 0; + /* code bits to drop for sub-table */ + + var left = 0; + /* number of prefix codes available */ + + var used = 0; + /* code entries in table used */ + + var huff = 0; + /* Huffman code */ + + var incr; + /* for incrementing code, index */ + + var fill; + /* index for replicating entries */ + + var low; + /* low bits for current root entry */ + + var mask; + /* mask for low root bits */ + + var next; + /* next available space in table */ + + var base = null; + /* base value table to use */ + + var base_index = 0; // var shoextra; /* extra bits table to use */ + + var end; + /* use base and extra for symbol > end */ + + var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ + + var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ + + var extra = null; + var extra_index = 0; + var here_bits, here_op, here_val; + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + /* bound code lengths, force root to be within code lengths */ + + + root = bits; + + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { + break; + } + } + + if (root > max) { + root = max; + } + + if (max === 0) { + /* no symbols to code at all */ + //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ + //table.bits[opts.table_index] = 1; //here.bits = (var char)1; + //table.val[opts.table_index++] = 0; //here.val = (var short)0; + table[table_index++] = 1 << 24 | 64 << 16 | 0; //table.op[opts.table_index] = 64; + //table.bits[opts.table_index] = 1; + //table.val[opts.table_index++] = 0; + + table[table_index++] = 1 << 24 | 64 << 16 | 0; + opts.bits = 1; + return 0; + /* no symbols, but wait for decoding to report error */ + } + + for (min = 1; min < max; min++) { + if (count[min] !== 0) { + break; + } + } + + if (root < min) { + root = min; + } + /* check for an over-subscribed or incomplete set of lengths */ + + + left = 1; + + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + + if (left < 0) { + return -1; + } + /* over-subscribed */ + + } + + if (left > 0 && (type === CODES || max !== 1)) { + return -1; + /* incomplete set */ + } + /* generate offsets into symbol table for each length for sorting */ + + + offs[1] = 0; + + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + /* sort symbols by length, by symbol order within each length */ + + + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + // poor man optimization - use if-else instead of switch, + // to avoid deopts in old v8 + + + if (type === CODES) { + base = extra = work; + /* dummy value--not used */ + + end = 19; + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + } else { + /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + /* initialize opts for loop */ + + + huff = 0; + /* starting code */ + + sym = 0; + /* starting code symbol */ + + len = min; + /* starting code length */ + + next = table_index; + /* current table to fill in */ + + curr = root; + /* current table index bits */ + + drop = 0; + /* current bits to drop from code for index */ + + low = -1; + /* trigger new sub-table when len > root */ + + used = 1 << root; + /* use root table entries */ + + mask = used - 1; + /* mask for comparing low */ + + /* check available table space */ + + if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { + return 1; + } + /* process all codes and make table entries */ + + + for (;;) { + /* create table entry */ + here_bits = len - drop; + + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } else { + here_op = 32 + 64; + /* end of block */ + + here_val = 0; + } + /* replicate for those indices with low len bits equal to huff */ + + + incr = 1 << len - drop; + fill = 1 << curr; + min = fill; + /* save offset to next table */ + + do { + fill -= incr; + table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0; + } while (fill !== 0); + /* backwards increment the len-bit code huff */ + + + incr = 1 << len - 1; + + while (huff & incr) { + incr >>= 1; + } + + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + /* go to next symbol, update count, len */ + + + sym++; + + if (--count[len] === 0) { + if (len === max) { + break; + } + + len = lens[lens_index + work[sym]]; + } + /* create new sub-table if needed */ + + + if (len > root && (huff & mask) !== low) { + /* if first time, transition to sub-tables */ + if (drop === 0) { + drop = root; + } + /* increment past last table */ + + + next += min; + /* here min is 1 << curr */ + + /* determine length of next table */ + + curr = len - drop; + left = 1 << curr; + + while (curr + drop < max) { + left -= count[curr + drop]; + + if (left <= 0) { + break; + } + + curr++; + left <<= 1; + } + /* check for enough space */ + + + used += 1 << curr; + + if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) { + return 1; + } + /* point entry in root table to sub-table */ + + + low = huff & mask; + /*table.op[low] = curr; + table.bits[low] = root; + table.val[low] = next - opts.table_index;*/ + + table[low] = root << 24 | curr << 16 | next - table_index | 0; + } + } + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + + + if (huff !== 0) { + //table.op[next + huff] = 64; /* invalid code marker */ + //table.bits[next + huff] = len - drop; + //table.val[next + huff] = 0; + table[next + huff] = len - drop << 24 | 64 << 16 | 0; + } + /* set return parameters */ + //opts.table_index += used; + + + opts.bits = root; + return 0; +}; + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/messages.js": +/*!************************************************!*\ + !*** ./node_modules/pako/lib/zlib/messages.js ***! + \************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +module.exports = { + 2: 'need dictionary', + + /* Z_NEED_DICT 2 */ + 1: 'stream end', + + /* Z_STREAM_END 1 */ + 0: '', + + /* Z_OK 0 */ + '-1': 'file error', + + /* Z_ERRNO (-1) */ + '-2': 'stream error', + + /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', + + /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', + + /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', + + /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' + /* Z_VERSION_ERROR (-6) */ + +}; + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/trees.js": +/*!*********************************************!*\ + !*** ./node_modules/pako/lib/zlib/trees.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +/* eslint-disable space-unary-ops */ + +var utils = __webpack_require__(/*! ../utils/common */ "./node_modules/pako/lib/utils/common.js"); +/* Public constants ==========================================================*/ + +/* ===========================================================================*/ +//var Z_FILTERED = 1; +//var Z_HUFFMAN_ONLY = 2; +//var Z_RLE = 3; + + +var Z_FIXED = 4; //var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ + +var Z_BINARY = 0; +var Z_TEXT = 1; //var Z_ASCII = 1; // = Z_TEXT + +var Z_UNKNOWN = 2; +/*============================================================================*/ + +function zero(buf) { + var len = buf.length; + + while (--len >= 0) { + buf[len] = 0; + } +} // From zutil.h + + +var STORED_BLOCK = 0; +var STATIC_TREES = 1; +var DYN_TREES = 2; +/* The three kinds of block type */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +/* The minimum and maximum match lengths */ +// From deflate.h + +/* =========================================================================== + * Internal compression state. + */ + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var Buf_size = 16; +/* size of bit buffer in bi_buf */ + +/* =========================================================================== + * Constants + */ + +var MAX_BL_BITS = 7; +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +var END_BLOCK = 256; +/* end of block literal code */ + +var REP_3_6 = 16; +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +var REPZ_3_10 = 17; +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +var REPZ_11_138 = 18; +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* eslint-disable comma-spacing,array-bracket-spacing */ + +var extra_lbits = +/* extra bits for each length code */ +[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0]; +var extra_dbits = +/* extra bits for each distance code */ +[0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13]; +var extra_blbits = +/* extra bits for each bit length code */ +[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7]; +var bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; +/* eslint-enable comma-spacing,array-bracket-spacing */ + +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ +// We pre-fill arrays with 0 to avoid uninitialized gaps + +var DIST_CODE_LEN = 512; +/* see definition of array dist_code below */ +// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 + +var static_ltree = new Array((L_CODES + 2) * 2); +zero(static_ltree); +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +var static_dtree = new Array(D_CODES * 2); +zero(static_dtree); +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +var _dist_code = new Array(DIST_CODE_LEN); + +zero(_dist_code); +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); + +zero(_length_code); +/* length code for each normalized match length (0 == MIN_MATCH) */ + +var base_length = new Array(LENGTH_CODES); +zero(base_length); +/* First normalized length for each code (0 = MIN_MATCH) */ + +var base_dist = new Array(D_CODES); +zero(base_dist); +/* First normalized distance for each code (0 = distance of 1) */ + +function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + this.static_tree = static_tree; + /* static tree or NULL */ + + this.extra_bits = extra_bits; + /* extra bits for each code or NULL */ + + this.extra_base = extra_base; + /* base index for extra_bits */ + + this.elems = elems; + /* max number of elements in the tree */ + + this.max_length = max_length; + /* max bit length for the codes */ + // show if `static_tree` has data or dummy - needed for monomorphic objects + + this.has_stree = static_tree && static_tree.length; +} + +var static_l_desc; +var static_d_desc; +var static_bl_desc; + +function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; + /* the dynamic tree */ + + this.max_code = 0; + /* largest code with non zero frequency */ + + this.stat_desc = stat_desc; + /* the corresponding static tree */ +} + +function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; +} +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ + + +function put_short(s, w) { + // put_byte(s, (uch)((w) & 0xff)); + // put_byte(s, (uch)((ush)(w) >> 8)); + s.pending_buf[s.pending++] = w & 0xff; + s.pending_buf[s.pending++] = w >>> 8 & 0xff; +} +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ + + +function send_bits(s, value, length) { + if (s.bi_valid > Buf_size - length) { + s.bi_buf |= value << s.bi_valid & 0xffff; + put_short(s, s.bi_buf); + s.bi_buf = value >> Buf_size - s.bi_valid; + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= value << s.bi_valid & 0xffff; + s.bi_valid += length; + } +} + +function send_code(s, c, tree) { + send_bits(s, tree[c * 2] + /*.Code*/ + , tree[c * 2 + 1] + /*.Len*/ + ); +} +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ + + +function bi_reverse(code, len) { + var res = 0; + + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + + return res >>> 1; +} +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ + + +function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 0xff; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } +} +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ + + +function gen_bitlen(s, desc) // deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; + /* heap index */ + + var n, m; + /* iterate over the tree elements */ + + var bits; + /* bit length */ + + var xbits; + /* extra bits */ + + var f; + /* frequency */ + + var overflow = 0; + /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + + + tree[s.heap[s.heap_max] * 2 + 1] + /*.Len*/ + = 0; + /* root of the heap */ + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1] + /*.Dad*/ + * 2 + 1] + /*.Len*/ + + 1; + + if (bits > max_length) { + bits = max_length; + overflow++; + } + + tree[n * 2 + 1] + /*.Len*/ + = bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) { + continue; + } + /* not a leaf node */ + + + s.bl_count[bits]++; + xbits = 0; + + if (n >= base) { + xbits = extra[n - base]; + } + + f = tree[n * 2] + /*.Freq*/ + ; + s.opt_len += f * (bits + xbits); + + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1] + /*.Len*/ + + xbits); + } + } + + if (overflow === 0) { + return; + } // Trace((stderr,"\nbit length overflow\n")); + + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + + + do { + bits = max_length - 1; + + while (s.bl_count[bits] === 0) { + bits--; + } + + s.bl_count[bits]--; + /* move one leaf down the tree */ + + s.bl_count[bits + 1] += 2; + /* move one overflow item as its brother */ + + s.bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + + overflow -= 2; + } while (overflow > 0); + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + + + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + + while (n !== 0) { + m = s.heap[--h]; + + if (m > max_code) { + continue; + } + + if (tree[m * 2 + 1] + /*.Len*/ + !== bits) { + // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s.opt_len += (bits - tree[m * 2 + 1] + /*.Len*/ + ) * tree[m * 2] + /*.Freq*/ + ; + tree[m * 2 + 1] + /*.Len*/ + = bits; + } + + n--; + } + } +} +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ + + +function gen_codes(tree, max_code, bl_count) // ct_data *tree; /* the tree to decorate */ +// int max_code; /* largest code with non zero frequency */ +// ushf *bl_count; /* number of codes at each bit length */ +{ + var next_code = new Array(MAX_BITS + 1); + /* next code value for each bit length */ + + var code = 0; + /* running code value */ + + var bits; + /* bit index */ + + var n; + /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = code + bl_count[bits - 1] << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ + + length = 0; + + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + + for (n = 0; n < 1 << extra_lbits[code]; n++) { + _length_code[length++] = code; + } + } //Assert (length == 256, "tr_static_init: length != 256"); + + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + + + _length_code[length - 1] = code; + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + + dist = 0; + + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + + for (n = 0; n < 1 << extra_dbits[code]; n++) { + _dist_code[dist++] = code; + } + } //Assert (dist == 256, "tr_static_init: dist != 256"); + + + dist >>= 7; + /* from now on, all distances are divided by 128 */ + + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + + for (n = 0; n < 1 << extra_dbits[code] - 7; n++) { + _dist_code[256 + dist++] = code; + } + } //Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + + + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + + n = 0; + + while (n <= 143) { + static_ltree[n * 2 + 1] + /*.Len*/ + = 8; + n++; + bl_count[8]++; + } + + while (n <= 255) { + static_ltree[n * 2 + 1] + /*.Len*/ + = 9; + n++; + bl_count[9]++; + } + + while (n <= 279) { + static_ltree[n * 2 + 1] + /*.Len*/ + = 7; + n++; + bl_count[7]++; + } + + while (n <= 287) { + static_ltree[n * 2 + 1] + /*.Len*/ + = 8; + n++; + bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + + + gen_codes(static_ltree, L_CODES + 1, bl_count); + /* The static distance tree is trivial: */ + + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1] + /*.Len*/ + = 5; + static_dtree[n * 2] + /*.Code*/ + = bi_reverse(n, 5); + } // Now data ready and we can init static trees + + + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); //static_init_done = true; +} +/* =========================================================================== + * Initialize a new block. + */ + + +function init_block(s) { + var n; + /* iterates over tree elements */ + + /* Initialize the trees. */ + + for (n = 0; n < L_CODES; n++) { + s.dyn_ltree[n * 2] + /*.Freq*/ + = 0; + } + + for (n = 0; n < D_CODES; n++) { + s.dyn_dtree[n * 2] + /*.Freq*/ + = 0; + } + + for (n = 0; n < BL_CODES; n++) { + s.bl_tree[n * 2] + /*.Freq*/ + = 0; + } + + s.dyn_ltree[END_BLOCK * 2] + /*.Freq*/ + = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; +} +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ + + +function bi_windup(s) { + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + //put_byte(s, (Byte)s->bi_buf); + s.pending_buf[s.pending++] = s.bi_buf; + } + + s.bi_buf = 0; + s.bi_valid = 0; +} +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ + + +function copy_block(s, buf, len, header) //DeflateState *s; +//charf *buf; /* the input data */ +//unsigned len; /* its length */ +//int header; /* true if block header must be written */ +{ + bi_windup(s); + /* align on byte boundary */ + + if (header) { + put_short(s, len); + put_short(s, ~len); + } // while (len--) { + // put_byte(s, *buf++); + // } + + + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; +} +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ + + +function smaller(tree, n, m, depth) { + var _n2 = n * 2; + + var _m2 = m * 2; + + return tree[_n2] + /*.Freq*/ + < tree[_m2] + /*.Freq*/ + || tree[_n2] + /*.Freq*/ + === tree[_m2] + /*.Freq*/ + && depth[n] <= depth[m]; +} +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ + + +function pqdownheap(s, tree, k) // deflate_state *s; +// ct_data *tree; /* the tree to restore */ +// int k; /* node to move down */ +{ + var v = s.heap[k]; + var j = k << 1; + /* left son of k */ + + while (j <= s.heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + + + if (smaller(tree, v, s.heap[j], s.depth)) { + break; + } + /* Exchange v with the smallest son */ + + + s.heap[k] = s.heap[j]; + k = j; + /* And continue down the tree, setting j to the left son of k */ + + j <<= 1; + } + + s.heap[k] = v; +} // inlined manually +// var SMALLEST = 1; + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ + + +function compress_block(s, ltree, dtree) // deflate_state *s; +// const ct_data *ltree; /* literal tree */ +// const ct_data *dtree; /* distance tree */ +{ + var dist; + /* distance of matched string */ + + var lc; + /* match length or unmatched char (if dist == 0) */ + + var lx = 0; + /* running index in l_buf */ + + var code; + /* the code to send */ + + var extra; + /* number of extra bits to send */ + + if (s.last_lit !== 0) { + do { + dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1]; + lc = s.pending_buf[s.l_buf + lx]; + lx++; + + if (dist === 0) { + send_code(s, lc, ltree); + /* send a literal byte */ + //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); + /* send the length code */ + + extra = extra_lbits[code]; + + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); + /* send the extra length bits */ + } + + dist--; + /* dist is now the match distance - 1 */ + + code = d_code(dist); //Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); + /* send the distance code */ + + extra = extra_dbits[code]; + + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); + /* send the extra distance bits */ + } + } + /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + // "pendingBuf overflow"); + + } while (lx < s.last_lit); + } + + send_code(s, END_BLOCK, ltree); +} +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ + + +function build_tree(s, desc) // deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; + /* iterate over heap elements */ + + var max_code = -1; + /* largest code with non zero frequency */ + + var node; + /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n * 2] + /*.Freq*/ + !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + } else { + tree[n * 2 + 1] + /*.Len*/ + = 0; + } + } + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + + + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0; + tree[node * 2] + /*.Freq*/ + = 1; + s.depth[node] = 0; + s.opt_len--; + + if (has_stree) { + s.static_len -= stree[node * 2 + 1] + /*.Len*/ + ; + } + /* node is 0 or 1 so it does not have extra bits */ + + } + + desc.max_code = max_code; + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + + for (n = s.heap_len >> 1 + /*int /2*/ + ; n >= 1; n--) { + pqdownheap(s, tree, n); + } + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + + + node = elems; + /* next internal node of the tree */ + + do { + //pqremove(s, tree, n); /* n = node of least frequency */ + + /*** pqremove ***/ + n = s.heap[1 + /*SMALLEST*/ + ]; + s.heap[1 + /*SMALLEST*/ + ] = s.heap[s.heap_len--]; + pqdownheap(s, tree, 1 + /*SMALLEST*/ + ); + /***/ + + m = s.heap[1 + /*SMALLEST*/ + ]; + /* m = node of next least frequency */ + + s.heap[--s.heap_max] = n; + /* keep the nodes sorted by frequency */ + + s.heap[--s.heap_max] = m; + /* Create a new node father of n and m */ + + tree[node * 2] + /*.Freq*/ + = tree[n * 2] + /*.Freq*/ + + tree[m * 2] + /*.Freq*/ + ; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1] + /*.Dad*/ + = tree[m * 2 + 1] + /*.Dad*/ + = node; + /* and insert the new node in the heap */ + + s.heap[1 + /*SMALLEST*/ + ] = node++; + pqdownheap(s, tree, 1 + /*SMALLEST*/ + ); + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1 + /*SMALLEST*/ + ]; + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + + gen_bitlen(s, desc); + /* The field len is now set, we can generate the bit codes */ + + gen_codes(tree, max_code, s.bl_count); +} +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ + + +function scan_tree(s, tree, max_code) // deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; + /* iterates over all tree elements */ + + var prevlen = -1; + /* last emitted length */ + + var curlen; + /* length of current code */ + + var nextlen = tree[0 * 2 + 1] + /*.Len*/ + ; + /* length of next code */ + + var count = 0; + /* repeat count of the current code */ + + var max_count = 7; + /* max repeat count */ + + var min_count = 4; + /* min repeat count */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + tree[(max_code + 1) * 2 + 1] + /*.Len*/ + = 0xffff; + /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1] + /*.Len*/ + ; + + if (++count < max_count && curlen === nextlen) { + continue; + } else if (count < min_count) { + s.bl_tree[curlen * 2] + /*.Freq*/ + += count; + } else if (curlen !== 0) { + if (curlen !== prevlen) { + s.bl_tree[curlen * 2] /*.Freq*/++; + } + + s.bl_tree[REP_3_6 * 2] /*.Freq*/++; + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2] /*.Freq*/++; + } else { + s.bl_tree[REPZ_11_138 * 2] /*.Freq*/++; + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } +} +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ + + +function send_tree(s, tree, max_code) // deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; + /* iterates over all tree elements */ + + var prevlen = -1; + /* last emitted length */ + + var curlen; + /* length of current code */ + + var nextlen = tree[0 * 2 + 1] + /*.Len*/ + ; + /* length of next code */ + + var count = 0; + /* repeat count of the current code */ + + var max_count = 7; + /* max repeat count */ + + var min_count = 4; + /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ + + /* guard already set */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1] + /*.Len*/ + ; + + if (++count < max_count && curlen === nextlen) { + continue; + } else if (count < min_count) { + do { + send_code(s, curlen, s.bl_tree); + } while (--count !== 0); + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } //Assert(count >= 3 && count <= 6, " 3_6?"); + + + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } +} +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ + + +function build_bl_tree(s) { + var max_blindex; + /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + /* Build the bit length tree: */ + + build_tree(s, s.bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1] + /*.Len*/ + !== 0) { + break; + } + } + /* Update opt_len to include the bit length tree and counts */ + + + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + // s->opt_len, s->static_len)); + + return max_blindex; +} +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ + + +function send_all_trees(s, lcodes, dcodes, blcodes) // deflate_state *s; +// int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + var rank; + /* index in bl_order */ + //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + // "too many codes"); + //Tracev((stderr, "\nbl counts: ")); + + send_bits(s, lcodes - 257, 5); + /* not +255 as stated in appnote.txt */ + + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); + /* not -3 as stated in appnote.txt */ + + for (rank = 0; rank < blcodes; rank++) { + //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1] + /*.Len*/ + , 3); + } //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + + send_tree(s, s.dyn_ltree, lcodes - 1); + /* literal tree */ + //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes - 1); + /* distance tree */ + //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ + + +function detect_data_type(s) { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + var black_mask = 0xf3ffc07f; + var n; + /* Check for non-textual ("black-listed") bytes. */ + + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if (black_mask & 1 && s.dyn_ltree[n * 2] + /*.Freq*/ + !== 0) { + return Z_BINARY; + } + } + /* Check for textual ("white-listed") bytes. */ + + + if (s.dyn_ltree[9 * 2] + /*.Freq*/ + !== 0 || s.dyn_ltree[10 * 2] + /*.Freq*/ + !== 0 || s.dyn_ltree[13 * 2] + /*.Freq*/ + !== 0) { + return Z_TEXT; + } + + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2] + /*.Freq*/ + !== 0) { + return Z_TEXT; + } + } + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + + + return Z_BINARY; +} + +var static_init_done = false; +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ + +function _tr_init(s) { + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + s.bi_buf = 0; + s.bi_valid = 0; + /* Initialize the first block of the first file: */ + + init_block(s); +} +/* =========================================================================== + * Send a stored block + */ + + +function _tr_stored_block(s, buf, stored_len, last) //DeflateState *s; +//charf *buf; /* input block */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); + /* send block type */ + + copy_block(s, buf, stored_len, true); + /* with header */ +} +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ + + +function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); +} +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ + + +function _tr_flush_block(s, buf, stored_len, last) //DeflateState *s; +//charf *buf; /* input block, or NULL if too old */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + var opt_lenb, static_lenb; + /* opt_len and static_len in bytes */ + + var max_blindex = 0; + /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + + if (s.level > 0) { + /* Check if the file is binary or text */ + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + /* Construct the literal and distance trees */ + + + build_tree(s, s.l_desc); // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + + build_tree(s, s.d_desc); // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + + max_blindex = build_bl_tree(s); + /* Determine the best encoding. Compute the block lengths in bytes. */ + + opt_lenb = s.opt_len + 3 + 7 >>> 3; + static_lenb = s.static_len + 3 + 7 >>> 3; // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + // s->last_lit)); + + if (static_lenb <= opt_lenb) { + opt_lenb = static_lenb; + } + } else { + // Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; + /* force a stored block */ + } + + if (stored_len + 4 <= opt_lenb && buf !== -1) { + /* 4: two words for the lengths */ + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + } else { + send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + + + init_block(s); + + if (last) { + bi_windup(s); + } // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + // s->compressed_len-7*last)); + +} +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ + + +function _tr_tally(s, dist, lc) // deflate_state *s; +// unsigned dist; /* distance of matched string */ +// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + //var out_length, in_length, dcode; + s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 0xff; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; + s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; + s.last_lit++; + + if (dist === 0) { + /* lc is the unmatched char */ + s.dyn_ltree[lc * 2] /*.Freq*/++; + } else { + s.matches++; + /* Here, lc is the match length - MIN_MATCH */ + + dist--; + /* dist = match distance - 1 */ + //Assert((ush)dist < (ush)MAX_DIST(s) && + // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2] /*.Freq*/++; + s.dyn_dtree[d_code(dist) * 2] /*.Freq*/++; + } // (!) This block is disabled in zlib defaults, + // don't enable it for binary compatibility + //#ifdef TRUNCATE_BLOCK + // /* Try to guess if it is profitable to stop the current block here */ + // if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { + // /* Compute an upper bound for the compressed length */ + // out_length = s.last_lit*8; + // in_length = s.strstart - s.block_start; + // + // for (dcode = 0; dcode < D_CODES; dcode++) { + // out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); + // } + // out_length >>>= 3; + // //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", + // // s->last_lit, in_length, out_length, + // // 100L - out_length*100L/in_length)); + // if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { + // return true; + // } + // } + //#endif + + + return s.last_lit === s.lit_bufsize - 1; + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +exports._tr_init = _tr_init; +exports._tr_stored_block = _tr_stored_block; +exports._tr_flush_block = _tr_flush_block; +exports._tr_tally = _tr_tally; +exports._tr_align = _tr_align; + +/***/ }), + +/***/ "./node_modules/pako/lib/zlib/zstream.js": +/*!***********************************************!*\ + !*** ./node_modules/pako/lib/zlib/zstream.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + // (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +function ZStream() { + /* next input byte */ + this.input = null; // JS specific, because we have no pointers + + this.next_in = 0; + /* number of bytes available at input */ + + this.avail_in = 0; + /* total number of input bytes read so far */ + + this.total_in = 0; + /* next output byte should be put there */ + + this.output = null; // JS specific, because we have no pointers + + this.next_out = 0; + /* remaining free space at output */ + + this.avail_out = 0; + /* total number of bytes output so far */ + + this.total_out = 0; + /* last error message, NULL if no error */ + + this.msg = '' + /*Z_NULL*/ + ; + /* not visible by applications */ + + this.state = null; + /* best guess about the data type: binary or text */ + + this.data_type = 2 + /*Z_UNKNOWN*/ + ; + /* adler32 value of the uncompressed data */ + + this.adler = 0; +} + +module.exports = ZStream; + +/***/ }), + +/***/ "./node_modules/process-nextick-args/index.js": +/*!****************************************************!*\ + !*** ./node_modules/process-nextick-args/index.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +if (!process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { + module.exports = { + nextTick: nextTick + }; +} else { + module.exports = process; +} + +function nextTick(fn, arg1, arg2, arg3) { + if (typeof fn !== 'function') { + throw new TypeError('"callback" argument must be a function'); + } + + var len = arguments.length; + var args, i; + + switch (len) { + case 0: + case 1: + return process.nextTick(fn); + + case 2: + return process.nextTick(function afterTickOne() { + fn.call(null, arg1); + }); + + case 3: + return process.nextTick(function afterTickTwo() { + fn.call(null, arg1, arg2); + }); + + case 4: + return process.nextTick(function afterTickThree() { + fn.call(null, arg1, arg2, arg3); + }); + + default: + args = new Array(len - 1); + i = 0; + + while (i < args.length) { + args[i++] = arguments[i]; + } + + return process.nextTick(function afterTick() { + fn.apply(null, args); + }); + } +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./node_modules/process/browser.js": +/*!*****************************************!*\ + !*** ./node_modules/process/browser.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} + +function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); +} + +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +})(); + +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } // if setTimeout wasn't available but was latter defined + + + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } +} + +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } // if clearTimeout wasn't available but was latter defined + + + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } +} + +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + + draining = false; + + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue.length; + + while (len) { + currentQueue = queue; + queue = []; + + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + + queueIndex = -1; + len = queue.length; + } + + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + + queue.push(new Item(fun, args)); + + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; // v8 likes predictible objects + + +function Item(fun, array) { + this.fun = fun; + this.array = array; +} + +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues + +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { + return []; +}; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { + return '/'; +}; + +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; + +process.umask = function () { + return 0; +}; + +/***/ }), + +/***/ "./node_modules/readable-stream/duplex-browser.js": +/*!********************************************************!*\ + !*** ./node_modules/readable-stream/duplex-browser.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./lib/_stream_duplex.js */ "./node_modules/readable-stream/lib/_stream_duplex.js"); + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_duplex.js": +/*!************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_duplex.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js"); +/**/ + +/**/ + + +var objectKeys = Object.keys || function (obj) { + var keys = []; + + for (var key in obj) { + keys.push(key); + } + + return keys; +}; +/**/ + + +module.exports = Duplex; +/**/ + +var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js"); + +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +var Readable = __webpack_require__(/*! ./_stream_readable */ "./node_modules/readable-stream/lib/_stream_readable.js"); + +var Writable = __webpack_require__(/*! ./_stream_writable */ "./node_modules/readable-stream/lib/_stream_writable.js"); + +util.inherits(Duplex, Readable); +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + if (options && options.readable === false) this.readable = false; + if (options && options.writable === false) this.writable = false; + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + this.once('end', onend); +} + +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); // the no-half-open enforcer + +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written. + // But allow more writes to happen in this tick. + + pna.nextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed + + + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + pna.nextTick(cb, err); +}; + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_passthrough.js": +/*!*****************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_passthrough.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + + +module.exports = PassThrough; + +var Transform = __webpack_require__(/*! ./_stream_transform */ "./node_modules/readable-stream/lib/_stream_transform.js"); +/**/ + + +var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js"); + +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_readable.js": +/*!**************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_readable.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js"); +/**/ + + +module.exports = Readable; +/**/ + +var isArray = __webpack_require__(/*! isarray */ "./node_modules/isarray/index.js"); +/**/ + +/**/ + + +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; +/**/ + +var EE = __webpack_require__(/*! events */ "./node_modules/events/events.js").EventEmitter; + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ + + +var Stream = __webpack_require__(/*! ./internal/streams/stream */ "./node_modules/readable-stream/lib/internal/streams/stream-browser.js"); +/**/ + +/**/ + + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var OurUint8Array = global.Uint8Array || function () {}; + +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} + +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +/**/ + +/**/ + + +var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js"); + +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +/**/ + +var debugUtil = __webpack_require__(/*! util */ 0); + +var debug = void 0; + +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + + +var BufferList = __webpack_require__(/*! ./internal/streams/BufferList */ "./node_modules/readable-stream/lib/internal/streams/BufferList.js"); + +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "./node_modules/readable-stream/lib/internal/streams/destroy.js"); + +var StringDecoder; +util.inherits(Readable, Stream); +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} + +function ReadableState(options, stream) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); + options = options || {}; // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + + var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints. + + this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + + this.sync = true; // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; // has it been destroyed + + this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + + this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s + + this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled + + this.readingMore = false; + this.decoder = null; + this.encoding = null; + + if (options.encoding) { + if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ "./node_modules/string_decoder/lib/string_decoder.js").StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); + if (!(this instanceof Readable)) return new Readable(options); + this._readableState = new ReadableState(options, this); // legacy + + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); +} + +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed + + + this._readableState.destroyed = value; + } +}); +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; + +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; // Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. + + +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; // Unshift should *always* be something directly out of read() + + +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; + +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + + return needMoreData(state); +} + +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } + + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + + return er; +} // if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. + + +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; // backwards compatibility. + + +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = __webpack_require__(/*! string_decoder/ */ "./node_modules/string_decoder/lib/string_decoder.js").StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; // Don't raise the hwm > 8MB + + +var MAX_HWM = 0x800000; + +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + + return n; +} // This function is designed to be inlinable, so please take care when making +// changes to the function body. + + +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } // If we're asking for more than the current hwm, then raise the hwm. + + + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; // Don't have enough + + if (!state.ended) { + state.needReadable = true; + return 0; + } + + return state.length; +} // you can override either this method, or the async _read(n) below. + + +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. + + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + // if we need a readable event, then we need to do some reading. + + + var doRead = state.needReadable; + debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some + + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + + + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; // if the length is currently zero, then we *need* a readable event. + + if (state.length === 0) state.needReadable = true; // call internal read method + + this._read(state.highWaterMark); + + state.sync = false; // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. + + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + return ret; +}; + +function onEofChunk(stream, state) { + if (state.ended) return; + + if (state.decoder) { + var chunk = state.decoder.end(); + + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + + state.ended = true; // emit 'readable' now to make sure it gets picked up. + + emitReadable(stream); +} // Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. + + +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} // at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. + + +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) // didn't get any data, stop spinning. + break;else len = state.length; + } + + state.readingMore = false; +} // abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. + + +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + + case 1: + state.pipes = [state.pipes, dest]; + break; + + default: + state.pipes.push(dest); + break; + } + + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + dest.on('unpipe', onunpipe); + + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + + + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; + + function cleanup() { + debug('cleanup'); // cleanup event handlers once the pipe is broken + + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + cleanedUp = true; // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + + + var increasedAwaitDrain = false; + src.on('data', ondata); + + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + + src.pause(); + } + } // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + + + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } // Make sure our error handler is attached before userland ones. + + + prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. + + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + + dest.once('close', onclose); + + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } // tell the dest that it's being piped to + + + dest.emit('pipe', src); // start the flow if it hasn't been started already. + + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; // if we're not piping anywhere, then do nothing. + + if (state.pipesCount === 0) return this; // just one destination. most common case. + + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; // got a match. + + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } // slow case. multiple pipe destinations. + + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, unpipeInfo); + } + + return this; + } // try to find the right one. + + + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this, unpipeInfo); + return this; +}; // set up data events if they are asked for +// Ensure readable listeners eventually get something + + +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; +}; + +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} // pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. + + +Readable.prototype.resume = function () { + var state = this._readableState; + + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + + while (state.flowing && stream.read() !== null) {} +} // wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. + + +Readable.prototype.wrap = function (stream) { + var _this = this; + + var state = this._readableState; + var paused = false; + stream.on('end', function () { + debug('wrapped end'); + + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + + _this.push(null); + }); + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode + + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = _this.push(chunk); + + if (!ret) { + paused = true; + stream.pause(); + } + }); // proxy all the other methods. + // important when wrapping filters and duplexes. + + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } // proxy certain important events. + + + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } // when we try to consume some more bytes, simply unpause the + // underlying stream. + + + this._read = function (n) { + debug('wrapped _read', n); + + if (paused) { + paused = false; + stream.resume(); + } + }; + + return this; +}; + +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._readableState.highWaterMark; + } +}); // exposed for testing purposes only. + +Readable._fromList = fromList; // Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. + +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + return ret; +} // Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. + + +function fromListPartial(n, list, hasStrings) { + var ret; + + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + + return ret; +} // Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. + + +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + + break; + } + + ++c; + } + + list.length -= c; + return ret; +} // Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. + + +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + + break; + } + + ++c; + } + + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + + return -1; +} +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_transform.js": +/*!***************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_transform.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + + +module.exports = Transform; + +var Duplex = __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); +/**/ + + +var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js"); + +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +util.inherits(Transform, Duplex); + +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + var cb = ts.writecb; + + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + cb(er); + var rs = this._readableState; + rs.reading = false; + + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + Duplex.call(this, options); + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; // start out asking for a readable event once data is transformed. + + this._readableState.needReadable = true; // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + if (typeof options.flush === 'function') this._flush = options.flush; + } // When the writable side finishes, then flush out anything remaining. + + + this.on('prefinish', prefinish); +} + +function prefinish() { + var _this = this; + + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; // This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. + + +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; // Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. + + +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + + _this2.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + return stream.push(null); +} + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/_stream_writable.js": +/*!**************************************************************!*\ + !*** ./node_modules/readable-stream/lib/_stream_writable.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process, setImmediate, global) {// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js"); +/**/ + + +module.exports = Writable; +/* */ + +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} // It seems a linked list but it is not +// there will be only 2 of these for each stream + + +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ + + +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ + +var Duplex; +/**/ + +Writable.WritableState = WritableState; +/**/ + +var util = __webpack_require__(/*! core-util-is */ "./node_modules/core-util-is/lib/util.js"); + +util.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +/**/ + +/**/ + +var internalUtil = { + deprecate: __webpack_require__(/*! util-deprecate */ "./node_modules/util-deprecate/browser.js") +}; +/**/ + +/**/ + +var Stream = __webpack_require__(/*! ./internal/streams/stream */ "./node_modules/readable-stream/lib/internal/streams/stream-browser.js"); +/**/ + +/**/ + + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var OurUint8Array = global.Uint8Array || function () {}; + +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} + +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +/**/ + + +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "./node_modules/readable-stream/lib/internal/streams/destroy.js"); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); + options = options || {}; // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + + var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream + // contains buffers or objects. + + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints. + + this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called + + this.finalCalled = false; // drain event flag. + + this.needDrain = false; // at the start of calling end() + + this.ending = false; // when end() has been called, and returned + + this.ended = false; // when 'finish' is emitted + + this.finished = false; // has it been destroyed + + this.destroyed = false; // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + + this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + + this.length = 0; // a flag to see when we're in the middle of a write. + + this.writing = false; // when true all writes will be buffered until .uncork() call + + this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + + this.sync = true; // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + + this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) + + this.onwrite = function (er) { + onwrite(stream, er); + }; // the callback that the user supplies to write(chunk,encoding,cb) + + + this.writecb = null; // the amount that is being written when _write is called. + + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + + this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + + this.prefinished = false; // True if the error was already emitted and should not be thrown again + + this.errorEmitted = false; // count buffered requests + + this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + + while (current) { + out.push(current); + current = current.next; + } + + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); // Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. + + +var realHasInstance; + +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "./node_modules/readable-stream/lib/_stream_duplex.js"); // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); // legacy. + + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} // Otherwise people can pipe Writable streams, which is just wrong. + + +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb + + stream.emit('error', er); + pna.nextTick(cb, er); +} // Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. + + +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + + return chunk; +} + +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); // if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. + +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. + + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); // this can emit finish, and it will always happen + // after error + + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); // this can emit finish, but finish must + // always follow error + + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} // Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. + + +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} // if there's something in the buffer waiting, then process it + + +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; + + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + + state.pendingcb++; + state.lastBufferedRequest = null; + + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks + + if (state.corked) { + state.corked = 1; + this.uncork(); + } // ignore unnecessary end() calls. + + + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} + +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + + if (err) { + stream.emit('error', err); + } + + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} + +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + + if (need) { + prefinish(stream, state); + + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = corkReq; + } else { + state.corkedRequestsFree = corkReq; + } +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed + + + this._writableState.destroyed = value; + } +}); +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; + +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../timers-browserify/main.js */ "./node_modules/timers-browserify/main.js").setImmediate, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/internal/streams/BufferList.js": +/*!*************************************************************************!*\ + !*** ./node_modules/readable-stream/lib/internal/streams/BufferList.js ***! + \*************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +var Buffer = __webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer; + +var util = __webpack_require__(/*! util */ 1); + +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} + +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function push(v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function unshift(v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + + while (p = p.next) { + ret += s + p.data; + } + + return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + + return ret; + }; + + return BufferList; +}(); + +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ + length: this.length + }); + return this.constructor.name + ' ' + obj; + }; +} + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/internal/streams/destroy.js": +/*!**********************************************************************!*\ + !*** ./node_modules/readable-stream/lib/internal/streams/destroy.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "./node_modules/process-nextick-args/index.js"); +/**/ +// undocumented cb() API, needed for core, not for public API + + +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { + pna.nextTick(emitErrorNT, this, err); + } + + return this; + } // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + + if (this._readableState) { + this._readableState.destroyed = true; + } // if this is a duplex stream mark the writable part as destroyed as well + + + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + pna.nextTick(emitErrorNT, _this, err); + + if (_this._writableState) { + _this._writableState.errorEmitted = true; + } + } else if (cb) { + cb(err); + } + }); + + return this; +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; + +/***/ }), + +/***/ "./node_modules/readable-stream/lib/internal/streams/stream-browser.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/readable-stream/lib/internal/streams/stream-browser.js ***! + \*****************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! events */ "./node_modules/events/events.js").EventEmitter; + +/***/ }), + +/***/ "./node_modules/readable-stream/passthrough.js": +/*!*****************************************************!*\ + !*** ./node_modules/readable-stream/passthrough.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./readable */ "./node_modules/readable-stream/readable-browser.js").PassThrough; + +/***/ }), + +/***/ "./node_modules/readable-stream/readable-browser.js": +/*!**********************************************************!*\ + !*** ./node_modules/readable-stream/readable-browser.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +exports = module.exports = __webpack_require__(/*! ./lib/_stream_readable.js */ "./node_modules/readable-stream/lib/_stream_readable.js"); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = __webpack_require__(/*! ./lib/_stream_writable.js */ "./node_modules/readable-stream/lib/_stream_writable.js"); +exports.Duplex = __webpack_require__(/*! ./lib/_stream_duplex.js */ "./node_modules/readable-stream/lib/_stream_duplex.js"); +exports.Transform = __webpack_require__(/*! ./lib/_stream_transform.js */ "./node_modules/readable-stream/lib/_stream_transform.js"); +exports.PassThrough = __webpack_require__(/*! ./lib/_stream_passthrough.js */ "./node_modules/readable-stream/lib/_stream_passthrough.js"); + +/***/ }), + +/***/ "./node_modules/readable-stream/transform.js": +/*!***************************************************!*\ + !*** ./node_modules/readable-stream/transform.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./readable */ "./node_modules/readable-stream/readable-browser.js").Transform; + +/***/ }), + +/***/ "./node_modules/readable-stream/writable-browser.js": +/*!**********************************************************!*\ + !*** ./node_modules/readable-stream/writable-browser.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./lib/_stream_writable.js */ "./node_modules/readable-stream/lib/_stream_writable.js"); + +/***/ }), + +/***/ "./node_modules/safe-buffer/index.js": +/*!*******************************************!*\ + !*** ./node_modules/safe-buffer/index.js ***! + \*******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js"); + +var Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers + +function copyProps(src, dst) { + for (var key in src) { + dst[key] = src[key]; + } +} + +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer; +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports); + exports.Buffer = SafeBuffer; +} + +function SafeBuffer(arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length); +} // Copy static methods from Buffer + + +copyProps(Buffer, SafeBuffer); + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number'); + } + + return Buffer(arg, encodingOrOffset, length); +}; + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + + var buf = Buffer(size); + + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + } else { + buf.fill(0); + } + + return buf; +}; + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + + return Buffer(size); +}; + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + + return buffer.SlowBuffer(size); +}; + +/***/ }), + +/***/ "./node_modules/setimmediate/setImmediate.js": +/*!***************************************************!*\ + !*** ./node_modules/setimmediate/setImmediate.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { + "use strict"; + + if (global.setImmediate) { + return; + } + + var nextHandle = 1; // Spec says greater than zero + + var tasksByHandle = {}; + var currentlyRunningATask = false; + var doc = global.document; + var registerImmediate; + + function setImmediate(callback) { + // Callback can either be a function or a string + if (typeof callback !== "function") { + callback = new Function("" + callback); + } // Copy function arguments + + + var args = new Array(arguments.length - 1); + + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i + 1]; + } // Store and register the task + + + var task = { + callback: callback, + args: args + }; + tasksByHandle[nextHandle] = task; + registerImmediate(nextHandle); + return nextHandle++; + } + + function clearImmediate(handle) { + delete tasksByHandle[handle]; + } + + function run(task) { + var callback = task.callback; + var args = task.args; + + switch (args.length) { + case 0: + callback(); + break; + + case 1: + callback(args[0]); + break; + + case 2: + callback(args[0], args[1]); + break; + + case 3: + callback(args[0], args[1], args[2]); + break; + + default: + callback.apply(undefined, args); + break; + } + } + + function runIfPresent(handle) { + // From the spec: "Wait until any invocations of this algorithm started before this one have completed." + // So if we're currently running a task, we'll need to delay this invocation. + if (currentlyRunningATask) { + // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a + // "too much recursion" error. + setTimeout(runIfPresent, 0, handle); + } else { + var task = tasksByHandle[handle]; + + if (task) { + currentlyRunningATask = true; + + try { + run(task); + } finally { + clearImmediate(handle); + currentlyRunningATask = false; + } + } + } + } + + function installNextTickImplementation() { + registerImmediate = function (handle) { + process.nextTick(function () { + runIfPresent(handle); + }); + }; + } + + function canUsePostMessage() { + // The test against `importScripts` prevents this implementation from being installed inside a web worker, + // where `global.postMessage` means something completely different and can't be used for this purpose. + if (global.postMessage && !global.importScripts) { + var postMessageIsAsynchronous = true; + var oldOnMessage = global.onmessage; + + global.onmessage = function () { + postMessageIsAsynchronous = false; + }; + + global.postMessage("", "*"); + global.onmessage = oldOnMessage; + return postMessageIsAsynchronous; + } + } + + function installPostMessageImplementation() { + // Installs an event handler on `global` for the `message` event: see + // * https://developer.mozilla.org/en/DOM/window.postMessage + // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages + var messagePrefix = "setImmediate$" + Math.random() + "$"; + + var onGlobalMessage = function (event) { + if (event.source === global && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) { + runIfPresent(+event.data.slice(messagePrefix.length)); + } + }; + + if (global.addEventListener) { + global.addEventListener("message", onGlobalMessage, false); + } else { + global.attachEvent("onmessage", onGlobalMessage); + } + + registerImmediate = function (handle) { + global.postMessage(messagePrefix + handle, "*"); + }; + } + + function installMessageChannelImplementation() { + var channel = new MessageChannel(); + + channel.port1.onmessage = function (event) { + var handle = event.data; + runIfPresent(handle); + }; + + registerImmediate = function (handle) { + channel.port2.postMessage(handle); + }; + } + + function installReadyStateChangeImplementation() { + var html = doc.documentElement; + + registerImmediate = function (handle) { + // Create a