From 24f6c9a99a0e1d84c3c399a5bea52c85ab0b07a8 Mon Sep 17 00:00:00 2001 From: wu-leilei Date: Thu, 2 Nov 2023 14:19:40 +0800 Subject: [PATCH] Update to 3.0.2 --- nodejs-extend.spec | 7 +- test-index.js | 637 --------------------------------------------- v3.0.0.tar.gz | Bin 9021 -> 0 bytes v3.0.2.tar.gz | Bin 0 -> 9731 bytes 4 files changed, 4 insertions(+), 640 deletions(-) delete mode 100644 test-index.js delete mode 100644 v3.0.0.tar.gz create mode 100644 v3.0.2.tar.gz diff --git a/nodejs-extend.spec b/nodejs-extend.spec index 5f97df3..c0d3f10 100644 --- a/nodejs-extend.spec +++ b/nodejs-extend.spec @@ -2,13 +2,12 @@ %global enable_tests 1 %global barename extend Name: nodejs-extend -Version: 3.0.0 +Version: 3.0.2 Release: 1 Summary: Port of jQuery.extend for node.js and the browser License: MIT URL: https://github.com/justmoon/node-extend Source0: https://github.com/justmoon/node-extend/archive/v%{version}.tar.gz -Source1: test-index.js BuildArch: noarch ExclusiveArch: %{nodejs_arches} noarch ExclusiveArch: %{ix86} x86_64 %{arm} noarch @@ -22,7 +21,6 @@ as you expect. It is simple, tried and true. %prep %autosetup -n node-extend-%{version} -install -D -p -m0644 %{SOURCE1} test/index.js rm -rf node_modules/ %nodejs_fixdep --caret @@ -46,5 +44,8 @@ node test/index.js %{nodejs_sitelib}/extend/ %changelog +* Wed Nov 01 2023 wulei - 3.0.2-1 +- Update to 3.0.2 + * Thu Aug 20 2020 Anan Fu - 3.0.0-1 - package init diff --git a/test-index.js b/test-index.js deleted file mode 100644 index cb4117f..0000000 --- a/test-index.js +++ /dev/null @@ -1,637 +0,0 @@ -'use strict'; - -var extend = require('../index'); -var test = require('tape'); - -var str = 'me a test'; -var integer = 10; -var arr = [1, 'what', new Date(81, 8, 4)]; -var date = new Date(81, 4, 13); - -var Foo = function () {}; - -var obj = { - str: str, - integer: integer, - arr: arr, - date: date, - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() -}; - -var deep = { - ori: obj, - layer: { - integer: 10, - str: 'str', - date: new Date(84, 5, 12), - arr: [101, 'dude', new Date(82, 10, 4)], - deep: { - str: obj.str, - integer: integer, - arr: obj.arr, - date: new Date(81, 7, 4) - } - } -}; - -test('missing arguments', function (t) { - t.deepEqual(extend(undefined, { a: 1 }), { a: 1 }, 'missing first argument is second argument'); - t.deepEqual(extend({ a: 1 }), { a: 1 }, 'missing second argument is first argument'); - t.deepEqual(extend(true, undefined, { a: 1 }), { a: 1 }, 'deep: missing first argument is second argument'); - t.deepEqual(extend(true, { a: 1 }), { a: 1 }, 'deep: missing second argument is first argument'); - t.deepEqual(extend(), {}, 'no arguments is object'); - t.end(); -}); - -test('merge string with string', function (t) { - var ori = 'what u gonna say'; - var target = extend(ori, str); - var expectedTarget = { - 0: 'm', - 1: 'e', - 2: ' ', - 3: 'a', - 4: ' ', - 5: 't', - 6: 'e', - 7: 's', - 8: 't' - }; - - t.equal(ori, 'what u gonna say', 'original string 1 is unchanged'); - t.equal(str, 'me a test', 'original string 2 is unchanged'); - t.deepEqual(target, expectedTarget, 'string + string is merged object form of string'); - t.end(); -}); - -test('merge string with number', function (t) { - var ori = 'what u gonna say'; - var target = extend(ori, 10); - - t.equal(ori, 'what u gonna say', 'original string is unchanged'); - t.deepEqual(target, {}, 'string + number is empty object'); - - t.end(); -}); - -test('merge string with array', function (t) { - var ori = 'what u gonna say'; - var target = extend(ori, arr); - - t.equal(ori, 'what u gonna say', 'original string is unchanged'); - t.deepEqual(arr, [1, 'what', new Date(81, 8, 4)], 'array is unchanged'); - t.deepEqual(target, { - 0: 1, - 1: 'what', - 2: new Date(81, 8, 4) - }, 'string + array is array'); - t.end(); -}); - -test('merge string with date', function (t) { - var ori = 'what u gonna say'; - var target = extend(ori, date); - - var testDate = new Date(81, 4, 13); - t.equal(ori, 'what u gonna say', 'original string is unchanged'); - t.deepEqual(date, testDate, 'date is unchanged'); - t.deepEqual(target, testDate, 'string + date is date'); - t.end(); -}); - -test('merge string with obj', function (t) { - var ori = 'what u gonna say'; - var target = extend(ori, obj); - - t.equal(ori, 'what u gonna say', 'original string is unchanged'); - var testObj = { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }; - t.deepEqual(obj, testObj, 'original obj is unchanged'); - t.deepEqual(target, testObj, 'string + obj is obj'); - t.end(); -}); - -test('merge number with string', function (t) { - var ori = 20; - var target = extend(ori, str); - - t.equal(ori, 20, 'number is unchanged'); - t.equal(str, 'me a test', 'string is unchanged'); - t.deepEqual(target, { - 0: 'm', - 1: 'e', - 2: ' ', - 3: 'a', - 4: ' ', - 5: 't', - 6: 'e', - 7: 's', - 8: 't' - }, 'number + string is object form of string'); - t.end(); -}); - -test('merge number with number', function (t) { - t.deepEqual(extend(20, 10), {}, 'number + number is empty object'); - t.end(); -}); - -test('merge number with array', function (t) { - var target = extend(20, arr); - - t.deepEqual(arr, [1, 'what', new Date(81, 8, 4)], 'array is unchanged'); - t.deepEqual(target, { - 0: 1, - 1: 'what', - 2: new Date(81, 8, 4) - }, 'number + arr is object with array contents'); - t.end(); -}); - -test('merge number with date', function (t) { - var target = extend(20, date); - var testDate = new Date(81, 4, 13); - - t.deepEqual(date, testDate, 'original date is unchanged'); - t.deepEqual(target, testDate, 'number + date is date'); - t.end(); -}); - -test('merge number with object', function (t) { - var target = extend(20, obj); - var testObj = { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }; - - t.deepEqual(obj, testObj, 'obj is unchanged'); - t.deepEqual(target, testObj, 'number + obj is obj'); - t.end(); -}); - -test('merge array with string', function (t) { - var ori = [1, 2, 3, 4, 5, 6]; - var target = extend(ori, str); - - t.deepEqual(ori, str.split(''), 'array is changed to be an array of string chars'); - t.equal(str, 'me a test', 'string is unchanged'); - t.deepEqual(target, { - 0: 'm', - 1: 'e', - 2: ' ', - 3: 'a', - 4: ' ', - 5: 't', - 6: 'e', - 7: 's', - 8: 't' - }, 'array + string is object form of string'); - t.end(); -}); - -test('merge array with number', function (t) { - var ori = [1, 2, 3, 4, 5, 6]; - var target = extend(ori, 10); - - t.deepEqual(ori, [1, 2, 3, 4, 5, 6], 'array is unchanged'); - t.deepEqual(target, ori, 'array + number is array'); - t.end(); -}); - -test('merge array with array', function (t) { - var ori = [1, 2, 3, 4, 5, 6]; - var target = extend(ori, arr); - var testDate = new Date(81, 8, 4); - var expectedTarget = [1, 'what', testDate, 4, 5, 6]; - - t.deepEqual(ori, expectedTarget, 'array + array merges arrays; changes first array'); - t.deepEqual(arr, [1, 'what', testDate], 'second array is unchanged'); - t.deepEqual(target, expectedTarget, 'array + array is merged array'); - t.end(); -}); - -test('merge array with date', function (t) { - var ori = [1, 2, 3, 4, 5, 6]; - var target = extend(ori, date); - var testDate = new Date(81, 4, 13); - var testArray = [1, 2, 3, 4, 5, 6]; - - t.deepEqual(ori, testArray, 'array is unchanged'); - t.deepEqual(date, testDate, 'date is unchanged'); - t.deepEqual(target, testArray, 'array + date is array'); - t.end(); -}); - -test('merge array with object', function (t) { - var ori = [1, 2, 3, 4, 5, 6]; - var target = extend(ori, obj); - var testObject = { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }; - - t.deepEqual(obj, testObject, 'obj is unchanged'); - t.equal(ori.length, 6, 'array has proper length'); - t.equal(ori.str, obj.str, 'array has obj.str property'); - t.equal(ori.integer, obj.integer, 'array has obj.integer property'); - t.deepEqual(ori.arr, obj.arr, 'array has obj.arr property'); - t.equal(ori.date, obj.date, 'array has obj.date property'); - - t.equal(target.length, 6, 'target has proper length'); - t.equal(target.str, obj.str, 'target has obj.str property'); - t.equal(target.integer, obj.integer, 'target has obj.integer property'); - t.deepEqual(target.arr, obj.arr, 'target has obj.arr property'); - t.equal(target.date, obj.date, 'target has obj.date property'); - t.end(); -}); - -test('merge date with string', function (t) { - var ori = new Date(81, 9, 20); - var target = extend(ori, str); - var testObject = { - 0: 'm', - 1: 'e', - 2: ' ', - 3: 'a', - 4: ' ', - 5: 't', - 6: 'e', - 7: 's', - 8: 't' - }; - - t.deepEqual(ori, testObject, 'date is changed to object form of string'); - t.equal(str, 'me a test', 'string is unchanged'); - t.deepEqual(target, testObject, 'date + string is object form of string'); - t.end(); -}); - -test('merge date with number', function (t) { - var ori = new Date(81, 9, 20); - var target = extend(ori, 10); - - t.deepEqual(ori, {}, 'date is changed to empty object'); - t.deepEqual(target, {}, 'date + number is empty object'); - t.end(); -}); - -test('merge date with array', function (t) { - var ori = new Date(81, 9, 20); - var target = extend(ori, arr); - var testDate = new Date(81, 9, 20); - var testArray = [1, 'what', new Date(81, 8, 4)]; - - t.deepEqual(ori, testDate, 'date is unchanged'); - t.deepEqual(arr, testArray, 'array is unchanged'); - t.deepEqual(target, testDate, 'date + array is date'); - t.end(); -}); - -test('merge date with date', function (t) { - var ori = new Date(81, 9, 20); - var target = extend(ori, date); - - t.deepEqual(ori, {}, 'date is empty object'); - t.deepEqual(target, {}, 'date + date is empty object'); - t.end(); -}); - -test('merge date with object', function (t) { - var ori = new Date(81, 9, 20); - var target = extend(ori, obj); - var testDate = new Date(81, 8, 4); - var testObject = { - str: 'me a test', - integer: 10, - arr: [1, 'what', testDate], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }; - - t.deepEqual(obj, testObject, 'original object is unchanged'); - t.deepEqual(ori, testObject, 'date becomes original object'); - t.deepEqual(target, testObject, 'date + object is object'); - t.end(); -}); - -test('merge object with string', function (t) { - var testDate = new Date(81, 7, 26); - var ori = { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: testDate - }; - var target = extend(ori, str); - var testObj = { - 0: 'm', - 1: 'e', - 2: ' ', - 3: 'a', - 4: ' ', - 5: 't', - 6: 'e', - 7: 's', - 8: 't', - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: testDate - }; - - t.deepEqual(ori, testObj, 'original object updated'); - t.equal(str, 'me a test', 'string is unchanged'); - t.deepEqual(target, testObj, 'object + string is object + object form of string'); - t.end(); -}); - -test('merge object with number', function (t) { - var ori = { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26) - }; - var testObject = { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26) - }; - var target = extend(ori, 10); - t.deepEqual(ori, testObject, 'object is unchanged'); - t.deepEqual(target, testObject, 'object + number is object'); - t.end(); -}); - -test('merge object with array', function (t) { - var ori = { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26) - }; - var target = extend(ori, arr); - var testObject = { - 0: 1, - 1: 'what', - 2: new Date(81, 8, 4), - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26) - }; - - t.deepEqual(ori, testObject, 'original object is merged'); - t.deepEqual(arr, [1, 'what', testObject[2]], 'array is unchanged'); - t.deepEqual(target, testObject, 'object + array is merged object'); - t.end(); -}); - -test('merge object with date', function (t) { - var ori = { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26) - }; - var target = extend(ori, date); - var testObject = { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26) - }; - - t.deepEqual(ori, testObject, 'original object is unchanged'); - t.deepEqual(date, new Date(81, 4, 13), 'date is unchanged'); - t.deepEqual(target, testObject, 'object + date is object'); - t.end(); -}); - -test('merge object with object', function (t) { - var ori = { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26), - foo: 'bar' - }; - var target = extend(ori, obj); - var expectedObj = { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }; - var expectedTarget = { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }; - - t.deepEqual(obj, expectedObj, 'obj is unchanged'); - t.deepEqual(ori, expectedTarget, 'original has been merged'); - t.deepEqual(target, expectedTarget, 'object + object is merged object'); - t.end(); -}); - -test('deep clone', function (t) { - var ori = { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26), - layer: { - deep: { - integer: 42 - } - } - }; - var target = extend(true, ori, deep); - - t.deepEqual(ori, { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26), - ori: { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }, - layer: { - integer: 10, - str: 'str', - date: new Date(84, 5, 12), - arr: [101, 'dude', new Date(82, 10, 4)], - deep: { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 7, 4) - } - } - }, 'original object is merged'); - t.deepEqual(deep, { - ori: { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }, - layer: { - integer: 10, - str: 'str', - date: new Date(84, 5, 12), - arr: [101, 'dude', new Date(82, 10, 4)], - deep: { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 7, 4) - } - } - }, 'deep is unchanged'); - t.deepEqual(target, { - str: 'no shit', - integer: 76, - arr: [1, 2, 3, 4], - date: new Date(81, 7, 26), - ori: { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }, - layer: { - integer: 10, - str: 'str', - date: new Date(84, 5, 12), - arr: [101, 'dude', new Date(82, 10, 4)], - deep: { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 7, 4) - } - } - }, 'deep + object + object is deeply merged object'); - - target.layer.deep = 339; - t.deepEqual(deep, { - ori: { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 4, 13), - constructor: 'fake', - isPrototypeOf: 'not a function', - foo: new Foo() - }, - layer: { - integer: 10, - str: 'str', - date: new Date(84, 5, 12), - arr: [101, 'dude', new Date(82, 10, 4)], - deep: { - str: 'me a test', - integer: 10, - arr: [1, 'what', new Date(81, 8, 4)], - date: new Date(81, 7, 4) - } - } - }, 'deep is unchanged after setting target property'); - // ----- NEVER USE EXTEND WITH THE ABOVE SITUATION ------------------------------ - t.end(); -}); - -test('deep clone; arrays are merged', function (t) { - var defaults = { - arr: [1, 2, 3] - }; - var override = { - arr: ['x'] - }; - var expectedTarget = { - arr: ['x', 2, 3] - }; - - var target = extend(true, defaults, override); - - t.deepEqual(target, expectedTarget, 'arrays are merged'); - t.end(); -}); - -test('deep clone === false; objects merged normally', function (t) { - var defaults = { - a: 1 - }; - var override = { - a: 2 - }; - var target = extend(false, defaults, override); - t.deepEqual(target, override, 'deep === false handled normally'); - t.end(); -}); - -test('pass in null; should create a valid object', function (t) { - var override = { - a: 1 - }; - var target = extend(null, override); - t.deepEqual(target, override, 'null object handled normally'); - t.end(); -}); - -test('works without Array.isArray', function (t) { - var savedIsArray = Array.isArray; - Array.isArray = false; // don't delete, to preserve enumerability - var target = []; - var source = [1, [2], { 3: true }]; - t.deepEqual( - extend(true, target, source), - [1, [2], { 3: true }], - 'It works without Array.isArray' - ); - Array.isArray = savedIsArray; - t.end(); -}); diff --git a/v3.0.0.tar.gz b/v3.0.0.tar.gz deleted file mode 100644 index c5d673115a109853f9f9d63728864fdff9467ef2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9021 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 diff --git a/v3.0.2.tar.gz b/v3.0.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c543de23f42b1d97b7f085fbc0a194e3d587ac89 GIT binary patch literal 9731 zcma)?Q*b2=u&sA&+qONiZQI5~6DJdMV%v5mp4hf+d&l1AuUq%&)_J)7w7%;1wYq9G zNi;0r{|v;Hfv@L=OxkR3t+J}32TdystCKT(9>>}U+$OF-VDk0hp?RoAAbO#h271QL zxc_r^TNS0zz|GBlnRR*X5w2jBI+EgxznEh7dwpKOWWQFW#t@6c zX0P+#M|xvMY`HhrLOt5SH^0i9`YwDB$z5Ypm;mc<+y!e!ubOT3)wZyYfW}mWA+trg zr{Kk`+*!>lFRiNYd1Ry3xAM%_Bi$nEsQUnZ7AA2?4um{QY zbo~Um{sUjlj}4J-6>k3u;O>zxw5e>Pyc5sj-qRTf8mwH}-I~Q%Bqlie_#iQVX|gU;I<(?@HBqnwk23&Q@u%iJL= z9jE+6e59<&gnXt{*47<=3R7iDT>!tHoW%zbc$uA6#x#VE!-W2Zx_$b2p$T$KY;;8wBQ;tKX_=TG9;T8=| zMvc-KkoO^E3a7&W__+M~?n}7>2_oSS;&{$b&bN;#{}eXfsRT_di|r4Cdi$TVhEBLq z5nj}-in9qu>=%GrRBYB9O0S_|b&Av{Iq2!S#!|@KK&wT>{MWb_%l+)8E9)5nb1OaL zDYj`725&3dcOz^RTag%5MhkKczSz5H!I_z(n-r`EK)1 zShy*U?K-*FHcxiYVnAq|vaj2P&Xgtj>PWXkM6^KwR!0y-swfIMn4-gcGZ_jWMa270 zS_qHx{D_`Tfd@@bRR@vYkr1e`AUnizQg7xAma3G^6pjH2c|#?j=aAp0t^%pte%$n( z(;f?ObfAjD9R|)*ocgF$2)+U|SYJAcgRB-Rm=9fedmR%dSa>FyT6V+DnJ8c(_qJ&!1bh<@0cWB7BD|KzKol=GC-J@e}h_$a6)+u$By?fWP zO%ow|&t}7K>(@*@Fq;t1E^fnS!gzA%F=}u%!a$0;?L#tX#aO0>E|STocqDd8z}K4w)KPpQ(-0nD3q13Vou=wx}JujT}$TT&_T#?IQKAEiOFSC(jkRuIIl+a)M!ZO&<4cY6 z3%A&<8K|P3kVyu`FBIwN)yd%~2(L$yHVthir7mej4|G~0!*FY?oMEB~`y&XBuPaK> zE(Kh;aU^2}u#Abo#0<4_wZjtEuxy3|H8CZnCJA+)w)}dSzrEG>{Et2Oo z%aYsaV>GdN)TxptUp+c&)o$@G^_^-GW-Nur>ZVYVYT&M&5&OerXpne}!ryh7lz11N z;UiKChD{j%Rx`PAWLu|oMZ+buhA+L5vK zOsI}DHIF*O$eN2<36~4$WrNR{_{y0Hk1^0cq+~k|t%Lpm7G@9f;Bm!NG`d7a%3$>^ zr+qJE%OkB3elVwGd}9Mz8A5a88r{50PNiKeBQS!Zkp!t*?7T1*n<|))7K6{u#FI^PZKt-YW)!occvu463Om}OgDbee`*>vpt zAj;UZFA%o0W!=(Yeqc7Tj*%btcf_TYYSEuLL9lB}5mfa>{+Qx;Fl%jhF&InZiF;Vj;+v_BJklyY zy6ebk-R5T<4LZ=he}`UWlDQD}zwx{z$?pE}I4yDk{hhz&;=it^JMf}R7v!VVnEH_Y zc)$4WTI_M?>AijGoPPNJUB8;NpU~wiP0LfulT^c#kItn6O@k;fCeq_)?tpv~Gj{#m zubg-*_h&0H;QL|RgJ$lA2#$J*!rnZ2YU7MlF81?W8Pc=((hGKaP&x(RTIgrry_1;u za1-0lw3`WaS!5wl;=29wk)YfE29=^>2B+ZOdg6G9HUsEvOp{_Y?tEYLMTTR_{Q()j{x3@yt zl78(>`NyPBll$WKZfDJMXUTGB#d2rCGJpLt|I4Oteg*1_zHk1STiv-^-G$qV$axg9 zjItZ6PZ7jC22p6<8Q@U@CZCJRZ^i9Scd_4E@joE?UqKVbRFf!F(;Zc7SybnLf&Nb^ z@v}c!)1N0h_-5M8W}cFxP4s+un)AS#KXKNYZUWUshq_oqvsGtaTK{*oBIc=!ux&}? zmhL`hxFYJQ3-iCi0+_5U3?&s&LW-M++W!m9KdSouB*er+BSTwBp@=@DDLGY86X&$7 zMU8Wze!HKz7l}xSQD93@a*~Tlh!Nm;|28;!a!Fhrl{A9E;jK-gD_4KCVPXPJw3q^I zmcGW^w&uzO^jxh)qJS{&kDR%?A8DJtORc`3mrwETub%mfu34q)Q@q2dQ{jo>gPRAE zW3{K_?^~X=(CKkDx}*CRg}SWqeB5$=g7y`(f8B1xH)Aczr%MQ9DevZ^1j+qhUsKj# zoxLQeYniITI!Pg`r5lA;Zlb40!85N!aMrKR?093d@`wu-1wzcujI$PuC$TwfMzB+O zL}TB-yL2ORW&6ee^L(TsygQL2;lH|&m^|#}k#~Zz`Mn_Yu2LFlLOc(Y&Pd;GuKQS3 zki09y?WnaUFstIL`^(&6ovs!1-*W3@iBhfR1c=y1xsAwEC}U+H9ioQHXDbG#}-3= zT>L2iC_8|v^2IPwu{gS?gd?BGo4yVd*lBmX!c z$;JH|NS^E!6`T}q$B=MU{cGiV(9NOf%=m?9*E6FN;Ufrq@C)Rk2BXdsrRrshUfSo> zo~7hJqn0ijuB_vH!is*W-_q`rcEr~(w*Firu+(w!)WgLzu7Hlg(!ymxh)I311q?&R z5uxN0Li@LS?Rf$03Rcpa8(`%)9@oK-_H`4wR8o^(a4T}au#2N17pZjjken&;dVQny z@E{e0?ij;R`4Sw_OeY_&bVw#%a{vJ7d$PiqW5CR7Ot74&_u!n%PiC9KGK0|~;>ZIp zits<0vsqD|lZnTT7H?LQ7$qH;Xw5yc2RW2270wzHN5A6tD$aESNpN?;RkctM02FTq zH^RG>(y%KmnS@@C5Cc;8WI;MfYbOH-w=&w-!T1;-Zs(Xpv+7QZ@LaC=oPS3N`xp?% zfpnM=#+_xwMk_j%;-M=@VI}4gQCj!gQ0aFj=W_4cQeOvEqKtlLLOFQQ8Y2vn$Ml(E zj`>9@VxKt(4*YJNl^gC87MkUg z)KKwCBq?q$21^a0xK;PG$;ZDG+@X?X0jFkPF`nT;MH?1{@p@hhvi4j|YDLn-q}8`i zVttka&&!o-!^i=7wq*YCBl(Z3S`Ahv<gEY2=QLWEejSNttf#^tu=X%<8GP$>XSp~>Swc^5I8LnibAUUSq1 zH;p+(K+GD5qz(%xNko@IPwRgu_*Xlp9S5U>HdR#DXIokakN28iEpX6?>ncc-pkR$f zLr5)E#Y{FY4a2%{2$SwGhQTxfI46d*BB`|nFAL;w6IIEvu;YlMt-EK__LkZCXy3T$ zIMBc{EIX3^NBsWaQ=F>l{TK^QC>ZwwHI?;mhUV!4t@*VKdmcq>0h{qF_d zsF&Hd_L$}a|1PKo+xR44*X&ZfrrYjWR({zI#u>2u&YR8j+gc!~#);?;dhjDSUod>5 zu&H`7!3ft=Slh%ad(axcLDF9*u_$x#s0;N!``GZFGK01;Ic04_HQ`_hNDyO3N$E33=0b=DimU9sk20&vg2{b6JPAtHDOR^ONAB698wS_>_qrfQ-xRU0$vRJ zcfC*FM;#x&B81-NYz;a0j&uiYxGt@0!wKO-`J9%swQXHhd#ie#B8`X&7O2(~Twcz_ z#dCsz7k8kp-K%D#xpD9E?b`uU{F1BZ!@B&eZmF!L&S_%$qsC3J`wFGAc{GUv<4&^5 zf~xUw$pSdy-A8-|BWC<3?70im)2EU3^s9HL#_N*+-66rvgWKxz)c~M=@8)H1*udnA zaqqCl$JaGp-3F>3o#2sYn;rMe>0#$9>Ekv(gx-c5^p7Cf74%c2BHo-o_|e;%i@dT9 zLbDETsu4xmKs`l6WaQyTL}4jt4(fXx;+b!FPT{KMQH~sxo$Z5Dn&n0js}nL_fsmAM z*BC)W^M-K8e~7gA>M7ZbIC6*?6C)u?bQ<8T2H0PpFA4ARkxyWh!a2~t4CHkhQFrlz zEg0%d#t-&!!iGq%8>(iA$95e$0p|R>_{ZR4| zn5G<8E|JM?#F##9u@BW97E(2iNg-18u90EE=sr{gdPf}E;Ig)~^#H0CH@Z<8u}YU= znyM%!cd{ok1nR#=s!!^)>_O#T*AId6%f`lNPf%pRmKx0^M77RPF+sp-sucl~pDIz8 zTuzb5Ch2yWgG5U@BQ{-!NT<_=}0%}KwF3APj8EeNWMPal1lnNFD z!mdQ?9l{=t6m5BbDvyOfRze$eBK(CRB&eH#6_ph9rs`rwwPYio(PBTWRJ3m9b?G2A z=PBUnOvX-N9RyNH#1r%T1}n(Y=UL5UvUdO6t1B=!j;3*0 zs<9F^iIA5oIAcuAVM8@bhNE;v%0Hzmz|O~FkpqM@}Z}LAuHkH-~PG#9M{qoyR}xoP`_5vSDP}{NZE^ix$q2M-i~?3YqKa0CJuIF zb6t^0m9HgdhTF5d;|*+?{Jq}zaCR?F&cb`-Z1sZ>dEC_b;FVm8=9IMSaK$le9(6ZPCKqHyJNmZsg&F;{#w<8^A9+_J4$CFmp>4x+!gsreg=P-01Ep4K9H^Z6 zG#jX~GW!LsKnV_~=xej(E=xr1inI9k-goeV_>^wJ;n(ZqE70Tn>^9ui5Pq@A*Xr$y z+HJtqEy~5~E=nTnH;*H-X}c^o1mfmvMk=Sjo5s((V)VXV1Bu5nsTW2e@$pafxul>! z)D85@xzg3#nl=MjLS@OMk1psg6=36DO!geQK9xTiGiXlIVx91A46DK}=YUN8cTqy( zrpUZeD5+zdr1RQ^h|s+p+a6DXlC=&3;cSuKnOX35PFpevBmfc3L4N zA+=rn{o3{2HhjX0C!cHcPj|$bZ=z~px!Y8<{i+|CJ=vh01AXwHfAw~6@A%h(NJzuH zn3LLu2TYT(m;IO_v6l~==Mh@!e9bImO3z_4>l^s=M~1z?Dp9h}?r%Jqef>Y*$5Q&1 zJ8d6j%3_Aq8d3*cRCf4oMe_9yj~iq09euEyQK>TYXp5^&jk;jPps>}}q3aK~gEbaW zQw`OR)o(j)N1E_>#5Hrr%;Ey2L}m$MOWf_z}lr=(LRHKK{esDABo$jgRurn zwz-UJ`2KoiCSYLSW!2Y^h3=&A-8As`nxA?ukFSV;Lg!T>{-;5dab+n;R*w0EUQ$ls zmQ6Cq);7~|nCHIof4_9(N!WV=6QiRod21vk9!y?nw|~D~xG^OM2SUe%haOU7)w8gA zu=;R2>k4*WK(Z0JYDAFnL&D2Uj|9?mbesG}$US#vC3hR3x(J4p6q)8}{;(=|=cg^E(#2tu+akp^g)y-q({RI6 z5NbqC$UKHB66*e#%V|Mr!rOp|t@&nf(g`N2G5Atw5NfI+bc$k0%7H-(Z*En>&rdv8zS+R2zD9dSB`N!NkUU+%00vh{qfFT; zxhPkyXsvQs7sg*?>t6Grni0wXu;(OC8d4)RzdE^fjr_Mp-MZu4aROxiJiQQ2WZbQM zpnkn&$P3*=F_4e6!(M$vxCV<=_MsTh9ysm!%#(b0SoZBSNEenB$}iHyk9S*{EdaaA zsRX(~H>l}8aEA(J(i5sM5B1kZ5HC+ah3nlBxqV=M-@HRN6)wLHJ|?Yt9MEgq3#yWm z+5vOrL5;gAfyh&?PK_-k#E&041uWd&wlMa8|OTe-D6KakKaU}3d2IfMP zD8AJ(nJIpIpP~OGx&9k|6Qeq34sFqb;tE+qp|B51vuAM;AM>`)5s6P(mwLNy9SOT= z{*x6Gt{=n>phOuZ@{=qAN3ZgDZ6f;2>^XQKsA@00`I_@U$>H;2R3TD)3z9-j5-9k9 zjOxzR(Ex`Z4FkMVFWMiR6x!f$jT6#yg-WDl@eOnm4Espz!H&S_=-Esbmv}?A@6)>D zSr0Wy*J+x;8bK*nolAvcNA$kGj8vF#sQWyl#&%P}!@+));usmr%GHCei!ZWmi^o8| z2|b{H!WCb=C`mmDAkPLg5R0ZO*al|dxKpY#Y_hMq*`gWV2Y$MMUCJ0+zbUVASb582 z#fPANZ*6&^W_+KiY!|zj$w)dpAY<5Hb7HBEyDdc{Ta|mQF}pNQr=l=GD-4|56Vq^) zDb+hzQ*hnCNIyM^7W#3Lj_mueekau*l=mng-0^b2-1^Zf+&8H!JNmBQrMoDf1iE%? z0~ugx3HU~boQO!o8Y2t_V**mpQgaQaUPr5W;wO8k^HxBVKM9uEDo{|6pIvtXWV=C~ zzH_%AQ>S7bixSYUul#-x^W>q`4j5eqC}@)o1p3}l>dpJlJoi6)Q>^pe6j=>69dhrp zEA@Z*cf+&$5+xG=*QYdYhF>4B{UeVj6?K_3%2`s`M?g|MU=O39neU*}ulU@M_pkg2 znY^#w$HEQAbSUr_%dxje?Y&yRW*OG_?$2f-T%!UQG=y-(ka_eOim8j2SA;Y4*UOS! zxB=zc(dvY>Pp}@^H6Lh_eD~n(XBiI^HjyC&o`5!tM^BC70DVRW7={k5D(15>kqEjkhG7T^qxXo9JAR>@r4#-wsro%rHnx03-(>4ibHosPdSBM$hCPS zf*XY^Gu*@OE2+D^-M2k?t)Q2uJmVGW+bG;dw@xdc6;<*4M*b0Zw^95pksXzXeP6Ap zA;!a!o7PxW8e3F=`rE2Mm%qO@)%IY8Xh807$J@YN!ZZ7N(~OFS^BQGu;ax5=$wTMz z75M2c@$(|BVUce>rf38549>&bkH}GNQ`b)Mgx~|B8kK8}huj>Sdnx`qQFLEcH)fl? z$9` zUL&MVov}EIoKQ13WL7Ja_$&xzgH`@b#Zb&m#*_3_T@z)Ae01^{5p0J=q&~W#TtN8r z5&jDLZT+^zNqSu^g^X-v$>a!)y`$a0PRMK-BIk~>8c|WE})Xv;p!qIY;@HhiE`vfi%yF*iBdCiONKwl)Q z3_eRnBd>_`o`8}zPh~yfl|GG-VN!95R9?7@iHa@Y{&>q=+?LzCYp^qOi~Fo%Nh zd;T2kJVg%0FMdLv%Nf z&WS^EV`wIaT+jnM3Dru(@+X}|BTZG(kE3aIS!fDmE8_PJYBWU*177@_45Niq7CrM6 z8s(X;gW|X;g3_{B@X~tszS`zqYAL8|rx*RB3cp$1{s5Kx z@>DDQ%k3qr{BYEz_LXJ&>yK(*JQy-~$(t8WK=5)s&tufzc_);L2`wdUPZ6r2WtJ#Z z>eZ%_nBVywjBZg8?9egBLn;i`)EXJ2@y+q2oYnBCoY7Bzx)=Upj(7Nkw(ZmtZS`4~8KX+?Zkm% z$<^fjEfIXiBlHMb$R;i{@@xE9otdm&f3%g4oR zIgRD`9C!?F5Hp8&AyAWk51U|<53awFNA4faqD9@$xF7Qb;XPHFTZbuM6QqxE1p#vj%$xOMQ@Z5u^!Gl`JnbW>0dgn7CK9 z!4mB9qRiEO5$ba42a@-u&l*%-fXn~V@7F$Yg=@Maj;x-pxpV76L}+(h&zv}ak99J& zB=P&8?mYY($0U`yp8C-F`E(|>J8O$M-Lzy|rYvMTm7*0vC<0br`#Y+zPzejhb&F?? z>jpVEdym?;@2*l!D-DqS7rvXM=3Iw!4?23C&{uS-a7wWiR?P> zVn%qy@Yta3cf+P~4<`LFT!!a~{_aq{MX&Q-&}G*7uF#_FV(QLw{jwC3s1ck`mMdWa z4z{b6_BmbKy2_@ZOjF%f&HB2xQFZ36o{R$*M$GIT+RhKX+8Sx&+}Q5xYZC9Y!wtvf2nDJm+$neU$`yOewc z_12gKSA5QHJG3gTcv1*DN;HX@)SrY|pO4^uDUBBs9FLgzMB6$O2b03}2W~BExZL&6 z$nJMEc-s%d_htgwmfk4_!Sj+dESbn5q6wB;YJ+&W&m`qZepCVYzB;NVC7cMCH9dy} z*tq;~;=V}B_P|%ZC-{iDQJ@1KosKw7$Lj1AF}G@^GNzzn^Urf+)kuLafdmXju3{MA zt2rkdS}P%{4JBHJW)uwK4qRA%mPC`yFp8|v1j7wI>?vJ0R${?O6rbf_Jkc2S(YQ&d z_L0XA5p!n_xda%_SPpi~f9>cCnLBo@6n-u6_hSnV&4ORe<4L0Sh(t7>rhXH-G`r`| zp2tEaUiev)L7$^@2!q|s!H>nZP{o|(D{4R-juMEHpYM(xIuBz)`cfEFhoe0zB}|4r zhtMqD$dp2-?#{$a0GNM>nK5_cn9h{{{X}^Gt0yq8>KFL^DN4k-ul2(mSm>TZ!k+nG zW#Dsdk|i7d->q5sxZLkT$M3ki`1!t|J#(p1&bM5t