diff --git a/.github/workflows/test-instrumentation-openai.yml b/.github/workflows/test-instrumentation-openai.yml index 27997ce3..26d4b891 100644 --- a/.github/workflows/test-instrumentation-openai.yml +++ b/.github/workflows/test-instrumentation-openai.yml @@ -78,8 +78,8 @@ jobs: - name: Pull Ollama models run: | source packages/instrumentation-openai/ollama.env - curl -s http://localhost:11434/api/pull -d "{\"model\": \"$TEST_MODEL_TOOLS\"}" - curl -s http://localhost:11434/api/pull -d "{\"model\": \"$TEST_MODEL_EMBEDDINGS\"}" + curl -s http://localhost:11434/api/pull -d "{\"model\": \"$TEST_CHAT_MODEL\"}" + curl -s http://localhost:11434/api/pull -d "{\"model\": \"$TEST_EMBEDDINGS_MODEL\"}" curl -s http://localhost:11434/api/tags | jq # Dump Ollama container logs if it doesn't appear to be working. curl -fsS http://localhost:11434/ || docker logs $(docker ps -q) diff --git a/packages/instrumentation-openai/CONTRIBUTING.md b/packages/instrumentation-openai/CONTRIBUTING.md index ce77b080..83b3ca78 100644 --- a/packages/instrumentation-openai/CONTRIBUTING.md +++ b/packages/instrumentation-openai/CONTRIBUTING.md @@ -39,7 +39,7 @@ dev/debugging. For example: npx @elastic/mockotlpserver # or whatever OTLP endpoint you like to use cd test/fixtures -TEST_MODEL_TOOLS=gpt-4o-mini \ +TEST_CHAT_MODEL=gpt-4o-mini \ node --env-file ../../openai.env -r ./telemetry.js chat-completion.js ``` diff --git a/packages/instrumentation-openai/TESTING.md b/packages/instrumentation-openai/TESTING.md index d61b5046..162d5ecb 100644 --- a/packages/instrumentation-openai/TESTING.md +++ b/packages/instrumentation-openai/TESTING.md @@ -57,8 +57,8 @@ or a running Ollama. Which is used is determined by the environment variables. docker run -it --rm -p 11434:11434 -v ~/.ollama:/root/.ollama ghcr.io/elastic/ollama/ollama:testing serve set -a; source ./ollama.env - ollama pull $TEST_MODEL_TOOLS - ollama pull $TEST_MODEL_EMBEDDINGS + ollama pull $TEST_CHAT_MODEL + ollama pull $TEST_EMBEDDINGS_MODEL npm run test:integration ``` diff --git a/packages/instrumentation-openai/azure.env.template b/packages/instrumentation-openai/azure.env.template index 61c45e83..a2d8a342 100644 --- a/packages/instrumentation-openai/azure.env.template +++ b/packages/instrumentation-openai/azure.env.template @@ -28,10 +28,10 @@ OPENAI_API_VERSION=2024-10-01-preview # Set this to the *deployment name* in your Azure OpenAI endpoint that deployed # a model that supports OpenAI tool calling, such as "gpt-4o-mini". -TEST_MODEL_TOOLS=YOUR_TOOL_COMPATIBLE_DEPLOYMENT_NAME +TEST_CHAT_MODEL=YOUR_TOOL_COMPATIBLE_DEPLOYMENT_NAME # Set this to the *deployment name* in your Azure OpenAI endpoint that deployed # a model that supports OpenAI embeddings, such as "text-embedding-3-small". -TEST_MODEL_EMBEDDINGS=YOUR_EMBEDDING_DEPLOYMENT_NAME +TEST_EMBEDDINGS_MODEL=YOUR_EMBEDDING_DEPLOYMENT_NAME diff --git a/packages/instrumentation-openai/examples/use-chat-esm.mjs b/packages/instrumentation-openai/examples/use-chat-esm.mjs index 0dabecaf..5990887a 100644 --- a/packages/instrumentation-openai/examples/use-chat-esm.mjs +++ b/packages/instrumentation-openai/examples/use-chat-esm.mjs @@ -38,7 +38,7 @@ async function main() { { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, ], }); diff --git a/packages/instrumentation-openai/examples/use-chat.js b/packages/instrumentation-openai/examples/use-chat.js index fb5a6d7e..85616b1d 100644 --- a/packages/instrumentation-openai/examples/use-chat.js +++ b/packages/instrumentation-openai/examples/use-chat.js @@ -40,7 +40,7 @@ async function main() { { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, ], }); diff --git a/packages/instrumentation-openai/ollama.env b/packages/instrumentation-openai/ollama.env index 678e06d1..42e1557e 100644 --- a/packages/instrumentation-openai/ollama.env +++ b/packages/instrumentation-openai/ollama.env @@ -4,5 +4,5 @@ OPENAI_API_KEY=notused # These models may be substituted in the future with inexpensive to run, newer # variants. -TEST_MODEL_TOOLS=qwen2.5:0.5b -TEST_MODEL_EMBEDDINGS=all-minilm:33m +TEST_CHAT_MODEL=qwen2.5:0.5b +TEST_EMBEDDINGS_MODEL=all-minilm:33m diff --git a/packages/instrumentation-openai/openai.env.template b/packages/instrumentation-openai/openai.env.template index 1db83b58..e1db4062 100644 --- a/packages/instrumentation-openai/openai.env.template +++ b/packages/instrumentation-openai/openai.env.template @@ -20,5 +20,5 @@ OPENAI_API_KEY=sk-... # OPENAI_ORG_ID=org-... # OPENAI_PROJECT_ID=... -TEST_MODEL_TOOLS=gpt-4o-mini -TEST_MODEL_EMBEDDINGS=text-embedding-3-small +TEST_CHAT_MODEL=gpt-4o-mini +TEST_EMBEDDINGS_MODEL=text-embedding-3-small diff --git a/packages/instrumentation-openai/test/fixtures.test.js b/packages/instrumentation-openai/test/fixtures.test.js index 657ad55c..fb0f4653 100644 --- a/packages/instrumentation-openai/test/fixtures.test.js +++ b/packages/instrumentation-openai/test/fixtures.test.js @@ -42,10 +42,10 @@ * * The following envvars are only used for integration tests. * - * - TEST_MODEL_TOOLS: The name of the GenAI model to use for most tests. It + * - TEST_CHAT_MODEL: The name of the GenAI model to use for most tests. It * must support tool/function-calling. * https://platform.openai.com/docs/guides/function-calling - * - TEST_MODEL_EMBEDDINGS: The name of the GenAI model to use for embeddings + * - TEST_EMBEDDINGS_MODEL: The name of the GenAI model to use for embeddings * tests. https://platform.openai.com/docs/guides/embeddings * - `openai` client library envvars: OPENAI_BASE_URL, OPENAI_API_KEY, * AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_KEY. If AZURE_OPENAI_API_KEY is @@ -130,8 +130,8 @@ switch (testMode) { // OPENAI_API_KEY needs to be set to something to avoid OpenAI // constructor error. However, because of mocking, it isn't used. process.env.OPENAI_API_KEY = 'notused'; - process.env.TEST_MODEL_TOOLS = UNIT_TEST_MODEL_TOOLS; - process.env.TEST_MODEL_EMBEDDINGS = UNIT_TEST_MODEL_EMBEDDINGS; + process.env.TEST_CHAT_MODEL = UNIT_TEST_MODEL_TOOLS; + process.env.TEST_EMBEDDINGS_MODEL = UNIT_TEST_MODEL_EMBEDDINGS; targetService = 'openai'; break; @@ -149,8 +149,8 @@ switch (testMode) { } usingNock = true; process.env.TEST_NOCK_BACK_MODE = 'update'; - process.env.TEST_MODEL_TOOLS = UNIT_TEST_MODEL_TOOLS; - process.env.TEST_MODEL_EMBEDDINGS = UNIT_TEST_MODEL_EMBEDDINGS; + process.env.TEST_CHAT_MODEL = UNIT_TEST_MODEL_TOOLS; + process.env.TEST_EMBEDDINGS_MODEL = UNIT_TEST_MODEL_EMBEDDINGS; targetService = 'openai'; break; @@ -243,25 +243,25 @@ test('fixtures', async suite => { t, spans[0], { - name: `chat ${process.env.TEST_MODEL_TOOLS}`, + name: `chat ${process.env.TEST_CHAT_MODEL}`, kind: 'SPAN_KIND_CLIENT', attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_SERVER_ADDRESS]: isExpectedServerAddress, [ATTR_SERVER_PORT]: isExpectedServerPort, [ATTR_GEN_AI_REQUEST_MAX_TOKENS]: 200, [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['stop'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-AaroVIDuvKJDRS0l540Oxc4FSgIux' + ? 'chatcmpl-AfbMVACkhZbXSJoCkCzhuGjI9hxi9' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), - [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: isUnit ? 24 : isPositiveInteger, - [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: isUnit ? 4 : isPositiveInteger, + [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: isUnit ? 22 : isPositiveInteger, + [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: isUnit ? 3 : isPositiveInteger, }, scope: { name: '@elastic/opentelemetry-instrumentation-openai', @@ -295,7 +295,7 @@ test('fixtures', async suite => { body: { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, traceId: spans[0].traceId, spanId: spans[0].spanId, @@ -309,7 +309,7 @@ test('fixtures', async suite => { finish_reason: 'stop', index: 0, message: { - content: isUnit ? 'South Atlantic Ocean.' : /.+/, + content: isUnit ? 'Southern Ocean.' : /.+/, }, }, traceId: spans[0].traceId, @@ -336,13 +336,13 @@ test('fixtures', async suite => { { attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_SERVER_ADDRESS]: isExpectedServerAddress, [ATTR_SERVER_PORT]: isExpectedServerPort, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), }, }, @@ -367,13 +367,13 @@ test('fixtures', async suite => { { attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_SERVER_ADDRESS]: isExpectedServerAddress, [ATTR_SERVER_PORT]: isExpectedServerPort, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), [ATTR_GEN_AI_TOKEN_TYPE]: 'input', }, @@ -381,13 +381,13 @@ test('fixtures', async suite => { { attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_SERVER_ADDRESS]: isExpectedServerAddress, [ATTR_SERVER_PORT]: isExpectedServerPort, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), [ATTR_GEN_AI_TOKEN_TYPE]: 'output', }, @@ -453,19 +453,19 @@ test('fixtures', async suite => { t, spans[0], { - name: `chat ${process.env.TEST_MODEL_TOOLS}`, + name: `chat ${process.env.TEST_CHAT_MODEL}`, kind: 'SPAN_KIND_CLIENT', attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['stop'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-ADhWTjZp3ejGyaOvqngmOItSb0qap' + ? 'chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: undefined, [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: undefined, @@ -502,7 +502,7 @@ test('fixtures', async suite => { body: { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, traceId: spans[0].traceId, spanId: spans[0].spanId, @@ -543,13 +543,13 @@ test('fixtures', async suite => { { attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_SERVER_ADDRESS]: isExpectedServerAddress, [ATTR_SERVER_PORT]: isExpectedServerPort, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), }, }, @@ -580,10 +580,10 @@ test('fixtures', async suite => { t, spans[0], { - name: `chat ${process.env.TEST_MODEL_TOOLS}`, + name: `chat ${process.env.TEST_CHAT_MODEL}`, attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: isUnit ? 24 : isPositiveInteger, + [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: isUnit ? 22 : isPositiveInteger, [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: isUnit ? 4 : isPositiveInteger, }, }, @@ -609,13 +609,13 @@ test('fixtures', async suite => { { attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_SERVER_ADDRESS]: isExpectedServerAddress, [ATTR_SERVER_PORT]: isExpectedServerPort, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), }, }, @@ -640,13 +640,13 @@ test('fixtures', async suite => { { attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_SERVER_ADDRESS]: isExpectedServerAddress, [ATTR_SERVER_PORT]: isExpectedServerPort, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), [ATTR_GEN_AI_TOKEN_TYPE]: 'input', }, @@ -654,13 +654,13 @@ test('fixtures', async suite => { { attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_SERVER_ADDRESS]: isExpectedServerAddress, [ATTR_SERVER_PORT]: isExpectedServerPort, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), [ATTR_GEN_AI_TOKEN_TYPE]: 'output', }, @@ -692,7 +692,7 @@ test('fixtures', async suite => { t, spans[0], { - name: `chat ${process.env.TEST_MODEL_TOOLS}`, + name: `chat ${process.env.TEST_CHAT_MODEL}`, attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', }, @@ -726,7 +726,7 @@ test('fixtures', async suite => { t, spans[0], { - name: `chat ${process.env.TEST_MODEL_TOOLS}`, + name: `chat ${process.env.TEST_CHAT_MODEL}`, attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: undefined, @@ -769,19 +769,19 @@ test('fixtures', async suite => { t, spans[0], { - name: `chat ${process.env.TEST_MODEL_TOOLS}`, + name: `chat ${process.env.TEST_CHAT_MODEL}`, kind: 'SPAN_KIND_CLIENT', attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['tool_calls'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-ADhWWspuIro8PA6qaATjihQjkj5QM' + ? 'chatcmpl-AfbMY0GeHGAEkO2CCeaPqeCp10Mq5' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: isUnit ? 140 @@ -862,7 +862,7 @@ test('fixtures', async suite => { message: { tool_calls: [ { - id: isUnit ? 'call_VPRh9L0Z20gNj9DIZQJqHN7O' : /.+/, + id: isUnit ? 'call_ibw82IbShUYxvRG7J6ojeZVe' : /.+/, type: 'function', function: { name: 'get_delivery_date', @@ -901,19 +901,19 @@ test('fixtures', async suite => { t, spans[0], { - name: `chat ${process.env.TEST_MODEL_TOOLS}`, + name: `chat ${process.env.TEST_CHAT_MODEL}`, kind: 'SPAN_KIND_CLIENT', attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['tool_calls'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ' + ? 'chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: isUnit ? 140 @@ -995,7 +995,7 @@ test('fixtures', async suite => { role: 'assistant', tool_calls: [ { - id: isUnit ? 'call_GqsvoRkHMjAlIhoSWKP6D2lw' : /.+/, + id: isUnit ? 'call_ltrRGOHzmLMWSIRAZImscFEy' : /.+/, type: 'function', function: { name: 'get_delivery_date', @@ -1031,7 +1031,7 @@ test('fixtures', async suite => { OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: 'true', TEST_FIXTURE_RECORDING_NAME: 'streaming-parallel-tool-calls', }, - verbose: true, + // verbose: true, checkTelemetry: (t, col) => { const spans = col.sortedSpans; @@ -1040,19 +1040,19 @@ test('fixtures', async suite => { t, spans[0], { - name: `chat ${process.env.TEST_MODEL_TOOLS}`, + name: `chat ${process.env.TEST_CHAT_MODEL}`, kind: 'SPAN_KIND_CLIENT', attributes: { [ATTR_GEN_AI_OPERATION_NAME]: 'chat', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_TOOLS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_CHAT_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_GEN_AI_RESPONSE_FINISH_REASONS]: ['tool_calls'], [ATTR_GEN_AI_RESPONSE_ID]: isUnit - ? 'chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ' + ? 'chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu' : /.+/, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'gpt-4o-mini-2024-07-18', - process.env.TEST_MODEL_TOOLS + process.env.TEST_CHAT_MODEL ), [ATTR_GEN_AI_USAGE_INPUT_TOKENS]: isUnit ? 56 : isPositiveInteger, [ATTR_GEN_AI_USAGE_OUTPUT_TOKENS]: isUnit @@ -1104,7 +1104,7 @@ test('fixtures', async suite => { role: 'assistant', tool_calls: [ { - id: isUnit ? 'call_MDti4mtc0TKeNC0HyE8wy9nn' : /.+/, + id: isUnit ? 'call_c70DUNhsnSAQ0y6d8OkyHQeg' : /.+/, type: 'function', function: { name: 'get_weather', @@ -1114,7 +1114,7 @@ test('fixtures', async suite => { }, }, { - id: isUnit ? 'call_eA8ose7WzOz5tFM3vdFNGf71' : /.+/, + id: isUnit ? 'call_5XlUHHFmQpDB0GUeNHNsNYYa' : /.+/, type: 'function', function: { name: 'get_weather', @@ -1173,7 +1173,7 @@ test('fixtures', async suite => { role: 'assistant', tool_calls: [ { - id: isUnit ? 'call_MDti4mtc0TKeNC0HyE8wy9nn' : /.+/, + id: isUnit ? 'call_c70DUNhsnSAQ0y6d8OkyHQeg' : /.+/, type: 'function', function: { name: 'get_weather', @@ -1181,7 +1181,7 @@ test('fixtures', async suite => { }, }, { - id: isUnit ? 'call_eA8ose7WzOz5tFM3vdFNGf71' : /.+/, + id: isUnit ? 'call_5XlUHHFmQpDB0GUeNHNsNYYa' : /.+/, type: 'function', function: { name: 'get_weather', @@ -1212,20 +1212,20 @@ test('fixtures', async suite => { // Match a subset of the GenAI span fields. const commonExpectedAttrs = { [ATTR_GEN_AI_OPERATION_NAME]: 'embeddings', - [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_MODEL_EMBEDDINGS, + [ATTR_GEN_AI_REQUEST_MODEL]: process.env.TEST_EMBEDDINGS_MODEL, [ATTR_GEN_AI_SYSTEM]: 'openai', [ATTR_SERVER_ADDRESS]: isExpectedServerAddress, [ATTR_SERVER_PORT]: isExpectedServerPort, [ATTR_GEN_AI_RESPONSE_MODEL]: isExpectedResponseModel( 'text-embedding-3-small', - process.env.TEST_MODEL_EMBEDDINGS + process.env.TEST_EMBEDDINGS_MODEL ), }; assertDeepMatch( t, spans[0], { - name: `embeddings ${process.env.TEST_MODEL_EMBEDDINGS}`, + name: `embeddings ${process.env.TEST_EMBEDDINGS_MODEL}`, kind: 'SPAN_KIND_CLIENT', attributes: { ...commonExpectedAttrs, diff --git a/packages/instrumentation-openai/test/fixtures/chat-completion.js b/packages/instrumentation-openai/test/fixtures/chat-completion.js index 768f2aab..d16df799 100644 --- a/packages/instrumentation-openai/test/fixtures/chat-completion.js +++ b/packages/instrumentation-openai/test/fixtures/chat-completion.js @@ -25,11 +25,11 @@ async function main() { { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, ]; const chatCompletion = await client.chat.completions.create({ - model: process.env.TEST_MODEL_TOOLS, + model: process.env.TEST_CHAT_MODEL, // `max_tokens` because AzureOpenAI does not support max_completions_tokens, // as of `OPENAI_API_VERSION=2024-10-01-preview`. // diff --git a/packages/instrumentation-openai/test/fixtures/embeddings.js b/packages/instrumentation-openai/test/fixtures/embeddings.js index 889e3b99..6ce63093 100644 --- a/packages/instrumentation-openai/test/fixtures/embeddings.js +++ b/packages/instrumentation-openai/test/fixtures/embeddings.js @@ -22,7 +22,7 @@ const { createOpenAIClient, runFnWithNockBack } = require('../testutils'); async function main() { const client = createOpenAIClient(); const embedding = await client.embeddings.create({ - model: process.env.TEST_MODEL_EMBEDDINGS, + model: process.env.TEST_EMBEDDINGS_MODEL, input: ['One fish', 'two fish', 'red fish', 'blue fish'], encoding_format: 'float', }); diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/chat-completion.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/chat-completion.json index 9c7b95dc..4ac0ebed 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/chat-completion.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/chat-completion.json @@ -9,18 +9,19 @@ "messages": [ { "role": "user", - "content": "Answer in up to 3 words: Which ocean contains the falkland islands?" + "content": "Answer in up to 3 words: Which ocean contains Bouvet Island?" } ] }, "status": 200, "response": [ - "1f8b08000000000000038c92cd6ac3301084ef7e0aa1b31d94c42121b74029b43d141ae8a514a3c86b5badac15d2baa494bc7b91f36387b6d08b0efbed8c6657fa4a18e3bae46bc6552349b5ce641be9f1f9eea6fb78b8bf79da0ab3c8c5e35ee5b7dbfaaedbf3342a70f7068aceaa89c2d619208df688950749105da7cbf97cbe10623eed418b259828ab1d653966adb6", - "3a9b89599e8965365d9dd40d6a0581afd94bc218635ffd1973da12f67ccd447aaeb41082ac81af2f4d8c718f2656b80c41079296783a408596c0f6d1b7d851c33664a425add8a3026927e35e0f551764cc6b3b634ef5c3e57283b5f3b80b277ea957daead0141e64401b2f0a848ef7f49030f6da0fd95de5e6ce63eba8207c071b0d67f9d18e0fab1de09911923423cd2afdc5ac2881a43661b423aea46aa01c94c34265576a1c816434f2cf2cbf791fc7d6b6fe8ffd009402475016ce43a9d5f5bc439b87f8effe6abbacb80fccc36720688b4adb1abcf3faf8ea952bc4522c76d56aa9044f0ec937000000ffff03003c9974df03030000" + "1f8b0800000000000003000000ffff", + "8c924d4bc4301086effd1521e7adb4bbd5fdb8c91e44413c08228a94349db671d34c48a6a02efbdf25dd8f7651c14b0ef3ccfbe69d49b611635c957cc5b86c04c9d6eaf8ba2aee9faed79be6a5787ebcc3f566fdd57437efb7cbe6432df92428b078074947d585c4d66a2085668fa50341105cd3f92ccbe68b6c96f6a0c5127490d596e20ce35619154f93691627f3385d1cd40d2a099eafd86bc41863dbfe0c394d091f7cc592c9b1d282f7a206be3a3531c61dea50e1c27be54918e293014a3404a68ffe881d35e00c7b9020ccc5b8cb41d57911929a4eeb437d77ba56636d1d16fec04ff54a19e59bdc81f068c2159ed0f29eee22c6defaf1bab3c4dc3a6c2de5841b30c1703adddbf161a9039c1d1821093dd25c4e7e31cb4b20a1b41f6d874b211b2807e5b04ad1950a47201a8dfc33cb6fdefbb195a9ff633f0029c11294b975502a793eefd0e620fcb8bfda4e2bee0373ffe909dabc52a606679ddabf7765f3ab4aa609a409143cda45df000000ffff", + "030097853686fd020000" ], "rawHeaders": [ "Date", - "Wed, 04 Dec 2024 22:07:11 GMT", + "Tue, 17 Dec 2024 23:33:51 GMT", "Content-Type", "application/json", "Transfer-Encoding", @@ -30,9 +31,9 @@ "access-control-expose-headers", "X-Request-ID", "openai-organization", - "elastic-observability", + "user-t27sfkqnaatdbowu2i7ij4dc", "openai-processing-ms", - "171", + "210", "openai-version", "2020-10-01", "x-ratelimit-limit-requests", @@ -42,13 +43,13 @@ "x-ratelimit-remaining-requests", "9999", "x-ratelimit-remaining-tokens", - "199782", + "199783", "x-ratelimit-reset-requests", "8.64s", "x-ratelimit-reset-tokens", - "65ms", + "64ms", "x-request-id", - "req_14e70641d65a385d7b5a82f52be19252", + "req_c9d258baa91e2e3fdd1774ce95ab8521", "strict-transport-security", "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status", @@ -58,7 +59,7 @@ "Server", "cloudflare", "CF-RAY", - "8ecf1b9f1f4c2dbf-YVR", + "8f3ab86e68adf88e-SIN", "Content-Encoding", "gzip", "alt-svc", diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/embeddings.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/embeddings.json index 81643e6e..62dac477 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/embeddings.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/embeddings.json @@ -15,38 +15,39 @@ }, "status": 200, "response": [ - "1f8b08000000000000038459cb8e5d4911dccf57b4bc9e4119916fff0aab196c212318167881343f8fea36309c280bf7a217d5d5f5cac888c83cbffdf0f6f6e1efbffce5f39fbe7ef8f8f6e1af5ffef1f5c38f67ecd3cf5f7ffef0f1ed8f3fbcbdbdbdfdf6fafd98f9f96fbf7cfef4e9cbaf7f7e4d7ffdf1cbaf9f3efff3c3c737fbefc8ef93feb3d2f9f9c9fe60669688a4e1c7e7788fb3777f1f7d4dde19cb9ec7283ddc9f1319f44ace734d9fce4c848c6e72a3ebb10066a35b06cdc6dcba269e73bd3731cfb9e53b72256f562cfab9a6a3b2", - "59fe1cdd4667c8492da61d1621772def0997b9bb5153f51ca55739a973931d81799ecc77daa3286f3d9ed427e4ecc6f673aa632df23911b1dd725702b5eecf9822979e53fa00d66139f95c20270b589d5b35537252a0230bcf05dacae17254b6a1ad24d49d8dd1357d1910ac6160947d58986c79654f9fd088789e63e6b5518d25151545fa663ff74221b92660a3c190f99c5acd18bd94e50beacfeb77276002d5f16e456ac5d95d52021d9c9437c176af351e836991b6ff0bbdd7f5fba4bfa0a71b27599e33236a961e82676b1b397c5bd862e5f9c944954948bf09542e52b31733859e0bfa8b9574ca2dfa54cb931411802237905b17259485cb02d63ef0e74ee1d9a02614b22b97ca7dee08c966649294389111b1d1f2fa797254060dacaa982b4b333cd205146e3d99cf574ddac428a66a6ba764d5a86542e99f95061345d9c388fbdc29d60ba5f1631d429450d1a353ce646e6546dd3e8ce8b8397dfbe8d77334c38abd4249ceea09e5744c77f6c8dca0c30cd76e6eb515756516fb92e0ccd832993ab99b5b4a57d95e254a9196594a6c6e09282f7629532126a63cf55607027665a00fc529d087365704d2d99a425e51a4e2b2038d442b08c23d8544d87dd852f285555ccb1b44c896a37a978e253310f22609ab52faf7de8130ba79db64e75e3a5fcda45c2a3939a3f25140a6a85fb4fbb6dcc99cd9b69aefc17e46e59d04dbd28544cce90d6a00ac1dd517b3c1f505989dd98b2b54a0f23d67362a64afb41ae3cd5859f06bb2f118134d4ddbd96aa390cb6e9b5c173bd62d8477b0cad213c09146a887c34c3eccd66b6e75c605f8da613cf3d293d366973af9702e6b11bd4171169953d39284662f7d9dc7c3bc54cb7a11a5cf05d48bfac4c99a354db560ecd86b4de52d763ca706860aee73ae29aa43384b968a098f13ef74d5485b52e175bbe39fdeeb0e12abc1cdea4ba301df783ccc3b9574d58a9ef40cf76252034f32cbffd3dc47346e62096577370b30af64ae0d3ef4e8dd11d40984c2d30812ea90c3d182d92c67bbfa598f6cf396886d0c1f487e617e1bab326f8be64ad2251aa4ea74d26a35b2ac8a884b238feec4a5de35bef02b0839392a87036ea820632c17894bbce3e63ef71a74429cae255d78da58e3bdaad2a7205e4a7a597a3054289113ead4d3f8b2ff57a19c83a0e66c1a4d84e25cabecf27a51b090fa21d01be6a55e3d88d25cf6756b35b6c3be78ab73cb6d054427e5b5fc20c7c5131e3dee4be50259a13402b73c8af61de7f3c21aa7340531d197c55878406bd1c009b35abc05569a11b6d6cc0edd3cfc3afaf10d5277d59a956201074997912126c5370339d66af1b34e25a8d2e4202afdaa3abf5510317d3bfaf26de3b1ae06217db6f75af79d80a4a2f84689bbe5cdb1ef5544ff2ebc9375355366a69802e78a805ff914e1a1ef62137e55e34c32639ed13aae650c4a7573d0a208c2eee9128c1a1ff66c2ba945b0558573cf1164d1e3a853d98bc7e4565dc5f3315379315d344d7d8f1fe74cb5580ae2f7b7b6830e49e92ee7852c9e52d1446f2d7db097027417e0974f3ffcad95cfee0c785986b5d573e529544b17b0696b537761c5c8c8ab7d3749ec6ac6d34f11a1c25251bdea126d2777aeb61ce6186371afc6e8d27e0b377ca9f8ccf4648b6bb0e329a97d8c63d677b5df59ceb8ba13f16a0f5c4ebb1c1923dd562bbffcfb2c16baff316ddda616cb32d54cc16da985914d35987ba5826152ab482276ae1a885e6ba2b8cef44767fa5d2fa7402a626ca2b6adaeee407b5e3d0303c1c37fe23e0b416881c89c406b8b658e6e4b338ddcd9abf161de51a5fda0d30c2ad70a3f22ce7edfa9c55feda4b1c6a877cbcd0a8181cf9caeada6336a3b29c58227735c06d18b7c94412fc47699f6c1bffd81817cf52d", - "644d9ccedf958974573a0cc0caea79a9e61e8e924a7c3dca2fe6edacedbd2be96a359e6183bdbad6772dfedecf3a0d2265ceaca15f42656e2b2dd243e55b17bd7431b6a5c56035db97afb0e350efb0ae3bd05a4159876b166435d5555890b6a58938e750d2118df3914589c4728a96f2dd2260ee4a456866259fb79a1d6f682fa47944599e7a3266b50f80d898ab218cd37d8d2b2c55792a0d890b6260addebd7d34b1507bda13c28fe6e75bd85d4266c7b9882cebde50550e4319d4419caf11d9da3bf3d846dd3545cfa6669c4d689bc92b2c56e517a75483abce46d1af8c99cc155b14365daded54cb080eaf12e2bd2cc1ff37562f64db546e688ba50a7bdbb5f3b45d19ab3abd55a2286e3e49fd56facdcf67d18cf3b8d77323e2ea2bb28e0d54f9b4ca72f104ff020000ffff", - "8c5d59722b49923b518f856fe1eef7bfd81892ec3113906fa48ffa6155896232163836d9f3eb8a02187e97a6b5bb9b2194c3ad4ad52fe761aae8c14664340b60d353ebccc474ef95650c74bb67e58003b9ca4fa08f834f6126e4e0426169610141f832e8a9a043075851a0f129204e9eeca3332e63484c687709c4be1e84e7029190d80dce8c25dd73a1d7b182bd051220646763b84865367cce611203baa8f00d0e6ec2599b3b7733f58e87e0c3d480556ff2d7ed9030876f4e5c44f7083fb49d879e569c6b594cfc6574db0a5605ca38297a09e48d3e46247099c5f0c72df01326ba1da0395d3d71eff9296d7f70524cf0806375729d552f106432395766e01f268dbc65c7042e5f366744d6ee491ed1eea9e2f3111ce7cae40e25796420b6b3d521acf040e06a11c85ee4583df59e4708fe95f6f11d9fd37a0eb847082a8d8e9f5afae720cc359ee57045e87c2658fbf361aff7659518144ad0a91fbe1b2dabdbd6676577559c559e00e3301ddad150f89681d22c7f52aff29b845fa3b6735bac1c4069697473834e0be174a0d08a62e12009e8e66732f033004ddccbac5464ec087cb5c5bbcb0d9b3625f48def19e0475e57d73c89543a13378c07a08d00b266580de169e237a6fc436a557a88a2fca0fd60f237bbc08cb4d8ac4e5ab0f9a5a22027f13aeaea7b82f9bdf0e053e7f4382e7f5ef258330cee175a2f8d97797d331992c499587a08190fb1cadf42e0d8a51bcd1ba4308314b7b5f9f5e679be83c14a92237e1de89a0ff8a81da3412aeab9117821573ce4183f80686396e49c9bf7b0c6160e1942cef87550e07c16ee0008fb6f5ad287db025838fc1478df3c73abf7b00671cd2c93e713b749ff81613f66a38bdf816f6a1f1f7a3086ede5e276ab0b2a5555704b790475a6dcf93cf22efba96a7e8d44f710840222b82c19dcea2b9c9057151fb0313b39a1eb65bae4118661c2ddfb8bb3eb33f779c260f317d1e9ece2eae31331a60024ff42523fa337df68111827e5294c8733a7541eb8fe429e4d5d13c45b51245a654eb88c72bee9c137aac78dac6a615ffabeb83bb0baae6c8e7dfe0dedcf1a33668feeecb8680795976d94d6d3981079bab1989295f93abbf72d6c64e106c332dd9b5915b39bac203b14bde04332e2a4e8895f802e7bc6701d10270f2f41c6f031f7154608b098d9c6f062ce0ebf99bceefbae335710650d13168ff5b763c56b08bdd6d8125295ec288253f1d2db9f82a39620fbc9c723c2a01d8ba88f085615c917dd199c27cebe919429dd1a4086a0d5572c3c621504b5299aec02dd8acd062cde913b09de6be71ffbe8606435f21c8c28f44cb3ca4668911c284ec4035a66d78ad3f7faba7a03f244b81db983fd56f408433636632276bc599b4e54da96a89411f766a8bc0cf4cd3467197c60fcadc3661223afee382c09ec83cb6613914c2fcf63e8eb87af3bbb9d2e9409c4ac6784a46b1ca08b3ec00ed6286b027e6b97d7bd8aaf5feaafe68cd033017fa1d0b703dba2107ab6a0f6799b0f065697a91d7e369aef9583ff3e85f11b7cbbfdc36aeb0714b09cc3dda2ccc36789e954ee5dfc60f17a78ed88abb86b110d2090b2de4b26982f7d97acce84cd111a198e3619596d4e88e7a9a73bc9075089f393363556783079960ef8caebc0cfed64e9509d6fcf279d38ccb71bcc2e4a052c7c19478ffa385b0c28db3d2c9577a9fa69ecfe1848e1b962a2d24e968b5fdad797e1105667f7cc5f4e096b78e047573d245f3af30b6bbe0596a781a39704c62073c25fa31d96bc315c8a33d4125ad808792486bcafd6d9a55a2d6cfc255e880c2fd3977d964fa4b03342383b9484119b5d0008b01ba2e1ef2e9937bc4ae6db03a8c84c81d285dff16cc39b9d8a01f14c208ec5f5766620b0ebe3b888", - "f9902ed448cab99d8f641ce17c65419fbe794573be75d9e6f0ea4e353733364941fd135df8a1ed73d949fa360a3ac6b6c3a3fb93dc19485eecab39fe7222cef5cbb42d66ff4b11a5039f56f387c50d24fcecd94879a37b5b78a5b0baa768716215d7b2d166fb0a331a91bd4c246386c8c3270c1821371679f6c2a52c28f77125f2abaf837f021ab0b5f6200ad50c5e810d92f7e1aba3e524945db18ebf0f8286496658942bf323fadba99c1ae7f92cfa5e7156bd06caa620a71091be768b3035a0bbb1b2efe756845c531bb7d9a4feb2ab3ce356b908fba732ae400abf562c51ddf62b61bab3f1e0875f9ec873823c0888338a0e97a3dc0fe3be244681a59ac376e5e3093d4e86e3817826afbe09c3e7e22b103166b7d84196339d42f7820f1a9a4bcb225685c7c93bce3909bf7d4e0b9bd521928b234eb0c60f6b17a057301d3c593c91bc4baa30112af71638022b7ef323fde79fa21a4c37bd3ebf49fe9f5cddcd26f00186a88d337db15704f08a3b723063b27788013c03232f453764455827339588e509ebf16696f378e0b21c78fd9316f83c9434b6e73ca7f8cfa0ee37fe34fb93df7f7e5508e53cccdd6d6783cd19ef6656d766f630597110fc707277c05c3261cb49a1852aabdae13412a3fe8b3fe66b9b9d188664ee0b9a8a7904c45a78cb631fc7498e1161c283f19f50e98b2298f068356765cc0f082639492c8e60cdf4de0e71528aa5f87908e5b9292e1b7fec40b4e480738affffdb366a3e8e3930bf98c48b769a66312070f3f15f0c8f9fdd09b6d039d5d283a357cc0588a0b0453d756a3c759f383803b2b4239b667ad4e8d5f7222a22b4cfdc10fd146982f9cd12f55c88787a42311d6897483912ef06ee8821f8d9287eaad617128d2a5766ec2235783ec433d16e37459c772c588d0eac6d26336a8f4416abaa1c69dbdf9f30ed125d3c7eb3b7f6f7e82026575020121600d8a95fd0fe67d320b74607b28521e49562ed9b317145637676fb83f15638cd6f4ea336c4a8e448c056f00fb8b534eec0f4bae61212ed1b1a7e3df1731f7cce698319c37fc38a5fd2fdac8407db3078f3b121a6ec8f7519138b0424e49cfd7e5d53a296dedc52e7c669ef9f6ce91770ed14cfb31693faa278243e7a4837b39f317787479e57db6de07890b0acd575a67000acf60a23508b6890d07327d101322efff90746f0cd8698c765e1c1c1d7f4fd03c1ae54d66770eab121da1c195e67d5d82f9e0e27c94fc6d28b37f11b3108ca3dcb3c055cb277657b490eea9b2f8fcb0e763caa9f26d16715467ac935836c1673cab648c39900ec78f0387fd4b89d7f19b0de8e270dbb7e109bd9f2358b08406db36403c700db9fdcc25488477208978fb8c5803af580eb9f79830fba35e34cea41566065469f30310278c3b84ac99d7773268cac253eba40e0e2b743f35ba5d0c5240f16556bfa156686b5f397a95b49f6efdc6e693c90c2f199728143e2b3657324c412a157c1325c21bfdae230cdf516934ba4e9f8cc1ecc1cea99dd1a5bce43c1919541aa21320d5592b77ea5a873ba964a32301f5e13de1ca622d5ed3038d0b2885b088531759519cdb449596d57ab3560f6728001e9e5368db1abe7143455ef6a38a7d3980ff08bd759b88546205a1124ecc3e68a130d5ed6e4c450f2cff04b715a11330c1611e712f1856b34e6c2212b5c6580a8903b0ec53f681f50b9aa3bd9b1ef751f04c05751df6416370f767ddf3fb09076078673e6f3b30e4b1a0183081fa6881825c3c2337bebf0ae7954cbba72c4188a510e4ff0aa977f59fe8d34293a30445f64eec0f4c5cbd6568ed38cb654a864903337f9bd0c0429951d15ccdac3a6f4edd0b60c107131bc965e9d05015e62d9c7ff46176089cf7116d2dc1e794bc069dc9e95128c44d7030b56b33eaefe", - "df34138305068f6971586c9dcb791a2439d86fde68e721cd31c0cf1d6e74e86d89ddfa49640b44f0078063a4724f9b76f6e0f6e7d86b3fc5140281e5a1fc2bccaad6d90fd248bb34b419cc944ca1188a98a4f24d7d46df78478e0cdf69b83ee89a442e72e5923a23d66738640ff7c04872edbb87409b0667b4302032e165f981907c1ce7568bc8e1087188d29689049b38eb13b51a642d5c68f17ca7f96c996694212bb6da0f36d692cd4fd1091286d735fe4dfc018004487a3165bf28ff1f687d6ffd653430035522b674a963f8fa33271956b96f381ba061f3fa5982f2f17f3f4303f3aed5109bc4c4e721157dd5fdd39ef9c505185d9b1b762e103b6f2e5c7d425bb6dd1bc1bf82c181367ccf2119e721ee3c542245aeec9185918db379dd97ada7e199cbc15b2c7a80a360262f5b6ea4bbbe232522f04f8579ff810a7ccdfe6a01d47ffe0925ab6149300a0ff50abd68399121fd1bb6ce30eaf584541ffe4734472718ed188365a9b8e611ce5906b7f63303f97976b59e5a2080dbc034d08e14302b587d06064b9eef4d3fd3d37582dcb01c5b0edccaaac0189a41b94244ab30de7b329f2cef1e763f835ebca1f9cebecefd93afa18f99148fafb41d7e9ed6831b5a60ca4a37894c32ffaaef8c27be270e61566a3ea8182e979199d12dae129b01ef887a94bd0e339bdb2e81309009d20ef20dd40b1b702fde8f4e577b184f02eb378f1aa707fd9bf2fe68e00b260e0e9a85581683930423394fb3db354c882c1cf9fb6bb9c6c7a367305830cc40d5ab317b741701113e2f603ba8d0a6b189525765c58e00a593b6c23280be1b81f0603065bd8ea1c888dfabb275a6d79bebdf92e94bbbdce79b44ad9814658db19bc09e3c76484b0bc79f3e470cbe079736df7fe80fd36ed2079b06ce52588cf6192bd9ce6f755f1ab97b60d8d84dcec866203da34c16bc129ac85d38b4d475c54d04ffaa9a8269ad967784cf3dbde2921bf8aae9a7dae65bfdaee3fdc5ee3920e049b54a78535bd4925b38d5c983305575f397a9fae350439ed24440bf70d94952173a98b0bcbd66573a4c77276443fcb703941ddffe14064b2c05470383ae0ba86fec4642fac48411c5f3e216cbf7c6b188b43822d365a157e68a6934e1c1a695b03e76c51f7a273930fe14f494251b77dc5c4a7b5f472818154340f674f25cef037020b3660fd6b7d03b8d939501b9c399c93ae7d853f0cdf9b66ae9dbf1808d20fe306660b26be886c3b76ed45de9c362331484161b61bd0a3bd1a58c98d9c38f82538007fdffd7dd7cdbbd232f0f54d120b2f8b76ae4b5f9d5810020270164e9e19e44e913fc9641cf91d9cbed411d1cbcb8b384c34e61f54a82fb38eaa4b52663eeee8a2d00e56762b87d0abd86ebd5391bf68d25df1b239da5ebeb21e442a3f889e33b9d305071601bc61d311e5df72ca1960c4406f943e2fab52b4f26ae052f4d6f9f959ec3f2b112f39416127c1d45d16bfb8b3e74fec74ea21ba8c527bf2078d89f020300f714fac97ec971d53823b77f4971765368ab9795f4d1ba33595b59a49045f592d28067c1d5b99c3f9239f19fb930ece14dae5467d2e94b39568e107ca7b70e771a7f8f47a907a0f8d4b382f68970f04801f471554ec68311321418c65020c2ab08cdca228759475d3e39d4bbfec172bd765cf00e6a0779db62c587f898e3460917c362fb6719e3dce01087fe6181570806e671a5e6177ccbaebc7b95fdec6ff986b8d04e2a75089579a41ef315d8d82e668592e6849f32fd378ebff20707ec11f5241c027f6ddb61f6ba2fbe74c6cd6f04fab93b51f35259e2f3b314e2fb8d5f97229bf29fe5e6dfa66089775b3d093711c62f328e5cd5b6682394e2c14637b4d619719cf2f3f751723c64ecc65f6358f152beb4fb3d8d2746a2c92b85fbeabd", - "477ab4cbb5a41501309515d55786530338f68a5f0f84c2c8f27a69ba849f3865e323047dd547086d9d4bdedf2fcbd744a323b27cd41475017c4b5220007229f3de53362b7fff0303391398d8761e4a1e29d7e9b01d86a456906d082eb17df365bdfbfb02233e9b16ffaf405f3f425c9640711e1ca99a02c265721b85460cf025b8ff9a40f8efd9d5decccac26c6fea75c6b63927fe90068299c8cebaf0828dbf62c31355cc880ffe1f8fc017f5a4325cbf1591be662efe1baa1278d15e92c5511bf2272de61ab5478e831b623d36aa64e23e4f3e998f44a8f979d88b08c2bb64a880a2e021fe11ae787ba54cbfa58a91ec3eb59d5be7becce7b17254765768f9382a61ae88a0bd572a1f4a4b4cabec48e516cae3d188f75b65c747ff42d7912ef09cf342dc9f7bcfb12beeee842952663b7bf2ffff0b0000ffff", - "8c9dcd6e5c4514845fc5f2dea84fffb75f05b109b65090081b1648887747d5770c99fadac6ab4856127bc673ef3d5da7eaabfb27c8e8200895954720cfafd7e0f79d1919ef7509dd20e024bcbab45cd192b4e881f89017c2058763eb1551f7ef0e3d076de28a8c0b1036ff1f5c738614e8ce3b0a9e3e7a84bafaa6536949486ac9f4896c632886c928689a7d82b51f8217f8a09de70689625297ceafc9eb33e1579da196af41df21dd1c3db11a7eefc14417892b27405a4247dbcca5864a711cc8b2d371f3e35ddf35a3ae825170a67e1f30fd806fd2941f49d87bcbdd1f19c7e8d60b469e2adf20106f724434c8b823e7315dccd9b16a57e442c34977e760d50269c1182db915104af904e89cbb9451b7166d48ab0fea65050c796396455f8f804dc9c9d6b964319cf1213a3807739a6b24683f5a755494b5b4553533d847b676f9c33de6d16bcb0ef455e15837747e1617108cdc5195aefaeeabeb07456a667b7dc2d0d97b6b58ec54adf86155993502f0e1632c5b0122d0099871b8bdaae926f073f94a9ab2cad40a925646018e9042f69caf45de6bc846baed56f0f4661e13dd8053411f62cfea1ea68db1d63a7ae0b6a1199120f1935c9d48eaa0cca3b10b42a8908e5ff696fd3997ade4c1cdf309e1ec556565d66d2c8a8590489418d34f29ca73c2365165d280b4dfd74cf79ecc7370e3fa14e90c4968a7fb6adecbebd734a7c38362dc9f246e0f98158dd807cfb85c8a89548fd23e11fe966f6461ed1c53973cf45342df2f3f448c99b00dde97820fa18a52c0bc80bbcbd3b1abe6ba645320665a438c57b831bb4eb5be1ca90ac7d95cc115f371aebb3e6f55a95af8c015dc9833f17368d9f66b0651331e5d405063dec8ce31c8a9100319aeadb43acea5c7c2c5a3c551f31e68a6425ba13c2b143cc45527b3c01ae31097cd157c812cda8b9ba6729b2257fa93ee74c6492a510c5606e9008992a92e4fbf5f8c683dba05c14a654cb0c80e0d1f91effa6fb8932e31dcb14aa32ddff97227f774b4061f2bfbae76547dc6ed17ebb8c3eb17d3d23debef7a5294c086e298964ddb7634fb8247fc9a1606a260bdd018a9a51c0e95c250f585d541b4e84e9e3c7e92b3f606a3b94a7f005746d3aacad3f82a52666eae49f671d35349ca8d63e2ea33e3a5328179cd8c2baf86faaf16b5c0e6a5e4b7a7b955709c40d5cfa9cc48dcf10fc995164e1a32ac4e5f17aee911de1811c5898b0ae54ef0b5e5276bba85fb23486e86353e6188083d80928b9d59370d178c4fab80284d97277b62a77e348fb38f1c2d7d06c824cb4f4bdebc1d329a7437f89cba0c7732b70ddcbaf56b81b22c2f771dd57546c1efa14429f5863214eca72f7fb2f2f78e4656198c375a9eaa6ec5b0964bc4f582680d8b1f9d032293b4754265e91d0837ec662d9e106b95567c9f047a7a578691bab5d021ac1c0c81784b0b4bfadfc6ce19bac5c28e9fb76f951907acc256b2614637c98e3cff8c8448845a493b670869413efb43dd3f3eff6f60ded250e22c053c754fc6744512803e3d037ff503240c5d75353a3851fbf1818cc066a64bf0085dbb305eb32ea0b52e5e2f6e3b53913c78fda7b6b9eef136ccc16df255ed852765877a6ce10a391bcf1c85775bd6893fef32c68e90a0c554cfa9e5b1b84d6a20bd69ef687ccc15e123d14dad8adcb4a8214759d1fd56dbd5e80878917a9c7c28f774cbf503e818eb64d8e3913fe5b4044b70535e2aea06baffaa484ffa116e5ffb69fff9f7f557feba7df1f1f72fbfbefefcc7e3f3c3e3eb6f5f5e5f5ebe7efbe5f1ed7f79fcfaede5f5cfc7e7877fdf84effed2f3c38f36cf86500ea8b312ad11fc9aaaa43b22074b971ada3fc621b49854a7d031eacb8b0524b55a143bafd2595016b31d62f60c909d15a5da6d8d", - "51991b2e6d6379300febc6082959be7859237df8dd53319e63bdad8036a907864becfb01db40cc51520709b852efabbf6ee99d04c2bfea29171eb883861b95234113dcb49c4665b7f6a597e56d02baafba3f686d3d009c3f55f2daebcca3f59c5819d86ab1b9332f4d7840deef0e99466cc776bfe1a19f07426dfaf7f0eca84ead2f872dee2e466464cb44f65780b6286e53936cdf4c15156c12215051e147f3069d6914aaeba899d0a224916fc68161af99c565d29a5d6cd7e1b7a1344cdd79c9a1507964f8ad4a6c57bd2fe892f5b4bce54fab73e255ca5e0b44abbc7d2ad3058f5a2ab6a472410319ab6d45f1a9685e72858f1fe208667fc8ca32e19ede5933436765d55119921c0b6bfddd69b49c21ad33a38afba0286f95d12e0979b6328f32a9bb4e1bad96fb23e2d64a54d16a8703f53244f6b203f56d79e8ddbfcd5508d9c7a00943452a31d03aa871db069fd2464677cfb645f40e33a98c2c40236a3506255025ef8995404d9500ee73ea2b21942c42c0fdd6f2e98dd3a13e95cad0d35c88decfdafac03c24798d38a3ed45f1f7564734d8bd56f30048deb058a0ab479d2b63022f0b8939f1ec11b02f1b0b079f80387c80ab2b288cfa038d67c565f2a2cb85b5506929f7554045d16dd504a032aa00431301ec82ba0a99f5ba5b11ebec9ba768ab86a9f678b7b6949a462577b448c5c3fe66437c618adeee3e7f6746be7f845d0579fc68c692b10e1ac91cdd0708c99d6dfe7715ff030000ffff", - "8c9dcb6e2dc975447f45e87903997be7b37fc5d044ee86210396271e1830fcefc6ca2a1a3e1149b33511405ddd4b1e5665ee47c48aaf0d0c95818aa17ad256980690ccbb62e185a859ad85696450a437b8a334330e16b4911689bdcb36e4dd017a5f46a60329a3e3e103d37937eb2808134bcf39d965c3d7e7b672e397d3a317277630805734ca8252b08d6352f49905205b86639f232c27e7698d3e3f4428e1c62fe3de6c39bd8d63176769970da55cd7ba63ee5c869741d7fd79fadf3fef67c23c7dd25171805ab625799dd6e5a3ab707684550f5f9acd6290ea98a3ba4614c9e268e5a6ad985a65af6757e183ccb1f392fc5663c86ca98f116b5a7bc934d70d576d229fd212001fb2ae152ace4a3d1117537eedfda3cea81ee083ca28bd6bdebbea47bb793e2c14873ed622b6e644d02a57f8de6141a4247eab9b65ec3abb4b0559af39333948139baeb76cb63b072731a7a9e879e2cdd87569a9e8c291f3ca6f758d616eeda8274443cf86d96aaaaae3c4365b7003791d2a96a9f5d8e5d4ee0c8f233557aaac28aa54dc7b6ffb3d59fdf3e41c11c1255bc489aebcdb3a6790f06cdf7dcf9117e34f0e8d028ee4bb52a32a78f5a52a4588e14dcd09686a3ea35d1f3e501bd31afb8a31386d3c0e8f6dbb06a9ef662b317cb9e637c4d11afa6f753665b6799fa4ad6a67710215b797a649555175fe57191aeba68c19e8349f5ba4a63b20cc4dcb1a47f47c932ccfdd3d906801eb334edeb0d94c50f11b246c1fd49bc96d795ba48903bd4782fae705d7777aacc28039ef718a1c814afd0ed669a21e2192cbc80e1454cd028bf63051d371d786253fb548a7b9c64c675bf6b31aa84ab46b3da651a471984d03af71feeffca1baf84243ace5397e944ed187b96b89fe1ed6c7b377317d20a0bb62534efac0e2a1bbe300608d6439369b427dbff926fc2ca1eb5a53fd86d3c6caedd83afa9fe99a097bf7217cc2a571136b5db3eafc1763ab62697adbc527eb27e761ab309a92d42f62b834968594d95a6f61b1049c247aeb85db0a2bd310eb5a475ea259d9358316d657818dbfed06363fed5072441b5be1eddc65067a3f21483135f103e89289d372a22b36ffe08629628ad689b5df233c611e3ab660a6028fadf27b24fe5c723aba60705db7cb8d474b2beb0b9164b6f13f25c632301d22e6de0c5a28dfeddb4f0fcfa6bf36f9c89077d3ed1f501e931dae897e464a9fe090b5c16702ef90abfb9cf02a4d0fd23234af82d9a1d17727d3235578648b39f40c20ed620d4781ae2351b1257af38d2442bc611bc5c621b4b424828368570cf354b7cf300c50a170cde8d312e889e3ecb6ea201f1998a33b23fbb40b91654b749350b73574585b91305fb2b106609c6aeb0b1cf1d58c13392d9ea571c0a88ba9f5cd685a4f431cf9d502630f2acd2cf9756b1004641c5a6cb31a268f97720698555958d30038a19506a64efda940bab66a9bd6a730b578c0ba3ff9b54f55c7756fc70e2b3e4b28c10f62d2c9046fe193499c26ea652b42bc78fffd110ac78828dd2063df3c45f0446be8743b632c87798dbe3eeda2cf62abaca302d751f8586bdb6a9bcd92196be05b59ec03eb5f36f17afb6c2b186b70a9ab9281a8be2553e3711e39a5afd5c0fa6d72b3dd520344892d6efa0cf201a6c281c62a9720e1e8365b3866128bee2c3367991764674e2306a1db0915b5813ddfdb1276669776773214ac66bd59835006738432ddd7f5005af1a951f150f32de466f06b1e26c12077c74054bda8726bd6b9f6502448ff74039d392f4e3bebff7a51571facd6dd2cf820cfa459468963b244d65f9dfe4b27779e0f431e5a62daf40f42941a2e28414dae671756b832d31849336298c29a93cbc05ea59350eb51b0b0816c9049fb91d5fcc0271fb417ed", - "d7c9b8d22dda1a78a28da07a98dc9e36c76f46012ce48b192bbb7790d2fafc0d5e7fdd4c344a677b5379a9ba6117faded61863a99eba17ee1585b529607beb71c351401bd141caaea98d79c7c8abc0309e816d7dd6eeb194cb538fbe4b4e1f46aee669b06df3eb69ecac47b5cd61f66e83dca3c6b326fad26ef331d918903581e6f30e741966bd8420b03c0c6bf7d587820c0f1cc150a73bacd1c5fde19a3d921d97e61b1fce4e0f790d7d36f6faee8229985a53f87b33b53a63eeef5ca3367755271ddbb6ad0b308a46d58fe11bb0ccb5462ed0747cdaeadba65598fcbbabe0b82bd55e1e4c6c3d3ff604bd6e67a2a1593179c9e4cc34a1ea6625613cc271843b5a2c340b75abc12cb938b9ecb3d3bd2ed1cedd82dfd836a9a7482f16890774b87ba61d2a1b4369d129773be5715c9718860f00d468c3349bc43c0b09cce4468fa4464c0baac21d23333262c23c906a35832f1ed78075c0959c59e38e8d5cdb31df75b06d1b066e8ecfa9d38b5e99bae5389126cd925a4e3502827ca895bb4cc57a52a3605b962bbd020453a1cd6e5b83ab888fabc51a787426367ea7c41e369db239c8f310ac8360304b08eb2e4d6b23a363d9d97bdf55cc567b2fb696a8cdeeb33c8e7429b04566f0eaf2383c75384344b6beb28c07978588d7d97219d39ae9e5565d5052a62a58f751916ff7e31f0584b7449d7863b7de9595bef7454561cbfe63c1cc34e53bbdcb3257455d274b6fb89e7c1bda32839ed716f6dc59dd40f209edd91ad1c99da7710ddcccbd68314ab9e26ccd161a1ac7ccd9700b4788a2287eae9188e6ba19162c76e75eafe77a7cbf26f39c0c13e4f8c12cb8d4b46b4abea70ead6b985697818cd1bb1265b2ed47aeb7c5415b782ad8b53cabc8c12ece969b6ae3d60a4135ae6b38469c87c33c3b108debb4fe01e1a9078420a10b4013d68dcfd18d56cc5a547f3db9f91ff405de0404db521b6fc554133f0a34e5552f96ed86e8983bcf18cc7fe0b11df484afd823f9d6648ca437092a585736410b2b6628d2c5c57d8779209eb48c6107c5202fc0dcb7a384db511a64155591c504e112f9c376fe113893266fcfd3e8d487363664bfdc6b7523f63223212da3e722dfb78e27922e6dd09cd157bac87ae34f30ca71078e5f0da301d1a73b46ea2498e9df4090b73663d0d2571dcec098207e75b4bdfad4d21bdedf1c2e8c6fb3379b4dc372514008912ab328c388b76239ba1243a3b98e23f8bc54163281c158f6394fb43d0dbc1373a8ad3ea977f424db3923b4e2a9684574cb7528527ec0ce5d4cebcdc3b86ca3c8e76263ae0680c008d62795c40cc7cc608c40909372c19553743ae6ece11d094d3462fc55960a893902325cf1c33ac9c628583d878e72b0b45759b8f78a435ad3fdd077b8976cafb62c6a74ac5d0c7ea313b847c5004a5985248d53d1c71a183c9ac938c7b49206bd539ae80706958edc78098a273fb37a6ce63cdc28a9bdc016d8de8bc66ab5dbdb058cde383df4f5213d34c1ebea871cac34cdfd8ae8bda5acf8c8be4a15c7669da598bcbe7794c41e72dd2dd50c11d71a7629c00633c358012eb92dd1b3c62611c3a224a3879d90b6fafa7683cf9eaefb1c37f8b68c364172720be9bc7809dd60712d6be384b5fae66bd79c96af789b420408dbed2b6478046aec6d23b6e57f938e57a7e9b6695d6259cec36c4d190e24986b9671ec330eb549a81e38577b10ce09932c1fa1800ec76c37f4ee4347ed525393f3beddf7b02eb974891432f2ffffdebf5f5caf7ef2cc950d73d1984e1e75cbb6ac03b5818dbd71091be98380063788dccef0ab6d0a26f232836987eea0fb1ea668a36ebb4456cf25277307676f7358d040d3114bd907bb7627933151e8fd0797c7afd73ddc8b8942fe68daa701084f5fa175fa2015bfb66a9b", - "179e819463381fdba82684f6ac732f0513933fac9c498445800f6cfb8179cd6f78cca85d25a9815744a15e1731541026a699530c1c4d187e7be0ad7d7ba1d008df34df765603c31d927dead6360ace0b377f0ff4bf72e3f428c6856be86234f92e312deb329f27703aa1b2006e52830678ab1926cedaac028706fab56a7edd6b3b1903699109bef6c691293f2a57d032f5f788da9dac078adeb549031f80ad5d2ba28c301825bdaaeab447c656575a6f20e8c47831e22cc8ad531fcdb0c188a2f3d37dfa159bce9e592e1156145d11937d4d93b4b2eb8c2d67be4fdade03babadd0bee52ec4b2a056e0e2354524f293d66adbdd4d3ce3364e4cf18ab8d08a7de2ff7a3f4f9698bbbb7eea43f528fd94481afda0357b1fb758b21bfda15ed3dfe767e425c137478fdbdd078cbc9da9164ea968f96cae2a230d04d0b1b87ebd7bb1b3669a3db252b3022352b51f3aa5ed51bea304da96b2759d321866bd960a771405a495f4e58b595ff2cdb2c4332b0073403a5f11aea53c016bbb93076b6c1204cbedd3a497696f2830c0c55f74f5abd0c9b2f90426e5ec6f3c72d9f945984f5d6134abe42e3a1c5ca3b7f3d7410902f83cd325b68d51609e39854b5d76092e812b5c7f368f22c8482969dcba87a598e533dd973b6fb11dffad381e025b7127250bfeb95401f6f14f7330dd5edf04516ec2ba2b7ddc5cdaf6bb6bee86c4d4cc2105dd1503b904238451df5a1277f65cce5f3e3958e6941a3b7bae596ce568c087ad89b068a994f12a624ea2644fefa4367f19508bc96b919ae4303901233752f4818f936804de004b49a9dd6308b3a178929c8e91af5d64cd2c2304625a0571f1d2ec05a358c07f79839e3b2f6de8a5e098c2d74bec1cf5af49e5d9e458fb8c400446de37e536577519444ec4dd2a5a7c30fd2e18d0e36c60e63ef555e0c0751d79869418783f1d232fb16de191b25e1b45bda5c2513d1aa6b86850ea0feb4417ee88e5cb332782cec0e35adc52492cfccac6ccd9561b0fea93c7d8d0c0b2f8315eb37210340dced361926414df598f6c557f3be58d6aa57eb53f2f0c8790a9277f93b5798eeb400fa8faacc6df0c3aa1adc513ff19adf6e16af9dd2fb9eda55beb681eb03969fa61a3424f44b3f69b2955a984b8ba1a73bd53087684d4e3ae02a8a8fe89fc8d2b7b15e5d6fc793ff596afe99a7a2f51cee67372de6531e70e3183410e09012f203f35e77f4d3764e713d1e6dedcc0866ed765afb0ef191a0a35fb47399b2c73eaf00cd63a7ddee6bdac74514546b1657d38ac045af77c0af570ac9237658a6ecb0afbdf7286c14ebb7507557e5a260111a0e820bed0a66ed965de76fc6f706a7ba0673503bb4bf31da63cbb3941557513ceab16c1176e5ee11595cc1cbdcd3e159dc5a7615a2ab0c3d35a0c6dba09db7c67d4675acd48924730beb38aff3ff324948d6d80fd492a84e74d9a112a3371602d5bff920cf2e5c597466a47bbaeece6b2ab701a32b650adc1025a824aabd8a2c16c27e039b955d7af0d56452628143fc0c4babdfb3dbb09a00409e491d0607b2713db1426f735d52684efd6058376c5d82d4a5b159d723aae2ffea3ed23cbc38fdac99f32bc87db26e4f5764549d3c955cd4bec6b4c44c3fe55d4efeda62564cb675b6a8a82ba615fae8e867b83a7a56abd32170ae29bfc1c1a644b5097c2d6581d33875ad7269ac1e4c315deb891977c0579844eb607a08a6902e18d083aafb6111683d52c681af992e48595aa71e3c69855ae411c9ad9fff68d3bed3089a758dcbe203b5169cdd8b26a8dc7770ecb97cc83bd05f696edbb1ecb66299e6260b7d0ae25cd61653256fcb563906c8b43fbbf1b16cc7ce18610e014651806a5f7b77eb9c36c7955554493cebb68a9eb477ed75f95d9b668e888762177f4986fd5dc6", - "080093bbf5bae8946a35fcd328d50fec396269578c455ccf5637aebfd74b1be686a92768dd306dca0e78aaffb22fb45c719ebd4fe1da9e8434b2a7deaefd5853e54f0269f29d4c86634a60bdfbb8e2c993ca66f8554c46b6f23ba875ed6978b73ce289980fdd41a024bf6021716e34db4ea29cb21d0024686d6293ff77d34cc6abc8fdc4648da275356b109bba5d679f13f7cb562b395e6a73dfd3c394fc010af328cfe228c9f574e6d576ba32649cd54c221a337c1d7a422857eace0d89bcc772502318f598bb286d6bb8504468a0136248b3e9b1e22fd506c03d3d8098ebacdb197bb4bd2e59a4b0efbab7446fe88f07b4771f01276ab4e6cda4e0419ef12b82a9a11386bec34153393f7fe9bf7e3b14addc9ca6637299ff13e7a7aaaf47e69fbbc6b0b00a348436e72b8d41faaa8edc9dab9a69a39c38953dccef7d930230c58c2d2344e0fd7daa166631af75201b579bda1141355b69995cd02ece3da11df6e8e08bd3bb0925f65689246efd344e329494de3c28e7c64a22b68ba3f8cf30353ade7a6d96916e6d77e0e1e83401dd55e291cc71f4b45a5049f5235051dd63f84765b67fa002be529e8870210d4a574b0d5e4c462daa81f7c9c4a4d565b211880334e5806d84911cca097654f7313fd2aec6e6c4d3965b11cf0c076d3d3e28bbac21d6bbf1ed85962b4e81985393eb9e2856330a125f6c069c51fbd7ebcc643769173c8dba6e378dbaf6fa3d30ac6b2d8124ce86f64cd2b64e4dd75ac887f477b89b67913a91ee8d27ab166803b253a57627c0dec81bd7e6b926cf90c9d4b8565ce355d9a919ea8518926aa97ea5532566fbe9afb8ea60bfc4d63bcd39d3daa80a38860d5f67f5ef00498c1a061780a366907c2e166bd5f1e3781cf62e9f82e8a7a700b3652be62c111e3f5e551193c494eb08865f56358c107328d59e5c6ca0f71adda9155f39870027e520a0c330028d134e9f84803934e4af74389e4e12ad3d7b5b36f01209dc1ba21c29153dbfe8ed1192761bbe2c5418f41a56cc96c172d7c8078a61cd0badb62b5661c4eacb595b7c1abf1fbac020ee43e9022d2e51b297ed41b07d4a173e1cd4a3ed4e8ae6aae036f82c5a6f30c4d772bb7a4cb7ee0fc605b6830d64996940f14d07a69070421adaa557f4f6e5f8bb87f9072b63725b0b5440f1250d92303e41035f0dcc220fce44defe2e302577026545dca5de97794a6fcb5b46e7af874b1c85b14d5db266310065ccfab987c746fb995ff98ecc76370f8731785e13eaaccb29a48882a47a19005962fe64827d6d7edc87ba7e60af6c9e5dc8a2a0e6a5a6a3aa55204a9c6740cd8a9561a66a4c6efebc1bb82481b29bd7925895a2526efeb319f02c23bdf888b91cfca0feac0d954db7953f60bc6d7c2b46fa654d7b0f749efbc89d32aac2d3da21fb78f38416cea06c35d051294487635675a75758cd5d4d11d17651f36339b41fc5d73089d14c46088ad656df20dce0756bfec4457a8d575946d70290d545bdd0edd9435ae4033a21f7a4ea40f529b84fecfad08b63d666f29f81604cc65e8168771a102d59049a98d1c81eefe53756fb5334fd0a266c188fecc67c8a06f1c117af4ccf87be35c0417ad5fe04a79c99f06aa58050ec142df9b085ee17d1d5c6d5d74a96162f7b339ed58861703f76baba8662d2746e3c83d029f1f9fb892f125a5c68fa9e27e7ba0d6afa885df5c34cde74a73ce51e56081cd49567e7e5eecde0519d665b3dec57983632d616cbd7cdb8af3cd073d452758e30600b0f935770d4d9cf70929c15e1ce9ecb9e866fdca60ed33b30c3342223fb5373c1de192c0e8a7ced2cd5a252af6c9e9aac73e459cc319aa62459bbfe8e614828b30960b5407693857e7b4eb1b59954483644d96151dca7f5298617201b396dcf59b91bbb6fc6090dd8e68c", - "e36837a9624daa67b35d2e0020f923b8e1da463ff53f2bd054a036ebaab69dcc19594d69632945cf689144eecbf43a9b685a5c4bf09a0e73af557f70023e7f27e9af0e4dd8a4849a9307b7ffc53679c1a9a15f5c4682b9fb6f890233bc67d67adcb2ea82e11b93456627172fbbf9ab20c4d8ec073ba30e93f1df57fbae6eee598aa13e1ddf13d85bac4c0a06e55d46fda40a3964e21b3ee69823b78eaa8ede5fbb8d4d2cc952852d8c9ee2cb21f9eaa37deea14b14724a5b687cdc5e83d65b0f4f0c4e4a408c43bfaabaa0e42eb67e0188a4e6c25fd57158094969367d2bc58b714cc826b26a79b7ad057babb400db2b5d546766b5a5dfe98ed891b1fdb703eb1bdcae1c1fc52ef6864370b2cd33db0b7b115954981e807e3c348880d4cb7a617fd0895a59cdcdb0ff943fff36c545978f924b3f178a0853b29984ff7d69377373fd0c816e8a31fb9b508d810940b51a37f31740e3524cc2a441404fd3399d716072caa7b91bc516341566fa72d4c3254a62f2cf87b5dd1cddf668d396a50eeb6a6299df16bc00373675aec7dec832f65e0aa83ae568ed6cc95b5183ab3394dac0432f678c6ed89f016bab2edb9fe38a3428b0f24c7efd0a71b73aec3aeb526ce5f3ca6f93d492eadea761a218a3377313f1b0150563e7292e2de64b09796f331f9a217c1c6d656b9c148fc02eaefcac19323a6a8c7e8af6e144aa1944adb160d6c2ea446fe8eaef763cc72406bb58abc5583bf570ba492129dff8b4ed370d7b4b0f372539be6150900c740fbd2e7082c0c6ac4506c8d758978c7684afb60ea430b4692f8b056d1573d121e83f464a61ef5abc6c1438da4d253b04531f2421ccd5bed76a6f00a19c6dda86ea3aae2e9ba1a03ed987b1e9a05614383ac7e718374b5e1263a434e277bbfe63ebf954ab9533bb2b1a4f7291dfe6f7e83af407231aba7579e751e9b64b49c3e262ff896f37705637ab3d08611de6f919a535ddf97b99f06ce9d6f6ac889342e88908607486de7cd1d0ceaa33731fda927c88d474b62c1fb5da170ba75e5723c0a0cfb6286e429caa7bb65996d71fbc6fafd4a4ccd6227f12327d656b54ebca4fece5d467e64efe2a104cdc0d714d7785e56e152054273dcecc4dfdd4d0f119cef7d2ddcb18aa1d25af5001ce40ceaafb802fdc32cf26b98ac2bf493878e5cf04d52fcb37cd3abacd7a09b3d242e9161d500b15b02e9472852594c68c53a9e8ba9e8c866a639d5e8ce07acb174db61bd6577066599e1c4bae1ee6249bdd409694b9e6a4c3a2b88d5371318ae24cde451f1456dc46b08d4db0a25548b7d0b46f9c2cb74f9fa18e7b431a8f9015bac9856e14fc7bce878751bd1b716cf6e6d09fb282b8120a5079efe9f9c86dc278992eca0f5d4b047fd0f860104e7374fd1df0540e5566a04fac53c5942716653aa94d42a75e17c5d8553f818e76765ac8eff82442bc56f4017ae0e7570823feb02616dd259c032d341f4d9a21f32539edddc8b6cf9cd8a78963626acb89dbb61d0c52340b5922186755f74080b575c8f918466cc148b2d3b29f3d3ce21df4ece278bdc5944219d1d6893ecd7c34651a740a76438c6f06df36bdbfa7151beee2294d570db3953165b7710802da652707b3587585652599d1d8c6b779482db089ade11ac0eacd1d6b2be0679a8bc162bac082c02df591eebe7b6ada481023ad0135ebd094f4e021174073167c88f92d81b69e51573175382f88bdcdd788d1180dd6b8efce6e43f1ebf60d6c4a365de2043e1b57069fcbdea3652fcaf3e006a8db7a1c264072875d592a7c0a2315357057b6e5d99129b01341c9ee3fa5623d8bf81d8ad7f80ab27fbff6d7f3dffffdfc91ff7abff8cbbfffed5ffff8e7fff8e5b7bffcf2c7bffded8fdf7ffffb3ffee597afbfe597bfffe3f73ffef397dffef2bfdfc1", - "fff943bffde59f640149b9e5923de884253de5276ae8ca77c2cb52477540fd70675064ecd13ce579cdad7cf7b6fad6428242bc197b196d217e0d9981b1ed3034d77120ebe83d67d65eec879dc0a6ba6ea70edc41813041c68a7c2c680eb597a1c1085b5fac916b54a5e9cf4ff8cf3b5419869264b5d8150cdff06918f56490a56893a286fa466eeb56bb892eea8e93bb228207f84b0a8c5c44daaba3840db1fc96719a9907341f2188f0a307f5920e6bd9b7ceaa531642ac0d859a00ad142b8d3f1862a2def315e58fbeec289e9765a91fa393b96f36bbf36da5c6398e3f7fae83909371406b6b2eb97827f4bfa56a13ce14cb266107d99ddada18974b0b074f5013373272ec5ba25c9baa10eab3110461099798ca864de4fc31abd8fc55e8899e31869db547e7a0547144efca77de5c2bc594c53b86a5a66682e6b4490a503ea782a3dcdb26c81ba7dc9d467ded8b92595a5ecfbd196b06144bd15ecc5d976516f5932cd115e835dab828c44012db411998437401fc19b9fefe50fc56a512e9494a81cef3eaa8c388667df265575ad2454fdd6b0097d6c29386dd669ae5a096a711f5d295f0097ccc0a914e0686b75124c15b13c3d2d2385dc960b86ad583b3bbea782602b891cabb3611ee6e47409d1e17b6be797bfb8e54d81e070346a2bc58ab875d6b08064cb571166443854c102c9a8d5567a3efd74a9b3423892ef81f000000ffff", - "8c9d596e1c410c43afd4924adbfd2f16b0663e62b203e737400ccfb8bb168a7cfc88744895fcb2617db537d402cbb89f07a706db0a9fd972b1b19996e282f6f228d42d82712ddebd3bc32d9080d0d03a0602632aa8ad61ec957054c278c86cc301d742a36f70def18631a785df60c031b8c2a731c7108a6c0b1ed5cfe2776208e67914a41b88de693f2a3cc8c9e1de8b25e27da0ea9460be912e4809a91c776935bf4e8764eba6033f28b20db2707c92476e2434b872ba4bf63c1427b6e896d680ab88a70cb72706b62442cb925d44eb6e898e80bba21f31b561797af19e3ae003743a84f2aa863b6fc4f1e488626628f470c5f8f188101d9c3a200a8c9d6655959be231b5e1ec1021ed210df9521149a85110a91acf7dc94fc037a3f51d38e58b87f472f757db55b0248ab5a1ce4a20bc17113941c581f6c1d686fbd5f2dc06109310a05055ad46c9c0a5d64b2c220d29965b783a5f0a6851d722772d8c24473a3a51f81c3c56c54cf5e1bf439d8ea5b9784247d45fa0065a2ae7f9e24c31efce4f3667631331f1d51eefea23314f5a643e8584f04a084530f665d6df99479becba259f0c5f2323b5d145efc1b49507a0db54390c2217fb907e3e7e5fc321b77d5e4ec78ba5018f69f0870722390f1f074eaeaf36d9d38cf46303879f5795f1830274de0dec3c219a2a52fa425fb8d8a2142e06eabf1e1e58cc420717ffc140f872512e41499211e5b150864bb82523ad6c413b7f9903713fdef7d52c7381b007bcf8a3b9c3aa3c8c031db4d47176b6020e7745d8c1aa47573e0c5ee8f8517ec9a7bc0c8d838de26c14349c42456e5ed4492ae6a98597ddb06ff7efba4c7be7f0501d87a77c4ab47d4c179b876671711d341f096c19527dbc660286d445e46397c80d1a31beea4230a91f01eb473aee7b62d444c3568a73715beab6a11363c0219b964dedf9f5d2fc79e9e01665f3e12d6ce59b0162ceabd3ac39d2cb5d37cac909288f976a1b9bd9232f78244ec11cf5815f61b48deba09c8db9910eca0dadafa84a193e238c01f6ccaa43c1a9aa353c5bea4e422f2d1ff6e067e41ac3b2aae00dcb6f1b85c433406dd039d0d91a15cd60c0e850e033a2f22680f0b572f516a33dc0fe4f4bdd7a32ec458077ee950577150141790e137037d7d180060b1c56681e17275e5a85a11402082f265659756e0241d0e978e99f31d6ea6db21566e2684de67b93635353a126ab77b917214c32a1884699368bdeba1789f72fdaf6d8d13563c6e3bcc60a5d6cc5cec5d88ad94399ee7c15c9312dc1415abf8acd63095215ed5020958803a40ec800b4edc0b827b32df49af748e53d1aa659d3bdac6ade090f4a01a5c37d504ddb2289a58fcb620cd7548ac1bd6fc88863c6133216c21939c4ab5a839785c5f73bdde3d26f6c30ed5a6b182960ede7965e49fc18aafe2878beb2c51df4aa56beff807fdc811c52915425c0bd97922bcf7a1e9d3317ae31474edb26c9d3010a5c0aa60de704ee8a78385e15798c23b690845dda5af6d60ef3be3f886771cd84a53303023a16a7858e239925d651399f7d499c21322578192ba444d0170ef3cbf123833fd3ada157544f9c76ed9ab9b154bed903c4b29cf6b2bc965c3680449de493fec0bdfabc55365b887f03ff2e93067fa4881dbe16d336f8d7cb0a400126446f994bdc951acba73440edd387f381f08dca637a41858faeea803d0a9bbf3c471c34b8adf1527d1decb47ebc0afdf7882c59c82c104b8457829e17bed3a2e37667d9ad16e5fd088f78a461f0f53b45f34ef2f423419ee67adfc4f542207b396fbd1f060392b090e0e6966637b8485784cb8367d546647a842558a2f52bd3ca63d9cb718f80c03dbcfb676b532cd4834bd0f8794543e1836855f8fc6c4243dc685c3a0fe3693600c09a1a", - "9c4800c1f630913d003210f60420877dd496687a17838f58befdc8d0bb1420e542c8c745a2a4180e95ea8f7886fd7ac5445a9481ca6755336b6efb955de6f3fcefbcf40c7c2f287c38466fb366ff06c04dd6312310e1609e17c0156c8008944caf0858381a1b73ebec72d679b0b7d95af6e6b7b390fdad8d878b5b17514d66b56c04acc195482cd26596ea86eec7652864754ec84e0822b78c0ab2e6622d2440993fad30df263eba27deb7db3119e33533a4d1f37c3c83623bed580eabd78da628b2d8bc2557603e68b91469758c8d90138f301690635af153a16860d8f28866b2b3729bdb803b92e4393c15c9f6ce73311be4b7001e9a68ab08426b4d32c2752da8fb23465a07f421f94143d6aa72d8b1e429058618dbacc6f90bec95926eef2c97050fc5c0cd7f91b8a47b5ec82adcd8400306835438ca1fe4a35060ade16d4c37e16f3e12470e364f1ec310966370d3ec38c31001fbc511c8dbe2bde2e50ad7402d6886eb8d1dd65659d28bf079a684f1860db7786dadd0a98d7b3fdad650487f8cdcda700d4e3641bd2a17980a3e470c2608635acb087461541437fd1dacf292bd5054689403465db2048aff1dacaa5d8bfcdf8acc1f000000ffff", - "8c9d5b8e642bb244475412e038e0f39fd8d522e2b49466d4cdfaafee1319b137f8c36cd9e7cd0a24b7535fadedc6d5ab6fb6757ba1f9b556300921096b1b9faa8f83374a5183502df4b4f54ef0a9cffacc4272ef9488a1bc21df4bfffee9363e765e3f93023e0d72d95471cceca72cb0638f6d84bb8973416d80f0b9155564a5e8d7b73b745f7645fb5a49cde25254110909cb764f3169afd696054602849dae2d9cddd311196ff5e197fb5a88d7f416493a07ed1cd70aee0caf66bbe6dd018b1ccaa54c2487b6f440c3d094c179f9cc3ec51e4c8bdd3fc1e46f9d7f5ab3faeff8dd05dc9495745c906ec57c53f559c50cdd305e5f991ec5ef1de1de87d5a9ed99699f956285afcb3a7da8bed3b6e2c4366e4bb06673a8e607b0db3f53929e838a3f5f3cd75ca5cbf61eb33c6589545ba305f73b5db7c0f0625ea7a5f6e83045fc15235aa37baf7d8e7b1a581c45f45ff4ab1fa92afb426ba1986fcbb86fdc0037bb52031bcfb1bbebceb14d12b4eebe77dae6823493a5f5e32c25d1fce591c596daccdecefac8331d276669339c50026c23cd72f21f518da3606b96dab17022e91cf9666e7b6135093836953f2dd7f0132962abac88c99e6d5ca154987d14d41c735b5502673f7a18c406dbe537cd2d640d2836961710c1656543d30e564a8a78b22ecb3117244d5aaff2f116db2c0c77b9711c51261d4d0d8e012949ededbcfde6277b7e0587598e3e86a320d51d33c5027bd327961d8fca46fb3847a7e1c487760b4b0568d79b49211ad61eb56e40d9353a41cbd2ec1e36e0d340314f2d81cdf2bf72a269509a016c4c8f5862e7ed7bee3b487c73ef0ab21d73ad8992f503e15cd9a7c9ba10a32b8834ae1e59063c2c320cf7c9b0c0f382cf6ca663e9516c55d5858010c2b2bc9f737cd600952a17004f91dd0f52e07fca6adcb58ef3155890454fd32dc7ea1eac85572896cd78919f4dc346219d9eba50bbfe2ea572054b49db08be9a31a2b99667c0c2577580cbc4435b229b5c7dff040d7f46e27b2d8b4d632469471e2aca6131b8507efd9aedc8d48caf1a63ff8c85fab437cbf26a81c11e3b9f679fc864ec73f56366e579a0fc3a337e3e8cfc45ac8fc1626234d31a0dc2dc0c34f21e1e909279ba873e5c5f82ea925694896c66d0d3abaff44695b8df0156f2b6b57d21ffd1bfac36e32c8b5b6200a1e3de3a4d71b803a0869e06a86cad17e62cd005ee7328fe167947c4d2148b111b17bd3e6b3973992b86c1a161407dd5f23f1e46d73ba74f820bf4b95aa7690dcce906b956cb86733ccb0f29b48665b54d5cd5718366a5375d64385936311dde695ebbe9e7fa5efb544f1ea9d24e5330b53b96fefcb59f2757a3c26a8fd5cb720a62b5d51e45e565915ba80bf5f681b4e02bbedb6818e9f512306449f45933fc835ae7a6d439310f3dc2dcfa238f112b2dda024a942572f194436fb5efe7324a35b715a2946e3fc13441395f3e9f9edb3820375e5e1f343c7adb50afc7578ae3dc76cf0c956526f13107c463b33fe569665ddc55fc36d21547f5668c9ccd45215f61b039084b93cae53e6882196cb8c167ea161346c7b2d27627b5c7c3fb7ec6625df82f9266f7b5dd2f7b0d53e32d7238326c2f45ebd57ceac6f36d434a93837d466c7073cc02b6730ccdaf22b0af4a71bdb4e6691eaa83e0c1626ea87dadc7599417e12dff45c4a84cae033e35235cef8a2a22157ba6e3f2ebe6ddca9b346a9aa71e188b8973b2761a3cf3160c2a78885bd19aa13fbb39efd1960d9bb2fa22fa036a1a47238d295854b1c40b9b61c856301cced5b26bfd0b02e1b2c8df56b6dfa962c5b111c4851c3555c6d4830cc7907c5be807d5746aba210293b41502729becb6acba1953aad0ea95cb631ce6b475130adec7d21f108aaab0d1639e47aacf", - "cb02d557cf4c5feff2d1d4cb8a372234ee0cc9db7e30284ea4c25263cd7893e04a076f3839cc35c972784efb5e63cdd6cdee8641b3551fbf4dc63fd30a54cffa74d3c40efb9771146638afdaf668c668426bb571cf01f4d2758c44f8ae8aacc6c616a421a30c9ab7c71ec294d227362b4fb891eb6969eebc783606f2e6e1fb7ea0612d235d72a0e9c7dda40d1f634a9e66e939746a46e2c5a352fa1df0702f95844612d874fc02ddd3f48bcc6be65018cb20bed4621a995c9633cf09dbfcb567ff228cfa32180a39975b3fd65bf5cd647b6898832b70bf211995b6787fbc4857bea89f9f91cf32595a3f09cf464719a07a74494c28d248a3bbf5b201254f500ccfa92b7ed9a61d54cd6d4dcd63bd16e3800bd3d106a77ccf6336e166c7265ad3d0e09638bb99546ccf51a42a99057e85e73d27e6579dd93c451e80778606038e05885dfff79824c8078b7f70c4de0c2c6de1dedbd887876a9c7d2c4109daeeb133efa141ce51cb027807109b6507c89c3b741208a24995c20dc785fad4b392db41fff28d25cabe7bf44fcd32cc6edee32f9ad84ff59c48b8d5a1d2fbb4a46080f0b5ad997c08d0eebeda4412f060663afe16db94c7e466d7e5cfdc7b9f30a92a4980dbfe532c020c0c3dd9a0e97ee285a9b91906a77ef774be7716a3b859652f38791a55548b66c332441914ee6dbd2a56d96925475f6bff4418dd23f5a6f78edffe7f3fd70aaa7ea39a644d8beaf4d7ff3f46574dcfa83dd1942f957ba60b9bcf1e86d37f2ab8411a871103a1240cdb8433bfd295b729caffc33f2027d38a23c11d2be9c6e48e7fdf751aaee6a39e8295634725fa0875d943913a694532c94d69d9324f712daa97a177f08890a0d3cf8195b987396636e159cb783500ca97ff5b3c4d728a32f731e6d599696d2d34d6a68a0e97d77fb40470576d80c652d66a0384d97689458256b12affd5ab4eec4ddb0e4d6efcad3de460136e206f366f600b5d2e32106729777ce63269951192beb9a28d71aa292e63f46e1b898059e186f43ad135f4999163b34041b3c17d1ebbb51d9eb3d93ec86f3e579a5ae929fe60893a79f9e2171be2fdb741504ce8999c31abf49c1f89bb51430283745ecdb519d19bc9db12a8ee347a1b89887acd336734f349cc9bafa162dedc5d3ddd01384a69c5d631df793e6c412d7116219b6a4db44fffbd255b4e7b3b8804b5279ebd782c950b0df204748feae6812f7d61b56d9feb00d4d1bf6031add54cadd15bb7749574cd22dde3d1f1d6b51d47d74515eb18948fc69ee3a23906c1186b984291d45f60d67a9eeebd8c035d7720655683be7e72defef2e7b69d442c96e9d4631962fcb9e860afb987fbe4c9af8c7f60e4bc9f979e27b74985187245795791b5554906a4a79480d1c7bc65b09cb024103d0266622b3c8990efb647ff1d2743a75c6db9e811cad034e9b88002bee4975d4bb96cfec6ff3fe26f9886c7ea02d26e0ddf4a69bccb3cf10b5290e6c68ce9daae7613ca9494c4a0ad69a0f5663ed47d4353dd46d51ded6bfe2a2efbd235871ee5932cea6dbbe1c0726a12701b35ff79d6864fdec3a765c81cbe31de6cb90c67ddd723ac2e32fbb13d220003cbb6452864137032de963228b10ceafdb04e5faf043d46adf39f4041b0d89b91539f5f2c8bbbe64ae37953ac4c4cc0d2cb16e1dc0771ba1ae393348cfc17ebd029ba614f449b7d2c9591af9a9472ae12084081bf2d58bf29046728aa1d08eef15b8504bee1202da146dd71297928fa43e4c139a0938f91b399e408da3828028b7c3f559edffd40effca7523079d52603d366ce735753daec8b9c767558369a85c45c53fbdab3029b828e1546d7a1567610d106d362fed575651c67d51e1e0d88bc2d7ea3a7fecda3c0de275bea6f380e993456056d680e2a36d88589de705e", - "6b64da1357e8394d2d4bf4c6306a7eecf600aba28bb0d5e8bc58c163169abec244247b4e8a545bf557db2b7d5b07badf42ea77c771627629a572fc79f15abe7e953a7eb5a4e1cadf1cdbab3fd5c2b115d90376b0db7df7972de89fbf6157c9d905dca5e74c9e343b342aa9b451260e16a65cd35afcf829e2fc9c6b939c76ab327044ce651fe3d4d8ba41e8e306a53b27a929f21bece3b166b825a6741daad7a402b649fbc4ffa89ee67bef98ff3c73d99b5e7c937dd8c6a8d25c1facb6c8f6308246cf632ebf0ba7d376a34eac87b315998c0dcbaac7b0ba1e37896b1b409daec76911645f9beaf08585defcbbf3cb81ff2d53469d7484434e2d6c13fdfbb424e5e9193d640af498bf21249e7edd4fcbba92f049596c6862e947bd74535f8c8c12bb8cf6ba2974a4317aad7bc6d1a90b9aa561a4d998285c159512e5395b6d05b0402d5db9695247953732e5d843d103098efe7a87b816b7c7f45b152b01b8df9fc03c27abbad1ba6f928da5fed42420c864d64471f8406914837c553c2e16a1fa9d59dbff29fe720fe5007b77750717187cd48d93d5a746a1fc856aba73afb011891aa23e1516d69dd0f2247993b537430a652c0d4ad2dcd9354ee70cbc9df62becb27c908e24e084bd5ca742351c4a22fca8ff6b8eae9ebe58dd831af8b686da359f3bc7ec5c8a53d7fcb3b2f99c11e2bd8845489ea8ae65e773c1dcdb2142563d0d2cf47f5e7ce8315ce88f203df52a793b6bdfd774bb3ac3e5c29a323a60cf1311face06137bcdaf457830721af6e721c167c6b7d445c8a37af4f7270fdb883793b460ddcfb51b1e26bfe96e19db32ae4e281d6724833013d9b7051dc9845d8be8b032195a2565bf7cac0756d8cac727dfeb4ba62e9f97f0f0fbb402e6d4af58dfafdeae4676a7dfd29fa47a456b1d8d5479eb8768592235e32cf196eb2d86a0a55bea27ad6fd5b654fae48236a54da0dd34994b1eae585ddc1d3a4d4b66c69ca544dd19a449e8bf14eaeae70c18796acaa01b1cc9b0ef85565065800c43add4be04e2b64659c17f990ff2703fdfe22733813dc33cd3d159cb68f64c7f67f783b9a5158e172e61d687fb6438508c5499b07a36b41fbe89df46ed400f337e82f2defba94f9ac8446aa0ead9d3c2bae42755eda9ab7eec35bed5c45ea9a024abe7fe4acf790b140d0bf7cd42dfc6bf71cfd837c67b6bac592702d0941615e7980599b5e929efc71fdcf691107dd4bab1cfaab1c6ff010000ffff", - "8c9dcd8e2db971845f4598fd004cfe2449bd8aa18dac81210396375e1830fceec6c7aa6bf844b0ddbd1230d0ccbddda74e311919f185be33e66749c0b357cb5d14903016ac39eb3abe488995fbc8b49a8653a6651bf90ec67beb0a2462f66d3fc085b67deb14a1027ca59b3e677307f8c0696e1fea89466b490efd477a31064e3a434d35f584e96da5704be2111aa46556bf03bc5b3dab52c74863e49f5451f41f0055a2f214182a0839dd33ae7db66eccf492305ef59e586718fabff071773ba34f48b2590b4de1fe18c6b6ac87cff9a35602b0fcbb0cdb906e605c668320a9e92d18a717ceb681958a3ebd1d9579b2d5fad38d20edac76aafed4a5fe64e5b159ff5ae9c6c1a6eb46928c8629278be35ea1e574035b97d5c6993d7f62391fd14675f86af6d0c521859a7da89bb3233b6a84154d5c5b756bb9e4b3ae8679aa2eb64e4594b7b53235945b77a8b88ae5c940bbef9a3fd4520c9ed42cae9ddc9f82dc2b9035cba8f836f4da21f225b4bdc579a37de34f7a4bbb47bbc4fb924a3b7da85adbb51af9fc0a97b6da9df7e410abf6bb1f6cd35ea88e0e7d023508d4dbbe6ff8e8bfcd893ec219dafbb4b9723687c8f496ea32ad5c82f585a116fa17bb4efda89af891f3bb4270f8f676fd9b72393ca45b53fea6823a4b568a4eb78336bbadb630da9562950ea4416b0bdd0feee13125bc9be39b0cff33eae10a9feac6f2ccc40bea2dc6890dfa7fad0e8f5de05efa62133df45d260778053979761f61ee713a11d7b8c8899461eae278ec628ef00b3db171914b23f2d5384f9b1eb3185d3594d66948529fb415277de9682ce4768631f2602a176be821f9d4f48c450662236d5ed3692d81bcb33763a0bedf60296881448ba5d73068fa9f2aeb3bd4f0ce56a765edd354da561771477be98270b57de96ed3aab63a210cdfd5118b5457774d643fed37878531bc829796203ddebd56f2b171c550467d43134e4bf01239358deb56b5f615682da2455a3f352251b7ba96d9bd29e5f67785e46e8635aace946977af3ab9ba7d2a5aa4f6858e36475784eb9db679de8e7d1b4dc316155ffe0df06b3161d994073acdbe06e0459719e963e6e1e8fd040615088526dadfe5f9d841c3a50e4aaceddde776b5b3e391ecc3ba2d3e79526ff751bdc0905b8cec1ab7232f1a56cce0608e1708d18b118a3bb533e969fe3942ad297ce6dcb2ea77cbe8b7bd7b778d39e558554d24af50317ee23aaeb0b694323b4b6e6313b1f2b09a74bae7fb65b8ccdecbc53d10fbecfaed029adb2ad0994f99a4755ca087de0c5960b1a7bfa9b9dfec6f04f6475f1eb93d404519479877f9a6610458b3ec9794e8a2e9c4d1c27d5ad21481b0d86ef6562ec4d9dabde563b45e0da34ea6975e71fddcf26952d23bbfd0ef1e45961480e72b66d39d10611d930dafb1ffd38d648f7274ad9188b27194ed6f1fa3676a235a570c92947558b89c7d7bdadd250252920b87daeff02268c9c799c6d8b79e8d85d6b3ea5db610aacd0f0553d2faed1dbaf18b839636365c5d529c581906fe5e45ff214c46429a76596492c950894a1de5d75fccf31fe8c983646e4ecbea568e8a699f8ce1ca4eeeaba6d59930371160b5c8fccd8959cb4922e8404b4797cf7385c96dd46ae83afd1c9ff975ce4f33e3f3dbddabaa039d4592955a3051af36cc8e292696e70e9a699bb82f0497be634e25b5c02cab4311e63ea7bd8e003c28beb73cad5efa2c039ddc0e258e6979ab6b58158d63f666194edeb5dd9a2a09a5ccad0377e317ae2566577416b3aadfa34e398e63c6d6c69c222f35565d0a4be8fd10b88d4f05cf55df346e6e7e6c61ac155523b079ef1a087fecf1f2473da3f58eb59daed3d6dcc6d41592d4eba2233960a43d8ed7a6190123193df17bdf4917f47dabfda67fad", - "94fc9197f2da2f4c98c3162fe3bc2accab50d3a5f01b44e2be16253dd4a69269f5d2f7a636c34c347882cb349f02b089e6fcdd953eabf718a6b1441d633b4693886459e658990b51cb26acd3c6f70d72e3f9b5d4a1ddc6bffab3dc3143e6cc0e40496b7d5131052781835965aa4d146fbdffec2fe77ffffbf9bffcd7fb0f7ffbf7bffeeb1ffffc1fbffdf94fbffdf16f7ffde36f7ffbfb3ffee5b75fff95dffefe8fbffdf19fbffdf94ffffb0cff9fffd39ffff44fba254ad7c519949bb6ac6372a37640bd440dd7981a9d038284853c5b2f4bef569d75c6920fa1d62493bb4d901898e496af2e4cd449ae66dd908de421a35883c41ead98685d012369d6e5a42c57d54cf76609ab22e2827aa82b3438d8d58a7968b8ab5b016423f9da2bdd8a35ac55addfffab185f34584d51986d406366b669dbd64a86ddead65631874ec5665834bad9f98e5a4d028c9ea5d940000246bb38651f32b88fba87b7d3c194cba26744eec0196ea73a115ed551e72ccda5d146fbf3b2d52a76906e6ac0c85493711fa781c3943592946a184cce399d8d1a95d4da47b18c215227ee71ab7b3aa960ddcb56886e5b4b36479bd615837955bd19b17688eb86e2dd625bf9b56668c32690bbd06021f6180c272a7dd5b30c34e92c8bd2b768231dd651321b8796bef147ae70bd00809a66c2ca9e31ad20b3f495d59a96671bb6c298c19d417ecd7b51a02b1fd3ecf45b2aa511b1c37837a094b71a9c28edec1604867e59ed9acfb651850ae2ab53df7375f7ae1b983c89f8adf0b9313d88c45bd6a4877a92c1e14b896afb46da599d33d02805335479766cb266efcbb552c7807e6429bd27b03937583c4ff570baee02c067f33c355dc6cf59443d1ce845a8df5ed4ac2df535917802f48d72cc7d862622a1d6bc828819cd781d87265da7f767b7baec6e5681b8d845850bb2f8c7db6869226bc1173f0ca78c57c4a0bb310b9d2a5e088b603d95388237481b3bd347bc1aa7db4dd7d1dcea8c02186b8ea6a37f234260b89fd340e317d6f312bd483d66080403d99dc4bbc236460db746189eb20cab4240612e5377a66bd491974ea5554c37661c2ef6099e66aa5a4a779fc534581f24146f8cefeb6c53e54f6b9de89bfec516db4445dbf6e428f7e966ef6d5d5c07f666793802665ddf5c830a6aedc10accaa7eeee439d0744587f97075dd8fa0414d030447aa59b53e4b62a7d5d7d55a38de7154b1f0264c77dd03b18cd46a6e3f4cde5fd580a06a645624dfbd7d0340e18c4aaedc4dcb34bf765b765daa2495b4a5f6b0a3558d797a71cc5a822f3acd047fae70467d5cabce56ccd99273adf402104421e14accdd4a57730727e2b6a6df67ac80d52959f746876e35257475c3eb93105886966bfd4068f47ebb5ba9d661ccd754a56f08f9c5aaf546e55a63785decad7a05c2da315511225fd03c16c5b539b782dd80f9ea793d731b2b8c0ec20b2b156b853a76ed487aae866575b327f3775f666dec3c9bc50606ecf82ac98fc38411e33c180c91ce1a5b3b431fd7b61b53b4fc550fede8c224fd6c9378b07482157b0a85f012698763f8060a0763182d9de043555ce089ca76a3e4b4e9a2c7e0f454b704f85b03e6af519584097cb7598573590bccb465a85bac629882b26a0d7f7e299db212694cd04389cbb51fd08063a74f4653b5ed39764c37e2cc5ddcf9559791098f0cbe4d1cc7cfd87d99a0a7e709793404eb695ea63ea76a4c233f7d83efcc3cf1fecb3314247a4c123cd1647d0a28a990b776bf8091b9d7c750d7796d5c37ed219a249b95023f7891eadd8eda07dfb16fe0d4567356173113fdba11a8d06ef57edaea8cf08d4fd1629c1853aa6f6388bf983691d115f9369b797050fafbe792ec1174eb98b55889d1de6607ad91b519eda35350b50da376117c4837", - "f84f5a0f36ce9eebc5436818c6e23e5b965c9f62e0ebbf585e3ed72ac97475088c5d744a6a8d4e2251dc50a44b513d7712a65002762e66190339d93b0c889d65dcc044365b55b38f1d7bbbae4234d5b2d1380c4c702c351df61dc650287377f8b0765743f4348703d931f372e250b6f021216a743455ab20ff9a451474c6b62037e9026b2fac31cbd2057c6084ab1e9c3904344de36435cde5d453abef83fac4d4970d2a9e29ccae4d3ebf2d866f7d002fa7285998d64a383a64cfecfa0063dd7663c4de36a1221acf36cc614283ecb658e564c6d51f6c0811e5cb47f3d43e6bf488d5f736790110526abff4a86b77a747d30fdf87764b1cfbba1d98400087d596cf70ea3e39864fdcf7f30e5aacdb74c15b9a25347a8c167b1b2e87db87aab3f03db6ce57139551165bd74310ab95c5effa84c73ced02db90122c4dd39b56b69407fb653a0239ec62f0b1c41d37d4a64a6dbd8d533ee0fe322a3bf8a4621c729d7606d47b8b0b76ace99af3d9bc78e48758904096d9b56154150d22f3f556432b6b8e3e9c73c694aa6a5063eb2c9896c66f40e4c32c63a48a3ee106c923fb6f03e9776ed0d3849cb2b39a6a767d131f45d42413a8dec19066fa658ea8368f06114079386202a50dadd81dd2397b7f691cf9b1e63601bd7270ad699c9acb29459ea85890b9cc58c3ac4873b9841b80036c7b34260e7235d274c4cfb0dc5098490d33966ec47aefb52fed63a864764383d4514905ea9e0e6ba71b60b2afd4f5c9c47cabab0a7489a643c6587cb1d41b9acb84d371ec24fa767f32d366dfe9c47bf4c11cbdad25ef7c5c8a0690aa33ebf02a757ecdfd529b386a2d96103a155cbb6e1bc889261a570ac6d8340661349dfd77edd603d0363e437d006bb83bf6baea7ab797f653b53d943b317692c5b7b9e534752a158a021f7d595d7482ca9e4dbf298d2ae025475ed28160489201b945a9b94412edfd3bf65948aa4c54d69c0a933be499cffeabe7b93a5a6afe4423e68fdb66f06b7019a35a0942a422bcdb24436135e3898920f5a10abf65c382d008474747d648e6f532543a9013157fa03384ad03c04059847c3bd4687060777fd35390aacc0058edd61e701aaf346c7552d1a95794553dd48bbabedcdef96c158d8f056acd98231b4a4f5115779fd6450fc5b694f7dae818be355eb8a936f69621fe7d6b928e3e125eba23dc70b4e97f63610db4a232b6094a84e058fd44c19ed705509c30b1e9e4f34d987d7ab6e5231f67ecd11c50c3d637542ec5c137bf596b3da3bb0f6d75cdd98c2ddb59825633b41d8677759ed90077692ba458610f7da3e5da528a3338e22cfbeaa6810a61606a3868765e7b3ab8a24d5a9f5b6b6bba3dff9c8f56e23481162e5ff0d6d4df01e98bdd2ef5f5655990fbd4c12df74a9fd1c75ee6621b7aa4b9ce916ef911fe79f3b0e99cee025fad3413bd631df3ae2e08c2103af3d8fe53adf1a2783e767be080bee16e34b529206d8009f09848b1d2b39359b0e4dcedcbc90167c0f8d3fa28071458c2629a316243578213b67ced8260c936f51d6093f86bec15fccbd7fb665ec7f373bbf08b6a58bd17787520327acadb79f2a5eaed3bb56716db66a8401c6bfa72210fd39c7b301bb9a865bb981cb625abd9721bc5be910bd7af4b2396af64ac9ea3a9b395a2eb55f58b49e22c8c3f83b74a7ffe5e766c03a5c034b7d01d10327c226950159c863a265c5fd0674b94e9623868dbf5cdc2f8f11461b1d0df36a479cb4a336215f9ba8cd1cbe786e31934c0346e439af4ae4bba0cc4022347f43e3f7b471f1503c29e09f47839541c893e7777d3f0ced58b56ef90079c2e107fbe5b1f33c9b477730c1c07cdf7ed2ca5f495af5ff957a29dd37e2d0b7fb7c1c93ae9511b7ef4e5f22bb638736d7525515e635b56d06ee14d596b", - "58a7151d15336c7edd3b33ec5e47a755b5b59c4d9be7a6c57b3cec3bc7211de61e596d6f654437ca1dbae676723a803de0ca5b8b02601b93e463d758d37eae1ca4fbdcb73d9ab9872875d4c9430fd2675739ebb800deb27827e7e42bb7bd3ef2b6c1048d0a3cc27e0779029dc6a5bc78defcc37d84ab4d17ac11478fa8abb1f9289fbeeb97049dc5d861f6d9fc3ff33643869fb4c468c25c2258199a3de110b59a3e09642af6706a3f6273510f11b0f154ba3dac0c0fc15119a628d2ba1164d4fbd2aae5e2dce1f15c6f87fa7d1b366a1b1507d9eea5e470ba00f539243ea37ff8d814fea86183055a1717432cd8277248075b91346854c0b69631ab1f7488da4b397874d5779ffd7cf87aedb5b53b6cbfed58b3cc9f2cd1073621055e9fd22dcb4fdf1d9a5cce66b7de3cbde33f91fdf5e9cf7f26f54ef158ff468efefd7a31fa72d783b9df17be2c024f99827a0ef072da2bea925c382485a98202b1e5b286d72e243d1d5e90d0e7e7b4f6420afa9aba8b6f74fca695af7b29f4313e8e4b3892a7697623485fe695ca8e5db55e8eeb116a05e4b31956c54af371d78b6f2bbb0f2df46532b052c7cee6b4faebe92911b25405a6433740ed358a470df4def536c3c0cad0ff6e42445817247b7643b2bbd6f03c38c4a2d5335f136e50fdd17882fd409de8388ed42e86e256e7d273a29d2648fbea60e2b1d3327aede6d7651bd3d7a5fdaa4e4b9842721b61dee0b6e3534679bb7af934bf7587c5ee506d957415396c9985fa51f4f27b3787653dfc5ff9874f99b93e46137ca8ed67f66760e5c5fdd76a2b3e08ca53df5eed1c0ccdd479ae59db9e42ae6a3ab883c233fcd8a49e4eeba0a815d9c6cca3decfabd9f6aa6176d011767eb400f05eacd704b3cfd46ab93e7a35d1f1620d78bee1a32dbb2bc7e65e29979fec655be51c2adaa9b475e0dda77ff645557008aa6c189327dee2c8a86bd30edda410d56ef110fe141a8cf9107de847ee410445034341f018cd76452bb641d7a8169bdd34af9b77ac509e14b12ca87070430e26523ff9cb4ea8c32c9ca6d43e8a7da6192be3a0d4543b44966e1612e5058cb86ece22dab5fc0d1cbbd8ce09c4ea3644eb31d0db5144f8d4fcdc0d9898aea7c008f9379576b29906d628bb861bf03b528b9d438b1e00ed58bd89adcc4ec515d449de5aafce73b248fc911597ddfda5dd848a602bfa99b8d8d22ef4b02af41d4a41a86d7e1bf662718b5c8d218dc6cb62551f6d048fb876faec518bd5dc807b26b761f7fc9c21630a724a8b61668f5621cbcd1f6cd94a4b2a919d9a1dc39b5cae415598ed31a2eb0d85be76cbae6c37257037ccd4febcd667eafd06faac958a0068998ae9025f3797e9b06c65fd2d4e16c69412a8f9cb9b66f171f90b90549a8dec2db08eda90c39774080abb8fde57aad99a699b2faf4ef29dce7727af8cf5b95c7c458c99c5d9536d15656bc0cc8db4b36881b8d272f7967599e9a7757c001ec11a84102c038647c6c0406301c8b5f29c09c0dedc8a24b1337586c56eab4cac05efa8a84ec0fa44838bb731bc66d0456f7bb10d3e54a3366ccbc23a77b92595e9537fa34f59232db72df3dd85096cc39821ee807b92af172c0e62010e5593ad2aeaafcd14648566d73cc5b1248501f6d597f5aed7a62d0847cef2b9c5fa05c6348a01ed2bdbb2aeac3259deaa1f780fcbc3d5556d04838667294bf0c43af2f3ea29762926e3b3f531ac8808b6d8a1e1d82aba92ca123b0090ca558a01e0cf7dce140f4c41662786bca5f5f559a3f8d176358db25768c5b3da2ded8272d769d9048751fedcecf21ec41878ec79cb92dd2944267afcc25ad73af5fd9779381d3a48e7a8c580c29b1e379363c8a04edd9dd22fdfd2386e8056aa0e5f6355e58ab58191c22f0317a5b675289adaa8d2b01fd809", - "90f41ba88c92a0d24ca56254aeddcbd19be56d4a471568c656eadd32ac05a55a4f855e16d75a5d9b7197586618636ba3e65f3839d98deb96ebd378f9d58e918f3f35c1810b65aeeda906792e9eb44bb5a212740263809efea2d424ff957811cc0ca1d9d3454b87529ea942d075cba0db4df15e609bd30a8550750086dac3de584fa9bd143c7031a276b11038d468e3d5f741758d8aa4b5a8745b5722de68007a4fbcb43a6fd5a48941a587b93e99a0cfdb39d3979e33bb21f047a65b9629ab748370d9f3101ac4da448250212e93916ad9ce71f7f4f5242886657f55b62fa99827315e3c1758661433ec52e953b731c2932d47185cad5f82e110dd7995abf69148015a375be131e80263227f9bbc5aa74f5ad0dd8af9272aabf7d418ccc04dae8d28273bbdad26910a25a3298f468c4f8681b6e76762fea5ffedae87cb3516c03471c2c7facdba3146226abff40ea2d87a4b050857b3de0675075587584bb63f2b798c542e8dd2fed80c32916d68c3a0a397bf1ad9b1686f2f52be3825ae4493dadbf67662727c50f3f4d9d8f3841054e02ec38038c77bbccc4a36a8c0515f4103255a3575040ed5f02f0ed4f199f0eb157546fb143c7fbfa6679fdb6f733feddd6178778537087fd662119b8595c5493bfe206f4a4f7a162d14bccde94c21796f3e37d125678c89bae768c35ee81cf0ea148e3163a8130c21d758bb4008e0aae88cb67658a2b4224f99c98b7aa75d8d0a45a3c9f4db7e673cd68926d61ee6d946f7afe149c9863b484e759c3c2673bf6920e3a2f49c692ec3ba3eb794cf4b9d0dccea56057b3984cb3159792a0c644d68b9285aff6adddbd2c25a84db7104694b97874dddbbf8a27876d3225774ecb934581a4c2bb6cde4d6147a565596cafee1d2e50ace47610694d5e9771f9dcfd465283816dca98bb8a5e2b07a6c24721be30f9148dfdf2c0432d2e159d1b619ad10f4f4fbd4f75a2647f5dccd3c51eed27e86838901496b94a3fb45997b2aed6eea4e01a925ee94b5bcb61ac7f06739e82f6efcac4da79e43a8d02b0337fa6a1610203bb6c6d248c663f8bdae7367522ba1563d0621fd7ad6deecefcf6cdd968691db584b0ff5d51615f4f28b1ea5284e9c39bc6b4e8fed485bbe581b4b6139247c96caa976337c1e28342dfd987d4173beeba7e6de644f2a9a8d665840e1958b2f73387777e4ae96fd7151e5512962a84ecc5ea454bb72a158da263d778dbdb52ea8cc6659417a7986b6a725b3659a56d722ada8cf2291f7edfceba3e1a9b28879c3572afa82f955de6b13150d16bea083a7dac2c46804afe6391d290324a268ae2df80e5bf9c58ab14b7777bbfe16dfb56f6fcd207890d28afab600164ec37d926bba145a7d9115a13a0185528de2ad8e6df7092ca21ad6188c5c3a4324ceca4bff59faf50b28c56e5a7b4367a13aad1aed7a56efd76384dae963a7aa8bb7774e993c88a15eba5ce19ee1c9365d7ef69e6c36dc484d47ae9155756bf68acb657e36fefd6a8d520b27153acd98da7d2c65d65638b6b56bddfd01ab2a2f91b8b209904cabb8244c11cba8e502f5e83e4f0c0032361c93ae4b8785e3516ba605e39fd1f045d43df632aac24d34c7f5559b6910f4f898da79a55321ab0e733420ab4cb3e4d3e2de5d5bc95a9a6d6f297bb30b4add9fb08557ad4483bc54ad49c7e8f3318cc612dbc4773953ef2698670bc5dd57dbded66a5357c5944ce685bb3586a351a8362fd63c0fc74517e80addfafdbdcc440fb5c3659d78be6cd9d44ec98f0a2e756cb50684ae6d63f0a79b329a7d5ddc9a34500c35b6d23731758586b4a7ad4d1d61de6f881d6ab2f6bd73c02c857c72c9ee0e14d02ceab38ba5eeda963cb8e32c75d892a23ae5ad27ad8c66356682d9df5a51de6be3c84f2df45d935019a1c928f00b1ab923b3", - "578d6636abff60ad2389687ea3b009b6406dd095063d5975c339f448a7856328a50c4e41966e56a5303193c3a8db27633bfd979540a6da862d8e38ed7fcd9a7ad5a0d1ad87c6e707b507ba098949954a58fc9d1ac6a162eae9f16853f726f4e9b4ae7dd134a157cbc5f06157bfd9e06fd66e46c5873febe5313c08c812799b6f721307506a26f7d351aab52140d4b1b2a35e6c6d4e8574a60c39dc41baa1199515f7fb6d9bf0049b88479accd263cf6df52eb7d51d7ee9e64ea06cc364eb58630ce344d10962baf56df3430a0ea547ee3cabdfa008d06d14d6715f8beb62f7a14ccda1801fcf23bf41956511acb20a5982d09072d83a02f862d9962a9a0b87acecb2987b3ffe740702bc7d7c03e4d177abc0e7a6d159c758e4948338ad8f6967baa4b857ead9604fc4dbf63eacb96a21d79b8a83dd534764fa49a656bb1939f399a601806bc29bb6b2390c34c08c6e6fdf9abbdac1ba4deb47fe9ea31930771487542eb4312d9d0afe7d2559d546245f35d2de410f5bb6e2c5a1d9347cf961a3712c593b14f5bab6fafb2afd0f7f3a32f2db43e04a3efc85cf6e0ad118ea40a3c2a2a541d02d77fe52b3286cb5e241c69ef0436c2deb0bbd43745a671ab6d4efacc5dcb6759f509759eb66aea55cd2d5e6e7fbf6edb331e39365749e353308d76a00979beb911dfdbc1ceef05eb64add7dedb6a6ef47c6d64fb1829f365bae373bfcf269c5cdfa896ba5d93aaa9981a096595bd333bfb619cd87b9e56e2a7780fc0f000000ffff", - "8c9ddd6a5c471084eff514cbde2f4cf7f4fce95d8c51d0624224cb446b0804bfbba999b390d3d527d29541d808bcb333fd53f5d5b29c0ce12d6174e94df6d760be3ce499d987b24582f4901d007d26399a903d5e49a1844979f7a2f178518bcbdc8ccb39689d3dbe8d20cff7a43464d309e7d734ec1fa959287bf1d4259a795cc2fc9a5578554cea7c3a9f8ce1c3136c24ce7a07071526d98f1f6e66b76c7ab612bcbc5946c17ac31d03c512a6d0a60f5b32afb22771f9e6ea36bfb68a3a5029866472421b94917a401087c69fac3c794ec884a3cdc93574804c0f0c13eb9a4486328d3d22eb6c0c280419c7287f27d222409cd99544e711eb4660e52b7e078dfe01932e3f3dabf059950f186aeb1ccfd12af99fa154a3114987766b7c70551fb94820705562d0e5043299b2af637a07fcd50766811fa5c0c332647c829faaf0a6109c1dd7f418343a425885cf5fe0b8a0d519681bcd8f423012ce8cc47538ca4376a6cda679b09d01a96c7e99d3baf23807509ea48357ee300fb91363963114a6d1365439540b47c05b24020c9f2f134275a422e0c6cf226caf675ec5c6d86bdab6da487cc54773e17829bee6084503b2982007c8186fc794189bf17d94ee53ac95c21cfa70fea973a59dd84c555be35db5b5d47c8332cc3a3d6a90229792789a806165a59d52aa4d062dc590549a49a166d860fa942cad3672a5341129b5740af0911ae44e4628e729d3ed41523db01e18b4bb3bd1233c374a55e7d48a194fd13a8775364d4d2c880c62e8261eeda29df67b803bf8320f4e05bed7d62ad8cbf2561a9e130086349934cce015a0bd5d84acd3e9e0a2497b1463d64ba9d5bca9538d373378c90087f71b59afbfdb8c28c878a247cf75d84ba20e34b7af7daa0e6a5ce36c1ee882e164262ef2804cc02731e0d1f2f3bca88dc1eb06eb917f1f234aac7887c0662caef868a9b0ce4d185c5a0bbf0e90bf815f439a088427e4ffe74d6d5c812254d4ceb19b7a2137165c89222660f8e68025ca88dbe81eb65f161c7a9fc446b7440b046ffe5a642b903d7ce110f82cd09b0ddada9141738544f424d446111a6209c7e654d95738890dcf3ab023f605a98c9ebdb0351b52ff3e7083add1b5ec6de50b3aa335271a9d48a6920988215aa0216db764af2187b44c29df118a1ebfd0a132ec725c361362f872a88b12981469787e174ad44f89fc30beaf949a152167b269a78521ef808e3922135f6cad7b628b1f9ecfb30e21bc17532f5fce20b9aacf78985fe2619d600632b0b4f49e48ad9535e21055297d90948b778fc0837a9c64c462cde7ad6265db7c7c8c6287e43f03b02e32932b0df9ba1e5a6fc05d79870332428c1b02dbcf55b73c6be0e5fc04961464698cdc1850d47add73c9b705b7ec413ec7fe236873929727328d7235854d0bbd19e104733257742f4edbe6394235222ec29a78b111b565a6ad679f3b1ca2606c3292c8868608293289cfc44d5f6540bbc0e74d1ad2c60b2d5e0381fa3dc9d2db80a12ff717bc5a2a2ca592ac830742bdf461beaeb33aaa242fa8ac05941d9f248f4959f34e64512ca9bd3d99e8ce076495453dc8aa4605b9e49273abd447869240c8d93d4ffc6e7af19f1a608ba4ffa42cc30d33d783434a19b74b9f02a60d1787adc1a8e72892e891338d39d28c5f2a9fe925ab8d7d7ad5b6184ffcd5a192ef72580b2b2c9824088313a5f87221300e21a12551692698610dffe2571372bd3524dcd3b11d6d4e933dd6b0742a4c8093c88307b4add4d24871e05aec0dc6d51149f4b10a9489abc78f4a9a8c1ff174cc70ff3bb745d6e8bb4076a0a5e81a859846c85cefb4dac3b56cf4ab6c1f4b7607ed1521e02662db957c6a07c9893d0b271581bf9cc9a90989b6107131cc56c37fe3cc37f0b70f7279dc39ae5d", - "18491c067e8332d646a67071c40812aac95ae11eba6630d3dd51ae79bae0dcf599b182a88c548303b17bbb5fa081e34a62bbfbaa541a41e90c7af47d2dbeb8e29d95c1757f096da887da570e3998bcbd4e801a989371537e622e84e75dd53f37bc8cdc80b0a3513557a150a0843f6411789b50474f43b2596c8e13912b9044cbc1a0e12d49d911772840697479010daea4b59f1a70824e16444d78da6eef1a04966a0548c1d71da5c87e46bc8d5dc01d14be128a12892a9b625d100372b69f7d997ffe7a389dbee0af9d5fdf9eaf2fe7c7d3f976fde776b9befe717d7efef3fbb74bbebcbf3ebdbc9ce75ffaf9fef4ed7a7e3cfd3bfff1f9c7df6faf3f6e5f6f6f7f5dbfbf9f1f4fdb113bdfde6e4f2ffff9f1037ed1af87df000000ffff03000bd36c77e4060200" + "1f8b0800000000000003000000ffff", + "8c5ccdce24db51dcfb2946778d51fefff85558d9d8424660167881e4974751fd81e9c8be7c73a5b98b9a9eeeaa53e764464644e6df7ef3e3c72ffff1877ffdd33ffff597dffdf8e5dffefc9f7ffde51f70ed8fbfffebef7ff9dd8f7ffacd8f1f3f7efcedf9ffdb27fff4ef7ff8d31ffff8e7bffccbf3f1e72ffffc973ffee9bf7ef9dd0ff9df2b7fffd0ff7c13fefbadfca388486aa489fec3fbf51eb7defdfbd5e7c33b23d9f376d53cdcdf3f68615e69f3fe9d3e9d991a7475d336badebe4067a39b2e8a8cb8744dbc7fd67b53e7fdb3e53bf448de56b1daefdfe95ad956fe7e755b3b83ee5462da5522e859cb7bc2e9b3bb5153f57ed5bccacdf8b3691da1f37e67bed31e65b4d6e369bc8436bbb1fdfe51d795c8f70f6a6c373daba9d6babfbf53cd35cf295e00e9909c7cff829c2cd5e5cf56cd14dda96a4796be7f414bb93addaab5684bd1abee6c1dfe4e5f0ba5bda6a362f43b563ad9b4ca9e3ec16fc413b799e7876a248d774599f966bfff9696a6add0663351d1ccf78f565b0c3f94e4b3d5df1fbf3b5585b6ea7837efd40afc3a1d09edb0495a13ddee95d6b78b2991b2ff77eb3d8fdf38feb47bba1587e5fd9311356b1eb49fa565e8e65b42569796df2cb54ae8957edca8b69a7c7a75a6b4e76cfdd5a5e3945be6534d4b52a6a1ca3b3734b74e482809a72f90f6517fffa5f06c353e509a5db9c6b1cf5d834eb3669a19bd27b388d8685afdc419a58ba2565531e7946678a4d3a670e9c97c5fd5349918de53b5b553f4ad516ba91cfead525428a32c22e2beff52ac9716bf3f2b04447a55e6d149f7242e2562fcf321a61d37a66f237fbd5fcd90b25e0a496ed5131cd375bab3873e1be62aa2e7d75c6a2bea9c2ceb938233634be8a393bbb9c5e12adbab2853a4641607369754e5b8d8c5914a6362ca939f0a5b40ce09f431420ae66332e70da45bf311f28a32e37dd9a1ada9cd9b20dc93828875235ad279b12a5bc9bb89349b6ed5bbf85a5a8606ad49aa5471f8f7de518ae8e22d939d7bf27cb5a5d143a54dce70fa28d54cca7ed1eedbf44ce2962dcbe73dacdfdfca2b08b6a4531011376f357e01d2aed527b2a9f30a587666af9e57a5c6f1de66362ae8b7526ac46ec4ca523f1f160330e1a3293b5b2d46c165b7851e5777a49b021ef6aa15df81baa6983286d3997c035bcf67ab33ce86af1d8bf773e969d322273bf9d81c6811bd61842c32a7a6e9108a3cf975de16e6c95ad2ab51bc5caaf5843e42b2226dc2b96004f09a8ff29675bc7f34748c3737ee6bca1821e02b8b93890189773ae7485933de5e171dfff6557798e9f2cbcdea93a3557de36d615ea1a4ab96f249cfd89e482a6a38ccf4ef4ddc8772dcc49a7274779150cb73986bc3def2d10b11145e046f4f31355346c8e1dab467b3dcda19cf7a648b37bdb18db1b79dfcecf96d5d4ef3b2dab674e8525bcd384fa7492dbf59ab8a8893239177e264ef1a5ff5f3127272381d8eda0627641dc9d5d493bce3c63ef71aed5442ba92e614a7c56abc97b3340ae2353a5e921e169c28352718a9a7d803ff4fa19ca3617c66534c2851e0b14a0ed68b5209aa1f427b43bc18ab8769f159f6756906b6637de256e796cbd226c291e7f2c36c9c3021f2719f2c179a151c46d42591d1be413ecf5eb3293e823ad10762ac7a28d7a2a178cd0cf15675898c9095b6ece01f0f3fb70edc407557ad48f15e50eca403644c270937abe64833c4cf4225c8a9c9d5b4d24fd5f9a920b2f4ede883dbc6639d0142fa6ceff9de5700a28ae24389bbe56d23df55445f85775a1d326566ca92b67345a89ff314e1c1eb22137eaa714bb38c797f5b402d23caa16eb05b7807e92e588261e0633ddb1cd422ac390be7e216e84b81a893a39701e4569de219602a4fa48b3661dc", + "e340cec6108b37f16bad05bb838e7497dbd95986525128df4afae89e0cd05daa7e703ae237573ebb336a0732ac2cdf57a2502dfe02999616461752161979e8bb49d35d3ef1e6282238b154542fa344d9c99d43cbe90018137a158b2ee65b6cc3d7787f667a5a136a10604a631e03607d97f9ce728bc34ec4430f1ca45dae19436cab941ffc3eababfcfb006dddc2104b32194ca9cb1a174632d56ab9e728884e7215691a3ba70632af15cab86ee96fccf42b5f4ea919ef1899a86da9c30eb4e7e10c444d0df18fd067699872816839a1cd14cb206f139966b6b387f810efa8623e0864503957f81181dffba6167fe8a491d661ec969b15b40d7c06ac2d1f67aded342a163c2dc7e9a2f66abe9541cf8eed12e6c13f0b0c660f6f41dfa960fece4934770e87a12a25f5fe506d8b184595f87a949fc8db59db7b2be96a069e21a37b58eb5b8bbff82c10441c39b3c6fc242a7159a24811cab74e78e9b2d8268a416ab60fae1020d4fb5ad75db5b982920ee75390d5c6a842c24cb6f8200e6e8a18d180c8c2814472ca2449b70815770e45da9695f6fe54b3e3adcc85b42129d3524fc62cf3001a1b73086105fb1ae7b554252a0d7a2f1aa3d28cdddb870f96d6829ea0f8280e2dec9690d98107a1af756fe5ac1ca225ca08026a443673671edb5ab7a6e8d9e41327134c337985c472fa55946aea9c67a3cccf8999cc255814325dcd74aa64848d9d12e25596e8ff0fac9e9d2d53b9c1144b95ee856b58daae8ce53cbd5594515c7cd2582bfd289f455b6071cf726bc4e115ad0003397d4a65393309cfed1e05d0ad96aab5da0d3f944365c6d52fe761aa6861ddc39b05b0e9c9356662bab7ce3606ba5dd913e040aef20ab418f8146642040985a5850504e164d0934e410758f1406349204eaeecbdc38b31242ab45a02b11f03a114100989dde0cc58d295825ec70af62648003f271bc5455c66c34684490ce8a2876f307013c6da9cd446dc1c0fc187a901cddee0d76d90308733271251c9e187b64368b55c4a2399f80befd63d58152843e2e82590375a9448e054f5e1c74df0137a743b40734a3d5e25efd2f60b27f93817389a126bac7a81203b95734638fe3069647d4e8c23f9b239c3237725b8442bc9e4f8088e734fe50e25794e41acb2d97e58e181c0d54720fb20c7dea8f72c21f8573ac73536d2370e98b91f54eaedef5afa2b10c62ad7724811b73e3b58fbf5b0655dac128342718afa6ebbde6777ebdaec395de9b2972740394c41db1b0adf32509ae527b54cab20fceab91ddbc7ca0194164a991b749a1f4e070aed512c0c2401657e26035f05d07815b3521ebe73e0ab2e7efd64d8d0c943dfd8ca003ff2be2ab5205249c6cb950ba07507b266580de169fc3ba6fc456a65981f45f941fbcee46f748219e963b3925067f34b7a424ee27dd4d925cefc9e9b73d4911e43f2e72d8f3dc3e07ea1f5527919651bc190c4657c6911c21f6295df8223ec5246b30629cc20c57475becd3ccf3b18eca413e2d780ae39c07bee2815529e4f46e08d9cfe9063bc00deca2c894845096b6c6e90214e8c5f0305ceb1700740d8bed3925edc16c082f02af0b979ea56eb610da2543582eb13d3097bc3b02fb351e11e3853dbd8d0c2288e971db75b16a8d4ab826b9c25489934e378649dfaae6a7e19894a08420111144b06955d8713b2cce400ebb313e377bf4ce759425754b85bdf38bb5e759f050c363f233ac92e521f47449f0490fc1992fa29bd39a3b9a39c3cab30edc69c529a23fdf9599b2c3d88373d49b48a18b753cad986396754f3f2c8ecc3be747d70776077d5391cfbfc0d9dcf1c55668f6a76ec680719c5364aed6954885cdda84f9e9df9b176ef4a1ce4c30dba469835b32aaa15ac201b143de720e92e71f4c42f807ece8c221d10270f", + "2f41f87098fb124608b0a8eafaf0668e76ab08def75d6bcc15786ac384c5657db5eff11a42af55b68464063b8ae0542cfa7949386a09b24b3c1e1106edd8442d47b04a0f4e74328827c6be913855ba36800c41ab2fb1508e5510d4e6d16417e8f6d86cc0e2c9c949f05e1b7feda38391d5c86250a2d09a46a6cea14562a038110fa8119d7b9cbe656bd71b10e26e2a27075ba5f71c866c74468fd8f1c9da249ea19b47a574af0abff232d037d39ca9f081f15b87cdc4e75cdd315812d80717cd26a253bd3ccbd065c2e94eabc30e650231eb2921298d0374d103ec608fb2266095bbbcefaff8fa45fde5c81c7ac6e12f3cf4edc0b678083d5d50fb7ccc0705ab9daa1d7e36aaef2f07ffb50a63e59cdd7ec56a6b020af8c4e1eea3ccc36789eaf4e45d7cf1f17a58ee1c5771e7a2358040ca5a2f9960bee8bb6075c675e4d0c870b49d925547fc789e7aba837c0019889f74a8b1c39dc9b330c057de0726d5c1d2e175be3d4f3a2eccb72bcc2e970a58f832e4867a974d06946de61a9777c97c3776bf0ca4f05c3151a91269c72f6d6bcb7008bbb37be667a284363cf073773d245f8af9893ddf07968782a33f1d18839e137e8d2a2c79a3b83cce500d686173c8a363c8fbd23a3baf560b1b7f1e2f44b8a5decb36cb11c955e610ce0625618ecdce0104d80dd1f077e7a9372cf3d4b702a8c84cc1a50bbfcab3756b762a3ac4b30371d4cbda9881c0a977b123e643bab84652eedb7949c6eec6290bfa74451dcdb9b2d8e6f0d19daaa6aa6c9282fa7774e187b68f6527e9a752d050b60997ee4fe7ce40f2625f8dd887883865c5b42d6affa21625814fabf96191810e3f2beb717ea8aa0fafe49a25499b13bb38978d36db759851f7e865221935440847183042a62cf26cc1a57c50eee34ae4ab1f0bff0034606bada015aa19bc021b049fc38f8e160928bbc73afeb910545432c3a25caac9d1df2463728ceb33efaae3acfad8503609398588f4d54ac2d480eecacabe49a5fb4953ebd56c52ff70aa2cbc32ed08fb92e175208595264b54d556a7994ed61ffcf0cd8a3c11e44140dca36870399efc30664b621458aa11b62b8b05f4b8531c0fc4b373f593302c855770c498dd640759cc741cba177cd0505d9aeabe57789ca831ee93b06a913e6c56fb915c0ced04abbc58bb00bd07d3c193c515c967491526c2cbbd394260fa777ea4dffeaaa806d34dafcd7792ffabafaea2097c80216ae59e3edf3a02787acd09cca8ec0d6200d7c0e897a20c99eedac14c25daf20eebf1c92c67fec0e513f0fa9d16782d4a28db739e28fedea8fbd5fe34fbceef3fb70aa19c8bb9da3636d8c85837b3ba3ab3c26485a0f1c3c8dd0173c9b82e770a2d54d9ab1d4ea363d4bef1c77cd966c7872199d982a6621e016d2d7ce4718e5d82db8850e1c1f84fa8f4832218f06835f7caa80908a61349d4e560cdb0def6e3a43c96e26711d262e3b86cecb103d19603ce49fef7d53ad77cec2330bfe8692fda69aac580c0d5c6be313cbe4e27d842e3ae961e84de632e400b0a5bd4e3568d92f5b48333200b957368a6e71abdba0aad2287f699f2a39fa29b60beb3443d0911ab7728268176892e47e2ddc01d310497f5e455d52e483457b9526517a9c2f3713c136d5a71c479c386bdad03ab1bc18cda2391f95e558eb4edaf6f98b6d3ba2856d19bfb7deb202a575020a759006027bf41fbaf4383be350ac8ea8a26af38d6be193dae68d4cea63f61bc3d9ce6579f46ae1fa392a103369dbfa072a9dc81e975d54e936897dfe657f1f773f08ad30a33867d8715bf4877d9d33cd88ac29bc3c63165bfaccba8584e83c489b35faf6bf2a8a5159bd7b9216dfdce967e01ae9de47a567de25e3c1e89971ed2cdeca74fed70c9f3d176eb080fa75956b38c291c00abadc308e4", + "a235e8d07312980132763efe82119cd9d0e6512c3c18f89aae9f20d82f95f52a9c7a748836470fafb16a6c85d5e14e72095fba58813b6210142bcb3c055cb2b5e7789d3ea8affe722f76b063a9de4da2cf2ef4b03c6906bd59cc29eba21b4e0fc0f6078ff3a37a75fc4c81f5293cdd66d71762535d4eb36801c86d966ce01860fb93a9eb15e2d13984e473dc62409d37c0f57bbfc10bddaa724faaa057604f8d3eaec708600de32a75ee7c3667c2c89ac747e768b8f82e687e8d52e86492079baa6ff72bcc0cabf23355f725d9bfea760de582148ecf38091c129f2e9b2321961c7a152c431df2abd58569ae4f6d72816e3a8ed9839ae37a66374797fba1e0c80a27d5103d0d99a7dffa23451dd3b9342403f561e9e1cd612ababa1d0a07da165e89a630a6ae22bc993649cdedec6b0d982d6e6040f772eb6d63bf9e53d054bd7b9b733a94f9002b5c67e1161ac1d18a20610b9b2bc41bbcac9e8871c93fc54d71b7226a186c22ee4bc40bbfad310587ece12a1d44c5c97118fc83e90357aeea0e76ec5bd6830038157505b3b82138f55d3fc1426a0d0ce7cce7470a4b1a0e83080753b41805c34299ad143e358f6a9975428c62308a70057ff5f22f967f3df40c3a50b4be9cba03d5176f5bdd134ec35be34225859cb9c1bfa5204869d851c2ac3d6c4adff63b2d03449c0fefa58fce02072fb1ece3ff4417608b8f180b69a68fbc75c0a957cf9e211881590f2c58cddad8f5ff86ea3158a0f0983e0e8b4d29eea7412707fbcd1bd379487374f073c2131d7afbb4dd9a047a0b8ee00f00c748a5a4f5ceec41f6e7b6d77e06531c087c16e5d79a59af75f68534428b8a368599922914c520a633f2edfa8cbeda3b624ef11d8af44169127d917b9294ccb13ec3212b3c07e674ae7d9d21d0a6ce3d5a281099f0d27841480ec7b1d947e43034711ca52d021d6cc7591f18ab41d6c28516cf39cd66536f8f3264c5bef683f5d560f393778084e17d8dbff19f00200e92fe98b23f28ff2f685d953f531aa8822a39b6f4338ee1cb9f39c1b0ca6cddd8000d9bd7fb109497fffb291a9877cd86d8744c7ce667445f76bfdb33bf70014ad7e6093b05c4ce870ba9efd096ad55ee7c0b0a07da709e43679cf971e7612492c79e33b230b2716f5e77b1f5d42d62b9f1169b1ee0c899c98b3e19a9d676ce1011f8a75cad7f820afcd8fb7b0740fdf657a164362c094acd43bd875ed4180f3ff337748d61d4c708797df82fd11c33c1e8c4282c4bc9631ee19c6570abef3d90afb5cbb5b80304900df436b4a30b9815ac9681c192eb7bbdcff4cc3a41dff0095b06dccaaac0282683f208913b0ae3f39ccca7977785ddcfa017cb6f7f6797f1fcc98f4d1f33713cbe67dae16bb51edcd007a6ec994d722a995f1bdfe94ffbde7108b352f342c570b9cca9194dbd2eb1e9f08e5c8fb2a530b3b96da7210c64c2990ef2d5507fd8802afc1e45577d184f02eb15728dd383f99be7f73181cf9938104c1662590c4e1294e45ccd6ee73021b270e4efb7c3355e1e3d85c182610646bd2ab347b56810e17801db41fa9d34369ed75599be73809284ee611940dfcd81f06030cf7e1dc52023fead8cbe35fdcd5cbf2e997e982ef77a93182b7606658db29b409f7e6c3f535ab8fde91562f01eec4cf3fd15fd61daf4cc830d056779588cb619cd739c3f8dfbba2d770f0c1bade01ed97074cf5c260b5e89db91bb70685dd7154f22f8b5515330ade5f289b029e93d2eb981af9abe55373e8ddf35fcfeb17b0e087852ad02ded43e6a4925a23a791026332bbea9aa5f0e35f453ea11d00b2ebbd3a90b1decb0bcbdaa756698ee8e9f03f13f3340d9f16dcfc0e0d39682d0c0a0ab00f595dd48e83ed1c38862bd788ae5e78963eea12e47a68bc45c993aa6d180079b76c2da681d7f", + "684d70c3f833a02735d8b8636a6768efc7120a46453f207b3ab8aeb7013838b5660ff6f7a1771a919501b9c199c93ae7e833e09bfbdbb2cfbc1d73d808fc27ca0c54760ddd7038eb7ad69e79586c8682d0a27358afc449b4338c98d9c39782938007fdff8fbbf99aeeed515c507983c8e2bb6af46bf3d5810070220164e9e13989679ee0d730e891537b993ea8831b2f6a9670982476efe9e016c338e93b26636a778f2d00c3cf8ee1f619e8353c5e9d7bc3beda92ab7cceccd2b5353fe44263f013b7ef74c040c50ddb30ee1ce35199451e6a494164903fc4cb4aebac8c973a6f4d6b9b3d730ed346f398a7ee40822f4791f7ea7ea30fc93faa046603f5f1c92f081ef6a7a4ef7f030000ffff", + "8c9d4d6e25371284afd2d05e834c92c964f65506b3f1b460d880ed8d1706067377235825c31541b5b5322074bbf5ea55b1f227e28bce9cc266230f3eae588d2bb78f56713e878cad0e77d2b5eb1e83772b0517b26cbd041ab06fb8b0c9fe23e9133ff485e119aec148751e3add23c7184b067c9615c64ce3fb78143c00d9a7f61d54dbc2c12d05aa8fa9eb645c181986a286710044f82e025959d6619e3d269f1caa5dbf6ab92cb726f50eb083fcd8e28eefa263eeb387cc6278d97eddc63837d8c4a1c102c7120c93c712cc2fe62d55f2af47f893df729bb84027151c428c6182c73c16365e855e21849cf05cd3df76fc92c001df4b3d3187405f9b6e3cbdce892f9debe6d300dd66ad1eeb802c69eb0985b8bff1d9046413ed0937bf49c162eff6d80e37598c4f781c19d556a0110a7830c186569c11db29af7c94b15a97b61b690c255aca03dd6f134f9c9626c711ee517b0ff7684653482b0c60ba56545d194e0dd4b153f47a18282cb9bd0ea44be889873cf830414fd51162b7ce90f7f3cbf2e8686cb02c9b8aa2260adf1017080ab921fdde86cd4afe071a721e60e2b16b5d87473aeb6c901d7671adc0dbd019627bd2659df57d1d2d3e8b16ff02e8eb47e89357a0380f4c5053a87079b80da01117f862dc3f3a10decfae6cc9535988ed5db5ce786cccfa27dc401013b95593b96022c5863baabe96e8e03fb804ad802795e6fa04223d7a2ede4d55525e640bf1e2a80cf9728b35b5dac3c7c184d8d6ab4748c76ddb9fcc4722b6f9c3588b8881774853818d42eba21f61c4db71647a4315fb60f5a9d79a61f3d09ff792a33233bac2c7818499b204cd9a827c08859846b809720bf07810f1fe09d971edbfc03ad21b7c2c3b0cee6d4e339fa2ee1e10454a6fe7650c050009560679d5d2c5cf8fcfc0e7cef226d7ba3b0e0851125e595a3cd1c268910df10e2d040f1c8ea9578abaffb0e839cc262ecb380061eb9fc1356748014edeecf2f6c12b94a76fe84abb89530ba24ff1363a6c986a05b53597b0f61df0022eb4dbda2051a9d431e747e5f519f32b7aa8e235e807a49ba32616c5ef134c7491b89a09a4c5d1da365d6a201487812cdb1db7bebfebbb6ad4ea520a2e9b4f83e977f82601ff88c9de1bea7e6fd246c7ec52f20ce80605f1064544c818375bcbc5c39c6dabe6899ca33899ac1c1c58209508a3316e1508257402aa9cbb26a32c2dda90562ed47bb908f272f5525d0f804dc664ebd61b18ce72131d9483cd56a5c9ec07ab8e21612d51033503ddb263421fce368f39a231d017816393d0f90d5c4061e4e680bbea6f3fad7fc152b3e2ed558ace392364b133b0e217a9ca1aee021f3edab26120123a817a1cee4fb558047e0e5fb105a9cc1842d26a128003a410bde74787f65ac646387687f0f456cb25d9800b461fc59e8d5d4c13632da6e4c06d41b35882c04fe2e9842183b265681604502153beec3df6d7baac8c8d9be70ee1ac55d5c8acbb2cf212938877cfc55d0afc9c229b181069c8687fd6b2a726f36cdcb8ee22f4900aed645dcd477efd616b313cc8f3d949dc2f98f250ec037b5cae8909a61e3d3e61fe866ea464edec0b8fbccc4f15fa7ee9213c97c936783f0a5c84c24a21e205395d5e8f5935d7236b2e36d3e160bc8a1a73a2abe5e5c880398eea0a5d311febbaeb7e1b70d58a0e1cc68db54cef43f2b65f350892f1540524d39877b2b3a7722ac04016d596d594bef418b8789438a2de139a29d056129ee5301eca5307b140651eecb26d085fa081f6c2a2a9160be44a7ed39d7a1c4388a26b64101a4809999ad0f4f3c328a947b711ac0fb50976c8a14547c4bbfe1b7732310c67ac5246f1ce577772af4769f031b2ef4a47c53d4e5f2ce30eaf2f26ecc9fabbde14dd65437174cbda961dad59", + "a211bfaa85142bd8ec2a8cc4524e9a4a60a866c9eac0c32793278f7772c3de2083a7f40770a5075655ecc64790b2fae602631f163d75836f5c2aaeb99a7c5475605e3563b50a89ff0a1f5d645e707eb39b1b01c72654fd667db9e98e3f31ae24735242b0ba785d588b2dbc9eee9d898b30e52ee16b434f1638c2f915043543e52704118e1790f1b0b3e1d0e081f16915e03df0786a4eecc2afc676f66c1ef6192013243f619cbced109a4c16f89cb20cb73337528e6e7c2d325986967be4e03923e0f7328982eb4dc250643f7de993e1bf673432c26038d1f214750b863554223c2ff00859fca00ff0a6a4ad132a0b57c059b0dbb078125b2b66c54f27d0eb8763184cb74a3284e18351205e6161a9fab7dc3e43965850fb79ff534ded8003d84a4d98c12139c5cfbfdcc4128154d2a9350466415cfbcb74fff8febfc1bc3d24c41913709bec8c99b02408faf40cfcc52f6052748d0a55704aecc777c6089acc740d3c1ccfae08af352e206282d72bc7ce82254fb4fe0bdb5cd67813e6e0ae7c117bc14ed9448eada842cec23346e1ddcb3af0e7798cb12d2492628af754b12d6e931a94deb477345ce682f061aaa64644ae95ce90bd974f3e6a27121d055e841c272ecad9dd72fd026863990c7b6cf9ad590196c0a23cebc8067afe14a427fc0af7cffeb3fffbffeb8ffceffee1cb6f3ffcfcf6dfdf5fbe7e7979fbe587b76fdf7efaf5c797f7ffcbcb4fbf7e7bfbe3e5eb97bf2ec2dffed0d72fffa67ad6817290382bd01a855f33e07417cb41e15193f48f3c98160d710a534a7d68b104498d14c5a94fe9ea1216b31562f40e809c5542b5a33287fa867b6c2c8fd4c3381865940c5d3ca4915cfceeaa58de6333ca65368917068fd8f70b36849803a78e38e0fa78467fddee1d13c23fe2294b5eb8a9821b8423c94c70d3724227bb63163e16a709e05c657d50ed798070fe10c94b9fb365cc661a1918a353ddd90a159e20ef77864c28b663abdfe4a5df524c6df8fba2d9419cda2c862dee2c46f1c8f625de5f00dabcb34c0d63fba0a9286093620205153e8313741651a8ae56d324450943bee507863d6a161e938ec6c37634bf21a161c8ce338642b56ca2b7eabe55f5bca033ca6979f79f0ee6c423947d74195ab5ad53593cf0187dc896142a6841c6625bd1b92a5ad7b882cb0f70041bbf642199604def1a4d4d67bd460e354966c95a7f671a1533a4d13322b84f26ca7bca488f04345b4d5b199b3ca7f518fdd922ee5909225aa939402e83370e3b40de169bdef99fb9022167a68a3010a4e229a98328b7a9f0e9914db27bb62c624e119342c8226844acc66412889077d348a0402400eb9c669998924108786e2d5fdf391dc853196a7a5a25d6fb3562a6d44318af29ce686b51f8daa24513b957051b40da86c50aba3ac7aa2615782f71cc81672f06fbbeb170a21300874fe0ea300a4bfc01cab3ce63f28ec74563a1ace0fbea4245c1b14a03a09e0380a12506ec2e711510eb4d96228e35374f91560d0be9f12c6de9c3722877b4638a27fb9b0df11551f456f7f195c9f67c855d01797a6b7a415827339295930b088c3b63499a2f3e6bb1182a3ada0ad10022f3ce24bc106a566961063228ba36b8d38618070dda4889c42e2b41de6da0f761643a2165543c7c83e93cc43a0a8489a4e7ececb2a9eb7359b9e1cb8916a6c40e0ce0198db2402928e19818dfb300c8da54ec736b929373b546cf8b084ab8f0cbf0de1c3db58dc32e4ed22e079472c17547565f829781aefb79fa9faff735614e9d74381ca0926d89bc4ee9f2a1ab507684540fef9a4d134875cbe9aa118564710e3b692b92abec75ed2a749039ab1f92dfbc4d9a2dc59c6da5b49798e6aae16a24e4535c02c087cc6b0587b3924fc485293ff7fecdb3b906f84065d4b56bae", + "72beb485fb434271d0c74ac4562604adf40aaf6a12448ac46f76b3ccf20c950a62bda6cce48634b154bde590dd39701299a2a2c71dfff8fb7f020000ffff", + "8c9dcb8e25c971447f85e8fd0011eef19c5f11b8a166205080a88d160204fdbb7022b3055db328557343a0d8ecaeba9519e10fb3635fb45474e1c879e5b7bac630b776d413a2a167c36c3555d571629b2db881bc0e15cbd47aec726a7786c7919a2b555614552aeebdb7fd9eacfe79728e88e0922de24457de6d9d334878b6efbee7c88bf12787460147f25da95115bcfa529522c4f0a6e60434359fd1ae0f1fa88d698d7dc5189c361e87c7b65d83d477b39518be5cf31be2680dfdb73a9b32dbbc4fd256b5b338818adb4bd3a4aaa83affab0c8d7553c60c749acf2d52d31d10e6a6658d237abe4996e7ee1e48b480f519276fd86c26a8f80d12b60feacde4b6bc2dd2c481de2341fdf382eb3b3d5661c09cf738458e40a57e07eb34518f10c96564070aaa6681457b98a8e9b86bc3929f5aa4d35c63a6b32dfb590d5425dab51ed328d238cca681d738ff777e535dfc4443ace5397e944ed187b96b89fe1ed6c7b377317d20a0bb62534efac0e2a1bbe300608d6439369b427dbff926fc2ca1eb5a53fd86d3c6caedd83afaaf74cd84bdfb103ee1d2b889b5ae5975fe8bb155b134bdede293f593f3b055184d49ea17315c1acb42ca6cadb7b058024e12bdf5c26d8595698875ad232fd1acec9a410bebabc0c6df76039b9f762839a28dadf076ee3203bd9f10a4989af80174c9c46939d1159b7f70c3143145ebc4daef119e300f1d5b305381c756f93d127f2e391d5d30b8aedbe5c6a3a595f5854832dbf89f126319980e11736f062d94eff6eda78767d35f9b7c64c8bbe9f60f288fc90ed7443f23a54f70c8dae0338177c8d57d4e7895a60769199a57c1ecd0e8bb93e9912a3cb2c51c7a069076b186a340d791a8d812bdf9461221deb08d62e3105a5a12c141b42b8679aadb671806a850b866f46909f4c471765b75908f0cccd19d917dda85c8b225ba49a8db1a3aacad48982fd95803304eb5f5058ef86ac6899c16cfd23860d4c5d4fa6634ada7218efc6a81b107956696fcba350802320e2db6590d93c74b3903ccaa2cac69009cd04a0353a7fe54205d5bb54deb53985a3c60dd9ffcdaa7aae3bab76387159f2594e00731e96482b7f0c9244e13f5b215215ebcfffe08856344946e90b12f9e2278a23574ba9d3196c3bc465f9f76d167b155d65181eb287cacb56db5cd66c98c35f0ad2cf681f52f9b78bd7db6158c35b8d455c94054df92a9f1388f9cd2d76a60fd36b9d96ea901a2c416377d06f90053e14063954b9070749b2d1c338945779699b3cc0bb233a71183d0ed848adac09eef6d093bb34bbb3b190a56b3deac412883394299eeeb7a00adf8d4a878a8f9167233f8350f936090bb6320aa5e54b935eb5c7b2812a47fba81ce9c17a79df57fbda8ab0f56eb6e167c9067d22ca3c4315922ebaf4effa5933bcf87210f2d316dfa07214a0d1794a026d7b30b2b5c99698ca419314c61cdc96560afd249a8f52858d84036c8a4fdc86a7ee0930fda8bf6eb645ce9166d0d3cd146503d4c6e4f9be337a30016f2c58c95dd3b48697dfe06afbf6e261aa5b3bda9bc54ddb00b7d6f6b8cb1544fdd0bf78ac2da14b0bdf5b8e128a08de82065d7d4c6bc63e4556018cfc0b63e6bf758cae5a947df25a70f2357f334d8b6f9f53476d6a3dae6307bb741ee51e359137d69b7f9986c0cc89a40f37907ba0cb35e4210581e86b5fbea434186078e60a8d31dd6e8e2fe70cd1ec98e4bf38d0f67a787bc863e1b7b7d77c1144cad29fcbd995a9d31f777ae519bbbaa938e6ddbd6051845a3eac7f00d58e65a2317683a3e6df56dd32a4cfedd5570dc956a2f0f26b69e1f7b825eb733d1d0ac98bc6472669a5075b392301ee138c21d2d169a85bad560965c9c5cf6d9e95e9768e76ec16f6c9bd453a4178bc4033adc3dd30e", + "958da1b4e894bb9df238ae4b0cc307006ab4619a4d629e85046672a3475223a60555e18e91191931611e48b59ac1178f6bc03ae04aceac71c746aeed98ef3ad8b60d0337c7e7d4e945af4cdd729c489366492da71a01413ed4ca5da6623da951b02dcb955e0182a9d066b7adc155c4c7d5620d3c3a131bbf53620f9b4ed91ce47908d641309825847597a6b591d1b1ececbdef2a66abbd175b4bd466f7591e47ba14d822337875791c9e3a9c21225b5f59c683cb42c4eb6cb98c69cdf472ab2e28295315acfba8c8b7fbf18f02c25ba24ebcb15befca4adffba2a2b065ffb160669af29dde6599aba2ae93a5375c4fbe0d6d9941cf6b0b7beeac6e20f984f66c8de8e4ced3b8066ee65eb418a55c71b6660b0d8d63e66cb885234451143fd7484473dd0c0b16bb73afd7733dbe5f93794e860972fc60165c6ada3525df5387d6354cabcb40c6e85d8932d9f623d7dbe2a02d3c15ec5a9e55e4601767cb4db5716b85a01ad7351c23cec3619e1d88c6755aff80f0d4034290d005a009ebc6e7e8462b662daabf9edcfc0ffa026f02826da98db762aa891f059af2aa17cb764374cc9d670ce63ff0d80e7ac257ec917c6b3246d29b0415ac2b9ba085153314e9e2e2bec33c104f5ac6b08362901760eedb51c2ed280db28aaac862827089fc663bff089c4993b7e76974ea431b1bb25feeb5ba117b99919096d17391ef5bc71349973668cee82b5d64bdf12718e5b803c7af86d180e8d31d237512ccf46f20c85b9b3168e9ab0e67604c10bf3ada5e7d6ae90def6f0e17c6b7d99bcda661b92820844895599461c45bb11c5d89a1d15cc7117c5e2a0b99c0602cfb9c27da9e06de8939d4569fd43b7a92ed9c115af154b422bae53a14293f60e72ea6f5e6615cb651e473b1315703406004eb934a62866366304620c849b9e0ca293a1d73f6f08e84261a31fe2a4b85c41c0119aef8619d646314ac9e43473958daab2cdc7bc521ade97ee83bdc4bb6575b16353ad62e06bfd109dca36200a5ac4292c6a9e8630d0c1ecd649c635a4983de294df403834a476ebc04c5939f593d36731e6e94d45e600b6cef4563b5daeded02466f9c1efafa901e9ae075f5430e569ae67e45f4de52567c645fa58a63b3ce524c5edf3b4a620fb9ee966a86886b0dbb1460839961ac0097dc96e859639388615192d1c34e485b7d7db9c1674fd77d8e1b7c5b469b2039b985745ebc846eb0b896b571c25a7df3b56b4ecb57bc4d210284edf615323c0235f6b611dbf2bf49c7abd374dbb42eb12ce761b6a60c0712cc35cb38f61987da24540f9cab3d08e78449968f50408763b61b7af7a1a376a9a9c979dfee7b58975cba440a19f9ff7fef5f2fae573f79e6ca86b9684c278fba655bd681dac0c6deb8848df44140831b446e67f8d53605137999c1b44377d07d0f53b451b75d22abe79293b983b3b7392c68a0e988a5ec835dbb93c99828f4fe8dcbe3b7eb1eeec544217f34edd30084a7afd03a7d908a5f5bb5cd0bcf40ca319c8f6d5413427bd6b9978289c91f56ce24c222c007b6fdc0bce6373c66d4ae92d4c02ba250af8b182a0813d3cc29068e260cbf3df0d6bebd5068846f9a6f3bab81e10ec93e756b1b05e7859bbf07fa5fb9717a14e3c23574319a7c9798967599cf13389d50590037a94103bcd50c13676d56814303fd5a35bfeeb59d8c81b4c8045f7be3c8941f952b6899fa7b44ed4ed60345efdaa4810fc0d6ae155146188c925e5575da2363ab2bad37107462bc187116e4d6a98f66d86044d1f9e93efd199bce9e592e1156145d11937d4d93b4b2eb8c2d67be4fdade03babadd0bee52ec4b2a056e0e2354524f293d66adbdd4d3ce3364e4cf18ab8d08a7de2ff7a3f4f9698bbbb7eea43f528fd94481afda0357b1fb758b21bfda15ed3dfe727e425c", + "137478fdbdd078cbc9da9164ea968f96cae2a230d04d0b1b87ebd7bb1b3669a3db252b3022352b51f3aa5ed51bea304da96b2759d321866bd960a771405a495f4e58b595ff2cdb2c4332b0073403a5f11aea53c016bbb93076b6c1204cbedd3a497696f2830c0c55f74f5abd0c9b2f90426e5ec6f3c72d9f945984f5d6134abe42e3a1c5ca3b7f3d7410902f83cd325b68d51609e39854b5d76092e812b5c7f368f22c8482969dcba87a598e533dd973b6fb11dffad381e025b7127250bfeb95401f6f14f7330dd5edf04516ec2ba2b7ddc5cdaf6bb6bee86c4d4cc2105dd1503b904238451df5a1277f65cce5f3e3958e6941a3b7bae596ce568c087ad89b068a994f12a624ea2644fefa4d67f13311782d73335c8706202566ea5e9030f26d009bc00968353bad6116752e125390d335eaad99a485618c4a40af3e3a5c80b56a180fee3173c665edbd15bd12185be87c839fb5e83dbb3c8b1e71890188dac6fda6caeea22889d89ba44b4f871fa4c31b1d6c8c1dc6deabbc180ea2ae31d3820e07e3a565f62dbc33364ac269b7b4b94a26a255d70c0b1d40fd6e83fcd01db96665f058d81d6a5a8b49249f9959d99a2bc360fd5379fa1a19165e062bd66f420680b8db6d324c829aea31ed8bafe67db1ac55afd6a7e4e191f31424eff277ae30dd6901f41f5599dbe0875535b8a37ee235bfdc2c5e3ba5f73db5ab7c6d03d7072c3f4d356848e8977ed2642bb5309716434f77aa610ed19a9c74c055141fd13f91a56f63bdbade8e27ffb3d4fc95a7a2f51cee67372de6531e70e3183410e09012f203f35e77f4d3764e713d1e6dedcc0866ed765afb0ef191a0a35fb47399b2c73eaf00cd63a7ddee6bdac74514546b1657d38ac045af77c06f570ac9237658a6ecb0afbdf7286c14ebb7507557e5a260111a0e820bed0a66ed965de76fc6d706a7ba0673503bb4bf30da63cbb3941557513ceab16c1176e5ee11595cc1cbdcd3e159dc5a7615a2ab0c3d35a0c6dba09db7c67d4675acd48924730beb38aff3ff324948d6d80fd492a84e74d9a112a3371602d5bff920cf2e5c597466a47bbaeece6b2ab701a32b650adc1025a824aabd8a2c16c27e039b955d7af0d56452628143fc0c4babdfb3dbb09a00409e491d0607b2713db1426f735d52684efd6058376c5d82d4a5b159d723aae2ffea3ed23cbc38fdac99f32bc87db26e4f5764549d3c955cd4bec6b4c44c3fe55d4efeda62564cb675b6a8a82ba615fae8e867b83a7a56abd32170ae29bfc1c1a644b5097c2d6581d33875ad7269ac1e4c315deb891977c0579844eb607a08a6902e18d083aafb6111683d52c681af992e48595aa71e3c69855ae411c9ad9fff68d3bed3089a758dcbe203b5169cdd8b26a8dc7770ecb97cc83bd05f696edbb1ecb66299e6260b7d0ae25cd61653256fcb563906c8b43fbbf1b16cc7ce18610e014651806a5f7b77eb9c36c7955554493cebb68a9eb477ed75f95d9b668e888762177f4986fd5dc6080093bbf5bae8946a35fcd328d50fec396269578c455ccf5637aebfd74b1be686a92768dd306dca0e78aaffb22fb45c719ebd4fe1da9e8434b2a7deaefd5853e54f0269f29d4c86634a60bdfbb8e2c993ca66f8554c46b6f23ba875ed6978b73ce289980fdd41a024bf6021716e34db4ea29cb21d0024686d6293ff77d34cc6abc8fdc4648da275356b109bba5d679f13f7cb562b395e6a73dfd3c394fc060af328cfe228c9f574e6d576ba32649cd54c221a337c1d7a422857eace0d89bcc772502318f598bb286d6bb8504468a0136248b3e9b1e22fd506c03d3d8098ebacdb197bb4bd2e59a4b0efbab7446fe88f07b4771f01276ab4e6cda4e0419ef12b82a9a11386bec34153393f7fe9bf7d3914addc9ca6637299ff13e7a7aaaf47e69fbbc6b0", + "b00a348436e72b8d41faaa8edc9dab9a69a39c38953dccef7d930230c58c2d2344e0fd7daa166631af75201b579bda1141355b69995cd02ece3da11df6e8e08bd3bb0925f65689246efd344e329494de3c28e7c64a22b68ba3f857981a1d6fbd36cb48b7b63bf070749a80ee2af148e6387a5a2da8a4fa11a8a8ee31fca332dbdf50015f294f44b89006a5aba5062f26a316d5c0fb6462d2ea32d908c4019a72c036c2480ee5043baafb981f69576373e269cbad88678683b61e1f945dd610ebddf8f642cb15a740cca9c9754f14ab1905892f3603cea8fdeb7566b29bb40b9e465db79b465d7bfd1e18d6b596401267437b26695ba7a66b2de443fa3bdccdb3489d48f7c693550bb401d9a952bb13606fe48d6bf35c9367c8646a5c2baef1aaecd40cf5420c49b554bfd2a912b37df7575c75b03fc5d63bcd39d3daa80a38860d5f67f5ef00498c1a061780a366907c2e166bd5f1e3781cf62e9f82e8a7a700b3652be62c111e3f5e551193c494eb08865f56358c107328d59e5c6ca0f71adda9153f730e014eca41408761041a279c3e09017368c85fe9703c9d245a7bf6b66ce02512b8374439522a7a7ed1db2324ed367c59a830e835ac982d83e5ae910f14c39a175a6d57acc288d597b3b6f8347e3f748141dc87d2055a5ca2642fdb8360fb942e7c38a847db9d14cd55c16df059b4de6088afe576f5986edd1f8c0b6c071bc832d380e29b0e4c21e18434b44bafe8edcbf1770ff30f56c6e4b616a880e24b1a24617c82067e36308b3c381379fbbbc094dc09941571977a5fe629bd2d6f199dbf1e2e7114c63675c99ac5009431ebe71e1e1bed677ee53b32dbdd3c1cc6e0794da8b32ea790220a92ea65006489f99d09f6b5f9711feafa81bdb27976218b829a979a8eaa568128719e01352b568699aa31b9f9f36ee09204ca6e5e4b62558a4ab9f9cf66c0b38cf4e223e672f083fab3365436dd56fe80f1b6f1ad18e99735ed3dd079ee2377caa80a4f6b87ece3cd135a3883b2d54047a5101d8e59d59d5e613577354544db45cd8fe5d07e145fc32446331921285a5b7d837083d7adf91d17e9355e65195d0b405617f542b7670f69910fe884dc93aa03d5a7e03eb1eb432f8e599bc97f068231197b05a2dd6940b46411686246237bbc97df58ed9768fa154cd8301ed98df9140de2832f5e999e0f7d6b8083f4aafd094e3933e1d54a01a1d8295af2610bdd9f44571b575f2b595abceccd78562386c1fdd8e9ea1a8a49d3b9f10c42a7c4e7af27be486871a1e97b9e9ceb36a8e92376d50f3379d39df2947b58217050579e9d97bb378347759a6df5b05f61dac8585b2c5f37e3bef240cf514bd539c2802d3c4c5ec151673fc3497256843b7b2e7b1abe709b3a4cefc00cd3888cec4fcd057b67b03828f2b5b3548b4abdb2796ab2ce916731c7689a9264edfa3b8621a1cc2680d502d94d16fae539c5d6665221d910658745719fd6a7185e806ce4b43d67e56eecbe192734609b338ea3dda48a35a99ecd76b90080e4b7e0866b1bfdd4ffac405381daacabda7632676435a58da5143da34512b92fd3eb6ca269712dc16b3accbd56fdc609f8fc9da4bf3a346193126a4e1edcfe17dbe405a7867e711909e6eebf250accf09e59eb71cbaa0b866f4c16999d5cbcece6af821063b31fec8c3a4cc67f5fedbbbab9672986fa747c4f606fb1322918947719f5932ae490892ff898638edc3aaa3a7a7fed3636b1244b15b6307a8a2f87e4ab8ff6b9872e51c8296da1f1717b0d5a6f3d3c31382901310efdaaea8292bbd8fa0520929a0b7f55c7612524a5d9f4ad142fc631219bc8aae5ddb616ecadd2026caf74519d99d5967ea73b6247c6f65f0eac6f70bb727c14bbd81b0ec1c936cf6c2fec456451617a00faf1d02002522feb85fd41276a", + "653537c3fe257ffe6d8a8b2e1f25977e2e1411a6643309fffbd26ee6e6fa1902dd1463f617a11a0313806a356ee62f80c6a598844983809ea6733ae3c0e4944f73378a2d682accf4e5a8874b94c4e49f0f6bbb39baedd1a62d4b1dd6d5c432bf2d78016e6cea5c8fbd9165ecbd145075cad1dad992b7a206576728b581875ece18ddb03f03d6565db63fc715695060e599fcf633c4ddeab0ebac4bb195cf2bbf4d524baa7b9f8689628cdecc4dc4c356148c9da7b8b4982f25e4bdcd7c6886f071b495ad71523c02bbb8f2b366c8e8a831fa29da8713a96610b5c682590bab13bda1abbfdbf11c9318ec62ad1663edd4c3e92685a47ce3d3b6df34ec2d3ddc94e4f886414132d03df4bac009021bb31619205f635d32da11beda3a90c2d0a6bd2c16b455cc4587a0ff182985bd6bf1b251e0683795ec104c7d90843057fb5eabbd018472b6691baaebb8ba6c8682fa641fc6a6835a51e0e81c9f63dc2c79498c91d288dfedfab7ade753ad56ceecae683cc9457e9bdfa3ebd01f8c68e8d6e59d47a5db2e250d8b8bfd0bdf6ee0ac6e567b10c23accf3334a6bbaf3f732e1d9d2aded59112785d01311c0e80cbdf9a2a19d5567e63eb425f910a9e96c593e6ab52f164ebdae4680419f6d51dc843855f76cb32cafdf78df5ea94999ad457e2764fa99ad51ad2b3fb197539f993bf9ab40307137c435dd1596bb5580509df4383337f55343c76738df4b772f63a87694bc4205380339abee03be70cb3c9be42a0aff22e1e0953f1354bf2cdf34ebe836eb25cc4a0ba55b74402d54c0ba50ca1596501a334ea5a2eb7a321aaa8d757a3182eb2d5f34d96e585fc1996579722cb97a98936c76035952e69a930e8be2364ec5c5288a3379177d5058711bc13636c18a5621dd42d3be70b2dc3e7d863aee0d693c4256e82617ba51f0ef391f1e46f56ec4b1d99b437fca0ae24a2840e5bda7e723b709e365ba283f742d11fc41e3834138cdd1f577c053395499813eb14e15539e5894e9a436099d7a5d146357fd043adad96921bfe39308f15ad107e881ef5f218cf8c39a587497700eb4d07c346986cc97e4b47723db3e73629f268e89a92d276edb763048d12c6489609c55dd0301d6d621e76318b10523c94ecb7ef6f08877d0b38be3f516530a65445b27fa34f3d19469d029d80d31be197cdbf4fe9e566cb88ba7345d35cc56c694ddc6210868979d1ccc62d51596956446631bdfe621b5c026b6866b00ab3777acad809f692e068be9020b02b7d447bafbeea96923418cb406d4ac4353d283875c00cd59f021e69704da7a465dc5d4e1bc20f6365f2346633458e3be3bbb0dc5afdb37b029d9748913f86c5c197c2e7b8f96bd28cf831ba06eeb719800c91d7665a9f0298c54d4c05dd9966747a6c04e0425bb7f978af52ce277285ee36790fdfbb5bf9efffeefe78ffcd7fbc51ffffeb77ffdf39fffe3c7ef7ff9f1e7bffdedcf3ffef8fb3ffee5c7cfbfe5c7dffff1c79ffff9e3f7bffcef77f07ffed0ef7ff9275940526eb9640f3a61494ff9891abaf29df0b2d4511d503fdc1914197b344f795e732bdfbdadbeb590a0106fc65e465b885f4366606c3b0ccd751cc83a7acf99b517fb6127b0a9aedba9037750204c90b1221f0b9a43ed656830c2d6176be41a5569faf313fef30e5586a124592d7605c3377c1a463d196429daa4a8a1be91dbbad56ea28bbae3e4ae88e001fe9202231791f6ea2861432cbf659c66e601cd470822fce841bda4c35af6adb3ea9485106b43a126402bc54ae30f8698a8f77c45f9a32f3b8ae76559eac7e864ee9bcdee7c5ba9718ee3cf9feb20e4641cd0da9a4b2ede09fd6fa9da8433c5b249d84176a7b636c6e5d2c2c113d4c48d8c1cfb9628d7a62a84fa6c044158c225a6b26113397fcc2a367f157aa2678c6167", + "edd13928551cd1bbf29d37d74a3165f18e61a9a999a0396d920294cfa9e028f7b609f2c62977a7515ffba2649696d7736fc69a01c552b41773d7659945fd244b74057a8d362e0a3190c4765006e6105d007f46aebf3f14bf55a9447a9252a0f3bc3aea30a2599f7cd9959674d153f71ac0a5b5f0a461b7996639a8e56944bd74257c021fb342a49381e16d1449f0d6c4b0b4344e573218ae5af5e0ecae3a9e89006ea4f2ae4d84bbdb1150a7c785ad6fdedebe2315b6c7c18091282fd6ea61d71a8201536d9c05d9502113048b6663d5d9e8fbb5d226cdc8a20b18d2e12af9e6c27a676fc402dbba5f17a715d98ad66c7d73b1550fc585f6521cea96a9b8969873efb5340512088d9c631018bb83da26c25e3347758487ca365c702ddcfa86f24e2f8cd5a6f11b2a388670f8347b0ca3c84ec3a346db7c4f0ac16cc541ba89f5cef351d1207735f71e2c91de0363b461986fdc05dd4c2a2dc252cd8fd2a1ab7433c00fdad8062f9c56f2f846d28d2b6dce61771ec189d3e696750257314d19dd93025b3aa665f32e92ba3b6c8e40af18cd446d1c4f17ed69001f90ea90c9ab0bee6262c7b312a5d64aa04738c64f57846470fa8228593baded53b935744d5da91d322d3d6432be744412310a36aae6b91ff637f0c9787c0755be69480f777f7bba0a47a2491b46db66089f1b8b9ca1e2a07da8b4e17cb4bab701629206141a63ecff010000ffff", + "8c9d6d8e23390c434f3440d9b264f9fe175b3c2758a0c91af4fc5d60079da4cad607f9e85632b8d4dec462694893dca2e97c09a025aec57a2d56926d199d043e87ae55d9a93efa3bd4da71642f9ecc11fd0fa86696aa7ebe585dcabb9b2bb77a63139bf8f11cefdacb6c9e72c87c0209d14a184530cecbae7f672e4fb2dbdbfcc9e81a15a94d16fd0ca5ad3c806ed3c7610cb95487f4f3f1fb0a0e35edf3723a5e240d3ca6a11f1e44722e2d07569e793cc95e76a41f19387a5e9f8c2f02d0f53618eb099ba9e2d237fac2c516a5713188ff7a7461d18739b8e90f9ac1d7b4c92594245b51ae11ce708939529156e3403b7fd903693edef7d5ac310dc21e68f1db7d8755b91407daa4d4a977b60285bb23ec90ea49cbc7e245ca8f9a977caac7504fd828538582832ad4c6cd873849c73c6de3656fe4dbfbf7b9cc9e3b5b97ea144ff994cdf6d92e6e5d9ac5c575c87e24b8322cfaf88c6160483f443e72893c212bc6d7b91022f56560fdc849bf67424d12b6d2948b675bdc367362161c76698daeb37e6d9a3f2f1d6a51151fdec056ed0cb0391fdf66f5b25ceeba564e7540cd7889b619dd67d90b1e4915ac561ff40aed695c8b7036e5464e283772be1295d25a23f400f6ac538742a9ea313ca75c9d442ead167be81935c6b04655e885356f1a85d933a036f81e689d6a1f9a21c0d8e1c067acf2c300e167d4746d31e901e3df66a9a79e8cf132809f9a2b0b771583a03d8709dc6dfa6ac08d051329b4ae8b9397d661288501e145c46aa7ce7520183a9d97fee9a1b3fad1b91d6632494dd6be6972a9f9a0266b9fa3b90831cc138a356a78b2e88d7b317bff216d4f155ddd63e83a6f7342974ab1f3b0b652f650e69cda8a640f0fc1c1ad5fa5e2b18454253714a4125380d4820c20d70ec23ddb6d916bbedb22ef4998d699ee6555eb4db80805b40cf7269a76db482c674f3b8c514da509dcf73519a9cdb8c3d642d4c8615ad56a5e161dbedfed9e867e73c1ece9b1869106d67e6ee895d98f99eab783e72bb7a9835ea795efffc05f7aa0c9a8c8a21250efa5f9cab39ec7f7cc451bb3acda1ee63c6d50e016303da813342be2517b55e41a6ab165243c2dade5dcd861bdf71b7b96c64c8c9cca80608ea56ea13571669974d4eab32f89336c4c092fe3182911fac2527e39ff64e867ba31f48eea89b5a767cd5c5baa76f680588ebabd465e49ae0a40a2566aa5dfa8579fb7c8e611a6dfe0bfdba6613e16c48eae65781afc6bb302286018d1dbf612f7a4e6f8b404a8f3eca5fe4074a3f6985e50e1e3a73ab04763f3d7cc36050ddd9a1ed557c12ee7c7eba0ff96c8e685cc825862bc12725eb4a725e3f6f451b55ad4dc8ff188db12065fbf53927752b71f09795ae37d93f6c2207bd96fb91f030192b19050735bb21b2ad26383cbc5b33adac6f4982574443bef98d61ecb7dd4ee110cb85b6fffdc9e14cbf4e012347eb668043ed8ac8acfaf2234ec463d2df3309ead0200a4a9a18e0408b64b89ec01c8c0d813400ef77259e2f05e0c1db17dfb91e1bd14907223e4d3489405c311a9fe9866785ead988d166da1f239d5c6d89af66bb7cce7f93ffd9233f06d50b43826b7d9bd7f0d7053e79811583894e705b842051041c8f4b10116a5f1506eddb89c755dec9ddc1ef6366f66a1ea5b370f97a62e124d36eaa810b09a96c824d23546ba1a7a3fd39642a3d60abb092172dbaa20ab2fd6c20c94f9530af34de2933ef1bedd93cd989e9961899eeba31934d9e98ea366f5bad61447168fb9cd573066937269a3d51e2a84ec788cb1808fe9989e8aa08156c923c964eb5837770275a48ce7782a52e59deb6236446f011e5a68ab18a13d261973dd36d4fd3221ed04fa90faa0e1b5aa6c552ccdb40043d636c7edfc057ba52cdb3b6b", + "da814730f0d65f242ee95e0fb28a3954400383c1221ced07f94c28386bf41af34bf8eb8fa4e450f1e41a2c61d506d75b15672c11b82f9641de0eef951e57b4811ed08cea4d15d6a3b22c17e1f34c19e38d0bb7f46cadf0adcd9cfbf1b486c2fdd1d6b5d106a78aa05e27176c059f650213cc9863db0af420543435fd5dacea917d98a8c82a07465dea0894ff3b74aa7625f24aa78a0e24b74b5fadedc6d5ab6fb675fb41f36bad60124212d636beaa3e1a6f94a206a15ae869eb9de0ab3eeb330bc9bd532286f2867c977efee5363e765e3f93023e0df2b1a9e25c39fa5860c79edb08770be782da00e1732baac84ad1af6f77eabeec8af6b5925a874b514524242cdb3dc5a4fd3c4f59602440d8e5dac2353c1d91f1d6987eb957215ed35b24e91cb473ac0aee0caf6687e6dd018b9ccaa54c2487b6f440c3f02883f3f2997d8a3d9916bb7f82c95ff53fad59fd77fcee026eca4a3a2e48b762bea9faac62a66e18afaf4c8fe2f71de1decdead4f6ccb4cf4ab1c2d7659d3e54df655b71621bb72558b33954f303d8ed9f2949af838a3f5f3cd7aaa3cbf611eb78ca12a9b6460b1e77ba6e81e187799d96da73c014f1578c688de1bd76b77b1a581c458c5ff4ab1fa92afb426ba1986fcbb86fde0037bb52031b4fdbdd75e7d82609aabbef5db6b920cda4b47e5c4749347f7964b1a53e666f677de4998e0bb3b4194e2801b6916639f95b54e328d81e4bed289c483a47be99db5e582d028e4de54fcb35fd448ad82a2b62b2671b572815661f0535c7dc5695c0395a0f83d860bbfca6b985ac01c5667901115c5636341d60a5a48827ebf238e682a449eb553ede629b85e12e378e23caa4d6d4e0989092d4decedb6f7eb2d7afa099e5e863380fa4ba36532cb0377d62d9f1a86c74cc6e9d86131f3a2c2c15a0dd784c0af160ed51eb06945da3133c7934bb870df83250ccab96c066f95f39d13228cd0436a6472cb1f3f63d8f1d24beb97705d98eb9d644c9fa8170568e65b22ec4e80a228dab4796010f8b0cc37d322cf0bce05e8fe958461cb6aaea4240086159deaf737cd60027552e009e22871fa4c0ff94d5b84fb5f3155890c548d32d470d0fd6c22b1465335ee467cbb05148a7972ed4aebf4ba95cc152d236826fcd18d15ce519b0f0551de0b2f0d01e914dd6d83f41c39f91f8aeb2d834469276e4a1a29c16830be5d7afd9814ccdf8aa31f7cf58a84f7b5396570b0cb6ed7c5e632193b1bf6bb499955743f97566fc7a31f21f627d0c1613f331add124cccd4023efc30352327b78e8c3f525a82ea9e298c866053dbdfa4a6f5489fb1d60256f5bdb1fe43ffac9ce669c65714b0c2074dc7bfa511cee04a8a1a7012a5beb85390b7481fb3a147f17794744698ac58c8d8b5e9fb55c59e68a61706818505fb5fccfc3187ae78c4570813e57d58fd6c09c6e906bb56ce8f62c3fa4d01a96f56ce2aada0d9a27bde922c3c9b289e9f0faf1da4dffaeefb54ff5e4912a4f3f0aa676c7d29fbff6f3e46a9cb0daa3c6b19c82a8a79e97a2f2b2c82dd4857abb212df88aef361a467abd040c59127dd60cffa0d6b929754ecc438fb0b6fec87346a5455b4089b2442e9e72e8adf6fd5c46a9e6b64294d2ed27982628e7e5f3e9b58d0372e3e5f541c3a3b70df5dabe529c7ddb3d33541e3389cf35211e9bfd29fb31ebe23e87df46bae238e33146cee6a290af30d81c84a54965b90f9a60061b6ef0370d8b09a363a9b4ddc9d9f3c5fbdeb35817fe8ba4d97d6df7cbae696abc228723c3f652b45e8f4fdd78be6d486972b0cf880d6e8e59c076cea9f95504f69da3b85e5af3340f552378b0981b6a5feb718af222bce5bf881895c90dc0a766841b435145a462af745cfeb979b7f226cdb3cc530f8cc5c43979761a3cf3160c2a78885bd19aa13f87", + "39efd1964d9bb2fa22fa036a9aad91c6142caa58e285cd30642b180ee76ad9b5fe05817059e46f2bdb3fcf7f000000ffff", + "8c9d4b96e3300c03af6489a428ddff62f3cae95e0ca07999bd3bed38b23e2450788b0d27b695205ec8d1a3ca987321c351246f0bfd60375d9a6e88c0a4ac8580dca68635abde8c2955688d53cb631c32addd8482f7d2f40784a22a6cf498fb92ea73b3408d35aacadbbbdc9a7a59f14684c69d2179eb0b836247292c3556c69d0477b4f08693c35c93348733edb9c6ca6798dd0d83e673c6fc5619ff542b503debe8e6103bedcad80a33cc576dbb3563b4a0b55ab967037a195a46227c574556b3b10569c82885e6f6d84398523a62ebd40e37725d2dcd8317cfca407e78f8793fd0b01e235d32a1e9ed3669c3db9892fbb1f41c4e6a46e2c5a372f41930b8974a42a3086cdabe80769a7e917a4d4e85b14ce24b2da691cae571e639619b5fcfec3f08a3b10c8642ce65eb6ddd55df54b6a78639b802f72724e39435de2f2fd22b5fd4fba7e4b34c963676c1b3d15206a81e6d12138a34cbe86ee35881921114d373ea0ebfeca327a8936d879a4b7b2de60617a6a50d66f951db6cc28f4d9b684d43835b62f76352b1ce794855320bfc0acf7b2eccaf5ab3b98a3c00ef4c0d069c0b10bbfe3d2609f2c1e23f1cb16f06961ee1eeddd88b876aeede96a0046d77db9c77d120d73ccb027827109b651348668756024134a952f8c171a13ef53ac5eaa0dfbcb144d9b347fff45886d99bf7f84513fbd93d17126e75a88c9196140c10feb41d262f02b4b75f6d22097830598ebfc536e531b935b4f993ddbdc3a4aa2401b6fd2b1a0106864e3a68da9fb8616ade0c837dbe7b3aef3d8b795859a52f988c4615d5a2d9b00c510a85dd7656c52a9bb6e5186bf5df08a3774a7dd37be7b7cffd2c2ba8fa8d6a52272daad35fff5f46d749cfa8ddf1285faa3acb85cdbba7e1f4af0a6e90c661c4402809d33ae1d4afb4e56d8af25ffc037232dd7114b86325dd98dcf1dfbd4ec3d57cd453b0726caa441fa12e7b2852bb6c934c725359b6cc555c8bea65ea1a3c2324e8f4336155f534c74c139eb58c5703a07cf9b5789a6416a5ee63ccab9d65c75a68ac8f2a3a5c5effd112c05db5021a4d59db1b20ccb6452c0ab48aedf26f67d5c4ded43669b2e2b79e21279d700379d379035be8729189384bb9e359cba4554648fac9157d28a79ae232e618d6910898156e483f3b86863e53727c2c50d06c709f61b7dae1394df7417ef35c656aa5abf883266af2f2c5171be27b6d1014133a2757e4393acfcfc2dda82181413aafe6dacc188fc9db0aa86e1abd8d44445de6a9339af924f2cdd750316ff5504f77008e626cfd010000ffff", + "8c9dcb8a6dcb75447f45dcfe857ccd9999fa15e38eac8b91c172c70d83f1bf9b916b1de31d91a5aa96e070746ed5de6be52366c4887f78633e7a3e6c413de224259b1a4db49ffedd254b0c7b3ba804b5279eb9784fb50b35fa04748eeae18197be9065dacfb500eae86f90a8b5daa9d56aa9d6ae12ee59e4f6b854de3ab1e35e7550c53806e7a3b1e7d8689641305a367328d2fa0bcc5ad7d339d338d0fb08521635a8f9c979fbe2d72d33a858dce653ef6988f1eba083b9e66c9e93a7bfb2ff8091737f5e6aac98661542e4eadb6f15b1a73ac980f46c2560d436ce315856581a882e05337d2a3c8992ef325bfd1e27c34d799774d32394a161d6710105bce497b953b96cfec6ff03f3374cc365e702da6e0ddfcad1786ecbc427a420ed8d69c3bd5de53494292909a1ad68a1f5441faa3ea1d9d5a4ea8af735be3597bd74cda64bf9a08b7ada6cb81339350bb849cdbf5fcf8657dec3736588683e319e4cb90c675df35256d723eab239220003ebb6c528640a381d6fa90c4a2283ba3fe4aa796bd0436a1d3f0205c1622f464ebd7eb00cee8a3b8dc769b1323301432f1b84b31ff45535181fb461c44fa2436b731bf646b4515baa8d3cf7e028e72e810e28f0bb01ebdb42b09aa2da81e02edf5568e06b0ed2126ad4914be943d12f2216c901553e5a8c62962368e3a008acf27dededfddd17f4ce2f9782d9ab261d98a6398fb98bd2666fe4b4e3c332691612f31e7aaf5dd98929a8acd0aa8a5a5141441b4c0bfdabeac8b8afdcb3793520f6b6fe1d3df5ab8c02739f28a1df615b74d2d82968427350b3c1dc84e80de7952dc29eb88d9fd3dcb2546f34a3e6f7592e60557c11361a1d072bb82c4253b39b89648ec121d546fdbbcc0c9fd681eeb792fa59499c585c4aa91cbfdf782d6f5e652fdf5ac270e5778eedf19feac1b16cba076c61b7fdee8b29e8ef5f6157e9d905dca5eb4cacb038342ea9302993040b2ad7b02b7eff34713eebdaa0a7dd4e19242247da8fb1769b3a41a8ed14a53b27a928f21bece3b2cb700942e92aaaefc109d894f641fe5133cd67dfb1fc7944da9bbef9246bb389d10e4b7d30daa2dbc3081a3596a5fc0e9c4eaf1b7bf5bc245bb1c99858b66b6f76ae274de2de0650a779592d3addd7e63abc61a1277f6f7db3e0bfc794b65738c221861e6c03fffbb026e5e11d3d740ad43ebe43485cf3bacf953583f249196c6863e9e35e3aad2f4646e9731bed7572d0918bd16ddcd396aa2e78969a9166fbc0e1aaa894bebd67ab640716a84757769a50a9f254a62c7b286ac782a3dfdea2aec5e331f59c8a95005ccf57609993dcd568dda7c9c65a7ff6a020c86cd65471b8a0d43642be3a1e9341a87e6676ed7f0e7f319b7280fd7675840b023e9ac6895d8756a17c41359d31b39b44a281a8e7844574a7ebf1247893f56e8615ca581a1c496346d53a9dd5c876dab730b7f583542c01abdbcbb576570f8792081ff7ff1ead6aa6af67f5a2063eada671cdebcc312a9be2d031ffd8515c6784782f66119a2776d563e775c05ccba24256330d0cf43f373efc186ef4c7901eba95dc93b5f76dba1c9f61bab1661b1db0c6eabdeb3bdb51ecb5bf16e3418b61d89f8b051f8d2f3545c8a3baf4fba70fdb883783b6609dcf95531e26dfe92cd1a7755cadae749c16086166b22f091dc98c5d4975d8361bda0e8efdf2635db0c2767cbcf2bd5e32f576bd8487dfd50a9853df627d5fbfdd6e519d7ecbfd24342bba7369a5cadd3fc495a587769c05d972ddc530b4546bfde4eabbf7b456fa608336a74dc7bb693697586cb13ab85bdc34ad99997096127547a74d42ffa650579f35a0c5da43846e7024cd3e17ae826a03440cb5a3f62110976cdb0efc87f9200ff7f52dbe321398338c351c9d9546b347fd1dd517", + "e61276703c70098b3e9c27c38162b4ca743bcf76bd0f9fc66fa376e087699fa0bcfb7cea691319580dd43dbb4ab75bf295aa76f5555fe61aef6962662828c9ce735fd273ee0645c3c2bd5de8d3f8379e197b6bbca7d69a552a00cd69b1fb5a1641666cbab6dfc72fdcf616107d34ba3157eea696a2ce5fd50e3aae69450109b160cd59d7f1454a6cdc47a6d5349c322d9bc80f30de5b4720b5ceb1ed17b8d0b66f9d225480af74d3e7ecee000f9ce6f6a59e68b496e4d07fa41763e0a4b3aaa9a69d30bd8d146e493c4283b4ccea3bc0daea59951691c6c83fa9a23a7e0054a98da7c05041c8e99e711db30f63a69784f1aaf7c436aba1ff0b5ff7b03dfa8424bbb5d014ee8fd5d896edf0397fd44a00967f97b009e906c6653608929ade82717ae16c1ad8a8e8d3db5199275badbf5d54d2ce6aa71a4f5dea4f461e9bf1af956e1c6cba4e24c9689872b2d8ee155a4e37b075596d9cd9f32796f3a83d9ac35773541d1c52a83942dd9c03d95123ac68e2daaadbca259f7535cc5375b1f55444795b2f5343b96d571557b13c1968f71df357b5148327358beb20f7a720f70664cd322a3e0dbd76887c096deff5ac68dff893ded2eee897785f5269a70f55efbb35239f5fe1d256bbf3ee1c62d57ee7837dda82eae8d027508340bded7dc347ff6d4ef411ced0dea79d2b677788cce8a92ed3c62558170cb5d0bfd875ea47d5c48f9c3f1482c3db3bf427e5727848b7a6fc4d0575966c149d6e076d0e1b6d61b42bc52a1d4883b65e753eb8c3634a7837e39b0cff73d4c3153ed58de5998917d45b8c135be9ffb53a3c66817be9c2267ae83b4caee01564e7d923aab9c7e9445c71911329c3d4c171ec628ef00b3db173914b23f2b57a9e36dd6631ba6a286dd090a43e692b4efad2d158c8ed8431f2602a176be821f9d4758f450662226d5ed3692d81acd99b63a0ae6fb014b440a2d7a5d73068fa9f2aeb7ba861cd56a7651bd354dade1671475b7441b8dabc74f769555b831086cfea8845aaabbb25b29ff69bc3c208afe0a52548b777af957c6c5c359451dfd184d312bc444e4de3ba55ad7d055aabb5d7b47e6a44a261752d737853caed6785e46e8635aace946977af3ab9ba7d1a5aa4f685469f3114e17aa76d9ed5716ca369d8a0e2cb9f00bf16272c3be5814eb3d700bce832237d9d79387a3f814155844213edeff27cdd95864b3d2831b6779fdbd5ce8e477284755b7cf2a4deeea3768121f71a39346e475eb45a318383395e20c42846281ed4cea4a7f96754b5a6f09d73cb6adf0da3dff6ee3d34e694b19a9a485ea1227ee23a6eb0b694323b4b6e631331f2b09a74bae7c7e5709963948b7ba0ee33ebb70b686eab40e77cca495a8f0bf4d09b210b2cf6f4959afbcdfe46607ff4e5c8ed012aca38aa79976f1a46056b96e392125d349d385a784c4b9a2210169bcddeca85d85b87b77c441fcd30ea647ae915d7ef2d9f2625bdf30bfdee5164490178be62769d0911d631d9f01afb3fdd48f628d7a13512b56c1c65fbdbc7e839b511ad2b0649ca16162e67de9e7677a91552920b87daeff02268c9c799c638b6ee8d85d6b3e65db610aacd0f0553d2faed1dbaf18b8396766cb8baa4d8b1b21af87b15fd43988c8434edb2c84926ab4a54ea28bf7e30cf3f309207c9dc9c96d56d6c15d3be19c3959ddc574bab33e1dc4480d522f33727662b2789a0075a3abafc3c5738b9456b86aed3eff139bfcef969667c3eddbd9a3ad0192459a90527ead5c3ec98626279eea0993689fb427019bbcea9a41698652d1461eee7b4d7118007c5e796a7d54b9f65a093dba1c4755adeea1a5645e398a35b8693b576585325a194b9f5c0ddf9c0b5c4ec8acee2aceaf7a8538ee398b1b531a7c8a2c6a84b6109631c02b7f1a9e0b9ea4ae3e6e6c716c6", + "585135023bef5d03e18f3d5efe53cfd17ad7b59daed3d7dcc6d41592d4eba2233960a43db6d7ae190123193df17b9f4917f47dabfda67fad94fc9197f2da2f4c98c3062f71960af32ab47429fc0691b88f45490ff5a9645abdf4bda9cd6a261a3cc1659a4f01d84477feee4a3fab8f1aa6b1d416b11da34944b22c73accc85a86527acd3c6f70d72e3f9585a68b7f1affe2c77cc9039b30d50d25a5f544cc149606356996a13c55bef9ffdf3f9dfff79feca7fbf7ff8db7ffce5dffef897fffcedcf7ffaed8f7fffcb1f7ffdebdffefeafbffdfa577efbdbdffffac77ffdf6e73ffddf33fcfffed29ffff44f3a254ad7c53928776d59c7e446ed807a893aae31353a57081216f2eca32cbd5b0dc6194bbe84d6924cee36412230c92d1f5d98a8935ccd86211bc943d6620d123b7a31d1ba0146d2accb4959aea699eecd105645c405f550476870b09b15f3d070d7b602c82279ed956ec518d6aad6efff2ac6170d5653146613d03a33fbb4696b23c36e756bab9843a761332c1add1cbca3569300a3676936108080d12e4ed9871cdca3edf0763a987259748fc85d7186dbae4e845775d4394b7769b4d3febc6cb48a1d64981a10996a321e711a384c592349a986c1649fd3b351a7925afb28963144dac43d6e754f2715ac73d906d16d6bc966f4695d319857d59b51d7aee2baa178b7d8547ead59b56113c85dd56021f6180c272a7db5330c34e92c8bd2b768230deb28999d4d4b57fcc8555d2f00a0a699b0b2679d569059c6ca664dcbb3878d3066e5ce201ff35e14e8cad73407fd964a6944ec30de0d28e5ad06274a3b870581a15f36bbe6336d54a182f8ead475aeed317402932711bf153e17d38348acb2263db4930cae3e9468366fa49dd539039d52304395e7c0266bf6be5c2bf518308e2ca5f70426e7068be7a90ea7eb2e007c769ea7a6cbf8398ba88703bd08f5db42cdd8529789c413a02bca31f7199a88845af70a22ce68c6eb3834e936bd3fbbb76577b306c4c52e2a5c90c53fdea3a789ac055f7c184e19af884177eb2c74aa78212c82f554e208de206dec4c3fe2b57abadd741ccdadce288075cde87af4ef44080cf7731a68fcc27a16d18bd46386403090c349bcabdac4a8e3d6a886a72c61550828cc65eacc74458bbc742aad62ba31c7e162dfe069a66aa50cf7594c83f54142f1c6f8b1ce3455fe6b7d107dd31f6c314d54b4ed48b6723fddecbdad8bebc0de2c0f47c06ce8ca1554506b0f56c5aceafb4e9e0d4d4774980fd7d0f9081ad43440704d35abb66748ecb4fab67aaf8e778c2616de84e9ae732086915acded9bc9fb5105045523b322f9eeed13000a675472e56e5aa6f9b5fbb2eb5223a9a42db5871dad6accd38b63d6127cd16926f8738533eae35a6df662ce969c6ba51780200a095762ee5e869a3bd811b735fd3ec70a589d9275ef74e8365342d730bc3e09816568b93e0e8446efb7bb97661dc6bca62a7d43c82f56ad178d6b8de175b1b7ea15086bc75445887c41f75814d7e6dc0a7603e6abfbf5cc6dac303a082fac54ac15ead8b52de9b91a9635cc9ecccfbeccda3878368b1d18b0e3ab241f870923c6793018229d75a676863e6e7d774ed1f2a31edad18549fad926f160e9042bf6140ae125d20ec7ea13281c8cd568e9041f9ae2024f54761825a74f173d82dd53dd12e06f0d98bfa2290913f86eb70ae7b2169869cb50f7ba8a610aca6aadfaf34be994954863820e252eb77140038e9d3e194dd5b667ec3add88337771e7575b46263c32f836711c3fe3f06182ee9e27e4d111aca77999c69caa31457efa06df33f3c4fb2fcf5025d16392e08926eb53404985acdae30246e65e5f435de7ad73ddb48768926c560a7cb090eadd8eda079fb16fe0d45673d61631137ddd085468b7fa386d7546f8c6", + "a768314e8c29cda731c45f4c9bc83a14f936bb797050fac7e790ec11745bcc56acc4686fb383b69aad1bed635050b50da376117c4837f86fda0e36ce9eebc5436818c6e23e5b865c9f62e0ebbf585e3ed71bc9747508c42e7a4aea9d4e2251dc50a44b513d7712a65002762ece320672b2350c889d65dcc044761b55338f8dbd5d57219a6ad9681c06263896960efbaec65028730ff8b0765743f4348703d931f372e250b6f021216a743455ab20ff9a451474c6b62037e9026b2f6c7596a503f88a11ae7970e610d0348d93cd3497534fadbe0fea1353171b543c53985d9b7c3e2d0edffa005e7651b230bd97eae8903d73e8038c75db8d117bdb0915d178f63087090db2db62959333aefe622144942f1fcd53fbacd12346dfdbe4054048a9fdd2d1d61e4e8fa61f7e84764b1cfbba6d984000c36acb6775ea3e39864fdcf7b3062dc66d3ae02ddd121aa346af7b1b2e87db87aab3f03db69eaf262aa30cb6ae9b20562b8bdf8d098f79da05b62325589a6674ad6c290ff6cb740472d8c5e063893b2ed4a64a6dbd1da7fc80fbcba8ece0938671c875da59a1de5b5c70604dd79ccf66e1915f6241025966d78651553488ccebad8656c61c239c73c62955d5a0ced459302d9d4f40e4c32c11a9a24f7583e491fdb781f40737e869424ed9d94c35bbaec4471135c904aa77e59066fa65466d761ead4400e5e1a813286dd58add90ced9fba271e4c796db04f4c6c6b5a6716a2ebb1479a26241e632eb0ab322cde5126e051c60d3a39838c8d54833103fabe586aa99d43063e9446c8cd1c6d23e864666b76a90ba3652813aa7c3dae906981c2b757c3231dfeaa8025da2eb2123162f967a437399701ac74ea2abfb939936fbce20dea30f668cbe96acf9b8140d20d566b6f02a753ee671a94d8cd68a25844e05d76edb0ee444138d2b05636c1a83b0763dfbef36ac07a06f7c86fa00b6eaeed8eba8eb9d5eda6fd5772877227692c5b773cb69ea542a14053eba585d7482c69c4ddf944e15f0922d2fe940302449406e516a2e91445b7f639f81a4ca4465cda930b9439ef9ecbf7a9eaba3a5e64f3462fe73db0c7e1d2e636d5682505311de7d92a1b09af1c44490fa5055bf65c382d008c74047d648e6f53254069013157fa033541b078081b208f976a851b0610f5fe92948556600ac766b0f388d571ab63aa9e8d42bca6a1eea455d5f6eef7ca68ac6c702b566cc910da5a7a88abb4feba287627bcaba1603c3b7c60b37d5c6de32c4ffdf9aa4eb888497ee08371c6dfa6f2cac815654c6344189106cab9f28d8b35c00c5a926369d7cbe09b34fcfb67ce5718e3d9a03ead8fa42e5521c7cf39bb1d67374f7435b5b737663cb0e86a0cd0c6d87e1dd9c6716e02e6d845457b587bed3726d29c559d9e22cfbeaa6810661606a38680e963d3db8a24d5a9f5bef6bba3dffec8f56e23481162e1ff0b6d4cf80f4c5ee97fafab22cc87deae0967ba5cfd1c71673b10d3dd2dc604bb7fc087fde3d6c3aa7bbc0572fdd44efba8e79570704d5103af3d8fe53adf1a2783e767be0803ee1ee34b529202dc004784ca458e9d9c92c5872eef672b2c11930feb43eca060596b098668cd83094e0842d5fbb2018b24d5d03ec24fe1a7b05fff2f5bc99e5787e4e177e510d9bf702af0144467779db4fbe54bd7da6f69cc5b6192a10c7ba2e2ee461ba730f662717b56c16936153b2963db751ec3bb9707d5d3ab17c25638d8caece568aae57d31793c45935fe0cde2afdfd47d9751b2805a6b985ee8090e1134983aae034d463c275813e53a24c17c341dbae6f06c68fa7088b857eda90e62d2bcd11abc8eb1231cae784e339688069dc86341943877459110b8c1c31c6fcec1d7d540c087b26d0e3e55071a48eb9879b8677ae51b47a873ce07481f8736d7dcc24", + "d3d6e61a380ebacfdb194ae992afaffc2bd1ce691fcbc2df6d70b2417ad40e3fbab8fc8a2dce5c5b5d4994d7d89415b45bf5a6ac15d6694547c5ac767edd3bb3dabd8e4eab6663393b6d9e9b16eb78b5778e4dba9a7b64f5bd9511dd2977189adbc9e900f60a57de5a1400db98245f77ab6bdaef9541bacf7ddbd1cd3d44a9a39e3c74237d6695b3c505f096c53b3927afdcf6fac8db0413342af008fb0cf2043a8d4b79f1bcf997fb08579b2e58238e1e515763f3b57cfaae5f1274166387d977f30fcedb1c327ca7254653cd258295a1db130e51abeb9340a6628753fb119b8b7a88808da7d2ed616578088eca304591b68d20a3de97de2c17e70e8fe77a1beaf7edd8a8eda81864bb9792c3e902d4e790f88cfec76353f8a3860d0668435c0c75c13e914dba321549834655d8d672cc1a071da2f652361e1df5ddcf7e7ef87aedb56d386cbfefba66993f19a2073621055e9fd22dcb4fdf1d9a5ccee6b0de3cbde33f91fdf5e9cf7f4eea83e2b1f18d1cfdfbf562f4e5ac0773bf0f7c19049e3205f51ce0e5b425ea925c382485a98202b1e5b2c26b17929e0e2f4818f3f3b4f6420ac69a3a8bef74fca695af7b29f4313ec6251cc9d3348711a42fe795c68c5db55eb6eba86a05e4bb09ab62a5f978e8c5b7973d420b7d391958a9e36072da7c797a4a842c5581e9d00d507b45f1a881debbde66185819faef2644847541b2e73024bb6b0dcf83432c5a3df32de106b51f1d4fb01fa8131dc791dac550dcda5cba4ff4d30469af0e261edb2deb68c3fcba4c63c6bab45fb5690953486e51cd1bdc77fd9451deae5ebecd6fdd61750fa8b64abaaa1936cc42fd287af9bd9bc3b21dfeaffce15366ae8fd1041f6af399fd19587971ffadd9880f82f2d4d5ab9f8da19b3acf356bdb53c8554d0feea0f00c3f36a9a7d33a286a45b631f3a8f7f36ab6bd5a353b6854db3f7a05f05eacd704b3cfd46ab911a399e878b1063c6f78f46577e5bab957cae52747d95639878a762a6d1d78f7e99f7d51156c822a1bd6c9136f7164d4b5699b6e52886ab778087f0a0dc67c883ef423f72082a281a1207844b759d1aadba06b548bcd619ad7cd3b56284faa755950e1e0861c4ca47ef2979dd0c22c9ca6d43e8a7da6192beb41a9a976882cdd2d24ca028cb86ece22dab57c05aebbd8cc09c4ea3644eb31d0db5644f8d4fcdc1d98988ea7c008f99b4a3bd94c036b94ddaa1bf007528bed438b1e00ed58bd89ad9c9d8a2ba893bcb55e9de76490f8232b2eb3fb4bbb0915c156f43371b1a55de86155e81a4a41a84d7e3bf662718b5c8d219dc6cb62551f3d2a8fb876faec68c56a6ec03d93dbb07b7ece2ac714e4945ec3cc1ebd41969b3f98b2959e54223b35bb8637b95c83aa30db6bd4a13714fada2dbbb2dd94c0dd3053fbf3fa98a9f71be8b3562a02a0652aa60b7cdd5ca6c33295f5559c2c8c292550f39737cde2e3f20590549a1dd97bc53a6a871c5ed21014f6883156aad99ad3362faf9ee4079def4e5e89f5395c7c458c99c5d9537d15656bc0ccad697bd10271a5e5ee3ddb32d34f1ff8003c821584102c038647c6c040b100e45a79ce04606f6e4592d8997a86c56eab4cac05efa8a84ec0f844838bb76378cb4a17bdcdc536f8508dda302dabd6b9cb2da94c3ff577fa9435d2729b32df5d98c0368c19e20eb827f97ac1e22016e05035d9aaa1feda9982acd01c9aa73896a46a807df565bde3b56903c2c8593ea758bfc0984631a07d655bd6955126c35bf503efb03c5c5bcd8e60d0f02c65099e588ffc2c3dc52ec5647cb63e860d11c1063b341c5b45575259621b0052b94a3100fcb9cf99e28129c8ecc490b7b4be3e5b2dbeb55d4da3cc157af1ac764fbba0dc755a26c1d5287f6e767937620c3cf6bc65c9e11422133d7e61ad5b9bbafe", + "651e4e871ea4335a31a0f0a6c7cde41832a85367a7f4cbf7348e1ba095a687af584db9623d3052f865e0a2d4f60145531b553af603db01927e03955112549aa9541c95dbf072f46e799b325005bab195c6b00c6b41a9d65d6194c5b556c766dc259619c698daa8f9174e4e0ee3bae5fa345e7e3563e4eb4f4d70e042996b7baa419e8b27edd2aca8049dc018a0a7bf2835c97f255e54ce0c55b3a78b960ea53c5385a0e396a0db4df15e609bd30a8550750086dac3de194fa9bd143c7031a276b11038d468e3d58fa0ba4645d25654ba6d2b116f3400bd275e5a3d6fb5a48941a587b93e99a0cfea9ce943cf99c310f891e99665ca2add205cf63c8406b13691205488cbe448b56ce6b847fa781214c3b21f95e94b2ae6498c17cf0596338a1976a9f469db18e1c994a31a5c6d5c82e110dd59ca55fb48a400ad9b6df01874803191bf4d5e6dd34f5ad0dd8af9271aa3f7d4184ce026d74694939dde5693488592d194a313e393c340dff33331ffd2fff6d0cde51a0be03471c2c7fa66dd1823b5b671e91d44b1f5960a10ae66bdadd41d343dc45ab2fd19c963a4726994f6c76e9089eca10d838e5efeeac88e457b7b91f2c52971259ab4d1b7b71393e3839aa7cfc69e2784a002770903e21ceff1322b595081a3be820e4ab469ea081caae15f1ca8e367c2af47d459fba7e0f9fb353dfbdc7ebbfb69ef0ec3d715febf000000ffff", + "8c9ddd8a1c471684eff51462ee1bf2fce58fdec5182d1accb2926556635858fcee26aaaa613b227b475706213196babaf2649c882f78d502c29fb458d8c2c24ae2a4097f9036a577f42c4a287889d31985e4193a37a14b4e1813be4645c90b1d073c3b85ad86153bc120e40a6b171002705578469bcb2451ea90a7c4e4857aa7e5428542a3c9d0db7e623ce689c6e62af16c43f777d3a464c01d44a73a9c3c22735f6920e1a2641f5d5c863e1fb794e74b1d1b98995205bb3984db61b2d254189035c6e5a2d0fa67a4b6a599b408c7e108e2962e0d9baa77f142f1ace02257e8d86372b0d430adc83613b726e3b3cab154d60f175daec0f930cc006575fcdd87ce27ea32283812dcf189b825e3b0d216247219e30f2211bfbfb110e8d6159e65b1c46805418fbf4fb9e614392afb0af144a94bfb1c0e060c485ca36ca91765dc53d1eec6ee1420b5c89d32a7d656c331fc580e7ae7c60f0f9e7a0e42055f1970a377b18000b2236b2c8e649c86dfed3a7774d44ab0550f83107f3d3d43feff315bc7e43072d49c7ca8cf98a8a0a77fe86a8d71e298c393737ad88ec4d4c55a4d86e520e133594e959be1f94041d3e28f591734c777fda8b917d91315cd42336c40e1b58d2fb394bb5b7db9647f545439550a2bd689b117692e572e2896b249efcb6d2dae0b6a23242b885e9ee2f6b48ed9b28b5617d6a5a84f2291fbedfce5a3c1532511f380af94f405f1ab5cd726543448f8021d3c2e0b13a1115c9ae750a40c20118d736d86efb0945f4cabd552ddedfcaf78ad7d3342207820a535f66d01583804f7895cd3a6d0ea495604d5095028d9281e5e4bee13b0887258a33072f10cd1e1acdcf49f75bd7e014ab1826b6fd059c84eab40bb9ed4fba595b19dde56677571f7ce69030fa2b197ae4f53cff0c0369dfeeed9b1d95023353a7285acca5bb34b5c6ee3b1f1efde1ac5164e54e88430b5b326336b1d1c5b4faebb3fc0aacc4b445c5904484cab70498822d6cddb06ea913a4f140032321c235dd715160e8f5a88160cff0c872fcc57ad2954859d680ed797876810e8f111b5734ba782ac5ae26880ac32c4928f16f7546da57b0bd9dea2ec4d2e28be1e610b975a090d7253b5461da3e7c7508125b688ef74a6ee4d30e7160a775f6e7b9b3306af8a5132d937dcad2a45a3a0dabc49f33c382ebc4067e8d6edbacc581adbe1ba0f78be64d91447c90f0b2e5e8bad01c66b5b2bfc7451467bce8d5b130d14c5c656f44d0c5ea141dae3d6a68430af37c4043599fbde71c04c867ce2929d0a14e02ceab98b45ddb52c79e08e93d4617414d5316fbda39551acc69860d6bb5694ebda58fd510bbdd624a88ce06414f00b1cb94366cf8566365cff6291904438bfd1b0099640ada12b0df464d60d47f1918e168e624a193805bda558954cc44c1c46299f8cecf42f560232d5326ce188e3fed7ee9daf1a68744be3f87ca1f68037213650a562127f470d63b1987af478c4e0bd09fa7422b92f1a4de82eb9187cd8ae371bf89bb99b91f1e1e77ab94a838058222ff14d2ec401989a89fb69359736041075a4ec289baccd5121dd3b0d39b883a4a019991577db6d13ce6013e29122b3a4adb1a4de65b7ba835f3ad409d4a344b6b65955c289422788e8d6bbcd0f5270507ae8ce3373074500dd86611dfbb5382f764fcad42806fc681ef90aaa4c8960b5d99025300e299bac23005f6c4b524563c2214bbb2cccbd0f3f5d8100571f5f0179f4de2af0bc6924d6311239c541dca58f69f5ae92e29a9dcf067922aeb6f792e6aa09b95e541cd83d7944463fc9e06a3721679ed33400e09cf0465bd928010d604697b7aff7e572b02ed1fa217f8f0a01e6565348e58436c6a553863fcf242b0f44f25923cd047a58b215170e4da6e1cd5fd602c792b4", + "43a15e57567fcfd2ffe04f5bb7feee21b0251fdef1d9c1108d62071a2a2ca20b045d72e717350b85ad523c88b1c7f4109b53fa42f7109d484cc392fa1ddec46debeb087589b56ef439994b3a633cbe6faf3e1b313e4946e75c3303e1ea0270d9b91eb1a31f9bc31dbc97c55277ce1573e87ea4167f8a0efcb4d872b5d9e1eed3b29df513ae959075548881c0dbf0083ef33d86850e7353dd547b0708c2efba25dcbdf40ef6d752be3cec99c1a56c3b43fa961d007fa6249ad03ddec5a104a57cb2697cbfa8c5cb3c53c739789d19df2690e77b531abae94cfb6b06f68f7259a847f3d46da779dcb6fd35e7e0d5a1d4713b9fadc5e509b99a76bd83838a90ecfb07b7b25b2e3f5b6d4edeb055586fd063e058c2946cfab0256397bd98cbaf5477f2da6a7703b54a34930bdaa0569b1b82383cfe12e589432133ad3697d4d01364fa263071be26d1a12cb2c72e3abb0714828c93d2bfb3f322c09c395d4ce73bd68d21ca57bc83c6fd014a17ab671d39ab7a87a1763ec787b42af96738d5442299f06ead775ed5cf522430b8ba30e8a2814ce69aeb38b203fcea03b380a514645896ad9fe0a73ab2290267c76b7a2d918e5056c1fd0b5a1774de0c7cacc1520824e150242ee1289fb233f3b8342f8d33a0958d973963baca3980f2345fba724778889e98cc80282cd2365c39320bef80b7680458dc2fb385ea5847c10d6b11f9e8673e878df5e869bb6623e3894f74e1fd52fcd411ca376431430f502ade4e293179d4f749bb4fe5a8520efd56fff463a5dd344cd5c7d05d758e36f882b232a71c6ab02257355513205676d929b53e6cc9520c4da5210eb5c406935bb2bce78a2e6d2256bda614f858dff44eee50ce874d776e9aea81f580d04eef4446785e94aaa9ad15473dc5985ad639bc0dcb4d659042377168974fd9ef01eec0631e920afa5e3b57c16ccb3bdbf0c800b8a5c9b49589ac80eced76c83a3f125ca2b4ef6acc6655efc9a14e4fddcce024031c9e37b2ecbfbb8228e87892438f6ed8a7451d686e9e7dba2fb9b8eebb79e00b469259b8c80b36016e62c0a1c57adeee1a83d30dd1233e1f779458e384c0152ceef86865b08e610a2eeda5a703ec6fe0d7882702e509f1ff79531757a04c86da437673367263c1d5a46202816f2d58928eb88bee918fcb82a7d927cb35b3c90281c35f27d90a640f1e1c36390bdccd966ced24a0799644cc66728d1234c4691c3b54659e709a069e7d6147cc03a9ad196c6c8d44ebdf3b69b053bab6c758f9099df11e4da4130b1999801892051ada762bd8430e6b994bbf231c3dbcd09131ecf67c6c16c4f0eda92fca105214f1fc6e94e83f65f2837cdfa5356b879c89f4290b43dd013de7881cf8e21c93892d2c9e1fcf3a8cf06ca63e73394becaadcf1707c89574e8119d8c2d2923391debb7ac461aa72f920a517ef5e8107f7b8d8882d07f7ad62653bb83ec6b143e2cf00ac8b507265a25f97a1f509dc15271cd011927a21c8475df5eab3065e8e15587190b5b56228a068ccfec825bf16dcf608f2799e3f8237a7b13d516994e7a57078c999b155300fe68a3f9ad32e3dc76446c48bb0375d6cecae65e96306f70e6f51307930922486860a2909891f8d9b3c65c0bba0cf9b0db48d972c5e3706f57b9325c780e12fe717bc672bb55259f8524168d65cc9735df6d5adb1a1b217283bdc240fa56c7012d91c4b6a8e270bddf90959e5a41e847bca406e5111a3cb3d726b09849d9d79e2f7d00b7f6a802d8aff53ba0c2fccdcdc3ca4d2717bfa53c0b4d1e1700c04f58822893b7288ccd18efaa5fa99bb64cff5d85e752dc69b7e7564e4bb3d9d851d114c31842189523c2e6c8243686869329a1934acc5277e4f93d4db40c3bd3cb66b1c6a32630d6bca60029c442c156847f51ae238a02bf605e39a", + "a8247adf05aac4d5e7874a3b183fc674ccedfef7d816e590ef82c4814e47d72a611aa1737dca6a0fafe5941f958fb56477d05e99003751dbee92537bd29c38c3b4a908fce590a4262cda26c4c56db71afe198f7e037efba097879ee33e4d91c4dbc26f50c6c60a2917478da0a09a7294dea17b80994e8f728f230547afcfc00aa22b520d09c4c971bf8d074e2789ebddd7ad8b04e547d123df6bf1c5354e566e5ef7b76d0cf5a9f7554b0e0edede14400dc2c97853fe842e84e3dd9d8f1b5d465e40d835649aeb702848c31fba0838263471a711db2c36c74dc81568a2d562d0ed5b52ba23ee50801af2f2021adcc56b7f78c0053a59a89a60daee9cbe292cf50e9002cf1d55f6a8115fb20bb883a6af84722151453ad6057b40cef56bbf1cfffdebc3c78fbfe0b7bd7cfbfee5f5ebcba78f2f6fafff79bbbd7efbc7eb972ffffcfdb75bdc7e7cfbfcf5ebcbf19bfefcf1f9b7d7974f1fff7bfce1973ffefdfddb1f6fbfbe7dffd7ebef3f5e3e7dbc1eb197b7ef6f9fbffecf2f7fc00ffaebc3df000000ffff", + "03000bd36c77e4060200" ], "rawHeaders": [ "Date", - "Wed, 02 Oct 2024 00:28:53 GMT", + "Tue, 17 Dec 2024 23:33:59 GMT", "Content-Type", "application/json", "Transfer-Encoding", @@ -60,9 +61,9 @@ "openai-model", "text-embedding-3-small", "openai-organization", - "elastic-observability", + "user-t27sfkqnaatdbowu2i7ij4dc", "openai-processing-ms", - "25", + "280", "openai-version", "2020-10-01", "strict-transport-security", @@ -74,7 +75,7 @@ "x-ratelimit-reset-requests", "20ms", "x-request-id", - "req_c9ed4ef71fb365820e5e512b1d5985ca", + "req_db57591e8aa295ab7ddba9fa7dd642bd", "CF-Cache-Status", "DYNAMIC", "X-Content-Type-Options", @@ -82,9 +83,11 @@ "Server", "cloudflare", "CF-RAY", - "8cc093300ad02d60-YVR", + "8f3ab8a0cec7fd83-SIN", "Content-Encoding", - "gzip" + "gzip", + "alt-svc", + "h3=\":443\"; ma=86400" ], "responseIsBinary": false } diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-bad-iterate.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-bad-iterate.json index 59ae449a..6061fec5 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-bad-iterate.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-bad-iterate.json @@ -8,16 +8,16 @@ "messages": [ { "role": "user", - "content": "Answer in up to 3 words: Which ocean contains the falkland islands?" + "content": "Answer in up to 3 words: Which ocean contains Bouvet Island?" } ], "stream": true }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-ADhWV34Pm5I3bpO148YKNBCVn9DF3\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-ADhWV34Pm5I3bpO148YKNBCVn9DF3\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"South\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-ADhWV34Pm5I3bpO148YKNBCVn9DF3\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Atlantic\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-ADhWV34Pm5I3bpO148YKNBCVn9DF3\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-ADhWV34Pm5I3bpO148YKNBCVn9DF3\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-ADhWV34Pm5I3bpO148YKNBCVn9DF3\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}]}\n\ndata: [DONE]\n\n", + "response": "data: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Atlantic\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMYrlVH9d0cIYpMN9fAgolnEEKQ\",\"object\":\"chat.completion.chunk\",\"created\":1734478434,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}]}\n\ndata: [DONE]\n\n", "rawHeaders": [ "Date", - "Wed, 02 Oct 2024 00:28:51 GMT", + "Tue, 17 Dec 2024 23:33:54 GMT", "Content-Type", "text/event-stream; charset=utf-8", "Transfer-Encoding", @@ -27,13 +27,11 @@ "access-control-expose-headers", "X-Request-ID", "openai-organization", - "elastic-observability", + "user-t27sfkqnaatdbowu2i7ij4dc", "openai-processing-ms", - "98", + "311", "openai-version", "2020-10-01", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", "x-ratelimit-limit-requests", "10000", "x-ratelimit-limit-tokens", @@ -41,13 +39,15 @@ "x-ratelimit-remaining-requests", "9995", "x-ratelimit-remaining-tokens", - "199966", + "199967", "x-ratelimit-reset-requests", - "40.71s", + "40.286s", "x-ratelimit-reset-tokens", - "10ms", + "9ms", "x-request-id", - "req_ba641cdd4b4ff977912f0d63b118cd36", + "req_03f2ffc680375331bea9b5f8894d7f7e", + "strict-transport-security", + "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status", "DYNAMIC", "X-Content-Type-Options", @@ -55,7 +55,9 @@ "Server", "cloudflare", "CF-RAY", - "8cc0932679f6841d-YVR" + "8f3ab8832a2afce7-SIN", + "alt-svc", + "h3=\":443\"; ma=86400" ], "responseIsBinary": false } diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-chat-completion.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-chat-completion.json index f260a16e..a390eb87 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-chat-completion.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-chat-completion.json @@ -8,16 +8,16 @@ "messages": [ { "role": "user", - "content": "Answer in up to 3 words: Which ocean contains the falkland islands?" + "content": "Answer in up to 3 words: Which ocean contains Bouvet Island?" } ], "stream": true }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-ADhWTjZp3ejGyaOvqngmOItSb0qap\",\"object\":\"chat.completion.chunk\",\"created\":1727828929,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-ADhWTjZp3ejGyaOvqngmOItSb0qap\",\"object\":\"chat.completion.chunk\",\"created\":1727828929,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Atlantic\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-ADhWTjZp3ejGyaOvqngmOItSb0qap\",\"object\":\"chat.completion.chunk\",\"created\":1727828929,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-ADhWTjZp3ejGyaOvqngmOItSb0qap\",\"object\":\"chat.completion.chunk\",\"created\":1727828929,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-ADhWTjZp3ejGyaOvqngmOItSb0qap\",\"object\":\"chat.completion.chunk\",\"created\":1727828929,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}]}\n\ndata: [DONE]\n\n", + "response": "data: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"South\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Atlantic\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMVBL30VWqxHMtEWOUi1gulztS0\",\"object\":\"chat.completion.chunk\",\"created\":1734478431,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}]}\n\ndata: [DONE]\n\n", "rawHeaders": [ "Date", - "Wed, 02 Oct 2024 00:28:50 GMT", + "Tue, 17 Dec 2024 23:33:52 GMT", "Content-Type", "text/event-stream; charset=utf-8", "Transfer-Encoding", @@ -27,13 +27,11 @@ "access-control-expose-headers", "X-Request-ID", "openai-organization", - "elastic-observability", + "user-t27sfkqnaatdbowu2i7ij4dc", "openai-processing-ms", - "109", + "253", "openai-version", "2020-10-01", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", "x-ratelimit-limit-requests", "10000", "x-ratelimit-limit-tokens", @@ -41,13 +39,15 @@ "x-ratelimit-remaining-requests", "9998", "x-ratelimit-remaining-tokens", - "199966", + "199967", "x-ratelimit-reset-requests", - "16.651s", + "16.548s", "x-ratelimit-reset-tokens", - "10ms", + "9ms", "x-request-id", - "req_077db0ea31ff2afc6a7e281d222186f1", + "req_7206a47430a09ff739ee61c796f56d3a", + "strict-transport-security", + "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status", "DYNAMIC", "X-Content-Type-Options", @@ -55,7 +55,9 @@ "Server", "cloudflare", "CF-RAY", - "8cc0931aa8e82da4-YVR" + "8f3ab8758a6ffcec-SIN", + "alt-svc", + "h3=\":443\"; ma=86400" ], "responseIsBinary": false } diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-parallel-tool-calls.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-parallel-tool-calls.json index e9903a48..726f85fb 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-parallel-tool-calls.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-parallel-tool-calls.json @@ -42,10 +42,10 @@ ] }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"id\":\"call_MDti4mtc0TKeNC0HyE8wy9nn\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"lo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"catio\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"n\\\": \\\"N\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ew Y\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ork\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"id\":\"call_eA8ose7WzOz5tFM3vdFNGf71\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"{\\\"lo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"catio\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"n\\\": \\\"L\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"ondo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"n\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"tool_calls\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AENquPanB4iiLFrzLOCmMH9FDiZDZ\",\"object\":\"chat.completion.chunk\",\"created\":1727991644,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[],\"usage\":{\"prompt_tokens\":56,\"completion_tokens\":45,\"total_tokens\":101,\"prompt_tokens_details\":{\"cached_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0}}}\n\ndata: [DONE]\n\n", + "response": "data: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":null},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"id\":\"call_c70DUNhsnSAQ0y6d8OkyHQeg\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"lo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"catio\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"n\\\": \\\"N\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ew Y\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"ork\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"id\":\"call_5XlUHHFmQpDB0GUeNHNsNYYa\",\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"arguments\":\"\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"{\\\"lo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"catio\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"n\\\": \\\"L\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"ondo\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"usage\":null,\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":1,\"function\":{\"arguments\":\"n\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}]}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"tool_calls\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMawxsp83RQ9QuzFdwpTdBbCEQu\",\"object\":\"chat.completion.chunk\",\"created\":1734478436,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[],\"usage\":{\"prompt_tokens\":56,\"completion_tokens\":45,\"total_tokens\":101,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", "rawHeaders": [ "Date", - "Thu, 03 Oct 2024 21:40:45 GMT", + "Tue, 17 Dec 2024 23:33:58 GMT", "Content-Type", "text/event-stream; charset=utf-8", "Transfer-Encoding", @@ -55,27 +55,27 @@ "access-control-expose-headers", "X-Request-ID", "openai-organization", - "elastic-observability", + "user-t27sfkqnaatdbowu2i7ij4dc", "openai-processing-ms", - "866", + "1408", "openai-version", "2020-10-01", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", "x-ratelimit-limit-requests", "10000", "x-ratelimit-limit-tokens", "200000", "x-ratelimit-remaining-requests", - "9999", + "9992", "x-ratelimit-remaining-tokens", "199957", "x-ratelimit-reset-requests", - "8.64s", + "1m3.378s", "x-ratelimit-reset-tokens", "12ms", "x-request-id", - "req_056e8b505e78d2ed76be327b4402d881", + "req_03974b7c49c134a0a1fd55fa1fb63e7d", + "strict-transport-security", + "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status", "DYNAMIC", "X-Content-Type-Options", @@ -83,7 +83,9 @@ "Server", "cloudflare", "CF-RAY", - "8cd0179fae8f137e-YVR" + "8f3ab894b8e2f92a-SIN", + "alt-svc", + "h3=\":443\"; ma=86400" ], "responseIsBinary": false } diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-tool-calls.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-tool-calls.json index f1c963e9..9d5bc3dc 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-tool-calls.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-tool-calls.json @@ -51,10 +51,10 @@ ] }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":null,\"tool_calls\":[{\"index\":0,\"id\":\"call_GqsvoRkHMjAlIhoSWKP6D2lw\",\"type\":\"function\",\"function\":{\"name\":\"get_delivery_date\",\"arguments\":\"\"}}],\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"order\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_id\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"order\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"123\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"45\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"tool_calls\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AYzUsU4b2gwkf0NUyCyrHCnHAP0zZ\",\"object\":\"chat.completion.chunk\",\"created\":1732902910,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_3de1288069\",\"choices\":[],\"usage\":{\"prompt_tokens\":140,\"completion_tokens\":19,\"total_tokens\":159,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", + "response": "data: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":null,\"tool_calls\":[{\"index\":0,\"id\":\"call_ltrRGOHzmLMWSIRAZImscFEy\",\"type\":\"function\",\"function\":{\"name\":\"get_delivery_date\",\"arguments\":\"\"}}],\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"{\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"order\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_id\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\":\\\"\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"order\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"_\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"123\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"45\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"tool_calls\":[{\"index\":0,\"function\":{\"arguments\":\"\\\"}\"}}]},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"tool_calls\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMZdIABwae3PqzsHzvjahWPVqL6\",\"object\":\"chat.completion.chunk\",\"created\":1734478435,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[],\"usage\":{\"prompt_tokens\":140,\"completion_tokens\":19,\"total_tokens\":159,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", "rawHeaders": [ "Date", - "Fri, 29 Nov 2024 17:55:11 GMT", + "Tue, 17 Dec 2024 23:33:56 GMT", "Content-Type", "text/event-stream; charset=utf-8", "Transfer-Encoding", @@ -64,9 +64,9 @@ "access-control-expose-headers", "X-Request-ID", "openai-organization", - "elastic-observability", + "user-t27sfkqnaatdbowu2i7ij4dc", "openai-processing-ms", - "561", + "336", "openai-version", "2020-10-01", "x-ratelimit-limit-requests", @@ -78,11 +78,11 @@ "x-ratelimit-remaining-tokens", "199921", "x-ratelimit-reset-requests", - "55.376s", + "55.703s", "x-ratelimit-reset-tokens", "23ms", "x-request-id", - "req_4887a849fdef2c2de4b074554e4e3cac", + "req_715d3ecc0be2edb77b3a38e730e4c2db", "strict-transport-security", "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status", @@ -92,7 +92,7 @@ "Server", "cloudflare", "CF-RAY", - "8ea477962ecd8450-YVR", + "8f3ab88ede73f876-SIN", "alt-svc", "h3=\":443\"; ma=86400" ], diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-include_usage.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-include_usage.json index 502d62f2..1a62d73f 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-include_usage.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-include_usage.json @@ -8,7 +8,7 @@ "messages": [ { "role": "user", - "content": "Answer in up to 3 words: Which ocean contains the falkland islands?" + "content": "Answer in up to 3 words: Which ocean contains Bouvet Island?" } ], "stream": true, @@ -17,10 +17,10 @@ } }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-ADhWU3Xrb2VvjvgOw4Z0M2P6HXV8I\",\"object\":\"chat.completion.chunk\",\"created\":1727828930,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWU3Xrb2VvjvgOw4Z0M2P6HXV8I\",\"object\":\"chat.completion.chunk\",\"created\":1727828930,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"South\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWU3Xrb2VvjvgOw4Z0M2P6HXV8I\",\"object\":\"chat.completion.chunk\",\"created\":1727828930,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Atlantic\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWU3Xrb2VvjvgOw4Z0M2P6HXV8I\",\"object\":\"chat.completion.chunk\",\"created\":1727828930,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWU3Xrb2VvjvgOw4Z0M2P6HXV8I\",\"object\":\"chat.completion.chunk\",\"created\":1727828930,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWU3Xrb2VvjvgOw4Z0M2P6HXV8I\",\"object\":\"chat.completion.chunk\",\"created\":1727828930,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWU3Xrb2VvjvgOw4Z0M2P6HXV8I\",\"object\":\"chat.completion.chunk\",\"created\":1727828930,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_f85bea6784\",\"choices\":[],\"usage\":{\"prompt_tokens\":24,\"completion_tokens\":4,\"total_tokens\":28,\"prompt_tokens_details\":{\"cached_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0}}}\n\ndata: [DONE]\n\n", + "response": "data: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"South\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Atlantic\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMW6JDwL2V1AMhr664RpVH4rdgw\",\"object\":\"chat.completion.chunk\",\"created\":1734478432,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[],\"usage\":{\"prompt_tokens\":22,\"completion_tokens\":4,\"total_tokens\":26,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", "rawHeaders": [ "Date", - "Wed, 02 Oct 2024 00:28:50 GMT", + "Tue, 17 Dec 2024 23:33:52 GMT", "Content-Type", "text/event-stream; charset=utf-8", "Transfer-Encoding", @@ -30,13 +30,11 @@ "access-control-expose-headers", "X-Request-ID", "openai-organization", - "elastic-observability", + "user-t27sfkqnaatdbowu2i7ij4dc", "openai-processing-ms", - "64", + "123", "openai-version", "2020-10-01", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", "x-ratelimit-limit-requests", "10000", "x-ratelimit-limit-tokens", @@ -44,13 +42,15 @@ "x-ratelimit-remaining-requests", "9997", "x-ratelimit-remaining-tokens", - "199966", + "199967", "x-ratelimit-reset-requests", - "24.673s", + "24.401s", "x-ratelimit-reset-tokens", - "10ms", + "9ms", "x-request-id", - "req_5c391ec3893402c26add377f56fa4a9f", + "req_2f0869824d2393534d2bf2f6c21e18be", + "strict-transport-security", + "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status", "DYNAMIC", "X-Content-Type-Options", @@ -58,7 +58,9 @@ "Server", "cloudflare", "CF-RAY", - "8cc0931e9a1e2dab-YVR" + "8f3ab87a6d09f8d4-SIN", + "alt-svc", + "h3=\":443\"; ma=86400" ], "responseIsBinary": false } diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-tee.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-tee.json index 330fcc2c..d75cadc6 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-tee.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/streaming-with-tee.json @@ -8,7 +8,7 @@ "messages": [ { "role": "user", - "content": "Answer in up to 3 words: Which ocean contains the falkland islands?" + "content": "Answer in up to 3 words: Which ocean contains Bouvet Island?" } ], "stream": true, @@ -17,10 +17,10 @@ } }, "status": 200, - "response": "data: {\"id\":\"chatcmpl-ADhWV3ea6yO6vGVqJHGBmyWAQ0DXV\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_1bb46167f9\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWV3ea6yO6vGVqJHGBmyWAQ0DXV\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_1bb46167f9\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"South\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWV3ea6yO6vGVqJHGBmyWAQ0DXV\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_1bb46167f9\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Atlantic\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWV3ea6yO6vGVqJHGBmyWAQ0DXV\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_1bb46167f9\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWV3ea6yO6vGVqJHGBmyWAQ0DXV\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_1bb46167f9\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWV3ea6yO6vGVqJHGBmyWAQ0DXV\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_1bb46167f9\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-ADhWV3ea6yO6vGVqJHGBmyWAQ0DXV\",\"object\":\"chat.completion.chunk\",\"created\":1727828931,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_1bb46167f9\",\"choices\":[],\"usage\":{\"prompt_tokens\":24,\"completion_tokens\":4,\"total_tokens\":28,\"prompt_tokens_details\":{\"cached_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0}}}\n\ndata: [DONE]\n\n", + "response": "data: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"role\":\"assistant\",\"content\":\"\",\"refusal\":null},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Atlantic\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Ocean\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\"},\"logprobs\":null,\"finish_reason\":null}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[{\"index\":0,\"delta\":{},\"logprobs\":null,\"finish_reason\":\"stop\"}],\"usage\":null}\n\ndata: {\"id\":\"chatcmpl-AfbMX0ocnL3HQ8X3Kf07EezaxsMx6\",\"object\":\"chat.completion.chunk\",\"created\":1734478433,\"model\":\"gpt-4o-mini-2024-07-18\",\"system_fingerprint\":\"fp_6fc10e10eb\",\"choices\":[],\"usage\":{\"prompt_tokens\":22,\"completion_tokens\":3,\"total_tokens\":25,\"prompt_tokens_details\":{\"cached_tokens\":0,\"audio_tokens\":0},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"audio_tokens\":0,\"accepted_prediction_tokens\":0,\"rejected_prediction_tokens\":0}}}\n\ndata: [DONE]\n\n", "rawHeaders": [ "Date", - "Wed, 02 Oct 2024 00:28:51 GMT", + "Tue, 17 Dec 2024 23:33:53 GMT", "Content-Type", "text/event-stream; charset=utf-8", "Transfer-Encoding", @@ -30,13 +30,11 @@ "access-control-expose-headers", "X-Request-ID", "openai-organization", - "elastic-observability", + "user-t27sfkqnaatdbowu2i7ij4dc", "openai-processing-ms", - "128", + "210", "openai-version", "2020-10-01", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", "x-ratelimit-limit-requests", "10000", "x-ratelimit-limit-tokens", @@ -44,13 +42,15 @@ "x-ratelimit-remaining-requests", "9996", "x-ratelimit-remaining-tokens", - "199966", + "199967", "x-ratelimit-reset-requests", - "32.699s", + "32.384s", "x-ratelimit-reset-tokens", - "10ms", + "9ms", "x-request-id", - "req_50ac1e0fdcc58ce38aade7491555a9b5", + "req_7f78b137bb44bdaac4533b2098d4a01d", + "strict-transport-security", + "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status", "DYNAMIC", "X-Content-Type-Options", @@ -58,7 +58,9 @@ "Server", "cloudflare", "CF-RAY", - "8cc0932288328413-YVR" + "8f3ab87e8aeccdf1-SIN", + "alt-svc", + "h3=\":443\"; ma=86400" ], "responseIsBinary": false } diff --git a/packages/instrumentation-openai/test/fixtures/nock-recordings/tool-calls.json b/packages/instrumentation-openai/test/fixtures/nock-recordings/tool-calls.json index 92ec2ea5..d010b82d 100644 --- a/packages/instrumentation-openai/test/fixtures/nock-recordings/tool-calls.json +++ b/packages/instrumentation-openai/test/fixtures/nock-recordings/tool-calls.json @@ -49,11 +49,12 @@ "status": 200, "response": [ "1f8b0800000000000003000000ffff", - "6c525d6f9b30147de75758f7394c849291f016a90f6db575cd34ad52970939e6024e8dedda665a14e5bf5710be92960764eee19c73efb93e7a8400cf2021c04aea58a585bfbe2d9f9fadaeef8d5a3eadbfbed1f5af3d2f37fbd7fd62f31d660d43edf6c85ccffac254a5053aaee4196606a9c346751e87f1325cae6ec216a85486a2a115daf991f22b2eb91f0661e407b13f5f76ec5271861612f2c723849063fb6efa9419fe878404b3be52a1b5b44048869f0801a34453016a2db78e4a07b311644a3a944debb216620238a544caa810a3f1f9394ece63585488f4f7d3cf72f52d780983e271bfbabd7fd93cbcdd3dc63f267e67e9836e1bca6bc9869026f8504faecc080149ab965ba04b3314fc1f9a439a51875722840035455da174cd0070dc8232199a94675b48fa8f7978132db670820beec9fbecfc77128ec1bcb65474a975f5d3b006a10a6dd4ce5ea50a3997dc96a9416adbe9a6217bbd5beb03f5c51e411b5569973af58ab2919d47ddd261bc6b1374d5814e392a26f5450f5ce8a5193acadb450f778b5156623652036f32e247d3cf24ce6372597c50f13a25b007ebb04a732e0b34daf0f62242aed338dad128de45948177f2de010000ffff0300e8f4291f96030000" + "8c534d8fd33010bde75758736e50d2a6db92dbaa4205a4150804d24291e5d893d4bb8eedb59d65abaaff1d256d93b42c123944f6bc79f3f166bc8f0801292027c0b72cf0daaaf8b62ceeee9335be5fdfbe7bfc345dad907d7ec2954d93bba7394c5a86291e908733eb0d37b55518a4d147983b6401dba8e96296658b6536cb3aa03602554bab6c883313d752cb789a4cb33859c4e9f2c4de1ac9d1434e7e468410b2effe6d9d5ae00be424999c2d357acf2a84bc7722049c51ad0598f7d207a6034c06901b1d50b7a5eb46a911108c519433a586c4c76f3f3a0f6231a5a82c7e2fa71f8aafdb6ff72fcf5fd68b8f37e6017f7cc751be63e89ded0a2a1bcd7b9146786fcfaf9211029ad51db7c240052af98c6e47050bd7490801e6aaa6461dda0660bf01e3043a2ac506f2f3259dceb2f9060e70c13d44af9d7f8dc47158369ea9936a27fba11f83329575a6f057aa4229b5f45bea90f9aebbb1c8d1395b97079a8b398275a6b68106f388ba0d9b66a7a1c3b06b23f4ed090c263035b2cfcfc0453c2a3030d90dbadf2dcef816c5401d768c35429a11108d7affbb9ad7621ffb97bafa9ff003c039da80825a8742f2cb8e073787ed53fc975baf725730f89d0f58d352ea0a9d75b27b08505a7a53f234c134c102a243f4070000ffff", + "0300604a8bf316040000" ], "rawHeaders": [ "Date", - "Wed, 02 Oct 2024 00:28:52 GMT", + "Tue, 17 Dec 2024 23:33:55 GMT", "Content-Type", "application/json", "Transfer-Encoding", @@ -63,13 +64,11 @@ "access-control-expose-headers", "X-Request-ID", "openai-organization", - "elastic-observability", + "user-t27sfkqnaatdbowu2i7ij4dc", "openai-processing-ms", - "420", + "496", "openai-version", "2020-10-01", - "strict-transport-security", - "max-age=31536000; includeSubDomains; preload", "x-ratelimit-limit-requests", "10000", "x-ratelimit-limit-tokens", @@ -79,11 +78,13 @@ "x-ratelimit-remaining-tokens", "199921", "x-ratelimit-reset-requests", - "48.715s", + "48.067s", "x-ratelimit-reset-tokens", "23ms", "x-request-id", - "req_7fe6087cc9b2b2c0f6fa81836d95cff2", + "req_83d0ab89905ee01cbd365b3e704f8309", + "strict-transport-security", + "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status", "DYNAMIC", "X-Content-Type-Options", @@ -91,9 +92,11 @@ "Server", "cloudflare", "CF-RAY", - "8cc0932a6df77107-YVR", + "8f3ab8888b1bfd83-SIN", "Content-Encoding", - "gzip" + "gzip", + "alt-svc", + "h3=\":443\"; ma=86400" ], "responseIsBinary": false } diff --git a/packages/instrumentation-openai/test/fixtures/streaming-abort.js b/packages/instrumentation-openai/test/fixtures/streaming-abort.js index a2a27f0c..3f3aab8c 100644 --- a/packages/instrumentation-openai/test/fixtures/streaming-abort.js +++ b/packages/instrumentation-openai/test/fixtures/streaming-abort.js @@ -22,12 +22,12 @@ const { createOpenAIClient, runFnWithNockBack } = require('../testutils'); async function main() { const client = createOpenAIClient(); const stream = await client.chat.completions.create({ - model: process.env.TEST_MODEL_TOOLS, + model: process.env.TEST_CHAT_MODEL, messages: [ { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, ], stream: true, diff --git a/packages/instrumentation-openai/test/fixtures/streaming-bad-iterate.js b/packages/instrumentation-openai/test/fixtures/streaming-bad-iterate.js index 070e40bc..73b7268b 100644 --- a/packages/instrumentation-openai/test/fixtures/streaming-bad-iterate.js +++ b/packages/instrumentation-openai/test/fixtures/streaming-bad-iterate.js @@ -22,12 +22,12 @@ const { createOpenAIClient, runFnWithNockBack } = require('../testutils'); async function main() { const client = createOpenAIClient(); const stream = await client.chat.completions.create({ - model: process.env.TEST_MODEL_TOOLS, + model: process.env.TEST_CHAT_MODEL, messages: [ { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, ], stream: true, diff --git a/packages/instrumentation-openai/test/fixtures/streaming-chat-completion.js b/packages/instrumentation-openai/test/fixtures/streaming-chat-completion.js index a276ae42..17579d24 100644 --- a/packages/instrumentation-openai/test/fixtures/streaming-chat-completion.js +++ b/packages/instrumentation-openai/test/fixtures/streaming-chat-completion.js @@ -22,12 +22,12 @@ const { createOpenAIClient, runFnWithNockBack } = require('../testutils'); async function main() { const client = createOpenAIClient(); const stream = await client.chat.completions.create({ - model: process.env.TEST_MODEL_TOOLS, + model: process.env.TEST_CHAT_MODEL, messages: [ { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, ], stream: true, diff --git a/packages/instrumentation-openai/test/fixtures/streaming-parallel-tool-calls.js b/packages/instrumentation-openai/test/fixtures/streaming-parallel-tool-calls.js index 94939545..fd419d33 100644 --- a/packages/instrumentation-openai/test/fixtures/streaming-parallel-tool-calls.js +++ b/packages/instrumentation-openai/test/fixtures/streaming-parallel-tool-calls.js @@ -47,7 +47,7 @@ async function main() { { role: 'user', content: 'What is the weather in New York and London?' }, ]; const stream = await client.chat.completions.create({ - model: process.env.TEST_MODEL_TOOLS, + model: process.env.TEST_CHAT_MODEL, messages: messages, stream: true, stream_options: { diff --git a/packages/instrumentation-openai/test/fixtures/streaming-tools.js b/packages/instrumentation-openai/test/fixtures/streaming-tools.js index e65e118e..b856fd17 100644 --- a/packages/instrumentation-openai/test/fixtures/streaming-tools.js +++ b/packages/instrumentation-openai/test/fixtures/streaming-tools.js @@ -62,7 +62,7 @@ async function main() { { role: 'user', content: 'i think it is order_12345' }, ]; const stream = await client.chat.completions.create({ - model: process.env.TEST_MODEL_TOOLS, + model: process.env.TEST_CHAT_MODEL, messages: messages, stream: true, stream_options: { diff --git a/packages/instrumentation-openai/test/fixtures/streaming-with-include_usage.js b/packages/instrumentation-openai/test/fixtures/streaming-with-include_usage.js index 1d9e0527..c770f89e 100644 --- a/packages/instrumentation-openai/test/fixtures/streaming-with-include_usage.js +++ b/packages/instrumentation-openai/test/fixtures/streaming-with-include_usage.js @@ -22,12 +22,12 @@ const { createOpenAIClient, runFnWithNockBack } = require('../testutils'); async function main() { const client = createOpenAIClient(); const stream = await client.chat.completions.create({ - model: process.env.TEST_MODEL_TOOLS, + model: process.env.TEST_CHAT_MODEL, messages: [ { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, ], stream: true, diff --git a/packages/instrumentation-openai/test/fixtures/streaming-with-tee.js b/packages/instrumentation-openai/test/fixtures/streaming-with-tee.js index 963179b4..c226e324 100644 --- a/packages/instrumentation-openai/test/fixtures/streaming-with-tee.js +++ b/packages/instrumentation-openai/test/fixtures/streaming-with-tee.js @@ -22,12 +22,12 @@ const { createOpenAIClient, runFnWithNockBack } = require('../testutils'); async function main() { const client = createOpenAIClient(); const stream = await client.chat.completions.create({ - model: process.env.TEST_MODEL_TOOLS, + model: process.env.TEST_CHAT_MODEL, messages: [ { role: 'user', content: - 'Answer in up to 3 words: Which ocean contains the falkland islands?', + 'Answer in up to 3 words: Which ocean contains Bouvet Island?', }, ], stream: true, diff --git a/packages/instrumentation-openai/test/fixtures/tools.js b/packages/instrumentation-openai/test/fixtures/tools.js index 9c882294..f0e207a2 100644 --- a/packages/instrumentation-openai/test/fixtures/tools.js +++ b/packages/instrumentation-openai/test/fixtures/tools.js @@ -62,7 +62,7 @@ async function main() { { role: 'user', content: 'i think it is order_12345' }, ]; const response = await client.chat.completions.create({ - model: process.env.TEST_MODEL_TOOLS, + model: process.env.TEST_CHAT_MODEL, messages: messages, tools: tools, });