From 1d19379f423335c783ad9d5fe5c6c859f5ed88bf Mon Sep 17 00:00:00 2001 From: IAvecilla Date: Thu, 29 Feb 2024 10:55:46 -0300 Subject: [PATCH 1/2] Update subtree with new precompiles --- .../contracts/precompiles/EcAddG2.yul | 602 +++++++++++++++++ .../contracts/precompiles/EcMulG2.yul | 611 ++++++++++++++++++ .../src/deps/contracts/EcAddG2.yul.zbin | Bin 0 -> 17056 bytes .../src/deps/contracts/EcMulG2.yul.zbin | Bin 0 -> 17184 bytes 4 files changed, 1213 insertions(+) create mode 100644 .test-node-subtree/etc/system-contracts/contracts/precompiles/EcAddG2.yul create mode 100644 .test-node-subtree/etc/system-contracts/contracts/precompiles/EcMulG2.yul create mode 100644 .test-node-subtree/src/deps/contracts/EcAddG2.yul.zbin create mode 100644 .test-node-subtree/src/deps/contracts/EcMulG2.yul.zbin diff --git a/.test-node-subtree/etc/system-contracts/contracts/precompiles/EcAddG2.yul b/.test-node-subtree/etc/system-contracts/contracts/precompiles/EcAddG2.yul new file mode 100644 index 00000000..5f69ab67 --- /dev/null +++ b/.test-node-subtree/etc/system-contracts/contracts/precompiles/EcAddG2.yul @@ -0,0 +1,602 @@ +object "EcAddG2" { + code { } + object "EcAddG2_deployed" { + code { + // CONSTANTS + + /// @notice Constant function for value one in Montgomery form. + /// @dev This value was precomputed using Python. + /// @return m_one The value one in Montgomery form. + function MONTGOMERY_ONE() -> m_one { + m_one := 6350874878119819312338956282401532409788428879151445726012394534686998597021 + } + + /// @notice Constant function for the pre-computation of R^2 % N for the Montgomery REDC algorithm. + /// @dev R^2 is the Montgomery residue of the value 2^512. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further detals. + /// @dev This value was precomputed using Python. + /// @return ret The value R^2 modulus the curve group order. + function R2_MOD_P() -> ret { + ret := 3096616502983703923843567936837374451735540968419076528771170197431451843209 + } + + /// @notice Constant function for the alt_bn128 group order. + /// @dev See https://eips.ethereum.org/EIPS/eip-196 for further details. + /// @return ret The alt_bn128 group order. + function P() -> ret { + ret := 21888242871839275222246405745257275088696311157297823662689037894645226208583 + } + + /// @notice Constant function for the pre-computation of N' for the Montgomery REDC algorithm. + /// @dev N' is a value such that NN' = -1 mod R, with N being the curve group order. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further detals. + /// @dev This value was precomputed using Python. + /// @return ret The value N'. + function N_PRIME() -> ret { + ret := 111032442853175714102588374283752698368366046808579839647964533820976443843465 + } + + /// @notice constant function for the coeffitients of the sextic twist of the BN256 curve. + /// @dev E': y' ** 2 = x' ** 3 + 3 / (3 + u) + /// @dev the curve E' is defined over Fp2 elements. + /// @dev See https://hackmd.io/@jpw/bn254#Twists for further details. + /// @return coefficients of the sextic twist of the BN256 curve + function MONTGOMERY_TWISTED_CURVE_COEFFS() -> z0, z1 { + z0 := 16772280239760917788496391897731603718812008455956943122563801666366297604776 + z1 := 568440292453150825972223760836185707764922522371208948902804025364325400423 + } + + // HELPER FUNCTIONS + + /// @dev Executes the `precompileCall` opcode. + function precompileCall(precompileParams, gasToBurn) -> ret { + // Compiler simulation for calling `precompileCall` opcode + ret := verbatim_2i_1o("precompile", precompileParams, gasToBurn) + } + + /// @notice Burns remaining gas until revert. + /// @dev This function is used to burn gas in the case of a failed precompile call. + function burnGas() { + // Precompiles that do not have a circuit counterpart + // will burn the provided gas by calling this function. + precompileCall(0, gas()) + } + + // MONTGOMERY + + /// @notice Computes the inverse in Montgomery Form of a number in Montgomery Form. + /// @dev Reference: https://github.com/lambdaclass/lambdaworks/blob/main/math/src/field/fields/montgomery_backed_prime_fields.rs#L169 + /// @dev Let `base` be a number in Montgomery Form, then base = a*R mod P() being `a` the base number (not in Montgomery Form) + /// @dev Let `inv` be the inverse of a number `a` in Montgomery Form, then inv = a^(-1)*R mod P() + /// @dev The original binary extended euclidean algorithms takes a number a and returns a^(-1) mod N + /// @dev In our case N is P(), and we'd like the input and output to be in Montgomery Form (a*R mod P() + /// @dev and a^(-1)*R mod P() respectively). + /// @dev If we just pass the input as a number in Montgomery Form the result would be a^(-1)*R^(-1) mod P(), + /// @dev but we want it to be a^(-1)*R mod P(). + /// @dev For that, we take advantage of the algorithm's linearity and multiply the result by R^2 mod P() + /// @dev to get R^2*a^(-1)*R^(-1) mod P() = a^(-1)*R mod P() as the desired result in Montgomery Form. + /// @dev `inv` takes the value of `b` or `c` being the result sometimes `b` and sometimes `c`. In paper + /// @dev multiplying `b` or `c` by R^2 mod P() results on starting their values as b = R2_MOD_P() and c = 0. + /// @param base A number `a` in Montgomery Form, then base = a*R mod P(). + /// @return inv The inverse of a number `a` in Montgomery Form, then inv = a^(-1)*R mod P(). + function binaryExtendedEuclideanAlgorithm(base) -> inv { + let modulus := P() + let u := base + let v := modulus + // Avoids unnecessary reduction step. + let b := R2_MOD_P() + let c := 0 + + for {} and(iszero(eq(u, 1)), iszero(eq(v, 1))) {} { + for {} iszero(and(u, 1)) {} { + u := shr(1, u) + let current := b + switch and(current, 1) + case 0 { + b := shr(1, b) + } + case 1 { + b := shr(1, add(b, modulus)) + } + } + + for {} iszero(and(v, 1)) {} { + v := shr(1, v) + let current := c + switch and(current, 1) + case 0 { + c := shr(1, c) + } + case 1 { + c := shr(1, add(c, modulus)) + } + } + + switch gt(v, u) + case 0 { + u := sub(u, v) + if lt(b, c) { + b := add(b, modulus) + } + b := sub(b, c) + } + case 1 { + v := sub(v, u) + if lt(c, b) { + c := add(c, modulus) + } + c := sub(c, b) + } + } + + switch eq(u, 1) + case 0 { + inv := c + } + case 1 { + inv := b + } + } + + /// @notice Computes an addition and checks for overflow. + /// @param augend The value to add to. + /// @param addend The value to add. + /// @return sum The sum of the two values. + /// @return overflowed True if the addition overflowed, false otherwise. + function overflowingAdd(augend, addend) -> sum, overflowed { + sum := add(augend, addend) + overflowed := lt(sum, augend) + } + + /// @notice Retrieves the highest half of the multiplication result. + /// @param multiplicand The value to multiply. + /// @param multiplier The multiplier. + /// @return ret The highest half of the multiplication result. + function getHighestHalfOfMultiplication(multiplicand, multiplier) -> ret { + ret := verbatim_2i_1o("mul_high", multiplicand, multiplier) + } + + /// @notice Implementation of the Montgomery reduction algorithm (a.k.a. REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm + /// @param lowestHalfOfT The lowest half of the value T. + /// @param higherHalfOfT The higher half of the value T. + /// @return S The result of the Montgomery reduction. + function REDC(lowest_half_of_T, higher_half_of_T) -> S { + let q := mul(lowest_half_of_T, N_PRIME()) + let a_high := add(higher_half_of_T, getHighestHalfOfMultiplication(q, P())) + let a_low, overflowed := overflowingAdd(lowest_half_of_T, mul(q, P())) + if overflowed { + a_high := add(a_high, 1) + } + S := a_high + if iszero(lt(a_high, P())) { + S := sub(a_high, P()) + } + } + + /// @notice Encodes a field element into the Montgomery form using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on transforming a field element into the Montgomery form. + /// @param a The field element to encode. + /// @return ret The field element in Montgomery form. + function intoMontgomeryForm(a) -> ret { + let hi := getHighestHalfOfMultiplication(a, R2_MOD_P()) + let lo := mul(a, R2_MOD_P()) + ret := REDC(lo, hi) + } + + /// @notice Decodes a field element out of the Montgomery form using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on transforming a field element out of the Montgomery form. + /// @param m The field element in Montgomery form to decode. + /// @return ret The decoded field element. + function outOfMontgomeryForm(m) -> ret { + let higher_half_of_m := 0 + let lowest_half_of_m := m + ret := REDC(lowest_half_of_m, higher_half_of_m) + } + + /// @notice Computes the Montgomery addition. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param augend The augend in Montgomery form. + /// @param addend The addend in Montgomery form. + /// @return ret The result of the Montgomery addition. + function montgomeryAdd(augend, addend) -> ret { + ret := add(augend, addend) + if iszero(lt(ret, P())) { + ret := sub(ret, P()) + } + } + + /// @notice Computes the Montgomery subtraction. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param minuend The minuend in Montgomery form. + /// @param subtrahend The subtrahend in Montgomery form. + /// @return ret The result of the Montgomery addition. + function montgomerySub(minuend, subtrahend) -> ret { + ret := montgomeryAdd(minuend, sub(P(), subtrahend)) + } + + /// @notice Computes the Montgomery multiplication using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param multiplicand The multiplicand in Montgomery form. + /// @param multiplier The multiplier in Montgomery form. + /// @return ret The result of the Montgomery multiplication. + function montgomeryMul(multiplicand, multiplier) -> ret { + let higher_half_of_product := getHighestHalfOfMultiplication(multiplicand, multiplier) + let lowest_half_of_product := mul(multiplicand, multiplier) + ret := REDC(lowest_half_of_product, higher_half_of_product) + } + + /// @notice Computes the Montgomery modular inverse skipping the Montgomery reduction step. + /// @dev The Montgomery reduction step is skept because a modification in the binary extended Euclidean algorithm is used to compute the modular inverse. + /// @dev See the function `binaryExtendedEuclideanAlgorithm` for further details. + /// @param a The field element in Montgomery form to compute the modular inverse of. + /// @return invmod The result of the Montgomery modular inverse (in Montgomery form). + function montgomeryModularInverse(a) -> invmod { + invmod := binaryExtendedEuclideanAlgorithm(a) + } + + // G2 ARITHMETICS + + /// @notice Checks if a coordinate is on the curve group order. + /// @dev A coordinate is on the curve group order if it is on the range [0, curveFieldOrder). + /// @param coordinate The coordinate to check. + /// @return ret True if the coordinate is in the range, false otherwise. + function g2CoordinateIsOnFieldOrder(x0, x1) -> ret { + ret := and(lt(x0, P()), lt(x1, P())) + } + + /// @notice Checks if a G2 point in affine coordinates is the point at infinity. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev in Affine coordinates the point represents the infinity if both coordinates are 0. + /// @param x0, x1 The x coordinate to check. + /// @param y0, y1 The y coordinate to check. + /// @return ret True if the point is the point at infinity, false otherwise. + function g2AffinePointIsInfinity(x0, x1, y0, y1) -> ret { + ret := iszero(or(or(x0, x1), or(y0, y1))) + } + + /// @notice Checks if a G2 point in affine coordinates belongs to the twisted curve. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev in Affine coordinates the point belongs to the curve if it satisfies the equation: y^3 = x^2 + 3/(9+u). + /// @dev See https://hackmd.io/@jpw/bn254#Twists for further details. + /// @param x0, x1 The x coordinate to check. + /// @param y0, y1 The y coordinate to check. + /// @return ret True if the point is in the curve, false otherwise. + function g2AffinePointIsOnCurve(x0, x1, y0, y1) -> ret { + let a0, a1 := MONTGOMERY_TWISTED_CURVE_COEFFS() + let b0, b1 := fp2Mul(x0, x1, x0, x1) + b0, b1 := fp2Mul(b0, b1, x0, x1) + b0, b1 := fp2Add(b0, b1, a0, a1) + let c0, c1 := fp2Mul(y0, y1, y0, y1) + ret := and(eq(b0, c0), eq(b1, c1)) + } + + /// @notice Add two g2 points represented in jacobian coordinates. + /// @dev The coordinates must be encoded in Montgomery form. + /// @param aX0, aX1 The x coordinate of the first point. + /// @param aY0, aY1 The y coordinate of the first point. + /// @param a_z0, a_z1 The z coordinate of the first point. + /// @param bX0, bX1 The x coordinate of the second point. + /// @param bY0, bY1 The y coordinate of the second point. + /// @param b_z0, b_z1 The z coordinate of the second point. + /// @return c00, c01, c10, c11, c20, c21 The coordinates of the added points. + function g2JacobianAdd(aX0, aX1, aY0, aY1, a_z0, a_z1, bX0, bX1, bY0, bY1, b_z0, b_z1) -> c00, c01, c10, c11, c20, c21 { + let aux0, aux1 := fp2Mul(a_z0, a_z1, a_z0, a_z1) + let aux2, aux3 := fp2Mul(b_z0, b_z1, b_z0, b_z1) + let u0, u1 := fp2Mul(aX0, aX1, aux2, aux3) + let u2, u3 := fp2Mul(bX0, bX1, aux0, aux1) + let t0, t1 := fp2Mul(b_z0, b_z1, aux2, aux3) + let s0, s1 := fp2Mul(aY0, aY1, t0, t1) + let t2, t3 := fp2Mul(a_z0, a_z1, aux0, aux1) + let s2, s3 := fp2Mul(bY0, bY1, t2, t3) + let h0, h1 := fp2Sub(u2, u3, u0, u1) + let t4, t5 := fp2Add(h0, h1, h0, h1) + let i0, i1 := fp2Mul(t4, t5, t4, t5) + let j0, j1 := fp2Mul(h0, h1, i0, i1) + let t6, t7 := fp2Sub(s2, s3, s0, s1) + let r0, r1 := fp2Add(t6, t7, t6, t7) + let v0, v1 := fp2Mul(u0, u1, i0, i1) + let t8, t9 := fp2Mul(r0, r1, r0, r1) + let t10, t11 := fp2Add(v0, v1, v0, v1) + let t12, t13 := fp2Sub(t8, t9, j0, j1) + c00, c01 := fp2Sub(t12, t13, t10, t11) + let t14, t15 := fp2Sub(v0, v1, c00, c01) + let t16, t17 := fp2Mul(s0, s1, j0, j1) + let t18, t19 := fp2Add(t16, t17, t16, t17) + let t20, t21 := fp2Mul(r0, r1, t14, t15) + c10, c11 := fp2Sub(t20, t21, t18, t19) + let t22, t23 := fp2Add(a_z0, a_z1, b_z0, b_z1) + let t24, t25 := fp2Mul(t22, t23, t22, t23) + let t26, t27 := fp2Sub(t24, t25, aux0, aux1) + let t28, t29 := fp2Sub(t26, t27, aux2, aux3) + c20, c21 := fp2Mul(t28, t29, h0, h1) + } + + /// @notice Double a g2 point represented in jacobian coordinates. + /// @dev The coordinates must be encoded in Montgomery form. + /// @param aX0, aX1 The x coordinate of the point. + /// @param aY0, aY1 The y coordinate of the point. + /// @param a_z0, a_z1 The z coordinate of the point. + /// @return c00, c01, c10, c11, c20, c21 The coordinates of the doubled point. + function g2JacobianDouble(xp0, xp1, yp0, yp1, zp0, zp1) -> xr0, xr1, yr0, yr1, zr0, zr1 { + let a00, a01 := fp2Mul(xp0, xp1, xp0, xp1) + let b00, b01 := fp2Mul(yp0, yp1, yp0, yp1) + let c00, c01 := fp2Mul(b00, b01, b00, b01) + let t00, t01 := fp2Add(xp0, xp1, b00, b01) + let t10, t11 := fp2Mul(t00, t01, t00, t01) + let t20, t21 := fp2Sub(t10, t11, a00, a01) + let t30, t31 := fp2Sub(t20, t21, c00, c01) + let d00, d01 := fp2Add(t30, t31, t30, t31) + let e00, e01 := fp2Add(a00, a01, a00, a01) + e00, e01 := fp2Add(e00, e01, a00, a01) + let f00, f01 := fp2Mul(e00, e01, e00, e01) + let t40, t41 := fp2Add(d00, d01, d00, d01) + xr0, xr1 := fp2Sub(f00, f01, t40, t41) + let t50, t51 := fp2Sub(d00, d01, xr0, xr1) + let t60, t61 := fp2Add(c00, c01, c00, c01) + t60, t61 := fp2Add(t60, t61, t60, t61) + t60, t61 := fp2Add(t60, t61, t60, t61) + let t70, t71 := fp2Mul(e00, e01, t50, t51) + yr0, yr1 := fp2Sub(t70, t71, t60, t61) + let t80, t81 := fp2Mul(yp0, yp1, zp0, zp1) + zr0, zr1 := fp2Add(t80, t81, t80, t81) + } + + + /// @notice Computes the affine coordinates from Jacobian. + /// @param x0, x1 The coefficients of the x coordinate. + /// @param y0, y1 The coefficients of the y coordinate. + /// @param z0, z1 The coefficients of the z coordinate. + /// @return c00, c01, c10, c11 The coefficients of the point in affine coordinates. + function g2OutOfJacobian(x0, x1, y0, y1, z0, z1) -> c00, c01, c10, c11 { + let z0Square, z1Square := fp2Mul(z0, z1, z0, z1) + let z0Cube, z1Cube := fp2Mul(z0Square, z1Square, z0, z1) + let t0, t1 := fp2Inv(z0Square, z1Square) + let t2, t3 := fp2Inv(z0Cube, z1Cube) + c00, c01 := fp2Mul(x0, x1, t0, t1) + c10, c11 := fp2Mul(y0, y1, t2, t3) + } + + // FP2 ARITHMETHICS + + /// @notice Computes the sum of two Fp2 elements. + /// @dev Algorithm 5 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the A element to sum. + /// @param b00, b01 The coefficients of the B element to sum. + /// @return c00, c01 The coefficients of the element C = A + B. + function fp2Add(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomeryAdd(a00, b00) + c01 := montgomeryAdd(a01, b01) + } + + /// @notice Computes the subtraction of two Fp2 elements. + /// @dev Algorithm 6 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the minuend A. + /// @param b00, b01 The coefficients of the subtrahend B. + /// @return c00, c01 The coefficients of the element C = A - B. + function fp2Sub(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomerySub(a00, b00) + c01 := montgomerySub(a01, b01) + } + + /// @notice Computes the multiplication between a Fp2 element a Fp element. + /// @dev Algorithm 7 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @param scalar The value of the Fp element k. + /// @return c00, c01 The coefficients of the element C = k * A. + function fp2ScalarMul(a00, a01, scalar) -> c00, c01 { + c00 := montgomeryMul(a00, scalar) + c01 := montgomeryMul(a01, scalar) + } + + /// @notice Computes the multiplication between two Fp2 elements. + /// @dev Algorithm 7 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @param a00, a01 The coefficients of the Fp2 element B. + /// @return c00, c01 The coefficients of the element C = A * B. + function fp2Mul(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomerySub(montgomeryMul(a00, b00), montgomeryMul(a01, b01)) + c01 := montgomeryAdd(montgomeryMul(a00, b01), montgomeryMul(a01, b00)) + } + + /// @notice Computes the negative of a Fp2 elements. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @return c00, c01 The coefficients of the element C = -A. + function fp2Neg(a00, a01) -> c00, c01 { + c00, c01 := fp2Sub(0, 0, a00, a01) + } + + /// @notice Computes the inverse of a Fp2 element. + /// @dev Algorithm 8 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @return c00, c01 The coefficients of the element C = A^(-1). + function fp2Inv(a00, a01) -> c00, c01 { + let t0 := montgomeryMul(a00, a00) + let t1 := montgomeryMul(a01, a01) + t0 := montgomeryAdd(t0, t1) + t1 := montgomeryModularInverse(t0) + c00 := montgomeryMul(a00, t1) + c01 := montgomerySub(0, montgomeryMul(a01, t1)) + } + + // FALLBACK + + // Retrieve the coordinates from the calldata + let aX0 := calldataload(0) + let aX1 := calldataload(32) + let aY0 := calldataload(64) + let aY1 := calldataload(96) + + let bX0 := calldataload(128) + let bX1 := calldataload(160) + let bY0 := calldataload(192) + let bY1 := calldataload(224) + + // Check if points are infinite + let aIsInfinity := g2AffinePointIsInfinity(aX0, aX1, aY0, aY1) + let bIsInfinity := g2AffinePointIsInfinity(bX0, bX1, bY0, bY1) + + if and(aIsInfinity, bIsInfinity) { + // Infinity + Infinity = Infinity + mstore(0, 0) + mstore(32, 0) + mstore(64, 0) + mstore(96, 0) + return(0, 128) + } + + if aIsInfinity { + // Infinity + B = B + + // Ensure that the coordinates are between 0 and the field order + if iszero(and(g2CoordinateIsOnFieldOrder(bX0, bX1), g2CoordinateIsOnFieldOrder(bY0, bY1))) { + burnGas() + } + + let bX0Mont := intoMontgomeryForm(bX0) + let bX1Mont := intoMontgomeryForm(bX1) + let bY0Mont := intoMontgomeryForm(bY0) + let bY1Mont := intoMontgomeryForm(bY1) + + // Ensure that the point is in the curve + if iszero(g2AffinePointIsOnCurve(bX0Mont, bX1Mont, bY0Mont, bY1Mont)) { + burnGas() + } + + mstore(0, bX0) + mstore(32, bX1) + mstore(64, bY0) + mstore(96, bY1) + return(0, 128) + } + + if bIsInfinity { + // A + Infinity = A + + // Ensure that the coordinates are between 0 and the field order + if iszero(and(g2CoordinateIsOnFieldOrder(aX0, aX1), g2CoordinateIsOnFieldOrder(aY0, aY1))) { + burnGas() + } + + let aX0Mont := intoMontgomeryForm(aX0) + let aX1Mont := intoMontgomeryForm(aX1) + let aY0Mont := intoMontgomeryForm(aY0) + let aY1Mont := intoMontgomeryForm(aY1) + + // Ensure that the point is in the curve + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, aY0Mont, aY1Mont)) { + burnGas() + } + + mstore(0, aX0) + mstore(32, aX1) + mstore(64, aY0) + mstore(96, aY1) + return(0, 128) + } + + // Check if X cordinate is the same in bouth points. + if and(eq(aX0, bX0), eq(aX1, bX1)) { + + // Ensure that the coordinates are between 0 and the field order + if iszero(and(g2CoordinateIsOnFieldOrder(aX0, aX1), g2CoordinateIsOnFieldOrder(aY0, aY1))) { + burnGas() + } + + let aX0Mont := intoMontgomeryForm(aX0) + let aX1Mont := intoMontgomeryForm(aX1) + let aY0Mont := intoMontgomeryForm(aY0) + let aY1Mont := intoMontgomeryForm(aY1) + + // Ensure that the point is in the curve + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, aY0Mont, aY1Mont)) { + burnGas() + } + + if and(eq(aY0, bY0), eq(aY1, bY1)) { + + // A + A = 2A + + let c00, c01, c10, c11, c20, c21 := g2JacobianDouble(aX0Mont, aX1Mont, aY0Mont, aY1Mont, MONTGOMERY_ONE(), 0) + + c00, c01, c10, c11 := g2OutOfJacobian(c00, c01, c10, c11, c20, c21) + + c00 := outOfMontgomeryForm(c00) + c01 := outOfMontgomeryForm(c01) + c10 := outOfMontgomeryForm(c10) + c11 := outOfMontgomeryForm(c11) + + mstore(0, c00) + mstore(32, c01) + mstore(64, c10) + mstore(96, c11) + return(0, 128) + } + + // If Y coordinates are diferent, the only possibility is that: B = -A. In this case A + (-A) = Infinity. + + // Ensure that the coordinates are between 0 and the field order + if iszero(g2CoordinateIsOnFieldOrder(bY0, bY1)) { + burnGas() + } + + let bY0Mont := intoMontgomeryForm(bY0) + let bY1Mont := intoMontgomeryForm(bY1) + + // Ensure that the point is in the curve + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, bY0Mont, bY1Mont)) { + burnGas() + } + + mstore(0, 0) + mstore(32, 0) + mstore(64, 0) + mstore(96, 0) + return(0, 128) + } + + // A + B = C + + // Ensure that the coordinates are between 0 and the field order + if iszero(and(g2CoordinateIsOnFieldOrder(aX0, aX1), g2CoordinateIsOnFieldOrder(aY0, aY1))) { + burnGas() + } + if iszero(and(g2CoordinateIsOnFieldOrder(bX0, bX1), g2CoordinateIsOnFieldOrder(bY0, bY1))) { + burnGas() + } + + let aX0Mont := intoMontgomeryForm(aX0) + let aX1Mont := intoMontgomeryForm(aX1) + let aY0Mont := intoMontgomeryForm(aY0) + let aY1Mont := intoMontgomeryForm(aY1) + + let bX0Mont := intoMontgomeryForm(bX0) + let bX1Mont := intoMontgomeryForm(bX1) + let bY0Mont := intoMontgomeryForm(bY0) + let bY1Mont := intoMontgomeryForm(bY1) + + // Ensure that the points are in the curve + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, aY0Mont, aY1Mont)) { + burnGas() + } + if iszero(g2AffinePointIsOnCurve(bX0Mont, bX1Mont, bY0Mont, bY1Mont)) { + burnGas() + } + + let c00, c01, c10, c11, c20, c21 := g2JacobianAdd(aX0Mont, aX1Mont, aY0Mont, aY1Mont, MONTGOMERY_ONE(), 0, bX0Mont, bX1Mont, bY0Mont, bY1Mont, MONTGOMERY_ONE(), 0) + + c00, c01, c10, c11 := g2OutOfJacobian(c00, c01, c10, c11, c20, c21) + + c00 := outOfMontgomeryForm(c00) + c01 := outOfMontgomeryForm(c01) + c10 := outOfMontgomeryForm(c10) + c11 := outOfMontgomeryForm(c11) + + mstore(0, c00) + mstore(32, c01) + mstore(64, c10) + mstore(96, c11) + return(0, 128) + } + } +} diff --git a/.test-node-subtree/etc/system-contracts/contracts/precompiles/EcMulG2.yul b/.test-node-subtree/etc/system-contracts/contracts/precompiles/EcMulG2.yul new file mode 100644 index 00000000..8069a1c3 --- /dev/null +++ b/.test-node-subtree/etc/system-contracts/contracts/precompiles/EcMulG2.yul @@ -0,0 +1,611 @@ +object "EcMulG2" { + code { } + object "EcMulG2_deployed" { + code { + // CONSTANTS + + /// @notice Constant function for value one in Montgomery form. + /// @dev This value was precomputed using Python. + /// @return m_one The value one in Montgomery form. + function MONTGOMERY_ONE() -> m_one { + m_one := 6350874878119819312338956282401532409788428879151445726012394534686998597021 + } + + /// @notice Constant function for the pre-computation of R^2 % N for the Montgomery REDC algorithm. + /// @dev R^2 is the Montgomery residue of the value 2^512. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further detals. + /// @dev This value was precomputed using Python. + /// @return ret The value R^2 modulus the curve group order. + function R2_MOD_P() -> ret { + ret := 3096616502983703923843567936837374451735540968419076528771170197431451843209 + } + + /// @notice Constant function for the alt_bn128 group order. + /// @dev See https://eips.ethereum.org/EIPS/eip-196 for further details. + /// @return ret The alt_bn128 group order. + function P() -> ret { + ret := 21888242871839275222246405745257275088696311157297823662689037894645226208583 + } + + /// @notice Constant function for the pre-computation of N' for the Montgomery REDC algorithm. + /// @dev N' is a value such that NN' = -1 mod R, with N being the curve group order. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further detals. + /// @dev This value was precomputed using Python. + /// @return ret The value N'. + function N_PRIME() -> ret { + ret := 111032442853175714102588374283752698368366046808579839647964533820976443843465 + } + + /// @notice constant function for the coeffitients of the sextic twist of the BN256 curve. + /// @dev E': y' ** 2 = x' ** 3 + 3 / (3 + u) + /// @dev the curve E' is defined over Fp2 elements. + /// @dev See https://hackmd.io/@jpw/bn254#Twists for further details. + /// @return coefficients of the sextic twist of the BN256 curve + function MONTGOMERY_TWISTED_CURVE_COEFFS() -> z0, z1 { + z0 := 16772280239760917788496391897731603718812008455956943122563801666366297604776 + z1 := 568440292453150825972223760836185707764922522371208948902804025364325400423 + } + + // HELPER FUNCTIONS + + /// @dev Executes the `precompileCall` opcode. + function precompileCall(precompileParams, gasToBurn) -> ret { + // Compiler simulation for calling `precompileCall` opcode + ret := verbatim_2i_1o("precompile", precompileParams, gasToBurn) + } + + /// @notice Burns remaining gas until revert. + /// @dev This function is used to burn gas in the case of a failed precompile call. + function burnGas() { + // Precompiles that do not have a circuit counterpart + // will burn the provided gas by calling this function. + precompileCall(0, gas()) + } + + /// @notice Calculate the bit length of a number. + /// @param x The number to calculate the bit length of. + /// @return ret The bit length of the number. + function bitLen(x) -> ret { + ret := 0 + for {} x {} { + ret := add(ret, 1) + x := shr(1, x) + } + } + + /// @notice Checks if the bit of a number at a given index is 1. + /// @dev The index is counted from the right, starting at 0. + /// @param index The index of the bit to check. + /// @param n The number to check the bit of. + /// @return ret The value of the bit at the given index. + function checkBit(index, n) -> ret { + ret := and(shr(index, n), 1) + } + + // MONTGOMERY + + /// @notice Computes the inverse in Montgomery Form of a number in Montgomery Form. + /// @dev Reference: https://github.com/lambdaclass/lambdaworks/blob/main/math/src/field/fields/montgomery_backed_prime_fields.rs#L169 + /// @dev Let `base` be a number in Montgomery Form, then base = a*R mod P() being `a` the base number (not in Montgomery Form) + /// @dev Let `inv` be the inverse of a number `a` in Montgomery Form, then inv = a^(-1)*R mod P() + /// @dev The original binary extended euclidean algorithms takes a number a and returns a^(-1) mod N + /// @dev In our case N is P(), and we'd like the input and output to be in Montgomery Form (a*R mod P() + /// @dev and a^(-1)*R mod P() respectively). + /// @dev If we just pass the input as a number in Montgomery Form the result would be a^(-1)*R^(-1) mod P(), + /// @dev but we want it to be a^(-1)*R mod P(). + /// @dev For that, we take advantage of the algorithm's linearity and multiply the result by R^2 mod P() + /// @dev to get R^2*a^(-1)*R^(-1) mod P() = a^(-1)*R mod P() as the desired result in Montgomery Form. + /// @dev `inv` takes the value of `b` or `c` being the result sometimes `b` and sometimes `c`. In paper + /// @dev multiplying `b` or `c` by R^2 mod P() results on starting their values as b = R2_MOD_P() and c = 0. + /// @param base A number `a` in Montgomery Form, then base = a*R mod P(). + /// @return inv The inverse of a number `a` in Montgomery Form, then inv = a^(-1)*R mod P(). + function binaryExtendedEuclideanAlgorithm(base) -> inv { + let modulus := P() + let u := base + let v := modulus + // Avoids unnecessary reduction step. + let b := R2_MOD_P() + let c := 0 + + for {} and(iszero(eq(u, 1)), iszero(eq(v, 1))) {} { + for {} iszero(and(u, 1)) {} { + u := shr(1, u) + let current := b + switch and(current, 1) + case 0 { + b := shr(1, b) + } + case 1 { + b := shr(1, add(b, modulus)) + } + } + + for {} iszero(and(v, 1)) {} { + v := shr(1, v) + let current := c + switch and(current, 1) + case 0 { + c := shr(1, c) + } + case 1 { + c := shr(1, add(c, modulus)) + } + } + + switch gt(v, u) + case 0 { + u := sub(u, v) + if lt(b, c) { + b := add(b, modulus) + } + b := sub(b, c) + } + case 1 { + v := sub(v, u) + if lt(c, b) { + c := add(c, modulus) + } + c := sub(c, b) + } + } + + switch eq(u, 1) + case 0 { + inv := c + } + case 1 { + inv := b + } + } + + /// @notice Computes an addition and checks for overflow. + /// @param augend The value to add to. + /// @param addend The value to add. + /// @return sum The sum of the two values. + /// @return overflowed True if the addition overflowed, false otherwise. + function overflowingAdd(augend, addend) -> sum, overflowed { + sum := add(augend, addend) + overflowed := lt(sum, augend) + } + + /// @notice Retrieves the highest half of the multiplication result. + /// @param multiplicand The value to multiply. + /// @param multiplier The multiplier. + /// @return ret The highest half of the multiplication result. + function getHighestHalfOfMultiplication(multiplicand, multiplier) -> ret { + ret := verbatim_2i_1o("mul_high", multiplicand, multiplier) + } + + /// @notice Implementation of the Montgomery reduction algorithm (a.k.a. REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm + /// @param lowestHalfOfT The lowest half of the value T. + /// @param higherHalfOfT The higher half of the value T. + /// @return S The result of the Montgomery reduction. + function REDC(lowest_half_of_T, higher_half_of_T) -> S { + let q := mul(lowest_half_of_T, N_PRIME()) + let a_high := add(higher_half_of_T, getHighestHalfOfMultiplication(q, P())) + let a_low, overflowed := overflowingAdd(lowest_half_of_T, mul(q, P())) + if overflowed { + a_high := add(a_high, 1) + } + S := a_high + if iszero(lt(a_high, P())) { + S := sub(a_high, P()) + } + } + + /// @notice Encodes a field element into the Montgomery form using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on transforming a field element into the Montgomery form. + /// @param a The field element to encode. + /// @return ret The field element in Montgomery form. + function intoMontgomeryForm(a) -> ret { + let hi := getHighestHalfOfMultiplication(a, R2_MOD_P()) + let lo := mul(a, R2_MOD_P()) + ret := REDC(lo, hi) + } + + /// @notice Decodes a field element out of the Montgomery form using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on transforming a field element out of the Montgomery form. + /// @param m The field element in Montgomery form to decode. + /// @return ret The decoded field element. + function outOfMontgomeryForm(m) -> ret { + let higher_half_of_m := 0 + let lowest_half_of_m := m + ret := REDC(lowest_half_of_m, higher_half_of_m) + } + + /// @notice Computes the Montgomery addition. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param augend The augend in Montgomery form. + /// @param addend The addend in Montgomery form. + /// @return ret The result of the Montgomery addition. + function montgomeryAdd(augend, addend) -> ret { + ret := add(augend, addend) + if iszero(lt(ret, P())) { + ret := sub(ret, P()) + } + } + + /// @notice Computes the Montgomery subtraction. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param minuend The minuend in Montgomery form. + /// @param subtrahend The subtrahend in Montgomery form. + /// @return ret The result of the Montgomery addition. + function montgomerySub(minuend, subtrahend) -> ret { + ret := montgomeryAdd(minuend, sub(P(), subtrahend)) + } + + /// @notice Computes the Montgomery multiplication using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param multiplicand The multiplicand in Montgomery form. + /// @param multiplier The multiplier in Montgomery form. + /// @return ret The result of the Montgomery multiplication. + function montgomeryMul(multiplicand, multiplier) -> ret { + let higher_half_of_product := getHighestHalfOfMultiplication(multiplicand, multiplier) + let lowest_half_of_product := mul(multiplicand, multiplier) + ret := REDC(lowest_half_of_product, higher_half_of_product) + } + + /// @notice Computes the Montgomery modular inverse skipping the Montgomery reduction step. + /// @dev The Montgomery reduction step is skept because a modification in the binary extended Euclidean algorithm is used to compute the modular inverse. + /// @dev See the function `binaryExtendedEuclideanAlgorithm` for further details. + /// @param a The field element in Montgomery form to compute the modular inverse of. + /// @return invmod The result of the Montgomery modular inverse (in Montgomery form). + function montgomeryModularInverse(a) -> invmod { + invmod := binaryExtendedEuclideanAlgorithm(a) + } + + // G2 ARITHMETICS + + /// @notice Checks if a coordinate is on the curve group order. + /// @dev A coordinate is on the curve group order if it is on the range [0, curveFieldOrder). + /// @param coordinate The coordinate to check. + /// @return ret True if the coordinate is in the range, false otherwise. + function g2CoordinateIsOnFieldOrder(x0, x1) -> ret { + ret := and(lt(x0, P()), lt(x1, P())) + } + + /// @notice Checks if a G2 point in affine coordinates is the point at infinity. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev in Affine coordinates the point represents the infinity if both coordinates are 0. + /// @param x0, x1 The x coordinate to check. + /// @param y0, y1 The y coordinate to check. + /// @return ret True if the point is the point at infinity, false otherwise. + function g2AffinePointIsInfinity(x0, x1, y0, y1) -> ret { + ret := iszero(or(or(x0, x1), or(y0, y1))) + } + + /// @notice Checks if a G2 point in affine coordinates belongs to the twisted curve. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev in Affine coordinates the point belongs to the curve if it satisfies the equation: y^3 = x^2 + 3/(9+u). + /// @dev See https://hackmd.io/@jpw/bn254#Twists for further details. + /// @param x0, x1 The x coordinate to check. + /// @param y0, y1 The y coordinate to check. + /// @return ret True if the point is in the curve, false otherwise. + function g2AffinePointIsOnCurve(x0, x1, y0, y1) -> ret { + let a0, a1 := MONTGOMERY_TWISTED_CURVE_COEFFS() + let b0, b1 := fp2Mul(x0, x1, x0, x1) + b0, b1 := fp2Mul(b0, b1, x0, x1) + b0, b1 := fp2Add(b0, b1, a0, a1) + let c0, c1 := fp2Mul(y0, y1, y0, y1) + ret := and(eq(b0, c0), eq(b1, c1)) + } + + /// @notice Add two g2 points represented in jacobian coordinates. + /// @dev The coordinates must be encoded in Montgomery form. + /// @param a_x0, a_x1 The x coordinate of the first point. + /// @param a_y0, a_y1 The y coordinate of the first point. + /// @param a_z0, a_z1 The z coordinate of the first point. + /// @param b_x0, b_x1 The x coordinate of the second point. + /// @param b_y0, b_y1 The y coordinate of the second point. + /// @param b_z0, b_z1 The z coordinate of the second point. + /// @return c00, c01, c10, c11, c20, c21 The coordinates of the added points. + function g2JacobianAdd(xq0, xq1, yq0, yq1, zq0, zq1, xr0, xr1, yr0, yr1, zr0, zr1) -> c00, c01, c10, c11, c20, c21 { + // Check for infinity in projective coordinates is the same as jacobian + let qIsInfinity := g2ProjectivePointIsInfinity(xq0, xq1, yq0, yq1, zq0, zq1) + let rIsInfinity := g2ProjectivePointIsInfinity(xr0, xr1, yr0, yr1, zr0, zr1) + if and(rIsInfinity, qIsInfinity) { + // Infinity + Infinity = Infinity + leave + } + if rIsInfinity { + // Infinity + P = P + c00 := xq0 + c01 := xq1 + c10 := yq0 + c11 := yq1 + c20 := zq0 + c21 := zq1 + leave + } + if qIsInfinity { + // P + Infinity = P + c00 := xr0 + c01 := xr1 + c10 := yr0 + c11 := yr1 + c20 := zr0 + c21 := zr1 + leave + } + + // Z1Z1 = Z1^2 + let zqzq0, zqzq1 := fp2Mul(zq0, zq1, zq0, zq1) + // Z2Z2 = Z2^2 + let zrzr0, zrzr1 := fp2Mul(zr0, zr1, zr0, zr1) + // U1 = X1*Z2Z2 + let u0, u1 := fp2Mul(xq0, xq1, zrzr0, zrzr1) + // U2 = X2*Z1Z1 + let u2, u3 := fp2Mul(xr0, xr1, zqzq0, zqzq1) + // t0 = Z2*Z2Z2 + let t0, t1 := fp2Mul(zr0, zr1, zrzr0, zrzr1) + // S1 = Y1*t0 + let s0, s1 := fp2Mul(yq0, yq1, t0, t1) + // t1 = Z1*Z1Z1 + let t2, t3 := fp2Mul(zq0, zq1, zqzq0, zqzq1) + // S2 = Y2*t1 + let s2, s3 := fp2Mul(yr0, yr1, t2, t3) + // H = U2-U1 + let h0, h1 := fp2Sub(u2, u3, u0, u1) + // t2 = 2*H + let t4, t5 := fp2Add(h0, h1, h0, h1) + // I = t2^2 + let i0, i1 := fp2Mul(t4, t5, t4, t5) + // J = H*I + let j0, j1 := fp2Mul(h0, h1, i0, i1) + // t3 = S2-S1 + let t6, t7 := fp2Sub(s2, s3, s0, s1) + // r = 2*t3 + let r0, r1 := fp2Add(t6, t7, t6, t7) + // V = U1*I + let v0, v1 := fp2Mul(u0, u1, i0, i1) + // t4 = r^2 + let t8, t9 := fp2Mul(r0, r1, r0, r1) + // t5 = 2*V + let t10, t11 := fp2Add(v0, v1, v0, v1) + // t6 = t4-J + let t12, t13 := fp2Sub(t8, t9, j0, j1) + // X3 = t6-t5 + c00, c01 := fp2Sub(t12, t13, t10, t11) + // t7 = V-X3 + let t14, t15 := fp2Sub(v0, v1, c00, c01) + // t8 = S1*J + let t16, t17 := fp2Mul(s0, s1, j0, j1) + // t9 = 2*t8 + let t18, t19 := fp2Add(t16, t17, t16, t17) + // t10 = r*t7 + let t20, t21 := fp2Mul(r0, r1, t14, t15) + // Y3 = t10-t9 + c10, c11 := fp2Sub(t20, t21, t18, t19) + // t11 = Z1+Z2 + let t22, t23 := fp2Add(zq0, zq1, zr0, zr1) + // t12 = t11^2 + let t24, t25 := fp2Mul(t22, t23, t22, t23) + // t13 = t12-Z1Z1 + let t26, t27 := fp2Sub(t24, t25, zqzq0, zqzq1) + // t14 = t13-Z2Z2 + let t28, t29 := fp2Sub(t26, t27, zrzr0, zrzr1) + // Z3 = t14*H + c20, c21 := fp2Mul(t28, t29, h0, h1) + } + + /// @notice Double a g2 point represented in jacobian coordinates. + /// @dev The coordinates must be encoded in Montgomery form. + /// @param a_x0, a_x1 The x coordinate of the point. + /// @param a_y0, a_y1 The y coordinate of the point. + /// @param a_z0, a_z1 The z coordinate of the point. + /// @return c00, c01, c10, c11, c20, c21 The coordinates of the doubled point. + function g2JacobianDouble(xp0, xp1, yp0, yp1, zp0, zp1) -> xr0, xr1, yr0, yr1, zr0, zr1 { + let a00, a01 := fp2Mul(xp0, xp1, xp0, xp1) + let b00, b01 := fp2Mul(yp0, yp1, yp0, yp1) + let c00, c01 := fp2Mul(b00, b01, b00, b01) + let t00, t01 := fp2Add(xp0, xp1, b00, b01) + let t10, t11 := fp2Mul(t00, t01, t00, t01) + let t20, t21 := fp2Sub(t10, t11, a00, a01) + let t30, t31 := fp2Sub(t20, t21, c00, c01) + let d00, d01 := fp2Add(t30, t31, t30, t31) + let e00, e01 := fp2Add(a00, a01, a00, a01) + e00, e01 := fp2Add(e00, e01, a00, a01) + let f00, f01 := fp2Mul(e00, e01, e00, e01) + let t40, t41 := fp2Add(d00, d01, d00, d01) + xr0, xr1 := fp2Sub(f00, f01, t40, t41) + let t50, t51 := fp2Sub(d00, d01, xr0, xr1) + let t60, t61 := fp2Add(c00, c01, c00, c01) + t60, t61 := fp2Add(t60, t61, t60, t61) + t60, t61 := fp2Add(t60, t61, t60, t61) + let t70, t71 := fp2Mul(e00, e01, t50, t51) + yr0, yr1 := fp2Sub(t70, t71, t60, t61) + let t80, t81 := fp2Mul(yp0, yp1, zp0, zp1) + zr0, zr1 := fp2Add(t80, t81, t80, t81) + } + + + /// @notice Computes the affine coordinates from Jacobian. + /// @param x0, x1 The coefficients of the x coordinate. + /// @param y0, y1 The coefficients of the y coordinate. + /// @param z0, z1 The coefficients of the z coordinate. + /// @return c00, c01, c10, c11 The coefficients of the point in affine coordinates. + function g2OutOfJacobian(x0, x1, y0, y1, z0, z1) -> c00, c01, c10, c11 { + let z0Square, z1Square := fp2Mul(z0, z1, z0, z1) + let z0Cube, z1Cube := fp2Mul(z0Square, z1Square, z0, z1) + let t0, t1 := fp2Inv(z0Square, z1Square) + let t2, t3 := fp2Inv(z0Cube, z1Cube) + c00, c01 := fp2Mul(x0, x1, t0, t1) + c10, c11 := fp2Mul(y0, y1, t2, t3) + } + + /// @notice Checks if a G2 point in projective coordinates is the point at infinity. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev A projective point is at infinity if the z coordinate is (0, 0). + /// @param x0, x1 The x coordinate of the point. + /// @param y0, y1 The y coordinate of the point. + /// @param z0, z1 The z coordinate of the point. + /// @return ret True if the point is the point at infinity, false otherwise. + function g2ProjectivePointIsInfinity(x0, x1, y0, y1, z0, z1) -> ret { + ret := iszero(or(z0, z1)) + } + + // FP2 ARITHMETHICS + + /// @notice Computes the sum of two Fp2 elements. + /// @dev Algorithm 5 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the A element to sum. + /// @param b00, b01 The coefficients of the B element to sum. + /// @return c00, c01 The coefficients of the element C = A + B. + function fp2Add(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomeryAdd(a00, b00) + c01 := montgomeryAdd(a01, b01) + } + + /// @notice Computes the subtraction of two Fp2 elements. + /// @dev Algorithm 6 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the minuend A. + /// @param b00, b01 The coefficients of the subtrahend B. + /// @return c00, c01 The coefficients of the element C = A - B. + function fp2Sub(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomerySub(a00, b00) + c01 := montgomerySub(a01, b01) + } + + /// @notice Computes the multiplication between a Fp2 element a Fp element. + /// @dev Algorithm 7 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @param scalar The value of the Fp element k. + /// @return c00, c01 The coefficients of the element C = k * A. + function fp2ScalarMul(a00, a01, scalar) -> c00, c01 { + c00 := montgomeryMul(a00, scalar) + c01 := montgomeryMul(a01, scalar) + } + + /// @notice Computes the multiplication between two Fp2 elements. + /// @dev Algorithm 7 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @param a00, a01 The coefficients of the Fp2 element B. + /// @return c00, c01 The coefficients of the element C = A * B. + function fp2Mul(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomerySub(montgomeryMul(a00, b00), montgomeryMul(a01, b01)) + c01 := montgomeryAdd(montgomeryMul(a00, b01), montgomeryMul(a01, b00)) + } + + /// @notice Computes the negative of a Fp2 elements. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @return c00, c01 The coefficients of the element C = -A. + function fp2Neg(a00, a01) -> c00, c01 { + c00, c01 := fp2Sub(0, 0, a00, a01) + } + + /// @notice Computes the inverse of a Fp2 element. + /// @dev Algorithm 8 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @return c00, c01 The coefficients of the element C = A^(-1). + function fp2Inv(a00, a01) -> c00, c01 { + let t0 := montgomeryMul(a00, a00) + let t1 := montgomeryMul(a01, a01) + t0 := montgomeryAdd(t0, t1) + t1 := montgomeryModularInverse(t0) + c00 := montgomeryMul(a00, t1) + c01 := montgomerySub(0, montgomeryMul(a01, t1)) + } + + // FALLBACK + + // Retrieve the coordinates from the calldata + let aX0 := calldataload(0) + let aX1 := calldataload(32) + let aY0 := calldataload(64) + let aY1 := calldataload(96) + + if iszero(and(g2CoordinateIsOnFieldOrder(aX0, aX1), g2CoordinateIsOnFieldOrder(aY0, aY1))) { + burnGas() + } + + if g2AffinePointIsInfinity(aX0, aX1, aY0, aY1) { + // Infinity * scalar = Infinity + mstore(0, 0) + mstore(32, 0) + mstore(64, 0) + mstore(96, 0) + return(0, 128) + } + + let aX0Mont := intoMontgomeryForm(aX0) + let aX1Mont := intoMontgomeryForm(aX1) + let aY0Mont := intoMontgomeryForm(aY0) + let aY1Mont := intoMontgomeryForm(aY1) + + // Ensure that the point is in the curve. + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, aY0Mont, aY1Mont)) { + burnGas() + } + + // Retrieve scalar from the calldata + let scalar := calldataload(128) + + if eq(scalar, 0) { + // P * 0 = Infinity + mstore(0, 0) + mstore(32, 0) + mstore(64, 0) + mstore(96, 0) + return(0, 128) + } + if eq(scalar, 1) { + // P * 1 = P + mstore(0, aX0) + mstore(32, aX1) + mstore(64, aY0) + mstore(96, aY1) + return(0, 128) + } + + if eq(scalar, 2) { + let c00, c01, c10, c11, c20, c21 := g2JacobianDouble(aX0Mont, aX1Mont, aY0Mont, aY1Mont, MONTGOMERY_ONE(), 0) + + c00, c01, c10, c11 := g2OutOfJacobian(c00, c01, c10, c11, c20, c21) + + c00 := outOfMontgomeryForm(c00) + c01 := outOfMontgomeryForm(c01) + c10 := outOfMontgomeryForm(c10) + c11 := outOfMontgomeryForm(c11) + + mstore(0, c00) + mstore(32, c01) + mstore(64, c10) + mstore(96, c11) + return(0, 128) + } + + let scalarBitIndex := bitLen(scalar) + + let c00 := 0 + let c01 := 0 + let c10 := MONTGOMERY_ONE() + let c11 := 0 + let c20 := 0 + let c21 := 0 + + for {} scalarBitIndex {} { + scalarBitIndex := sub(scalarBitIndex, 1) + c00, c01, c10, c11, c20, c21 := g2JacobianDouble(c00, c01, c10, c11, c20, c21) + let bitindex := checkBit(scalarBitIndex, scalar) + if bitindex { + c00, c01, c10, c11, c20, c21 := g2JacobianAdd(aX0Mont, aX1Mont, aY0Mont, aY1Mont, MONTGOMERY_ONE(), 0, c00, c01, c10, c11, c20, c21) + } + } + + c00, c01, c10, c11 := g2OutOfJacobian(c00, c01, c10, c11, c20, c21) + + c00 := outOfMontgomeryForm(c00) + c01 := outOfMontgomeryForm(c01) + c10 := outOfMontgomeryForm(c10) + c11 := outOfMontgomeryForm(c11) + + + mstore(0, c00) + mstore(32, c01) + mstore(64, c10) + mstore(96, c11) + return(0, 128) + } + } +} diff --git a/.test-node-subtree/src/deps/contracts/EcAddG2.yul.zbin b/.test-node-subtree/src/deps/contracts/EcAddG2.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..649040e30024bd56d0d5d29d9905eb4287a23341 GIT binary patch literal 17056 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 literal 0 HcmV?d00001 diff --git a/.test-node-subtree/src/deps/contracts/EcMulG2.yul.zbin b/.test-node-subtree/src/deps/contracts/EcMulG2.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..c8da2ba9696ae7306626b9181b5358f21aa5a5fa GIT binary patch literal 17184 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 x Date: Thu, 29 Feb 2024 10:57:18 -0300 Subject: [PATCH 2/2] Squashed '.test-node-subtree/' changes from fb635d1..814ae72 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 814ae72 Update subtree with new precompiles f832eb9 Merge pull request #226 from lambdaclass/fix-subtree 9031cb5 Update subtree 3e5f82a Merge commit '55210e4632566a4f74503d83aed246b7a4e69233' as '.test-node-subtree' 3e386d4 Remove old subtree 16c494e Add ecAddG2 precompile (#211) 787f7fe Add ecAddG2 precompile (#211) 2fdb9d0 Add ecMulG2 precompile (#220) 9469bb6 Add ecMulG2 precompile (#220) 0e8e9e1 Update contracts in subtree (#218) f5e645b Update contracts in subtree (#218) 5ae9408 Makefile fixes (#217) d9c5563 Subtree era test node (#215) 73e2469 Subtree era test node (#215) fc8fe32 Add ignore to test that is stopping the test suite (#213) 9bfb1c3 Improve makefile (#212) fe92e93 Fix repo setup (#210) 0d6c0f2 update gas_consumption (#206) 52be222 Update docs (#204) 7be1914 Update README.md 80f543f P256verify audit fixes (#200) d047659 Add verifier integration test (#179) a7a5ed4 `modexp` big integers arithmetics (#124) bee001d Add P256Verify tests (#178) 2753d37 Subgroup check for points in `G2` in `ecPairing` (#92) 0e961c2 Update Readme and gas tables (#174) 3067c76 fix projectiveAdd (#173) 9118195 adds shamir´s trick (#172) 710813d Implement strauss shamir trick (#171) ea7c283 [CI] build precompiles (#165) 23fb8d0 update submodules (#167) b7d1311 secp256k1VERIFY Precompile (#160) 63f0214 add p256 s input check (#166) 87186ca add r check (#163) f272068 Update `README.md` (#162) 2da5282 P256VERIFY precompile contract (#55) 228e0e3 Add your own precompiles guide (#152) b23a364 Replace invalid call to burnGas (#157) b01b3c1 Optimize first iterations of miller loop (#119) 6347ae1 Add edge case tests for modexp precompile (#109) dc3a750 Replace addmod/submod with Montgomery counterparts (#145) a891bb8 Remove unnecessary checks in `ecAdd` (#144) 3044527 Store zero before returning in ecmul trivial cases (#123) cc25b14 Add documentation for BEE (#120) 6ff795d Add extra checks to fix some edge cases (#118) 062fbcf Document montgomeryAdd and montgomerySub (#116) f7430f3 Delete precompiles/Montgomery.yul (#101) f660dca Improve `montgomeryAdd` implementation (#113) e155896 remove_switch_in_projectiveIntoAffine (#115) 637ea8e Make `modexp` consistent with the other precompiles (#117) 76bef0f ecPairing (#53) 724a49b Replace `burnGas` with `invalid` (#105) fa1dc58 Apply audit changes to ecAdd (#102) 8173484 Add CI (#18) 95e75d2 improves_binaryExtendedEuclideanAlgorithm (#81) 2c1d38d Removes unnecessary handling of a special case on addition. (#77) 56e342d improves overflowAdd (#80) f7e551d Add tests for points outside the field (#79) 62cf99f Removes_unnecessary_checking_in_ecMul (#78) 1f1b863 Fix field order naming (#75) 1e2b0e4 fix point comparison (#74) f203e46 remove constant funcitons (#73) f376abf implement suggested optimization (#70) d9bed40 remove_unnecessary_mod (#71) e9bf3f2 removeunused functions (#72) cf7fbab Remove Playground.yul (#54) e2e7e5e Python implementation for bn254 (alt_bn128) pairing (#16) de71908 Fix format for section separators (#39) ff93e4d Update precompiles to latest improvements (#38) b72ee59 Clean code commets and console_log calls on main (#34) 75ac242 Remove playground crate (turned out to be useless) (#28) 8ccbe1d Add basic documentation (#20) 5c2c9f8 Update README.md e2f7d55 Update README.md (#27) c52393c Update README.md 281af62 Update README.md 4b90112 Update README.md fdbcdc3 Update LICENSE (#26) 5d0380a Update README.md d571657 Setup repo for precompile development (#17) 5b99326 Add Ethereum Execution Tests (#5) 8d1d6ae Update EcAdd.yul 0bff51f Update ModExp.yul a3b2e1a Update EcMul.yul 87bf237 [Feature] `ecAdd` precompile (#1) 3b1bcfd [Feature] `ecMul` precompile (#2) f7eae0d [Feature] `modexp` precompile (#3) bb2b95f update readme 2036029 Update README.md e50177f Repo cleanup (#4) aae80c5 cargo init w/ extra steps fcd4c44 Precompiles scaffolding fc42e54 Update README.md 50f4b1e Initial commit git-subtree-dir: .test-node-subtree git-subtree-split: 814ae72cc5cf1d1842b3ed4ceeb8b78de43baf9c --- .../contracts/precompiles/EcAdd.yul | 46 +- .../contracts/precompiles/EcAddG2.yul | 602 +++++++++++++++++ .../contracts/precompiles/EcMul.yul | 28 +- .../contracts/precompiles/EcMulG2.yul | 611 ++++++++++++++++++ scripts/refresh_contracts.sh | 2 +- src/deps/contracts/EcAdd.yul.zbin | Bin 6304 -> 3808 bytes src/deps/contracts/EcAddG2.yul.zbin | Bin 0 -> 17056 bytes src/deps/contracts/EcMul.yul.zbin | Bin 9952 -> 6880 bytes src/deps/contracts/EcMulG2.yul.zbin | Bin 0 -> 17184 bytes src/deps/contracts/EcPairing.yul.zbin | Bin 148256 -> 398240 bytes src/deps/contracts/Ecrecover.yul.zbin | Bin 544 -> 544 bytes src/deps/contracts/EventWriter.yul.zbin | Bin 800 -> 736 bytes src/deps/contracts/Keccak256.yul.zbin | Bin 992 -> 1056 bytes src/deps/contracts/ModExp.yul.zbin | Bin 11488 -> 11296 bytes src/deps/contracts/P256VERIFY.yul.zbin | Bin 35552 -> 37088 bytes src/deps/contracts/SHA256.yul.zbin | Bin 736 -> 736 bytes src/deps/contracts/fee_estimate.yul.zbin | Bin 79136 -> 68832 bytes .../fee_estimate_impersonating.yul.zbin | Bin 78944 -> 68576 bytes src/deps/contracts/gas_test.yul.zbin | Bin 78112 -> 67296 bytes src/deps/contracts/playground_batch.yul.zbin | Bin 79456 -> 69024 bytes src/deps/contracts/proved_batch.yul.zbin | Bin 79008 -> 68256 bytes .../proved_batch_impersonating.yul.zbin | Bin 79648 -> 67552 bytes src/deps/contracts/secp256k1VERIFY.yul.zbin | Bin 37920 -> 28192 bytes src/deps/system_contracts.rs | 22 + 24 files changed, 1271 insertions(+), 40 deletions(-) create mode 100644 etc/system-contracts/contracts/precompiles/EcAddG2.yul create mode 100644 etc/system-contracts/contracts/precompiles/EcMulG2.yul create mode 100644 src/deps/contracts/EcAddG2.yul.zbin create mode 100644 src/deps/contracts/EcMulG2.yul.zbin diff --git a/etc/system-contracts/contracts/precompiles/EcAdd.yul b/etc/system-contracts/contracts/precompiles/EcAdd.yul index bfbac645..550e19ab 100644 --- a/etc/system-contracts/contracts/precompiles/EcAdd.yul +++ b/etc/system-contracts/contracts/precompiles/EcAdd.yul @@ -1,7 +1,5 @@ object "EcAdd" { - code { - return(0, 0) - } + code { } object "EcAdd_deployed" { code { //////////////////////////////////////////////////////////////// @@ -45,18 +43,18 @@ object "EcAdd" { ////////////////////////////////////////////////////////////////// /// @dev Executes the `precompileCall` opcode. - function precompileCall(precompileParams, gasToBurn) -> ret { - // Compiler simulation for calling `precompileCall` opcode - ret := verbatim_2i_1o("precompile", precompileParams, gasToBurn) - } + function precompileCall(precompileParams, gasToBurn) -> ret { + // Compiler simulation for calling `precompileCall` opcode + ret := verbatim_2i_1o("precompile", precompileParams, gasToBurn) + } /// @notice Burns remaining gas until revert. /// @dev This function is used to burn gas in the case of a failed precompile call. - function burnGas() { - // Precompiles that do not have a circuit counterpart - // will burn the provided gas by calling this function. - precompileCall(0, gas()) - } + function burnGas() { + // Precompiles that do not have a circuit counterpart + // will burn the provided gas by calling this function. + precompileCall(0, gas()) + } /// @notice Retrieves the highest half of the multiplication result. /// @param multiplicand The value to multiply. @@ -247,7 +245,7 @@ object "EcAdd" { /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. /// @param minuend The minuend in Montgomery form. /// @param subtrahend The subtrahend in Montgomery form. - /// @return ret The result of the Montgomery subtraction. + /// @return ret The result of the Montgomery addition. function montgomerySub(minuend, subtrahend) -> ret { ret := montgomeryAdd(minuend, sub(P(), subtrahend)) } @@ -300,7 +298,7 @@ object "EcAdd" { mstore(32, 0) return(0, 64) } - if and(p1IsInfinity, iszero(p2IsInfinity)) { + if p1IsInfinity { // Infinity + P = P // Ensure that the coordinates are between 0 and the field order. @@ -323,7 +321,7 @@ object "EcAdd" { mstore(32, y2) return(0, 64) } - if and(iszero(p1IsInfinity), p2IsInfinity) { + if p2IsInfinity { // P + Infinity = P // Ensure that the coordinates are between 0 and the field order. @@ -368,7 +366,7 @@ object "EcAdd" { let m_y2 := intoMontgomeryForm(y2) // Ensure that the points are in the curve (Y^2 = X^3 + 3). - if or(iszero(pointIsInCurve(m_x1, m_y1)), iszero(pointIsInCurve(m_x2, m_y2))) { + if iszero(pointIsInCurve(m_x1, m_y1)) { burnGas() } @@ -380,10 +378,6 @@ object "EcAdd" { return(0, 64) } - if and(eq(x1, x2), and(iszero(eq(y1, y2)), iszero(eq(y1, submod(0, y2, P()))))) { - burnGas() - } - if and(eq(x1, x2), eq(y1, y2)) { // P + P = 2P @@ -397,11 +391,11 @@ object "EcAdd" { // (3 * x1^2 + a) / (2 * y1) let x1_squared := montgomeryMul(x, x) - let slope := montgomeryDiv(addmod(x1_squared, addmod(x1_squared, x1_squared, P()), P()), addmod(y, y, P())) + let slope := montgomeryDiv(montgomeryAdd(x1_squared, montgomeryAdd(x1_squared, x1_squared)), montgomeryAdd(y, y)) // x3 = slope^2 - 2 * x1 - let x3 := submod(montgomeryMul(slope, slope), addmod(x, x, P()), P()) + let x3 := montgomerySub(montgomeryMul(slope, slope), montgomeryAdd(x, x)) // y3 = slope * (x1 - x3) - y1 - let y3 := submod(montgomeryMul(slope, submod(x, x3, P())), y, P()) + let y3 := montgomerySub(montgomeryMul(slope, montgomerySub(x, x3)), y) x3 := outOfMontgomeryForm(x3) y3 := outOfMontgomeryForm(y3) @@ -424,11 +418,11 @@ object "EcAdd" { } // (y2 - y1) / (x2 - x1) - let slope := montgomeryDiv(submod(y2, y1, P()), submod(x2, x1, P())) + let slope := montgomeryDiv(montgomerySub(y2, y1), montgomerySub(x2, x1)) // x3 = slope^2 - x1 - x2 - let x3 := submod(montgomeryMul(slope, slope), addmod(x1, x2, P()), P()) + let x3 := montgomerySub(montgomeryMul(slope, slope), montgomeryAdd(x1, x2)) // y3 = slope * (x1 - x3) - y1 - let y3 := submod(montgomeryMul(slope, submod(x1, x3, P())), y1, P()) + let y3 := montgomerySub(montgomeryMul(slope, montgomerySub(x1, x3)), y1) x3 := outOfMontgomeryForm(x3) y3 := outOfMontgomeryForm(y3) diff --git a/etc/system-contracts/contracts/precompiles/EcAddG2.yul b/etc/system-contracts/contracts/precompiles/EcAddG2.yul new file mode 100644 index 00000000..5f69ab67 --- /dev/null +++ b/etc/system-contracts/contracts/precompiles/EcAddG2.yul @@ -0,0 +1,602 @@ +object "EcAddG2" { + code { } + object "EcAddG2_deployed" { + code { + // CONSTANTS + + /// @notice Constant function for value one in Montgomery form. + /// @dev This value was precomputed using Python. + /// @return m_one The value one in Montgomery form. + function MONTGOMERY_ONE() -> m_one { + m_one := 6350874878119819312338956282401532409788428879151445726012394534686998597021 + } + + /// @notice Constant function for the pre-computation of R^2 % N for the Montgomery REDC algorithm. + /// @dev R^2 is the Montgomery residue of the value 2^512. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further detals. + /// @dev This value was precomputed using Python. + /// @return ret The value R^2 modulus the curve group order. + function R2_MOD_P() -> ret { + ret := 3096616502983703923843567936837374451735540968419076528771170197431451843209 + } + + /// @notice Constant function for the alt_bn128 group order. + /// @dev See https://eips.ethereum.org/EIPS/eip-196 for further details. + /// @return ret The alt_bn128 group order. + function P() -> ret { + ret := 21888242871839275222246405745257275088696311157297823662689037894645226208583 + } + + /// @notice Constant function for the pre-computation of N' for the Montgomery REDC algorithm. + /// @dev N' is a value such that NN' = -1 mod R, with N being the curve group order. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further detals. + /// @dev This value was precomputed using Python. + /// @return ret The value N'. + function N_PRIME() -> ret { + ret := 111032442853175714102588374283752698368366046808579839647964533820976443843465 + } + + /// @notice constant function for the coeffitients of the sextic twist of the BN256 curve. + /// @dev E': y' ** 2 = x' ** 3 + 3 / (3 + u) + /// @dev the curve E' is defined over Fp2 elements. + /// @dev See https://hackmd.io/@jpw/bn254#Twists for further details. + /// @return coefficients of the sextic twist of the BN256 curve + function MONTGOMERY_TWISTED_CURVE_COEFFS() -> z0, z1 { + z0 := 16772280239760917788496391897731603718812008455956943122563801666366297604776 + z1 := 568440292453150825972223760836185707764922522371208948902804025364325400423 + } + + // HELPER FUNCTIONS + + /// @dev Executes the `precompileCall` opcode. + function precompileCall(precompileParams, gasToBurn) -> ret { + // Compiler simulation for calling `precompileCall` opcode + ret := verbatim_2i_1o("precompile", precompileParams, gasToBurn) + } + + /// @notice Burns remaining gas until revert. + /// @dev This function is used to burn gas in the case of a failed precompile call. + function burnGas() { + // Precompiles that do not have a circuit counterpart + // will burn the provided gas by calling this function. + precompileCall(0, gas()) + } + + // MONTGOMERY + + /// @notice Computes the inverse in Montgomery Form of a number in Montgomery Form. + /// @dev Reference: https://github.com/lambdaclass/lambdaworks/blob/main/math/src/field/fields/montgomery_backed_prime_fields.rs#L169 + /// @dev Let `base` be a number in Montgomery Form, then base = a*R mod P() being `a` the base number (not in Montgomery Form) + /// @dev Let `inv` be the inverse of a number `a` in Montgomery Form, then inv = a^(-1)*R mod P() + /// @dev The original binary extended euclidean algorithms takes a number a and returns a^(-1) mod N + /// @dev In our case N is P(), and we'd like the input and output to be in Montgomery Form (a*R mod P() + /// @dev and a^(-1)*R mod P() respectively). + /// @dev If we just pass the input as a number in Montgomery Form the result would be a^(-1)*R^(-1) mod P(), + /// @dev but we want it to be a^(-1)*R mod P(). + /// @dev For that, we take advantage of the algorithm's linearity and multiply the result by R^2 mod P() + /// @dev to get R^2*a^(-1)*R^(-1) mod P() = a^(-1)*R mod P() as the desired result in Montgomery Form. + /// @dev `inv` takes the value of `b` or `c` being the result sometimes `b` and sometimes `c`. In paper + /// @dev multiplying `b` or `c` by R^2 mod P() results on starting their values as b = R2_MOD_P() and c = 0. + /// @param base A number `a` in Montgomery Form, then base = a*R mod P(). + /// @return inv The inverse of a number `a` in Montgomery Form, then inv = a^(-1)*R mod P(). + function binaryExtendedEuclideanAlgorithm(base) -> inv { + let modulus := P() + let u := base + let v := modulus + // Avoids unnecessary reduction step. + let b := R2_MOD_P() + let c := 0 + + for {} and(iszero(eq(u, 1)), iszero(eq(v, 1))) {} { + for {} iszero(and(u, 1)) {} { + u := shr(1, u) + let current := b + switch and(current, 1) + case 0 { + b := shr(1, b) + } + case 1 { + b := shr(1, add(b, modulus)) + } + } + + for {} iszero(and(v, 1)) {} { + v := shr(1, v) + let current := c + switch and(current, 1) + case 0 { + c := shr(1, c) + } + case 1 { + c := shr(1, add(c, modulus)) + } + } + + switch gt(v, u) + case 0 { + u := sub(u, v) + if lt(b, c) { + b := add(b, modulus) + } + b := sub(b, c) + } + case 1 { + v := sub(v, u) + if lt(c, b) { + c := add(c, modulus) + } + c := sub(c, b) + } + } + + switch eq(u, 1) + case 0 { + inv := c + } + case 1 { + inv := b + } + } + + /// @notice Computes an addition and checks for overflow. + /// @param augend The value to add to. + /// @param addend The value to add. + /// @return sum The sum of the two values. + /// @return overflowed True if the addition overflowed, false otherwise. + function overflowingAdd(augend, addend) -> sum, overflowed { + sum := add(augend, addend) + overflowed := lt(sum, augend) + } + + /// @notice Retrieves the highest half of the multiplication result. + /// @param multiplicand The value to multiply. + /// @param multiplier The multiplier. + /// @return ret The highest half of the multiplication result. + function getHighestHalfOfMultiplication(multiplicand, multiplier) -> ret { + ret := verbatim_2i_1o("mul_high", multiplicand, multiplier) + } + + /// @notice Implementation of the Montgomery reduction algorithm (a.k.a. REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm + /// @param lowestHalfOfT The lowest half of the value T. + /// @param higherHalfOfT The higher half of the value T. + /// @return S The result of the Montgomery reduction. + function REDC(lowest_half_of_T, higher_half_of_T) -> S { + let q := mul(lowest_half_of_T, N_PRIME()) + let a_high := add(higher_half_of_T, getHighestHalfOfMultiplication(q, P())) + let a_low, overflowed := overflowingAdd(lowest_half_of_T, mul(q, P())) + if overflowed { + a_high := add(a_high, 1) + } + S := a_high + if iszero(lt(a_high, P())) { + S := sub(a_high, P()) + } + } + + /// @notice Encodes a field element into the Montgomery form using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on transforming a field element into the Montgomery form. + /// @param a The field element to encode. + /// @return ret The field element in Montgomery form. + function intoMontgomeryForm(a) -> ret { + let hi := getHighestHalfOfMultiplication(a, R2_MOD_P()) + let lo := mul(a, R2_MOD_P()) + ret := REDC(lo, hi) + } + + /// @notice Decodes a field element out of the Montgomery form using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on transforming a field element out of the Montgomery form. + /// @param m The field element in Montgomery form to decode. + /// @return ret The decoded field element. + function outOfMontgomeryForm(m) -> ret { + let higher_half_of_m := 0 + let lowest_half_of_m := m + ret := REDC(lowest_half_of_m, higher_half_of_m) + } + + /// @notice Computes the Montgomery addition. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param augend The augend in Montgomery form. + /// @param addend The addend in Montgomery form. + /// @return ret The result of the Montgomery addition. + function montgomeryAdd(augend, addend) -> ret { + ret := add(augend, addend) + if iszero(lt(ret, P())) { + ret := sub(ret, P()) + } + } + + /// @notice Computes the Montgomery subtraction. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param minuend The minuend in Montgomery form. + /// @param subtrahend The subtrahend in Montgomery form. + /// @return ret The result of the Montgomery addition. + function montgomerySub(minuend, subtrahend) -> ret { + ret := montgomeryAdd(minuend, sub(P(), subtrahend)) + } + + /// @notice Computes the Montgomery multiplication using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param multiplicand The multiplicand in Montgomery form. + /// @param multiplier The multiplier in Montgomery form. + /// @return ret The result of the Montgomery multiplication. + function montgomeryMul(multiplicand, multiplier) -> ret { + let higher_half_of_product := getHighestHalfOfMultiplication(multiplicand, multiplier) + let lowest_half_of_product := mul(multiplicand, multiplier) + ret := REDC(lowest_half_of_product, higher_half_of_product) + } + + /// @notice Computes the Montgomery modular inverse skipping the Montgomery reduction step. + /// @dev The Montgomery reduction step is skept because a modification in the binary extended Euclidean algorithm is used to compute the modular inverse. + /// @dev See the function `binaryExtendedEuclideanAlgorithm` for further details. + /// @param a The field element in Montgomery form to compute the modular inverse of. + /// @return invmod The result of the Montgomery modular inverse (in Montgomery form). + function montgomeryModularInverse(a) -> invmod { + invmod := binaryExtendedEuclideanAlgorithm(a) + } + + // G2 ARITHMETICS + + /// @notice Checks if a coordinate is on the curve group order. + /// @dev A coordinate is on the curve group order if it is on the range [0, curveFieldOrder). + /// @param coordinate The coordinate to check. + /// @return ret True if the coordinate is in the range, false otherwise. + function g2CoordinateIsOnFieldOrder(x0, x1) -> ret { + ret := and(lt(x0, P()), lt(x1, P())) + } + + /// @notice Checks if a G2 point in affine coordinates is the point at infinity. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev in Affine coordinates the point represents the infinity if both coordinates are 0. + /// @param x0, x1 The x coordinate to check. + /// @param y0, y1 The y coordinate to check. + /// @return ret True if the point is the point at infinity, false otherwise. + function g2AffinePointIsInfinity(x0, x1, y0, y1) -> ret { + ret := iszero(or(or(x0, x1), or(y0, y1))) + } + + /// @notice Checks if a G2 point in affine coordinates belongs to the twisted curve. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev in Affine coordinates the point belongs to the curve if it satisfies the equation: y^3 = x^2 + 3/(9+u). + /// @dev See https://hackmd.io/@jpw/bn254#Twists for further details. + /// @param x0, x1 The x coordinate to check. + /// @param y0, y1 The y coordinate to check. + /// @return ret True if the point is in the curve, false otherwise. + function g2AffinePointIsOnCurve(x0, x1, y0, y1) -> ret { + let a0, a1 := MONTGOMERY_TWISTED_CURVE_COEFFS() + let b0, b1 := fp2Mul(x0, x1, x0, x1) + b0, b1 := fp2Mul(b0, b1, x0, x1) + b0, b1 := fp2Add(b0, b1, a0, a1) + let c0, c1 := fp2Mul(y0, y1, y0, y1) + ret := and(eq(b0, c0), eq(b1, c1)) + } + + /// @notice Add two g2 points represented in jacobian coordinates. + /// @dev The coordinates must be encoded in Montgomery form. + /// @param aX0, aX1 The x coordinate of the first point. + /// @param aY0, aY1 The y coordinate of the first point. + /// @param a_z0, a_z1 The z coordinate of the first point. + /// @param bX0, bX1 The x coordinate of the second point. + /// @param bY0, bY1 The y coordinate of the second point. + /// @param b_z0, b_z1 The z coordinate of the second point. + /// @return c00, c01, c10, c11, c20, c21 The coordinates of the added points. + function g2JacobianAdd(aX0, aX1, aY0, aY1, a_z0, a_z1, bX0, bX1, bY0, bY1, b_z0, b_z1) -> c00, c01, c10, c11, c20, c21 { + let aux0, aux1 := fp2Mul(a_z0, a_z1, a_z0, a_z1) + let aux2, aux3 := fp2Mul(b_z0, b_z1, b_z0, b_z1) + let u0, u1 := fp2Mul(aX0, aX1, aux2, aux3) + let u2, u3 := fp2Mul(bX0, bX1, aux0, aux1) + let t0, t1 := fp2Mul(b_z0, b_z1, aux2, aux3) + let s0, s1 := fp2Mul(aY0, aY1, t0, t1) + let t2, t3 := fp2Mul(a_z0, a_z1, aux0, aux1) + let s2, s3 := fp2Mul(bY0, bY1, t2, t3) + let h0, h1 := fp2Sub(u2, u3, u0, u1) + let t4, t5 := fp2Add(h0, h1, h0, h1) + let i0, i1 := fp2Mul(t4, t5, t4, t5) + let j0, j1 := fp2Mul(h0, h1, i0, i1) + let t6, t7 := fp2Sub(s2, s3, s0, s1) + let r0, r1 := fp2Add(t6, t7, t6, t7) + let v0, v1 := fp2Mul(u0, u1, i0, i1) + let t8, t9 := fp2Mul(r0, r1, r0, r1) + let t10, t11 := fp2Add(v0, v1, v0, v1) + let t12, t13 := fp2Sub(t8, t9, j0, j1) + c00, c01 := fp2Sub(t12, t13, t10, t11) + let t14, t15 := fp2Sub(v0, v1, c00, c01) + let t16, t17 := fp2Mul(s0, s1, j0, j1) + let t18, t19 := fp2Add(t16, t17, t16, t17) + let t20, t21 := fp2Mul(r0, r1, t14, t15) + c10, c11 := fp2Sub(t20, t21, t18, t19) + let t22, t23 := fp2Add(a_z0, a_z1, b_z0, b_z1) + let t24, t25 := fp2Mul(t22, t23, t22, t23) + let t26, t27 := fp2Sub(t24, t25, aux0, aux1) + let t28, t29 := fp2Sub(t26, t27, aux2, aux3) + c20, c21 := fp2Mul(t28, t29, h0, h1) + } + + /// @notice Double a g2 point represented in jacobian coordinates. + /// @dev The coordinates must be encoded in Montgomery form. + /// @param aX0, aX1 The x coordinate of the point. + /// @param aY0, aY1 The y coordinate of the point. + /// @param a_z0, a_z1 The z coordinate of the point. + /// @return c00, c01, c10, c11, c20, c21 The coordinates of the doubled point. + function g2JacobianDouble(xp0, xp1, yp0, yp1, zp0, zp1) -> xr0, xr1, yr0, yr1, zr0, zr1 { + let a00, a01 := fp2Mul(xp0, xp1, xp0, xp1) + let b00, b01 := fp2Mul(yp0, yp1, yp0, yp1) + let c00, c01 := fp2Mul(b00, b01, b00, b01) + let t00, t01 := fp2Add(xp0, xp1, b00, b01) + let t10, t11 := fp2Mul(t00, t01, t00, t01) + let t20, t21 := fp2Sub(t10, t11, a00, a01) + let t30, t31 := fp2Sub(t20, t21, c00, c01) + let d00, d01 := fp2Add(t30, t31, t30, t31) + let e00, e01 := fp2Add(a00, a01, a00, a01) + e00, e01 := fp2Add(e00, e01, a00, a01) + let f00, f01 := fp2Mul(e00, e01, e00, e01) + let t40, t41 := fp2Add(d00, d01, d00, d01) + xr0, xr1 := fp2Sub(f00, f01, t40, t41) + let t50, t51 := fp2Sub(d00, d01, xr0, xr1) + let t60, t61 := fp2Add(c00, c01, c00, c01) + t60, t61 := fp2Add(t60, t61, t60, t61) + t60, t61 := fp2Add(t60, t61, t60, t61) + let t70, t71 := fp2Mul(e00, e01, t50, t51) + yr0, yr1 := fp2Sub(t70, t71, t60, t61) + let t80, t81 := fp2Mul(yp0, yp1, zp0, zp1) + zr0, zr1 := fp2Add(t80, t81, t80, t81) + } + + + /// @notice Computes the affine coordinates from Jacobian. + /// @param x0, x1 The coefficients of the x coordinate. + /// @param y0, y1 The coefficients of the y coordinate. + /// @param z0, z1 The coefficients of the z coordinate. + /// @return c00, c01, c10, c11 The coefficients of the point in affine coordinates. + function g2OutOfJacobian(x0, x1, y0, y1, z0, z1) -> c00, c01, c10, c11 { + let z0Square, z1Square := fp2Mul(z0, z1, z0, z1) + let z0Cube, z1Cube := fp2Mul(z0Square, z1Square, z0, z1) + let t0, t1 := fp2Inv(z0Square, z1Square) + let t2, t3 := fp2Inv(z0Cube, z1Cube) + c00, c01 := fp2Mul(x0, x1, t0, t1) + c10, c11 := fp2Mul(y0, y1, t2, t3) + } + + // FP2 ARITHMETHICS + + /// @notice Computes the sum of two Fp2 elements. + /// @dev Algorithm 5 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the A element to sum. + /// @param b00, b01 The coefficients of the B element to sum. + /// @return c00, c01 The coefficients of the element C = A + B. + function fp2Add(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomeryAdd(a00, b00) + c01 := montgomeryAdd(a01, b01) + } + + /// @notice Computes the subtraction of two Fp2 elements. + /// @dev Algorithm 6 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the minuend A. + /// @param b00, b01 The coefficients of the subtrahend B. + /// @return c00, c01 The coefficients of the element C = A - B. + function fp2Sub(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomerySub(a00, b00) + c01 := montgomerySub(a01, b01) + } + + /// @notice Computes the multiplication between a Fp2 element a Fp element. + /// @dev Algorithm 7 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @param scalar The value of the Fp element k. + /// @return c00, c01 The coefficients of the element C = k * A. + function fp2ScalarMul(a00, a01, scalar) -> c00, c01 { + c00 := montgomeryMul(a00, scalar) + c01 := montgomeryMul(a01, scalar) + } + + /// @notice Computes the multiplication between two Fp2 elements. + /// @dev Algorithm 7 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @param a00, a01 The coefficients of the Fp2 element B. + /// @return c00, c01 The coefficients of the element C = A * B. + function fp2Mul(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomerySub(montgomeryMul(a00, b00), montgomeryMul(a01, b01)) + c01 := montgomeryAdd(montgomeryMul(a00, b01), montgomeryMul(a01, b00)) + } + + /// @notice Computes the negative of a Fp2 elements. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @return c00, c01 The coefficients of the element C = -A. + function fp2Neg(a00, a01) -> c00, c01 { + c00, c01 := fp2Sub(0, 0, a00, a01) + } + + /// @notice Computes the inverse of a Fp2 element. + /// @dev Algorithm 8 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @return c00, c01 The coefficients of the element C = A^(-1). + function fp2Inv(a00, a01) -> c00, c01 { + let t0 := montgomeryMul(a00, a00) + let t1 := montgomeryMul(a01, a01) + t0 := montgomeryAdd(t0, t1) + t1 := montgomeryModularInverse(t0) + c00 := montgomeryMul(a00, t1) + c01 := montgomerySub(0, montgomeryMul(a01, t1)) + } + + // FALLBACK + + // Retrieve the coordinates from the calldata + let aX0 := calldataload(0) + let aX1 := calldataload(32) + let aY0 := calldataload(64) + let aY1 := calldataload(96) + + let bX0 := calldataload(128) + let bX1 := calldataload(160) + let bY0 := calldataload(192) + let bY1 := calldataload(224) + + // Check if points are infinite + let aIsInfinity := g2AffinePointIsInfinity(aX0, aX1, aY0, aY1) + let bIsInfinity := g2AffinePointIsInfinity(bX0, bX1, bY0, bY1) + + if and(aIsInfinity, bIsInfinity) { + // Infinity + Infinity = Infinity + mstore(0, 0) + mstore(32, 0) + mstore(64, 0) + mstore(96, 0) + return(0, 128) + } + + if aIsInfinity { + // Infinity + B = B + + // Ensure that the coordinates are between 0 and the field order + if iszero(and(g2CoordinateIsOnFieldOrder(bX0, bX1), g2CoordinateIsOnFieldOrder(bY0, bY1))) { + burnGas() + } + + let bX0Mont := intoMontgomeryForm(bX0) + let bX1Mont := intoMontgomeryForm(bX1) + let bY0Mont := intoMontgomeryForm(bY0) + let bY1Mont := intoMontgomeryForm(bY1) + + // Ensure that the point is in the curve + if iszero(g2AffinePointIsOnCurve(bX0Mont, bX1Mont, bY0Mont, bY1Mont)) { + burnGas() + } + + mstore(0, bX0) + mstore(32, bX1) + mstore(64, bY0) + mstore(96, bY1) + return(0, 128) + } + + if bIsInfinity { + // A + Infinity = A + + // Ensure that the coordinates are between 0 and the field order + if iszero(and(g2CoordinateIsOnFieldOrder(aX0, aX1), g2CoordinateIsOnFieldOrder(aY0, aY1))) { + burnGas() + } + + let aX0Mont := intoMontgomeryForm(aX0) + let aX1Mont := intoMontgomeryForm(aX1) + let aY0Mont := intoMontgomeryForm(aY0) + let aY1Mont := intoMontgomeryForm(aY1) + + // Ensure that the point is in the curve + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, aY0Mont, aY1Mont)) { + burnGas() + } + + mstore(0, aX0) + mstore(32, aX1) + mstore(64, aY0) + mstore(96, aY1) + return(0, 128) + } + + // Check if X cordinate is the same in bouth points. + if and(eq(aX0, bX0), eq(aX1, bX1)) { + + // Ensure that the coordinates are between 0 and the field order + if iszero(and(g2CoordinateIsOnFieldOrder(aX0, aX1), g2CoordinateIsOnFieldOrder(aY0, aY1))) { + burnGas() + } + + let aX0Mont := intoMontgomeryForm(aX0) + let aX1Mont := intoMontgomeryForm(aX1) + let aY0Mont := intoMontgomeryForm(aY0) + let aY1Mont := intoMontgomeryForm(aY1) + + // Ensure that the point is in the curve + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, aY0Mont, aY1Mont)) { + burnGas() + } + + if and(eq(aY0, bY0), eq(aY1, bY1)) { + + // A + A = 2A + + let c00, c01, c10, c11, c20, c21 := g2JacobianDouble(aX0Mont, aX1Mont, aY0Mont, aY1Mont, MONTGOMERY_ONE(), 0) + + c00, c01, c10, c11 := g2OutOfJacobian(c00, c01, c10, c11, c20, c21) + + c00 := outOfMontgomeryForm(c00) + c01 := outOfMontgomeryForm(c01) + c10 := outOfMontgomeryForm(c10) + c11 := outOfMontgomeryForm(c11) + + mstore(0, c00) + mstore(32, c01) + mstore(64, c10) + mstore(96, c11) + return(0, 128) + } + + // If Y coordinates are diferent, the only possibility is that: B = -A. In this case A + (-A) = Infinity. + + // Ensure that the coordinates are between 0 and the field order + if iszero(g2CoordinateIsOnFieldOrder(bY0, bY1)) { + burnGas() + } + + let bY0Mont := intoMontgomeryForm(bY0) + let bY1Mont := intoMontgomeryForm(bY1) + + // Ensure that the point is in the curve + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, bY0Mont, bY1Mont)) { + burnGas() + } + + mstore(0, 0) + mstore(32, 0) + mstore(64, 0) + mstore(96, 0) + return(0, 128) + } + + // A + B = C + + // Ensure that the coordinates are between 0 and the field order + if iszero(and(g2CoordinateIsOnFieldOrder(aX0, aX1), g2CoordinateIsOnFieldOrder(aY0, aY1))) { + burnGas() + } + if iszero(and(g2CoordinateIsOnFieldOrder(bX0, bX1), g2CoordinateIsOnFieldOrder(bY0, bY1))) { + burnGas() + } + + let aX0Mont := intoMontgomeryForm(aX0) + let aX1Mont := intoMontgomeryForm(aX1) + let aY0Mont := intoMontgomeryForm(aY0) + let aY1Mont := intoMontgomeryForm(aY1) + + let bX0Mont := intoMontgomeryForm(bX0) + let bX1Mont := intoMontgomeryForm(bX1) + let bY0Mont := intoMontgomeryForm(bY0) + let bY1Mont := intoMontgomeryForm(bY1) + + // Ensure that the points are in the curve + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, aY0Mont, aY1Mont)) { + burnGas() + } + if iszero(g2AffinePointIsOnCurve(bX0Mont, bX1Mont, bY0Mont, bY1Mont)) { + burnGas() + } + + let c00, c01, c10, c11, c20, c21 := g2JacobianAdd(aX0Mont, aX1Mont, aY0Mont, aY1Mont, MONTGOMERY_ONE(), 0, bX0Mont, bX1Mont, bY0Mont, bY1Mont, MONTGOMERY_ONE(), 0) + + c00, c01, c10, c11 := g2OutOfJacobian(c00, c01, c10, c11, c20, c21) + + c00 := outOfMontgomeryForm(c00) + c01 := outOfMontgomeryForm(c01) + c10 := outOfMontgomeryForm(c10) + c11 := outOfMontgomeryForm(c11) + + mstore(0, c00) + mstore(32, c01) + mstore(64, c10) + mstore(96, c11) + return(0, 128) + } + } +} diff --git a/etc/system-contracts/contracts/precompiles/EcMul.yul b/etc/system-contracts/contracts/precompiles/EcMul.yul index 83c45ff0..068cac01 100644 --- a/etc/system-contracts/contracts/precompiles/EcMul.yul +++ b/etc/system-contracts/contracts/precompiles/EcMul.yul @@ -1,7 +1,5 @@ object "EcMul" { - code { - return(0, 0) - } + code { } object "EcMul_deployed" { code { //////////////////////////////////////////////////////////////// @@ -59,18 +57,18 @@ object "EcMul" { // //////////////////////////////////////////////////////////////// /// @dev Executes the `precompileCall` opcode. - function precompileCall(precompileParams, gasToBurn) -> ret { - // Compiler simulation for calling `precompileCall` opcode - ret := verbatim_2i_1o("precompile", precompileParams, gasToBurn) - } + function precompileCall(precompileParams, gasToBurn) -> ret { + // Compiler simulation for calling `precompileCall` opcode + ret := verbatim_2i_1o("precompile", precompileParams, gasToBurn) + } /// @notice Burns remaining gas until revert. /// @dev This function is used to burn gas in the case of a failed precompile call. - function burnGas() { - // Precompiles that do not have a circuit counterpart - // will burn the provided gas by calling this function. - precompileCall(0, gas()) - } + function burnGas() { + // Precompiles that do not have a circuit counterpart + // will burn the provided gas by calling this function. + precompileCall(0, gas()) + } /// @notice Retrieves the highest half of the multiplication result. /// @param multiplicand The value to multiply. @@ -225,7 +223,7 @@ object "EcMul" { /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_The_REDC_algorithm for further details on the Montgomery multiplication. /// @param minuend The minuend in Montgomery form. /// @param subtrahend The subtrahend in Montgomery form. - /// @return ret The result of the Montgomery subtraction. + /// @return ret The result of the Montgomery addition. function montgomerySub(minuend, subtrahend) -> ret { ret := montgomeryAdd(minuend, sub(P(), subtrahend)) } @@ -389,6 +387,8 @@ object "EcMul" { if affinePointIsInfinity(x, y) { // Infinity * scalar = Infinity + mstore(0x00, 0x00) + mstore(0x20, 0x00) return(0x00, 0x40) } @@ -402,6 +402,8 @@ object "EcMul" { if eq(scalar, 0) { // P * 0 = Infinity + mstore(0x00, 0x00) + mstore(0x20, 0x00) return(0x00, 0x40) } if eq(scalar, 1) { diff --git a/etc/system-contracts/contracts/precompiles/EcMulG2.yul b/etc/system-contracts/contracts/precompiles/EcMulG2.yul new file mode 100644 index 00000000..8069a1c3 --- /dev/null +++ b/etc/system-contracts/contracts/precompiles/EcMulG2.yul @@ -0,0 +1,611 @@ +object "EcMulG2" { + code { } + object "EcMulG2_deployed" { + code { + // CONSTANTS + + /// @notice Constant function for value one in Montgomery form. + /// @dev This value was precomputed using Python. + /// @return m_one The value one in Montgomery form. + function MONTGOMERY_ONE() -> m_one { + m_one := 6350874878119819312338956282401532409788428879151445726012394534686998597021 + } + + /// @notice Constant function for the pre-computation of R^2 % N for the Montgomery REDC algorithm. + /// @dev R^2 is the Montgomery residue of the value 2^512. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further detals. + /// @dev This value was precomputed using Python. + /// @return ret The value R^2 modulus the curve group order. + function R2_MOD_P() -> ret { + ret := 3096616502983703923843567936837374451735540968419076528771170197431451843209 + } + + /// @notice Constant function for the alt_bn128 group order. + /// @dev See https://eips.ethereum.org/EIPS/eip-196 for further details. + /// @return ret The alt_bn128 group order. + function P() -> ret { + ret := 21888242871839275222246405745257275088696311157297823662689037894645226208583 + } + + /// @notice Constant function for the pre-computation of N' for the Montgomery REDC algorithm. + /// @dev N' is a value such that NN' = -1 mod R, with N being the curve group order. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further detals. + /// @dev This value was precomputed using Python. + /// @return ret The value N'. + function N_PRIME() -> ret { + ret := 111032442853175714102588374283752698368366046808579839647964533820976443843465 + } + + /// @notice constant function for the coeffitients of the sextic twist of the BN256 curve. + /// @dev E': y' ** 2 = x' ** 3 + 3 / (3 + u) + /// @dev the curve E' is defined over Fp2 elements. + /// @dev See https://hackmd.io/@jpw/bn254#Twists for further details. + /// @return coefficients of the sextic twist of the BN256 curve + function MONTGOMERY_TWISTED_CURVE_COEFFS() -> z0, z1 { + z0 := 16772280239760917788496391897731603718812008455956943122563801666366297604776 + z1 := 568440292453150825972223760836185707764922522371208948902804025364325400423 + } + + // HELPER FUNCTIONS + + /// @dev Executes the `precompileCall` opcode. + function precompileCall(precompileParams, gasToBurn) -> ret { + // Compiler simulation for calling `precompileCall` opcode + ret := verbatim_2i_1o("precompile", precompileParams, gasToBurn) + } + + /// @notice Burns remaining gas until revert. + /// @dev This function is used to burn gas in the case of a failed precompile call. + function burnGas() { + // Precompiles that do not have a circuit counterpart + // will burn the provided gas by calling this function. + precompileCall(0, gas()) + } + + /// @notice Calculate the bit length of a number. + /// @param x The number to calculate the bit length of. + /// @return ret The bit length of the number. + function bitLen(x) -> ret { + ret := 0 + for {} x {} { + ret := add(ret, 1) + x := shr(1, x) + } + } + + /// @notice Checks if the bit of a number at a given index is 1. + /// @dev The index is counted from the right, starting at 0. + /// @param index The index of the bit to check. + /// @param n The number to check the bit of. + /// @return ret The value of the bit at the given index. + function checkBit(index, n) -> ret { + ret := and(shr(index, n), 1) + } + + // MONTGOMERY + + /// @notice Computes the inverse in Montgomery Form of a number in Montgomery Form. + /// @dev Reference: https://github.com/lambdaclass/lambdaworks/blob/main/math/src/field/fields/montgomery_backed_prime_fields.rs#L169 + /// @dev Let `base` be a number in Montgomery Form, then base = a*R mod P() being `a` the base number (not in Montgomery Form) + /// @dev Let `inv` be the inverse of a number `a` in Montgomery Form, then inv = a^(-1)*R mod P() + /// @dev The original binary extended euclidean algorithms takes a number a and returns a^(-1) mod N + /// @dev In our case N is P(), and we'd like the input and output to be in Montgomery Form (a*R mod P() + /// @dev and a^(-1)*R mod P() respectively). + /// @dev If we just pass the input as a number in Montgomery Form the result would be a^(-1)*R^(-1) mod P(), + /// @dev but we want it to be a^(-1)*R mod P(). + /// @dev For that, we take advantage of the algorithm's linearity and multiply the result by R^2 mod P() + /// @dev to get R^2*a^(-1)*R^(-1) mod P() = a^(-1)*R mod P() as the desired result in Montgomery Form. + /// @dev `inv` takes the value of `b` or `c` being the result sometimes `b` and sometimes `c`. In paper + /// @dev multiplying `b` or `c` by R^2 mod P() results on starting their values as b = R2_MOD_P() and c = 0. + /// @param base A number `a` in Montgomery Form, then base = a*R mod P(). + /// @return inv The inverse of a number `a` in Montgomery Form, then inv = a^(-1)*R mod P(). + function binaryExtendedEuclideanAlgorithm(base) -> inv { + let modulus := P() + let u := base + let v := modulus + // Avoids unnecessary reduction step. + let b := R2_MOD_P() + let c := 0 + + for {} and(iszero(eq(u, 1)), iszero(eq(v, 1))) {} { + for {} iszero(and(u, 1)) {} { + u := shr(1, u) + let current := b + switch and(current, 1) + case 0 { + b := shr(1, b) + } + case 1 { + b := shr(1, add(b, modulus)) + } + } + + for {} iszero(and(v, 1)) {} { + v := shr(1, v) + let current := c + switch and(current, 1) + case 0 { + c := shr(1, c) + } + case 1 { + c := shr(1, add(c, modulus)) + } + } + + switch gt(v, u) + case 0 { + u := sub(u, v) + if lt(b, c) { + b := add(b, modulus) + } + b := sub(b, c) + } + case 1 { + v := sub(v, u) + if lt(c, b) { + c := add(c, modulus) + } + c := sub(c, b) + } + } + + switch eq(u, 1) + case 0 { + inv := c + } + case 1 { + inv := b + } + } + + /// @notice Computes an addition and checks for overflow. + /// @param augend The value to add to. + /// @param addend The value to add. + /// @return sum The sum of the two values. + /// @return overflowed True if the addition overflowed, false otherwise. + function overflowingAdd(augend, addend) -> sum, overflowed { + sum := add(augend, addend) + overflowed := lt(sum, augend) + } + + /// @notice Retrieves the highest half of the multiplication result. + /// @param multiplicand The value to multiply. + /// @param multiplier The multiplier. + /// @return ret The highest half of the multiplication result. + function getHighestHalfOfMultiplication(multiplicand, multiplier) -> ret { + ret := verbatim_2i_1o("mul_high", multiplicand, multiplier) + } + + /// @notice Implementation of the Montgomery reduction algorithm (a.k.a. REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm + /// @param lowestHalfOfT The lowest half of the value T. + /// @param higherHalfOfT The higher half of the value T. + /// @return S The result of the Montgomery reduction. + function REDC(lowest_half_of_T, higher_half_of_T) -> S { + let q := mul(lowest_half_of_T, N_PRIME()) + let a_high := add(higher_half_of_T, getHighestHalfOfMultiplication(q, P())) + let a_low, overflowed := overflowingAdd(lowest_half_of_T, mul(q, P())) + if overflowed { + a_high := add(a_high, 1) + } + S := a_high + if iszero(lt(a_high, P())) { + S := sub(a_high, P()) + } + } + + /// @notice Encodes a field element into the Montgomery form using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on transforming a field element into the Montgomery form. + /// @param a The field element to encode. + /// @return ret The field element in Montgomery form. + function intoMontgomeryForm(a) -> ret { + let hi := getHighestHalfOfMultiplication(a, R2_MOD_P()) + let lo := mul(a, R2_MOD_P()) + ret := REDC(lo, hi) + } + + /// @notice Decodes a field element out of the Montgomery form using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on transforming a field element out of the Montgomery form. + /// @param m The field element in Montgomery form to decode. + /// @return ret The decoded field element. + function outOfMontgomeryForm(m) -> ret { + let higher_half_of_m := 0 + let lowest_half_of_m := m + ret := REDC(lowest_half_of_m, higher_half_of_m) + } + + /// @notice Computes the Montgomery addition. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param augend The augend in Montgomery form. + /// @param addend The addend in Montgomery form. + /// @return ret The result of the Montgomery addition. + function montgomeryAdd(augend, addend) -> ret { + ret := add(augend, addend) + if iszero(lt(ret, P())) { + ret := sub(ret, P()) + } + } + + /// @notice Computes the Montgomery subtraction. + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param minuend The minuend in Montgomery form. + /// @param subtrahend The subtrahend in Montgomery form. + /// @return ret The result of the Montgomery addition. + function montgomerySub(minuend, subtrahend) -> ret { + ret := montgomeryAdd(minuend, sub(P(), subtrahend)) + } + + /// @notice Computes the Montgomery multiplication using the Montgomery reduction algorithm (REDC). + /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. + /// @param multiplicand The multiplicand in Montgomery form. + /// @param multiplier The multiplier in Montgomery form. + /// @return ret The result of the Montgomery multiplication. + function montgomeryMul(multiplicand, multiplier) -> ret { + let higher_half_of_product := getHighestHalfOfMultiplication(multiplicand, multiplier) + let lowest_half_of_product := mul(multiplicand, multiplier) + ret := REDC(lowest_half_of_product, higher_half_of_product) + } + + /// @notice Computes the Montgomery modular inverse skipping the Montgomery reduction step. + /// @dev The Montgomery reduction step is skept because a modification in the binary extended Euclidean algorithm is used to compute the modular inverse. + /// @dev See the function `binaryExtendedEuclideanAlgorithm` for further details. + /// @param a The field element in Montgomery form to compute the modular inverse of. + /// @return invmod The result of the Montgomery modular inverse (in Montgomery form). + function montgomeryModularInverse(a) -> invmod { + invmod := binaryExtendedEuclideanAlgorithm(a) + } + + // G2 ARITHMETICS + + /// @notice Checks if a coordinate is on the curve group order. + /// @dev A coordinate is on the curve group order if it is on the range [0, curveFieldOrder). + /// @param coordinate The coordinate to check. + /// @return ret True if the coordinate is in the range, false otherwise. + function g2CoordinateIsOnFieldOrder(x0, x1) -> ret { + ret := and(lt(x0, P()), lt(x1, P())) + } + + /// @notice Checks if a G2 point in affine coordinates is the point at infinity. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev in Affine coordinates the point represents the infinity if both coordinates are 0. + /// @param x0, x1 The x coordinate to check. + /// @param y0, y1 The y coordinate to check. + /// @return ret True if the point is the point at infinity, false otherwise. + function g2AffinePointIsInfinity(x0, x1, y0, y1) -> ret { + ret := iszero(or(or(x0, x1), or(y0, y1))) + } + + /// @notice Checks if a G2 point in affine coordinates belongs to the twisted curve. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev in Affine coordinates the point belongs to the curve if it satisfies the equation: y^3 = x^2 + 3/(9+u). + /// @dev See https://hackmd.io/@jpw/bn254#Twists for further details. + /// @param x0, x1 The x coordinate to check. + /// @param y0, y1 The y coordinate to check. + /// @return ret True if the point is in the curve, false otherwise. + function g2AffinePointIsOnCurve(x0, x1, y0, y1) -> ret { + let a0, a1 := MONTGOMERY_TWISTED_CURVE_COEFFS() + let b0, b1 := fp2Mul(x0, x1, x0, x1) + b0, b1 := fp2Mul(b0, b1, x0, x1) + b0, b1 := fp2Add(b0, b1, a0, a1) + let c0, c1 := fp2Mul(y0, y1, y0, y1) + ret := and(eq(b0, c0), eq(b1, c1)) + } + + /// @notice Add two g2 points represented in jacobian coordinates. + /// @dev The coordinates must be encoded in Montgomery form. + /// @param a_x0, a_x1 The x coordinate of the first point. + /// @param a_y0, a_y1 The y coordinate of the first point. + /// @param a_z0, a_z1 The z coordinate of the first point. + /// @param b_x0, b_x1 The x coordinate of the second point. + /// @param b_y0, b_y1 The y coordinate of the second point. + /// @param b_z0, b_z1 The z coordinate of the second point. + /// @return c00, c01, c10, c11, c20, c21 The coordinates of the added points. + function g2JacobianAdd(xq0, xq1, yq0, yq1, zq0, zq1, xr0, xr1, yr0, yr1, zr0, zr1) -> c00, c01, c10, c11, c20, c21 { + // Check for infinity in projective coordinates is the same as jacobian + let qIsInfinity := g2ProjectivePointIsInfinity(xq0, xq1, yq0, yq1, zq0, zq1) + let rIsInfinity := g2ProjectivePointIsInfinity(xr0, xr1, yr0, yr1, zr0, zr1) + if and(rIsInfinity, qIsInfinity) { + // Infinity + Infinity = Infinity + leave + } + if rIsInfinity { + // Infinity + P = P + c00 := xq0 + c01 := xq1 + c10 := yq0 + c11 := yq1 + c20 := zq0 + c21 := zq1 + leave + } + if qIsInfinity { + // P + Infinity = P + c00 := xr0 + c01 := xr1 + c10 := yr0 + c11 := yr1 + c20 := zr0 + c21 := zr1 + leave + } + + // Z1Z1 = Z1^2 + let zqzq0, zqzq1 := fp2Mul(zq0, zq1, zq0, zq1) + // Z2Z2 = Z2^2 + let zrzr0, zrzr1 := fp2Mul(zr0, zr1, zr0, zr1) + // U1 = X1*Z2Z2 + let u0, u1 := fp2Mul(xq0, xq1, zrzr0, zrzr1) + // U2 = X2*Z1Z1 + let u2, u3 := fp2Mul(xr0, xr1, zqzq0, zqzq1) + // t0 = Z2*Z2Z2 + let t0, t1 := fp2Mul(zr0, zr1, zrzr0, zrzr1) + // S1 = Y1*t0 + let s0, s1 := fp2Mul(yq0, yq1, t0, t1) + // t1 = Z1*Z1Z1 + let t2, t3 := fp2Mul(zq0, zq1, zqzq0, zqzq1) + // S2 = Y2*t1 + let s2, s3 := fp2Mul(yr0, yr1, t2, t3) + // H = U2-U1 + let h0, h1 := fp2Sub(u2, u3, u0, u1) + // t2 = 2*H + let t4, t5 := fp2Add(h0, h1, h0, h1) + // I = t2^2 + let i0, i1 := fp2Mul(t4, t5, t4, t5) + // J = H*I + let j0, j1 := fp2Mul(h0, h1, i0, i1) + // t3 = S2-S1 + let t6, t7 := fp2Sub(s2, s3, s0, s1) + // r = 2*t3 + let r0, r1 := fp2Add(t6, t7, t6, t7) + // V = U1*I + let v0, v1 := fp2Mul(u0, u1, i0, i1) + // t4 = r^2 + let t8, t9 := fp2Mul(r0, r1, r0, r1) + // t5 = 2*V + let t10, t11 := fp2Add(v0, v1, v0, v1) + // t6 = t4-J + let t12, t13 := fp2Sub(t8, t9, j0, j1) + // X3 = t6-t5 + c00, c01 := fp2Sub(t12, t13, t10, t11) + // t7 = V-X3 + let t14, t15 := fp2Sub(v0, v1, c00, c01) + // t8 = S1*J + let t16, t17 := fp2Mul(s0, s1, j0, j1) + // t9 = 2*t8 + let t18, t19 := fp2Add(t16, t17, t16, t17) + // t10 = r*t7 + let t20, t21 := fp2Mul(r0, r1, t14, t15) + // Y3 = t10-t9 + c10, c11 := fp2Sub(t20, t21, t18, t19) + // t11 = Z1+Z2 + let t22, t23 := fp2Add(zq0, zq1, zr0, zr1) + // t12 = t11^2 + let t24, t25 := fp2Mul(t22, t23, t22, t23) + // t13 = t12-Z1Z1 + let t26, t27 := fp2Sub(t24, t25, zqzq0, zqzq1) + // t14 = t13-Z2Z2 + let t28, t29 := fp2Sub(t26, t27, zrzr0, zrzr1) + // Z3 = t14*H + c20, c21 := fp2Mul(t28, t29, h0, h1) + } + + /// @notice Double a g2 point represented in jacobian coordinates. + /// @dev The coordinates must be encoded in Montgomery form. + /// @param a_x0, a_x1 The x coordinate of the point. + /// @param a_y0, a_y1 The y coordinate of the point. + /// @param a_z0, a_z1 The z coordinate of the point. + /// @return c00, c01, c10, c11, c20, c21 The coordinates of the doubled point. + function g2JacobianDouble(xp0, xp1, yp0, yp1, zp0, zp1) -> xr0, xr1, yr0, yr1, zr0, zr1 { + let a00, a01 := fp2Mul(xp0, xp1, xp0, xp1) + let b00, b01 := fp2Mul(yp0, yp1, yp0, yp1) + let c00, c01 := fp2Mul(b00, b01, b00, b01) + let t00, t01 := fp2Add(xp0, xp1, b00, b01) + let t10, t11 := fp2Mul(t00, t01, t00, t01) + let t20, t21 := fp2Sub(t10, t11, a00, a01) + let t30, t31 := fp2Sub(t20, t21, c00, c01) + let d00, d01 := fp2Add(t30, t31, t30, t31) + let e00, e01 := fp2Add(a00, a01, a00, a01) + e00, e01 := fp2Add(e00, e01, a00, a01) + let f00, f01 := fp2Mul(e00, e01, e00, e01) + let t40, t41 := fp2Add(d00, d01, d00, d01) + xr0, xr1 := fp2Sub(f00, f01, t40, t41) + let t50, t51 := fp2Sub(d00, d01, xr0, xr1) + let t60, t61 := fp2Add(c00, c01, c00, c01) + t60, t61 := fp2Add(t60, t61, t60, t61) + t60, t61 := fp2Add(t60, t61, t60, t61) + let t70, t71 := fp2Mul(e00, e01, t50, t51) + yr0, yr1 := fp2Sub(t70, t71, t60, t61) + let t80, t81 := fp2Mul(yp0, yp1, zp0, zp1) + zr0, zr1 := fp2Add(t80, t81, t80, t81) + } + + + /// @notice Computes the affine coordinates from Jacobian. + /// @param x0, x1 The coefficients of the x coordinate. + /// @param y0, y1 The coefficients of the y coordinate. + /// @param z0, z1 The coefficients of the z coordinate. + /// @return c00, c01, c10, c11 The coefficients of the point in affine coordinates. + function g2OutOfJacobian(x0, x1, y0, y1, z0, z1) -> c00, c01, c10, c11 { + let z0Square, z1Square := fp2Mul(z0, z1, z0, z1) + let z0Cube, z1Cube := fp2Mul(z0Square, z1Square, z0, z1) + let t0, t1 := fp2Inv(z0Square, z1Square) + let t2, t3 := fp2Inv(z0Cube, z1Cube) + c00, c01 := fp2Mul(x0, x1, t0, t1) + c10, c11 := fp2Mul(y0, y1, t2, t3) + } + + /// @notice Checks if a G2 point in projective coordinates is the point at infinity. + /// @dev The coordinates are encoded in Montgomery form. + /// @dev A projective point is at infinity if the z coordinate is (0, 0). + /// @param x0, x1 The x coordinate of the point. + /// @param y0, y1 The y coordinate of the point. + /// @param z0, z1 The z coordinate of the point. + /// @return ret True if the point is the point at infinity, false otherwise. + function g2ProjectivePointIsInfinity(x0, x1, y0, y1, z0, z1) -> ret { + ret := iszero(or(z0, z1)) + } + + // FP2 ARITHMETHICS + + /// @notice Computes the sum of two Fp2 elements. + /// @dev Algorithm 5 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the A element to sum. + /// @param b00, b01 The coefficients of the B element to sum. + /// @return c00, c01 The coefficients of the element C = A + B. + function fp2Add(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomeryAdd(a00, b00) + c01 := montgomeryAdd(a01, b01) + } + + /// @notice Computes the subtraction of two Fp2 elements. + /// @dev Algorithm 6 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the minuend A. + /// @param b00, b01 The coefficients of the subtrahend B. + /// @return c00, c01 The coefficients of the element C = A - B. + function fp2Sub(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomerySub(a00, b00) + c01 := montgomerySub(a01, b01) + } + + /// @notice Computes the multiplication between a Fp2 element a Fp element. + /// @dev Algorithm 7 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @param scalar The value of the Fp element k. + /// @return c00, c01 The coefficients of the element C = k * A. + function fp2ScalarMul(a00, a01, scalar) -> c00, c01 { + c00 := montgomeryMul(a00, scalar) + c01 := montgomeryMul(a01, scalar) + } + + /// @notice Computes the multiplication between two Fp2 elements. + /// @dev Algorithm 7 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @param a00, a01 The coefficients of the Fp2 element B. + /// @return c00, c01 The coefficients of the element C = A * B. + function fp2Mul(a00, a01, b00, b01) -> c00, c01 { + c00 := montgomerySub(montgomeryMul(a00, b00), montgomeryMul(a01, b01)) + c01 := montgomeryAdd(montgomeryMul(a00, b01), montgomeryMul(a01, b00)) + } + + /// @notice Computes the negative of a Fp2 elements. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @return c00, c01 The coefficients of the element C = -A. + function fp2Neg(a00, a01) -> c00, c01 { + c00, c01 := fp2Sub(0, 0, a00, a01) + } + + /// @notice Computes the inverse of a Fp2 element. + /// @dev Algorithm 8 in: https://eprint.iacr.org/2010/354.pdf. + /// @param a00, a01 The coefficients of the Fp2 element A. + /// @return c00, c01 The coefficients of the element C = A^(-1). + function fp2Inv(a00, a01) -> c00, c01 { + let t0 := montgomeryMul(a00, a00) + let t1 := montgomeryMul(a01, a01) + t0 := montgomeryAdd(t0, t1) + t1 := montgomeryModularInverse(t0) + c00 := montgomeryMul(a00, t1) + c01 := montgomerySub(0, montgomeryMul(a01, t1)) + } + + // FALLBACK + + // Retrieve the coordinates from the calldata + let aX0 := calldataload(0) + let aX1 := calldataload(32) + let aY0 := calldataload(64) + let aY1 := calldataload(96) + + if iszero(and(g2CoordinateIsOnFieldOrder(aX0, aX1), g2CoordinateIsOnFieldOrder(aY0, aY1))) { + burnGas() + } + + if g2AffinePointIsInfinity(aX0, aX1, aY0, aY1) { + // Infinity * scalar = Infinity + mstore(0, 0) + mstore(32, 0) + mstore(64, 0) + mstore(96, 0) + return(0, 128) + } + + let aX0Mont := intoMontgomeryForm(aX0) + let aX1Mont := intoMontgomeryForm(aX1) + let aY0Mont := intoMontgomeryForm(aY0) + let aY1Mont := intoMontgomeryForm(aY1) + + // Ensure that the point is in the curve. + if iszero(g2AffinePointIsOnCurve(aX0Mont, aX1Mont, aY0Mont, aY1Mont)) { + burnGas() + } + + // Retrieve scalar from the calldata + let scalar := calldataload(128) + + if eq(scalar, 0) { + // P * 0 = Infinity + mstore(0, 0) + mstore(32, 0) + mstore(64, 0) + mstore(96, 0) + return(0, 128) + } + if eq(scalar, 1) { + // P * 1 = P + mstore(0, aX0) + mstore(32, aX1) + mstore(64, aY0) + mstore(96, aY1) + return(0, 128) + } + + if eq(scalar, 2) { + let c00, c01, c10, c11, c20, c21 := g2JacobianDouble(aX0Mont, aX1Mont, aY0Mont, aY1Mont, MONTGOMERY_ONE(), 0) + + c00, c01, c10, c11 := g2OutOfJacobian(c00, c01, c10, c11, c20, c21) + + c00 := outOfMontgomeryForm(c00) + c01 := outOfMontgomeryForm(c01) + c10 := outOfMontgomeryForm(c10) + c11 := outOfMontgomeryForm(c11) + + mstore(0, c00) + mstore(32, c01) + mstore(64, c10) + mstore(96, c11) + return(0, 128) + } + + let scalarBitIndex := bitLen(scalar) + + let c00 := 0 + let c01 := 0 + let c10 := MONTGOMERY_ONE() + let c11 := 0 + let c20 := 0 + let c21 := 0 + + for {} scalarBitIndex {} { + scalarBitIndex := sub(scalarBitIndex, 1) + c00, c01, c10, c11, c20, c21 := g2JacobianDouble(c00, c01, c10, c11, c20, c21) + let bitindex := checkBit(scalarBitIndex, scalar) + if bitindex { + c00, c01, c10, c11, c20, c21 := g2JacobianAdd(aX0Mont, aX1Mont, aY0Mont, aY1Mont, MONTGOMERY_ONE(), 0, c00, c01, c10, c11, c20, c21) + } + } + + c00, c01, c10, c11 := g2OutOfJacobian(c00, c01, c10, c11, c20, c21) + + c00 := outOfMontgomeryForm(c00) + c01 := outOfMontgomeryForm(c01) + c10 := outOfMontgomeryForm(c10) + c11 := outOfMontgomeryForm(c11) + + + mstore(0, c00) + mstore(32, c01) + mstore(64, c10) + mstore(96, c11) + return(0, 128) + } + } +} diff --git a/scripts/refresh_contracts.sh b/scripts/refresh_contracts.sh index 990bf5bf..1fa9dbb3 100755 --- a/scripts/refresh_contracts.sh +++ b/scripts/refresh_contracts.sh @@ -12,7 +12,7 @@ for contract in "${contracts[@]}"; do cp $SRC_DIR/$contract.sol/$contract.json $DST_DIR done -precompiles=("EcAdd" "EcMul" "EcPairing" "Ecrecover" "Keccak256" "ModExp" "P256VERIFY" "SHA256" "secp256k1VERIFY") +precompiles=("EcAdd" "EcMul" "EcPairing" "Ecrecover" "Keccak256" "ModExp" "P256VERIFY" "SHA256" "secp256k1VERIFY" "EcAddG2" "EcMulG2") for precompile in "${precompiles[@]}"; do cp etc/system-contracts/contracts/precompiles/artifacts/$precompile.yul/$precompile.yul.zbin $DST_DIR diff --git a/src/deps/contracts/EcAdd.yul.zbin b/src/deps/contracts/EcAdd.yul.zbin index d7942db13c9026dbc222195c441d745acd46351a..1dae08c8c4e2d1a2cbd4d782a36f0cd805a59d62 100644 GIT binary patch literal 3808 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 literal 0 HcmV?d00001 diff --git a/src/deps/contracts/EcMul.yul.zbin b/src/deps/contracts/EcMul.yul.zbin index 6fd9e21272518cf48cdc7d64bdddc1e2ab1d664c..6a4f19d399d7e344874d50fdad501627cc4771f6 100644 GIT binary patch literal 6880 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 X{PTlXZ+Y#xC-0iQ^tOxcc(wRnpfmH2 literal 9952 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 diff --git a/src/deps/contracts/EcMulG2.yul.zbin b/src/deps/contracts/EcMulG2.yul.zbin new file mode 100644 index 0000000000000000000000000000000000000000..c8da2ba9696ae7306626b9181b5358f21aa5a5fa GIT binary patch literal 17184 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 xGk}O*)Z)thK zHe1TFEikr8%bUC^wM(U1vUb%bWmc7|a;eIS+IpISwiD<+jk{YYVY=zzc&wi9-tYb| z;=PK96sDPTm_wc;y^4Rm`+xuYZxV_A<>aD&^%Lc9#Q!Ivq1>cM{ObHr^m$Fq)uL&9 zt0K4jBEEvEm+4oc!Ykw_@XgB)=+9hUUW3n&$h?+|Q10h6U4{y;M0;Pt?+wWNKGZ|4 z_|*~HpSyf0`aUfd<*fccZ}wAosihAUYWgi{zc1H+p}!yY@5}uAL;k(OzyH#|KkDBf z@$ZlO_s9HurGF*fXz;xPzazs3Ek%mQYtgT^I#-%7e10ODkhh5(_%o5ajUKs){9Ck@ zTrEFt-(2D6?fWBzpV4nrV}3Nm{3x>gT5ckGR`cb%ls>3mD*P1aGLo;!m+|vwMJ`AC z_&sF5LCXiNzr2tx`IvOc8{Oj9Tw9Z~s23H6=TJ8Om8A`tNS7FH(q^g6UzX9J3*3Rfv>`(HJZ= zX1en$q8txLlq1OvwU-;Y+~i>*@8zPnt^A0*#L7(-y}Dk{`bha+v%T9iQSjB;d6`xTN$zJ<{=$NxfmCD{M!b zdZ<>sJbC~hDZbLbuQGbR+~~O*8A@->clo~E<-0VYa)k5(6IzU-3|6T9_1JHZ#H@Pm20hjJbEq5Oa7Oceu@1568RhC`c0Ixi15U}a*149`S^x{ z$&pA8?PgROmX8B`=xJ_JzdbXe`0Q}H)l1_pm*bSnQgP-onL`QExehv0|6Fd1Dz|D$ zipGaJxRTQEg39|La|v8y)Y~}G-{@-VC&~>0Qi(SOyAuVt z-R^wf7ua4jg!W+p8^0&p(Q4G+!0!tplTY)v$;Se6RIV09*1pN~!8L^|9=m>AYsaIB zJ$WtrFV@(9+4+)lyH_rPZp$LI|DEj^ey2qyPVu+lcV1-pFZkQ+SHtl=BQkz~>24Rt zK0L$zKTLU+=x*<{0r&73X(>cB&ru2)ju;OnZ4YvhgY&yW8Y59_1GV`2^bwcDCyE zf}O4WE7_>{M^h#r_52jutwdAC@2g%-I*0M$Q{FzmX#dmNKE@B{SHHs@_|C-^>q+HH zN?(b3r%ax1tj?0o6>q<{I(3=KtMr=QEQfv^zWTr<=~bO1Uk1twPds|B!GZDbLkhP< zD9{1Hq4}Q_^=d|6pUaEQjUa#c(SAC!1CAq&~xn3`a z@+OzPRxTdRO%vbJG}EiODT6mRO?X55+vg%XpVfwxR|O}bophwaA#c)iVk<=?H3hp z*ag~aITiXLT=6KsfbV4rUsIogzY^MUf2E#p5RRxpy5{@QKI%oW(p7T(_Ki0cL%9G4 z%dLd|&pMv`qJjUD^yzUt`@LQd@m%Uy?*i);GW809K9A7Oczzx2o18?2DTBMm=mxl* zeg%iSXNKhp3ODTM%pvmG^d5FKW%nVkgHHE8m#0CO*WB~$AL$!Zt_M6n*Ju4p?rQ4k z0PX&b`Bjz+c7Gsm<(7lKT+>sTa}$)W zpbr6l*SADZk9s|R(eFv^x9Q)9dcnWXy@hytyJ`oF?zxiTBf0y!=fkfx`{if_*QJvmdwbQE{00(KzW+7PT09j+8yW#PLQ3Zzo>)HS)2z#`=Tgqm=%e=aWzM!UXe6nvd~gcpv4A^A9obM&w>bY6sS)OHoxnAY3TU>(9CcXKEhkBg!t`2*>Vb-e_te>&tt1N$fSij)UF_sU0SfA6Gei-sU zV{{z*OoR2Rv9((dp03Pzs;rPsq^?wobhAUF_? zAJB7<-%5$!YCpfdWqt>8_FeM%%?*)g`%v5mb3dsc#DS*u_usv}TR88y3lJfG1NqW+ z4^ocgP{HUX&(e>QIm&~G&uah=>tA(Os~pE;8+;t(7XV&s@F#w4kb_|Nf*f4t@e`Ye z0FZlrs73yh`A~dQ&!o~d-q>UC#;@(s_yYcVKdAl0bsv{TdTOM9UvB0yS-^O=+%n$5 zF3tM**E`F3kNJ)8A7_33Vd?5;m_LbjhmEfzy)I{cDlaEt-+rsrzQtp^-9GUPd3u^~ zL5=`tJksm(Uora>kA2$p>(f>b^!gOb=Z9Dx;{fH_$N%1YT>fS)zn-6Eey_^eafAzh zjPL|H=KIjz*D%j|8Pjc^bwXtBH~G774)`z2!O2*j(Rm%`$@t_^4}OCGj?5oCC5NVG zQ4U~Mr)|D)D4yVNn@^lZj?RM{axnICVV+^>A`8Ke|GCqNUsU_ginl}qvDw{CJ*&h& z@AT@iaZFBjtp6XhesjJz;PqU-j)!{pc)$Fj!@F58&^t39l*r>?Vcv&w#t)nKEy%O+ zR15x)2gmbkk=xI!hG^ILMSnIgNBqqB8`^Wf`9#NhzmSHr;BZ*{K?(OV%7wS9^IL;6 z((&ko%uNgtPV@6oK3BB(&&I3A%}#pUQi|7%s}#he*VHUsa@1eR53>BVYb@{MdGUrd zmcPO13iLNAoU%;&5sz)6-Cim>J-%lBL7!Y70-yS*4|N|eM}l9;_$c6U`=9$|(jmlY z!nkU28j({u@8>RqKOW^5_uCd;r`QwmB@2}|XIh>6E=k*RJzp?^<0`10$-x2T&enuS8e`|Zto}F<#E!dGETgUWyL$b+0$QFY@3hzd%M)f zJZkdSiKp31jn7eT>g5^2Q<-so^vo!o&y*)+v+A4USqI#dy9(feJ)Qbpwr76eDb&#T z%X!fAjV<(4PfO_udp-U;E$N8wIGv@~PyKywgZk_9`{G9$)ZdR79Z~#VQ99I}4kLj+ zWt(5fi9mOjk4KYwA7wq1r+ztIE3CH=>V4Mv#jl(!27Yc1_*FY|b_`DG$s z>tH{RcekJM*yTf{8^1vKWuzOhwtn+YHy@9sa6RdkBOmH{=R-m5`*oqqfx`@fKWVSYK_^yBKSW*Tb**2>Va`FI#tsN8xWM zyc%~ly~`B=kJ`hS?UZ6~CqJX|w>NKgEgriqrhM`Xe{M7JM|tA!^-8QK`P-S_q1`A? zd)hI+)PJk%SA+288-%N0^$UNwi%wt12Y3-5rSFnln5G3v)!<68`k5W3H37m*^#V$3G@yAS-A*y z`Q_SfG7fG6{jB}S%jM{oBz7&+zC>>%T!jo=J`Q)XGbh%C%l-Z^J{JgAb9^pLDcq+6 z-W!}={9>JCSmj+B1*hjD!=~rDeqi{)ew$u#eFFPSEWf$l81M<@9G_%;Xs7qbudGC~ z)}IV=y`moK2YP$`WS!_iug|ZXjb^By?coE1M$&Xnw~IL3n&DONStDM9l*ffYpG=smFI&+e&zE2NWawLTgdq0jr{F)MRxxsf75?#6Q{h!=%1`RR(xED zoSwE`ig|8{{ms$dioEnk*sl2@h*Q>nh~s;J<1KGyKI1O&*s+-W;}_w@W#`{4`Or5@ zdgLvxACDcJVR?SBk?;V^_mIvby-w#I#_gr=Uz5I7x5quf9$Oq;pZq4v`8X;&UdP|&Z^92`JiZy1XWSC|ayWn3R2?Qhfqq;c0KMM8c8p#k7s}%tO=h(?f;>$0lcP9+r(eykm9=of-a(C7A3;p>`D>wFIrhoC+kFQyNeZb|of1Gq3 zF#8?X`zHuraf0dnr5V`Ic=Yx;wpVn&2lG+0kI)C&N7f&`eU{~V?;t;dUKb}>F6v4E^9|?^zvI_K4i&y%h26pz z(s4Kz9vL>ejPeU@dyw!KhKOg{jv}AyGozlb`%Vmw$i|!ajYwBG ze$Cj{`L-fzB>{@9o@Nli`s>-4)JU> z9qqvHgJtUDp~9s7mf}m*Zp0f2k32i*_F*tLVQ_4Cfb!?@ODS0#6mnK3JSCPp^!S9u zv!t(tbd|6^n@?dK2k|Y)KkaWk$}cR{o2)+er@5YX z-_+yy68-8~Lcd^7-wfd{&#~X08Ma^cdB&d{Vmr1k3~{ZQ|4BP%^f-h0x$h$i_VpUm z%a%BDo&6N(Pi`7;{Bkw+GvN5;R-JCEOwU=|ANvekJ}GZNSJy*yUC8jpI%cL`Wc5IA z_pc-NSI;>;3p(C3;}oNiGn3nBgX$&x@L|(Wjo+HQ=d}E3d3w#~7h&JqHPh55;){B( zRy><=UyLJGKj;JY5u^R4zn!$N^BM3V_}hip`5$|IpKs-UnC<6lPA6~Q_YoiXxtMWS z`p;NrnDla!j)#r!u+#3>mr0kAAZKOc1Mv9KG#=$N9tYk(%zi>#;~KM@E&LwU`a#~~ ziNr2Y-hH1n{7chM*#9BZvc#YK6aJQe`(}Ak+bLa0!_%LFCmucOc01?eX|L0#&&zQi z74X_a`fnPy{-nTt2g!W7$IIu6Q^v=l)2C;c^ke)@&ck2dtb7c1v1oP>45S|}gZQeD;5W5zM~Wf7G;VyV7skCGo&Q3w7{5h4Uo;=^TY1oRobriwUA`1vdHQ1-+*ojBh~9t(Uyt9@6t-Y0l|AK|1wL z5UvvQlX=f;Om5(xOdDQfSJa5#H36P$!58Rfp6!g}ydCZQ|!=tHxl z4@McQ4{Hg2#3Nz6#T!37Zg@q(&&&TT`w8}^CwBRA z`%?|;)6rl}$JtJq z`{p;^Yw{xreaas9-#(lHwP^B+b=+aLAI7D^M#HOkpRf1aN4%u^Ri@wS>lU|q zde2)m9plFu`z@`p-`wDgrI&`7-aEwflFM_i(`VV~6ZqWAa|Ij!I3^v;j{skG$AlAK z<4f-m!gHI$bDO94y^ZkXUCx6Y$@_R!y4mf=guzv>xL&(`kiw5L-^aUpWteam%2S3< z#pzg{VS0snUk~%F@-)*q&w{?q5r6Q-_*6AN33@!s^e~SrbAOif@;uMR5933R&oBFaiTNecN9knr=_@Inq1V1o-u1d3{Mf4J_x_^S zcl;`|tl#VTm6tQW=-293che&ie-GO`1avj!M7LRGQK_dmhi3O%X)@qsi1tsezAz(ft*}6f7yY* z!H7JF#dJtyRBW0mo1(}$BgZ3ZB@N+>=&lI zjSRTF4ffBp%x6%Ke%|PF)}EZ|U)6Tt*LywGH#r&5dZ5qXs@$plqQ4DRZjJea{ZlRN z#&3FVP5lt;8`AkslRk?9e)boKeiyp-3r%$To(}ah_%9Lv4)}^JcFjMI_Bp?M)3+UN zn@1?$EM3T#(;&cKa(^a?<$sE%_%*9Z2Dj3aaGitDYkyJy8sIw`(h-Lt|8EC; z%KxMN0j_U%f$IoLl3o|P!lgUa9IodaE|ZfzAzdz*9Pg8hDLvSWe8PRk;65zp8*43k zx(*Kj)Dj;8VQM$(fWMpGo>Z+dMvUT3vpc<@+!cQ==VUs@<-`cyTazt3J2)gc%elu zccTR9c+u#L@FVnkGujz-eCoi{@EIJK;(VU)G&;bO*p0UMsQzpHW$?3=UrjkY?{KUD zFN4F|Q9ERC^bZ0K5!yG2-~7TV?H|9g1h}tg##>+qR@FXhPL;s@`e-lAKD}Z^e)F+!N#`!|&b3FX&lUxl#RL|8t}V?5r3b z(rf*@8M8C1OI-)-*H^H7~}{2TskfU zdOsyMr})1$q1&_G?_sl9=_n?q07U($%Br6 zCI|5d;CFeRX_aT%ZPd@;duBa+Lw;L&ZjqZ(cs}XyZgc!~WF)R;?cKIMjX6Z*dDO1ofnOyJ9*iGd>>3PuFzmV}ibU%>h@0W8a zeK?%7d(ij*dz;b=wYO~dtn~|ixO|L&Kd#r{hx!R>PZPVD@a=Zjf7FNGYIENZlVDmVYMrNpco^+>GYW1UaNU$X4U?*?3ge)Xsv8gY4higTFU* zg~fx6zU#uZCCF<=KcDQXpCV^Ne%o;#a08w@)qc0tKc$Px+YvdGl1m+D$e-W`X7%7i zkn^_vs$WdG>g1O#1i0JkiJ0FCx?|j-zoGsr&ynyrQYw`-D&$i{mNsN(}pU7X@Zk$F<>g|HpZ|`3#d@Q#s^pmkqJ0bs& z=MMc~KR)QznJ(IXns4p>^(KFkaq0PBC)Z5dcCQ16&MP{@0s4Ypmfu$HTItoTojr0e zH4Z2C3UZ<2f#Umhxeosq^taLUpY~&6Q1x$@97x%vrhKseN#MFFccD7xXWEXBqrhL~ z?WDD{Gt-Xx?<(K3(3?h!pQ&^u{eyqzdLw&HUXKNN_4(Ox%or(m%RwHVPxE0Ba6ld; zv^V+<&0oYEt^s+y2tRL?ejea9{TQ_QgIpX`Kd(7{9}jZbR$p}S%u?g2j>#xPH1;2@}`?ZFzg7<>SL3?|5 z!Qnra@i!DN@@*-Nm+UvbUCi+96lSjETkw0wGJIQcz7cNNG2`0`c6R>V_;$+SX|Kn+ z{z$&9gmR#Z`dNwJZ}a*U$J^#>#-FS`pI?V>jlj1-(^sKCezD{Dhxx{0jANF=_J_CGq$kVC$U~|4l`X7bg)vBji|KpS#OpSl) z?^7Nq=le4Cm7dJ!Jn1atsWmR7d}02PAWyXOlGt052gn8D3cAB|H{~fFeZl50@{G&R zE~EQ1kiRw4=AHKYNb-Bue(y2` z`kDP%gkCY7^Blyvz;A_jch_-B<%o0$c(m8EBwnKN4(d-v-@DH%)P8px=Z=|Oc$d=6 z_^0-e^Q95gGdnk+@dJ&+P~Stmuf3gC`KFx?^lpz=7{_o9E8vxqOU$d$KlBv-NISbC zasu{1^*H#6SdPjo$1=fOFAPvWcR4Ygl8Zy;YosP+oPZRhd*Nu(XMFXD0t z@mjx8jrOd+Mmj_}&|wkvxnF*vYdIb7S?(A@$J*Ygulv-)IkvpclYw7YHv!#^-ds14 zx}0(j$!tr z_PmaA2A7==EQ5RzBxJ)pBb2fQ7x5$L_a?Q#C@ z^GO}|6t5kb@f2|jlY>2SC^e4nLOS`t_`>eY`pRCfhkaxw2Rr4$nvb&|9rVV|ev z@0SZHxeW1%Q2!ak?ONj_&A1xtAIrp*)!v%?`g}wAPQ7ry1>pO<1AHN!G#+^p^M%%a zTKHmc!cM@>Z-DnN@;v7+1L^o3;+a!d$h;g#;nS3Rj>DJ6r)DW1zAmBhFY_l7zv2|+ z5c=D3-mqeR^h%&>2ftkTNxmiiOh(RjQI2G{jc2EVKO*#Bn*Iv?m)+0=^QSxXr|_`9 zFiwT_t?uzlk^Ny@YdcRlW&P^>Z%^RM^GdJ7i9bR3m0lL-fnV)<%y^H|xu*8e;p+hZ z{*W(WJkHviBSG(=Z))$;{=4Gg<8WKOTmb~D@-Fm}(5J0kYTB0&&u#A)BJ~jO>uD9tp?&VP4?GyAa;X{)S zl*{19$Vun(nDH6yyrBL!{20@VQyul5e-k@_Jx^({l z#^-{;^^-bYBj3hr`(nJdFUD*8V!XC5y7Ob}!3 zU(E7V`d<(ozZg%$I+pWeq(6**jFWO+1$w8}H5ZchId6j9OXVvc=??@s9kclX`0$+B zDfk_$uunSvvmE>dct8Q}Q}HIuBQ)L`{LKIt)<;oKt1*4-=_Taa<#L98sM@9DnQ@~Df2VQ$nBl2@zUw>m$mJOAHph#EPZ|5V zUi?)3^35In57iUS52#P`av?QdHT8ed_*8e)(m2YaN!+I(C zn)VAH&-l5Ip+Ammr1K70PWeaMlYETJknf$cl*(_8!(6Z5Bd1dNAzr#av;NZbi$Yv5 zi|5I%c&hvmZrX4785#Lh`wxBW=x45k{I>ER+Fz2>DfwvbcS-#IOuya7r64yNM>l(M z$@*URbq$QKu!oyF>Q!i8*NYoaXurr!M;6%c~h&NHSH<&^f2}%wD&8iFMH*5 zY96I}NohJX{N3bF=}!A~4*lGT zUov3v@eY2K+Dny>75E7*SGEsm8`4SNPVls^Z!i3f9?;ul>bNv|CPV)-?inx?n5G7l6gg@-+k-we@|Du)PHYu z<-hJf=u8*Pk5l@u;~DwDIQ6WYUvoa&{8`5V#din%$3{#1Me$@k>dS7l+iK66`b|Ic zqHIm&s~u$hbHE332>J8z5d5Sb>pb~_oK5u`4&k?iE-+!t`|&4+;_nAUbcsH)0dNo_}aYK=SiTWrO(4dWO`Vy;`)-t z(-~*yxW16kWw*5pJUP!od{Xg7dp55-p2Y3j`40cTRQA-JNu}9Bkk8=^LNw^(oT1ZgLjXYH~rWk2kreyotLoR;Lo)8%jXlh z4)e(Nc<8vw_JV)azF&>!uw3v*Mrlvv^g4DV;k(K8N$gysTv5-lFT&(;0V6y4z(^U!(zK5D<0AXjWB*&p$|>dk4)q?k@WRmVr?3*dBp#=J%Kp7zn#c{`MA z`f*rar@d?2-eS^Tkk|HfJekmu^U_Y^hOP(^KI{+Z(yzubSuW^9dwEzvIodhSci{(T z;v_nbsh+imTgUtER&p}(zNS= z|Lxm5owVoi&^Q}^KeLYfo(^>B;0JZzH>mhfZ+xF}hxKC}PgstAcPD$I5g_NI%SHG7 z0}{Ul_LK2jU0+iBq3c^J*Sfx?a-r*63;60iZz{+7o`w43dcU0NiQc2Ngl`q!Gx+Mc zI;E@LU#jxV^UHeF0r8mre}Rz9FCuk6enXz*-$XUOtC6e8&*66-ags@q@Bd4YyMGZ@ zmhh$yVTSB<#Qcdg=_sP2;>J@RU%!BKzqiZMf7R1NJgOlJG5x58UecNObgDn4^>tlH(|5~a?EaLsvn%As zV^`NWkKq>pUq!gX{rdSD;f{s~x1A&Ys@MM_?%DGFopxWt{YY2&{5;aP5FbmQ_VmL@ z|5i)-gP#6?EDjNm5LYALzvB54-*GwC?DUu2oAEIIrSh-oeon&DKNZsDOwRmT+@EN4 z!TE2;1NhkZVe7isAC#Ll`Cc|TfxZTO3trCfy+@?>62fi${BF|EQXlCqx&H@rQ++c1 zZ=UZidOLo;dnM>Yc+Ua(Hg79=xuUK&PoTe7weAK%S%F-Cn+6lX#Qty$5-eM+T`5#37VoN<( z0!v@SmwGG(-)9q1?(4Z>(%sJ0tDT~LN`4vZ&T5y;{@`Ao*yvHuxt`?pT>WpLKf*61 zJva4-C{Ot&T<^nguDeU|cesx2=V0sMoMchk!C&E9p5G3xccPz7EqJ}d+l3!C^wUWH zxHe#V#eU!K`R_&kYptH({O4uzdZd$XQYqs1TkzZYWpsRx*HimVyL7ZP&3RTd;rLIG zUL}V+vUd+U-U}?%MaOHJ_4CuLU-kO=jerC4?erZfIDPHimz~JDoOqjk_yFJ{eNW|8 zzIFWI?-lH0fHdKLf>ri2xXOM8!uh~YYCj;8pDP+Pe#%kGJ=U4L-$9-i_WS;2rRePr zm|cc=Fpf~~8)y4Pu5(M@dx^)uob^A_Gw1#H&0HpL2V{P}#PE2l!~F&Y2z+}TzG`pZ zhH|c7R_(b71NE+zlC&_ z%il)&#+LLCc{=7FE;p2?4|_WHJw>!z+50HBM>Vro$vs5DUZw2w$IuS>b)-W(voETh zk0kA!E(JSxhs#mT>0cxL-JbgX7&+c!a6(>ZSgvn|<#Kv%_6X?uT`hF|WYW*6qW9CY zm;IpL29zEd@cMSo0QQR%SngQQu+jtbHZM2m3`tq@IS0S_^ZQykBRv)pFuwD0q^DdH1d7iv;6y#{JmEHbD8>| zP4f3yK1QZg`(N_>Cm?S}iHFJC<49L|dkpgPFIwd45u~fUJu1hB91oMjCp~>pjt@EB zmj0Bdi!4P`q$9i)qj%4c^Nag~!v39OkTauqU#482mfHb%e!K-9^^a(m&%hpAJ+w=H zdi!=y+IH02+EQ;@QqS+{!@j6Yzt|sT zu=#1pz3bI9{t{h7c`P{mC~f`QJ#||`JMphwKHTD`Y(={HDe{F5dibk=$LJF1p6U0Y zQ14Si^wap2nP{5zP(DS^@XlA^iZ0{aN`M#R`rildnb1xK?}w01y!C!2#V>2ec17Ls zZiIRny!Wh!cXUM;J~a|}??~}!m&3a!BZs?@PC5Fj>8FmL!=!g^nEa1;zd*3Z^=ggz zJuYW81MD?DzA54wpOs`IYIYJN>>G>SgG6f0lkh&x726 zejCBBQHQf0OXtF!FnJ+X(^fm5PeyYL_Tb*tm_s{r=~9nX5EDPQity*}WB{h*pZ zQgr(>81`@OO1B^KdGCxI>#KSDb8J617wqSh`fG2A=4ek~S5xiVJz5VyFWj#(`Ft2P zD4(wja0R)}x7y8P3BBGB+7I?Klr#JJ7L-$Ze+B*gaLYLGVA9W(S51)KSD7Bjr{Kq$ z-9$SEFWNPGoZM^a_rr9^Ki)It^q}8RFU+uhPw=Ck^QKEeOA^Kzc?eO?`rd^$1vE7MCtlrqQZhx+gEjsh-`C(0$H-`N8Fuz{* z_A5>&e`o8SQ0^XY=N`86yZI@?h4LFzu6w;6-@kzy%X@D|-!p9e-ddPs`S$%_{_gg< z;`Z6^fBDVO|A)Q*53{}73ZZ|m*X#9?_n!V0^{VZ>>9&MUlJ|Q>3dBR{KzS^fel_rW zv+_SbN&W*5%P*^ZoJ2b|UySc~$t3*;)3bZLea!2JzTCohjX#h-Zw`26`12;vLHTog z$X|y)cZPBq{@n2*__I;*a{g>~{){?*>Ol_jeveK$!yms-?t`KK41XpI>+lEnL|Xsl zA=0%nM7l=W-$Fts$-l(QIe*e{$zl8^f2P<@d5Y~+lt0JOj?Le}pQ#r9AP(YucxQnB z-7a76rhLBx{01Lz?+^PO3H`cW{6?skq5Jz@1l?h`aUYbo8|2O3jS6r|e?{yaPmjxT zo{4yh!~NdSe+KUNtONIasF#8J{p-OU_?35lfp4Y2*8c_dLHlz`37r zj_zlBca=l`Ua!yV^_FLJ{FYwtALSIjdU7w4>H*?ANxaR*wYYzx z9w?vi%j^{5B$kf&%h01OcIqxq*SOkWx1@i-(-C(WdPhq-;%L^+JCOd_mh|^{y2$SY zxy$&8zZKP#-tyZ%-wSc=see_$?)A`@)O|8wZeA- z1#CS6Z1fmi48gm<(oS|9lT ztdnA`li}yF@i}|#i`M!UU*X0fJ%68M`7NViF9tF8JJvxGZ+R5W5kxqI1 zbO*lON4|BGyX1WV&MV?ke&sWeXX6v_QFt?Y4RHKDJ(M$iz^A7EhDgl7YsT(Bj&$nTEykBeKFXF-z=QXQzW(wF^S8JzjMbX!>~}m$c>q|~6JMuGqQ}&qcyp%w*2wfm zW-8WCy!rMij?cG`TR#sKC#YAYaoUCQIQdcXajN_y9B!+(qUB`9}0;fH>1P&;(Vc=2*;?+byBE{AoLv+_Z&Jq{q163S~lf%BQsXp;7; zI7vLpIzAplKIfyOm)8vMuSTT5zJtCIa3uF(m%_Lj?$5lR`A#2wC(z`zSVFsyy8u`4 z`yH6HY)>#23O6*t^B3+KhY zAew#gKl=i0exdI%>6eRL-{|M>3v_n76y$X;${Cz__uDe#vHR6p0~sEf1jgpSrv_yg@D^lNabq zRZL&OTiM?qmM5(K=&fddm?Eh*va2yz(yR7T3l4j_)h;_(i5Yk#_@M@J-$o`1k$BXW8bzM<3*GeHC5#JDQvJ zex^yks`<%~!%0gY$xkw!?}Or9<8e^T z*O*?>`#PW(uJy7s$%@D z=cm~}_-uIDJ@yThe6O9OKf?ax%IjUu@zr)d2|K59Bz+5J-|D$xwo`Qe=D2S7Xo3BV zy^4Cgr)S3M9rpCm4{Q1^^gX5cHQ((i%n}}dw@2?Y-+=rP*a3sHLcTp_?LaSvhfOb% zch&3kh2-DKg0BX9T(@(A@{R}^9J>vhL>xwT#w#IeH`Vu zUv+o3KkRq1{(8K>0s0Y==X(T)-On7oe+u|)#|hSHljD6ol#6=R;i@=XRfX#?`s2Q_ zU0utmz4o|EWtebOhY2^=Hy}?FOb>EXRk_*PtXCcK{2|u!b>an+D;!_$8D`wPKsfb% z45MpLVan`Lp~m{98q>KCvbp~@H_r5aw}Ztsmd~v*y{L9=7vN!BtC5>ye?_)i5AEjY ze+ECM9ywmc3APg{UTR-B|6DFknw%x}82*dF-RE#XUX5?X*y}6bwk7pFz5{de{bG0q zxeDb?u6Ce2_W>>s`Z+4cuU>Zi1_}4^qVZej0l6W_ce1Y;cEsT7Rk#+=9`{Yozo_zR zcUj)wZ3es%;f=g~z0 z?{D(QwW~|LGv<#;^zVpIsMnLO_lYw3 zJQ~dsuAW(^r`j?6RbEa1Gn(@JsnD4Yb{F7ESpSuC4BjB>=MUU0Z< z{wUa=XLw^CHB7vEhuOaGmys&pv8@;8Jb#Y)1>MJqzx-bt9?LoBbI-5qZ|DW#8tHR7 z_1gRee$o`%>6>CZJr!*S@-*S;6HNDU@hR}l=vvCuD_K3zaWngC-!9ae?+NPr6voe9 zmy3$Y1^5|zddz;SX7@3!)hxZ4oo||^L z@cgRh`+GXaA%}(^^ug*wi;chjE@|EQHj;C`MJ|UqhZ}N7dGPV7?E5h>zFK?GW6S4z zprFSukzSC4RDOYSn%FhB4C>#|?<6i_yfHk( zIM(BQws8z}tU8@aUO()sDN%nHs$%rs+r#gkUVeA?@$2_Gh@I1HxtEORyq9rL1uxvh%MZOuv}9H|j!CkN3i6-`!9@itYNnESKCPApOsi{sRrt zX|O>$4XA%|4)y7WCHKDCxk>0hzc|ObMmnON(HZR+fBpWkbAxNN?+}3jq_1lv7HX8k_?6)o4>PZvsaLz7!@56<4;7;ykYm1kzEAYHV`n`?$ zknZv&kM*WKX|_TxSU#BYvJ?Jq(0Aqo$!3jxcz*X<0F(CO=o+2C!irK4VN1` zAFu0M%;z~uoa=c`&rMAgM*pUD&Cch%%L+}EAJ z#rwM9pE7@Ba5c!e>KB^Tdll5LX8XL~4Elg_rZ=cZy|McjGVjmey$HL1wW)W`rw->e zoAeC#4!k*|KYP(1=-HwEX@_$*bDxg-rIaVyF~F5+xBI;_O?wjL@jT$TQ}x>QxDI|9 z9qfKW<)`+y$M0zbKTNLGJ`j$51GKk#--)%;*3Rt9+#8~NX8mw~&YQm;?8~an4|&h< z`A`mgH~S{%`>j8`$3QrtcaTdhM|(p(JSWFedZ_-c_O~;0pNh^;2nWyQ!mgz5by9o6 z{8{fe`%c6T*jMlobXl`;a8qIr-OidFS2_|t>MQu0>gQC_Pq?qj?Pc;_N%|hL3pgRl z^YLLE@Oz$cKN;zhE`J^|1TC-kfb)Lk%<7ZftD^Evx{%(T z^ho(aeGBKZv-bzB_fEzI^uHOc@P3Jljt9>F8J-t#Pr<6jNAP}2JG{>zMqzXc=T_s< z=T*LV58f+KkK;PvA22(hbTGXf0bf-QkPrDv;vpUMB$3l_KYRzeK~C)b7QLUG_XLLb zDg0fC%)2`{zhZbTCwTIn3B8|zc<-_Nv&nDX|MTMSd*?WKE`cX|Zz1}x={rZ1-wUwB z4U2OGzkv5r=uL>LmLATRGyM!A089`53)5E+QD%B_|5nDY+3R{m{FU!|p8dtb*}S*T z?M9r)yXoVKNd;dG|RmWrML-2Rn+f%*2L*=XaZV2`4 z@4zps4|{ELdxPiyDV}GiAJhKc0HrVC<$Wl}@mu3GI)3OnzRIJ< z!Bu{Bf58I28edz)_dB~cAQv^FX_4=}*WY1p*;$O zuibKJe5xfK{_-ELaUSx2+ZPplUqoey`a3v8xncY%9{W@CC*sjR9WuW{qURJ2=&_f_ zxe1fAgY=kWVZ_4h*DEI$?S z1N=MX;Iz}bI<5N}WLMLxixSDXl>oL2D{;VJ0-<0e#zNDU?hYs+ExK;xH z%euCE7I78AKWzQhbHnV{&Zj>Gc^sy^m^|)~xgq|R!2;Ty2S(H{@@HG%k90ckCeh2& z@C0}r&l7<@8=OA;%ARN#b{=wu@b@m?5(b9yYggc@4qlVi60M66HmsE5hrxM27ANxmFE5vtgDir9zWbYYyC(r z#N%p|i{2W``Tozaemb_x;p11f{7(^dNC%xRi{glbV<(r zR9%n#+|Txo{eOk z+2ir?*e0g~^jQ0C+SPzJ`>R(RzkI;k`BQN^aX)xGdX2S*ettR4kFu9@etgZ~!{D3K z_l!Z5obHb*p=_gve%UdcV?;XZi3 zmkY({f1a^3$mE|4`QY;!^)LA81GbL^!>isOqVVZByCW07 zn)Ujp&T%6uw*^;D7{ z?*GfmY4To2Tl#>HPMnRreE2-&IbT&w221Ig!c_^0Jg!A85*dr~7RE z-HZ-$cp>R`OVH;`Tw}d=I(=P4PPrUq-{n|_oZ_A}#B18e@el{7@g6qwb34Q<6i&|L z!~LS!xaL#VPbWD(jTt%PYC+!9aIRn`!F-?pOVq!L5uy1m-|bEP((&YyxL5ak1)Fv( z=zDv+u#)g&d*Dar9^P$T@#MXWrq6BlO5+b|pF7zl-~~KsS7%F6Tp}#>ob&%7Afgp$N z#RaYo2f8LX(bM2f}^Rsrt%S*5`V|QB6RD@Rsa$4y_0`mrqYh!JxTw~b&E05^@N+x|KK`5I-qGZDSceSvDlZP2-NAc6uK%_^c^oI)+5WbWZulO7 zhfX^~x`E%8zAv#qfj&$>nZ)gbeP{XtEDzh^cm?=L?+*U9juYf(a*s0XrTVWUDZgC( zYnI#N_N=}CuKLb$d%KoX{b#u_K5!lKC_G#8CE=HiJM*9#)46Va4(nCq3-ui1+w%>^ z87zL&fJe{r34Lt*IfI!6)At4VfT!ULylwpI*LjG>x2UIqukHPVVE6R>O7dCtlkK&R zhrw@Geb#bVZ*w`~xT5!H6Q8jEx{h(5eDHaM?LSENtt9VDwJ)cB3+>Q+S3KtvJh@H= zxqD&N;!GDnk1NzKfuCS-03Omu_cxqO>K*Ocez4;KZ*5=sw15?N@`3Z(b6A1k{nOOz z3*aB`pQiu50==PJbAEm{(HE|VoyW=s%Ljk5JzZ4ZNtdvm+@7z=dTsOlcFGslb61rv z;&|iTZl#m1ztMk5^rnB%{8HG-8rN-1o;uL;OhV7#hqQ<5G|EwL!v2l+REq z@5zv#?c^QnPmtTqI?lL0r2R~_xTM>Q^=IhUsbAa9p0v=H^Az)gt^c;;T(VBq0Y1f- z@NpfpQ@^^-O8SNOS=!^P;~d-j|7snrz;(2K%w=x*MfA?~GKGWt-*5i9ubY`40eV>6 zOYydI!ovHum9D&R_NE`4O0Bcqlv-y~zgBF${pKYv=j&~UCdN6B_I0*{wJHAoN43tT z>;1&ux%qq};8y{&w@Y z@$&6*tlO4CiBfHw*jV zo?E4V!}YmK-i4F_e_wV`1Lg0wVmfYm01VdlF*6s+9xyXSlg3)&Xci6WYzg(^0y<&XZ_uob+TOvK3oSoCh2!! zTli%2{JoiVusz;>_MD8$rR$aH#XhWiw#tvnHS-C#o~LTfUrO>rJS;0;3!tOPhtn~= zKUcjl%2%>Jm07>owvK#-bu_L&BEH19h{s3HApXGk#gj%C-ABHLIme4$SCb@80X!~^ zuc+RVKH*)z?7GGl+NEUuA-%4l>q@RaZRvw`rGB+nkVDc1?*UqQ>_1n!>N=b43&6hT zB>rUn7v}#pV zsqLJ~*oo%25aNef`TK`mKWnZ_g?-Xl`uY3A!t*mL$^Lz=D;&dm8u_PjFpb;cyv`K) z)@{59asTkn)TQf&iGA!KSH~dFn>*UKupX~*K*kvtDaVk<2IOv~*E_`} z7lA4DCY%?@>dn$RdZYUoI>WE@Vf*3T`u1@~;5oSF>n-iZC*6;sa;NKMt>cs8r|s){ zS!;R|FRq8{dReQz3~^RnFJn6Q(ZEf%@j9%V&0@W&wOzIU#3!tmok1Mh_EFgQp>c5P z@p-cs+4V9V4_Tk_)Gh0;m!-z1W*m@sW!KBp|6u#;t(Uny#e3U+j?C?b+69m6PhDnF zA#D%qWhp$D5Kz?dRZ7J zn|?}rxSIO)cU><#4LP|2evIx%x>OGS*RPjxAB@u1`$NB^uf{2w^!0sxc+a=HpLGuW z+1%0ZJ(uwHAL)9Tu9HPrCri$i9Lm{zCW#A5vBvWaxpC5w@2$jdy=t8In)`XPg9Xlm z-a0?bbXx}#dA1VTtH^6WEgZwL`A-yy-PiiITc>PoLvsII)8n_l&wme8?Dy#VCOrQx z`>pp?nH-gCgr~&&>~8MyesVqR2Y8@8y}s1?dB?poY^VG$t(|w?Z@**S8-{}A&$Io? zB-^h}vVDJ7KuULb{)G2G;rV(m)(QBFQ|9kURpH)`26?~OdB>mrqr`7}pTm*+QETt* z{2jkYJmYuVwMsmq@3H#t;KG4<99h!#=KM?-!>U~W2IO61k;|fn4?t7HzVZs&8 zoAo$c$$7Ja@-2SXgTsbLWao}fTVxUAa(vfLOOHo)4mq9&*&f<4dFb`_cs~yS^!}=z zANsTNL5R1^+z)uq0~4J#Qzn?=H3H|$hk&~Ce zdzj_JIkZqdoI@+vc^K&7F!@p(CSUA4o!Tv)6O-@1hWs%4hxO;(IPmH8H@(9?_VHJf zAG{Y?&gE4<)Lz;Bjq%w3m?VGrMe~0{_@Gxt&q3F(GW9EYZ{e>^&f-yiQSaNV*Pp4! zb12CF?R2{+XZG0IZCPI)oa8(&N4wp;-z_&~_l49RAU?K!zBi#qa&G7@hl^kI`#b4= z2U`2p`=MyB#{SIf@hi{dRykf(9G_6HLOMt;yqClLI?5S7xia9yU&ZgW&rOk!?^L@KjXPfB#LLFD zt#Wu~oOZla)cz!~3l%+2qxO#WLVn_Y>Y>RalB>E;N%hX(srCEFNBczkf!ckX=iLh7 zyyh_bE#v{;ZaFYJOghruU^|N5+pK;!_oYbwSG@i($Ky(C{q1sK&g=WQd!nlHu}u!g z(`?trX}#y0=Wmryhh@L7hx7dDetCLoh~@3v=nkCw^!k48GdYL+x6aqUou)l5n;npS zK`t}-d#fHt?VqMx4o(yQ{&3&hq^D0Zy~=yf{N6&?EB2R;AA>xR-E$X@{-;U8k^9fU z5BG7GT|bzfXq;XJy_Z6fbyoi6+W zzKaS^^IqXlFUW1boohz9FB*Tt{kvl?ryWS{_rH(7w;5kyFP=2I$D{m0{y5$x@1ylN z9qoNI$oti9S8~5#@PzwcrN_oG*`IfM-4GicckmowJhpe7b_wH^+LLvqwS2q?i#!UDsK?tlAbq3V+1XAjWcjbN+?$SvnNJzv15Rf9Ug`b2gur_~z#t^#9EdJPtq@zj?N8{&JFk(DUD& zs(&iUKh!q=bdt~c_(^%DZ9Es_{ebdgMNX_St{d4oh9%V3dHI>ldhlY>F5|fine&&& zkk9xuM>T>ORV(}9A10EOP{z%LlQs-7fycz5ChClq) zRQ~P+j%588^fSMkU))Pbdl%yD?cso24y-wRYc78}UtV!Koa}HOMb9I;-N^K->lat3 zybrj27<9ZX&H;M5TqOGiGV6+ezjKh_r}Kw#9IOMZI^Rt$4=4R|-Sk*ypTyBj{lyIa z3P1V3%kgiIr}9_j|MAQ^!(&PP5GPE>5pfSY_+j)*zOh1~5K? zKbygy_Uq>l%X!2Fo9h=3IUZr%>5Af$rzOL}n4sgHlld@}VjqRHrKH>Oa z-5zmc>(|y>wjiB!CZD!u*0;AM`5|7HULRL~G^3{(Id%Q$Ag32lpKy0NzjwGl@X6&I z@^1Fq@BP&E@6L4A_7%R}h#$1#t#U)SlXc6?eww3Q94l0 zblHJ@7Oi@<-P7$HsoC4~`kKz$h!@wX&L`_^jE}&7_I%z4cPzv2re3oCVM(7G)3}S; z^Ch{Mf~#rI8E;<5w0kn?_wk@l8GH0tS3Y0#enlP*^)qtzP*-{)4vPHFaw77GjbF+B z318=h{=UHR=24S}7k#f_hw~Fb9&tZQz#}7fd%DV^@ zcr@)O&!59D=+Mr^!EWpQI<9jaMdj?yj^mfIMeo~C`>*_YBI6fsLAu(ZH>#T~_u;=c zQom#l`gB0sb-g;?UEXnyM$~UYbKmCt1MqJ&zsLP3J72E&6Yd=yS=UW#+Lee2>B|w(5ua@3hzMzsnn;A4VVQi7a=88+1(QWBLg) zthS*~(|&S)#HIUXc6ROOJm91rCVp^+K6}@pPjXLkTlrP?Y5eCA-}j+@G5N`H>*0h> z9A6&K$lFs%{;bK_W3WR$Zkio>((~27X{G_?^6Nqws-}) z9n9R9-5jUGyer%8>8|any;Xkf%D~(7$G8rv`)OPKp5}ap{@js_Uw$aTm*fAbjQ^nX zNy;nz#ktJ6arG>j&voo)?FJdXrEXZ)at$;S@+Ahe(EG1M*%*N2aRK>|E>8hFR+)&59oo*%eU>lvIHK=1NMsHQsMPbA!v z9{fATS4HpDAxyw~3P?_e*Q@xZWeE4yFz&^r7}&S`Xj|2+6*{B3J5 zbX-*Uj%56Yd6%nWnf$JT804&(e0 zgDZ?&R6yp17aI_cqSqW)JRD z3~lg z`cfWXpWQDVY;T7Vp@Tk4%e&x%SZ6HAxk%(Eu^xHBz9qS6->MepdZc~x{yXPiBw9Ke z^zRD3W`Ca>O083!9&q}D4;yrR2>yx9XW&nVdM|iAx7%l;;Aancy&?B&B8)5Gm)1+} zrB(VWeo8;zPc@hqEhqil?;!)aKLUS|?&DKCMtVq2_haBM@9$3E{tGSp;&k4r_x{6P zPJEsFlx)AmlBe%P`j5Ayf5y{4jr50G((m*1`;q?bmh{hi`sa{dZ%O~Gr_Uq(g_iU= zPlu(R7;Q=af~Uh@nRr)Ay7~hO|5uRyvX*om88rP%NZ;C${zXrJP%cglb3Cy9A~Q(W z{V@;7g$W-gj1FJ*@>}KNw5Qv>_8J$_eUeYeg=w~P0RcJ4heVeDxaX@pQ@<}(JnmPW zVjOF5iu|rrr;I-pf6p>v{z%A=Dl?bKr?h4Cr~a$&tEu?=>L{mjSMLq&4YIx7zfiv8 zp7B|iuUYnI?*>02GJF~7QW(ZQ!H2!wElB^Vmh>k*9qWF>r&`i=-OS) zG)p@4^8L_F1@Av{`7ZPVpNG8uEcRu7knP$&tQ|g7$M3Umd@ek^k>o@}Kp5otLY9#=fkYpHH{?>VFgOQ!ssy-+1g>HQKjt&04EV zIgSTWZ;j{Z^A1<8Mtt)Mm-<^um&0iP#+LpyE~D+MzoGBp!miYQqa|PC0_^|Oq5oap zKfiKc&g3bs=WC=#Z|Il%8h3W6_nA-+<&BO5UeDjjl-$oNoh8aUUWJ(D0$z6CJM5q9 z+vh?*S37+C%4e~^Q0bPyS4hKmf2enj*W*_{pBrX9lsEVSUdcWBKdthDeU^mp#(cxd z)dPI}y8lkF@6-8~f$IzFz?JMH&A>I6g{$QFw7`|3TVIB5eYP(s+|z!^{qIK!*E)1p zPhIWHQRwSGqr8}XIEHk!5A#U>y_WPjPZ#-8KrpI9#8lfRqtKnFg3bsauE80uyCG?UB7&w6|+W%yK5 zK4ILfeW67k9|Rq#kDs!BVbN+o)RM2`A@eU-{!AwSfh7Nl0Cz?%A72OGt)X59-=}gJ ze9M>0rRj_7^Np_02_NzW)0am&wEr;Mm#Eg1)c&R45nUalM~^vHibWL%Wjf*_XhFVulYz<%9YGycaLocbb837vYnr>iq1PPV=*e`#PTv zaNg%|@+DJioBM*R zL+n50zes$?h8p)pnp~-$MY-zqzSN;8&~1ot1^v0CnisFIQ)K&@>S1GINc|_ zpA!0kpY8pOo|rTF`)X;<^kUT8eGvGlK9BxM!}3q`HB3HdoL*zk4QqO`9``{1s+Dga zUje@TPNzYqQ@_$l?Osgy;BU}=>G+lSXYjvVZo)oqj?Z{c$?@uQyduR5e+6IHFZuZk zP-^9{3PM)=Q)6#&@1Hg#$ zQ7OG$jIO}f^exb*-{^z=@~ccQt+JgyzH6-K?yP)ihUq!opMDta(l3z6&+(Og93P?;B_PWgQ3c*W>Y#;^U-Cr*g$#?w()1%l!7`+(a7QlH(cPZ_2qml!83y zc#glmvbGO${&(8DfKR9&@X7l-e#Myhz`ry3DXL!JFaN05XMR28^Ia+A+dE*OXNUU5 za4u=w+OOxGUgme4KnH5)Fb=Q2!K|kY_8Hs}&rt&YN7#R!{8D}!e7U^gIUD>Ev}^KI z@b>fM$1^39f73_HFHW#N``O@3E50MZgk&9QPg+*pofq*tyeF{j-RE29^XyA6$$4E>;&bO_F-Q% z&VD=OOYW79r^{7ZFXB7i>*Jxl2Z;Tkk?~8eynTpv)cLcY{E6!h|45)`iG0{m^?Dz1 zyZ;g6hwLp*k*_5?_lI zbo_2D4eGdb(jZ~m98y(>Rz z;~*L~I~|XHbi&5NLnY$}-qUmZdmXQe;Sc-ZeCc&~^De(7J0At`+>QqRRkQr_cB|fQ zphw=~wcx+W0p!TbrRj$Lhh2Y$T@TdX6nQ$(yO60D-We>tDNXM}E4{JL$n3;ZBGVq{ z^!HY`xjc*Px%&JBTEn+j8e3vd`83mRvJJ)ixbobTItPRt{QJf3Iq zm+gRD<1d&$3@N{Lo=AU!=jub86@Kr~>)DRgL)_BpVg4}m7}A&Un{iRroAZ45(J%3N ztku&vs>OqmzD9d&>GPg`44Ax`{g}KRMLN%k-*LkX%iDbRIMV5t`}{+$yvOaqJ*3Z( zd`6CN-p%MjISTJ-$(83gB0`|CH*(0i>H92=pnZ=mYpq zvt6VUZ_f|oU-{jxFO!yE$9QRca6dbl9~6g}9^!Y=G1h}tXuDd@>P0z&OZm1D>Fv*5 zW1be@Wb!8!uEWvp;ha(=hEMi>-knj6czS;$0Uke(`&6iRo$D{ZP=nVIf0Q@;s}5&4 zj~iW|&PV%(2lFw%q+ZE@!)bnvjyG)3;^Me-P>4L;bY$8Bf=FrLNCCjQl%V@*nd2Cy@S@mh{Iw{c+fj?`68#fk%Ei1-BOxBqOMhcF&^uFad$dMAg?L22(=)^)qGu@=VVx-C`}yKK zes!pYUXM8ZI3E}MyFVVMeg5NF8^?C_20JoK{tnKPfBm|?B629y`C%xYwoJd!>srP$+Z*@xb^p4lfw!rzM!?^=rU9Z^!KKOc#@ekvT@g3v9xX0fu z9pi?}1IHzd4-+>VpQNv%^vCgieYaix0p)|Dwfk#V+x!6UU&qu7 zpVuYvYM*yqdEX4jpZi!|a-Shwg_`rl@k`c|ZeV_g_9XYxuJx1k5%w34dcQNdX@wKx zSr`|5+^L3fNBvffllr|F`A58;*x_`((;oxhGVnXT59eGiGyVU+?7eA_T-kLVc;9=u zRMtLPMngO7NDOId8nTDk7|9-oO)CM2l2}q@RW|{N5+zM_lWl^nt=QbDEt_nzxi*V? zlM>15g}pC@26{m^(4AO_eJO0RJW^OCTDBaH@I;Nq6ZXW674x0*efMSNLuD06(Y9uy z3O_FL-R*4m+;h*l%l+(s9lq+F=>hGAagYDuUXT^>YlZw8H-5n`s^8PYFSD<>KHa)) zp7h^F`X4Ux3w-c-LGXvv=^q}+gvU;o*Tyu{@KDxtIzC)d{^y(2TTH_@N=|3sDY}h{ zZZ)?@y7upAQ~lEZ-Fi&+*D-G|JXq>bu0}=YI1WbBMVIgNx5%He@==cSo8@D^kp2m& zxU;K-^=#1N%FrmDR?zqU-eo_I8=lMboiK!1ck!tsp38S;1%`3$@U!TlD(EqQo6 z<@lXm8;`D>7v$tSjRS>Lavb>)+m#HNWbs`^*r>~T;F(jnfQl&QQqmtX-vzXvln)&>5XT~lJ_rgzHPzYGWhcQ zvJ}ra8{ydN{LAn8(mojM%Tc{i@lke1NIVYI)ej?*)55(T`{CCFJZML95BYa_U_1%& zfd=6!HzX%M?!xI|hac0?qm*mpJN$7StMx_5Zd)(Ek;_T6H>13#&uBaluEID2n=~Gx zoI#!)Zm*B|zI_w*m+!yAIM}9nLvngde0nMJN%QFQHSvYD>MqPyY|!{SG5FTZDJf#pXR#1F<9L+0<^ zW7*4l>~g+Ee@#k#Ih`$f{Z?g>^@nYq!e9Esq<2O1#(1J$kYDX{y6?{Y0B2Fb*5wDn z)63eo=I8Z}8QTe$IDKqMVNx=oy!H@X6^!d!sRZ|BCl_nB_o@8Ond;=eWv~pV5EV znE96a`4;}a&&JFp)n|(Oe?a)F zf-}~uI-KaI>HH3*pBBCk`#5SE0Rz7OG5N};JfEXIb^)C z@zbCazGHvZT=--NKln#{UlH{7?|HsmO=b9@T(W?29bCQiI{!Uuzu~ur_xzAl=UIQK?e(ECy?#jEX7_mh;BpA}p*`4> zZHGUkZ{q#1iQ)o7HyQt+w%=yy4_*Z*Ebn{=pdVKGGWk}%ljSSU_naR8ybHI}2cDV3 z#KY+YvwEoGeBbh;c7|tvz-|ulf6izQG-{-xT!|4^}dz|x3IMYzR`=5`3A-4X1Je+N)oPU2p-(SH! zUMlbBkj!6h^Yl~UcwOb4zE9%2&98gI*-4dmJ-USNK94qLwk(t0Tb%Cr{C7x)0rZ}^ zN#iQ#&(E@a)ccV?QGX}fn2+yH*Ep`+pLir(tk05e4)0;X8$v$66RzAY5793i;X}XT z^PRXHpAHu$Ro?lq58sUskA%xjmG^P*ZhSZU>Ug-&_x+f@cTk?~T&5k1{f4&x z-q!EjSEYL(!i8j+dOXrA;w`;*Fp>V>E_yKqSW~1I$~)hpzSMoa`M#}NRF5g@{R-cx4n z!g=-OlJLAs^D$G9>mI@z=i{3C(|mj;)+_icj>i5_-suzP|NOqjd)e-I0iJQq^F#lN z`K31N*V>x@h8ABHejV$Yw-QfZ*ZeB*H2>1Cg;VX79zF98eSa6qU+gJ=hra(-2=&+S zyN|Em#COvN@56Wb#r^wx^!>fzRDIIhKZSV=_Al-auS2fxQ~p`h)A=6%{#zsQ>vMynb8te*-%4;3r-%Y<79pERfi_ZSt{IT}^0KR{zr+xD)+xO?tKIucc9MpHLOX^Sc zls}~JA)HIwl1t%H>ZQYDC`Z5a;{)v4C(VZ3*^N0ne8{^`s~UubcM7W^OHzw}mq-|SxLAEsd`Sz^6G{u1~bpl2}87vw6D-I>OH zC53#qXTJhIf1!uZ_XA(U|K4z}-t3tleox=O5Kc;7bdFZz>5Iz8`8@Iuaw2>o=g#L* z@j34I&9uJ4yu^IXPrly&G%$LGaJilEHMDQ`!{gb;UhjOY2S148JtjDGpKciY+mf$k=8rEE&YHzTK8|)z^}w^3w|jAHp7^1>w>zPF z<5urusQ0a&dY@OlFXOxPh~sS%X>|MqPCJ|3moxuX@^jK;Q2y^!HVL zzZ>%0tLIEl89pCI`3HO2`G&qD`P+9APuBxq#|P5`?Qn8Z(Q>u{S=3jhU9gU{47mMUZcPJ)sz#o=lqU(h;}OC+6|9ihDwHV zM*t`FGWC4Ee>u#@{tIyb#s+XdAL|w1e&VjkM(x}?tR}axT^;DX~1cI!)R}qUCi;*836aQ8^C=$)+@k$Y$Ldn>y(q4 z!QBCzeCLGpek6zc*JJ+$djBfn4!=gdpPy?R6nFVRY-fAFeg6KWNqL8yZ-*Ao_kYCq zG!n&2wz=OVyaV$F?76NVK8_Ffqhmgd`Xt&XitD{A!ns5K7pCEkH1;n&RPMJ+LMg@_ zn+{(qYjQl6%>Q#7bmBTCz|MGs!KLwTbntmT?wiTp!F=$|@a$ig9YZ@d&vnNE`C#iH z%Fp{E{R(_|PvUweyf@-UIt`3}{Z?$Jz=z+w4nCN@5$~VBPkb1_@2*`E`5?O_KUZ7e z!_(;od`M#4yP)@6PVNJpA|G~czz6L=UXu@J(au_Y=&lcbH`1@bhu;<-e&;&*@Y&c- zfe)X#4nDY?X*_)NI~)&ZBAf+29NmZy>yC$`J$%?`Jh=aDfS&^EoHhA?^_IrNfk?js zAND644?O1ueZRqYcqz71;KPg8!H3@QaPT`E5BYiJ0v`^gf0glI>(J{R54WtNmu$Vb z)_8ah-(4?34+qm{;Uwh=6QBE^(7pVZY1EhIzqGg);W~F+))hOe-{D4*e8(9!0#nVpSr5w*Th z((hgF=Lw%K>-TN5mfx6uE5CoSGROH)^?omF@;Buv+@I<<;Hs`s;)so!0*{`;xYtjSIIvbPI4e7EC^cpL4WsR@l^ z#swSGs`vY>hx`6$*W~-XCm6ra-=~W95d9w5->r55hs#gd{fV#}I^b z+_bac_2YT}xNq+p6W$N}U~2cX&X@35&AwkoyEoyV*^`SJcZ;N(pF=eHrk-x4%gSF? zzWE2belO|E?s>wbF20yQ=@i=G{^oPiL#=dH?ait^i>I33O#O{Z9w2wl-*L&q@SN(+ z@%wNE^#K1!Ti@IKK4Rn3@M`LNQ~j8nJlX9B{*Ub_HBrFph9TJ?6$N4bMsT7E0GQ?q!4$)Bz7P9ilq zguiZB@+7%wRTtUbu&rxMu6Q2hmC_Q=kygovR!w{;RZ;E~{x$r*N1X!rL7( ziPZYphjS7)AU!8OOp6cQb6IA87(M9^Ih?4ULOajb*v|RNBF`zW*$(tjxkI`nv!wU% ztoUmEGxSt37&mzeMO8o|$)ia*1uKN9N?d;4KD72SN_HO9%Z z+F4dVHooyUY~^em%`<;Qa+8|eH z-Sxzf+VQw29rjn^ynSD#?&WnaNjN?3zq{w@CstTKo~MVtaDI=^^ZNw#o7Ssg z>z~(2??0b+cs@I>{-gXu&p2IDlmEkjP~&WDk?mF&nLoyTb4L-+cRp2TJ>SlwdHu4> zZ8!qG!~BNw8_ds`-zhbT|FGx{J?Zs%ZYUf{R>j{*)~`-7KOx^bL)0U!i8;bonq&S% z1@J?URD#p*cs0ri>C>vrvs{(!dlx&={Wj59qESk+)d8sb0dq6=XBa89_2RsAF}xZa-I_YuDm< zpE~PtUsX6;o+W)!(I4Z6^k@CU)Pv!eI-nll$G&OtujKNL`Fc{{Ct1Hre?Q+Bz<%JptCah_obR3+S#myy%C9H8eN%YMuGQu!eH0y%kul^?3JTv};+{fg)WdU?AQrxVIGgnxtI<2lpX0^msiUxZWd zFJ`kWk8$hmWMzX7)5*X0ey7XizpY<9zf@-b(8G>bw2#V8pT_h^u(tDj&$vEGpIt+fTel^+7!Lr&kzJ`N!an792M$WeO-67)$5^rXEA`Tj?Q z1AKKlRz#PKr0CZ)Sb)ll4WXvehpGjxzd(k{Hbh$J*lsz&c?(lCF&2zuN11EWau`(SN8wK&~bq^9q$A~nB@*|BC{oJVT&p3PtupSgt8 z;!9VMavly9vm-*|o%b_-miT@*yo34b1)c}=I3#|5ZVtcCs6F(`bLNeAes7cIJU)05 z`M!Uk@$L_``Q78Jq4Dk;=lR>?)TdC+;9N$^^;M|y-SYSRvss6h@6uSYQG*ZQXSR>A z@!mggAm8*f{Y#1Ozq^3nyzePgM_BGZEU_KmUx)XRo}V+XRAc)2dH)_p{5)N_B7XcY zSSNeFub0u>=pEj#*3lp@-*#o_^OKD*q4Lj^D|lWtW#| zPrvUEl>Y~F#6SHLtKWG4A1n~A_&vGk?Ovo@Ha_r0FW;DE8ctPAFJb(Rbu=zIl>2x; z)A*9UFKIkT&rQtgyT;>$>n-@x3ge6WO1kGc5{>V8&Lz%6$voTVIuPq#>bWon{923+yU+Qx5HH?84f`CwZCsxvpD`RJoc^K0dCBH0@Cp1L zXF8TJ9Z$onay?)e*tm=PR`4^m{RRv6AAGm?fvsyHf%6AF{vQ&KE9^hUev-=}biTsx zW9&B>?cn?8QBUKuRzZ88!*A0Y&>wR@&wT{GpVssW?dwp{e&1oyw=DYld};c_;P?zu z#<@c|?z5A8R3sncCLi#t%xYhj@B1}9XYgSB*Z&9h@A|2O?{4n`ybN%D5x=G1vfsmR z{8dJfzTf_X`rv=sAfL+(^4a&{m_AZF6E?oTfZx2=B4j=vpnIb~_A!z!n8(x(>?fBa z-*0>s`NoeUIRCPRaJqgxtnWyMjj!0pCx655XNw$HYqobhulIXnl$XzrFb&xsp&j5O z`z^n(#m}prLjT{_)BjPmgLp*a>-_He_*nS;g=Ow%(fuJNzc$Wi{$!H+LHELkvHxKG z;oiYz%y_szBv~aL$Cib^`FAky%;`Q3mk*m4jP6f>pSnlH`S~QiQ@)}eoB2=DQ@Zax zjQv0T{Z$M7RjohBZ~d_zd4QZdAD_nemwLWGrSJK?+$i>U3H|^Zk2!urh5m-DzYsp} z;}zqe-g_^qjRVTh=RE&JA%7{)U+{d)TYdFyK4<-WUtobAy8pflUs{0A?|qE+0PJw@ z2Yf8F6YuxW@f<0%GeSJM{`t!_ebkrV$?Maev3;?<^$+IxU-0^fQ}*Q_ z$@6(n_OU{~=^y7m^zS73+Gkgr-emrs8|yvxqUk@{d-=J*8>N?+h9{vnO$B~u$26RTz2Nmqf~P!5Ig9&nCbSPmdajkNGJnGTo!Gy%N;rKUGCe2!#^;G&GSBkk zT<`ALveHxD>~oHXr=z~zBKVl%d}E#Ptw}HVvtzviJuYrQk5G!|C7KRrD{V%++cux< z*&@5%@yh2#*nMr`)n@rI#w+%0S$4ca#pX5BzqALqp9lI`c%F#x7Vuo!08g{8oPPy8 zFBS2O{EO#T#v-1}!gE=0NB$9R!U=sYIL~J6FQ4CGFS!2Ed7_YL|A6>na>smMr$P>w zNT+m(-~E1kn;$60A-mDnr)!^AG5yVQA0U3%cRY!nFyCf%(O>=fJ}=BOD!(t%sX*Vo ziOW$QPrGJ+NF}z%^=rOw@D|A>VKClxP`8{2foN!%n73FR>`V4@xm3CM!>#$zR z`7e~W2)-g7CfAs+WuNZB{sWUb-bZEgFX28_j`Gd=Q;`md{7K25vVF+4;bVR}$-nD| zR<=O6stf$?`^v4`DA$6k8tH3rnSDch@3YCQ$py|oO0LWEY%kKSZ2Iz4US9V%HfG)- zd1Q+FwdTE@XNAwq-Lr15wiM@>ihisi%5}bP`7>&VX?Q+apj^lG=&H>CzItregm?Y$rc&Sm^)gM*UYmPJRsiUxWkvH#l3v zQ4VV4hwyI2eyjc+?kYbg4tSSXueL;ZM+onp|89xn*4K?kbGk>r;#SZVqoXl>FY!MP zyg_&PQ^dCjN6q+#Kfr18`r!Omt)HLXp!_=dF;o|QO~09a#`X5+QpRKAefzs3Khjv< z@Pl2b@>@SB|NaL#Uz|)`e%yafc~QOi4nq1L2?zRLJ74$oDc|l9aJ`jk9Hj2ogFaUM zIDhy)-Q0hP^_}bGkPO#-JnV)%IDaD^!yGqT?^q!p?jZc4n@-dn-Eh;y-=A9klr(m&1* zz7HM#^o)9FkezlG;#U$eiD$NmP!BVLL1qrDU1b$jPysBd=edH7l0!gZRDSF_)! zC!?Q#>y}x{$rjghu-of|3+*|b0Uza*^HfMKkUUqw43 zUuTaM=$;-S+`!l29u?eUrqAz2JNAy)5jYC2Qm*~pAjD&jERlXkNWY_Lhx9{zZ)ZsD zI<}E`CYq&^0qMK?c=)VHYf@48Lci8hy z@+lGgfS2RJ?5%u$>iVmz4dIs|-x_#pa62XH+mhtg_3ejHK>qt=h4d+{sC|#qL$6BT zqn^_}>Q(pWd=T|5E_xRD>D;*EZ~h9>=i^nw4=big-FNEwHZL*%Vqqv*~Q>icy@FN}|d z=)NSpMOW^t!~D0(?<1?ES4RKtg{hOS5B=%<8X-UK8uNb9kH;Bs4VcAIFizJl zkACWEr>=fXpWrV&%6etxqn!66J^PVS^^<-RCF^j_@7p^ZGCQ_b_2`v$v}}=;Y<>JO=%4^uI!$x4Ayc&v}KE_p~MPT|m&qkdFOnX9!FskIy}h z3KqYIe|=u>Z~FHoeSaF?_1>d@e@fp&IPdZd{Qlh6RgGz;7)Jlv`VYzY9Ob6ELO3dO zgrmyw6!(?R{OdViS5GqyCn_r(@3H=9p?=)g7RNF6NjSghCu;1uZ;tC5*OSm&ii4d> zoQ{o|Kb4#_g`d{@!+yz0!WrkYaoS6|&%H5oQT3Q2Ub{^BMtP@m)azr>&hqzv8q@f0 z`K{P)GTb&k?)hIQ38&A0&j3!o4}H6ji+#}dqPyc^dY1c#KRj%BKyNN8F2(r(<7XIj zKN3P)_a^)Ph{LF7@lg2t+j@u3zdx(*2LXxRWA%8Q`SHzeI{-QF_0Pw+fyEPg;|8{F zH+esU?~1?m`KyoPdvBcVsLCJ1cfAAPnx?OL9x3jRD30H2)-fgN8;wKl%W2H)(70!c z`y85-7nFB-si~gs>j)$9Tkc#fSjqaM7|^E=>ouRO&#UkFb`_&+Op zF%6HW3)BPgeZ6v_f8S?@`Br*zzuOlWXXUowY?FR&kLCIl?-0&XZahwG9!%=lrz0FU z3l64upKz9Zi}Oq5o937Neb@s0ON1YO5%GIibc^?H*M461De-CnKi6Y5@f+(2gAVt< zaUTWY?Cv`+&$GPmJ2y0V?`Q6RuFeX7wwL>Rs~y#ozjx^G5Dw9;RTbTaY<**P757to z6#2BnW~tYs->a;C-0ubZMdi1?dye+}yJy{xb`J2OKKvK6}zxAo@9zV+NQl!Na5`owFH zKL-1)i1!KA3+v<8-FG-7I3!Mfr;BpNikxhjMQcf9Hs2 zb&hnYIG*dgXZC~r^se;s%j|a2^TXil?MBZkMW0E+U72J) z-?hTHD#Sy;Pu91%!x7*`{c(5VdZHUoi~1r_d(O|pdHF%-t)EZoKF;!YL#2;eWx`i{ z&nmyC?H1W5Ov8&wq^Igt1qbaU;Qh12TYBy#>A7k3)4hLBOMD?nwS1~%^uM*|tGnA8(#%a!%66gzf(2nVi zRxStr9n;Y*te3QzUuu&tL&ld7K8EkWC-(>M8WS9mA3Wy}&QouNt=nfgFNhBp$Orfx z3gay9^GNmwgKu#Du66S-4wG)JWRY@LU6edB&KpX)$75J$2;DKAd~c`!$oFx>uAclG{O$hA6FD3@U((&5 zGA=seAc*yI5c1}Hm=M3CAIIOn`el^h`O{XiOgfA&lMac_;U;$yPWe}+h9;RmZ1Vm~ zsBe5Y2Kb)tf$wO94{$Zv?odZhtTV;@7%xoi>UAGA=IxczpnbGuMpOV z_2YbiQRel1K6o=qn12C!dGe=v;KJuI^MC%F{RjCW%uSdc!}_-VCoEU+lWg5F&+)m# z?Jk^eZjzoQ!8IbdBWbNTEy^C}kP%fnM9}XAr^Y;oapaIJF+tWpFFB#`LYS-`z z>5;16Vfy*DeyeS80_`F1cluj|_e{D%c*oVxkm`+-jv;LkPJDMhpd9(2{Hpdjr1PF{ z`!GDe>g(NbCw?2g$#~oK+^&+~8)}Om4j=sJvub}4~Wb!auPGp4}-72fZuvg-u*gp{}=pReg3iIs)zM>U4B8A z2U~B`&vHv@{5^yGUO&s}JU`zT{YIyM{vJ)pe$nU*KSP6b8W+Bq@ERvQ&UyRr_ZI4( zC_BC(8JcDNi8kqi?@q4?i(|o`T$lgR;eJ|h9l&?(=lAb+KAZU5>is=cz^9Yv=li2? z6F#@iy1jA~_Mh{;B6!ldet3MJ_2ImoU-ofv6#d9=>Tp2M365WKIADh~L|5mN`4c!F zUCfN`pv!Fyx4+|hHY7fufv%iqcR?;(j+05!B{RC3ea3cv(c8g1Hz|Lt>r?jtxjqQV zCpaEPCfQD$ANAhP&yP7Au$TWH%YhEw-_V@oQ~LdjZw`;4SDmv9XA{AH((RST^vSkE zb!xOjIwl?RHR?lr=QyPO@@A(G{KJ!?kHc;LWuK3_`hRqh^`!sv_&e+&hcns(quy>; zKMyxmkNP=(|GlbuQ9t`WIQaP{e+%R4P3WKg2F5A(MR)+#KL&kvy28I?MAuK zJ>e%KUs$g(t@^JdP4XqKAJanp)aV5L;&2@VT)pwwxX%uHrtjTdi(Aot_yzA5aezs^ zx9R-EJnH$Fk0zym{QId`ue+}xX_H^6jeEp7ZsdOZP)UKe`GvKAyWqFaq@mHYJ71F7@?uzThxGo!hjqLnIr@!6z<8nPLJAca}?R?h<(8o?s z=-)}j$sB*vzfsOt$Vbd;-cG{#FC+H~VjdTq7e@lyO_td1(30qD>z+<5*VyyIB*&M(dvX}xX$R%! zPX18v{$bnkyfhTyZ42Hu+vPbC?6YRSGyhTb{v+!>JG4r8qFpkodTy7X+X=m2i*iPX z)~LqeM8tEIa5|o+BmCX>mkaaezR`~Lhy7S_-drZU`0n%@;`-%H4)4)|o;{McpWkoz z$HM22J5GnaqfQ6htFQKB{5iI-_%rvl+d89HkDEV*^2GBpW^eT7=k^BX--h6Bh=25t zUNiq<{&c*2{{3CF@AEF|udsf$qWV!EZoxbNI>&hzqs8m{ybHT(@*ns-8pbn}`yI5$ z_u)8?pNa6J{ROt4E~tIRBSU(V^m^U%ZNG%KulIiPd%vJJjo(vIpC-1C$iUZokty?A zG2hn}Hs2G!J=^35@_EeWTk7kBspN25-T0O7`*);Xa3Hu_Vea( z+0UvSrr~AaYx7+mR~!|7F|L^Ue*XNvuw#JV%1^7G?mLRrw)3GXKG(!&z4IQ=Db0M2 za85JDy*IIc)f-j4n&cz%{xMzdARh+wJFR|Ov0vT)6GpeOUfLo5sv0+=oG(cyUX z{V1?UWak~C-U(apkpJ=yryJJA#D5T-L;5h}4D=kphmbzMZvOGueocHtJ1%d|j|+g0 z``2#;-)_gR7*F3_T_ApGEN}ccm6zXo$0FDF!sD9#-{_CyF0Pk1#^VixB;w)mzTUv3+mHIi?GUqLX@CA=qW!%iT%YYum&lJq`iT23@P2NSeAwc881_${@S|Oa zzoPQK9zgTS4)!1Op>qYpYeHhmb zygxr|-MLD+*y;K)oX%KpTJ?%{WvkR6zGdl4-){s2vVSjn49b5i5BWV9w~CHT@otRwi+G3d81ID-;H7@<74dN9TRCqxp1a|_af9<~ zvZs;-$_3^@uU}*Q^_TG7+HaeR}$A zQg=G#euEfa$o23M@+Io&7?+Frnd}$HfsLzHv~x1IL&BTz+uIpu5bb6T~C!dtUul%-n#EGjGBJUE>4+4%0TrUid8b9^knC)XVIL*)X znjSdK|K#hR?)}K4ZT08#UN}6Y{*pG~8BxBUQw4rQv-&>EdP8NvfqnGlHsO?BokBT> zbExES;XD<}!H%lmNqBKzox|(?rNd}JbT7}V{dv~+^U8ML>MYw&n#?aZnV;A?e-G;G zKA}?YeL`==ch~>mr|MOE>mhr@;4nMY*Wd7$&9VLJ9NRBd&_4b!?;#zqZhIRFFfJ65 z2T<-e@!Qu!UH==#nbX7PQCnx4Ji{KF{OKP49I=k@{UpBsXwUZ(`W|qPN)R15E~hX) zyLbAKc)310h5mc}>)myHe1|gM zFAY9>J@@;Wzn6U2v%SG}Q_0=~#mZFkaVH@?i|;tST(qAmf=6~>Zg<@x`-v&;E1M(z zQGPq*<(hjO#x$RZUS@ANykqja-ndLSeO+yK1J~7goPy_5^7p-t6HeFxinEj?7jgb@ zJInNw$(!jd-7DntNA6ERJbG<9yqGl%pOD0Rd*b-OcZb`@$6HXs#@Q3NxLo_--LC~Z zV@3P)$5%l2r_sOSOy2)f)-vja@Y~-1v&irD$5H6}q{kiN?;Tvf9jeZg9?3i;73bz^ zkK=HzB#*+QF)S;FD_3lE?^^?d)m95xSf{KRvJ#c_V5 zIDXc~ALnG&9v>%)^{WN?$!@iK4Qapi%6Hd(d#l@bHedJZU(64Z|4UvU^FyCJ9nSNA z)AMcK=xslrH}W_X?<=wSPV-aR6knw`Q=3l_&lErQY+?M0=eum)VthJ(XS5(sOQc74 zo-9pDUKlUU@0r@Jam5s9{xtPJ%5OKl8TD;kcUIzkQIw-rCOPu`u6D1|9QCH#6K1Co z&ivk<0-Vom0B3$L(lu~uUq*xz^BVOa@e4x{&bH*V&3x{+1f1<2IJ@hxbIw1+p9*m9 zmwe^tGj?kIva{i{*i%{4_0f~5acO#cA^REEL-{>! z``KR$<()5a9l&#pdA()9agG1ERA)c#f5tp6xys?deC6=Te#!Sk%YNzlhv@GJiQ-U$ z@>A0%@b@Nl(Z9FUeTIm_0!~@zS`{@tXG{HoW&MxlH*LTvG+P56Qn=FCX^P z0_j^?5Iv$lU;Yiy(dnNFAK%y1wPSuemA^>mopysCR=$MhahvlO z_Zf1Ye>RgGQNCcms^4;K$Jf*F>r?)oQ@xN~A%4;RD2uQ3^FSXI+L0gOXq4NVCD%;D z3+XK9bM)(YkE(y23km6u8lS;7y%V8+3;rR*Gg;sE@4K9((Qou>!V5UP{V0d-H!{16 zexu*QJaapK#r;8R`;B0isQmFV>1Xp3+nr^<8P`c6(>)$*!wdF&ujIE${$)+pFPVK9 z?Kt=Yk|yntb?rX0e|_ED-RDx!FK0H;gZX_!1wD9>{ddXYCr<9{s2CP*HqRZ zfBn1(>_F+G^D!>CQ*pta)Y}&_*B_vNgZ2CMHN^C-ChzOy?_W3nYHWW^{c7t4>eoG) z^lO#)>@HDWTM?fs>GC}FD&h``rwNZsv7d-XjHl-Dg}eIUye5Cw`uXW=lwTK}>!h>K zztN8q!aq$l|LR_Y-I4F9%4fu5>kj$ZcW~aljC$ZF=&bg~d)o(@(#QwpSBm-jC1=d< z`ls37DfI8{quzFt6ZGSH&He9}(E;OuZ!0MtSmFMi-Q#m!zEx_f{CL~+-_}2C({A{) zrrV2GN-J!Cyvg=QRDRsn5%??JL;4LB^0hxFlyp8*`K?%=`)nZS->3Q-?-(}@zwZ0E zt<={1EV#8_IfuJE;&5X_inSBA?w=(5`w9PYX^HToU#Ac7@b*U{{5lUXD1YRP=)XjI zjW5Oe-tTYX_YLSbNmf!HuNwDL<0~wu_073jARNhp;8jM;r(11?XaJ0PUYv+Ud8al{&+9fy?-T+XTN_1ctrkJ7Fdt`M|`S)f5q_! z-iz#Kbdlw2?w1*KUafond~{ZLlpU^6zT5EV<`4Dd58Utn&CK`%p~>w1nIWY1t`0tC zHKY)N%-)4bkXDf5FSGY{pv{?Wd1ziK)_iNt#fXQF}9>iBs zlK#jrX6whV;J2Mu`7%oQ+Whuuq^4i*L2CO)K84i$-Je8i`(i$U)Zzwh zq!xep8dCb#zv=7HTKG6pdl%zlo>s$0J*|YhJuQc~ds+&2dYXm1JWaz#JWav}Jq_VQ zN(08B$>E2`i0AG2-o+0YV+rzYe&#uxFm8C7pThQ`*?eJm#(B@ypN6NcpAF9oNDa^P zNDa?(NDa@kNDa?3NDa@^NQI~K4aCR087@D`2vRU7F*yRW5|bk^FR^!z!0*K52h2@O zo*-X||rErg@S@^W4Y50<-Nx0Wj zyvM7Q{&e`=T~CK_o5ssO1&M7uyiMa}kH*VyYP`Hv3Ek^qNI#^qN6x^lBkBdQBrWdi@Miqt{O(HF`}UHF~`P zX+OQ}o^7Mo8BeRe{!|2;MD#i=dUZsvS46LuMXy7m*HzK$N*}#K__)4DeGtZN9{q0VgP#K3j2}OV z)cEleNR1z_M{4}|aiqqNok)!zJCGVbwj(uuG?5xVehjJcgE*C<3Rqw0#dsL=}7zh3`?SjyrSVccq z8?CTvST&}`S2@3oPq-euIv(oCM?LPdWxFBVJHBjk4Ett<^UlNy>rGI9;{LP6SGhj3 z{+pb)i zsyC*_mIa6PZ}cL*gd2KfS?5!no=@cce9HUTAMRNey*&T%JiqPv(CdBm&*k|SBb@(E za54>-L7$D`w0VMXx<0^tYhUf7$5VMfU-Evy=RPN@$$>F`n^Op+w&*b@>Z=rYk@HKma_+Ftt#QH1Zlj}k05yz*o=ijX` zKIQRx(^JHA{{TE6zb-uY=k2^Qpq(e!&Hy&wFUJV(9(KaDetHy>wO_g;nm zydC;;8vPhQjSd=zZQc*z?E`%@Kw_`i6aaG!|v3veI* zE5V)1Re|p|ZxZeoV!s8rpT91?*}O)%JvN}7!`Ic0&2MaHd0ja~eDgoq__cY6@F#8; zVZK!TvknL5yFNY9onJZsnO^U;Bf5J1wAaUc+Lw=cNP6bH=VKn~%kSj*4@LMj4s&}< z@53*TEmO`kj&0ubaXLo-=rNl&$;VRz+B?bi2I{f%NPg~oJP zal4@feP?uoz0khF*W=VrYwO1gIi8P3xC-O!k#)z}1+4s6!yRY^_JP}jmk1~HE$!9_ z57sZxw}8w0IS+Vg=R`h3egLn*!+9%={R{GKO?k-efySPHp?!012OZ4oUm-qWE9`4n zBaP|5qy}T<97UtcFJzxa*}l>`(NaisMc5=A{kt z%`OHUjp;S{V|>;+YE67>ekFWgx-NXoj$nDMN3OwVBRgQP>yL9?{ega+USnJjo*Og0 zaSr`Z{;qC-|HTdRb9mOozdNsg<+|{HGROZp%JnttlxGP~Sn_dregl1EMf%f@J`W8h`VXKR`F->n{R=pt ze+{ndm;d$Xe}3KZZ+=nI|Et$Ue_Ow?{8K)T%|AoESF|H8qTlu4I*0M-`KsS<4|M$% zpFlq3Zv#J!t+NQ%(;L8bWdpcQtqYgwCHC{R>w>H6A6lloUZXGfZ6IgYqyN_%pQmH{ zYwADvn}pA&fe-kx!F<;BuWVqK514;XqX*i>FUIj(uyZzA2c0II1LwQT8}RqSy8O-8 zQK5ZZ{O#)R!x5i<*YBU}MEb9(2fFk)9_ttAag1;b)Z-h`Kf7rF~9*q61$-nD> zcU`|nzU~S4To=5cq~Lwl?F*aV*Rr4Ub#>snXizy@HxmE->$YchKFb|iw;a};Dkr;t zfZTTN;^@CydtDU5G1uqE;IUo}e-Eu+_1_)5D8b)HeB4-kLH=6Eh3xfU>l~DaJ=vuP z*Y8&b+Mj?Mk4K@`Oa6Nq5#VLg!OLAjWRvAy_TMMn?l3y7?=LgGMLpbcdIG+2&Et?m zr=R;-bHAGSFsPjAO}2Mr-S*Ds!C)ISsw#bX#+rcjwh}v7I&HKbQA+ zX5Dfo--Q48y5&rcSZ;kkP}l!+Dz-NO&$H{|+0_r1VmoW%Y4bSYI=OB+*!`aWZj`sU zDbzFU*sx zM;SMA{~+QZ_tzPJWD2rAV(nuaMw{`+bdmiGwb_rqr)1!aqukTs%F?{YKdCQJ&(Hsv z-_hybn7Ma>?cdvWti#Y3*?vv!R~Gu)ulRnm#>|IjS&u2i;ZD|z_iZL^)+^5vu4HJD zaaofe{FQ&w%HzEAtlC$(5!?4<>j}z*_TQoW*HGTZx63omy%*|@TD_ylH@-a>!t6oP z(cdX~z&iAPFT30=hD)7A#)bV{;Zg`qy&qJvbEr?Dyuo=tzUzKa|9+po+k8uYU#c~z zkIGIbRI36`8=sD6V`^l9`1`vs9egJo=UvY6vu69$Oi%i_z&UQwJJuUAdfWVIaZ>=P38;JI0y!3;#}EzRgR-=R#)V?_iwK$^`$tjJ=oP|A&wm8+pnR8yhmb=)TpcoeA4dJ&_o*Jw z>tFPIjMpXQ`}l!>qEBAT4{!W_7THDz!{Po`soC@*$(NNigfaGE6{V2 zll&gP0=@TcfNy@!W&z(9Ho|u};=3q(7m4qh_nMl%BEI?g_X3B&)K{%^nQ+E?0JbQe;e3If6`URC3-o5+IbYM8W>3MM_k8H@X4U8)SYf=1=ha z(w=RK$GiSH0ywCD9!WKh3;O3F>7R#v{=j^(v*F`BKVMOn9&$Yw!eg8s_NzE4|UFn?T5#+rk5XZ-f-YKnnMxJHxkZira<$}HqN^HuB#2w&Ce$q8N7dp z#U+mK65%YIbHq8L2FF2J^|Mmj=DRSmjrGzc=9iY(etd6l#}f5|&o7vlXlH~cYEJjC zb;knzDm$ER;l-5r51=#fSdrYU2oJ75LwbyO3jV1`XYnVbpLcx|#%mjt(>Wg0-){N{ z?fE*gnl92_v-JYjr>Q}6OT#wm4+&SW@`!RNx z2v3e@#rS6Pysh61|F+s|6JB2zAUpX}jTiRUedkN#q8#r}oh2Phv#js;Ok73-v_~!^ zt{=Mhn3qZSd>-_3c(#6I`DYWSJMKf5-N6+1==!(`&y|$Ft4V!TF3?lw_ougeKJNSV zdXS$&Ih`lkdW-G@yM_FHsxs&HNl11%{w>jOsw{r;o})qUT0z{78J}S8j*?#y-%3;T ziRY#M73r(|R?IJz!5{p^_nPqC`HgZuPAgX5>|5twxCr=soW}ELfYZw7=ejD^p2hE2 zeyKwG4ZsWizH5EB%DN97dY}D7zT5b*bvpTYp7R3uUQZ_hPk#O~t@qHu{0A(5JkBpW zG`}zn$5Q8CI8h?p-S^Atq)R2XXZj0q*&XEjN!IJ?jaW|la_g;&9M`vce_?Ord%6+d z*>5Yhmqva)7_9$RS^SFpbomCFrFXAS*HRqcs*iTM{I>N8`FE)#evdYtuDi>fetwS< zo~^s&&*wM^&tQDQ?p_DJs~f=oh4tajenj;fsUO;x=i>p zl^>&iIgp9pJ2l@k4KHLa58$i%iSxD2u^x=|3UP>U z2_@O7Df!m|oQ{9V#>E+Qzeqbm42=P?AW~VqF`8|#wTt9zzsqk5$2+OtK%h zLlEEDvf4NA9!cuN7gBF}XDU%x%y1?3aps}- z`V`~b%SZUMzTLWIsSmzGe^vNK{(^K(mb||f>`jMn#MhrVm$TGQx5)Phm-F5HT>X9r zvvUc*_$a%4pX4LALjk|!)#>@7`&pnbvbN~e7QM`Gi0|n#za!p8`EdUc;u9TyAM5b@ zxSzia=VN=LYHv*Kje2|GIrjsi-LXa1A6jJnF+ZmnF2sC%cYG$4KcsV<6Z8B&JkNR) zJeQi^t63G_hsAfDOFardvW>^93CHDS;A_8ik79V9e*bWBwBz4Tj<0xnX{e6$B1ZPS z$9Y2fb;?(5PVmhUjvCLiE>~Rc;fGc}$~oO8EI*Hv;QXrK1iYT__8sU_72b*Pt{UEE z-@5&cb{p&$>wdPI8K1)0axi#d=gl%7deHNevgg}9Le9@fpE#~aAMn4acAKo{_XV1L z=W>SgvmNDkm_O|N#yr#3_cp)#``UmbTh{kwwI{h5sq1^4-$$sA;=9JJ(u(p|m|wDW zkM~{ zG@bLb5`NCpa@g%@DZI(kEc~LUX|Q*VUW+yVFL)Zl&nx9UWU$Ba+vG{_)rTt_2kA+)sDQ7|Y!{jx;|<3pc60f78Chx50C5Nw^8WUyJHDdzytAPfMZYX*o=LS_wbn zX*K+`r$b@N(^`0gry=Z8`)|bW-hO#**W}Cm{wANj@gKAEEZ$;z)97#VVE*0XNX@4(PKD5Ukp6U!13ZiP%g^$+$6t=X-=cTG z`tJ2Tgzxev`}gSQ>EOHhb5Ecn#<}=D#6kR~pC^=l&icprkld6dH-2C0(VlX9ST2r- zSkA|T`JHS$z|NlhUc&2en7`TjF*&ty3P0N9`+D-t|3`n(%+3{G&rHkC3F!`}OQL%+ zc41s^w|Nip%kgXD`>^VtM{4|loiW+_?$YVlKG^Wj34fdq;=Jzj!7-GheWrKHQ2rmW zd{Sq>v3z3V($@V3_W|^GQx85}|Jl`ak#Zl`8{>s`#yP&PR86iC2ce#VIEf!a;s^NR z`1(BuLdvcP(0H0n9&@ln%rkng_xWKZVp=Ih>KyQ$(X z6|JMPxqdmwIKPD95%h2Sgem9YhriM@&K^O(z2oEIyx;J*ezG?X+nD*aWy;|ncnX9r z60dmQ=9v1AcE_0YzZk-t;wFsWcJ1>xAGuxoDEf7}<+9tP874n}%ed-n7 zYijzS_nyh94}zbYzQOK+?aO~U)(8Acg^Evcvi$km>Kc)v{k08!TxsZJ^Li=J5=xJJ*@27%G?k6`t3hm|m z{i{2mR!G`3@@xc72{0AaD1w8KG0FOM5RlwuHjqpf>2l!-kH@<0pYTLZJ zXXm8TJ#qiI%^Q@T$1~UadE6n+dkU` zM{j0+%Jy5a{rG;-whrNO{&x2RbOwy8gB-sD;mPAbJLE@T8Xis~y@f|vc*M9u#rYfV z8_;h^|B2}(yz4M0y3UbKmCX4+fIf|x9gEa&f+M6q>Fwm}(IOmalrzG4tzY7M)~EOI zt)llL;mj5Z=dk%_EPlV(L+^v&FZIHsW*6hv)@>_X?{9PZg=g2NH`d1sl8XiQllnd# zG^=-UqJAyNx82ie@C@>Ag-m|JDCcO$$D7M}2awW^Th8QXTlXCon|E3Mu`6u*2X zwsW)OpJ`Z1XQ`(lZ;p3W@=rfWet+xJ>Mvx`KdkZvIel(GKl|0swD{Jlif@_wYq4Hl zvwuvd-k;0O8*H3OZdy@pGWVC_JL?zXnqaT^BEGgFU&}T=EiOR*Uq!yjd46BwNR#x4 z^Rn)FJG_CM?5%0M>{{S>k^gxg`bGO)|8rIHk^9F#Ot~+s-)r)}utENhG9UGvk7&oo zMb+#Hv-i0!xLAsD&FDX$r@WS8dE>|7y!;DQjSJLcyYrH3`jI8OOT zq?b6Z`sv?|m%LJ>f22dCzthR=d-7}RPWktDHcXF(=QAHy>*$T|BYg(yoh$3+$GE-8 zoztOD@0eXkxQ+vl+wp7tdw`GU<%{oQ9oP_$f4?rA8{Bh@@$_od=XjaQG~Ru_I{>(- zcTNBf$0Ln#3YO3B+e~fTnf*w6ck9kc%DedS;zoGHxOFxudQM8;Mt^p+ADCaTt3cpe zh)1gWXvgK<{oyBaxXvbZ;lXw3Zs2SD%j3cB*EhS2c-TEqHcpG{r_&qQkI~Osw1ZD3 zQ7#2%S#U->czyd3_n5Z(==#z|bj|MCKt42HH4X}T6na+oh(q5Sou;Ckm+XEw{J9-! z{w>PMdBEdxG9Kk*h4hW%cHH$d;+UfAPR&1(lcO8pb0pS#qv~nj%OUCu=u^Ro^>Eh? z0C<|G2Fw@8{}A=kAUdS+e(fmt8Yii(PtKzQ%FDT=&Uqu=ubum$#pemG%eUUxAs@A# z-EiMm@&NfbaC{tP{+jY{{u{z~xd>m}Kb{D_u?XK{AAAQlkoT|=e8Wdc-(*qput@%J ze;wBUi~V$q@)qGr4X(>M9#

E#TvFnTa3nkHdH#TGIC=_A_Mr+e3JEgmTxa6!I&~ zUxwcw<2{cT=IxL6wI5;}GPloT|5_*L-eK6ivw~w*`iS=9b6MN_IZpcka=XBC*k4V# zrG5OuDD9A|&=YPi3~@Y7B`d-!`u(||IFD1++H5arvs{gFr30Xs;nx|O^Yr3KlkJYL zvV6MA@_vp6bgazl`#ir_Y@RoJ)Z_2SZz#W^eB+bZ7s^kUnV&5)KXv~@IF~vch;Pj* zf0p@UPM_|*rCCSqDvlE6AM|iK$?tHv6o?1(tIGrI1-aa_(3*Fb7P z5Kj>o@f2|qPZ2lqG!3(!BCg^o;wnnxJ)l?d+vMm9I<$0f+#~_rO&-jDY;t4q6C1~h zpP(JatxSH+|7&t%`qbdE zioL$X4MO?kmp5iB$ zt1K7FCKm_QK9X-MjO^h zP~Pu%C!X^4aDDL<#C1463-J_-BhY`9pDQT%gZI+D`Htf$&lc;K8XOZT@IcqpZ}mw z`r;|afgkn4pm@rDtTRksGg|NplYPcb`) z`tdOB&THbKhd2)pjHf&t>+R6GoN0I{jr7)h4LgAJ=6;7z*=cx$#aMrv>NCY~|Nmn= zr5m4oWZdWbYvL*LuMeX4f2DZJVQ`9m&4bzX_%&_bW%>WS@sxw;hj#hp)a7l1c*^Cx z{C6v!68DeJ+${NJ8uq5M)YH-atxEn2@suUmxzSIR`xOe~Wl%ijS@rYRHJ)+>^3pdi zj}+!*#Z!)!eLO(!XSKeVrM}4MH+iO}@luGV?EkMCPcgfn>w_aPo-!8WDa(#We*R>v z+%`YNf8IFCQS`uZ*D2DyT%fzhQI6#0AJzJ4>&|)l|8{=2;wkUqIxyPBg?V@VcuFUS z@8osq9rGg)|G%#BlvA)n+)uu4Jf*u1{_e+9-YNTGQt~M~IPrZ7FraTCzf$J+pD#EC z`qB2yDU^kFo=C8(Ia-Yo);Z$wG@jhQ(^7I1e>2xiLZdK7OkE4kHRq=nA`%zofCE|s+ zo%d6<_==5dx2w8wqN?~l7ULa}MS|@B2>cz4K=A4&%$_Ihel% zD&%n;%(Ij?jg!pAiTM-FuVQ}M&2unDug!BX(tio{QrJ8PgK_ex4J3>c>^r`(*|YEX zS&g3%HqXI$T<1HC+uZkGEN-)T4u<;`k0d^CUlW(#JO|_cg>O4<^AP4&*hd4`v5T4L z{ntKj6Zf&!-Cp>s#cjHAxlStlxAn(QHqXIqo`ZQ+=wKeDKXmgPOr7gJ`4u+L!OThz z&1xOIc@Ab0^UUt@yy&9!T(#WZJO=~6>$erR**pjH-H+Qu`+@$g&2un}Pi~%rAssf) z!CYUw=5kVZe`|jK#pXE}&i|X|V0_-6LY&3p5S!;CJeEr(BeS_=1gnuSk$nuafVnuL2j4dKg52c3iAd+H&4r4X;# zyg$t1AxE(e<^J@|xQW)GoA-ygU++6R?{W%pHJ#7$b2PT^i}JO3e;D_3Z^lhF<0jar z(cK@HDema!MC`oLT5-31_jHvUz{l0_UN^d6&)m!#av*lEu(L?u#Rr}*6Z}@y6Zt^Q0 z@4&eiPjP<5Q=Dh<6z5w!#d#P{aqh)aoQv@k=V3g>`52{x;wFR6xopNwHsdBfFCzX#zXkt`+mgcd-Z%59}%Hs7n)y2;*ecnoymy}6t3)oXp7M*GOi&$)_v&4qHqV=AzD`SR z*U#lw>zxL!*Zbc~$G#5T>$dq`eUsy8^PVonoupU%-N6vne_v(up03S%y0o8Vd;j|? zoA1?A59jZs?CgJEW%Ipyt{bMXPtNU_>y1lX=esJK_jGYwZoXGPXZxMQ=6m%`r^EkO z->a|npEsHLRv~WkIzJ~e6#j{))$n7URzlO$a@g)^DeUkx3p+hc!;gEKgx7l-!cQn2 zbl&8r#(Z3bpS*@t(v`CZ|_@K{qso8A9n(Al0W1A?TJ@AqUGBu+sqd&=#8n!KtN8sa2l3tZ?;`Hf&^zz`-Qq3w-Qo?rCpu(5 z2RQLpsUo%a=k@+jwXkljnqTn<^7;N@$R1(6@(|KxeE0Smt>HqwVXKGrOXCB?%i*wn z=>`YhO=;*oc>iwiR{Or=Yu=>|$&KD$l1}2Ky3p8_)oK66a{*b3e&YMKXVH%F&+d(S ziTxJtjS9&DYY%Zh&1-SrciH@fMT0dir}F-?cwq z?=6Pp&)LpMq2CeuDKGIos&Kv%``yFx(Ek~Hr$3qU{kY17aKg_W;61v-vL~6M!wUv?NNVEO z=t4igMr(i{<6-i@?}7h#-fn)c*Jso&Qw-Oys@=NeK+a2eq1Jz9{Y zb;eWr;*t;L{e@S(kL6rWfX_c)px=ur5V^>H$AnL9xgVdJy>GRM@vCv@2QC3NR!VkW0BmFb+9e8ZV_??P;PYmz- zLTGEe54EXZU;f|7*O4Xv{Q}4HHTvcGwBhq@65Ee@EVl1@EQF(8|0sHv+`8U60=!*s zh5UVB?vrm!GYxw)wO?vbZqp{=$9L{?vh#l?FO&Kn`C;SyI_~ev7FaJ?kbUmsps{Cr z!?i%D+5GV+;H*&}`21n|iR1c^^9yocke7p$mx1TC5661jHBOm^PSP}bcJYCpbv(bL z`>(q3tOJ?p#lvV>_W?TnJHUhVf57wYear^shiSM!i||Np;Fl#l953I9^$O=a9?WKm z2g+|puTz*8y`KAV(e1=8`R!Iczg1dg{)FAHk9UrCuJWBDr}u%J-Y>@f3UKEBn>a2D za4yDr1vo?YOW?1~X9M6Ii*POr&SkZg2POs0K8exBI$zvlZ)^KeQ2 zOrM95oqkSqVg5DmpOkK9e#&vs0)NPl6m&b7_rGUb?>kYjbHwMD2aMyFIF1LsryjoJ z_vchcZd7~Oo8uDIsK=_H{*ljleu4E(EUn{nVVNAr#E|hXy?u1qv%={UHOhU z^2JBc+vM?@{rBl#kgkLBN4JUY9m#?CI%;%>yzc1q$bs35)DMr;Y}|#gb;knVix%F` zrg2;e-v0Ze@P7TA_cK+VBR$f}BKkqI+85? zO_wK=3#Ut^9{UGfLdfs)x>fSaG%SHnuCGzv>qWV%m|Yzj(>uJ~@U;31rQ00OLH*?K z*BAQPuYRV*w^mhrD^-ksc)xVb{vr3?pUce~3?9*|K!1E^eQU?%Ar)UL;!A0ce2MZ{ zvGHl~70SzH*(*DK>uqh0m)mBIFJT}0C7so7 zRq|0`yP^CCfpi#@|B(&ye}egF*ZEjc`&DcIG9cjk?P__R<6>kswe{5Q%97}!@+0C$ zc~R{wN{)un4*tp?rktaF>!%g*D0@AS^YzSMlipX+0O@_9NN=^5)7$A{>u8pLblB-0 zw(ipV%9Qu;d@0V;O~EUE<@)6RBwfmb^1rce{^PNI$?X){>FOI>cM`rUz~^@SO4ijk z(a!*Vx@(g1Av|7){S1OL`F_G#nk1g(Ny3raRnkw&xAm>VnV6g#U|ag@gZrNE^}BY~ zu|)5YSGnHVoz9cbiON@fz6e{ltP=h$ZvTY?NuBbIc3u7e2gf1Tw;}lp_CGNHe(6uv z@9tA!fARx#?a>Io`=gHmLE3?Ke#H4O5#e9$hkt_Yok}>4X9#~|T6ml+;*s^^k*|9T z_VV!!?B$Te`B(VGb`#Na+cN2?b;FAr*fSx$OnMHq!#+fMD*qZg4EKM!zLC8!g>sY! z)BENp;{1O$l|0lqU+va@o==OXa_Z>nT8JM zNw;%co`zH}w};-?k6&yz-WQu*T0cMg9_E8@)_x0c60W5Es{fb0H;Fx>_0T=cA-gflIek1Q2k0~OnQ3Nz_x^tGi-<2XGRq4zrzi7|dKKT> z?)L7x@7}ir^CMB7PLZ!+egBjBNm%|sNqTBavu}JnpA^PN4BwJrGkeU0$q7|UI(PEcRs zJ}=@o&vG@c-&^$+eP7}CI^ThRX58TqFC?@hFOM#Izo#g7jn;6J_0lHm4VOqS*dLUe zS$;2@U7OpP-Ss2rO?nxfFM=Xk@1+Z@pDi#yr9E&0dcf_PvgneDE@h*O&G)KbURM2O zwQu~g`B3>|!Z#DXe3u3Hj|R36`a1k&;pOjdqk48Y7~hV-&j>ie$x7SP(^aQS*AG#f zV85I%;jdm|d&v^N$9L-M!XptLb>}bMrx*Pa(a-Orf!?T1s+~!;Q{(tL6XmGdP=15? z?oUU(a!21g{I2`D%1PflC)bSxojdXN>fr)Xd*|e$r&ZX;L*bvm1_@~$X&Gq^DTtO< zk!InNm%~448NU;xC8YRE$2@&EJ{jG94Mi;db&k96E2MjP51O>^??4xpz6)Ji`m3^Y z?cIC(JvYSE?h&)!zYM@Fy*!4r=Uw~vDlYS7`wpK}7#jr~wQwVTUkw}e1D;mGZ+Th{ zH+fnLzv*cf_IjFzU-C2wzvyWQZ&Ug{wf}zn?(H{>B`zo3`^HSqECE8B=giJDIXsKh z>^U13W-psQazA=w8u&u~U`IV;dJb~8==!dI-mv`R%pd6}U;K4FcocrqpK!lvNHd3r ze)Z#+fqstuRQGEgvkuU|C3mpB@;uus%}8Es-aUf?K7LT{K9;L2sGQ`qV&zVRuxRbu zyheL9alfdIKZ|SOFZ)x2r_mahyp|=e<53TcvRquJWHXfCir~p?opBIxtG^;1?)Q2G z4I6#oKW=`t=li4jj-;HTUz#LCNAR7%zQv#kg|19>#Zzf8m$Y^{yQ6+}{7A*k6Zy9QogX zAIiu6%7y;Q)?Wx`9A1p0zPN{tQ^rM3d;XC^emwt%d%9d7K7jnwJ@7rD`tU<}TrR?G zehIdl``HU{KT@O<=CN&%lbw-HiNSp^Z)efrgMD6T=h0$2wL&{JYv*pj*ZU67J!AQdOK}bdLCB(nF&*enZ$7@pz}| zzmxSJhus0a(XBsRs6TA=9|XLLi@SV0l*4<#+lA!x@%Q08|FY*pkM-r79&c$ zS<2~{`wbg=w=C1I>TyWuAKyO^0`J#a9e3GJ`@Or)txT{z?Yrtk{I3`OOv8)Gtn}st z;edTfy{Yv@{fB&;F2QnTGJt_EG>5TB3p**DSk3{^CcyWF<{mS{7^CR@H=Eoxg z@O&XD;92U&GuOx4L?5QuSI{JVP~Pbi@r-`1lKii9v*LYhC&Vy)2{uSce z^)Hkr#ShWT?~Ac{gyrwO*-WmC!^>j$+?;UimPk&bdLU=vi!(v)3-4# zx$T~pNZa(=$R1AKu|9uN@h@TjUH=&U6=(3>=aUlsh`Yzh$NWChamh)XcS}oz-{)Q6 zRazvy%8UG7qJJSI|B-Nso~=mFqzw4+H@Z!7v*h(#ut!{vk4nB@uXt^F2KKAj55)Ju ze*T3gxo&IhdfSZ6uZ`*Jov-1cWY*M+@r%wmU;SDz0C`VubI*f{$re-2y&=`Bv0f;%-D$zwitr{C zqhDiM{k3YU7vmDiXGzz!>tQ;OJglAH*!!Ld>iOy%=x%XC>XoUFEYpwnky*E69)sS1 z+`um|E4s`Q@0!~KP#{Vw4^|Kx8m|Ib8k=C@*f#`{ozcYpnI zZ~bmu&f-Kj1Iiee+Y|X)QhDd^Ih62mfN|F$Je7{dovlw0{{)<9r!kH83|`|8?V}Rt zfO}=!KDTkJ`nCT0q5f*&Gq3vdtY0@enw`S^H76_c)El)~XfCV^A)`kT`+;S|1Kh31o?w)n9?I@HvD+5DItlpsGICmvzyz8Q|| z`$(5VwMa+8w{t}Ghm4>2tNmDT`T%aH^Q!zet)E}o$^2?l@HL5tkLy$Dfcj=Bj_VPP zYsjhfmyhca;yra+gYe(R@qD-x^^)2jQu{TH=j=z=f2pDV8|+`_%R(0SpD@2wQ+~$r z6S5mwzpVOb$H$lNms$e+q_3T0#5l~?X}Mm?RNnPc2rrZZEPFI~WQA7?SX1N^<6MD1`tNjRE0 zUlD(jd~TU=_>L!&q+jem&g<&`$OicqU-fY~nvu=}+Bp{685f=?=Xi|MZn>DOP(Cxo zk0IxVM=RoyaeV2#SeUwXl61b6c$`Su!~^g<{$;hF+eQD3@Zr1XM?7@fQCaXK;wioiY@RsZOZc(ebvI{jf+_4!lH zzNBB}7ly5U=*PZu78Xy4c+C^9k$K@&2izeXig-o3)YWgA1RuYS-<}+gw-66Zf7-8* ziXM4AqsQ4;9{Z7I*)Qw`$EPYgr}P?YANft@SDMPV`R~1`&-wMub*CGqkI$`B{-VmC z0R3<2q5rW6hsWta=fmzvZ{j>``{xYLXwU8*nISwS!879PobJ3 zh40(Y{?3x}xi1-h!v%d`V7*NHw$eXgz0xG}F%LO?e13tyYwlIRV>ckPdGjZba=uP{ zy@UCu&+m57FhDujB|0xcfBQ*&58+MDH>^A-bxy$L)8cBJKSTCm!ZR*BBAy;^La}UL zKb~=ZcRY`y-G9+T_oI2com6svqv(EP!{z>kY?g9gX;AJrsw0nOgXTdk7HtesP6?D~?!+n8pG z`uA9U*sp@SBK}6WE9CDUhx^g+-bUNwS$wbi5!7TH@igb%RqY>vytqDy?GG2)AGY@4 z?`-f~5Zg6BwzUgCai3h6Kf>f<5#M|L?1%Lo`l|2TkLfGvi*$){iFw53GPU``^sLhz z=Vf~RtQ~wOUgxMER-Ios1A5!|Yr&53aZ;bqc;Gyl>&MSZKQaxMl6lrcd9OF5dUe(d zsn#h8$5AWOIP!P?pbyuC*YqOc&HbL&s9&b=dpf)!KR1=liyjef*Pqyj(9!n}@fme} z4gaqELN2ei9;Up$80k~MGbFCxV24knJ`aq{_4hYodKLR+yuSI@d(Zns|N4G>?~S(| zKn>?-I28MRhwx+?4knt{s-kaA_*F^YQ?cHys>c-XX|~B1l;380FY+_DtA2xaliKat zP1QE=Xzcwy`EQ&)=HDlMjz@iQyY$8FbFMFrR=vNF)HF|~ZT4H8lYE+;bTGEljT2yg zarsp|8GdM^Blg$N(Jx)EhL;43TlAjCIfUP)cTKM;p5}0N_1aIk-ogAbsd44`(7%oc z^zNkM%>EtolJMK@_?<<*&MkSq&Ev%1_L2Dc(>dk4z7OHO{vCdezIx`DVZHO74}G;= zbYqHnuSq_|d8XVu&%iE<^{!Ptrs4T?hV@Y1`CC)HRsP@^&+qs98hvNzpY!;=%`^0u zKN|Zh!1)N_1b-(f|0VG^jqti148G0^o>}o-_C)&Il(!1uwS7R;TNRhL7W@v5M`e-U zYv%v8d4%UOL+yjCFS%+}+A3#$Y|KB}ce3|}Hu3WL0rRQi4}1(iyur8FNk_j{1{Tbx~-4#mwt@!v;A-w@LPY=po8Jviv6U% zUh4XdqFp9`=;;XO?-I^wrr}5>_AmMm&5}OycZIt54>+z}mk-lu$KioL%lYH}y2C(# z<1Y-0k16@piu@WjK0vN+SnQ!c<}cFU<7?z^gY9~}(&(afawa-JJ}4KNx7W&=l8Yw4 z$9-&-t&#`gYv&8RUd7BqzILF_fY=wM^c<>xu zc%klc9HzF;_xUqAX@hu(&N~6G_alGHP zHnv=5*2^$O0xY;E_A z>s99k;`qw_sMnEB1IB$wKeTTC^HDD(#5X_pkR_yt_j3qv(q4ZH%DbK#iF&HjPwx@e z>)riq@VnZ48_$0qWq;lK5_T|ukp4WGXdFTQydBBkiF5<`D=9v;wPE$bDd9PtiEkLU z=u3Mac0-~6GaL1v`u?JD8U2A?h_jLZtxALaW-d?o&VE41HjS`XKW-_A_^)TxiOz6-^B-!1_@$Z6NV65-4JD{=ml{I1Hs zL_M`Oei%bJFXYte-X~w(_2BL(U(!o^fcG|oFOHiE$Ke$0+Y?6D?bJuB?ChwI z@_BqW;SjxdmIX(if1B_ioVE|6cibOF|4yeh$C<5jIX>PT;g=n~r_}C;zef0ZF9gQ> zcIj2&aXyXw5WONCIh^}8z{B|kaD4p253P2h-Y98Ydwbn=!5;S8J%^h#9q#-buI~e~ zkwkqpwSBRV{-=v@j~3}$fP1)*Kl}>PKV6i(FOvSWJF)&+q&|)3ghvbTjk=rz-vzKkc^ODF}^Y~!FCj1iS|y;rxEp^cstnVJj?!vW?659>#a*^hy4%DGruy={2}_4 z&y{Dq|IWy=r!Q6-o*o<{T!-o_tUumn{iH3p81J~4%`v~)RDP5BZl~CIbvvSK_a=hd z<;v`H&d>RIm0X_G4)>K|eeCe8meYuTI>Y`;GweStFSwmrZs>c1-`x)iJy8|CvRT3F z^y=ELr4GMm^b@s81^SibSE?+t{n|3iSIGCvHPNjux{b7%Unkwp))q*&p+dgm;$QZ8 zzKZ2+1?M~}NbS5zhSbiXK&WbVZl#XY&ZnSoEkl|hO_AcSX6IPSNE7?rjWeZ7goFF7 zAa{>Z?m%Cc>uiGg9_K0L?d?X>CZ|6^c@94hQ0(^`P{h(Vqbp0_0#Ge|FF?1H{?!nE zq0ZlL9b)>%VWw{yVR~_t>7_BG`MHU^HxWw#|G_WsIks7F72s8`V5hw$6hwUF1@H_|`uego5c+P7G-^8%pb zkmRN;x$*rVrv%5XNad#}YroQ%Pwd?UYU5 z&*6j91@fYHFkgE+Zim|ZW&Ah<|K%3K@B6_I>N}F5QMB`G_8)Km^Vx#Q!GQLT=JkG0 z{QscjB4mEPplff`1c%!jC(!@5_4I#O?ZEHd_yWKCzTzX{^Ycse>-)Ktfb*0tXN_Hd zEIaYPt+?G6M*lCTLo&XEk%0JKvcmB&x+MH<9ykm6&^tXYAIH(J(fuLtQ+`C}=fn6; z`J$f?cHw_>`=c@a--F#2dePc{0^fW6#gFCv-s<%p zFVwT~Pq+?6xK4`SCl{RG2P+-dhsnq+0C>`?%XDQ#uV%7ChMWR*DI@DJP$A~J6d|Km94Pdao^{H zxY!E)x6U8abHZ9aPBMCE70To z2J{G}c%Gx_aJJGW;pBcRz}f79b1A}!_+VRj$xa((93#dDL&fGb)4#L_crL>1SIXV7 z2yX$;#bkXvFU5KVJTDaSjQorDNRLK5mxSjM@r?W3w=DJGX?8f_jPdMzeuur#o!?O` z(fJGU#p1xscYhn~<3-X5>n#7CS$xLk2g-5CuHpI&@Na{>nmxjDCRe7vS#FN_b7d`&i=i?cUS0m3q(Mw*K>T7ouD4C%Rtp$aLd#V2RFwvHc!D z5&P--CC%>wydyr9N#W1+Uc4t^*A3FoOv8qLqB8wNcCY5^(EjuQ{^aL7vKjVUHojp# zj`nV*{rYS2$L2rs=hut;0Ul1zMEs%u7IxhNzo!fAkLzgcqne;UYXF?Bw8MH?hxJm< zf1$iZ@-yT4tsD=NAI#UXPxoGUgAmm%;NF*Pvs_;o7 z-{uKdbzXeqIysc1Tnnyhq_4qc_6_a5529b#U)}uyPJn|iLuHE*t-^O&c z?d4l_>BCwTc%pyM%iD?lYyZJ>3F*G8(Eqa=^r8|bogNbS{qKE!?v(c@mVb1&QJR2Rq(l=phWsyD=XA)YI^z3u!s z#D3Q~S5WA`#&+`ag@yhPZ`6M^o-6pTq$~JuaIQXAzVEv%oYepT(ef6VMR()l*%bt!Tw`@N&V;ff5P#ge2YUleDU6_ME)Vo zD?0(F>>j{xb|&Yi&tqP7`s;k;p0r8&$N8b;c2+o+QGX1w)AIf7Yxehn*dONSS>l_{ zik=m~6JYO5kRFu@*7%^=Er?Xq(dv_C+zRsy7Uj>BjA_IiQ>Y0$_>ID%#dipvG_OIk-O?cjq9%wH`J0o9bxzw`k6!FSIe zR({myBX>|=pdHKa+9l+F8+Hol5t8Ay%jNELQT;@^__=4)TTuH8#IweI%g1YN!dGrH zKhAr8PVzU=GU*lVfZT43_Mi5D9*ymwzT<&;)amJQh3Vc|`r*U*CRx3+Vs zEZ-Dd9#;!XCBao!KFWD}j4#8VJI8vk^Za{>_R8f_Q~0P}RrUNn(lgLQzk~jF<#=)5 zysZx@hwmQ_sDA?G)_%X@eJ+2ekl(xS_GDf^_oKW^_L}zLoCdtkC!Gi0od|xw>+mNA zzxj6@j;_DD+7NyjRTM`H1NBrM_-%2g7o=7)#!tDdf$CHHZL*%w@Q`|Kf#3ja&DiQ9%X(=J_h*TgWqls zb=M&gj(k6{^h&(|r|$#Dd@}nn!sq^ToNGy}U-*Ns5#5N3dy4I7F~Jo zAlBI{{0={_^CP2w_gvQSc3Z;@=9g7(nEZJ6sP~J0c#lySvp5RI>DuMH>v`xW_7nBM zVb;TU@lUt*+1VeKjHV^R~EuM*13bak!(tE*pLJp&javcWIsv z>8sEm=o9UuXn)E+dZ)_|stvu1<=_wScE=V-FTeNjA;jsn5-*R>J%|bxAAStqb-$B; zU)1+U@m=?Q`S(Zk9sBEDo`K(=`?{(z%@o7v&#eEDjLlN7RyCd~vxK9{@pPslx%;zO zUsq2v4aX|WCO6&sBZc}SULX6tCWK$_IL5x$J7?*4b3F;Yr8roAe&Ih#&Y8kb>;2&# zB()dkvoYFB`M&=1s>c-j`j;r*DDQNRdfm_883JGB{Dbe7--_+xK)3O6?|+yeoId|O zjtaa7ZkLaXC!p^|cgMr@EaQ3a88W&-Z!Rb<#rXi&;SGWAm{;4lO0z1 zBlzBXUI6ok#?58QG32~Sx~5Hycbng!zi3xB_F}&nv?<0>1M{KTL$o(fr;@9}xI3S^ zKI)FUQbX-aUwB;8^fmWG*nO3*7YpsITE~=BU*pj3t@L`^HSU?>-peNC1?62{>akzx zvEsg(Y>{}!{oGr%Zg+fb-XOlu$Nma%J{<9l`*3o4MtEs2* z7yWV_@4pz&f&LUfZ}I#N_}wc{G0qplLlOSp7QL8;2h(|@SGWIiq5rb=kNH-5a$mG> z%Wc8gCjHzV%k^nv@3k|O8;=v41X0iC=Pj-k98AL_MLRz7P4mlR1K?jI{C=Lm`8_1M z$8!kvH_ARGUM=9~^IAQne!zOd<=f%B7~zEdK1ck@b1d)YPA&TewKwDWt?G>MXM4H7 zx7txX`Fm^sl=VcnR#kMX+4{!pD(5y{i1e!Res#?#(uwRC;HZNk5dlt9zt+Db`h^Z{utaBMZAxxURWQ$?tM}Q{o@W-`h{`N-w|6ZYMq8 z1HRsD^psrW_hLl3@Ov?A{$ly3BK_Xx^l3~p#l26nln?ad_(b`wP(BXDdZPQZejd!r?@uI0TVz)-MZ93r+sWVkl0Gv3g|`>s)4dD4{}FcB^=gMH?rDtlRK2R; z(EV5;`8nb(J@=gS+yFXs<+IW+pWMfR{%??cGKIf2_Afd_`HJTbQtuyv^VoXy@5*QF zHx*whkuQ>K$dB`-Vtg_CgX_7yua`aOdK7jF`PJPIRc?si*@BJxeTn;L8`D@<8NH3} z-fkYBYLXA-CckGTueT~bRhnVG%gKS*Z}>ozlXyQH+Ht<3U&@uWXLc3k>S!W4*(Uxn z4TqDa%gGVhOWk*L)|Qhzu5x|9oIHP}a_|WHe`G@Ri~jh}i++Rh{r)Y)^~xKRbH9S?E2ks$ z7xjtt)3tNo3H{@8P^P@^8JclAwW7S2B?ouTQ_h9Q#Vf_5Ei_iKHgRemex zCyHAp*AqX$?eNEW&i9R&{mb>vyDEy`Wb`lWsW%9JMdLp6_TV2_VLRAA?{uipFLegx zT%MCz<*Q!8xXh(E-YN^q*Lc%?6_;cEp+bG%hx{tQNqIdM<*>4-b|i-t%Hc`2gZTMN z4R2ISkiI6?$GV}zdgC3!Uw3=G8&4YPh5Oa0M?c}gV!tE({T_<&4-5X-&M@&0Bi}_n zR0{o9tp7tHbly(?k?-S%UEOzo`mr32=OP`W-Wn4frMC`1-kcBP;y3&+&L=-_@zZF> z_eTTYCDLJRiTU}y`CAF6{3|yfY`4}_yQVJ#_9qK2 zwC8dNz3y5;16A^Q2I{*#}R1ll$4cltjO-c#u^`9G$9 zYO1GmIU#KkPJDMhpd9%ie@RvQ9MU<@Z^d|q-ub!(zad|MukG{Q?vmiEwZ#wl5wQ+s z`!i~v>x~QLHsKpqKFWFj!=4X4+hDy~gWuh6i+z(B?W48N0sNHscN{b7KL=l%_-*fg z15Wqrm|w*79Q<5;{;{L@ZhXgjd{TZvmj_#KQyyNO8h=kAzt_)lGSAQVMPKLiZ%kj; z@cBJtZ!tRKUZ)1>G$wpA;Wb8j#CKtK73v==JHEJ&Vutm{+oTJ=JH5s&z6gKvr2LN# z_oISqKfY@}zki2+QTV*Z@p+_xPbbgM_eZ}?_`Ge#@i|5_PMjb04*O4yIviN`d_T*94&GmFR`MzR z{=0AH`_ej(!S^2k|8cih8q>$y4%LZ~4(XV5$k(V3@txz4_RBV>5B$RuqL1rY^DjHx z(31;eVf`Z?f!Y{+YOA6(SWz7Gz5zKQo?T>T{a zr@w)5$|oW`0P81E|Htur#Ks-`%<4b3E_7}tkJVEz0K*1{$FSCch?*BCfkj2p>x2;6Ui0p<@H}on&eAducU?gsnH4g z#o;;txO(HUwyre3K+p8OLt=3&%30I7;gBvE7pI`^7%eCdY@vxj%>V{BU5q$s*gWElS>P-P4KX8hf9aV10kj z>ma_<4$9A+{Gs6e!?xpjp%&q73*I){6ty@C0+A-Egj zAN`}N=3mU8j+f8Bzl!#K-bMXo*3XtzKkCCRmeFJ&`wo+t~W>rzVjI3Ii+3y zns81t4JWeLzv_*sp6(9~nfH(BQuiAT=yzKEwqn1T!vnJ{-rLi0y0oet!ZpJAa_=o2 zjz`~*0((Su-t*KuVd@t7FK=o82hlmC_d?E$4r}uvq))G#e>Aoa{`ojZJ1)=8 zk8^;J``2FszTJ#pF`mAsI#2x4Sl;kIk(ZykWr6E^;c+(hGZ4;=@o>3bn;+oU4gGjl z1eeRB**~i5FYkMrBt z186?kPWaHT;}_@mJpWqh7v>l2LDav7_2arE!teSq`UgVT2L0@O7>e*O^us^o<0W(| zu5YkUT=96}aWI)AAJR7A%-X_(cKh1vBE#>m`r(WCIeeCX;|BRJV?OFRed7G#cKJax z!2LJP#P4H*UqSc*J}aO5scTsqbvQ4d`<=FG9%LHNe{Rr@*$dXM`OSLo6X^QQ zj>Yk@RpUeLA5WwFOo|@ThuY^A(!-MTLHRxo(0zsFqCSiEi0eDpJJLr#p3e5ur7C`= zQ4ePeChz(EwFP>t+Lwm@C?~1c%kROsL3Ct_dwslLzdz6AXH4~SeeCC65f3Mxt=Min zca#1l$18cHx(pApc@~A=kr)$d{NO<8m=Si}y2<53OkDWYnuaiQf+QnC$S%GW!|n z5N_Q=6!)FBqMs|mK|fbGhw=_*sUtX5zoh+HBc>mI8Jzd=gMF$hH?DGHEEo3)|J{e%A6>aVT-eBKKOYw9miKFWE2d|w3n?q^sJaRL8cD+3Pfqc67!r}XMh zlw*F$;lg<;l!F~Lc`M-^NeHj|mky!@(Y-vU_UBmN&nx2{U$pCTk~EoLZVE12=TD=) z?h`8Y-Y4`re0Tj1eyU!zw;r;G4UTj6AJ7Z@E6uX~>MYwYRnR{EFz+Gl`b#lx96z7; ze-;H87YfOjQ10#c?dzeg|1FmHdEVBUCeN_PCVr-eKZmR%d_RuwKiKpAn7)T_I18c! z$K_7wY4V5q@g($y(<#pTv0sOCui%1zw$IOw_=NZS1its`7x;DkJM^^s{eA|&-ES;8 zgTLAHL6>BSbW4{6kLFFh-{*8IPbgn>bAQiH)YpAg$%k1k>LbAKc)310f&P2_>)mzy zsgmfCiND}8`C@Wm{$BE7@3sclO@7Zf`~sSfI|=I-&wsp7w4W-1M|NKR4#D-ZpP1qu zf?3iZ<+njzc2-p{`T<8ZpNL*&Z#ca1-i&LO2&b>BPe%Ad9;YbSd3s+Kc7Wn6CCNpc zKitkT{bcfHdP{bI&mU$VxIPH^KDt8t&t?t72lwwbz!}_26~_m@JKR1#UW*bo&K|-A z=Gq4z->F~LKK-#}>{EXf{r8@KdL-}vmz@uYoAmi(EDk~VZub1ch5W96aBrnUx?|ir z-G?-O<2y3`XJIxn#Ir)KOmcf}na4x#g2jyI3%+xb+<#Vz9REnL4nU!5a8k~z|& z9{D^+dT74~{dmx~efS)R_+Y={Ed3gin~>aW@(((Tj}ec^N8*8cD}{QrvvU5!E_M84 zy$bb09$zT%_aNoGD?dYp`a@nHdT&APE@*u59H8C%*RxL=dSH&_GSMS(zY^>a@g);q zJPv6HZ-M=Uc|rO=-**_t8}}VTyl$nPmCShit!##H`2NEEs82oLe=mn|n0~2v4zW1S z4_z7l-Ft!y^vmD>h~uwXpr8CneD9=FkcY1Q_PTMCH=D0}^)KcJ$v@w_#{AGHPY3h- zx4XRBywU5=%;$|f4plfW0=^XVW@>sfo_9g~Y7666Jl|#W7US)Yd4KT77wEBA)SIOV z$qVD9`8`wHG_IHe&7U#(@6MNz|1n-wiT6cOj#`=I$oIP%oU_!MZcmtVhwaxT9<~8a;;umTW&bH*V&3x{+1f1<2IJ@hxGXvFtH=XI&5F_qgq2fBCt@ zxDMbs#=PE=;8^8mQ=OBP5DL4a!eV zp8%g^QuOcbzb76$oI0Ky4`xqLPdqo~bPQA1EYrV1xxv0Dp9j14UqP-za*^^YxQh3r zh2&4x%ZJ{a7d_@hkLb^re*<)MdS$}L_ce9xm|sriFVcCZJ>Z9xZ>6!k(GPZ=N;d_D5NKrJo0ME3_j&!r>^l*GjIL zhG)_l&gbaY@g7nCIu{bsA2dFLZC@e3)o;N+)V;Sn!k@NC^ zZpJ)wGk(SWL2LVsV3(-;(K5%O%};E1hWyO9P70as@mL#Pu;*JPzv5rkWPQIsF4}SM z2P7Q#`Me+Lo=m8`&D&=G`nq|b{dj5vxz6t!D(Jxj?7yq8%dubSLHY^1=Lq6>iSv29 zM{LkI&f+*Ge{4UQ>xsUEj|z7yvQWw4OX4= z4RA?sfsXj&dz0FyXya;7Ir&wDSN}aMu)hU|{Ky-?eIS;Hepnz}=>p->J|cTh6Y@Fm zKDJgmCw%6FkK1Dqi%8$KGldO!>Kf5giNib11g+ zdf5p~aj#X>3#u2_S2_WiS*Kt#=q?CR!RIG;{5koe7_3R&fif0K89ERj)I>z zfgLD)bavS34S&7jf~0#mmo+KxCBnC}UtdE^Z=!x2n7?n`{L8WZHT5g}(SmO}lYXso zeYvMJM|x$VSCw>mntBy@D4r%fF2sH!oH3rtc?Wph)(_{Z{N3y4r!QCjr06`!aa4Gh z;Ac|Jzwy2t!IRIw8S$9fEc+AM?BZY4&#_og|-8 zZ=1;p=5yC;?%y^$neo7%Eh!#YX{NT$-!nE#K9rg&Kh`!qIQ5k__2yS-FJ3Awv;DCq z+aFf>FlsuU5#{{+v+K`Ap@vVtwwjfuMhz>T|s0c9rh?*jZ|8eiq#DOB$Z7 z2zPnd;l_p(YbQ+Yn;`uA2>()Pk?^Bmrw{OO`V2?-bsk_){_rW$f06x;EynuZ@7wYF zD)gHq%TCwb8uvTLmRU~gn=^GEr(HX6Y@YcE?ZD?^KE6Agqskv+{?SqALwEoF*b>W) zFR`65`r{7Ac2M8j8CN@_Z0GrykMEv8qWp2@pBhtBlU09hR$i*v}~a>0frc zt_t}b!~Opiq@#QX0RDe(w>}}bk_GSu?X2*7vZ8i)UgZGiYtW_8Pr`nl@pUum*Hs_z zIsfXce;QN=oZ;E}JmJOqg?KkuZY26Q=Jb7z-!smWaUN)4o?*QS=Ih?cP`%gX>he&- z`?)aEVL#cd%Fn93is6a<@m{Wb{|d&X!|V620FPvz^(yoHPW~f4RlvXE_yg|+mLFMQ z`MUdM2Ax;KK93odpJDlG+2IQ1+YOIyeyuNm;C}xvXC}80n#|sLs3Fxm5t+RY0U^lj zeTW39y(59YOz%QuO{BwT4zcx(J&J?Q!1qtn07E-PUg;d>LGM;FFt-rtS; z%N(u{K8zyv{Wi@XAA%^_?>0o!(pv$trN35Z`oSTlzpi<6&g3tD58@7#q(3r@+WPTx z_-*G^K7-Wk%TFUUJLnxqZT;{mq^4g#iPZLwd;+QYyFZT9_QiY*sl^RGiqzr{w%rPRiu$>DoO ziRUhS@8XAy(FFN6Kl2<;7&AQ0PhtDeY`!o&WBkI_pN6NcpAFA*NDa@kNDa?3NDa@^ zNDa?ZNDa@ENQI~K4a84IAP-_=NlcEwtik#-HM{542V@QoYN0FKw96@UIIgHfka|o%?=O9v}PY0>d2Yx@N zkNE?QKDJ)zr_b%6lgYtHJ*|e1d0Gh{_p}^7;b|#+($g$_%F{Hw!_y>u+S3p|qm=&i z5PsS9bO<{&UVcX7uRL^^g8Ky z*1{=ItG@od8f}`N?P~OK*3(ijzwFh3!S)GX4VdhGj;jHq`CF}3^W$5pI5y7p6F=RL z8IFoxM?|l~qSqnO>!9e>5xrg%y6v$! zTtLr!YI&LOqj-EMgpZEf_eGgbzjbVqu_eqjh;xlEbG{i};(Ro2`*%%$G0yxM@#Uk)hrDAxUt)RK zU7XL&-a3<)|Fq*9!tJBWhIgX{o%t%%+ZoG)uSU(wV`0+hLVbHrxZH=w0emMOpYZ;V zhfgl)eHo|Iy?OpeJsSy&KS_KB$broRqzB;);S(-5=LX8bIhTWTsAuyo=8vVnWqi`{ zwt0m8eq3^O$GZI=%=>qJj9(w~@@EJ3f7bgytN!;D`hPs{|BTb+(E?o_%JVti9xUYF zpXYzt>pxJ)w|S8Gah#ngzAC0X@f2~j-joErA>J`L6 zzPijflLT|dh^z|w9k>EHV>+`*;{N1W0 ztP=<8+Yp`@U!gx#>q(=7^l_W#O`T4_U*}pJ|8Boeu1i1DpH8O&{Y+1heizoQZ+da9 z`lfeT|B;AyLGRvoMf86J?NAOD2ek9>y7Y(s6dbwUF3|s}4d}nPF8ysCu@?Ow&ij3K z0NhWn3%B{JNk6^ghxf%6 z2YOoV9Q1ZDfA#4zqZ9SbSVbTgR|I?E}n1efc)eF#o{;c-${M z9`JeVY-88TvT3CO^X9o6pGOC@_t3g>aSkieWxw^7_##g7x0Ht$pckM=0`WN8n3g?e zcAV)8ly6_<>siMK{wdjmunS$EjG8@Y^CR))JcxOS?W3P%kEeIo5Acijr0Tmpc?K=4 zIDDAz9iH>(=Vs7j8gOhgx4fUH*pA zzoj1)?KykZ!uLb+j;Tt#lbn(!<8Ky9QI2|~TgePKu1K>5eTMwTlGgmk+&CVsA|cLLUN8W#iP!T3FxpJuPHpU+(p{*UD4_Y?nB>&j=? zUwB^nZT)!x>ss|s{SCR4oWB_19)OqZnlJ_X;DpID?S$~K)8jmJw$B#>?9&i9zD)me z{T}BFz|p?SH9qHqE71=(uQQ&`uRES>T|)YQ=8EWV{zR5PHh}&yessd=f8vVg7wNy~^v~z(0ro(guTOUA4?de7#5xf4xA}zhzv%68{&f8s$BXo{`7zd` z|G9PPe=?`%9altuNSf&Xc${ZYk9xmR*Mn;bczC|*_pfhkW+b0KM*KHe|6)C= z^7}S`>+%M0omv;Ju3ozRis0({*`6LCuTPDxH(%xJT-g1=^;mH|@GRjNC})?EzaAeh zZa|N7>(V1%PlS(O5j{+<$=5>>pRe}&O1&aX?4u0H?h z711MKN1B~({9R=qys$1k%)VbwenL3S@c?yVcIo9+`o{e5W(UJx3%z509NNwF19sO* z$*9?F=KnLjbh)vc^G1m4y!ih05!sbtbd2qeMn5q1+0<88`s}&R2Jml)U#t(lthPVT z0$$47Cn7)MyWL~bTi|!sJ~sQD_&-WK2CR3we$Xe@Eoby&|FX9Sw0AHs$9c=vk!#uc zUHwb@Vo*8rtFm9(TUKr@`gHPgr!*ed_Gj6=OS&A3`ZcGY^nPJ|5&bS}x7S^tX}vfA z-|l+gpwsy{B9zPF`vJ{i|9uWCMgFGT9SKkBH|cW*Qp)_x>%x5*lFxD-r^6+@q_X7w zP){90WRt&XCoCcI%ipBi39RM#`+(O!g$Of$zu>$Ye5@=E0DY+mlf zy6v6G%dPLf3?Y|Kj*I+v)MJ;%!-Bu_q;Z6G3FvYO>y{P9yP!{8Z;Xz+oL~czyLlb zH`e|+q;X$_>2IU2wPSk7;KkqLKgaWEeohX*OQ!eD?jii)AMIkkpVRBkkKr%=1HUU? z8b)5>bPOfiM`Qf<`qtJ!{_EBr^vXQz56!c_ z@BexpIXrL7a}%b|wcnxfYR0Gh+~P5Phn?};leQ{q#QS@~(7$zfv8{=5)=KPWf&Emt z&+Oue(f5%MCha~$a66rZzsLNoPQS*kJKAiQDcJW1YPZdHN7ZhvEqU{H8@oO{!+K1? zrdwGr-rrej6Yug2>y>H?HqW1{8$9?cf6mHdztRlL)l@FAeN;Aom|Q}BhGThqr_by? zr#JRx73vLHJ)7@LKJLW%t(OvC=lcS_v%L#7Yw!2NrG>V~#V@%$BiGL}J_b6ib-(Br z@V)o_p+7)-l)t4h!B>AP;4^#5#|iee8{JH=*|>loY*_qHjeecHzU`xMden`6w(hX; z1G;3Qd#smPy@SX%Ir$Rc(LIsQ&o8Py_@(>qr`WIWPZZ9xJ&y0Bhwba&dAZ*6ZZ%vj^DUms{QO+Q3lo%w|GaEzI5NEKcqLqi+EQK2lp4=U%>M|<=>0%z2^b%&g=2~@jZol59Il_zvU|1N3@cZ}O>uCNh`;KwkcTcA24f}o+-+RyTnjUbvVqDB}Tx7GPS7Q4f zAIkIhZk?e2*7bzND@-on--`4^zUzyvt~bJB+8{sTdvVnU+fOIiKF?RK-anYyJ~sTN zCF56q{xOtnKO3O+{!O2F|B(A7wwo-m-PHDPJZudZe0hD=GmS*Je?P*#MQ}4k2UF}P z-s@4BRQnTb-}hgKaOZ&f3&|w$j`c?h_4N+u7Y5Y-1J)mSPG!*f%}0ypfy#nc=OV)R z%jl<1Rve#Jxvq1O9 z+0H<`pN;+VTwi`)(*BL`9*TG`2ye|-Yu=Y?dW!hw=jsb^KDPm!`T6q#oU867DDr14 z!nrIsm&u>8$REZ1UH?MA3eJwx1?z^s^TSrC zCDmVI{+jnK972m6*Y`TSuwM%FzngLr?#ZP8uWPuzYJm?1Uw#k2&LiC)+qqTxfoZre zY1{bjzGGS!Uhy5%vd%^59Mc1mPdhK;bcl9Gxp0oDrgk)5^Leh&e@H%I`e|_g$&VP_ zL5@Eq{dJC~RcnxbS=s2{eK#uhoA`H_$?+W1BH=ABvfeP^-Fw|4=K+702=kQe^oQzB z*D!V6JpCP{Z`cRConG-gQG|o{&cp7Q6aD7|ANTKv@_!+oRnjfLm!>NDi1ysTe7y?~ zdOLqn&gHWf?KZc2!sT+?{Dt{F@O!Fl;T_9YK`)!{to(yWY3EP9yGcCXJ>&MnVtI~u z4ut2=H^ApL>*uH6$NZA?YgzNCpJ%dl0O2~FHi=I>Ph4&ipE&Q9jL$ZIvi!qtpTZA! ztyl<>31|fM4w7C_G9%R*18WMj@y#p z@NsK)GuNl*Dc>8M>oW_L<)4cBX9xAqG}G{8)^xk!>5}x*?xyrpL-02QKhM2P@9_Na z4C~?CRH2;C(cM|qxV&+W@_M898y>C9dVe9??R3cRPb!O_em{)q3AWp+sDJ7Yh|jyo zC&|~&NIyTv2y{21Z^_rcI3Gj$??gM!=Ze{VX5VsMd$u%7KF9NIfNz`Wzfvr3@(lY} z*_!E^ME459(aW8_+K#aeTAg?mZOk?;-s z`UdZkFZRQg72xu9CBAN74s_@s?>AYWkX$ae1iSIne zT@ODEyTi^O+Ivt}gQl%XH&%}%j(h}m`LkkVfihKC%_@V|UF<2>%CLH20E??V>9IT1qVF2)J` zzC!qGSALGaeP8S$_*wL>n8y*Kp9SmeK7VfX?{x6p?rA)Rju`LadlLunoBo|pdV}@f z^|Qjh@o|ut{2cBnx0mJOxQOL^T$o?X#>G?U?^_A4!)NPa>&M28jaT^jCVrzQ-`1J* zFYns1?CY7h-U;b;>ks~1+0Pi?+iaeP91}hp=Lc2)EK=hK=CKK#i}U_Z#`eL6e^2{sLbQkDHJQD0$LiyyVZc=mfW%+LQ9J^ei)IPS)GyXVs6)b*n7alK3VUqU|RhWB=N z{Q;DRFRC2;7ZVn5I)mSgmoonz<%f7)wz2EH>@lVw#~&HJLNZFbcK1lsThgl|rney9 zefQHI&)a=6aXPGSH~nL_Tag@Ov;A_Aah?f7!zgF_Cn@LQpMSn*oZW|hb$_YL#l3mI z;k#eMa{e9m;;$}I4*#8}Ks7ha?4KiWg1*8f5Xv$_wpGK+X7_+65`#(Bxt+xMei z*V~9YH0dYvcm>9}?5{!od)>d-z0b2A+ZTQ7ocH)X&T9W=yl-&*d&M4z@P)^n9~jqt ze%*Y$;+<~e*CU1ehf$w;h4-YIKIo0pMSXyM%3lAWLjI$%KK!$bUrNHHz=pJd@HM%Jog;U(`3wKO5hiclk~u^u}cGyOgFc zsqdd2(9aW@`YAQi3CPLrRO1}qT_2@BZ+F*s(Jt}(WGqgymi(9=kXcx9M$9KryU-A4F>}|(C#+$COcvFNEdRB09U5t6KA-Qrq%+E|bz7*jp;PJ%`@VGnH z+a|rnG~Bfj9*OV}eY)$xtnGB)F+n^^P3Q%iHz+?3X3}>%8h!KLJz1n%Lv(A9F7nqc z#CnQPbl*GG`!QwJtEe9R=rB*{*O|`Rq<5*!cKO~&WABc351eK{P|jNA4&lf;EbsnN z%oCh1As3U(FKIsYbr`bKi{!8J%@0NScDlfvitoj+{Z?#0zK686)5CwWbI9M$fN^yo z^>H;2p8I0G?fw3>d(%j7;Q{-=;gp{&RGh!z&RBn|>N5qNKWTai_aV-TuCuIPA^!)^ zr?G4M0{KpO(9UbTo!nnngd>e|MmSf|Gu3+(gXleUgZvf?gfm+poP1BGv3Ki254{iM z^uFKhV*HxgDu0^resX%E)tYyJB@ZQf=12g)3eU;q7{FB5&6qHj}prR|sG>jbQyQHKkE*|JJV50Oa{APOe)g%KJYG;0-?B331AedFKgNaYEe!v^B7H@#R+Nj({gZ?5 zgDs0MkO#xBRho(Nf_`D2i2s+7Z*rdBzc@@j=Jzk^-nfGs$jM`MjhEeua}M%9S0x`k z{&CVl{jSRYov?oX4>BM1oR4L-Up0He?0v2a&X?vmE~?RgJ}0`w^2U#YdHH9m8W*U? zcIPD5io=%v4f%rpoW2omk0Tm+U%~t}>EDfey;!8b+RN$hbTa#%<8^9>{G*&d!_%3M zt9A5-?i-BbEy|DP)eY`B4iCom*VH>^7ZR?cz++>*V}62&#|r(Z!ef8zXCRz^O+F9I z|H^vf1mo#tsy|77V!ojMweh|ma8d6Z100S=N;`E=iRD{eI~8(b_9N}xsT~u2cs#oi z9x+~$O%RUK1mTGLk#O(!>rDSBzhGBkpk7ZrQq@N}$HV>M$8xw%CzHa1>$g3?cbn;f zB$l^%+Uzpo!TpD;*H0%mupf1g)T(&H@g&Nn;4G`(Xa}!vKjL20b{}1z+la2kdr?=( zxyGyHr=UlnXLT=m+7MqFQ9g{`5D%N5%)doBIUD67Fiy13C5dvcapL#gpG60hmov!s zc_Y3Pk^7^?XZfS2uIZ4ETFSI6e+De@*!}{|({0ScGp>e2wxyO1o?7 znuR|24s0OrA=v=Fp~IwavLJa_Ab+^84(tDge!4|@i*Tg|*To!H8eNS8Sd)d(`9a z$ZsgWp?u?$*%!)BmzbX|G2i#w;+zHSTgPW~M)@<$A9eb4??KHvYFF`;DF2{`^IP-7 z#Zq8<(625Juoox~X7Au{{LWzMv5|Sl`vS{{(3I173@JSEYsD!TDp0QU1Qvfb(; z+Z}Rw0i7rGUGVT-Aj~Jit17$_;Z>Uye3NXaM!ULIUE%k1#lN4U{J~69oUzXD`ri zSD!b3Dn2WIqVt(yw1jp}L9ky*f4Ij>;GgV^mmCS9sd$O|U(9~Ac?aun(r;ELnH_%i`{zFXxGA5Vzi*B4KL{Cj*a zwtF&fcX3d=UsF7#gZ9>nr`(Hvd*dnhgVyAuQQ&q5dOa6DaU;NgFfktr*!q{pm@qYtTRksdgcuZr=M7vlIU#343{r{wS1ZR?LiyqGi%&n_O(9*XP8 zZz!IEd9p8_()G80aR457QvL_Vh3<;=3V3{JBRtk$4;Xaa8DZPt@$5z z0LPo#y)YMc7#?9E*59i7OkoE6j~Gws#wYI^^Z9;NJVpNXLG=Fb6i+z_PSH!7|92ZtF*}cT*TvN3ZG(8q#k~ACE1vR1l;3M5zf8kp=?wLBw12CTf1Qho@sxP} zHTtP?zd~WW42q{bseb;U##1gqUi#+c;ljMEc*^0jj|a&8jMf)3)E623CXd%OUJCJ) zeTd_refUw-ZnepJe=qSAv-`O|I27Y4qcNVc#}UvfRxspi*U{?2G8$9LMbK0lj$ZSj;d(GD!w z!KXK{AMbqVX zFz)g=Od+1~0`*or&bt;{xVSVfkWQ<;4x;YQwli za%FLq3q?2w#(nzZD$jqT@NE!RIiDL?4T%m_4d^$(r#LvoDmNt_c4X;qUQ*aAtgx_^eHzuQ{Hg_{e~B000N)|7@N( zQJ;6b&z2WGJqLO^T}y4kS#1-}JdU!Y@8bUu_oKF|i~Nqboy$el;wv_;-LArUsu|Ur zVSbDg)kKf7=uuO=1oGzc3qD(WOO#JEr}I2fK9YI1r+8a6S>*Yc;l=QyA-wap5VmBllNkU@Qb7Te%%<-o^vpNx9>%*_imiUJB%-z=U~1YRLJ8xm}e<(8t<8nck?Hj zU&Z{io9AGRUYqA&mMACDe%U++gK=`d4J3>cJD1Sx*?0V;#!m>F=U_ap^L55;?)-a; z+iaeLar;8|WNn^<8L(gTYmVF8gZUNq(ZKz@3z^$Vjeq!Yo4Aj4(&vG1EN;_{%XPGF zE5>a$&%tb-gW-Ly^oMSqgPG)dPkx2Xb1+<2Z=QqMJO{(|YeVCM`@lEP!Pq{9{c(K~ zHqXH*{-SdWo9AGB|1XxWHeOEWaZO+X(@ct z(=2?-(=@!p(El> z;wjF(#@2E)SdUuE@TK_k=A`Z)8i1b8o)8LV84d{2P3CrEuQl{RnUHo-q99 zD!g^F88_+RT?^db)A#-g{6(AZ)yI7&7_SG-Qw=}uS)`lq)o;F6Z};%8^}Y(;HR*d_ z+gHeYg*Wf%+PtTW`>y=`jY03KZk{*UJa5v! z?_%@3N$~wB1O1nq=S?=>tH(6U_g%1UeDl3}pJz&&@72E~n0+7LC0Y6=zpt_xH`$Dv zY{pGC->WaRUEikP%J+Q|otK6kyBRlu`rVA1C@v8F0(^&Y^S%1bxQXvqs?Nwi?eFR| zS~cyv|0cyv>iy?U+FJ{8lW+HPBDL@xo>s$mdRhrD@w6OX>S-x_m#10y$DZQtCr^{` zJ)VZ}Pm~TiZ?Z-2s!XoBrz^qw&i3i>J*hBe?{&xbckG=Wd-ufNOVa!GX+ZuF{MP&F zUhlHE@csCD`CFEPy>iZXzO9y^u9gcg}LPSnj?;~ zbRF|YmynORf!?JLLlHjujT3*TzN2<=3tB_(a{K)(2k_nQb-}&i4ZZX3-|fA7`+gEB z?bDFG0dV54Qbmd#uJQe$s{D#r|N4AVwRUhR~+xm zPka>LO@3?MKjrc+!Sf~Lul3&j7nKi5p7=d)H2$_)C2#~yxsg>ug|JorWmfjuXZOT2WmI^zcXt$ zgmZjH43`1EDm-AVrjr;?h^O?$CGW}m3orQ%mUB75dk+78-tWbjW{L*Rv)@tSQ(x-G zr*7|CEnxg=9Qyd}xsL?zzj6P9jR(YeNY8=qpbUDyei7}MJm&YU#&^UbT`Sgp2v0@6 z6!ul^E7p(xtysS=zJl>N@jwrM@^|I+?gdWZ^u25UutDbXw&eX6->tWC&-}IDt+#iC zJshQNKKm z_XbHhHHUPxB26Kz*(n0@cF~^6UX)Q1LWlZvuXXxQi*LpU$0zf3 zy5D2A4gA>|?Q8C1YwWsqnR0q9&((zV&ElizS`}UU{mhMN(A(N;#rD$Z5BN*cbx{7u zR?)p9IS^k*jP8)v?VTPuFnf{u;l8?!yAY@FTCv|EH{v@1(2hS4@xEdpW+&3ujBSe1EwT-{~ei`8(Z} za{DE=e@W#Zs5qYBR{`!)g!|u+er5LCig1;z9sHGFF8a=hzB3v(MqgV8(5}3Yx?TxM zN%M``%jYwvgV}E^pTA#Ukh_Odr+;{;M7VeDZn`{~TsU1Sld*r$C4~GwuNx%4Ov57h z@TmF=rMEergZjzeuP^koPyI}bZ>_5MR;n2NaG%4P{bPK2 ze=aw#Gk8R=0{!uw^{pKrf2sIV5noEPo1q}4$AP1+ar4_i=vCl4~rk=1+}vvIT}Jc_$z;ya*p<`pH{@9?Das- zS22H0dS6BZ9G~Zk^j3R0y`3($j%NA$hn((VYWD)^N_h`Ym*PC#6ujbBu2238=~5n) zfA_li561Q-w>!~}%a`jLTXzz^OTg!5{7Tl*{t@9UO%TuW z1mSQy(K?oXQogNk9nQq$-14{d*9Z4K-|KhntRqR2cvQLG*^|zZ&xy)ceZB}&TUH4F z7PtSx{$!H!jdorB00+lmwEO;&{SVClqVy;0n>|eU*`NFXU3)ab@BZE+K#+Ez-Mi&{ z7?1F;^us^S_VW7`2!CT*cpNX{k@e$|uX_vYtD_s(%OQ#LukefQCZgw7#S6K92+wX{ z&xG_M={e92`w;1={8e^X`Yn=&N%9NjC=aIhPlBGD|4*lqhdSr0Jz8(HQkAc}9jWyZ z?C-+*=TH$3=xOgq_Ts^m`g9lVpvE-Q(BVAkc8<$aP4#kn=(>LVV!J8f3F(FP^RsVZ zKKSN(3~&;zq|J9;C{L%zSNIVqPiy<1%umAd2TIaYTbh02q7cKC`@daMapEO%Qd$7}%`8`|a_Y&WAkN%_FzX$)B*K_|~2xlvk)KkeK z>yIrmKe6}7;Xjf*wuVKwG0EMq)2-1;=TvV_@Kn9tQ(4pTyTth)@U>a4+7^5@FZbdY z%U!Ha5DwhuMf~PjuI7HMMytM}?<@RX=R5Gvj63|{g@ktG<@&B>+=24ba zWxn7(cZ~5yltWq8WZ+PmIB=!3s?b6sNl{6S$Yd(()tI0t0&0SY6JRhSV>%*KDZ!8< zWM(7@Bng>tb1*X_$H?jRdcC?eR`u)mYOS|u8SNcrztS-K^;SqP_#c#;Wqe*0zc%=p@%|C?CcT8t$3YR>@0G^c zzdX+R68(Y6lF_qjbSWEMszMi8@2!7z+WJr1_`)w)53Rmo_?8Xd2Jt=W@dAAn{;J`n z-`_^}@-8QQ+l@FQ{42M=Hm2ply3z%F7-YY$LC(wd67lLOK98pO+<&LO+wh1Ck8b5J zzE5xTi;RB#x-W?HC(#hc;k^@g$jec^Y4bE$ukm!*zqRani_iUcPB6}0zyonhcZPE} z{hhOWCpuoYJBCueb8=kEI{f1v_a^utuGEdPin0qOh*qkjEV~oh4*x4v@jF6UL5Y8* zhL)ejBca>*Xd>mZGRt#GclS9ADbFv)6jEM-DWyEm{9O6&z5KqYho!tnOnxuzV|lWH zvhBO}ms(!tr}7*zDc9%+99{0?__)UKxld{txld^6 z++r&)v+*y-@3wiH(hu_E#;o2oekS$`*D|KmZjBC@9P~HFD7SK7!?_#SKJ?G;C-TgG zU-bP3WM0vupSyGMf7h`2`lpre#~W^Jf!0fY$+;V~pXjBv_wb>g=;g6~X)pDh=S$jN z>}G2G0giuE$9Had0-m<^z#DXce9!3kM+anl89stuU1Rf{k5ckwUqLDM`8<^3A6$)6 z^!Ljs=?DK*~7MsL^CK?$3ENdyuwD03wySd8 za@|$X;Yze;{M1Doto=CK_oUkQNc-hzZ}&W+=e3=eKUbY#zur{8Ug`HG^ppG*{zZpv zo)+8prP}vN`!AxQcZ{)eYG&QZ!l1TFvyU~O4v|Q`= zxGNL&dqe$~wSJ$wdfNIorV(GCL_OvADy?_!YREU>Xo_B`-8T7k1ClS9Li+*5^UDV3 zxu}O8G)LXEI~)BLn|`?d2Jl24t=|n%PXx}xZfa_(4gUQBzN>V+BktTp{lQRwrOkH@ z^eP)Z(GS9BdgIR5_9p<}6yfvuzmw<0usNY5UHJ7|N z#rP#lx10QSQDX|8De|%GM12siQEfxOxO$~=?G;iF+5;`KLnh-`t!B_lc{=%bFltAt>2%jkL|=3t;c>gCFcj`LJMeW`RttFJQU#Eo-xk0IgPV9jB`@QL3}nL zKU)I4@Pi;fuv>}x*p7NTmaLEM*z@qq)c!YS%udbFPU*fw?7yyO%}ZaLW?n?sIk8_{ z=N`$x^I_uI9L4&e_7Cfy+P{XZd*1#!x5M}UrP)!I?os$*+3OO{8x71ze5*Nvb~64b z;HQ1ivBgL`)_-r}cr!dvVm@m}TOPU*$UIpV$7_fO%y`c>f_*25Iu zu@B` zHh5qTIf22eV6%3@RwAN`^8U+*SX;5aQx=T zOVgT9dV%u*KksK*fAzDR!U4XzBjmq30Xkpij?97waE>j|=k&W}Jb~kg?i;bbnjE=- z7jyV2@RILeniD_84`BNPx$+t4)&~O690(y?g>B7FKm5!X-4I4Q-Rz)LwjZN|4b}z#xKk-@`iaR|DD${0b>C6 z1^$Y`5&X%N9BwO+!~LiS{oFyFXMZe*#uv;F zISl?j>;Ubkw||IBf)6nq2T4CSg?1Ph@hI9MZ`Tp0P`>TQbFD`^_0Pb` zjCp{ciw3yQzYug*JYjDs??Q)dXhAvQJ`ngo4iz7h#~psY40wgkdGHE8fFqj^fJggx z#3zpLTsg#XmCXd#nJT;|2A$@67OL;`Q(RIpGt>KaNokXYt44D6a~i zJpMe9%OBZ?P=2nN6Fw5ZV*8f2)96PzHal(p?ylTx!s1#ndFB+e=N zzRM-!Z7n=!9D@7Y+48inKpsvM)SoPc>97M|z$&C;G?!ALA6W@v(SVraa9B zpUZOeeNPrYG~T>5;PVyOD~#i!{%MUL zc>k%>IvlUJS8<-Oo?QSskv_JbsedPaApNRs=0}OYHk;qhJ@4hPBiwO3!24ra;~dQz z$M)OIqZ~H6Z+0gV@*sXQ<&Nv`j#QjX)^pbHF2LtN798eR(9Rt4^vU2y9EW+fU_RNm z<;fxal>Ii}WTwA8ss8pP+KF7Qb9)o?dED@yaEB6kkPY@6aSzkiC7t6n1@a|*v~uCB}4A^WsQ@N7w^BXamN$%SRL@DKd><+FY80Sw})xE$i5GJgI%3r z{wK)4t-mTSaU8L8d{^QEluPd85hqH-cVoMJjP!tipXVpaIz~Pq&#v(0`<3EHNc*jB zUqUWo`?|A$4`Ce&_R!vog-u$Q}z_E79R+fTkY z!~6J}_k#UPt>3QyB`5Ka{BsJjesjESo^C1o^BmzR7)SgtgG-c=pV032XuVIT@v;2daylL?uFi}w<)=g{p9;I=ZT2TW z{v5}XPZI9}`H^*$^7CK@{eNO|NWbL4g1lF}?|LX>yzyLq?!=oQ7{B%K_`KI+W=EK( zd2Cj^^)ZdN%KWrbo&BEJF9`Y8l)ZYG^JLf!hx{M+_dCgV`0?_4=PY;t=hy;$p3HlJ zj(9HXG1swtehR$g&yhLtb8TpEdA(V2w^h0H$9oqF>Q^h?J7akTT)KYtOFjkh3Oz>` z_~7;wjJMO*ceJ~)zrg%rQCwL36w)i~Bg~)MYj*zBm!=bOi${##K5xc+`3u0$&It~L zIELc)g6{i5J}$#gX#o!Mccs^Z)H;!W4x{B-$dg=!QC={(17AAQ$+?!!^Fl0#=Ffu; zkT(HG;yf++1N#pLzKGnmwa2)^$I!n2MZq^C9vtv@hjpAHzQ}nt@?|&aF-tD<&pF6` z+1B%p>j2K@7u1J*Ku7wm3Gf}76F%ba5g+rnX5nM!1v2DgZunf5vu-?$btQXUTNmK- zd8+()r1-b=1N?b|&UrJ)O~c||&p6x8~Bld>*!@eRV56?jEl%E~#!Ct%ph<=1W*Wvw$XF(VA13zV-khN~h{CR#v zyuJnhJ>^H(Ih_nYLi`-scfT%4K1SsSazwqMJ$C)3S4y|NuaA+v^ajZs$ibg zS@UQRu8hZe~DyHuXBf1Ub8+xdO$ zUyWXN-f`BtTa?!+%6k^&5qBy4S$>h&SNa8#?}9#uIDY4I3~?NQ`|sI#s^|TD9qpXN zOY-cXoC`I(lCf^>%;n!?z~}g!@YxXBXYD_NAC`enkslZK6J{rqaqE3y{-bkRx7LUD zS$^q60e$BJ?`4^OTpah3^MbN2MGebuU|zMe1Ac!c`Pq2?`h@vOS$;3Mla z@%^^q1HUB!-|7dfv38r>WP&d10~|lHb@+bl(+IbnM}R!&K2776 zVn-=Iw_5w#a_OydM2X>#^=9>f?3(R;|ano~W1n81-jW2EKMLt^nUh1DtDgoK>lLVmo=W z)~`v`d;9L(Pcq=R&**-y+TouR#CJq~NViv(Cz?bIpYa_JkB{$I{>JXZJsiiw2N+Lz zSmWU`ztT11epI}!gmVTdd;DasJ>G!~592$NN)N_+FOz)$;1E3(zr)sB#6@vmQ`=3> zitqUQZ#Zu@rthaUy19P4|7L!BIv&Y*zu-ZAxwE0`eSv?A_1EN$@kEL5c3Q_``X$c; z#Oq`@$B?4iQ@M1L{XOM^{=jVg-at9auuFJ9b?!Qbb(`a-)-myyNv8+BJ?)6MbC2Zi zmp|>tcMlbelOMnTh>i2K`*gyOi~ZMEx?c_Pi;VqV(S9~RUng-$^6w7N5At3R{}8{2 z?X&VI`S;FVeI8{;EyQKH>)wpY;X&-v|1uJ%Bu`J%HSD-IhFw!#!=;FYJ!v zWM;o`F4svt{7m>c;!kouId^hSW}E@dH2=3z{?Pp2{d2Mh>(QR;kKezf_mOL<&yMHl z9&0Xv|9>)bKO}x+YCTKYhn2bZVHa*X(5`xTyxo7?;Gi5mKFjVSuLb)V=FhPEv0ue? z680wr-|AfWoD(=i?s>1-=UI2nf(LL4JhSXQ@-%q9F7U}U{Jq#taw7PUpSMAd7T}k^ zH`V!^x!}k4A>IhT4c0u|1KR{S$2b}LP~xNY8TO+n9vSS*0N24}{4S1%{%B767N3vE ziZ^a1T{72;5Kqj(2mH*;3$DwxAMyE`Tjzw2@SXa+rNDkn7T6EQ+kRE{L-rB$my+v! z91m-Gzc8gQc8}c72eu0AgZTZl55X@_jc570jD7GPWSD6mJUre$*nLi%dl0+Ynx&6u z54{WXXV`~UfbaPXe76_ahnCrgJ>)O)kYX?P%z_7S3Ouvy!ydH{0tfXt-#!RF+Ag*K zi_foxJW9$AJW*f=1nxXLP?Sf>w*ztB=z%%ujqH=CH|96a$_qVNUx;3|p-?`Y_{Hd`MP^PUyv{YciliT2)4eKr**#s1vjDvA$p%z{ht zyEu$fbe<+NZk~V_6jb@y=q^s|2iAvq7U}-+X?Ip4{u%o-A5s3N?@`42HSbSl@qbe; zzQX|y`hncvlJB<9wfkI~bH};J#@XzK6LI7nVf^5?U|pD$b@?T}uf)!oXRHe^!*3br z}zVAx!wPX;}sjd zKad({Zt-BTJA~(A9Va`ExKQh{t|#JzvcAyHb3MN&Rex`&U!?u-PSs0XoBf$T$j;N8 zrTyWjCgxug`nNpaAvY>NkR$GEB_0ip?dXqe^v~^F*6g@X@E1C+&*Gob9}4;1R6M%K zpLu2X0M>?imnmIfZxeKh^YtIr`c|qww!c~T>Fm5jfxYqT89wW%^p||{|I>DEM*J!A z_acP@_A~*f_=Bv!nD!!Lza;T9()l7?Z=72QJG4Odiyiqb{sr6b{pB?8&G7q_v)+5? z`hTHujr@Bvt1%w+gnl0OR|!1gym!(5DgQkU9}4p<%cV!W|K31)%=S~%A8_s&Z|^$F zuX7((|MW~xuZ;b-x9g9%T?xDRF#3^yXDS@4+=mi=KpfxC%3IkvmjXF^G|+|dN7&;8 z{Wk zJ)T8*s|-FkcW*=U;^Dr&zbEpb(myMHC+n&5FJs);Zg_t=eQ#||E`Q@V=!3L7PR^@b zCjKz!BkS%c>@wF~#*@j-E@eoqShspoDj_yD?O@c-4H z+st3T)&}^_niD?azY%}GUrp!3AIrrDn47(7dA)s^{#X9JY#G0ky=sMd>9>m9ciO+j z{t@%^*?igCFg=3)s2%}t^Iykg|C4{eCFEmLc2)cq+Ve*|eNyXzz1O#3U5ew~t1`x! z+j#(q3y|O8+<8a;ZJ&obwZ4hpN_@t3od!K2XF{*^y?}@M^Y)8v_PJo32eZcU=YKT5 z@CAcwmAf~?|4E&9!F!7w^fX>aynTOx_Qvw^SciV0aR$U2tAqBx@q@rj2F(gLmpLrES`hB&=Bn{>Ce2s(63XRYzOe6UuX9KGvXWK-*dch&MhTh zMS1fbq`%!~m3xPx2U&Tm09WREv&ZX^;gw#GWM6Zc*h}+=ljj#?eN?>=GyL$PIB zGX3IxussESocP(K>#MyF=KX1(7fRj-%gV#Z{FKMedK&UZ?v>pKlY5nvm%XNkd>@D0 z_u@SnuOE>6G2D-tl^5bYFwslWJ%2wW`+d@Lq46Pq-yP>y))m<4jahbD&nI6I=DpYJ zA?%~d9pupLB;rJ2f8y2@%(pgozRSaWU&x)$`v=?Hp2WU7-j5WWU(LV&c29s~q5z*w zS@-cHP4>xDyR=}xQ=|=81VeioaAalX#eW`nfM%$ zewPbxyS^ep7wlt=E{_$^zvx^J{o}U#YoJ5>`VRda;{7%1*WAwK#OGQsZYX~W_EYNv zK4JfnS_kc1d*(VQ_9agaiq3I_b+V%ztPOk}#ylde{#;7u{nVP!KI{+Szf6jMfbuA6 zi_WhX<(mZ`z>(o^$oDdA9qfpY`0wQBMGeCz_x+x$(4KmDulnim+Y@n)b)o(XS`U9Z zQ6J~+uF!hKRTA}a9OiPZPsd?`f9B&Bv)~0u6L07TgN&gOzr#r(LpA!v! zNNOBAKUIM5wt#O@+&HYK9sSk2!Z>!1JYydr_dxUH`|}t_ycFe_@wiq> z4r6~jtZUE@UC%*J`h$}93H(j%BgGFP-^2Yt>U+@pEna?d-#-xhC-m>I4kh$O)*0f# zI04qlM17oBEIPNjIg5^o^?9eeTi2gU1AhDtUL1#i#ePj(MQ^^ zS9dS|vtgXO!Ds08YeM-l*gk$%^?j}TTw=YJ^?>}kRP9?j&$B+%U#9hl zD<}Bbw%%(!_U}LQd19Uy$bUae9G`u{_fP5h>^)O8{w{x0JyKT>g``|zCl z;Nw~8I9!PD;U1;%A?KgyvJIML;Dx>IknEr?YzgjFiy+M zV``iiydCbSXE7hbdY7^*h41OiwJS1yC%e*S4-{_bXF@*LqaWq-^ID&_xA8fJo3uXL z-qLQR&#%OO#Eo7KAa5!MkO#FZ{o*IcIjyN&Km7*nFYjmToEP@@rBd%{16lIE7uL$4 zTkNNWcq8}?DhL0h=o}a0&2zP*ST`EBKOeAo9OQ|1SKiwo?=8yr%k$%taopz$jB^>r z%iov9epS|atK@r~o-T;vNq(4m=+9mG{aw*}L72b9`%$1TN`LB&yHDw{17}P0K46Cb zahkAETGP5COwL&fLkvd+Eb=NrO)z=iWDDLXhpI5PRkbMx8zdC89|zGjDg{M3I( zX-6(Sb_6-KxM2Z3;<*2~+Q-@F79NBiLoVD;)Zg7(peMmUbPs2Y_YlX+Snp{^fPXko z=kr>RC|$GS$AK>y;|g3{k6+n)E#q?wwqJGmaRlI@_-Dnz1s>{c{<#IgOWURLN%6jr zejn^hDvq`a>l5|4vpo)eQ^)mQ)-$u`8TG+mfIM03PK}2E22L3+DCbzGF}3J_z@C zhIns?baxGX|M%>DvF6h@dO38T1H6iVZX9uKXz$MnWu4D2I{&i={)F-kbQd`rg@~PZE3t#?M;8Xf9cPc;{0I7x|9F?MLFl1 zZy$=zeeQuB1fCgwO4uK}yXPdQlD{MUTEu78y|DcEoXGl_Z(l-Q0&vf^-?D$;{CBAw zi~Y`fzgWCa3j2-JdbEM#Wbm(ee<1ILBYiu??Zf)-K2N;Edeb=`-U5EqtNggV>?0_b z{(WSfYNz!6I^x)R?sqcGyVK}u`z)NxnZo&-4tk~bSN1=I!`~Cg zvZp&hC((DjcLU`l_80cuQqV>D4120@>A0t%WrXetbCmgKqE z^C7|&4H>;k@E-ubukTOQ_p^Re+4@IK_AfQrKPqegT@|Y@4YR&H%=%JA>(^GTzPyz6 zm8GmNSG9g)xv6yA3Xm1f$}+aAE@Qh&P1|j&3~Rd=s)JhY1|HfT@F=}&23Lu2ZLa%y zms|aEo42mx?c==7QS{UPb?aYa|8?EI{|c*LVg0+c|Ah9BK%;VY>s+5)Dm=P zjskDOxzzAd{F|e|htCK3yc)^)%~4NpkC)N=xdOcQ6yW8`UG9yLC0C9BFNCEmaD&O^ z3Q7n=xr!1@D;r*wGTI}*S|A5|BjpS5H+;&5Pf75BkW@I{evk}&bB8E*?l{MF2PsGH zFy+Oapggz(#Md2F`Nnr*$rpFBhvQ83vOLy@a>pCD{ySzGa5rHF(Kr0-F9H4=>W4^zM3;qIcJ!6ur9^rRd!^QJUWAy5H^OeS)W< z&uv=P-H)}bIeFjYX_(^{Eh|pmLw6crctFdNllM2C23Y02dtxQzeR@*565r!-yRA!i z;CYN6>iZ+$wNL&4JowiTJom~U_&teI@Z5t^@Z613@Z5z`@Z5<~@Z5n?@NA(JJY_#2 zc#0hqJh!7XJe6-Ce$+>~iF#3jIZ+QvFe~b&+(ca{!OWP*n7^TqX5K5uXL6kzD11N<) z`%xz8^G%>Aa&WDdb$6YXHFv$1RreV!EACrbmfe_^C3l0Ck-JYz=Pt4Ga+IPkSD3zh z*7W6bAhA5Z%=G0R)0fYizT9Q{@&&L=+TCmVa<}QrrJ^r*&UmeJHzwrkgQyXDeE_A< z>kO1aufISk^!js@La#qVDfD_jN}<>LPzt^N6s6GXbd*A`_o5VfHBlz%wO#S-a?fj7 zcQ0sJb1f~aZiki?w^Pfq+ofg6?bb4Kd$hzlX5~qgg4YS7m$xs+j9y2LUQo zMz2FguY*Rf14gg?MlZk5)c8cOH_qAjiQG?xj=){cMT&j>)!2jI1xCV;*P|4Eybh)C zTfVQf2-fW_;(m33)L>U*b8h55gw z<2~y>laLeHZxVjW8RRa3pV({G6CSKviF(=JvEKA{*1b~uE`0$XL|%#a0pdMtoWrDB z!8o!GbDW!u-q+{SdrxRj{yTS_wm+On@54&(!{{gU-UoWL=iT?>IqAXgpFW3C!Q}yCMaQsWO9{QEw$AM69aiLjs+%+dUPGTIRqt3H6HBT$dbEDQj znX2Cq>M3{dhZ1m#{UIKo(f;s*67}0c{VJ`W9nZIXRe?N+ogp6neIn`e9Qo&Q#qM!` zeZs?$idz+Z*XHDa#*H%KDX@ElFLmBveVCW`aAkjKb{Td}?QFx_WrZ)5w->ucxI=yi zaa(9v$eYgXzOmRp(l6`WgMDu{Bkl)#XmA8Oouc1<+Ud+Z)8<_I!5(*{Up#NP|B%Ap z=S}nDto!}=lBd-5F)cs#9h?F=+!V$M@2yI~W8a(1prh;;$j{>*juaj3dor1Hd_I?s zu=^e9DC;oi4e!8FDQ4zf*r%zu2GgX{_IuZ{-9MuBSXUDDvMv!$pGQc`k>yd`T3xpe z7vv{py(c`c?7rv`?7;Z`UeZnC(>&+x-xo(b4$q3Cqy5+d-M=Y5v*YI)kCXM0_;Q__ z?VlZh9H~6OZ(InuNZu1Wgq>uJ% zs#k^b=uSXRXlKm7_VjPach#Lc>E$ScKS#hn%4H}2ycPIy6W|7)U4A|oev|Q!{^0C9 z-O~l|@?5w0qb4tym-58#eS!}|3p9>GeVYsZdGs+qJ7XPb+b_)tfB1!lzpekX@;^oI z2Nk`~gID$!;6r9U{7^1G#ZRDq-7qJ7Vt;6VfgPACumhV^-}ZyAo%5;~AAH>(;ByUs zevbAsdEZ0)3+nkdNv|N6o%2Q;Li=zZJLON<`%N6amkavidx6u_e6O(S&EkY!#rBow z55W(Pr}vq&^~pK&XJ*L--|u$_mRr{W$YZB<0&#A&3vKtL0iWmx&aI5m?o%%;9*}8Y zre2jC#qpF&<|Ieh51HIeDg3kTLcU)ubj#NZ!6#2|_WOEUPm}Kf-XGwT^L>}$SH7JS z|BrffGy@;=w=?NK7d_9z=Rht#VV~f}=7f*NxU|)`aui#t8zBBe8uO}P@{;%XINRQ_W?B2-&xDMyS75h8a%?Yl< z0WR(jX2%Kg&r`+w`>;Pq@hP15?WiZ>PpE!m^67X1Jr3p4L+mQ)e(jv-u{X3gzk8Nl z4d>lD+HvO&dOgahr~is+^nLdyyI>RIQnn0E(+f`&Z#fXB+i2uontP<&*R^b-(i1%xUA}L zf!<64PV&#c7o_vKi#TrS{q)Y~B4U4@{<`chI|zy_^^(3l%EjqbFJL@ zkA!ja<0fMNIDgoec7!v;SKOZ5d1amCc=_}X@g8^5j|Y9weLUv3{R#G4I}jmnmy12f zkn=bBeH%QFa4uy96Y4Wq?DG-)miYt^=_hg`<9R!{AHN0O6KY9B4^KR?lEQ7!VnyJd3N2RX#L(!EUVggdTy z3*U6y=4g2Z+xM(s`?8!rg56kgocAfaS75$9XivJF>=Qab?}tCi`pPis_o1HiFZu2e zRCE7}SCoALbiHuxoeF3+(}4%+*K6<>)*%X8?l;!wie|_KATEJy-a)o=1 z!L=IC|FjLyl>y%4I^U`kKI=mLL9O5J+=TI8?FQofgI{eMPx9KtpXXH&w@T3aDXWJb z4<2mmCweUXpznk0+MbIaq2uA);1KaF50Orhoa1~v)L(k~ph{O%ZbDuq{v~$VxecC< zsE5=vM^0Be;U;jtQuHh;50MY`CdV(?_;o!m3A;9I&xbj0zn=eWUi#jtw)wvabU%rP2xn=KaMp|t(ICgK@jUAz z8T}tl_phY-SJ?ldjQ->7pK<=txlO*`dkt=uZX?cliu{k_yyQZWPn-u;zo4w=Kw$>n z!uPF4Ev+9dwOHR5jfvg6^pqCp1bgM}a%l*B6?>y}bdUOZQ}lAt0w;DN^7Mkd==`2u zWx*GA%;>&3W1J@vyE; zTNs~qMb61BP`li|4h6dmJ26Inm&OQh#C6q`j+(qt9!9+#DG{I1XomgDGuDsyvfaRI z*ssL;QC~k$qMV*S)27cm0VnOw>XOl&_9ob!m1cKVm975#rrM>^D&bn(HN^R=)XTMg zoEy!*Vd>TYKh-a^Unu(3ZT-5~&z1g~aC3aOuDn#+kJvn;ex6cQ@ffX|{p)Jl{5&td z-NShk;T&NJH18BWYmTBl=eK@c?B~ilKg8l+2uH@eBQ~#$L;Ilcz+E}r=suz2k5(sG z-)nR~Z-R7JKL+cP`3sMCD_z~G=dECT;yl{>CriXXgU-yL31&o1wmiT@A(xH`soula`;)+xuM-aqWBkG)aXHEI7C zdRQFhD|RpZD@)Zsn5ZtNTx7!gUkl*!c|ui zk6McEHP5$O3+jKD^`4FxN9R?(OFV&a9|c~Q;aAj0zy88ni+Fmz_0@nU@U9LM&f2iS zuYLr!FF!E-VEw4Cub3WG-)ee5JmkIw@fST1KbU^DwUT08SE9;q9DFJ4am zUQE5*SX-v^xzYuS=V)aa`&X9{Pu`Ph2D|0wFByF*SCdcGS4iK=TiG9US38Drl)g2g zm-w^X2Ok7n%IDg!`e7FWK9%Q+Z!hr3xfizIR3rT|@B!a%F5vs?SP%KBMYL2kPx$|M=!`@kZH@&MR^=@P#`M!_+ z!1q+U3jMrOFB&JmFQPs_;rSgE@tfm~`gtSI??+v}KHZW}*UIbIzazh8A42{e^Zf4j z{GLkkyPxo!dcidDqn^0U&`+Unw!Z)Gx$r-R{*W`sJLPefJt)7=`Zp=Bm8RJPS$AcB zO+Ftf>o|y$Hz}``X~JK&_KnII=;)p;n>;LPs-BOqbX&_R58$iKgLPWf@wa}pcKFb-d^Y)G@WKS+((oyCAp z@zwio7&v;uss3fw{~PNKuf=E=(`ym~&_6!O{YSh{tEJ$xeeJ2IOi;fJzU{9TzTST` zx=k3}CJ0|I>2@HRNYbsGf=l<061TGbezj$EZE>6`PyzY zto86mr#Wulw9#MVLe0^>DL(gkzdoL?vN##y6=POE#(w?W|7__ocpBrZ?;2-)qi0;? z<*={EbLIPh)puz<;^E8ryk|N44bVTf_+E3=`-45k?>gmtS5H&vdEE5zXn9P3pP-#| z&orj>_d(~qzLu89x`t3n-e|ezyIko(%2oF=gKrt(=%&9nSyOoj99EBZDtC3M zKZ%hUXAE%G+TjfT9PZ5;{*mEd6a2-mwYW9xnbHUHtK-*b4-ZtGzzzR)DeKEiSs$6d z8Eqo`o=#q`NGHTehHczo_AAS}E&iR!SOnqqyA@*V5UnDrau^Q!V2<4xQ1X&cYv zXJE*l5Apc`?ZAHX2RqBFtSe?$D~4xx3f^vk7pqS+zkjOZ zce{&G%00q`TGrjCwXC_1Xjye1(z4>t)UxcBX<2d~)-rO#S~_=;mB%85#~sCQk)Pv) z4`HL4&^z3>J!$(3*UR&JXZ5qaem}JBzT2PM^Pe`P9)mXIzFXw}0>4kgcxPx?c7LX2 z#l2t4s(YW7HTS1l*4^n^cDeUz+3lKII`=^v{{#4)y!R^iTt!YLPA~GzxAb$4TeE$1 zd0A2p$`)Vf=|wv^M?pDv@3cIr>e(91+pZt0!@TZ~KGv3Jh2QvvDazr0)DqwwwfPON zew*Lp)i3jpJGad8B(-JGTj*2pZ*5&tKYcCcWq$P1_YSwkDWT_FS2E-G6W%}b{&Tlq z_Xa5+-CXyc_H<0em!C}c5Aa!kg>RjQ&pn~zK(7;V;h?X2KYD>kVxoRM`jel`U#0U+ z-X1u|b>i_<|Bb$XbIE%r$Oqy9{XLz0@cE&R_TVAsrtN*}K0p4A+sWVha^Z{H%5|x^ zS^z{WX!Xp2ElHz+@km5ttunu&F9RoT318uVT0i*3Do<6~1=q#+ z&PaL8;2dLpm+o%?=U5w@;y=(%jaFOQesQ^F#q>jc+J$i)!rE4H5Mehk&6n3lQ~tV#eE*c)aHS6^-ABsHjIPUwXN`2tpigtjS>xop!Qo0DBmY1rk)y?F zI7(j5SU-!NCCiH$KW5eUTx|3nC!FPR!r9~LJ>Ev|ZGqmrhlg|dr(0Z&_#-Z@b}WnD z*e|azxmaO**K;^vLIqY;S=PkfZKW?gQ@wO`M?1h!3hPQ7o z@hw?**?wJ>`Z$VyN`JK1am%(}EdOt$pREhC;$)S#7=4Fro?-T{2z~uNLEaal@)rBG z9oLx?fQxowLx$X~C;i>yWx~D0?1=Eall(m4$2rgBpC!&+ETx@>ylKC>$v^X*SRd6s zxs5iTEBiQc=XpXNBQ=lD_l5jo-S|+hf<9umI?fL}qVuWToP%~Fo#~I~>@VZc&RG1i zYJ4%i#`zl2PxvRs|C6Z4`iHo^t;@Z`q=#RZdv#rQI|}4vQ@8TNoqEBF{5W*o0tBDs{cVj{rg#ue&oN6Ul+K=-?#i&#qwiyA4gxV?MExVz3^j4X#Y&z^aA}j z?sAiB#+zK_`;_}C=NqUXo~cu+`BDh z)vMU=POY1+Y1@e;9fHf%W1?s$Pe9{6)m0Wc@J?^r}>if%W930zL70Eid<`Cwe|f;!Tv7L(ve|4ZklR zFuHm98leAu>U&${qwT9^o%izc?a$*ykB|?U`mxLS)Jgs&ena?5zvxb*#+#{(Yro;AcNQ+7+^aqu6yCd{5q zP!76!$3ZLx9)>8E~)=$+36^sn!QOaJ(pKKdaiVJAQz;5E&5(X`~$W^PJMNjH5S4 zyT`2E7~6F-&$Jcv5<0iKmT7skcbMZgX4t+o!}j_f9n4o-ZqJwVc}>=N@kdkn7Vt~) z(|n8g7gk@IV*m0K>r0joD=8evhb^`GrL6B)`e5FcJ#X2#mUr{=4|?c)rXQA9$cS45 zoPmc#KiuBF6^gfiFW*7<6+(~0pr_KeVsxt;-FWUF=lmxKPkn;(_Ncso&V%;c;OW-& zD$X<24X?=X>KbBu@0apCAo5}}d|sN-@sCix;HK$0N63fKqu1zRdCXdGBA@f%4bCmp ze2&UF@){^5pYvWVk@wINc@Qm;7ts=V5-pK8(X!{E6tX6f#-G}U!O}{iR+xj zrQ|-wA;e!TUaI#J zWL;u5c(8xe`x5Zji+aIhCrXREmmU*1;{BX&ulq^yvxLuEf!8H% zc#Ho`x}AVsQ8}wo&Q6xK#J!T#{FXmCUS~U36}i}ES>qx{;Cs$U=KnJ-D_Q^a1d z|55G#c&b0_A?sgZK4skfrt&F!b^U`qN#s-Z0DjtqtbEFoW!j4nw<(#u#dEb&YL{V; zygh_J5!*x9*N*Zd_Q333Za!r#+Ht)~=Tqc8!?0s7JD(EnsVz+IBVUMyb-aLw_lNvG z@>S(iuudlODRI30;S4+;qWov(g~ENH6dsQh;gP=|e%bkym1R#i)6c5Oh2>KowDo1l zZ+$*xv>44$g}2zpQ+U_(8Ofe&3VMhi>OOoE6_k-o)hlEZdi}bgN39-nL#>z5gNp z0{+z&2_A0T_dnhGvxK_;|1qBu=O@=Rly0-~DHdPPqWAwt`IH^t6yuuP%5#Zp%DT(; zzutU`_<8ipkC#;53i2t(L;GJLY`4oTO^_AvR zp0asHj&|8HwPWfFc!aXuy92mk8xDPK1KfpLMCmrt1led&iEj$U3q zz5su`FNYtxP}b4N_HCLMka!B)r}HW=6v$O! z-XfY?UgcOC&dj_|GOx1z)xuYhS2-Gu&w+l&0{xDgA2SMkl+I=IR|@hf8xhAMQ|&ujUVXS`ofT597jW&ct#pR%vp;Ha)( zyHq}?|n$*17n-5m2MJGz!BeRuT_Yk9I_^Eb>7DVZPAkT`Ev zK1KXd%a_!ega>l2^wE5Z_!m}Rnlb!m41c}{;n2Vk@###Tmz__s{77~_C3;BKb2r(& zLh(LaozU_K=&5wAj1kWI7~u?glqq{|{P*`{>Jxm9yq)4*7r7C=R=+CF6V;cp-sg$B zj2=~^N0;SGAa5$a;IoY9zt`sceI73#(F%^I?=`|~(FE_u^iIhAn1|Oow@~vbDpy@@ z1f_iEaEX=`H>zdHE!EPwbF_@yN3|@wPiR?nAJek#7Hiq<&ejruMa*BE#P0?8d4hW6 zj`#8RC;M4`yn(Xq9?Y-zyHCz#eV2*fwG+O~--G!hP$A@Xu+CE6OyB44!7!hr`3>=7 zeI99C<$V4g4DFJezXt<5zg83p`8Ij~R(sy&DLiLfGV487^Y>up@4@hWVV&e>vzMRd zXl~vH&F1gHaQ&*7U9xjED^E|)a{LTD5nBUgC&HOzW%fHyYh536h^Y>shUORseM&kPja~0gvDahB% z--B7feP}9gGk*`JMgOcee-B3E?7c=0y9ZNE-h)~BFFtRh`IK(=O_XvE=2|W5?m8`N z?s_e&?lW3e+_$tWyD=?G?glL*cb}HdU1DX{J(!y;UvpzBUo)RKk^JW_F_04HozI(8 zY#*w5_4)UQy|Vi*lepi|{=F1A_eJ@de}C9~-h|&HQF(ZU_gx z-)}abH=*97?z`;i=DD}|_lMc}6@M?J*5ZDkJfAm_xIxzY!|KVr$y$gL@4Fz+u>kMv zI$QG{xc8zZ?yqQx`!8DJUW=Bv2csqKyJ(5~Fk0dsjFz|;V`Wy}BHN{<|wUt=sh9SDpXvN|X0=%Bl6*z5_G=-Ie+8u4w))e*X~insU$cH}Re@d7m)f zt8$_=toM*3|NStZKPp*XP2UGNpEq%QPZ?gXGXLEb>_Z?v^WR#8LtpzjX*d7f75^Tvj_(PR z_cHnSgiTrgW6JVI^WR z`Me4Jvhe+t`Mk+|-UROF{P*g|=yzSjb)+>$2q0xc<6^e6QPoe@DL4Bi}ud?r3+e`rY_#-%rjDeZf8F=b?`CXV3`d)LKkDEH5_5D+*N8Z4` zOYeF-e2g1M`knfgjk_H?Rr@Y?xru(;@Lb*tg!hIw?K|)KT)uZN&-bI`xgJ;k6yU_a zS{I$m?MC)KY<`r-T4&2JDdh2u%I z7dW24bNe2=KA*7XcrQ%q9JhCcj~_nrtu2@ecOW=NBAf2je4%_`y}yu zqg=FA#>0K7lwVerbwl1?M*5rt-xuJQi{8cdcyGSyPucu9{SNb1G!XtG?mBou+k9K3 zBc3}KzE>apSB}%08mE`*)iHjL${nuxc`s%AMyh>7+T*(igU`3k=f5ky63=hPbCKUJ zouA*If7IZ41ofT1cmJ@}Ly`yY*Ku8?8}lE)bH;$~Lagx0PjF=Z;j3 zey5$S*@CDv1ie5$W$?3Y^Q{W=xi@}|?Wn)aCI4xKXhU;^B@j8vdHel$-+VyzJub=2Y9;bcf_1~+Vdr~KX?*wh&)GS z!^5A4_5Bq-pI?D~4z6pXm*^+ud8dxQ0rhq-Kdu zho;G`+O3^{o9|%@-v>_FuT3}yt>agkl-ts<*%6bAlHC6jc}eNH+85Dl)xVUyK>s-} zz8~%NYX#+udeFRdVNz4InE!ua}9_acZ_KAAEJwsl$QC>2?_rAmTTWEU9(zT*t z!8gVSc9!z*{c`;tcyk1HbfLA=`l!?Uui|{x*0SjJ4)n110V@4lo(}F2t(Wg(HYq{y~ksv@0a?n$fM<@!~^XG&c#?470#-xYxp;y=cR$ijNviE`T>u}jMAU$ z^;UEsy`S~-rQi(T$Mt%df^*#WOTp>Ne-Hl3dX@oazlU?m;G80y{T|M#HaNwTp}d9r z#O0RZE$^ij`)})g+0JiO5_tpI>F?!#x4v>7>r2#wQSgWIQ5t)r`Y$H$r?-D63Vx31 z+4C8C{2cW->wD_2{QLD~e!u=9Kkr#~&x|GT{kYP9#P}wBP<+Z2;3IlqbgCMi_+5(T zlJll1r|0Q-80T+woKdu+yjlBXoVht-<4HT6r=;_s|G$y0S@nIV8{Jzb2QBvR6T0KQ zb7!^M_(@Rjq$b?5KP%NBvlLxU!7jU#<Z(kkby%e@zS5rJu zpMtyM;r>49hxv3I4_8IT!N2NTjlN55o~4GD&{y^W^ec~*)UMz=>9*e3c#BIzZFCU- zjqStxyh!&z|MexMzk9qwxR+cotnw7(r{>2ifiBL4_jz4x^2^dqfKSRtv{!o8tzS+1 zVLlz#ZM6AZ+-A&6I@`E)laCt5b=CjqNQbQYTMOzx%6g2ee5~2{bs7ISAmDdR zPFC%GUcF1H7qtnai?#1HepJV8oN<%O9*l#3)mtd%7+>ZY^>|dZAINz&>pRk0_TALC zBWZfuc!AzZ7uiR%{n{R-yF2v)`@S;e-EFD(b$Zy~HGTzq@_&&o)vWrJx%H3v@l9?Q zV;qwo&_ni}gzp6KxeULeTzli=3=VhL<#?W}mEH z_O}XWByukGrzHD>`&zI4V?S$mG)z3|+$UUET24Mk*1oRmg*)|>8Nz>x`hRX~G(`Ev zxGH~uL&q<9zwh5Te`fu|W z7v8Tx_?sh!$G$Wk@Kf9I2>agD{%TKwzw9Ev{u+LM+{oy8y4|zl{=q$4;Lo_yaniFq zWb_^)oOTb_mF(Vy)z3QLQhJTagY`!{%7fVb{h%k;|AQryhijmA>F)z9p&!&7F@LDVbrOE9!PjN|faS2~toUw#ei z!8f&IfRk`VV{dd4N1{9(AYWa6{7K>@Y`?8ycIuSjgnn#~Qu^WfAM|4<`Qi0rR{dG5 z$8*)Mg#1s2`KQwG_89%V{`Tm)4*hK<;Ct@X!q<0}(X(arY>}RQLQm(8MlG(dxp6#M zDM`m;Wu;?t6ns&9ffx0#JdW|;r%m&Dd795F{I0u?ABFfH;%C}V<9iPAHRD4x!Tya2 z)<^t~{gIN*+iP@dnB4U$-2l&W>$lwCsS7;r>GH7RcY^Cb;2UGR`k2AjrR`p5u-)r3-k zU!Au8(>A{FOV&fHZy3I1!?!_vk9xd7UxmMFcndWz4ZDL(h#sqZ#CBEzFw`HSz<8~q}qU%&1Pnxn8wO@vqd-@{@QZbo)4(NO?|~Ei3NxT9(~CT9({pT1M`3S~~YxD=)Y4ufXs2dEbzj7r^Vhb@zMP zujbyUW!3$@mKFC0TEZ4-S#p1@W#rzZrE^1CcDp~c->2F5r{H({yskfje6~Olx&I;l zqU4 zbOo&F`yUj(y88z$Ywqv0thx)ethldgS$2P?Wy$@mmXZ6Emd^dPl`dkw>H@>_FY!Fa za|hs%`0ZAdf}iNU;3xZW!O!ct#Bl^au`7b#Hk5*&*df7B;!lF#UX+5L#36{^evhBZ zDdeU^{PwAQ*WCdvYpQprftF&&Ps7|(T9)0UmL+#k%g7zo66=AL*Vy>yo%^Ac|7_#`6Mo11LSBl`o8NrV;(v{4#K|`S z1Icq@pN;y3`1QQ>L+Scol=U6e)4I-&4ouT-HTuVxA7sDFe>u%KlIA&)M{ol&o;zvt zU7nav@&ek=ov`|A6ZM-z{dU3;;L3+*kMGyKHUW?9_X*Fomo?t*Fy1#4<2@C|d(Pk= z!MH*CNU72XNA+&Ri0f%wWZUFX5_JiaLz{GE8cfW&tNZvrVAUaD7qXdMv=Tw_qHpkMUa>#vy(Jw(#-M zFrLs$+TQ^A2i(mOEw_L&q{A~-|Aj>TI&gsXCJ)UU6ZNayMyvPwcU7W(BXWG&AM?(% z&AY*^w0@o*$$8hfHCFHK$W4iHSHhAIE|1sEiTX|8a1yUCCF<9^39H|2c;Aw!UyF{|m-5oQS)YU6TJ8i#Sbxmwzm%wd0vQn2 zpRoE{6ZI3w%(Gto9`JE_qW&@Wq}8u7yhaDi5B2t8K=R3=f0XNWx$VS`u-%s2cA~dz zw=%b#*kiU^liN=0GTUv)ZMPw`+h}|m?Vq9F3x8kt8U5ntuR}Z9!_~R%V!O81=r8LK z>}_*#zpY0Dvab+*Cw%L3+pQ1nHs!Wk6WTqV+irDe=jHaMUz$E^xe0H=qI`ILy){w) zI3m)le=K(%S>K4?L@xbh-D0~Zd^^aQ(hG8@^lyl~$vRE@X!f?*nXWs-cqaeBE?<|h zw=S&bHzx2y_x_jM8^N#6axdo$2=8je|LI`g*68o2yuGq@VW-;9tI&&l-VFVtU3fy< z@4`wu?WCUavIY9bdaf6{p=qq&qwV*oy_EKkdwO-$&sa}3`E~_#H9HCP`gI)}`?<=6 z<9ZE$Oy_saTYjPI7VMGQEzs+iq*urBo!e^qLVr!{#xLEu_`idmonv$sK4bkDTcCDD z^y~@zN4%fZc{c@nOFD@EN4-k=dBLx8w%%s63;vSZ;`JH&PCYff*ZsZNCCc3{!@u*q zV&~XybMAPtKk4PT^LQf19PcTcx3j#*{@v5L?P9+&UmjwAmhzcJXMm^sMwA03;lKN7 zBvjR81sLba9+o?MSw3a^9`z^N_Wy@XU%rg>{22O0 z>Yv5@J!JKNov4rf(E}apV>vq7ar{_rr>y=fiSc83J<_p0mX}G&0r*3I^qQZWpQ(Pg z$N|@}eHc!s;B9^_QNJtrJ%)GlYYBhtFxEZV-ASYG*AxAp z3G1HW+5CE<|G{9lJ%7HD=)WH)R0*HwZ?b+8CwN)!QPu&*8=o_|_$ii7U3W{2H}1u6iBmtT zWzFL8RkuxlS1c}HcH8xL$>Q&klXGjQVRSiHF6BSl`2U38g8vUq?tWl$_kCM;zh`o{ z%j9ln7u&bGS-xO$=Xy=f`XqjXb)EEgTZQjI?oOaa=yn{X&<+0v%4jcfTA`QlPv`*o z!u-nblAh;4w_)-D`A3yY=B=Bzy=9Q=xSq3i&D$2u@VA~bZDBm&hs1;R{Au&{MJw9s zcUV1&@=6&W>=@@fm2u9~Bl+B&QlW5td(n7Xf6)sW-(lSL=X=BRZztvxk3-vIzMpcw zzLw3`;(UFUKQ7yM_3fYu<4|OQqNK zzF(d<@BF^}mN@qrf(PJ=bboNyqCrZz(ovq*I*xbu+GS|B9SuI9bht-?ud8Ff zd)JN;j_L;#jurY_{3sm<{py|j{m;wMPyCWIb-oq)Tl_Qr{>~!`cXQ;CCfaSo^M|$F zcTZQmnc87Ydxw0ijfZj79`#E;TI`svKk>n-V_@yew-+`WLSCQWx zvwE`|)h^UyT`vvW^I_{}`T5EUd%l9tEB+in%bvIRyj#v;BQ9=qc;JR{!gqth>2?|a zNBbtM-vs;h>G_7{DDv9Mhu-CU9%+8tJx9L({USoX@|E)~BuiH2c@ZF9u${ z%lN#pjL&;5KMp@e=c~=|IrI9>`&Svb9_r^)97 zdJe=rU!K3M zPxRjjSNCUZ9cgjgTFb^&em6&IOZE9^*HS*`c}vi1%HWvd^P0r-Wd7xB-?yC4>pCCK zD@?O}-!z|hk$)p5FT#J-r`|q+uQ}Q`&i2qZecnfYjDQcq*U|napO<^I{RsHL=PUTU zo6kpk25p={KJVeVKp)rG9f@Dm<@RV|Mi-_pbKt<+QZwm$q0e%-s#QvAA8QHuR}CrYtn??Ng5&Yz$Z|L*N5#UFkL zO7Vwf2JwgAj8gowx1bdJ_*RtS2fhs@{bBqSorzzDPxG8e`MC9ez}1xJ0l#P{+KAup ziUuP@b3^@~82)d!`gfpS+AT=6d$YBBi?w^JwR;=e0UCFa%!hxK_e1{v3G`hE7=9lo z>fhrY(2A0~0;R-P{syJ22X~jX&t`k9M1W z`t`6|^m7dL>bJY^nOuGc>&F83W%nJ_fF4-qQvLLt-3_P}dHXu<3H|^vdyjv={DtSY zqvU$-qQ?QpmH4f4hI4PJ@f42hQBOFyFS-N2W&Eq$ck!3-<-1siA9v>*9wnNd~1w6hYe`vjn{t3Uc z;JF9w1Rm#pqEO*f6(z=UG&4_2_t0l+!*OPi*+Z}zb5^^h<2pU0~kuIi;LFCIPp0= zFJF2N?@MSP`gaZH{Y)EPual07*G*<8Z;OU=@VgxCMIM~H-{aStf=};RgV=+A+cpo3 zuFg|;_YV$3zixH+Uj6_a-*orrc<7~i z|21oOG3Ngk>D#EI{a@iZ29ToVxn^03XJ~xH?|{a<1d*KjO*q zQ%KkPa_nT3b60l+18W)ROmisxUzZ{gQpqcpwNcCWW~&fN^t zu)w{+eY@2p-?jdCt^SXl8+s4N*Z7A>psXK%2tNOJK3D$#KAwv_{{fyaYJ2`Bdw!<- zc49sFOM4Eo>Uwyp8yg&IlRMEY>c{n3{|r z7Y&g9A9i0%tS=u5{Vvye|H6GKG4G#+dcFta&)rRf?d#BRsJ}H5x?T@`YKQBbP=B@7 zJ9j7KSLHn#B7e(6CU+(9*SV_{4#dw&L(&Jf=kQ$kbWuvK{?VQ$GLE;BKsQ+*Gjs6CzB=r7jG($R|Ug-ckqV3eqU_Bf>s|{XR=Qz)0 z{p^2RG{yej{$Tym{`MZHTMV8nJUo7V!}_D`)Zf55GWhV`1&2x&jN0-Uw`M^u*sdq z4L^K94-n@~@_FRHXSe#zR^{rDXBW*rwyr(WWIp|$I>c6DiY3+hErJ_S79 z(1wS%=l=oEf8O@|GPD;uoa^o$HhZLaf5x6W_g87W`)odi|3PZ?$=_-VdF@=c?CN;JMhJPe2Zz<#W~3&xiT$GP`tpWb=0P zyPWgu`690;UZ1?)sy;2kJfCixNBmmib*I_2yQ4Akr!S@Ved1p@_wC5|*U>KAjTV%* zkEHDa_W!Y6z`1gdPruFM>-%M%(*fs58=SH}6VA6b9N_y?7Y$Cgt!J{&WBt7zejjgu zAFcCRyx|VBCm(@-sQLweQT1zJg6;GkP!s%ni1VwQ+!^q?XTb39ongQF4Ey!+zRHsN z5XT)@&U(aQbp8Q}v%MGNzR))A5*zm;c)qjk`M1M-7AI&fxowznsN0rH>E2c!<2)E& z;jh>{U5w|wuOf89eY~r!A4_){+9}?3)2r@wy^?8fbKo=NJEfmpqIdV8fv#K4ORpYd z9!CAW+wq+K-r|gT-=Cg0q0i1;;QQTd@UnDED<01jyb6zi^EHi|ji8;-VH9*xdUsXE z1P{V_hctwqK}rbpQJb7yAT99xU3mUT+w-ON9N7`d58hK_abcG3jHpSv zdcA{wC>*wqUF-WTw0L2c^~mZJH@YT{Ho}^y6|2Y*KPY1U2jGJ zFa7qj{Jbf6KUe_ob-rH;-j5f-8`(a=t}wii|oA}p09pg3GnefDXu1b?FU8Z4~&>!DD+T$u=~!g zd?n=iIn9? zxBc(8e7}@le4{`wT=^}gkDcI!y)iiX-af=@EY3wgU*a`{yUWj?g1bhzUETBPbn+=n zp6uRIb4f~`UN;AMItTRj^3*VS%6c!;XgMWMc7OY|9?q0Jy{1$kPu{Mfo$|fx?OF+Z zzX^1rAK{{fq<5wq-H^kNdofNY`MCzq$%l(G`0#sCzWjXC_e;so*NWsPdJFUeat?VE zycc^t;yMw_Pgfc3E(VJRgem_@Nv<{!5J0 zi4SMuIraD*o_;Al{7FPUyxrqhz=u=)I4M3Xc$s{7=PTsHdpw*eKD@j1YWM&$(T>8L z$ol+FJfI)nSud_dz2z~=-^t<2yV0%_U*3b~*U$^6k_;{)y`uT;Q?Tsw6G=;ZlOV5cI}hb(_2 zx*=zMzYFtp;!_-lzR1%z#ixHXJ}sLgpDy*|r1OzF!Pi};kQ zFJqve=TpAExJdRF(3ea;U6jM8%P~(UK7A3-Y1b@H-dsXHxi5KqX~*0pWyk&CqNc`c z{@%woF3|Xf`@5>uU$Ru||F&kouUV$Q?fn9X`z+@^?MB@PxG#5&>3-Al70o3JxIggk zulj1wkj^`DiuQ9?NA~+-j{6V&%e4QeJiMoI+;jc!&)Ike*Qcx6zB%%lVTJ3nHT!LN zE${t*J9`qSrjD*(UiO3}fT&Vl}?^3|eNgHpu>ghvN5e_WfO66W0XvNM4ghY$5Gf0FLi>M)P&{yI1u7`b>B1 zXVI!4w2$>0V{g$Q_b>^pvjsYXd?UF^&`Y!x$t4Q?Lf)l@HbZ+HGqgub5ns$c3AQt| z4yPsMS|}IceFBtkS4ZG=0GE45AX;M z?l%=q>@zSv7~{|413X?x0UvjC2p)rW%|w7x5>!}N7>g8!xt)5%d-G29o! zk-qEdklc)@hs$xke;n}>HZOL9+=%dVkftk`bDStYL}Go*@huDS(-HNe1MBCW z5GOQfKWi|<2d#tp0$6{}20W_MS4y~N3_Y23Yc&t#%Eq_md!yL;e5U?vgbDc^`7E7L zgbsREp?$kdDwvT2%0D80KodXUGk$<9h155)c8TaS{bbt1^2YZVGIj^+)-woS?EQ1W zqF~H#_y_ROe1PkOj9sGrX(_R9;>Q}X8R$!yb&MQ@LGr8U3Xqey0?KKe*GXlFN&QkI zmQOE~zsk@}1~}EJlH9wCo>eGj^h18Y%(|2QwVa{?WfiD?2AV6HkQ6dehL;NbhRye3 z?H1?zAbW@V)~TMbZb3y5`wU#BLhZ$&tal@BkF{HXN1^O}fX{jlpQ64JGjhp7maN5E zh-J&CG4#+qQwlA^AIcx{0eNtJh}|&z3yl3k9>!b}2mT!|wi(axNxWGs9_ZkMn1kD5zRA#!M=Ee4xiCKMMbmy zL-7Q+Llb^&7=CjQtvaF~GbtzbBWK0|MozW_ZcF6EVc=9Ip&Q5nx*C=)-WOo@V_;m& z_#|Eii-*=pEzl0f0`1UD{tV+s5RV`a1@(ugBzQ`|!|TJ*@92n(q}&MQaGxC&Mf^x3 z{h&U3ub#|G>RF+l4B`;U19=yBX(9)9-I*IpG4jabuzm>g(g+D2UT@Aq7|gy7Gp<73 z;Vjz3WNWDch0q_3nD9dj^$fjOG>$+y@S{->e#B7D=1F98Y_Y#)+c18Yjedi{J|v_+ zd=utNBQybD5<{G*b%D$Gv|9{-c5B*YIBZ!+*ZMJ+_}FOrcP zvU7%>Mi31B;N$%^DpP>@ri^Ib0(g3Yrw2R{;AIJ{I9raAFnMoGoP={3fjlkXOSOP6 z!1!ps^FjZmO#d@cJse-DY$=g9*9`S}W~eXa>Yb2QSiBUZN8B&2mEc(ckKEg@;ps43 z&Bh5H6DOMegvysGnfg?|umYaEIxH_eimR9|kux*C<8g)y_g@-Vd*djfU9l3%X(*4E zK>wTPFB}t;KPClgoaNtw9YJT4$RF#;bPBhZn)JFZrOJ1nOzTK0pt}G0c~kiC+|z#?u4eA}H6eBRvL8cr3L$*K|2d!%$v6yocqq>t!7Ca2!{u?PPhg*^d}43hVBoLWE*bqZc4~(H zBm2Pp7clX49^wGTn`E0htWVZ{ljT}0Pl}80iACnap%^-WNUvb`tbQTRFNXL=b(%`% zDd<^+yk`!jMgGJ1?=a+NjJ-Buf6GAn#r8tm0zIBB^b5zU6qFff!G4#G<98z35%IzA z`9jcBAgv?ybWjh^XYvt!n9pQ=5-+P6FP`)}1I2ad57DE5=$QxnO;zA_5r0;YKjtr) zO2GV4)Bvy_RBrr7IXV?cgB-icNc}k$D4(OncH2#$W8{qY?HReMC3?aSoWr4n`?1_L zBH&kz#&N7alIK84U&433&Y<20hH#c;JqOX!mCCxMc{l>mqP?x{G|4@D*@ zr%j|ia_)t$fOaGm04M)HK_jUn_;mo6ko;71ev$DLO74!I^JpdEm*C3?KAfXM(^mX{ zAdtO1A?vP$FB!`hqyiLn+Mh@p2QdOT|P#L{fC;5>>m4(LQDFo1$qi%@B9jY3n~B(_s!z{cFdQ6=o$09 zh+z!Jsl~{yFkN>1W%2O%i_RU`5c%?ezJ{f5L*@fwc3d>#_BA{sv@gcv4qDH)5V!^4 zcsyeE&ELOAp!r-VkKnQQ_0oFai>HVBG>#i+zM~^>9l&v(Ic$jelhb>G($k^D~pg{ z>X3gj{xkxww`2)@K))PfH(X*j9L8?45FW@Y1^A_MIkZ zn1OL@Ch1S7Ats0$L*RSxJ07$ji0qw_vqntxNY2^kfFB_LR^f6rTK|FgkK+--uLC%; zQw$fAbug|H;5JHtlYE7IqPOOCVKi?h{-}riHsF`l@4w?Q@&vqGDbXuU^kDP89w-}p zuK}7jQ~-a-4{>|!xWU&!Khb!O;duQ6o!4RQOJGaNNk8#9o96EwDg)Uk_D`9W;8}qV z`F=`A`j0?z4U~gCGzuaQT8{W_&KpJZMbeIfv?GV_%sdY9|BsZP7NNn zn#XGy;S0uVG#(Ru$%ww#^TRS9=)c^D^dIJzxyavvzke^McsrT+i?%aK9-vH*>1gD7 zpd*qoe4_hOfIo&$&^N#}A8D83B?DbycQOv^fG*3A5a!L4=zCI5+C}YS`XY#L8jce9 zk|{~Mcw9npm+*ty$M`hxYe3@<=9l|HITy+^#YQMcag^~Fwaf_h;k-DNFQ%AsDx3Hl zvQu7HbUqTvfY+n>oFsMhGXz&5y#M#lTl6EB%sskVc*FDC?>5X%nCI6;lJLOe#YySF z3zLTA{co{sohnQdQ{Uax@j&pIj7gZ?QgTMENdR(!WAzgNuh8?pD?)9BI{i7xw>WaiGS zDL!p+^tz(|@p|&~wx=R14d;cae`HL{>eOzA@7dPt^1TA?Ya(WzPj44_G_ih+b7^Ah zQ`>@fdR%HObF6xJt0^q;?~SYO+)s2f+zY*zaC2;zfeqeE6I7jz0^d8`TC}0pEaFWJ zcWk-nazd+Ztqh-Uy>Lu)G|F(UdiIC?_wc$qd|s(;$&mUN%dALq1z%2UGjMJBj>S{r zmcDKZ^0hQ|s`dOl@|NMqo%2BgevI~)wYQE<^9j+Ja-z7jxy+OP&BbzaMVo}dj$O@- zukvd*chnrXIEcTi?W6;LH9R^S)1Y6KH^#@jYQX+EkL+zjUB+MBJ*;EJtC97E!^9%{ z?s=jG;W0(!LE*=TXW2jcbK8HE7d?5A={^0W((=QSuZ@O`(hDyP4woc-o*(N{cqpcy z?&&nn;L@||@VvlF{+3#o9aPbDYf195voh~KcOIUpy7qR4rFQ1Th~AG}+cxI7t?#sT z#M#-yA9nuwEA#7<+P#fhTIuPseB;VW`>XYWxXY7&8(Y%dxW7g9hQmSJJ_Tw)LDP*6 z4nOx8lD;*{ZT};yfBYydE&a^Bw^zud{*8TZ&OJbHeQusxJ~c!%lK9#f|KN4F41tP@Y#y5dUK$N$Xs9<}mRUgNMh_e#sP zDGf@2^T_zZA6~UCc~Dd|!$bIT`(FF9k)1#K=Rmvv(7$63_rALCEe_W_T(0_5?C5s7 zV(;*u`rPvS(bi8o%R6O*{?p!#KKz*{%%qkrx?g&wN0 zOLcgdNJYE5b`vk@xnRjJ+lsS(jQaa%sttWy0>fY+HXBam3>os>(qdPZH)u?BYYm*UKbYVySGTbphGX+kxkUg z+V0z`_BDoud|Re^GPU08;ORfgYHd39-q+EYa{9|!lk8k_^>IW~tAw=lZTI^o`n2h7 zm-Nup!87#9>#_Pd#&F5j&yJoM>M?mt{eh|yQ?9&v#^}QSd7`2&X19o-GEM4(=^~MZ?A>yUHT7_ zxsCT9Ql#?ot&Vf>-CVXj>Fp7(_R-61>@KC&j}h00PrTuo=|4_mY&t!QZsAnY(jl)! zY_;gz@yrv;pKK@Q!MUnmZnDowt>Cns67#?;NX}}SKj`}%@oE22o($dpX#Z1fw~TF7 zlC@&wHP2^-AvY@BEDCyK=%o6Ig)Y0=kMQpr)AGjJ+OmQR57#bl*FC_y{STYUI$v<_ zY4>;RHf<`-1P(({a1!nX$6rliK_2D&J;bbm)=9oH@A1k=rxVPK>|%yH8JN_lN*# zr7psAaD?Ix{VXuPO}l|br4*;Sa~m zNA^4I?%QKSTGzPAZB9sc`(G;fror*+V^v9JciEnV@-;Tsa_yV$PS;ue``rj0x8Yc2 zdD|Yjg?pmD>>GV6!hz@Ie9vz6^U$zymw7_opKpfb$GAxRxKX~X&y0z^`D}6>^ zuiqBV-!gN=jtUQL!`Wp!xV7DM6GyF|6wo&_|7Uvs)5TR$3#{swyI1=wdL*PQ(o4J5 z{xm?fWkkm2*teNq@cz0MJg=LAw}Oeb<@(-$&-)uDII!r^le4mp#Ycob7KmW?%s26 z4k<`=dR!d#`|y*`OY9OlsW(sEQ(5fN&}!$*ovm#ac22J~?b++~xNgGrT~F3;(jB{p%mA$J3=7E7d=R6!&Gwy{&zNR{{{9@M^9!>Xe_+~HLG=Ij_8*br4TmESs zy?Kp`a%pa{q;6mVZOD!-U$Fazy5aa*r@kV)sI0U?S^Mehws@Yh74MZa*#B5v8CB3b zq?Mz_?{ab*kM#|_Emvl(y!qAfSEDC|T(m3vHO!{V$rVph_P;jg*d*LLRr`2>^xEpF zBj$a6eDmyp6JggToXZI7y}jQ1&B}9AxOqoIUN{77U(+;Kc6?Fr{sDT{_%Us*#VoXqV9QQ z$HyML)*3B1odApPp-Muy>9y8ox?mXUwqqYWahLVEIWOF^lQ`WxHeR9{8dT0gVWSCd&<;f zp6IW?y)9O_r(Pf7YPXWUXGoeK+VbZ`<+myyr?t5Hz_LwF;>SN9%74Br{M>zsa`xRz fPYajJrbp%PebRH+^q`vf&2hg^@$50EbNv4SFRhC7 literal 148256 zcmd?Sd6->Sbtk&dx${(2SF&u&Hu#ojl{}Q>Q66xWWLchFmV{?;Y4Qk3dB6ceLdhdG z2Fk`5Gp6hij6=F3Gkghj(vfK(u}oEoU`Pn=M9$a^$@i3(PSWqC>3+YperxShbxXHY zRV07pd-aF5_C9;9z2?34aLx@$kiRsXZ>1DT?ydNDIO$18LTLU$t|$4pw5F|O3}q#R zEf=5+09`I+Nb;wI!%*hJo1~iN!sRG>LU>vFCFr+C+CxwNOyJvx`d|nfjs)DPfm{octl$-ji>k|0@cQryxMb13}9}m-IlrVP)OQnw3keY+4EG@b{+B zZRIj6btJSewR#9EFp%)EyE3MH9ES1HhSudmXBj;0l;dEJhO~$Ha)vM8Pke)ikzI@*BttY-* zzv2UK#RmoCPgi^uDVuw8t?+5o*M`uG@lfy4`b8l;r+nlB<(=ynd55GF!sF=o>bh3= zuHY%$n_MU*#<^6>GgV(uztWZD!hq^KcZSrPuWs%kT=71_v@dR2gXX_ zO^e`f%J_@pw(&W!*7TdMBj2zKl{5GkdqG$bew$JLunuh}ea*elzx4ku^eN>Zx_)vd zr}`I@aiDqH{W?9Ca!h(vFR?u_`%Bc{!+4H_ z58@5{J_N)GEn_@L84pZP-?VrzQJ}uR?eGQDM`1|f0sL-2^}Z+e@7MZw4%{Dp*qi){ zj9*x9<(X;+$EzJ2jt6zvvv_U|rOW_Tlt-ehh@CfI-NE?LSGBlX`ZfAlVaWXKx&!-l z;ab7keD!{_>+C&VYH<&t$%z&kMAJp#FXmFlau|Azqw_=PBXgt%~2~A(;@DhZFEz=lA9-n9`N* zI^`DfR#vRU)GzeHY@|$JGl|Y)Nm=Aw8c;iv{H849fve9jUYDy17wszdoY|Gd@7yNp zt9@QeR|{NoYL&^EB}UbDkl!Qmr}>)CQ;EgTlFd^ki|0pwf^?+6$#HZ0X(zxBxc^KT=MO zeUwxEb;6rHC3TZ;;aeDI4d4s3ll7MpzGCsFK1BG+D}*=uODYDRJPr8MvhfE$0Qi%$ zdfnvPFg`lbk^d&}tOlI=R|wxchIHh_e$L3+8=oUzl>wvcGY6(C|7pNU(jO7N zeLe!-x4pmX9}_(L3tWtI&8cgKIPNt{e>g4DeGSJ&9tFJ3J)oa-%e)DC zH|-HFSP!PV`bPtK)d?XM1&ioCR;|h)G{} zSRQKYj&KI$1o^4lniD3!(-$B=wa@eqh3_mcarz5Jf5GUFd5Q5?wC6>MOA=3M|4E|j zjpk(R@A{TJM${nj2;;RsFD23rJGFkxuY+Gne0TpW;JM6?=4a`P^!wZx{j5`-&_y|i zCAKcjJx{n=i*UIw(?8qunw;80b867?&_U{NRn*_0(wpSX{%QlXQ@6iDp8OPQE#)^q z%ICFF+DEtL8QokDCi(qh2O%wM*?bNC1|g?C`2qINTmL-qO+7nCJAQUl{U($@OL{7! zf(P(pgfH88Ook{|@`ZlW`99t8fDXiyrmUBhpSFGhd4)cA{(W75cr%0l zxGrFvO_BlHGyc_n?hm>yf*jL+KF=E-x0@KB)V~mK%%5`R4{3Q^`OfV%ynD%4t|9H% zjV0c=-YdHwlCF@hB|koH!Jc=S-*;IYOaFrX-2U_ZHV&WnciVio_8(}M1&dE*i%*@_ z9c9}$+iY=Qv&N}#X5R4GzFMRod9mtE*Q>CHkL{v8d`#^ktad#XK1O?}m_5`?-v!Nk zkv6Y4Jr7WB=x2B-&%%hckFdQ^qC87Os;8J&*X()8@!m(gCC6*e^8znps_-}QX?cKv{FIHP@ z@3HnCws+h5G2!#6=PjPIL_Gh3jN6=q{i(lITZBtBPi#(o!RC!GjEenW8{t2&e|41o z>!a*nR{X$slIk_iR~5%QW_T+~|HQM7?^A*ga9b5_vS@fKhPOz+oqA}1_RA9H@i6It zA1dAEujgZbXNBOS-J{$-vtMz5bole+5ZYnh)&WFZO#(n;- zZuUPoo-M?4Z!!+LUO}7?x=x_|g%h!FByu_l`%6-;s2H7fwRfR|@V)n{o%dP)kbeXD zl&k}6pP5pN-%AKKyA=^K;GXnm;J^&(ufl4DCOex444% zqVlfVI;5)cJ%mfYX#V%#nco%NZ#$fG6fAxY_Rx-4f>5O|+qcS_o_&7Kr{ij$y{B`$ zqVRt{IJEsVtjm=D;v?k0X#D$rD(qU}AF({7{@0|pF-*8l`yk~%pxj>H4|*jZ>6Y~j zioYd%-Qrt)isMpmA@1kYCjc+&XW3td9pX9k+tEUD#@}zqIhCxdNnfb7@rC}EOFzVSwWpfJ-|E*8%cs-pY%lw_@`1eL9`*PmbeE z?HH!~b}%mph1*4bS$X6TH&B5^~@^S?GJe!T*?Y#JtS$ zJMFW{_{T^16R@6Kfm%4+=xB&uWSwk&Qv7eki+PQBpP_!*<3+Lsa4o=*t`kd!_er6z zH@1gV=7Hl-*K-6clO-K_%p&|eo+5w_`ci^ zP(LPv|G{d5x42dsCVc7rga`c!Uvl_gLj4qnZ%*B3^E%65`z)AG?iM)ge+|%X8a{8A zTGBrCF16R@1WUNhFIxX0_K$h2_6NSUJhm;5^m#Dc@*4Rm{a=)4ZNKsJTOIh3JW~9L z>&2-}8eil7Ox$nE`MRy2^p*PQC*0oxKjZX6f|7++QQN8>AZCiyP3;VtCG zMeZvY_d~e%TjZZLwHy>MR&an0oJ>-)4YF7Oi%D?IM2xSn<@-buu*K|J5%{R`!m z$hDXKnp4kO{Ct-1M>~A^Nx~yO5Z?0NvaOd2*U!Z7>o6Ql34R=8VjP*LX@?UJ?^3>x z;d})7Jj{M2+xPW-UW}*lx=g>CgkR|Rj=#Y6sr!djP7^G%ed?my=di&I6Q7@R;2c`w zT~g#e)g!(&L=jaF6&grX**A8PHi;(ZfvRi z&vN~y*9bi3b)&atbfg^L_IH|7Up4rz4k>)xrz_BIClS|ZA07v6pDf)tQyw1w%wGQp z^b6b{BcGD;hjkmD`<3B1r!!Hxf-TZJ(P`dZc{t=Hd7$NUg`Zel*)_M^K<9GJ`)uA? zb{OzTK440B>-XXDlsX6(Q ze0wo`NxnUuuPna|3*t-i2J*GW^it@xc!pBqS$5tca)4b$etL{=U6(eeR`=6ySJNJk zbvf8Mey4MYsZIL{XXgwjdw$b?PE+gWcz#ZUdrj(>IkR)jOR5Lm|6P;G$Mul(h&^WO zFNZ@r^=E#X z>K*ck>aS6*kSFxq+~f9Avwe@6#6Q_jP=CXIm)ZmFS-Jj2?^&D;OJA}$-Im96iqi#) zyUBo!@A^rA7k@`SM0|CNUk!_2oz~?zH{iJx=h>+z$Eb%Vd!&RRe-h8(j}_yi>U`)t z-kf?$_0^nUiE!}@`xnh$uwO=h(e)Pa**xd|jeh#v_mir|$7$~+A4SVsEBj5Koz@v! zF|O_~aXr4}KETI37RPY5o&X=J-;U?na__1oj2oWEf#;a4?s$Bkr1U85Yu36z@EqlE z&8cnbpUnxDa1+{JQs6%QYsDezGiULo$T)wB$AL}9Q63H3|15ovc3$Z}2tSg~%MJzk ziTUMqM-X4-kBFyhgm^0do%~b+-~csao&9FCa9%sl^RSP-m3X?oPdvyIRlfB};z7Qy zc>G>Y`4!ZU2OjP>o$LFXpOyPH_^baZ@s#%wPx%SrK|jSaZrku(qDXkIyqeA)SPg<=%@Y^&u5dC$Ze&s zo0d$0KiQYDdAcPZZcaVeuXZt69;W`Q!<0jjcH{R* z-;^_ca}SDKpxzVIE+&ipgezNI$=SZw{UfwDTmQTn^WzGE!@VJuYstpLxGHz9f0`2| z(+AdD)JI9>9dc(8&c}=U0gU@ek#R1rmuBJxy*w|O@OcB{6Mqr-*9b$5$L;wT#$&&n z(h=jy*$+VOvcB^B7Z&GABh+7~`%$@V;6v7(%wueyIfN5Uk2%9rG(6~kIeMeJ@Q*yl z@_EfiSE5DfM&7!Q^0xf$=xFDw1unb4;`3oDc>>n;n}!Hyd25#6>G>PhU#4G|gXOKg zwtld4bCA)N$9jLwV-Y_%PB=E&k(~>s|2OUEz~dl~93Xv`M;_NHk1P&QPt4b5uXEGF zxX3Rcztnis)&#UhvuBT)UbVIm@||$QAv5mE+{ho-y8ZI|}EB{opVE z$MpNcDD9@xxlq?S;y=yp0XJvPHWTAl18-*P&YkACW_Ikk>) zVuEEjE$UI}YQ}us_0GIo?Ly>%`3G-&>brt=^_sinFwux0eGH$kCmaI~K&TNz0WZvfGxZh8HU7lyn zQ=aG0{+mZr#x~0Pwad$H^BJpc5HTjMh85n&%}ds4TG<_e_5X0zD{$! z*G->wuwOn*d^TUi^Kjpf!@Xm{6X&^^^A7OupNSv$8Q6cw=p3S* z`h6knKWqGn@y?#-G(I8Tw%bXerT7XKM`HZ;_A%4%n2n?N1z^Y>?i=|zdPU`reipak zohnzvEA^{*KU4e3`F3&v>^vk_B;%O$F7os4w)e06{N;qa&G)^sPQstX$9OKDv-J}E z0`fpy?hwCh-(|t?Pvp{Z$Stg}yyGNaPb}X-dQw}D=f^lc;=0bWh#LZz_`X?P^UM$q zk@MFzcw+Z#YIgr5wf*_L7N;5#zk)d-2|{`g;iLew*?w)>Mw6X8R7^{iL(@ zFO+l5AJ&u@N2Y#%gm5gwIc$fg{668U zBZQCVC4T?sMByjPd(n@1g5|yM+e$f9?VPr;oBUV*g#5SX_l*~n&v4>egZmri3BLZW z{`kOf)#sJYsf|PAVg!m|wLCl&{iEtG@D z?^+M}OcV}^v3+Ka54-01P5XXq+_x)QUYnX8a~A(nyD!x~?{0MPJ%GcdrEI*wr3>)5I(oramtNhy5 zO`-T+(ot&b@AH$rw;1oImW(gXH_iWw_$TB4DeO_oKf`&O+Sg2Y*!l5d7udZBFKe7n z^V%j9bUxUh4ykeSp_f~lm65=>$v>1ga7;am?TkmEg!qh-;Q6j6c* z97G+BHMd-}l3g8HNJ)99(Ye&$Z8L2SZ4E6GKY51SCjVtFWxY52fBf zT$8d(_Cq!tQNBj`ITS6j-d~DR;@cr8W&O7drOYS7vFv*xL)QEIO_Z{(T!K>8=|IZ& zTLa|_NnYg_8R+2~_ep zYF}`=mTt89NbK>Q1}9+ukX(o&XtX9|AX?%&nI6Jf3bZszE1}=mqE`b(60A{X46wPe#+$M zIkmqJXL!;I;6I7F{6CVP!Vu@> zPI*`|h;b2AoS$W~Z@6iZcqDF^T$cSQ@JM{H^WX*117#bY4_Vv`%gzP9EsMl=Y{d6r zi-TdAy^o22xLo7eV(65(==@H<$G08rb|11)0{*S2i(TA~axvqaHf@|o)Zc%_{B&H) z)*|uBxrWn!9`N3{NId6fc#3jP^9btZXUpzXdV}7Je-!N!=T2VaI4k2gpN;Y0S25lJ z{3QCDPWP3=uX=n-Rvs7*2d>M*Lvft2Y$xddxkb{uF5(%(R4DUrNdEf3 z0dyq2pMz@>ZiB!0j?A$XC7 z@IH*5gCBzyi;Elnn)=iDFC9g{N8vwna_reJ|=bkHv9AUgo8rN1gYXCo!JJ z?S_q;8lF_ok0IWZg+5HDGQU18|KU6~C)@|o&*q2q_ds3)s9QX#SiEmoys!L_`mLCL z{X8@OG{$=i;HclH+#mA2q=)Zw;@rE9e&nZ0FBYm&di)7_Igk1%S~QN#hKuiC2;2uE zy}z#Gz6W*Vr!Mp76R2C zh&L>gdk&{B63^O*=d+RDqk!+?MdDi@@qGmGa0O}~a=dnbF6Lp_Cy?wu#P^1LzTkZK zd6Uzl5#Ieu{9M)n8aJ`tx4h2tRUAYt4>CX6e0<0j@N*05W*@n>{It`)r0!3@E#i67 z)`yQodbWtZXOEvxq#eTv9WsA&++V{|PUP|72>)Hed%iv6yklBEyL1rr%L-&M>xByd zXL4BjPT*OyNIYWcj^{ey8CoQst0SJzn0-7O~^!>{jo~5#0d^hTgi9f%P;i<^_4S!3&27LD~65o3> zd`oWzp7$*h&o4$iJ}-aR=jEl6hkS66cqOl8ob-9?k%(93`-c{ZSJqv``ysQFC*kia z&>EJ?{>3Q%vl#uz{6xGT@paYGzXLwWFBgL^n|EVAk-Q;#&-QVAo|~~RCHr{HgPt&d z2)dtg064u5FdXR)ORoXFlJ72t-fW)TX7hVU?wSX^*G76j?S7kFabP&5_xd(^A6q27 zvad;feQLh*C)XiJmt-E=40x_L-(mBR&!-`=`KW#VRr+Ork>iG?cSGJg7fJua5l=RM zO1!~eRrW;>pzj&`{qyG? z9^ZR8Aiqkt?7uqQ;-9jfUyQuRGCaxWC@+2&Vz#_&pZcSbzFzj%eGxeyu>FK~`-uBR zqMy&8pUszv>}TLF-@z_%@S)G^%%X*ZpLx#r zeBwSq_?5`-b3#uh7aw;<9vb&Y!uAOF@`2%$UfB8M0>e8)+3F-quj7=)?WU;HSR?$50?M|`PppaZSXwnGm^g@ zjpz2BdG)8JkG<4Kr+XFnJ^<%O{myW>*6_yr2zLwKZs0Y&`}zd$vs{YS(CPaEcu$1) zUN~=EZ+Hit-n%6)1e1%xy9#i``y^0kK6v-*z*ku$K4{ADg}WaF9vJPS=sGjv@%8;D zX7HO^Bwpc={D!+P2YnFcqUbv#;`y}c<5M%}LuFBT&y9G84ewhW?|VhhN8q{nVa4J^ z)#AjQ_OmVG^}PC%j#usS&_&WKd8x_suW?$_Ift|H zmp%bJN20!%`CjsB`j_XWA9FsJiu}%5B;I#Kyq>o`6Y+{)uU;hHtr2gW|CcTUJ}jmd z#lPfPb9&A5^Die9t)!PjY;2ZZoW$_w|f_1;)~ z&-4(NWBdEF`4;B|yH_3WVaNQ-p6j`du$Q!C{5N|0<(?M8cMkMOzG87aXY&K@yId;I zasOHO>p;KSW8(Yna*py&>7erp(%1v?jkJ7TeBaf9Z@*6z{T98=E3&??J4G6nm1?q*7si}f75#`u!n`{dsF0lNe90Do>Mr8 zop0&D_p$$0cCPp7KLPsfylz2!Z;5=jI`IAGdFuQ24t&S=2>-S9T@pK&b)wBb3*!6s z$akmr2v^RN?;AVtef|RUy&yZ+`_!KT{kG0r5Z^aOzK`pm?_*~2?e9azxP9RBvJid_ zDVfd>>oop0{k@fSY==LtlQ^5b2UO^1eE0W&5Rc`#e}ABFmi%npmhZ9kl&MS+NslGH?fCWn8pK%S_!G!y22l;^cFZduk^gW#a*#L?(uXYX&&xQN zZgl>%`>b;RqU}E2jQLbnOgcXy{^@<{1;)Gc9X{Co+*$MbVQqF`_c;%02Lm1K;4O=^ zgE#$*c5q?`db0Nz7ikBYm;4;$X!=f9K%XDV>Ic>Td(eN~Jp0SO($Avr0f!G~ckuhO z+Vp)o<$h3oU*18!mn}fw$j74JuWi%!gzxX_;Dh5jKQgXl zqPpH`zQOp3ZJoAz!+0-D^Hs=I=uC2!uj+eta!-Wor3)$dS?^za>=7YjG_{+Z6ShD*@dD1h~fu5`9OV6C&t&@FT+h5OL3cbla1;6+4v&0Een5-*0 zt&ie9=_2F#Ei!=4I~(c8v*P(RY)3cFGgr8u*m|tfynb5;d)hJ6p5~m_r~CJH(GU54 z&Mg0q@8Puhx2*$j?m*8?^Q8y#y3&(#{ATa^9=hD`aKDy#{HF4s>ifP9^1XMy^0oJhJ&zmt8TEZn2YT+FFFkYWTkc6r*Z197 z{h<1O5&D*U7zRIQ|NC5Di}de%9X`CfgT8;EP2cy=Q{V6JAm3k}uYB9`_V>2wyF*;* zn76;L13kYuUwS&_?HWJiUdnWRzb~uLsXyuVHRxOJeF*$GO78PpJngXW70>GysrUC| z9LDvBI_UkuHocF|Q|}+_Am_*DE9W-7Kk_r`{R187d33(?%&GSen%<<4xc-5xelWdv zx_@H(njzUT$GjfzJuFiH*?pkLX6iq@Yo?yV&YAKHKkxb7dd=^`6JFoI`Y(C?64u}D z^-Ed5((9MAeu~$xVErVoU&(r}*Duz3T>n4p`pYwa@_FGsZZB2K18g1pRGU59`=QOL zV_V2m<^BruEmBUtRx z?%BlOD;jio-h&TE6ik0_9|C`3m%3jR4xQ01c4_-ag%;)8)uQ}USx<=_>U@a#YmCne zV|-qabASBVd!Ob{@jHuWxII;#l74_6G5jNjzcju)h&?<0U3^~JWzTDP{-8e((T}Tr zh|eKBYWN>1DW7mV{SHDnf$hzyl`Zfs{>A9XAiKpHT zJP+Wx?%Ovf>%;bZn9qyy{Rp{dX758C(Er|z=k8ylgfEU7yu8OF;4}OuJW)1zHu&AX z$z*_VKU4z;5`vR|oc^_eT8D5A6Fs ze!n4f>HUw)5A69i_XGQVxyfXV^ykNn{tD<9yQiOK`O%TEEAbPy`+F4c$(uZC`nxq@ zr}5=+#_w?i^V{gxPcjY-J3YyhB5%C!)FM6IEz(m@sR#Sr(+T$z^pjoOkd|80{cs{3 zCw$4DSMfaalXuh3k$&p;^`hVWlE>@r6LdWDpXS6?+I_s=Qf2&)eqqn!Jp;}U_#M?D zqhpwK`g@1^`;8JOdH(Q(#hZy85{E+A$~ydYhtPrVteJlSpYp5scf?+JZ)vm*{v8f) z-^YE->-C$JuScx@UcawWkneDaz7=2gJ-S9e$J6i8NgQI{Fqzv&z6$&7xy(ai@BX~U zp7-#1SEA#Fu3Ss?>;94(;PZy<-#66HniIKQgwN&;!Y4Jr$N4g|>-POkoo5~fJ+#wt zx3Bz8jf2pBVnqe(Sg2`q}R+<;314?rFd9w9()9LO;Jh{lbXa z(L3EQyFVv%;X7Qr4c~6!%hyS7Uhs)uYy3gK9_wfNOXT^3cusi^nLM9xxm9`YG?@$& z4slrRv|c3sI^*YK?4RWY#eVkFb7!Ehv0v!=JB9Q3@`#Vq&~f5@#J(-|{c)7yH=B&E zklUj0exI=K5$pHJu=cyl{k-@H=_~8}8}H48c2qq?`T>5Q z!SCZZ{ypP{j3aTv=4<%xAo}m=GCgLS6xO`%s*&-hJo61Me z5k}Ed>4ZIv@_9PS=Viu`XpiZz!4=2(-Yofh+WAU02wmC!1M&nL2XsC-ZJb>;&MrRp z?{5`pw{LU0E6W96m}T#&$wA|j*bV9UMYpfyWYXdB41P#DByLJvaDInKM{dZTi=9b4 zAU?mB--r4B74YTx_3cid<<}pu`lAJpf6F+2vY+_f9uvv4c1HZ6ewFkKpECHqyKNkl zqQ4t`oZ8*mZ`|wreNwo~;T)$t!f_fS0ztmqn*QGAi0NrG`km=3Z+2WBH+YG! za$m{fn8)$*m_3)g<^%pbTx@t_K9|1)bY*$i``kYC{d@5r=4bxCN#FJX$`_^ZeSYk} z9e7|*#R2l?d7*yi1s%I&-4{aitNd}&KiplU9v*Xh&^$uyg!^ruvG%^L_B#V8W!wSp zUuItNOoe#b;uh#JKk~dve@Fdc#}E7OC%qn*bw6M1pX0~%1%Bs5=>28WYn(reJ`e0B zp6=adpOWv70)qDWi8|@CJQ2+=3%=%LcMsuU|7!Q$3E7%W zcE7z!zr5V+yKmLd41c&R+NI{n*?Yt_8$Z!}1=DOn`L%oLsK15u)e??|;qDm(%ZLc{|vvp*T>=aX*>C4cK#9VU;P#Bduboomr%bf zSRPdH=lksWK0eRM`UUe@+2ogdFsOak%pN^|iQnO*--ep!<1b17@JOVa^`~owuj@G8y0*ll#|HaaCvie9;{`?STahaFGtCghPH!gKD|e8k)9npYx^945Z*VdATq zKkDz9$bC2aK3T!+0`rr~NACs1c@g>D81WRwjIN5(9}3LdK5234F`KVK@nZ6mA0b?2 z#PF8DkN7R;%||`HRb-wG;o}X{|9yL@|NA(PzTf-dzPt4MSc(1OJY9M>$HTloC~=^B zoa2>c{+IiVx~|TCrvdMWD4+2?CCM*jUNQZ8yvg}|(jwk+i*TB63I_VyGqe-HkFsAn zYW>O>Kl(YI@3ZIo?77+*=GkGxKg{-2@>2ZaeKV!2VB=%HR=RbcF@(>WJ$%6B-u_+6 zcyEOHMMz$fbqDq#dS;H7$apbcfzI80Ufj*`>YO(}WPDCIpPm<&ZC);#oz%=uDje72 z+tW^G(Z26oGrqfw?>JwGKV|XE*99M$2CsYoj{4q5I*TGtu`l1>GyCf{`zwn5LC>WD zgBu`RN!LpueqSlKj_b4PWkK}d`CUlczC+(_@G0R#{`-`#`&0K2@psvL)J1=Jra}94 zzX|!*4h+ZlSK+1#*PQV66Y#4YXlB)_5f4C!bb`1!N0Pxgboy_e=o;LoUQ}ox8G9% zU#o~0>vGz~2;obNmm#@?&&&SY4?gAgpW8Ud|pq#G8dNqF5aJ#`*qx}45@vuJl8Ms0@!Na z%f#R^Zj$C|z{myT0cpmsRW%zpk1^9-tIzB9{ zeEWCvlli>obXo@Q>yXv*`;i;b&UIKQ*zegDTci)~9bb;8Nb|^V!T3!#p?*yUxBB;i z2YHopw| zw?`GVb;jJ28toIdfr{4=qUIgCky^mp!dry7{_*PBB*FZn~)eJA< zjN+~Ri1MtNJpFt8$=A^T^ayYF5JPzB?|~P86-&dCc?^?9m`|b_LuO@h| zmH`oG@b_K${@~de-tIQLsr_CD{r)cSpJi~{QQG@uFUfb4@Rv%S_!fJPVnO=7z~Hu_ zw7B}xI^aDs!{>Cm9d`WvbkXk_5zh7@np3aper|K()m^&J_;&Xr=u7RbzANp4zFuqW zroL*f51T(!ALmBA;U)RKiGi$MZ}XFmzi;^}#=9`W-HN!m0=4kc4Zyc1wuc4bllPd- zPF|AVWxOb>F9^@N4DKcSZgO`8^j@B|F9@G_w$pVz=(;$oF9^^24DKcQU6re{`hxIW z5#jEvxZFPhe3!)bg~@$`!QF<^=I@u}_fp=vNPL?!xR>O2Tc+g;^X0Q9_9giV{oT$t zn^P~D{j;3*`^LJzgMD4g^RP}}J}2wg5UxcY1N&@FeOdSCn-gE|SO3|>cDSqV2Layl zxq3h0bA;!9A*>+RL;v!A$VWI%4)hA!(m%^zHqt+vQ@utv%h3MbLXsNZT#J4i@ur41 z2fWkrq@@=@u9D9zCV!KBhW31A2l}#oc**x9A2zxAIY6T8m~ey3b+yTrWw_quI=}a0 zJOBO|5>Lui_`fpJ-QR)k>pUJNbJP8{4s_qN0J;$sniJ5|pinh0{Yjoix!XDJEW3#3 zbfkZtcqN|{yps2IbAC+zQReSv{9X3kjP(uXIf;h?Hn*I@aZT8n zRbhsTFY))cRPT~MTHcvHN_s#CMuRc^sM;hS^?ve_fO+^LI>zExFck} zfxq03`5mDAxZpv(gFbcNKg+A{N^IUaRP00GY`vEso*Pd|&nZI8e-9CO$+s71UrJAw zPuuS;&H8=9ct5uN+#(<2w#soW>~{t9)c$*qgKSs1P>(i06nuW*e&Ve8!S@M0j>mHf z_K)wYuCjT7Wys!FrJUk?(~b|0rux)-Bx@l*#udA7J4+5{xV{b|2Ya7+mK@sNvxGf& zmILf4i;F&AdViP44Eo_2M*q3y50i=6d(P}#&>5-h9L475w+$fLHA|IfU^D{EB>% z#P==a9L@7{{Eji@F-uP8upNLZ|LmNr&0YpN*o(cVIxl;fmz?x_FJMIP@q}=-)3?g} z&iOAG|DEC={F=Xq$9&d%rfu!}`p4X!i=5Q{Nhr{H{5{GF*yr zS14WIlJT*RJj8ff8{#}vko{;OW4+Ngz&MKMgXq5}AIH(>LC^hV9YDG-F}t1m$^ge@ z88$?^zrt~AX4jE!=9gEIKCJJIZd>17;dIxW?p>s(vWs+AY@Mz9=|YaY-wVDgHjbYI zZ$T+>ZxLSs+j-eKLz?_eL?uC7stuxi(^s-o5!#} z@;Q}HQXMn-jT^mVq&HvH=ae5PHGJ`Yan0weN^5!8faf}2H{WBW4jcIEq&cpqxHuCF-X+dW|XKBD4@_x(4=dHN}V&+a+Tpab*5GsEPUC6-CDuOHEahyUzd*3&g!G4*E0D|C4R`dNb%wPXw2-<{H-j0AA;qR%_;hQ9A~x1r;5iX zgRdKWh4Cp=9@DrowX=tQfc;j)Mfkz(XkRD)p}cD+2wjM;7N?39r{cX##@V$lU-+5E z*LsV5)l#9iIf3!DJ>AXrs_kD@MbEN+_4R`77Zwdq#qj7ox)9!C{PjI!_X5p-FDTl4 zVCPeVb>@GQmE9&k8&`k73&VBExNGGs0Uz_bcpo9xCO2Cj#e6sQ-*0Z~XL6C>gVuSXZuB*b z-(r27`ZM`A+zwQ4&8gS-Q~$5;mNH!A^Hcr%LE(T$_110p>J8x+{C(QSbG-JvqT_|W z*Y&hnd|W&%?zwU&j00n9nud)eHJO*n26H1(RpR4>fhn?dkx`^m~Wj$ zJbs=CI+UNBo)hA}h>Z_?+Fr49zKYHx;Nw?GzuN`yF#hL+e(?8?#E*50>c^j3{ucax zRfp$sKPYGS*gEu+b3?T&rvv>mI%L0|aW5SEl;(+Y9=Ss3E7<7$?p4>2Kc-v^I-_rSIyr`=~r#?SS z|9zhLv+tHXFLZ~SO)gV=#@UZ$xQXouyL*(siEk^Oa7&D%-`4iYy2-O)@~kp$bod=< z%oD?uf5YUU?+4<(dX4&-dVSZ7cyj~Wk+;hE2>j0DO>H;jShIOT&x=GH&(ofYcTw(D zvzMCD$M=5_UjLrY^F~i~!0f^OuZMJ2jn1SvF7lf7{TsiJmC!FYa9%;bmq{oaw>2*=1*F}?;Bf3MIO+@JnbS8yU5nf?Y}D>(lZr5uIVygcfU?; ze2)*ka=sw@@iq???3@Vvg6_`#nrsAq=|Q-&yUkB}{}1q87Td#u@Ldw&`Zn(7{iKa8 zmCIF$`{6ah7w%u0zTt0-LtL*8G}y0ihuw4BF{JQUIDBCX;fq72_aVab_oZQ17Wdtc zVOPY@_!9~?A9jSlhx(52!wx?#`d;ULg*d4C=RAdd7o!Jwb-a8*`gi1WZNcQxzHTlK zIDCuvZ67gj@+#Q#TAt(AY@Rv(Q_!2NI~KEVx(;xR|9xvmsJFG$o4>yn(m@%o<9?~h zJzQ>n)wkL7zj;9Q7xzcmxIP{g#Fh@$ARsqBYb?%*WSkn`EM=?kDbea zjzbK-6TKbuRxrKUd+woV_o92{`|{a7SlmA=nICujp7mPLaenl>py#O

F35z5fWj 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 Dc5dW8 diff --git a/src/deps/contracts/Ecrecover.yul.zbin b/src/deps/contracts/Ecrecover.yul.zbin index 6ea478387af40eea1b659a5bfcb44d40e0f18ce2..d67479744511952ae56e3ee5013ed71d6d36c2b1 100644 GIT binary patch delta 39 xcmV+?0NDSa1fT?<0w78nep99Za;wRYD#X2k&&MKH?clQxX`;jYP08gxWRp->6CMBn delta 39 vcmZ3$vVdg)lY+U9*nB?m5Kpcw%UvnA)17-h7VP@o_I5>&ru3}TNY7{h6^jqL diff --git a/src/deps/contracts/EventWriter.yul.zbin b/src/deps/contracts/EventWriter.yul.zbin index cd15a102c49d9743710bf6bc8450749807501932..8dc1cc699998deec33f669602822085315ee3275 100644 GIT binary patch delta 344 zcmZ3$_JDPQwV?>30ONE91_nkJ1;zMQVuJ9U85j~ld{!m{h8`g8JTb@I zM3I4EAw&^GP!p<%8LCJR%4dOT0vbBGpHU`|nTdhH5M(+tgw_UH3^E8L;0>hApc)yG zG=k(=m>8JT!RnY;tU)wXzscktMtM#UPZB6-2ITq6Ix;Xcg7hc=&9DU0EKCYuy(}yS z%;}Suv>7cX>oCbP`b_p=l2;XFWMBYl09ww-0(3Ql7f`(s65j_XZZLTwllJ5VOq`SV pFsUe{Ti)9FzD7C4*FO4e$%Q&q1L<(lsTcc__M*cQ3Y_GQM1%r`QgT;_J4yR3n3@3aF70(1N3&fW{tTZ<~Zq!3mR? zTa8L;ZonO){yNC)^)^vQb%k@f0-<}VQ%*Pmi8Go445zfBT1du}v>`R@CY;NN9(-M2 zXExNe;r(LJQuJ{?3`SVcau~spGO4NzaW2I*PyMW-we}+k9geq-WuF@?tF+uzjeE(eq||8ynhaJP~F{A)B1C< zUW2IR?ghVy-V<&_@GStZ51@0%6dH45Ph=BJ(FvqUL|WiJ^5#Hz5PZ9Vj^`2j-}=Eq vrvG<~BTd)4(0@LC_P?jI?)l@<<^0T7?|%8^>9z6PzN@~!buX?z&W?WpQ_4D4 diff --git a/src/deps/contracts/Keccak256.yul.zbin b/src/deps/contracts/Keccak256.yul.zbin index 143dd2afd4d5ef9ba436a1f3c091f2643e6811f1..4ec92c423c77ba4e02dedd31261eba4d40183f2c 100644 GIT binary patch delta 220 zcmaFBzJOzcHY20#WF1C#R|ZC922TbChIS?eh8`eo!oYCQ7D!7lF)%m+X$A&m7E>T; z$-uw}5*I@gZ)XxyKQCwyCv$9nH_i QhWA=Xa_Ck!o^~k#03?q{-v9sr delta 186 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 literal 11488 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 a>J_K|;}d_f<-}v({hL3(_%|MY=>Gvg(4F!C literal 35552 zcmeHQ3y@q@nLelQxsQI$v=G23k4a&WDCh)&B-4r0Lng_DBr+inq+GGbBm{*mCq*)l zC2n;Vk^t%&76NfajEb@WSwRI2s5@9D_&^Mng-Zm2E4o?`l!fv|Ap4*H`%mBLJ99Gu zES6+@s^I3{^ZMWCf1G<;<(2)*(0@A9rZ>{nSE_HCeW;ZhYp+V1lkH`RHdEsxDuf*1%1Nt=pRb|P*thFQsIF9h`mPZ z&>l&9q$+5?RDagC2g~d{ro#svECc9XX`k1nbyit?O(#8PI?6gK^apJ}m0!-|D+6~l z;M29)-H(Wm%0zb%XXr1gso6Atd20{|h^x43CR7rdSjO(OvRzAv+j1R(^rPCRBPH-j7x+%1?d zCv?g=I$aGqg*VuFOoxLvrYGn`^xR_M68TY)@IAEhM-Nrr>XT9%zVWxf$8-|CnSOak z_oxQ?rOCrnvd$0wV>Ck#a%qCrdlsT(RH|11w?+E#bJ zIyo=P!@IBJc2mZcX1L1ok@)l$^pEwuI)$Ha5WTq$?J=J%oHS1K#;mmSn2xX_@+)!^ ziakiv8#9Z>5%S7F9#(ck9-_BEzOxm`cXU+}KE|he7(QYLLcu4dEAR;~-9J9zYRI>_ z0{BFNPfQoPF7fSB$hWVmgg1dd!}h1^Qik*AZa*?&$4$kwQL`p}nqYe`+ycHC#?#Cg zXve+S^_iPpdk^q7LQey`J`3%p$JsysT&y37U60`f-q96;_oh+!$at8Un*<(z8T$LO zKJ2@hwS?PE53Wji16V&i9{q>WeHGRZmY_Y5`2w*k!2sy)FR=5N*&g;s&h0Zclp6G6=2mwQxt3#ENrL%TMz-{F}y?GS-jML5;7Os5Z18*@J-b z)j^4$ztgQlaP#^>)s8chwctUH3h`UF)AF>AIa62l{kXSlD;@RoJns=Wy6F)=Hx#Ebv2Hom8l=~TFY>&V1Vz556rJVu_r_izCQ`{AU<$A ztz$4Q)Kv=yv4QPOxvOgRz;yQUmHf7)=ogKHeI-7)b?5NmI-XdvD4)Cm-3G?KdYY{&;RI;Ar$q%v{2Q)-mP$ zM(9UY+i~O{<x~Fi0;Zec$m?ydb>k&VRAEunGiJnIl8gJ%BRnRdjesK&B z^Wi--j`7dQxJdlRY!>k4Bdn7b`Y$_2_Sx}*Z!gwQ*=Nt%)XVhh!Ik{`4`IGQ_M6xq zVZRA3*#CYLd2$rGW#is*a|9FA79q`h=H^X2QJ+I$$Irk@f?&2ekuSkBFA0#;cfOX=1&8|c3vfst>2>f$f zfq!&4#>M+_g~vtz2E4p$fq%ALA1o}N}9}Z3gokEV2NZuswi1`FM zZK#2-8~W{)495kaN8seoxA#_FD`UxLxBobX=-U$ryuN)-$Ws7lpZ7Aoi5YS~pYLf= zxj&ol>3_JV%bTq}c*lu-?({2=lz+%g+EkV>~Q9&0Hhn!d{H?jU7k* z-M;Ks`F@$iPocDh%@Y9mfd$MgCev{?g>=kFZx|TuB}s{Z9aW1rJ>iIjYnDkNc;8@EZ%i>2P=+ zDE%Fso@Tg|Y88Dbh&~iVeq*?xM}-G@y*V%Kgx$=(1A5f*1o)M`3Gk9Bv~<$&8_a?| z+~1UOCHa1d+g0nyN&Fyxt$%_1wd_HAjF;t;QY|k*{<5C|{>6=u2hkT@6u+amXJkE+ zah)^{aw6li#TxUsDDp>g!1C9+Q|51x_D29e&6C)NAxAAcF>i95^GmWt8Q(H!`8RKm zIVC8P#8v`BhHr7Udf)eL8a@H_qS93S2H9ksUGLK;wEL z7x@G}PA>f1;8<&voS)D&26o1mxFuTxU7Y_%_R`Wr^3SGQ;`#FRB2U4M3~#v}-_Pdz z4kLEah+Q^e8`G8YIAg6-Nr4ObHFQaf-)BIcvJ$_?`VKmq*`TwYkM;Z#2{yD z#m14|2~w}fQ(j|&?dN?V^G>>GuU&tVt~r8-pPQTUoZ{{hJ}lezslHI;NBEyXd*Zxhh1z zWV@M1 l8L-X1G%0oOzVrJ*{dU?INUrUH-t1qQR0tbySr_q0luwLmGR9AWj%SG1m z!+fp|Pdl$uc7Cz;D&XG{On2qYhaO7)NPDu+k~~=W$}W!9evQYue3Q@dyy=`c2s;ua z%@J~A2&V{{Ru{_vzYF+CA*#}<4Ra^yg?KbJ&5tBPGP#f z3wjW(1w6@k$D1sA&}ZRE&l?2qLchx;51i$A&vZZ44*b1#=sm?viT$RH;4qy87txah zCmHW~gO)z3h4UGv+;<1&)9V?Y@;8OP;Wt39b?1Rz`9z$M{}$FQ2)zs9AK%rB`SL;^ z5-GbL#r>d9ejDf$2){)B#or=$?-u%8!|-&FeY?@ZOLEHdxV!_!&0Fkqr$2$ zwIAc+_BO^lKfv>rmkFFc<4tj`#4!|S@H+K6;2ME<8SotjuglkN=Xv)R$8f!H#hus> zHyoFCO{j3}kT{nPF@?3?EPZ-x3ir$kRGM{x=W4K5@_)7d_`HtyP zp?N7DtioPI&YzcYT8mr;7%%aKq48wr$od`&c@Bl{PXCE+yiOzhBk2DHm^Tplj^zP# zqj>crcAYf+r+g60f#k6}2!F=Aab1#Yj(bz(yAye2Q+DGi5e>R+2fxEX@HsM^6>b&JsS&or93>#w-Ng$^|P|echUaGbn%aX z{7@cww%zw!UPk*Bv`c(S_Ql?lp9#757eemC^+`Rl`bzHWIgoqA+hm_5o{seg{PGur zUoyY)1rO8}=^RBx`~(?~ychw(^&Nt^D~YFFpT?#57sjA}Q3L;?V$TDYhZQ}E?L?L7 z8cIDedne|J?YPC8?61^uNAtVsoC@2eQ20A+ot0wOguk(#$vSc#W;FiR>zjT99qWA7 z;wO^h%kt`}>R5|MFrDco{;Km|y)(t1R@2WHeo0|I#XQ2c0Ifp^TqT5{#3tY`gy3^cKGeE>y2_k^K*P-Iw^nA#p^+jl;OCa z;Fx6LFr7yHXg7~%YJl%l!0As);$`8WeNpry@AO0VMPKM`!a<&AmE^0^{JOm8H|jMb zp)1js_iJZ&4CK=CP2`o=jpLe> zaW1a$q+aRyb{(Y_J`6byC67ydWV;hymXy1;DTH_T*Lfc>WnAgW`*?ljOCC3tzbf@- zJIr#N|2pQ2>22vk?e7yiz0%H;evXCg`4;Xk^6LvvknD3;{7JccfT8SCVZLi zvAuwNrOBn+Z;UVFMIYx&9m4sgdD(B$_>O&K$bRDZF8f3(-({ajQw@qc0 z>~B8Di>B*G?*4tCQw*1tUzMSA6gH2doWD`uA1?!a!cq3UdoQm#~`xw{mhW_}2Z3x*zV>NN)%q$vb!xfp?rIfP6TABss2b7sMZdU7$RV*b%Zr zus>SX5jph5?}_Ova##}kSi(3LUpYIc-F|Q?{FWc}!fz=^yzlpl-?JTfB;x(@U3Z{A z$*Hv$^|&)g_>oan)(FMGPM^6`@J9-Z6hW(4g|I2gyO>yDJl6YBoP50gG zFPbv0w7!%7G=EIa@8$2td`W$F@-KD$4oCkao!t4oJs@K+IQGK_>vEpJ_&LdB>dvx_(Bd}wqHE+0R7@6talwjJK&4;%C1ZFNS@nE@rT{` zx^#Hltk})K*-f#}&d%n=|H{Mv(mB)xUTz(L{6FkB3tfI${I^j2w={aM z6#orZq67Q2p&b1ob$3snA>SPSSf=oSpRFo)@_}Nb#Wa0<4c+ z&jOE^7spdxT>KV26Z07HLt=fcLT)849C^QBxjrC2WLVux_|byA#y-t;D)K8lz@t^0 z#n00vu0Lt7Wa~}QdWnZKxX+y}_tej}lbvh9_+nn>DcGwa81J)nD@6wmtR4kg@};g{ zk?SwYchB8C0iN4&OmCbowDWNtOnH3nu6|!1Kk;br#Yi5O{2`8WhWpd7OY@l@ri?4W zc^cO9gfFq)gD<3y9OwA+p(l-g5fSb*@ejKg{|-}vU5fb&yHwZfn=HJhdw}(o;!@EI zBl=C}{@MP-`p9s1(tNak(0a*p(`JzA<*}bg^2Yl=;U)Qe)a%F&Oaoma$!D}?8QyYM z?0n=`cphKq5aS6tkUd~Jq{%1Q0m$bH(1G$?ynl>pF9d$_^Q`=I>MHh0-}-rkG$mZA zE=cfe+fG;U`}8{Wr*(K=b^dQC`T9^-xIg8qn4TnW_MX!El__=}`o|o8E5GqdA9@bzdma> zE%zSK<`*Dm&(`2qx61j&s3vmo=aJwic?|Kq?#DU)EN6O`S2%li1JhGw{~q%NOczrw zZWO+|x{%0Ij2Gl7yIJ<16%Fgv_n+_vk*Br1ZfaiM`JHtBpZQI1`O!6wb7zC~h3Vtk-a(Z``r*&W~~#iwldV*3lb=jz5!iypTm>&CytxY%9_J=R-3oAUPu z0Z+(zTdJ3dzQ^!L|FnA9^#Wg7+};N~qWb|yJTKsPal1as&O>=c;a}r^N&H(5xm|8=s_i6>=o?$575~#c&Ef0;iAtY?Qh`#h&Vjr9Ja!1$N--ND*TD`pMJkJOKNvY3C67~a`}X%KZifHp#uBYtd~QsoAq+o z{n)>SU3Y%_p;a%p@wXm&UQ~IA^AqPrU7SwmEX99u@j2=RYEsbXJVX}wm)^fe>N$p~@wRTe%1Kg~a0EBqUO)ycEL~93}X0d`9P?Y<`3OH0LvhonxYd+HE|pIMa@& za~wOtr(h?>nPP?8N3*}l{D?c>SFZzTz-Pb@6}94CKX36Y-2B?av(59^&GXo8Q>;ET z&tng=Uc0z$T}|R`&KJaW@#cAKrjv2|NAo_VJ>M4lvkU7g2H#+M_!Z^-fH|5bcx<}4T#y^^@H9+xf|DK0e&2DrZ| z4^$`ho^ql- z?D-g1kIOw7?+@~P3x0Gk<+JFVhRb6Ky~JL1(t9XOFP9HD4`3iV_CjPrZe?$LM8 zdND3}F0p}PFU_0L? ze5t=@G5t`$Bb|Svy=RdoUv+&H`7)9xTlN6x6-r&1@~)h(Ond)#U9a6&O#I#G3m`|S zet>)bcOB$3-hadokoSKN?7LS(@|D7O`QB9}@%`(r{eS;jW&B>eXW=uxL-29$7fKy` zn4dWy^|%y#=o}B9AM=rC?jU}kE-iM`<;(Hj-^-|jH{zRWN9cSX^!kXA?LwM-)a`=E zhfc9SzNzs1W|8oHA=YU;pFwz4VCN!dx565abLS6CILP+{{GN~L9{K%H;`hjYPU8FC zrcCc)kUgfn`CQ1asn{!>q*=qepp<$lykgk z=OX;~%DD(R#~YS}j$()1_s565zbA4y+WTxi$3s;2dWCkjD0a3e`|x~z-;DHM=tc1I zK77FEA6=a{jb5(Kn{xiq)p<4Jm41$7*n1KU^ipd6MDf24ay;C7LauHfw1XdM-#b{+ z4!;OjI^Qn#e6;uH1If2E?w_<%$oIVu?EQJ_54l#x*-@M$knaPyd=#CtZN{xr>^|(L z#BX&!IT5$!v#>|a__Z0o4)I&+=lq@hG)t|V3_Axw-}AEhIm#y_zvm+Q+KgZKpC75~ zrR{gQdnX8g+jb{y|F<5#vnqxq5Uz05;2e$9}cOtAa@#4C|!Xx3j5k5PVt^W3fu zS@)M4<5(~6-YaOkxl$`PS5_B~}YmClKFm3Ec>h5k)Pb@}&($p1CnRM+hq@_SS6cb;<8e**Qt zRQl&=J{uQj<@rT;ZYEQez{WW}?)yMG!})S8{goEI)^aXF%kLMc(g?qAMEOsG=V}X| z>B7D?@o>Z|6UX7Y|M%gkE-ve3RE7O}TA$B3(99>>dB+`wc@}obRle7m8IODr)ya8% z-G}vupMQm)YR*PpP3qzVx2-RcTz(MGhn**xk9?e2DCb5FgWbzaM1P`}g_r17<9RY? z=q+|Wd9E_v;7Isrg z0>z#~r{Cks^xLbh@--9i?{m9;be=?Gyl&SUY5tpJJ*AK5=gNJLIrj6JPW1gmnU{ZO zyF_Oi`|S4;&ZOV}x}WBud#oSy^1Sy6Tz9$W?svHTM!2LO!G$`W_W5_XOLscBDBfc_ zQazN|?z1q^w`aIJ|9_LNRID8j@de7&3`h9cxu4Dth>wMLeZ?Js+H0VX+b}M&jfBWdqwM`%EpZ(t7_FYz(dD=AZ#$8{r&-c@QhqRF? zi2v*}`FqJ;sU@x5wi)X3;*kC?$QV1JNB@3-uB0;jXXha`08Dn=kbm2?++8+U(j!uP(to7#`1_EU$nKQN^I2|F)M=J2!g4yBbo|Cc9U_uM0k+fJPE z)hTbk@ac1BerolNv%me3FJ1nYxtqST`kBvv>e!!NSU6$p?w{W?Z^zHBJN!%A&R@Ue z?lU%?yXF^P`*7F#H=JiD6xf*tmcP5-bkR8d&KK7`v-{KhY)GGd-}=p8Z@=ZJo340n z+Yi6Hcggtq0-u{B+1^{TgZK0I#*H5s_~Pk{cC3Ek;jbJRYT+OHVW{;MJF`RdN|Pu=?PiAVRobjj1(uiWv+o*#5aA6@y=Cm(p|`?o%$ zzIE0Q27a@7+M7;1`NFlwpL5JV-rM@gYhTEI@yug--+bHcM{IofQT>-cpLN_N-#+f~ zU7HX4#DiC=xBjGO>v^{xzUvFSwkI0jKryTj^|9I$`r;fVz-urGnW##RcnkW9W z=xv9cd-=83Z$8co7e994Q4c*gw|h*-Bfpz)(zCM{J^9Z|Zk;>?zo}>a>Wp8_d-1#f z_=(Jie|_(mnIAp(iI!)Ez;Ac^b_B^Rt`AZ2G6JuZ`b$^X5H|418wp Rm3zN(%bH70S#{67{|l(kNP_?X diff --git a/src/deps/contracts/SHA256.yul.zbin b/src/deps/contracts/SHA256.yul.zbin index 81eea3d792476ddc02b456e36d3ca24c8b33b94a..e03db097cbd9d87237970371b99bb5ae1516e373 100644 GIT binary patch delta 40 ycmV+@0N4NE1>gm+zycr(Lv`Lt^gHr(?zamQzh*I72yan_b{ieQEv^5OQ$5#ezY*U6 delta 40 ycmV+@0N4NE1>gm+zycst9BB|w%H+UBqbfSM4>{M^Q-6rdW9wC{*x|#=x*9ihy%WR$ diff --git a/src/deps/contracts/fee_estimate.yul.zbin b/src/deps/contracts/fee_estimate.yul.zbin index 837793d38800335061d05fb9ee031fa1e9c96315..fe7224baeaed3db7e95ac1f9136254a88dee82ce 100644 GIT binary patch literal 68832 zcmeHw34B~vdGEP%XXai>wk6q?cUf21A*2N&JF&rmkdc>wi4)7QldxyT^4L~vOR^+8 zb`lbqC3y)Uq_i|4grYPFgsp_7g@iz4wlpjcC~cuFEzU+CE#)Q9vX!Fu|CV!S?$s<> zMhbnu&M)!R*}ikmx1aBvd#*_s`X$Uted6IdW+@(7w1AQscqVxk zQp22YyjQw`xzm`Yv@s{ppLc=V#OY>9o90b{c@+8Ek~B_Zns;R!f@YE%%>`(O5uH32 zeW42ar+K7#943*VavBED_Y7llG#@9?VQwQ%;yx(dpVU*KiXr zvx(>VI-O^l=85@wa|K_<6*>WNOfQqtCm3TX@UfWjLESmbr&+*b{xwa`dnwmpJT(W3 zr{$=60Qr9|Y3~g(KIAZd%rd0G6HF(}!>rWwYMo!JrZ;PPg{JpNdct(QT<6=sbnS1& zbU{}D(|MS1|rgll&ZX@B@%O(QiUoQu| zmRU8Y?M?I5@D`X&W9pu5*yq8;>tcOm8rIrsM9331_EVmF^<`qM5kc`RS3I7$==|9;UQ8%5a=i7t5zfZ((@{ zt~<}A;*{u%Pbu6~G9&PuPKM_uSWb;NAfWKw@^J!k*LCrrD%kPzZ%*f$-eGmw=^ZGfzpjQvi6L^it2j4yQ$owYoQ@uA} z0<*=Wo_eGyaGnEZBt~sT`#~q*{_9yUxR9_WBX$Y6LoG9ZZt`q;y2}5PdwN5gI->I9 zZesZvayxkZ1^GFf`7G>b(<<{p?st{wH7kGGz92u*b}951ksqmVQs^%#KiW?0T|Hzd z$NUUFBs*&oD~ZqNKqgLd{xkC!4*~4Q&B*sOKjWSfxo})+=N(J1eQEelwZqwjmM0Qg z&USlF8<#gQVhPW~TyF_=EO^)Y#~}}}^K-!OCukfabqdd|V|d45m#O?kT0Y8fNTL-^ zQu@6rk>Pqrwce?;!bznW&Q*ynF5krEU@q|o9OK*Z`!fEtjOR@P#}PQ>S*ZVzW_U>c zoamMq_OyNaDC2Vh2+c1c~i5`J%?_W>-H(aOqHR)cS|A>y?cs&1xw?RD7E@3>v3yqZg zFM7!QjrR+k&pw9te=Yxcg4Z^m=i~HP{9qn5&jNmKi{i)Y5qRm_1V7{#puUq<{6NnG z-wh#t(uyC9`$no~=a=3u_(@-{`00=02jzqx{GY@8Lj1Jb_WlhPKkbA!!Uv5b(D9qJ z%-7;4VE%;nQkt)jE%W771_4O=grtS{v*LnX$>E(-@5gv)( zOx^8FPfM>X>!lVd5Pq(c`J1|5>3kT^bG~lzQzvrOR?qWszG(5&aI5h19E+c?Me#G| zZ354KNbm#xV*L1uAAdNCA7AlU5{}Pf8HW`0Qyeni~O6B4?pSz%ZJ~{bn36;eCJe?VYSce9eG_FC2&9 z&+FFm;nL-Euh;UCGUZoEc_M{AXq<;#9v7^tjQh6GV z>@pnV?Bel#SKvSE^MfTTIj;5s-cQi{u^{1bTf9#bug+*0y#I;d1^uPDzdlX3ft!iW z>c0?PJ29@g@09U-H#!0H=S?mOc)Yx>Z+xNUM;U+O^ccK0p%cMr2fUf)rz-Pafsr?w zR)Z)2e2Z3&-^{}kUWb{BCw|Uc;q%F@1Ic33y3u>rT3ruXKRB_LNeLcPJTI&Rf2W?_o%t?VcOVYO>;6=p@pvcJv4W3R2_EgZ^DVO8NVQNs zayyFKA>-AN`YFI?yvORL>^j-JhU$Cog#wiRy10GPWO!Y=+H~-9GuG+kZ<>Th@=A2% z{vmGQ14Q$XL43PM>%B$SwZu=*J>FJO5%z@EvBT7ljTik%WWCxu<@m`8uqg4%LW~Q~ zIlobTO>rX1hXG2i=W%je58}t`4dQRX-{hX&UEpVqw?z5byG!`d%V8XXPhKyF{WPN8 z0~k&t>hZW@?RS@HS5nli6s;Ibzf%f8^(e1)L*NdAF%PYXbjoXdaBm`Aw*&8ktX;4~KZ>xWDnJ9rb7CCrO_|zj9jSmh7;` zOH5;uqA)hjP5SLDq>b~K@SUXHHq3(H1(0Kw$JBh5r&hovK1IA1HHiKU*SjYXC_W?} zbFV9Sx;J4)2v19ZN9OO)&aP5E-#?oD+R|@i;)^=gs<%d#V({1Uj%sahE zS$`m<{!*IPFO8Q%JV;-YzS#=?zBkQ!6Hk?!`n1rgKA8c1o_gfy z(arRdR>axP8(%zU)-zIuP+JVv*&Zim9?grcbYSA~^F7@et(HqhFCMEG6uX|j( zdf`X-rx>66pq1aN?~wjK@L}FpgeKs5|3v9(yoTa-i1*z;3VHPI{XqZ8-y^>E`bReq zp6dl4A9`>^@L|VQ{~*ufL-iwqk8oTcmib6KV;;Op#!-J2)i2;d+wU&ZE`|O;w|IS% zLVp-n5gxR^2XB{tzIKPq*MA$&_my_OzTzp2dyMdWKXTu&%-0_-p0AyEt)JdU>n+{y zV7~dY7$1EsOy4MYtmF6}X6%muf8HSU66w8q=!0k_{LZMPhZb`^9h-US6KJyxa~Nuzf|a%R=pc*zdJr(ZI?oS z%s0{cCZ%}l9@p+N=93#h7U&i4lNL{2BjqQbqw@5seXK`}x&9Z-U#|i@iVvaPNogl~ z;m;wb(ChR5Q1prSX~-qf%b3fU-k(X?bYAHs`_;M*^d2~(>o2QEQb!nH56Jq<%SGW8 z){jTt3VhN2gYFBY-b(E-BgMPI*0@B* ze8L-^Y9Es(;CjiV`D_B_s*|N4mPo5hvk zdk>>2ji#QsmPpV0nS?#E1Z9(U_JS|$tMQ9LE|d`p3z8KQ@tFHk=p$_|WA z^rZM2{D8UtXziC>hfeP4-MzMSoaydFAa)A#5qVrCd~4yaoiF+(F<<#WKD!(MEfhm9Uvb(4ktNGe3X^*DmC)+uZa8k^B|i!;xprlUvKRCW^zyO zq4v^ohKKAr3iKBIM&k^oeU0E()?K`Q;rNoHak?_?CK+e&KIho}>0AS0mg9ub8WK06 zc~^@6d_EHYIXpi8lXMtr*3FRp^|qRl=V#`ANbzmgOLBf!HZ73} z5+8eCD8pA@D92Z>@|D#avn1DF#J&*hWh30P6Oaw>OGvYx0X`WI&U~WB+@n@*Sgt5? zqVZKH#d2#JY2M@~VZWokW62YUTQnA(GsQNZyKg#pohp5;d}1D?wL-c&mGvX(57DE7 zhbHLZE6{u{yb0pdxlUjX;)!|;7xN1?aGLiksh?5q&%#-wcF@{0SM9m8fZF4<8xTzG zO*BsCqhG-Fx?|-HPN4GAUL-H%2WZ?6=k9KWzWcTM8yYX4dkXx=dY$%&jNCBH@NVB}n^St<6c;RlL;vVWkLQ97kTo*elji;yq+)W!>WUl4Sz z%rBo*ehKYMluzbet$cwvDA7F)`{Gc4jn*DHXA(a)V#l+S^3fs3FPGTyG|G79Nt)uQ zq<_+TwO^7u(K`kCvvN3rr}u^S(tgwzEFWQ25))U?%q5kP0|K9r=^b7WQ;Qz^f;pz$Q15T0e zLw>jWd@HP8GHYbLA$rC8Mj85lqbmJp$B+Kspid|8X3wuLMw;YQ^aymTrY$}iYsHudMgJt$MG_zDaza z#2a_+*vhXXelN}^2%lmf1>*_jAiiG`?$ymI^wA?=5A8DLqwTxTd zmm!AX^u+f?Bk;WkQykx?eUf(46X7}e#Kijfj_Q}m?~6`uK6h(B6W<1P0OMLc!zz4&^2Ubs}cpU)5`b2-kNkz^Z-7NVf_p_l;4>j)7CGkU*E<3o1K@kKS<-Cd58X>%jdyp zp2Ej&R`yADcF4Yg+cCO<#v$inybs}g3!lTVc+m4RAF}b=a9o!P9>Q}p>%^|7Bx(`j zLE9Jb5N%iGJdM{K>#sha5qux*GVr+}pB%4ke5LZQNh+RHZs&T!4^Fa6_DgnUWZuaP z=8a&wJ-2G-F+iN5yIoQ* zxl`+z+< z;d>9d0om(<|5P|1r1-4dPv}3z`U%%HHJZ=e)_;oiV`>E7`cJFHkDkCjOcy9=ynh3I zI*C5cq|RLp&%r!4G~4|Hw2!ZA_&s=IGS~;anc%A*mPwgm;)hhSD*@T`{@uzm_c%!1~TfXN9jkw(s7Ll^@$uT@-Kgp=Mc6g#L6|-#bn5 zyz7EwM%(MTW$!Y1@58%H-Y>;DDfH_Y_%%1uc+!_je(F-GmpUTn)Qs9!h(;T#qlvut zFLA%dKh$w#5YGi38a1v{7eMcj{HVNp53Mb|ulJD9rzq|g-Jdfyt~$f}dY=QmnNN(o zKWx{@q(7k#3;Y&4Z(MD^DeKz!8t*gN{ZoIF_1A3tC;pt`yhHtJ;fX#ftEbZ{Pu=1C z3-Kzk15L?*=qPyL=Y;GC>KE0Ua=dJz*hN^gPK}#&&ZHgjo_2V>YSIue=>2(!pS6>p z^d;moe*mw7m&ks_`dc(`b-r&y0B60Py4LI4a0j4cptES zb@MTa`&l`j)RXZf>qPITn{<6?{at;Z`KPX~FQa}W_CEsCLwslVF*eQ8d(jBE!#_3) zh5n7_Tm9{&eEQ zy1r8S&k|jpmi+}whk~ATWAuXm2l*)M>$3jTa}@RMiQqgp-hKSFu#ES6{Q=VkQ$&#UNrt0!vn-VV)J&fA&9Cgl^R2hEG^ z=s0~P`^nxfcwQtgk@d0n%W%HM`;$aZ(MMDBo35DfzNDVts5@l+C$+D?DueG|RmS(Q zgLaQ%^r7G6@IKtI#{0e6(1FpTeuMf`X??E{FCdWpSSj|#*n3)3-_(6X?aw02;~fcM(2-SJMB&e|5<&)zkdGfyEcu z<;(`Eg*Xh>PtC9mC(q?`M>al@R=-l>>EU^VMw~mTZ(IHfYgZKCE3k?q|0Fzz>gc%z zm8(Tq?}@!w6>P=&4)k(}UUc6V=cny{xt?pW_^aag7tU`)*GWG7CCsnr{Dzd*fp4fk z-DfDA%aHp~!1sJ!4QfKpWsKX$#W^(aXXEFM_`$~=@sIVKSmV{!AHsoo98%3j4oVKKHPBg8RUBzf#UW z*!4V!Q2AakE00aUT@G~fev2lZG_2@8F!5LMI%leB?<>$lyzgN7z!5nL&!vQTDXh=f zo=x%mmL0d<=MK+fYrNH#C&53=SMmNqFjxm4$0-#rvQJCxAY0|u%Rcrw`QAE-gB~2G z_f0&`VoILRGz$<~B)*=HEmJ(_ZdQJid#~tbKf2G!n9SU7(fEDe`4-}6%S|)#UV#4} zll2+hf8?CoJh*&4=7XhH-93?X=;zfTW>Z{`=xo<{@qE_v%S1nT|IYXUrlNL~{7tmm zXZw}?k5h)ux5Vu)ZO@WCO!z*pXuM+oIQ*A64^)qFKu+-!e)pzm zZ@t}?Uo4-;_$>uFc$E6Fdp$QWTll#qiXVS@X?gaS zL!L0ca`BiM#}D}z7C(>+rYFTC$#2^<2|lv-Pl{gckMCzR!&f1_3HWmVWK6FQ+jG@c zuO~oPlIPV%&iSZ*pD zK+xG=aU_1q~i$-s`pF6!|xL zKP~uG-m_Ob=|8889eB<(@oM3(l5zN}L-`Q@FhD-W>z@|O*LG%3X+7sZH#V=$T5qes z!9BBl4h`~^7=~Wp_$>Q-(0_MwTJlE|9i%4>>0Npnhxgz7)7Afz^MjM;UrVRQg-#^r zeBU&!*L%1havi8Yk$?P=B!7?U!PoOHME}^^^)8Zepg`nryUrVaBkPku@P}hTl7?H# z^gm6~-dm)8)7gM*{i0gJe{+rD&yS7&O*Mue!;eq>bpp9Fgde|oX5o8J)EGXklSqG9 z{y8!KeTkJU)N7oxvn`oFPC|C7~EarwTc z#_;Dx$M4hm@y;5`H=XY)#?O^Ch94WhcXf^7+k5;~zI}?Lb=D9+r04CwYj#w|?j3p5Bo%=Sq$s9t!x?&y|GdwQL-(rt#}(`yCXYE5e(1 zG>*4v`ZX<4_&%jOYsj}Tz2q+_0e=ena{iq5lJQcX{925^Tzti!Tc+JyZCA_vp6U35 zR*%s8F}0)z>Fr{Ex}nDK<97DC8p9{OT0H&}HHJ@mwHW?zjo~Mv@O`p-oi&uV82)`a z&m4h2IsICQ!_I6w?|mEfe4sral#uU@ywB=!1adJC{G#6*X+{14%GURwn^B+QbT-am z6i(s03DNe`{qD#J;wX<$e~4QmPGw@>9hr;ukHkT7eq<@ir}*8GxzES+d7X(s1oqkH zZc@16`On$;?ug|FKV6z$e!4Qf3j4yA&Ss;;5tYBDNe|zvLXW*QqQ@Iz^f>Zt(IaaA zeeCxVKh|vB60_glAH?-ZwEs!RRpRh(tug$#KL4W{!;g>uopJc(^ybAIC0;K235r4e z&&0)~C%nS@KBqF zoWEjzruV%#e@zp9%+K`xt{8rEPiupmr)a)%it-Ww9`sfyFL6Elj^h5NfUh|G_`2ej z8pDr||K=LQkL!~^oF@D@KgH?&=rrNS@gL{cPt7p=zo-rTMjS(Orn3K24ZkO+IlgM} zzglDXaryb{X~K{5M=XBm{b`NiQ#_LNjoqJldmKLOF2{3VuXz73YPY=Yy3gtuIlq!B zvv2tKakw?s!(X0Z_`LyoYwj#E*G)5y7!&R{ZG_S4DD82Z~oOZ;m747 z9?yGQjp4`T;(t|!@6-9}TCP9icHzU7`>#r$IR4^#pN&->=cMUC=Mszc??1%h$Mo+{qWU);cWb=6HtUAQ_e9qXjh~p^ zb%Xuh@1)lQar#-i_J8AeouvJV!=-(~BD(pe#_;3v|NR+;|Na`okL_#wv`^ew!+3uj zKOd|y{J4Jl&nSGHr|O^5d8*iY#sB>p!KL%x#r*htHG&(*Lsv0ed~d$i>s{KnDVm4( zU(%o1qUXR&U#V4tnp6;=y!}AKvfmi~5Dl{n0e)9o71W2Qct@l8%~#sA zwBzqTlZ!`hxzfE2^C=(Caqo=|JK)O=xHCn|`Tf5szel=g$wc2HZN4Y^p5#>DBOP{d zj_*;7KHLv?_}nJuCGYRm@*E%b4uPi9@0U{ikmQQqpPUW+eLaf5slI1wnt?yk3(de6 z>jkTq1djzjLhjilHsNyz(|kYI!ttMv{@K5Y_Uk_%(X^00)D#6pt*v zAJ&g~Z`FGR1MC9djC{Rc2))U@f^Dgc^A2RwzBTR_Y#y_E6!%RKoHF+dqNL=#g3Z6Q z`V(Jtz_~KhB=5P>YxOzW*K*}P!NR@WX}wP{t@i}ldjmbWf6#bd^j<-G-(X7bA57() z_W`acbFUzs+rvJKy(g~)vd80qTIBI5y;@L*@|^(u0=j`Le4mDYCex2H?S@@3_0 zl25;*j68KzmM7DMzy-^H`^WV@mya_a0bP2pMQzW+XA*o*tKJVu_uZ?UshnpCzqp4X z1ALsz_s80DIR_PR`#Iy=)iGRuO-TQxq&J*X^%lSN%vZ)aEc281Hr+Pmp8)cM`(x1} zNB6iU^gHJZp>OX3pCt^wb1Qu23mixv$(z*=ZSb$8eD`GTfnE4L(dW3;mEeOI79Upc zMEmisP4a!P3!gM{4_#_<_rWfFTKgk9Y$(2GxpaSst50oSSTCF;yk)r`x@TPJSgoI= z;t%)IFn%4rCkAv8{RY1!LwMGEd|Ch*{a}@Y58bxXB8TrY2Ql?KnwxRIsnAvK5lbfT zhhD8mc^dUSJn4I6B**++o%!#VaZ`WH|Jd&#x_YtuG3S2)H84NuYqA%3;@+V<0mbTT z+{2!s@n`fq@bHHj&ejyu59n}*sXS}xm)J;p5peALwNgGBeSa418qCs(>mPDVWFE5Y_t&ev6vGlYh?t(ETLw%YS#eCt>P|AENX( z3laCvVSd(*8%Ok1!JenY4rg$mJ89?I+VREX;wGl_I%1M`yxGuLaqq>#_gcP&9Vy`=?Tw0ck8TUzk<3U`*yT`z)!lN^_)Z&JUXG^767OwpOF znCQ#6ooxoclO8Q&Z(G8B8ufFnUla3lr)y9B_5Y(k|G&_m1-;qN{>&?^UV%%w26`q} zP0nUak9t@SO<2Cht#_>4sJyiNRQ1z&y6$n8A=H4M*{ zb#KbJ9f}{l7caS5zCV&&E#D)-x(0Z0fN%LuiPNt6?NSfl?U8sQea|@b=cq-c_4}-? ze-e-n=;7G<1_YJwqZ-vN-Ur@9{Jdmc-~9kPf|KpwoUCi4B@mM$Xeh$vb z@;QAuFN=bS-SbuE9-N~!$Iq!6!;g<&@0qgr_byCih_3z% zEBmi4tE@hop8wji+{&H!ujEhWh|gx(fA!B*Jl|#cJnGMTRn9}VY^f1GF!xTDGr>p8 zu4e}yaXI(bik!Dh6+b;S!cQ)SpJTrp_?h&1{Fog2FIE04r)Tkfb$aikfd6Ug;duXN zSMI;%-69t_kIe69`7e%+2l=8mHbnFN4ahGVH`;MJv=`&vqnM=JeX2%$^^q7~eeu63 zUrps)b5Y#FyS9qnf4oNcMw}v|=bm}C@Ezqh|3#JOzX;(|wolVM@7IFwG8E5$w(Z{J z-j|18+CcjbidKv0>!oMxEKUC}UDE@h( z=T!gD_+8VAf0L8EuiBnBp?lRgEbh}dBY~UNd6PvKTK>Yib1A@0^1R8S^DSS=d6Px2 zRd};~&cuP8xE1TNoQ-3^USXdLR;2K~L()6H1pYvO{B(Vf1r65Gi`5Stmh}yYhJ}aF zX>$9WmQMUVjK#g<;=yIsR|cOo=lEX2lcxh#p>-zabdvou%m@2oQ$1gYD1q)HV%F4!J2CGWMHR=L<|BvUR-)jprKNHK(O1_VLrPo@HPh^SzY5eANN;{`e zkJI5k*?gTJ@58xmZouUM+HqXPT_xv1j3fChO>__8wiA?2w z%v9%rbpi2VA{&Q~?+GzK>3+36e`B0>!4u*eQqKFMx`5sqyvSsGH|T*``R*zSfQ(n; zMCAViAABBRGUxQBt4~R>65dp=E;=suiS(*t_3CuuOR;s0_XOtI2{}GcBlz+7%;Pf* zU*lIb8-E->8o#O;{5XD2)fhkV@oW65^n07|%h+!PzmWi(iL(gwgXt-Jhm`FURD@8Taxzf0b(auC?|$xiBj$s^%>IxRLM*x-(v!`MST>F8E4hB;WeYD5riKWB6*f?J-Zqm(EZ8 zx*#e3wd#Q-iZB0shyB?QAC|vfYW19ar*g?>8NZ~BL@&_yE4PwgC;piA?=X?%F!4!7 z^dHLY`9;YO{W;8o_YV?4SC&uj~7=znad<{;I!U%G3L$e)_23NB4UP@3^B7 z19jX>=wFA|(Th)5zMZPS8gDnn^(TfF^Ou?L%EfO?TKFq|z8e#Z=tr8LL-I%KeUfW3 znM;>EwgPnI^RAX(QKKgNoU!}V{8ysiPVmh?={RV7we&;ZGQ;rSTx0lj4x03;-RFE$ z6#kUI^Ax|&<`p%98@p%B-xP%ls!ordE2H@EUtVMQF~8Z@^WihakM{dfGX|gN(Fy)3 zbDzqR$E}>PUk+oAA4J}aLc0>*$+>L+VZW71B>o3`qxL=$UuOF9IrVY+DXy<(CGB6( zUOFCd0mcu!l+~BB6c>zr=a%q4y*N0>SC_R-G`_kNG(O3Gnb2#>aa0$0et<>~ysF($ z`&8Ta>SFfF@|(Y{44t=Cp|i%5;hoM(9Js`Hdpl^oH{thCB5|Kd(D`VT&QpG$+EF^& zbvV?*tkU_yGIYMs(z#Cb9lRFyCy8I6kG$}^tX40X#l_{O>igbUn2;WYYr^dkP>JAk zCzDb==&1jR0;~s?zMuV6(wqFgo%aY-r?i*-6<)WaG-(1}@2{TZ`(uA8`}@OuUTs-0 zQF*s`@VaF_UQY3)?*q`dLw$gC0%j=tLSduICUp03PYRjVyGwzauUAI3Jrsti!)p(>8wNq@~_Y%#Y&#PC85VfX7Q| zoim)a>$WIdl%FR16DhIlZn{g?ciMm21n3|2p3C*%2hcjq-zD;AvUWY@w8(l2_#i$S z4fA(!zLN^*T(0*MKSw>@=WJ(@eAwmd0x9RN-^4 zJKAnptDQgOgyl9t5eWKWod!G6KzM|n;HT!FNz8&@0)wT00mI%8f$@`EQ@Qwiz`M{V zIW2$BzqGxyKX$3bYp5q9_hG<3)BX&CRQR99X`D`xL#s!en)(^B^9c|V;E4L2*7=0x z>n0wj)%SIR()VF3%V`|M%KIeawaZ=u_C1&IDCZNF^(nk(DPFq_anO@I9@yt%y94&) z^?#Z33Cj?J;&v&h2(nM~UhkCsspV%+)Q(cPi~3vkV9~hA&-hho{`P)Vg}=%FcmU(a zJ_gUj+B+kBz3gM)c)}05{ckxxq9glZW#qf6|5c)0F`ooZhV&EcD?g#mNPm&tAiajh z_?zUH{#?3zT^P@zI56=|!U_0EQDU}3aXaj)9fqo8y$=13dj1Y*S+=ikhuC3F6QQ_X zGG>R98MVV_vmHzd9}TBnjiW~4V_nEdl)IDgP7 z?fJf)<&9SVB{B>rrSHMw0KE9OsnaA*oH|Y4%h7v)s=l`){tjLp<8fr=J2 z3!}aeJDn6yH&_p_Kar4mwoP!J@b4VN$4aY{w^e&JlJp>ZbrLqCfo0peMggXo}i> z|1#*!PNF{e0Z;rQ{zKLCiwfWNgZ*6A1LNc6Htr3B1HMa9JK`gIz9+yw2k$G@9cKSH z@P+T5#O?+0vq>+ZeH{N)^>&=^XL={=vs^xkiE};kpzuNceN^A9Zjf?gKFs->rG8z| zV9$+7{d+V&6Xw5?>%S#w+n>$pJ+4iElG3Tbzj$4A6x!o86SJoJigNKy=&_- zWCxc2(wGy(50gBnwgP70B-$l1upbrrDLSV%sd=n`Ze;jbs|W4+Gw~+Dlco#za||e+ zbp0#)oFsQ#ANn~%<5a!9Vuip*x!srLa}p#^Qs0T(XSCvZT3^nU0ua_kWY3ehUkLVX z`Cp2DvT-r&cV^`rTUzdA$t1I+x4f-swaW?p&Y0cDOxSyd?D;o)pG$|;cWe(0^z72s z*7ANi+bc|>Xdmz$NFiO5{V$kFrnm0z_^(B}6Q8GpO>o#gLBFtlz&aWBVbbrnSh%mQ zG2Ga=y(el6Kei9!JwC(m^?X;&@E*sHp6{v|{5XD2)fhkV@$31nnvFjO-+zsazsx=r zv?G2{J&=He>MM!sy>4ykc;oA!=Q_zBfWM0;ev$Y};assL%N{(@I8nnZ7h zdUd{x(-Hrv9p^Tn*H(N=?1TS$85gW7$N!=Kkcfirx<3pRqkjttNZB;_E;M>y@-gwg4;1be8><08iL_7%r&? z8+#Y()s14E!R?5=v!0$~G5yYakxs}ujO{k9SDa+vybDjP<7nOL=XPbp@3isV3m{OcfHmVzmn($e3`WM*UUP` zhXejSgXWKXl7k=W`h)!E;&nV>{spK<`O~p`@$ate0Sf>>E1m%4TG-VD;BCM#t$lq% zjp4`jqxB1BYW&?Y{xbR(69rwF9&&H5zZ*};8Gap1U%XGk`Y4qQ=-k(epIiEZFNyD` zc(2lmpMY#kuN2=8*a~ntN{9Zn{T{r=J?Q-sS-0AC`#N2>u8Xc)!G|}}@SQc9zb3YB z<@I`D-Rj2tOecWGH>JL3tMWkSoK0(!X-~FOH>8iKKg-`p6J9jk+JbtkC{?*0zIZ;D z+O;l6eU_)n^;=un5*QnAD11kU`<}u-WB8SC_L`qHU6lbVmHX8#xoBXdY&pTEpOHt| ze-R|A`18Mbe56u^TwktIajCL=aptM>9=r0hsrt;nEPvTI_RL>)-bnWcFF2IB;LI&w zIsdjx-tb#GJBj}yztzPl-12zh?)~5YJqUL-}Jv z!IA!b1Gzod&{@8V+RmxAn#!vYNp}?Ju<9-o(pYhDVN5|EuoUy04xPYI&qxpe>9^iiB z2y$;3E`~MkZ}*n$m;dT~=lWl)dg(i_ed8y-|A;&Kl=+LDUwzZ*FS+{H-%Gy!t@n`s zRsOf&mTdV#lq{&y|M8V072A&uS1dMHt*YF9{`SfM=5N0)e=Og9WGJFiB7F`W+ngK9 zZQr{W>=`N0#I9q(9#jbWxJJ-381(dZ_YDl>yQTUTr1tdm?$ZjTK-jzp-`LCw&r`LOLK^mJ~?RIKN`{Z!@hTPhYC=ayh+erSl)6ItGEYlGbf`??Pl8{hQjzqP(H zka4B=6z3G|m$mQFUc~V(ZV~-^Uv97~KhP!IbxyR5Qe6XmLw((S2Sd+f=opAN6zuI8 z7$hySxpP@c+jA-oAl+*Fc_haC}x?#Q~0u?Y*+H0q*SY&-b!}0>Ob7Zl%)>Ed9?r zuC{+q@VUCU-jd=(iN7(wO9u0Mw)d8qUw@VLA=>ZigAzCj&$tBm%JTR0=SEAl3G*5^ zW)Afp2$QA$7|8EE(!1w*7zTv^#{V)W8>^|fc%#k58OI09+a9WSpudU&DgsuDRjMs+ zcY-^DL;1nM+`c^X$C@I5`14Zl4(tz>{}tNdSR;!NI;_mD5+5yyjRH`X0_7jdmDIZCCwx`e0y91&?BX&%XUs zHMcv~AeOXxHJ}C{+R*-7Z!wY%4lW?de+@BvLNy7@WR~8DrM`=W5;7j(?pL>`qVc4A;x0dVy^CSBK zvp-9)z)6pu2>tA zYks7scj&CO+NijEy!J&1sVs0Qm{+BIZk6(mr@sEVDplge5&0_MryI+}V5fvjH%Yh@ zEfMse`tPchBMYmvPE{$tr1wB?-<7@KoM7m9|9I)&*12=n<>z0#Wy|F|w{7251z5az z?7HFZBZzhN4sAKskBC=(&#q$ zw$q~L!);FnMagl07Wk9a-xy@jKhRSYV!HE@U-%#U%BwfO={4JBM-u8~{>78(%bk zw()P9%5=@y5oK7SV((+$4@zW*S^Wd~7g!q~W=`;r;P=1&&vbC6(r?$XpfEFRV;$;0 zm@jsM4(2M`&q}cW^yXzhsZ{RXwECgCN)=GnSf#uo@~gCc{AWv^@T$}~T*W_jtF+(3 z`zIv+;KZTvuFQpxKUsN!PyzlA?rga+0w3;Uy!y6o`o3uSUyrz%@H|z%%2yp%@*h9E zq4in3VgF&t4gG{vG-y*V@KR9kIWz1HHB?#Y<@m@z*T=9?B zzxecu-_NGeZcV4*jwPnf!n_t9#YiRjm^X+q}@0_r%%`1Ms=7OEC zzG&0sn>u%Gdd1}zZRxxie{S1WsBz-z#TEG%(SxDw{pSSzLjytkx!{oA{J^fFJ;^J2 zD#stX4^(DR7;Mr1#TzAs;Z^+WsYORu=0Z*@UA0Pl^1n*AstXs!#ls2)k92oKmWtcV zFHV&BJ6DDIC?azx*LxgRl=nAzqo@R&a#`O#>HT!Yi(i~P?Z*$j@!`*ZFMYw1vtDxS S`Fp?or-Ne`)$e}QJO3XRTw=-q literal 79136 zcmeHw37lP3egC=lEpzWol9|k8NG1z&UkO@TmrMj|5Xze@EHy$x0$8nOUXqt&AeouW zOhN)E6J#j}Au0+2>fqKQR%z?MtyKReS_P!GqSh5_RIvYl)fS}IrAq$a-*WD|_s(19 zP38@$f8Pgk=j^}pJHP#$d#-T}{rKOMW4iEnUuu~&E|% z6F3L)^o==uR_;rt#h7#}6{0G&#~i3Xi(r1|kly8>c-*HZ39GCK`h0FPQ zPA?480jEz0(^C$-G1 zp!(?^Y3HQIsh!ESo3G>HxNRt(gTG{cM|j@zsf5P!uEo&3NEy?XMn7XMNK=1lq*tMQ zk1fZ1=TTbbOC9HFoI_3-XcAkVrUjIHfpn0P_=e!&6-K_J^()@vkrrCl=lTvz2>ocQIAfyX; z`aI)_z;Kwp`+!fTd(-B;lX4x#Unf?O>0mypp2Figyx#vL`QDoZev~l&%n4eL))DhG z3pKq|(_NZgt?31t-XiHqulub!?-pM7k=&;zHy`sP(>+blq`_U@ZMin{IL!X+bxT=K5MdO$vSZ)6_(KYn*JK^GQmZJ&X@0vySD3$)3ja_?JKz%d2!=@-rgOKBxU>AlHR& zdbr<|@)6{i^qWaBf0@k54rm(yp6tGqo+39K;|AttPUkc~C-t25#E1AX{w)1^d)z$9 zW3*4_NnR0uVf@@bBV!rx^cKgiui(k@iRBy1Czfw4pD5qhad;i8$;Y=&jZZokD}TR@ z;Us+~a{KL^h6LC2ox&g9T_K&HMC;?dL-X%W@Rl=KjY3jZ%5VTb=oue^)v8PkmQg*=102tW_$jN4&W_$^_5 zOi%nya?+>LQ~1z(_r|=)1Iu6Ojm%%~23>(4y#oLNPyE&hUt0d%GEevmQk&MB^fk+q z^cHS^JLImkJ15pIGnyAZYqIr6xqU|H*gM!{+npP2=Z#;laC)}g^*qkFz&R1Vji)Mn zrwV-W`JsLSF5rRrKT%KNLVblNl_LI|HP`a-9GCg%L|H#9%Xg`K&PS}={o)+PcYt-d z75T5#{Cwt!@U5Gn_TKwbY~RdzQtg?(l$NKMPf@;%_-oFOwS0`rNnEaOg*IMdNO)I zrQ9*C7VcJ=SChaE-MAm}$~n?RLXVJlWapWtuhKfXW1hBex{2`!8G86ELz1i+ z^=IMfYdeqIb^AkPpE{uZ0{S;+Hw`gf156Ee9Gd+pmCb&&U9YBFgdV&`qyBy5T1pbhW=QCcAe>08iTq)zu z-ip5ozQDHk@1*f(U#ECAO>f}&k1PDf* zrg4lfc^QUo5s%cE-54dhd8hDa7 zeRlqy(B}h9V?>{=k0_oqG9MFQK4&2RE0!*rWqi|g6^%>7Fg#9^(nS-~Su6POFyM9b zO$1LnS6qUBNpDB!7-^=jR`4^`N1FN1bhik-ekxoKrB{$P)2shzVmG9e{4PaSgt?{GGEd| z=4YC}A@taMH`Q;2y(9B)7QX17H4b_tjWOE*Zw~NNApD%&GA?vETj$gAO@h~SA$99PO=F>u+yWf6Zq$TOXcCNw9IR*&g;39q>Gw9Drq~NdViBf0mIAjm-a7MdKdWJixd5I%eqoOw64!Hy+R0>R~m;xv6Gi?68qHMB=XYslUhz`?{?R=UoLjA zmS1VR?{A`mv zAGUC()3PpB|N2=;H?v)B;qo3Su9Nv&KP6LSJU;@zn(5T67kDjxitm^8$-JNE3v|f3 zNjpGzQLKIj{XdG_WW5afXFQn=(fU(>=WPnl+l~`>b}Kx)pI>-{AB|a`h)daZbTs~x zh!bUM#(N~b@o31$61N}&7IurfD`qyM^r!BIG90Tk?fm6%@06-B3I_~ zdYvHa34v|xyXyqsl1_D}0wzpV+EuAO( ze$wM?*Kyjbk7K4fkG0zW+-{FB3y2HS zKi(HA*d1T6d>HEgczoOR?pHqCFL2m6p2Kl??{>_mm*9)UxiOx}fS(?v?1VfG_=Wp%Qr!NK#JNH6vOo1j zmCGbwS9I=9?$4PvY%qbpIuT!CxeLDLcz+Ysr*R;kNG~{=7I{tf7{!a}Hz&OS|Jr>g zYR_>8XTQu#(y4AhPyLacV17@xGrulCzr^1eo*(tZ{d!*lz41DVyzss(bmVlwAD)0Yt5+m?a7NiP_r&jPMm4B|APGwDzO+d2Lr;!p3( zA3Ny$4yrjaE`^g=-hchE2L&${zLv*$K3_*1iq_#k2;awLUeeB($L76K|4vH-CuNd!EvpX;yqegb}_rD!!a%j>mc5 zd}v(eJ$szx70hU!_Y)6|%e?J;njhkMKY=(Q&%4>K=R=8ke^clE&G@`$3EpmRvF#p{ zc8ZtG4-d(_=O~_L{gB&d<{V1Q`-jp_>UrOK?ufwIs_o`H$8dgY&Jm$c^KVq&dl%x( zM6by)UM!MIo_{1{H}U!ZT8 zPs{;^aQ*XB5&+`MUoA({xw%aH5eBN(>TjO#0cf)@6YCp1$ z->bma-xIzDoVP^l8*|ro!9#Ytj<0yg-Y98vh16HOB6DM(;KA+-YQ0RhPw}uLTHkvT z_1TY!*Y}=8eZkY^(fY>RxJTjH(-3%`ssPVZ72&x=;kjg*;klIg_IfNc=Y4 zz5#e6i%$2?GHQP$`nkPA`wYf?l;DWhHyYoG>|66Zu)k!K{*+%bTS$KbV{3%Jpm)Jn z6`<*FWf7xG#{rp~Ouj%g8GHIXc5W5ZVLGP1Y#_c<*xA%S|_B7dL zIkGdtb1T{p>@M!7y?Q^U5*)Crxc%J8ws&+MPLAgRy9w=SpO5y*=i(`GoB)0d?5Me? zTm3I_5$_Aj1CcM*FL5QF`vo^3e)0|g4v{l_ZiLKlk@G9xBYf@Z`dI(WT}k+k_-9Ln zFSK3eqCn`<`e*J%ygsn+XSx!S*y7y4a2<^3~P z{WI&wIqg)>i~DDTN&jr_MRq;2;+I*!`#*B!<6r+F{%pl_bEc;tcykJIyfrBP^)&o- z)^C;`B>w3=EpP&J@%Wd?CE&C42>K^HPw||b_l#rdoZ_YwNs#@7wCSrW&iUh5oO5(y zoHJ$5aW0c{oN^9!ZfIwMzQ6}Y&X;xKFV`&T91XCqY0ojUerXdw2*vYAzRrC=z-PZl z`T8dn`1&WpFBAFNnWyqv`J_7kc%^fbalXq`=cCAekF;yWd{4nF!Dt*82>tb}jSFUD z`a|N7CIfk0;Q1~u3caq{B=&r21J!SbIy;PVCyzLaoWn>#9^z;90^~K*3-lD~SBh`V zU9J7}aX+NlC-y`5$GH*4|E!eG$L)x~EtHAzvv+WOp%wiQeUW~b^GsM~k*jIehu%*s ztlv+e?^rI2976l$YIo@R+5Lr{MEuOkwUoxOLwc9}K1_?ppXz?y&o<`ce5~j4eg;2X z^hbPu&1}40*3HIiE&tp7ITPLA1D4P~%jZPB(s{R4f(PiKsQvZxqS{|pZ^(X__j9qo zfWM2Ro$a@{M&YvY9J?+XRlZCeE=U#c7ZvdIizJ>bJ*>P=;Bl{$@#A_H@aF`6UH8fE z6aBX{M*6A!F12fai8QYh#%26D?L@yspiI}KSLX3~HrWS)Ln!dHdU&>=8up)O%~`V0 zv_ei1y-PjB1ykFQQoUrlz?jVMJ-cLH&MxUEL7xXE(5LFz5HHIWFKn-n*(v^OixaS%+J;LU9i4Pg|5b5MbEasO5;2lSDt;u+IMyzD#dgUz3Plp z`&Rgs(*Fxsp0~k1MY{b1Azw&7%xoGj3!W;lUUFU_`t+Ut}%{62z@Z9&xsygxlg zX>CLtK7%G3<9M^{)FH3jWD?dzh5!yF#dTWQJr*gKP=%(pp08aJwoIO%6 zVY)XulFe>8|}#mR{`o+I=&TZ|xtobbxt* zUPxZiculX6@tiR?FLF}o%y&S?SXca(5#RdoYx%uHgmcKhG5Q{h-GAhD1-(>yuWzdS z7V?=rztJW91qjp*6*=#Fxw8JNPx7DX6L^&Q#Mjg0dUXBS&Ye7cV!THQJ#l$gqR;qv zzK?a0@#UONC(_UhD#uFuor+hp8h8huCyQUtz8B zN#6sr`?EoP@A>(&RPI*TKThr&dw0k2=-p%CQF-b>{*XRUyEfzx3m^ES{QfcMg4%`e zE4Xi#{bOAh?Eho`l+0PSOT8}%9U;m6mG+O*Hg1y|XZe=u7P%ho!?)&<52?a&M>>bX z@_6#+Q0~yU<5G&((K!=tU+bL7k21V}N#{&*q!-}#$bPUZ{cP8MCV!434#!$;KlyVa z@%H1|K7f6VIAaH3ED)S}ZtJ!Qc2=6>!X1!VJbyFmB$8v^m!Xe)>6tww@w04N`|4MDJl290)Gm&SVzw8+lt=tzB;OYs*Q`MN2!1BtEf-omg4cT z_qj~Q?kkKY{MJN2rFeXzJ;r7E60c9|NOT*C$J=%q_rQDrU(=5ipCKIQ-Y9Zz%Qmqq z)7KLoIzDaneY#2LHqqWm56S-Rmb~m^%J>wHApgnx`kp@V<1L(7-beDjp6yHEXPel6 z*00`kj=+;WN7gIRzJ!-}y9~yQ;YG$Xx*rz7i?j>pzlZim@Vn_onSX}&gF5c!`THo) z_pUOEN30*MGqx9*E}cvtzdhD2gK>DB67}@l0qQec-oF6#G;T)r z+wj-@)Q|UV%{S(JP9F)=d_DqjGyOt=dgHWC-@$qb{C_KOcpp`IZsGFM{_S~MF7#V_ z|MrGxeeB=9T=0;3x!}R>v!>oCX>+>NxBl`QmkAyc^{@{l^kaT6THkvT^<(?D(y#X< z>dX92i`F;hjp`4>zozxa_MgNxrU{;>D!}tpC3rTRr1;TzsrA#tctQd{8x%i@dK2-p zl;zb+vCL$b{99 zKj9bgsQ~R^_sRR{#&rbmF2^bSoJ0La&$Ds7&HpXVkN9VX^H2XTht9`9IU!cIg!?^Q z*LWv!zu`GI^dRxQR^*>T{jt3Q<`6r^%!=hxT$$|~pYF}*rTVbv2#rkyjv;tm!IQ&r_>Mc& zzQHtz?)?|QE@%FU+vWZX#D1%?kJT%5t9~X~Z0HZ@(fD^rAMyA{-S<8~4g;Trc82$b z<^5Ivh1TAju%Gp2z)Ab&s;`_kTl!OYk7-{E=P6mw`M(|7-9k?j?de@IuGqt=ZotcY z;p``SHDz3mCzR}6^vCpQ;~2Otg80dvv!wTdl&J7n7v!Qz4xP3K=xb7-YxBm zazEQa-eh04SMLY!f0c(Lw0Ec2eq6^-yJAP|5qgT8%T0|DKJp6pQo$$6L;r%yOZ&on z9+&-3=1=$+m_O3e&!N)%X?SaV^6MHKz|0~61pdL+X z8=)zTGtOhW1}TW0C34zit$d5fW0B)+;5__LkJCEuU)Ol)0>}lH<2|}hA?GhR!V%Gz zKuA2!R(qdO;{CtttYbOW1o?<@=KfstyZ1}vGd%;pg7?^dOa~28j1gOz+x}3e0TW$B}(s?wAg_uy!VXuxNXF) zm&TtFPdlIZKQ-aKr+~*x@%!vBbag+vRs4jPhU@-gkuyS1{;~?|yR7>9mgvu}tBIeV zsC^!ySKvVVd3>Lep3CGk=BIIv+UFxSNI%w}t9d?R>TrUuCviSP&v{sTe$}(;pFS(} zWASDEXS;u`{9WUG5)i}oG33+J<>ZsSFON(l*q@M0eC{E=Xn%ySiC=Wz5Ol=!@Aoi$ zkYATFOYm=aZpY<)o8~^DSMRQnjzoUg_g@#NA7z~F;!jFk50a41Uzp}`K39Zpf8F&~ z>vrK!)#IioA;&FU9NT`M|GTo^XV<%=w^9kZzB7Fp zc7o_ZrVFATsgI|xaxyLP2fOac^E0N>eTI6jYr?siCXJt`6X$1^uN1x!eL-X?{-&P) zt#rPxG3RFpUwTiHoR7EhXvnFe>V>!*YWz8xTIaw@=gkQE+VYs?qQ5+hQ{55DXSDZU zwz2H_IsawwlSHqoJhyajp9#A*)1&sXT~FnM(!G!*S2~H{L=HK3XYS#M5= zQ~9Tb`ZRjJqXXl~d9Y*iTLyEVp5(cX7U8p&!1^zOFaPukcH`;Q?Zz<&?HF zjl*%7F$e8n7nJmMeRlE$doh&Xj`|^<-g~L{IE3*u;F;{$1-cK`3B7@I3t}||v2${= zo~Q>o(*j@rK5PH{|KQh{O6LoYO)tPM7%FEMl;l6?Ogv7Z_i!IRJzwOQGa6kN@>lbq zA3WPAUO|j`_$+?tdp}rr(GyvIhWeuw=Sfc0 zIwg)9p$pbOly-W_o|Vs|Hb<84fdZnE)Z|;8`Kv(Xg^ktSGw0Kd{2n|0ia#v{v_ib;r%q> z`)uM@g#DydZzSUdSg17U*b9eWrS)ZGhVmwX5 zk-TeuNBMk;2SwXceU2kpJ6q+S--CX7+5d$-j=>=gh>pnLLi-)z_}_^2M-s(Q{p`yr zpHqg;TPE!rNC8vVxvqE|cIRZ*XV&S{W5<;E*V2E2E^E+tEqlekgz-%XlXG!1g`d|X z@N;Rde0=ay&|@$3L4|wc8;+k>NARiTLP%#Z@}m&(@`krxx_ z%-Xq4sUb)b<2~%CJjc9VhV*B#&xLixU%a2>ea5DJN&mf-|IKPoiyrYFS*7|S9yjtH zk@k^&pSZtgHoi~vRr-BmpILpA*+}Wg`>z{CZ)thGerxS}0ONkKDb~7oZ>HhVb6WQO zbsO&u{rVY#$J#3!I@He4_eJcwg?2{Fo-j4+84w)X6W*fO#e1;L}g3HpiUwZ^Xk7dBEN#earWs0T0-oku;8V@Oq!DeE%0(e~qT! zAZh#E62O0KlfTxB^=uTqB-YPA zafZjE{q;u9FNsg`ZyPyY5})LcH*&nh{Jej!Z#*C8Xz2TH_^~|mo1}eA9+4h@O$Gh) znwix zKfG7SIWE43mBgD@uO6c~ctkFFe^wuz)jeK9kNFoicszRlFET%WeS^oNbJmgZy!SPD zyzcmT{zVNQFR^~!{S6*(Zeo5L8ay89k;wY_>l!>B?T>zP@pS7y z>-qWntlX|(ubbYS_}Px0U$^l_Nmt%4?bUr&8;@~%Mb2V8z#rK^m>1p8@ZMAY+`ac6 zffJH8e*Uw@J@2Sb`{X2`>x=tSeTqlf?=99VC&^xmuG4!bu};S_UP3PW7dLo3`yE;J zFZ_*@7?0@iv0T}BuJ;(cwqBH%&b{bY$<3I2t znI1#>kHrVQ$2OKd&*43mJkOzY?#aF#j=hBY4EzRthdSy1lshxhRBin`MM-GqI~ub_1TTBo2SQaY<+EcyRmiT z*VJyL`&gp#@S~HI7xz_=7opw?`8_V@P0wGb-uesSzl7c^or^2c1>}>d`@J!tWB_@XE+||H#*)*^NGkm zpWcgZBz-36rQUdJ-SQ>L4~>qOC*|k=ZZJNR^CNq)k?ZH8{|LQ!|J>m5lKA|@B*ue1 z>Ni)g6Pv|OtaSd#oM8Q@O7EFy{AarD;N}W;u)+%s6|;j)mwj(Fmw0bA9%n+kX|acW zoJ)%CbJW@=n46m(e{XIV$hpiu!Q7r-6Mv85uJj&5ru=@lPjU6$X|zw0<0bgnr~5rC zj@LPmJB)|}ULo$>i^w3Yi=Kz~ex2WokJ{7!StlP{H%)wSRRuo4eRy!{dFt!Q&<46o1#?@e=gn z9cu7+3AyS0-v*DDq)(#XUeMEY`K>kh!TYb79nYuvPUrlR{Fhw6f1Tm+zBbL{)mT5D z{I2Q5XRYzt>Ko5LC$3kgJ+779|9z-F`0DmM6LBB!pQd@d8u<5))*26f0^2om54LwT zo^p9}fAjx;(Bn9y%N$<5x$%VqzRIDOTMCv{vgJ$`ft&LNbGCv{x? zKf{mqd*gVUb~}mU|4}*h`*p4>-gl1138x*tq+DzCe&NXym-Bz8K0MSduM_84{c{^U zUJ{Sf?T;kwfTVnSdG-0>{9qq_pQUa*CgK2oe}l%MeWWO#Y;Vvw3A}l)uQpES&WZ8a zI^$x=b(@OaaxCW+=iB|4^IIlQw z-}KlU^LCZDH|E`Z9NQbTfBMH2_D}z~`u=G{?vIH0UH)Zp`=XZJIPWi~X&paUVI4np zoUh~73hTJ_d0xkDb*|$NrfD6&S79Ch`#4_52>sV>4<+me|M#ld5Afg2G1?2s_cv~t z#CT*c+)KA$&3-@6cf=G{^LyoQArhZ6gw<_|@zr4IW_Ajq4 zkEh-KqjM63k38OUgTL)x!TJP9Vm_jWE8oN9xIJ#w)BLpIeXF|phVPFF`3BuVfp+1M z{H{!Z_uuHdG6DQmiUXK*Do^#gGkNEBJn6eH!}1waKA(f{3vxf1^52(1i?ZL9>HLMt zQsKm+3m+>J11kyuWXBy}BSr2|gzPy)b^{`=^yg9|o&_|C*UA-|6dGr1NN3zdmT{Q@Hv4xyW}CV((Y_ z1IvT>`@wQ=ra#~Y6c3NwpC>H>+jb6USqGkpDXSCfsJL~xAX_nd5+5) zqwhi5_qkTRSMLFPue|4F;W)PM27piHds_kMh=oL3VQ@(S=*L8AykpoWo?|2cP-a^fsUiu!Fdld2n{JQ{q z-uHn{U6ZlvosoVje$Q)V_&qP;cjM|k)1W&_aCGTHBqS0C>g9WT%0`L)K2d>^d7c^%bp`gj}&rRwvV z>Ns7Xki%y|N>i(+-pkY8NIh2 z^N@8fz4spX*Xq3omi%nO6FP?cz+wPkqR-Ht!-b@zABmKSZd6asN6iB9`Ix|??UAvx zN96PJQ|10`hrbWibsMi2`4Mve_Ny^2=8YeJ=Q8~MB-y>Ih~8|u@JFTZ*~jlw1^qpO z0oV%>J#U(uWPVNh-a!^DNb}7=#LzPhmcw%)9y}ky!z+MviwFHKw_}_<(~sV(Uec>} zeGKc@@cVRg&;|9c`oqt&-Y}*6($&unzXKY+&+9S1QxLgmKmU&eE`P-0!*uEW7R{`XFRhnxv#KX9l6Go`mcF+*9O?<&YDs#4+tGJLc|O)|bz|-A zcOOaq=V+X${HJ~(-?<;ZdOs0)8;1jOo7>a9epTR@*dF)kV|yd^ECb=A67qj54LibjW8AtfHwmx$M){A>G@$Yc< zS$o7?sroFg?+%6f&VJ9c1^TSHW*maxhFxqzeVhWJ(R>p6Oyn%l8_U-PcSYz8eu=$z z#@|<8{A>Q-Sh)rKkbIuvy=L=2qWqD#*K9uIMuGVm-zO#MjqmWv_dpe&PHLI+Ny^XY z{mhw@^*f&@%XdFno?_Bimz%kLPV;k8&si__gW$``ecT5s-+iEq)@WX8kJ$U^er@PN z^~(f3rT((1ps%_O2Jo_4z>_%}as>Ww*Gla-KtAaY_^ngwe_g46v5Qh-uVUOB$-N-O z`UHkz2iav^HlOTag2y24K>2`&>pLlh1LZu=3`GF(%WjZ)%J-3xQDi%g=1ed->dXW2g;;)Si#|N|@it`a(OlB#=VVq7b|DeJN zdKCCI-@@PRNF31O6Q7-?c;JHTt-P5quZyDd%FuV8dEChS1ddZ_`~}z8dE&(mN~@kP zy$9$n7yTmoIAcHu+&-=PB|T5{MtYv;5!j=k8`$Sy0)i3R;U)X;IBFMia{cFF^ zl+fFtqh7+7*ya9A`6n*;0rqUd{{R?n58=nm1-?<dR;f!a!D`v zjI3AkyAkyHQ?{Qq&J6!J&;By>I`_L;{AH_$+5d#ST+#os@k{=G#3cNG$C3E!hn1eJ zUydbg#J$@yevb&9FD5#guJ_vl^hfk>-(vyWa9YoI&iFkPbUu6r=hyIiS;#IY{Mz%f zbUw0<`PF+Kyz9kQjvkx6-gUC_d%|Atg3e<7dmP?FOnNA^->-rkfF0qJJpmsBzq0SI zgnrSEcs&ETA^INjk@Rr4tNT}?uex3{O?bYj0-i5FKJn~dt@K*~pAfULdrtkKI9{jy z+>Ont?oF^yAFcgJ+@V`1LXS62D5zH=W7VM{Sx>A8=E z7ifPoecr=y*w0wFu@q;Sa9#-V%Repj`{X;YB)H&rEy6b=i4VraKY>zE`Z}g_S&Oc% z8BbQYO$zvj-$$P#<0rP^=(+HXk@+C*Jk{@Fo9FACR^SY=y`6W5C~n~gh^;{CDhx8Qgt>!pUcRDZQq?gKmS?W|R=Xen63I8~0Jy(&=I|o5m zfbB5m>ju^P_a4Y_{Cm;4_B@5|*PBU>bFq$-uRe~M>O3}U|9#2+@%?7Tlk7*DZl_Jx zBd7a{%cb0{dLCraE~RtePutslyFQBl(Q$3?Cl+7!lg;WB(-ZcGm>#@68U0>ZDm_N< zTdSrhHbaF4Pw=3m`?EX=B-T~kBF2~QQHc%ksxLM}B6U`Avqjfha zzyk4UIdyHWy#Bow^a1{@q<mw2zHv%u+XfD(W=>bnb7x!)XJ3NcJRj3EIJ^ zN!HoFE?gfu zXJ^+pFLaCk^c;VR^^yNZeBT;tz4(CIZ8*lQ_F^03;b)46vz6Wh;GgZ#%z9YHW-;0p zguYG_x=yXAmatid=LHlv`JOJ$4_<5zg$iE5aa{DIOsZ8$^ z>K%&L8>91zD~?@mEI!ZD@6_bRV#q>XKb0GcFVX&SvSV+|mA7MW1hoP7 zO5d|8*{Ser(GPyhue}km${uPFe?V}v49q#?b43GCTQS0Cq?>4W^T2>$#V8a!UYZ}R`7!Q&6e~9-=1#cz}&#e{U zxwRrZqtIJeJou1HXq@yY&pSCDuqyga@l!8cw^e}awj^9uAFkT0`gF6vW7j3MO46oB z;8FdT>Cx}I+4eYp1)4MPYZXuIZzSHcCpygXywj#{D*oXZy~nZQ#J5g%A7aT{686s& z->-)opn5!~?+598!9rpuIMW@^o9O4A0Q>Dg1%5nW`4RXLeiVO?^gP;;-z9d)%)swo z0umQE_*@L40#n-`tarV?kXY}j-Ul$l_+otwSBL^}fCOdRLaemVePN%egrH zTKj^v7$$QG*j>mBUg97-IOMb(kW6|0teaU-*J{IY=+|x$;C{P3I?m(?R$T zkE7gJd8hB2A9Mqnr*{Bx5Sj1EA}1|gE8V9j?Y-Nxw%rS2?P~Zd-a)w9GM?-wnv`7+ zf%nbVDZHM_C-*v%&;FYQUQ8qb=S9m!{;OXU>LdG}oJqiUk?L=&C$(P5pJKSMpQ-o^ z;}a|=OYu<6KLURqaSQ(~8Qr%6K1rWA8PkV#@!y)&eBg`ovz!lwa|!Kt`FE5r_uq#3 zA|@sN7xm|AJ9iVcL;gkd9Lr|%v@b_`KRPbTPnLbZjMzo+yRLx<1@;zNZ0 zFkkebSMj@C)$IiDV9JhX-=B`f1u(r%883XlROq?nf5+@j|Lqtr#-{?G|8^@c6XRL^ zNP%a_F`Ado&pE_&=E(jh#j|4bw)`9R7rSS|)a2iIyA$7R*9mfi<&zu05~d&G1F&}v z(|SYh@l*3(O2KXX@M;SGOZFsD8Pf~f_f%fpzP}TCfbnJJmDn-AED7CrQ;-m&!O^m2Q(8zXU|Qe1`f;9ceK{qpY;I5E!ze7RkK55#QkYoM(%cORa#{h{B5?>;jEH_`J{{g8~Mi|TfKcMlk!)(zy5hP_qyxjeSJpT~Ks zTrS0(6Z~C+Pbb)~)L+!@3mo?6VW035LX_-15C^2G?6->CMACG1e=3aIx=KG}-!gyV zehA{bz{=gEJ(E)V1M5ch;8*mm!1})x(w*%RED-0zAx1v<{Zz68{5#5*SFvaKy>NiP zob8A-`UQMr*_7Hf@$pfQ&yA6MVLLYk{m=GKsb0YFXuUk_3$|;rY$q6%Pfi}~1aABO zwAwp*KbG2On7E8nuf3BYdk1tl!QO%0#PZOz$vGv5^>p_=Dxc)sBc^B9N$Dqy?_(Xo zBRD_SCijM6e%Lqe{u3)NA<}7GO7Ej@lJ^AV9xs&aVSC+yoyYUfo<{aV_kJrcGigr0 z-O5Wn{}#U2625P~M)vbEYxI3Ud4G`Tk>3kU=k>k7m0G@1>Wke9IN0vM`{ry%K|k1i zHg}BRSA6Hb3_Ic_NE07GPTF`iGQ>XzzGOcJbi;UYWACGMf2bl}3NgGm**Ia+b0@}az@1~7$>c@P5={?=t z$Mp`i7@>Rfkoc|5f5z`$E^U!=V;JF)wdL!ir{i45}Bar9J@Ag~(%8AePoB+<}F4OW6!mB-(8|(?sysX5T*t{n zKUEngaxS;Nd3;#=?{l?()u%?{7r>~*WhUJBld|V>`FsQFsa}oW3l~7n9Hx1P{+yh< zBEDukLk{L?Ubv3}oM3{_X??3t4E$)aBht8+4Ei$A_w=lNg>wphs@KJCH|cDi=p!$9 z_V#2|@4L~;{uMu@dQdw z%RX~*-|L+isu#UCYMo{vWAw~LqwL7zLaz(WSL}W&B!kykvYJS19Ru@q>h}e{J7yA$x|_ zkM7+fKD*occfemXPJ$ZKVmBne5B33!-;41ZWj7Fg68~BIVZ6cPCG}mS?V{xT-e2GR z{Pzjp14EPY|8pO*^Z~g>d|8T%)aC!@D)|37*yRQGM~<(1`au3NU*dz8f=@n+bD%lQ zpW=T+Um<@WO?c6C?lIImiBi?;8PhtO+T|WcedfpN^>bfhO=WC6r*xi^$DYJLNAas% z?KRJ~U6sd_EB*Wh7Yq|CmH$!S^fU6P`0w2E&BI*p)BDE5M43MdgM~7=RkMoG(j#Yo z=gPm!H0S?q(eHnLOZ&pJ$2Z^q%ANUFzI4rJ&$;vBKYotRlHY!+&16v~0%R|Ke-u*WK_w*w$5k9S8cVl)@gYG5*o9 zs?AONh1DyxUwG~4-gTo0_E-EB_ZBzr9*v2NSl!LLhlh&;qigmK6*rF-w`|;d;nuC7 z#IVlj-qnTCLLxIP#hKK-!4^~q2Dw?#KN9p0Y#v0Po28F6NNwpK*rpXCEhqe0OHL#k zl&e1>FC3qsO!k0uSU%FfZJ;o^dpLoruzYJ_^XTC4zSYH{k!UwKlU4P%W3W02h5Zi| z_U$Y{)(oFNFtodb|FC?xI8q$mQ{1w8-#}q!|7JVrroxtB)4tK-NKjNv+Y)(hxvKj3 zTdpdHl~NxS6(1FtvCC?dUpp{3@Z#dmq0xOo`3YW>>LTM93C9l7AZF87Dj@h z;&3pudlT~k7$8=sG=BO1?f5+v#<%6mYm~pNLb;M{umyBmu1W|WlikD`TXz(;#Rxt+ zdHh`*-M*@@Lv&%HsCLr1?MT&14qi>H_Hzyd)ryUCAitqFI!fY)H0#>s!KNL9o3Dr} z*X;lP0`Hkr?I&IcyT9}+={Kvt-Mg{( zvbAe2ICtZDrOe1*N#ik6RQpe7_K|9p(trO^Q>ZR}s`K}c9vmAT94+ivNhZ^UurIb3 z3o+{ho>(X;%R@p|3AH+BaClY!@aEn9qj73a_E)}_3b{ADZY-%bykJTt2uTdV1?%hZ$05Q0>e`o(h_=k(TcJ~h#x0GKU zV+J8S3s9`K9P6-gxG*pRZQDOMP<3>8Hn;v{*Ok@lRMii^8fn>jdG+>HOOL+3YOy(b z%@OeL%Hr0+;o`dCBI%IiteUCicg^?sxmB8v98Y&L30S3VUFT+YF zTO<3g>#w$dPx84mT5q@rn`wYl-%wdQ6qk2Z{Q*B0kAOS|D&S|RhJTFqAel96<(4Cu z%}`FgoBAulfcC#l!HP;hly4kV0bQ<6)#ZEo6Nk#R3G-T4=EXh-3{6 z<#1Um_z-Ds|8(ph^xOdI4|W2dg>6Nqe>xEq`CZa<_al+ygg>MD9X+k>c@_GCAcx7f zcKO=DZHp(gh-Z}1pZREwJ(pLeO{#aX1{}b>TRBt^ZH&Ly_M8FAp*21imgw&XSm>A_ z?yoLB%;w8?C3=h}VK)wr^usd@VCeyYgTao$sK_0xzWioyjrHGE#Bq`;zYA4Ayl^D2 zs*<7D-oK57USU&}#wfCSC7=daw9)N_fhdx8RFR$3^T_t<;hoW;{wO*o05ei@)h3it z#;z-ORb`OE$lkK;CY5>g>hY@ej$VDJM){HI<=0d#hW-l%e*8ygeDuHXeQ5X5u3g{z zaUnfx#e>_vJ^#i3ykOl;zr1+E`~MpJkz|o{v{OsZWEYgf1jc5X9-|$V z`TGY?zW1v!VNs^eNMTQLBv%4hy(`Zz)4MVK zBMf-iGRnmKNIzowQ<&hZ`XhGX_QqQB; z9IDky%FiD-7t$NC19IJV_YaJ|Y`G2)EuSde5n`+X$ebGGvul(ud+HxPQKL$-IL5!p z!dUvM6UXPpGA1T66SHDD7Y|%9FnHwvC?go%H#Cv^*Y_uQ zv&5eie*uue5QR^|diOs3Q|}|6{lnGQ-Sg#}KGrh4;fk*HH(vP3!xyw)_UP~j)?K^e z^wXaGeptE8AEo}ulL$7*cF-!>4nqAUW!glu5V_d_sY@ZK(SF#WqlKMA5-}%dtjAn) z&*RTV>nH!#@ey96ZX$h1bGm4&>Mt@r@4H0DuG$cVo8GiJB5BLi?l>@BCbyK;ao|uX zQRc6X14qi_(!R;ZZGH*=76oi}kMKNDX_2j1;R%0tYoUL*L>VFHN`tjM6^ppShS9<> z2M|k&G&a)TwSJ{7mXS!*5{3icc_K(Oi6w`Ii!aupOGF*3Q8^L(?mzr19q_95+qgF< z%?#U|JBM}@qej$@LUsLGt?&2Ty71qtm8Wi5`fc{zx&*(RXT31uKYS~?OO$kL*!$G3{;Y^vWZgKLL`c$^1)#)p5O%2-WPTl zi)5iEwjLR@y}PcgY5>|XBYJ8u*wi2H@kH?3Q*Qk#sI3q!q&8y;DJ+pcptV@Mz@dOZd`TVWf!dJy$FA< zU0dp9|JC!W@(-dTqZbaH5g;lTR(Ttu;;`=NXg}^)`&mu3J+!4IDKz8hve@!>z%bY_pg|B?R(*D)Fe diff --git a/src/deps/contracts/fee_estimate_impersonating.yul.zbin b/src/deps/contracts/fee_estimate_impersonating.yul.zbin index d64c6933e7ac2bfdb8a8bd11edbc057e2f8a1051..c7a86df1991f7360b129e4ca1dbadbe09062cea5 100644 GIT binary patch literal 68576 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 literal 78944 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 ejt>vL|EkZtcam!y48FAvgaJb5-!<0-E1t#JCx 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 DewD4R diff --git a/src/deps/contracts/playground_batch.yul.zbin b/src/deps/contracts/playground_batch.yul.zbin index bdaf4f66a77bd26825a53392abdaa25c8ed13d33..ddf594bde1206051096c689127fb6ff915b1e0b8 100644 GIT binary patch literal 69024 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%0DuU~)CORoO)-=;5l%lpaCs{C7c zYp!x8au(KT|Ii6zRqG!et(tAFT3x;Vg00m7EZBN&;b39s{*jnUiM2U$aASTXzqO|a z>>10@mmLSgT__L^aEY*QIPB}+IWRO-*eS&~;cZu6f3FrO2g0Vs_{Jtyd6p|bAuVd3 zdRYcolt0|p+n*oVKa@a4l;4xzIWjPGXk%e;xD*Wbs8s#!8K}-e5&XgYp}l$NnxS+1 z2lp3I9pw)dh6_Un3cEHQ>d)`(+i4rUEWazf?9fPII4mfpZH_#5T~)pPU00REN)bjy z!$%or^wJvn*Y*$epHkR6IC3Z~KY*U0fxTdv@QT7ve_>BJJec1Zqd-;ou>Ljjod~TJ z8nM0V4AIl@s>0AfaqRThrgOX3oPPSca4rLwE+?uUg&UxFB>iM@;%{I=h;r7DF2&pHsyqnjCm+cwYc}1!5&3x%wXH*9= zA@}{IDMkBb?R&fxaj;8k#Q*Ni4|f-ax`n&WjOWo?_t3z|z|Mg^k!Lb;5JVgad-{fk zNsDak+R=6C=1u3le8(#$R<4!e%sW!8Nctu6qq=2uQa>;0g97#U2^1}frpF9kc#UAjmV<_K03~SXlfEzuk{!+L6eBYH-OH`-dZ-(deTwc9?)!d_R zsG4n#UULNezrN5jFjVLsDv%CNj>@lY0FL%tS=|744GtFi*+GHezzet1X*-tr$+oNQ z-;;cHl$JvesR29ohYqoeRgmE z713+CKZXiD`}=o22i>5l{={GQa8oT6m#nn0G~v*2W!ppLt{AMLfJ%Us!$qyh?RIcS zxVJDoobN3#f2=71h(9m%@BCUkCH_{b{{d<9nk|4;=wz;uGG=*w1Wf zp#zuqmA+2+`vRS?g1dWos+lOUdCi&d%!r0BhbQy05QN;^x3@2HK>MnTkJ)+oz68Yh zEBuau;l2?}ap6e-fdk>5fl`$-P@TNyU=8~2D;$V7n0VW&`thXU(3%SF#qPe|-BdJx zS)xMX)#}xdDu8GsyYu~}NZK>ZU=p>8ufw|!6<^ByH8R*&ijD~-hKsKLggi>vcjdmS z0+1g*Shn7z5|3UzR<+#GtH*2PAE};yP1S7Z|FHk3uRHV8|9#i}`;RW$_t;PK>ACAZ z(fh+Cr~J**?i-)EVEYF?3;9TjNV*g#_*v}7h50>w@X*UD$axCWw`>y_C-sUD^oG;=r!X~>)d|Qu9zE= zYrem)f8k ze{cR^_fX%!P~XU*a|#8_Il-|gTAE*)ZlOf^P(;Ov>Uu<^#EmG;k2w|!Aj%&}1YVN) z6ezNdmOLL=^>|qFI^oYEf71LLoeT$u`bt7fcRl#a;NxF?&Bp8B{nt0%H)m-370b5W zu=Rn%=PkJOp`j0UU%T#%)1UtF1fV4en3?Z^+M^J{NFV&fk^J64iHOo=Tg8I~#7|Dzv-Ws;+$!J)z_*2YJPll&um-XlMu4Kme!RHj<~ zj)P%wLl&SSGTX#VE@T2%m1TVzI$`W7aFP+KpvH;R%CItOyo7y$gfJ= z8g(Cidg)_+jWYXc_}|!bQuViq*Jnt*fYV1Nx=LFfeZ2Yvqzd#O-qm_j3_je`Wbw^A z7d@FwD}C=1Hx{0)%5Q0AjlX~X<2zqowaCI-svF0Jx8yc}V-X`CCJ&T65cRF2B`8`O z!3tD?Jn+QQ6gPcv-<4GzL<_UTP7Q>Y^+js{uqv!R;9tOY##~c|Z}TTw9vOMje@5i8 zuxCPFDwxFxZ4lo56TO-!yXqg8y!fQ5`7izZQ@2$s@Nd7m_~vT)cWv2zafSTQrkC*F z8k!#2bo(3`I5R41(@LMOebx5YoVVf94P84nyyDXHHg%nkKR0hKmbmWfB~|$s(TS0* zgJ*_=BST^PS>TZV!qASAHP6fYs>e5WUQwMz;Sh*@DP4#ucCYGRPb@xgLO$ZO@L(my|i25@cx}UAxk!oo(oD}%KV+L!F&|)*_-b_1S`$!r@RnV0_W-7x3xaJ m?U840e9s3ie%Y7bf6}29XMN{0xBjT{YmXdy`(wcg5B(3NoQx&_ literal 79456 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 X7ry4XPrmXCxsm_-((j!9@!$G?YD!Qw diff --git a/src/deps/contracts/proved_batch.yul.zbin b/src/deps/contracts/proved_batch.yul.zbin index 9d68bf2e124e173df565959b23bff291f989fa27..4c9c973229f52e48748c4e9ced9e254d0b791fb3 100644 GIT binary patch literal 68256 zcmeHw34C2uo&ULSyEjRjq-m2TZAx#ZMMMW}14WA>?{%RRDh;$O>L~BgzP6!lk|t?s zS%x48vWSQa4B!}Czy%#d#Q_&m#*ty1MI9a2(K-swIL?f_|8eX8`&-U^@7}j%c_})d zc^~M_x#yhUIp?>Z-&wAS8T!Rcw?6TRJEjYdYB0R<|wb{y0FiAm54c_)T}xm=ld@!^m

8z$-qUkYBzf{xXnm%3A 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 literal 79008 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 B-)R5< diff --git a/src/deps/contracts/proved_batch_impersonating.yul.zbin b/src/deps/contracts/proved_batch_impersonating.yul.zbin index b90c9b81b982ef0321f045d4822d6b23e737448d..255c957e38d2d18bbe7c037bd83778a7850d40a6 100644 GIT binary patch literal 67552 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 literal 79648 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%0DZoEj+@Pm@H0E zpO1gZKR-b8i{H0B7w4c$%wI}>zSw(Q+DH7=m2<@`ReIki_Id7oVh>w; z%k8CfWS`I*wX@6w?YIW+<4O7-66bH?b|(-v-SAu|c#?BO)?SBwS{A%b7d&>~yP-|s z$?7>#yKYB!F4p^xIDf$o)$>Wn2R%^uyHD=djo!yYlqB&pxsPW)(sJMH8Z!dDLK;fq z)|-_tubmiQdhz>s8o#IgyTX@#e?(qkzt*UH^5gbI!{df_gxWj)wiG$OZF=Rnf7$fn zp}i#dA7`h!Dz|AL1-qtVH>w>AcLvLKEoc2g`{RKWJPu4V9(M{J{Xy7kJ)mwIKM9Zz zx$h4p@|6y-FJ!%d`m7K9Vd=-pf3rr)Bk$$e_;6-~_>cVM;HJtwDVc1M^2anDoQNO$ zyJGu}hUvHcomQXW#-ZoYxX^1az__=eKkPHT+ofL=u>FYJqy-PKm&uOgdr^P~Y~Ljf zw-~SI3Cj0>tM%7v`kj(qx(MSfN4v=$?{B7fJUT}~^R@FkFva5~@aey5n#X(P6pxon z;PYRnc)TP&|6q#8OU%!I{xpx*J;mcC@wsA}$6G$J@%(e*^313GeUC9|^2ndxKz-6z zuSwBYubEzbm6WIcrE&PN{Rq!Tm~P0i&P>sH6P`F8gcDt6)>f+z;2$P^REgxL+p-JJ3{=$-bbs) z=e>`DUV329RNhCk=N2^XQ15(2xL;ELrSAWa^nT5cRX?ZWeN5zqrC;V}-oJMrkbR(Y zfccW_L(V_CxM)&dOqdSo`$kc^_=|e$bd>gGg6_S)n&R;&-VvSO$ESEaibq7p`_vSV z*BKwr|C1>mFCj<#(iD%kI5EFJp5pQ7JV0dq{8vx$cuD(ms_i|pmm>4?#-?|E-ZbwI zyuWT>evrf7N2}X^-bZWOe+Zu@-UEos^~ilC@pGF;sCWF{>UziT4fRe;zxn4^pO=4r zSU&+5>OTtYrRS@mU*!B>ulH8H z2gUn3?03M6pPoO`xC4&02%No}1x|gxD?G;$-a9hU^MkRt#f0JVjy1T{PSp3G5Wv#= zBpf*pgrwln;qzV;;8MFz(-S^-UE#+l-5;FTKCl@yC~>Z%+XpsxfpDtq1DnB9-2ZRd zK5#zxIw~(dt$d!kZ#hbPIO%_xpg&~7_I@TlKmWpMp5Ijamy-6>RQv0a>vz#K<8!M0 zp9y;L{(Fk&mmKdGQ#{@x^dI4O|HLUCZ(d@&-<{&|lJxn!DIPDee*W)F^LW2Ez2kY` zo#OG5``_Q6c zWgn&R0wb|~l$i%RitYL-`#w%AZtE|en7!AsWpeDjmW!*~do7nAi}qgoH<#i#DBo`| z(KvLH?vrxzIStT#)IP5lXHSlol#?e+@p#GkJ-6O?vY+*TliwGPte+46hVuw*lOYFj z?xsIT#BYC}!f%I;MSdgnO!9u`_p5pu=j%CrzoC4cr2EOXi|f(h zWXq9yd_C3s;OX8cPW3(`iO&;czu~`hg8Y15oS*BS|5-n=`bX_go8bP_KX;PhtH&o) zJ^^{{ubO1|l5~)uJMUW)gKxs?m9z(@+8>fU5AfwFp5Ijavy$|ch$s79_2!3t1>4>7 z9;|meo?>_NdqUnFdQQhN@?Ma&tCH(hcmFcUb|am$=$S&hDtZ2l_+&E2OY&V(Ur)B3 znjA052aing{E~5;$7+vv#OLLc=b65EY>ac%`?Tb|{(g$)m5?9aKOGz6OgjGR(8W=Y zH$gle^?1p16@OQI-Hv*^Bt3qi_IQ)V&(k%|RPk35Z~rh&c$=>I{NohOClN=kcW!Oc z=xwUjXS(JyU3xbWr}DluMRYJ-<4h25lP*u|(A}huH&uK)K|CHY-%b}@B<1&1;qBQP z=ePQ`vG;N(D8G-IUz;IMqvv8a)RnJ%uhoS8F$q5M_tqYV;&K#+KVrUJn3&g|I^&rM z`Vo@*-h|)6yR(7u==|}!tDmRv-d*QBg_+)S6y816&rx{y2%PYk#LrQfu9Ch7Rg(9h z^xU*@-7GVb$WlDb$XW0y?F0WSucfm+&TBAmG4^{r1v9zFCwJ(WBk2{dB@uO z2l_sN{T_=sR^Hc8`JDD%#9Vu>&pD>vi)ddrIr5@?O?7$E{>R6#yr6TM+pFsMbBUDn3&veziyJ&@wF-I`1WIb9e1a!jHM zF+%?n-Zv%R+kZ!G{Y~Hd!ab$mvgc*#epsZx6Q;jIX3KGrqs6vtJo^&m_Ug_splZ}?umkZ;ft91$IOB)>Bj;1)Of&R76@jrId3mn~AgPFL?0%JIEI z^KiFNiTMilF_ou$Zww{!ol4vfdmr+b6uU8?fg{ z`hBsyemBg1N30;IfL<6sa$mOpT3$bNpy$PNe19emujslhlXb)W<7OgqFT8)8z8khO zTt5s}`(9f!$7g(Y;O-=zN2~5*f`YDt$g#-xbz<+W`>$J}-wCq!7vMXPSZDurweQ`j zyvJ_edp?Tq;*fp%y56eqvHP#f75O}jG0E@EyjA>3*|#!XhVNe=-S=j|r}7=f0Ce&a zL*MHZezg9qK+B6avr>PmmO9gO(a%9+ad9#@6mdz5nh zt~%(C(zr*qxRRg3C$CifV8;nSA1loa>R9G!n`#+gYPFbAm_%xpSAoW z_a!(E)8{xjh<1EW9?5UwlbpEqs~V;+-h4^zB^@Pv+mUo0{JCi)NUNhizp1IV4|a{jee-)XxMfk)e; z;WD*9SDYl@rN{T3AS)NjJ^_o*d}I9NJ^2*>A~?wIUQKk2bPv*Cf4SFJX$`aS$!>TFDv##8;}7g=vbzkee+ipJjQnxA_n>M|3l#N zueIZ;UNerbdQ1I%ynfN|67M8ElQqDS>Z=~e8{pIGC;r|Q(qac!^wVIdpYR>wj#n!G zRlZlPc5^1y-hPjm^i3Cy6V*4=5A+F-?_0ctdMnmXM1RELc)hl#@5C^^8f~B9?<#jd z-pl;44kE`#ffus-`9AgquV_qeFSrb}fcg1v`0aWyK96=ia!~QiSFv?59k?mK1Uy^) zXdK~N=(jq0GQ)P5cO&#R^aSWz^`zBNWIU?1C3sxdr?{J|F4*vkR6hemXt z6gfw7LiElE>Ei|WRrsImI7@l2u=QSelV3+ZC4y+$1w6BzI7w%O0JWcG5h0AoG zjD4-x|B#O?r*g~5euKbTCHG{zuG;_NKf=A%WdASttjZ;_1IhlsA z_zwcMb3Ui_1LTul!9L=M#{Jj$xUi(yj_vro+BX5| zbzXE{uCe!>o67tcZuca{6Ch ze#{);8*+Lf$XxKI-^a{=zr;S~dJDm0QZDT}&XV;?elN`6bKcx8XXHJ=W$--EKH6x% zN4jt3?}atsZ*Uy8lNP>M=}F>Q48T-;XT@KkdTp}qZ3xgG(W8BT5@gJ2``-0b-!q&T zuipC;#2F+{tlc@`cqrMkG+#Tv<KeGe<)9no$pAH9auO7cI{Nu^t z_l3RH`F-KGW0T*L>*QZQLAS|ehY%1==uoH^%>Lk?3_mnoB`gS6f*`_`CKoIL$!)OMbg>MY{2CK`eQ##_IUEoWDbk}=D1Ia zUkqL??FaF1=s8HAxzdlOJK@jaadOKfE|)z?%h|t#`ocd>PS1_xiq3wlANYgTFB8=6 z-+S2Q@4OxNC3{Xp&l{Kq$N83yQ>;CXInsGNt^M~U`*##i68AKnPK&Nbm&PyoJQXld z^PJ0Zhn3EOKW%UQw0-1HJnl`*pCmu&ya&z?WSO22KVo`7oN2klnX?(@~9|v-W%I%bjQ>{TRHV+jQd5#r}*)V(?$H^zZvZ?zcl>|In|@@NoqV@@CL+k`^vdHJFdt@<6^u= z$B&mfPaNwO{>2~9qxEt`?oPM7C&5qjs&e1T`-Q*2j9E@%eo?!--hImf=7Dt${a-XM zN?ZTXZ~bkPi_ibl{x;a5Y^Q_1K(2UC0!}mhplb0C+ogzB1R~E_KR`%8K#=_Ii{+DC zxAwf&XM3J{%20jhV5~lfTI=J%a`o7>_X!`9VekKVvh4ju>%`8bCHXkO3OzQ#Dan12Gbg91d+NzdAId-td7f2*tZCg_0kUCxKNIGOBC|83RF{kLbVovQ6J+AedR+Nmq( zIg-y7$!;d`6CD@u@&1Pl9^U6<5x-5;3uGQruL%1Vu}kmmsMkaNxx!~-?t02cKO1CR zwf`%2bsOh9Zb0AZwsDvdI(NwZtKAdIA-qa(;-Vid1rOu979iS`_dcw=e{;9mm)JLg zUr@c9=2@{XF>i)9VYeE*U_xlF5ov-Vp`(kGW&42N)WuG}B@k#&*#4aWXFmdSH#cjx7IWP97$)Sk(P4{sHPFLW= zXVSS`Nx;43U93amlTX>s9b6(=85M5WTp$_4M8O#iytq3F)}dC;0Yu z%DD^A)AJ-%-w#{-eATC&?t0ocE?%SkJxls@@yo(>tEx{yZtO2J^qw8oZ^@Zb-@hYV zA30BL*S834Fy0(JubgE%_1}SW+}Lj~0p;xzI+61uow*jq1J3uBDE~AoUx9!2-?-;G zkgH2TCtPlvla*i3jqx?)Y>~#r`6cRaNvF;$n|IP|MaD7WZFShaya+&(u#Bh_`5xbh?^;yLKKosP|xbwtCeLvyGoYk9&bI758 zhv^;dKWDDfXv-XIFLq&z+z) zTBnrn2v__&R-dY$7|YH2IQ2WhS>_{e6#OW9;v_l0m(}x*uv=g!__^|W@k`}Zzq@7T zx176P+nvkp$j(81W6CG%dzLC^Y<_lw$Q=ux`l;&J1L$y>z*RYisdfhQJ<9d{RKcUE z_}MD=eMR;;i-C8C_?Y4rC*nyeykp55yTIT4eK5;Ms4*$$w-Wa)`*&kp!uMK@le|;X z_8bX@om78|_qWqL-rr2|cy!*I-hrN zeUxMUdzzn*$LmK^^u;Lje-G&k(eLQTzMsePIXzx)@Mhxhye9>o_oTuz z484WL!@JRoX`I}!=qszg!tdN49bE5Cf$P0VxU4>3y-D@yCV|J|FS}axX}91>^`DD< zKI6%@mwmpC>tJH?p3O$3Q#qGKbeQLP=S<&`><>riJFas0liruYkMFbm2>gIAE&f@KqaFFTrW1aDb8OwoE3kZ8)_ZMYy~`>1 zs&`+|G~AqC;5=`I$bW&WqW?1I zsr*mCcb@8RtGBeC`d86E!-aD|iqFtLk?@CV{z2=PcXgi+d;(tMi2vPxYhLq#FV4@a zf8D*nxf}C(TlMl9e))~m4tQbz{7BwazkGaLl%F8yWnA^kV?WA%`AWTj=*HG7y6Ts= z`&R5{iQdNYeXzXnv-d!a^UJq0JgI(pop+Y}@j+p{KR$WhCClesI-jz1FM8U~tzIts z?6`jSbJ(Xd9Vhnb#_IPCZ9*ST!VfQcKjMdv*@32xoe=TE+j~=DegP0byV74}pH2F# zvj2{a=iiqSf4I-eOXxx2n^-%zt#HvSM`c||@!Zm@jH1i665CI0~I9ggQi z?#1K!R4n{{e~O;C-_ARf$0ED$MYLs(-lEyj9et%gP#F6s7%2kO25?}K=z<*ezadD3U#Y?&*4o7LFAIN8t7dhPf0lgI5BlKnC zZt$D;$@xh*NIHnFa`_@Xi*kKISQUDr4^f(es;5mfMZlxTRz70dY;o z(uL{qIz#6#0j$Q29Y^E2RvthOya4voZI~b4&zZ3QEa?~dQw-IE(Wc7pqy9kuLsL9X za$dhZA2_*m@_+h#Aov3;IjMa2KuvytQHdW!APl#R$RXJu`5#W%SA7`r7JMA>FUHPy zq{pMAUsHGg1i?#k!WixsuP&**63TabE<@ydSGI-ZYuEjvr~HpdduVs|Yd|mNNiS3Q zljjHjK_BF{KceMD7CL`}`W%1m`h@BMSI+f7PK*8saz)WQxQ_z;cYPLM zzl7y!-Yll}*k82ck<0h7{S@H&DCKMYSBjqZ$6VDH&yjN;*oTOnkzd9AuIGL${bl3* z`F{p`4tl!lUwHnsk~02g#D_62??zJ`#7YBlzo9?`Z}mP zeUHF6T~Rtl0jDc;Y3*Ja-?&{9^0#!|r}O|lFZZ)3zvNQ*<$wEo3S`gF`q6z&#An~I zad_a5_d|}pFE&YbL-IRcAIJDT7=Nnl2BJ^!iH#@v4^HuTN&8`{?V{xT{$gVD^FJnh z4-7SQuUpqMmOdcYh%eo|o_j2mfGqqQmw?Hw8}UlwfIv3fe^u ztejR5&9@+zc9f#ocT7D|X`sHN}){o8?}p?)B1`*5^M<`)<4jiwv;``T!o(}C#n=3sb7FjO86 zwwEstHkO7rZ9O&6N^nvh`R|J3M{73TyQFq`_STV_?X$P`efFPEcdq~G@h^VM>t6fk zk3W(fJ7hk-;qR__?u)Mc#aDB$zV3YkHQTq{+E=H1q-Ocy+Qp{zoZ1yy&$)Vd&-!5m zs#1UDJ>^ZihSTYD)2_imki^W|9{$0sP0Js=&H5A|=^UK-vt zm_Suneo1N5@Q%T~Ysv#d(Qe>euld`yqc#bJ{STD(URDBo4xY7rU{?kIVfkQrs64p4 zym`&u?WN25H`zfqmNo|)_YRkbg0f=TmdJDS6}89Td_^^^RQj-Tu$7LXy;L`Ho_VTu1XrQzywgR@R>Q7^;=i6N4glJ6}BrIpN z2LLy?qCB`GM1X~Q`S>EPW6Qhil&`2${(_Y9GfG3jKzT42*tL=Q3=DSp;EwHEEPx^W zDeYhJ%_p|nx(z;K_RS@i*Ct?Pi(oVOq8bQm&syJo^2sZMfzn{e9AU zU0oYw=ZyzzR&a2nt=7-EHKjjx{9peQ$6jjo z6EA#UG&x>>#z%o+UGujKQepkzj@|v6%bV8=jjSK+-&8(TTWu)~tw#+hv6+z`(RO&p zrXAZt%V~HImT@?^qoEQOLbo^Mk- zwAJZ523PkFZras998(V_*`ICK(DS-ik3{-kSKhv5ILXYB@(tT|RP;te{U3g9v1Yx) zukEW-K2oQAv`%?2yr-8|0Ag-k|7HE-;U6sT+|@r=-dufkjM)LzqWSgnOhJGtnoX1)j{y*s`4c}2FvRQ%OoQO>Pnk} zRb?s9ZQa4v(om8rD(!m)2Flyn00U#gO1IL**2sV7+$-(h)t-Z8*hJe&^$b+CGZ$2A z6v@N<&L6_^ZBLosK%M;++G9!AvK7k<8tI$<+yv#(v#~#sTS=n*?~qd>?T7N-9V$Sp z)k#6SWdGpdv1)C?yyjI!vA+R1*+09s4WAke?b@`dJY=QB`0_ZOFWY`;*j=?h2FsW1 z+P?XBFpcW7EFNgCr$Un5u8C&s9jdLHFCC~OfFqq%!(~0^NTj*_)3JZha|5V5xD5C# zZ7DN-cSlQ&xuEdQ&&PA>reYc(s-H2^y6#tCEC^zlWb0O}+p%R)o$jjWzhbn>?$@N# zF4a3<9U9uc%B}rdSSXS)Pe`d4 zL94J^s`OdfSoyo!UskUK)FBpqcx!2U6v^9a$X@DiXlrfv%J4vc6rJNh7^-ab#+6aV z&dYb!WWdtUo~rE{$~=7KXw74&=(#~FRfY} z=WoAs`;N=E!wwII_YRDw{&hVYdM`fxytQjD-mvbR>RUkD)%fS(t4C7&i=m7js_mXK zrJXd$6(IG1x!67yf>zlQT+W!$r%Z`L>s^9E=** zL87Lk6`z#to1S4gInts9`uBb3ez=<03u{L0n_*DFIfMOM`mt}azfX5Q z5!k=0J>%^$$zXuo4`J0iANi^GkwnLP9fMJ;iAMbQ#$A|llx{355&FKP%n!m{S99W5tU9%wyH@;z0 zWF@QAZo74~N^T{q?bfkMqRL-ww;rsLi}yNj{glnG;NPNv&E_GV2Pz$BE2ccLU%jN% zKS(B*P*x~8q`|uG)FQ61VYoEN4!nvYi;eVG&0lVbWh4^yg!%SwJRT&P#F7Jp<>%?p z6{d*QNKXX6_l57!L9JRps#B}HcTZ56Il`ou4Qwk%jhtXg?i{^m0azE!AI0cAVu*w;7|QuC*t4Tu*|`fyEA zJ+7ax-`RdstUb)jag}Ohy!wUDtx;;si~s!v=hmw5UqAn&n`@Qd`HBsHv~JVfAJnR& zW-u&cl@GNlC(3^O?RTD$$ciW1ZmDfNwB6FT8XN)7%n%v4q#-28f>4@1fy(}JK|G~D2seZ0$%R~8_XkW3<;rT9a8#mV!vnA{W!f976!5Eu=75aYF%Qw98 z?9~^q?&)29=EY~P?KuyBu3Hy&Z}wd|zb5^`yD@yuz^MVeZb8>eu!7sm*eI?EW8San zuk9b%bZKo8gTWyBCmJZLfLHUcL-TeoDTS0!y=oo*@UN=3^23dH6s&}6lAE?x?;y-A z)ml8%B67a0w0$oahvVlQC=6TI|Ko#)I`2Qb{~tzf8(93hFP!vyfAtr?_ Od*+dkZ5?^}!2btx?eZW1 diff --git a/src/deps/contracts/secp256k1VERIFY.yul.zbin b/src/deps/contracts/secp256k1VERIFY.yul.zbin index 9d9ec8ec313df1ad1644c4c9d187de492de3dba2..9674cdddb1c403b064b15ea480a31a171d4edec1 100644 GIT binary patch literal 28192 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 Q_uq5DozLF9`1p7JKd`%4F8}}l diff --git a/src/deps/system_contracts.rs b/src/deps/system_contracts.rs index 0dddd2d6..53c74b0a 100644 --- a/src/deps/system_contracts.rs +++ b/src/deps/system_contracts.rs @@ -16,12 +16,24 @@ pub const ECADD_PRECOMPILE_ADDRESS: Address = H160([ 0x00, 0x00, 0x00, 0x06, ]); +/// The `ecAddG2` system contract address. +pub const ECADD_G2_PRECOMPILE_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0A, +]); + /// The `ecMul` system contract address. pub const ECMUL_PRECOMPILE_ADDRESS: Address = H160([ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, ]); +/// The `ecMulG2` system contract address. +pub const ECMUL_G2_PRECOMPILE_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0B, +]); + /// The `ecPairing` system contract address. pub const ECPAIRING_PRECOMPILE_ADDRESS: Address = H160([ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -150,11 +162,21 @@ pub static COMPILED_IN_SYSTEM_CONTRACTS: Lazy> = Lazy::new ECADD_PRECOMPILE_ADDRESS, include_bytes!("contracts/EcAdd.yul.zbin").to_vec(), ), + ( + "ECADD_G2_PRECOMPILE_ADDRESS", + ECADD_G2_PRECOMPILE_ADDRESS, + include_bytes!("contracts/EcAddG2.yul.zbin").to_vec(), + ), ( "ECMUL_PRECOMPILE_ADDRESS", ECMUL_PRECOMPILE_ADDRESS, include_bytes!("contracts/EcMul.yul.zbin").to_vec(), ), + ( + "ECMUL_G2_PRECOMPILE_ADDRESS", + ECMUL_G2_PRECOMPILE_ADDRESS, + include_bytes!("contracts/EcMulG2.yul.zbin").to_vec(), + ), ( "ECPAIRING_PRECOMPILE_ADDRESS", ECPAIRING_PRECOMPILE_ADDRESS,