From ed71142e287d58688bb6188437e1a653a2850ed0 Mon Sep 17 00:00:00 2001 From: liuyumeng1 Date: Fri, 4 Mar 2022 14:42:04 +0800 Subject: [PATCH] update to mozjs91.6.0-1 (cherry picked from commit dfa3e820a7a27a434f8aa0a4b43847a753995310) --- .gitattributes | 1 + ...ibility-of-mozbuild-with-Python-3.10.patch | 296 -------------- ...ibility-of-mozbuild-with-python-3.10.patch | 296 -------------- copy-headers.patch | 39 +- emitter.patch | 67 ++-- firefox-78.15.0esr.source.tar.xz | 3 - firefox-91.6.0esr.source.tar.xz | 3 + firefox-91.6.0esr.source.tar.xz.asc | 16 + ...a-Write-command-output-to-our-stderr.patch | 44 ++- ...y-Decouple-from-Mozilla-build-system.patch | 14 +- init_patch.patch | 29 +- known_failures.txt | 12 + mozilla.keyring | 369 ++++++++++++++++++ mozjs78.spec | 114 ------ mozjs91.spec | 223 +++++++++++ mozjs78.yaml => mozjs91.yaml | 0 spidermonkey_checks_disable.patch | 22 +- tests-increase-timeout.patch | 51 ++- 18 files changed, 778 insertions(+), 821 deletions(-) delete mode 100644 Fixup-compatibility-of-mozbuild-with-Python-3.10.patch delete mode 100644 backport-fixup-compatibility-of-mozbuild-with-python-3.10.patch delete mode 100644 firefox-78.15.0esr.source.tar.xz create mode 100644 firefox-91.6.0esr.source.tar.xz create mode 100644 firefox-91.6.0esr.source.tar.xz.asc create mode 100644 known_failures.txt create mode 100644 mozilla.keyring delete mode 100644 mozjs78.spec create mode 100644 mozjs91.spec rename mozjs78.yaml => mozjs91.yaml (100%) diff --git a/.gitattributes b/.gitattributes index 65951e3..8be2dc7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ firefox-78.4.0esr.source.tar.xz filter=lfs diff=lfs merge=lfs -text firefox-78.15.0esr.source.tar.xz filter=lfs diff=lfs merge=lfs -text +firefox-91.6.0esr.source.tar.xz filter=lfs diff=lfs merge=lfs -text diff --git a/Fixup-compatibility-of-mozbuild-with-Python-3.10.patch b/Fixup-compatibility-of-mozbuild-with-Python-3.10.patch deleted file mode 100644 index 62b70a7..0000000 --- a/Fixup-compatibility-of-mozbuild-with-Python-3.10.patch +++ /dev/null @@ -1,296 +0,0 @@ -From a88d0c8e27b48344942187c2611bb121bde9332d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= -Date: Tue, 13 Jul 2021 11:46:20 +0200 -Subject: [PATCH] Fixup compatibility of mozbuild with Python 3.10 - ---- - python/mach/mach/config.py | 4 ++-- - python/mach/mach/decorators.py | 2 +- - python/mozbuild/mozbuild/backend/configenvironment.py | 3 ++- - python/mozbuild/mozbuild/makeutil.py | 2 +- - python/mozbuild/mozbuild/util.py | 2 +- - testing/marionette/client/marionette_driver/wait.py | 2 +- - testing/mozbase/manifestparser/manifestparser/filters.py | 3 ++- - testing/mozbase/versioninfo.py | 2 +- - testing/web-platform/tests/tools/manifest/vcs.py | 2 +- - .../web-platform/tests/tools/third_party/h2/h2/settings.py | 2 +- - .../tests/tools/third_party/html5lib/html5lib/_trie/_base.py | 2 +- - .../tools/third_party/html5lib/html5lib/treebuilders/dom.py | 2 +- - .../tests/tools/third_party/hyper/hyper/common/headers.py | 2 +- - .../tests/tools/third_party/hyper/hyper/h2/settings.py | 2 +- - .../tests/tools/third_party/hyper/hyper/http11/connection.py | 4 ++-- - .../third_party/hyper/hyper/packages/hyperframe/flags.py | 2 +- - .../tests/tools/third_party/hyperframe/hyperframe/flags.py | 2 +- - testing/web-platform/tests/tools/wptserve/wptserve/config.py | 3 ++- - testing/web-platform/tests/webdriver/tests/support/sync.py | 2 +- - 19 files changed, 24 insertions(+), 21 deletions(-) - -diff --git a/python/mach/mach/config.py b/python/mach/mach/config.py -index 7210eca82..edb4d2e93 100644 ---- a/python/mach/mach/config.py -+++ b/python/mach/mach/config.py -@@ -144,7 +144,7 @@ def reraise_attribute_error(func): - return _ - - --class ConfigSettings(collections.Mapping): -+class ConfigSettings(collections.abc.Mapping): - """Interface for configuration settings. - - This is the main interface to the configuration. -@@ -190,7 +190,7 @@ class ConfigSettings(collections.Mapping): - will result in exceptions being raised. - """ - -- class ConfigSection(collections.MutableMapping, object): -+ class ConfigSection(collections.abc.MutableMapping, object): - """Represents an individual config section.""" - def __init__(self, config, name, settings): - object.__setattr__(self, '_config', config) -diff --git a/python/mach/mach/decorators.py b/python/mach/mach/decorators.py -index 27f7f34a6..5f63271a3 100644 ---- a/python/mach/mach/decorators.py -+++ b/python/mach/mach/decorators.py -@@ -140,7 +140,7 @@ def CommandProvider(cls): - 'Conditions argument must take a list ' + \ - 'of functions. Found %s instead.' - -- if not isinstance(command.conditions, collections.Iterable): -+ if not isinstance(command.conditions, collections.abc.Iterable): - msg = msg % (command.name, type(command.conditions)) - raise MachError(msg) - -diff --git a/python/mozbuild/mozbuild/backend/configenvironment.py b/python/mozbuild/mozbuild/backend/configenvironment.py -index 20d1a9fa6..8747958bd 100644 ---- a/python/mozbuild/mozbuild/backend/configenvironment.py -+++ b/python/mozbuild/mozbuild/backend/configenvironment.py -@@ -9,7 +9,8 @@ import six - import sys - import json - --from collections import Iterable, OrderedDict -+from collections import OrderedDict -+from collections.abc import Iterable - from types import ModuleType - - import mozpack.path as mozpath -diff --git a/python/mozbuild/mozbuild/makeutil.py b/python/mozbuild/mozbuild/makeutil.py -index 4da1a3b26..4ce56848c 100644 ---- a/python/mozbuild/mozbuild/makeutil.py -+++ b/python/mozbuild/mozbuild/makeutil.py -@@ -7,7 +7,7 @@ from __future__ import absolute_import, print_function, unicode_literals - import os - import re - import six --from collections import Iterable -+from collections.abc import Iterable - - - class Makefile(object): -diff --git a/python/mozbuild/mozbuild/util.py b/python/mozbuild/mozbuild/util.py -index 044cf645c..98ed3ef52 100644 ---- a/python/mozbuild/mozbuild/util.py -+++ b/python/mozbuild/mozbuild/util.py -@@ -782,7 +782,7 @@ class HierarchicalStringList(object): - self._strings = StrictOrderingOnAppendList() - self._children = {} - -- class StringListAdaptor(collections.Sequence): -+ class StringListAdaptor(collections.abc.Sequence): - def __init__(self, hsl): - self._hsl = hsl - -diff --git a/testing/marionette/client/marionette_driver/wait.py b/testing/marionette/client/marionette_driver/wait.py -index eeaa1e23d..c147f463f 100644 ---- a/testing/marionette/client/marionette_driver/wait.py -+++ b/testing/marionette/client/marionette_driver/wait.py -@@ -82,7 +82,7 @@ class Wait(object): - - exceptions = [] - if ignored_exceptions is not None: -- if isinstance(ignored_exceptions, collections.Iterable): -+ if isinstance(ignored_exceptions, collections.abc.Iterable): - exceptions.extend(iter(ignored_exceptions)) - else: - exceptions.append(ignored_exceptions) -diff --git a/testing/mozbase/manifestparser/manifestparser/filters.py b/testing/mozbase/manifestparser/manifestparser/filters.py -index 287ee033b..b1d608003 100644 ---- a/testing/mozbase/manifestparser/manifestparser/filters.py -+++ b/testing/mozbase/manifestparser/manifestparser/filters.py -@@ -12,7 +12,8 @@ from __future__ import absolute_import - - import itertools - import os --from collections import defaultdict, MutableSequence -+from collections import defaultdict -+from collections.abc import MutableSequence - - import six - from six import string_types -diff --git a/testing/mozbase/versioninfo.py b/testing/mozbase/versioninfo.py -index 91d1a0473..8c1680069 100755 ---- a/testing/mozbase/versioninfo.py -+++ b/testing/mozbase/versioninfo.py -@@ -11,7 +11,7 @@ from commit messages. - - from __future__ import absolute_import, print_function - --from collections import Iterable -+from collections.abc import Iterable - from distutils.version import StrictVersion - import argparse - import os -diff --git a/testing/web-platform/tests/tools/manifest/vcs.py b/testing/web-platform/tests/tools/manifest/vcs.py -index 7c0feeb81..05ee19c7c 100644 ---- a/testing/web-platform/tests/tools/manifest/vcs.py -+++ b/testing/web-platform/tests/tools/manifest/vcs.py -@@ -3,7 +3,7 @@ import json - import os - import stat - from collections import deque --from collections import MutableMapping -+from collections.abc import MutableMapping - - from six import with_metaclass, PY2 - -diff --git a/testing/web-platform/tests/tools/third_party/h2/h2/settings.py b/testing/web-platform/tests/tools/third_party/h2/h2/settings.py -index 3da720329..e097630e9 100644 ---- a/testing/web-platform/tests/tools/third_party/h2/h2/settings.py -+++ b/testing/web-platform/tests/tools/third_party/h2/h2/settings.py -@@ -88,7 +88,7 @@ class ChangedSetting: - ) - - --class Settings(collections.MutableMapping): -+class Settings(collections.abc.MutableMapping): - """ - An object that encapsulates HTTP/2 settings state. - -diff --git a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py -index a1158bbbf..a9295a2ba 100644 ---- a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py -+++ b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py -@@ -1,6 +1,6 @@ - from __future__ import absolute_import, division, unicode_literals - --from collections import Mapping -+from collections.abc import Mapping - - - class Trie(Mapping): -diff --git a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py -index dcfac220b..818a33433 100644 ---- a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py -+++ b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py -@@ -1,7 +1,7 @@ - from __future__ import absolute_import, division, unicode_literals - - --from collections import MutableMapping -+from collections.abc import MutableMapping - from xml.dom import minidom, Node - import weakref - -diff --git a/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py -index 655a591ac..6454f550a 100644 ---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py -+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py -@@ -10,7 +10,7 @@ import collections - from hyper.common.util import to_bytestring, to_bytestring_tuple - - --class HTTPHeaderMap(collections.MutableMapping): -+class HTTPHeaderMap(collections.abc.MutableMapping): - """ - A structure that contains HTTP headers. - -diff --git a/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py -index fedc5e3c4..040afea92 100755 ---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py -+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py -@@ -151,7 +151,7 @@ class ChangedSetting: - ) - - --class Settings(collections.MutableMapping): -+class Settings(collections.abc.MutableMapping): - """ - An object that encapsulates HTTP/2 settings state. - -diff --git a/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py -index 61361c358..a214311d2 100644 ---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py -+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py -@@ -10,7 +10,7 @@ import os - import socket - import base64 - --from collections import Iterable, Mapping -+from collections.abc import Iterable, Mapping - - import collections - from hyperframe.frame import SettingsFrame -@@ -295,7 +295,7 @@ class HTTP11Connection(object): - return - - # Iterables that set a specific content length. -- elif isinstance(body, collections.Iterable): -+ elif isinstance(body, collections.abc.Iterable): - for item in body: - try: - self._sock.send(item) -diff --git a/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py -index e8f630056..8f2ea689b 100644 ---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py -+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py -@@ -11,7 +11,7 @@ import collections - Flag = collections.namedtuple("Flag", ["name", "bit"]) - - --class Flags(collections.MutableSet): -+class Flags(collections.abc.MutableSet): - """ - A simple MutableSet implementation that will only accept known flags as elements. - -diff --git a/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py b/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py -index 05b35017e..14c352e10 100644 ---- a/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py -+++ b/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py -@@ -11,7 +11,7 @@ import collections - Flag = collections.namedtuple("Flag", ["name", "bit"]) - - --class Flags(collections.MutableSet): -+class Flags(collections.abc.MutableSet): - """ - A simple MutableSet implementation that will only accept known flags as - elements. -diff --git a/testing/web-platform/tests/tools/wptserve/wptserve/config.py b/testing/web-platform/tests/tools/wptserve/wptserve/config.py -index 7766565fe..3c1c36d6f 100644 ---- a/testing/web-platform/tests/tools/wptserve/wptserve/config.py -+++ b/testing/web-platform/tests/tools/wptserve/wptserve/config.py -@@ -2,7 +2,8 @@ import copy - import logging - import os - --from collections import defaultdict, Mapping -+from collections import defaultdict -+from collections.abc import Mapping - from six import integer_types, iteritems, itervalues, string_types - - from . import sslutils -diff --git a/testing/web-platform/tests/webdriver/tests/support/sync.py b/testing/web-platform/tests/webdriver/tests/support/sync.py -index 3fc77131c..8e8f6b819 100644 ---- a/testing/web-platform/tests/webdriver/tests/support/sync.py -+++ b/testing/web-platform/tests/webdriver/tests/support/sync.py -@@ -81,7 +81,7 @@ class Poll(object): - - exceptions = [] - if ignored_exceptions is not None: -- if isinstance(ignored_exceptions, collections.Iterable): -+ if isinstance(ignored_exceptions, collections.abc.Iterable): - exceptions.extend(iter(ignored_exceptions)) - else: - exceptions.append(ignored_exceptions) --- -2.31.1 diff --git a/backport-fixup-compatibility-of-mozbuild-with-python-3.10.patch b/backport-fixup-compatibility-of-mozbuild-with-python-3.10.patch deleted file mode 100644 index 62b70a7..0000000 --- a/backport-fixup-compatibility-of-mozbuild-with-python-3.10.patch +++ /dev/null @@ -1,296 +0,0 @@ -From a88d0c8e27b48344942187c2611bb121bde9332d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= -Date: Tue, 13 Jul 2021 11:46:20 +0200 -Subject: [PATCH] Fixup compatibility of mozbuild with Python 3.10 - ---- - python/mach/mach/config.py | 4 ++-- - python/mach/mach/decorators.py | 2 +- - python/mozbuild/mozbuild/backend/configenvironment.py | 3 ++- - python/mozbuild/mozbuild/makeutil.py | 2 +- - python/mozbuild/mozbuild/util.py | 2 +- - testing/marionette/client/marionette_driver/wait.py | 2 +- - testing/mozbase/manifestparser/manifestparser/filters.py | 3 ++- - testing/mozbase/versioninfo.py | 2 +- - testing/web-platform/tests/tools/manifest/vcs.py | 2 +- - .../web-platform/tests/tools/third_party/h2/h2/settings.py | 2 +- - .../tests/tools/third_party/html5lib/html5lib/_trie/_base.py | 2 +- - .../tools/third_party/html5lib/html5lib/treebuilders/dom.py | 2 +- - .../tests/tools/third_party/hyper/hyper/common/headers.py | 2 +- - .../tests/tools/third_party/hyper/hyper/h2/settings.py | 2 +- - .../tests/tools/third_party/hyper/hyper/http11/connection.py | 4 ++-- - .../third_party/hyper/hyper/packages/hyperframe/flags.py | 2 +- - .../tests/tools/third_party/hyperframe/hyperframe/flags.py | 2 +- - testing/web-platform/tests/tools/wptserve/wptserve/config.py | 3 ++- - testing/web-platform/tests/webdriver/tests/support/sync.py | 2 +- - 19 files changed, 24 insertions(+), 21 deletions(-) - -diff --git a/python/mach/mach/config.py b/python/mach/mach/config.py -index 7210eca82..edb4d2e93 100644 ---- a/python/mach/mach/config.py -+++ b/python/mach/mach/config.py -@@ -144,7 +144,7 @@ def reraise_attribute_error(func): - return _ - - --class ConfigSettings(collections.Mapping): -+class ConfigSettings(collections.abc.Mapping): - """Interface for configuration settings. - - This is the main interface to the configuration. -@@ -190,7 +190,7 @@ class ConfigSettings(collections.Mapping): - will result in exceptions being raised. - """ - -- class ConfigSection(collections.MutableMapping, object): -+ class ConfigSection(collections.abc.MutableMapping, object): - """Represents an individual config section.""" - def __init__(self, config, name, settings): - object.__setattr__(self, '_config', config) -diff --git a/python/mach/mach/decorators.py b/python/mach/mach/decorators.py -index 27f7f34a6..5f63271a3 100644 ---- a/python/mach/mach/decorators.py -+++ b/python/mach/mach/decorators.py -@@ -140,7 +140,7 @@ def CommandProvider(cls): - 'Conditions argument must take a list ' + \ - 'of functions. Found %s instead.' - -- if not isinstance(command.conditions, collections.Iterable): -+ if not isinstance(command.conditions, collections.abc.Iterable): - msg = msg % (command.name, type(command.conditions)) - raise MachError(msg) - -diff --git a/python/mozbuild/mozbuild/backend/configenvironment.py b/python/mozbuild/mozbuild/backend/configenvironment.py -index 20d1a9fa6..8747958bd 100644 ---- a/python/mozbuild/mozbuild/backend/configenvironment.py -+++ b/python/mozbuild/mozbuild/backend/configenvironment.py -@@ -9,7 +9,8 @@ import six - import sys - import json - --from collections import Iterable, OrderedDict -+from collections import OrderedDict -+from collections.abc import Iterable - from types import ModuleType - - import mozpack.path as mozpath -diff --git a/python/mozbuild/mozbuild/makeutil.py b/python/mozbuild/mozbuild/makeutil.py -index 4da1a3b26..4ce56848c 100644 ---- a/python/mozbuild/mozbuild/makeutil.py -+++ b/python/mozbuild/mozbuild/makeutil.py -@@ -7,7 +7,7 @@ from __future__ import absolute_import, print_function, unicode_literals - import os - import re - import six --from collections import Iterable -+from collections.abc import Iterable - - - class Makefile(object): -diff --git a/python/mozbuild/mozbuild/util.py b/python/mozbuild/mozbuild/util.py -index 044cf645c..98ed3ef52 100644 ---- a/python/mozbuild/mozbuild/util.py -+++ b/python/mozbuild/mozbuild/util.py -@@ -782,7 +782,7 @@ class HierarchicalStringList(object): - self._strings = StrictOrderingOnAppendList() - self._children = {} - -- class StringListAdaptor(collections.Sequence): -+ class StringListAdaptor(collections.abc.Sequence): - def __init__(self, hsl): - self._hsl = hsl - -diff --git a/testing/marionette/client/marionette_driver/wait.py b/testing/marionette/client/marionette_driver/wait.py -index eeaa1e23d..c147f463f 100644 ---- a/testing/marionette/client/marionette_driver/wait.py -+++ b/testing/marionette/client/marionette_driver/wait.py -@@ -82,7 +82,7 @@ class Wait(object): - - exceptions = [] - if ignored_exceptions is not None: -- if isinstance(ignored_exceptions, collections.Iterable): -+ if isinstance(ignored_exceptions, collections.abc.Iterable): - exceptions.extend(iter(ignored_exceptions)) - else: - exceptions.append(ignored_exceptions) -diff --git a/testing/mozbase/manifestparser/manifestparser/filters.py b/testing/mozbase/manifestparser/manifestparser/filters.py -index 287ee033b..b1d608003 100644 ---- a/testing/mozbase/manifestparser/manifestparser/filters.py -+++ b/testing/mozbase/manifestparser/manifestparser/filters.py -@@ -12,7 +12,8 @@ from __future__ import absolute_import - - import itertools - import os --from collections import defaultdict, MutableSequence -+from collections import defaultdict -+from collections.abc import MutableSequence - - import six - from six import string_types -diff --git a/testing/mozbase/versioninfo.py b/testing/mozbase/versioninfo.py -index 91d1a0473..8c1680069 100755 ---- a/testing/mozbase/versioninfo.py -+++ b/testing/mozbase/versioninfo.py -@@ -11,7 +11,7 @@ from commit messages. - - from __future__ import absolute_import, print_function - --from collections import Iterable -+from collections.abc import Iterable - from distutils.version import StrictVersion - import argparse - import os -diff --git a/testing/web-platform/tests/tools/manifest/vcs.py b/testing/web-platform/tests/tools/manifest/vcs.py -index 7c0feeb81..05ee19c7c 100644 ---- a/testing/web-platform/tests/tools/manifest/vcs.py -+++ b/testing/web-platform/tests/tools/manifest/vcs.py -@@ -3,7 +3,7 @@ import json - import os - import stat - from collections import deque --from collections import MutableMapping -+from collections.abc import MutableMapping - - from six import with_metaclass, PY2 - -diff --git a/testing/web-platform/tests/tools/third_party/h2/h2/settings.py b/testing/web-platform/tests/tools/third_party/h2/h2/settings.py -index 3da720329..e097630e9 100644 ---- a/testing/web-platform/tests/tools/third_party/h2/h2/settings.py -+++ b/testing/web-platform/tests/tools/third_party/h2/h2/settings.py -@@ -88,7 +88,7 @@ class ChangedSetting: - ) - - --class Settings(collections.MutableMapping): -+class Settings(collections.abc.MutableMapping): - """ - An object that encapsulates HTTP/2 settings state. - -diff --git a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py -index a1158bbbf..a9295a2ba 100644 ---- a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py -+++ b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/_trie/_base.py -@@ -1,6 +1,6 @@ - from __future__ import absolute_import, division, unicode_literals - --from collections import Mapping -+from collections.abc import Mapping - - - class Trie(Mapping): -diff --git a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py -index dcfac220b..818a33433 100644 ---- a/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py -+++ b/testing/web-platform/tests/tools/third_party/html5lib/html5lib/treebuilders/dom.py -@@ -1,7 +1,7 @@ - from __future__ import absolute_import, division, unicode_literals - - --from collections import MutableMapping -+from collections.abc import MutableMapping - from xml.dom import minidom, Node - import weakref - -diff --git a/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py -index 655a591ac..6454f550a 100644 ---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py -+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/common/headers.py -@@ -10,7 +10,7 @@ import collections - from hyper.common.util import to_bytestring, to_bytestring_tuple - - --class HTTPHeaderMap(collections.MutableMapping): -+class HTTPHeaderMap(collections.abc.MutableMapping): - """ - A structure that contains HTTP headers. - -diff --git a/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py -index fedc5e3c4..040afea92 100755 ---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py -+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/h2/settings.py -@@ -151,7 +151,7 @@ class ChangedSetting: - ) - - --class Settings(collections.MutableMapping): -+class Settings(collections.abc.MutableMapping): - """ - An object that encapsulates HTTP/2 settings state. - -diff --git a/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py -index 61361c358..a214311d2 100644 ---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py -+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/http11/connection.py -@@ -10,7 +10,7 @@ import os - import socket - import base64 - --from collections import Iterable, Mapping -+from collections.abc import Iterable, Mapping - - import collections - from hyperframe.frame import SettingsFrame -@@ -295,7 +295,7 @@ class HTTP11Connection(object): - return - - # Iterables that set a specific content length. -- elif isinstance(body, collections.Iterable): -+ elif isinstance(body, collections.abc.Iterable): - for item in body: - try: - self._sock.send(item) -diff --git a/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py b/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py -index e8f630056..8f2ea689b 100644 ---- a/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py -+++ b/testing/web-platform/tests/tools/third_party/hyper/hyper/packages/hyperframe/flags.py -@@ -11,7 +11,7 @@ import collections - Flag = collections.namedtuple("Flag", ["name", "bit"]) - - --class Flags(collections.MutableSet): -+class Flags(collections.abc.MutableSet): - """ - A simple MutableSet implementation that will only accept known flags as elements. - -diff --git a/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py b/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py -index 05b35017e..14c352e10 100644 ---- a/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py -+++ b/testing/web-platform/tests/tools/third_party/hyperframe/hyperframe/flags.py -@@ -11,7 +11,7 @@ import collections - Flag = collections.namedtuple("Flag", ["name", "bit"]) - - --class Flags(collections.MutableSet): -+class Flags(collections.abc.MutableSet): - """ - A simple MutableSet implementation that will only accept known flags as - elements. -diff --git a/testing/web-platform/tests/tools/wptserve/wptserve/config.py b/testing/web-platform/tests/tools/wptserve/wptserve/config.py -index 7766565fe..3c1c36d6f 100644 ---- a/testing/web-platform/tests/tools/wptserve/wptserve/config.py -+++ b/testing/web-platform/tests/tools/wptserve/wptserve/config.py -@@ -2,7 +2,8 @@ import copy - import logging - import os - --from collections import defaultdict, Mapping -+from collections import defaultdict -+from collections.abc import Mapping - from six import integer_types, iteritems, itervalues, string_types - - from . import sslutils -diff --git a/testing/web-platform/tests/webdriver/tests/support/sync.py b/testing/web-platform/tests/webdriver/tests/support/sync.py -index 3fc77131c..8e8f6b819 100644 ---- a/testing/web-platform/tests/webdriver/tests/support/sync.py -+++ b/testing/web-platform/tests/webdriver/tests/support/sync.py -@@ -81,7 +81,7 @@ class Poll(object): - - exceptions = [] - if ignored_exceptions is not None: -- if isinstance(ignored_exceptions, collections.Iterable): -+ if isinstance(ignored_exceptions, collections.abc.Iterable): - exceptions.extend(iter(ignored_exceptions)) - else: - exceptions.append(ignored_exceptions) --- -2.31.1 diff --git a/copy-headers.patch b/copy-headers.patch index dfa1fdb..2c77981 100644 --- a/copy-headers.patch +++ b/copy-headers.patch @@ -2,37 +2,36 @@ From 3b3c8e37cca418e07bdeceaf3a601805df28d925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= Date: Wed, 15 Jul 2020 08:27:39 +0200 Subject: [PATCH] build: Copy headers on install instead of symlinking - + Patch by Philip Chimento ported forward to mozjs78 --- python/mozbuild/mozbuild/backend/recursivemake.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) - + diff --git a/python/mozbuild/mozbuild/backend/recursivemake.py b/python/mozbuild/mozbuild/backend/recursivemake.py -index e3fc8fe..bed5ae9 100644 +index d964466..0285ad9 100644 --- a/python/mozbuild/mozbuild/backend/recursivemake.py +++ b/python/mozbuild/mozbuild/backend/recursivemake.py -@@ -1457,9 +1457,9 @@ class RecursiveMakeBackend(MakeBackend): - raise Exception("Wildcards are only supported in the filename part" - " of srcdir-relative or absolute paths.") +@@ -1568,9 +1568,9 @@ class RecursiveMakeBackend(MakeBackend): + " of srcdir-relative or absolute paths." + ) -- install_manifest.add_pattern_link(basepath, wild, path) -+ install_manifest.add_pattern_copy(basepath, wild, path) +- install_manifest.add_pattern_link(basepath, wild, dest_dir) ++ install_manifest.add_pattern_copy(basepath, wild, dest_dir) else: -- install_manifest.add_pattern_link(f.srcdir, f, path) -+ install_manifest.add_pattern_copy(f.srcdir, f, path) +- install_manifest.add_pattern_link(f.srcdir, f, dest_dir) ++ install_manifest.add_pattern_copy(f.srcdir, f, dest_dir) elif isinstance(f, AbsolutePath): - if not f.full_path.lower().endswith(('.dll', '.pdb', '.so')): - raise Exception("Absolute paths installed to FINAL_TARGET_FILES must" -@@ -1468,7 +1468,7 @@ class RecursiveMakeBackend(MakeBackend): - install_manifest.add_optional_exists(dest) + if not f.full_path.lower().endswith((".dll", ".pdb", ".so")): + raise Exception( +@@ -1581,7 +1581,7 @@ class RecursiveMakeBackend(MakeBackend): + install_manifest.add_optional_exists(dest_file) absolute_files.append(f.full_path) else: -- install_manifest.add_link(f.full_path, dest) -+ install_manifest.add_copy(f.full_path, dest) +- install_manifest.add_link(f.full_path, dest_file) ++ install_manifest.add_copy(f.full_path, dest_file) else: - install_manifest.add_optional_exists(dest) + install_manifest.add_optional_exists(dest_file) objdir_files.append(self._pretty_path(f, backend_file)) --- -2.26.2 - +-- +2.31.1 \ No newline at end of file diff --git a/emitter.patch b/emitter.patch index 15e752b..ec5547c 100644 --- a/emitter.patch +++ b/emitter.patch @@ -2,60 +2,65 @@ From d1d785c169345b81c76213f6dd9be32b4db60294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= Date: Wed, 15 Jul 2020 08:39:47 +0200 Subject: [PATCH] Build: allow LOCAL_INCLUDES paths with topsrcdir or topobjdir - + --- - python/mozbuild/mozbuild/frontend/emitter.py | 6 ------ - .../mozbuild/test/frontend/test_emitter.py | 20 ------------------- - 2 files changed, 26 deletions(-) - + python/mozbuild/mozbuild/frontend/emitter.py | 10 --------- + .../mozbuild/test/frontend/test_emitter.py | 22 ------------------- + 2 files changed, 32 deletions(-) + diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py -index 8d5ab8e..65c43ff 100644 +index 44b916e..f2e821d 100644 --- a/python/mozbuild/mozbuild/frontend/emitter.py +++ b/python/mozbuild/mozbuild/frontend/emitter.py -@@ -1239,12 +1239,6 @@ class TreeMetadataEmitter(LoggingMixin): - 'is a filename, but a directory is required: %s ' - '(resolved to %s)' % (local_include, full_path), - context) -- if (full_path == context.config.topsrcdir or -- full_path == context.config.topobjdir): +@@ -1367,16 +1367,6 @@ class TreeMetadataEmitter(LoggingMixin): + "(resolved to %s)" % (local_include, full_path), + context, + ) +- if ( +- full_path == context.config.topsrcdir +- or full_path == context.config.topobjdir +- ): - raise SandboxValidationError( -- 'Path specified in LOCAL_INCLUDES ' -- '(%s) resolves to the topsrcdir or topobjdir (%s), which is ' -- 'not allowed' % (local_include, full_path), context) +- "Path specified in LOCAL_INCLUDES " +- "(%s) resolves to the topsrcdir or topobjdir (%s), which is " +- "not allowed" % (local_include, full_path), +- context, +- ) include_obj = LocalInclude(context, local_include) local_includes.append(include_obj.path.full_path) yield include_obj diff --git a/python/mozbuild/mozbuild/test/frontend/test_emitter.py b/python/mozbuild/mozbuild/test/frontend/test_emitter.py -index e8cbd81..d45ccee 100644 +index e53bc5e..c1b9d32 100644 --- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py +++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py -@@ -1040,26 +1040,6 @@ class TestEmitterBasic(unittest.TestCase): +@@ -1098,28 +1098,6 @@ class TestEmitterBasic(unittest.TestCase): self.assertEqual(local_includes, expected) - def test_local_includes_invalid(self): - """Test that invalid LOCAL_INCLUDES are properly detected.""" -- reader = self.reader('local_includes-invalid/srcdir') +- reader = self.reader("local_includes-invalid/srcdir") - - with six.assertRaisesRegex( -- self, -- SandboxValidationError, -- 'Path specified in LOCAL_INCLUDES.*resolves to the ' -- 'topsrcdir or topobjdir'): +- self, +- SandboxValidationError, +- "Path specified in LOCAL_INCLUDES.*resolves to the " +- "topsrcdir or topobjdir", +- ): - self.read_topsrcdir(reader) - -- reader = self.reader('local_includes-invalid/objdir') +- reader = self.reader("local_includes-invalid/objdir") - - with six.assertRaisesRegex( -- self, -- SandboxValidationError, -- 'Path specified in LOCAL_INCLUDES.*resolves to the ' -- 'topsrcdir or topobjdir'): +- self, +- SandboxValidationError, +- "Path specified in LOCAL_INCLUDES.*resolves to the " +- "topsrcdir or topobjdir", +- ): - self.read_topsrcdir(reader) - def test_local_includes_file(self): """Test that a filename can't be used in LOCAL_INCLUDES.""" - reader = self.reader('local_includes-filename') --- -2.26.2 - + reader = self.reader("local_includes-filename") +-- +2.31.1 \ No newline at end of file diff --git a/firefox-78.15.0esr.source.tar.xz b/firefox-78.15.0esr.source.tar.xz deleted file mode 100644 index 8e710d1..0000000 --- a/firefox-78.15.0esr.source.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a4438d84d95171a6d4fea9c9f02c2edbf0475a9c614d968ebe2eedc25a672151 -size 330819568 diff --git a/firefox-91.6.0esr.source.tar.xz b/firefox-91.6.0esr.source.tar.xz new file mode 100644 index 0000000..6f352bf --- /dev/null +++ b/firefox-91.6.0esr.source.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e802832152c39588b9a5c8392e90c1b00036bf948fa4a97a7af0d1435ba09a1 +size 386869628 diff --git a/firefox-91.6.0esr.source.tar.xz.asc b/firefox-91.6.0esr.source.tar.xz.asc new file mode 100644 index 0000000..302be46 --- /dev/null +++ b/firefox-91.6.0esr.source.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEQ2D+IQnEl2MYb44h6+QekPbxL20FAmH4k+gACgkQ6+QekPbx +L23bSQ/9EYSTKO95hdkmGf5upqVYLx1+Pwa1eoUSOgfEBzPJ6GGti1fO+H3lTlMQ +UCFkREUZ3A+JPthMUCC2Rebb0LyFj+5JqV52Tu+xzf7lxfiJqhZ1Jog4IaSHBc4v +rDU10Ir+i55ILquJy09ZbtRh2nyDOo3Vl+DLvQTxHo2ipSaYxZTccXLE46QBp7Om +eFbbvLUhQ9TwG0br9dHNPw6WeJYdjvZXzsh/yO4VO2BLyoakwuPY1P28/CPDBGBX +Lj6tu2oRvx6XYXGIuYTIMGKfNUgzPC25eI88QXOzDB81jHqtifB0hmfKFS18axS/ +Nq3BZMNPnht7GhmnzopsAif2//SGQsZQZsUY2tDYaG+7fLrH49/+vaMNh5/cHQ+7 +fC/PJlEWF/Y3ky6x8gwx4mISPU5QoLaoOFMaCPex6F1Ebnh06x+E293TbIh6LVVz +qi0ZOZkJnnyUYTNeOVP8qGJrFBkbuSsv6JKobheW3HlQlmvg1yf1elF6KhaRoAfR +y85kSh9oAO2k49zHZmq5bO0/4SnYN/0CFcer6UNlzsiOVKAG/T2b1haIgBjTkRSh +jLRZjzCC76WcutZAh3cwjoHRd5R+Q5f8myuUMnQlOw4QnZZnJSA8dF6f5od5d2Cx +J9ox7YI3/VFAu5/Qqg1i/YOitH9bYuAAYRWbR7YyUoJbXGG4KXw= +=UKXR +-----END PGP SIGNATURE----- diff --git a/icu_sources_data-Write-command-output-to-our-stderr.patch b/icu_sources_data-Write-command-output-to-our-stderr.patch index e2ed484..02fd7cc 100644 --- a/icu_sources_data-Write-command-output-to-our-stderr.patch +++ b/icu_sources_data-Write-command-output-to-our-stderr.patch @@ -1,34 +1,44 @@ + From: Simon McVittie Date: Mon, 9 Oct 2017 09:23:14 +0100 Subject: icu_sources_data: Write command output to our stderr - + Saying "See output in /tmp/foobar" is all very well for a developer build, but on a buildd our /tmp is going to get thrown away after the build. Just log the usual way instead. --- - intl/icu_sources_data.py | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - + intl/icu_sources_data.py | 16 ++++------------ + 1 file changed, 4 insertions(+), 12 deletions(-) + diff --git a/intl/icu_sources_data.py b/intl/icu_sources_data.py -index 8cf9290..7d2d983 100644 +index 4db52af..d62960d 100644 --- a/intl/icu_sources_data.py +++ b/intl/icu_sources_data.py -@@ -187,16 +187,13 @@ - +@@ -188,21 +188,13 @@ def update_sources(topsrcdir): + def try_run(name, command, cwd=None, **kwargs): try: - with tempfile.NamedTemporaryFile(prefix=name, delete=False) as f: -- subprocess.check_call(command, cwd=cwd, stdout=f, -- stderr=subprocess.STDOUT, **kwargs) -+ subprocess.check_call(command, cwd=cwd, stdout=sys.stderr, -+ stderr=subprocess.STDOUT, **kwargs) - except subprocess.CalledProcessError: -- print('''Error running "{}" in directory {} -- See output in {}'''.format(' '.join(command), cwd, f.name), -- file=sys.stderr) -+ print('''Error running "{}" in directory {}'''.format(' '.join(command), cwd), -+ file=sys.stderr) +- subprocess.check_call( +- command, cwd=cwd, stdout=f, stderr=subprocess.STDOUT, **kwargs +- ) +- except subprocess.CalledProcessError: +- print( +- """Error running "{}" in directory {} +- See output in {}""".format( +- " ".join(command), cwd, f.name +- ), +- file=sys.stderr, ++ subprocess.check_call( ++ command, cwd=cwd, stdout=sys.stderr, stderr=subprocess.STDOUT, **kwargs + ) ++ except subprocess.CalledProcessError: ++ print('''Error running "{}" in directory {}'''.format(' '.join(command), cwd), file=sys.stderr) return False else: - os.unlink(f.name) return True + + +-- +2.31.1 \ No newline at end of file diff --git a/icu_sources_data.py-Decouple-from-Mozilla-build-system.patch b/icu_sources_data.py-Decouple-from-Mozilla-build-system.patch index a853a16..f82cb99 100644 --- a/icu_sources_data.py-Decouple-from-Mozilla-build-system.patch +++ b/icu_sources_data.py-Decouple-from-Mozilla-build-system.patch @@ -1,26 +1,28 @@ From: Simon McVittie Date: Mon, 9 Oct 2017 09:22:12 +0100 Subject: icu_sources_data.py: Decouple from Mozilla build system - + mozpack.path is a wrapper around os.path that normalizes path separators on Windows, but on Unix we only have one path separator so there's nothing to normalize. Avoid needing to import all of it. --- intl/icu_sources_data.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) - + diff --git a/intl/icu_sources_data.py b/intl/icu_sources_data.py -index 98c0ccb..8cf9290 100644 +index 2936df9..4db52af 100644 --- a/intl/icu_sources_data.py +++ b/intl/icu_sources_data.py -@@ -21,7 +21,9 @@ +@@ -21,7 +21,9 @@ import subprocess import sys import tempfile - + -from mozpack import path as mozpath +# Close enough +import os.path as mozpath +mozpath.normsep = lambda p: p - + # The following files have been determined to be dead/unused by a # semi-automated analysis. You can just remove any of the files below +-- +2.31.1 \ No newline at end of file diff --git a/init_patch.patch b/init_patch.patch index fd09eb7..301d78a 100644 --- a/init_patch.patch +++ b/init_patch.patch @@ -1,13 +1,28 @@ +From 00414eb67ab0591911167155963b5524fbf2b0c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= +Date: Mon, 9 Aug 2021 14:38:58 +0200 +Subject: [PATCH] Don't throw InvalidOptionError on invalid options + +--- + python/mozbuild/mozbuild/configure/__init__.py | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py +index f3167f6..c9e1132 100644 --- a/python/mozbuild/mozbuild/configure/__init__.py +++ b/python/mozbuild/mozbuild/configure/__init__.py -@@ -473,8 +473,8 @@ - msg = 'Unknown option: %s' % without_value - if self._help: - self._logger.warning(msg) +@@ -553,10 +553,7 @@ class ConfigureSandbox(dict): + for arg in self._helper: + without_value = arg.split("=", 1)[0] + msg = "Unknown option: %s" % without_value +- if self._help: +- self._logger.warning(msg) - else: - raise InvalidOptionError(msg) -+ #else: -+ # raise InvalidOptionError(msg) - ++ self._logger.warning(msg) + # Run the execution queue for func, args in self._execution_queue: +-- +2.31.1 + \ No newline at end of file diff --git a/known_failures.txt b/known_failures.txt new file mode 100644 index 0000000..1ff47f6 --- /dev/null +++ b/known_failures.txt @@ -0,0 +1,12 @@ +non262/Intl/available-locales-resolved.js +non262/Intl/available-locales-supported.js +non262/Intl/DateTimeFormat/fractional-second-digits-append-item.js +non262/Intl/DateTimeFormat/tz-environment-variable.js +non262/Intl/DateTimeFormat/day-period-hour-cycle.js +non262/Intl/DateTimeFormat/timeZone_version.js +non262/Date/toString-localized.js +non262/Date/reset-time-zone-cache-same-offset.js +non262/Date/time-zones-imported.js +non262/Date/time-zones-historic.js +non262/Date/toString-localized-posix.js +non262/Date/time-zone-path.js \ No newline at end of file diff --git a/mozilla.keyring b/mozilla.keyring new file mode 100644 index 0000000..50eade5 --- /dev/null +++ b/mozilla.keyring @@ -0,0 +1,369 @@ +This file contains the PGP keys of various developers that work on +Mozilla and its subprojects (such as Firefox and Thunderbird). + +Please realize that this file itself or the public key servers may be +compromised. You are encouraged to validate the authenticity of these keys in +an out-of-band manner. + +Mozilla users: pgp < KEY + +pub rsa4096 2015-07-17 [SC] + 14F26682D0916CDD81E37B6D61B7B526D98F0353 +uid [ full ] Mozilla Software Releases +sub rsa4096 2015-07-17 [S] [expired: 2017-07-16] +sub rsa4096 2017-06-22 [S] [expired: 2019-06-22] +sub rsa4096 2019-05-30 [S] [expires: 2021-05-29] +sub rsa4096 2021-05-17 [S] [expires: 2023-05-17] + +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBFWpQAQBEAC+9wVlwGLy8ILCybLesuB3KkHHK+Yt1F1PJaI30X448ttGzxCz +PQpH6BoA73uzcTReVjfCFGvM4ij6qVV2SNaTxmNBrL1uVeEUsCuGduDUQMQYRGxR +tWq5rCH48LnltKPamPiEBzrgFL3i5bYEUHO7M0lATEknG7Iaz697K/ssHREZfuuc +B4GNxXMgswZ7GTZO3VBDVEw5GwU3sUvww93TwMC29lIPCux445AxZPKr5sOVEsEn +dUB2oDMsSAoS/dZcl8F4otqfR1pXg618cU06omvq5yguWLDRV327BLmezYK0prD3 +P+7qwEp8MTVmxlbkrClS5j5pR47FrJGdyupNKqLzK+7hok5kBxhsdMsdTZLd4tVR +jXf04isVO3iFFf/GKuwscOi1+ZYeB3l3sAqgFUWnjbpbHxfslTmo7BgvmjZvAH5Z +asaewF3wA06biCDJdcSkC9GmFPmN5DS5/Dkjwfj8+dZAttuSKfmQQnypUPaJ2sBu +blnJ6INpvYgsEZjV6CFG1EiDJDPu2Zxap8ep0iRMbBBZnpfZTn7SKAcurDJptxin +CRclTcdOdi1iSZ35LZW0R2FKNnGL33u1IhxU9HRLw3XuljXCOZ84RLn6M+PBc1eZ +suv1TA+Mn111yD3uDv/u/edZ/xeJccF6bYcMvUgRRZh0sgZ0ZT4b0Q6YcQARAQAB +tC9Nb3ppbGxhIFNvZnR3YXJlIFJlbGVhc2VzIDxyZWxlYXNlQG1vemlsbGEuY29t +PokCOAQTAQIAIgUCValABAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ +Ybe1JtmPA1NQqg//Rr6/V7uLqrIwx0UFknyNJasRJZhUkYxdGsLD18zO0Na8Ve3Q +sYpOC3ojpqaFUzpqm6KNv8eXfd/Ku7j3WGr9kPkbjZNghvy6V5Lva4JkxO6LMxKk +JYqiqF2o1Gfda8NfcK08GFy4C0L8zNwlADvmdMo4382tmHNGbTTft7BeVaRrE9xW +9eGmGQ2jYOsjxb5MsadAdZUuK8IC95ZHlUDR3gH9KqhfbQWp5Bo924Kiv+f2JUzN +rrG98eOm1Qb8F9rePzZ2DOYRJyOe4p8Gpl+kojCXNntkJgcwJ1a1yRE6wy9RzpeB +lCeoQuLS92MNne+deQZUskTZFoYXUadf6vbdfqL0nuPCKdl9lhef1QNwE30IRymt +6fhJCFffFQjGdeMfSiCHgcI8ichQbrzhBCGGR3bAHan9c2EbQ+puqG3Aa0YjX6Db +GJjWOI6A61bqSPepLCMVaXqV2mZEIaZWdZkOHjnRrU6CJdXG/+D4m1YBZwYM60eJ +kNu4eMMwMFnRsHiWf7bhqKptwuk8HyIGp2o4j8iqrFRVJEbK/ctdhA3H1AlKug9f +NrfwCfqhNCSBju97V03U26j04JMn9nrZ2UEGbpty+8ONTb38WX5/oC61BgwV8Ki4 +6Lwyb7fImUzz8jE83pjh7s3+NCKvvbH+VfT12f+V/fsphN3EwGwJPTC3fX2IRgQQ +EQIABgUCVaz/SwAKCRB2JUA9fw0VsVNkAKDjhUW5GyFNcyj9ot48v+lSh5GBIACf +Ten/Rpo5tf77Uq7445cVs80EK5CIRgQQEQIABgUCVa064wAKCRDDTldH4j3WdwW5 +AKCVDRxKjb/XYqGhjBCKYhbQ4xJuOACfVIpzE3wGLC/cm9eUnSVnv+elQnKIXgQQ +EQgABgUCVgZXYwAKCRACWrAQaxfqHqzWAP9dzEHoZNwH5JYxotudv3FOotVThaQr +jnk+5StnObpxnAD9FmYyAyYGh4o7axeDCgmW1J89+1cZtDnFPKnBpGFMB4uIXgQQ +EQoABgUCVa0s/gAKCRDwqefc055FLpQGAP99Z2ISKW+7FYoKJ3vDrxTtfcbZEff7 +8ufoinmAlZb2bQD/a2fOcprjWDal9Orfq7g6htkX3VISemg+SDQ/ig+b3uyJARwE +EAECAAYFAlWs/X4ACgkQs8WpWFCKQ/JrjAf7B+fGzEs8xfc010a6KZXcO1W4/Va0 +Q+zcqF+DpQwK7b3S6oD5tCVKD9oFyDXkrlT6Tnwuu+slZwRDIyH6hI6tPb3G8Gsk +vjXMeL0IdgZsw1DSxN0pZ0Z9mxFq/UkC/6TmFA1IJmOWtFCH/1irQWqbDxPmWp+d +Xs2EhH8QzX1KQOE9v/YlsCdmTstMiHy3R8r7prsonpCa36zGheC/UNDpycKdT8JL +zeCFcIWXmA7SCTeJ0XCSuS68FOwfe7nn9oagQZZe/6gh5ecuCoW9HLBWpyIPqUCz +1CXSImLc6BbZYMpAetacarVPa6hiltNicxFE/A3T1F8ZjAcugPKBngUR/4kBHAQQ +AQIABgUCVa0XXAAKCRBlc4Lb/yURCkCYB/95w/9/0rpi+5xtoO2NR0KlqYVG5+NF +1r42XB6t7gVJ9UGF3meV+ekgDSzNrfroqxpzWmV1t3MRJeSMmVS25nC1hAZVQHKd +gX9xVxW3SSufX/jPstvo2U/X3k8q8PhLS6Ihk8YJC3ScjMiNMRpkITMeVdXsdQsY +WStiT48wlWK4gSNMCG5iovdGDTEKErHTIWJl/Wx5el1kvUwg1rKo9uRS2CS/lnlV +6YztDY0cBBOqXP6pXXiWBuVW39LJxsSHq13vpeQ/GHeDxAJ6Y+fPuaV3qBmGZ91o +1/HkxTABFPkISylkPo/2PCoo4Hu31MZ0jQWdihJ7gzf+B7/w6whS79eAiQEcBBAB +AgAGBQJVrWVaAAoJEOQyfGw+ApnAc7AH/0TKg3VR4IEB3NP2C7dX/72PWO0EOh8J +w67XDccRK0lXDILg/CujsYq9EzEofv2LmQFvCuCkoBFEcGas+J2vP3jsY/G5bjZp +XALHkAx7MKlOgsgfeVqMtwaHIoR+y9Hg12TjM7Gt970UBwTIqC8SG6Z1bVWxUdc+ +7Zsn43Dq8z99saOUKD6HMyl9upbjAYwL28NRQtIrNiDZ5lEmDOLh+4hWblxjxWMX +AKjg6sucrNzKD2uKGe9XdB6IkYpdfrNGPtgcnXWdfaRNk16eGVzWDVI/9mkY/G+L +E40eK6oRyMf736CvlQjcv7JBVGTsj3W28phNLLU0UidYK/QmS3AVmBeJARwEEAEC +AAYFAlXBWXAACgkQiRc/lXxV+V6gKQf/d/KfgiYg0Z4dqO3g1p40sgLuxVplhpDk +J4yP5K2isdb6I7GJykVw+po6tUCfB7KeLWiZy0I3KJDU1Ikk+Jv3uGSRMT1riSpM +Ja2pVhh+jaamHIFj2o0mG9HmEAuGKktJH8s6Jax3SiPGODRhFO8suc7B8FpB7f5q +TUDK2J18MlnSK3NN1/zl6OdXScrISQ0cNyJ0RMgW5RSXC7wKzR89tfcDK1wInD8r +cOMHz6Va5g8ehq2XCPKvBAlgo8El17+4UaRLhS0suVz4THPsGASYzZVKIhQQBf+8 +xDXd6zJ/UgkC4iBWHtLm5jvm6Xhsu04s28TmgiH4FKLsstAUFzbiQYkBHAQQAQIA +BgUCVdIa6gAKCRCtfLmfgki6D8xCB/9Q+rCTDQCbWQkRoSV77+kmIb+KVFTcgxfR +Z1L0bKL5YqI6HuCJLgU1ioTxq8W4g+SDv4s69/LIajYYZvSRNv0kGRzm2D4vpcnw +ymyYCJkzcZkuBeyR50S69+1cStbFb7jZMpyZ6rwnKdYOccDSMdaynJGt4rqiY+ra +DPF0H4LExx9a1JFh21Fd0MDc15vsoRZtrOkM8QaKD85hZ/AGOwlw+Kb3DEfjNGcv +nuNp54HfJc0Z5kwVYoOKUatBgjLpRRvl43lUGRaaCCMaNpNZXM20ZhrbTjXRlko8 +QVMUXqE20sDNwv+dDa6G8nBkIGNIHeixrVrVPP7hH5JRMtjZbsWFiQEcBBABCAAG +BQJVrQFGAAoJEFbucY3ODhVLNDgH/izNHcsr1BRnV3yQ6T9sTJJ187BwF1hRLR+Y +3op+fJr+nQ9301XAqLqNbzEB91hRUi2Gb8LTZxxq0gahWzSqmdAE0ObXGGlrEmfj +FSSTFyQ1xRvzooYNZzTjN91XX1dERjyj9SOHBETsZrN01BZB1t3EgoDM7PCNTsX0 +qC65unWvBDftnLdiJ6s3UC9sorMk8q3Zl6DacFw8QKSmJL1R0OPvXiSOZtGQK9Jg +YyHiXQE3MOP5SFSk61e1IawocYn32CXM+EkgtXK5q/thc8OdwsgLAJmGpVB3qd2K +9OaEOKCUV/V91a2P8hCx8MMV2sQgHcMB221wDIWbD5PTHNtCegaJARwEEAEIAAYF +AlWtIrEACgkQo9ZSFzt2Po+mXgf/dUPf6q+aDFoDjLIsfJH5QS8Nn/7frUUdElg8 +PdGxtZ6SQep6uR5fgc+PwOElhUxa665WYtRJ459RWAYmbh2kkP/paGBf9nW0A2wS +koXyJNydJcanyjwHyqKUbBLsXJAvGFtbYRsbeXkEPM5CaKgRUwc8Ilzo9/53CZF/ +avZK4FJX00lZq0/Z8dIY8jUEF64IbJgbaUe1gkuxu7zURgjVKK4bb4lLy/s3tRe0 +00hrKVbFcaNoIZs+Vk/3A/TFdYHFY6I2JpLIeSSJd/Ywh6/YZfGkSHfzn87Dfkyr +gXKQMQ5JvQQgKbO6GPBZSygxWU7R2tNNAJKHSh0/PJ8J7yrqj4kBHAQQAQgABgUC +Va05AwAKCRD20Pdh3MzspCvWB/9DAEaNx5WF3ktmw6jP5cCv60HDwgsmJHusGyAo +53Gwjo4Fx6hv5QYQpTbO4af+4KpFGkex+bZniOJWpT+NJkhx55xbzA903MoZ9+dI +oCtG4K41kA2mMYSpR097yF3fwtuP70UgMZqiCmz/iKFzsrdhjE0KvBjptnYGEWk5 +MMh5xlpzGom3LV/A+KAmEdPw+GCaj5H6qG3/PtWXz+RmjG0sRPycHaNJCWuLz4xM +xV28oAG53Gqc3cDes4Hpds4fPOa8+we7yKTK/2O3lfOUOvKncsoS3vHC/GNfGD86 +RX/vz2TW4GMaLmn75xcAYT0MINIFBf/tXjN1BNrmvrGkkxnbiQEcBBABCgAGBQJV +rQlbAAoJEDNC4bZno4hjKL8H/An2CRzW8IsEjFKD+J+xa5hJYQbcb5W5wjGSs9PL +/pRbH0t8FNS1DevRqoq3xdL5EEUpUgae54gix0An0qKhzC4MRdD9sYFy42mDP7f6 +8Vw2sCZltfBtOHaha7Qj2U28DE9j7Dx04lkHWjdHudJV5PVaPpelW8EDIOMx+4nG +WnXiYEKKMRWpR2BVV1FXnsfbfP2HWpxVaxxWt7WqOmswU0lJCb2bSLteEn8YoA1i +CMLMdMaVXyX92v8Quh2N0NWtzXgc94ug8GiucGKoo2SpdFlXVCysqlPfKBestJlL +93dqP6dOwqoHqOscTJB6rvNzi2tmtAu7WDy4C+BBXNhbYpGJAhwEEAECAAYFAlWs ++ygACgkQljt4MQo3sXysaw/+J6Ztawe/qT5aLW6it+zLq+3oD21UgM1TVP81CjwL +hlHj9wuuGDe+xE8dZA7kvpngKjAxxXPQX/B4rz27Y+kHCvelOSrLW5kodTsPWIkL +cSYMRo4Pws0RIGQBXI8tDIaJJcj7BYb9O7OjCziTEjP5KxDeZ6o4n0NFnZk5NNhS +6B1VnC3Y34DIj4koxm1N5O5br4z8kTc5PN9bMxOZn2u+KxGIeEwZJbHvtrgeAxUP +96B2dUo+jgSuro5jSkIyD+wpfo5o6+/kCtDiXEWo//AHJAwOal02QAodUtrMggwz +J19FfnU8RgiKFjivrbfZi6ITM6RHg+DSF+KnaW2wkc3mGTB0qJsgSLGwOgfv37Qx +O1tTdPxbSfWnZJAspylC74dgh+XOYYDji9tjPtrKZ8sEaHiUVFlO4QTOTlB9yYwO +E7uI/3MKe3Q+0M2a85gvX+S0CdznpXo71aMFj0Hd/7ZMuKNausJZhagHAILbve1M +IATkkfbCTxg5bdYgvdVGAIgUEAAO8mvLl1EvOJgkME5a/I/mK6MLxByuCMaT0RMr +U9S881f+AJuJ3Qxbbo8vN0Iy9KmiCIptcSMKBKLHeMonYaXM8O392/XUKbgSBXkL +oTOybMT+LZhO0upOhpRJqmtyDT1Wjxp7FBku/sUjJXCVy7YpjwkkLxZmvWIhleb7 +S8uJAhwEEAECAAYFAlWs/LgACgkQEstOl+B+Z9HYNA//UKMSIfS0bdY6K+zhxuMS +lIyol8Z/ynkDZSZ8SOeXZViLyRCRoXhY2g6JsygWLsZpthI8fnleQhwy1GLCxWMF +n/PiRjj++VHoJYK/ANP23bC+tyl+jT9gwoPF0eGdWnnot1jGO6f6jFqam0KAL/XN +6ePUrNo0jbrYVrEUer20PYsM3tqGlGgOOFikMoYWwsAVOEh2I5Sgi6iAYfx12RYW +eKw37loDwSr2FNZ5zjxdIyUQnKN1YMd0/Rfi2d86OVD7dV2qa94TFUvYmicpdcOM +9pogKVGmbhz7lirjuAidRhdZkuU+rxvIAd07Oc3bQRdsUCJAs/kjO71v9ov/NqKu +j/BLixxIa0D0eKE41yL13RCfZIG46nI/F5PvLXhDp7sIeohIWsvYv239A9yXfq6B +TeXZ1j8YTlY86yN38JStf8pbGWKlGARM7e1o9DHYY3irLCOWCAnKmF14wbbTMOAe +w2VzxV8895Bweeo2fyCOGFI6SzvOSaOQPUlfmiKmtJrwreg71Vsv64X8X6FHajZY +V9dYJFS2gO8cYJ/zajzn/oeYVTtpsFpJmq7fWByjGd7pAnZHuuSEy/57GEptmYRu +zmI2gn7vYz1rZAbLThFsk/auCU3VYke8Dd3jHnxBuq2+Pa8TmLxibvnE1ZKd0gqZ +dMNY/rT4+LZI+xDczzF3Z7mJAhwEEAECAAYFAlWtLOIACgkQirEyljoGU3rjMhAA +ijskigHf8Q3D3B4Oz673cLNOGfAyEdHWNqlJW0Vcdo05iF8q8utwqmziRWw4PbpO +cdPpUqLb61rWfjSkq4PVTOr8leHHNj/a4aiAYt8DtnpcwJqTmktiijo0Ptn0v8ao +fdRJSVLtPcV0FydLzK6oLovszdWAQ4iVdFjppvdDJtjT4ooXFmZgZg6KzqjEGm8G +4wS4tMlFR4AJZIpWN5gAeLZhCg3jfuKWEgAIVwJZfVPp8qFTIMDCbHGcmszqeDKj +G5hY8q+KeQBs7/jjibY7QjSk+qFvWPlES2NGCnjrD5NL+T5W0AlQZS3kgbDWbnSm +r/xr6OzL8+bi03J3gRW/oWmCIlzvxUJuLgR5M3TRS4GqYfNVs4etgIW7QZXwTo/5 +W8zd5P8UcKOuEFPtmfRjoRZYY30TqrmO9BQkHLKcDbqgnWcm55HaRdkK6+j4tKik +f12/VXez1tP4CkHcMJWE4g3poANtZmHia2MPO9/+1P/pCxUb5jwBF+CDiDhDel1Y +8b7u/ERIugpl8TqGJx+GkUlw0cotZ7BoweNwLXwDDDQlIoA4BT+LFLGQBtUQKMQY +TrDv4PUucMfB96yiEwlw40IdkmHgcBxXFNNxDHMsxEIW2TYoITfmkShiIm7XkcSE +oilPpHFmh6JXpnqOsBhfO0FxKSWkNjsCKCMUGLww5kKJAhwEEAEIAAYFAlWs//EA +CgkQP/MbrxBL+eLdOg//Z9Tcp9kElDdZl3e6aJqGpGviNqIA20KbvYrham5Kn3B9 +1LhvMkypT6fZWAwbNCBHxvOSbOolcSSLpbaHK3A5jsg5MhLJ2G3Xpf7Z91+Mqg/H +iOiJkaAhPoJ0Ny6BCB7jg3yaKLDP4wBwDbOH7JWuP7uQmQ12mqu6WFxok7e53bH5 +i4gmu3QIO21RXyWoLJy/1Y5X3ljPZ1tNawy/Sz8UjeLau2Sl1mQ6JxWWCeLp7Cvw +p+j6nKOFm/hVDlgnFrfIp9aYHjR2fVpwIFxvfff94gm20EywerlcGOAMeT+1QKZy +1V1ekBVX+2zdQ8RPJGZPqXyxnLg9SyUhdLJBPNDNe5ALfolfn2pvBGM3hnRunGOs +PrK53WjGqvXXYhyIkJEd+UoyQBp6zUY/KKFK/7yjgZxX7sCSwNjDlFT2fB1gfll1 +vKoYocPQl2t/B3beKOZJzBkSMk1hBdE0A7URkOoYrFQTdzsSUVwY+/0IAhvxqGKc +HhinLDFON6ee082511VVMrSbCxcnsThjc61CMYA1TxL01Jzb3QIoTWT3W1t2HRZD +/aXcDsg6UMHm1xC1MdZKeKpdJWrnnseC9b/tGuqw2EHitYDquVBmPkx0UoAdsbB5 +ec3q8n4J45VJFJcSrrps/vRSNn0bUqcZlpZSZERdqBTBkbizxgFnvJx734JLhlaJ +AhwEEAEIAAYFAlWtG6MACgkQlWNH9vvzpBVikRAAmfUzps72Opq31lRHZXXGD4/H +FP9SyYRnWzaOWGDMfgO9p3IcRl3qRwOuThCvn+qxTHmRT8KUD8uko9zIU+ttx/zx +An3hvO1nCzsiW33N4vU+Y78Uvs7Rumm2CNif+dKDL41FnVpA191b3T3NGWfigvqB +78fWv/WJIuPJuAhCoJYFbK0Vv2/QF2UAo9O2wdBo0ELZKmP5tWfJuLbc8XzuzgaP +4xzRdgJ+P+IFA4q1zQ49FHQeRWBSWkxFAp3iI9sdH5Na+Lup2vLSDYYmdDOyII5w +5QQ+Y8M78Bvt5GBOk52KfTH3oNjDwtd7ae46yWrSy7razs75klSxi125IfcPr/r8 +e6jt08WVDZRak5mLPryNlf/Y+ymFe07aIp3eiKO1/SJp2K73fCTslXDt/OuzKZSp +656hybxUrRPiXBxHMOWkcPllZqBXf6GxnN+Fdyutk/e+0EBjpK02AxHY3igA3411 +2ZGTGXNCL8ywTidVweOfjyqiWAnCSUvF6+efjRgg2mlD1g6ZDRiKpl9p/ZGETjCh +urlpGSKhtCZWZIGt0x0iSLy4surqDrwwuBqEPSZ08KRr+q9R8HIPuAwjq2CjqDyj +DFNuLx8dhbUUVIAl7a9nJotsph5VK7c/BF0uLW5YnPJYsXG7z1KixL2ydoH1kL41 +zXdcIWBP8H7yPVgUxCKJAhwEEAEIAAYFAlWtG98ACgkQvBcwG0kbPyEIVxAA4imw +p7Df/j5ZZcZ+kkBwAhFO+WnJMfkNNl4g/7vsFKbWFBpiYuGmlvX+poM3nTsWCuEv +v3QohbZHGJS/hY2kdAuxurTI6w4FvvJ0Akz1DUANIF9gfJ9Omu2Znb9xG1fzyCSc +EzUgaf3aim7zyp0arjjqR/msmd2sCjqvy5VgRK21tYAfhWmzdJQntIlCEExfTh9x +guELDLSK3j7ngZla1T3BwE1dlcPVD6l9bl/7ZV5uXmotOqFU+1dBcFG4NKNXmnG5 +TV7x3Ih6Xt982SCpBgVsEow1XFPf0jflPBn6DGJsgpmuIjdymgpJacwZCYkGbTSj +wAeSibYvCw1MRYtrCXd7KlmmQxhYTvvzyoQSqaiIQM8daaXddcy4IdHoOoEJVzfA +/BCyEkb0KhhjTWXQoRBXcxhJYOUjH5nhHd+zml+MHHiy1dL+xANHaBzFaNHpxYUs +FN2MLcMW4rpCnOx/8pRu/o757Y2Ps+ypLUbGPxZJJa26zYXXTAUDDEgEFFM9Rifu +jVCps146sRbrodzgIajc4ScgAWVkHDTKYfq6IBLJZHp8KB1fYFkVrUtwjMmyZCpG +7FqWITGTWOoRbYAsInWuzT7PN+vb/sk0xOk1PzSJV1CmCH9izKrTqRAU42jd4yqV +IuQ3hN8wXoeolSlK3wl27fDtK2EDzVhklvjGdreJAhwEEAEIAAYFAlbwOBsACgkQ +RPRuFG0COV30vQ//Vzyu44NJZrDWdrAyMngMOZ+qIUkeRdtKHEzAFXl6je1ZLyXT +aSKhyWtdxD+NPA4E8vQbEqbcpvzkBhOgfNgVOxWUxC+njB5xhg4PuZLcffm+98S3 +ncyu+bYuhA/kLgOJA2HL1vIQEobdM0XJhVM8G7bhKKSdS5NUd6BS8AgKL5YXbguO +ZwDVq0yuVPg9VNqG5eTwL8fvZhH4L6I5Rh/wv1g++FvnEGRR+7ePprkc2pnJC8j3 +7Z08YzRf5aWCJu89EDsL8wWI/jydPcGLnitNEROfovRX/A647VUl7M4kL0oyblJb +9JFbzPK97YeMwQTUYQOHIp8KsYYKjuBvq9q/Rr9DNpyijp1pshfjEiEZ4YDjTkGX +uWu5EMSlVpC4nEtiBlKT3kMk1mqmc2F7A/g5ug1w+e72E1EbVJMDtAgzjc0+V4kt +RxtTGa8PlfyWouBwL6ReVpEyVz3NS7++QcSY98DgMODMxFggna/zf3bef/lC6RGk +kHyIOC+IhI+q72m0MjdCmzsSA8fqT0PNYs349+sCKw6ocgjSHZlR/8gEZbZC+Fwx +Jf6be2N7eo6hYctOe5XpLaMApVnD3qtw6C9CxWJ4zT6WLyI0SAF3YWmIgLtlYhfF +nRs0ObRXiO7tz0FBuTXD3vljjzq7t8DDK1IS4Cx5AnTZI4rz+/aiD0k5AhmJAhwE +EAEIAAYFAlbwOPIACgkQt4bvJaijiaC0TBAAppcnj7MhOQh+yQCzljw403/hEW5/ +iVEyhfkEtF8lnJQPwSCvKphln4B9/E/Z6HBZ5MNew9xj/JrL/JZfk+E81vSs/fhg +lCXB83bFo/fZ6cnqhubcPlXyXLSAY7J195n+DdInbza5ABuaJW6UeVHbGGM+th7L +S6sYmzoOM1oU8mLzugo57M2a0SZNE2GTjeHFzdeFmKtjk6zGhJcdDMvKNalQZyuf +KSEc7+9j5r0KlJOWY4VMqfYMY6qgiQ89IVSutWbhj+oiivCgi030sXmrdOSwG8/G +gufKpYOQ1ZLXrxzowYJ02vAewYCe20PTyzGt5ReB9XkokffvHnKcxHxhyC6HiAyG +B+8+yf0tJk4Fd7uW6zjGDvphPQhH6bPObVVaMiayEfJhhHbRNmJnUKXRc2CGL0X6 +vbZ12Y1bAALAttEpsNC544WMwLfUCcGfaRTF1E4OpQucU/uizaxGPiUd8Ateqt+m +3GwjY9HAb9QN8ejiOTkH6XsYSzw4KA4iPqqMySHY/DMyfFuilNWd8m93agApO+8r +9+6xjurnbkh50rYtunP3FCMul2QW1wXaGxPTt7a/IcL00NRVwZmJwa3Ys1OrYMRA +OXM0QvRzpHZOsuqHG45jjaRejMZKSQL0zJOyKgtv4YrG1fceLrZWvu7ZjWVNd+0B +nGitgBkGm5VQMuGJAhwEEAEIAAYFAlbwjIoACgkQpIWg7VG4t8QFOw//YFD2UifK +W2VfUy2ig+ewXOwe/BzVfweN/Im+HSN94ooTEwR5wgdYIjxPV+eEKFfAEsazv8b3 +ktZJI+/IxEalHBA+mR4TC2/UlrOgsVCnTHYKL5yJRVHPrdOQ+Zm+kk4vszYocDtC +SPp+/aoRE8u91i6Qu0UdGjMe82HG6qdzVj6bXH9ZFRiWRsfkGxB31cnvfE+aZB+V +qfuy0pbqegJXUE/6In8XRsS12xAk58KM0b8jKQGqYaBB6xE9WDpip5sPycougy6U +29170n+U57c6+x5JQhHC/Rb2AqB8Yl1msC4bj4UsqxWHmLRdcqZs04GiVsrk2fLD +fSfsu023IZPyOhaV/t2KE4DwnAu4b9Sq7PNNzf9yrsgRL4c4OzWEYpMzt38V5QRt +ETJvuuthOypREVNuIs21oRomMJd+PjGsayDuKA7xe/SxDe8tPkoy+FdAfevPXfhy +NWX0vTtcZDpVustEMmoDs7EzlBddrNplsnRZoqW2JyMLErLujc5N8juDPqmAASVy +d7SBUD03e8apjzZSfJhbZsxw4W9z7+rETRSy7o2DPXCabjTGwB1naIc9W4wU/aWU +N81qZZecKLVLxpiXeoUwF3VIJme5Ye1KumsQpTJoi3tVmJ7XDaW9OD8shJtvhlOc +ddt1E4kl9iximuLfhzUjPJyS/ASYhpPNMVSJAhwEEAEKAAYFAlWtDgMACgkQw701 +5G3UXaVUfg/+P9+3vFqijhzT7XkLuNrI9GTn3KslTAPU0Oe/BdLPTMKELqn1YVxk +lnrznLbjL9qkwYwXxY5HT6ykeS+CzQIDLLtXqR1NAz3EWVAm4dT+xqaJZmfCoJ40 ++VqZdQHLjgmj9PFTK7f3vyZ3Ux6em7Z+h7C1ba8jYZS+6GnmGw6+v6LxzRh1SFUm +YBj/X+GPBYg6cnymr+9b2CwTMbczO5XN3hU9UtdF4UlupPvEuV5XWFpCw64kVwxP +OQvvUJ3aTqEGiCAqd8ntyVZ1MWtaob7GI/bj7dTOoSogUqF3aZawfoUHPp6izTd4 +8aRnZhpsK47Y6jIaHDCILhKoAESTnpN1yjqaRIbviHJyYFOHnQESTS7AWrolQVmP ++pmThZWauh+PLVcs4ktp/6CKYvmgnP30HhrPczE7RVKIT32LU3MvT3nFzDmKUruK +eLUNO6LnJ8XwZEVIE3TOVcF+2ME3EcKfV4RwAlBBgYa8DB/CM/rCtoyxdxYSRpHn +9bxbNL6kn+CPAwRZGAChfOPGMhHBh3iDUJaIt79Cq9j6QcZUYfhj1sIvvkDyl0Bc +5U4slbTM6KP5aZgFlCcI9HWwGx/5qIbb1rQNVjxwtiUWediS04YaQ6yt7f/yXbdl +hxPdXDMe/9gdDyuDvP4+1FZbDiV6VT7Bl+UhQnkwf4kuCbSMFjdu+cyJAjMEEAEI +AB0WIQRZyp4tKjMd4lGqJCdfA8dnwkek1QUCWQ72QgAKCRBfA8dnwkek1aBpEACI +6mkO7aXYQyejkTbSyLdE7FoNI4Nq6aKvvQLt+vlGATLgSdz8v7QLGd3KkJYoO5SY +kKjrkGZG4Nb3GOCnWnewBmvCqt7C5/Idl1JTVPdF9CgMHQkwP2F8Tg5X1Ag9oZeL +yRKB/xWbX1LGizRy5s9G6yhq1rwoatNI+Wz36fdCmCqmphm92uPyxuAxy+JZhAbT +/vmANGKlEN5Wjryrp3tmMEhnuJykWq2ZxYiJ9jpx/cNLyjf8fSDBhLXOTG0FYBrZ +k+ZJtw1LlzA36K7IbnunO2qOJzDgvemo5FmGYcm6hyYCzqxBj1VJDmhHu7NZMeMn +vT4d8Py1xBPGPFRYmaK5AP/D07cdDPYawlZA6dMPGE8xSfQxbrayJrj0+vpjSJPt +DUHrg7L+PdpvyVxi8Py0Zfe05h6SjBPrw3eTQS6ODkoZQyh8D7M2HKUiUxvfufvn +LEfeWpd7Vp7hl/VdP3TtbOzL9H/89O5ywf7S/oRKaqgOWkYhs3cfyjqz2boQk8nw +N29sLzm5cH+APxNcju7sz07klp8dRNeImbmgj8mT1xId10mAixJ0NOY8udLhlwg1 +UfsYhP+Yvy9yMcoSZOs5+RjluW/E2qubP3RUt81ohUupdM0NVUJiR/I3Ri6ARb3V +S2aAGtW4oS6PpyVT0dkWrlp8VqFpNTUKE95dNi5Og7kCDQRgos3VARAAtSRABroy +kqOO+3Zq3pehRGM2aft2djiigKhhVg+eJr+YffIU2Q73l9zniYSzVMkFVuJPd7Wk +BnlEMIn8BUGh04op6MV+kzX0guu3v/9i/0agNS31xAdXzmf1i5sbQU1eRylyZRSi +sM2iuF7BYrfSsOBHv71cf+iM94KxrzXiB1bDNL4DN0T5+vCoDjgHaXbten4Qdm6O +djBCUv9Ix8dhT4OzHwHOUK7gomTrQM6Hyb0vgQsDXKV2Ps/pWOSk/J2cCrQUrafF +qkVAAC3m6kaGU8te6YlAU7GFcf4MOPw15WTM2iaKWwPkwK9b/Ro/5RfZbqnde8EB +AoFkg0X8mshGVDBtYCaW+1qUA3ZBcQzUvosYUsNQC9Nx8Y9/tkqCwIBUzsxuIrSY +HxeqPThxSMvCmg2qHXmmbAxsbOz3DTOwKpWSRGOCTGFpsLBqWigjG+L+9iIx+7kr +2gH8tYck1RPyQm04k9udD8wwXCvylTUzNVd876sN3o1xySaO5nz8JtM//xPPctFF +MZmC01bBn+jRuapDqY+qTFL+eKherOUZgs3nHt7cEBz3m8neGg0/JhyBwS6sQF7h +0ETBapVDlKCRuvAgJHIrjejL5v+kVRrH9L6ey5CAdRG9SbffsNwZoo5o8SrdGcX6 +hpFiqg1jZWvZv5x7/PPSW7fPuNNHsoxVRn8AEQEAAYkEcgQYAQoAJhYhBBTyZoLQ +kWzdgeN7bWG3tSbZjwNTBQJgos3VAhsCBQkDwmcAAkAJEGG3tSbZjwNTwXQgBBkB +CgAdFiEEQ2D+IQnEl2MYb44h6+QekPbxL20FAmCizdUACgkQ6+QekPbxL22N6w/+ +ObmFWpCr0dmV1tm+1tuCL05sJ031KFl3EkH389FmrMMoVk49e7H5Urn77ezQXO9M +e8R0nZgVUavJdKcJzgf1IZtLq5Vq5q563I8gglr8rJaaefGYuv9jitx/Ca2s+uvJ +MUHgMeBPmFFOKoIF8QgOJdkSht2lIkd6bd89ayLLoIXlGi8d6K4tEWeMigtds9FY +cyX7o8xXmt9XqCIaMbkJtiUzjz63dN0O81UCj0TvK17KXAvclhzrriZuo2rOeDTB +cQmKKy2UKZaJjUqiezuOg1t513ZIzhy1oXzg5CJb5jgsmZmjtJjr161fv5d8Yock +j73z2/z47wry6ThESfYSkIxJIiIP5SwZyNMeeHSZUnaMTqzd5kDL5qnNrhJHCBBy +xcIBcGppv3VjZ1QNU1k0Tx+MzpfZtbE//idw+Q7Iz9T/3zjN79JhYi1tzzaaQR6J +oEiNMpHHkdkOGRwfdipM7oKl7HKl+zJCzaLTE4mbInCxSgn+1RhI+rGzTXVxqIKo +nYrWra4EVBAgguMrxNMjuEtbsF54Q27x2+H/Mew+et6K/suqyh63Szfd14LWEj4N +aR89tEz76nJyJFuFtDeGSmu68/Pi5S8Ls9MxKJJiIJmc3lQqDUTHEiLc7RtZAsgA +WlLc6UnFsaCqXKJxuaMs7qFD7pqSGfHxYboBxax7Sqrttw//eC7rghiFzfcnEZQn +6+GPW3FJc5P1diSLto99six3uaWKjvSnZScvPOe8ogJt1JQpQAABoHfd7HzzlGzJ +tU/yDL931WD6nETp6b/dk7t3aUpk8WFMG19L+L9QbEpjxDi2wozO7CGg6FhC7mu+ +KsSsorLqd3QYKoBLG0Pb2K3Zz3PN7y17kf1Aixa2//prFNfpEGwP9flz2TUvSdtd +9JvcnDz+/3yB63tmuCsUPZaR3lhTkNiXZG7WTALA1AqIUKFpxI+cOQxaO2+H6XXi +ON3x8A2Pzd1mZyuUMPk2c6I/c1ZfzJXxF/WJVfuztZXNCGocYF4kB3X07uOuiKrI +DMXDT3Op3wJ0RInpjyyPlwwov3zIVQcG3mfWPclXNcIRSAdadLq6yhTBUVbhMd2j +2qga1vtaVlH/m0zFhib88RLf1/FiVX76D1q+anG+gT+SsMPd7hSGQQ2+6ngBAvx4 +T1IHtFgPqfNaA49m8b3aAorGo6Bbzmwh4Xr+7DM2fSskBskGdIPZgA4Vyu4/PC5a +CTyd0NqlBgj/g7XRQMGvFRkdnEIcVZbvxdzn4j16dS+43dUzFMLKThRbkUaunaYo +ZPIYuiqbwCoFX7vJdgBMaTxYfkClc5LJSVr+X+9RYNwlOn4kiQzKstVtl/qfpDow +6QsGmA9J7v8Vt9JEg052REcZZmC5Ag0EValA9AEQAK/z677fpoVUj4zQz0g60wVW +f+1y2lGb8iFYICmvrJyaEra5SRkyihYA1WmEzhN4T//tHw3UIfe646+GkY3eIQW2 +jY9DM2XaElmMN8k/v54nbn5oD7rNEyCTFTvCOq5d74HH1vw96Lzay1vy45E7jPWv +qfg9Se8KAnzElohTJjizyhU+0QbmPHnQlY8gOkT/SvRo9bFEUnqjWh0fRq+K1tdL +PhcFB1scc25iFqh9IAKUGDur8jQ+SDHCjgQlkFOg3rbqtaUOnVHPohfrBM90ZNwu +neFgQY7ZFSUidCimp/EN4CXnzgjDYXUUA42S8G86+G4KAJC22gRQo4mcVmehwHTH +0glfLmUK7TEu29A1KWNL3R/R7ZdyajjpCvUaK2A0Abj3ZE2BSDbJrVlbBVfy5kfP +dZjhd3wUWqFaDHiVcImcjZRWPncllhcy6fhqEy3ELZrkezpJjnARsVkij3GXz6oX ++HVULne2w0dkTXydR6muZI/GeNtrLHmA8B3/0/TllmLy8ChmYZVIKZ8zt1ghq3f+ +hFTXgtZil7eBewZgA6L+EXXK6dZj14lbe6CMS2kungTX9stU1s42I+WRbiqiLpAx +CX6qcLBOWrJwsOep2nvu5bhrPHptSfRhF4Vs1xteVFckCWhcLgdYi/Je1XBEM+AA +Va0k1FiywCg7MqlG6toLABEBAAGJBEQEGAECAA8FAlWpQPQCGwIFCQPCZwACKQkQ +Ybe1JtmPA1PBXSAEGQECAAYFAlWpQPQACgkQHGnE5V6ZBdsvxQ/6A62ZteN0b/TV +fSJ51SdG66amwe2rpRX4UdSw7ifxo3qhgEICQmXR5c09qXwl17MFJWM3FhGrbxnA +5KGgeWGtqrPup4QZPKU+l2Ea2QLSJSiBq5QqqEgZvR14Lhr/hCGhBAq9s/xbp8fb +KNJj/uWiZ+uTPbt5T5rgKJ4+g3B6DNO1rH7F70OLrd32mxZs4pSxngHRAyiMPB59 +yQVDsVMha0JTqC+P96itUzvnInc/9mwE0EMiBtpDTkoBwbJVPnuv+7FjkOLn5s5u +3RLH9fe8z1xnV0fPC0/ndrlNiuBpAn3zVCsWasvW18Vz8K+CQY8Sw0Jw75edBgFo +z2QMFxHfDpMJefvMadB7mdte1lKk/Im9KFFH8Idh9b6zD0a/+Ooujukx6QpFfAVh +e2sT2CIm2nmMAuAZI2cCt7SC+REn9n9MSuIWxN8YTE3qgAUB6F3ea0O0hGlLl+z5 +UOfX0bNAs+ebx/P6PczJtDzeqpmRb0QXqo55JWXLvmXT/fgjF7fNTTLsyCtV+xH6 +ZFKGpvGJGJMHApEbz2a0hy12RZH58eI1ueN3Tzn8nI57+oYSsqFw/QgcdGXDonLG +JsPVzIpQRg92/GXSukWF+MsCjVOilHRSY1wfPPmJ7+kMQ4rdXpjAhwNYJc1ff5N+ +omCxCKoFgYsCXlFCHFKs4JwRbTdd3MkuqBAAlBlIjym8NyJIBltfWckuhQTX4BiB +ltGPNga9CpQsml519EePuLtoe5H0fTUp4UYbL0ZzyJImQE2uw/hMNZ36bA057YtH +OoP4FcPUwv6wsl5JC87UR1XFhAXb5xSU0qdi3hWh0hm772X6CBlM8lM6GtT/fDZk +SGNXMQaIs1X/O9vf8wGg+HwLJcaCvybI4w7w1K0R7WjWZlJXutCZf8hRc0d88W/q +SZYooKD9q2S7foqaJhySIaF11sH5ETvVP3oCfGVIVhKWb0Tp2jXPXlXLeRAQA8S+ +4B1o5XHiM+J3SNXhPQHRGQ3VGcDn45itg3F4xQX2Qvo4SV42NMYd6TykM/dIfQyJ +DOVg3CT3+nqfjCknf94SNvyZprHEPmpcDeseoPMw8kjKNwDwPXFLxBRntPgnqVXD +cNN41OH2kqx4jF7FLlRmwNpB2mFVH8xeVuRm7h2WZRsaEoqvivhzRtESVA2um5Eg +763CVTcNYlK6MD/iy8JzbMuZBrlOHr58HKDdcOy1W0z2quESGoqrwA995IgPav/1 +DSpyuJPNc/oUTWlhpYshqYKoflezAyKj30+UzC3R/mY03ri6zUvCgXHNgZlKUsM3 +VEXk6h5oDuaXniHLLzuxjTBVrILnGYgHSFRP80L/knz+o4Uvq4wj7NHnruc5fP1f +oFxRNsMt40yRJfW5Ag0EWUvZtQEQAL4dTYeBoI6UxWcu7kERc+Tz13WUwSPmOIU6 +RdoXqBc2QyOki8s+uDqIJbpt2YJUPWnPgoU0rDt+msOG9tpAjPVg5pHJe8H9tXxv +aPICQ1YxYw1m8E1kRGio4EurP2G/H/YI3vwRskqI8cp04t88k1DfeKvXYVY34kO/ +VM12XTfRcsiMdmDubTqNPYU1kmYNeqMT+OzI9QE2kulCK0DHDJzqdJLnOkrn1z0l +rFAPoNpVtHZh4D7yB8FH3I1qk9npRdNXvSjhXu4ptvRuszktjEcfHK+ikYP3jVqR +4eWiOKrkVIWJOCsOKIUE27PXndGLbUuDzCvrKusR6W9vF+mYK1p3pT2PYX8HEeJu +zrd1UFBvCWPf2k5RQqHk4JIaKfjAlCPnSXmPHXqSGtD083RJhFkbz4U07/glHWer ++M+Sw+hYT/v+XOhQm3CG/PUaeX2ud6GFefymX/tA1FYJqVxVOye2axoA3lO7yM5s +K/JHMdL7bFZtXVcGCwAqU2mkD2yEkFAzPLBHKigKg+4VimsTbG9jPOS+qtv65x6u +IOOsic3Ud2/BB/lfbvplIvQyJYw8HKb8O0XkUPcD3Q1i8p54JSHhiJm42H699uMm +iJeLzTkQJG7KApEv6nOb+jLyr2DZXuX82/UvZAmzWZg/XOf2xz44/RDXkL865dqR +YenXNaOXABEBAAGJBHIEGAEIACYWIQQU8maC0JFs3YHje21ht7Um2Y8DUwUCWUvZ +tQIbAgUJA8JnAAJACRBht7Um2Y8DU8F0IAQZAQgAHRYhBNzqxdlhNbkcTqZyq7u+ +vbskxvNVBQJZS9m1AAoJELu+vbskxvNVBVMP/21uU+8NpPLpBn6SHJtIAffFYMSn +p0gplOjfiItA8HDbc1vqZlVpdk2xyFw6b7g+vTg1gQzF7uoAZK1czRLCt7ocxntL +VgPuSO1ZHt4hJG5Ze1UUJSDq8Pp+TTL43rg6irDLdYDBBHYESnXWAKRAIuPb1e15 +6pAdpSynwJ3+qPyqj5vDLkPrtMWGp7qWQpXcHaXMea8m4+/RLNIjvRof/t6jrUer +mzs91Z+/C3N8ugD/aZrXTiNkF/H6BiuITZoB0j+rjy4fxEQvTYq9C3NoaBIRxJEP +ApxGnHKe9K9N1ZBELjCUCT1MkbBmf4CJtEgJvSScVh1yZNv+TVDfN6RwF9CwOM8b +VrOH1VuX/L/XiIRRT02eGrvv3EvQ+BhceJpWN+GsHKQM658trZ7RhHo2PR0ib+D7 +hWQprcktqutTfRFPMrgcFTPXKeR57cxvjk+B2LoLSOom3oTNEtUaMuBE8E/jbONX +34QsHWDKfLc3XpLEN+bO65AfTiR4/qtnZBmldBUG9xbrW0qcWz+M5P3S6ssbor3V +DxxrX+Fv6pJccwlgYNFQxQOz8GrZhF0cU48e+0XpU2NFeyueHQ8lb9yYdvhc7mkG +c87iIb+ILah57Wqi52Jd4f0DS2zkxN6ab5/UVEkffNwXfjN0IW28Ga4BtZvoXVGV +Jo4vsGytMFdMRzRB/uAQAI21c3TTrO4TL42NcFQ0RY7yAlaKzXTXVNxC8v/QQKIs +DrNvs4w15rF/t2LXc8Cr3aUNuDtE7x+FaNwZLypCe+RFOy66AG2ENuNt5tTGN3mg +bJZl+01Cd1xPpOzmRfAJnH7YD+J4QuCEEgraAXPfp3MhjeHWtQaWDu29fbTtPx0k +/Bh0qxHFPWxhnYpktnjZEoMmwPMBeitCvcr66UzUmezgVZc0HxJ/LO9Bss7P3egv +60wPnXn579wDGnIriDUhHRcn2KuMI7eT4pL4HHjAAJB/8+vcUzYPuqtxULf5ciu8 +V+ajzHtqBcgwNR/gm/7i+4qKPo14fYBftH5PDj9iD88WIQX7paVbYHJZjrmnpM2i +niL/DRVuxqAPToIc4hMXj8YPeTqS/1ckOzyYgFI9aRaLxZOR0uno1WTRBifwOcy3 +NTwSHK/6YbtJbqoVwISJrGUuvOfBlkJZVlCzVsPG1+QZaPAL3HxVXavYgCu2hze4 +OOWUe2Xuqihw8hb+F1rhP64/QtpjPxgLLb1NIBpm6OgdZjRjCbl9xnd3RvH6hYxO ++zgdn3icn2fFHhdZ7xtYcZZrg9QOXuv6LDvVe5I4VyszNs0jtdcx0P+T5VIrKFAY +yf0CCuL/UQTRrW0SrKOV/RZHuvdpVYK3YIAyd49kKjLk6O9awFQy7cXq3PhjatBi +uQINBFzwOeoBEACt8eaLW7jX3n5tQQ+ICeGOBIVbzAnXlH9bjdTqollM+iiwkdlB +NNEGku7+uQ9dTofem6cbSUXuh5kJNLy5tUIG4oGZLvpAjLdHP8zslgTglQymoWSb +v2ss4pq8xoDbp6E51dkowkyFSuELZKMFHgPiJbfYXxQmbwEiFhGs4+21lwtI4tVO +9zs1XbzJD9XtomxkcYaePeBxpI9JnrWIUKt70JPZi/QcxPMG2si/YitnCVamcVw8 +Wri+W7MAJW3SyNjJUqx/cIOib8vdZVxvdWRIZmdkWkFO6vv4IotEBCflt6cD0EIy +3Ijn3nDDf59v7wpdWXidjzVjKF0F8jUiX6S/ZuEz4lvdotpCgJGhDmdi4pVCYbmS +hKbffgcSJ/BWn4wCOHKPA+XB75zzPj17dcWR8D9GM/sgusJy2fbHDcOdADPynKW3 +Ok1CENJDx7DTDwm2fPRMut4utSL1FMSl7zBDRabcPr1nw+zERjmSjm3R91ayrQ9U +KlP/4P8Xkhjc3FFWrRQ1Q7/SlkUmrTqSouQcOolGMa2ENNgqNeOY7oE5xnPs64TL +AzQ9z66u0dHTMODAS1A6C0l66LrPVYGoQLDkM7WQn7zznFdnKR2nsPOUi0mMdyrG +/62iARtNvuF4xdsUAoCKti3wOsXRuUhiXei4N4qdr8IaIEIFgYEKKtaqzwARAQAB +iQRyBBgBCgAmFiEEFPJmgtCRbN2B43ttYbe1JtmPA1MFAlzwOeoCGwIFCQPCZwAC +QAkQYbe1JtmPA1PBdCAEGQEKAB0WIQQJezEwd65ioC+E2k3xpmaPu31XLgUCXPA5 +6gAKCRDxpmaPu31XLopQEACKv8mYt4aMc0oA25UJXMRig2lXJDqOZBUSvFFm8t6X +gdG0zFdzFo4gqpje68kNyt9duhvOMsVwkzUr+5Di7FccvgwceU3X5ngWpnV/GcXg +79m5viipWUdBRoyZ90oi4D5K6fhlmszmWyiD7KDrjdtIdGnjAuprztkc/JBlIwlm +u/40JyDR5Dfxp256DlzsJ/HH8LbdjJG/F0XvtZUwcHefa7mDXtIWszsMoJnEoLzO +kZvJ13rhJcTHVQImClyS3o9+Pk6DTfy4Ad0w+9nF0rZp+8/GXZGilfn/NXMj0elY +u5WiyCBqargRkrHpebNKW9jxRca02aDS2Yrf8dlseO1d9FXZPOBWIxDRG++TqRhB +K8FUW00DikRDrrV5RsIiXtgtRqH+hwknE33i8m8/KKC5/pUl3Af5f+vMKsT3s1mM +X2zA+NmLUxJCXLz70WqLoShI8QEj+RLk9yuk97bo7KoNSv6xNwXotJKzp08VAnVN +X/QddmV6Z7SnocEs+S6Z0L69sEffMgUaCkH09mIt1yu0DaeOl7fM2iD3VcO6jJ94 +Dg8olkhBgrZERe3sXR2fciFtsqHxYc9zP7YyL7vPbUQ8BogxEfIQZPGdpnG5pTM0 +NSX/mgkOWI2VJFDe/rOFTdTk+8mKVnFdaUfHA48qIeS0V0zMLd4OZkrYlW3iKvZp +s6IAEACauiivWdvKvJgKMyi3fvicXn4qL8nV1X6lmOBqDn4bb0N0mtpiqXfvG950 ++29rcCJSj6qSMVj8ZHuwVktrEoWX6lpJbWwEdUh+35DnjfGOYN8gW8bx0CfyqEx5 +0W++DK5Wj+L+DL7jgJ/l7dMKxLdjijkg+v4yI516nzRbrx3x77U8n+H1V9bHrDfS +cESnr3PtWS4ze4yDrr9Xp+YK8A7RkIctH2ToyEixin8utvfa56dGpUai7gIRZ+0b +tWY0FX6g/VRHwwhLIzTsaFveQGuzFbXaGkOhRASitKtbQo2fD39qAMixkKOctN9A +/nA3dZU8BlJj7258+P36jQDOilr2Y7RlTSTZS5aXeAPbwILwKCNcDjV0keerGSqi +V2zkiH0vAJcxVokn+iMj6VOaM1RyxskgFara0Vt3IuAjnirES/OVuIkhgpebmGXB +PcHqLWpFDtEdLv6YtOwScE0eYb5/SA3XsmK3qgzEAzBfchwl4PqAhiQAf/tbx5Eg +AUbFmwhEcgd9xMY5w6+8/5FjoXwHYmdfjKT9iD7QxF3LnymskoKQQGWBHiwJjaA8 +LYPpopUg9we00zNdSGNXv1Lau9AM//ATiusH8iLJj33ofQh6FviQG6W3TlLPqx/o +IxxNj5bPAQy6dRKB1TxlWr4X0pUWxuqBeObPoHS9j0ysxKPruw== +=81zK +-----END PGP PUBLIC KEY BLOCK----- \ No newline at end of file diff --git a/mozjs78.spec b/mozjs78.spec deleted file mode 100644 index b20401e..0000000 --- a/mozjs78.spec +++ /dev/null @@ -1,114 +0,0 @@ -%global major 78 - -Name: mozjs%{major} -Version: 78.15.0 -Release: 1 -Summary: SpiderMonkey JavaScript library -License: MPLv2.0 and MPLv1.1 and BSD and GPLv2+ and GPLv3+ and LGPLv2+ and AFL and ASL 2.0 -URL: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey -Source0: https://ftp.mozilla.org/pub/firefox/releases/%{version}esr/source/firefox-%{version}esr.source.tar.xz - -# Patches from mozjs68, rebased for mozjs78: -Patch01: fix-soname.patch -Patch02: copy-headers.patch -Patch03: tests-increase-timeout.patch -Patch04: icu_sources_data.py-Decouple-from-Mozilla-build-system.patch -Patch05: icu_sources_data-Write-command-output-to-our-stderr.patch -# Build fixes - https://hg.mozilla.org/mozilla-central/rev/ca36a6c4f8a4a0ddaa033fdbe20836d87bbfb873 -Patch06: emitter.patch -# Build fixes -Patch07: init_patch.patch -# TODO: Check with mozilla for cause of these fails and re-enable spidermonkey compile time checks if needed -Patch08: spidermonkey_checks_disable.patch - -Patch6000: backport-fixup-compatibility-of-mozbuild-with-python-3.10.patch - -BuildRequires: autoconf213 cargo clang-devel gcc gcc-c++ perl-devel pkgconfig(libffi) pkgconfig(zlib) -BuildRequires: python3-devel python3-six readline-devel zip nasm llvm llvm-devel icu rust - -%description -SpiderMonkey is the code-name for Mozilla Firefox's C++ implementation of -JavaScript. It is intended to be embedded in other applications -that provide host environments for JavaScript. - -%package devel -Summary: Development files for %{name} -Requires: %{name}%{?_isa} = %{version}-%{release} - -%description devel -The %{name}-devel package contains libraries and header files for -developing applications that use %{name}. - -%package_help - -%prep -%autosetup -p1 -n firefox-%{version} -cp LICENSE js/src/ -rm -rf ../../modules/zlib - -%build -pushd js/src -export CC=gcc -export CXX=g++ -export RUSTFLAGS="-C embed-bitcode" -export CFLAGS="%{optflags}" -export CXXFLAGS="$CFLAGS" -export LINKFLAGS="%{?__global_ldflags}" -export PYTHON="%{__python3}" - -autoconf-2.13 -%configure \ - --without-system-icu --with-system-zlib --disable-tests --disable-strip --with-intl-api \ - --enable-readline --enable-shared-js --disable-optimize --enable-pie --disable-jemalloc - -%make_build -popd - -%install -pushd js/src -%make_install -# Fix permissions -chmod -x %{buildroot}%{_libdir}/pkgconfig/*.pc -# Remove unneeded files -rm %{buildroot}%{_bindir}/js%{major}-config -rm %{buildroot}%{_libdir}/libjs_static.ajs -# Rename library and create symlinks, following fix-soname.patch -mv %{buildroot}%{_libdir}/libmozjs-%{major}.so \ - %{buildroot}%{_libdir}/libmozjs-%{major}.so.0.0.0 -ln -s libmozjs-%{major}.so.0.0.0 %{buildroot}%{_libdir}/libmozjs-%{major}.so.0 -ln -s libmozjs-%{major}.so.0 %{buildroot}%{_libdir}/libmozjs-%{major}.so -popd - -%check -pushd js/src -PYTHONPATH=tests/lib %{__python3} tests/jstests.py -d -s -t 1800 --no-progress --wpt=disabled ../../js/src/dist/bin/js%{major} -PYTHONPATH=tests/lib %{__python3} jit-test/jit_test.py -s -t 1800 --no-progress ../../js/src/dist/bin/js%{major} basic -popd - -%ldconfig_scriptlets - -%files -%license LICENSE -%{_libdir}/libmozjs-%{major}.so.0* - -%files devel -%{_bindir}/js%{major} -%{_libdir}/libmozjs-%{major}.so -%{_libdir}/pkgconfig/*.pc -%{_includedir}/mozjs-%{major}/ - -%files help -%doc js/src/README.html - -%changelog -* Sat Dec 04 2021 wangkerong - 78.15.0-1 -- update to 78.15.0 - -* Tue May 11 2021 zhanzhimin - 78.4.0-2 -- Type:bugfix -- ID:NA -- SUG:NA -- DESC:fix build error caused by rust - -* Thu Nov 05 2020 chengguipeng - 78.4.0-1 -- Package init diff --git a/mozjs91.spec b/mozjs91.spec new file mode 100644 index 0000000..0c214eb --- /dev/null +++ b/mozjs91.spec @@ -0,0 +1,223 @@ +%define _lto_cflags %{nil} + +# upstream default is clang (to use gcc for large parts set to 0) +%define clang_build 0 + +%global major 91 +# LTO - Enable in Release builds, but consider disabling for development as it increases compile time +%global build_with_lto 1 +# Require tests to pass? +%global require_tests 0 +# LTO is default since F33 and F32 package is backported as is, so no LTO there +# Big endian platforms +Name: mozjs%{major} +Version: 91.6.0 +Release: 1%{?dist} +Summary: SpiderMonkey JavaScript library +License: MPL-2.0 +Group: System/Libraries +URL: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey +Source0: https://ftp.mozilla.org/pub/firefox/releases/%{version}esr/source/firefox-%{version}esr.source.tar.xz +Source1: https://ftp.mozilla.org/pub/firefox/releases/%{version}esr/source/firefox-%{version}esr.source.tar.xz.asc +Source2: https://ftp.mozilla.org/pub/firefox/releases/%{version}esr/KEY#/mozilla.keyring +# Known failures with system libicu +Source3: known_failures.txt + +# Patches from mozjs78, rebased for mozjs91: +Patch01: fix-soname.patch +Patch02: copy-headers.patch +Patch03: tests-increase-timeout.patch +Patch09: icu_sources_data.py-Decouple-from-Mozilla-build-system.patch +Patch10: icu_sources_data-Write-command-output-to-our-stderr.patch +# Build fixes - https://hg.mozilla.org/mozilla-central/rev/ca36a6c4f8a4a0ddaa033fdbe20836d87bbfb873 +Patch12: emitter.patch +# Build fixes +Patch14: init_patch.patch +# TODO: Check with mozilla for cause of these fails and re-enable spidermonkey compile time checks if needed +Patch15: spidermonkey_checks_disable.patch + +BuildRequires: autoconf213 cargo ccache clang-devel gcc gcc-c++ libtool perl-devel llvm llvm-devel nasm pkgconfig python3-devel python3-setuptools +BuildRequires: python3-six readline-devel zip rust pkgconfig(icu-i18n) >= 67.1 pkgconfig(libffi) pkgconfig(nspr) pkgconfig(zlib) icu + +%description +SpiderMonkey is the code-name for Mozilla Firefox's C++ implementation of +JavaScript. It is intended to be embedded in other applications +that provide host environments for JavaScript. + +%package -n libmozjs-%{major}-0 +Summary: JavaScript's library +Group: System/Libraries + +%description -n libmozjs-%{major}-0 +JavaScript is the Netscape-developed object scripting language used in millions +of web pages and server applications worldwide. Netscape's JavaScript is a +superset of the ECMA-262 Edition 3 (ECMAScript) standard scripting language, +with only mild differences from the published standard. + +This package contains the JavaScript's library. + +%package devel +Summary: Development files and tools for %{name} +Group: Development/Libraries/Other +Requires: libmozjs-%{major}-0 = %{version} +Requires: pkgconfig + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + +%package_help + +%prep +%autosetup -p1 -n firefox-%{version} + +cp LICENSE js/src/ + +cp %{SOURCE3} js/src/ + +rm -rf ../../modules/zlib + +%build +pushd js/src +%if 0%{?clang_build} == 0 +export CC=gcc +export CXX=g++ +%endif +%ifarch %arm %ix86 +# Limit RAM usage during link +export LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" +%endif + +# Workaround +# error: options `-C embed-bitcode=no` and `-C lto` are incompatible +# error: could not compile `jsrust`. +# https://github.com/japaric/cargo-call-stack/issues/25 +export RUSTFLAGS="-C embed-bitcode" + +%if 0%{?build_with_lto} +# https://github.com/ptomato/mozjs/commit/36bb7982b41e0ef9a65f7174252ab996cd6777bd +export CARGO_PROFILE_RELEASE_LTO=true +%endif + +export CFLAGS="%{optflags}" +export CXXFLAGS="$CFLAGS" +export LINKFLAGS="%{?__global_ldflags}" +export PYTHON="python3" + +autoconf-2.13 +%configure \ + --with-system-icu --with-system-zlib --disable-tests --disable-strip --with-intl-api \ + --enable-readline --enable-shared-js --enable-optimize --disable-debug --enable-pie --disable-jemalloc +%if 0%{?big_endian} +echo "Generate big endian version of config/external/icu/data/icud67l.dat" +pushd ../.. + /usr/sbin/icupkg -tb config/external/icu/data/icudt67l.dat config/external/icu/data/icudt67b.dat + rm -f config/external/icu/data/icudt*l.dat +popd +%endif +%make_build +popd +%install +pushd js/src +%make_install + +# Fix permissions +chmod -x %{buildroot}%{_libdir}/pkgconfig/*.pc + +# Avoid multilib conflicts +case `uname -i` in + i386 | sparc ) + wordsize="32" + ;; + x86_64 | sparc64 ) + wordsize="64" + ;; + *) + wordsize="" + ;; +esac + +if test -n "$wordsize" +then + mv %{buildroot}%{_includedir}/mozjs-%{major}/js-config.h \ + %{buildroot}%{_includedir}/mozjs-%{major}/js-config-$wordsize.h + + cat >%{buildroot}%{_includedir}/mozjs-%{major}/js-config.h < + +#if __WORDSIZE == 32 +# include "js-config-32.h" +#elif __WORDSIZE == 64 +# include "js-config-64.h" +#else +# error "unexpected value for __WORDSIZE macro" +#endif + +#endif +EOF + +fi + +# Remove unneeded files +rm %{buildroot}%{_bindir}/js%{major}-config +rm %{buildroot}%{_libdir}/libjs_static.ajs + +# Rename library and create symlinks, following fix-soname.patch +mv %{buildroot}%{_libdir}/libmozjs-%{major}.so \ + %{buildroot}%{_libdir}/libmozjs-%{major}.so.0.0.0 +ln -s libmozjs-%{major}.so.0.0.0 %{buildroot}%{_libdir}/libmozjs-%{major}.so.0 +ln -s libmozjs-%{major}.so.0 %{buildroot}%{_libdir}/libmozjs-%{major}.so +popd +%check +pushd js/src +# Run SpiderMonkey tests +%if 0%{?require_tests} +PYTHONPATH=tests/lib python3 tests/jstests.py -d -s -t 1800 --exclude-file=known_failures.txt --no-progress --wpt=disabled ../../js/src/dist/bin/js%{major} +%else +PYTHONPATH=tests/lib python3 tests/jstests.py -d -s -t 1800 --exclude-file=known_failures.txt --no-progress --wpt=disabled ../../js/src/dist/bin/js%{major} || : +%endif + +# Run basic JIT tests +%if 0%{?require_tests} +PYTHONPATH=tests/lib python3 jit-test/jit_test.py -s -t 1800 --no-progress ../../js/src/dist/bin/js%{major} basic +%else +PYTHONPATH=tests/lib python3 jit-test/jit_test.py -s -t 1800 --no-progress ../../js/src/dist/bin/js%{major} basic || : +%endif + +popd + +%post -n libmozjs-%{major}-0 -p /sbin/ldconfig +%postun -n libmozjs-%{major}-0 -p /sbin/ldconfig + +%files +%doc js/src/README.html +%{_bindir}/js%{major} + +%files -n libmozjs-%{major}-0 +%license LICENSE +%{_libdir}/libmozjs-%{major}.so.0* + +%files devel +%{_libdir}/libmozjs-%{major}.so +%{_libdir}/pkgconfig/*.pc +%{_includedir}/mozjs-%{major}/ + +%changelog +* Fri Mar 04 2022 liuyumeng - 91.6.0-1 +- update to mozjs91.6.0-1 + +* Sat Dec 04 2021 wangkerong - 78.15.0-1 +- update to 78.15.0 + +* Tue May 11 2021 zhanzhimin - 78.4.0-2 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:fix build error caused by rust + +* Thu Nov 05 2020 chengguipeng - 78.4.0-1 +- Package init + diff --git a/mozjs78.yaml b/mozjs91.yaml similarity index 100% rename from mozjs78.yaml rename to mozjs91.yaml diff --git a/spidermonkey_checks_disable.patch b/spidermonkey_checks_disable.patch index 14ba0ad..cad6a49 100644 --- a/spidermonkey_checks_disable.patch +++ b/spidermonkey_checks_disable.patch @@ -1,10 +1,22 @@ + +From 6ebe8ce6a3267c96454de3cd453269b4c4053a3e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= +Date: Mon, 9 Aug 2021 14:41:14 +0200 +Subject: [PATCH] Don't die on SpiderMonkey checks + +--- + config/run_spidermonkey_checks.py | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/config/run_spidermonkey_checks.py b/config/run_spidermonkey_checks.py +index 0f842d9..b49db52 100644 --- a/config/run_spidermonkey_checks.py +++ b/config/run_spidermonkey_checks.py -@@ -11,5 +11,5 @@ +@@ -11,5 +11,3 @@ import sys + def main(output, lib_file, *scripts): for script in scripts: - retcode = subprocess.call( - [sys.executable, script], cwd=buildconfig.topsrcdir) + retcode = subprocess.call([sys.executable, script], cwd=buildconfig.topsrcdir) - if retcode != 0: - raise Exception(script + " failed") -+ #if retcode != 0: -+ # raise Exception(script + " failed") +-- +2.31.1 \ No newline at end of file diff --git a/tests-increase-timeout.patch b/tests-increase-timeout.patch index c86cca4..b2bba7b 100644 --- a/tests-increase-timeout.patch +++ b/tests-increase-timeout.patch @@ -1,26 +1,25 @@ -From 9be85b155c6df0454c5faef9e850f572c99e3615 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= -Date: Wed, 15 Jul 2020 08:32:44 +0200 -Subject: [PATCH] Increase the test timeout for slower buildds - -Ported forward from Debian: https://bugs.debian.org/878284 ---- - js/src/Makefile.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/js/src/Makefile.in b/js/src/Makefile.in -index b86aeed..d68655a 100644 ---- a/js/src/Makefile.in -+++ b/js/src/Makefile.in -@@ -53,7 +53,7 @@ check:: check-js-msg - - check-jstests: - $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON3) -u $(srcdir)/tests/jstests.py \ -- --no-progress --format=automation --timeout 300 \ -+ --no-progress --format=automation --timeout 600 \ - $(JSTESTS_EXTRA_ARGS) \ - $(DIST)/bin/$(JS_SHELL_NAME)$(BIN_SUFFIX) - --- -2.26.2 - +From 9be85b155c6df0454c5faef9e850f572c99e3615 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= +Date: Wed, 15 Jul 2020 08:32:44 +0200 +Subject: [PATCH] Increase the test timeout for slower buildds + +Ported forward from Debian: https://bugs.debian.org/878284 +--- + js/src/Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/js/src/Makefile.in b/js/src/Makefile.in +index b86aeed..d68655a 100644 +--- a/js/src/Makefile.in ++++ b/js/src/Makefile.in +@@ -53,7 +53,7 @@ check:: check-js-msg + + check-jstests: + $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON3) -u $(srcdir)/tests/jstests.py \ +- --no-progress --format=automation --timeout 300 \ ++ --no-progress --format=automation --timeout 600 \ + $(JSTESTS_EXTRA_ARGS) \ + $(DIST)/bin/$(JS_SHELL_NAME)$(BIN_SUFFIX) + +-- +2.26.2 \ No newline at end of file