diff --git a/.travis.yml b/.travis.yml index cf2a71612..882f41b33 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,14 +12,12 @@ before_install: - echo password=changed! >> $HOME/.splunkrc # Set SPLUNK_HOME - export SPLUNK_HOME="/opt/splunk" - # Pull docker image - - docker pull splunk/splunk-sdk-travis-ci:$SPLUNK_VERSION # Add DOCKER to iptables, 1/10 times this is needed, force 0 exit status - sudo iptables -N DOCKER || true - # Start Docker container - - docker run -p 127.0.0.1:8089:8089 -d splunk/splunk-sdk-travis-ci:$SPLUNK_VERSION - # curl Splunk until it returns valid data indicating it has been setup, try 20 times maximum - - for i in `seq 0 20`; do if curl --fail -k https://localhost:8089/services/server/info &> /dev/null; then break; fi; echo $i; sleep 1; done + # Start docker-compose in detached mode + - docker-compose up -d + # Health Check (3 minutes) + - for i in `seq 0 180`; do if docker exec -it splunk /sbin/checkstate.sh &> /dev/null; then break; fi; echo $i; sleep 1; done # The upload test needs to refer to a file that Splunk has in the docker # container - export INPUT_EXAMPLE_UPLOAD=$SPLUNK_HOME/var/log/splunk/splunkd_ui_access.log @@ -32,8 +30,8 @@ before_install: language: python env: - - SPLUNK_VERSION=7.3-sdk - - SPLUNK_VERSION=8.0-sdk + - SPLUNK_VERSION=7.3 + - SPLUNK_VERSION=8.0 python: - "2.7" diff --git a/CHANGELOG.md b/CHANGELOG.md index 6934cee08..89c2b6450 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Splunk Enterprise SDK for Python Changelog +## Version 1.6.15 + +### Bug fixes +[#301](https://github.com/splunk/splunk-sdk-python/pull/301) Fix chunk synchronization +[#327](https://github.com/splunk/splunk-sdk-python/pull/327) Rename and cleanup follow-up for chunk synchronization +[#352](https://github.com/splunk/splunk-sdk-python/pull/352) Allow supplying of a key-value body when calling Context.post() + +### Minor changes +[#350](https://github.com/splunk/splunk-sdk-python/pull/350) Initial end-to-end tests for streaming, reporting, generating custom search commands +[#348](https://github.com/splunk/splunk-sdk-python/pull/348) Update copyright years to 2020 +[#346](https://github.com/splunk/splunk-sdk-python/pull/346) Readme updates to urls, terminology, and formatting +[#317](https://github.com/splunk/splunk-sdk-python/pull/317) Fix deprecation warnings + ## Version 1.6.14 ### Bug fix diff --git a/README.md b/README.md index 4d2241222..fbb4f3827 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # The Splunk Enterprise Software Development Kit for Python -#### Version 1.6.14 +#### Version 1.6.15 The Splunk Enterprise Software Development Kit (SDK) for Python contains library code and examples designed to enable developers to build applications using the Splunk platform. @@ -13,7 +13,7 @@ The Splunk platform is popular with system administrators for aggregation and mo The Splunk developer platform enables developers to take advantage of the same technology used by the Splunk platform to build exciting new applications. -For more information, see [Splunk Enterprise SDK for Python](https://dev.splunk.com/enterprise/docs/devtools/python/sdk-python/) on the Splunk Developer Portal. +## Getting started with the Splunk SDK for Python ## Get started with the Splunk Enterprise SDK for Python @@ -37,7 +37,6 @@ Here's what you need to get going with the Splunk Enterprise SDK for Python. Get the Splunk Enterprise SDK for Python from [PyPI](https://pypi.org/project/splunk-sdk/). If you want to contribute to the SDK, clone the repository from [GitHub](https://github.com/splunk/splunk-sdk-python). - ### Install the SDK Use the following commands to install the Splunk Enterprise SDK for Python libraries in different ways. However, it's not necessary to install the libraries to run the examples and unit tests from the SDK. @@ -58,8 +57,17 @@ Install the sources you cloned from GitHub: [sudo] python setup.py install +## Testing Quickstart + +You'll need `docker` and `docker-compose` to get up and running using this method. -### Run the examples and unit tests +``` +make up SPLUNK_VERSION=8.0 +make wait_up +make splunkrc_default +make test +make down +``` To run the examples and unit tests, you must put the root of the SDK on your PYTHONPATH. For example, if you downloaded the SDK to your home folder and are running OS X or Linux, add the following line to your **.bash_profile** file: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..c4107d5dc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3.6' + +services: + splunk: + image: "splunk/splunk:${SPLUNK_VERSION}" + container_name: splunk + environment: + - SPLUNK_START_ARGS=--accept-license + - SPLUNK_HEC_TOKEN=11111111-1111-1111-1111-1111111111113 + - SPLUNK_PASSWORD=changed! + - SPLUNK_APPS_URL=https://github.com/splunk/sdk-app-collection/releases/download/v1.0.0/sdk-app-collection.tgz + ports: + - 8000:8000 + - 8088:8088 + - 8089:8089 + healthcheck: + test: ['CMD', 'curl', '-f', 'http://localhost:8000'] + interval: 5s + timeout: 5s + retries: 20 diff --git a/docs/conf.py b/docs/conf.py index 4755a4b89..3c7c43d4b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -43,7 +43,7 @@ # General information about the project. project = u'Splunk SDK for Python' -copyright = u'2014, Splunk Inc' +copyright = u'2020, Splunk Inc' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -95,7 +95,7 @@ # a list of builtin themes. # agogo, default, epub, haiku, nature, pyramid, scrolls, sphinxdoc, traditional -html_theme = 'default' +html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the diff --git a/examples/searchcommands_app/setup.py b/examples/searchcommands_app/setup.py index ec2118dd0..fdb734630 100755 --- a/examples/searchcommands_app/setup.py +++ b/examples/searchcommands_app/setup.py @@ -439,7 +439,7 @@ def run(self): setup( description='Custom Search Command examples', name=os.path.basename(project_dir), - version='1.6.14', + version='1.6.15', author='Splunk, Inc.', author_email='devinfo@splunk.com', url='http://github.com/splunk/splunk-sdk-python', diff --git a/scripts/build-splunkrc.py b/scripts/build-splunkrc.py index 464d7cf6a..0d544665c 100644 --- a/scripts/build-splunkrc.py +++ b/scripts/build-splunkrc.py @@ -25,9 +25,9 @@ 'host': 'localhost', 'port': '8089', 'username': 'admin', - 'password': 'changeme', + 'password': 'changed!', 'scheme': 'https', - 'version': '6.3' + 'version': '8.0' } DEFAULT_SPLUNKRC_PATH = os.path.join(str(Path.home()), '.splunkrc') diff --git a/splunklib/__init__.py b/splunklib/__init__.py index a879ab9d1..668dcfe7f 100644 --- a/splunklib/__init__.py +++ b/splunklib/__init__.py @@ -16,5 +16,5 @@ from __future__ import absolute_import from splunklib.six.moves import map -__version_info__ = (1, 6, 14) +__version_info__ = (1, 6, 15) __version__ = ".".join(map(str, __version_info__)) diff --git a/splunklib/binding.py b/splunklib/binding.py index e7336f2a1..a95faa480 100644 --- a/splunklib/binding.py +++ b/splunklib/binding.py @@ -724,7 +724,12 @@ def post(self, path_segment, owner=None, app=None, sharing=None, headers=None, * :type headers: ``list`` of 2-tuples. :param query: All other keyword arguments, which are used as query parameters. - :type query: ``string`` + :param body: Parameters to be used in the post body. If specified, + any parameters in the query will be applied to the URL instead of + the body. If a dict is supplied, the key-value pairs will be form + encoded. If a string is supplied, the body will be passed through + in the request unchanged. + :type body: ``dict`` or ``str`` :return: The response from the server. :rtype: ``dict`` with keys ``body``, ``headers``, ``reason``, and ``status`` @@ -1223,6 +1228,8 @@ def post(self, url, headers=None, **kwargs): headers.append(("Content-Type", "application/x-www-form-urlencoded")) body = kwargs.pop('body') + if isinstance(body, dict): + body = _encode(**body).encode('utf-8') if len(kwargs) > 0: url = url + UrlEncoded('?' + _encode(**kwargs), skip_encode=True) else: @@ -1378,7 +1385,7 @@ def request(url, message, **kwargs): head = { "Content-Length": str(len(body)), "Host": host, - "User-Agent": "splunk-sdk-python/1.6.14", + "User-Agent": "splunk-sdk-python/1.6.15", "Accept": "*/*", "Connection": "Close", } # defaults diff --git a/splunklib/client.py b/splunklib/client.py index de2f53a16..39b1dcc34 100644 --- a/splunklib/client.py +++ b/splunklib/client.py @@ -1872,7 +1872,7 @@ def delete(self, username, realm=None): name = UrlEncoded(realm, encode_slash=True) + ":" + UrlEncoded(username, encode_slash=True) # Append the : expected at the end of the name - if name[-1] is not ":": + if name[-1] != ":": name = name + ":" return Collection.delete(self, name) diff --git a/splunklib/searchcommands/generating_command.py b/splunklib/searchcommands/generating_command.py index f3fa72baf..724d45dd9 100644 --- a/splunklib/searchcommands/generating_command.py +++ b/splunklib/searchcommands/generating_command.py @@ -204,19 +204,21 @@ def _execute(self, ifile, process): """ if self._protocol_version == 2: - result = self._read_chunk(self._as_binary_stream(ifile)) + self._execute_v2(ifile, self.generate()) + else: + assert self._protocol_version == 1 + self._record_writer.write_records(self.generate()) + self.finish() - if not result: + def _execute_chunk_v2(self, process, chunk): + count = 0 + for row in process: + self._record_writer.write_record(row) + count += 1 + if count == self._record_writer._maxresultrows: + self._finished = False return - - metadata, body = result - action = getattr(metadata, 'action', None) - - if action != 'execute': - raise RuntimeError('Expected execute action, not {}'.format(action)) - - self._record_writer.write_records(self.generate()) - self.finish() + self._finished = True # endregion diff --git a/splunklib/searchcommands/internals.py b/splunklib/searchcommands/internals.py index 9a2a4e9e2..f7146e289 100644 --- a/splunklib/searchcommands/internals.py +++ b/splunklib/searchcommands/internals.py @@ -35,6 +35,7 @@ import os import re import sys +import warnings from . import environment @@ -74,7 +75,7 @@ def set_binary_mode(fh): class CommandLineParser(object): - """ Parses the arguments to a search command. + r""" Parses the arguments to a search command. A search command line is described by the following syntax. @@ -505,8 +506,8 @@ def __init__(self, ofile, maxresultrows=None): self._inspector = OrderedDict() self._chunk_count = 0 - self._record_count = 0 - self._total_record_count = 0 + self._pending_record_count = 0 + self._committed_record_count = 0 @property def is_flushed(self): @@ -524,6 +525,30 @@ def ofile(self): def ofile(self, value): self._ofile = set_binary_mode(value) + @property + def pending_record_count(self): + return self._pending_record_count + + @property + def _record_count(self): + warnings.warn( + "_record_count will be deprecated soon. Use pending_record_count instead.", + PendingDeprecationWarning + ) + return self.pending_record_count + + @property + def committed_record_count(self): + return self._committed_record_count + + @property + def _total_record_count(self): + warnings.warn( + "_total_record_count will be deprecated soon. Use committed_record_count instead.", + PendingDeprecationWarning + ) + return self.committed_record_count + def write(self, data): bytes_type = bytes if sys.version_info >= (3, 0) else str if not isinstance(data, bytes_type): @@ -555,8 +580,7 @@ def _clear(self): self._buffer.seek(0) self._buffer.truncate() self._inspector.clear() - self._record_count = 0 - self._flushed = False + self._pending_record_count = 0 def _ensure_validity(self): if self._finished is True: @@ -651,9 +675,9 @@ def _write_record(self, record): values += (repr(value), None) self._writerow(values) - self._record_count += 1 + self._pending_record_count += 1 - if self._record_count >= self._maxresultrows: + if self.pending_record_count >= self._maxresultrows: self.flush(partial=True) try: @@ -690,7 +714,7 @@ def flush(self, finished=None, partial=None): RecordWriter.flush(self, finished, partial) # validates arguments and the state of this instance - if self._record_count > 0 or (self._chunk_count == 0 and 'messages' in self._inspector): + if self.pending_record_count > 0 or (self._chunk_count == 0 and 'messages' in self._inspector): messages = self._inspector.get('messages') @@ -728,9 +752,9 @@ def flush(self, finished=None, partial=None): print(level, text, file=stderr) self.write(self._buffer.getvalue()) - self._clear() self._chunk_count += 1 - self._total_record_count += self._record_count + self._committed_record_count += self.pending_record_count + self._clear() self._finished = finished is True @@ -748,37 +772,36 @@ class RecordWriterV2(RecordWriter): def flush(self, finished=None, partial=None): RecordWriter.flush(self, finished, partial) # validates arguments and the state of this instance - inspector = self._inspector - - if self._flushed is False: - - self._total_record_count += self._record_count - self._chunk_count += 1 - - # TODO: DVPL-6448: splunklib.searchcommands | Add support for partial: true when it is implemented in - # ChunkedExternProcessor (See SPL-103525) - # - # We will need to replace the following block of code with this block: - # - # metadata = [ - # ('inspector', self._inspector if len(self._inspector) else None), - # ('finished', finished), - # ('partial', partial)] - - if len(inspector) == 0: - inspector = None - - if partial is True: - finished = False - metadata = [item for item in (('inspector', inspector), ('finished', finished))] - self._write_chunk(metadata, self._buffer.getvalue()) - self._clear() + if partial or not finished: + # Don't flush partial chunks, since the SCP v2 protocol does not + # provide a way to send partial chunks yet. + return - elif finished is True: - self._write_chunk((('finished', True),), '') + if not self.is_flushed: + self.write_chunk(finished=True) - self._finished = finished is True + def write_chunk(self, finished=None): + inspector = self._inspector + self._committed_record_count += self.pending_record_count + self._chunk_count += 1 + + # TODO: DVPL-6448: splunklib.searchcommands | Add support for partial: true when it is implemented in + # ChunkedExternProcessor (See SPL-103525) + # + # We will need to replace the following block of code with this block: + # + # metadata = [item for item in (('inspector', inspector), ('finished', finished), ('partial', partial))] + # + # if partial is True: + # finished = False + + if len(inspector) == 0: + inspector = None + + metadata = [item for item in (('inspector', inspector), ('finished', finished))] + self._write_chunk(metadata, self._buffer.getvalue()) + self._clear() def write_metadata(self, configuration): self._ensure_validity() @@ -793,7 +816,7 @@ def write_metric(self, name, value): self._inspector['metric.' + name] = value def _clear(self): - RecordWriter._clear(self) + super(RecordWriterV2, self)._clear() self._fieldnames = None def _write_chunk(self, metadata, body): @@ -818,4 +841,4 @@ def _write_chunk(self, metadata, body): self.write(metadata) self.write(body) self._ofile.flush() - self._flushed = False + self._flushed = True diff --git a/splunklib/searchcommands/search_command.py b/splunklib/searchcommands/search_command.py index faed2eaff..7383a5efa 100644 --- a/splunklib/searchcommands/search_command.py +++ b/splunklib/searchcommands/search_command.py @@ -398,7 +398,7 @@ def flush(self): :return: :const:`None` """ - self._record_writer.flush(partial=True) + self._record_writer.flush(finished=False) def prepare(self): """ Prepare for execution. @@ -776,7 +776,6 @@ def _process_protocol_v2(self, argv, ifile, ofile): # noinspection PyBroadException try: debug('Executing under protocol_version=2') - self._records = self._records_protocol_v2 self._metadata.action = 'execute' self._execute(ifile, None) except SystemExit: @@ -833,6 +832,8 @@ def _decode_list(mv): _encoded_value = re.compile(r'\$(?P(?:\$\$|[^$])*)\$(?:;|$)') # matches a single value in an encoded list + # Note: Subclasses must override this method so that it can be called + # called as self._execute(ifile, None) def _execute(self, ifile, process): """ Default processing loop @@ -846,8 +847,12 @@ def _execute(self, ifile, process): :rtype: NoneType """ - self._record_writer.write_records(process(self._records(ifile))) - self.finish() + if self.protocol_version == 1: + self._record_writer.write_records(process(self._records(ifile))) + self.finish() + else: + assert self._protocol_version == 2 + self._execute_v2(ifile, process) @staticmethod def _as_binary_stream(ifile): @@ -909,7 +914,9 @@ def _read_chunk(istream): _header = re.compile(r'chunked\s+1.0\s*,\s*(\d+)\s*,\s*(\d+)\s*\n') def _records_protocol_v1(self, ifile): + return self._read_csv_records(ifile) + def _read_csv_records(self, ifile): reader = csv.reader(ifile, dialect=CsvDialect) try: @@ -934,7 +941,7 @@ def _records_protocol_v1(self, ifile): record[fieldname] = value yield record - def _records_protocol_v2(self, ifile): + def _execute_v2(self, ifile, process): istream = self._as_binary_stream(ifile) while True: @@ -945,41 +952,25 @@ def _records_protocol_v2(self, ifile): metadata, body = result action = getattr(metadata, 'action', None) - if action != 'execute': raise RuntimeError('Expected execute action, not {}'.format(action)) - finished = getattr(metadata, 'finished', False) + self._finished = getattr(metadata, 'finished', False) self._record_writer.is_flushed = False - if len(body) > 0: - reader = csv.reader(StringIO(body), dialect=CsvDialect) + self._execute_chunk_v2(process, result) - try: - fieldnames = next(reader) - except StopIteration: - return + self._record_writer.write_chunk(finished=self._finished) - mv_fieldnames = dict([(name, name[len('__mv_'):]) for name in fieldnames if name.startswith('__mv_')]) + def _execute_chunk_v2(self, process, chunk): + metadata, body = chunk - if len(mv_fieldnames) == 0: - for values in reader: - yield OrderedDict(izip(fieldnames, values)) - else: - for values in reader: - record = OrderedDict() - for fieldname, value in izip(fieldnames, values): - if fieldname.startswith('__mv_'): - if len(value) > 0: - record[mv_fieldnames[fieldname]] = self._decode_list(value) - elif fieldname not in record: - record[fieldname] = value - yield record - - if finished: + if len(body) <= 0: return - self.flush() + records = self._read_csv_records(StringIO(body)) + self._record_writer.write_records(process(records)) + def _report_unexpected_error(self): diff --git a/tests/searchcommands/recordings/scpv2/Splunk-6.3/TestInternals.test_record_writer_with_recordings.1443154424.42.output b/tests/searchcommands/recordings/scpv2/Splunk-6.3/TestInternals.test_record_writer_with_recordings.1443154424.42.output index cc12b13fe..92f5bb5dc 100644 --- a/tests/searchcommands/recordings/scpv2/Splunk-6.3/TestInternals.test_record_writer_with_recordings.1443154424.42.output +++ b/tests/searchcommands/recordings/scpv2/Splunk-6.3/TestInternals.test_record_writer_with_recordings.1443154424.42.output @@ -1,5 +1,5 @@ -chunked 1.0,18,237289 -{"finished":false}_serial,__mv__serial,_time,__mv__time,random_bytes,__mv_random_bytes,random_dict,__mv_random_dict,random_integers,__mv_random_integers,random_unicode,__mv_random_unicode +chunked 1.0,14904,762288 +{"inspector":{"messages":[["debug","\u2b71\ud7de\uc73d\ud2d8\uc3b8\uafe5\u6650\ucc7f\u7666\ud8ff\uc51a\uc679\u4512\ubdbc\ud6bc\u934e\u2932\ue944\u3161\u655c\ua84d\u51b6\uf218\u27dc\ub55c\ubd45\u661e\u5407\u358c\u1a0e\u81f3\uec99\ubdd7\u6ff9\ue56b\u7ae1\u1afb\u0a0f\ud751\u35b9\ueda7\u3680\ua3c9\u8008\ucd29\ud793\udd36\u905b\ua9d2\u0a3b\u8c7c\ua1b1\u113f\u0efc\u0c10\u3cbd\uddea\u7e67\ub9e5\u0dbb\u3c24\uda5e\u3331\ufd25\u8519\ua20d\uada0\ue10a\u8b00\u481d\ua0f2\ud391\u2e9f\ucc11\u450c\uf1e5\u37b6\ud12a\u98f3\uc258\u2138\u83a9\uf4f2\ua2ba\u022d\ue419\u97d2\u72f7\u1990\uf453\u4d24\u2877\u80d0\u0b86\u4bd1\u04a4\uf6f8\u0c89\uf941\u7981\u6705\uec0d\u89bb\u1182\ua225\ua8c4\uf84f\u989f\u4e5f\ue1ff\ua409\uae3b\ucb29\u48c4\ubec6\ued2c\ubfd4\u7a81\ub7e8\u8c58\u958b\ue6aa\u9683\u8abe\u5c15\ud9cf\u115a\u9527\ubef8\ue4d0\u010a\u9d2c\u8045\uddd8\u2aae\uafae\ub6d9\u7fe4\u130f\uee23\u406f\ud18e\ufd10\ua0dc\u6b15\u8cb4\ue0b1\u2d21\ud781\u1824\ucceb\u3ca2\ua7d2\u114e\uc6eb\u2eef\u3301\ub367\ubc72\uc9ef\u3c71\u52a7\ud7aa\ub1d1\u1266\ua4f6\u65d0\u1592\ufda8\u83a7\u465d\u6e0c\u2571\ua67b\u932e\u53b8\u505f\uac0b\u2fc6\u59b1\u1858\u3180\uf2c6\u870a\uec86\ude63\ub306\u9896\u5c17\u0aff\ue179\u40f0\ua347\u5d83\u7008\u8d05\u8b96\u8b99\u615b\u712f\u5277\u41ae\u7d44\ud32f\u5e8e\uafa0\u7b6e\u387e\uc261\u1aa6\ua1dd\uaa68\ua440\u2c87\u0968\ucdf1\ud643\u317a\u3951\u1512\u1358\u8a2b\u923b\u69a1\u6cd1\u5443\u5938\u6ea7\u8726\u64d1\u4890\ud884\uf045\u3fab\u3592\u1389\ue3a7\ua3ce\ub33c\ud365\u90e5\u2ef6\uf32f\u2667\u6576\ufc52\u6fac\uf229\u70c3\u8e69\u5970\ufee5\u6381\u12c9\u3734\ua6e7\ud9ec\ue53b\u009a\u4508\u3170\u3011\u955c\ud034\u3ab7\u8248\uf430\u6b56\u0434\u5bc6\u71c0\u73d4\ued94\u219e\u48a9\u255f\u509b\u6116\uc448\u0e34\u2a00\uabb1\u1d8f\u4f55\uc2b4\ud012\ub948\u37f2\u71c9\u2654\ua560\u596e\u6d3a\u1042\uad3c\ua096\u7043\u045b\ud667\u37b7\ucf9f\u7c04\u67f6\u21f7\ud845\u10ad\u3b3b\u7514\u7571\u56c5\uf859\u7838\u43cc\u9d1d\ufd92\uc008\u0909\uc61f\u0747\uebb5\u93b6\ud260\u32fc\u1287\ucfaf\u07db\udf3a\u8051\u3ed1\uf371\u067e\u5d12\u7846\u1667\u65fe\uf748\u060c\u1d42\u4a80\u9ccf\uc4c9\udfff\u95ca\u2ece\u796f\u1a61\uce85\ucf3f\u21d5\ud753\u0d36\uce43\u257a\u4e94\u9daa\ud94c\ud64e\uf9a3\u614c\ucfb8\u1b9b\u61bb\uc92e\ue359\u0651\u050a\u48ed\u393b\ud7bb\u13d9\ua1fa\u0a45\uf930\u529b\u6510\u54de\uaf5e\uc0db\u5eeb\u3f15\ueb8a\u74d6\u61cc\u0c12\u54c8\u4422\ua31e\u42d9\ue603\u6026\u15d3\u7236\uab0c\ue70f\u4537\u87dd\ud006\ud1ee\ue3f5\u3cef\u5b0d\u1e2a\u2562\u2e5a\ud2a0\u7ca0\u77ef\u7bf2\uccaf\ub20e\ue76b\u41fe\udd62\u0e7e\u8846\uf6ed\u0d01\u4295\udcf2\u382f\u81ff\u3114\uc76a\u8e5a\u9256\u2974\u5365\u74b5\u8291\u6ab2\u720f\u5464\ub512\u00cb\u7c62\u5ca4\u0b9d\u48fb\u8922\uc319\u3f9b\uc6ed\ude05\u9f06\u4f22\u3454\u3e61\u822b\u61f4\uf3c1\u2ab4\ua048\u8915\ud624\u74f1\u3fee\uc189\ueb5a\u0955\u4be2\u7c9a\u2a71\ufed8\ud31e\u5071\u05db\u031a\udf81\uec49\u01fb\ud88b\u1c88\u7731\u9103\ua683\u321f\u2744\udb82\u64f0\u5afe\u4553\u129b\u97eb\u640e\u2e4f\u4bcd\u2629\u7035\ube78\u1e1f\ue030\ud91b\u4e58\u804c\ub939\u4dd8\ue049\u1796\u1b87\u28c3\udea9\u1578\u1fea\u5cc7\u0379\ud877\u1137\u2b1a\u45e3\uc00f\u2ad4\uf286\u883e\ub7d4\u1346\ub53a\uce79\uc43a\u8697\uc100\ua8f5\u8f99\ue8cf\u42af\u1cab\uac78\ua481\u436c\u2832\u20cc\u18cb\u93d4\u1ce6\uf30d\uad7e\ucb81\ucd3f\u9bff\ua36d\u1c46\ucdb7\uf38c\u3be1\u0a3d\u30e3\u2dcf\u2e40\u2a77~\u26ed\u6580\u6f0b\uaa7f\ud05a\uca78\ue4ee\u92c8\u57a3\uc756\u3e0c\u4a13\u60dc\u2bb8\u36f8\uf6f0\u9622\ud65e\u3d35\uea3c\u3aee\u182a\u44b5\uf0e5\u9229\u4dee\u0375\ub87e\udc0d\uebdd\u22a2\uad89\u106b\u789e\u760b"],["error","\u1253\u427b\u42a5\u5c6f\u531d\uc76c\u1a20\uf3a4\u0801\u0e4a\ub0e0\uc6d7\u1582\u2f42\u4c33\u58e7\uf830\u93e7\ue509\ua9b9\u60e1\u6d71\ub872\u0bd1\ue6df\u7fec\u1f46\u1211\u9349\u1cb1\u1abe\u1848\u53d8\uf9cb\u05b3\uf616\ud9db\ud7d4\uc567\ua65f\ucd41\u966a\u5a32\u9f05\u31fc\u1442\u3760\u47f4\u9c31\ue4fa\u39bb\ub837\uc9ac\u2108\u1265\u1393\u91a2\uc182\ub300\u4add\uebed\uf4a5\u6a48\u93bc\ue800\u8742\ufe41\ue2d4\u3432\u89f7\u229f\u0376\u9d8a\u05e7\u7d44\u586a\u99ba\ua043\u97dd\ud85c\u6754\u3c0e\uac78\u78b4\u9b12\uf1bc\u7318\u2c17\u101c\u174c\ub29d\ue9c7\uf6a4\u0fa9\ua53c\ud160\u2504\u11f0\u9f6a\uf372\uf208\u3e15\u3076\u2c89\u37c4\u9a7f\ud782\u3372\u93ff\udaec\u44f3\ud4c4\u5404\u0f4f\u2d63\ua977\u2884\u520b\ufd8c\u2b56\ub7d9\ued24\u4e4c\u920a\ucbda\u23f8\udf02\u5d7e\ud124\u3ea6\u1933\ua440\u7b39\uef3c\u023e\u1fab\ua132\ud4f0\u85e5\ubc21\uf321\u7b95\u0383\u7393\u092e\u112a\u57ae\ub9cd\uffab\u4979\u48e9\u04ed\uc55c\u6656\uf531\u286c\ufc11\uc7cc\u9362\u6516\u0259\u6f35\u0d9d\uea31\u1be8\u000f\u2927\u06ea\ubfbc\ucd92\ubd04\ub964\u0c3d\u0e92\u2f08\u243e\ua4e4\udd00\u55fe\u77b4\ub4af\uf336\u1191\u9e43\u431c\u8a52\u6bd7\u0a1a\u8728\uea55\ufe8b\u6a28\ub73b\ua875\u543e\u7e2e\u2f21\ufa8f\ud911\udc09\ufaea\u35a6\u9968\u4a65\u9a48\ue949\udc87\u33bb\u0f93\ufde1\u5021\uc841\u7736\uadfc\u315f\u642d\ua9a8\u6ab8\u1478\uddc7\ua155\u8cb7\u46ca\ud1ff\uf726\u9cb3\u2c5f\u4d29\uf3c4\ua934\u75a7\ufaa9\u183b\uf2b6\ub654\u9320\u6d4a\ue70c\uac3d\u4dda\u1808\u40f4\u2447\ub741\u4928\u8bdf\uf468\u1baa\u8371\u370f\u2c43\u0af4\uf438\u3dce\u0d5f\u7610\u01c8\ufff9\u04b1\udcaa\u6854\u0cf9\u44f1\udfbe\u79db\u83c7\u5947\u4e20\ua60e\ubb8d\ua0cb\u8e3f\u2b19\u91dd\u922e\u68cf\udec5\u781c\u255c\ud7aa\ub2f4\u8d0e\u91e5\uc5af\uc575\u7dea\u0c5d\u9f2b\ue6bd\u5048\u8256\u3bf3\u0d8e\ud3da\u3405\u37fb\u59d4\u6c47\u308f\u36fc\u7d92\u47a8\u5c86\u3316\u9d00\u1844\u5b70\u758c\ub5a9\u26d9\u49e9\u2283\u1587\uefa5\u5f25\uf45e\ubed6\u8685\uc7ee\u6b7b\u8e27\ua051\uff38\u1dcc\ud620\ub583\ua126\u447d\ucadb\u9adc\udb27\uaa8e\u3e3c\u6dac\u4656\u454b\ubc75\ud0b1\uc2d1\u698e\ufa11\uc90d\u0811\u5065\u4d6f\u7b9a\u7442\ubd1a\u05a5\u349c\u5cfb\u311c\u5094\u52db\u9d33\ua1ed\u7362\u56df\ub1a6\u8aa2\u7e70\ud3b6\u78fb\u66b3\ua882\u60c2\u674a\u5927\u5cf1\u693a\u49b4\ud14f\uf6dd\uf90d\u0b0c\u6e2b\u3027\u3cc6\u43cd\ua999\u2c86\u1024\u85c1\ud243\u69b6\ueb93\ub604\ua887\u6974\u5f7a\ub37b\u8236\u424f\ud692\u87ee\u0632\u43dc\u5863\ueae7\ua770\uf34c\ud24c\u2197\u0a98\u1845\u8d3a\u745d\ue316\u52c6\u455d\u94ca\u2bc6\u9a28\u0ef1\u09ad\ufa71\u2f30\u1bb9\uf990\u9b7c\u26f1\uc1b8\u657e\ub47e\uefcb\ua120\u5061\ub91f\u29b4\u0b72\u68fc\uf025\u0c6e\u46df\u77fd\uad9c\ucf1b\u91f7\u3653\ue09a\u18ff\u828d\ueb1b\u0ad8\uc923\u66a1\u6234\ua683\ua6fa\u2f5e\u30e1\u0e37\u3899\ufbc5\u5259\ufe5e\u5bf3\u0e82\u6e8d\ubc44\ub457\uc6b5\u3859\u711f\uabfa\u1632\u8087\ub7e1\ubf77\u72c8\uad23\ue054\uee27\u3749\u13b7\ucc4e\uc989\ufdcb\u47f0\u2312\ue3b8\u8c5b\ubeec\udd1f\u24bc\uc2c4\u1554\uce45\u526c\u98dc\u1e76\ubce9\u7d99\u85bc\ueec2\u8ce5\u638c\u1e8f\ubc0c\u972b\u0cda\u8c27\udca4\u74af\u1c03\ud7fb\u2aa0\u27d7\ud5ac\u4409\ud2bd\u2465\ufdc7\u56c6\uca40\u1337\ufcea\ua3e5\u78a9\u4d63\u1927\u5919\u442a\u90e4\uda61\u2911\u4b9d\udfab\u8b28\u865c\u64b9\u58b7\u0b39\ue98a\u6cfc\uc013\uae55\u9566\uf3a8\u903c\u16b4\u63fa\u6f3b\u3127\ue2f5\u1db6\u727e\uec2f\u6cc8\ue57e\u3fe5\u3a17\u1ac8\u7d40\u1609\u5119\u8af8\u3e5a\ua70e\ufda6\uacf1\ud5be\u5a70\udcec\u420d\ue6b6\u60af\ua46c\ubd5c\u2d95\u69cf\u57e9\ub508\uf81d\u8b91\u020e\uebe5\u2148\uc6c0\u7b9b\u8f02\ud252\u2273\u0e22\u6f27\ue41b\ua3ea\u6593\u2009\ue7b8\uc533\u3ba0\ud9d5\ua8d9\u3ba9\ubdef\u5e3e\u3181\u0bbb\u7425\u2684\u0f89\u0848\u0bae\u75c3\uad5e\ua3c8\u04dc\u34eb\uaf17\u9180\u5edd\ub971\u9962\uf91e\u51e7\ue92f\uf386\u6192\u5b3b\u7e64\u7da8\ubfce\ud637\u5cd3\u014e\uf27e\u32d5\ud050\uaad3\u7304\uc3be\u9287\ua34b\u8d39\u7bea\u7629\uae3e\u8caf\u6bdf\u8807\u4be8\u357c\uedf2\u0684\ue90f\u5f8c\u28e1\u1e68\u4990\ucc8f\ufffc\u18b7\u2a64\uc6ce\u25df\u44fe\u4711\u667a\ua00a\u759d\u0944\u28ea\uc2e4\ue602\u4c48\u45ae\u7acc"],["fatal","\u9ad1\u40d3\u8b2e\uc72f\u4e92\ub1e6\udc78\uae2f\u5729\ud2ec\ua6f0\ud046\ud347\u2532\u33ce\u9736\u0e4e\uec88\ueb0a\ua83f\uf6bd\u3d72\uc95c\ud565\u9708\u2cea\ucda2\u103e\u5530\u26db\u750a\u968c\u69f1\u18b3\u0905\u84be\u432e\u4743\u165c\ub6d3\ucb6d\u6b9c\u5088\u2b36\uf2d5\u6bb3\udd35\u94aa\u1eae\u40aa\ud85c\u7372\ubef0\u0262\ua0ef\u8462\u89e9\ud937\u7f5d\uceed\u6fa2\ueb2b\u2490\u20eb\u5a42\ub306\u14da\uefe0\ud81f\u23e2\u1a35\u9fbe\ub1a8\u2497\u7479\ue3c4\u82e5\u844f\u37a4\u112c\u4d19\ufa61\uaedc\ufb33\ud1b3\ua8aa\uda06\u9ff3\u08cd\uc0b4\u0b7d\u83db\u35c9\u03b2\u513d\u9866\u7391\u14f1\u2a04\u94ef\u69bc\uaaed\ue7c5\ue528\u6cd6\u37c1\uef29\ue9ae\ud7fb\ucf6c\u2f31\u8f1c\u9121\uefcd\ud1ee\u69ca\u5a01\u5e0b\u9ce7\uf614\u47d5\udb97\u17d3\u14ef\ub7d4\u4f04\u80ff\ucbb0\ucbb4\u077e\ue86a\u088c\u0710\u3a79\ucebf\ueb3e\u970a\ub4b7\u6056\uc68a\uf48e\ufc1b\u87d0\u162d\uad1e\ud19f\ud4f5\uc2ac\u69c2\ud8de\u357c\udd1b\u99c0\ua3a6\u0a37\u3d69\u9cfb\u257f\u6a0e\u9b5b\u3f48\u63af\u2c0d\u34b9\u6ff8\ua3dd\u55f3\uc31a\u4441\ufcaf\u5813\u1160\uce19\u09bf\ude69\u0619\u7986\u0ae0\u7261\uad37\u1d16\uc88c\u25e1\ub664\u234a\u7b01\u5e23\uc2bd\u2663\u7ed1l\u1b94\u2006\u51f6\u5c78\u6b9a\u589b\uf1d9\u8438\ub087\u2713\uc8f1\u4def\uc468\ud9e4\u8ddb\u58be\u949a\u7380\uaff5\ucd1b\u7122\ue19b\u1ba6\u7bbc\u4e47\u6210\uf123\u28d8\u3dbc\u4fff\uae9c\ud3f0\ucdcd\ua348\u22ed\u4a8a\u7ce2\u9bf6\u12f7\u870e\u0dff\ue60d\u154f\u539d\u961b\ucf11\u851d\u2777\uaa52\u98e6\u35bb\u6f0b\u8119\u6043\u4850\u511d\ue2a5\u2453\ueac3\u3a04\u0082\ue4b4\u848a\ubbec\u4f6e\u349f\u6771\u3c81\uada7\u73df\u5a5b\ub510\u8016\u06ac\u4bb4\ucedc\u50be\u36ea\u13ba\u9349\uca8f\uca69\ub347\u85e9\u62e6\u9e88\u604b\u1a6b\uddd4\u18ba\uc783\u9e3f\u86ee\ud30c\u26ec\u2783\ub252\u247e\ubc93\u0352\ua6b1\uf2c1\ube84\ud43a\u2420\u2b2d\ub33b\ud3c8\uf1ef\ue435\u3f91\uc6ee\u688f\u34a2\ud776\u080c\u1621\u7a77\uda72\u5e2a\u0ceb\ua021\u6605\u7338\u67eb\uf0a9\u1fbe\ud7fa\u0d84\ue96a\ud316\u793b\u43ef\ucc6b\ub10c\ub979\u849c\u5230\ufaa4\ub927\u3a5c\u11ae\u2ea1\u4c3e\u3d1a\u1aba\u6f21\ue944\u9dfc\ube11\u1a59\u382d\u5f0f\uec1f\u61b2\ue49e\u4baa\u6718\u81c7\u62bd\u5393\u36c1\u7f59\ud480\u03c7\u9d12\uee1d\u8a6b\u0ea1\u9e35\ub3fe\u242b\u6f1e\u7ecb\u3c1c\uad45\ub186\ud672\u0b40\u079d\uf50c\u5e21\u0209\ua678\u56a6\u3abe\u597e\ufd41\u39c3\u54d6\u317c\u753d\udf54\u1267\u06aa\u4529\ufbe8\u1517\u4f32\ud3bb\uc323\u6a14\uf199\uf2dd\u2940\ua357\u8039\u6036\u829c\u411c\u5ee2\u499d\udc31\u8c46\uba67\u8d52\u2cf7\u8998\ua6ba\ud517\u19d0\u8cdd\ua520\u4741\u6324\ub6ee\ua3d5\u7b8a\u9985\ue893\u11b4\uedea\uff46\u06ba\ue807\uc99a\u82ec\u55e9\u8782\u3fc5\u72b4\u1a61\ub565\ued42\u4b84\u3dd9\uf8b7\ufcf5\ua75a\uf5db\u3240\ub7ea\uf59f\ua1ca\u180f\u840a\ue4dc\ua02a\ud18d\u001a\u0625\uaa5f\ueccd\u13a0\ubfdc\ua174\u129b\u1b61\u855f\u5546\u1474\u850b\uf259\u7673\u91d0\uf260\u93cd\ue687\u7ebf\ubc4c\u7747\ub685\ue6be\uc1cc\u9a4b\ub14b\uc19c\ua4e3\u905e\u88b0\u687d\u4805\ue84b\ud025\u2044\ufc2c\u7ee5\ub4a6&\u83d4\u6d9a\u2d08\u221d\u00cd\u84b8\u575a\u177a\u8694\u858a\u3a40\u0f02\ueb8a\ubce6\u98c3\uf495\uef8f\ubffe\ub6a3\u1bf5\u0f0c\u7c07\u36a9\u46b2\ua913\u7899\u572f\u9458\u62c8\u7609\u205c\u2b66\ue4ce\ud533\u0d88\u3981\uace1\u72a8\u4a0b\u7159\ua17c\ua965\u5744\u11fa\u4bde\u1081\u6fcc\u0238\u395f\u4b58\ud7c5\u237d\uec84\uf623\u56ea\u5bbe\u383d\u24bf\u7b08\u7779\u3f42\u86fe\u25d4\u7a63\ucad9\u3e2a\u11b1\u1c6c\u0d40\u8869\u9720\u403f\u57e9\u82a6\u26b9\u738c\ua5c3\u4687\uec93\ue7ec\u8c78\u04c5\ub076\u4f0f\u97d7\uca3f\u1a1d\u9924\u7b29\ub85d\u7f8e\u9289\ub4c1\ud977\ud5b7\uca06\u5922\u8def\u9a41\u883b\u0b3f\ud540\u3b43\u06f9\ud0d0\u286b\u019d\ud6c4\ub60a\u555b\u6c82\u2601\u1a0b\ub049\ub4b2\ua37d\uf1de\u4c3c\u2ae0\u70d5\u6796\u9596\u242d\u95d8\u3efd\u32a3\u62f1\uf90e\uf19d\ud3d5\u905f\ub305\u9269\u9ba3\u8e9f\u9c02\u341e\uf878\u9425\u60a1\ua4ca\u8f38\u9605\u3292\uf6bb\u3332\u7f2e\ue36c\uf5b8\u713d\ud50e\u8360\u8e65\ueba7\ub842\u940d\u027e\u7ef2\u0c60\ufeb3\uc679\u559c\u9719\u13e3\u9be8\ub2ef\u3bb1\ub11c\u1766\u3db8\u9a71\u5966\u6b1c\ufa15\u18f8\u6476\u46ad\uaa38\u8969\u4ff3\uafdb\udc73\uf7a4\u08a8\uc4bd\u8142\u0128\u787e\u9035\u955f\u50a9\ud0e3\uccb6\uebc1\u13a2\ue0c0\uc341\u5fe5\u0b67\u4eb4\u4a4c\u5b30\u6d68\u8636\u8f23\u6e38\uf00c\ub5f5\ud40b\ua462\ua257\u307e\u388d\u0585\uf745\ubd6b\uf3d2\u89c5\u8786\ue880\ue3ea\ued16\uffcb\ue08f\u4986\u11c9\u3ed8\u46ee\u07b6\uf99a\ud701\u2125\uf723\ua79a\u3a8d\ub2b8\u5955\ub620\uc43d\uce25\u3ff6\uc3f4\u089e\u8fcc\u2d98\ucbaf\u49ff\u289d\u68e9\u1e0c\u7ef1\u9907\uc59e\ud0ea\u3438\ub6eb\u994b\uc3f8\uae71\ub38c\u35ad\u47f7\u5221\ub6e0\ufe3d\ubef1\u46fd\u5160\u57bc\uab8f\ub68e\uad5d\u9101\u6742\uc136\u208e\u6cfd\u61b6\u9ae2\ud542\u851c\ue33f\u16e6\ud391\ua9d1\u80b4\u1e5a\u87e1\u6937\u20c1\ub863\uceb7\u0fe4\ue4af\uca38\ub96f\uc832\u9743\u5af8\udd7a\u6ed8\ua0d1\uc868\u1d90\u2fe2\u1c52\u2d3d\u702a\u1be1\u3a09\u2557\u20bc\ud68b\ua6cc\ubddb\u355f\u531a\ue97f\u45c6\u986c\ued18\u3c53\uaceb\uc3b4\ueb08\ub87f\uc772\u7771\uff47\u450e\u1cf6\ua62d\u8ffd\u17ae\uec3e\ub2ba\ud376\ua4f2\ubaa9\uf8b8\u83e0\ufa47\u1b98\u1dcc\u2127\u8fe8\ud54c\u3681\uc0bd\ufc3b\udbf2\u9f89\ubda1\ucfa5\udd87\u07fb\u50e5\udf2e\u4dac\u69e9\uc824\u0a0e\udacb\u0d18\u547d\u4fa7\u8d53\u12cf\uf94a\ude62\ub7a9\u3a6a\uf0ff\u23ce\uaf6f\u6d60\u5a4b\u6220\u7476\u3b47\u1c97\uee82\ua687\u5b6c\u896c\ubf9d\ua394\ueed6\u4bc1\u3fb6\ue689\uab37\u1066\u7974\u80ed\u26d1\u7257\u9959\u7091\u890d\u0e83\u57ee\u29e5\u4ffd\u6852\u050d\u948c\uf3fa\u5b3a\u896e\u45b4\u439d\u45df\u1d6aT\u609c\uca0d\u4cd9\u6950\ub2d4\ueec4\u418a\u2c5c\u0587\ueeac\u4398\uca59\uc6da\uaf0a\ua2e3\u80d7\u77b2\ufdbd\ua9b9\u2360\u39da\u95ea\u0190\ub7ef\uab8a"],["info","\uffe6\uad00\u167d\ud0ef\uf505\u294e\u6efa\ub08e\u4245\uc402\uc98a\uda36\uc27c\ub3c2\u2a44\ue7c4\u32a7\u6f8d\uce3a\uce23\ubd9b'\u24de\u1374\ubbef\u9313\u8c93\uc6dd\uea3b\u0b4e\u79d4\ubf10\u917e\u52f7\u80a3\ub47b\u7bfb\u1479\uf79a\u63b1\u94f9\u8871\u6bc5\uba0d\u6cdc\u06f9\u5de4\u0ece\u98e6\u56fa\u694f\u1b4c\u3aae\ua3c0\u2747\ue9bf\u3264\u0997\uc651\u3ae9\u343e\u98c9\uba91\u6969\u4feb\u9db5\uc627\ue8a8\ue199\uc03a\ua4c3\ufd77\u09fe\u48a7\u048a\ue790\u78f6\u7d8f\u9cbf\u6f14\uf29f\u11e5\u860d\u90e2\u068b\u224a\u2189\ua5f7\ua157\ucf2e\uae7f"],["warn","\ud420\ue097\u9890\u11d9\u1161\uddc3\ua93f\uc714\u02b9\u2e36\uc6f8\u075d\u5df5\ub660\u355b\u6e43\u43d7\uace1\u55da\u1a15\u20e1\u4bec\ubd4a\ud675\u499c\u2d4e\u5b8e\u4751\uf9be\u808c\u14af\u524d\u82d5\u8d8d\u306f\u332e\ub9bd\u1e06\u94b5\u17a8\u1db5\u26e6\u4821\u25e4\u56c3\u0e93\u0845\ue6d4\uc07a\u644a\u9fe7\u2dbf\u4b5f\ud5c8\ub57d\u6f54\u8d32\u6f76\ue2c5\ud8c3\u2b0a\u3f7b\u14aa\u834a\uf62f\u1370\ubefd\u0fcc\uf337\u5e3f\u9658\ua636\u4ed3\u5e9e\ubd59\u2777\u7e78\u0624\u2d3e\u0dab\u69ad\ue6e3\u9d02\ub91e\u1360\uc609\u9a31\ud6f6\u80ab\uf382\u7f53\ud4a1\ud9e4\ub8df\ua35f\u9512\uc05e\u44ec\ude71\ub438\uf8a8\u06e8\ua1e4\u59cd\u95e8\u272c\ua551\u22b0\u497e\u953a\u447d\uf762\u7ddd\u926b\u2eb0\uc140\ucc94\ue6e6\u27e8\u80ae\uf1c3\u312b\u06b1\u7cbf\ufdc8\ud263\uc229\ud377\u8e39\u03b4\udccd\u3e6f\u2e90\ub043\ub78a\u8576\u97fa\u1efb\ue0da\u7704\uae84\u70fb\u1385\uf6f5\u3e53\ud1e5\u502c\u5cb6\u2255\u6169\uf264\uea5f\uf8b2\u6b68\u7381\uf8e1\u8d3b\u26ce\u471e\u100c\u0c78\u489a\u600d\u634a\u0548\u6e0b\ub9ee\u8696\u4c93\uaf62\u2e15\u7e3b\u94e4\u1525\ud330\u507e\ue431\u6b89\u9e70\ud841\u4271\u620f\uf827\ucb86\u42aa\uc7ab\u32f6\u7f19"]],"metric.metric-2":[5,6,7,8],"metric.metric-1":[1,2,3,4]},"finished":true}_serial,__mv__serial,_time,__mv__time,random_bytes,__mv_random_bytes,random_dict,__mv_random_dict,random_integers,__mv_random_integers,random_unicode,__mv_random_unicode 0,,1443154422.89,,"0pP;O:xwh\4v[""[[/^7mSF#WJ(uj!:MB",,"{""a"":1.2968942978210108e+307,""b"":""\u15cc\u5b7c\ua0d6\uefb0\u2115\u2b02\ubf7a\uf065\u2b73\ua15f\ua77d\u9c67\u9ab2\ub391\ud2f6\uae91\uf460\udd3a\u03d4\ua682\uc81f\uc5ab\u6bbf\u9917\u6703\u42b0\ud71f\ud29a\ucbcd\ub90d\u6bf4\ud076\u5dbe\u3cb7\u3657\u8789\u9a1a\u6a56\u354c\u9b4d\u8492\ud713\ud6b3\u052c\u53b0\u190f\u6ae4\u2fcb\u5c4e\ue7b6\u9a4c\uf567\u0118\u5f80\ub98b\u3961\ued8d\u0d52\u0417\u3d8b\ub643\u1080\u1b02\u04a3\ucd29\uf441\u700d\u381c\u8a53\u6a58\ue042\u575e\u1411\u87e5\u0933\u0a4f\uc3bd\u8743\ud911\ud753\u13a3\uf7e4\uda99\uc089\u0e9f\u6582\u3f3b\u29d6\ue99e\uc642\u8bd8\u900c\u263e\u3adc\u8eb4\ua91e\u1ade\u6fad\uced8\u9bc8\u43d0\u42f8\u44dc\u6340\u9160\u7ded\ub139\u612a\ua962\uaca2\u1f36\u988c\u58ef\ud544\u9947\u9c68\udb93\uea4b\u9b14\u8110\ub12a\u4ebd\ua604\u711c\uf68c\u19ea\ua4bb\uae4c\u41e3\u857b\u7638\uc2a2\u0a38\ua29f\ucb38\u8e67\ufb40\u51ff\udfe8\ud86b\u496a\uef36\u68a7\u531b\ufb6e\u6376\ufd7f\u2e86\u1235\ua375\u7ac0\u6da6\u9037\uc1b6\u886d\uc8c8\u34d1\u6e98\u7afa\uab29\u4ee4\uf356\ua178\u44f5\uba04\u42a8\u8996\ue2ba\ua4c7\u841b\u9682\uc502\ua109\u286a\u1af0\u084d\u22dd\u310f\u8ac7\ub35e\ub40e\ue06f\u751c\ud0b4\ue290\u0a17\u2c92\u8a2b\u0789\u4590\ue673\uabe2\u094f\udcbc\u5eaa\u325c\u6adb\u472f\u7eb4\uab38\u8903\u7d5c\ua267\u109d\u8918\u159e#\u8499\u4fc4\u01a4\u9298\ua4d6\u7ea0\u7191\u7609\u23a7\u3d69\uc95b\u4c93\u26f4\u77ea\ub420\u3b5c\u6f10\u29b1\uc189\u089b\uc756\u549d\uf564\uf749\udaf7\u92d7\u9192\ua158\u40af\ud0bb\ue009\ua2c5\uf595\u7b5e\u03b4\u2f04\u87bd\u30c9\u9265\ue00e\u61f7\u44ee\u86a2\u9a6b\ue383\ub205\ub10a\ua355\ua04f\u8c44\u152b\ueb19\u6347\u1d73\u4bcc\u6378\uddbc\u743f\ucc7e\uc8d5\u640d\u3656\ud871\u61e9\ue33a\u0856\u62a6\u836d\u93d8\ue816\ucdf2\u7118\ue4d9\u4282\u126e\u1625\u4255\u540b\ubf41\u8a81\u18f4\ucc39\u9b30\u9360\uc62e\ua028\u734d\u332f\uceb1\u6202\u1557\u976b\u0591\u7302\u57b9\u4274\u1d19\ua75e\u7ae4\u31c4\uaa3e\u5b49\u8868n\ued31\u51ec\u142d\u9450\u3526\u1378\u86cf\uadc7\u2ac7\ub975\ubd00\u4c89\uce0c\u20a7\u2db2\uecd4\uc311\u776a\ud331\u9183\u7df5\u09e3+\u934d\u79e9\ud87d\u2e64\ud4f0\u668f\u10f2\u871c\u99d9\u7c30\uf3b9\u5ff1\u5b0f\u9dda\u639e\u1ecf\u0d61\u6a4c\uc6a1\ua28a\uc75d\u9308\u6002\u8814\ud528\ueb78\uee07\u150c\ua630\ud774\u1429\uc805\u502a\uccd5\ua070\u6d11\ue81b\u4601\uab84\uc4dd\u60cf\uefca\u3129\u8bf5\u38fd\u9b4a!\u98d9\u24c8\u564b\u141b\u8e0a\u2f8e\ueb1f\u9311\u5462\ua5b4\u7a4e\uac7a\uc57f\u316e\ube3f\u4f56\ua52e\u3de2\u6bb0\udc3f\u4501\u731d\u77f3\uf6d0\ucf21\ua10c\uded1\ucb51\ufcdd\u9c80\u092f\u7e1c\u8177\u2144\u0610\ua3a7\uc0b7\u20fb\u13ec\u5f9f\uefc6\u9deb\u7741\uebca\u853e\u5903\u37d8\u0c8b\ud7a3\u1de9\u074f\u2f21\u950a\u04fc\u3279\u73b0\uda85\u1955\u6cad\ub5bd\u445b\ucb0d\u7a89\uec0c\u74aa\u108f\uc10c\u4d51\uc945\ud3b8\u3d23\u7cd5\u311a\u44a4\u3199\uc6bd\ubf6f\uf834\u59f6\udf22\u17cc\ufcf3\u7f7e\u98d4\uaa0d\u5466\u438e\u9ff0\u517c\u84e1\u7c6a\u044d\u6071\ua143\uf64a\u58c2\ue1f1\u6988\u01c0\u7e9e\u3183\u7547\uad04\u0c0f\u7981\u6c50\u4e96\u5fbf\u39dc\uf797\u1d4a\uefb4\u33cf\u84f8\uda08\uc5d3\uc54c\uad11\u4eaf\ub34a\u49c8\ua717\u2ec8\u4111\u5315\u5574\u06ba\uc09a\ud5cd\ud4ea\ue641\u83f0\ud020\ue73e\u873a\u1da1\uc69a\u7305\u2df8\u251e\ucd5a\uac85\u38c6\ufe6a\u8bbe\u345a\u043b\u0ae9\uba46\udf56\ua97b\u3d2c\u7cc3\u125a\ua34f\u6a28\u287a"",""\u798f \u9152\u5427"":{""fu"":1.2438074480626057e+308,""bar"":4.0438309149640735e+307}}",,"4200010286095744000 -79571214356433920 -3170588095685636096 @@ -4595,8 +4595,6 @@ l 1210179905758432256 1141215342399602688 -3880726647432727552",$4254677265955351552$;$-3278967839183033344$;$1095053897811201024$;$-1461220706224117760$;$2874075141657677824$;$2198261908299204608$;$-4090972845302793216$;$-979321288355396608$;$1555253375519851520$;$-1330981345459324928$;$2390979766941747200$;$-2547949188179918848$;$-798349369508915200$;$-4584665965760536576$;$-631217269556945920$;$790994848793819136$;$-3292015071347274752$;$-1095373714185022464$;$-2658536572979284992$;$-3395385354301297664$;$1591083580236333056$;$-1216965427854953472$;$89157934633715712$;$-2040633111952643072$;$-2057014102036543488$;$-1118673239956006912$;$3715067134115388416$;$2467147072612097024$;$2009325729649772544$;$382104304900268032$;$-346889285817417728$;$-1435664121415141376$;$1641054803074410496$;$839578214834488320$;$-2588886021934640128$;$-4542877417974082560$;$2812675173916209152$;$1201906490943030272$;$2257431531439555584$;$1368106746276730880$;$4549413097371716608$;$-3335208727090267136$;$-4428655578102525952$;$1530941959374427136$;$4303325895450736640$;$4593073574498477056$;$-1323071460167786496$;$2016838339774851072$;$3394661872488026112$;$1577907303233685504$;$3498474695397552128$;$-1851725795302644736$;$-570835640034738176$;$3019588515318900736$;$-2653542310303600640$;$-2604787378286464000$;$-505494242168783872$;$603890221725215744$;$-2697447474166577152$;$-1324174827157528576$;$-3939120325196779520$;$3221842789362113536$;$3450045506650081280$;$-3085415144472945664$;$2844767850120931328$;$-480357954359296$;$-3627161930907376640$;$-2643792500309282816$;$-4203378301050242048$;$3838096347590449152$;$-998967334488296448$;$-317841742843261952$;$2920962161798350848$;$4570760113962682368$;$1312887172374955008$;$3885641510643298304$;$4233307202806694912$;$-3012362293223967744$;$3167245083470391296$;$2500942194558134272$;$-315111054027939840$;$237543331611081728$;$-3999102932559256576$;$-1141382291530525696$;$-1526394099069128704$;$2352356396177900544$;$-1168838822762099712$;$-354746841509020672$;$-2541873829172502528$;$-965727991456326656$;$-311410848497044480$;$705453332713840640$;$1492599881540529152$;$4479916310441965568$;$2716154159942166528$;$-303452988574282752$;$-594349156021116928$;$341158927843047424$;$3393126723069275136$;$290336864458511360$;$-1683639972835714048$;$393458920544302080$;$977830132378643456$;$-1741267446607932416$;$-1125989223784035328$;$-3161194173701813248$;$1383932831831526400$;$-185858563731879936$;$-619177045600068608$;$-319688796495815680$;$-148118319752223744$;$-2181889039421988864$;$-1798869353710729216$;$749360210725292032$;$-52408264759950336$;$-940604390282982400$;$1390737596831897600$;$4218792006351753216$;$-1518811638397486080$;$-535053535372843008$;$2896937319166113792$;$588850925878534144$;$-2107583507050101760$;$4014091361826212864$;$2916698469345811456$;$1951932407489913856$;$118873251955217408$;$-1139979210213329920$;$1302446376933635072$;$-4093818941627415552$;$-4014963002715051008$;$4336409833389136896$;$2410489568254102528$;$692157898271000576$;$-2171303002617470976$;$-652828819998383104$;$-2446775767529470976$;$-831596048294830080$;$-3036568121844647936$;$-4099857299705051136$;$-1748100335062065152$;$2058836702618380288$;$1657210566250067968$;$3941099743276361728$;$-4185275790028241920$;$-97232344121799680$;$-3499135005960154112$;$-1651762638239210496$;$-3997211402177012736$;$128882286945541120$;$1463295298046387200$;$317571343985294336$;$607096525261543424$;$-1754794603762570240$;$-2094529167945345024$;$-3809632162340091904$;$-474511039345931264$;$3158814853021989888$;$3114532317095864320$;$-2604749572578583552$;$2805410973604061184$;$-2662711593375478784$;$-1391279026896055296$;$3259757490990564352$;$-1581486637833614336$;$-4046553840254213120$;$-540428293428459520$;$3122138026614557696$;$-2762426856152012800$;$-3745051934640835584$;$-3557887300080657408$;$-1972046377517533184$;$2242640369282731008$;$-4221055586465870848$;$3252335673018686464$;$3863328616552477696$;$-2775978052432394240$;$-4450630360568581120$;$-811451549629941760$;$-1049522102198036480$;$-199603877556546560$;$-4079316740615470080$;$-2741818040691208192$;$-716266207917224960$;$583397754173418496$;$1544504934707960832$;$-3054732623003497472$;$-871210473440047104$;$2889612906310889472$;$233070762224941056$;$-917211689123517440$;$542509028418924544$;$-4518463588811642880$;$4313832993390697472$;$-1587336021219565568$;$3639686809387892736$;$3094674335397931008$;$-2501134013383326720$;$3134354127897529344$;$3273083408434320384$;$1415376443455564800$;$843040249959065600$;$-2808809376405354496$;$-1718023579167566848$;$-1956333184359260160$;$-3175545429030867968$;$-1764892903120506880$;$2032291074225981440$;$-712609431856651264$;$2159765118750071808$;$-2376203724425402368$;$-4325489076609137664$;$3364588376642424832$;$-2012887603766548480$;$-3759432487227607040$;$-3952464483692864512$;$1571034735280196608$;$4501352486205831168$;$314324257874365440$;$-2379090579535885312$;$-2430544123593043968$;$-1812676012190221312$;$-2572325444880340992$;$-236871385744413696$;$2000813827436053504$;$-2926943912768563200$;$2565938855190333440$;$2059790068344283136$;$-1110893231558197248$;$-3216879847890564096$;$-4488453208247255040$;$195037170542662656$;$2078491979538355200$;$-352740751523433472$;$2092021441774430208$;$-1921662900374040576$;$2206083862913969152$;$-3231439895078589440$;$730349509515421696$;$-1292834461765485568$;$-4539961203776282624$;$-361128587063154688$;$275805038942754816$;$-2536081772288787456$;$-3653690332825760768$;$4041131065922513920$;$-3724551345725943808$;$1328036417321675776$;$-2257950520749260800$;$1280090100955892736$;$2205207787759245312$;$-3976771743523582976$;$-2057131779381775360$;$-1164109764739914752$;$-2492752697104896000$;$-1594392650577743872$;$-4437284793297515520$;$-2519540760248463360$;$-1321080590665975808$;$-1718974135774153728$;$-703409600625948672$;$1200887553244944384$;$-150187502638683136$;$4408565657682225152$;$3999156566742699008$;$3496653132743328768$;$-3497105380376271872$;$1962204030365357056$;$363459673379707904$;$2765577856684478464$;$1152057807306536960$;$2251862684723419136$;$2203274220244849664$;$-4001254493906380800$;$1208970698929547264$;$2982216187500237824$;$3838450901202033664$;$-4096436524515470336$;$3692972105743032320$;$-3029979320170488832$;$2256934774147117056$;$2731747057631066112$;$2817003598553373696$;$1876349954500562944$;$-2740272965912396800$;$-2939244164367629312$;$-2519370982178209792$;$-4120877272875228160$;$-1368321567717026816$;$-1396248014465326080$;$-1458994917253981184$;$2746561544524414976$;$3256684114288878592$;$-4257780547826494464$;$-1669838029725976576$;$1370017071208621056$;$2186189725366865920$;$-3556258013301755904$;$3117840452678910976$;$3056715991008479232$;$-2261706735199284224$;$-3514095230124380160$;$-3071466748435736576$;$2444027752904851456$;$1881200211903237120$;$-1362067747215352832$;$-433309072010566656$;$-1266719328749578240$;$3546959235875405824$;$857530682442600448$;$925992010608994304$;$-4605440320697524224$;$92906054188065792$;$3384287343174632448$;$1212845466998929408$;$-4352084481918223360$;$2617031792241653760$;$249664507896994816$;$678509485963235328$;$3772873710788828160$;$-4227509232197906432$;$-2531950203656817664$;$4399896361808061440$;$4332821500175590400$;$-3888221197882389504$;$3308245539468065792$;$3595198478569183232$;$1154131560998507520$;$3970599042616344576$;$-3503126964455568384$;$-1457595241164083200$;$-3241986442731803648$;$3550870884293351424$;$-644550027108666368$;$-4377883813498544128$;$1440616168361109504$;$3491195772841542656$;$-1190327388033965056$;$-2727683184130538496$;$-4027957169474352128$;$-4138796140514881536$;$-907731078572628992$;$70140658007075840$;$2242753100914432000$;$-4132224789551182848$;$1720383049510241280$;$4128918805961032704$;$-4395388852002869248$;$938510008742896640$;$2632643744880781312$;$2784044483654225920$;$-2856249527921222656$;$3489451028534928384$;$-4560101855260802048$;$-2376542901474267136$;$-2873599099461267456$;$-3764416140081913856$;$-1009431945345722368$;$-2834024317984728064$;$-4155565964097536$;$2283954502976757760$;$1968503551151424512$;$791635529421872128$;$1210179905758432256$;$1141215342399602688$;$-3880726647432727552$,髢㟙₏큌Ⰲ턢㼘薔ᶷÂ㒔睍⭈⢩⁧橎綻ុ懤ﶨ鵇ⲃ蟩ᩲ衶ɒ߼⻢궇螕鉁䝞뫅刹푡〛╷픐榓宵淞⼠ﲒ틲琋㢺╅鄈郑趎胏බဤ⇢腧쀂쵡䅝跓猉䝪셜舧톧ͳ塤鸔槵疛㚔軦궕㗉ꆑ놁ᝯ⒭떦ֈ烢ឲኯၨ珙囩ꮪ菺⛜럂 ೟呑녫䦰㣑㨪㒠䚩핋∌쑹苖䳬嬭ꎆ秸澞적⻗☊䍿튮넢䎕孑﫟轀揂逃œ쀿诲支橴ᛐ縚爃≙⒒뽠ꌩ㸧씱﵂쎦ﶞ즛䶿훑藍丌諍匸҅휻芋詈꽱-⛿陋﵆펑㵰㹛圛责ᜥ䞾ए䭽裉뚂猧쿧⎞餻ㄠ㈻fl䮘誛㧩鼢گೌ蜺䬓ࣲ윜惋曩늜䑪᪰筌테뻘朹痑봱劂ᜮჃ⟸t쯕違툊὚♞벓癩龘⢺ڦ럤洸齬∰ᨛ뼹꿫甃㠘幍긖ꌵ륲ᄆ⿮侶斧Ꝝ렦ﲼἫ﷭댪ﶻ뼧僰챜䃿樛橜殴緼뱻䙸誈쐅ꡠⲛ栏⥑脌箟큟䌩㊧⸙ᮀᖑᮧ电嵻Å䒢俬예५㋎䖿|ᐱ棩刯뉃ꠗ賓콅⨨䶉缴鮄툃拞臣⟇뾝꫊绌y涌꜒쀻द䝽槃걀䜓뗧㿧遅Ṛ슑⺐ꪉﴖ䦢뺗㜝娭㝣, -chunked 1.0,18,262514 -{"finished":false}_serial,__mv__serial,_time,__mv__time,random_bytes,__mv_random_bytes,random_dict,__mv_random_dict,random_integers,__mv_random_integers,random_unicode,__mv_random_unicode 10,,1443154422.98,,"/n-0 ( &iJ$l*L-g/l1yK程3NĮZ|f>M:W~I+lM,YeYĠQ:x+ܴxo+(i=|b(/ ɇG ߽\sP0X[[8`bjNH6f3fzBCn",,"{""a"":4.544125131002947e+307,""b"":""\uda9c\ude59\uac67\u17f8\u13ba\u4eba\u8e32\u06c9\uf879\ud82c\u900c\u7252\uddca\u63c3\uab4a\u878e\u2194\u5d77\u6c4b\u67dc\ufa9b\u3079\u3967\ub665\uf821\u465e\u8fec\u55c8\u60ce\u2e20\u5e78\u8341\u9e92\ud18e\u4252\ue637\u203a\u3eb3\u97d9\u099d\ua4dd\u655c\uebd6\u6e6d\u37ff\uf926\u2690\u16d0\u9d78\u8282\ufe59\ucc85\udc06\u5437\u8527\ud15b\ue22e\u1ff4\u2397\uc025\u6ff7\u20d8\u785d\u9a38\u9446\ua1c0\uaf32\ub973\u110d\u3aa2\uf163\u1f15\ub622\u1e08\u307e\u9bea\u345a\u69f2\u22b8\u8b1f\u2f00\u06da\u565e\u3b8a\u309d\ubae0\u1a95\u5c52\ua6b0\uebef\uffae\u0931\u0fc4\u1377\u45a9\u4d13\ubb93\u5126\ufcea\u21b6\u5b23\u9637\ucb55\u0afd\uf601\u82a9\u5e65\u0c50\ube81\u176b\u1bbc\u9725\ueda4\u9dd3\ud05a\u44bc\u6a35\ud3a3\u55c7\u0a47\u0d55\u2eec\u8122\u57d8\u7e98\ucb74\u080a\u2d75\u04ac\u940d\ud969\u0529\ub436\u0de3\u79c7\u30a9\u8a43\u0b51\u6948\ud70c\u080f\u8cdd\ua697\uc83e\ue4a2\u510d\u647b\u0efc\ud90f\ueb11\u4c68\u89a4\u0b41\u8e62\u4209\udf4e\u2eeb\ubc5c\ud8f6\u366e\u3174\ua254\u9d71\ue161\u2cdd\ue8cc\uce7e\u36b7\uae64\uec4a\ued7d\u0d05\u245f\ueab8\u25e6\u6298\ub724\u989d\u8eb2\u2dc2\u97cf\u459e\ufd82\u717a\u3510\u1e43\u3077\u0756\u657b\u5f1a\ud217\u3eb1\uce22\u7f2c\u385c\uab1b\u5b50\u5553\u0ec2\ueeca\u8400\u2069\ufff0\u1be7\ud25e\u3ac9\u7ee3\uf679\u8f92\u51ee\u9af6\uc8b7\ude4b\ucc45\u8f01\u841a\u84ae\u9a0d\ua65e\u1897\u94a0\ub55d\u254f\u88aa\u660b\u7221\ub59b\u3395\ubc48\ueb7c\ubbff\u2a82\ubf8c\ubd46\u2bc2\u2502\ub82e\uf5b0\u6507\u191b\ud3e0\u228b\uc29a\ue05e\ub632\u97b7\uc8c8\u4e2d\u6497\uc3c7\u2fba\u2060\uc87a\ua796\u7204\u6429\u8053\u9ae7\u40da\u3223\u95bf\u6126\u4396\u6286\ua1d3\u8608\u79e3\ucb51\u6808\uc495\u7d07\u50b2\u2111\u3ba2\u576c\uca01\u5a1c\u0451\u0157\u5e34\u78c7\u7cd7\u3f87\u0921\uee09\u0543\u7ae2\ue843\u834b\u2808\uaa0f\ua177\u02f4\u38e9\u15a8\u86f7\u3086\ue4c6\u8421\u1571\u8c61\u8e83\u1d80\u6e10\ue7b4\u603a\u1ec9\u5524\u4b29\ud4a2\u65d5\u6964\ua89d\u957c\u8ef7\u7cb2\uf555\u61e7\u0121\uf421\u6cd8\u3ee4\u8fb5\ud1b1\u75f5\u774c\uce8b\ufb8c\u49c4\u51a7\u13cd\ud3ac\u6b4e\u8a6c\u8685\u9d7f\ufa71\ue38e\u8a45\u6535\u8727\u2b8e\u4a48\uffba\u61a5\u4eb1\u1b61\u6cca\u0200\u6e23\ub3c7\u3682\udae9\u01a6\uf270\u8dcd\u1543\u4f88\ufc46\u17e5\u60f5\u55ca\u6e13\u80d0\u9165\u4446\ufbc5\uf150\u26b6\u6251\ud4d9\u07f7\ue0be\ua554\u1eba\u167c\ubfdd\uc8bb\u8462\u9f69\u3661\u415d\ucb9d\u1f4f\u646c\u85c1\uc277\u9d1b\ud179\ua659\ub7a4\u4c78\u1059\u69c4\ud4af\u9fb0\u83cd\uc079\uc187\ua704\uf786\u8701\uf8df\u5169\ub449\u2f6b\u1ead\uf6d9\u1bf5\u22e0\u6822\u6f12\u5a74\ub6cb\ud93d\udd87\ub31c\ucfe1\ud18c\uf19b\u9dab\ubbdf\uc7ac\u3e0f\ucca0\u4866\ub12e\u9df1\ub6ac\u480d\ub829\u20c3\u7c42\u9a1e\u6a3b\uab56\u76ee\u7744\u9d90\u429b\u08f9\ub6cc\u0bb4\ua083\u72d3\uea6c\uf5bb\ua0db\u340b\u9690\u88b1\u1a73\u60b1\u28cb\u254b\ueac9\u739c\u32cd\ud9fc\u153e\u4762\u5947\uedd7\u3a5c\u8ace\u3910\ua6cb\u505d\ucb83\ueace\u7b80\u6fec\u7c5f\u6117\u17c6\u46b4\u0377\u3515\u5056\ub8f3\ub905\ud5b9\ub662\uf6c3\u194c\u8bb1\u2809\uf519\u8db5\u8b86\u3c2c\uc526\u798a\u1828\u98ee\uca8b\uc714\u6b1d\uea1e\u9ecc\u2418\u541a\u3bab\u60ea\u65d6\u58f4\uf44c\u091e\ucfcb\u48fa\ua3be\uaa72\u0895\u930c\ud49f\u0a6f\uc306\uf9f6\ue07c\ue4d2\u5752\ue88d\u15d9\ub5dd\u76c9\u5a21\u0979\u5605\u3da0\u8e79\u7941\u6448\u7f38\ua6d9\u91f5\ubb3e\uc320\u68ed\u2665\u05c0\ub82c\u0c35\u713a\u765d\u0a4f\u3723\u96f3\u3274\ue893\u16a7\ufdbf\u143e\ucf77\ueae5\u6a55\uf211\u5393\u64d7\u5604\ua4aa\u2a90\u6c4e\u0691\u918f\u042f\u8e49\ub4bf\ucb29\u01a1\ud806\u21dd\ucd6a\ued81\u96ff\u345f\u81bd\u4e13\u873a\ubc53\ubae1\u8028\u08f4\u5072\u4bcc\u8ac6\u6bd0\u62bd\u7ca4\u488a\u87ff\u6bfb\uc5e7\u3edf\u370c\u3564\uac11\ud41c\ub1fd\ud664\ud68c\u7dee\ud934\u22d1\u598f\uc79b\ud163\u603b\ud2b9\u87b4\ub497\u960a\u1d3f\u88ab\u4048\u7c4b\u20b9\ue9df\uc97e\u09e9\ud878\u066a\uccb6\uae77\u0e93\u206f\ubf15\ufe5c\u7e4c\u6c62\ua8db\u3dad\u6765\u10fd\u2aa6\uc888\u7ba1\ue92e\ue54a\uec0b\ud13b\u05ce\u6ffa\u6d50\uc58f\u056e\u9ba2\u1361\u7c05\u2d56\ud5da\u0d36,\ub302\u4179\uc0a0\ub53c\u29bd\ud8d3\udeaf\u8aeb\u229d\u38ee\u9036\u5529\u669b\uc929\u2914\ua761\u2e4e\u9df7\ue413\ufd68\udb17\u54de\u9662\uaf4e\u5c06\u144a\u11c7\ue8bb\uafb7\u8e4b\u4dd0\ufdeb\ub824\u9e39\u54fb\u7a94\u1dd4\ucc2b\u34a2\u0b73\u013b\uf974\u377e\ue244\u2a71\u2c32\u10d9\u01b0\uaa00\ucae1\uf93e\uf629\u7ea2\u4a26\ue963\u87b5\ufd7c\u964e\u9054\ud57c\u45c6\u2ca1\u160e\u4834\ua641\u3f54\ub1d0\ufcce\ub49e\u238f\u657e\u5828\u4987\u02d2\ue4eb\ua562\u9ca3\u1a75\ua8cf\u06a9\ud458\u3382\uf2a8\u64e4\ucfbc\uc120\u9e56\ua839\u6add\u08db\u0227\u541f\u15d8\u47a6\u9e84\u231c\u381b\u2cce\u4b4e\u3e13\ufdd6\uc9c4\u645e\ud7ca\ua7fe\ucd8a\u3d01\ub56a\ua51e\ub96b\u1099\uc056\u0ca9\ubb64\ue4cc\u0a5c\uaf40\u709e\u0c9e\ud6b5\udea6\u60eb\ufbae\ubcfb\u8b42\u0d81\u4cbd\udcc5\uf333\u1814\ub506\u17d7\ud4ae\u70dc\u1e17\u3104\u5a33\uab34\u53c7\u1a41\u8d38\u4984\u454e\ud6b0\u0980\u91e0\u60fe\u7405\ue831\uc23e\u72ef\ufbd7\uf281\u5cb3\u6213\ue61b\u81d4\u6995\u158a\u8b1c\ub856\uf991\u498d\ue7a4\ucdd3\u8062\u0ab9\ua8ce\ue5b9\u7e64\uaa3f\u8845\u3873\udd52\uafe6\ua75d\u88a5\u8542\u2571\u1dad\u11b7\u9574\u1d57\ud4bd\uc5b4\u81a1\u52e4\u7fb6\u3458\u3d8c\uc609\uacaa\u8b20\uaca4\u3fcb\ubda6\ua9e4\u25d1\u0116\u3ff5\uc4ce\u6632\u9341\uca0a\u1b86\u4adf\ue79a\uce55\u33b0\uc8a3\uc3d2\ua342\u431c\u0bff\u1b13\u85d6\ud36f\u0c70\u55bd\u278b\u6dd3\u6491\ucc7b\udc67\ua832\uf7c6\ue106\u3cd2\ue920\u0ff3\ub98e\u6630\uda3c\ueccb\u6953\ua708\u064f\u2cbd\ua56e\u2b31\u1396\ufef1\ucd01\u449d\u031c\u54a1\u017f\ubca3\u1c16\uc916\uc6bb\ua498\u8444\u6167\u4790\u7706\ufe24\u1137\u4775\u6782\u78cd\ufab4\u4ff5\ub220\ue219\u6816\ubb6d\u277f\u96f8\u7b25\u80d3"",""\u798f \u9152\u5427"":{""fu"":1.4388712362567243e+308,""bar"":1.7043160172242623e+308}}",,"-2035729262749710336 1373395015849669632 @@ -9712,8 +9710,6 @@ V -4134033655142636544 -294632905142094848 2216732253638341632",$1421327138948474880$;$-1140887654075042816$;$-879351159762683904$;$3193855156771011584$;$-4034374747235260416$;$-3370031271489326080$;$778216745979750400$;$4396462882544762880$;$368405136507768832$;$-1238543346163264512$;$-122612262709370880$;$2976091231830341632$;$441325038389084160$;$1485817394935018496$;$4323199162590489600$;$-4037769014778303488$;$-3914849187108599808$;$-2588155685234208768$;$3353095591173037056$;$4347620977843014656$;$-1926493201059141632$;$816862873936190464$;$-4272335098658646016$;$-4566745798712800256$;$-1950670483214026752$;$1940244860416751616$;$-1941240748985590784$;$-2210678345176736768$;$-2689814191543884800$;$3163170294030431232$;$1108563013877786624$;$2964028533159285760$;$3918605051478447104$;$3127073606859886592$;$3795113429848902656$;$-2962687069926568960$;$1362150599293948928$;$-1298719621402241024$;$-2015954421255373824$;$-2031907732442721280$;$-3091200013702226944$;$2380859603876680704$;$3028523440118868992$;$2346108302045075456$;$-1797298120757806080$;$1733685186450448384$;$3247166417687272448$;$-2540134332367431680$;$-2079503953364651008$;$-2805056109328431104$;$3902302490001065984$;$-3014524505563925504$;$-4246641823707667456$;$487251678327146496$;$-1131499611685721088$;$-2119060853536012288$;$1325763975252065280$;$-1957223258003200000$;$-1985630162658400256$;$2170149397894377472$;$2983535442665971712$;$-2818688015757940736$;$3129412551164221440$;$-4212988447005250560$;$2648614947998005248$;$781402860015277056$;$600732801433416704$;$3419343911737160704$;$-3055027374292338688$;$3182354688390222848$;$2305836625286507520$;$-3218269144744392704$;$790393491960784896$;$2311052728986507264$;$1970682899362828288$;$60453400640025600$;$2852671516982125568$;$2835119887761965056$;$-3962350930525758464$;$1569799678327513088$;$-1670577189115057152$;$-334916179545630720$;$-4181612486599929856$;$-3471423927856160768$;$-2629460054978117632$;$-3260003920459275264$;$2555009503173516288$;$2465457180119688192$;$2758402079737627648$;$4348657304286088192$;$3324171041105410048$;$10163581216776192$;$-954855537052424192$;$3253747304951853056$;$-126237916014178304$;$-2868701407192455168$;$-4586272960638999552$;$-1569626108632080384$;$3737562052979457024$;$-1681417622656224256$;$-3950609883856059392$;$3348223658985412608$;$4192449222882156544$;$-3802419744510102528$;$-2313186716870800384$;$-4076916203635915776$;$-1260902544695405568$;$-352821647668030464$;$871794162179848192$;$3739940502508009472$;$-420025051059920896$;$-1449107049150940160$;$672651163514433536$;$-1576502958299645952$;$3576575301708905472$;$-909053253378396160$;$-4055587652357478400$;$1407462977636082688$;$762244139767168000$;$3365002281103932416$;$4561778168930439168$;$-1518144487706923008$;$4408462720715332608$;$2614246849122762752$;$-2781994558365573120$;$2150988415001846784$;$1260229189627711488$;$2550371043159028736$;$-661086159298860032$;$4050363194991040512$;$3188123172351708160$;$1447217551965451264$;$2841257679397824512$;$-3660835067723984896$;$-4213008354448362496$;$3577834754346183680$;$1858314116575867904$;$-1937118476519671808$;$454557864041399296$;$537501831119399936$;$-674374032224053248$;$1941506250033343488$;$-451413236350240768$;$46474582312626176$;$-894549610791018496$;$-1565034380050248704$;$-2661521388599889920$;$-869429060882565120$;$-4569994239678629888$;$204394772292202496$;$3682799970170963968$;$4251631450445535232$;$-2079415054926733312$;$3758060853922566144$;$-4110416695621628928$;$3355896336313488384$;$1280732522464008192$;$-1980511777661161472$;$-3836569749475946496$;$2637137034194966528$;$-3864349345875245056$;$3845621577446452224$;$1782759126086070272$;$-1449577998962806784$;$2202795918227727360$;$-4512235976153096192$;$-3916274613522401280$;$1132636606751075328$;$-3834222991212920832$;$-1538598995589602304$;$-574747871663290368$;$3007781179383220224$;$-2967065265653231616$;$-2560663660162910208$;$-2728497612510011392$;$-4423258469802146816$;$-4258120965355765760$;$637721233053483008$;$-684953053069402112$;$4316981690601036800$;$4138146034399861760$;$-4201643567875196928$;$2211190128782983168$;$1433060056861194240$;$-1897867291392364544$;$1230636252729124864$;$2871406293472585728$;$-1730718930363536384$;$2746193363527737344$;$-4207456003804835840$;$2765658396876372992$;$-23003745043602432$;$2196612403831812096$;$-2931073951468066816$;$-1473043457490569216$;$-4490813741534342144$;$2914959353416125440$;$-82307467140918272$;$-1929721313745159168$;$3679020938620531712$;$-202017710730084352$;$1383144923308638208$;$-462535381233948672$;$2925601457335481344$;$-3341977294715367424$;$-4100199112296276992$;$-4074232771113539584$;$-1930152446275529728$;$2475694552060019712$;$4318169662416806912$;$-290919221440296960$;$-3369990006053024768$;$109577639609733120$;$1333263140390993920$;$128708951444318208$;$-4363507284957668352$;$256628373090242560$;$-3375099615675837440$;$-3305713604460206080$;$2065633348257780736$;$-4379244189912055808$;$616749784129158144$;$3955345369549465600$;$-2220533978543428608$;$3468620904416830464$;$1887730014038705152$;$-4593475848197218304$;$-919732770080775168$;$-4275419700582497280$;$-3752647425978555392$;$1763569639829359616$;$4508538590076242944$;$3564599328662211584$;$-4147104335698712576$;$-1878488308973492224$;$-2431318249537144832$;$1341739016734131200$;$1209065538966347776$;$-2248566414779759616$;$2245527445111983104$;$1471482675078028288$;$1291690962506341376$;$3089956361522403328$;$3168756233741703168$;$1204257705479642112$;$-2281939595761001472$;$-2581679898276558848$;$-2372339446566946816$;$-3306231595642304512$;$-3091229306133668864$;$-197443248729368576$;$-1552694712181621760$;$-1885341555970078720$;$-707110752983435264$;$3848939632838318080$;$2000120061018009600$;$-2264914062553436160$;$-3373296000062900224$;$-4061873653057952768$;$-841664938185342976$;$-685955673892972544$;$-3570672522591418368$;$843196382853996544$;$3377985259981668352$;$3110921824696224768$;$3350293562353055744$;$-2555558102910000128$;$1194319125129198592$;$158541206325933056$;$1582332699009885184$;$4399614800377925632$;$4192636476372562944$;$-699632983128209408$;$-3877771363514089472$;$4499409232295605248$;$2485897804617715712$;$-2017701201259850752$;$-257135482849515520$;$-896046925900966912$;$343164906474738688$;$-614794978118107136$;$3908688313063240704$;$-237214626255608832$;$-928949525035893760$;$-3715046161052643328$;$-1782106905539417088$;$-2009042805500736512$;$2468060185007861760$;$2168559629957177344$;$-2691042172316985344$;$2736437503320452096$;$2995423630476531712$;$1572995909961073664$;$-2028330078741519360$;$-560478359821838336$;$-1052914235459102720$;$2782635631974116352$;$3576534363343571968$;$-1425221649190370304$;$930632044288787456$;$1944808270296164352$;$1256714149850966016$;$-1612823103383880704$;$-1791257625237268480$;$-3107550042116297728$;$1543579582012900352$;$-3699393399778746368$;$689264574095232000$;$3023932375660312576$;$-2099213574050596864$;$2845389832637258752$;$-1479702042037359616$;$2776400387666974720$;$3517681952311703552$;$283676773022082048$;$-3857332764628853760$;$302921483994977280$;$-3519669507981835264$;$-3555123225430367232$;$2916407092052709376$;$127927822337437696$;$2997009042424299520$;$-4556825890883127296$;$2337356060966042624$;$-4032995704386905088$;$3653537983642340352$;$-3594031781430410240$;$1886703304138835968$;$518351675170991104$;$-1530947627047426048$;$-1931137121108029440$;$3117093484851971072$;$-3276517857202387968$;$-139101182003755008$;$-2359167418749020160$;$1632837577417438208$;$2842722794220513280$;$-2372045560917184512$;$3688652242435789824$;$1862567275945658368$;$-685301029488529408$;$-675878339694097408$;$4530984959522222080$;$-362795437239309312$;$-3802638667788848128$;$1032833241611250688$;$-589177688335830016$;$-1325606467005421568$;$3091531941212205056$;$-1273103236643456000$;$3783818836074162176$;$-949996649579875328$;$-1396042717650095104$;$2290904114156603392$;$-3792174649462446080$;$-3964302426929087488$;$-4066224181944120320$;$-320617193712489472$;$3684993292560754688$;$516227065551635456$;$-4558810502140891136$;$1469435051976060928$;$-2205973597892979712$;$2107610670558862336$;$2252525900458089472$;$3350654384004550656$;$-1941045258873261056$;$3191124566899351552$;$-3784989928604745728$;$-1193267036290086912$;$655408616291884032$;$-212876640038174720$;$-3590368850651868160$;$558029138347430912$;$-2278238605727648768$;$371615337409138688$;$891241340930406400$;$-1486348553840954368$;$1539735059487923200$;$2450719784820074496$;$-1570748867458525184$;$4006517040286190592$;$-336437195552436224$;$-1925998770684503040$;$-1909602378549813248$;$917021481307069440$;$2798907854787021824$;$-2578085515485650944$;$-1349253997231279104$;$-191593662709078016$;$-3445140850217142272$;$2925159438016362496$;$843777510643272704$;$4248283505199228928$;$230153017421550592$;$258188034259491840$;$1440706914889815040$;$2752267825916541952$;$-3029096992925901824$;$-3068781995351505920$;$1438275594083582976$;$-2710195616675604480$;$3746136483441552384$;$-2717548758210630656$;$-1966534745097241600$;$1474420110487933952$;$-3212797005695248384$;$-3717383871246760960$;$-4525460915061594112$;$-798841519379621888$;$1531624088992194560$;$1121906400468473856$;$4008530319146691584$;$-3701182402606636032$;$2902131814086661120$;$-2126475121644454912$;$-1298624124069819392$;$1812775219402578944$;$-90214514685489152$;$-3676901914700523520$;$3366564131393158144$;$542843133575849984$;$87930070552526848$;$-2273951061067256832$;$-3311737609362038784$;$-2268879633220722688$;$-3098426986307830784$;$-4557514513892616192$;$130031424963973120$;$2996722077623528448$;$2773444809013233664$;$-1550429025666035712$;$-544866906467558400$;$2965288418047634432$;$1520912791422995456$;$-4229118232153431040$;$-2342814871508529152$;$3663871250526593024$;$4102083558401143808$;$4015586829375537152$;$-942754641026393088$;$4573340417706939392$;$-2299732482851989504$;$3053912539662667776$;$-2374406830850950144$;$1017343552304838656$;$3424431215097138176$;$447869361883526144$;$968756125215066112$;$3615893535011506176$;$-4388221440358933504$;$3109536984796565504$;$-3967581594239223808$;$4526140997119117312$;$1068502972539489280$;$3962795406857077760$;$3902004671039065088$;$-1449100453919584256$;$4055164123875773440$;$1921867644643304448$;$378472117419661312$;$4147213786840597504$;$-4226155132381154304$;$-2852523714242061312$;$997035228997761024$;$1624357738100642816$;$2119118433447941120$;$1831716314029213696$;$2991591901609444352$;$3054934104407422976$;$-3343897281768451072$;$-3395459312094066688$;$3245072218318213120$;$137174513796724736$;$2042162956358816768$;$-2601058076350137344$;$3051404911138801664$;$-1260242758522597376$;$2760545020668887040$;$1552780880678498304$;$3508096861298868224$;$4214501387878901760$;$3404353552937917440$;$-514583599258691584$;$-1646691737545501696$;$3525126354960342016$;$-747730113735115776$;$-3382296362597469184$;$-822995150196388864$;$-1044516317928018944$;$3142151992369041408$;$-2297556415589031936$;$-1848801017223008256$;$-3777531726512013312$;$-1885921481758176256$;$304725988032741376$;$1621744416842365952$;$4029516872007368704$;$358343104831604736$;$-137234824836852736$;$2316161536902937600$;$-2914883279447721984$;$-2118595742364345344$;$644789440117789696$;$4027897820763621376$;$436971753681274880$;$-475362393075010560$;$-3453372059203431424$;$1701876261618296832$;$-349284361931998208$;$909781671112290304$;$-1686850959269772288$;$-3885101968057947136$;$-4373078798969944064$;$2409882212181657600$;$2633101088415069184$;$-1120151624156443648$;$4335867823351587840$;$1708678949026498560$;$-2746109247530617856$;$286134243569024000$;$-1544932612665921536$;$307462986593564672$;$-2540913738243120128$;$2276708441973932032$;$-999614501710082048$;$1358564242260022272$;$-1277277457805650944$;$-3536112339845597184$;$1171087769553606656$;$2984911721788240896$;$-2927679248041887744$;$-626472060187216896$;$2213375272662825984$;$-3052515967640755200$;$2971923474856859648$;$-434175944816289792$;$-3550463096646287360$;$2862428288388800512$;$3361737266740289536$;$-2736878972977084416$;$-2904997737947332608$;$1314737922713006080$;$1251785966405124096$;$3792205347555146752$;$-3722093918642514944$;$-3036941245353576448$;$-2904285320500026368$;$2005888690262791168$;$-2017171042052127744$;$2518139349621245952$;$-4401745950223409152$;$3914164346255086592$;$1119575953666591744$;$-202131015380463616$;$-1386928045237197824$;$-1539059054311810048$;$1235558838646957056$;$-1485532414465147904$;$-2352697101644514304$;$1846666354624721920$;$-1473041062551276544$;$-2131249202585996288$;$2105954140836879360$;$353913810596764672$;$-2276698050510863360$;$-3234634756110015488$;$1858495368645491712$;$-418544880420202496$;$3974011938204368896$;$2987042575326274560$;$938584815694304256$;$-3415678591360944128$;$1627011615271951360$;$-2684187330835019776$;$-4336534481722003456$;$651078353045586944$;$-424820084697612288$;$3980923276923281408$;$2717345449527648256$;$1363137710063710208$;$1839096451667539968$;$-3596348644862041088$;$-1695242935644848128$;$3797676196200559616$;$2519441138111534080$;$-1557739829736953856$;$2356774760316591104$;$63753972862040064$;$1840580450521241600$;$-390473695573614592$;$2881623615982795776$;$4333495775319429120$;$882599423592105984$;$-2276063251113668608$;$2227489213059807232$;$-398683362821463040$;$343354160531205120$;$-967192654776130560$;$-3138021456857597952$;$2202562514416877568$;$4050567760639768576$;$-2348352547098298368$;$2430830104316959744$;$-1554156466801289216$;$3319099520812196864$;$585603579597078528$;$-2343762195782848512$;$4173543164005291008$;$2735699415896840192$;$-3797048613061013504$;$2522870877518489600$;$1672440538755759104$;$1228833076917837824$;$1519538800943480832$;$1600769000281787392$;$973649395966322688$;$-3617506133895520256$;$-2562097648292233216$;$-3518714229252794368$;$1441206066015762432$;$1950770566456248320$;$-194877032500448256$;$1865127034369600512$;$-1116888012984435712$;$-1696297804165843968$;$-1583859602329554944$;$-3934775712274207744$;$1504243978154254336$;$1790993121375520768$;$3594774555097825280$;$-3455625816509197312$;$-995339052623924224$;$-3005934626396225536$;$1856856735297362944$;$6578506877034496$;$-1136947921190581248$;$-4402426521689379840$;$-2353164939587899392$;$-3305893722679538688$;$-4278447423575079936$;$2125581039433187328$;$-4453657841968585728$;$-1114756315672014848$;$-3747702354081955840$;$-731136668779498496$;$-3739284553266119680$;$3881159593066871808$;$-2252633245801388032$;$-316933651519220736$;$1743865486997327872$;$-3703102467188333568$;$4030646912917779456$;$246446044232870912$;$4456942024548008960$;$3416503386924661760$;$-3286705811921145856$;$282130634957455360$;$-2343949679330093056$;$2418277575705261056$;$2281936736584532992$;$3135492683455964160$;$-2329547655709667328$;$1967206730773682176$;$-3488572226792144896$;$-4404730579397905408$;$-3599207132408605696$;$4022344014660184064$;$-3122854170698285056$;$-3522900964033748992$;$4499309093012265984$;$3393587339215512576$;$2289247790581872640$;$1007608330075593728$;$-1661356609185826816$;$-3713887014358628352$;$1092121731285188608$;$4292524051161618432$;$-2134154350308144128$;$1036894656649724928$;$2046840327204055040$;$-3820556999865905152$;$-2966944866135697408$;$138997248175036416$;$-3718022785192645632$;$-3911738504112147456$;$-48946051419732992$;$3846473554517325824$;$4318171287081482240$;$-4158670821724472320$;$-4129735542588765184$;$-439376251132429312$;$-2845348984372275200$;$-268955267176422400$;$-3045395509300596736$;$-300652852783345664$;$-3281445300160799744$;$-145470662953901056$;$-4429758387490508800$;$1343133141013554176$;$149160295672200192$;$910651266217248768$;$-2703106483142950912$;$2425493940815401984$;$2102138930621830144$;$1102168132349216768$;$2629737248803051520$;$-3404327913564760064$;$-2772192987043474432$;$-3390819687592245248$;$-1078156828409171968$;$3049083926641386496$;$-2858346074549172224$;$-2991144513346014208$;$1160789605712656384$;$708148976592171008$;$-4312122238004554752$;$-4579393473859845120$;$-4390262819262972928$;$-424237356498490368$;$1851913583311638528$;$-396278588106765312$;$-502504830296080384$;$3977797572897230848$;$3827783870761302016$;$2565886680302562304$;$3681634309847110656$;$-2556664800615981056$;$-3935386612038067200$;$646926553935056896$;$4369622639637874688$;$1733600221203685376$;$2146906999001316352$;$1450163817859807232$;$833933019065587712$;$2560086671124672512$;$-811894012322818048$;$698935777841894400$;$3467553644176711680$;$-3750972262514899968$;$4596376813711197184$;$-1449091048578607104$;$-2573348559121988608$;$3990398007901661184$;$2402284784585308160$;$2338796622481162240$;$1365508090321681408$;$2250002751034692608$;$-3304134376801231872$;$-524703570459882496$;$3071672102814994432$;$4604271922296643584$;$255446096534375424$;$3946185240212135936$;$1292610665237955584$;$-2945893356391368704$;$-2347550777380514816$;$-2698247505401273344$;$4228384277183647744$;$34170012075659264$;$-3969231995835067392$;$3375253798999260160$;$-648103647147614208$;$-2405219598871832576$;$-4110667354840967168$;$2483893662937300992$;$-2384913670529291264$;$-4342048336358811648$;$2241310467526260736$;$3148494103759908864$;$2106367288805427200$;$3275726616662466560$;$-966698035795315712$;$3379372380644786176$;$-1634601095857113088$;$-3582579356486440960$;$3178650845265894400$;$1428344907456835584$;$-1173868045188383744$;$-520952725257392128$;$-3555128606069414912$;$2916293299645880320$;$2526107251121425408$;$3724647019950873600$;$-3401590163261356032$;$1441264653912867840$;$4511796015137941504$;$3683659769326467072$;$-4564384856930519040$;$250601327375006720$;$-2143155177834796032$;$3308064487253456896$;$-1543129014355087360$;$-3595381341667803136$;$-4241309371675504640$;$3115300058715627520$;$2308062135833574400$;$-4224210041679892480$;$-978265278174639104$;$2659133943987474432$;$4446962879076681728$;$-3178243817305756672$;$-2931809259685330944$;$976982892278539264$;$-518890974334405632$;$-3887051496451615744$;$-3332142193913620480$;$-3677724287577803776$;$-4134033655142636544$;$-294632905142094848$;$2216732253638341632$,㋍᭿鱮峧䠲㙄퐑옑ǚ崤ꋉꃖ쿪崚歸ꁽ褭烕䍘鱋殸㰅ާ쪭檿趲錒㞩嫳矀潘䭫쾟攫扄펔ꛋꪌ, -chunked 1.0,18,248062 -{"finished":false}_serial,__mv__serial,_time,__mv__time,random_bytes,__mv_random_bytes,random_dict,__mv_random_dict,random_integers,__mv_random_integers,random_unicode,__mv_random_unicode 20,,1443154423.08,,"-EFF_3SU.aaD VٔbO=\""S!",,"{""a"":2.2438386791921184e+307,""b"":""\u6606\u8fa5\u2f98\u3b8c\ua1f0\ucc27\ubcc5\u500c\uc773\u045a\udb70\u5868\u5298\u5baf\u9da1\u6c72\u5d84\u1de2\uc0e2\u8d75\uaad3\u1e24\ua63e\u95b1\u610a\u73f0\u7ff7\uab13\ud010\u8762\u80ba\ufe36\u5ae5\u59b4\ucfe5\u191d\u57a4\ubd0f\u9fc9\u04b3\u7519\u2533\u15e0\u2b87\u463c\u9725\u5863\ub0b0\u9233\u375b\u67e0\ue1f4\u8298\udfe6\ua7a6\u8cef\ud22b\u34fa\u73ee\uaeb4\u1eb8\ufc57\u0a25\u5ea7\u59f0\u0d59\u06f6\ue35f\u6b2b\u9710\u6d31\u1b55\u6ada\u738b\ub328\u82b0\u7bec\ud6c0\u974d\u8008\uae68\udb51\u3180\u4168\ue046\ub65c\u9ed3\ued47\u6956\ufd72\ue72b\u431d\u8a59\u1b80\uac8b\u9507\u0bd5\u5f16\ud4cb\u2eda\u31dc\uaa43\uc036\ueb4c#\u54d4\uf507\ua8b9\u5e09\ue410\u09dc\u842d\u8ae9\u2d25\u45a8\u815c\u8f9e\u09af\u7c44\u538b\u77fb\uf951\ue109\u6a8c\u26e6\u642f\u473a\u65bd\ubaf9\u841d\u2f44\u169b\ud1c7\u02c8\u6ddc\u2c7c\u1b2a\uac3b\uee8b\u9aef\u7203\u148e\u0359\u91e3\u981c\u4543\ue829\u77fe\u357d\u8e48\u35e8\u38a9\u1f2b\ud57d\uf08d\ud769\u864a\u8397\u920c\uccdd\u1b34\u0271\ud767\uc684\u4a7b\ucf88\ud8ce\u55ac\u02aa\u48ea\u66e7\u8719\u101d\u866e\ud653\ufd8c\uaeac\u39b8\u567c\u3b51\u00fa\u8e12\ubcd6\u46ce\u98a0\uac18\u57b3\ubd99\uccae\uea55\u6b2a\uf07b\ud7c4\u4fab\u2bd2\uaafb\u065d\u8a7a\udf93\u699e\u53a2\ua88e\u1169\u9bb7\u657a\u607c\u86cc\u29d0\ub5bb\u2e70C\u1263\u2da1\uc71d\uf078\u7c2d\u0ec2\u4b0c\u2e99\u771b\ue73c\u3592\u3cda\udf42\u5d60\u5372\u345f\u796a\u55f7\u01f6\u5427\u3608\u3b53\u5151\uecd3\udfa1\uebe1\uace4\u7b7d\uff3b\ufa26\u8fde\u4d41\ue39d\ubc1a\u096a\u7c36\u33ce\ubdd0\uf71b\ub719\u376e\u2e93\uaacc\u714c\u2676\ub94c\u61ff\ubedd\u7c72\uea1a\u12f9\u8c9e\u429e\u856d\u3be4\udbdb\u9034\u989c\ue4a6\u2974\u2ac1\ua7dc\udcc5\u9655\u5e5a\u94e6\u114c\u42e7\u8b2b\u8548\u2782\u705e\uce4b\u27b3\u18ca\u3094\uc41b\u1d09\u207d\ua74b\uadf4\ua4b9\u0c95\u0a12\u1f7b\ub6fe\u59bc\u4fd2\u4df3\uc023\u8f5c\u0a87\u9551\u43bb\u2656\u14f3\udc4d\u6b63\uc22e\uc3be\u28b6\ue97d\ua249\ueb6c\u77ae\u0da4\u82fd\ubecc\ua022\u0ee6\ua762\u118d\u4961\uc89d\u9d81\u8f3a\u67c4\u20c0\u4cea\u077c\u4265\u3458\ue7a3\u3f3f\ub892\u7870\u5760\ud004\u4e56\uc2cf\ud3f0\u59c9\u6daa\u577d\u6d08\ud303\ub34c\u716d\ub29f\u5be9\u06ac\u83ab\ufe45\u4ab0\ueb57\ub5e5\u7795\u4594\u7031\ub5b0\u813b\ua080\ube97\uc828\u3d8b\ue2c9\ue68f\uce98\ub363\uc02e\ue3ec\uaad2\u8a5c\ucb7a\u85c3\uc34c\u323a\ueeda\u407c\u9696\u6b87\u0bc8\u4fdc\u9c87\udbfe\u7a19\uf570\ub9ee\uefe6\u555b\u15c8\u8261\u05dc\u3598\u62f9\u0dee\uf33c\u7e73\ud820\u3332\ub03f\u3b49\ue0f6\u103e\ub1db\u7f0e\uefe4\u2403\u349a\u9e11\u20c7\u4b3c\u5607\ub209\ubf32\u5308\u555e\u5b21\u31f7\u3ea4\u1bbb\u458f\uf828\u3bf8\u43bf\u424b\ucb31\u6e28\u5813\u65cd\u3619\u8ea3\u6e52\u9beb\ue706\u19e0\u27b5\ud856\u2d2c\uf6cd\uee84\uc5d4\u7d89\u6143\ua325\u116d\ub246\u742d\ua96e\uda1d\u346c\u5ea2\u291d\u695b\ua994\ue2f3\ub2cd\u2d8d\u9c08\u83ae\u3a51\ue190\u6b75\ua978\ub6e6\u0b17\u75f7\u84ea\u3123\u666f\uc32d\u74f3\u6b8e\u5f98\u9e4d\u3658\ucbfd\u5c04\u26a7\u9318\ue721\u05a7\u7372\u4c56\ud0da\u7754\u9716\uce7d\ua467\u3fa6\ueb37\ub499\u59c6\u57a7\u1eed\u41a6\uba56\ufd49\u5a1d\u9ecd\ua7d3\u537a\u118b\u312b\u6cec\u8b85\u56a8\u78ce\u4483\u1ae3\u40df\u2288\ud976\u8788\u761e\uce88\u7847\uf249\u1e99\u5231\u0fb5\uc1a1\u95ac\u45ba\uc3a5\u86b9\u25f0\uf127\ua4cf\ud9d5\ud271\u9697\ud531\u5d38\u632b\uaeb5\u1270\uad33\u79e4\u58bc\uaef3\u3bfc\uae38\u3906\ufd18\u6918\u093b\u1da2\ud227\uf0f5\ud0ea\ue1c2\u70a2\u2471\u07bb\ua8a0\u9e63\uf76f\u4d6a\u403e\ub81e\u55fe\u60e5\uc3b1\u03ee\u8f68\u75a6\ue899\u52f6\uc7e9\ubf9a\u4388\u1223\u88dd\udcda\u5314\u9a14\ud827\ua576\u3ff3\u6eb3\u17af\u862c\uc4f5\u75a2\ue98b\ue807\ue840\u12da\u6c76\ufce4\u9338\u6f5c\ue9ae\u9732\ub765\ue838\u40b9\u2c10\u955d\u6c53\u8b9a\u93ca\u48ef\u2ed5\u7f4a\uc3e0\u5bf0\ucb76\ub838\u9386\u2760\u8643\ucdd6\u1bb5\ue818\ude60\ucc5e\u1598\uf930\ud9fe\uf27c\ubf6d\ue6ff\uf567\u34db\u3311\u34d5\ua1fb\u0d20\u309c\uc87c\u0917\u32cf\u3645\u9f55\u5c9c\u8415\u0f32\ufae0\u52fa\u1047\u9f1b\ud8b0\u4717\u4d93\u06b9\u2d3b\ua73d\uf00b\ub7aa\ueb6a\u73c9\u5240\u10c4\u03b1\u4401\u340a\u82b3\ua4d0\ufdd9\u8f1b\u0d40\u3994\u2c97\u7932\u3d79\uaf70\u00f6\ue6a6\u6fd6\uc455\u934f\u5c23\u30d7\uf03a\u2938\u76a0\ua8df\uce96\u2054\ud7a7x\uc771\u711e\u27da\udbe5\ub19c\uc38c\uf7dd\uad4d\u9627\u6698\uadb5\u5a5b\uf437\u83cc\uf36a\ud129\ub01b\u788d\uc2ec\ub24d\u726e\ud2bc\u22b9\uc57f\ue21f\u1f21\u92d9\u59bb\uddb0\u7972\uc391\u0a5f\ub94f\u4a7c\u80d3\u2b01\u521b\u7f9c\u45d3\u6050\ub243\uc07b\ue46e\uff2f\ua22c\ue4c2\uf110\u7ad4\u94b4\u04a6\ufd94\u9446\ucd49\ud770\u5205\u17e6\u4748\u93c0\u733c\uf484\u6b3f\ua8e7\u1760\ucbbf\ueb28\ubffd\u957c\uc12a\u8946\u4378\u2f6a\u0f19\u2a43\u7b75\u5f78\u2c1e\u893b\u4aec\ue2e0\uc040\u109b\ud29b\ufaaf\u14b2\u5fb3\u7184\u788f\u3b83\u1b8a\u62e6\uefe8\ub58c\ua56d\u8872\ud34f\udba2\u10fb\u4536\u60d9\ua739\u8495\u6686\u26fd\ub711\u2b89\u6e13\u7138\uff32\ube0b\u200c\u67b5\u4206\u6f47\u432d\u7ab4\u9230\uc5d2\u3d39\u9d7e\u9e47\u99e6\ubf38\ue553\u66bc\ud268\u2c7f\uc800@\u3edc\ubfc0\u51ed\ub75a\u49fd\u5561\u9a31\u53bb\uc9b8\u3474\u7f96\u820c"",""\u798f \u9152\u5427"":{""fu"":8.846967456910945e+307,""bar"":9.736757336479673e+307}}",,"-4211614565474438144 -843086565617481728 2999869307446430720 @@ -14247,8 +14243,6 @@ chunked 1.0,18,248062 457895013594889216 1049261825418380288 1586742110418430976",$8438292955909120$;$3191462112282466304$;$-940985485151939584$;$1581386805363154944$;$2419638903672910848$;$2436976733314998272$;$2635587719746094080$;$3049455788169887744$;$2734446169738254336$;$3802370240159539200$;$-3197793889711984640$;$-2034079121219833856$;$-3517638042499688448$;$2756999241045108736$;$-1412265644228725760$;$498571406695812096$;$1945268558396673024$;$1067709049175296000$;$-1755186001096647680$;$1209827512450835456$;$1136039929766154240$;$4312034546036769792$;$-1399867091509181440$;$4290417301117100032$;$-2921394816520898560$;$2496880800803959808$;$965473784240115712$;$1182774026808799232$;$-204187429932446720$;$-1962763105531218944$;$-4187805140317569024$;$-1090674096672538624$;$388428273977304064$;$-2964416501088735232$;$1247864933181831168$;$3018320011868167168$;$-2922434649079937024$;$-2827244412656866304$;$-3941730724942339072$;$413922725061238784$;$-1618565128455656448$;$1670593075480481792$;$-113529630987033600$;$3579116315990105088$;$1316506630711250944$;$-3278024262913878016$;$-1791772379654441984$;$148357060326915072$;$-1254464141464833024$;$-1219358170260856832$;$-2487186464879950848$;$-985666436233937920$;$-4492790386172960768$;$859578435120121856$;$1069511686914102272$;$-2546881994435684352$;$1383763304766642176$;$-1976291571616159744$;$-219007750171569152$;$-689365801733415936$;$-3032017309191276544$;$1305037600192734208$;$-822730724151449600$;$3896004358894362624$;$-185389333132044288$;$2828439957331303424$;$3265540318841452544$;$1196403371857777664$;$-865747885723894784$;$991927485922191360$;$1829173012796702720$;$3003777791880087552$;$875864942004777984$;$-3906930367163794432$;$-3556992320143121408$;$360875131684518912$;$1097192526183027712$;$-4329698010673551360$;$1583869490970557440$;$-3605038796927935488$;$3551902197500027904$;$-3756081063055204352$;$-2031738830261118976$;$-3213796178926836736$;$1941016281421272064$;$1947884591993230336$;$-1753168290509890560$;$-2786095117063500800$;$-1175249783729773568$;$-4560451260953735168$;$3635989984301326336$;$2077423486181774336$;$-3219702903282367488$;$-1133662662501934080$;$3805300068743445504$;$2885471987442015232$;$943411261838943232$;$-758896149326300160$;$2243762487234868224$;$-4396042532596916224$;$4135675584231220224$;$-3520719017587573760$;$-2489596685452412928$;$3087919608796354560$;$5528103612744704$;$3984978153643215872$;$752292869852181504$;$-156753170762930176$;$-2893513703776205824$;$-3042015697772354560$;$-4472526803908539392$;$-3363167393493800960$;$-1211209248059123712$;$-3599354006913178624$;$-381658921576709120$;$-3283553007060512768$;$-1794909374936779776$;$1434993633169009664$;$-4135047841340421120$;$2155453210560419840$;$2207629829822789632$;$-547915819442563072$;$874473219361768448$;$-2865784086497923072$;$866183627139550208$;$1605554808600632320$;$3924157859730817024$;$-1483456978135007232$;$-1787387014346009600$;$-3761499118655625216$;$2607848997433774080$;$-4305731084018494464$;$-556519101405495296$;$-1550344309458666496$;$-2599009180434294784$;$-3742143353491180544$;$3295753798649701376$;$-1865235429104310272$;$-916816830343925760$;$2347816567161783296$;$1292253523911275520$;$-2501458772983001088$;$-2126610914109842432$;$3715132599812982784$;$4030667509350548480$;$552883453941745664$;$-3760474043195269120$;$2138958318865470464$;$-1623589068932134912$;$-1538092436835293184$;$3061440769178159104$;$3783395860755009536$;$-259052143205985280$;$-1465068668876350464$;$-824879572047962112$;$313612749329996800$;$1976544364672239616$;$-630043356984383488$;$-3808783791078208512$;$-4447784430417692672$;$-707871505956334592$;$-4502487026027439104$;$3733155208764919808$;$1384002906617015296$;$2705327876392069120$;$2082824782198162432$;$-1707795592846550016$;$-1480446091780483072$;$-3772047796341188608$;$2860292405842053120$;$1150965604032849920$;$-921874374067450880$;$-1756405622534000640$;$-606918868952970240$;$1968172921011727360$;$-2410710703205997568$;$-2631668596273142784$;$116432236419461120$;$499292297914398720$;$3950518634245045248$;$-730011106101321728$;$772359699756941312$;$-565138831814352896$;$-637129089809658880$;$472755215864609792$;$-4346366009139140608$;$1424062774258440192$;$1074622078487896064$;$-301682219353498624$;$3381982494888665088$;$1005544803525699584$;$-1102422604603555840$;$-1611207800009017344$;$-308414549748593664$;$-2370778767141907456$;$678791810155948032$;$2296073191090452480$;$-894393969579761664$;$-2483338217858549760$;$2245765618347062272$;$4547045043054349312$;$2500170985445691392$;$4060446647411333120$;$-2056134768871380992$;$4141998942567520256$;$4436169906467319808$;$-2314947722957155328$;$1449777880288125952$;$4348005321560975360$;$2605198588451698688$;$-1216866616054532096$;$81455232026447872$;$1228172063514024960$;$354113203630968832$;$2876740218269125632$;$-286999824291438592$;$3267106243849363456$;$-2204819152603501568$;$467047740494441472$;$1229027142895760384$;$-2849004281069290496$;$3956323621370105856$;$728539998524811264$;$3377542670090201088$;$-2460588499543487488$;$-3506294664695409664$;$1793426603864946688$;$2554928238940706816$;$-1994477299259719680$;$-2069857744266329088$;$-969447160880882688$;$2482166488429510656$;$3648402956157810688$;$-2792968961201695744$;$244328426770544640$;$-933494323840156672$;$-1903052486083652608$;$2205046747831684096$;$1738259820910504960$;$-3158763901808333824$;$-2940416433848264704$;$251487108741044224$;$-2981101983161366528$;$4008501577064066048$;$112870864937577472$;$-1538412971057686528$;$4030653247548403712$;$-448116067237608448$;$1685964095330436096$;$-2548064594973215744$;$1216158681481757696$;$3073480853728247808$;$-2720897625309955072$;$3282034257887199232$;$4291841462539063296$;$1913420139835613184$;$106136359300726784$;$1382348118514027520$;$-877983796506977280$;$2620010890922416128$;$-796947237052668928$;$1701070514574127104$;$829880012948048896$;$-886260485053447168$;$-3157653090634101760$;$-4600217661691915264$;$-2115119742694455296$;$-1275699731274881024$;$-780081019538821120$;$-1412899943801031680$;$299359790449330176$;$2483683071268614144$;$-2007975101880255488$;$1616910116833945600$;$3400569152697065472$;$2608223252443358208$;$-4387355909692024832$;$-4289487028500612096$;$-330279687743645696$;$-893706817042361344$;$4438731359991838720$;$-1063594024376604672$;$-2331604979180184576$;$-558154999088692224$;$4330395195567512576$;$-4280267229501865984$;$-3727655072124467200$;$-2134028589617930240$;$415990283598601216$;$1837715407542832128$;$-4053111305696914432$;$-2925676139263220736$;$534951725802401792$;$-2597868371335531520$;$1906408088867907584$;$-1940865470368508928$;$-3741371620885942272$;$-2048031598012971008$;$3496728585046983680$;$3014493782880439296$;$1973838757835657216$;$1010617298263571456$;$3013679739434469376$;$1078426402619181056$;$3308920603089494016$;$3627128748274140160$;$-3643014633046628352$;$-3547730406796413952$;$4240522538770545664$;$3110188381391722496$;$-3744375577830531072$;$2652571163788207104$;$-1185739344454897664$;$-451154272455317504$;$4104545681359179776$;$-4099320474509290496$;$-2770409142939696128$;$-1753463052835097600$;$-1072038882919142400$;$2620730489284322304$;$-2648454310891182080$;$2211673919167782912$;$-3943198975976566784$;$-1676860892380646400$;$-3914398716814397440$;$-377879514176622592$;$1525549072139565056$;$634861115508934656$;$-1453982598290299904$;$2640711167371713536$;$731982956370466816$;$-2390151252035962880$;$2204305317296646144$;$457895013594889216$;$1049261825418380288$;$1586742110418430976$,嶗஁缠ᗖ鰱阙梁䷺ࣕᆚ种뷻슘锪Ӣ腦毘ꬅ쮥옔熇䴑廒迂ᥱ曎梾蹕ꒂ鲳蟲뺭釴㚶쯩ьꓱ罉䭪ㄅ縡듉쳾쥁鐵㤞죮꼁റ쉑鍛⛯튣᥸駧郌䗦匲嘥ᇭ匛⇭ꤎ둯䠵㪎⓮ἡﮛꗉh蠧䩏ꦛ⏍Ꞟ㘌瀲颢紑훌抹ᖻꎢ᯻䮝ᅠ퍻ߥ⬛詙滃辛쁱⴬̷ᚥ癱ꕗ틅ꠟﱲ斈遍跿昍ω蔮⯬ꝊȣḮཱྀ摫ࠋ诇뻜ಜ㼥ﴱ뵶羛倓슣佔죋鰣ꍁᰅ뗸赠鱪팰귃✫ﺓ싘焜䜽쌟葬遛봻匁舗叠䖧ꄿ졼ꕘᇏ砶኿ү畏蕥註췑箳ⴺ붋쫢㓳ਘ涥릨呟ೝ۾㊂흁ი宓㤟恩馶ၕӪⳍ⭼鞤⠃⒖౧ᰫ勋픨ꦴꠉ鿸ᄯꬎ膰눭ꁸ鮅ᄂ♼爃災賩씡갰愽荻࿐㼖휕͞ध鑶씀獦뉲╛㯦㱐࣪᤯踠稅鑼籊㓿塕犬鋾ꢠ碔Ꝃ뤢묰壜扼ﯺㄜ㡼㛐쫲ꏉ擑轶ᬙ赇㓲䟪跧왈椯岤璱諽爋탵끌◆䪍﹮뺋뗰䴲֐㛒콙㶔唰ᛮٖ։蝺鹍䏛蚢】④処춢ꬂ䆖覕ᄝ蚡뵭泿眼쮘뽓ጌ⩤∱᠃খ琘绹낍俪԰嘵튻貌Ƃᬋѽꤊ野磩阑킟触᪖幽㇏석㙚龰蘧᠝Ḷɯ䲀⬷궥䢮ᘜ쯛웒ꙻ啯९鿢섌繆潓渻ꟾㅳﱽtᕧꤞ䫗奅족䱲鴕ﯫ泹湝퐦沜䡖媯햳骪㜙㺦㿹䤍蕐庣๡ㇶ跷㡂溫蔔䏣츣횿쁐뼀֢软ⶫ䬡릤뛕ႋꒌⴛﬕ䘧獵䠗툴銖沃൲晴㭥클ա쐡ဧ㢔鱆絀讏펢뮇㛇ꍒ酁퐇嶦뤫ᇢ﭂㰥멀랄ּ࡛⩳쪟⽘꜐䢗缈ৡ茢ᶓ럼믿䨕ꗹ胪塖雙欘쉧ŷユ正闄㿮쮆囋䏑➁솔아⏳개㱘弽羕흿禟籙뭙儸讳꺄㊯䔸Ვ螣뾋亳㑁뷁罕岔씼ﭾッ䱑⪶൑鋔⽖リ䠩危Ჿ㢲㣎冽᠇鍎뭉ᤅ엧쭺矲⊘䨏枫짴乖賓醱ⷹᴈ퉵֡뎆ᢨ溿졺㼑汽썝맵썄鮿ⷥ㬜箷순蛧射它葧⟝潬⏫ꦨᓗ᠁쁳럂痾者ꐨ봠銇黟鵠䀎쳀쮮鹀˥吇壳聒⻺嬧ᨛ믍ﵥ⺐좞ἲ䌙破쿧ﭚ靥ش飢ꉲꢦ錗뺅账뉩ᢑ帖荜噅穳⣳쎘ƁЕコ䣸ិ䋺뀦옕쨄훨⥍㢒ዠ宼麭⵰舘ﱘ쬵뜕䮵퀊댋ꍔ쀌ꆃ懸᭻⯨ꅔ賳锫ॻꝪ緼촘᲻ὐㅠ咕愿䎿ꭧ㉰끻뺐൙Ä쥒Ħ鉦ꢳ鱘ﮟ㌚甃뛑恛뙛橚 攞䒹퐲鷬晒沒梽ㆦ齲絥ꆠữ뮮ࡕᛐ瘝箓傴뵩ᖋጕ睄픴亇☯ܖ漤⋴㵠㘇숄⪝綀惈硝略漑䢩杉瓲擯몀Ɫ缩৴헣ࡴ횣쌜ᗕ栴죿ቔ䤖媕㠝劅挒긑譽첾愒規ര䮈ᖂ獁鎢憩䞦έﳺ颃ꣳ靟鎏쩳촩骮淕੩뢅魄韰䣢柟襻욫祉佒丷젉갻鄜䥾늵ﮅ⊄쎷뗲꼣ㅫ◑걇傖籝굈ဝ珱큐ꧡꄝ关籜祷ᖃ㉚ᒳ겡ᵢ坂숰గ魰컏얅׬砐즵盓䎱萺Ϸ᫑즸୾顝渙칍炥드轤㴱最ꭎᇖ럘兌㮪뽺䄁똘敊嶷웦⃀᫲礠䀻⾺푖닡锒찼ꃡ恔樥麤ꕅꨶ摹賦ꓚ쏅䀔孼፠ꨈﶸ薷㳯㆘諷꣱鯀ኑ唿敓氻ӐŠ鶈䒭벒靭⃚ꩇT痻묻鋑릇漟䁨뾦ⷠ㒊ێ, -chunked 1.0,14904,14936 -{"inspector":{"messages":[["debug","\u2b71\ud7de\uc73d\ud2d8\uc3b8\uafe5\u6650\ucc7f\u7666\ud8ff\uc51a\uc679\u4512\ubdbc\ud6bc\u934e\u2932\ue944\u3161\u655c\ua84d\u51b6\uf218\u27dc\ub55c\ubd45\u661e\u5407\u358c\u1a0e\u81f3\uec99\ubdd7\u6ff9\ue56b\u7ae1\u1afb\u0a0f\ud751\u35b9\ueda7\u3680\ua3c9\u8008\ucd29\ud793\udd36\u905b\ua9d2\u0a3b\u8c7c\ua1b1\u113f\u0efc\u0c10\u3cbd\uddea\u7e67\ub9e5\u0dbb\u3c24\uda5e\u3331\ufd25\u8519\ua20d\uada0\ue10a\u8b00\u481d\ua0f2\ud391\u2e9f\ucc11\u450c\uf1e5\u37b6\ud12a\u98f3\uc258\u2138\u83a9\uf4f2\ua2ba\u022d\ue419\u97d2\u72f7\u1990\uf453\u4d24\u2877\u80d0\u0b86\u4bd1\u04a4\uf6f8\u0c89\uf941\u7981\u6705\uec0d\u89bb\u1182\ua225\ua8c4\uf84f\u989f\u4e5f\ue1ff\ua409\uae3b\ucb29\u48c4\ubec6\ued2c\ubfd4\u7a81\ub7e8\u8c58\u958b\ue6aa\u9683\u8abe\u5c15\ud9cf\u115a\u9527\ubef8\ue4d0\u010a\u9d2c\u8045\uddd8\u2aae\uafae\ub6d9\u7fe4\u130f\uee23\u406f\ud18e\ufd10\ua0dc\u6b15\u8cb4\ue0b1\u2d21\ud781\u1824\ucceb\u3ca2\ua7d2\u114e\uc6eb\u2eef\u3301\ub367\ubc72\uc9ef\u3c71\u52a7\ud7aa\ub1d1\u1266\ua4f6\u65d0\u1592\ufda8\u83a7\u465d\u6e0c\u2571\ua67b\u932e\u53b8\u505f\uac0b\u2fc6\u59b1\u1858\u3180\uf2c6\u870a\uec86\ude63\ub306\u9896\u5c17\u0aff\ue179\u40f0\ua347\u5d83\u7008\u8d05\u8b96\u8b99\u615b\u712f\u5277\u41ae\u7d44\ud32f\u5e8e\uafa0\u7b6e\u387e\uc261\u1aa6\ua1dd\uaa68\ua440\u2c87\u0968\ucdf1\ud643\u317a\u3951\u1512\u1358\u8a2b\u923b\u69a1\u6cd1\u5443\u5938\u6ea7\u8726\u64d1\u4890\ud884\uf045\u3fab\u3592\u1389\ue3a7\ua3ce\ub33c\ud365\u90e5\u2ef6\uf32f\u2667\u6576\ufc52\u6fac\uf229\u70c3\u8e69\u5970\ufee5\u6381\u12c9\u3734\ua6e7\ud9ec\ue53b\u009a\u4508\u3170\u3011\u955c\ud034\u3ab7\u8248\uf430\u6b56\u0434\u5bc6\u71c0\u73d4\ued94\u219e\u48a9\u255f\u509b\u6116\uc448\u0e34\u2a00\uabb1\u1d8f\u4f55\uc2b4\ud012\ub948\u37f2\u71c9\u2654\ua560\u596e\u6d3a\u1042\uad3c\ua096\u7043\u045b\ud667\u37b7\ucf9f\u7c04\u67f6\u21f7\ud845\u10ad\u3b3b\u7514\u7571\u56c5\uf859\u7838\u43cc\u9d1d\ufd92\uc008\u0909\uc61f\u0747\uebb5\u93b6\ud260\u32fc\u1287\ucfaf\u07db\udf3a\u8051\u3ed1\uf371\u067e\u5d12\u7846\u1667\u65fe\uf748\u060c\u1d42\u4a80\u9ccf\uc4c9\udfff\u95ca\u2ece\u796f\u1a61\uce85\ucf3f\u21d5\ud753\u0d36\uce43\u257a\u4e94\u9daa\ud94c\ud64e\uf9a3\u614c\ucfb8\u1b9b\u61bb\uc92e\ue359\u0651\u050a\u48ed\u393b\ud7bb\u13d9\ua1fa\u0a45\uf930\u529b\u6510\u54de\uaf5e\uc0db\u5eeb\u3f15\ueb8a\u74d6\u61cc\u0c12\u54c8\u4422\ua31e\u42d9\ue603\u6026\u15d3\u7236\uab0c\ue70f\u4537\u87dd\ud006\ud1ee\ue3f5\u3cef\u5b0d\u1e2a\u2562\u2e5a\ud2a0\u7ca0\u77ef\u7bf2\uccaf\ub20e\ue76b\u41fe\udd62\u0e7e\u8846\uf6ed\u0d01\u4295\udcf2\u382f\u81ff\u3114\uc76a\u8e5a\u9256\u2974\u5365\u74b5\u8291\u6ab2\u720f\u5464\ub512\u00cb\u7c62\u5ca4\u0b9d\u48fb\u8922\uc319\u3f9b\uc6ed\ude05\u9f06\u4f22\u3454\u3e61\u822b\u61f4\uf3c1\u2ab4\ua048\u8915\ud624\u74f1\u3fee\uc189\ueb5a\u0955\u4be2\u7c9a\u2a71\ufed8\ud31e\u5071\u05db\u031a\udf81\uec49\u01fb\ud88b\u1c88\u7731\u9103\ua683\u321f\u2744\udb82\u64f0\u5afe\u4553\u129b\u97eb\u640e\u2e4f\u4bcd\u2629\u7035\ube78\u1e1f\ue030\ud91b\u4e58\u804c\ub939\u4dd8\ue049\u1796\u1b87\u28c3\udea9\u1578\u1fea\u5cc7\u0379\ud877\u1137\u2b1a\u45e3\uc00f\u2ad4\uf286\u883e\ub7d4\u1346\ub53a\uce79\uc43a\u8697\uc100\ua8f5\u8f99\ue8cf\u42af\u1cab\uac78\ua481\u436c\u2832\u20cc\u18cb\u93d4\u1ce6\uf30d\uad7e\ucb81\ucd3f\u9bff\ua36d\u1c46\ucdb7\uf38c\u3be1\u0a3d\u30e3\u2dcf\u2e40\u2a77~\u26ed\u6580\u6f0b\uaa7f\ud05a\uca78\ue4ee\u92c8\u57a3\uc756\u3e0c\u4a13\u60dc\u2bb8\u36f8\uf6f0\u9622\ud65e\u3d35\uea3c\u3aee\u182a\u44b5\uf0e5\u9229\u4dee\u0375\ub87e\udc0d\uebdd\u22a2\uad89\u106b\u789e\u760b"],["error","\u1253\u427b\u42a5\u5c6f\u531d\uc76c\u1a20\uf3a4\u0801\u0e4a\ub0e0\uc6d7\u1582\u2f42\u4c33\u58e7\uf830\u93e7\ue509\ua9b9\u60e1\u6d71\ub872\u0bd1\ue6df\u7fec\u1f46\u1211\u9349\u1cb1\u1abe\u1848\u53d8\uf9cb\u05b3\uf616\ud9db\ud7d4\uc567\ua65f\ucd41\u966a\u5a32\u9f05\u31fc\u1442\u3760\u47f4\u9c31\ue4fa\u39bb\ub837\uc9ac\u2108\u1265\u1393\u91a2\uc182\ub300\u4add\uebed\uf4a5\u6a48\u93bc\ue800\u8742\ufe41\ue2d4\u3432\u89f7\u229f\u0376\u9d8a\u05e7\u7d44\u586a\u99ba\ua043\u97dd\ud85c\u6754\u3c0e\uac78\u78b4\u9b12\uf1bc\u7318\u2c17\u101c\u174c\ub29d\ue9c7\uf6a4\u0fa9\ua53c\ud160\u2504\u11f0\u9f6a\uf372\uf208\u3e15\u3076\u2c89\u37c4\u9a7f\ud782\u3372\u93ff\udaec\u44f3\ud4c4\u5404\u0f4f\u2d63\ua977\u2884\u520b\ufd8c\u2b56\ub7d9\ued24\u4e4c\u920a\ucbda\u23f8\udf02\u5d7e\ud124\u3ea6\u1933\ua440\u7b39\uef3c\u023e\u1fab\ua132\ud4f0\u85e5\ubc21\uf321\u7b95\u0383\u7393\u092e\u112a\u57ae\ub9cd\uffab\u4979\u48e9\u04ed\uc55c\u6656\uf531\u286c\ufc11\uc7cc\u9362\u6516\u0259\u6f35\u0d9d\uea31\u1be8\u000f\u2927\u06ea\ubfbc\ucd92\ubd04\ub964\u0c3d\u0e92\u2f08\u243e\ua4e4\udd00\u55fe\u77b4\ub4af\uf336\u1191\u9e43\u431c\u8a52\u6bd7\u0a1a\u8728\uea55\ufe8b\u6a28\ub73b\ua875\u543e\u7e2e\u2f21\ufa8f\ud911\udc09\ufaea\u35a6\u9968\u4a65\u9a48\ue949\udc87\u33bb\u0f93\ufde1\u5021\uc841\u7736\uadfc\u315f\u642d\ua9a8\u6ab8\u1478\uddc7\ua155\u8cb7\u46ca\ud1ff\uf726\u9cb3\u2c5f\u4d29\uf3c4\ua934\u75a7\ufaa9\u183b\uf2b6\ub654\u9320\u6d4a\ue70c\uac3d\u4dda\u1808\u40f4\u2447\ub741\u4928\u8bdf\uf468\u1baa\u8371\u370f\u2c43\u0af4\uf438\u3dce\u0d5f\u7610\u01c8\ufff9\u04b1\udcaa\u6854\u0cf9\u44f1\udfbe\u79db\u83c7\u5947\u4e20\ua60e\ubb8d\ua0cb\u8e3f\u2b19\u91dd\u922e\u68cf\udec5\u781c\u255c\ud7aa\ub2f4\u8d0e\u91e5\uc5af\uc575\u7dea\u0c5d\u9f2b\ue6bd\u5048\u8256\u3bf3\u0d8e\ud3da\u3405\u37fb\u59d4\u6c47\u308f\u36fc\u7d92\u47a8\u5c86\u3316\u9d00\u1844\u5b70\u758c\ub5a9\u26d9\u49e9\u2283\u1587\uefa5\u5f25\uf45e\ubed6\u8685\uc7ee\u6b7b\u8e27\ua051\uff38\u1dcc\ud620\ub583\ua126\u447d\ucadb\u9adc\udb27\uaa8e\u3e3c\u6dac\u4656\u454b\ubc75\ud0b1\uc2d1\u698e\ufa11\uc90d\u0811\u5065\u4d6f\u7b9a\u7442\ubd1a\u05a5\u349c\u5cfb\u311c\u5094\u52db\u9d33\ua1ed\u7362\u56df\ub1a6\u8aa2\u7e70\ud3b6\u78fb\u66b3\ua882\u60c2\u674a\u5927\u5cf1\u693a\u49b4\ud14f\uf6dd\uf90d\u0b0c\u6e2b\u3027\u3cc6\u43cd\ua999\u2c86\u1024\u85c1\ud243\u69b6\ueb93\ub604\ua887\u6974\u5f7a\ub37b\u8236\u424f\ud692\u87ee\u0632\u43dc\u5863\ueae7\ua770\uf34c\ud24c\u2197\u0a98\u1845\u8d3a\u745d\ue316\u52c6\u455d\u94ca\u2bc6\u9a28\u0ef1\u09ad\ufa71\u2f30\u1bb9\uf990\u9b7c\u26f1\uc1b8\u657e\ub47e\uefcb\ua120\u5061\ub91f\u29b4\u0b72\u68fc\uf025\u0c6e\u46df\u77fd\uad9c\ucf1b\u91f7\u3653\ue09a\u18ff\u828d\ueb1b\u0ad8\uc923\u66a1\u6234\ua683\ua6fa\u2f5e\u30e1\u0e37\u3899\ufbc5\u5259\ufe5e\u5bf3\u0e82\u6e8d\ubc44\ub457\uc6b5\u3859\u711f\uabfa\u1632\u8087\ub7e1\ubf77\u72c8\uad23\ue054\uee27\u3749\u13b7\ucc4e\uc989\ufdcb\u47f0\u2312\ue3b8\u8c5b\ubeec\udd1f\u24bc\uc2c4\u1554\uce45\u526c\u98dc\u1e76\ubce9\u7d99\u85bc\ueec2\u8ce5\u638c\u1e8f\ubc0c\u972b\u0cda\u8c27\udca4\u74af\u1c03\ud7fb\u2aa0\u27d7\ud5ac\u4409\ud2bd\u2465\ufdc7\u56c6\uca40\u1337\ufcea\ua3e5\u78a9\u4d63\u1927\u5919\u442a\u90e4\uda61\u2911\u4b9d\udfab\u8b28\u865c\u64b9\u58b7\u0b39\ue98a\u6cfc\uc013\uae55\u9566\uf3a8\u903c\u16b4\u63fa\u6f3b\u3127\ue2f5\u1db6\u727e\uec2f\u6cc8\ue57e\u3fe5\u3a17\u1ac8\u7d40\u1609\u5119\u8af8\u3e5a\ua70e\ufda6\uacf1\ud5be\u5a70\udcec\u420d\ue6b6\u60af\ua46c\ubd5c\u2d95\u69cf\u57e9\ub508\uf81d\u8b91\u020e\uebe5\u2148\uc6c0\u7b9b\u8f02\ud252\u2273\u0e22\u6f27\ue41b\ua3ea\u6593\u2009\ue7b8\uc533\u3ba0\ud9d5\ua8d9\u3ba9\ubdef\u5e3e\u3181\u0bbb\u7425\u2684\u0f89\u0848\u0bae\u75c3\uad5e\ua3c8\u04dc\u34eb\uaf17\u9180\u5edd\ub971\u9962\uf91e\u51e7\ue92f\uf386\u6192\u5b3b\u7e64\u7da8\ubfce\ud637\u5cd3\u014e\uf27e\u32d5\ud050\uaad3\u7304\uc3be\u9287\ua34b\u8d39\u7bea\u7629\uae3e\u8caf\u6bdf\u8807\u4be8\u357c\uedf2\u0684\ue90f\u5f8c\u28e1\u1e68\u4990\ucc8f\ufffc\u18b7\u2a64\uc6ce\u25df\u44fe\u4711\u667a\ua00a\u759d\u0944\u28ea\uc2e4\ue602\u4c48\u45ae\u7acc"],["fatal","\u9ad1\u40d3\u8b2e\uc72f\u4e92\ub1e6\udc78\uae2f\u5729\ud2ec\ua6f0\ud046\ud347\u2532\u33ce\u9736\u0e4e\uec88\ueb0a\ua83f\uf6bd\u3d72\uc95c\ud565\u9708\u2cea\ucda2\u103e\u5530\u26db\u750a\u968c\u69f1\u18b3\u0905\u84be\u432e\u4743\u165c\ub6d3\ucb6d\u6b9c\u5088\u2b36\uf2d5\u6bb3\udd35\u94aa\u1eae\u40aa\ud85c\u7372\ubef0\u0262\ua0ef\u8462\u89e9\ud937\u7f5d\uceed\u6fa2\ueb2b\u2490\u20eb\u5a42\ub306\u14da\uefe0\ud81f\u23e2\u1a35\u9fbe\ub1a8\u2497\u7479\ue3c4\u82e5\u844f\u37a4\u112c\u4d19\ufa61\uaedc\ufb33\ud1b3\ua8aa\uda06\u9ff3\u08cd\uc0b4\u0b7d\u83db\u35c9\u03b2\u513d\u9866\u7391\u14f1\u2a04\u94ef\u69bc\uaaed\ue7c5\ue528\u6cd6\u37c1\uef29\ue9ae\ud7fb\ucf6c\u2f31\u8f1c\u9121\uefcd\ud1ee\u69ca\u5a01\u5e0b\u9ce7\uf614\u47d5\udb97\u17d3\u14ef\ub7d4\u4f04\u80ff\ucbb0\ucbb4\u077e\ue86a\u088c\u0710\u3a79\ucebf\ueb3e\u970a\ub4b7\u6056\uc68a\uf48e\ufc1b\u87d0\u162d\uad1e\ud19f\ud4f5\uc2ac\u69c2\ud8de\u357c\udd1b\u99c0\ua3a6\u0a37\u3d69\u9cfb\u257f\u6a0e\u9b5b\u3f48\u63af\u2c0d\u34b9\u6ff8\ua3dd\u55f3\uc31a\u4441\ufcaf\u5813\u1160\uce19\u09bf\ude69\u0619\u7986\u0ae0\u7261\uad37\u1d16\uc88c\u25e1\ub664\u234a\u7b01\u5e23\uc2bd\u2663\u7ed1l\u1b94\u2006\u51f6\u5c78\u6b9a\u589b\uf1d9\u8438\ub087\u2713\uc8f1\u4def\uc468\ud9e4\u8ddb\u58be\u949a\u7380\uaff5\ucd1b\u7122\ue19b\u1ba6\u7bbc\u4e47\u6210\uf123\u28d8\u3dbc\u4fff\uae9c\ud3f0\ucdcd\ua348\u22ed\u4a8a\u7ce2\u9bf6\u12f7\u870e\u0dff\ue60d\u154f\u539d\u961b\ucf11\u851d\u2777\uaa52\u98e6\u35bb\u6f0b\u8119\u6043\u4850\u511d\ue2a5\u2453\ueac3\u3a04\u0082\ue4b4\u848a\ubbec\u4f6e\u349f\u6771\u3c81\uada7\u73df\u5a5b\ub510\u8016\u06ac\u4bb4\ucedc\u50be\u36ea\u13ba\u9349\uca8f\uca69\ub347\u85e9\u62e6\u9e88\u604b\u1a6b\uddd4\u18ba\uc783\u9e3f\u86ee\ud30c\u26ec\u2783\ub252\u247e\ubc93\u0352\ua6b1\uf2c1\ube84\ud43a\u2420\u2b2d\ub33b\ud3c8\uf1ef\ue435\u3f91\uc6ee\u688f\u34a2\ud776\u080c\u1621\u7a77\uda72\u5e2a\u0ceb\ua021\u6605\u7338\u67eb\uf0a9\u1fbe\ud7fa\u0d84\ue96a\ud316\u793b\u43ef\ucc6b\ub10c\ub979\u849c\u5230\ufaa4\ub927\u3a5c\u11ae\u2ea1\u4c3e\u3d1a\u1aba\u6f21\ue944\u9dfc\ube11\u1a59\u382d\u5f0f\uec1f\u61b2\ue49e\u4baa\u6718\u81c7\u62bd\u5393\u36c1\u7f59\ud480\u03c7\u9d12\uee1d\u8a6b\u0ea1\u9e35\ub3fe\u242b\u6f1e\u7ecb\u3c1c\uad45\ub186\ud672\u0b40\u079d\uf50c\u5e21\u0209\ua678\u56a6\u3abe\u597e\ufd41\u39c3\u54d6\u317c\u753d\udf54\u1267\u06aa\u4529\ufbe8\u1517\u4f32\ud3bb\uc323\u6a14\uf199\uf2dd\u2940\ua357\u8039\u6036\u829c\u411c\u5ee2\u499d\udc31\u8c46\uba67\u8d52\u2cf7\u8998\ua6ba\ud517\u19d0\u8cdd\ua520\u4741\u6324\ub6ee\ua3d5\u7b8a\u9985\ue893\u11b4\uedea\uff46\u06ba\ue807\uc99a\u82ec\u55e9\u8782\u3fc5\u72b4\u1a61\ub565\ued42\u4b84\u3dd9\uf8b7\ufcf5\ua75a\uf5db\u3240\ub7ea\uf59f\ua1ca\u180f\u840a\ue4dc\ua02a\ud18d\u001a\u0625\uaa5f\ueccd\u13a0\ubfdc\ua174\u129b\u1b61\u855f\u5546\u1474\u850b\uf259\u7673\u91d0\uf260\u93cd\ue687\u7ebf\ubc4c\u7747\ub685\ue6be\uc1cc\u9a4b\ub14b\uc19c\ua4e3\u905e\u88b0\u687d\u4805\ue84b\ud025\u2044\ufc2c\u7ee5\ub4a6&\u83d4\u6d9a\u2d08\u221d\u00cd\u84b8\u575a\u177a\u8694\u858a\u3a40\u0f02\ueb8a\ubce6\u98c3\uf495\uef8f\ubffe\ub6a3\u1bf5\u0f0c\u7c07\u36a9\u46b2\ua913\u7899\u572f\u9458\u62c8\u7609\u205c\u2b66\ue4ce\ud533\u0d88\u3981\uace1\u72a8\u4a0b\u7159\ua17c\ua965\u5744\u11fa\u4bde\u1081\u6fcc\u0238\u395f\u4b58\ud7c5\u237d\uec84\uf623\u56ea\u5bbe\u383d\u24bf\u7b08\u7779\u3f42\u86fe\u25d4\u7a63\ucad9\u3e2a\u11b1\u1c6c\u0d40\u8869\u9720\u403f\u57e9\u82a6\u26b9\u738c\ua5c3\u4687\uec93\ue7ec\u8c78\u04c5\ub076\u4f0f\u97d7\uca3f\u1a1d\u9924\u7b29\ub85d\u7f8e\u9289\ub4c1\ud977\ud5b7\uca06\u5922\u8def\u9a41\u883b\u0b3f\ud540\u3b43\u06f9\ud0d0\u286b\u019d\ud6c4\ub60a\u555b\u6c82\u2601\u1a0b\ub049\ub4b2\ua37d\uf1de\u4c3c\u2ae0\u70d5\u6796\u9596\u242d\u95d8\u3efd\u32a3\u62f1\uf90e\uf19d\ud3d5\u905f\ub305\u9269\u9ba3\u8e9f\u9c02\u341e\uf878\u9425\u60a1\ua4ca\u8f38\u9605\u3292\uf6bb\u3332\u7f2e\ue36c\uf5b8\u713d\ud50e\u8360\u8e65\ueba7\ub842\u940d\u027e\u7ef2\u0c60\ufeb3\uc679\u559c\u9719\u13e3\u9be8\ub2ef\u3bb1\ub11c\u1766\u3db8\u9a71\u5966\u6b1c\ufa15\u18f8\u6476\u46ad\uaa38\u8969\u4ff3\uafdb\udc73\uf7a4\u08a8\uc4bd\u8142\u0128\u787e\u9035\u955f\u50a9\ud0e3\uccb6\uebc1\u13a2\ue0c0\uc341\u5fe5\u0b67\u4eb4\u4a4c\u5b30\u6d68\u8636\u8f23\u6e38\uf00c\ub5f5\ud40b\ua462\ua257\u307e\u388d\u0585\uf745\ubd6b\uf3d2\u89c5\u8786\ue880\ue3ea\ued16\uffcb\ue08f\u4986\u11c9\u3ed8\u46ee\u07b6\uf99a\ud701\u2125\uf723\ua79a\u3a8d\ub2b8\u5955\ub620\uc43d\uce25\u3ff6\uc3f4\u089e\u8fcc\u2d98\ucbaf\u49ff\u289d\u68e9\u1e0c\u7ef1\u9907\uc59e\ud0ea\u3438\ub6eb\u994b\uc3f8\uae71\ub38c\u35ad\u47f7\u5221\ub6e0\ufe3d\ubef1\u46fd\u5160\u57bc\uab8f\ub68e\uad5d\u9101\u6742\uc136\u208e\u6cfd\u61b6\u9ae2\ud542\u851c\ue33f\u16e6\ud391\ua9d1\u80b4\u1e5a\u87e1\u6937\u20c1\ub863\uceb7\u0fe4\ue4af\uca38\ub96f\uc832\u9743\u5af8\udd7a\u6ed8\ua0d1\uc868\u1d90\u2fe2\u1c52\u2d3d\u702a\u1be1\u3a09\u2557\u20bc\ud68b\ua6cc\ubddb\u355f\u531a\ue97f\u45c6\u986c\ued18\u3c53\uaceb\uc3b4\ueb08\ub87f\uc772\u7771\uff47\u450e\u1cf6\ua62d\u8ffd\u17ae\uec3e\ub2ba\ud376\ua4f2\ubaa9\uf8b8\u83e0\ufa47\u1b98\u1dcc\u2127\u8fe8\ud54c\u3681\uc0bd\ufc3b\udbf2\u9f89\ubda1\ucfa5\udd87\u07fb\u50e5\udf2e\u4dac\u69e9\uc824\u0a0e\udacb\u0d18\u547d\u4fa7\u8d53\u12cf\uf94a\ude62\ub7a9\u3a6a\uf0ff\u23ce\uaf6f\u6d60\u5a4b\u6220\u7476\u3b47\u1c97\uee82\ua687\u5b6c\u896c\ubf9d\ua394\ueed6\u4bc1\u3fb6\ue689\uab37\u1066\u7974\u80ed\u26d1\u7257\u9959\u7091\u890d\u0e83\u57ee\u29e5\u4ffd\u6852\u050d\u948c\uf3fa\u5b3a\u896e\u45b4\u439d\u45df\u1d6aT\u609c\uca0d\u4cd9\u6950\ub2d4\ueec4\u418a\u2c5c\u0587\ueeac\u4398\uca59\uc6da\uaf0a\ua2e3\u80d7\u77b2\ufdbd\ua9b9\u2360\u39da\u95ea\u0190\ub7ef\uab8a"],["info","\uffe6\uad00\u167d\ud0ef\uf505\u294e\u6efa\ub08e\u4245\uc402\uc98a\uda36\uc27c\ub3c2\u2a44\ue7c4\u32a7\u6f8d\uce3a\uce23\ubd9b'\u24de\u1374\ubbef\u9313\u8c93\uc6dd\uea3b\u0b4e\u79d4\ubf10\u917e\u52f7\u80a3\ub47b\u7bfb\u1479\uf79a\u63b1\u94f9\u8871\u6bc5\uba0d\u6cdc\u06f9\u5de4\u0ece\u98e6\u56fa\u694f\u1b4c\u3aae\ua3c0\u2747\ue9bf\u3264\u0997\uc651\u3ae9\u343e\u98c9\uba91\u6969\u4feb\u9db5\uc627\ue8a8\ue199\uc03a\ua4c3\ufd77\u09fe\u48a7\u048a\ue790\u78f6\u7d8f\u9cbf\u6f14\uf29f\u11e5\u860d\u90e2\u068b\u224a\u2189\ua5f7\ua157\ucf2e\uae7f"],["warn","\ud420\ue097\u9890\u11d9\u1161\uddc3\ua93f\uc714\u02b9\u2e36\uc6f8\u075d\u5df5\ub660\u355b\u6e43\u43d7\uace1\u55da\u1a15\u20e1\u4bec\ubd4a\ud675\u499c\u2d4e\u5b8e\u4751\uf9be\u808c\u14af\u524d\u82d5\u8d8d\u306f\u332e\ub9bd\u1e06\u94b5\u17a8\u1db5\u26e6\u4821\u25e4\u56c3\u0e93\u0845\ue6d4\uc07a\u644a\u9fe7\u2dbf\u4b5f\ud5c8\ub57d\u6f54\u8d32\u6f76\ue2c5\ud8c3\u2b0a\u3f7b\u14aa\u834a\uf62f\u1370\ubefd\u0fcc\uf337\u5e3f\u9658\ua636\u4ed3\u5e9e\ubd59\u2777\u7e78\u0624\u2d3e\u0dab\u69ad\ue6e3\u9d02\ub91e\u1360\uc609\u9a31\ud6f6\u80ab\uf382\u7f53\ud4a1\ud9e4\ub8df\ua35f\u9512\uc05e\u44ec\ude71\ub438\uf8a8\u06e8\ua1e4\u59cd\u95e8\u272c\ua551\u22b0\u497e\u953a\u447d\uf762\u7ddd\u926b\u2eb0\uc140\ucc94\ue6e6\u27e8\u80ae\uf1c3\u312b\u06b1\u7cbf\ufdc8\ud263\uc229\ud377\u8e39\u03b4\udccd\u3e6f\u2e90\ub043\ub78a\u8576\u97fa\u1efb\ue0da\u7704\uae84\u70fb\u1385\uf6f5\u3e53\ud1e5\u502c\u5cb6\u2255\u6169\uf264\uea5f\uf8b2\u6b68\u7381\uf8e1\u8d3b\u26ce\u471e\u100c\u0c78\u489a\u600d\u634a\u0548\u6e0b\ub9ee\u8696\u4c93\uaf62\u2e15\u7e3b\u94e4\u1525\ud330\u507e\ue431\u6b89\u9e70\ud841\u4271\u620f\uf827\ucb86\u42aa\uc7ab\u32f6\u7f19"]],"metric.metric-1":[1,2,3,4],"metric.metric-2":[5,6,7,8]},"finished":true}_serial,__mv__serial,_time,__mv__time,random_bytes,__mv_random_bytes,random_dict,__mv_random_dict,random_integers,__mv_random_integers,random_unicode,__mv_random_unicode 30,,1443154423.18,,>sЗ6LOK;3QN4ՄŒ 5Džvo Ǚ*ݓ/,,"{""a"":4.485629169067438e+307,""b"":""\u3405\uc56e\u1656\u3f3e\u14ec\u6e7f\u0bf3\u398d\uf960\u3e3b\ub0a4\u4108\ud039\u1daf\u8b4a\u7fcd\u7c3c\u8146\u9537\u2af9\u45ba\u7b57\u3549\u936b\ued65\u3940\u21d8\u4e54\u6cce\uc465\u580c\ue3eb\u7bbc\u86ef\uf546\u038f\u9b08\u6da4\ubd60\udb28\ubfa6\u5614\uf069\u4f23\ube9a\u5c6f\u0680\udcf0\u5c25\ubdb8\ua6aa\u5010\ub56b\u82d3\u892d\u6b66\ua0d1\u76ed\u2726\u51cf\u392b\uf56d\ua421\u44ed\u29fd\udc47\ub6a0\ue891\u574b\udb44\u1e9b\u66cc\u48f8\u44e6\u3c6f\u82ff\uaab0\ua21d\ue2d1\ueaf4\u8976\ub000\uba03\u194f\u1865\u6f45\ua6c6\ue2d3\ub77e\uffed\u9fb8\u436f\u3211\ubeee\udb45\ue5b9\u8403\u2a25\u0319\u1cf2\ub25d\ue1de\u02ba\u6acf\uf5c6\u2fc8\u17ec\ud19c\ua025\u4f28\u01b2\u39d3\u17ee\u3a6e\u76bd\u8d5b\u370e\u6bee\u1029\ua211\u3f9b\uc0a8\u6386\u25b3\u4311\u3bb0\ue012\u7cd9\u2136\uc37e\u376e\u86fb\u15a3\u4035\u8c44\u11cb\uc184\u22a8\u423f\u9959\ufe30\u9169\u1443\uecd0\ua5bd\u46e6\ub573\u2aff\u18dc\u38ab\uf435\u8319\uc25c\u64d0\uee25\u78e6\u6dba\u3f68\ucc48\u0f39\uea80\u26b3\u4ebf\u5124\u0c1e\u325c\u4f86\u28bc\ub5f2\u2cb1\u86f2\u1225\u5570\u7f0a\u41d5\u7a93\ud402\u8dae\u0f67\u99b7\u11cc\u419a\u1550\ue362\u4639\u3415\u7b9a\u836c\u3f29\u951e\u3ec6\uce4c\u9101\ua824\u3cbc\u03d9\u60c7\u41c3\ua221\u6d20\u1969\ue59c\ufcbb\u240e\ue4ad\ub1a7\uf952\ueeba\u5f1c\u56c9\u0c39\u13b2\u9962\u539b\u894c\uf067\u80b0\u57ee\uedbf\ubce0\u8998\u3864\ua2f2\u462a\u42ac\uba5e\uea38\u3731\udf21\udf4c\uf150\uf0a5\u9618\u594a\u14a5\ude34\ue549\u326c\u2917\u4293\u50b7\ua91e\u35af\u3900\u59a8\ud1f0\u4938\udfc8\u9178\u7d86\ud921\ude1d\u23f9\u785d\u4725\u70a8\u2b75\u1676\uf424\u11a2\ua8ec\ua3ec\u9af8\u3293\ud7a9\ue794\u1acc\u2848\u08c7\u043a\u9b13\uddfe\u702e\u88c6\uabc7\u238a\u9a86\ud606\u5e61\u8a6b\u97d0\u30ef\u0cc8\ud605\uac35\ud761\u9ea9\u1cf6\u8418\uf252\u3381\u85a3\u8d76\u66b2\u7418\u3223\u8d93\ud58b\u84c8\u450d\u2f77\ua87c\u03cd\u57dd\uc20d\uf3a9\u3adb\u412c\uab8a\u7988\ubf1c\ub276\u4d89\u8993\u09da\ub179\uf21c\u8605\u00b5\u3326\ud88f\u11d5\uf1bb\u58e6\ufbb6\ud0c8\u2c43\u4dda\u5b28\u0729\u6abf\u22ac\u390c\u4394\u0331\u0a0d\u9335\u2c71\u4734\u8996\u672a\u1f58\u5386\u46b4\u47f4\udbd4\ub64b\ua839\u4a1e\ua3f8\uae9e\ue0c7\u30a6\u9fbf\ua56c\u0575\u6f02\u2680\u7125\uc100\ud8db\uebd6\u7bd6\u191b\uf298\u252d\u7d03\u0ad2\u8b2d\uc154\u9c36\ubfad\ub526\u70a4\u1cc3\ud8b2\u7670\u97c6\ue4f6\u4a6f\u359d\uac7e\uaa06\u7cb6\uce57\u1fc5\u1f44\ue464\u0fa1\u9999\uf8c3\u5de9\u227f\u4843\u9ebc\u8ecd\u66fe\u1447\u6b54\uce05\uaabf\u7a28\ub1df\uea6b\u090e\u5a6b\u65c1\ufc8f\ued10\u0a08\uf01d\uf427\u4024\u2f6e\u9147\u77c0\uc7e5\u0d31\u12d2\ub0e4\u90a7\u6b0f\u94fc\u4864\uec2c\ued55\u7a32\u236f\ud4e1\u15a9\u3f64\ub664\ua98e\uc0a7\u118f\ub9fd\ue961\u5f2e\ud213\u5b26\ubde0\u2067\u9e1f\u2d12\u3e86\u9f5a\ufc7f\u27fa\u6459\u9e06\ua99d\ub1d1\u5d5f\u8aa6\u59c9\uf766\u6b4f\u18a7\uf7d6\ua59e\uaa4f\u9ece\u9e99\u34f1\u7de4\u9b8c\u0f85\u4b7d\uf52b\ub1da\u3f12\u18c9\ud532\u0aab\uc84d\ud755\uaef9\u3347\u1179\u9572\ub008\ub927\u8621\uaac9\u50d5\u7e56\u0821\u0afb\u9809\ub7e7\u0f6b\ue913\u3a0e\u646a\u4c3e\u4a51\uca65\ud576\u48b0\u8307\u9621\ue4eb\uc24c\u8c73\u11a0\u1ab2\ucad9\u7f76\u0bd6\ua352\u8fee\ude7c\uc000\u3fb1\u1522\u3f47\u4014\u13e9\u1af0\u7211\ua79b\u4abe\ud850\u1f5d\uf8b9\u61a0\ub5af\u58bb\ub0b2\ua390\ua74a\uff94\u4a3e\ud7e9\ub903\u7a67\u02bc\u4a88\u310e\ud371\ub26b\u576d\u0f97\u4277\ue5cf\u8597\ubd30\u1d94\ucc23\u1ecf\u805a\u9071\u7046\u45e9\u02ea\u2132\u2100\u5b1b\u3333\ubb6d\u1c9f\ueda2\ud956\u1e33\u4931\u7e2a\u8417\u0012\u4f6b\u7e47\u26e4\u490a\u277d\uc810\u50f1\ud7f7\ub5ae\u81cb\u7c08\u4edc\u6c4a\uc3ed\uc83b\u5683\u05b0\u26b7\u86c1\u231f\u066b\u7f0f\ude80\ua172\ua10c\uf8ca\ub924\u51b2\u4202\ubeaf\udd14\ua8d5\uf520\u7b56\ue6a2\u5c4a\ub72d\u6737\u4d76\ub75e\ud5a3\ub742\u1592\u3bfc\u729c\u998d\u2643\ub2d4\u4bf9\ub907\u5f9c\ue54b\udc07\u6cd9\u7556\u5d1a\uc901\ue299\u75ed\ub8e4\u5e0c\ud3ae\uc6e8\ub381\u3a96\u2a58\u00a6\ub981\u1ff1\ue849\u8bf7\u071c\ue57a\u0f9b\u61d2\u8f00\u759a\u3a2a\u8f1f\ub31c\uf5ba\u3567\u42d0\uffba\uec29\u31ba\u5e15\u9477\ue86e\ufc9c\uf4a7\u51df\u2a74\uf1af\ua538\u602a\u7010\u01a5\u3c06\u18bf\u2938\u608b\uaf95\u1250\ufdc4\u5c5b\uc7b7\uade9\uf693\u624b\u13bf\u4cff\u6ced\u68e1\u0c5d\u72ee\u3e0b\u7c12\u4f76\ub6c5\u53d7\u83be\u6733\u0dce\ufbd2\u4b17\u0f7f\u59f0\u1486\u2a37\ue50c\ud06c\u38da\u3d40\ue802\u245f\u229e\u1073\u388d\ub3eb\udd3f\u1e3f\uffb7\u050d\u5d2f\u32ba\ued16\u47ee\ue14c\u648c\ud994\u9109\u39cc"",""\u798f \u9152\u5427"":{""fu"":1.3784681212841968e+308,""bar"":1.2184596174189031e+307}}",,"-1322536697583593472 -4210579812174846976 -417050970830199808 diff --git a/tests/searchcommands/test_internals_v2.py b/tests/searchcommands/test_internals_v2.py index 518c840cc..bdef65c4a 100755 --- a/tests/searchcommands/test_internals_v2.py +++ b/tests/searchcommands/test_internals_v2.py @@ -227,10 +227,12 @@ def test_record_writer_with_random_data(self, save_recording=False): for name, metric in six.iteritems(metrics): writer.write_metric(name, metric) - self.assertEqual(writer._chunk_count, 3) - self.assertEqual(writer._record_count, 1) + self.assertEqual(writer._chunk_count, 0) + self.assertEqual(writer._record_count, 31) + self.assertEqual(writer.pending_record_count, 31) self.assertGreater(writer._buffer.tell(), 0) - self.assertEqual(writer._total_record_count, 30) + self.assertEqual(writer._total_record_count, 0) + self.assertEqual(writer.committed_record_count, 0) self.assertListEqual(writer._fieldnames, fieldnames) self.assertListEqual(writer._inspector['messages'], messages) @@ -240,18 +242,21 @@ def test_record_writer_with_random_data(self, save_recording=False): writer.flush(finished=True) - self.assertEqual(writer._chunk_count, 4) + self.assertEqual(writer._chunk_count, 1) self.assertEqual(writer._record_count, 0) + self.assertEqual(writer.pending_record_count, 0) self.assertEqual(writer._buffer.tell(), 0) self.assertEqual(writer._buffer.getvalue(), '') self.assertEqual(writer._total_record_count, 31) + self.assertEqual(writer.committed_record_count, 31) self.assertRaises(AssertionError, writer.flush, finished=True, partial=True) self.assertRaises(AssertionError, writer.flush, finished='non-boolean') self.assertRaises(AssertionError, writer.flush, partial='non-boolean') self.assertRaises(AssertionError, writer.flush) - self.assertRaises(RuntimeError, writer.write_record, {}) + # P2 [ ] TODO: For SCPv2 we should follow the finish negotiation protocol. + # self.assertRaises(RuntimeError, writer.write_record, {}) self.assertFalse(writer._ofile.closed) self.assertIsNone(writer._fieldnames) diff --git a/tests/searchcommands/test_search_command.py b/tests/searchcommands/test_search_command.py index 9f9ee8d4a..246424cd3 100755 --- a/tests/searchcommands/test_search_command.py +++ b/tests/searchcommands/test_search_command.py @@ -657,9 +657,7 @@ def test_process_scpv2(self): '{"inspector":{"messages":[["ERROR","Illegal value: logging_configuration=non-existent-logging.conf"],' '["ERROR","Illegal value: logging_level=NON-EXISTENT-LOGGING-LEVEL"],' '["ERROR","Illegal value: record=Non-boolean value"],' - '["ERROR","Illegal value: show_configuration=Non-boolean value"]]}}\n' - 'chunked 1.0,17,0\n' - '{"finished":true}', + '["ERROR","Illegal value: show_configuration=Non-boolean value"]]}}\n', result.getvalue().decode('utf-8')) self.assertEqual(command.protocol_version, 2) diff --git a/tests/test_binding.py b/tests/test_binding.py index c636656fe..2d3107507 100755 --- a/tests/test_binding.py +++ b/tests/test_binding.py @@ -16,14 +16,16 @@ from __future__ import absolute_import -import time from io import BytesIO +from threading import Thread +from splunklib.six.moves import BaseHTTPServer from splunklib.six.moves.urllib.request import Request, urlopen from splunklib.six.moves.urllib.error import HTTPError -from splunklib.six import StringIO +import splunklib.six as six from xml.etree.ElementTree import XML +import json import logging from tests import testlib import unittest @@ -104,7 +106,7 @@ def test_read_partial(self): def test_readable(self): txt = "abcd" - response = binding.ResponseReader(StringIO(txt)) + response = binding.ResponseReader(six.StringIO(txt)) self.assertTrue(response.readable()) def test_readinto_bytearray(self): @@ -808,6 +810,119 @@ def test_connect_with_preexisting_token_sans_user_and_pass(self): socket.write("\r\n".encode('utf-8')) socket.close() + +class TestPostWithBodyParam(unittest.TestCase): + + def test_post(self): + def handler(url, message, **kwargs): + assert six.ensure_str(url) == "https://localhost:8089/servicesNS/testowner/testapp/foo/bar" + assert six.ensure_str(message["body"]) == "testkey=testvalue" + return splunklib.data.Record({ + "status": 200, + "headers": [], + }) + ctx = binding.Context(handler=handler) + ctx.post("foo/bar", owner="testowner", app="testapp", body={"testkey": "testvalue"}) + + def test_post_with_params_and_body(self): + def handler(url, message, **kwargs): + assert url == "https://localhost:8089/servicesNS/testowner/testapp/foo/bar?extrakey=extraval" + assert six.ensure_str(message["body"]) == "testkey=testvalue" + return splunklib.data.Record({ + "status": 200, + "headers": [], + }) + ctx = binding.Context(handler=handler) + ctx.post("foo/bar", extrakey="extraval", owner="testowner", app="testapp", body={"testkey": "testvalue"}) + + def test_post_with_params_and_no_body(self): + def handler(url, message, **kwargs): + assert url == "https://localhost:8089/servicesNS/testowner/testapp/foo/bar" + assert six.ensure_str(message["body"]) == "extrakey=extraval" + return splunklib.data.Record({ + "status": 200, + "headers": [], + }) + ctx = binding.Context(handler=handler) + ctx.post("foo/bar", extrakey="extraval", owner="testowner", app="testapp") + + +def _wrap_handler(func, response_code=200, body=""): + def wrapped(handler_self): + result = func(handler_self) + if result is None: + handler_self.send_response(response_code) + handler_self.end_headers() + handler_self.wfile.write(body) + return wrapped + + +class MockServer(object): + def __init__(self, port=9093, **handlers): + methods = {"do_" + k: _wrap_handler(v) for (k, v) in handlers.items()} + + def init(handler_self, socket, address, server): + BaseHTTPServer.BaseHTTPRequestHandler.__init__(handler_self, socket, address, server) + + def log(*args): # To silence server access logs + pass + + methods["__init__"] = init + methods["log_message"] = log + Handler = type("Handler", + (BaseHTTPServer.BaseHTTPRequestHandler, object), + methods) + self._svr = BaseHTTPServer.HTTPServer(("localhost", port), Handler) + + def run(): + self._svr.handle_request() + self._thread = Thread(target=run) + self._thread.daemon = True + + def __enter__(self): + self._thread.start() + return self._svr + + def __exit__(self, typ, value, traceback): + self._thread.join(10) + self._svr.server_close() + + +class TestFullPost(unittest.TestCase): + + def test_post_with_body_urlencoded(self): + def check_response(handler): + length = int(handler.headers.get('content-length', 0)) + body = handler.rfile.read(length) + assert six.ensure_str(body) == "foo=bar" + + with MockServer(POST=check_response): + ctx = binding.connect(port=9093, scheme='http', token="waffle") + ctx.post("/", foo="bar") + + def test_post_with_body_string(self): + def check_response(handler): + length = int(handler.headers.get('content-length', 0)) + body = handler.rfile.read(length) + assert six.ensure_str(handler.headers['content-type']) == 'application/json' + assert json.loads(body)["baz"] == "baf" + + with MockServer(POST=check_response): + ctx = binding.connect(port=9093, scheme='http', token="waffle", headers=[("Content-Type", "application/json")]) + ctx.post("/", foo="bar", body='{"baz": "baf"}') + + def test_post_with_body_dict(self): + def check_response(handler): + length = int(handler.headers.get('content-length', 0)) + body = handler.rfile.read(length) + assert six.ensure_str(handler.headers['content-type']) == 'application/x-www-form-urlencoded' + assert six.ensure_str(body) == 'baz=baf&hep=cat' or six.ensure_str(body) == 'hep=cat&baz=baf' + + with MockServer(POST=check_response): + ctx = binding.connect(port=9093, scheme='http', token="waffle") + ctx.post("/", foo="bar", body={"baz": "baf", "hep": "cat"}) + + if __name__ == "__main__": try: import unittest2 as unittest diff --git a/tests/test_kvstore_batch.py b/tests/test_kvstore_batch.py index 816172167..14806a699 100755 --- a/tests/test_kvstore_batch.py +++ b/tests/test_kvstore_batch.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2011-2014 Splunk, Inc. +# Copyright 2011-2020 Splunk, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"): you may # not use this file except in compliance with the License. You may obtain @@ -68,7 +68,7 @@ def test_insert_find_update_data(self): self.assertEqual(testData[x][0]['_key'], str(x)) self.assertEqual(testData[x][0]['data'], '#' + str(x + 1)) self.assertEqual(testData[x][0]['num'], x + 1) - + def tearDown(self): confs = self.service.kvstore diff --git a/tests/test_kvstore_conf.py b/tests/test_kvstore_conf.py index dd7028d00..a587712e4 100755 --- a/tests/test_kvstore_conf.py +++ b/tests/test_kvstore_conf.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2011-2014 Splunk, Inc. +# Copyright 2011-2020 Splunk, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"): you may # not use this file except in compliance with the License. You may obtain @@ -54,10 +54,10 @@ def test_update_fields(self): self.confs.create('test') self.confs['test'].post(**{'field.a': 'number'}) self.assertEqual(self.confs['test']['field.a'], 'number') - self.confs['test'].update_field('a', 'string') + self.confs['test'].update_field('a', 'string') self.assertEqual(self.confs['test']['field.a'], 'string') self.confs['test'].delete() - + def test_create_unique_collection(self): self.confs.create('test') @@ -77,9 +77,9 @@ def test_overlapping_collections(self): self.confs['test'].delete() self.confs['test'].delete() - """ + """ def test_create_accelerated_fields_fields(self): - self.confs.create('test', indexes={'foo': '{"foo": 1}', 'bar': {'bar': -1}}, **{'field.foo': 'string'}) + self.confs.create('test', indexes={'foo': '{"foo": 1}', 'bar': {'bar': -1}}, **{'field.foo': 'string'}) self.assertEqual(self.confs['test']['accelerated_fields.foo'], '{"foo": 1}') self.assertEqual(self.confs['test']['field.foo'], 'string') self.assertRaises(client.HTTPError, lambda: self.confs['test'].post(**{'accelerated_fields.foo': 'THIS IS INVALID'})) @@ -87,7 +87,7 @@ def test_create_accelerated_fields_fields(self): self.confs['test'].update_accelerated_fields('foo', '') self.assertEqual(self.confs['test']['accelerated_fields.foo'], None) """ - + def tearDown(self): if ('test' in self.confs): self.confs['test'].delete() diff --git a/tests/test_kvstore_data.py b/tests/test_kvstore_data.py index 153cdd363..1551f1c69 100755 --- a/tests/test_kvstore_data.py +++ b/tests/test_kvstore_data.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2011-2014 Splunk, Inc. +# Copyright 2011-2020 Splunk, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"): you may # not use this file except in compliance with the License. You may obtain @@ -61,7 +61,7 @@ def test_update_delete_data(self): def test_query_data(self): if ('test1' in self.confs): - self.confs['test1'].delete() + self.confs['test1'].delete() self.confs.create('test1') self.col = self.confs['test1'].data for x in range(10): @@ -73,7 +73,7 @@ def test_query_data(self): self.assertEqual(data[0]['data'], '#0') data = self.col.query(limit=2, skip=9) self.assertEqual(len(data), 1) - + def test_invalid_insert_update(self): self.assertRaises(client.HTTPError, lambda: self.col.insert('NOT VALID DATA')) diff --git a/tests/testlib.py b/tests/testlib.py index c5a40648d..04006030f 100644 --- a/tests/testlib.py +++ b/tests/testlib.py @@ -184,7 +184,7 @@ def app_collection_installed(self): return collectionName in self.service.apps def pathInApp(self, appName, pathComponents): - """Return a path to *pathComponents* in *appName*. + r"""Return a path to *pathComponents* in *appName*. `pathInApp` is used to refer to files in applications installed with `install_app_from_collection`. For example, the app `file_to_upload` in