From a7acbf37d0796014aa28e584b6f56200ed01e560 Mon Sep 17 00:00:00 2001 From: Ninoh-FOX Date: Thu, 16 Jan 2025 15:03:15 +0100 Subject: [PATCH] upgrade from original code --- .github/ISSUE_TEMPLATE/01-bug-report.yml | 100 + .github/ISSUE_TEMPLATE/02-feature-request.md | 6 + .github/ISSUE_TEMPLATE/config.yml | 14 + .github/workflows/Android.yml | 2 +- .github/workflows/DOS-DJGPP.yml | 2 +- .github/workflows/MacOS.yml | 2 +- .github/workflows/Miyoo.yml | 2 +- .github/workflows/PS2.yml | 2 +- .github/workflows/PS4-ORBIS.yml | 2 +- .github/workflows/PSP.yml | 2 +- .github/workflows/PSVita.yml | 2 +- .github/workflows/RS90.yml | 2 +- .github/workflows/RetroFW.yml | 2 +- .github/workflows/Switch-libnx.yml | 2 +- CHANGES.md | 10 +- audio/common/pipewire.c | 23 +- audio/common/pipewire.h | 15 +- audio/drivers/pipewire.c | 493 +++ audio/drivers/pulse.c | 2 +- audio/drivers_microphone/pipewire.c | 98 +- bluetooth/drivers/bluetoothctl.c | 6 +- cheat_manager.c | 86 +- command.c | 25 +- config.def.h | 4 + config.features.h | 6 + configuration.c | 15 +- core_info.c | 60 +- .../libretro-net-retropad/net_retropad_core.c | 22 +- deps/mbedtls/cacert.h | 3805 ----------------- deps/rcheevos/src/rcheevos/rc_version.h | 29 - disk_control_interface.c | 76 +- disk_index_file.c | 24 +- frontend/drivers/platform_darwin.m | 8 +- frontend/drivers/platform_dos.c | 6 +- frontend/drivers/platform_unix.c | 6 +- gfx/common/d3dcompiler_common.c | 10 +- gfx/common/d3dcompiler_common.h | 2 +- gfx/common/win32_common.c | 50 +- gfx/common/x11_common.c | 8 +- gfx/drivers/vg.c | 4 +- gfx/drivers_context/osmesa_ctx.c | 4 +- gfx/gfx_widgets.c | 100 +- gfx/video_shader_parse.c | 260 +- gfx/widgets/gfx_widget_achievement_popup.c | 22 +- input/common/linux_common.c | 6 +- input/common/wayland_common.c | 9 +- input/drivers/test_input.c | 12 +- input/drivers/winraw_input.c | 20 +- input/drivers_hid/wiiu_hid.c | 28 +- input/drivers_joypad/test_joypad.c | 12 +- input/drivers_joypad/udev_joypad.c | 9 +- input/include/hid_driver.h | 4 +- input/input_driver.c | 14 +- intl/msg_hash_ar.h | 12 +- intl/msg_hash_be.h | 50 +- intl/msg_hash_ca.h | 212 +- intl/msg_hash_chs.h | 36 +- intl/msg_hash_cht.h | 32 +- intl/msg_hash_cs.h | 36 +- intl/msg_hash_de.h | 26 +- intl/msg_hash_el.h | 8 +- intl/msg_hash_en.h | 4 - intl/msg_hash_es.h | 22 +- intl/msg_hash_fi.h | 16 +- intl/msg_hash_fr.h | 22 +- intl/msg_hash_gl.h | 36 +- intl/msg_hash_hu.h | 90 +- intl/msg_hash_it.h | 26 +- intl/msg_hash_ja.h | 68 +- intl/msg_hash_ko.h | 30 +- intl/msg_hash_nl.h | 4 - intl/msg_hash_pl.h | 38 +- intl/msg_hash_pt_br.h | 28 +- intl/msg_hash_pt_pt.h | 418 +- intl/msg_hash_ru.h | 26 +- intl/msg_hash_sv.h | 396 +- intl/msg_hash_tr.h | 30 +- intl/msg_hash_uk.h | 26 +- intl/msg_hash_us.h | 24 +- intl/msg_hash_vn.h | 8 +- intl/progress.h | 28 +- libretro-common/cdrom/cdrom.c | 23 +- libretro-common/compat/compat_posix_string.c | 7 +- libretro-common/compat/compat_strl.c | 39 +- libretro-common/file/archive_file.c | 14 +- libretro-common/file/archive_file_7z.c | 19 +- libretro-common/file/archive_file_zlib.c | 4 +- libretro-common/file/file_path.c | 31 +- libretro-common/file/nbio/nbio_unixmmap.c | 12 +- libretro-common/formats/json/rjson.c | 29 +- libretro-common/formats/m3u/m3u_file.c | 8 +- libretro-common/hash/lrc_hash.c | 10 +- libretro-common/include/file/file_path.h | 2 +- libretro-common/include/formats/rjson.h | 2 +- libretro-common/include/retro_timers.h | 4 +- libretro-common/media/media_detect_cd.c | 71 +- libretro-common/memmap/memmap.c | 16 +- libretro-common/samples/net/net_http_test.c | 4 +- libretro-common/streams/stdin_stream.c | 26 +- libretro-common/streams/trans_stream.c | 8 +- libretro-common/vfs/vfs_implementation.c | 16 +- .../vfs/vfs_implementation_uwp.cpp | 12 +- libretro-db/query.c | 19 +- menu/cbs/menu_cbs_ok.c | 8 +- menu/menu_displaylist.c | 22 +- menu/menu_driver.c | 18 +- menu/menu_setting.c | 9 +- msg_hash.h | 1 + network/cloud_sync/webdav.c | 106 +- pkg/emscripten/libretro/index.html | 162 +- playlist.c | 123 +- playlist.h | 4 +- qb/config.libs.sh | 10 +- retroarch.c | 3 + runahead.c | 18 +- runloop.c | 92 +- runtime_file.c | 26 +- runtime_file.h | 2 +- save.c | 8 +- state_manager.c | 32 +- tasks/task_autodetect.c | 41 +- tasks/task_cloudsync.c | 21 +- tasks/task_content.c | 18 +- tasks/task_database_cue.c | 72 +- tasks/task_save.c | 105 +- tasks/task_translation.c | 4 +- tests-other/autoconf/TestpadD_alternative.cfg | 5 +- .../testinput_alternative_autoconfig.cfg | 2 +- ui/drivers/cocoa/cocoa_common.m | 4 +- ui/drivers/qt/qt_dialogs.cpp | 2 + ui/drivers/ui_cocoatouch.m | 2 +- verbosity.c | 23 +- verbosity.h | 4 +- 133 files changed, 3143 insertions(+), 5467 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/01-bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/02-feature-request.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 audio/drivers/pipewire.c delete mode 100644 deps/mbedtls/cacert.h delete mode 100644 deps/rcheevos/src/rcheevos/rc_version.h diff --git a/.github/ISSUE_TEMPLATE/01-bug-report.yml b/.github/ISSUE_TEMPLATE/01-bug-report.yml new file mode 100644 index 00000000000..d2f15672667 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-bug-report.yml @@ -0,0 +1,100 @@ +name: Bug report +description: This is not a forum or a help section, this is strictly developer oriented. +body: + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Only RetroArch bugs should be filed here. Not core bugs or game bugs + options: + - label: This is a bug in RetroArch frontend + required: true + - label: I have searched the existing issues + + - type: textarea + id: description + attributes: + label: Description + description: Description of the actual behavior of the bug + placeholder: What is actually happening + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behavior + description: What you expected to happen + + - type: textarea + id: reproduce_steps + attributes: + label: Steps to reproduce the bug + description: List all steps to reproduce the problem + placeholder: | + 1. [First step] + 2. [Second step] + 3. [and so on...] + validations: + required: true + + - type: input + id: version + attributes: + label: Version/Commit + description: You can find this information under Information/System Information + placeholder: 1.19.1 (Git 0792144fe3) + validations: + required: true + + - type: input + id: bisecting + attributes: + label: Bisect Results + description: Did this work with any older RetroArch version? Can you point to a version (or even commit) where it broke? + placeholder: 43105ab + + - type: dropdown + id: nigthly + attributes: + label: Check in the nightly version + description: This issue is reproducible with [nightly builds](https://buildbot.libretro.com/nightly/)? + options: + - I don't know + - Yes, this is reproduced in the nightly build + - No, looks like this is already resolved + default: 0 + validations: + required: true + + - type: input + id: platform + attributes: + label: Platform & operating system + description: The system you're running RetroArch on + placeholder: Linux aarch64, Windows 11 23H2, Android 14, PS Vita + validations: + required: true + + - type: input + id: cores + attributes: + label: Affected Cores + description: List the affected cores and their versions here, if applicable. If the issue **only occurs with a single core** then the bug may not be with RetroArch; in that case, you should report it in that core's repository instead of here. + placeholder: bsnes (115), FCEUmm ((SVN) aebea87), Snes9x (1.63.229933ea) + + - type: textarea + id: environment + attributes: + label: Environment information + description: Additional information about hardware and software + placeholder: | + * Window Manager: dwm/X11 + * Affected video drivers: sdl2, glcore + * Installed through Flatpak + + - type: textarea + id: logs + attributes: + label: Relevant log output + description: Paste [RetroArch log](https://docs.libretro.com/guides/generating-retroarch-logs/) and/or [GDB backtrace](https://docs.libretro.com/development/retroarch/debugging/). This will be automatically formatted into code, so no need for backticks. + render: shell diff --git a/.github/ISSUE_TEMPLATE/02-feature-request.md b/.github/ISSUE_TEMPLATE/02-feature-request.md new file mode 100644 index 00000000000..ebe07190663 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02-feature-request.md @@ -0,0 +1,6 @@ +--- +name: Feature request +title: "[Feature Request] " +about: Is there something you'd like to see in RetroArch? +labels: feature request +--- diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000000..86a67a7b11f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,14 @@ +blank_issues_enabled: true +contact_links: + - name: Libretro Forums + url: https://forums.libretro.com + about: A place to discuss all things libretro + - name: Discord + url: https://ra-link.web.app/discord + about: Join our Discord server for help + - name: RetroArch/libretro subreddit + url: https://www.reddit.com/r/RetroArch + about: Subreddit dedicated to RetroArch and the libretro API framework + - name: Documentation + url: https://docs.libretro.com + about: Official RetroArch documentation for users and developers diff --git a/.github/workflows/Android.yml b/.github/workflows/Android.yml index da68bb12d8d..dbb0d7ee671 100644 --- a/.github/workflows/Android.yml +++ b/.github/workflows/Android.yml @@ -30,7 +30,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: retroarch-android-${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/DOS-DJGPP.yml b/.github/workflows/DOS-DJGPP.yml index d144a2f108d..6f5595ce054 100644 --- a/.github/workflows/DOS-DJGPP.yml +++ b/.github/workflows/DOS-DJGPP.yml @@ -31,7 +31,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: RA-DOS-dummy-${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/MacOS.yml b/.github/workflows/MacOS.yml index 37e6026ee73..10ab355ec3b 100644 --- a/.github/workflows/MacOS.yml +++ b/.github/workflows/MacOS.yml @@ -26,7 +26,7 @@ jobs: id: slug run: echo "sha8=$(echo ${GITHUB_SHA} | cut -c1-8)" >> $GITHUB_OUTPUT - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: RetroArch-${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/Miyoo.yml b/.github/workflows/Miyoo.yml index 2a7556ba1a3..de6018a50a8 100644 --- a/.github/workflows/Miyoo.yml +++ b/.github/workflows/Miyoo.yml @@ -31,7 +31,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: retroarch_miyoo_arm32${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/PS2.yml b/.github/workflows/PS2.yml index eba2153e8ae..4e60d718f09 100644 --- a/.github/workflows/PS2.yml +++ b/.github/workflows/PS2.yml @@ -36,7 +36,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: RA-PS2-dummy-${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/PS4-ORBIS.yml b/.github/workflows/PS4-ORBIS.yml index 60773e9bc0e..2296eed6d0b 100644 --- a/.github/workflows/PS4-ORBIS.yml +++ b/.github/workflows/PS4-ORBIS.yml @@ -37,7 +37,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: bin-${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/PSP.yml b/.github/workflows/PSP.yml index d1b3a9b06a7..2ae652d0d65 100644 --- a/.github/workflows/PSP.yml +++ b/.github/workflows/PSP.yml @@ -42,7 +42,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: RA-PSP-dummy-${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/PSVita.yml b/.github/workflows/PSVita.yml index 9be7c3dbfee..87e5933e9e8 100644 --- a/.github/workflows/PSVita.yml +++ b/.github/workflows/PSVita.yml @@ -35,7 +35,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: RA-PSVita-dummy-${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/RS90.yml b/.github/workflows/RS90.yml index 1fea310bdf8..34332c5ce09 100644 --- a/.github/workflows/RS90.yml +++ b/.github/workflows/RS90.yml @@ -31,7 +31,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: retroarch_rs90_mips32${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/RetroFW.yml b/.github/workflows/RetroFW.yml index 24ec76f2ba2..cb57960e1d9 100644 --- a/.github/workflows/RetroFW.yml +++ b/.github/workflows/RetroFW.yml @@ -31,7 +31,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: retroarch_retrofw_mips32${{ steps.slug.outputs.sha8 }} path: | diff --git a/.github/workflows/Switch-libnx.yml b/.github/workflows/Switch-libnx.yml index 75a25054f87..df26e01f195 100644 --- a/.github/workflows/Switch-libnx.yml +++ b/.github/workflows/Switch-libnx.yml @@ -30,7 +30,7 @@ jobs: id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: RA-libnx-dummy-${{ steps.slug.outputs.sha8 }} path: | diff --git a/CHANGES.md b/CHANGES.md index 8d54800a693..5e9189bc7aa 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,11 @@ # Future +- AUDIO/PIPEWIRE: Fix app launch when pipewire service is stopped +- GENERAL: Fix save state auto increment +- GENERAL: Fix softpatching with periods/dots in the file name +- GENERAL: Fix compilation with --enable-videocore +- MENU: Add SSL support to the information list +- IOS: Ensure webserver notice can be dismissed +- VIDEO/SHADERS: Allow exact refresh rate sync with shader subframes # 1.20.0 - AUDIO: Fix audio handling in case of RARCH_NETPLAY_CTL_USE_CORE_PACKET_INTERFACE @@ -46,7 +53,7 @@ - INPUT/UDEV: Enable mouse buttons 4 and 5 - INPUT/WAYLAND: Enable horizontal scroll and mouse buttons 4 and 5 - INPUT/WAYLAND: Simulate lightgun input for cores -- INPUT/WAYLAND: Support for cursor-shape-v1 and content-type-v1 protocol +- INPUT/WAYLAND: Support for cursor-shape-v1 protocol - INPUT/X11: Enable mouse buttons 4 and 5 - iOS: Enable vibration by default - iOS: Better handling of physical mice/magic keyboard trackpad @@ -114,6 +121,7 @@ - VIDEO/VULKAN: Fix Vulkan window freezes when swapchain becomes suboptimal - VIDEO/VULKAN: Prefer IMMEDIATE mode without vsync - VIDEO/X11: Support inhibit of Xss screensaver +- VIDEO/WAYLAND: Support for content-type-v1 protocol - VITA: Enable analog L2/R2 triggers when a DS3 controller is used with PS Vita - WAYLAND: Fix segfault when relative pointer is not supported - WAYLAND: Use reverse DNS name for desktop file and icon diff --git a/audio/common/pipewire.c b/audio/common/pipewire.c index be05b221bf8..b4d01744063 100644 --- a/audio/common/pipewire.c +++ b/audio/common/pipewire.c @@ -31,7 +31,6 @@ static void core_error_cb(void *data, uint32_t id, int seq, int res, const char RARCH_ERR("[PipeWire]: error id:%u seq:%d res:%d (%s): %s\n", id, seq, res, spa_strerror(res), message); - /* stop and exit the thread loop */ pw_thread_loop_stop(pw->thread_loop); } @@ -42,11 +41,9 @@ static void core_done_cb(void *data, uint32_t id, int seq) retro_assert(id == PW_ID_CORE); pw->last_seq = seq; + if (pw->pending_seq == seq) - { - /* stop and exit the thread loop */ pw_thread_loop_signal(pw->thread_loop, false); - } } static const struct pw_core_events core_events = { @@ -55,7 +52,7 @@ static const struct pw_core_events core_events = { .error = core_error_cb, }; -size_t calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels) +size_t pipewire_calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels) { uint32_t sample_size = 1; switch (fmt) @@ -85,7 +82,7 @@ size_t calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels) return sample_size * nchannels; } -void set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]) +void pipewire_set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]) { memcpy(position, (uint32_t[SPA_AUDIO_MAX_CHANNELS]) { SPA_AUDIO_CHANNEL_UNKNOWN, }, sizeof(uint32_t) * SPA_AUDIO_MAX_CHANNELS); @@ -114,7 +111,7 @@ void set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]) } } -void pipewire_wait_resync(pipewire_core_t *pw) +void pipewire_core_wait_resync(pipewire_core_t *pw) { retro_assert(pw); pw->pending_seq = pw_core_sync(pw->core, PW_ID_CORE, pw->pending_seq); @@ -127,7 +124,7 @@ void pipewire_wait_resync(pipewire_core_t *pw) } } -bool pipewire_set_active(struct pw_thread_loop *loop, struct pw_stream *stream, bool active) +bool pipewire_stream_set_active(struct pw_thread_loop *loop, struct pw_stream *stream, bool active) { enum pw_stream_state st; const char *error; @@ -162,13 +159,17 @@ bool pipewire_core_init(pipewire_core_t *pw, const char *loop_name) pw_thread_loop_lock(pw->thread_loop); pw->core = pw_context_connect(pw->ctx, NULL, 0); - if(!pw->core) - return false; + if (!pw->core) + goto unlock; if (pw_core_add_listener(pw->core, &pw->core_listener, &core_events, pw) < 0) - return false; + goto unlock; return true; + +unlock: + pw_thread_loop_unlock(pw->thread_loop); + return false; } diff --git a/audio/common/pipewire.h b/audio/common/pipewire.h index 7e9627128ac..7b9a0dce4a7 100644 --- a/audio/common/pipewire.h +++ b/audio/common/pipewire.h @@ -38,27 +38,26 @@ typedef struct pipewire_core { struct pw_thread_loop *thread_loop; struct pw_context *ctx; + struct pw_core *core; struct spa_hook core_listener; int last_seq, pending_seq; struct pw_registry *registry; struct spa_hook registry_listener; - struct pw_client *client; - struct spa_hook client_listener; - bool nonblock; struct string_list *devicelist; + bool nonblock; } pipewire_core_t; -size_t calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels); +size_t pipewire_calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels); -void set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]); +void pipewire_set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]); -void pipewire_wait_resync(pipewire_core_t *pipewire); +bool pipewire_core_init(pipewire_core_t *pipewire, const char *loop_name); -bool pipewire_set_active(struct pw_thread_loop *loop, struct pw_stream *stream, bool active); +void pipewire_core_wait_resync(pipewire_core_t *pipewire); -bool pipewire_core_init(pipewire_core_t *pipewire, const char *loop_name); +bool pipewire_stream_set_active(struct pw_thread_loop *loop, struct pw_stream *stream, bool active); #endif /* _RETROARCH_PIPEWIRE */ diff --git a/audio/drivers/pipewire.c b/audio/drivers/pipewire.c new file mode 100644 index 00000000000..45142948d5e --- /dev/null +++ b/audio/drivers/pipewire.c @@ -0,0 +1,493 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2024-2025 - Viachaslau Khalikin + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include "audio/common/pipewire.h" +#include "audio/audio_driver.h" +#include "verbosity.h" + + +#define DEFAULT_CHANNELS 2 +#define RINGBUFFER_SIZE (1u << 22) +#define RINGBUFFER_MASK (RINGBUFFER_SIZE - 1) + +typedef struct pipewire_audio +{ + pipewire_core_t *pw; + struct pw_stream *stream; + struct spa_hook stream_listener; + struct spa_audio_info_raw info; + uint32_t highwater_mark; + uint32_t frame_size; + struct spa_ringbuffer ring; + uint8_t buffer[RINGBUFFER_SIZE]; +} pipewire_audio_t; + +static void stream_destroy_cb(void *data) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + spa_hook_remove(&audio->stream_listener); + audio->stream = NULL; +} + +static void playback_process_cb(void *data) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + void *p; + struct pw_buffer *b; + struct spa_buffer *buf; + uint32_t req, idx, n_bytes; + int32_t avail; + + retro_assert(audio->stream); + + if ((b = pw_stream_dequeue_buffer(audio->stream)) == NULL) + { + RARCH_WARN("[PipeWire]: Out of buffers: %s\n", strerror(errno)); + return; + } + + buf = b->buffer; + if ((p = buf->datas[0].data) == NULL) + goto done; + + /* calculate the total no of bytes to read data from buffer */ + n_bytes = buf->datas[0].maxsize; + if (b->requested) + n_bytes = SPA_MIN(b->requested * audio->frame_size, n_bytes); + + avail = spa_ringbuffer_get_read_index(&audio->ring, &idx); + + if (avail <= 0) + /* fill rest buffer with silence */ + memset(p, 0x00, n_bytes); + else + { + if (avail < (int32_t)n_bytes) + n_bytes = avail; + + spa_ringbuffer_read_data(&audio->ring, + audio->buffer, RINGBUFFER_SIZE, + idx & RINGBUFFER_MASK, p, n_bytes); + + idx += n_bytes; + spa_ringbuffer_read_update(&audio->ring, idx); + } + + buf->datas[0].chunk->offset = 0; + buf->datas[0].chunk->stride = audio->frame_size; + buf->datas[0].chunk->size = n_bytes; + +done: + pw_stream_queue_buffer(audio->stream, b); + pw_thread_loop_signal(audio->pw->thread_loop, false); +} + +static void pipewire_free(void *data); + +static void stream_state_changed_cb(void *data, + enum pw_stream_state old, enum pw_stream_state state, const char *error) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + + RARCH_DBG("[PipeWire]: New state for Sink Node %d : %s\n", + pw_stream_get_node_id(audio->stream), + pw_stream_state_as_string(state)); + + switch(state) + { + case PW_STREAM_STATE_ERROR: + RARCH_ERR("[PipeWire]: Stream error\n"); + pw_thread_loop_signal(audio->pw->thread_loop, false); + break; + case PW_STREAM_STATE_UNCONNECTED: + RARCH_WARN("[PipeWire]: Stream unconnected\n"); + pw_thread_loop_stop(audio->pw->thread_loop); + break; + case PW_STREAM_STATE_STREAMING: + case PW_STREAM_STATE_PAUSED: + pw_thread_loop_signal(audio->pw->thread_loop, false); + break; + default: + break; + } +} + +static const struct pw_stream_events playback_stream_events = { + PW_VERSION_STREAM_EVENTS, + .destroy = stream_destroy_cb, + .process = playback_process_cb, + .state_changed = stream_state_changed_cb, +}; + +static void registry_event_global(void *data, uint32_t id, + uint32_t permissions, const char *type, uint32_t version, + const struct spa_dict *props) +{ + union string_list_elem_attr attr; + const struct spa_dict_item *item; + pipewire_core_t *pw = (pipewire_core_t*)data; + const char *media = NULL; + const char *sink = NULL; + + if (spa_streq(type, PW_TYPE_INTERFACE_Node)) + { + media = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS); + if (media && strcmp(media, "Audio/Sink") == 0) + { + sink = spa_dict_lookup(props, PW_KEY_NODE_NAME); + if (sink && pw->devicelist) + { + attr.i = id; + string_list_append(pw->devicelist, sink, attr); + RARCH_LOG("[PipeWire]: Found Sink Node: %s\n", sink); + } + + RARCH_DBG("[PipeWire]: Object: id:%u Type:%s/%d\n", id, type, version); + spa_dict_for_each(item, props) + RARCH_DBG("[PipeWire]: \t\t%s: \"%s\"\n", item->key, item->value); + } + } +} + +static const struct pw_registry_events registry_events = { + PW_VERSION_REGISTRY_EVENTS, + .global = registry_event_global, +}; + +static void *pipewire_init(const char *device, unsigned rate, + unsigned latency, + unsigned block_frames, + unsigned *new_rate) +{ + int res; + uint64_t buf_samples; + const struct spa_pod *params[1]; + uint8_t buffer[1024]; + struct pw_properties *props = NULL; + const char *error = NULL; + pipewire_audio_t *audio = (pipewire_audio_t*)calloc(1, sizeof(*audio)); + pipewire_core_t *pw = NULL; + struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer)); + + pw_init(NULL, NULL); + + if (!audio) + goto error; + + pw = audio->pw = (pipewire_core_t*)calloc(1, sizeof(*audio->pw)); + pw->devicelist = string_list_new(); + + if (!pipewire_core_init(pw, "audio_driver")) + goto error; + + pw->registry = pw_core_get_registry(pw->core, PW_VERSION_REGISTRY, 0); + + spa_zero(pw->registry_listener); + pw_registry_add_listener(pw->registry, &pw->registry_listener, ®istry_events, pw); + + /* unlock, run the loop and wait, this will trigger the callbacks */ + pipewire_core_wait_resync(pw); + + audio->info.format = is_little_endian() ? SPA_AUDIO_FORMAT_F32_LE : SPA_AUDIO_FORMAT_F32_BE; + audio->info.channels = DEFAULT_CHANNELS; + pipewire_set_position(DEFAULT_CHANNELS, audio->info.position); + audio->info.rate = rate; + audio->frame_size = pipewire_calc_frame_size(audio->info.format, DEFAULT_CHANNELS); + + props = pw_properties_new(PW_KEY_MEDIA_TYPE, PW_RARCH_MEDIA_TYPE_AUDIO, + PW_KEY_MEDIA_CATEGORY, PW_RARCH_MEDIA_CATEGORY_PLAYBACK, + PW_KEY_MEDIA_ROLE, PW_RARCH_MEDIA_ROLE, + PW_KEY_NODE_NAME, PW_RARCH_APPNAME, + PW_KEY_NODE_DESCRIPTION, PW_RARCH_APPNAME, + PW_KEY_APP_NAME, PW_RARCH_APPNAME, + PW_KEY_APP_ID, PW_RARCH_APPNAME, + PW_KEY_APP_ICON_NAME, PW_RARCH_APPNAME, + NULL); + if (!props) + goto unlock_error; + + if (device) + pw_properties_set(props, PW_KEY_TARGET_OBJECT, device); + + buf_samples = latency * rate / 1000; + pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%" PRIu64 "/%u", buf_samples, rate); + pw_properties_setf(props, PW_KEY_NODE_RATE, "1/%d", rate); + audio->stream = pw_stream_new(pw->core, PW_RARCH_APPNAME, props); + + if (!audio->stream) + goto unlock_error; + + pw_stream_add_listener(audio->stream, &audio->stream_listener, &playback_stream_events, audio); + + params[0] = spa_format_audio_raw_build(&b, SPA_PARAM_EnumFormat, &audio->info); + + /* Now connect this stream. We ask that our process function is + * called in a realtime thread. */ + res = pw_stream_connect(audio->stream, + PW_DIRECTION_OUTPUT, + PW_ID_ANY, + PW_STREAM_FLAG_AUTOCONNECT | + PW_STREAM_FLAG_MAP_BUFFERS | + PW_STREAM_FLAG_RT_PROCESS, + params, 1); + + if (res < 0) + goto unlock_error; + + audio->highwater_mark = MIN(RINGBUFFER_SIZE, + latency * (uint64_t)rate / 1000 * audio->frame_size); + + pw_thread_loop_unlock(pw->thread_loop); + + return audio; + +unlock_error: + pw_thread_loop_unlock(audio->pw->thread_loop); +error: + RARCH_ERR("[PipeWire]: Failed to initialize audio\n"); + pipewire_free(audio); + return NULL; +} + +static ssize_t pipewire_write(void *data, const void *buf_, size_t size) +{ + int32_t filled, avail; + uint32_t idx; + pipewire_audio_t *audio = (pipewire_audio_t*)data; + const char *error = NULL; + + if (pw_stream_get_state(audio->stream, &error) != PW_STREAM_STATE_STREAMING) + return 0; /* wait for stream to become ready */ + + if (size > audio->highwater_mark) + { + RARCH_ERR("[PipeWire]: Buffer too small! Please try increasing the latency.\n"); + return 0; + } + + pw_thread_loop_lock(audio->pw->thread_loop); + + while (size) + { + filled = spa_ringbuffer_get_write_index(&audio->ring, &idx); + avail = audio->highwater_mark - filled; + +#if 0 /* Useful for tracing */ + RARCH_DBG("[PipeWire]: Ringbuffer utilization: filled %d, avail %d, index %d, size %d\n", + filled, avail, idx, size); +#endif + + /* in non-blocking mode we play as much as we can + * in blocking mode we expect a freed buffer of at least the given size */ + if (size > (size_t)avail) + { + if (audio->pw->nonblock) + { + size = avail; + break; + } + + pw_thread_loop_wait(audio->pw->thread_loop); + } + else + break; + } + + if (filled < 0) + RARCH_ERR("[Pipewire]: %p: underrun write:%u filled:%d\n", audio, idx, filled); + else + { + if ((uint32_t) filled + size > RINGBUFFER_SIZE) + { + RARCH_ERR("[PipeWire]: %p: overrun write:%u filled:%d + size:%zu > max:%u\n", + audio, idx, filled, size, RINGBUFFER_SIZE); + } + } + + spa_ringbuffer_write_data(&audio->ring, + audio->buffer, RINGBUFFER_SIZE, + idx & RINGBUFFER_MASK, buf_, size); + idx += size; + spa_ringbuffer_write_update(&audio->ring, idx); + + pw_thread_loop_unlock(audio->pw->thread_loop); + return size; +} + +static bool pipewire_stop(void *data) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + const char *error = NULL; + + if (!audio || !audio->pw) + return false; + if (pw_stream_get_state(audio->stream, &error) == PW_STREAM_STATE_PAUSED) + return true; + + return pipewire_stream_set_active(audio->pw->thread_loop, audio->stream, false); +} + +static bool pipewire_start(void *data, bool is_shutdown) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + const char *error = NULL; + + if (!audio || !audio->pw) + return false; + if (pw_stream_get_state(audio->stream, &error) == PW_STREAM_STATE_STREAMING) + return true; + + return pipewire_stream_set_active(audio->pw->thread_loop, audio->stream, true); +} + +static bool pipewire_alive(void *data) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + const char *error = NULL; + + if (!audio) + return false; + + return pw_stream_get_state(audio->stream, &error) == PW_STREAM_STATE_STREAMING; +} + +static void pipewire_set_nonblock_state(void *data, bool state) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + if (audio && audio->pw) + audio->pw->nonblock = state; +} + +static void pipewire_free(void *data) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + + if (!audio) + return pw_deinit(); + + if (audio->pw->thread_loop) + pw_thread_loop_stop(audio->pw->thread_loop); + + if (audio->stream) + { + pw_stream_destroy(audio->stream); + audio->stream = NULL; + } + + if (audio->pw->registry) + pw_proxy_destroy((struct pw_proxy*)audio->pw->registry); + + if (audio->pw->core) + { + spa_hook_remove(&audio->pw->core_listener); + spa_zero(audio->pw->core_listener); + pw_core_disconnect(audio->pw->core); + } + + if (audio->pw->ctx) + pw_context_destroy(audio->pw->ctx); + + pw_thread_loop_destroy(audio->pw->thread_loop); + + if (audio->pw->devicelist) + string_list_free(audio->pw->devicelist); + + free(audio->pw); + free(audio); + pw_deinit(); +} + +static bool pipewire_use_float(void *data) +{ + (void)data; + return true; +} + +static void *pipewire_device_list_new(void *data) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + + if (audio && audio->pw && audio->pw->devicelist) + return string_list_clone(audio->pw->devicelist); + + return NULL; +} + +static void pipewire_device_list_free(void *data, void *array_list_data) +{ + struct string_list *s = (struct string_list*)array_list_data; + + if (s) + string_list_free(s); +} + +static size_t pipewire_write_avail(void *data) +{ + uint32_t idx, written, length; + pipewire_audio_t *audio = (pipewire_audio_t*)data; + const char *error = NULL; + + retro_assert(audio->pw); + retro_assert(audio->stream); + + if (pw_stream_get_state(audio->stream, &error) != PW_STREAM_STATE_STREAMING) + return 0; /* wait for stream to become ready */ + + pw_thread_loop_lock(audio->pw->thread_loop); + written = spa_ringbuffer_get_write_index(&audio->ring, &idx); + length = audio->highwater_mark - written; + pw_thread_loop_unlock(audio->pw->thread_loop); + + return length; +} + +static size_t pipewire_buffer_size(void *data) +{ + pipewire_audio_t *audio = (pipewire_audio_t*)data; + return audio->highwater_mark; +} + +audio_driver_t audio_pipewire = { + pipewire_init, + pipewire_write, + pipewire_stop, + pipewire_start, + pipewire_alive, + pipewire_set_nonblock_state, + pipewire_free, + pipewire_use_float, + "pipewire", + pipewire_device_list_new, + pipewire_device_list_free, + pipewire_write_avail, + pipewire_buffer_size, +}; diff --git a/audio/drivers/pulse.c b/audio/drivers/pulse.c index b680f05a1dd..54858495040 100644 --- a/audio/drivers/pulse.c +++ b/audio/drivers/pulse.c @@ -142,7 +142,7 @@ static void stream_state_cb(pa_stream *s, void *data) } } -static void stream_request_cb(pa_stream *s, size_t length, void *data) +static void stream_request_cb(pa_stream *s, size_t len, void *data) { pa_t *pa = (pa_t*)data; pa_threaded_mainloop_signal(pa->mainloop, 0); diff --git a/audio/drivers_microphone/pipewire.c b/audio/drivers_microphone/pipewire.c index f957ac6741c..2bb009555f4 100644 --- a/audio/drivers_microphone/pipewire.c +++ b/audio/drivers_microphone/pipewire.c @@ -33,21 +33,18 @@ #define DEFAULT_CHANNELS 1 -#define QUANTUM 1024 /* TODO: detect */ #define RINGBUFFER_SIZE (1u << 22) #define RINGBUFFER_MASK (RINGBUFFER_SIZE - 1) typedef struct pipewire_microphone { pipewire_core_t *pw; - struct pw_stream *stream; struct spa_hook stream_listener; struct spa_audio_info_raw info; uint32_t frame_size; struct spa_ringbuffer ring; uint8_t buffer[RINGBUFFER_SIZE]; - bool is_ready; } pipewire_microphone_t; @@ -90,7 +87,7 @@ static void capture_process_cb(void *data) struct pw_buffer *b; struct spa_buffer *buf; int32_t filled; - uint32_t index, offs, n_bytes; + uint32_t idx, offs, n_bytes; assert(microphone->stream); @@ -102,30 +99,31 @@ static void capture_process_cb(void *data) } buf = b->buffer; - p = buf->datas[0].data; - if (p == NULL) - return; + if ((p = buf->datas[0].data) == NULL) + goto done; offs = SPA_MIN(buf->datas[0].chunk->offset, buf->datas[0].maxsize); n_bytes = SPA_MIN(buf->datas[0].chunk->size, buf->datas[0].maxsize - offs); - filled = spa_ringbuffer_get_write_index(µphone->ring, &index); + filled = spa_ringbuffer_get_write_index(µphone->ring, &idx); if (filled < 0) - RARCH_ERR("[PipeWire]: %p: underrun write:%u filled:%d\n", p, index, filled); + RARCH_ERR("[PipeWire]: %p: underrun write:%u filled:%d\n", p, idx, filled); else { if ((uint32_t)filled + n_bytes > RINGBUFFER_SIZE) RARCH_ERR("[PipeWire]: %p: overrun write:%u filled:%d + size:%u > max:%u\n", - p, index, filled, n_bytes, RINGBUFFER_SIZE); + p, idx, filled, n_bytes, RINGBUFFER_SIZE); } spa_ringbuffer_write_data(µphone->ring, microphone->buffer, RINGBUFFER_SIZE, - index & RINGBUFFER_MASK, + idx & RINGBUFFER_MASK, SPA_PTROFF(p, offs, void), n_bytes); - index += n_bytes; - spa_ringbuffer_write_update(µphone->ring, index); + idx += n_bytes; + spa_ringbuffer_write_update(µphone->ring, idx); +done: pw_stream_queue_buffer(microphone->stream, b); + pw_thread_loop_signal(microphone->pw->thread_loop, false); } static const struct pw_stream_events capture_stream_events = { @@ -140,6 +138,7 @@ static void registry_event_global(void *data, uint32_t id, const struct spa_dict *props) { union string_list_elem_attr attr; + const struct spa_dict_item *item; pipewire_core_t *pw = (pipewire_core_t*)data; const char *media = NULL; const char *sink = NULL; @@ -158,6 +157,10 @@ static void registry_event_global(void *data, uint32_t id, string_list_append(pw->devicelist, sink, attr); RARCH_LOG("[PipeWire]: Found Source Node: %s\n", sink); } + + RARCH_DBG("[PipeWire]: Object: id:%u Type:%s/%d\n", id, type, version); + spa_dict_for_each(item, props) + RARCH_DBG("[PipeWire]: \t\t%s: \"%s\"\n", item->key, item->value); } } } @@ -197,7 +200,7 @@ static void *pipewire_microphone_init(void) spa_zero(pw->registry_listener); pw_registry_add_listener(pw->registry, &pw->registry_listener, ®istry_events, pw); - pipewire_wait_resync(pw); + pipewire_core_wait_resync(pw); pw_thread_loop_unlock(pw->thread_loop); return pw; @@ -219,9 +222,6 @@ static void pipewire_microphone_free(void *driver_context) if (pw->thread_loop) pw_thread_loop_stop(pw->thread_loop); - if (pw->client) - pw_proxy_destroy((struct pw_proxy *)pw->client); - if (pw->registry) pw_proxy_destroy((struct pw_proxy*)pw->registry); @@ -247,26 +247,41 @@ static void pipewire_microphone_free(void *driver_context) static int pipewire_microphone_read(void *driver_context, void *microphone_context, void *buf_, size_t size_) { int32_t readable; - uint32_t index; + uint32_t idx; const char *error = NULL; pipewire_core_t *pw = (pipewire_core_t*)driver_context; pipewire_microphone_t *microphone = (pipewire_microphone_t*)microphone_context; - if (!microphone->is_ready || pw_stream_get_state(microphone->stream, &error) != PW_STREAM_STATE_STREAMING) + if ( !microphone->is_ready + || pw_stream_get_state(microphone->stream, &error) != PW_STREAM_STATE_STREAMING) return -1; pw_thread_loop_lock(pw->thread_loop); - /* get no of available bytes to read data from buffer */ - readable = spa_ringbuffer_get_read_index(µphone->ring, &index); - if (readable < (int32_t)size_) - size_ = readable; + while (size_) + { + /* get no of available bytes to read data from buffer */ + readable = spa_ringbuffer_get_read_index(µphone->ring, &idx); + + if (readable < (int32_t)size_) + { + if (pw->nonblock) + { + size_ = readable; + break; + } + + pw_thread_loop_wait(pw->thread_loop); + } + else + break; + } spa_ringbuffer_read_data(µphone->ring, microphone->buffer, RINGBUFFER_SIZE, - index & RINGBUFFER_MASK, buf_, size_); - index += size_; - spa_ringbuffer_read_update(µphone->ring, index); + idx & RINGBUFFER_MASK, buf_, size_); + idx += size_; + spa_ringbuffer_read_update(µphone->ring, idx); pw_thread_loop_unlock(pw->thread_loop); return size_; @@ -328,15 +343,16 @@ static void *pipewire_microphone_open_mic(void *driver_context, if (!microphone) goto error; + microphone->is_ready = false; microphone->pw = (pipewire_core_t*)driver_context; pw_thread_loop_lock(microphone->pw->thread_loop); microphone->info.format = is_little_endian() ? SPA_AUDIO_FORMAT_F32_LE : SPA_AUDIO_FORMAT_F32_BE; microphone->info.channels = DEFAULT_CHANNELS; - set_position(DEFAULT_CHANNELS, microphone->info.position); + pipewire_set_position(DEFAULT_CHANNELS, microphone->info.position); microphone->info.rate = rate; - microphone->frame_size = calc_frame_size(microphone->info.format, DEFAULT_CHANNELS); + microphone->frame_size = pipewire_calc_frame_size(microphone->info.format, DEFAULT_CHANNELS); props = pw_properties_new(PW_KEY_MEDIA_TYPE, PW_RARCH_MEDIA_TYPE_AUDIO, PW_KEY_MEDIA_CATEGORY, PW_RARCH_MEDIA_CATEGORY_RECORD, @@ -353,13 +369,9 @@ static void *pipewire_microphone_open_mic(void *driver_context, if (device) pw_properties_set(props, PW_KEY_TARGET_OBJECT, device); - buf_samples = QUANTUM * rate * 3 / 4 / 100000; - - pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%" PRIu64 "/%u", - buf_samples, rate); - + buf_samples = latency * rate / 1000; + pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%" PRIu64 "/%u", buf_samples, rate); pw_properties_setf(props, PW_KEY_NODE_RATE, "1/%d", rate); - microphone->stream = pw_stream_new(microphone->pw->core, PW_RARCH_APPNAME, props); if (!microphone->stream) @@ -375,6 +387,7 @@ static void *pipewire_microphone_open_mic(void *driver_context, PW_DIRECTION_INPUT, PW_ID_ANY, PW_STREAM_FLAG_AUTOCONNECT | + PW_STREAM_FLAG_INACTIVE | PW_STREAM_FLAG_MAP_BUFFERS | PW_STREAM_FLAG_RT_PROCESS, params, 1); @@ -383,11 +396,11 @@ static void *pipewire_microphone_open_mic(void *driver_context, goto unlock_error; pw_thread_loop_wait(microphone->pw->thread_loop); - pw_thread_loop_unlock(microphone->pw->thread_loop); + *new_rate = microphone->info.rate; - microphone->is_ready = true; + microphone->is_ready = true; return microphone; unlock_error: @@ -419,12 +432,12 @@ static bool pipewire_microphone_start_mic(void *driver_context, void *microphone pipewire_microphone_t *microphone = (pipewire_microphone_t*)microphone_context; const char *error = NULL; - if (!microphone->is_ready) + if (!pw || !microphone || !microphone->is_ready) return false; if (pw_stream_get_state(microphone->stream, &error) == PW_STREAM_STATE_STREAMING) return true; - return pipewire_set_active(pw->thread_loop, microphone->stream, true); + return pipewire_stream_set_active(pw->thread_loop, microphone->stream, true); } static bool pipewire_microphone_stop_mic(void *driver_context, void *microphone_context) @@ -432,13 +445,18 @@ static bool pipewire_microphone_stop_mic(void *driver_context, void *microphone_ pipewire_core_t *pw = (pipewire_core_t*)driver_context; pipewire_microphone_t *microphone = (pipewire_microphone_t*)microphone_context; const char *error = NULL; + bool res = false; - if (!microphone->is_ready) + if (!pw || !microphone || !microphone->is_ready) return false; if (pw_stream_get_state(microphone->stream, &error) == PW_STREAM_STATE_PAUSED) return true; - return pipewire_set_active(pw->thread_loop, microphone->stream, false); + res = pipewire_stream_set_active(pw->thread_loop, microphone->stream, false); + spa_ringbuffer_read_update(µphone->ring, 0); + spa_ringbuffer_write_update(µphone->ring, 0); + + return res; } static bool pipewire_microphone_mic_use_float(const void *driver_context, const void *microphone_context) diff --git a/bluetooth/drivers/bluetoothctl.c b/bluetooth/drivers/bluetoothctl.c index 8913aaae457..20e3919d0e5 100644 --- a/bluetooth/drivers/bluetoothctl.c +++ b/bluetooth/drivers/bluetoothctl.c @@ -64,9 +64,9 @@ static void bluetoothctl_scan(void *data) while (fgets(line, 512, dev_file)) { - size_t len = strlen(line); - if (len > 0 && line[len-1] == '\n') - line[--len] = '\0'; + size_t _len = strlen(line); + if (_len > 0 && line[_len - 1] == '\n') + line[--_len] = '\0'; string_list_append(btctl->lines, line, attr); } diff --git a/cheat_manager.c b/cheat_manager.c index d0d2e3ec054..18256e0c5e7 100644 --- a/cheat_manager.c +++ b/cheat_manager.c @@ -68,10 +68,10 @@ unsigned cheat_manager_get_size(void) #ifdef HAVE_CHEEVOS static void cheat_manager_pause_cheevos(void) { - const char *msg = msg_hash_to_str(MSG_CHEEVOS_HARDCORE_MODE_DISABLED_CHEAT); + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEEVOS_HARDCORE_MODE_DISABLED_CHEAT), sizeof(msg)); rcheevos_pause_hardcore(); - - runloop_msg_queue_push(msg, strlen(msg), 1, 180, true, NULL, + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); RARCH_LOG("%s\n", msg); } @@ -106,10 +106,11 @@ void cheat_manager_apply_cheats(void) if (cheat_st->size > 0 && settings->bools.notification_show_cheats_applied) { - const char *_msg = msg_hash_to_str(MSG_APPLYING_CHEAT); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_APPLYING_CHEAT), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); - RARCH_LOG("%s\n", _msg); + RARCH_LOG("%s\n", msg); } #ifdef HAVE_CHEEVOS @@ -854,8 +855,9 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w meminfo.id = RETRO_MEMORY_SYSTEM_RAM; if (!core_get_memory(&meminfo)) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_INIT_FAIL); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_INIT_FAIL), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -885,7 +887,6 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w if (is_search_initialization) { - const char *msg = NULL; if (cheat_st->prev_memory_buf) { free(cheat_st->prev_memory_buf); @@ -897,8 +898,9 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w if (!cheat_st->prev_memory_buf) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_INIT_FAIL); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_INIT_FAIL), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -914,10 +916,11 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w if (!cheat_st->matches) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_INIT_FAIL); + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_INIT_FAIL), sizeof(msg)); free(cheat_st->prev_memory_buf); cheat_st->prev_memory_buf = NULL; - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -934,9 +937,12 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w offset += cheat_st->memory_size_list[i]; } - msg = msg_hash_to_str(MSG_CHEAT_INIT_SUCCESS); - runloop_msg_queue_push(msg, strlen(msg), 1, 180, true, NULL, - MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + { + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_INIT_SUCCESS), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, + MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + } cheat_st->memory_search_initialized = true; } @@ -1034,8 +1040,8 @@ static int cheat_manager_search(enum cheat_search_type search_type) if (cheat_st->num_memory_buffers == 0 || !prev || !cheat_st->matches) { - const char *msg = msg_hash_to_str(MSG_CHEAT_SEARCH_NOT_INITIALIZED); - runloop_msg_queue_push(msg, strlen(msg), 1, 180, true, NULL, + _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_SEARCH_NOT_INITIALIZED), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -1241,8 +1247,8 @@ int cheat_manager_add_matches(const char *path, if (cheat_st->num_matches + cheat_st->size > 100) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_TOO_MANY); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_TOO_MANY), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -1281,8 +1287,8 @@ int cheat_manager_add_matches(const char *path, if (!cheat_manager_add_new_code(cheat_st->search_bit_size, idx, (mask << (byte_part * bits)), cheat_st->big_endian, curr_val)) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_FAIL); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_FAIL), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -1296,8 +1302,8 @@ int cheat_manager_add_matches(const char *path, if (!cheat_manager_add_new_code(cheat_st->search_bit_size, idx, 0xFF, cheat_st->big_endian, curr_val)) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_FAIL); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_FAIL), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -1638,30 +1644,30 @@ void cheat_manager_match_action(enum cheat_match_action_type match_action, unsig switch (bytes_per_item) { - case 2: - curr_val = cheat_st->big_endian ? + case 2: + curr_val = cheat_st->big_endian ? (*(curr + idx - offset) * 256) + *(curr + idx + 1 - offset) : *(curr + idx - offset) + (*(curr + idx + 1 - offset) * 256); - if (prev) - prev_val = cheat_st->big_endian ? + if (prev) + prev_val = cheat_st->big_endian ? (*(prev + idx) * 256) + *(prev + idx + 1) : *(prev + idx) + (*(prev + idx + 1) * 256); - break; - case 4: - curr_val = cheat_st->big_endian ? + break; + case 4: + curr_val = cheat_st->big_endian ? (*(curr + idx - offset) * 256 * 256 * 256) + (*(curr + idx + 1 - offset) * 256 * 256) + (*(curr + idx + 2 - offset) * 256) + *(curr + idx + 3 - offset) : *(curr + idx - offset) + (*(curr + idx + 1 - offset) * 256) + (*(curr + idx + 2 - offset) * 256 * 256) + (*(curr + idx + 3 - offset) * 256 * 256 * 256); - if (prev) - prev_val = cheat_st->big_endian ? + if (prev) + prev_val = cheat_st->big_endian ? (*(prev + idx) * 256 * 256 * 256) + (*(prev + idx + 1) * 256 * 256) + (*(prev + idx + 2) * 256) + *(prev + idx + 3) : *(prev + idx) + (*(prev + idx + 1) * 256) + (*(prev + idx + 2) * 256 * 256) + (*(prev + idx + 3) * 256 * 256 * 256); - break; - case 1: - default: - curr_val = *(curr + idx - offset); - if (prev) - prev_val = *(prev + idx); - break; + break; + case 1: + default: + curr_val = *(curr + idx - offset); + if (prev) + prev_val = *(prev + idx); + break; } if (match_action == CHEAT_MATCH_ACTION_TYPE_BROWSE) diff --git a/command.c b/command.c index 1f33a6a0087..d26ca11a119 100644 --- a/command.c +++ b/command.c @@ -1275,11 +1275,11 @@ bool command_event_save_auto_state(void) sizeof(savestate_name_auto) - _len); if (content_auto_save_state((const char*)savestate_name_auto)) - RARCH_LOG("%s \"%s\" %s.\n", + RARCH_LOG("[State]: %s \"%s\" %s.\n", msg_hash_to_str(MSG_AUTO_SAVE_STATE_TO), savestate_name_auto, "succeeded"); else - RARCH_LOG("%s \"%s\" %s.\n", + RARCH_LOG("[State]: %s \"%s\" %s.\n", msg_hash_to_str(MSG_AUTO_SAVE_STATE_TO), savestate_name_auto, "failed"); @@ -1460,7 +1460,8 @@ static void scan_states(settings_t *settings, if (string_is_empty(dir_elem)) continue; - _len = fill_pathname_base(elem_base, dir_elem, sizeof(elem_base)); + _len = strlen(dir_elem); + fill_pathname_base(elem_base, dir_elem, sizeof(elem_base)); /* Only consider files with a '.state' extension * > i.e. Ignore '.state.auto', '.state.bak', etc. */ @@ -1581,8 +1582,8 @@ static void scan_states(settings_t *settings, loa_idx = gap_idx - 1; } - RARCH_DBG("[State]: savestate scanning finished, used slots (in range): " - "%d (%d), max:%d, load index %d, gap index %d, delete index %d\n", + RARCH_DBG("[State]: Save state scanning finished, used slots (in range): " + "%d (%d), max:%d, load index %d, gap index %d, delete index %d.\n", cnt, cnt_in_range, max_idx, loa_idx, gap_idx, del_idx); if (last_index) @@ -1632,10 +1633,14 @@ void command_event_set_savestate_auto_index(settings_t *settings) unsigned max_idx = 0; bool savestate_auto_index = settings->bools.savestate_auto_index; if (!savestate_auto_index) + { + /* Reset savestate index to 0 when loading content. */ + configuration_set_int(settings, settings->ints.state_slot, 0); return; + } scan_states(settings, &max_idx, NULL); configuration_set_int(settings, settings->ints.state_slot, max_idx); - RARCH_LOG("[State]: %s: #%d\n", + RARCH_LOG("[State]: %s: #%d.\n", msg_hash_to_str(MSG_FOUND_LAST_STATE_SLOT), max_idx); } @@ -1657,13 +1662,13 @@ static void command_event_set_savestate_garbage_collect(settings_t *settings) if (!string_is_empty(state_to_delete)) { filestream_delete(state_to_delete); - RARCH_DBG("[State]: garbage collect, deleting \"%s\" \n",state_to_delete); + RARCH_DBG("[State]: Garbage collect, deleting \"%s\".\n",state_to_delete); /* Construct the save state thumbnail name * and delete that one as well. */ i = strlen(state_to_delete); strlcpy(state_to_delete + i,".png",STRLEN_CONST(".png")+1); filestream_delete(state_to_delete); - RARCH_DBG("[State]: garbage collect, deleting \"%s\" \n",state_to_delete); + RARCH_DBG("[State]: Garbage collect, deleting \"%s\".\n",state_to_delete); } } @@ -2136,12 +2141,12 @@ bool command_event_main_state(unsigned cmd) input_driver_state_t *input_st = input_state_get_ptr(); if (input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_RECORDING) { - RARCH_ERR("[Load] [Movie] Can't undo load state during movie record\n"); + RARCH_ERR("[State]: Can't undo load state during movie record.\n"); return false; } if (input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_PLAYBACK) { - RARCH_LOG("[Load] [Movie] Undo load state during movie playback, halting playback\n"); + RARCH_LOG("[State]: Undo load state during movie playback, halting playback.\n"); movie_stop(input_st); } #endif diff --git a/config.def.h b/config.def.h index c7aa5b0a7d4..c22b07bcf88 100644 --- a/config.def.h +++ b/config.def.h @@ -933,7 +933,11 @@ #define DEFAULT_INPUT_BACKTOUCH_TOGGLE false #endif +#if defined(ANDROID) || defined(IOS) #define DEFAULT_OVERLAY_ENABLE_AUTOPREFERRED true +#else +#define DEFAULT_OVERLAY_ENABLE_AUTOPREFERRED false +#endif #if defined(HAVE_OVERLAY) #if defined(RARCH_MOBILE) diff --git a/config.features.h b/config.features.h index b0f36bd7065..8961c58e665 100644 --- a/config.features.h +++ b/config.features.h @@ -350,6 +350,12 @@ #define SUPPORTS_NETPLAY false #endif +#ifdef HAVE_SSL +#define SUPPORTS_SSL true +#else +#define SUPPORTS_SSL false +#endif + #if defined(HAVE_COCOA) || defined(HAVE_COCOATOUCH) || defined(HAVE_COCOA_METAL) #define SUPPORTS_COCOA true #else diff --git a/configuration.c b/configuration.c index 26e0b70cfda..1b405ead13a 100644 --- a/configuration.c +++ b/configuration.c @@ -4470,8 +4470,9 @@ bool config_load_override(void *data) if (settings->bools.notification_show_config_override_load && show_notification) { - const char *_msg = msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 100, false, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 100, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } @@ -4526,8 +4527,9 @@ bool config_load_override_file(const char *config_path) if (settings->bools.notification_show_config_override_load && show_notification) { - const char *_msg = msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 100, false, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 100, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } @@ -4736,8 +4738,9 @@ bool config_load_remap(const char *directory_input_remapping, success: if (notification_show_remap_load) { - const char *_msg = msg_hash_to_str(msg_remap_loaded); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 100, false, NULL, + char _msg[128]; + size_t _len = strlcpy(_msg, msg_hash_to_str(msg_remap_loaded), sizeof(_msg)); + runloop_msg_queue_push(_msg, _len, 1, 100, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } return true; diff --git a/core_info.c b/core_info.c index edb68971f6a..1a8b6b2e46d 100644 --- a/core_info.c +++ b/core_info.c @@ -100,11 +100,11 @@ static core_info_state_t core_info_st = { /* JSON Handlers START */ static bool CCJSONObjectMemberHandler(void *context, - const char *pValue, size_t length) + const char *pValue, size_t len) { CCJSONContext *pCtx = (CCJSONContext *)context; - if (length) + if (len) { switch (pCtx->array_depth) { @@ -262,12 +262,12 @@ static bool CCJSONObjectMemberHandler(void *context, } static bool CCJSONStringHandler(void *context, - const char *pValue, size_t length) + const char *pValue, size_t len) { CCJSONContext *pCtx = (CCJSONContext*)context; if ( pCtx->current_string_val - && length + && len && !string_is_empty(pValue)) { if (*pCtx->current_string_val) @@ -290,7 +290,7 @@ static bool CCJSONStringHandler(void *context, } static bool CCJSONNumberHandler(void *context, - const char *pValue, size_t length) + const char *pValue, size_t len) { CCJSONContext *pCtx = (CCJSONContext*)context; @@ -1497,18 +1497,15 @@ static bool core_info_path_is_locked( core_aux_file_path_list_t *lock_list, const char *core_file_name) { - size_t i, len; + size_t i; uint32_t hash; char lock_filename[NAME_MAX_LENGTH]; if (lock_list->size < 1) return false; - len = strlcpy(lock_filename, core_file_name, - sizeof(lock_filename)); - strlcpy(lock_filename + len, - ".lck", - sizeof(lock_filename) - len); + fill_pathname(lock_filename, core_file_name, + ".lck", sizeof(lock_filename)); hash = core_info_hash_string(lock_filename); @@ -1528,18 +1525,15 @@ static bool core_info_path_is_standalone_exempt( core_aux_file_path_list_t *exempt_list, const char *core_file_name) { - size_t i, len; + size_t i; uint32_t hash; char exempt_filename[NAME_MAX_LENGTH]; if (exempt_list->size < 1) return false; - len = strlcpy(exempt_filename, core_file_name, - sizeof(exempt_filename)); - strlcpy(exempt_filename + len, - ".lsae", - sizeof(exempt_filename) - len); + fill_pathname(exempt_filename, core_file_name, + ".lsae", sizeof(exempt_filename)); hash = core_info_hash_string(exempt_filename); @@ -2912,7 +2906,6 @@ static bool core_info_update_core_aux_file(const char *path, bool create) * core info list this is *not* thread safe */ bool core_info_set_core_lock(const char *core_path, bool lock) { - size_t _len; core_info_t *core_info = NULL; char lock_file_path[PATH_MAX_LENGTH]; @@ -2931,11 +2924,8 @@ bool core_info_set_core_lock(const char *core_path, bool lock) return false; /* Get lock file path */ - _len = strlcpy(lock_file_path, core_info->path, - sizeof(lock_file_path)); - strlcpy(lock_file_path + _len, - ".lck", - sizeof(lock_file_path) - _len); + fill_pathname(lock_file_path, core_info->path, + ".lck", sizeof(lock_file_path)); /* Create or delete lock file, as required */ if (!core_info_update_core_aux_file(lock_file_path, lock)) @@ -2959,7 +2949,6 @@ bool core_info_set_core_lock(const char *core_path, bool lock) * must be checked externally */ bool core_info_get_core_lock(const char *core_path, bool validate_path) { - size_t _len; core_info_t *core_info = NULL; const char *core_file_path = NULL; bool is_locked = false; @@ -2990,11 +2979,8 @@ bool core_info_get_core_lock(const char *core_path, bool validate_path) return false; /* Get lock file path */ - _len = strlcpy(lock_file_path, core_file_path, - sizeof(lock_file_path)); - strlcpy(lock_file_path + _len, - ".lck", - sizeof(lock_file_path) - _len); + fill_pathname(lock_file_path, core_file_path, + ".lck", sizeof(lock_file_path)); /* Check whether lock file exists */ is_locked = path_is_valid(lock_file_path); @@ -3022,7 +3008,6 @@ bool core_info_set_core_standalone_exempt(const char *core_path, bool exempt) /* Static platforms do not support the contentless * cores menu */ #if defined(HAVE_DYNAMIC) - size_t _len; core_info_t *core_info = NULL; char exempt_file_path[PATH_MAX_LENGTH]; @@ -3034,11 +3019,8 @@ bool core_info_set_core_standalone_exempt(const char *core_path, bool exempt) return false; /* Get 'standalone exempt' file path */ - _len = strlcpy(exempt_file_path, core_info->path, - sizeof(exempt_file_path)); - strlcpy(exempt_file_path + _len, - ".lsae", - sizeof(exempt_file_path) - _len); + fill_pathname(exempt_file_path, core_info->path, + ".lsae", sizeof(exempt_file_path)); /* Create or delete 'standalone exempt' file, as required */ if (core_info_update_core_aux_file(exempt_file_path, exempt)) @@ -3062,7 +3044,6 @@ bool core_info_get_core_standalone_exempt(const char *core_path) /* Static platforms do not support the contentless * cores menu */ #if defined(HAVE_DYNAMIC) - size_t _len; core_info_t *core_info = NULL; char exempt_file_path[PATH_MAX_LENGTH]; @@ -3074,11 +3055,8 @@ bool core_info_get_core_standalone_exempt(const char *core_path) return false; /* Get 'standalone exempt' file path */ - _len = strlcpy(exempt_file_path, core_info->path, - sizeof(exempt_file_path)); - strlcpy(exempt_file_path + _len, - ".lsae", - sizeof(exempt_file_path) - _len); + fill_pathname(exempt_file_path, core_info->path, + ".lsae", sizeof(exempt_file_path)); /* Check whether 'standalone exempt' file exists */ if (path_is_valid(exempt_file_path)) diff --git a/cores/libretro-net-retropad/net_retropad_core.c b/cores/libretro-net-retropad/net_retropad_core.c index 4584cf0a280..1b81991eb31 100644 --- a/cores/libretro-net-retropad/net_retropad_core.c +++ b/cores/libretro-net-retropad/net_retropad_core.c @@ -278,7 +278,7 @@ static bool ITifJSONObjectEndHandler(void* context) return true; } -static bool ITifJSONObjectMemberHandler(void* context, const char *pValue, size_t length) +static bool ITifJSONObjectMemberHandler(void* context, const char *pValue, size_t len) { ITifJSONContext *pCtx = (ITifJSONContext*)context; @@ -286,7 +286,7 @@ static bool ITifJSONObjectMemberHandler(void* context, const char *pValue, size_ if (pCtx->current_entry_str_val) return false; - if (length) + if (len) { if (string_is_equal(pValue, "expected_button")) pCtx->current_entry_uint_val = &pCtx->expected_button; @@ -298,11 +298,11 @@ static bool ITifJSONObjectMemberHandler(void* context, const char *pValue, size_ return true; } -static bool ITifJSONNumberHandler(void* context, const char *pValue, size_t length) +static bool ITifJSONNumberHandler(void* context, const char *pValue, size_t len) { ITifJSONContext *pCtx = (ITifJSONContext*)context; - if (pCtx->current_entry_uint_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_uint_val && len && !string_is_empty(pValue)) *pCtx->current_entry_uint_val = string_to_unsigned(pValue); /* ignore unknown members */ @@ -311,11 +311,11 @@ static bool ITifJSONNumberHandler(void* context, const char *pValue, size_t leng return true; } -static bool ITifJSONStringHandler(void* context, const char *pValue, size_t length) +static bool ITifJSONStringHandler(void* context, const char *pValue, size_t len) { ITifJSONContext *pCtx = (ITifJSONContext*)context; - if (pCtx->current_entry_str_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_str_val && len && !string_is_empty(pValue)) { if (*pCtx->current_entry_str_val) free(*pCtx->current_entry_str_val); @@ -728,7 +728,7 @@ static void retropad_update_input(void) pointer_y = (int16_t)state; } } - + /* Do not send extra descriptor state - RA side is not prepared to receive it */ if (i>1) continue; @@ -1035,7 +1035,7 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void) sensor_item_colors[median_index] = (uint16_t)(fabsf(32*4*value)) << 11; } } - + /* Button values for sensor test screen, since they do not follow any pattern, it is * * provided as a direct list. */ if (mouse_type == NETRETROPAD_MOUSE) @@ -1062,7 +1062,7 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void) offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP); sensor_item_colors[86] = mouse.value[offset] ? 0xA000 : 0x0000; - + offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_BUTTON_4); sensor_item_colors[88] = mouse.value[offset] ? 0xA000 : 0x0000; @@ -1094,7 +1094,7 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void) offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_SELECT); sensor_item_colors[76] = lightgun.value[offset] ? 0xA000 : 0x0000; - + offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_IS_OFFSCREEN); sensor_item_colors[77] = lightgun.value[offset] ? 0xA000 : 0x0000; @@ -1390,7 +1390,7 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void) pointer_prev_y = pointer_y_coord; } } - + NETRETROPAD_CORE_PREFIX(video_cb)(frame_buf, 320, 240, 640); retro_sleep(4); } diff --git a/deps/mbedtls/cacert.h b/deps/mbedtls/cacert.h deleted file mode 100644 index d1d57171d76..00000000000 --- a/deps/mbedtls/cacert.h +++ /dev/null @@ -1,3805 +0,0 @@ -/* CA certificates extracted from Mozilla - * https://curl.haxx.se/docs/caextract.html - * NOTE: Newlines are necessary for the file to be parsed correctly! - */ -static const char cacert_pem[] = { -"##\n" -"## Bundle of CA Root Certificates\n" -"##\n" -"## Certificate data from Mozilla as of: Wed Jun 7 03:12:05 2017 GMT\n" -"##\n" -"## This is a bundle of X.509 certificates of public Certificate Authorities\n" -"## (CA). These were automatically extracted from Mozilla's root certificates\n" -"## file (certdata.txt). This file can be found in the mozilla source tree:\n" -"## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt\n" -"##\n" -"## It contains the certificates in PEM format and therefore\n" -"## can be directly used with curl / libcurl / php_curl, or with\n" -"## an Apache+mod_ssl webserver for SSL client authentication.\n" -"## Just configure this file as the SSLCACertificateFile.\n" -"##\n" -"## Conversion done with mk-ca-bundle.pl version 1.27.\n" -"## SHA256: 93753268e1c596aee21893fb1c6975338389132f15c942ed65fc394a904371d7\n" -"##\n" -"GlobalSign Root CA\n" -"==================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx\n" -"GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds\n" -"b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV\n" -"BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD\n" -"VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa\n" -"DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc\n" -"THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb\n" -"Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP\n" -"c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX\n" -"gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\n" -"HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF\n" -"AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj\n" -"Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG\n" -"j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH\n" -"hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC\n" -"X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\n" -"-----END CERTIFICATE-----\n" -"GlobalSign Root CA - R2\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv\n" -"YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh\n" -"bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT\n" -"aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln\n" -"bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6\n" -"ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp\n" -"s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN\n" -"S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL\n" -"TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C\n" -"ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E\n" -"FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i\n" -"YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN\n" -"BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp\n" -"9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu\n" -"01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7\n" -"9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\n" -"TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n" -"-----END CERTIFICATE-----\n" -"Verisign Class 3 Public Primary Certification Authority - G3\n" -"============================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV\n" -"UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv\n" -"cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl\n" -"IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh\n" -"dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw\n" -"CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy\n" -"dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv\n" -"cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg\n" -"Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" -"ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1\n" -"EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc\n" -"cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw\n" -"EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj\n" -"055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA\n" -"ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f\n" -"j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC\n" -"/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0\n" -"xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa\n" -"t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==\n" -"-----END CERTIFICATE-----\n" -"Entrust.net Premium 2048 Secure Server CA\n" -"=========================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u\n" -"ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp\n" -"bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV\n" -"BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx\n" -"NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3\n" -"d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl\n" -"MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u\n" -"ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\n" -"MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL\n" -"Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr\n" -"hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW\n" -"nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi\n" -"VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E\n" -"BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ\n" -"KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy\n" -"T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf\n" -"zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT\n" -"J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e\n" -"nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=\n" -"-----END CERTIFICATE-----\n" -"Baltimore CyberTrust Root\n" -"=========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE\n" -"ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li\n" -"ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC\n" -"SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs\n" -"dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME\n" -"uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB\n" -"UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C\n" -"G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9\n" -"XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr\n" -"l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI\n" -"VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB\n" -"BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh\n" -"cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5\n" -"hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa\n" -"Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H\n" -"RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" -"-----END CERTIFICATE-----\n" -"AddTrust Low-Value Services Root\n" -"================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML\n" -"QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU\n" -"cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw\n" -"CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO\n" -"ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB\n" -"AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6\n" -"54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr\n" -"oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1\n" -"Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui\n" -"GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w\n" -"HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD\n" -"AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT\n" -"RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw\n" -"HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt\n" -"ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph\n" -"iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY\n" -"eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr\n" -"mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj\n" -"ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=\n" -"-----END CERTIFICATE-----\n" -"AddTrust External Root\n" -"======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML\n" -"QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD\n" -"VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw\n" -"NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU\n" -"cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg\n" -"Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821\n" -"+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw\n" -"Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo\n" -"aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy\n" -"2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7\n" -"7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P\n" -"BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL\n" -"VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk\n" -"VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB\n" -"IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl\n" -"j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5\n" -"6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355\n" -"e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u\n" -"G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=\n" -"-----END CERTIFICATE-----\n" -"AddTrust Public Services Root\n" -"=============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML\n" -"QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU\n" -"cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ\n" -"BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l\n" -"dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF\n" -"AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu\n" -"nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i\n" -"d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG\n" -"Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw\n" -"HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G\n" -"A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB\n" -"/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux\n" -"FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G\n" -"A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4\n" -"JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL\n" -"+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao\n" -"GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9\n" -"Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H\n" -"EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=\n" -"-----END CERTIFICATE-----\n" -"AddTrust Qualified Certificates Root\n" -"====================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML\n" -"QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU\n" -"cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx\n" -"CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ\n" -"IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG\n" -"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx\n" -"64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3\n" -"KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o\n" -"L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR\n" -"wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU\n" -"MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/\n" -"BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE\n" -"BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y\n" -"azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD\n" -"ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG\n" -"GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X\n" -"dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze\n" -"RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB\n" -"iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=\n" -"-----END CERTIFICATE-----\n" -"Entrust Root Certification Authority\n" -"====================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV\n" -"BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw\n" -"b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG\n" -"A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0\n" -"MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu\n" -"MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu\n" -"Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v\n" -"dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n" -"ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz\n" -"A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww\n" -"Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68\n" -"j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN\n" -"rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw\n" -"DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1\n" -"MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH\n" -"hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA\n" -"A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM\n" -"Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa\n" -"v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS\n" -"W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0\n" -"tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8\n" -"-----END CERTIFICATE-----\n" -"GeoTrust Global CA\n" -"==================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK\n" -"Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw\n" -"MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j\n" -"LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n" -"CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo\n" -"BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet\n" -"8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc\n" -"T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU\n" -"vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD\n" -"AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk\n" -"DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q\n" -"zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4\n" -"d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2\n" -"mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p\n" -"XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm\n" -"Mw==\n" -"-----END CERTIFICATE-----\n" -"GeoTrust Global CA 2\n" -"====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN\n" -"R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw\n" -"MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j\n" -"LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\n" -"ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/\n" -"NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k\n" -"LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA\n" -"Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b\n" -"HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF\n" -"MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH\n" -"K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7\n" -"srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh\n" -"ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL\n" -"OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC\n" -"x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF\n" -"H4z1Ir+rzoPz4iIprn2DQKi6bA==\n" -"-----END CERTIFICATE-----\n" -"GeoTrust Universal CA\n" -"=====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN\n" -"R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1\n" -"MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu\n" -"Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n" -"ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t\n" -"JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e\n" -"RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs\n" -"7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d\n" -"8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V\n" -"qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga\n" -"Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB\n" -"Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu\n" -"KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08\n" -"ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0\n" -"XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB\n" -"hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc\n" -"aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2\n" -"qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL\n" -"oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK\n" -"xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF\n" -"KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2\n" -"DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK\n" -"xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU\n" -"p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI\n" -"P/rmMuGNG2+k5o7Y+SlIis5z/iw=\n" -"-----END CERTIFICATE-----\n" -"GeoTrust Universal CA 2\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN\n" -"R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0\n" -"MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg\n" -"SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA\n" -"A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0\n" -"DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17\n" -"j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q\n" -"JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a\n" -"QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2\n" -"WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP\n" -"20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn\n" -"ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC\n" -"SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG\n" -"8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2\n" -"+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E\n" -"BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z\n" -"dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ\n" -"4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+\n" -"mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq\n" -"A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg\n" -"Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP\n" -"pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d\n" -"FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp\n" -"gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm\n" -"X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS\n" -"-----END CERTIFICATE-----\n" -"Visa eCommerce Root\n" -"===================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG\n" -"EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug\n" -"QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2\n" -"WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm\n" -"VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv\n" -"bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL\n" -"F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b\n" -"RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0\n" -"TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI\n" -"/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs\n" -"GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG\n" -"MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc\n" -"CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW\n" -"YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz\n" -"zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu\n" -"YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt\n" -"398znM/jra6O1I7mT1GvFpLgXPYHDw==\n" -"-----END CERTIFICATE-----\n" -"Certum Root CA\n" -"==============\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK\n" -"ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla\n" -"Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u\n" -"by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x\n" -"wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL\n" -"kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ\n" -"89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K\n" -"Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P\n" -"NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq\n" -"hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+\n" -"GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg\n" -"GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/\n" -"0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS\n" -"qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==\n" -"-----END CERTIFICATE-----\n" -"Comodo AAA Services root\n" -"========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS\n" -"R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg\n" -"TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw\n" -"MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl\n" -"c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV\n" -"BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" -"ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG\n" -"C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs\n" -"i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW\n" -"Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH\n" -"Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK\n" -"Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f\n" -"BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl\n" -"cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz\n" -"LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm\n" -"7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz\n" -"Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z\n" -"8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C\n" -"12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==\n" -"-----END CERTIFICATE-----\n" -"Comodo Secure Services root\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS\n" -"R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg\n" -"TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw\n" -"MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu\n" -"Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi\n" -"BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" -"ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP\n" -"9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc\n" -"rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC\n" -"oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V\n" -"p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E\n" -"FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w\n" -"gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj\n" -"YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm\n" -"aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm\n" -"4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj\n" -"Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL\n" -"DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw\n" -"pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H\n" -"RR3B7Hzs/Sk=\n" -"-----END CERTIFICATE-----\n" -"Comodo Trusted Services root\n" -"============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS\n" -"R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg\n" -"TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw\n" -"MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h\n" -"bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw\n" -"IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" -"AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7\n" -"3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y\n" -"/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6\n" -"juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS\n" -"ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud\n" -"DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB\n" -"/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp\n" -"ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl\n" -"cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw\n" -"uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32\n" -"pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA\n" -"BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l\n" -"R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O\n" -"9y5Xt5hwXsjEeLBi\n" -"-----END CERTIFICATE-----\n" -"QuoVadis Root CA\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE\n" -"ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0\n" -"eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz\n" -"MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp\n" -"cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD\n" -"EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF\n" -"AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk\n" -"J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL\n" -"F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL\n" -"YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen\n" -"AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w\n" -"PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y\n" -"ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7\n" -"MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj\n" -"YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs\n" -"ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh\n" -"Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW\n" -"Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu\n" -"BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw\n" -"FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0\n" -"aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6\n" -"tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo\n" -"fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul\n" -"LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x\n" -"gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi\n" -"5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi\n" -"5nrQNiOKSnQ2+Q==\n" -"-----END CERTIFICATE-----\n" -"QuoVadis Root CA 2\n" -"==================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"-----END CERTIFICATE-----\n" -"QuoVadis Root CA 3\n" -"==================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT\n" -"EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx\n" -"OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM\n" -"aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC\n" -"DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg\n" -"DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij\n" -"KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K\n" -"DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv\n" -"BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp\n" -"p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8\n" -"nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX\n" -"MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM\n" -"Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz\n" -"uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT\n" -"BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj\n" -"YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0\n" -"aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB\n" -"BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD\n" -"VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4\n" -"ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE\n" -"AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV\n" -"qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s\n" -"hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z\n" -"POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2\n" -"Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp\n" -"8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC\n" -"bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu\n" -"g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p\n" -"vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr\n" -"qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=\n" -"-----END CERTIFICATE-----\n" -"Security Communication Root CA\n" -"==============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP\n" -"U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw\n" -"HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP\n" -"U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw\n" -"ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw\n" -"8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM\n" -"DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX\n" -"5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd\n" -"DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2\n" -"JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw\n" -"DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g\n" -"0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a\n" -"mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ\n" -"s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ\n" -"6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi\n" -"FL39vmwLAw==\n" -"-----END CERTIFICATE-----\n" -"Sonera Class 2 Root CA\n" -"======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG\n" -"U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw\n" -"NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh\n" -"IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3\n" -"/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT\n" -"dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG\n" -"f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P\n" -"tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH\n" -"nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT\n" -"XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt\n" -"0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI\n" -"cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph\n" -"Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx\n" -"EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH\n" -"llpwrN9M\n" -"-----END CERTIFICATE-----\n" -"UTN USERFirst Hardware Root CA\n" -"==============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE\n" -"BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl\n" -"IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd\n" -"BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx\n" -"OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0\n" -"eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz\n" -"ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3\n" -"DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI\n" -"wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd\n" -"tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8\n" -"i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf\n" -"Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw\n" -"gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF\n" -"lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF\n" -"UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF\n" -"BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM\n" -"//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW\n" -"XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2\n" -"lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn\n" -"iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67\n" -"nfhmqA==\n" -"-----END CERTIFICATE-----\n" -"Camerfirma Chambers of Commerce Root\n" -"====================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe\n" -"QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i\n" -"ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx\n" -"NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp\n" -"cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn\n" -"MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC\n" -"AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU\n" -"xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH\n" -"NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW\n" -"DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV\n" -"d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud\n" -"EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v\n" -"cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P\n" -"AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh\n" -"bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD\n" -"VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz\n" -"aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi\n" -"fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD\n" -"L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN\n" -"UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n\n" -"ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1\n" -"erfutGWaIZDgqtCYvDi1czyL+Nw=\n" -"-----END CERTIFICATE-----\n" -"Camerfirma Global Chambersign Root\n" -"==================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe\n" -"QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i\n" -"ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx\n" -"NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt\n" -"YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg\n" -"MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw\n" -"ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J\n" -"1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O\n" -"by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl\n" -"6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c\n" -"8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/\n" -"BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j\n" -"aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B\n" -"Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj\n" -"aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y\n" -"ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh\n" -"bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA\n" -"PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y\n" -"gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ\n" -"PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4\n" -"IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes\n" -"t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==\n" -"-----END CERTIFICATE-----\n" -"XRamp Global CA Root\n" -"====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE\n" -"BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj\n" -"dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB\n" -"dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx\n" -"HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg\n" -"U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n" -"dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu\n" -"IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx\n" -"foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE\n" -"zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs\n" -"AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry\n" -"xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud\n" -"EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap\n" -"oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC\n" -"AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc\n" -"/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt\n" -"qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n\n" -"nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz\n" -"8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=\n" -"-----END CERTIFICATE-----\n" -"Go Daddy Class 2 CA\n" -"===================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY\n" -"VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp\n" -"ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG\n" -"A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g\n" -"RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD\n" -"ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv\n" -"2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32\n" -"qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j\n" -"YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY\n" -"vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O\n" -"BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o\n" -"atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu\n" -"MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG\n" -"A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim\n" -"PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt\n" -"I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ\n" -"HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI\n" -"Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b\n" -"vZ8=\n" -"-----END CERTIFICATE-----\n" -"Starfield Class 2 CA\n" -"====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc\n" -"U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg\n" -"Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo\n" -"MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG\n" -"A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG\n" -"SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY\n" -"bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ\n" -"JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm\n" -"epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN\n" -"F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF\n" -"MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f\n" -"hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo\n" -"bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g\n" -"QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs\n" -"afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM\n" -"PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl\n" -"xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD\n" -"KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3\n" -"QBFGmh95DmK/D5fs4C8fF5Q=\n" -"-----END CERTIFICATE-----\n" -"StartCom Certification Authority\n" -"================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN\n" -"U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu\n" -"ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0\n" -"NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk\n" -"LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg\n" -"U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw\n" -"ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y\n" -"o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/\n" -"Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d\n" -"eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt\n" -"2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z\n" -"6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ\n" -"osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/\n" -"untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc\n" -"UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT\n" -"37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE\n" -"FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0\n" -"Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj\n" -"YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH\n" -"AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw\n" -"Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg\n" -"U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5\n" -"LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl\n" -"cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh\n" -"cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT\n" -"dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC\n" -"AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh\n" -"3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm\n" -"vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk\n" -"fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3\n" -"fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ\n" -"EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq\n" -"yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl\n" -"1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/\n" -"lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro\n" -"g14=\n" -"-----END CERTIFICATE-----\n" -"Taiwan GRCA\n" -"===========\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"-----END CERTIFICATE-----\n" -"Swisscom Root CA 1\n" -"==================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"NY6E0F/6MBr1mmz0DlP5OlvRHA==\n" -"-----END CERTIFICATE-----\n" -"DigiCert Assured ID Root CA\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG\n" -"EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw\n" -"IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx\n" -"MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL\n" -"ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew\n" -"ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO\n" -"9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy\n" -"UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW\n" -"/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy\n" -"oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf\n" -"GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF\n" -"66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq\n" -"hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc\n" -"EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn\n" -"SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i\n" -"8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe\n" -"+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==\n" -"-----END CERTIFICATE-----\n" -"DigiCert Global Root CA\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG\n" -"EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw\n" -"HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw\n" -"MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3\n" -"dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq\n" -"hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn\n" -"TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5\n" -"BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H\n" -"4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y\n" -"7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB\n" -"o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm\n" -"8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF\n" -"BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr\n" -"EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt\n" -"tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886\n" -"UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n" -"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n" -"-----END CERTIFICATE-----\n" -"DigiCert High Assurance EV Root CA\n" -"==================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG\n" -"EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw\n" -"KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw\n" -"MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ\n" -"MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu\n" -"Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t\n" -"Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS\n" -"OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3\n" -"MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ\n" -"NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe\n" -"h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB\n" -"Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY\n" -"JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ\n" -"V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp\n" -"myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK\n" -"mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe\n" -"vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K\n" -"-----END CERTIFICATE-----\n" -"Certplus Class 2 Primary CA\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE\n" -"BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN\n" -"OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy\n" -"dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" -"ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR\n" -"5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ\n" -"Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO\n" -"YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e\n" -"e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME\n" -"CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ\n" -"YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t\n" -"L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD\n" -"P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R\n" -"TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+\n" -"7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW\n" -"//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7\n" -"l7+ijrRU\n" -"-----END CERTIFICATE-----\n" -"DST Root CA X3\n" -"==============\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK\n" -"ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X\n" -"DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1\n" -"cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD\n" -"ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT\n" -"rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9\n" -"UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy\n" -"xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d\n" -"utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T\n" -"AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ\n" -"MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug\n" -"dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE\n" -"GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw\n" -"RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS\n" -"fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ\n" -"-----END CERTIFICATE-----\n" -"DST ACES CA X6\n" -"==============\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG\n" -"EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT\n" -"MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha\n" -"MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE\n" -"CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC\n" -"AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI\n" -"DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa\n" -"pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow\n" -"GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy\n" -"MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud\n" -"EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu\n" -"Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy\n" -"dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU\n" -"CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2\n" -"5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t\n" -"Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq\n" -"nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs\n" -"vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3\n" -"oKfN5XozNmr6mis=\n" -"-----END CERTIFICATE-----\n" -"SwissSign Gold CA - G2\n" -"======================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"-----END CERTIFICATE-----\n" -"SwissSign Silver CA - G2\n" -"========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT\n" -"BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X\n" -"DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3\n" -"aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG\n" -"9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644\n" -"N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm\n" -"+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH\n" -"6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu\n" -"MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h\n" -"qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5\n" -"FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs\n" -"ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc\n" -"celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X\n" -"CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/\n" -"BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB\n" -"tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0\n" -"cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P\n" -"4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F\n" -"kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L\n" -"3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx\n" -"/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa\n" -"DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP\n" -"e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu\n" -"WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ\n" -"DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub\n" -"DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u\n" -"-----END CERTIFICATE-----\n" -"GeoTrust Primary Certification Authority\n" -"========================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG\n" -"EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD\n" -"ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx\n" -"CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ\n" -"cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n" -"CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN\n" -"b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9\n" -"nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge\n" -"RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt\n" -"tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD\n" -"AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI\n" -"hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K\n" -"Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN\n" -"NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa\n" -"Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG\n" -"1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=\n" -"-----END CERTIFICATE-----\n" -"thawte Primary Root CA\n" -"======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE\n" -"BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2\n" -"aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv\n" -"cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3\n" -"MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg\n" -"SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv\n" -"KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT\n" -"FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs\n" -"oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ\n" -"1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc\n" -"q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K\n" -"aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p\n" -"afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD\n" -"VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF\n" -"AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE\n" -"uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX\n" -"xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89\n" -"jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH\n" -"z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==\n" -"-----END CERTIFICATE-----\n" -"VeriSign Class 3 Public Primary Certification Authority - G5\n" -"============================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE\n" -"BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO\n" -"ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk\n" -"IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp\n" -"ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB\n" -"yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln\n" -"biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh\n" -"dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt\n" -"YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\n" -"ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz\n" -"j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD\n" -"Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/\n" -"Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r\n" -"fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/\n" -"BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv\n" -"Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy\n" -"aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG\n" -"SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+\n" -"X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE\n" -"KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC\n" -"Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE\n" -"ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq\n" -"-----END CERTIFICATE-----\n" -"SecureTrust CA\n" -"==============\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG\n" -"EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy\n" -"dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe\n" -"BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC\n" -"ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX\n" -"OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t\n" -"DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH\n" -"GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b\n" -"01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH\n" -"ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/\n" -"BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj\n" -"aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ\n" -"KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu\n" -"SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf\n" -"mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ\n" -"nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR\n" -"3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=\n" -"-----END CERTIFICATE-----\n" -"Secure Global CA\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG\n" -"EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH\n" -"bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg\n" -"MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg\n" -"Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx\n" -"YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ\n" -"bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g\n" -"8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV\n" -"HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi\n" -"0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud\n" -"EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn\n" -"oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA\n" -"MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+\n" -"OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn\n" -"CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5\n" -"3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc\n" -"f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW\n" -"-----END CERTIFICATE-----\n" -"COMODO Certification Authority\n" -"==============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE\n" -"BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG\n" -"A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1\n" -"dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb\n" -"MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD\n" -"T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5\n" -"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH\n" -"+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww\n" -"xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV\n" -"4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA\n" -"1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI\n" -"rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E\n" -"BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k\n" -"b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC\n" -"AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP\n" -"OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/\n" -"RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc\n" -"IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN\n" -"+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==\n" -"-----END CERTIFICATE-----\n" -"Network Solutions Certificate Authority\n" -"=======================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG\n" -"EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr\n" -"IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx\n" -"MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu\n" -"MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G\n" -"CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx\n" -"jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT\n" -"aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT\n" -"crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc\n" -"/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB\n" -"AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP\n" -"BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv\n" -"bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA\n" -"A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q\n" -"4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/\n" -"GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv\n" -"wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD\n" -"ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey\n" -"-----END CERTIFICATE-----\n" -"COMODO ECC Certification Authority\n" -"==================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC\n" -"R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE\n" -"ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB\n" -"dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix\n" -"GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR\n" -"Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo\n" -"b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X\n" -"4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni\n" -"wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E\n" -"BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG\n" -"FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA\n" -"U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=\n" -"-----END CERTIFICATE-----\n" -"Security Communication EV RootCA1\n" -"=================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc\n" -"U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh\n" -"dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE\n" -"BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl\n" -"Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\n" -"AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO\n" -"/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX\n" -"WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z\n" -"ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4\n" -"bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK\n" -"9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG\n" -"SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm\n" -"iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG\n" -"Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW\n" -"mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW\n" -"T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490\n" -"-----END CERTIFICATE-----\n" -"OISTE WISeKey Global Root GA CA\n" -"===============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE\n" -"BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG\n" -"A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH\n" -"bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD\n" -"VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw\n" -"IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5\n" -"IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9\n" -"Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg\n" -"Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD\n" -"d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ\n" -"/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R\n" -"LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw\n" -"AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ\n" -"KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm\n" -"MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4\n" -"+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa\n" -"hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY\n" -"okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=\n" -"-----END CERTIFICATE-----\n" -"Certigna\n" -"========\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw\n" -"EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3\n" -"MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI\n" -"Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q\n" -"XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH\n" -"GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p\n" -"ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg\n" -"DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf\n" -"Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ\n" -"tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ\n" -"BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J\n" -"SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA\n" -"hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+\n" -"ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu\n" -"PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY\n" -"1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw\n" -"WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==\n" -"-----END CERTIFICATE-----\n" -"Deutsche Telekom Root CA 2\n" -"==========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT\n" -"RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG\n" -"A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5\n" -"MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G\n" -"A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS\n" -"b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5\n" -"bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI\n" -"KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY\n" -"AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK\n" -"Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV\n" -"jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV\n" -"HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr\n" -"E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy\n" -"zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8\n" -"rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G\n" -"dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU\n" -"Cm26OWMohpLzGITY+9HPBVZkVw==\n" -"-----END CERTIFICATE-----\n" -"Cybertrust Global Root\n" -"======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li\n" -"ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4\n" -"MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD\n" -"ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n" -"+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW\n" -"0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL\n" -"AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin\n" -"89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT\n" -"8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP\n" -"BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2\n" -"MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G\n" -"A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO\n" -"lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi\n" -"5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2\n" -"hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T\n" -"X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW\n" -"WL1WMRJOEcgh4LMRkWXbtKaIOM5V\n" -"-----END CERTIFICATE-----\n" -"ePKI Root Certification Authority\n" -"=================================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"-----END CERTIFICATE-----\n" -"T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3\n" -"=============================================================================================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH\n" -"DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q\n" -"aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry\n" -"b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV\n" -"BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg\n" -"S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4\n" -"MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl\n" -"IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF\n" -"n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl\n" -"IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft\n" -"dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl\n" -"cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B\n" -"AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO\n" -"Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1\n" -"xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR\n" -"6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL\n" -"hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd\n" -"BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF\n" -"MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4\n" -"N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT\n" -"y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh\n" -"LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M\n" -"dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=\n" -"-----END CERTIFICATE-----\n" -"certSIGN ROOT CA\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD\n" -"VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa\n" -"Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE\n" -"CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I\n" -"JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH\n" -"rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2\n" -"ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD\n" -"0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943\n" -"AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B\n" -"Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB\n" -"AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8\n" -"SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0\n" -"x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt\n" -"vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz\n" -"TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD\n" -"-----END CERTIFICATE-----\n" -"CNNIC ROOT\n" -"==========\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE\n" -"ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw\n" -"OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw\n" -"ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD\n" -"o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz\n" -"VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT\n" -"VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or\n" -"czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK\n" -"y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC\n" -"wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S\n" -"lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5\n" -"Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM\n" -"O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8\n" -"BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2\n" -"G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m\n" -"mxE=\n" -"-----END CERTIFICATE-----\n" -"GeoTrust Primary Certification Authority - G3\n" -"=============================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE\n" -"BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0\n" -"IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy\n" -"eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz\n" -"NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo\n" -"YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT\n" -"LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI\n" -"hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j\n" -"K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE\n" -"c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C\n" -"IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu\n" -"dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC\n" -"MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr\n" -"2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9\n" -"cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE\n" -"Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD\n" -"AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s\n" -"t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt\n" -"-----END CERTIFICATE-----\n" -"thawte Primary Root CA - G2\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC\n" -"VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu\n" -"IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg\n" -"Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV\n" -"MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG\n" -"b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt\n" -"IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS\n" -"LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5\n" -"8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU\n" -"mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN\n" -"G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K\n" -"rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==\n" -"-----END CERTIFICATE-----\n" -"thawte Primary Root CA - G3\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE\n" -"BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2\n" -"aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv\n" -"cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w\n" -"ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh\n" -"d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD\n" -"VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG\n" -"A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\n" -"MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At\n" -"P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC\n" -"+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY\n" -"7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW\n" -"vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E\n" -"BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ\n" -"KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK\n" -"A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu\n" -"t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC\n" -"8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm\n" -"er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=\n" -"-----END CERTIFICATE-----\n" -"GeoTrust Primary Certification Authority - G2\n" -"=============================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC\n" -"VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu\n" -"Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD\n" -"ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1\n" -"OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg\n" -"MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl\n" -"b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG\n" -"BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc\n" -"KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD\n" -"VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+\n" -"EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m\n" -"ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2\n" -"npaqBA+K\n" -"-----END CERTIFICATE-----\n" -"VeriSign Universal Root Certification Authority\n" -"===============================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE\n" -"BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO\n" -"ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk\n" -"IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u\n" -"IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV\n" -"UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv\n" -"cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl\n" -"IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0\n" -"aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj\n" -"1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP\n" -"MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72\n" -"9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I\n" -"AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR\n" -"tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G\n" -"CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O\n" -"a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud\n" -"DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3\n" -"Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx\n" -"Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx\n" -"P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P\n" -"wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4\n" -"mJO37M2CYfE45k+XmCpajQ==\n" -"-----END CERTIFICATE-----\n" -"VeriSign Class 3 Public Primary Certification Authority - G4\n" -"============================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC\n" -"VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3\n" -"b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz\n" -"ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj\n" -"YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL\n" -"MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU\n" -"cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo\n" -"b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5\n" -"IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8\n" -"Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz\n" -"rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB\n" -"/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw\n" -"HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u\n" -"Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD\n" -"A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx\n" -"AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==\n" -"-----END CERTIFICATE-----\n" -"NetLock Arany (Class Gold) Főtanúsítvány\n" -"========================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G\n" -"A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610\n" -"dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB\n" -"cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx\n" -"MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO\n" -"ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv\n" -"biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6\n" -"c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu\n" -"0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw\n" -"/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk\n" -"H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw\n" -"fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1\n" -"neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB\n" -"BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW\n" -"qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta\n" -"YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC\n" -"bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna\n" -"NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu\n" -"dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=\n" -"-----END CERTIFICATE-----\n" -"Staat der Nederlanden Root CA - G2\n" -"==================================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"66+KAQ==\n" -"-----END CERTIFICATE-----\n" -"Hongkong Post Root CA 1\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT\n" -"DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx\n" -"NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n\n" -"IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF\n" -"AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1\n" -"ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr\n" -"auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh\n" -"qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY\n" -"V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV\n" -"HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i\n" -"h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio\n" -"l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei\n" -"IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps\n" -"T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT\n" -"c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==\n" -"-----END CERTIFICATE-----\n" -"SecureSign RootCA11\n" -"===================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi\n" -"SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS\n" -"b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw\n" -"KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1\n" -"cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL\n" -"TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO\n" -"wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq\n" -"g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP\n" -"O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA\n" -"bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX\n" -"t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh\n" -"OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r\n" -"bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ\n" -"Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01\n" -"y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061\n" -"lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=\n" -"-----END CERTIFICATE-----\n" -"ACEDICOM Root\n" -"=============\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD\n" -"T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4\n" -"MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG\n" -"A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF\n" -"AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk\n" -"WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD\n" -"YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew\n" -"MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb\n" -"m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk\n" -"HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT\n" -"xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2\n" -"3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9\n" -"2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq\n" -"TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz\n" -"4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU\n" -"9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv\n" -"bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg\n" -"aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP\n" -"eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk\n" -"zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1\n" -"ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI\n" -"KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq\n" -"nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE\n" -"I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp\n" -"MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o\n" -"tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==\n" -"-----END CERTIFICATE-----\n" -"Microsec e-Szigno Root CA 2009\n" -"==============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER\n" -"MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv\n" -"c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o\n" -"dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE\n" -"BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt\n" -"U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw\n" -"DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA\n" -"fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG\n" -"0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA\n" -"pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm\n" -"1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC\n" -"AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf\n" -"QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE\n" -"FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o\n" -"lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX\n" -"I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775\n" -"tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02\n" -"yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi\n" -"LXpUq3DDfSJlgnCW\n" -"-----END CERTIFICATE-----\n" -"GlobalSign Root CA - R3\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv\n" -"YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh\n" -"bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT\n" -"aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln\n" -"bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt\n" -"iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ\n" -"0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3\n" -"rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl\n" -"OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2\n" -"xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n" -"FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7\n" -"lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8\n" -"EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E\n" -"bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18\n" -"YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r\n" -"kpeDMdmztcpHWD9f\n" -"-----END CERTIFICATE-----\n" -"Autoridad de Certificacion Firmaprofesional CIF A62634068\n" -"=========================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA\n" -"BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2\n" -"MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw\n" -"QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB\n" -"NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD\n" -"Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P\n" -"B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY\n" -"7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH\n" -"ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI\n" -"plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX\n" -"MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX\n" -"LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK\n" -"bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU\n" -"vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud\n" -"EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH\n" -"DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp\n" -"cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA\n" -"bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx\n" -"ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx\n" -"51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk\n" -"R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP\n" -"T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f\n" -"Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl\n" -"osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR\n" -"crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR\n" -"saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD\n" -"KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi\n" -"6Et8Vcad+qMUu2WFbm5PEn4KPJ2V\n" -"-----END CERTIFICATE-----\n" -"Izenpe.com\n" -"==========\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"-----END CERTIFICATE-----\n" -"Chambers of Commerce Root - 2008\n" -"================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD\n" -"MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv\n" -"bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu\n" -"QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy\n" -"Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl\n" -"ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF\n" -"EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl\n" -"cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC\n" -"AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA\n" -"XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj\n" -"h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/\n" -"ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk\n" -"NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g\n" -"D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331\n" -"lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ\n" -"0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj\n" -"ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2\n" -"EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI\n" -"G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ\n" -"BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh\n" -"bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh\n" -"bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC\n" -"CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH\n" -"AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1\n" -"wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH\n" -"3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU\n" -"RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6\n" -"M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1\n" -"YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF\n" -"9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK\n" -"zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG\n" -"nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg\n" -"OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ\n" -"-----END CERTIFICATE-----\n" -"Global Chambersign Root - 2008\n" -"==============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD\n" -"MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv\n" -"bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu\n" -"QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx\n" -"NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg\n" -"Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ\n" -"QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD\n" -"aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf\n" -"VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf\n" -"XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0\n" -"ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB\n" -"/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA\n" -"TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M\n" -"H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe\n" -"Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF\n" -"HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh\n" -"wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB\n" -"AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT\n" -"BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE\n" -"BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm\n" -"aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm\n" -"aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp\n" -"1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0\n" -"dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG\n" -"/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6\n" -"ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s\n" -"dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg\n" -"9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH\n" -"foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du\n" -"qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr\n" -"P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq\n" -"c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z\n" -"09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B\n" -"-----END CERTIFICATE-----\n" -"Go Daddy Root Certificate Authority - G2\n" -"========================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT\n" -"B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu\n" -"MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5\n" -"MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6\n" -"b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G\n" -"A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI\n" -"hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq\n" -"9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD\n" -"+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd\n" -"fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl\n" -"NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC\n" -"MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9\n" -"BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac\n" -"vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r\n" -"5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV\n" -"N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO\n" -"LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1\n" -"-----END CERTIFICATE-----\n" -"Starfield Root Certificate Authority - G2\n" -"=========================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT\n" -"B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s\n" -"b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0\n" -"eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw\n" -"DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg\n" -"VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB\n" -"dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv\n" -"W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs\n" -"bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk\n" -"N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf\n" -"ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU\n" -"JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n" -"AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol\n" -"TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx\n" -"4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw\n" -"F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K\n" -"pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ\n" -"c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0\n" -"-----END CERTIFICATE-----\n" -"Starfield Services Root Certificate Authority - G2\n" -"==================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT\n" -"B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s\n" -"b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl\n" -"IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV\n" -"BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT\n" -"dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg\n" -"Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\n" -"AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2\n" -"h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa\n" -"hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP\n" -"LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB\n" -"rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw\n" -"AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG\n" -"SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP\n" -"E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy\n" -"xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd\n" -"iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza\n" -"YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6\n" -"-----END CERTIFICATE-----\n" -"AffirmTrust Commercial\n" -"======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS\n" -"BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw\n" -"MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly\n" -"bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF\n" -"AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb\n" -"DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV\n" -"C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6\n" -"BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww\n" -"MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV\n" -"HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n" -"AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG\n" -"hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi\n" -"qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv\n" -"0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh\n" -"sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=\n" -"-----END CERTIFICATE-----\n" -"AffirmTrust Networking\n" -"======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS\n" -"BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw\n" -"MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly\n" -"bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF\n" -"AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE\n" -"Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI\n" -"dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24\n" -"/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb\n" -"h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV\n" -"HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n" -"AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu\n" -"UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6\n" -"12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23\n" -"WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9\n" -"/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=\n" -"-----END CERTIFICATE-----\n" -"AffirmTrust Premium\n" -"===================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS\n" -"BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy\n" -"OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy\n" -"dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A\n" -"MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn\n" -"BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV\n" -"5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs\n" -"+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd\n" -"GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R\n" -"p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI\n" -"S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04\n" -"6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5\n" -"/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo\n" -"+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB\n" -"/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv\n" -"MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg\n" -"Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC\n" -"6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S\n" -"L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK\n" -"+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV\n" -"BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg\n" -"IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60\n" -"g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb\n" -"zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==\n" -"-----END CERTIFICATE-----\n" -"AffirmTrust Premium ECC\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV\n" -"BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx\n" -"MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U\n" -"cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA\n" -"IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ\n" -"N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW\n" -"BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK\n" -"BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X\n" -"57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM\n" -"eQ==\n" -"-----END CERTIFICATE-----\n" -"Certum Trusted Network CA\n" -"=========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK\n" -"ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv\n" -"biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy\n" -"MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU\n" -"ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5\n" -"MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n" -"AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC\n" -"l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J\n" -"J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4\n" -"fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0\n" -"cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB\n" -"Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw\n" -"DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj\n" -"jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1\n" -"mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj\n" -"Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI\n" -"03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=\n" -"-----END CERTIFICATE-----\n" -"Certinomis - Autorité Racine\n" -"============================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"vgt2Fl43N+bYdJeimUV5\n" -"-----END CERTIFICATE-----\n" -"TWCA Root Certification Authority\n" -"=================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ\n" -"VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh\n" -"dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG\n" -"EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB\n" -"IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n" -"AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx\n" -"QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC\n" -"oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP\n" -"4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r\n" -"y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB\n" -"BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG\n" -"9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC\n" -"mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW\n" -"QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY\n" -"T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny\n" -"Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==\n" -"-----END CERTIFICATE-----\n" -"Security Communication RootCA2\n" -"==============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc\n" -"U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh\n" -"dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC\n" -"SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy\n" -"aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n" -"ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++\n" -"+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R\n" -"3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV\n" -"spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K\n" -"EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8\n" -"QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB\n" -"CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj\n" -"u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk\n" -"3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q\n" -"tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29\n" -"mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03\n" -"-----END CERTIFICATE-----\n" -"EC-ACC\n" -"======\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE\n" -"BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w\n" -"ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD\n" -"VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE\n" -"CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT\n" -"BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7\n" -"MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt\n" -"SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl\n" -"Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh\n" -"cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND\n" -"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK\n" -"w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT\n" -"ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4\n" -"HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a\n" -"E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw\n" -"0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E\n" -"BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD\n" -"VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0\n" -"Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l\n" -"dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ\n" -"lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa\n" -"Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe\n" -"l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2\n" -"E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D\n" -"5EI=\n" -"-----END CERTIFICATE-----\n" -"Hellenic Academic and Research Institutions RootCA 2011\n" -"=======================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT\n" -"O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y\n" -"aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z\n" -"IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT\n" -"AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z\n" -"IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo\n" -"IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n" -"AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI\n" -"1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa\n" -"71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u\n" -"8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH\n" -"3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/\n" -"MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8\n" -"MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu\n" -"b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt\n" -"XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8\n" -"TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD\n" -"/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N\n" -"7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4\n" -"-----END CERTIFICATE-----\n" -"Actalis Authentication Root CA\n" -"==============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM\n" -"BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE\n" -"AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky\n" -"MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz\n" -"IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290\n" -"IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ\n" -"wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa\n" -"by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6\n" -"zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f\n" -"YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2\n" -"oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l\n" -"EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7\n" -"hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8\n" -"EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5\n" -"jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY\n" -"iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt\n" -"ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI\n" -"WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0\n" -"JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx\n" -"K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+\n" -"Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC\n" -"4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo\n" -"2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz\n" -"lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem\n" -"OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9\n" -"vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==\n" -"-----END CERTIFICATE-----\n" -"Trustis FPS Root CA\n" -"===================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG\n" -"EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290\n" -"IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV\n" -"BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ\n" -"KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ\n" -"RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk\n" -"H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa\n" -"cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt\n" -"o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA\n" -"AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd\n" -"BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c\n" -"GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC\n" -"yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P\n" -"8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV\n" -"l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl\n" -"iB6XzCGcKQENZetX2fNXlrtIzYE=\n" -"-----END CERTIFICATE-----\n" -"StartCom Certification Authority\n" -"================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN\n" -"U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu\n" -"ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0\n" -"NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk\n" -"LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg\n" -"U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw\n" -"ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y\n" -"o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/\n" -"Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d\n" -"eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt\n" -"2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z\n" -"6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ\n" -"osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/\n" -"untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc\n" -"UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT\n" -"37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD\n" -"VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ\n" -"Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0\n" -"dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu\n" -"c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv\n" -"bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0\n" -"aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0\n" -"aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t\n" -"L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG\n" -"cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5\n" -"fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm\n" -"N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN\n" -"Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T\n" -"tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX\n" -"e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA\n" -"2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs\n" -"HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE\n" -"JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib\n" -"D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=\n" -"-----END CERTIFICATE-----\n" -"StartCom Certification Authority G2\n" -"===================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN\n" -"U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg\n" -"RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE\n" -"ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n" -"dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O\n" -"o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG\n" -"4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi\n" -"Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul\n" -"Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs\n" -"O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H\n" -"vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L\n" -"nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS\n" -"FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa\n" -"z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E\n" -"BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ\n" -"KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K\n" -"2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk\n" -"J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+\n" -"JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG\n" -"/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc\n" -"nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld\n" -"blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc\n" -"l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm\n" -"7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm\n" -"obp573PYtlNXLfbQ4ddI\n" -"-----END CERTIFICATE-----\n" -"Buypass Class 2 Root CA\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU\n" -"QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X\n" -"DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1\n" -"eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw\n" -"DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1\n" -"g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn\n" -"9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b\n" -"/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU\n" -"CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff\n" -"awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI\n" -"zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn\n" -"Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX\n" -"Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs\n" -"M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n" -"VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF\n" -"AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s\n" -"A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI\n" -"osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S\n" -"aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd\n" -"DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD\n" -"LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0\n" -"oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC\n" -"wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS\n" -"CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN\n" -"rJgWVqA=\n" -"-----END CERTIFICATE-----\n" -"Buypass Class 3 Root CA\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU\n" -"QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X\n" -"DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1\n" -"eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw\n" -"DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH\n" -"sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR\n" -"5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh\n" -"7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ\n" -"ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH\n" -"2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV\n" -"/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ\n" -"RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA\n" -"Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq\n" -"j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n" -"VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF\n" -"AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV\n" -"cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G\n" -"uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG\n" -"Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8\n" -"ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2\n" -"KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz\n" -"6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug\n" -"UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe\n" -"eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi\n" -"Cp/HuZc=\n" -"-----END CERTIFICATE-----\n" -"T-TeleSec GlobalRoot Class 3\n" -"============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM\n" -"IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU\n" -"cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx\n" -"MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz\n" -"dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD\n" -"ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3\n" -"DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK\n" -"9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU\n" -"NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF\n" -"iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W\n" -"0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA\n" -"MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr\n" -"AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb\n" -"fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT\n" -"ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h\n" -"P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml\n" -"e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==\n" -"-----END CERTIFICATE-----\n" -"EE Certification Centre Root CA\n" -"===============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG\n" -"EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy\n" -"dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw\n" -"MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB\n" -"UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy\n" -"ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" -"DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM\n" -"TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2\n" -"rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw\n" -"93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN\n" -"P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T\n" -"AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ\n" -"MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF\n" -"BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj\n" -"xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM\n" -"lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u\n" -"uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU\n" -"3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM\n" -"dcGWxZ0=\n" -"-----END CERTIFICATE-----\n" -"TURKTRUST Certificate Services Provider Root 2007\n" -"=================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF\n" -"bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP\n" -"MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg\n" -"QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X\n" -"DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl\n" -"a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN\n" -"BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp\n" -"bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw\n" -"DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N\n" -"YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv\n" -"KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya\n" -"KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT\n" -"rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC\n" -"AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP\n" -"BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s\n" -"Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I\n" -"aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO\n" -"Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb\n" -"BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK\n" -"poRq0Tl9\n" -"-----END CERTIFICATE-----\n" -"D-TRUST Root Class 3 CA 2 2009\n" -"==============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK\n" -"DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe\n" -"Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE\n" -"LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw\n" -"DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD\n" -"ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA\n" -"BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv\n" -"KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z\n" -"p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC\n" -"AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ\n" -"4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y\n" -"eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw\n" -"MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G\n" -"PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw\n" -"OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm\n" -"2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0\n" -"o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV\n" -"dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph\n" -"X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=\n" -"-----END CERTIFICATE-----\n" -"D-TRUST Root Class 3 CA 2 EV 2009\n" -"=================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK\n" -"DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw\n" -"OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK\n" -"DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw\n" -"OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS\n" -"egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh\n" -"zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T\n" -"7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60\n" -"sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35\n" -"11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv\n" -"cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v\n" -"ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El\n" -"MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp\n" -"b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh\n" -"c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+\n" -"PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05\n" -"nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX\n" -"ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA\n" -"NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv\n" -"w9y4AyHqnxbxLFS1\n" -"-----END CERTIFICATE-----\n" -"PSCProcert\n" -"==========\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk\n" -"ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ\n" -"MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz\n" -"dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl\n" -"cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw\n" -"IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw\n" -"MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w\n" -"DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD\n" -"ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp\n" -"Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw\n" -"DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC\n" -"wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA\n" -"3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh\n" -"RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO\n" -"EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2\n" -"0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH\n" -"0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU\n" -"td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw\n" -"Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp\n" -"r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/\n" -"AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz\n" -"Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId\n" -"xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp\n" -"ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH\n" -"EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h\n" -"Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k\n" -"ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG\n" -"9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG\n" -"MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG\n" -"LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52\n" -"ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy\n" -"YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v\n" -"Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o\n" -"dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq\n" -"T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN\n" -"g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q\n" -"uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1\n" -"n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn\n" -"FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo\n" -"5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq\n" -"3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5\n" -"poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y\n" -"eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km\n" -"-----END CERTIFICATE-----\n" -"China Internet Network Information Center EV Certificates Root\n" -"==============================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV\n" -"BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D\n" -"aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg\n" -"Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG\n" -"A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM\n" -"PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl\n" -"cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y\n" -"jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV\n" -"98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H\n" -"klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23\n" -"KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC\n" -"7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV\n" -"HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD\n" -"glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5\n" -"0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM\n" -"7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws\n" -"ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0\n" -"5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=\n" -"-----END CERTIFICATE-----\n" -"Swisscom Root CA 2\n" -"==================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG\n" -"EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy\n" -"dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2\n" -"MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln\n" -"aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC\n" -"IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM\n" -"LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo\n" -"ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ\n" -"wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH\n" -"Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a\n" -"SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS\n" -"NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab\n" -"mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY\n" -"Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3\n" -"qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw\n" -"HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O\n" -"BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu\n" -"MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO\n" -"v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ\n" -"82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz\n" -"o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs\n" -"a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx\n" -"OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW\n" -"mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o\n" -"+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC\n" -"rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX\n" -"5OfNeOI5wSsSnqaeG8XmDtkx2Q==\n" -"-----END CERTIFICATE-----\n" -"Swisscom Root EV CA 2\n" -"=====================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=\n" -"-----END CERTIFICATE-----\n" -"CA Disig Root R1\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw\n" -"EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp\n" -"ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx\n" -"EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp\n" -"c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy\n" -"3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8\n" -"u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2\n" -"m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk\n" -"CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa\n" -"YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6\n" -"vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL\n" -"LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX\n" -"ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is\n" -"XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV\n" -"HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ\n" -"04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR\n" -"xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B\n" -"LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM\n" -"CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb\n" -"VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85\n" -"YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS\n" -"ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix\n" -"lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N\n" -"UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ\n" -"a7+h89n07eLw4+1knj0vllJPgFOL\n" -"-----END CERTIFICATE-----\n" -"CA Disig Root R2\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw\n" -"EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp\n" -"ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx\n" -"EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp\n" -"c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC\n" -"w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia\n" -"xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7\n" -"A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S\n" -"GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV\n" -"g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa\n" -"5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE\n" -"koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A\n" -"Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i\n" -"Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV\n" -"HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u\n" -"Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM\n" -"tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV\n" -"sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je\n" -"dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8\n" -"1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx\n" -"mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01\n" -"utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0\n" -"sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg\n" -"UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV\n" -"7+ZtsH8tZ/3zbBt1RqPlShfppNcL\n" -"-----END CERTIFICATE-----\n" -"ACCVRAIZ1\n" -"=========\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB\n" -"SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1\n" -"MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH\n" -"UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC\n" -"DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM\n" -"jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0\n" -"RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD\n" -"aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ\n" -"0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG\n" -"WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7\n" -"8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR\n" -"5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J\n" -"9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK\n" -"Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw\n" -"Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu\n" -"Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2\n" -"VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM\n" -"Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA\n" -"QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh\n" -"AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA\n" -"YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj\n" -"AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA\n" -"IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk\n" -"aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0\n" -"dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2\n" -"MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI\n" -"hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E\n" -"R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN\n" -"YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49\n" -"nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ\n" -"TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3\n" -"sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h\n" -"I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg\n" -"Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd\n" -"3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p\n" -"EfbRD0tVNEYqi4Y7\n" -"-----END CERTIFICATE-----\n" -"TWCA Global Root CA\n" -"===================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT\n" -"CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD\n" -"QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK\n" -"EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg\n" -"Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C\n" -"nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV\n" -"r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR\n" -"Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV\n" -"tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W\n" -"KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99\n" -"sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p\n" -"yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn\n" -"kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI\n" -"zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC\n" -"AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g\n" -"cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn\n" -"LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M\n" -"8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg\n" -"/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg\n" -"lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP\n" -"A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m\n" -"i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8\n" -"EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3\n" -"zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=\n" -"-----END CERTIFICATE-----\n" -"TeliaSonera Root CA v1\n" -"======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE\n" -"CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4\n" -"MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW\n" -"VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+\n" -"6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA\n" -"3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k\n" -"B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn\n" -"Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH\n" -"oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3\n" -"F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ\n" -"oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7\n" -"gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc\n" -"TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB\n" -"AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW\n" -"DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm\n" -"zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx\n" -"0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW\n" -"pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV\n" -"G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc\n" -"c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT\n" -"JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2\n" -"qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6\n" -"Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems\n" -"WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=\n" -"-----END CERTIFICATE-----\n" -"E-Tugra Certification Authority\n" -"===============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w\n" -"DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls\n" -"ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN\n" -"ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw\n" -"NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx\n" -"QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl\n" -"cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD\n" -"DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A\n" -"MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd\n" -"hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K\n" -"CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g\n" -"ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ\n" -"BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0\n" -"E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz\n" -"rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq\n" -"jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn\n" -"rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5\n" -"dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB\n" -"/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG\n" -"MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK\n" -"kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO\n" -"XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807\n" -"VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo\n" -"a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc\n" -"dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV\n" -"KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT\n" -"Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0\n" -"8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G\n" -"C7TbO6Orb1wdtn7os4I07QZcJA==\n" -"-----END CERTIFICATE-----\n" -"T-TeleSec GlobalRoot Class 2\n" -"============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM\n" -"IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU\n" -"cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx\n" -"MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz\n" -"dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD\n" -"ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3\n" -"DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ\n" -"SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F\n" -"vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970\n" -"2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV\n" -"WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA\n" -"MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy\n" -"YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4\n" -"r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf\n" -"vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR\n" -"3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN\n" -"9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==\n" -"-----END CERTIFICATE-----\n" -"Atos TrustedRoot 2011\n" -"=====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU\n" -"cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4\n" -"MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG\n" -"A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV\n" -"hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr\n" -"54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+\n" -"DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320\n" -"HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR\n" -"z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R\n" -"l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ\n" -"bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB\n" -"CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h\n" -"k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh\n" -"TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9\n" -"61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G\n" -"3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed\n" -"-----END CERTIFICATE-----\n" -"QuoVadis Root CA 1 G3\n" -"=====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG\n" -"A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv\n" -"b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN\n" -"MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg\n" -"RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE\n" -"PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm\n" -"PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6\n" -"Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN\n" -"ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l\n" -"g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV\n" -"7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX\n" -"9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f\n" -"iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg\n" -"t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD\n" -"AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI\n" -"hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC\n" -"MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3\n" -"GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct\n" -"Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP\n" -"+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh\n" -"3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa\n" -"wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6\n" -"O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0\n" -"FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV\n" -"hMJKzRwuJIczYOXD\n" -"-----END CERTIFICATE-----\n" -"QuoVadis Root CA 2 G3\n" -"=====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG\n" -"A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv\n" -"b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN\n" -"MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg\n" -"RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh\n" -"ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY\n" -"NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t\n" -"oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o\n" -"MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l\n" -"V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo\n" -"L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ\n" -"sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD\n" -"6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh\n" -"lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD\n" -"AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI\n" -"hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66\n" -"AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K\n" -"pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9\n" -"x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz\n" -"dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X\n" -"U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw\n" -"mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD\n" -"zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN\n" -"JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr\n" -"O3jtZsSOeWmD3n+M\n" -"-----END CERTIFICATE-----\n" -"QuoVadis Root CA 3 G3\n" -"=====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG\n" -"A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv\n" -"b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN\n" -"MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg\n" -"RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286\n" -"IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL\n" -"Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe\n" -"6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3\n" -"I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U\n" -"VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7\n" -"5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi\n" -"Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM\n" -"dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt\n" -"rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD\n" -"AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI\n" -"hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px\n" -"KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS\n" -"t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ\n" -"TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du\n" -"DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib\n" -"Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD\n" -"hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX\n" -"0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW\n" -"dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2\n" -"PpxxVJkES/1Y+Zj0\n" -"-----END CERTIFICATE-----\n" -"DigiCert Assured ID Root G2\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG\n" -"EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw\n" -"IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw\n" -"MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL\n" -"ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw\n" -"ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH\n" -"35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq\n" -"bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw\n" -"VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP\n" -"YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn\n" -"lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO\n" -"w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv\n" -"0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz\n" -"d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW\n" -"hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M\n" -"jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo\n" -"IhNzbM8m9Yop5w==\n" -"-----END CERTIFICATE-----\n" -"DigiCert Assured ID Root G3\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV\n" -"UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD\n" -"VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1\n" -"MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" -"d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ\n" -"BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb\n" -"RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs\n" -"KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF\n" -"UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy\n" -"YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy\n" -"1vUhZscv6pZjamVFkpUBtA==\n" -"-----END CERTIFICATE-----\n" -"DigiCert Global Root G2\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG\n" -"EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw\n" -"HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx\n" -"MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3\n" -"dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq\n" -"hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ\n" -"kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO\n" -"3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV\n" -"BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM\n" -"UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB\n" -"o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu\n" -"5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr\n" -"F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U\n" -"WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH\n" -"QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/\n" -"iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl\n" -"MrY=\n" -"-----END CERTIFICATE-----\n" -"DigiCert Global Root G3\n" -"=======================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV\n" -"UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD\n" -"VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw\n" -"MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k\n" -"aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C\n" -"AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O\n" -"YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP\n" -"BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp\n" -"Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y\n" -"3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34\n" -"VOKa5Vt8sycX\n" -"-----END CERTIFICATE-----\n" -"DigiCert Trusted Root G4\n" -"========================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"82Z+\n" -"-----END CERTIFICATE-----\n" -"WoSign\n" -"======\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"-----END CERTIFICATE-----\n" -"WoSign China\n" -"============\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG\n" -"EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv\n" -"geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD\n" -"VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN\n" -"BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k\n" -"8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5\n" -"uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85\n" -"dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5\n" -"Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy\n" -"b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc\n" -"76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m\n" -"+Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6\n" -"yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX\n" -"GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud\n" -"EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA\n" -"A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6\n" -"yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY\n" -"r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115\n" -"j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A\n" -"kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97\n" -"qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y\n" -"jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB\n" -"ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv\n" -"T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO\n" -"kI26oQ==\n" -"-----END CERTIFICATE-----\n" -"COMODO RSA Certification Authority\n" -"==================================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"LaZRfyHBNVOFBkpdn627G190\n" -"-----END CERTIFICATE-----\n" -"USERTrust RSA Certification Authority\n" -"=====================================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9\n" -"-----END CERTIFICATE-----\n" -"USERTrust ECC Certification Authority\n" -"=====================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC\n" -"VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU\n" -"aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv\n" -"biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC\n" -"VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU\n" -"aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv\n" -"biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2\n" -"0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez\n" -"nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV\n" -"HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB\n" -"HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu\n" -"9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=\n" -"-----END CERTIFICATE-----\n" -"GlobalSign ECC Root CA - R4\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb\n" -"R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD\n" -"EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb\n" -"R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD\n" -"EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl\n" -"OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P\n" -"AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV\n" -"MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF\n" -"JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=\n" -"-----END CERTIFICATE-----\n" -"GlobalSign ECC Root CA - R5\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb\n" -"R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD\n" -"EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb\n" -"R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD\n" -"EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6\n" -"SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS\n" -"h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd\n" -"BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx\n" -"uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7\n" -"yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3\n" -"-----END CERTIFICATE-----\n" -"Staat der Nederlanden Root CA - G3\n" -"==================================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"-----END CERTIFICATE-----\n" -"Staat der Nederlanden EV Root CA\n" -"================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE\n" -"CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g\n" -"RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M\n" -"MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl\n" -"cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk\n" -"SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW\n" -"O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r\n" -"0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8\n" -"Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV\n" -"XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr\n" -"08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV\n" -"0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd\n" -"74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx\n" -"fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC\n" -"MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa\n" -"ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI\n" -"eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu\n" -"c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq\n" -"5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN\n" -"b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN\n" -"f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi\n" -"5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4\n" -"WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK\n" -"DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy\n" -"eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==\n" -"-----END CERTIFICATE-----\n" -"IdenTrust Commercial Root CA 1\n" -"==============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG\n" -"EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS\n" -"b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES\n" -"MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB\n" -"IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld\n" -"hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/\n" -"mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi\n" -"1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C\n" -"XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl\n" -"3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy\n" -"NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV\n" -"WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg\n" -"xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix\n" -"uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC\n" -"AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI\n" -"hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH\n" -"6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg\n" -"ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt\n" -"ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV\n" -"YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX\n" -"feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro\n" -"kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe\n" -"2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz\n" -"Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R\n" -"cGzM7vRX+Bi6hG6H\n" -"-----END CERTIFICATE-----\n" -"IdenTrust Public Sector Root CA 1\n" -"=================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG\n" -"EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv\n" -"ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV\n" -"UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS\n" -"b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy\n" -"P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6\n" -"Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI\n" -"rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf\n" -"qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS\n" -"mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn\n" -"ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh\n" -"LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v\n" -"iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL\n" -"4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B\n" -"Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw\n" -"DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj\n" -"t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A\n" -"mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt\n" -"GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt\n" -"m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx\n" -"NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4\n" -"Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI\n" -"ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC\n" -"ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ\n" -"3Wl9af0AVqW3rLatt8o+Ae+c\n" -"-----END CERTIFICATE-----\n" -"Entrust Root Certification Authority - G2\n" -"=========================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV\n" -"BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy\n" -"bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug\n" -"b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw\n" -"HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT\n" -"DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx\n" -"OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s\n" -"eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi\n" -"MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP\n" -"/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz\n" -"HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU\n" -"s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y\n" -"TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx\n" -"AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6\n" -"0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z\n" -"iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ\n" -"Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi\n" -"nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+\n" -"vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO\n" -"e4pIb4tF9g==\n" -"-----END CERTIFICATE-----\n" -"Entrust Root Certification Authority - EC1\n" -"==========================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx\n" -"FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn\n" -"YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl\n" -"ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5\n" -"IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw\n" -"FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs\n" -"LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg\n" -"dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt\n" -"IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy\n" -"AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef\n" -"9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n" -"FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h\n" -"vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8\n" -"kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G\n" -"-----END CERTIFICATE-----\n" -"CFCA EV ROOT\n" -"============\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"-----END CERTIFICATE-----\n" -"TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5\n" -"====================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN\n" -"BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp\n" -"bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg\n" -"RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw\n" -"ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w\n" -"SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE\n" -"n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp\n" -"ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n" -"CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537\n" -"jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m\n" -"ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP\n" -"9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV\n" -"4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH\n" -"HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI\n" -"hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo\n" -"BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq\n" -"URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl\n" -"lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8\n" -"B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=\n" -"-----END CERTIFICATE-----\n" -"Certinomis - Root CA\n" -"====================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"hkIGuUE=\n" -"-----END CERTIFICATE-----\n" -"OISTE WISeKey Global Root GB CA\n" -"===============================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG\n" -"EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl\n" -"ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw\n" -"MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD\n" -"VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds\n" -"b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX\n" -"scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP\n" -"rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk\n" -"9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o\n" -"Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg\n" -"GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB\n" -"/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI\n" -"hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD\n" -"dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0\n" -"VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui\n" -"HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic\n" -"Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=\n" -"-----END CERTIFICATE-----\n" -"Certification Authority of WoSign G2\n" -"====================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG\n" -"EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g\n" -"QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx\n" -"CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm\n" -"aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n" -"CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai\n" -"XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du\n" -"W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9\n" -"5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK\n" -"v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC\n" -"AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI\n" -"hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY\n" -"P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3\n" -"TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu\n" -"+sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+\n" -"7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=\n" -"-----END CERTIFICATE-----\n" -"CA WoSign ECC Root\n" -"==================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD\n" -"TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v\n" -"dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK\n" -"ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI\n" -"zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU\n" -"t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw\n" -"QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R\n" -"MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0\n" -"Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu\n" -"a/GRspBl9JrmkO5K\n" -"-----END CERTIFICATE-----\n" -"SZAFIR ROOT CA2\n" -"===============\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG\n" -"A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV\n" -"BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ\n" -"BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD\n" -"VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q\n" -"qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK\n" -"DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE\n" -"2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ\n" -"ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi\n" -"ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P\n" -"AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC\n" -"AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5\n" -"O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67\n" -"oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul\n" -"4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6\n" -"+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==\n" -"-----END CERTIFICATE-----\n" -"Certum Trusted Network CA 2\n" -"===========================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE\n" -"BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1\n" -"bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y\n" -"ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ\n" -"TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl\n" -"cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB\n" -"IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9\n" -"7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o\n" -"CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b\n" -"Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p\n" -"uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130\n" -"GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ\n" -"9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB\n" -"Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye\n" -"hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM\n" -"BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD\n" -"AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI\n" -"hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW\n" -"Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA\n" -"L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo\n" -"clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM\n" -"pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb\n" -"w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo\n" -"J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm\n" -"ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX\n" -"is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7\n" -"zAYspsbiDrW5viSP\n" -"-----END CERTIFICATE-----\n" -"Hellenic Academic and Research Institutions RootCA 2015\n" -"=======================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT\n" -"BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0\n" -"aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl\n" -"YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx\n" -"MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg\n" -"QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV\n" -"BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw\n" -"MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv\n" -"bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh\n" -"iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+\n" -"6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd\n" -"FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr\n" -"i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F\n" -"GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2\n" -"fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu\n" -"iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc\n" -"Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD\n" -"AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI\n" -"hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+\n" -"D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM\n" -"d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y\n" -"d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn\n" -"82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb\n" -"davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F\n" -"Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt\n" -"J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa\n" -"JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q\n" -"p/UsQu0yrbYhnr68\n" -"-----END CERTIFICATE-----\n" -"Hellenic Academic and Research Institutions ECC RootCA 2015\n" -"===========================================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0\n" -"aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u\n" -"cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj\n" -"aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw\n" -"MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj\n" -"IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD\n" -"VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290\n" -"Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP\n" -"dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK\n" -"Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O\n" -"BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA\n" -"GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn\n" -"dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR\n" -"-----END CERTIFICATE-----\n" -"Certplus Root CA G1\n" -"===================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV\n" -"BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe\n" -"Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD\n" -"ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD\n" -"ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN\n" -"r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx\n" -"Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj\n" -"BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv\n" -"LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2\n" -"z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc\n" -"4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd\n" -"4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj\n" -"jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+\n" -"ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G\n" -"A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY\n" -"lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh\n" -"66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG\n" -"YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/\n" -"2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F\n" -"6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX\n" -"CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe\n" -"tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC\n" -"VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/\n" -"+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+\n" -"qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=\n" -"-----END CERTIFICATE-----\n" -"Certplus Root CA G2\n" -"===================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT\n" -"AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x\n" -"NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0\n" -"cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA\n" -"BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN\n" -"Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD\n" -"AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud\n" -"IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV\n" -"HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl\n" -"vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==\n" -"-----END CERTIFICATE-----\n" -"OpenTrust Root CA G1\n" -"====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV\n" -"BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx\n" -"MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM\n" -"CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB\n" -"AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa\n" -"Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87\n" -"ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO\n" -"YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9\n" -"xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO\n" -"9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq\n" -"3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi\n" -"n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9\n" -"URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr\n" -"TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB\n" -"/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px\n" -"N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E\n" -"PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv\n" -"uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK\n" -"n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh\n" -"X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80\n" -"nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm\n" -"GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/\n" -"bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o\n" -"4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA\n" -"OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx\n" -"-----END CERTIFICATE-----\n" -"OpenTrust Root CA G2\n" -"====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV\n" -"BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy\n" -"MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM\n" -"CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB\n" -"AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+\n" -"Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz\n" -"4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV\n" -"eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt\n" -"UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz\n" -"3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj\n" -"3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz\n" -"9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0\n" -"0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT\n" -"y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB\n" -"/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59\n" -"M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz\n" -"Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI\n" -"mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG\n" -"S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp\n" -"EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ\n" -"6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr\n" -"gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo\n" -"SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0\n" -"YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm\n" -"u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK\n" -"-----END CERTIFICATE-----\n" -"OpenTrust Root CA G3\n" -"====================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT\n" -"AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X\n" -"DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w\n" -"ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA\n" -"IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B\n" -"ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB\n" -"/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf\n" -"BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM\n" -"BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta\n" -"3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB\n" -"-----END CERTIFICATE-----\n" -"ISRG Root X1\n" -"============\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE\n" -"BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD\n" -"EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG\n" -"EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT\n" -"DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r\n" -"Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1\n" -"3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K\n" -"b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN\n" -"Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ\n" -"4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf\n" -"1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu\n" -"hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH\n" -"usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r\n" -"OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G\n" -"A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY\n" -"9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL\n" -"ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV\n" -"0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt\n" -"hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw\n" -"TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx\n" -"e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA\n" -"JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD\n" -"YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n\n" -"JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ\n" -"m+kXQ99b21/+jh5Xos1AnX5iItreGCc=\n" -"-----END CERTIFICATE-----\n" -"AC RAIZ FNMT-RCM\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT\n" -"AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw\n" -"MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD\n" -"TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC\n" -"ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf\n" -"qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr\n" -"btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL\n" -"j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou\n" -"08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw\n" -"WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT\n" -"tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ\n" -"47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC\n" -"ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa\n" -"i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE\n" -"FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o\n" -"dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD\n" -"nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s\n" -"D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ\n" -"j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT\n" -"Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW\n" -"+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7\n" -"Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d\n" -"8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm\n" -"5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG\n" -"rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM=\n" -"-----END CERTIFICATE-----\n" -"Amazon Root CA 1\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD\n" -"VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1\n" -"MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv\n" -"bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" -"ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH\n" -"FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ\n" -"gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t\n" -"dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce\n" -"VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB\n" -"/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3\n" -"DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM\n" -"CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy\n" -"8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa\n" -"2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2\n" -"xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5\n" -"-----END CERTIFICATE-----\n" -"Amazon Root CA 2\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD\n" -"VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1\n" -"MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv\n" -"bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC\n" -"ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4\n" -"kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp\n" -"N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9\n" -"AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd\n" -"fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx\n" -"kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS\n" -"btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0\n" -"Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN\n" -"c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+\n" -"3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw\n" -"DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA\n" -"A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY\n" -"+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE\n" -"YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW\n" -"xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ\n" -"gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW\n" -"aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV\n" -"Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3\n" -"KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi\n" -"JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=\n" -"-----END CERTIFICATE-----\n" -"Amazon Root CA 3\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG\n" -"EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy\n" -"NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ\n" -"MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB\n" -"f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr\n" -"Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43\n" -"rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc\n" -"eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==\n" -"-----END CERTIFICATE-----\n" -"Amazon Root CA 4\n" -"================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG\n" -"EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy\n" -"NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ\n" -"MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN\n" -"/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri\n" -"83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\n" -"HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA\n" -"MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1\n" -"AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==\n" -"-----END CERTIFICATE-----\n" -"LuxTrust Global Root 2\n" -"======================\n" -"-----BEGIN CERTIFICATE-----\n" -"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\n" -"-----END CERTIFICATE-----\n" -"TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1\n" -"=============================================\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT\n" -"D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr\n" -"IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g\n" -"TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp\n" -"ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD\n" -"VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt\n" -"c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth\n" -"bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11\n" -"IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\n" -"MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8\n" -"6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc\n" -"wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0\n" -"3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9\n" -"WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU\n" -"ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ\n" -"KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh\n" -"AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc\n" -"lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R\n" -"e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j\n" -"q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=\n" -"-----END CERTIFICATE-----\n" -}; diff --git a/deps/rcheevos/src/rcheevos/rc_version.h b/deps/rcheevos/src/rcheevos/rc_version.h deleted file mode 100644 index cdf857d5f57..00000000000 --- a/deps/rcheevos/src/rcheevos/rc_version.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef RC_VERSION_H -#define RC_VERSION_H - -#ifdef __cplusplus -extern "C" { -#endif - -#define RCHEEVOS_VERSION_MAJOR 10 -#define RCHEEVOS_VERSION_MINOR 7 -#define RCHEEVOS_VERSION_PATCH 0 - -#define RCHEEVOS_MAKE_VERSION(major, minor, patch) (major * 1000000 + minor * 1000 + patch) -#define RCHEEVOS_VERSION RCHEEVOS_MAKE_VERSION(RCHEEVOS_VERSION_MAJOR, RCHEEVOS_VERSION_MINOR, RCHEEVOS_VERSION_PATCH) - -#define RCHEEVOS_MAKE_STRING(num) #num -#define RCHEEVOS_MAKE_VERSION_STRING(major, minor, patch) RCHEEVOS_MAKE_STRING(major) "." RCHEEVOS_MAKE_STRING(minor) "." RCHEEVOS_MAKE_STRING(patch) -#define RCHEEVOS_MAKE_VERSION_STRING_SHORT(major, minor) RCHEEVOS_MAKE_STRING(major) "." RCHEEVOS_MAKE_STRING(minor) - -#if RCHEEVOS_VERSION_PATCH > 0 - #define RCHEEVOS_VERSION_STRING RCHEEVOS_MAKE_VERSION_STRING(RCHEEVOS_VERSION_MAJOR, RCHEEVOS_VERSION_MINOR, RCHEEVOS_VERSION_PATCH) -#else - #define RCHEEVOS_VERSION_STRING RCHEEVOS_MAKE_VERSION_STRING_SHORT(RCHEEVOS_VERSION_MAJOR, RCHEEVOS_VERSION_MINOR) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* RC_VERSION_H */ diff --git a/disk_control_interface.c b/disk_control_interface.c index 225f4c97551..19ae7c5c5b9 100644 --- a/disk_control_interface.c +++ b/disk_control_interface.c @@ -273,58 +273,55 @@ void disk_control_get_image_label( * Generates an appropriate log/notification message * for a disk index change event **/ -static void disk_control_get_index_set_msg( +static size_t disk_control_get_index_set_msg( disk_control_interface_t *disk_control, unsigned num_images, unsigned index, bool success, - unsigned *msg_duration, char *msg, size_t len) + unsigned *msg_duration, char *s, size_t len) { - bool has_label = false; - char image_label[128]; - - image_label[0] = '\0'; - - if (!disk_control || !msg_duration || !msg || len < 1) - return; - - /* Attempt to get image label */ + size_t _len = 0; + if (!disk_control || !msg_duration || !s || len < 1) + return 0; + /* Check whether image was inserted or removed */ if (index < num_images) { + char image_label[128]; + bool has_label = false; + image_label[0] = '\0'; disk_control_get_image_label( disk_control, index, image_label, sizeof(image_label)); - has_label = !string_is_empty(image_label); - } - /* Get message duration - * > Default is 60 - * > If a label is shown, then increase duration by 50% - * > For errors, duration is always 180 */ - *msg_duration = success ? - (has_label ? 90 : 60) : - 180; + has_label = !string_is_empty(image_label); - /* Check whether image was inserted or removed */ - if (index < num_images) - { - size_t _len = strlcpy(msg, + /* Get message duration + * > Default is 60 + * > If a label is shown, then increase duration by 50% + * > For errors, duration is always 180 */ + *msg_duration = success ? (has_label ? 90 : 60) : 180; + + _len = strlcpy(s, success ? msg_hash_to_str(MSG_SETTING_DISK_IN_TRAY) : msg_hash_to_str(MSG_FAILED_TO_SET_DISK), len); if (has_label) - snprintf( - msg + _len, len - _len, ": %u/%u - %s", + _len += snprintf( + s + _len, len - _len, ": %u/%u - %s", index + 1, num_images, image_label); else - snprintf( - msg + _len, len - _len, ": %u/%u", + _len += snprintf( + s + _len, len - _len, ": %u/%u", index + 1, num_images); } else - strlcpy( - msg, + { + *msg_duration = success ? 60 : 180; + _len += strlcpy( + s, success ? msg_hash_to_str(MSG_REMOVED_DISK_FROM_TRAY) : msg_hash_to_str(MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY), len); + } + return _len; } /** @@ -404,6 +401,7 @@ bool disk_control_set_index( disk_control_interface_t *disk_control, unsigned index, bool verbosity) { + size_t _len; bool error = false; unsigned num_images = 0; unsigned msg_duration = 0; @@ -430,12 +428,12 @@ bool disk_control_set_index( error = !disk_control->cb.set_image_index(index); /* Get log/notification message */ - disk_control_get_index_set_msg( + _len = disk_control_get_index_set_msg( disk_control, num_images, index, !error, &msg_duration, msg, sizeof(msg)); /* Output log/notification message */ - if (!string_is_empty(msg)) + if (_len > 0) { if (error) RARCH_ERR("[Disc]: %s\n", msg); @@ -444,7 +442,7 @@ bool disk_control_set_index( /* Errors should always be displayed */ if (verbosity || error) - runloop_msg_queue_push(msg, strlen(msg), 1, msg_duration, true, NULL, + runloop_msg_queue_push(msg, _len, 1, msg_duration, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } @@ -799,7 +797,10 @@ bool disk_control_verify_initial_index( /* If current disk is incorrect, notify user */ if (!success && enabled) { - const char *_msg = msg_hash_to_str(MSG_FAILED_TO_SET_INITIAL_DISK); + char _msg[128]; + size_t _len = strlcpy(_msg, + msg_hash_to_str(MSG_FAILED_TO_SET_INITIAL_DISK), sizeof(_msg)); + RARCH_ERR( "[Disc]: Failed to set initial disc index:\n> Expected" " [%u] %s\n> Detected [%u] %s\n", @@ -810,7 +811,7 @@ bool disk_control_verify_initial_index( /* Ignore 'verbosity' setting - errors should * always be displayed */ - runloop_msg_queue_push(_msg, strlen(_msg), 0, 60, true, NULL, + runloop_msg_queue_push(_msg, _len, 0, 60, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); /* Since a failure here typically means that the @@ -835,12 +836,13 @@ bool disk_control_verify_initial_index( * is available */ if (disk_control->initial_num_images > 1) { + size_t _len; unsigned msg_duration = 0; char msg[128]; msg[0] = '\0'; - disk_control_get_index_set_msg( + _len = disk_control_get_index_set_msg( disk_control, disk_control->initial_num_images, image_index, true, &msg_duration, msg, sizeof(msg)); @@ -852,7 +854,7 @@ bool disk_control_verify_initial_index( * we do not want to 'overwrite' them */ if (verbosity) runloop_msg_queue_push( - msg, strlen(msg), 0, msg_duration, false, NULL, + msg, _len, 0, msg_duration, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); #ifdef HAVE_CHEEVOS diff --git a/disk_index_file.c b/disk_index_file.c index 9f49606ca89..67b359a34e2 100644 --- a/disk_index_file.c +++ b/disk_index_file.c @@ -43,7 +43,7 @@ typedef struct char *image_path; } DCifJSONContext; -static bool DCifJSONObjectMemberHandler(void* context, const char *pValue, size_t length) +static bool DCifJSONObjectMemberHandler(void* context, const char *pValue, size_t len) { DCifJSONContext *pCtx = (DCifJSONContext*)context; @@ -51,7 +51,7 @@ static bool DCifJSONObjectMemberHandler(void* context, const char *pValue, size_ if (pCtx->current_entry_str_val) return false; - if (length) + if (len) { if (string_is_equal(pValue, "image_index")) pCtx->current_entry_uint_val = &pCtx->image_index; @@ -63,11 +63,11 @@ static bool DCifJSONObjectMemberHandler(void* context, const char *pValue, size_ return true; } -static bool DCifJSONNumberHandler(void* context, const char *pValue, size_t length) +static bool DCifJSONNumberHandler(void* context, const char *pValue, size_t len) { DCifJSONContext *pCtx = (DCifJSONContext*)context; - if (pCtx->current_entry_uint_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_uint_val && len && !string_is_empty(pValue)) *pCtx->current_entry_uint_val = string_to_unsigned(pValue); /* ignore unknown members */ @@ -76,14 +76,13 @@ static bool DCifJSONNumberHandler(void* context, const char *pValue, size_t leng return true; } -static bool DCifJSONStringHandler(void* context, const char *pValue, size_t length) +static bool DCifJSONStringHandler(void* context, const char *pValue, size_t len) { DCifJSONContext *pCtx = (DCifJSONContext*)context; - if (pCtx->current_entry_str_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_str_val && len && !string_is_empty(pValue)) { - if (*pCtx->current_entry_str_val) - free(*pCtx->current_entry_str_val); + free(*pCtx->current_entry_str_val); *pCtx->current_entry_str_val = strdup(pValue); } @@ -227,12 +226,9 @@ bool disk_index_file_init( /* > Get disk index file directory */ if (!string_is_empty(dir_savefile)) strlcpy(disk_index_file_dir, dir_savefile, sizeof(disk_index_file_dir)); - else - { - /* Use content directory */ - strlcpy(disk_index_file_dir, content_path, sizeof(disk_index_file_dir)); - path_basedir(disk_index_file_dir); - } + else /* Use content directory */ + fill_pathname_basedir(disk_index_file_dir, content_path, + sizeof(disk_index_file_dir)); /* > Create directory, if required */ if ( !path_is_directory(disk_index_file_dir) diff --git a/frontend/drivers/platform_darwin.m b/frontend/drivers/platform_darwin.m index 0e2cd1bcc9d..e27c38fcccc 100644 --- a/frontend/drivers/platform_darwin.m +++ b/frontend/drivers/platform_darwin.m @@ -273,10 +273,10 @@ static void frontend_darwin_get_name(char *s, size_t len) if (uname(&buffer) == 0) strlcpy(s, buffer.machine, len); #elif defined(OSX) - size_t length = 0; - sysctlbyname("hw.model", NULL, &length, NULL, 0); - if (length) - sysctlbyname("hw.model", s, &length, NULL, 0); + size_t _len = 0; + sysctlbyname("hw.model", NULL, &_len, NULL, 0); + if (_len) + sysctlbyname("hw.model", s, &_len, NULL, 0); #endif } diff --git a/frontend/drivers/platform_dos.c b/frontend/drivers/platform_dos.c index 17d3541f64a..fd2c5b06d86 100644 --- a/frontend/drivers/platform_dos.c +++ b/frontend/drivers/platform_dos.c @@ -107,11 +107,11 @@ static void frontend_dos_get_env_settings(int *argc, char *argv[], static void frontend_dos_exec(const char *path, bool should_load_game) { char *newargv[] = { NULL, NULL }; - size_t len = strlen(path); + size_t _len = strlen(path); - newargv[0] = (char*)malloc(len); + newargv[0] = (char*)malloc(_len); - strlcpy(newargv[0], path, len); + strlcpy(newargv[0], path, _len); execv(path, newargv); } diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c index 778f54eeda6..9cd870655e0 100644 --- a/frontend/drivers/platform_unix.c +++ b/frontend/drivers/platform_unix.c @@ -2353,11 +2353,11 @@ static bool frontend_unix_set_fork(enum frontend_fork fork_mode) static void frontend_unix_exec(const char *path, bool should_load_content) { char *newargv[] = { NULL, NULL }; - size_t len = strlen(path); + size_t _len = strlen(path); - newargv[0] = (char*)malloc(len); + newargv[0] = (char*)malloc(_len); - strlcpy(newargv[0], path, len); + strlcpy(newargv[0], path, _len); execv(path, newargv); } diff --git a/gfx/common/d3dcompiler_common.c b/gfx/common/d3dcompiler_common.c index 8ea35ad3035..1adbe3a15d1 100644 --- a/gfx/common/d3dcompiler_common.c +++ b/gfx/common/d3dcompiler_common.c @@ -115,7 +115,7 @@ HRESULT WINAPI } #endif -bool d3d_compile(const char* src, size_t size, +bool d3d_compile(const char* src, size_t len, LPCSTR src_name, LPCSTR entrypoint, LPCSTR target, D3DBlob* out) { D3DBlob error_msg; @@ -125,18 +125,18 @@ bool d3d_compile(const char* src, size_t size, UINT compileflags = 0; #endif - if (!size) - size = strlen(src); + if (!len) + len = strlen(src); if (FAILED(D3DCompile( - src, size, src_name, NULL, NULL, + src, len, src_name, NULL, NULL, entrypoint, target, compileflags, 0, out, &error_msg))) { if (error_msg) { const char* msg = (const char*)error_msg->lpVtbl->GetBufferPointer(error_msg); RARCH_ERR("D3DCompile failed :\n%s\n", msg); - /* Place a breakpoint here, if you want, + /* Place a breakpoint here, if you want, to see shader compilation issues */ Release(error_msg); } diff --git a/gfx/common/d3dcompiler_common.h b/gfx/common/d3dcompiler_common.h index 292cf13fe6a..3c4c4ba758e 100644 --- a/gfx/common/d3dcompiler_common.h +++ b/gfx/common/d3dcompiler_common.h @@ -24,7 +24,7 @@ typedef ID3DBlob* D3DBlob; -bool d3d_compile(const char* src, size_t size, +bool d3d_compile(const char* src, size_t len, LPCSTR src_name, LPCSTR entrypoint, LPCSTR target, D3DBlob* out); bool d3d_compile_from_file(LPCWSTR filename, LPCSTR entrypoint, LPCSTR target, D3DBlob* out); diff --git a/gfx/common/win32_common.c b/gfx/common/win32_common.c index aa84bd79258..4291d4e25f1 100644 --- a/gfx/common/win32_common.c +++ b/gfx/common/win32_common.c @@ -1325,22 +1325,22 @@ static LRESULT CALLBACK wnd_proc_common_dinput_internal(HWND hwnd, if (gcs) { int i; - wchar_t wstr[4]={0,}; - int len1 = ImmGetCompositionStringW(hIMC, gcs, wstr, 4); - wstr[2] = wstr[1]; - wstr[1] = 0; - if ((len1 <= 0) || (len1 > 4)) + wchar_t wstr[4] = {0,}; + LONG _len = ImmGetCompositionStringW(hIMC, gcs, wstr, 4); + wstr[2] = wstr[1]; + wstr[1] = 0; + if ((_len <= 0) || (_len > 4)) break; - for (i = 0; i < len1; i = i + 2) + for (i = 0; i < _len; i = i + 2) { - size_t len2; + size_t __len; char *utf8 = utf16_to_utf8_string_alloc(wstr+i); if (!utf8) continue; - len2 = strlen(utf8) + 1; - if (len2 >= 1 && len2 <= 3) + __len = strlen(utf8) + 1; + if (__len >= 1 && __len <= 3) { - if (len2 >= 2) + if (__len >= 2) utf8[3] = (gcs) | (gcs >> 4); input_keyboard_event(true, 1, *((int*)utf8), 0, RETRO_DEVICE_KEYBOARD); } @@ -1373,8 +1373,10 @@ static LRESULT CALLBACK wnd_proc_common_dinput_internal(HWND hwnd, keysym |= 0x80; /* tell the driver about shift and alt key events */ - if (keysym == 0x2A/*DIK_LSHIFT*/ || keysym == 0x36/*DIK_RSHIFT*/ - || keysym == 0x38/*DIK_LMENU*/ || keysym == 0xB8/*DIK_RMENU*/) + if ( keysym == 0x2A/*DIK_LSHIFT*/ + || keysym == 0x36/*DIK_RSHIFT*/ + || keysym == 0x38/*DIK_LMENU*/ + || keysym == 0xB8/*DIK_RMENU*/) { void* input_data = (void*)(LONG_PTR)GetWindowLongPtr(main_window.hwnd, GWLP_USERDATA); if (input_data && dinput_handle_message(input_data, @@ -2137,7 +2139,7 @@ static void win32_localize_menu(HMENU menu) if (label_enum != MSG_UNKNOWN) { int len; - size_t len2; + size_t __len; #ifndef LEGACY_WIN32 wchar_t* new_label_unicode = NULL; #else @@ -2156,38 +2158,38 @@ static void win32_localize_menu(HMENU menu) MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST) { meta_key_name = "Ctrl+O"; - len2 = STRLEN_CONST("Ctrl+O"); + __len = STRLEN_CONST("Ctrl+O"); } else if (label_enum == MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY) { meta_key_name = "Alt+Enter"; - len2 = STRLEN_CONST("Alt+Enter"); + __len = STRLEN_CONST("Alt+Enter"); } else if (meta_key != 0) { meta_key_name = win32_meta_key_to_name(meta_key); - len2 = strlen(meta_key_name); + __len = strlen(meta_key_name); } /* Append localized name, tab character, and Shortcut Key */ if (meta_key_name && string_is_not_equal(meta_key_name, "nul")) { - size_t len1 = strlen(new_label); - size_t buf_size = len1 + len2 + 2; + size_t _len = strlen(new_label); + size_t buf_size = _len + __len + 2; new_label_text = (char*)malloc(buf_size); if (new_label_text) { - size_t _len; + size_t __len; new_label2 = new_label_text; - _len = strlcpy(new_label_text, new_label, + __len = strlcpy(new_label_text, new_label, buf_size); - new_label_text[ _len] = '\t'; - new_label_text[++_len] = '\0'; - strlcpy(new_label_text + _len, meta_key_name, buf_size - _len); + new_label_text[ __len] = '\t'; + new_label_text[++__len] = '\0'; + strlcpy(new_label_text + __len, meta_key_name, buf_size - __len); /* Make first character of shortcut name uppercase */ - new_label_text[len1 + 1] = toupper(new_label_text[len1 + 1]); + new_label_text[_len + 1] = toupper(new_label_text[_len + 1]); } } diff --git a/gfx/common/x11_common.c b/gfx/common/x11_common.c index 8a7cc783d6b..36efb980bef 100644 --- a/gfx/common/x11_common.c +++ b/gfx/common/x11_common.c @@ -813,13 +813,13 @@ bool x11_connect(void) void x11_update_title(void *data) { - size_t len; + size_t _len; char title[128]; - title[0] = '\0'; - len = video_driver_get_window_title(title, sizeof(title)); + title[0] = '\0'; + _len = video_driver_get_window_title(title, sizeof(title)); if (title[0]) XChangeProperty(g_x11_dpy, g_x11_win, XA_WM_NAME, XA_STRING, - 8, PropModeReplace, (const unsigned char*)title, len); + 8, PropModeReplace, (const unsigned char*)title, _len); } bool x11_input_ctx_new(bool true_full) diff --git a/gfx/drivers/vg.c b/gfx/drivers/vg.c index 30f0c90e9df..e63ec7cf557 100644 --- a/gfx/drivers/vg.c +++ b/gfx/drivers/vg.c @@ -318,10 +318,10 @@ static void vg_free(void *data) static void vg_calculate_quad(vg_t *vg, unsigned vp_width, unsigned vp_height) { - struct video_viewport_t vp; + video_viewport_t vp; settings_t *settings = config_get_ptr(); bool video_scale_integer = settings->bools.video_scale_integer; - float device_aspect = (float)width / height; + float device_aspect = (float)vp_width / vp_height; vp.x = 0; vp.y = 0; diff --git a/gfx/drivers_context/osmesa_ctx.c b/gfx/drivers_context/osmesa_ctx.c index 77101436f25..5d5b2ab6877 100644 --- a/gfx/drivers_context/osmesa_ctx.c +++ b/gfx/drivers_context/osmesa_ctx.c @@ -122,14 +122,14 @@ static void osmesa_fifo_accept(gfx_ctx_osmesa_data_t *osmesa) static void osmesa_fifo_write(gfx_ctx_osmesa_data_t *osmesa) { int i; - size_t len = osmesa->width * osmesa->pixsize; + size_t _len = osmesa->width * osmesa->pixsize; if (osmesa->client < 0) return; for (i = osmesa->height -1; i >= 0; --i) { - int res = send(osmesa->client, osmesa->screen + i * len, len, MSG_NOSIGNAL); + int res = send(osmesa->client, osmesa->screen + i * _len, _len, MSG_NOSIGNAL); if (res < 0) { diff --git a/gfx/gfx_widgets.c b/gfx/gfx_widgets.c index f6f9e06f4d0..b36f3abc093 100644 --- a/gfx/gfx_widgets.c +++ b/gfx/gfx_widgets.c @@ -16,7 +16,6 @@ */ #include -#include #ifdef HAVE_CONFIG_H #include "../config.h" @@ -43,39 +42,11 @@ #include "../tasks/task_content.h" #include "../tasks/tasks_internal.h" -#define BASE_FONT_SIZE 32.0f - +#define BASE_FONT_SIZE 32.0f #define MSG_QUEUE_FONT_SIZE 20.0f -/* Icons */ -static const char -*gfx_widgets_icons_names[MENU_WIDGETS_ICON_LAST] = { - "menu_pause.png", - "menu_frameskip.png", - "menu_rewind.png", - "resume.png", - - "menu_hourglass.png", - "menu_check.png", - "menu_add.png", - "menu_exit.png", - - "menu_info.png", - - "menu_achievements.png" -}; - static dispgfx_widget_t dispwidget_st = {0}; /* uint64_t alignment */ -static void INLINE gfx_widgets_font_free(gfx_widget_font_data_t *font_data) -{ - if (font_data->font) - font_driver_free(font_data->font); - - font_data->font = NULL; - font_data->usage_count = 0; -} - /* Widgets list */ const static gfx_widget_t* const widgets[] = { #ifdef HAVE_NETWORKING @@ -1123,12 +1094,13 @@ static int gfx_widgets_draw_indicator( } else { + char txt[NAME_MAX_LENGTH]; unsigned height = p_dispwidget->simple_widget_height; - const char *txt = msg_hash_to_str(msg); + size_t _len = strlcpy(txt, msg_hash_to_str(msg), sizeof(txt)); width = font_driver_get_message_width( p_dispwidget->gfx_widget_fonts.regular.font, - txt, strlen(txt), 1.0f) + txt, _len, 1.0f) + p_dispwidget->simple_widget_padding * 2; gfx_display_draw_quad( @@ -1513,19 +1485,6 @@ static void gfx_widgets_draw_regular_msg( } } -static void INLINE gfx_widgets_font_bind(gfx_widget_font_data_t *font_data) -{ - font_driver_bind_block(font_data->font, &font_data->raster_block); - font_data->raster_block.carr.coords.vertices = 0; - font_data->usage_count = 0; -} - -static void INLINE gfx_widgets_font_unbind(gfx_widget_font_data_t *font_data) -{ - font_driver_bind_block(font_data->font, NULL); -} - - void gfx_widgets_frame(void *data) { size_t i; @@ -1567,9 +1526,19 @@ void gfx_widgets_frame(void *data) video_st->data, video_width, video_height, true, false); /* Font setup */ - gfx_widgets_font_bind(&p_dispwidget->gfx_widget_fonts.regular); - gfx_widgets_font_bind(&p_dispwidget->gfx_widget_fonts.bold); - gfx_widgets_font_bind(&p_dispwidget->gfx_widget_fonts.msg_queue); + font_driver_bind_block(p_dispwidget->gfx_widget_fonts.regular.font, + &p_dispwidget->gfx_widget_fonts.regular.raster_block); + font_driver_bind_block(p_dispwidget->gfx_widget_fonts.bold.font, + &p_dispwidget->gfx_widget_fonts.bold.raster_block); + font_driver_bind_block(p_dispwidget->gfx_widget_fonts.msg_queue.font, + &p_dispwidget->gfx_widget_fonts.msg_queue.raster_block); + + p_dispwidget->gfx_widget_fonts.regular.raster_block.carr.coords.vertices = 0; + p_dispwidget->gfx_widget_fonts.regular.usage_count = 0; + p_dispwidget->gfx_widget_fonts.bold.raster_block.carr.coords.vertices = 0; + p_dispwidget->gfx_widget_fonts.bold.usage_count = 0; + p_dispwidget->gfx_widget_fonts.msg_queue.raster_block.carr.coords.vertices = 0; + p_dispwidget->gfx_widget_fonts.msg_queue.usage_count = 0; #ifdef HAVE_TRANSLATE /* AI Service overlay */ @@ -1668,7 +1637,7 @@ void gfx_widgets_frame(void *data) } #endif - /* Status Text (fps, framecount, memory, core status message) */ + /* Status Text (FPS, framecount, memory, core status message) */ if ( fps_show || framecount_show || memory_show @@ -1834,9 +1803,9 @@ void gfx_widgets_frame(void *data) &p_dispwidget->gfx_widget_fonts.msg_queue); /* Unbind fonts */ - gfx_widgets_font_unbind(&p_dispwidget->gfx_widget_fonts.regular); - gfx_widgets_font_unbind(&p_dispwidget->gfx_widget_fonts.bold); - gfx_widgets_font_unbind(&p_dispwidget->gfx_widget_fonts.msg_queue); + font_driver_bind_block(p_dispwidget->gfx_widget_fonts.regular.font, NULL); + font_driver_bind_block(p_dispwidget->gfx_widget_fonts.bold.font, NULL); + font_driver_bind_block(p_dispwidget->gfx_widget_fonts.msg_queue.font, NULL); if (video_st->current_video && video_st->current_video->set_viewport) video_st->current_video->set_viewport( @@ -1937,6 +1906,23 @@ static void gfx_widgets_context_reset( unsigned width, unsigned height, bool fullscreen, const char *dir_assets, char *font_path) { + /* Icons */ + static const char + *gfx_widgets_icons_names[MENU_WIDGETS_ICON_LAST] = { + "menu_pause.png", + "menu_frameskip.png", + "menu_rewind.png", + "resume.png", + + "menu_hourglass.png", + "menu_check.png", + "menu_add.png", + "menu_exit.png", + + "menu_info.png", + + "menu_achievements.png" + }; size_t i; /* Load textures */ @@ -2110,6 +2096,15 @@ bool gfx_widgets_init( return false; } +static void gfx_widgets_font_free(gfx_widget_font_data_t *font_data) +{ + if (font_data->font) + font_driver_free(font_data->font); + + font_data->font = NULL; + font_data->usage_count = 0; +} + static void gfx_widgets_context_destroy(dispgfx_widget_t *p_dispwidget) { size_t i; @@ -2134,7 +2129,6 @@ static void gfx_widgets_context_destroy(dispgfx_widget_t *p_dispwidget) gfx_widgets_font_free(&p_dispwidget->gfx_widget_fonts.msg_queue); } - void gfx_widgets_deinit(bool widgets_persisting) { dispgfx_widget_t *p_dispwidget = &dispwidget_st; diff --git a/gfx/video_shader_parse.c b/gfx/video_shader_parse.c index 84f84bc7509..043b3905a2e 100644 --- a/gfx/video_shader_parse.c +++ b/gfx/video_shader_parse.c @@ -83,26 +83,7 @@ enum wildcard_type struct wildcard_token { enum wildcard_type token_id; - char token_name[64]; - size_t token_size; -}; - -static struct wildcard_token wildcard_tokens[SHADER_NUM_WILDCARDS] = { - {RARCH_WILDCARD_CONTENT_DIR, "$CONTENT-DIR$", STRLEN_CONST("$CONTENT-DIR$")}, - {RARCH_WILDCARD_CORE, "$CORE$", STRLEN_CONST("$CORE$")}, - {RARCH_WILDCARD_GAME, "$GAME$", STRLEN_CONST("$GAME$")}, - {RARCH_WILDCARD_VIDEO_DRIVER, "$VID-DRV$", STRLEN_CONST("$VID-DRV$")}, - {RARCH_WILDCARD_VIDEO_DRIVER_PRESET_EXT, "$VID-DRV-PRESET-EXT$", STRLEN_CONST("$VID-DRV-PRESET-EXT$")}, - {RARCH_WILDCARD_VIDEO_DRIVER_SHADER_EXT, "$VID-DRV-SHADER-EXT$", STRLEN_CONST("$VID-DRV-SHADER-EXT$")}, - {RARCH_WILDCARD_CORE_REQUESTED_ROTATION, "$CORE-REQ-ROT$", STRLEN_CONST("$CORE-REQ-ROT$")}, - {RARCH_WILDCARD_VIDEO_ALLOW_CORE_ROTATION, "$VID-ALLOW-CORE-ROT$", STRLEN_CONST("$VID-ALLOW-CORE-ROT$")}, - {RARCH_WILDCARD_VIDEO_USER_ROTATION, "$VID-USER-ROT$", STRLEN_CONST("$VID-USER-ROT$")}, - {RARCH_WILDCARD_VIDEO_FINAL_ROTATION, "$VID-FINAL-ROT$", STRLEN_CONST("$VID-FINAL-ROT$")}, - {RARCH_WILDCARD_SCREEN_ORIENTATION, "$SCREEN-ORIENT$", STRLEN_CONST("$SCREEN-ORIENT$")}, - {RARCH_WILDCARD_VIEWPORT_ASPECT_ORIENTATION, "$VIEW-ASPECT-ORIENT$", STRLEN_CONST("$VIEW-ASPECT-ORIENT$")}, - {RARCH_WILDCARD_CORE_ASPECT_ORIENTATION, "$CORE-ASPECT-ORIENT$", STRLEN_CONST("$CORE-ASPECT-ORIENT$")}, - {RARCH_WILDCARD_PRESET_DIR, "$PRESET-DIR$", STRLEN_CONST("$PRESET-DIR$")}, - {RARCH_WILDCARD_PRESET, "$PRESET$", STRLEN_CONST("$PRESET$")}, + char token_name[24]; }; /* TODO/FIXME - global state - perhaps move outside this file */ @@ -110,7 +91,7 @@ static path_change_data_t *file_change_data = NULL; /** * fill_pathname_expanded_and_absolute: - * @param out_path + * @param s * String to write into. * @param in_refpath * Used to get the base path if in_path is relative. @@ -123,12 +104,10 @@ static path_change_data_t *file_change_data = NULL; * If the path was relative it will take this path and get the * absolute path using in_refpath as the path to extract a base path. * - * out_path is filled with the absolute path + * s is filled with the absolute path **/ -static void fill_pathname_expanded_and_absolute( - char *out_path, size_t out_size, - const char *in_refpath, - const char *in_path) +static void fill_pathname_expanded_and_absolute(char *s, size_t len, + const char *in_refpath, const char *in_path) { char expanded_path[PATH_MAX_LENGTH]; @@ -140,12 +119,12 @@ static void fill_pathname_expanded_and_absolute( /* Resolve the reference path relative to the config */ if (path_is_absolute(expanded_path)) - strlcpy(out_path, expanded_path, out_size); + strlcpy(s, expanded_path, len); else - fill_pathname_resolve_relative(out_path, in_refpath, - in_path, out_size); + fill_pathname_resolve_relative(s, in_refpath, + in_path, len); - pathname_conform_slashes_to_os(out_path); + pathname_conform_slashes_to_os(s); } /** @@ -230,16 +209,32 @@ static void fill_pathname_expanded_and_absolute( * after replacing the wildcards does not exist on disk, * the path returned will be uneffected. **/ -static void video_shader_replace_wildcards(char *inout_absolute_path, - const unsigned in_absolute_path_length, char *in_preset_path) +static void video_shader_replace_wildcards(char *s, size_t len, char *in_preset_path) { int i = 0; char replaced_path[PATH_MAX_LENGTH]; + static struct wildcard_token wildcard_tokens[SHADER_NUM_WILDCARDS] = { + {RARCH_WILDCARD_CONTENT_DIR, "$CONTENT-DIR$"}, + {RARCH_WILDCARD_CORE, "$CORE$"}, + {RARCH_WILDCARD_GAME, "$GAME$"}, + {RARCH_WILDCARD_VIDEO_DRIVER, "$VID-DRV$"}, + {RARCH_WILDCARD_VIDEO_DRIVER_PRESET_EXT, "$VID-DRV-PRESET-EXT$"}, + {RARCH_WILDCARD_VIDEO_DRIVER_SHADER_EXT, "$VID-DRV-SHADER-EXT$"}, + {RARCH_WILDCARD_CORE_REQUESTED_ROTATION, "$CORE-REQ-ROT$"}, + {RARCH_WILDCARD_VIDEO_ALLOW_CORE_ROTATION, "$VID-ALLOW-CORE-ROT$"}, + {RARCH_WILDCARD_VIDEO_USER_ROTATION, "$VID-USER-ROT$"}, + {RARCH_WILDCARD_VIDEO_FINAL_ROTATION, "$VID-FINAL-ROT$"}, + {RARCH_WILDCARD_SCREEN_ORIENTATION, "$SCREEN-ORIENT$"}, + {RARCH_WILDCARD_VIEWPORT_ASPECT_ORIENTATION, "$VIEW-ASPECT-ORIENT$"}, + {RARCH_WILDCARD_CORE_ASPECT_ORIENTATION, "$CORE-ASPECT-ORIENT$"}, + {RARCH_WILDCARD_PRESET_DIR, "$PRESET-DIR$"}, + {RARCH_WILDCARD_PRESET, "$PRESET$"}, + }; - if (!strstr(inout_absolute_path, RARCH_WILDCARD_DELIMITER)) + if (!strstr(s, RARCH_WILDCARD_DELIMITER)) return; - strlcpy(replaced_path, inout_absolute_path, sizeof(replaced_path)); + strlcpy(replaced_path, s, sizeof(replaced_path)); /* Step through the wildcards while we can still find the * delimiter in the replaced path @@ -249,7 +244,7 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, /* If the wildcard text is in the path then process it */ if (strstr(replaced_path, wildcard_tokens[i].token_name)) { - size_t replace_len = 0; + size_t _len = 0; char replace_text[PATH_MAX_LENGTH]; switch (wildcard_tokens[i].token_id) @@ -270,7 +265,7 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, path_remove_extension(content_dir_name); if (string_is_not_equal_fast(content_dir_name, "", sizeof(""))) - replace_len = strlcpy(replace_text, content_dir_name, sizeof(replace_text)); + _len = strlcpy(replace_text, content_dir_name, sizeof(replace_text)); else replace_text[0] = '\0'; } @@ -284,7 +279,7 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, if (path_basename) path_basename = path_basename_nocompression(path_basename); if (path_basename) - replace_len = strlcpy(replace_text, path_basename, sizeof(replace_text)); + _len = strlcpy(replace_text, path_basename, sizeof(replace_text)); else replace_text[0] = '\0'; } @@ -293,73 +288,51 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, strlcpy(replace_text, config_get_ptr()->arrays.video_driver, sizeof(replace_text)); break; case RARCH_WILDCARD_CORE_REQUESTED_ROTATION: - { - char rotation_replace_strings[4][64] = { - "CORE-REQ-ROT-0", - "CORE-REQ-ROT-90", - "CORE-REQ-ROT-180", - "CORE-REQ-ROT-270" - }; - replace_len = strlcpy(replace_text, - rotation_replace_strings[retroarch_get_core_requested_rotation()], - sizeof(replace_text)); - } + _len = strlcpy(replace_text, "CORE-REQ-ROT-", sizeof(replace_text)); + _len += snprintf( + replace_text + _len, + sizeof(replace_text) - _len, + "%d", + retroarch_get_core_requested_rotation() * 90); break; case RARCH_WILDCARD_VIDEO_ALLOW_CORE_ROTATION: - if (config_get_ptr()->bools.video_allow_rotate) - replace_len = strlcpy(replace_text, "VID-ALLOW-CORE-ROT-ON", + _len = strlcpy(replace_text, "VID-ALLOW-CORE-ROT-O", sizeof(replace_text)); + if (config_get_ptr()->bools.video_allow_rotate) + _len += strlcpy(replace_text + _len, "N", sizeof(replace_text) - _len); else - replace_len = strlcpy(replace_text, "VID-ALLOW-CORE-ROT-OFF", - sizeof(replace_text)); + _len += strlcpy(replace_text + _len, "FF", sizeof(replace_text) - _len); break; case RARCH_WILDCARD_VIDEO_USER_ROTATION: - { - char rotation_replace_strings[4][64] = { - "VID-USER-ROT-0", - "VID-USER-ROT-90", - "VID-USER-ROT-180", - "VID-USER-ROT-270" - }; - settings_t *settings = config_get_ptr(); - replace_len = strlcpy(replace_text, - rotation_replace_strings[settings->uints.video_rotation], - sizeof(replace_text)); - } + _len = strlcpy(replace_text, "VID-USER-ROT-", sizeof(replace_text)); + _len += snprintf( + replace_text + _len, + sizeof(replace_text) - _len, + "%d", + config_get_ptr()->uints.video_rotation * 90); break; case RARCH_WILDCARD_VIDEO_FINAL_ROTATION: - { - char rotation_replace_strings[4][64] = { - "VID-FINAL-ROT-0", - "VID-FINAL-ROT-90", - "VID-FINAL-ROT-180", - "VID-FINAL-ROT-270" - }; - replace_len = strlcpy(replace_text, - rotation_replace_strings[retroarch_get_rotation()], - sizeof(replace_text)); - } + _len = strlcpy(replace_text, "VID-FINAL-ROT-", sizeof(replace_text)); + _len += snprintf( + replace_text + _len, + sizeof(replace_text) - _len, + "%d", + retroarch_get_rotation() * 90); break; case RARCH_WILDCARD_SCREEN_ORIENTATION: - { - char rotation_replace_strings[4][64] = { - "SCREEN-ORIENT-0", - "SCREEN-ORIENT-90", - "SCREEN-ORIENT-180", - "SCREEN-ORIENT-270" - }; - replace_len = strlcpy(replace_text, - rotation_replace_strings[config_get_ptr()->uints.screen_orientation], - sizeof(replace_text)); - } + _len = strlcpy(replace_text, "SCREEN-ORIENT-", sizeof(replace_text)); + _len += snprintf( + replace_text + _len, + sizeof(replace_text) - _len, + "%d", + config_get_ptr()->uints.screen_orientation * 90); break; case RARCH_WILDCARD_CORE_ASPECT_ORIENTATION: { const int requested_rotation = retroarch_get_core_requested_rotation(); - replace_len = strlcpy(replace_text, + _len = strlcpy(replace_text, (video_driver_get_core_aspect() < 1 || requested_rotation == 1 || requested_rotation == 3) - ? "CORE-ASPECT-ORIENT-VERT" - : "CORE-ASPECT-ORIENT-HORZ", + ? "CORE-ASPECT-ORIENT-VERT" : "CORE-ASPECT-ORIENT-HORZ", sizeof(replace_text)); } break; @@ -368,7 +341,7 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, unsigned viewport_width = 0; unsigned viewport_height = 0; video_driver_get_size(&viewport_width, &viewport_height); - replace_len = strlcpy(replace_text, + _len = strlcpy(replace_text, ((float)viewport_width / viewport_height < 1) ? "VIEW-ASPECT-ORIENT-VERT" : "VIEW-ASPECT-ORIENT-HORZ", @@ -378,13 +351,17 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, case RARCH_WILDCARD_PRESET_DIR: { char preset_dir_name[DIR_MAX_LENGTH]; - fill_pathname_parent_dir_name(preset_dir_name, in_preset_path, sizeof(preset_dir_name)); + fill_pathname_parent_dir_name(preset_dir_name, + in_preset_path, sizeof(preset_dir_name)); if (string_is_not_equal_fast(preset_dir_name, "", sizeof(""))) - strlcpy(preset_dir_name, path_basename_nocompression(preset_dir_name), sizeof(preset_dir_name)); + strlcpy(preset_dir_name, + path_basename_nocompression(preset_dir_name), + sizeof(preset_dir_name)); if (string_is_not_equal_fast(preset_dir_name, "", sizeof(""))) path_remove_extension(preset_dir_name); if (string_is_not_equal_fast(preset_dir_name, "", sizeof(""))) - replace_len = strlcpy(replace_text, preset_dir_name, sizeof(replace_text)); + _len = strlcpy(replace_text, + preset_dir_name, sizeof(replace_text)); else replace_text[0] = '\0'; } @@ -392,11 +369,14 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, case RARCH_WILDCARD_PRESET: { char preset_name[NAME_MAX_LENGTH]; - strlcpy(preset_name, path_basename_nocompression(in_preset_path), sizeof(preset_name)); + strlcpy(preset_name, + path_basename_nocompression(in_preset_path), + sizeof(preset_name)); if (string_is_not_equal_fast(preset_name, "", sizeof(""))) path_remove_extension(preset_name); if (string_is_not_equal_fast(preset_name, "", sizeof(""))) - replace_len = strlcpy(replace_text, preset_name, sizeof(replace_text)); + _len = strlcpy(replace_text, + preset_name, sizeof(replace_text)); else replace_text[0] = '\0'; } @@ -408,11 +388,11 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, video_context_driver_get_flags(&flags); if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_SHADERS_CG)) - replace_len = strlcpy(replace_text, "cg", sizeof(replace_text)); + _len = strlcpy(replace_text, "cg", sizeof(replace_text)); else if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_SHADERS_GLSL)) - replace_len = strlcpy(replace_text, "glsl", sizeof(replace_text)); + _len = strlcpy(replace_text, "glsl", sizeof(replace_text)); else if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_SHADERS_SLANG)) - replace_len = strlcpy(replace_text, "slang", sizeof(replace_text)); + _len = strlcpy(replace_text, "slang", sizeof(replace_text)); else replace_text[0] = '\0'; } @@ -424,11 +404,11 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, video_context_driver_get_flags(&flags); if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_SHADERS_CG)) - replace_len = strlcpy(replace_text, "cgp", sizeof(replace_text)); + _len = strlcpy(replace_text, "cgp", sizeof(replace_text)); else if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_SHADERS_GLSL)) - replace_len = strlcpy(replace_text, "glslp", sizeof(replace_text)); + _len = strlcpy(replace_text, "glslp", sizeof(replace_text)); else if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_SHADERS_SLANG)) - replace_len = strlcpy(replace_text, "slangp", sizeof(replace_text)); + _len = strlcpy(replace_text, "slangp", sizeof(replace_text)); else replace_text[0] = '\0'; } @@ -441,19 +421,17 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, char *replace_output = string_replace_substring(replaced_path, sizeof(replaced_path), wildcard_tokens[i].token_name, - wildcard_tokens[i].token_size, + STRLEN_CONST(wildcard_tokens[i].token_name), replace_text, - replace_len); - + _len); strlcpy(replaced_path, replace_output, sizeof(replaced_path)); - free(replace_output); } } } if (path_is_valid(replaced_path)) - strlcpy(inout_absolute_path, replaced_path, in_absolute_path_length); + strlcpy(s, replaced_path, len); else { /* If a file does not exist at the location of the replaced path @@ -461,7 +439,7 @@ static void video_shader_replace_wildcards(char *inout_absolute_path, RARCH_DBG("\n[Shaders]: Filepath after wildcard replacement can't be found:\n"); RARCH_DBG(" \"%s\" \n", replaced_path); RARCH_DBG(" Falling back to original Filepath\n"); - RARCH_DBG(" \"%s\" \n\n", inout_absolute_path); + RARCH_DBG(" \"%s\" \n\n", s); } } @@ -496,6 +474,7 @@ static void video_shader_gather_reference_path_list( /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(reference_preset_path, PATH_MAX_LENGTH, conf->path, ref_tmp->path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(reference_preset_path, PATH_MAX_LENGTH, conf->path); video_shader_gather_reference_path_list(in_path_linked_list, reference_preset_path, reference_depth + 1); @@ -612,6 +591,7 @@ static bool video_shader_parse_pass(config_file_t *conf, /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(pass->source.path, PATH_MAX_LENGTH, conf->path, tmp_path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(pass->source.path, PATH_MAX_LENGTH, conf->path); @@ -846,6 +826,7 @@ static bool video_shader_parse_textures(config_file_t *conf, /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(shader->lut[shader->luts].path, PATH_MAX_LENGTH, conf->path, texture_path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(shader->lut[shader->luts].path, PATH_MAX_LENGTH, conf->path); strlcpy(shader->lut[shader->luts].id, id, @@ -1189,6 +1170,18 @@ static bool video_shader_write_root_preset(const struct video_shader *shader, config_set_path(conf, key, tmp_rel); + _len = strlcpy(key, "alias", sizeof(key)); + strlcpy(key + _len, formatted_num, sizeof(key) - _len); + config_set_string(conf, key, pass->alias); + + _len = strlcpy(key, "wrap_mode", sizeof(key)); + strlcpy(key + _len, formatted_num, sizeof(key) - _len); + config_set_string(conf, key, video_shader_wrap_mode_to_str(pass->wrap)); + + _len = strlcpy(key, "mipmap_input", sizeof(key)); + strlcpy(key + _len, formatted_num, sizeof(key) - _len); + config_set_string(conf, key, pass->mipmap ? "true" : "false"); + if (pass->filter != RARCH_FILTER_UNSPEC) { _len = strlcpy(key, "filter_linear", sizeof(key)); @@ -1199,10 +1192,6 @@ static bool video_shader_write_root_preset(const struct video_shader *shader, : "false"); } - _len = strlcpy(key, "wrap_mode", sizeof(key)); - strlcpy(key + _len, formatted_num, sizeof(key) - _len); - config_set_string(conf, key, video_shader_wrap_mode_to_str(pass->wrap)); - if (pass->frame_count_mod) { _len = strlcpy(key, "frame_count_mod", sizeof(key)); @@ -1210,14 +1199,6 @@ static bool video_shader_write_root_preset(const struct video_shader *shader, config_set_int(conf, key, pass->frame_count_mod); } - _len = strlcpy(key, "mipmap_input", sizeof(key)); - strlcpy(key + _len, formatted_num, sizeof(key) - _len); - config_set_string(conf, key, pass->mipmap ? "true" : "false"); - - _len = strlcpy(key, "alias", sizeof(key)); - strlcpy(key + _len, formatted_num, sizeof(key) - _len); - config_set_string(conf, key, pass->alias); - video_shader_write_fbo(conf, formatted_num, &pass->fbo); } @@ -1245,16 +1226,24 @@ static bool video_shader_write_root_preset(const struct video_shader *shader, /* Step through the textures in the shader */ for (i = 0; i < shader->luts; i++) { + size_t _len; + char k[128]; fill_pathname_abbreviated_or_relative(tmp_rel, tmp_base, shader->lut[i].path, PATH_MAX_LENGTH); pathname_make_slashes_portable(tmp_rel); config_set_string(conf, shader->lut[i].id, tmp_rel); + _len = strlcpy(k, shader->lut[i].id, sizeof(k)); + + /* Mipmap On or Off */ + strlcpy(k + _len, "_mipmap", sizeof(k) - _len); + config_set_string(conf, k, shader->lut[i].mipmap + ? "true" + : "false"); + /* Linear filter ON or OFF */ if (shader->lut[i].filter != RARCH_FILTER_UNSPEC) { - char k[128]; - size_t _len = strlcpy(k, shader->lut[i].id, sizeof(k)); strlcpy(k + _len, "_linear", sizeof(k) - _len); config_set_string(conf, k, (shader->lut[i].filter == RARCH_FILTER_LINEAR) @@ -1263,23 +1252,9 @@ static bool video_shader_write_root_preset(const struct video_shader *shader, } /* Wrap Mode */ - { - char k[128]; - size_t _len = strlcpy(k, shader->lut[i].id, sizeof(k)); - strlcpy(k + _len, "_wrap_mode", sizeof(k) - _len); - config_set_string(conf, k, - video_shader_wrap_mode_to_str(shader->lut[i].wrap)); - } - - /* Mipmap On or Off */ - { - char k[128]; - size_t _len = strlcpy(k, shader->lut[i].id, sizeof(k)); - strlcpy(k + _len, "_mipmap", sizeof(k) - _len); - config_set_string(conf, k, shader->lut[i].mipmap - ? "true" - : "false"); - } + strlcpy(k + _len, "_wrap_mode", sizeof(k) - _len); + config_set_string(conf, k, + video_shader_wrap_mode_to_str(shader->lut[i].wrap)); } } @@ -1323,6 +1298,7 @@ static config_file_t *video_shader_get_root_preset_config(const char *path) /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(nested_reference_path, PATH_MAX_LENGTH, conf->path, conf->references->path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(nested_reference_path, PATH_MAX_LENGTH, conf->path); /* Create a new config from the referenced path */ @@ -1409,6 +1385,7 @@ static bool video_shader_check_reference_chain_for_save( /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(nested_ref_path, PATH_MAX_LENGTH, conf->path, conf->references->path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(nested_ref_path, PATH_MAX_LENGTH, conf->path); /* If one of the reference paths is the same as the file we want to save then this reference chain would be @@ -1441,7 +1418,7 @@ static bool video_shader_check_reference_chain_for_save( break; } - ref_depth += 1; + ref_depth++; } free(path_to_save_conformed); @@ -1550,6 +1527,7 @@ static bool video_shader_write_referenced_preset( /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(abs_tmp_ref_path, PATH_MAX_LENGTH, ref_conf->path, ref_conf->references->path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(abs_tmp_ref_path, PATH_MAX_LENGTH, ref_conf->path); pathname_conform_slashes_to_os(abs_tmp_ref_path); @@ -1592,6 +1570,7 @@ static bool video_shader_write_referenced_preset( /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(path_to_ref, PATH_MAX_LENGTH, ref_conf->path, ref_conf->references->path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(path_to_ref, PATH_MAX_LENGTH, ref_conf->path); @@ -1615,6 +1594,7 @@ static bool video_shader_write_referenced_preset( /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(path_to_ref, PATH_MAX_LENGTH, ref_conf->path, ref_conf->references->path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(path_to_ref, PATH_MAX_LENGTH, ref_conf->path); } @@ -2089,6 +2069,7 @@ static bool video_shader_override_values(config_file_t *override_conf, /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(override_tex_path, PATH_MAX_LENGTH, override_conf->path, tex_path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(override_tex_path, PATH_MAX_LENGTH, override_conf->path); strlcpy(shader->lut[i].path, override_tex_path, sizeof(shader->lut[i].path)); @@ -2306,6 +2287,7 @@ bool video_shader_load_preset_into_shader(const char *path, /* Get the absolute path and replace wildcards in the path */ fill_pathname_expanded_and_absolute(path_to_ref, PATH_MAX_LENGTH, conf->path, path_list_tmp->path); + /* TODO/FIXME - dehardcode PATH_MAX_LENGTH */ video_shader_replace_wildcards(path_to_ref, PATH_MAX_LENGTH, conf->path); if ((tmp_conf = video_shader_get_root_preset_config(path_to_ref))) diff --git a/gfx/widgets/gfx_widget_achievement_popup.c b/gfx/widgets/gfx_widget_achievement_popup.c index ba583a8ab0b..0de8cbe29c4 100644 --- a/gfx/widgets/gfx_widget_achievement_popup.c +++ b/gfx/widgets/gfx_widget_achievement_popup.c @@ -155,18 +155,14 @@ static void gfx_widget_achievement_popup_frame(void* data, void* userdata) gfx_display_ctx_driver_t* dispctx = p_disp->dispctx; dispgfx_widget_t* p_dispwidget = (dispgfx_widget_t*)userdata; - unsigned text_unfold_offset = 0; - bool is_folding = false; - unsigned screen_padding_x = 0; - unsigned screen_padding_y = 0; - int screen_pos_x = 0; - int screen_pos_y = 0; - + unsigned screen_padding_x = 0; + unsigned screen_padding_y = 0; + int screen_pos_x = 0; + int screen_pos_y = 0; /* Slight additional offset for title/subtitle while unfolding */ - text_unfold_offset = ((1.0f - state->unfold) * state->width) * 0.5; - + unsigned text_unfold_offset = ((1.0f - state->unfold) * state->width) * 0.5; /* Whether gfx scissoring should occur, partially hiding popup */ - is_folding = fabs(state->unfold - 1.0f) > 0.01; + bool is_folding = fabs(state->unfold - 1.0f) > 0.01; /* Calculate padding in screen space */ if (state->padding_auto) @@ -200,11 +196,11 @@ static void gfx_widget_achievement_popup_frame(void* data, void* userdata) switch (state->anchor_v) { case ANCHOR_TOP: - screen_pos_y = -(state->height); + screen_pos_y = -(state->height); screen_pos_y += (screen_padding_y + state->height) * state->slide_v; break; case ANCHOR_BOTTOM: - screen_pos_y = video_height; + screen_pos_y = video_height; screen_pos_y -= (screen_padding_y + state->height) * state->slide_v; break; } @@ -217,7 +213,7 @@ static void gfx_widget_achievement_popup_frame(void* data, void* userdata) state->queue[state->queue_read_index].badge_name) { const retro_time_t next_try = state->queue[state->queue_read_index].badge_retry; - const retro_time_t now = cpu_features_get_time_usec(); + const retro_time_t now = cpu_features_get_time_usec(); if (next_try == 0 || now > next_try) { /* try again in 250ms */ diff --git a/input/common/linux_common.c b/input/common/linux_common.c index c3705bd5da7..32f7c45dded 100644 --- a/input/common/linux_common.c +++ b/input/common/linux_common.c @@ -201,6 +201,10 @@ linux_illuminance_sensor_t *linux_open_illuminance_sensor(unsigned rate) if (!sensor) goto error; + device = retro_opendir(IIO_DEVICES_DIR); + if (!device) + goto error; + sensor->millilux = 0; sensor->poll_rate = rate ? rate : DEFAULT_POLL_RATE; sensor->thread = NULL; /* We'll spawn a thread later, once we find a sensor */ @@ -243,7 +247,7 @@ linux_illuminance_sensor_t *linux_open_illuminance_sensor(unsigned rate) } error: - RARCH_ERR("Failed to find an illuminance sensor\n"); + RARCH_ERR("Failed to find an illuminance sensor in " IIO_DEVICES_DIR "\n"); retro_closedir(device); free(sensor); diff --git a/input/common/wayland_common.c b/input/common/wayland_common.c index 9f5d2737358..f17d2fe2ca8 100644 --- a/input/common/wayland_common.c +++ b/input/common/wayland_common.c @@ -996,8 +996,7 @@ static void wl_data_device_handle_drop(void *data, FILE *stream; int pipefd[2]; void *buffer; - size_t length; - size_t len = 0; + size_t __len, _len = 0; ssize_t read = 0; char *line = NULL; char file_list[512][512] = { 0 }; @@ -1012,7 +1011,7 @@ static void wl_data_device_handle_drop(void *data, pipe(pipefd); - buffer = wayland_data_offer_receive(wl->input.dpy, offer_data->offer, &length, FILE_MIME, false); + buffer = wayland_data_offer_receive(wl->input.dpy, offer_data->offer, &__len, FILE_MIME, false); close(pipefd[1]); close(pipefd[0]); @@ -1023,14 +1022,14 @@ static void wl_data_device_handle_drop(void *data, wl_data_offer_destroy(offer_data->offer); free(offer_data); - if (!(stream = fmemopen(buffer, length, "r"))) + if (!(stream = fmemopen(buffer, __len, "r"))) { RARCH_WARN("[Wayland]: Failed to open DnD buffer\n"); return; } RARCH_WARN("[Wayland]: Files opp:\n"); - while ((read = getline(&line, &len, stream)) != -1) + while ((read = getline(&line, &_len, stream)) != -1) { line[strcspn(line, "\r\n")] = 0; RARCH_DBG("[Wayland]: > \"%s\"\n", line); diff --git a/input/drivers/test_input.c b/input/drivers/test_input.c index 7a0ae52b44b..c20a2029190 100644 --- a/input/drivers/test_input.c +++ b/input/drivers/test_input.c @@ -125,7 +125,7 @@ static bool KTifJSONObjectEndHandler(void* context) return true; } -static bool KTifJSONObjectMemberHandler(void* context, const char *pValue, size_t length) +static bool KTifJSONObjectMemberHandler(void* context, const char *pValue, size_t len) { KTifJSONContext *pCtx = (KTifJSONContext*)context; @@ -133,7 +133,7 @@ static bool KTifJSONObjectMemberHandler(void* context, const char *pValue, size_ if (pCtx->current_entry_str_val) return false; - if (length) + if (len) { if (string_is_equal(pValue, "frame")) pCtx->current_entry_uint_val = &pCtx->frame; @@ -149,11 +149,11 @@ static bool KTifJSONObjectMemberHandler(void* context, const char *pValue, size_ return true; } -static bool KTifJSONNumberHandler(void* context, const char *pValue, size_t length) +static bool KTifJSONNumberHandler(void* context, const char *pValue, size_t len) { KTifJSONContext *pCtx = (KTifJSONContext*)context; - if (pCtx->current_entry_uint_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_uint_val && len && !string_is_empty(pValue)) *pCtx->current_entry_uint_val = string_to_unsigned(pValue); /* ignore unknown members */ @@ -162,11 +162,11 @@ static bool KTifJSONNumberHandler(void* context, const char *pValue, size_t leng return true; } -static bool KTifJSONStringHandler(void* context, const char *pValue, size_t length) +static bool KTifJSONStringHandler(void* context, const char *pValue, size_t len) { KTifJSONContext *pCtx = (KTifJSONContext*)context; - if (pCtx->current_entry_str_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_str_val && len && !string_is_empty(pValue)) { if (*pCtx->current_entry_str_val) free(*pCtx->current_entry_str_val); diff --git a/input/drivers/winraw_input.c b/input/drivers/winraw_input.c index e04b9d80b28..42e0fefa8ae 100644 --- a/input/drivers/winraw_input.c +++ b/input/drivers/winraw_input.c @@ -128,14 +128,14 @@ static void winraw_log_mice_info(winraw_mouse_t *mice, unsigned mouse_cnt) char name[256]; UINT name_size = sizeof(name); - name[0] = '\0'; + name[0] = '\0'; for (i = 0; i < mouse_cnt; ++i) { UINT r = GetRawInputDeviceInfoA(mice[i].hnd, RIDI_DEVICENAME, name, &name_size); if (r == (UINT)-1 || r == 0) - name[0] = '\0'; + name[0] = '\0'; if (name[0]) { @@ -146,7 +146,7 @@ static void winraw_log_mice_info(winraw_mouse_t *mice, unsigned mouse_cnt) if (hhid != INVALID_HANDLE_VALUE) { wchar_t prod_buf[128]; - prod_buf[0] = '\0'; + prod_buf[0] = '\0'; if (HidD_GetProductString(hhid, prod_buf, sizeof(prod_buf))) wcstombs(name, prod_buf, sizeof(name)); } @@ -158,7 +158,7 @@ static void winraw_log_mice_info(winraw_mouse_t *mice, unsigned mouse_cnt) input_config_set_mouse_display_name(i, name); - RARCH_LOG("[WinRaw]: Mouse #%u: \"%s\".\n", i, name); + RARCH_LOG("[WinRaw]: Mouse #%u: \"%s\".\n", i + 1, name); } } @@ -203,19 +203,23 @@ static bool winraw_init_devices(winraw_mouse_t **mice, unsigned *mouse_cnt) } } + *mouse_cnt = mouse_cnt_r; + /* count is already checked, so this is safe */ for (i = mouse_cnt_r = 0; i < dev_cnt; ++i) { if (devs[i].dwType == RIM_TYPEMOUSE) - mice_r[mouse_cnt_r++].hnd = devs[i].hDevice; + { + mouse_cnt_r++; + mice_r[*mouse_cnt - mouse_cnt_r].hnd = devs[i].hDevice; + } } + *mice = mice_r; + winraw_log_mice_info(mice_r, mouse_cnt_r); free(devs); - *mice = mice_r; - *mouse_cnt = mouse_cnt_r; - return true; error: diff --git a/input/drivers_hid/wiiu_hid.c b/input/drivers_hid/wiiu_hid.c index 285bcb9e0a4..82186324417 100644 --- a/input/drivers_hid/wiiu_hid.c +++ b/input/drivers_hid/wiiu_hid.c @@ -170,11 +170,11 @@ static int16_t wiiu_hid_joypad_state( const uint32_t joyaxis = (binds[i].joyaxis != AXIS_NONE) ? binds[i].joyaxis : joypad_info->auto_binds[i].joyaxis; if ( - (uint16_t)joykey != NO_BTN + (uint16_t)joykey != NO_BTN && pad->iface->button && pad->iface->button(pad->connection, (uint16_t)joykey)) ret |= ( 1 << i); else if (joyaxis != AXIS_NONE && pad->iface->get_axis && - ((float)abs(pad->iface->get_axis(pad->connection, joyaxis)) + ((float)abs(pad->iface->get_axis(pad->connection, joyaxis)) / 0x8000) > joypad_info->axis_threshold) ret |= (1 << i); } @@ -194,12 +194,11 @@ static bool wiiu_hid_joypad_rumble(void *data, unsigned slot, return false; } -static void *wiiu_hid_alloc_zeroed(size_t alignment, size_t size) +static void *wiiu_hid_alloc_zeroed(size_t alignment, size_t len) { - void *result = memalign(alignment, size); + void *result = memalign(alignment, len); if (result) - memset(result, 0, size); - + memset(result, 0, len); return result; } @@ -663,7 +662,7 @@ static uint8_t wiiu_hid_try_init_driver(wiiu_adapter_t *adapter) adapter->device_name); adapter->pad_driver = entry->iface; - + if (entry->iface->multi_pad) return wiiu_hid_try_init_driver_multi(adapter, entry); @@ -749,7 +748,7 @@ static void wiiu_hid_poll(void *data) synchronized_process_adapters(hid); } -static void wiiu_hid_send_control(void *data, uint8_t *buf, size_t size) +static void wiiu_hid_send_control(void *data, uint8_t *buf, size_t len) { wiiu_adapter_t *adapter = (wiiu_adapter_t *)data; int32_t result; @@ -761,7 +760,7 @@ static void wiiu_hid_send_control(void *data, uint8_t *buf, size_t size) } memset(adapter->tx_buffer, 0, adapter->tx_size); - memcpy(adapter->tx_buffer, buf, size); + memcpy(adapter->tx_buffer, buf, len); /* From testing, HIDWrite returns an error that looks like it's two * int16_t's bitmasked together. For example, one error I saw when trying @@ -848,24 +847,19 @@ static int32_t wiiu_hid_set_protocol(void *data, uint8_t protocol) NULL, NULL); } -static int32_t wiiu_hid_read(void *data, void *buffer, size_t size) +static int32_t wiiu_hid_read(void *data, void *buffer, size_t len) { wiiu_adapter_t *adapter = (wiiu_adapter_t *)data; int32_t result; - if (!adapter) return -1; - - if (size > adapter->rx_size) + if (len > adapter->rx_size) return -1; - - if ((result = HIDRead(adapter->handle, buffer, size, NULL, NULL)) < 0) + if ((result = HIDRead(adapter->handle, buffer, len, NULL, NULL)) < 0) wiiu_hid_report_hid_error("read failed", adapter, result); - return result; } - static void wiiu_hid_init_cachealigned_buffer(int32_t min_size, uint8_t **out_buf_ptr, int32_t *actual_size) { *actual_size = (min_size + 0x3f) & ~0x3f; diff --git a/input/drivers_joypad/test_joypad.c b/input/drivers_joypad/test_joypad.c index 28b475fa81c..d5a72b8822c 100644 --- a/input/drivers_joypad/test_joypad.c +++ b/input/drivers_joypad/test_joypad.c @@ -125,7 +125,7 @@ static bool JTifJSONObjectEndHandler(void* context) return true; } -static bool JTifJSONObjectMemberHandler(void* context, const char *pValue, size_t length) +static bool JTifJSONObjectMemberHandler(void* context, const char *pValue, size_t len) { JTifJSONContext *pCtx = (JTifJSONContext*)context; @@ -133,7 +133,7 @@ static bool JTifJSONObjectMemberHandler(void* context, const char *pValue, size_ if (pCtx->current_entry_str_val) return false; - if (length) + if (len) { if (string_is_equal(pValue, "frame")) pCtx->current_entry_uint_val = &pCtx->frame; @@ -149,11 +149,11 @@ static bool JTifJSONObjectMemberHandler(void* context, const char *pValue, size_ return true; } -static bool JTifJSONNumberHandler(void* context, const char *pValue, size_t length) +static bool JTifJSONNumberHandler(void* context, const char *pValue, size_t len) { JTifJSONContext *pCtx = (JTifJSONContext*)context; - if (pCtx->current_entry_uint_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_uint_val && len && !string_is_empty(pValue)) *pCtx->current_entry_uint_val = string_to_unsigned(pValue); /* ignore unknown members */ @@ -162,11 +162,11 @@ static bool JTifJSONNumberHandler(void* context, const char *pValue, size_t leng return true; } -static bool JTifJSONStringHandler(void* context, const char *pValue, size_t length) +static bool JTifJSONStringHandler(void* context, const char *pValue, size_t len) { JTifJSONContext *pCtx = (JTifJSONContext*)context; - if (pCtx->current_entry_str_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_str_val && len && !string_is_empty(pValue)) { if (*pCtx->current_entry_str_val) free(*pCtx->current_entry_str_val); diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index d06bb00b8e4..4e7fd4049c4 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -520,17 +520,18 @@ static void udev_joypad_poll(void) for (p = 0; p < MAX_USERS; p++) { - int i, len; + int i; + ssize_t _len; struct input_event events[32]; struct udev_joypad *pad = &udev_pads[p]; if (pad->fd < 0) continue; - while ((len = read(pad->fd, events, sizeof(events))) > 0) + while ((_len = read(pad->fd, events, sizeof(events))) > 0) { - len /= sizeof(*events); - for (i = 0; i < len; i++) + _len /= sizeof(*events); + for (i = 0; i < _len; i++) { uint16_t type = events[i].type; uint16_t code = events[i].code; diff --git a/input/include/hid_driver.h b/input/include/hid_driver.h index b6e63dcfc14..8d7143c4d4f 100644 --- a/input/include/hid_driver.h +++ b/input/include/hid_driver.h @@ -50,8 +50,8 @@ struct hid_driver const char *(*name)(void *handle, unsigned pad); const char *ident; void (*send_control)(void *handle, uint8_t *buf, size_t size); - int32_t (*set_report)(void *handle, uint8_t report_type, uint8_t report_id, uint8_t *data, size_t length); - int32_t (*get_report)(void *handle, uint8_t report_type, uint8_t report_id, uint8_t *data, size_t length); + int32_t (*set_report)(void *handle, uint8_t report_type, uint8_t report_id, uint8_t *data, size_t len); + int32_t (*get_report)(void *handle, uint8_t report_type, uint8_t report_id, uint8_t *data, size_t len); int32_t (*set_idle)(void *handle, uint8_t amount); int32_t (*set_protocol)(void *handle, uint8_t protocol); int32_t (*read)(void *handle, void *buf, size_t size); diff --git a/input/input_driver.c b/input/input_driver.c index e47a935ff50..f4a16934b49 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -4088,7 +4088,6 @@ static bool input_keyboard_line_event( bool ret = false; const char *word = NULL; char c = (character >= 128) ? '?' : character; - #ifdef HAVE_LANGEXTRA static uint32_t composition = 0; /* reset composition, when edit box is opened. */ @@ -4099,12 +4098,12 @@ static bool input_keyboard_line_event( composition = 0; if (IS_COMPOSITION(character) || IS_END_COMPOSITION(character)) { - size_t len = strlen((char*)&composition); - if (composition && state->buffer && state->size >= len && state->ptr >= len) + size_t _len = strlen((char*)&composition); + if (composition && state->buffer && state->size >= _len && state->ptr >= _len) { - memmove(state->buffer + state->ptr-len, state->buffer + state->ptr, len + 1); - state->ptr -= len; - state->size -= len; + memmove(state->buffer + state->ptr - _len, state->buffer + state->ptr, _len + 1); + state->ptr -= _len; + state->size -= _len; } if (IS_COMPOSITION_KR(character) && composition) { @@ -4123,7 +4122,7 @@ static bool input_keyboard_line_event( composition = character & 0xffffff; character &= 0xffffff; } - if (len && composition == 0) + if (_len && composition == 0) word = state->buffer; if (character) input_keyboard_line_append(state, (char*)&character, strlen((char*)&character)); @@ -4134,7 +4133,6 @@ static bool input_keyboard_line_event( /* Treat extended chars as ? as we cannot support * printable characters for unicode stuff. */ - if (c == '\r' || c == '\n') { state->cb(state->userdata, state->buffer); diff --git a/intl/msg_hash_ar.h b/intl/msg_hash_ar.h index 0cf9004c90f..ea253ea31fc 100644 --- a/intl/msg_hash_ar.h +++ b/intl/msg_hash_ar.h @@ -8023,10 +8023,6 @@ MSG_HASH( MSG_AUTODETECT, "الكشف التلقائي" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "التحميل التلقائي للحالة من" - ) MSG_HASH( MSG_CAPABILITIES, "القدرات" @@ -8883,6 +8879,10 @@ MSG_HASH( MSG_VIEWPORT_SIZE_CALCULATION_FAILED, "فشل حساب حجم العرض! سوف يستمر في استخدام البيانات الخام. ربما لن يعمل هذا بشكل صحيح..." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "التحميل التلقائي للحالة من" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "فشل التحميل التلقائي لحالة الحفظ من \"%s\"." @@ -9653,10 +9653,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "تمكين الخط" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "عرض خط القائمة السفلية. تمكين عرض أوصاف الأزرار في أسفل الشاشة. يستبعد هذا تاريخ الحفظ." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "لون الخط أحمر" diff --git a/intl/msg_hash_be.h b/intl/msg_hash_be.h index 385a270e988..252b27608be 100644 --- a/intl/msg_hash_be.h +++ b/intl/msg_hash_be.h @@ -914,6 +914,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Падтрымка Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Падтрымка SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Падтрымка libusb" @@ -1370,7 +1374,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_REMAP, - "Файл пераназначэння кіравання." + "Файл прызначэнняў кіравання." ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_CHEAT, @@ -1966,10 +1970,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Устаўка чорнага кадра" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Устаўляе чорны кадр(ы) паміж кадрамі. Можа істотна паменшыць размыццё шляхам эмуляцыі разгорткі ЭПТ, але зніжае яркасць. Не ўключайце адначасова з інтэрвалам абнаўлення > 1, падкадрамі, затрымкай кадра ці сінхранізацыяй з кадравай частатой кантэнту." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Устаўляе паміж кадрамі кадр(ы) чорнага колеру для падвышэння выразнасці руху. Выкарыстоўвайце значэнне толькі для бягучай частаты абнаўлення. Не дастасавальна з частатой абнаўлення не кратнай 60 Гц, напрыклад 144 Гц, 165 Гц і г. д. Не ўключайце адначасова з інтэрвалам абнаўлен[...]" @@ -2050,10 +2050,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Падкадры шэйдэра" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Устаўляе паміж кадрамі дадатковы кадр(ы) шэйдара. Дазваляе шэйдарам выводзіць эфекты з кадравай частатой вышэй зыходнай частаты кантэнту. Значэнне павінна адпавядаць бягучай частаце экрана. Не ўключайце адначасова з інтэрвалам абнаўлення > 1, устаўкай чорнага кадра, затр[...]" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Устаўляе паміж кадрамі дадатковы кадр(ы) шэйдара для ўсіх шэйдарных эфектаў з частатой вышэй частаты кантэнту. Выкарыстоўвайце значэнне толькі для бягучай частаты абнаўлення. Не дастасавальна з частатой абнаўлення не кратнай 60 Гц, напрыклад 144 Гц, 165 Гц і г. д. Не ўключайце [...]" @@ -2126,10 +2122,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Сімуляцыя плывучага радка разгорткі" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Імітуе просты плавальны радок разгорткі па-над некалькімі падкадрамі шляхам дзялення экрана па вертыкалі і адмалёўкі кожнай яго часткі зыходзячы з колькасці падкадраў." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Імітуе просты плавальны радок разгорткі па-над некалькімі падкадрамі шляхам дзялення экрана па вертыкалі і адмалёўкі кожнай яго часткі зыходзячы з колькасці падкадраў ад верха да нізу экрана." @@ -2304,7 +2296,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_ROTATION, - "Прымушае пэўны паварот выявы. Дадаецца да паваротаў, што задае ядро." + "Прымушае ўжыць пэўны паварот выявы. Дадаецца да паваротаў, што задае ядро." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SCREEN_ORIENTATION, @@ -2312,7 +2304,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SCREEN_ORIENTATION, - "Прымушае пэўную арыентацыю экрана паводле аперацыйнай сістэмы." + "Прымушае ўжыць пэўную арыентацыю экрана паводле аперацыйнай сістэмы." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_GPU_INDEX, @@ -2328,7 +2320,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_WINDOW_OFFSET_X, - "Прымушае пэўнае зрушэнне выявы па гарызанталі. Ужываецца глабальна." + "Прымушае ўжыць пэўнае зрушэнне выявы па гарызанталі. Ужываецца глабальна." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_OFFSET_Y, @@ -2336,7 +2328,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_WINDOW_OFFSET_Y, - "Прымушае пэўнае зрушэнне выявы па вертыкалі. Ужываецца глабальна." + "Прымушае ўжыць пэўнае зрушэнне выявы па вертыкалі. Ужываецца глабальна." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE, @@ -2563,7 +2555,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Змяняць маштаб толькі па вышыні або як па вышыні, так і па шырыні. Паўкрокі прымяняюцца да крыніц з высокай раздзяляльнасцю." + "Змяняць маштаб па вышыні ці па шырыні, або адразу па вышыні ды шырыні. Паўкрокі ўжываюцца толькі на крыніцах з высокай раздзяляльнасцю." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -4581,7 +4573,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "Дазволіць абыход магчымасцяў хуткіх захаванняў ва ўласцівасцях ядра, гэта дазваляе эксперыментаваць са звязанымі функцыямі (забяганне, зваротная перамотка і г. д.)." + "Вызначае, ці варта ігнараваць уласцівасці захавання стану ў звестках ядра, што дазваляе эксперыментаваць з адпаведнымі функцыямі (забяганне, перамотка назад і г. д.)." ) #ifndef HAVE_DYNAMIC MSG_HASH( @@ -4825,7 +4817,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Аўтаматычна ствараць захаванне пры зачыненні кантэнту. RetroArch будзе аўтаматычна загружаць дадзенае захаванне, калі ўключана 'Аўтазагрузка захаванняў'." + "Аўтаматычна ствараць захаванне стану падчас закрыцця змесціва. Гэты стан будзе загружаны пры запуску, калі ўключана 'Аўтаматычная загрузка стану'." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -5386,6 +5378,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY, "Настройка памеру зон перакрыцця для блока кнопак. Усталюйце на 100% для сіметрыі па 8 напрамках." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "Зона перацэнтроўкі аналагавага ўвода" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "Увод аналагавы стыку будзе адлічвацца адносна першага дотыку пры націсканні ў гэтай зоне." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_OVERLAY, "Накладка" @@ -13471,10 +13471,6 @@ MSG_HASH( MSG_AUTODETECT, "Аўтавызначэнне" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Аўтазагрузка захавання з" - ) MSG_HASH( MSG_CAPABILITIES, "Магчымасці" @@ -14567,6 +14563,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Не атрымалася зачыніць латок віртуальнага cd-прывада." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Аўтазагрузка захавання з" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Памылка аўтаматычнай загрузкі захавання стану з \"%s\"." @@ -15815,7 +15815,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Паказвае шрыфт ніжняга меню. Уключыце для адлюстравання апісання кнопак на ніжнім экране. Не ўключае даты захаванняў." + "Адлюстроўвае шрыфт ніжняга меню. Уключыце, каб бачыць апісанне кнопак на ніжнім экране. Адкідае даты захаванняў стану." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, diff --git a/intl/msg_hash_ca.h b/intl/msg_hash_ca.h index becf7ef2f36..f30b072fc08 100644 --- a/intl/msg_hash_ca.h +++ b/intl/msg_hash_ca.h @@ -802,6 +802,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, "Compatibilitat amb PulseAudio" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PIPEWIRE_SUPPORT, + "Suport de PipeWire" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COREAUDIO_SUPPORT, "Compatibilitat amb CoreAudio" @@ -882,6 +886,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Compatibilitat amb Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Compatibilitat amb SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Compatibilitat amb libusb" @@ -1918,10 +1926,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Inserció de fotogrames en negre" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Insereix fotogrames en negre entre fotogrames. Pot reduir considerablement el difuminat per moviment emulant l'escaneig de sortida que fan les pantalles CRT, però a costa de la brillantor. No ho combineu amb intervals d'intercanvi > 1, subfotogrames, retard dels fotogrames ni amb la sincronització a la velocitat de fotogrames del contingut exacta." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Insereix fotogrames en negre entre fotogrames per a millorar la claredat del moviment. Useu només l'opció designada per a la freqüència d'actualització actual de la pantalla. No ho feu servir per a freqüències d'actualització que no siguin múltiples de 60 Hz, com ara 144 Hz, 165 Hz, etc. No ho combineu amb intervals d'intercanvi > 1, subfotogrames, retard dels fotogrames ni amb la sincronització a la velocitat de fotogrames del contingut exacta. Es pot deixar activada l'opció de VRR ([...]" @@ -2002,10 +2006,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Subfotogrames d'ombreig" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insereix fotogrames d'ombreig extra entre fotogrames. Permet a l'ombreig fer efectes que s'executen a fotogrames per segon més alts que la freqüència actual del contingut. S'haura d'establir a la freqüència de la pantalla. No ho combineu amb interval d'intercanvi > 1, BFI, retard dels fotogrames ni amb la sincronització a la velocitat de fotogrames del contingut exacta." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Insereix fotogrames d'ombreig extra entre fotogrames per a qualsevol efecte d'ombreig que estigui designat per a executar-se més ràpid que la freqüència del contingut. Useu només l'opció designada per a la freqüència d'actualització actual de la pantalla. No ho feu servir per a freqüències d'actualització que no siguin múltiples de 60 Hz, com ara 144 Hz, 165 Hz, etc. No ho combineu amb intervals d'intercanvi > 1, BFI, retard dels fotogrames ni amb la sincronització a la velocitat d[...]" @@ -2078,10 +2078,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Simulació de la línia d'escaneig en moviment" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula una línia d'escaneig en moviment bàsica sobre múltiples subfotogrames dividint la pantalla en vertical i renderitzant cada part d'acord amb quants subfotogrames hi ha." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Simula una línia d'escaneig en moviment bàsica sobre múltiples subfotogrames dividint la pantalla en vertical i renderitzant cada part d'acord amb quants subfotogrames hi ha des del capdamunt cap avall." @@ -3003,6 +2999,18 @@ MSG_HASH( MENU_ENUM_SUBLABEL_MIXER_ACTION_VOLUME, "Ajusta el volum del flux d'àudio." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_NONE, + "Estat: no disponible" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_STOPPED, + "Estat: aturat" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_PLAYING, + "Estat: reproduint" + ) /* Settings > Audio > Menu Sounds */ @@ -3185,6 +3193,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_TURBO_MODE_CLASSIC, "Clàssic" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_TURBO_MODE_CLASSIC_TOGGLE, + "Clàssic (Alternar)" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_TURBO_DEFAULT_BUTTON, "Botó per defecte del turbo" @@ -3458,6 +3470,10 @@ MSG_HASH( "Disc Anterior" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_TOGGLE, + "Shaders (Alternar)" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT, "Següent shader" @@ -3532,6 +3548,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_RECORD_REPLAY_KEY, "Enregistrar la repetició" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_META_REPLAY_SLOT_PLUS, + "Següent posició de repetició" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, "Agafa el Ratolí (commuta)" @@ -3972,8 +3992,8 @@ MSG_HASH( "Desat ràpid automàtic" ) MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Crea un desat ràpid automàticament quan es tanca el contingut. El RetroArch carregarà automàticament aquest desat ràpid si l’opció «Carrega el desat ràpid automàticament» està activada." + MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, + "Carrega estat automàticament" ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_LOAD, @@ -4217,6 +4237,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_STREAMING_URL, "URL de transmissió" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_UDP_STREAM_PORT, + "Port de transmissió UDP" + ) /* Settings > On-Screen Display */ @@ -4375,6 +4399,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_MOUSE_SPEED, "Velocitat del ratolí" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_MOUSE_SWIPE_THRESHOLD, + "Llindar de lliscament" + ) /* Settings > On-Screen Display > Video Layout */ @@ -5454,6 +5482,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SETTINGS, "Visibilitat" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY, + "Resum d'inici" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_ACCOUNT, "Missatges d'inici de sessió" @@ -5497,6 +5529,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_NETPLAY_MAX_PING, "Limitació del ping" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_NETPLAY_PASSWORD, + "Contrasenya del servidor" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NETPLAY_START_AS_SPECTATOR, "Mode espectador del joc en línia" @@ -5670,6 +5706,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_CLEAN_PLAYLIST, "Neteja la llista de reproducció" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DELETE_PLAYLIST, + "Esborrar llista de reproducció" + ) /* Settings > User */ @@ -6370,6 +6410,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES_PLAYLIST, "Afegeix el contingut als “Favorits”." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_TO_PLAYLIST, + "Afegir a la llista de reproducció" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SET_CORE_ASSOCIATION, "Estableix l’associació del nucli" @@ -6471,6 +6515,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_LOAD_STATE, "Carrega estat" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE, + "Desfer càrrega ràpida" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE, + "Desfer desat ràpid" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_REPLAY_SLOT, "Posició de repitició" @@ -6491,10 +6543,18 @@ MSG_HASH( MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES, "Afegeix el contingut als “Favorits”." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QUICK_MENU_START_RECORDING, + "Inicia enregistrament" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QUICK_MENU_STOP_RECORDING, "Atura l'enregistrament" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QUICK_MENU_START_STREAMING, + "Inicia transmissió" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QUICK_MENU_STOP_STREAMING, "Atura la retransmissió" @@ -6597,6 +6657,10 @@ MSG_HASH( /* Quick Menu > Controls > Manage Remap Files */ +MSG_HASH( + MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, + "Carrega el fitxer de reassignació" + ) /* Quick Menu > Controls > Manage Remap Files > Load Remap File */ @@ -6622,6 +6686,10 @@ MSG_HASH( /* Quick Menu > Cheats > Start or Continue Cheat Search */ +MSG_HASH( + MENU_ENUM_LABEL_CHEAT_SEARCH_EQ_VAL, + "Iguala a l'anterior" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEAT_DELETE_MATCH, "Suprimeix la coincidència #" @@ -6705,6 +6773,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET, "Carrega un shader predefinit. El pipeline de shaders es configurarà automàticament." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PREPEND, + "Anteposar el preajust" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_APPEND, "Afegeix el preajust" @@ -6835,6 +6907,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, "Desa un fitxer de configuració d’excepcions que s’aplicarà només al contingut actual. Tindrà prioritat sobre la configuració principal." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_OVERRIDE_UNLOAD, + "Descarrega la personalització" + ) /* Quick Menu > Achievements */ @@ -7147,6 +7223,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION, "Preservar la regió" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_DISC_INDEX, + "Preserva l'índex del disc" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_THUMBNAIL_MODE_DEFAULT, "Configuració predeterminada" @@ -7434,6 +7514,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_THUMBNAILS_RGUI, "Miniatura superior" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_MENU_RGUI_SWAP_THUMBNAILS, + "Intercanvia miniatures" + ) MSG_HASH( MENU_ENUM_SUBLABEL_MENU_RGUI_EXTENDED_ASCII, "Habilita la visualització de caràcters ASCII no estàndards. És necessari per compatibilitat amb certes llengües occidentals no angleses. Afecta moderadament al rendiment." @@ -7465,6 +7549,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_16_10_CENTRE, "16:10 (centrat)" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_21_9_CENTRE, + "21:9 (Centrat)" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_3_2_CENTRE, "3:2 (centrat)" @@ -7672,6 +7760,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, "Efectes d'ombra" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE, + "Canal de shaders" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME, "Color del tema" @@ -8091,6 +8183,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_MENU_HELP, "&Ajuda" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_MENU_HELP_ABOUT, + "Sobre RetroArch" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_MENU_HELP_DOCUMENTATION, "Documentació" @@ -8099,6 +8195,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_LOAD_CORE, "Carregar Nucli" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_LOADING_CORE, + "Carregant el nucli..." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_NAME, "Nom" @@ -8123,6 +8223,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_TAB_FILE_BROWSER_UP, "Amunt" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_MENU_DOCK_CONTENT_BROWSER, + "Explorador de continguts" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_BOXART, "Caràtula" @@ -8175,6 +8279,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_ITEMS_COUNT, "%1 elements" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_DROP_IMAGE_HERE, + "Arrossega aquí una imatge" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_STOP, "Atura" @@ -8235,6 +8343,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_NEW_PLAYLIST, "Nova llista de reproducció" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_DELETE_PLAYLIST, + "Esborrar llista de reproducció" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_RENAME_PLAYLIST, + "Reanomena la llista de reproducció" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_QUESTION, "Qüestió" @@ -8597,6 +8713,10 @@ MSG_HASH( /* FIXME Still exists in a comment about being removed */ MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY, "Opacitat del peu de pàgina" ) +MSG_HASH( /* FIXME Still exists in a comment about being removed */ + MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY, + "Opacitat de l'encapçalament" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE, "Joc en línia" @@ -8645,6 +8765,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS, "Cerca amfitrions de joc a la xarxa local i s’hi connecta." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, + "Client de joc en xarxa" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION, "Descripció" @@ -8962,6 +9086,10 @@ MSG_HASH( MSG_NETPLAY_CLIENT_DEVICES, "Dispositius" ) +MSG_HASH( + MSG_NETPLAY_CHAT_SUPPORTED, + "Compatibilitat amb el xat" + ) MSG_HASH( MSG_AUDIO_VOLUME, @@ -9263,6 +9391,10 @@ MSG_HASH( MSG_EXTRACTING, "Extraient" ) +MSG_HASH( + MSG_EXTRACTING_FILE, + "Extraient el fitxer" + ) MSG_HASH( MSG_FAILED_TO_ALLOCATE_MEMORY_FOR_PATCHED_CONTENT, "No s’ha pogut assignar memòria pel contingut apedaçat..." @@ -9523,6 +9655,10 @@ MSG_HASH( MSG_REWIND_UNSUPPORTED, "No està disponible el rebobinat perquè aquest nucli no té suport d'estat desats serialitzats." ) +MSG_HASH( + MSG_SAVING_RAM_TYPE, + "Desant el tipus de memòria RAM" + ) MSG_HASH( MSG_SAVING_STATE, "Desant estat" @@ -9531,6 +9667,10 @@ MSG_HASH( MSG_SCANNING, "Escanejant" ) +MSG_HASH( + MSG_SENDING_COMMAND, + "Enviant comanda" + ) MSG_HASH( MSG_SLOW_MOTION, "A càmera lenta." @@ -9563,6 +9703,10 @@ MSG_HASH( MSG_LEADERBOARD_BEST, "Millor: %s" /* Best: [value] */ ) +MSG_HASH( + MSG_TOGGLE_CONTENT_METADATA, + "Mostra metadates" + ) MSG_HASH( MSG_PRESS_AGAIN_TO_QUIT, "Premeu una altra vegada per sortir..." @@ -9731,6 +9875,10 @@ MSG_HASH( MSG_CHEEVOS_HARDCORE_MODE_ENABLE, "S’ha activat el mode expert d’assoliments; s’han desactivat els desats ràpids i el rebobinat." ) +MSG_HASH( + MSG_CHEEVOS_UNSUPPORTED_COUNT, + "%d no compatible" +) MSG_HASH( MSG_CHEEVOS_RICH_PRESENCE_SPECTATING, "Expectant %s" @@ -9751,6 +9899,10 @@ MSG_HASH( MSG_RESAMPLER_QUALITY_HIGHEST, "Més alt" ) +MSG_HASH( + MSG_DUMPING_DISC, + "Abocant el disc..." + ) MSG_HASH( MSG_DRIVE_NUMBER, "Unitat %d" @@ -9759,6 +9911,14 @@ MSG_HASH( MSG_MANUAL_CONTENT_SCAN_IN_PROGRESS, "Escanejant: " ) +MSG_HASH( + MSG_MANUAL_CONTENT_SCAN_END, + "Cerca finalitzada: " + ) +MSG_HASH( + MSG_CORE_BACKUP_SCANNING_CORE, + "Cercant al nucli: " + ) MSG_HASH( MSG_CORE_INSTALLATION_FAILED, "Ha fallat la instal·lació del nucli: " @@ -9825,6 +9985,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_FILE_BROWSER_OPEN_PICKER, "Obrir..." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, + "Filtre de parpelleig" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, "Gamma del vídeo" @@ -9969,10 +10133,18 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE, "Tàctil" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE, + "Teclat petit" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_MENU_SHOW_REBOOT, "Mostrar Reiniciar" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_MENU_SHOW_SHUTDOWN, + "Mostra 'Apagar'" + ) MSG_HASH( MSG_ROOM_PASSWORDED, "Amb contrasenya" @@ -10113,6 +10285,10 @@ MSG_HASH( MSG_3DS_BOTTOM_MENU_NO_STATE_DATA, "Sense\nDades" ) +MSG_HASH( + MSG_3DS_BOTTOM_MENU_NO_STATE_THUMBNAIL, + "No hi ha captures de pantalla" + ) MSG_HASH( MSG_3DS_BOTTOM_MENU_RESUME, "Continuar la partida" @@ -10121,6 +10297,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "Habilitar la font" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, + "Color vermell de la font" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_BLUE, + "Color blau de la font" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_SCALE, "Mida de la font" diff --git a/intl/msg_hash_chs.h b/intl/msg_hash_chs.h index 56ea51ef5c0..d144548f8cc 100644 --- a/intl/msg_hash_chs.h +++ b/intl/msg_hash_chs.h @@ -1942,10 +1942,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "黑帧补间" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "在帧之间插入黑帧。可以通过仿真CRT扫描来大幅降低运动模糊,但以损失亮度为代价。 不要与 Swap Interval > 1, sub-frames, Frame Delay, 或者 Sync to Exact Content Framerate功能同时使用。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "为增强运动清晰度在帧之间插入黑帧。仅使用为您当前显示刷新率指定的选项。 不以非倍数60赫兹的刷新速率使用,例如144赫兹,165赫兹等。 不要与Swap Interval > 1, sub-frames, Frame Delay, 或者 Sync to Exact Content Framerate功能同时使用. 可以打开系统的 VRR 选项,仅仅不是那个设置。 如果你注意到-任何-临时图像保留, 你应该在 120hz 处禁用, 对于更高的hz 则调整下面的暗色帧设置。" @@ -2026,10 +2022,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "着色器子帧" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "在帧之间插入额外的着色器帧。允许着色器执行特效提升原生游戏的帧率。 应当设置为当前屏幕的刷新率。不要与“交换间隔 > 1”, “BFI”, “帧延迟”, 或“精确同步游戏帧率“功能同时使用。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "设计用来在任何可能的着色器特效上提升游戏本身的帧率,在帧之间插入额外的着色器帧。仅可以使用为您当前显示器刷新率指定的选项。 不要在非60赫兹倍数的屏幕刷新率使用,例如144赫兹,165赫兹等。 不要与“Swap 间隔 > 1”, “BFI”, “帧延迟”, 或者 “精确同步游戏帧率”功能同时使用. 可以保持系统的 VRR 功能打开,仅仅不是那个设置。" @@ -2102,10 +2094,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "滚动扫描线模拟" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "在多个子帧上模拟基本的滚动扫描线,方法是垂直分割屏幕,并根据子帧的数量渲染屏幕的每个部分。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "在多个子帧上模拟基本的滚动扫描线,方法是垂直分割屏幕,并根据从屏幕顶部向下的子帧数量渲染屏幕的每个部分。" @@ -2529,10 +2517,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_AXIS, "整数缩放轴" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "仅缩放高度,或同时缩放高度和宽度。半步适用于高分辨率信号源。" - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING_SMART, "智能" @@ -4403,10 +4387,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS, "绕过核心信息保存状态功能" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "指定是否忽略核心信息保护功能,允许尝试相关的功能 (超前运行,回溯等)。" - ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, @@ -4647,10 +4627,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "自动保存状态" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "关闭游戏时自动保存状态。如果启用了「自动加载状态」,下次打开游戏时,全能模拟器将自动加载此状态。" - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, "自动加载存档" @@ -13251,10 +13227,6 @@ MSG_HASH( MSG_AUTODETECT, "自动检测" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "自动加载状态存储于" - ) MSG_HASH( MSG_CAPABILITIES, "容量" @@ -14351,6 +14323,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "收回虚拟光驱托盘失败。" ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "自动加载状态存储于" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "从 \"%s\" 自动加载状态存档失败。" @@ -15569,10 +15545,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "启用字体" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "显示底部菜单字体。启用以在底部屏幕上显示按钮描述。这不包括保存日期。" - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "字体颜色红色通道" diff --git a/intl/msg_hash_cht.h b/intl/msg_hash_cht.h index fa934ddc812..4ecb549c4a5 100644 --- a/intl/msg_hash_cht.h +++ b/intl/msg_hash_cht.h @@ -1922,10 +1922,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "插入黑幀" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "在每幀之間插入黑幀, 以降低亮度為代價, 透過模擬映像管螢幕掃描方式減少動態模糊。\n請勿與「垂直同步切換間隔」設定大於<1> 「著色器補幀」 「幀數延遲」 「準確同步執行幀率」同時使用。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "設定值必須與螢幕預設更新率相同, 在每幀之間插入黑幀以增強動態清晰度。\n請勿與「垂直同步切換間隔」設定大於<1> 「著色器補幀」 「幀數延遲」 「準確同步執行幀率」同時使用。\n不適用於非60Hz倍數的更新率, 例如144Hz、165Hz等。\n允許系統可變更新率開啟, 但不是那個設定。\n 如果發現任何影像殘留, 請在120hz測試後關閉此選項, 至於更高的更新率可調整下方暗幀設定。" @@ -1998,10 +1994,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "著色器補幀" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "設定值必須與螢幕預設更新率相同, 在每幀之間插入著色器補幀, 提高每秒顯示影格數符合螢幕更新率。\n請勿與「垂直同步切換間隔」設定大於<1> 「插入黑幀」 「幀數延遲」 「準確同步執行幀率」同時使用。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "設定值必須與螢幕預設更新率相同, 在每幀之間插入著色器補幀, 提高每秒顯示影格數符合螢幕更新率。\n請勿與「垂直同步切換間隔」設定大於<1> 「插入黑幀」 「幀數延遲」 「準確同步執行幀率」同時使用。\n不適用於非60Hz倍數的更新率, 例如144Hz、165Hz等。\n允許系統可變更新率開啟, 但不是那個設定。" @@ -2489,10 +2481,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_AXIS, "整數縮放方式" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "設定可以使用高度或同時使用高度和寬度, 高度加半高或寬度加半寬適用於高解析度。" - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, "整數縮放模式" @@ -4423,10 +4411,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS, "忽略其他支援" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "開啟時執行核心忽略儲存狀態功能, 可用於開啟倒帶、超前執行和搶占幀數等相關功能。" - ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, @@ -4667,10 +4651,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "自動儲存即時存檔" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "「關閉」和「結束復古電玩」時, 自動儲存即時存檔, 儲存的編號為自動(.state.auto)。" - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, "自動載入即時存檔" @@ -13371,10 +13351,6 @@ MSG_HASH( MSG_AUTODETECT, "自動偵測" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "自動載入即時存檔從" - ) MSG_HASH( MSG_CAPABILITIES, "容量" @@ -14459,6 +14435,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "虛擬光碟機托盤無法進入。" ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "自動載入即時存檔從" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "無法自動載入即時存檔, 位置: %s。" @@ -15521,10 +15501,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "顯示文字" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "在下螢幕上顯示按鍵說明, 不包括儲存即時存檔的日期。" - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "字體顏色 (紅)" diff --git a/intl/msg_hash_cs.h b/intl/msg_hash_cs.h index 1f97f4d64d9..c991175324c 100644 --- a/intl/msg_hash_cs.h +++ b/intl/msg_hash_cs.h @@ -1898,10 +1898,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Vložení černého rámečku" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Vkládá mezi snímky černý rámeček (rámečky). Může výrazně snížit rozmazání pohybu napodobením vnějšího skenu CRT, ale za cenu snížení jasu. Nekombinujte s intervalem výměny > 1, dílčími snímky, zpožděním snímků nebo synchronizací s přesnou snímkovou frekvencí obsahu." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Vkládá mezi snímky černý rámeček (rámečky) pro lepší zřetelnost pohybu. Použijte pouze možnost určenou pro aktuální obnovovací frekvenci displeje. Nelze použít při obnovovací frekvenci, která není násobkem 60 Hz, jako je 144 Hz, 165 Hz atd. Nekombinujte s funkcemi Výměna intervalu > 1, dílčími snímky, zpoždění snímku nebo Sync do přesné snímkové frekvence obsahu. Ponechání zapnutého systémového VRR je v pořádku, jen ne toto nastavení. Pokud zaznamen[...]" @@ -1982,10 +1978,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Dílčí snímky shaderu" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Vložení dalších snímků shaderu mezi snímky. Umožňuje shaderům provádět efekty, které běží při vyšší rychlosti snímků za sekundu, než je skutečná rychlost obsahu. Mělo by být nastaveno na aktuální Hz obrazovky. Nekombinujte s funkcemi Interval výměny > 1, BFI, zpoždění snímku nebo Sync do přesné snímkové frekvence obsahu." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Vkládá mezi snímky další snímky shaderu pro případné efekty shaderu, které jsou navrženy tak, aby běžely rychleji než rychlost obsahu. Použijte pouze možnost určenou pro aktuální obnovovací frekvenci displeje. Není určeno pro použití při obnovovacích frekvencích, které nejsou násobkem 60 Hz, například 144 Hz, 165 Hz atd. Nekombinujte s funkcemi Interval výměny > 1, BFI, zpoždění snímku nebo Sync do přesné snímkové frekvence obsahu. Ponechání zapnutého [...]" @@ -2058,10 +2050,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Simulace valivé skenovací linie" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simuluje základní klouzavý skenovací řádek ve více dílčích snímcích vertikálním rozdělením obrazovky a vykreslením každé části obrazovky podle počtu dílčích snímků." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Simuluje základní klouzavý skenovací řádek ve více dílčích snímcích vertikálním rozdělením obrazovky a vykreslením každé části obrazovky podle toho, kolik dílčích snímků je od horního okraje obrazovky do dolního okraje." @@ -2481,10 +2469,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_AXIS, "Celočíselné škálování" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Měřítko pouze výška, nebo jak výška, tak šířka. Poloviční kroky platí pro zdroje vysokého rozlišení." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING_SMART, "Chytrá" @@ -4255,10 +4239,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS, "Obejít základní informace pro funkce uložených pozic" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "Určuje, zda se mají ignorovat základní možnosti ukládání informací, což umožňuje experimentovat se souvisejícími funkcemi (běh dopředu, přetáčení atd.)." - ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, @@ -4491,10 +4471,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Automaticky uložit pozici" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Automatické vytvoření pozice uložení při zavření obsahu. Pokud je povolena volba 'Automaticky načíst pozici', RetroArch tuto pozici uložení automaticky načte." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, "Automaticky načíst pozici uložení" @@ -12795,10 +12771,6 @@ MSG_HASH( MSG_AUTODETECT, "Autodetekovat" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Automaticky načíst pozici uložení z" - ) MSG_HASH( MSG_CAPABILITIES, "Schopnosti" @@ -13851,6 +13823,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Nepodařilo se zavřít zásobník virtuálních disků." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Automaticky načíst pozici uložení z" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Automatické načtení uložené pozice z \"%s\"se nezdařilo." @@ -14985,10 +14961,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "Povolení písma" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Zobrazení písma spodního menu. Povolit zobrazení popisů tlačítek na spodní obrazovce. To se netýká data uložení." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "Červená barva písma" diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index 43c2b695624..1804369efe5 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -890,6 +890,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2-Unterstützung" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL-Unterstützung" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb-Unterstützung" @@ -1892,7 +1896,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Fügt Schwarzbild(er) zwischen Frames ein. Kann Bewegungsunschärfe durch Emulation von CRT-Abtast-Ausgabe erheblich reduzieren, aber auf Kosten der Helligkeit. Nicht kombinieren mit Swap-Intervall > 1, Unterbilder, Bildverzögerung oder mit exakter Inhaltssignalfrequenz synchronisieren." + "WARNUNG: Schnelles Flackern kann auf manchen Bildschirmen zu einem Nachleuchten des Bildes führen. Verwendung auf eigene Gefahr // Schwarze(n) Rahmen zwischen den Bildern einfügen. Kann die Bewegungsunschärfe durch Emulation der CRT-Abtastung stark reduzieren, allerdings auf Kosten der Helligkeit." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -1976,7 +1980,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Fügt zusätzlich Shader-Bild(er) zwischen Frames ein. Ermöglicht Shadern den Einsatz von Effekten, die mit einer höheren Bildrate ausgeführt werden als die tatsächliche Inhaltsrate. Sollte auf die aktuelle Bildschirm-Hz gesetzt werden. Nicht kombinieren mit Swap-Intervall > 1, Schwarzbilder, Bildverzögerung oder mit exakter Inhaltssignalfrequenz synchronisieren." + "WARNUNG: Schnelles Flackern kann auf manchen Bildschirmen zu einem Nachleuchten des Bildes führen. Verwendung auf eigene Gefahr // Simuliert eine einfache rollende Scanline über mehrere Unterbilder, indem der Bildschirm vertikal aufgeteilt wird und jeder Teil des Bildschirms entsprechend der Anzahl der Unterbilder dargestellt wird." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2052,7 +2056,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simuliert eine einfache rollende Scanline über mehrere Unterbilder, indem der Bildschirm vertikal aufgeteilt wird und jeder Teil des Bildschirms entsprechend der Anzahl der Unterbilder dargestellt wird." + "WARNUNG: Schnelles Flackern kann auf manchen Bildschirmen zu einem Nachleuchten des Bildes führen. Verwendung auf eigene Gefahr // Simuliert eine einfache rollende Scanline über mehrere Unterbilder, indem der Bildschirm vertikal aufgeteilt wird und jeder Teil des Bildschirms entsprechend der Anzahl der Unterbilder dargestellt wird." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2471,7 +2475,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Nur Höhe oder Höhe und Breite skalieren. Halbschritte beziehen sich auf die Auflösung der Quellen." + "Skaliert entweder Höhe oder Breite oder sowohl Höhe als auch Breite. Halbschritte gelten nur für hochauflösende Quellen." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -4453,7 +4457,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "Legt fest, ob Savestatefähigkeiten der Core Info ignoriert werden sollen, so dass mit verwandten Funktionen experimentiert werden kann (Run-Ahead, Zurückspulen usw)." + "Legt fest, ob Savestate-Fähigkeiten der Core-Info ignoriert werden sollen, so dass mit verwandten Funktionen experimentiert werden kann (Run-Ahead, Zurückspulen usw.)." ) #ifndef HAVE_DYNAMIC MSG_HASH( @@ -4697,7 +4701,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Automatisch ein Savestate erstellen, wenn der Inhalt geschlossen wird. RetroArch lädt dieses Savestate automatisch, wenn 'Savestate automatisch laden' aktiviert ist." + "Beim Schließen des Inhalts automatisch einen Savestate erstellen. Dieser Savestate wird beim Start geladen, wenn \"Savestate automatisch laden\" aktiviert ist." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -13059,10 +13063,6 @@ MSG_HASH( MSG_AUTODETECT, "Automatisch erkennen" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Automatisches Laden des Speicherzustands aus" - ) MSG_HASH( MSG_CAPABILITIES, "Fähigkeiten" @@ -14151,6 +14151,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Virtuelles Laufwerk konnte nicht geschlossen werden." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Automatisches Laden des Speicherzustands aus" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Automatisches Laden des Savestates aus \"%s\" fehlgeschlagen." @@ -15399,7 +15403,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Text am unteren Bildschirm einblenden. Aktivieren, um Tastenbeschreibungen auf dem unteren Bildschirm anzuzeigen. Dies schließt das Speicherdatum aus." + "Text am unteren Bildschirm einblenden. Aktivieren, um Schaltflächenbeschreibungen auf dem unteren Bildschirm anzuzeigen. Dies schließt das Savestate-Speicherdatum aus." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, diff --git a/intl/msg_hash_el.h b/intl/msg_hash_el.h index 25225c6ca77..8d3d67b4e59 100644 --- a/intl/msg_hash_el.h +++ b/intl/msg_hash_el.h @@ -5391,10 +5391,6 @@ MSG_HASH( MSG_AUTODETECT, "Αυτόματη ανίχνευση" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Αυτόματη φόρτωση κατάστασης αποθήκευσης από" - ) MSG_HASH( MSG_CAPABILITIES, "Ικανότητες" @@ -5607,6 +5603,10 @@ MSG_HASH( MSG_VIEWPORT_SIZE_CALCULATION_FAILED, "Viewport size calculation failed! Will continue using raw data. This will probably not work right ..." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Αυτόματη φόρτωση κατάστασης αποθήκευσης από" + ) MSG_HASH( MSG_DEVICE_CONFIGURED_IN_PORT, "διαμορφώθηκε στην θύρα" diff --git a/intl/msg_hash_en.h b/intl/msg_hash_en.h index bd90872f630..9f90c8b4f09 100644 --- a/intl/msg_hash_en.h +++ b/intl/msg_hash_en.h @@ -2269,10 +2269,6 @@ MSG_HASH( MSG_3DS_BOTTOM_MENU_DEFAULT, "Tap the Touch Screen to go\nto the RetroArch menu" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Display bottom menu font. Enable to display button descriptions on the bottom screen. This excludes the save-state date." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "Font Colour Red" diff --git a/intl/msg_hash_es.h b/intl/msg_hash_es.h index d61b74f182a..010ac03ab12 100644 --- a/intl/msg_hash_es.h +++ b/intl/msg_hash_es.h @@ -910,6 +910,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Soporte de Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Soporte de SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Soporte de libusb" @@ -1960,7 +1964,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Inserta uno o varios fotogramas negros entre fotogramas. Puede reducir en gran medida la distorsión por movimiento (motion blur) emulando el «scan-out» de los monitores CRT a costa de sacrificar brillo. No combinar con un intervalo de intercambio de VSync superior a 1, con subfotogramas, con el retraso de fotogramas o con Sincronizar FPS al contenido." + "ADVERTENCIA: los parpadeos rápidos pueden provocar persistencia de la imagen («imágenes fantasma») en algunas pantallas. Utiliza esta opción bajo tu propia responsabilidad. // Inserta uno o varios fotogramas negros entre fotogramas. Puede reducir en gran medida la distorsión por movimiento (motion blur) emulando el «scan-out» de los monitores CRT a costa de sacrificar brillo." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2044,7 +2048,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Introduce uno o varios fotogramas adicionales del shader entre fotogramas. Permite que los shaders reproduzcan efectos a una velocidad de fotogramas superior a la del contenido. Debería ser el mismo valor que la frecuencia de hercios actual de la pantalla. No combinar con un intervalo de intercambio de VSync superior a 1, con inserción de fotogramas negros, con el retraso de fotogramas o con Sincronizar FPS al contenido." + "ADVERTENCIA: los parpadeos rápidos pueden provocar persistencia de la imagen («imágenes fantasma») en algunas pantallas. Utiliza esta opción bajo tu propia responsabilidad. // Simula de forma básica el escalonamiento de las líneas de barrido a lo largo de varios subfotogramas dividendo la pantalla en partes verticales y renderizando cada una de las mismas en función de los subfotogramas que existan." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2120,7 +2124,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula de forma básica el escalonamiento de las líneas de barrido a lo largo de varios subfotogramas dividendo la pantalla en partes verticales y renderizando cada una de las mismas en función de los subfotogramas que existan." + "ADVERTENCIA: los parpadeos rápidos pueden provocar persistencia de la imagen («imágenes fantasma») en algunas pantallas. Utiliza esta opción bajo tu propia responsabilidad. // Simula de forma básica el escalonamiento de las líneas de barrido a lo largo de varios subfotogramas dividendo la pantalla en partes verticales y renderizando cada una de las mismas en función de los subfotogramas que existan." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2547,7 +2551,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Escala solo la altura o también la anchura. Los escalados irregulares se aplicarán a las imágenes en alta resolución." + "Escala la altura o la anchura. Los escalados irregulares se aplicarán solo a imágenes en alta resolución." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -4801,7 +4805,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Hace un guardado rápido de forma automática al cerrar un contenido. RetroArch lo cargará automáticamente si la opción «Cargar guardado rápido automáticamente» está activada." + "Hace un guardado rápido de forma automática al cerrar un contenido. El guardado rápido se cargará automáticamente si la opción «Cargar guardado rápido automáticamente» está activada." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -13399,10 +13403,6 @@ MSG_HASH( MSG_AUTODETECT, "Detección automática" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Carga automática de guardado rápido en" - ) MSG_HASH( MSG_CAPABILITIES, "Funcionalidades" @@ -14483,6 +14483,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Error al cerrar la bandeja de discos virtual." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Carga automática de guardado rápido en" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Error al cargar automáticamente el guardado rápido «%s»." diff --git a/intl/msg_hash_fi.h b/intl/msg_hash_fi.h index cb5eb0fa017..3f32c6b2f9b 100644 --- a/intl/msg_hash_fi.h +++ b/intl/msg_hash_fi.h @@ -906,6 +906,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2-tuki" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL-tuki" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb-tuki" @@ -4183,10 +4187,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Tilan automaattinen tallennus" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Luo tilatallennus automaattisesti kun suljet sisällön. RetroArch lataa automaattisesti tämän tilatallennuksen, jos \"Lataa tilatallennus automaattisesti\" on käytössä." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, "Tilan automaattinen lataaminen" @@ -12171,10 +12171,6 @@ MSG_HASH( MSG_AUTODETECT, "Havaitse automaattisesti" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Tilan lataaminen kohteesta" - ) MSG_HASH( MSG_CAPABILITIES, "Ominaisuudet" @@ -13231,6 +13227,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Virtuaalisen levyaseman sulkeminen epäonnistui." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Tilan lataaminen kohteesta" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Tilatallennuksen automaattinen lataus kohteesta \"%s\" epäonnistui." diff --git a/intl/msg_hash_fr.h b/intl/msg_hash_fr.h index 0e464c6a375..b4abcbff6e4 100644 --- a/intl/msg_hash_fr.h +++ b/intl/msg_hash_fr.h @@ -906,6 +906,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Prise en charge de Video4Linux2 " ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Prise en charge de SSL " + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Prise en charge de Libusb " @@ -1936,7 +1940,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Insérer une ou plusieurs images noires entre les images. Peut considérablement réduire le flou de mouvement en émulant le balayage CRT, mais au détriment de la luminosité. Ne pas combiner avec les options Intervalle d'échange > 1, sous-trames, Retard d'images ou Synchroniser à la fréquence d'affichage exacte du contenu." + "AVERTISSEMENT : Un scintillement rapide peut causer une persistance de l'image sur certains écrans. À utiliser à vos risques et périls // Insérer des images noires entre les images. Permet de réduire considérablement le flou de mouvement en émulant le balayage CRT, mais au détriment de la luminosité." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2020,7 +2024,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insérer une ou plusieurs images noires entre les images. Permet aux shaders de créer des effets qui tournent à une fréquence d'image plus élevée que la vitesse réelle du contenu. Doit être réglé sur les Hz de l'écran actuel. Ne pas combiner avec Intervalle d'échange > 1, BFI, Retard d'image ou Synchroniser à la fréquence d'affichage exacte du contenu." + "AVERTISSEMENT : Un scintillement rapide peut causer une persistance de l'image sur certains écrans. À utiliser à vos risques et périls // Simule une ligne de balayage roulante basique au cours de plusieurs sous-images en divisant l'écran verticalement et en rendant chaque partie de l'écran en fonction du nombre de sous-images disponibles." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2096,7 +2100,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simule une ligne de balayage roulante basique au cours de plusieurs sous-images en divisant l'écran verticalement et en rendant chaque partie de l'écran en fonction du nombre de sous-images disponibles." + "AVERTISSEMENT : Un scintillement rapide peut causer une persistance de l'image sur certains écrans. À utiliser à vos risques et périls // Simule une ligne de balayage roulante basique au cours de plusieurs sous-images en divisant l'écran verticalement et en rendant chaque partie de l'écran en fonction du nombre de sous-images disponibles." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2523,7 +2527,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Mettre à l'échelle la hauteur uniquement, ou la hauteur et la largeur. Les demi-étapes s'appliquent aux sources haute résolution." + "Mettre à l'échelle soit la hauteur ou la largeur, soit la hauteur et la largeur. Les demi-étapes s'appliquent uniquement aux sources haute résolution." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -4761,7 +4765,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Créer automatiquement une sauvegarde instantanée à la fermeture de contenu. RetroArch chargera cette sauvegarde instantanée automatiquement si 'Chargement auto des sauvegardes instantanées' est activé." + "Faire automatiquement une sauvegarde instantanée lorsque le contenu est fermé. Cette sauvegarde instantanée est chargée au démarrage si l'option 'Chargement auto des sauvegardes instantanées' est activée." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -13355,10 +13359,6 @@ MSG_HASH( MSG_AUTODETECT, "Détection automatique" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Chargement auto d'une sauvegarde instantanée depuis" - ) MSG_HASH( MSG_CAPABILITIES, "Capacités" @@ -14443,6 +14443,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Impossible de fermer le plateau du lecteur de disque virtuel." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Chargement auto d'une sauvegarde instantanée depuis" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Le chargement d'une sauvegarde automatique depuis \"%s\" a échoué." diff --git a/intl/msg_hash_gl.h b/intl/msg_hash_gl.h index 7667b654e35..ec07ecf76fd 100644 --- a/intl/msg_hash_gl.h +++ b/intl/msg_hash_gl.h @@ -1950,10 +1950,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Inserción de Black Frame" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Insira cadro(s) negros entre cadros. Pode reducir moito o desenfoque de movemento emulando a exploración CRT, pero a costa do brillo. Non combine con Intervalo de intercambio > 1, sub-fotogramas, Retraso de fotogramas ou Sincronizar a velocidade de fotogramas de contido exacto." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Insire cadro(s) negros entre cadros para mellorar a claridade do movemento. Use só a opción designada para a súa frecuencia de actualización da pantalla actual. Non se debe usar con frecuencias de actualización que non sexan múltiplos de 60 Hz, como 144 Hz, 165 Hz, etc. Non combines con Intervalo de intercambio > 1, subfotogramas, Retraso de fotogramas ou Sincronización con frecuencia de fotogramas de contido exacto. Deixar o sistema VRR activado está ben, pero non esa configuración. Se[...]" @@ -2034,10 +2030,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Subcadros de sombreadores" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insira marco(s) de sombreado extra entre cadros. Permite aos sombreadores facer efectos que se executan a un fps superior á taxa de contido real. Debe configurarse na pantalla actual Hz. Non combines con Intervalo de intercambio > 1, BFI, Retraso de fotogramas ou Sincronizar a velocidade de fotogramas de contido exacto." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Insire cadro(s) de sombreado extra entre os fotogramas para os posibles efectos de sombreado que estean deseñados para executarse máis rápido que a taxa de contido. Use só a opción designada para a súa frecuencia de actualización da pantalla actual. Non debe usarse con frecuencias de actualización que non sexan múltiplos de 60 Hz, como 144 Hz, 165 Hz, etc. Non combine con Intervalo de intercambio > 1, BFI, Retraso de fotogramas ou Sincronización con frecuencia de fotogramas de contido [...]" @@ -2110,10 +2102,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Simulación de liña de escaneo rodante" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula unha liña de escaneo en rotación básica sobre varios subfotogramas dividindo a pantalla verticalmente e representando cada parte da pantalla segundo cantos subfotogramas haxa." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Simula unha liña de escaneo en rotación básica sobre varios subfotogramas dividindo a pantalla verticalmente cara arriba e representando cada parte da pantalla segundo cantos subfotogramas haxa desde a parte superior da pantalla cara abaixo." @@ -2525,10 +2513,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_AXIS, "Eixo de escala enteira" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Escalar só a altura, ou tanto a altura como o ancho. Os pasos medios aplícanse a fontes de alta resolución." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, "Escalado de escala enteira" @@ -4495,10 +4479,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS, "Omite as funcións de gardar estados da información do núcleo" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "Especifica se ignorar as capacidades de estado de salvamento da información básica, o que permite probar con funcións relacionadas (adiante, rebobinar, etc.)." - ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, @@ -4739,10 +4719,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Estado de gardado automático" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Fai automaticamente un estado de gardado cando o contido estea pechado. RetroArch cargará automaticamente este estado de gardado se \"Cargar estado automaticamente\" está activado." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, "Estado de carga automática" @@ -13231,10 +13207,6 @@ MSG_HASH( MSG_AUTODETECT, "Detección automática" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Cargando automaticamente o estado de gardar desde" - ) MSG_HASH( MSG_CAPABILITIES, "Capacidades" @@ -14311,6 +14283,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Produciuse un erro ao pechar a bandexa do disco virtual." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Cargando automaticamente o estado de gardar desde" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Fallou a carga automática do estado de gardado de \"%s\"." @@ -15529,10 +15505,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "Activar fonte" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Mostra a fonte do menú inferior. Activar para mostrar as descricións dos botóns na pantalla inferior. Isto exclúe a data do estado de salvación." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "Cor da fonte Vermello" diff --git a/intl/msg_hash_hu.h b/intl/msg_hash_hu.h index e814a6798fc..8669f44b9f0 100644 --- a/intl/msg_hash_hu.h +++ b/intl/msg_hash_hu.h @@ -706,6 +706,30 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, "SDL 2 támogatás" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D8_SUPPORT, + "Direct3D 8 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D9_SUPPORT, + "Direct3D 9 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D10_SUPPORT, + "Direct3D 10 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D11_SUPPORT, + "Direct3D 11 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D12_SUPPORT, + "Direct3D 12 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GDI_SUPPORT, + "GDI támogatás" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, "Vulkan támogatás" @@ -786,6 +810,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, "PulseAudio támogatás" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PIPEWIRE_SUPPORT, + "PipeWire támogatás" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COREAUDIO_SUPPORT, "CoreAudio támogatás" @@ -866,6 +894,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2 támogatás" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL támogatás" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb támogatás" @@ -1721,6 +1753,10 @@ MSG_HASH( MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_PULSE, "PulseAudio illesztő. Ha a rendszer PulseAudio-t használ, mindenképpen ez az illesztő ajánlott pl. az ALSA helyett." ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_PIPEWIRE, + "PipeWire illesztő. Ha a rendszer PipeWire-t használ, mindenképpen ez az illesztő ajánlott pl. a PulseAudio helyett." + ) MSG_HASH( MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_JACK, "Jack Audio Connection Kit illesztő." @@ -1912,7 +1948,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Egy vagy több fekete képkocka beszúrása a képkockák közé. A mozgási elmosódást nagymértékben csökkentheti a CRT hatás emulálásával, a fényerő kárára. Nem kombinálható az 1-nél nagyobb váltóperiódussal, az alképkockákkal, képvárakoztatással, vagy a tartalom pontos képfrissítéséhez igazítással." + "FIGYELEM: a gyors villódzás bizonyos kijelzőkön képvisszatartást okozhat. Csak saját felelősségre. // Fekete képkockák beszúrása a képkockák közé. A mozgásból adódó elmosódást a CRT-szerű megjelenítéssel nagyban csökkenti, de a fényesség rovására." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -1996,7 +2032,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "További képkockák előállítása a shaderek számára a képkockák közt, így a shaderek a tartalomnál magasabb frissítésű effekteket is használhatnak. Ajánlott a képernyő frissítési frekvenciájára állítani. Nem kombinálható az 1-nél nagyobb váltóperiódussal, a fekete képkocka beszúrással, a képvárakoztatással, vagy a tartalom pontos képfrissítéséhez igazodással." + "FIGYELEM: a gyors villódzás bizonyos kijelzőkön képvisszatartást okozhat. Csak saját felelősségre. // Egyszerű gördülő elektronsugár szimuláció több alképkockán keresztül, a képernyőt az alképkockák számának megfelelően függőlegesen felosztva és részlegesen megjelenítve." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2072,7 +2108,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Egyszerű gördülő elektronsugár szimuláció több alképkockán keresztül, a képernyőt az alképkockák számának megfelelően függőlegesen felosztva és részlegesen megjelenítve." + "FIGYELEM: a gyors villódzás bizonyos kijelzőkön képvisszatartást okozhat. Csak saját felelősségre. // Egyszerű gördülő elektronsugár szimuláció több alképkockán keresztül, a képernyőt az alképkockák számának megfelelően függőlegesen felosztva és részlegesen megjelenítve." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2499,7 +2535,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Méretezés csak a magasság, vagy a magasság és szélesség szerint. A fél lépések a nagyfelbontású forrásokra vonatkoznak." + "Méretezés a magasság, a szélesség, vagy mindkettő szerint. A fél lépések csak a nagyfelbontású forrásokra vonatkoznak." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -2995,6 +3031,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, "Hangkésleltetés (ms)" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_LATENCY, + "A legnagyobb hangkésleltetés ezredmásodpercben. Az illesztő a tényleges késleltetést ezen érték 50%-a körül próbálja tartani. Ha a hangillesztő nem tudja a kívánt késleltetést biztosítani, az érték eltérhet." + ) #ifdef HAVE_MICROPHONE /* Settings > Audio > Input */ @@ -3211,6 +3251,26 @@ MSG_HASH( MENU_ENUM_SUBLABEL_MIXER_ACTION_VOLUME, "A hangfolyam hangereje." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_NONE, + "Állapot: nincs adat" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_STOPPED, + "Leállítva" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_PLAYING, + "Lejátszás alatt" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_PLAYING_LOOPED, + "Lejátszás alatt (ismétlés)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_PLAYING_SEQUENTIAL, + "Lejátszás alatt (lépés a következőre)" + ) /* Settings > Audio > Menu Sounds */ @@ -4737,7 +4797,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "A tartalom bezárásakor automatikusan készít egy mentést a játékállásról. Ha a \"Játékállás automatikus betöltése\" be van kapcsolva, ez fog betöltődni." + "Automatikus állapotmentés a tartalom bezárásakor. Ez az állapot töltődik be indításkor, ha az \"Automatikus játékállás betöltés\" be van kapcsolva." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -5290,6 +5350,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY, "A négy előlapi gomb átfedő zónáinak mérete. 100% a nyolc irányban szimmetrikus beállítás." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "Analóg központosítási zóna" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "Ezen a zónán belüli érintéskor az analóg kar érzékelése az első érintéshez lesz viszonyítva." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_OVERLAY, "Képernyőrátétek" @@ -11799,6 +11867,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_TITLE_SCREEN, "Kezdő képernyő" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_LOGO, + "Logó" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_ALL_PLAYLISTS, "Minden játéklista" @@ -13087,10 +13159,6 @@ MSG_HASH( MSG_AUTODETECT, "Automatikus felismerés" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Játékállás automatikus betöltése innen" - ) MSG_HASH( MSG_CAPABILITIES, "Képességek" @@ -14175,6 +14243,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Virtuális lemeztálca becsukása sikertelen." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Játékállás automatikus betöltése innen" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Játékállás automatikus betöltése innen: \"%s\", sikertelen." diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index 6a2e923698c..5abe4c8e173 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -898,6 +898,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Supporto Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Supporto SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Supporto Libusb" @@ -1916,7 +1920,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Inserisci fotogrammi neri tra fotogrammi. Puoi ridurre notevolmente la sfocatura del movimento emulando la scansione CRT, ma al costo della luminosità. Non combinare con Intervallo di scambio > 1, sottoframe, ritardo del frame o Sincronizza per ottenere un quadro di contenuto esatto." + "ATTENZIONE: lo sfarfallio rapido può causare persistenza delle immagini su alcuni display. Usare a proprio rischio // Inserire quadri neri tra i quadri. Può ridurre notevolmente la sfocatura del movimento emulando la scansione CRT, ma al costo della luminosità." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2000,7 +2004,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Inserisci fotogrammi shader aggiuntivi tra i quadri. Permette agli ombreggiatori di eseguire effetti con fps superiori al tasso di contenuto effettivo. Deve essere impostata alla schermata corrente Hz. Non combinare con Swap Intervallo > 1, BFI, Ritardo Frame o Sincronizzazione con Esact Content Framerate." + "ATTENZIONE: Il flickering rapido può causare persistenza delle immagini su alcuni display. Utilizzare a proprio rischio // Simula una linea di scanline di base su più sotto-frame dividendo lo schermo su verticalmente e rendendo ogni parte dello schermo in base a quanti sotto-frame ci sono." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2076,7 +2080,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula una linea di scanline di base su più sotto-frame dividendo lo schermo su verticalmente e rendendo ogni parte dello schermo in base a quanti sotto-frame ci sono." + "ATTENZIONE: Il flickering rapido può causare persistenza delle immagini su alcuni display. Utilizzare a proprio rischio // Simula una linea di scanline di base su più sotto-frame dividendo lo schermo su verticalmente e rendendo ogni parte dello schermo in base a quanti sotto-frame ci sono." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2503,7 +2507,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Scala solo altezza, o entrambi altezza e larghezza. Metà passi si applicano alle sorgenti ad alta risoluzione." + "Scala altezza o larghezza, o entrambe altezza e larghezza. Mezzi passaggi si applicano solo alle sorgenti ad alta risoluzione." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -4485,7 +4489,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "Specifica se ignorare le funzionalità di salvataggio di stato delle informazioni di base, consentendo di sperimentare con le caratteristiche correlate (Run-Ahead, riavvolgi, ecc)." + "Specifica se ignorare le informazioni di base salvare le capacità di stato, consentendo di sperimentare con le caratteristiche correlate (eseguire avanti, riavvolgimento, ecc)." ) #ifndef HAVE_DYNAMIC MSG_HASH( @@ -4729,7 +4733,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Crea automaticamente uno stato di salvataggio quando il contenuto è chiuso. RetroArch caricherà automaticamente questo stato di salvataggio se 'Carica automaticamente lo stato' è abilitato." + "Crea automaticamente uno stato di salvataggio quando il contenuto è chiuso. Questo stato di salvataggio viene caricato all'avvio se 'Stato di caricamento automatico' è abilitato." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -13203,10 +13207,6 @@ MSG_HASH( MSG_AUTODETECT, "Trovato automaticamente" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Carica automaticamente il salvataggio da" - ) MSG_HASH( MSG_CAPABILITIES, "Funzionalità" @@ -14295,6 +14295,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Chiusura del vassoio del disco virtuale non riuscita." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Carica automaticamente il salvataggio da" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Caricamento automatico dello stato di salvataggio da \"%s\" non riuscito." @@ -15539,7 +15543,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Visualizza il carattere del menu inferiore. Abilita per visualizzare le descrizioni dei pulsanti nello schermo inferiore. Questo esclude la data di salvataggio." + "Visualizza il carattere del menu inferiore. Abilita per visualizzare le descrizioni dei pulsanti nella schermata inferiore. Questo esclude la data di salvataggio dello stato." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index df2076520f1..847df5aa0da 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -726,6 +726,30 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, "SDL2 対応" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D8_SUPPORT, + "Direct3D 8 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D9_SUPPORT, + "Direct3D 9 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D10_SUPPORT, + "Direct3D 10 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D11_SUPPORT, + "Direct3D 11 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D12_SUPPORT, + "Direct3D 12 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GDI_SUPPORT, + "GDI 対応" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, "Vulkan 対応" @@ -806,6 +830,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, "PulseAudio 対応" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PIPEWIRE_SUPPORT, + "PipeWire 対応" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COREAUDIO_SUPPORT, "CoreAudio 対応" @@ -886,6 +914,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2 対応" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL 対応" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb 対応" @@ -1934,10 +1966,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "黒フレーム挿入" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "フレーム間に黒フレームを挿入します。CRT スキャンをエミュレートすることで残像感を大幅に減らすことができますが、明るさが減少します。1 以上のスワップ間隔 (自動は可)、フレーム遅延または正確なコンテンツフレームレートに同期と組み合わせないでください。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "フレーム間に黒フレームを挿入し、動きをより鮮明にします。現在のディスプレイのリフレッシュレート用に準備されたオプションのみを使用してください。144Hz、165Hz など、60Hz の倍数ではないリフレッシュレートでは使用できません。1 以上のスワップ間隔、フレーム遅延または正確なフレームレートに同期と組み合わせないでください。" @@ -2018,10 +2046,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "シェーダーサブフレーム" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "フレーム間に追加のシェーダーフレームを挿入します。シェーダーで実際のコンテンツフレームレートよりも高い FPS で動作するエフェクトを実行できるようになります。現在のディスプレイ Hz に対応するオプションを設定する必要があります。1 以上のスワップ間隔、黒フレーム挿入、正確なフレームレートに同期と組み合わせないでください。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "コンテンツフレームレートよりも高速に動作するように設計されたシェーダー効果用に、フレーム間に追加のシェーダーフレームを挿入します。現在のディスプレイ Hz に対応するオプションのみを使用してください。144Hz、165Hz など、60Hz の倍数ではないリフレッシュレートでは使用できません。" @@ -2094,10 +2118,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "ループ回転スキャンラインシミュレーション" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "画面を垂直に分割し、サブフレームの数に応じて画面の各部分をレンダリングすることで、複数のサブフレームにわたるブラウン管をカメラで撮影したときのようなループ回転スキャンラインをシミュレートします。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "画面を垂直に分割し、画面の上端から下端にあるサブフレームの数に応じて画面の各部分をレンダリングすることで、複数のサブフレームにわたるブラウン管をカメラで撮影したときのようなループ回転スキャンラインをシミュレートします。" @@ -4427,10 +4447,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS, "コア情報のステートセーブ機能の対応有無を無視" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "コア情報のステートセーブ機能の対応有無を無視するかどうかを指定し、関連する機能 (先行実行、巻き戻しなど) を試すことができます。" - ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, @@ -4671,10 +4687,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "自動ステートセーブ" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "コンテンツを閉じたときに自動的にステートセーブを作成します。[自動ステートロード] が有効になっている場合、RetroArch はこのステートセーブを自動的にロードします。" - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, "自動ステートロード" @@ -11899,6 +11911,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_TITLE_SCREEN, "タイトルスクリーン" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_LOGO, + "ロゴ" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_ALL_PLAYLISTS, "すべてのプレイリスト" @@ -13195,10 +13211,6 @@ MSG_HASH( MSG_AUTODETECT, "自動検出" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "ステートセーブを自動ロード中 from" - ) MSG_HASH( MSG_CAPABILITIES, "対応機能" @@ -14287,6 +14299,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "仮想ディスクトレイを閉じることができませんでした。" ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "ステートセーブを自動ロード中 from" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "\"%s\" からのステートセーブの自動読み込みに失敗しました。" @@ -15513,10 +15529,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "フォントを有効にする" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "下メニューのフォントを表示します。下画面にボタンの説明を表示することが出来ます。ステートセーブの日付は表示されません。" - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "フォントの色 (赤)" diff --git a/intl/msg_hash_ko.h b/intl/msg_hash_ko.h index cfa8f52551c..ac46ad6c4c6 100644 --- a/intl/msg_hash_ko.h +++ b/intl/msg_hash_ko.h @@ -914,6 +914,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2 지원" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL 지원" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Libusb 지원" @@ -1980,7 +1984,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "프레임 사이에 검정색 프레임을 삽입합니다. CRT 스캔을 에뮬레이션하여 모션 블러를 크게 줄일 수 있지만 밝기는 저하됩니다. 스왑 간격 > 1, 서브프레임, 프레임 지연, 정확한 프레임 동기화 설정들과 함께 사용하지 마십시오." + "주의: 빠른 깜빡임은 일부 디스플레이에 잔상을 남길 수 있습니다. 사용에 주의가 필요합니다 // 프레임 사이에 검은 프레임을 삽입합니다. CRT 스캔을 흉내내어 모션 블러를 크게 줄일 수 있지만, 화면 밝기가 저하됩니다." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2064,7 +2068,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "프레임 사이에 추가 셰이더 프레임을 삽입합니다. 셰이더가 콘텐츠의 프레임 레이트보다 더 높은 프레임 레이트로 작업을 수행할 수 있게 합니다. 현재 디스플레이의 주사율 Hz와 일치하는 값으로 설정되어야 합니다. 스왑 간격 > 1, 검정색 프레임 삽입, 정확한 프레임 동기화 설정들과 함께 사용하지 마십시오." + "주의: 빠른 깜빡임은 일부 디스플레이에 잔상을 남길 수 있습니다. 사용에 주의가 필요합니다 // 화면을 여러 세로 구간으로 나누고 다수의 서브프레임으로부터 각 구간에 해당하는 서브프레임을 렌더하는 방식으로 롤링 스캔라인 효과를 흉내냅니다." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2140,7 +2144,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "화면을 여러 세로 구간으로 나누고 다수의 서브프레임으로부터 각 구간에 해당하는 서브프레임을 렌더하는 방식으로 롤링 스캔라인 효과를 흉내냅니다." + "주의: 빠른 깜빡임은 일부 디스플레이에 잔상을 남길 수 있습니다. 사용에 주의가 필요합니다 // 화면을 여러 세로 구간으로 나누고 다수의 서브프레임으로부터 각 구간에 해당하는 서브프레임을 렌더하는 방식으로 롤링 스캔라인 효과를 흉내냅니다." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2567,7 +2571,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "화면 크기를 조정할 때 기준을 높이로 할지, 높이와 너비 모두로 할지 설정합니다. 고해상도 영상에는 절반 단위 조정도 적용됩니다." + "화면 크기를 조정할 때 기준을 높이로 할지, 너비로 할지, 높이와 너비 모두로 할지 설정합니다. 절반 단위 조정은 고해상도 영상에만 적용됩니다." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -4837,7 +4841,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "콘텐츠가 종료되면 자동으로 상태저장 파일을 생성합니다. 자동 상태 불러오기가 활성화 되어 있으면 다음 시작시 해당 상태저장을 자동으로 불러옵니다." + "컨텐츠를 종료할 때 자동으로 상태저장을 생성합니다. '상태저장 자동으로 불러오기'가 활성화되어 있는 경우, 이 상태저장을 다음 시작 시에 자동으로 불러옵니다." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -5398,6 +5402,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY, "전면 버튼이 겹치는 부분의 크기를 조절합니다. 100%로 설정하면 8방향 구역의 크기가 모두 같아집니다." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "아날로그 중심점 재정의 구역 범위" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "지정한 구역 내에서 터치를 시작할 경우 처음 터치한 위치를 아날로그 스틱 입력의 중심점으로 사용합니다." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_OVERLAY, "오버레이" @@ -13487,10 +13499,6 @@ MSG_HASH( MSG_AUTODETECT, "자동감지" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "상태저장 자동 불러오기: " - ) MSG_HASH( MSG_CAPABILITIES, "기능" @@ -14583,6 +14591,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "가상 디스크 트레이를 닫지 못했습니다." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "상태저장 자동 불러오기: " + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "\"%s\"에서 상태저장을 자동으로 불러오지 못했습니다." diff --git a/intl/msg_hash_nl.h b/intl/msg_hash_nl.h index e9a9701b580..b4637c4589a 100644 --- a/intl/msg_hash_nl.h +++ b/intl/msg_hash_nl.h @@ -3735,10 +3735,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Automatisch Slaan de Staat op" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Automatisch een slagstaat maken wanneer inhoud wordt gesloten. RetroArch zal deze slagstaat automatisch laden als 'Staat Automatisch Laden' is ingeschakeld." - ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_LOAD, "Laad de slagstaat automatisch bij het opstarten." diff --git a/intl/msg_hash_pl.h b/intl/msg_hash_pl.h index 7ddae92c130..c0378c2b144 100644 --- a/intl/msg_hash_pl.h +++ b/intl/msg_hash_pl.h @@ -910,6 +910,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Obsługa Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Wsparcie SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Obsługa libusb" @@ -1922,10 +1926,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Wstawianie czarnej klatki" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Wstaw czarne ramki między ramkami. Może znacznie zmniejszyć rozmycie ruchu poprzez emulowanie skanowania CRT, ale kosztem jasności. Nie łączyć z Interwalem Swap > 1, podramki, ramki Frame lub Synchronizuj z dokładną zawartością." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Wstawia czarne ramki pomiędzy ramkami w celu zwiększenia jasności ruchu. Użyj opcji tylko dla aktualnego wskaźnika odświeżania ekranu. Nie używać z szybkością odświeżania, które nie są wielokrotnościami 60Hz, takimi jak 144Hz, 165Hz itp. Nie łączyć z Interwalem Swap > 1, podramki, ramki Frame lub Synchronizuj z dokładną zawartością. Pozostawienie systemu VRR jest w porządku, a nie to ustawienie. Jeśli zauważysz dowolne tymczasowe zatrzymanie obrazu, powinieneś wyłącz[...]" @@ -2006,10 +2006,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Pod-klatki shadera" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Wstawia dodatkowe klatki shadera pomiędzy klatkami. Umożliwia shaderom wykonywanie efektów, które działają z wyższą liczbą klatek na sekundę niż rzeczywista częstotliwość wyświetlania treści. Powinno być ustawione na bieżące Hz ekranu. Nie łączyć z opcjami Interwał zmiany klatek > 1, BFI, Opóźnienie klatek lub Synchronizuj do dokładnego framerate'u zawartości." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Wstawia dodatkowe klatki shaderów pomiędzy klatkami dla wszelkich możliwych efektów shaderów, które są zaprojektowane do działania szybciej niż częstotliwość zawartości. Używaj tylko opcji wyznaczonej dla bieżącej częstotliwości odświeżania wyświetlacza. Nie używać przy częstotliwościach odświeżania, które nie są wielokrotnościami 60 Hz, takich jak 144 Hz, 165 Hz itp. Nie łączyć z opcjami Interwał zmiany klatek > 1, BFI, Opóźnienie klatek lub Synchronizuj do d[...]" @@ -2082,10 +2078,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Symulacja prześwietlania" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Symuluje prostą kroczącą linię skanującą na wielu podklatkach poprzez podzielenie ekranu w górę pionowo i renderowanie każdej części ekranu w zależności od liczby podklatek." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Symuluje prostą kroczącą linię skanującą na wielu podklatkach poprzez podzielenie ekranu w górę pionowo i renderowanie każdej części ekranu w zależności od liczby podklatek." @@ -2505,10 +2497,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_AXIS, "Oś skali całkowitej" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Skaluj tylko wysokość lub zarówno wysokość, jak i szerokość. Połowa kroków dotyczy źródeł o wysokiej rozdzielczości." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING_SMART, "Inteligentny" @@ -4079,6 +4067,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_CORE_INFO_CACHE_ENABLE, "Utrzymuj stałą lokalną pamięć podręczną zainstalowanych informacji o rdzeniach. Znacznie skraca czas ładowania na platformach z wolnym dostępem do dysku." ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, + "Określa, czy zignorować podstawowe informacje zapisują możliwości stanu, pozwalające na eksperymentowanie z powiązanymi funkcjami (uruchamianie z przodu, przewijanie itp.)." + ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, @@ -4281,7 +4273,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Automatycznie utwórz stan zapisu, gdy zawartość jest zamknięta. RetroArch automatycznie załaduje ten stan zapisu, jeśli włączona jest opcja \"Załaduj stan automatycznie\"." + "Automatycznie utwórz stan zapisu, gdy zawartość jest zamknięta. Ten stan zapisów jest załadowany przy starcie, jeśli włączony jest \"Automatycznej wczytywanie\"." ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_LOAD, @@ -11959,10 +11951,6 @@ MSG_HASH( MSG_AUTODETECT, "Automatyczne wykrywanie" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Automatyczne ładowanie stanu zapisu" - ) MSG_HASH( MSG_CAPABILITIES, "Możliwości" @@ -12971,6 +12959,10 @@ MSG_HASH( MSG_VIEWPORT_SIZE_CALCULATION_FAILED, "Obliczenie rozmiaru obszaru widoku nie powiodło się! Nadal używane będą surowe dane. To prawdopodobnie nie zadziała dobrze..." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Automatyczne ładowanie stanu zapisu" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Automatyczne ładowanie stanu zapisu z \"%s\" nie powiodło się." @@ -13937,6 +13929,10 @@ MSG_HASH( MSG_3DS_BOTTOM_MENU_LOAD_STATE, "Załaduj\nPunkt przywracania" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, + "Wyświetlaj czcionkę dolnego menu. Włącz, aby wyświetlić opisy przycisków na dolnym ekranie. Wyklucza to datę zapisu." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_OPACITY, "Przezroczystość koloru czcionki" diff --git a/intl/msg_hash_pt_br.h b/intl/msg_hash_pt_br.h index 20e36cf6beb..b09d7380e01 100644 --- a/intl/msg_hash_pt_br.h +++ b/intl/msg_hash_pt_br.h @@ -806,6 +806,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, "Suporte ao PulseAudio" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PIPEWIRE_SUPPORT, + "Suporte ao PipeWire" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COREAUDIO_SUPPORT, "Suporte ao CoreAudio" @@ -886,6 +890,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Suporte ao Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Suporte ao SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Suporte ao libusb" @@ -1974,10 +1982,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Simulação do rolamento da linha de varredura" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula o rolamento básico da linha de varredura em múltiplos sub-quadros, dividindo a tela verticalmente e renderizando cada parte conforme a quantidade de sub-quadros existente." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Simula o rolamento básico da linha de varredura em múltiplos sub-quadros, dividindo a tela verticalmente e renderizando cada parte conforme a quantidade de sub-quadros existente no canto superior da tela para baixo." @@ -4071,10 +4075,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Salvar jogo automaticamente" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Cria automaticamente um jogo salvo quando o conteúdo for fechado. O RetroArch carregará automaticamente este jogo salvo se \"Carregue automaticamente o jogo salvo\" estiver ativado." - ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_LOAD, "Carrega o último jogo salvo automaticamente na inicialização do RetroArch." @@ -11631,10 +11631,6 @@ MSG_HASH( MSG_AUTODETECT, "Detectar automaticamente" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Autocarregando jogo salvo de" - ) MSG_HASH( MSG_CAPABILITIES, "Capacidades" @@ -12619,6 +12615,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Houve uma falha ao fechar a bandeja virtual do disco." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Autocarregando jogo salvo de" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "O carregamento automático do jogo salvo a partir de \"%s\" falhou." @@ -13577,10 +13577,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "Ativar fonte" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Mostra a fonte do menu inferior. Ative para exibir as descrições dos botões na tela inferior. Não tem compatibilidade com a data do jogo salvo." - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "Vermelho da fonte" diff --git a/intl/msg_hash_pt_pt.h b/intl/msg_hash_pt_pt.h index c34d6541dbb..5e40948996c 100644 --- a/intl/msg_hash_pt_pt.h +++ b/intl/msg_hash_pt_pt.h @@ -195,7 +195,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH, - "Sair" + "Encerrar" ) MSG_HASH( MENU_ENUM_SUBLABEL_QUIT_RETROARCH, @@ -495,6 +495,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_REQUIRED_HW_API, "API de Gráficos Necessária" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_PATH, + "Caminho Completo" +) MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_SUPPORT_LEVEL, "Posição de gravação de estado" @@ -519,6 +523,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE_IN_CONTENT_DIRECTORY, "- Nota: A opção \"Ficheiros do Sistema estão na Pasta de Conteúdos\" está atualmente ativada." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE_PATH, + "- A procurar em: '%s" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_MISSING_REQUIRED, "Em falta, Requerido:" @@ -543,6 +551,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_CORE_LOCK, "Previne que o núcleo atualmente instalado seja modificado. Pode ser usado para evitar atualizações indesejadas quando o conteúdo requer uma versão específica do núcleo (por exemplo, conjuntos de ROM Arcade)." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CORE_SET_STANDALONE_EXEMPT, + "Excluir do menu 'Núcleos sem conteúdo'" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CORE_SET_STANDALONE_EXEMPT, + "Impede que este núcleo seja exibido na aba/menu 'Núcleos sem conteúdo'. Aplica-se somente quando o modo de exibição é definido como 'Personalizado'." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_DELETE, "Remover núcleo" @@ -694,6 +710,30 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, "Suporte a SDL2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D8_SUPPORT, + "Suporte a Direct3D 8" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D9_SUPPORT, + "Suporte a Direct3D 9" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D10_SUPPORT, + "Suporte a Direct3D 10" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D11_SUPPORT, + "Suporte a Direct3D 11" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D12_SUPPORT, + "Suporte a Direct3D 12" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GDI_SUPPORT, + "Suporte a GDI" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, "Suporte a Vulkan" @@ -774,6 +814,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, "Suporte a PulseAudio" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PIPEWIRE_SUPPORT, + "Suporte para PipeWire" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COREAUDIO_SUPPORT, "Suporte a CoreAudio" @@ -854,6 +898,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Suporte a Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Suporte SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Suporte a libusb" @@ -916,6 +964,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CONTROLS, "Mapeamento de teclas" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ARTSTYLE, + "Estilo de arte" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RDB_ENTRY_GAMEPLAY, "Jogabilidade" @@ -924,10 +976,22 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NARRATIVE, "Narrativa" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PACING, + "Ritmo" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PERSPECTIVE, + "Perspectiva" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SETTING, "Definição" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RDB_ENTRY_VEHICULAR, + "Veicular" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER, "Editora" @@ -964,6 +1028,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_ISSUE, "Edição da revista Edge" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH, + "Mês de lançamento" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR, + "Ano de lançamento" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RDB_ENTRY_BBFC_RATING, "Classificação BBFC" @@ -1011,18 +1083,34 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CONFIGURATIONS, "Carregar configuração" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CONFIGURATIONS, + "Carregar configuração existente e substituir os valores atuais." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG, "Guardar configuração atual" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG, + "Substituir o arquivo de configuração atual." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG, "Guardar nova configuração" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SAVE_NEW_CONFIG, + "Salvar a configuração atual em arquivo separado." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RESET_TO_DEFAULT_CONFIG, "Repor os valores padrão" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_RESET_TO_DEFAULT_CONFIG, + "Repor todas as configurações para os valores padrão." + ) /* Main Menu > Help */ @@ -1084,6 +1172,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS, "Áudio" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_SETTINGS, + "Modificar as definições de saída de som." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS, "Entrada" @@ -1124,14 +1216,94 @@ MSG_HASH( MENU_ENUM_SUBLABEL_SAVING_SETTINGS, "Modificar as definições de gravação." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SETTINGS, + "Sincronização na Nuvem" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_SETTINGS, + "Modificar as definições de sincronização na Nuvem." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_ENABLE, + "Ativar sincronização na Nuvem" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_ENABLE, + "Tentativa de sincronizar configurações, sram e estados para um provedor de armazenamento na Nuvem." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_DESTRUCTIVE, + "Sincronia de Nuvem Destrutiva" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SYNC_SAVES, + "Sincronização: Salvas/Estados" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SYNC_CONFIGS, + "Sincronização: Ficheiros de configuração" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SYNC_THUMBS, + "Sincronização: Imagens em Miniaturas" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SYNC_SYSTEM, + "Sincronização: Arquivos do Sistema" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_SYNC_SAVES, + "Quando ativado, salvar/estados serão sincronizados para a nuvem." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_SYNC_CONFIGS, + "Quando ativado, os arquivos de configuração serão sincronizados para a nuvem." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_SYNC_THUMBS, + "Quando ativado, as miniaturas serão sincronizadas para a nuvem. Não é geralmente recomendado, exceto para grandes coleções de imagens em miniatura personalizadas; caso contrário, o transferidor de miniaturas é uma escolha melhor." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_SYNC_SYSTEM, + "Quando ativado, os arquivos do sistema serão sincronizados para a nuvem. Isto pode aumentar significativamente o tempo necessário para sincronizar; usar com cuidado." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_DESTRUCTIVE, + "Quando desativado, os arquivos são movidos para uma pasta de backup antes de serem substituídos ou excluídos." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_DRIVER, + "Sincronização da nuvem Backend" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_DRIVER, + "Qual protocolo de rede de armazenamento na nuvem a usar." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_URL, + "URL de armazenamento da Nuvem" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_URL, + "A URL para a entrada de API aponta para o serviço de armazenamento em nuvem." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_USERNAME, "Utilizador" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_USERNAME, + "Nome de utilizador para a conta de armazenamento na nuvem." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_PASSWORD, "Palavra-passe" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_PASSWORD, + "Senha para a conta de armazenamento na nuvem." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, "Registo" @@ -1144,10 +1316,90 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, "Explorador de ficheiros" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_MENU_FILE_BROWSER_SETTINGS, + "Alterar definições do explorador de ficheiros." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_CONFIG, + "Ficheiros de configuração." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_COMPRESSED_ARCHIVE, + "Arquivo comprimido." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_RECORD_CONFIG, + "A gravar arquivo de configuração." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_CURSOR, + "Arquivo do cursor do banco de dados." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_CONFIG, + "Ficheiros de configuração." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_SHADER_PRESET, + "Arquivo de predefinição de sombreado." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_SHADER, + "Arquivo shader." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_REMAP, + "Remap do arquivo de controle." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_CHEAT, + "Arquivo de cheat." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_OVERLAY, + "Arquivo de Overlay." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_RDB, + "Arquivo de banco de dados." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_FONT, + "Arquivo de fonte TrueType." + ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_PLAIN_FILE, "Ficheiro simples." ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_MOVIE_OPEN, + "Vídeo. Selecione para abrir este arquivo com o reprodutor de vídeo." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_MUSIC_OPEN, + "Vídeo. Selecione para abrir este arquivo com o reprodutor de música." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_IMAGE, + "Arquivo de imagem." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_IMAGE_OPEN_WITH_VIEWER, + "Imagem. Selecione para abrir este arquivo com o reprodutor de imagem." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION, + "Núcleo Libretro. Selecionar isto irá associar este núcleo ao jogo." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_CORE, + "Núcleo Libretro. Selecione este arquivo para que o RetroArch carregue este núcleo." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_FILE_BROWSER_DIRECTORY, + "Diretório. Selecione-o para abrir este diretório." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS, "Aceleração de fotogramas" @@ -1246,12 +1498,44 @@ MSG_HASH( ) /* Core option category placeholders for icons */ +MSG_HASH( + MENU_ENUM_LABEL_VALUE_MAPPING_SETTINGS, + "Mapeamento" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_MEDIA_SETTINGS, "Mídia" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_PERFORMANCE_SETTINGS, + "Desempenho" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SOUND_SETTINGS, + "Som" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SPECS_SETTINGS, + "Especificações" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_STORAGE_SETTINGS, + "Armazenamento" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_SETTINGS, + "Sistema" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMING_SETTINGS, + "Temporizador" + ) #ifdef HAVE_MIST +MSG_HASH( + MENU_ENUM_SUBLABEL_STEAM_SETTINGS, + "Alterar configurações relacionadas à Steam." + ) #endif /* Settings > Drivers */ @@ -1268,10 +1552,22 @@ MSG_HASH( MENU_ENUM_LABEL_HELP_INPUT_DRIVER_UDEV, "O driver udev lê eventos evdev para suporte de teclado. Ele também suporta callback de teclado, ratos e touchpads.\nPor padrão na maioria das distribuições, os nós /dev/input são apenas para root (modo 600). Pode configurar uma regra udev que os torna acessíveis a quem não é root." ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_INPUT_DRIVER_LINUXRAW, + "O driver de entrada linuxraw requer uma TTY. Os eventos do teclado são lidos diretamente do TTY, o que o torna mais simples, mas não tão flexível quanto o udev. \"Mice, etc, não é suportado. Este driver usa a API mais antiga do joystick (/dev/input/js*)." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_INPUT_DRIVER_NO_DETAILS, + "Controlador de entrada. Dependendo do controlador de vídeo, pode forçá-lo a um controlador de entrada diferente." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER, "Comando" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_JOYPAD_DRIVER, + "Controlador para usar. (Requerer reiniciar)" + ) MSG_HASH( MENU_ENUM_LABEL_HELP_JOYPAD_DRIVER_DINPUT, "Controlador de DirectInput." @@ -1309,6 +1605,98 @@ MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_DRIVER, "Driver de vídeo a ser usado." ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_GL1, + "Driver OpenGL 1.x. Versão mínima necessária: OpenGL 1.1. Não suporta shaders. Use drivers OpenGL mais antigos, se possível." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_GL, + "Driver OpenGL 2.x. Este driver permite que núcleos de libretro GL sejam utilizados além de núcleos renderizados por software. Versão mínima necessária: OpenGL 2.0 ou OpenGLES 2.0. Suporta o formato de shader GLSL. Use o driver glcore em vez disso, se possível." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_GL_CORE, + "Driver OpenGL 3.x. Este driver permite que núcleos de libretro GL sejam utilizados além de núcleos renderizados por software. Versão mínima necessária: OpenGL 3.2 ou OpenGLES 3.0. Suporta o formato de shader Slang." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_VULKAN, + "Driver Vulkan. Este driver permite que núcleos de libretro Vulkan sejam utilizados além de núcleos renderizados por software. Versão mínima necessária: Vulkan 1.0. Suporta HDR e shaders Slang." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_SDL1, + "Driver renderizado para o SDL 1.2. Desempenho é considerado como abaixo do ideal. Considere usá-lo apenas como último recurso." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_SDL2, + "Driver renderizado para o SDL 2. Performance para implementações libretro core renderizado é dependente da implementação de SDL da sua plataforma." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_METAL, + "Driver Metal para plataformas Apple. Suporta o formato de shader Slang." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_D3D8, + "Driver Direct3D 8 sem suporte de shader." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_D3D9_CG, + "Driver Direct3D 9 com suporte para o formato antigo de shader Cg." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_D3D9_HLSL, + "Driver Direct3D 9 com suporte para o formato shader HLSL." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_D3D10, + "Driver Direct3D 10 com suporte para o formato de shader Slang." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_D3D11, + "Driver Direct3D 11 com suporte para o formato de shader Slang." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_D3D12, + "Driver Direct3D 12 com suporte para HDR e o formato de shader Slang." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_DISPMANX, + "Driver DispmanX. Usa a API DispmanX para o Videocore IV GPU no Raspberry Pi 0..3. Não há suporte para sobreposição ou shader." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_CACA, + "Driver LibCACA. Produz a saída de caracteres em vez de gráficos. Não recomendado para uso prático." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_EXYNOS, + "Um driver de vídeo Exynos de baixo nível que usa o bloco G2D em Samsung Exynos SoC para operações blit. O desempenho para núcleos renderizados de software deve ser ideal." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_DRM, + "Driver de vídeo DRM simples. Este é um driver de vídeo de baixo nível usando libdrm para escalar hardware usando camadas de GPU." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_SUNXI, + "Um driver de vídeo Sunxi de baixo nível que usa o bloco G2D em Allwinner SoCs." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_WIIU, + "Driver Wii U. Suporta shaders Slang." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_SWITCH, + "Driver Switch. Suporta o formato de shader GLSL." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_VG, + "Driver OpenVG. Usa API de gráficos para vetores 2D acelerados por hardware OpenVG." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_GDI, + "Driver GDI. Usa uma interface legada para Windows. Não recomendado." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_VIDEO_DRIVER_NO_DETAILS, + "Driver de vídeo atual." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER, "Áudio" @@ -1317,6 +1705,18 @@ MSG_HASH( MENU_ENUM_SUBLABEL_AUDIO_DRIVER, "Driver de áudio a ser usado." ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_RSOUND, + "Driver RSound para sistemas de áudio em rede." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_OSS, + "Driver de Sistema de Som Aberto Legado." + ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_ALSA, + "Driver ALSA padrão." + ) MSG_HASH( MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_SL, "Driver OpenSL." @@ -1442,10 +1842,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Inserção de frame preto" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Inserir fotograma(s) preto(s) entre fotogramas. Pode reduzir significativamente a desfocagem de movimento ao emular a varrimento CRT, mas à custa do brilho. Não combinar com Intervalo de troca > 1, subfotogramas, Atraso de fotogramas ou Sincronizar com a frequência exata do conteúdo." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Insere fotograma(s) preto(s) entre os fotogramas para maior nitidez do movimento. Utilize apenas a opção designada para a taxa de atualização do seu ecrã atual. Não deve ser utilizada em taxas de atualização que não sejam múltiplos de 60 Hz, como 144 Hz, 165 Hz, etc. Não combinar com Intervalo de troca > 1, subfotogramas, Atraso de fotogramas, ou Sincronizar com a frequência de fotogramas exata do conteúdo. Deixar o VRR do sistema ligado é aceitável, mas não esta definição. Se [...]" @@ -1526,10 +1922,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Subfotogramas de sombreamento" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insere fotograma(s) de sombreador extra entre fotogramas. Permite que os sombreadores façam efeitos que funcionem a um fps mais elevado do que a taxa de conteúdo atual. Deve ser definido para o Hz do ecrã atual. Não combinar com Intervalo de troca > 1, BFI, Atraso de fotogramas ou Sincronizar com a frequência de fotogramas exata do conteúdo." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Insere fotograma(s) de sombreador extra entre fotogramas para quaisquer efeitos de sombreador possíveis que tenham sido concebidos para serem executados mais rapidamente do que a taxa de conteúdo. Utilize apenas a opção designada para a taxa de atualização do seu ecrã atual. Não deve ser usada em taxas de atualização que não sejam múltiplos de 60 Hz, como 144 Hz, 165 Hz, etc. Não combinar com Intervalo de troca > 1, BFI, Atraso de fotogramas ou Sincronizar com a frequência de fotog[...]" @@ -4835,10 +5227,6 @@ MSG_HASH( MSG_AUTODETECT, "Auto-detetar" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Auto-carregar estado da gravação de" - ) MSG_HASH( MSG_CAPABILITIES, "Funcionalidades" @@ -5555,6 +5943,10 @@ MSG_HASH( MSG_VIEWPORT_SIZE_CALCULATION_FAILED, "Falha no cálculo do tamanho da janela de visualização! Continuarão a serem utilizados dados em bruto. Provavelmente, irão surgir erros ..." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Auto-carregar estado da gravação de" + ) MSG_HASH( MSG_DEVICE_NOT_CONFIGURED, "Não configurado" diff --git a/intl/msg_hash_ru.h b/intl/msg_hash_ru.h index 0b2dbe3ed3d..33ac5391e7b 100644 --- a/intl/msg_hash_ru.h +++ b/intl/msg_hash_ru.h @@ -914,6 +914,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Поддержка Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Поддержка SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Поддержка libusb" @@ -1968,7 +1972,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Вставляет чёрный кадр(ы) между кадрами. Может существенно уменьшить размытие путём эмуляции развёртки ЭЛТ, но снижает яркость. Не включайте одновременно с интервалом обновления > 1, подкадрами, задержкой кадра или синхронизацией с кадровой частотой контента." + "ВНИМАНИЕ: быстрое мерцание на некоторых дисплеях может приводить к остаточному изображению. Используйте с осторожностью // Вставляет между кадрами кадр(ы) чёрного цвета. Может существенно уменьшить размытие, эмулируя развёртку ЭЛТ, но снижает яркость." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2052,7 +2056,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Вставляет между кадрами дополнительный кадр(ы) шейдера. Позволяет шейдерам выводить эффекты с кадровой частотой выше исходной частоты контента. Значение должно соответствовать действующей частоте экрана. Не включайте одновременно с интервалом обновления > 1, вставкой чё[...]" + "ВНИМАНИЕ: быстрое мерцание на некоторых дисплеях может приводить к остаточному изображению. Используйте с осторожностью // Имитирует простую плавающую строку развёртки поверх нескольких подкадров, разделяя экран по вертикали и отрисовывая каждую часть исходя из числа п[...]" ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2128,7 +2132,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Имитирует простую плавающую строку развёртки поверх нескольких подкадров путём деления экрана по вертикали и отрисовки каждой его части исходя из количества подкадров." + "ВНИМАНИЕ: быстрое мерцание на некоторых дисплеях может приводить к остаточному изображению. Используйте с осторожностью // Имитирует простую плавающую строку развёртки поверх нескольких подкадров, разделяя экран по вертикали и отрисовывая каждую часть исходя из числа п[...]" ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2563,7 +2567,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Изменять масштаб только по высоте или по высоте и ширине. Значения в полшага применяются к источникам высокого разрешения." + "Изменять масштаб по высоте, ширине или по высоте и ширине. Значения в полшага применяются только к источникам высокого разрешения." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -4581,7 +4585,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "Разрешить обход возможностей быстрых сохранений в свойствах ядра, позволяя экспериментировать со связанными функциями (забегание, обратная перемотка и т.д.)." + "Разрешает игнорировать возможности быстрых сохранений в описании ядер, позволяя экспериментировать со связанными функциями (забегание, обратная перемотка и т.д.)." ) #ifndef HAVE_DYNAMIC MSG_HASH( @@ -4825,7 +4829,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Автоматически создавать сохранение при закрытии контента. RetroArch будет автоматически загружать данное сохранение, если включена 'Автозагрузка сохранений'." + "Автоматически сохранять состояние при закрытии контента. Данное сохранение будет загружено при запуске, если включена опция 'Автозагрузка сохранения'." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -13431,10 +13435,6 @@ MSG_HASH( MSG_AUTODETECT, "Автоопределение" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Автозагрузка сохранения из" - ) MSG_HASH( MSG_CAPABILITIES, "Возможности" @@ -14527,6 +14527,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Не удалось закрыть лоток виртуального cd-привода." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Автозагрузка сохранения из" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Ошибка автоматической загрузки сохранения состояния из \"%s\"." @@ -15779,7 +15783,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Показывает шрифт нижнего меню. Включите для отображения описания кнопок на нижнем экране. Не включает даты сохранений." + "Показывать шрифт нижнего меню. Включите для отображения описания кнопок на нижнем экране. Не включает даты быстрых сохранений." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, diff --git a/intl/msg_hash_sv.h b/intl/msg_hash_sv.h index 5f996ad58f5..606adb11a6f 100644 --- a/intl/msg_hash_sv.h +++ b/intl/msg_hash_sv.h @@ -702,6 +702,30 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, "SDL 2-stöd" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D8_SUPPORT, + "Direct3D 8-stöd" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D9_SUPPORT, + "Direct3D 9-stöd" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D10_SUPPORT, + "Direct3D 10-stöd" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D11_SUPPORT, + "Direct3D 11-stöd" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D12_SUPPORT, + "Direct3D 12-stöd" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GDI_SUPPORT, + "GDI-stöd" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, "Vulkan-stöd" @@ -782,6 +806,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, "PulseAudio-stöd" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PIPEWIRE_SUPPORT, + "PipeWire-stöd" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COREAUDIO_SUPPORT, "CoreAudio-stöd" @@ -862,6 +890,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2-stöd" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL-stöd" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb-stöd" @@ -3819,10 +3851,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS, "Kringgå kärninformationens funktioner för sparad status" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "Anger om kärninformationens spara status-möjligheter ska ignoreras, vilket gör det möjligt att experimentera med relaterade funktioner (run ahead, spola tillbaka, etc.)." - ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, @@ -4019,10 +4047,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Autospara status" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Sparar din status automatiskt när innehållet avslutas. RetroArch kommer kunna ladda in status filen automatiskt om 'Spara din status automatiskt' är aktiverat." - ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_LOAD, "Laddar automatiskt upp den sparade statusen vid spelstart." @@ -4479,6 +4503,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_MOUSE_SPEED, "Mushastighet" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_MOUSE_HOLD_TO_DRAG, + "Långt tryck för att dra" + ) /* Settings > On-Screen Display > Video Layout */ @@ -4768,6 +4796,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_MENU_SETTINGS, "Ändra inställningar för menyskärmens utseende." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_APPICON_SETTINGS, + "Programikon" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_APPICON_SETTINGS, + "Ändra programikon." + ) #ifdef _3DS MSG_HASH( MENU_ENUM_LABEL_VALUE_MENU_BOTTOM_SETTINGS, @@ -5095,6 +5131,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_PLAYLISTS, "Visa 'Spellistor'" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CONTENT_SHOW_PLAYLISTS, + "Visa spellistor. (Omstart krävs på Ozone/XMB)" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_EXPLORE, "Visa 'Utforska'" @@ -5314,6 +5354,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_ADD_TO_FAVORITES, "Visa alternativet 'Lägg till i favoriter'." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QUICK_MENU_SHOW_ADD_TO_PLAYLIST, + "Visa 'Lägg till i spellista'" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QUICK_MENU_SHOW_SET_CORE_ASSOCIATION, "Visa 'Ställ in kärnassociation'" @@ -5833,6 +5877,10 @@ MSG_HASH( /* Settings > Network */ +MSG_HASH( + MENU_ENUM_LABEL_VALUE_NETPLAY_USE_MITM_SERVER, + "Använd reläserver" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NETPLAY_MITM_SERVER_LOCATION_1, "Nordamerika (östkusten, USA)" @@ -6234,6 +6282,10 @@ MSG_HASH( /* FIXME Not RGUI specific */ MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, "Filhanterare" ) +MSG_HASH( /* FIXME Not RGUI specific */ + MENU_ENUM_SUBLABEL_RGUI_BROWSER_DIRECTORY, + "Ställ in startkatalog för filbläddraren." + ) MSG_HASH( /* FIXME Not RGUI specific */ MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, "Konfigurationsfiler" @@ -6314,10 +6366,18 @@ MSG_HASH( MENU_ENUM_SUBLABEL_OSK_OVERLAY_DIRECTORY, "Tangentbordsöverlager lagras i denna katalog." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_LAYOUT_DIRECTORY, + "Videolayouter" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY, "Skärmdumpar" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SCREENSHOT_DIRECTORY, + "Skärmbilder lagras i denna katalog." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR, "Spelkontrollsprofiler" @@ -7023,6 +7083,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, "Fusk" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CORE_CHEAT_OPTIONS, + "Konfigurera fuskkoder." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, "Skivhantering" @@ -7123,6 +7187,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_CHEAT_FILE_LOAD, "Läs in en fuskfil och ersätt befintliga fusk." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD_APPEND, + "Läs in fuskfil (lägg till)" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS, "Spara fuskfil som" @@ -7457,6 +7525,22 @@ MSG_HASH( /* Quick Menu > Shaders > Remove */ +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_REMOVE_GLOBAL, + "Ta bort globalt förval" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_REMOVE_CORE, + "Ta bort kärnförval" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_REMOVE_PARENT, + "Ta bort förval för innehållskatalog" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_REMOVE_GAME, + "Ta bort spelförval" + ) /* Quick Menu > Shaders > Shader Parameters */ @@ -7487,6 +7571,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_OVERRIDE_FILE_SAVE_AS, "Spara aktuell konfiguration som en ny åsidosättningsfil." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_OVERRIDE_UNLOAD, + "Läs ur åsidosättning" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_OVERRIDE_UNLOAD, + "Nollställ alla alternativ till globala konfigurationsvärden." + ) /* Quick Menu > Achievements */ @@ -7671,6 +7763,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_NETPLAY_SHARE_NONE, "Ingen" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_NETPLAY_SHARE_NO_PREFERENCE, + "Ingen inställning" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_MENU_TICKER_TYPE_BOUNCE, "Studsa vänster/höger" @@ -7887,6 +7983,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS, "Titelskärm" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_LOGOS, + "Innehållslogotyp" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SCROLL_FAST, "Snabb" @@ -8597,6 +8697,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_MATERIALUI_SWITCH_ICONS, "Använd ikoner istället för PÅ/AV-text för att representera 'omkopplare' menyinställningar." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_MATERIALUI_PLAYLIST_ICONS_ENABLE, + "Spellistikoner (omstart krävs)" + ) MSG_HASH( MENU_ENUM_SUBLABEL_MATERIALUI_PLAYLIST_ICONS_ENABLE, "Visa systemspecifika ikoner i spellistorna." @@ -8823,6 +8927,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_MENU_FILE_LOAD_CORE, "&Ladda Kärna..." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_MENU_FILE_UNLOAD_CORE, + "Läs &ur kärna" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_MENU_FILE_EXIT, "&Avsluta" @@ -8859,6 +8967,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SAVE_GEOMETRY, "Kom ihåg fönstergeometri:" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SAVE_LAST_TAB, + "Kom ihåg senaste filk i innehållsbläddraren:" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME, "Tema:" @@ -8939,6 +9051,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_TITLE_SCREEN, "Titelskärm" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_LOGO, + "Logotyp" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_ALL_PLAYLISTS, "Alla spellistor" @@ -9147,6 +9263,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_DELETE, "Radera" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_ADD_ENTRY, + "Lägg till post..." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_ADD_FILES, "Lägg till fil(er)..." @@ -9167,6 +9287,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_SELECT_FOLDER, "Välj mapp" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_FIELD_MULTIPLE, + "" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_PLEASE_FILL_OUT_REQUIRED_FIELDS, "Fyll i alla nödvändiga fält." @@ -9175,6 +9299,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_UPDATE_RETROARCH_NIGHTLY, "Uppdatera RetroArch (nightly)" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_UPDATE_RETROARCH_FINISHED, + "RetroArch uppdaterades. Starta om programmet för att ändringarna ska ta effekt." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_UPDATE_RETROARCH_FAILED, "Uppdateringen misslyckades." @@ -9258,6 +9386,10 @@ MSG_HASH( /* Unsorted */ +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS, + "Inställningar för kärnuppdateraren" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NO_DISK, "Ingen skiva vald" @@ -9405,6 +9537,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_RECORD_ENABLE, "Inspelning-stöd" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RECORD_PATH, + "Spara utdatainspelning som..." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY, + "Spara inspelningar i utdatakatalog" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEAT_MATCH_IDX, "Visa träff #" @@ -9429,6 +9569,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEAT_VIEW_MATCHES, "Visa listan över %u träffar" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_CREATE_OPTION, + "Skapa kod från denna matchning" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_DELETE_OPTION, + "Ta bort denna matchning" + ) MSG_HASH( /* FIXME Still exists in a comment about being removed */ MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY, "Sidfots opacitet" @@ -9501,6 +9649,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION, "Beskrivning" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_START_SEARCH, + "Starta sökning efter ny fuskkod" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEAT_START_SEARCH, + "Starta sökning efter ett nytt fusk. Antal bitar kan ändras." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEAT_CONTINUE_SEARCH, "Fortsätt sök" @@ -9517,10 +9673,22 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_DETAILS, "Fuskdetaljer" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_META_CHEAT_DETAILS, + "Hanterar inställningar för fuskdetaljer." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_SEARCH, "Starta eller fortsätt fusksökning" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_META_CHEAT_SEARCH, + "Starta eller fortsätt en sökning efter fuskkoder." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEAT_NUM_PASSES, + "Öka eller minska antalet fusk." + ) /* Unused (Needs Confirmation) */ @@ -9638,6 +9806,14 @@ MSG_HASH( MSG_NETPLAY_NEED_CONTENT_LOADED, "Innehållet måste läsas in innan netplay kan startas." ) +MSG_HASH( /* FIXME Should be MSG_ */ + MENU_ENUM_LABEL_VALUE_NETPLAY_LOAD_CONTENT_MANUALLY, + "Kunde inte hitta en lämplig kärna eller innehållsfil, läs in manuellt." + ) +MSG_HASH( /* FIXME Should be MSG_ */ + MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER_FALLBACK, + "Din grafikdrivrutin är inte kompatibel med aktuella videodrivrutinen i RetroArch, faller tillbaka på drivrutinen %s. Starta om RetroArch för att ändringen ska ta effekt." + ) MSG_HASH( /* FIXME Should be MSG_ */ MENU_ENUM_LABEL_VALUE_SIDELOAD_CORE_SUCCESS, "Kärninstallation lyckad" @@ -9674,6 +9850,10 @@ MSG_HASH( MSG_NATIVE, "Inbyggd" ) +MSG_HASH( + MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED, + "Okänt netplay-kommando togs emot" + ) MSG_HASH( MSG_GOT_CONNECTION_FROM, "Fick anslutning från: \"%s\"" @@ -9682,6 +9862,10 @@ MSG_HASH( MSG_GOT_CONNECTION_FROM_NAME, "Fick anslutning från: \"%s (%s)\"" ) +MSG_HASH( + MSG_PRIVATE_OR_SHARED_ADDRESS, + "Externt nätverk har en privat eller delad adress. Överväg att använda en reläserver." + ) MSG_HASH( MSG_WAITING_FOR_CLIENT, "Väntar på klient..." @@ -9799,10 +9983,6 @@ MSG_HASH( MSG_AUTODETECT, "Autoupptäck" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Auto ladda sparad status från" - ) MSG_HASH( MSG_CAPABILITIES, "Förmågor" @@ -9891,6 +10071,14 @@ MSG_HASH( MSG_PLAYLIST_MANAGER_PLAYLIST_CLEANED, "Spellista rensad: " ) +MSG_HASH( + MSG_PLAYLIST_MANAGER_REFRESH_INVALID_SYSTEM_NAME, + "Uppdatering misslyckades - ogiltigt/saknat systemnamn: " + ) +MSG_HASH( + MSG_PLAYLIST_MANAGER_REFRESH_INVALID_CORE, + "Uppdatering misslyckades - ogiltig kärna: " + ) MSG_HASH( MSG_ADDED_TO_FAVORITES, "Tillagd i favoriter" @@ -9903,6 +10091,18 @@ MSG_HASH( MSG_ADDED_TO_PLAYLIST, "Lades till i spellistan" ) +MSG_HASH( + MSG_ADD_TO_PLAYLIST_FAILED, + "Misslyckades med att lägga till i spellista: spellistan är full" + ) +MSG_HASH( + MSG_SET_CORE_ASSOCIATION, + "Kärnuppsättning: " + ) +MSG_HASH( + MSG_APPENDED_DISK, + "Lade till skivan på slutet" + ) MSG_HASH( MSG_FAILED_TO_APPEND_DISK, "Misslyckades med att lägga till skivan" @@ -9911,6 +10111,10 @@ MSG_HASH( MSG_APPLICATION_DIR, "Programkatalog" ) +MSG_HASH( + MSG_APPLYING_CHEAT, + "Tillämpar fuskändringar." + ) MSG_HASH( MSG_APPLYING_PATCH, "Tillämpar patch: %s" @@ -9931,14 +10135,26 @@ MSG_HASH( MSG_AUTOCONFIG_FILE_ERROR_SAVING, "Fel vid sparande av handkontrollerprofil." ) +MSG_HASH( + MSG_AUTOSAVE_FAILED, + "Kunde inte initiera automatisk sparning." + ) MSG_HASH( MSG_AUTO_SAVE_STATE_TO, "Spara status automatiskt till" ) +MSG_HASH( + MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT, + "Tar upp kommandogränssnitt på port" + ) MSG_HASH( MSG_COMPILED_AGAINST_API, "Kompilerad mot API" ) +MSG_HASH( + MSG_CONFIG_DIRECTORY_NOT_SET, + "Konfigurationskatalog inte inställd. Kan inte spara ny konfiguration." + ) MSG_HASH( MSG_CONNECTED_TO, "Ansluten till" @@ -9947,6 +10163,10 @@ MSG_HASH( MSG_CONTENT_NETPACKET_CRC32S_DIFFER, "Värden kör ett annat spel." ) +MSG_HASH( + MSG_PING_TOO_HIGH, + "Din pingtid är för hög för denna värd." + ) MSG_HASH( MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES, "Kärnan har inget stöd för Spara Statusar." @@ -9967,6 +10187,10 @@ MSG_HASH( MSG_COULD_NOT_OPEN_DATA_TRACK, "Kunde inte öppna dataspåret" ) +MSG_HASH( + MSG_COULD_NOT_READ_CONTENT_FILE, + "Kunde inte läsa innehållsfilen" + ) MSG_HASH( MSG_DECOMPRESSION_FAILED, "Dekomprimeringen misslyckades." @@ -9983,10 +10207,26 @@ MSG_HASH( MSG_ERROR, "Fel" ) +MSG_HASH( + MSG_ERROR_LIBRETRO_CORE_REQUIRES_CONTENT, + "Libretros kärna kräver innehåll men ingenting tillhandahölls." + ) +MSG_HASH( + MSG_ERROR_LIBRETRO_CORE_REQUIRES_SPECIAL_CONTENT, + "Libretros kärna kräver speciellt innehåll men ingenting tillhandahölls." + ) +MSG_HASH( + MSG_ERROR_LIBRETRO_CORE_REQUIRES_VFS, + "Kärnan har inte stöd för VFS och inläsning från lokal kopia misslyckades" + ) MSG_HASH( MSG_ERROR_PARSING_ARGUMENTS, "Fel vid tolkning av argument." ) +MSG_HASH( + MSG_EXTERNAL_APPLICATION_DIR, + "Extern programkatalog" + ) MSG_HASH( MSG_EXTRACTING, "Extraherar" @@ -10015,6 +10255,10 @@ MSG_HASH( MSG_FAILED_TO_APPLY_SHADER_PRESET, "Misslyckades med att tillämpa shader förinställning:" ) +MSG_HASH( + MSG_FAILED_TO_BIND_SOCKET, + "Misslyckades med att binda uttag." + ) MSG_HASH( MSG_FAILED_TO_CREATE_THE_DIRECTORY, "Misslyckades med att skapa katalogen." @@ -10023,6 +10267,10 @@ MSG_HASH( MSG_FAILED_TO_EXTRACT_CONTENT_FROM_COMPRESSED_FILE, "Misslyckades med att extrahera innehåll från komprimerad fil" ) +MSG_HASH( + MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT, + "Misslyckades med att få smeknamn från klient." + ) MSG_HASH( MSG_FAILED_TO_LOAD, "Misslyckades att ladda" @@ -10147,6 +10395,22 @@ MSG_HASH( MSG_INPUT_CHEAT, "Mata in fusk" ) +MSG_HASH( + MSG_INPUT_CHEAT_FILENAME, + "Filnamn för inmatningsfusk" + ) +MSG_HASH( + MSG_INPUT_PRESET_FILENAME, + "Filnamn för inmatningsförval" + ) +MSG_HASH( + MSG_INPUT_OVERRIDE_FILENAME, + "Filnamn för inmatningsåsidosättning" + ) +MSG_HASH( + MSG_INPUT_REMAP_FILENAME, + "Filnamn för inmatningsommappning" + ) MSG_HASH( MSG_INPUT_RENAME_ENTRY, "Döp om titel" @@ -10187,6 +10451,10 @@ MSG_HASH( MSG_LIBRETRO_FRONTEND, "Frontend för libretro" ) +MSG_HASH( + MSG_LOADED_STATE_FROM_SLOT, + "Läste in tillstånd från plats #%d." + ) MSG_HASH( MSG_LOADING, "Laddar" @@ -10259,6 +10527,10 @@ MSG_HASH( MSG_REDIRECTING_SAVESTATE_TO, "Omdirigerar sparad status till" ) +MSG_HASH( + MSG_REMOVING_TEMPORARY_CONTENT_FILE, + "Tar bort temporär innehållsfil" + ) MSG_HASH( MSG_RESET, "Återställ" @@ -10287,6 +10559,10 @@ MSG_HASH( MSG_SAVED_STATE_TO_SLOT_AUTO, "Sparade status till plats #-1 (Auto)." ) +MSG_HASH( + MSG_SAVED_SUCCESSFULLY_TO, + "Sparades till" + ) MSG_HASH( MSG_SAVING_RAM_TYPE, "Sparar RAM-typ" @@ -10295,6 +10571,10 @@ MSG_HASH( MSG_SCANNING, "Skannar" ) +MSG_HASH( + MSG_SCANNING_OF_DIRECTORY_FINISHED, + "Genomsökning av katalog färdig." + ) MSG_HASH( MSG_SENDING_COMMAND, "Skickar kommando" @@ -10383,6 +10663,10 @@ MSG_HASH( MSG_VERSION_OF_LIBRETRO_API, "Version av libretro API" ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Auto ladda sparad status från" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Misslyckades med att automatiskt ladda in sparad status från \"%s\"." @@ -10411,6 +10695,14 @@ MSG_HASH( MSG_DEVICE_NOT_CONFIGURED_NR, "%s (%u/%u) är inte konfigurerad" ) +MSG_HASH( + MSG_DEVICE_NOT_CONFIGURED_FALLBACK, + "inte konfigurerad, faller tillbaka" + ) +MSG_HASH( + MSG_DEVICE_NOT_CONFIGURED_FALLBACK_NR, + "%s (%u/%u) inte konfigurerad, faller tillbaka" + ) MSG_HASH( MSG_BLUETOOTH_SCAN_COMPLETE, "Bluetooth-skanning slutförd." @@ -10483,14 +10775,58 @@ MSG_HASH( MSG_CHEAT_SEARCH_ADDED_MATCHES_SUCCESS, "Lade till %u matchningar." ) +MSG_HASH( + MSG_CHEAT_SEARCH_ADD_MATCH_FAIL, + "Misslyckades med att skapa kod." + ) +MSG_HASH( + MSG_CHEAT_SEARCH_ADDED_MATCHES_TOO_MANY, + "Slut på plats. Maximalt antal samtidiga fusk är 100." + ) +MSG_HASH( + MSG_CHEAT_ADD_TOP_SUCCESS, + "Nytt fusk lades till överst i listan." + ) +MSG_HASH( + MSG_CHEAT_ADD_BOTTOM_SUCCESS, + "Nytt fusk lades till nederst i listan." + ) MSG_HASH( MSG_CHEAT_DELETE_ALL_SUCCESS, "Alla fusk borttagna." ) +MSG_HASH( + MSG_CHEAT_ADD_BEFORE_SUCCESS, + "Nytt fusk lades till före denna." + ) +MSG_HASH( + MSG_CHEAT_ADD_AFTER_SUCCESS, + "Nytt fusk lades till efter denna." + ) +MSG_HASH( + MSG_CHEAT_COPY_BEFORE_SUCCESS, + "Fusk kopierat till före denna." + ) +MSG_HASH( + MSG_CHEAT_COPY_AFTER_SUCCESS, + "Fusk kopierat till efter denna." + ) MSG_HASH( MSG_CHEAT_DELETE_SUCCESS, "Fusk raderat." ) +MSG_HASH( + MSG_FAILED_TO_SET_DISK, + "Misslyckades med att ställa in skiva." + ) +MSG_HASH( + MSG_FAILED_TO_SET_INITIAL_DISK, + "Misslyckades med att ställa in sista använda skiva." + ) +MSG_HASH( + MSG_FAILED_TO_CONNECT_TO_CLIENT, + "Misslyckades med att ansluta till klient." + ) MSG_HASH( MSG_FAILED_TO_CONNECT_TO_HOST, "Misslyckades med att ansluta till värd." @@ -10503,6 +10839,10 @@ MSG_HASH( MSG_NETPLAY_BANNED, "Du är bannlyst från denna värd." ) +MSG_HASH( + MSG_FAILED_TO_RECEIVE_HEADER_FROM_HOST, + "Misslyckades med att ta bort rubrik från värd." + ) MSG_HASH( MSG_CHEEVOS_LOGGED_IN_AS_USER, "RetroAchievements: Inloggad som \"%s\"." @@ -10595,6 +10935,10 @@ MSG_HASH( MSG_MANUAL_CONTENT_SCAN_IN_PROGRESS, "Skannar: " ) +MSG_HASH( + MSG_MANUAL_CONTENT_SCAN_END, + "Genomsökning färdig: " + ) MSG_HASH( MSG_CORE_BACKUP_SCANNING_CORE, "Skannar kärna: " @@ -10603,6 +10947,10 @@ MSG_HASH( MSG_BACKING_UP_CORE, "Säkerhetskopierar kärna: " ) +MSG_HASH( + MSG_PRUNING_CORE_BACKUP_HISTORY, + "Tar bort föråldrade säkerhetskopior: " + ) MSG_HASH( MSG_RESTORING_CORE, "Återställer kärna: " @@ -10830,6 +11178,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE, "Överklocka CPU" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SWITCH_CPU_PROFILE, + "Överklocka Switch CPUn." + ) #endif #ifdef HAVE_LAKKA MSG_HASH( @@ -10840,6 +11192,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES, "Tjänster" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SERVICES_SETTINGS, + "Hantera tjänster på operativsystemsnivå." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SAMBA_ENABLE, + "Dela nätverksmappar genom SMB-protokollet." + ) MSG_HASH( MENU_ENUM_SUBLABEL_SSH_ENABLE, "Använd SSH för att komma åt kommandoraden utifrån." @@ -10877,6 +11237,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SWITCH_OC_ENABLE, "Överklocka CPU" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SWITCH_OC_ENABLE, + "Aktivera CPU-överklockningsfrekvenser" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SWITCH_CEC_ENABLE, "CEC-stöd" @@ -10885,6 +11249,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_SWITCH_CEC_ENABLE, "Aktivera CPU-handskakning med TV vid dockning" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLUETOOTH_ERTM_DISABLE, + "Inaktivera Bluetooth ERTM" + ) #endif MSG_HASH( MSG_LOCALAP_SWITCHING_OFF, @@ -10934,6 +11302,10 @@ MSG_HASH( #ifdef UDEV_TOUCH_SUPPORT #endif #ifdef HAVE_ODROIDGO2 +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_RGA_SCALING, + "RGA-skalning" + ) #else #endif #ifdef _3DS diff --git a/intl/msg_hash_tr.h b/intl/msg_hash_tr.h index 3e4d310aab7..6e77dde53f6 100644 --- a/intl/msg_hash_tr.h +++ b/intl/msg_hash_tr.h @@ -906,6 +906,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2 Desteği" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL Desteği" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb Desteği" @@ -1952,7 +1956,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Karelerin arasına siyah kareler ekleyin. CRT tarama çıkışını taklit ederek hareket bulanıklığını büyük ölçüde azaltabilir, ancak parlaklık azalabilir. Değiştirme Aralığı > 1, alt-kareler, Kare Gecikmesi veya Tam İçerik Kare Hızına Eşitleme ile birleştirmeyin." + "UYARI: Hızlı titreme bazı ekranlarda görüntünün kalıcı olmasına neden olabilir. Kullanım riski size aittir // Karelerin arasına siyah kareler ekleyin. CRT tarama çıkışını taklit ederek hareket bulanıklığını büyük ölçüde azaltabilir, ancak parlaklık pahasına." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2036,7 +2040,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Kareler arasına fazladan gölgelendirici kareler ekleyin. Gölgelendiricilerin gerçek içerik hızından daha yüksek bir fps hızında çalışan efektler oluşturmasına olanak tanır. Mevcut ekran Hz değerine ayarlanmalıdır. Takas Aralığı > 1, BFI, Kare Gecikmesi veya Tam İçerik Kare Hızına Eşitle ile birleştirmeyin." + "UYARI: Hızlı titreme bazı ekranlarda görüntünün kalıcı olmasına neden olabilir. Kullanım riski size aittir // Ekranı dikey olarak bölerek ve ekranın her bir bölümünü kaç alt kare olduğuna göre işleyerek birden fazla alt kare üzerinde temel bir dönen tarama çizgisini taklit eder." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2112,7 +2116,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Ekranı dikey olarak böler ve ekranın her bir bölümünü kaç alt kare olduğuna göre işleyerek birden fazla alt kare üzerinde temel bir dönen tarama çizgisini taklit eder." + "UYARI: Hızlı titreme bazı ekranlarda görüntünün kalıcı olmasına neden olabilir. Kullanım riski size aittir // Ekranı dikey olarak bölerek ve ekranın her bir bölümünü kaç alt kare olduğuna göre işleyerek birden fazla alt kare üzerinde temel bir dönen tarama çizgisini taklit eder." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2539,7 +2543,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Yalnızca yüksekliği veya hem yüksekliği hem de genişliği ölçeklendirin. Yüksek çözünürlüklü kaynaklar için yarım adımlar geçerlidir." + "Yüksekliği veya genişliği ya da hem yüksekliği hem de genişliği ölçeklendirin. Yarım adımlar yalnızca yüksek çözünürlüklü kaynaklara uygulanır." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -4801,7 +4805,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "İçerik kapatıldığında otomatik olarak durum kaydı oluşturur. 'Durumu Otomatik Olarak Yükle' etkinse RetroArch bu durum kaydını otomatik olarak yükler." + "İçerik kapatıldığında otomatik durum kaydı oluşturun. 'Otomatik Durum Yükleme' etkinse, bu durum kaydı başlangıçta yüklenir." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -5362,6 +5366,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY, "Örtüşme hassasiyetini ayarlayın. 8 yönlü simetri için %100'e ayarlayın." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "Analog Yeniden Yönlendirme Bölgesi" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "Analog çubuk girişi, bu bölgede basıldığında ilk dokunuşa göre olacaktır." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_OVERLAY, "Kaplama" @@ -13471,10 +13483,6 @@ MSG_HASH( MSG_AUTODETECT, "Otomatik algıla" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Durum kaydından otomatik yükle" - ) MSG_HASH( MSG_CAPABILITIES, "Yetenekler" @@ -14567,6 +14575,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Sanal disk tepsisi kapatılamadı." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Durum kaydından otomatik yükle" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "\"%s\" konumundan durum kaydı otomatik olarak yüklenemedi." diff --git a/intl/msg_hash_uk.h b/intl/msg_hash_uk.h index 2e48aadc601..f2e91997ff0 100644 --- a/intl/msg_hash_uk.h +++ b/intl/msg_hash_uk.h @@ -914,6 +914,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Підтримка Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Підтримка SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Підтримка libusb" @@ -1968,7 +1972,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Вставте чорні рамки між кадрами. Може значно зменшити розмиття руху, імітуючи розгортку ЕПТ, але ціною втрати яскравості. Не поєднуйте з інтервалом заміни > 1, під кадрами, затримкою кадру або синхронізацією до точної частоти кадрів контенту." + "УВАГА: Швидке мерехтіння може призвести до збереження зображення на деяких дисплеях. Використовуйте на свій страх і ризик // вставте чорний фреймворк між кадрами. Можна значно зменшити розмиття руху шляхом емуляції сканування CRT, але це зменшило яскравість." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2052,7 +2056,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Вставляти додаткові кадри шейдерів між кадрами. Дозволяє шейдерам виконувати ефекти з вищою частотою кадрів, ніж реальна частота вмісту. Має бути налаштований на поточну частоту екрана. Не поєднуйте з інтервалом заміни > 1, BFI, затримкою кадру або синхронізацією до точної ч[...]" + "ПОПЕРЕДЖЕННЯ: Швидке мерехтіння може призвести до збереження зображень на деяких дисплеях. Використовуйте на свій страх і ризик // Симулює базовий рухомий стовпчик протягом декількох підкадрів шляхом ділення екрану вверх і рендерингу кожної частини екрана відповідно до [...]" ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2128,7 +2132,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Імітує базову рухливу розгортку на кількох підкадрах, розділяючи екран вертикально та відтворюючи кожну частину екрана відповідно до кількості підкадрів." + "ПОПЕРЕДЖЕННЯ: Швидке мерехтіння може призвести до збереження зображень на деяких дисплеях. Використовуйте на свій страх і ризик // Симулює базовий рухомий стовпчик протягом декількох підкадрів шляхом ділення екрану вверх і рендерингу кожної частини екрана відповідно до [...]" ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2563,7 +2567,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, - "Масштабувати лише висоту, або висоту та ширину. Половинні кроки застосовуються до джерел високої роздільної здатності." + "Масштабувати або висоту, або висоту, і ширину. Половина кроків застосовуються лише до джерел високої роздільної здатності." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, @@ -4569,7 +4573,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "Визначає, чи ігнорувати можливості резервного копіювання інформаційних заощаджень, дозволяючи експериментувати з пов'язаними особами (виконуються наперед, перемотування тощо)." + "Визначає, чи ігнорувати основні інформаційні можливості збереження штатних можливостей, дозволяючи експериментувати з пов'язаними функціями (виконуючи попереду, перемотування тощо)." ) #ifndef HAVE_DYNAMIC MSG_HASH( @@ -4813,7 +4817,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Автоматично робити стан збереження при закритому вмісті. РетроАрка автоматично завантажить цей стан збереження, якщо увімкнуто \"Завантажити стан\"." + "Автоматично відтворювати стан збереження при закритті вмісту. При ввімкнені автозавантаження - збережений стану." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -13491,10 +13495,6 @@ MSG_HASH( MSG_AUTODETECT, "Автовизначення" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Автоматичне завантаження стану збереження" - ) MSG_HASH( MSG_CAPABILITIES, "Можливості" @@ -14587,6 +14587,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Не вдалося закрити віртуальний диск лотку." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Автоматичне завантаження стану збереження" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Автозавантаження стану збереження з \"%s\" не вдалося." @@ -15827,7 +15831,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Відображення шрифту в нижньому меню. Увімкніть відображення описів кнопок на нижньому екрані. Виключає дату збереження." + "Виводити шрифт нижнього меню. Увімкніть для відображення описів кнопок на нижньому екрані. Це не впливає на дату збереження." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 22555d8ba33..98922cc165f 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -918,6 +918,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2 Support" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL Support" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb Support" @@ -2004,7 +2008,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Insert black frame(s) between frames. Can greatly reduce motion blur by emulating CRT scan out, but at cost of brightness. Do not combine with Swap Interval > 1, sub-frames, Frame Delay, or Sync to Exact Content Framerate." + "WARNING: Rapid flickering may cause image persistence on some displays. Use at your own risk // Insert black frame(s) between frames. Can greatly reduce motion blur by emulating CRT scan out, but at cost of brightness." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2088,7 +2092,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insert extra shader frame(s) between frames. Allows shaders to do effects that run at a higher fps than actual content rate. Should be set to current screen Hz. Do not combine with Swap Interval > 1, BFI, Frame Delay, or Sync to Exact Content Framerate." + "WARNING: Rapid flickering may cause image persistence on some displays. Use at your own risk // Simulates a basic rolling scanline over multiple sub-frames by dividing the screen up vertically and rendering each part of the screen according to how many sub-frames there are." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2164,7 +2168,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simulates a basic rolling scanline over multiple sub-frames by dividing the screen up vertically and rendering each part of the screen according to how many sub-frames there are." + "WARNING: Rapid flickering may cause image persistence on some displays. Use at your own risk // Simulates a basic rolling scanline over multiple sub-frames by dividing the screen up vertically and rendering each part of the screen according to how many sub-frames there are." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -4625,7 +4629,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, - "Specifies whether to ignore core info savestate capabilities, allowing to experiment with related features (run ahead, rewind, etc)." + "Specifies whether to ignore core info save state capabilities, allowing to experiment with related features (run ahead, rewind, etc)." ) #ifndef HAVE_DYNAMIC MSG_HASH( @@ -4869,7 +4873,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, - "Automatically make a save state when content is closed. RetroArch will automatically load this save state if 'Load State Automatically' is enabled." + "Automatically make a save state when content is closed. This save state is loaded on startup if 'Auto Load State' is enabled." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -14171,10 +14175,6 @@ MSG_HASH( MSG_AUTODETECT, "Autodetect" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Auto-loading save state from" - ) MSG_HASH( MSG_CAPABILITIES, "Capabilities" @@ -15271,6 +15271,10 @@ MSG_HASH( MSG_VIRTUAL_DISK_TRAY_CLOSE, "Failed to close virtual disc tray." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Auto-loading save state from" + ) MSG_HASH( MSG_AUTOLOADING_SAVESTATE_FAILED, "Auto-loading save state from \"%s\" failed." @@ -16555,7 +16559,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, - "Display bottom menu font. Enable to display button descriptions on the bottom screen. This excludes the savestate date." + "Display bottom menu font. Enable to display button descriptions on the bottom screen. This excludes the save state date." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, diff --git a/intl/msg_hash_vn.h b/intl/msg_hash_vn.h index 4f64a0f7b59..a39e17e9de6 100644 --- a/intl/msg_hash_vn.h +++ b/intl/msg_hash_vn.h @@ -2515,10 +2515,6 @@ MSG_HASH( MSG_AUTODETECT, "Tự động phát hiện" ) -MSG_HASH( - MSG_AUTOLOADING_SAVESTATE_FROM, - "Đang tự đông tải savestate từ" - ) MSG_HASH( MSG_CONNECTING_TO_NETPLAY_HOST, "Đang kết nối vào máy chủ netplay" @@ -2631,6 +2627,10 @@ MSG_HASH( MSG_VIEWPORT_SIZE_CALCULATION_FAILED, "Viewport size calculation failed! Will continue using raw data. This will probably not work right ..." ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Đang tự đông tải savestate từ" + ) /* Lakka */ diff --git a/intl/progress.h b/intl/progress.h index d48bb1ce413..10000ddf66f 100644 --- a/intl/progress.h +++ b/intl/progress.h @@ -19,7 +19,7 @@ #define LANGUAGE_PROGRESS_CATALAN_APPROVED 0 /* Czech */ -#define LANGUAGE_PROGRESS_CZECH_TRANSLATED 94 +#define LANGUAGE_PROGRESS_CZECH_TRANSLATED 93 #define LANGUAGE_PROGRESS_CZECH_APPROVED 0 /* Welsh */ @@ -39,11 +39,11 @@ #define LANGUAGE_PROGRESS_GREEK_APPROVED 0 /* English, United Kingdom */ -#define LANGUAGE_PROGRESS_ENGLISH_UNITED_KINGDOM_TRANSLATED 99 +#define LANGUAGE_PROGRESS_ENGLISH_UNITED_KINGDOM_TRANSLATED 98 #define LANGUAGE_PROGRESS_ENGLISH_UNITED_KINGDOM_APPROVED 0 /* Esperanto */ -#define LANGUAGE_PROGRESS_ESPERANTO_TRANSLATED 3 +#define LANGUAGE_PROGRESS_ESPERANTO_TRANSLATED 2 #define LANGUAGE_PROGRESS_ESPERANTO_APPROVED 0 /* Spanish */ @@ -75,7 +75,7 @@ #define LANGUAGE_PROGRESS_CROATIAN_APPROVED 0 /* Hungarian */ -#define LANGUAGE_PROGRESS_HUNGARIAN_TRANSLATED 99 +#define LANGUAGE_PROGRESS_HUNGARIAN_TRANSLATED 100 #define LANGUAGE_PROGRESS_HUNGARIAN_APPROVED 0 /* Indonesian */ @@ -87,15 +87,15 @@ #define LANGUAGE_PROGRESS_ITALIAN_APPROVED 0 /* Japanese */ -#define LANGUAGE_PROGRESS_JAPANESE_TRANSLATED 98 +#define LANGUAGE_PROGRESS_JAPANESE_TRANSLATED 97 #define LANGUAGE_PROGRESS_JAPANESE_APPROVED 0 /* Korean */ -#define LANGUAGE_PROGRESS_KOREAN_TRANSLATED 99 +#define LANGUAGE_PROGRESS_KOREAN_TRANSLATED 100 #define LANGUAGE_PROGRESS_KOREAN_APPROVED 0 /* Dutch */ -#define LANGUAGE_PROGRESS_DUTCH_TRANSLATED 38 +#define LANGUAGE_PROGRESS_DUTCH_TRANSLATED 37 #define LANGUAGE_PROGRESS_DUTCH_APPROVED 0 /* Norwegian */ @@ -107,7 +107,7 @@ #define LANGUAGE_PROGRESS_ODIA_APPROVED 0 /* Polish */ -#define LANGUAGE_PROGRESS_POLISH_TRANSLATED 79 +#define LANGUAGE_PROGRESS_POLISH_TRANSLATED 78 #define LANGUAGE_PROGRESS_POLISH_APPROVED 22 /* Portuguese, Brazilian */ @@ -115,7 +115,7 @@ #define LANGUAGE_PROGRESS_PORTUGUESE_BRAZILIAN_APPROVED 9 /* Portuguese */ -#define LANGUAGE_PROGRESS_PORTUGUESE_TRANSLATED 26 +#define LANGUAGE_PROGRESS_PORTUGUESE_TRANSLATED 29 #define LANGUAGE_PROGRESS_PORTUGUESE_APPROVED 0 /* Russian */ @@ -131,12 +131,12 @@ #define LANGUAGE_PROGRESS_SERBIAN_LATIN_APPROVED 0 /* Swedish */ -#define LANGUAGE_PROGRESS_SWEDISH_TRANSLATED 56 +#define LANGUAGE_PROGRESS_SWEDISH_TRANSLATED 57 #define LANGUAGE_PROGRESS_SWEDISH_APPROVED 47 /* Turkish */ -#define LANGUAGE_PROGRESS_TURKISH_TRANSLATED 99 -#define LANGUAGE_PROGRESS_TURKISH_APPROVED 99 +#define LANGUAGE_PROGRESS_TURKISH_TRANSLATED 100 +#define LANGUAGE_PROGRESS_TURKISH_APPROVED 100 /* Tatar */ #define LANGUAGE_PROGRESS_TATAR_TRANSLATED 0 @@ -155,10 +155,10 @@ #define LANGUAGE_PROGRESS_VIETNAMESE_APPROVED 0 /* Chinese Simplified */ -#define LANGUAGE_PROGRESS_CHINESE_SIMPLIFIED_TRANSLATED 97 +#define LANGUAGE_PROGRESS_CHINESE_SIMPLIFIED_TRANSLATED 96 #define LANGUAGE_PROGRESS_CHINESE_SIMPLIFIED_APPROVED 43 /* Chinese Traditional */ -#define LANGUAGE_PROGRESS_CHINESE_TRADITIONAL_TRANSLATED 94 +#define LANGUAGE_PROGRESS_CHINESE_TRADITIONAL_TRANSLATED 93 #define LANGUAGE_PROGRESS_CHINESE_TRADITIONAL_APPROVED 74 diff --git a/libretro-common/cdrom/cdrom.c b/libretro-common/cdrom/cdrom.c index a1de1a15c8f..c507eadc0f7 100644 --- a/libretro-common/cdrom/cdrom.c +++ b/libretro-common/cdrom/cdrom.c @@ -1000,12 +1000,11 @@ int cdrom_set_read_speed(libretro_vfs_implementation_file *stream, unsigned spee int cdrom_write_cue(libretro_vfs_implementation_file *stream, char **out_buf, size_t *out_len, char cdrom_drive, unsigned char *num_tracks, cdrom_toc_t *toc) { + int i; unsigned char buf[2352] = {0}; unsigned short data_len = 0; - size_t len = 0; - size_t pos = 0; + size_t _len = 0, pos = 0; int rv = 0; - int i; if (!out_buf || !out_len || !num_tracks || !toc) { @@ -1052,10 +1051,10 @@ int cdrom_write_cue(libretro_vfs_implementation_file *stream, char **out_buf, si return 1; } - len = CDROM_CUE_TRACK_BYTES * (*num_tracks); + _len = CDROM_CUE_TRACK_BYTES * (*num_tracks); toc->num_tracks = *num_tracks; - *out_buf = (char*)calloc(1, len); - *out_len = len; + *out_buf = (char*)calloc(1, _len); + *out_len = _len; for (i = 0; i < (data_len - 2) / 11; i++) { @@ -1104,11 +1103,11 @@ int cdrom_write_cue(libretro_vfs_implementation_file *stream, char **out_buf, si track_type = "MODE2/2352"; #if defined(_WIN32) && !defined(_XBOX) - pos += snprintf(*out_buf + pos, len - pos, "FILE \"cdrom://%c:/drive-track%02d.bin\" BINARY\n", cdrom_drive, point); + pos += snprintf(*out_buf + pos, _len - pos, "FILE \"cdrom://%c:/drive-track%02d.bin\" BINARY\n", cdrom_drive, point); #else - pos += snprintf(*out_buf + pos, len - pos, "FILE \"cdrom://drive%c-track%02d.bin\" BINARY\n", cdrom_drive, point); + pos += snprintf(*out_buf + pos, _len - pos, "FILE \"cdrom://drive%c-track%02d.bin\" BINARY\n", cdrom_drive, point); #endif - pos += snprintf(*out_buf + pos, len - pos, " TRACK %02d %s\n", point, track_type); + pos += snprintf(*out_buf + pos, _len - pos, " TRACK %02d %s\n", point, track_type); { unsigned pregap_lba_len = toc->track[point - 1].lba - toc->track[point - 1].lba_start; @@ -1121,11 +1120,11 @@ int cdrom_write_cue(libretro_vfs_implementation_file *stream, char **out_buf, si cdrom_lba_to_msf(pregap_lba_len, &min, &sec, &frame); - pos += snprintf(*out_buf + pos, len - pos, " INDEX 00 00:00:00\n"); - pos += snprintf(*out_buf + pos, len - pos, " INDEX 01 %02u:%02u:%02u\n", (unsigned)min, (unsigned)sec, (unsigned)frame); + pos += snprintf(*out_buf + pos, _len - pos, " INDEX 00 00:00:00\n"); + pos += snprintf(*out_buf + pos, _len - pos, " INDEX 01 %02u:%02u:%02u\n", (unsigned)min, (unsigned)sec, (unsigned)frame); } else - pos += snprintf(*out_buf + pos, len - pos, " INDEX 01 00:00:00\n"); + pos += snprintf(*out_buf + pos, _len - pos, " INDEX 01 00:00:00\n"); } } } diff --git a/libretro-common/compat/compat_posix_string.c b/libretro-common/compat/compat_posix_string.c index 6a2f07ee4b3..41c8d0a2fe4 100644 --- a/libretro-common/compat/compat_posix_string.c +++ b/libretro-common/compat/compat_posix_string.c @@ -56,12 +56,11 @@ int retro_strcasecmp__(const char *a, const char *b) char *retro_strdup__(const char *orig) { - size_t len = strlen(orig) + 1; - char *ret = (char*)malloc(len); + size_t _len = strlen(orig) + 1; + char *ret = (char*)malloc(_len); if (!ret) return NULL; - - strlcpy(ret, orig, len); + strlcpy(ret, orig, _len); return ret; } diff --git a/libretro-common/compat/compat_strl.c b/libretro-common/compat/compat_strl.c index 3a6392cb127..d11a8c6699a 100644 --- a/libretro-common/compat/compat_strl.c +++ b/libretro-common/compat/compat_strl.c @@ -28,35 +28,28 @@ /* Implementation of strlcpy()/strlcat() based on OpenBSD. */ #ifndef __MACH__ - -size_t strlcpy(char *dest, const char *source, size_t size) +size_t strlcpy(char *s, const char *source, size_t len) { - size_t src_size = 0; - size_t n = size; - - if (n) - while (--n && (*dest++ = *source++)) src_size++; - - if (!n) + size_t _len = len; + size_t __len = 0; + if (_len) + while (--_len && (*s++ = *source++)) __len++; + if (!_len) { - if (size) *dest = '\0'; - while (*source++) src_size++; + if (len) *s = '\0'; + while (*source++) __len++; } - - return src_size; + return __len; } -size_t strlcat(char *dest, const char *source, size_t size) +size_t strlcat(char *s, const char *source, size_t len) { - size_t len = strlen(dest); - - dest += len; - - if (len > size) - size = 0; + size_t _len = strlen(s); + s += _len; + if (_len > len) + len = 0; else - size -= len; - - return len + strlcpy(dest, source, size); + len -= _len; + return _len + strlcpy(s, source, len); } #endif diff --git a/libretro-common/file/archive_file.c b/libretro-common/file/archive_file.c index 4df2ce51cc6..ad90ee68628 100644 --- a/libretro-common/file/archive_file.c +++ b/libretro-common/file/archive_file.c @@ -50,7 +50,7 @@ static int file_archive_get_file_list_cb( struct archive_extract_userdata *userdata) { union string_list_elem_attr attr; - attr.i = 0; + attr.i = RARCH_COMPRESSED_FILE_IN_ARCHIVE; if (valid_exts) { @@ -80,8 +80,6 @@ static int file_archive_get_file_list_cb( string_list_deinitialize(&ext_list); return -1; } - - attr.i = RARCH_COMPRESSED_FILE_IN_ARCHIVE; } string_list_deinitialize(&ext_list); @@ -528,7 +526,7 @@ static struct string_list *file_archive_filename_split(const char *path) */ int file_archive_compressed_read( const char * path, void **buf, - const char* optional_filename, int64_t *length) + const char* optional_filename, int64_t *len) { const struct file_archive_file_backend *backend = NULL; @@ -542,7 +540,7 @@ int file_archive_compressed_read( */ if (optional_filename && path_is_valid(optional_filename)) { - *length = 0; + *len = 0; return 1; } @@ -557,17 +555,17 @@ int file_archive_compressed_read( { /* could not extract string and substring. */ string_list_free(str_list); - *length = 0; + *len = 0; return 0; } backend = file_archive_get_file_backend(str_list->elems[0].data); - *length = backend->compressed_file_read(str_list->elems[0].data, + *len = backend->compressed_file_read(str_list->elems[0].data, str_list->elems[1].data, buf, optional_filename); string_list_free(str_list); - if (*length != -1) + if (*len != -1) return 1; return 0; diff --git a/libretro-common/file/archive_file_7z.c b/libretro-common/file/archive_file_7z.c index cb561062a37..289ec25f1c0 100644 --- a/libretro-common/file/archive_file_7z.c +++ b/libretro-common/file/archive_file_7z.c @@ -414,7 +414,6 @@ static int sevenzip_parse_file_init(file_archive_transfer_t *state, static int sevenzip_parse_file_iterate_step_internal( struct sevenzip_context_t *sevenzip_context, char *s, - size_t len, const uint8_t **cdata, unsigned *cmode, uint32_t *size, @@ -425,7 +424,7 @@ static int sevenzip_parse_file_iterate_step_internal( { if (sevenzip_context->parse_index < sevenzip_context->db.NumFiles) { - size_t len = SzArEx_GetFileNameUtf16(&sevenzip_context->db, + size_t _len = SzArEx_GetFileNameUtf16(&sevenzip_context->db, sevenzip_context->parse_index, NULL); uint64_t compressed_size = 0; @@ -437,21 +436,24 @@ static int sevenzip_parse_file_iterate_step_internal( sevenzip_context->packIndex++; } - if ( (len < PATH_MAX_LENGTH) + if ( (_len < PATH_MAX_LENGTH) && !SzArEx_IsDir(&sevenzip_context->db, sevenzip_context->parse_index)) { + char infile[PATH_MAX_LENGTH]; SRes res = SZ_ERROR_FAIL; - uint16_t *temp = (uint16_t*)malloc(len * sizeof(uint16_t)); + uint16_t *temp = (uint16_t*)malloc(_len * sizeof(uint16_t)); if (!temp) return -1; + infile[0] = '\0'; + SzArEx_GetFileNameUtf16(&sevenzip_context->db, sevenzip_context->parse_index, temp); if (temp) { - res = utf16_to_char_string(temp, s, len) + res = utf16_to_char_string(temp, infile, sizeof(infile)) ? SZ_OK : SZ_ERROR_FAIL; free(temp); } @@ -459,6 +461,8 @@ static int sevenzip_parse_file_iterate_step_internal( if (res != SZ_OK) return -1; + strlcpy(s, infile, PATH_MAX_LENGTH); + *cmode = 0; /* unused for 7zip */ *checksum = sevenzip_context->db.CRCs.Vals[sevenzip_context->parse_index]; *size = (uint32_t)SzArEx_GetFileSize(&sevenzip_context->db, sevenzip_context->parse_index); @@ -492,7 +496,6 @@ static int sevenzip_parse_file_iterate_step(void *context, ret = sevenzip_parse_file_iterate_step_internal(sevenzip_context, userdata->current_file_path, - sizeof(userdata->current_file_path), &cdata, &cmode, &size, &csize, &checksum, &payload, userdata); @@ -512,9 +515,9 @@ static int sevenzip_parse_file_iterate_step(void *context, } static uint32_t sevenzip_stream_crc32_calculate(uint32_t crc, - const uint8_t *data, size_t length) + const uint8_t *data, size_t len) { - return encoding_crc32(crc, data, length); + return encoding_crc32(crc, data, len); } const struct file_archive_file_backend sevenzip_backend = { diff --git a/libretro-common/file/archive_file_zlib.c b/libretro-common/file/archive_file_zlib.c index d82af9aea4f..352650dd21f 100644 --- a/libretro-common/file/archive_file_zlib.c +++ b/libretro-common/file/archive_file_zlib.c @@ -256,9 +256,9 @@ static int zlib_stream_decompress_data_to_file_iterate( } static uint32_t zlib_stream_crc32_calculate(uint32_t crc, - const uint8_t *data, size_t length) + const uint8_t *data, size_t len) { - return encoding_crc32(crc, data, length); + return encoding_crc32(crc, data, len); } static bool zip_file_decompressed_handle( diff --git a/libretro-common/file/file_path.c b/libretro-common/file/file_path.c index 92c88032743..897d97c619d 100644 --- a/libretro-common/file/file_path.c +++ b/libretro-common/file/file_path.c @@ -597,21 +597,18 @@ size_t path_basedir(char *s) char *last_slash = NULL; if (!s || s[0] == '\0' || s[1] == '\0') return (s && s[0] != '\0') ? 1 : 0; - slash = strrchr(s, '/'); - backslash = strrchr(s, '\\'); - last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; + slash = strrchr(s, '/'); + backslash = strrchr(s, '\\'); + last_slash = (!slash || (backslash > slash)) ? (char*)backslash : (char*)slash; if (last_slash) { - last_slash[1] = '\0'; + last_slash[1] = '\0'; return last_slash + 1 - s; } - else - { - s[0] = '.'; - s[1] = PATH_DEFAULT_SLASH_C(); - s[2] = '\0'; - return 2; - } + s[0] = '.'; + s[1] = PATH_DEFAULT_SLASH_C(); + s[2] = '\0'; + return 2; } /** @@ -1414,11 +1411,11 @@ size_t fill_pathname_application_path(char *s, size_t len) } #elif defined(__QNX__) char *buff = malloc(len); - size_t rv = 0; + size_t _len = 0; if (_cmdname(buff)) - rv = strlcpy(s, buff, len); + _len = strlcpy(s, buff, len); free(buff); - return rv; + return _len; #else size_t i; static const char *exts[] = { "exe", "file", "path/a.out" }; @@ -1446,13 +1443,13 @@ size_t fill_pathname_application_path(char *s, size_t len) return 0; } -void fill_pathname_application_dir(char *s, size_t len) +size_t fill_pathname_application_dir(char *s, size_t len) { #ifdef __WINRT__ - strlcpy(s, uwp_dir_install, len); + return strlcpy(s, uwp_dir_install, len); #else fill_pathname_application_path(s, len); - path_basedir(s); + return path_basedir(s); #endif } diff --git a/libretro-common/file/nbio/nbio_unixmmap.c b/libretro-common/file/nbio/nbio_unixmmap.c index 1a94238beb7..7a9856e72c5 100644 --- a/libretro-common/file/nbio/nbio_unixmmap.c +++ b/libretro-common/file/nbio/nbio_unixmmap.c @@ -66,16 +66,16 @@ static void *nbio_mmap_unix_open(const char * filename, unsigned mode) static const int o_flags[] = { O_RDONLY, O_RDWR|O_CREAT|O_TRUNC, O_RDWR, O_RDONLY, O_RDWR|O_CREAT|O_TRUNC }; static const int map_flags[] = { PROT_READ, PROT_WRITE|PROT_READ, PROT_WRITE|PROT_READ, PROT_READ, PROT_WRITE|PROT_READ }; - size_t len; + size_t _len; void* ptr = NULL; struct nbio_mmap_unix_t* handle = NULL; int fd = open(filename, o_flags[mode]|O_CLOEXEC, 0644); if (fd < 0) return NULL; - len = lseek(fd, 0, SEEK_END); - if (len != 0) - ptr = mmap(NULL, len, map_flags[mode], MAP_SHARED, fd, 0); + _len = lseek(fd, 0, SEEK_END); + if (_len != 0) + ptr = mmap(NULL, _len, map_flags[mode], MAP_SHARED, fd, 0); if (ptr == MAP_FAILED) { @@ -86,7 +86,7 @@ static void *nbio_mmap_unix_open(const char * filename, unsigned mode) handle = malloc(sizeof(struct nbio_mmap_unix_t)); handle->fd = fd; handle->map_flags = map_flags[mode]; - handle->len = len; + handle->len = _len; handle->ptr = ptr; return handle; } @@ -132,7 +132,7 @@ static void nbio_mmap_unix_resize(void *data, size_t len) abort(); } -static void *nbio_mmap_unix_get_ptr(void *data, size_t* len) +static void *nbio_mmap_unix_get_ptr(void *data, size_t *len) { struct nbio_mmap_unix_t* handle = (struct nbio_mmap_unix_t*)data; if (!handle) diff --git a/libretro-common/formats/json/rjson.c b/libretro-common/formats/json/rjson.c index 07fcf258142..3f99178984e 100644 --- a/libretro-common/formats/json/rjson.c +++ b/libretro-common/formats/json/rjson.c @@ -163,14 +163,15 @@ static INLINE bool _rjson_pushchar(rjson_t *json, _rjson_char_t c) static INLINE bool _rjson_pushchars(rjson_t *json, const unsigned char *from, const unsigned char *to) { - size_t len = json->string_len, new_len = len + (to - from); unsigned char* string; + size_t _len = json->string_len; + size_t new_len = _len + (to - from); while (new_len >= json->string_cap) if (!_rjson_grow_string(json)) return false; string = (unsigned char *)json->string; - while (len != new_len) - string[len++] = *(from++); + while (_len != new_len) + string[_len++] = *(from++); json->string_len = new_len; return true; } @@ -929,14 +930,14 @@ static int _rjson_buffer_io(void* buf, int len, void *user) return len; } -rjson_t *rjson_open_buffer(const void *buffer, size_t size) +rjson_t *rjson_open_buffer(const void *buffer, size_t len) { rjson_t *json = (rjson_t *)malloc(sizeof(rjson_t) + sizeof(const char *)*2); const char **ud = (const char **)(json + 1); if (!json) return NULL; ud[0] = (const char *)buffer; - ud[1] = ud[0] + size; + ud[1] = ud[0] + len; _rjson_setup(json, _rjson_buffer_io, (void*)ud, sizeof(json->input_buf)); return json; } @@ -986,12 +987,12 @@ void rjson_set_max_depth(rjson_t *json, unsigned int max_depth) json->stack_max = max_depth; } -const char *rjson_get_string(rjson_t *json, size_t *length) +const char *rjson_get_string(rjson_t *json, size_t *len) { char* str = (json->string_pass_through ? json->string_pass_through : json->string); - if (length) - *length = json->string_len; + if (len) + *len = json->string_len; str[json->string_len] = '\0'; return str; } @@ -1111,7 +1112,7 @@ void rjson_free(rjson_t *json) } static bool _rjson_nop_default(void *context) { return true; } -static bool _rjson_nop_string(void *context, const char *value, size_t length) { return true; } +static bool _rjson_nop_string(void *context, const char *value, size_t len) { return true; } static bool _rjson_nop_bool(void *context, bool value) { return true; } enum rjson_type rjson_parse(rjson_t *json, void* context, @@ -1126,7 +1127,7 @@ enum rjson_type rjson_parse(rjson_t *json, void* context, bool (*null_handler )(void *context)) { bool in_object = false; - size_t len; + size_t _len; const char* string; if (!object_member_handler) object_member_handler = _rjson_nop_string; if (!string_handler ) string_handler = _rjson_nop_string; @@ -1142,16 +1143,16 @@ enum rjson_type rjson_parse(rjson_t *json, void* context, switch (rjson_next(json)) { case RJSON_STRING: - string = rjson_get_string(json, &len); + string = rjson_get_string(json, &_len); if (_rJSON_LIKELY( (in_object && (json->stack_top->count & 1) ? object_member_handler : string_handler) - (context, string, len))) + (context, string, _len))) continue; return RJSON_STRING; case RJSON_NUMBER: - string = rjson_get_string(json, &len); - if (_rJSON_LIKELY(number_handler(context, string, len))) + string = rjson_get_string(json, &_len); + if (_rJSON_LIKELY(number_handler(context, string, _len))) continue; return RJSON_NUMBER; case RJSON_OBJECT: diff --git a/libretro-common/formats/m3u/m3u_file.c b/libretro-common/formats/m3u/m3u_file.c index 560162e62a7..2eb8a8da243 100644 --- a/libretro-common/formats/m3u/m3u_file.c +++ b/libretro-common/formats/m3u/m3u_file.c @@ -182,16 +182,16 @@ static bool m3u_file_load(m3u_file_t *m3u_file) if (token_ptr) { - size_t len = (size_t)(1 + token_ptr - line); + size_t _len = (size_t)(1 + token_ptr - line); /* Get entry_path segment */ - if (len > 0) + if (_len > 0) { memset(entry_path, 0, sizeof(entry_path)); strlcpy( entry_path, line, - ((len < PATH_MAX_LENGTH ? - len : PATH_MAX_LENGTH) * sizeof(char))); + ((_len < PATH_MAX_LENGTH ? + _len : PATH_MAX_LENGTH) * sizeof(char))); string_trim_whitespace_right(entry_path); string_trim_whitespace_left(entry_path); } diff --git a/libretro-common/hash/lrc_hash.c b/libretro-common/hash/lrc_hash.c index 98ce1328236..cf2979f35f1 100644 --- a/libretro-common/hash/lrc_hash.c +++ b/libretro-common/hash/lrc_hash.c @@ -252,11 +252,11 @@ uint32_t crc32_adjust(uint32_t checksum, uint8_t input) return ((checksum >> 8) & 0x00ffffff) ^ crc32_hash_table[(checksum ^ input) & 0xff]; } -uint32_t crc32_calculate(const uint8_t *data, size_t length) +uint32_t crc32_calculate(const uint8_t *data, size_t len) { size_t i; uint32_t checksum = ~0; - for (i = 0; i < length; i++) + for (i = 0; i < len; i++) checksum = crc32_adjust(checksum, data[i]); return ~checksum; } @@ -486,9 +486,9 @@ static int SHA1Result(struct sha1_context *context) static void SHA1Input(struct sha1_context *context, const unsigned char *message_array, - unsigned length) + unsigned len) { - if (!length) + if (!len) return; if (context->Computed || context->Corrupted) @@ -497,7 +497,7 @@ static void SHA1Input(struct sha1_context *context, return; } - while (length-- && !context->Corrupted) + while (len-- && !context->Corrupted) { context->Message_Block[context->Message_Block_Index++] = (*message_array & 0xFF); diff --git a/libretro-common/include/file/file_path.h b/libretro-common/include/file/file_path.h index ba1782ecf8c..bdaeef3f567 100644 --- a/libretro-common/include/file/file_path.h +++ b/libretro-common/include/file/file_path.h @@ -636,7 +636,7 @@ size_t fill_pathname_slash(char *path, size_t size); #if !defined(RARCH_CONSOLE) && defined(RARCH_INTERNAL) size_t fill_pathname_application_path(char *buf, size_t size); -void fill_pathname_application_dir(char *buf, size_t size); +size_t fill_pathname_application_dir(char *buf, size_t size); size_t fill_pathname_home_dir(char *buf, size_t size); #endif diff --git a/libretro-common/include/formats/rjson.h b/libretro-common/include/formats/rjson.h index 53623dd17e7..3101955b2c4 100644 --- a/libretro-common/include/formats/rjson.h +++ b/libretro-common/include/formats/rjson.h @@ -67,7 +67,7 @@ struct RFILE; /* Create a new parser instance from various sources */ rjson_t *rjson_open_stream(struct intfstream_internal *stream); rjson_t *rjson_open_rfile(struct RFILE *rfile); -rjson_t *rjson_open_buffer(const void *buffer, size_t size); +rjson_t *rjson_open_buffer(const void *buffer, size_t len); rjson_t *rjson_open_string(const char *string, size_t len); rjson_t *rjson_open_user(rjson_io_t io, void *user_data, int io_block_size); diff --git a/libretro-common/include/retro_timers.h b/libretro-common/include/retro_timers.h index 96041255a3f..c0d2db4db53 100644 --- a/libretro-common/include/retro_timers.h +++ b/libretro-common/include/retro_timers.h @@ -39,7 +39,7 @@ #include #elif defined(_3DS) #include <3ds.h> -#elif defined(EMSCRIPTEN) +#elif defined(EMSCRIPTEN_FIXME) #include #else #include @@ -100,7 +100,7 @@ static int nanosleepDOS(const struct timespec *rqtp, struct timespec *rmtp) #define retro_sleep(msec) (usleep(1000 * (msec))) #elif defined(WIIU) #define retro_sleep(msec) (OSSleepTicks(ms_to_ticks((msec)))) -#elif defined(EMSCRIPTEN) +#elif defined(EMSCRIPTEN_FIXME) #define retro_sleep(msec) (emscripten_sleep(msec)) #else static INLINE void retro_sleep(unsigned msec) diff --git a/libretro-common/media/media_detect_cd.c b/libretro-common/media/media_detect_cd.c index c8ea47f7209..dd0cf1fb8c1 100644 --- a/libretro-common/media/media_detect_cd.c +++ b/libretro-common/media/media_detect_cd.c @@ -28,34 +28,31 @@ /*#define MEDIA_CUE_PARSE_DEBUG*/ -static void media_zero_trailing_spaces(char *buf, size_t len) +static void media_zero_trailing_spaces(char *s, size_t len) { int i; - for (i = len - 1; i >= 0; i--) { - if (buf[i] == ' ') - buf[i] = '\0'; - else if (buf[i] != '\0') + if (s[i] == ' ') + s[i] = '\0'; + else if (s[i] != '\0') break; } } -static bool media_skip_spaces(const char **buf, size_t len) +static bool media_skip_spaces(const char **s, size_t len) { - if (buf && *buf && **buf) + if (s && *s && **s) { size_t i; for (i = 0; i < len; i++) { - if ((*buf)[i] == ' ' || (*buf)[i] == '\t') + if ((*s)[i] == ' ' || (*s)[i] == '\t') continue; - - *buf += i; + *s += i; return true; } } - return false; } @@ -86,7 +83,7 @@ bool media_detect_cd_info_cue(const char *path, media_detect_cd_info_t *info) while (!filestream_eof(file) && (line = filestream_getline(file))) { - size_t len = 0; + size_t _len = 0; const char *command = NULL; if (string_is_empty(line)) @@ -95,15 +92,15 @@ bool media_detect_cd_info_cue(const char *path, media_detect_cd_info_t *info) continue; } - len = strlen(line); + _len = strlen(line); command = line; - media_skip_spaces(&command, len); + media_skip_spaces(&command, _len); if (!found_file && !strncasecmp(command, "FILE", 4)) { const char *file = command + 4; - media_skip_spaces(&file, len - 4); + media_skip_spaces(&file, _len - 4); if (!string_is_empty(file)) { @@ -137,7 +134,7 @@ bool media_detect_cd_info_cue(const char *path, media_detect_cd_info_t *info) else if (found_file && !found_track && !strncasecmp(command, "TRACK", 5)) { const char *track = command + 5; - media_skip_spaces(&track, len - 5); + media_skip_spaces(&track, _len - 5); if (!string_is_empty(track)) { @@ -173,7 +170,7 @@ bool media_detect_cd_info_cue(const char *path, media_detect_cd_info_t *info) else if (found_file && found_track && first_data_track && !strncasecmp(command, "INDEX", 5)) { const char *index = command + 5; - media_skip_spaces(&index, len - 5); + media_skip_spaces(&index, _len - 5); if (!string_is_empty(index)) { @@ -331,7 +328,7 @@ bool media_detect_cd_info(const char *path, uint64_t pregap_bytes, media_detect_ * but I have not seen any real examples of them. */ info->system_id = MEDIA_CD_SYSTEM_MEGA_CD; - strcpy_literal(info->system, "Sega CD / Mega CD"); + strlcpy(info->system, "Sega CD / Mega CD", sizeof(info->system)); title_pos = buf + offset + 0x150; @@ -341,12 +338,7 @@ bool media_detect_cd_info(const char *path, uint64_t pregap_bytes, media_detect_ media_zero_trailing_spaces(info->title, sizeof(info->title)); } else - { - info->title[0] = 'N'; - info->title[1] = '/'; - info->title[2] = 'A'; - info->title[3] = '\0'; - } + strlcpy(info->title, "N/A", sizeof(info->title)); serial_pos = buf + offset + 0x183; @@ -373,7 +365,7 @@ bool media_detect_cd_info(const char *path, uint64_t pregap_bytes, media_detect_ info->system_id = MEDIA_CD_SYSTEM_SATURN; - strcpy_literal(info->system, "Sega Saturn"); + strlcpy(info->system, "Sega Saturn", sizeof(info->system)); title_pos = buf + offset + 0x60; @@ -383,12 +375,7 @@ bool media_detect_cd_info(const char *path, uint64_t pregap_bytes, media_detect_ media_zero_trailing_spaces(info->title, sizeof(info->title)); } else - { - info->title [0] = 'N'; - info->title [1] = '/'; - info->title [2] = 'A'; - info->title [3] = '\0'; - } + strlcpy(info->title, "N/A", sizeof(info->title)); serial_pos = buf + offset + 0x20; @@ -444,7 +431,7 @@ bool media_detect_cd_info(const char *path, uint64_t pregap_bytes, media_detect_ info->system_id = MEDIA_CD_SYSTEM_DREAMCAST; - strcpy_literal(info->system, "Sega Dreamcast"); + strlcpy(info->system, "Sega Dreamcast", sizeof(info->system)); title_pos = buf + offset + 0x80; @@ -454,12 +441,7 @@ bool media_detect_cd_info(const char *path, uint64_t pregap_bytes, media_detect_ media_zero_trailing_spaces(info->title, sizeof(info->title)); } else - { - info->title [0] = 'N'; - info->title [1] = '/'; - info->title [2] = 'A'; - info->title [3] = '\0'; - } + strlcpy(info->title, "N/A", sizeof(info->title)); serial_pos = buf + offset + 0x40; @@ -513,7 +495,7 @@ bool media_detect_cd_info(const char *path, uint64_t pregap_bytes, media_detect_ info->system_id = MEDIA_CD_SYSTEM_PSX; - strcpy_literal(info->system, "Sony PlayStation"); + strlcpy(info->system, "Sony PlayStation", sizeof(info->system)); title_pos = buf + offset + (16 * sector_size) + 40; @@ -523,22 +505,17 @@ bool media_detect_cd_info(const char *path, uint64_t pregap_bytes, media_detect_ media_zero_trailing_spaces(info->title, sizeof(info->title)); } else - { - info->title [0] = 'N'; - info->title [1] = '/'; - info->title [2] = 'A'; - info->title [3] = '\0'; - } + strlcpy(info->title, "N/A", sizeof(info->title)); } else if (!memcmp(buf + offset, "\x01\x5a\x5a\x5a\x5a\x5a\x01\x00\x00\x00\x00\x00", 12)) { info->system_id = MEDIA_CD_SYSTEM_3DO; - strcpy_literal(info->system, "3DO"); + strlcpy(info->system, "3DO", sizeof(info->system)); } else if (!memcmp(buf + offset + 0x950, "PC Engine CD-ROM SYSTEM", 23)) { info->system_id = MEDIA_CD_SYSTEM_PC_ENGINE_CD; - strcpy_literal(info->system, "TurboGrafx-CD / PC-Engine CD"); + strlcpy(info->system, "TurboGrafx-CD / PC-Engine CD", sizeof(info->system)); } free(buf); diff --git a/libretro-common/memmap/memmap.c b/libretro-common/memmap/memmap.c index 5062abaae28..89e45e0edae 100644 --- a/libretro-common/memmap/memmap.c +++ b/libretro-common/memmap/memmap.c @@ -92,11 +92,9 @@ void* mmap(void *addr, size_t len, int prot, int flags, return((void*) ((int8_t*)map + offset)); } -int munmap(void *addr, size_t length) +int munmap(void *addr, size_t len) { - if (!UnmapViewOfFile(addr)) - return -1; - return 0; + return (UnmapViewOfFile(addr)) ? 0 : -1; } int mprotect(void *addr, size_t len, int prot) @@ -137,23 +135,21 @@ int mprotect(void *addr, size_t len, int prot) int memsync(void *start, void *end) { - size_t len = (char*)end - (char*)start; + size_t _len = (char*)end - (char*)start; #if defined(__MACH__) && defined(__arm__) - sys_dcache_flush(start ,len); - sys_icache_invalidate(start, len); + sys_dcache_flush(start, _len); + sys_icache_invalidate(start, _len); return 0; #elif defined(__arm__) && !defined(__QNX__) - (void)len; __clear_cache(start, end); return 0; #elif defined(HAVE_MMAN) - return msync(start, len, MS_SYNC | MS_INVALIDATE + return msync(start, _len, MS_SYNC | MS_INVALIDATE #ifdef __QNX__ MS_CACHE_ONLY #endif ); #else - (void)len; return 0; #endif } diff --git a/libretro-common/samples/net/net_http_test.c b/libretro-common/samples/net/net_http_test.c index ebd0167e420..57a29fb6c4f 100644 --- a/libretro-common/samples/net/net_http_test.c +++ b/libretro-common/samples/net/net_http_test.c @@ -32,7 +32,7 @@ int main(void) { char *data; struct http_t *http1, *http3; - size_t len, pos = 0, tot = 0; + size_t _len, pos = 0, tot = 0; if (!network_init()) return -1; @@ -45,7 +45,7 @@ int main(void) http3 = net_http_new("http://www.wikipedia.org/"); while (!net_http_update(http3, NULL, NULL)) {} - data = (char*)net_http_data(http3, &len, false); + data = (char*)net_http_data(http3, &_len, false); printf("%.*s\n", (int)256, data); diff --git a/libretro-common/streams/stdin_stream.c b/libretro-common/streams/stdin_stream.c index 80f6e9abd5a..a0800915fc5 100644 --- a/libretro-common/streams/stdin_stream.c +++ b/libretro-common/streams/stdin_stream.c @@ -39,13 +39,9 @@ #include #if (defined(_WIN32) && defined(_XBOX)) || defined(__WINRT__) || !defined(__PSL1GHT__) && defined(__PS3__) -size_t read_stdin(char *buf, size_t size) -{ - /* Not implemented. */ - return 0; -} +size_t read_stdin(char *buf, size_t len) { return 0; } /* not implemented */ #elif defined(_WIN32) -size_t read_stdin(char *buf, size_t size) +size_t read_stdin(char *buf, size_t len) { DWORD i; DWORD has_read = 0; @@ -90,7 +86,7 @@ size_t read_stdin(char *buf, size_t size) { has_key = true; echo = true; - avail = size; + avail = len; break; } } @@ -105,8 +101,8 @@ size_t read_stdin(char *buf, size_t size) if (!avail) return 0; - if (avail > size) - avail = size; + if (avail > len) + avail = len; if (!ReadFile(hnd, buf, avail, &has_read, NULL)) return 0; @@ -130,22 +126,18 @@ size_t read_stdin(char *buf, size_t size) return has_read; } #else -size_t read_stdin(char *buf, size_t size) +size_t read_stdin(char *buf, size_t len) { size_t has_read = 0; - - while (size) + while (len) { - ssize_t ret = read(STDIN_FILENO, buf, size); - + ssize_t ret = read(STDIN_FILENO, buf, len); if (ret <= 0) break; - buf += ret; has_read += ret; - size -= ret; + len -= ret; } - return has_read; } #endif diff --git a/libretro-common/streams/trans_stream.c b/libretro-common/streams/trans_stream.c index aecb457b66d..41132565ce7 100644 --- a/libretro-common/streams/trans_stream.c +++ b/libretro-common/streams/trans_stream.c @@ -28,8 +28,8 @@ * for the new stream data to be saved * @in : input data * @in_size : input size - * @out : output data - * @out_size : output size + * @s : output data + * @len : output size * @error : (optional) output for error code * * Perform a full transcoding from a source to a destination. @@ -37,7 +37,7 @@ bool trans_stream_trans_full( struct trans_stream_backend *backend, void **data, const uint8_t *in, uint32_t in_size, - uint8_t *out, uint32_t out_size, + uint8_t *s, uint32_t len, enum trans_stream_error *error) { void *rdata; @@ -57,7 +57,7 @@ bool trans_stream_trans_full( } backend->set_in(rdata, in, in_size); - backend->set_out(rdata, out, out_size); + backend->set_out(rdata, s, len); ret = backend->trans(rdata, true, &rd, &wn, error); if (data) diff --git a/libretro-common/vfs/vfs_implementation.c b/libretro-common/vfs/vfs_implementation.c index 7a55d3ac1b2..efbbf508c5f 100644 --- a/libretro-common/vfs/vfs_implementation.c +++ b/libretro-common/vfs/vfs_implementation.c @@ -1074,7 +1074,7 @@ libretro_vfs_implementation_dir *retro_vfs_opendir_impl( { #if defined(_WIN32) char path_buf[1024]; - size_t copied = 0; + size_t _len; #if defined(LEGACY_WIN32) char *path_local = NULL; #else @@ -1095,25 +1095,21 @@ libretro_vfs_implementation_dir *retro_vfs_opendir_impl( rdir->orig_path = strdup(name); #if defined(_WIN32) - copied = strlcpy(path_buf, name, sizeof(path_buf)); - + _len = strlcpy(path_buf, name, sizeof(path_buf)); /* Non-NT platforms don't like extra slashes in the path */ - if (path_buf[copied - 1] != '\\') - path_buf [copied++] = '\\'; - - path_buf[copied ] = '*'; - path_buf[copied+1] = '\0'; + if (path_buf[_len - 1] != '\\') + path_buf [_len++] = '\\'; + path_buf[_len ] = '*'; + path_buf[_len + 1] = '\0'; #if defined(LEGACY_WIN32) path_local = utf8_to_local_string_alloc(path_buf); rdir->directory = FindFirstFile(path_local, &rdir->entry); - if (path_local) free(path_local); #else path_wide = utf8_to_utf16_string_alloc(path_buf); rdir->directory = FindFirstFileW(path_wide, &rdir->entry); - if (path_wide) free(path_wide); #endif diff --git a/libretro-common/vfs/vfs_implementation_uwp.cpp b/libretro-common/vfs/vfs_implementation_uwp.cpp index 5ffda0bbd52..b429a89a048 100644 --- a/libretro-common/vfs/vfs_implementation_uwp.cpp +++ b/libretro-common/vfs/vfs_implementation_uwp.cpp @@ -659,8 +659,8 @@ struct libretro_vfs_implementation_dir libretro_vfs_implementation_dir* retro_vfs_opendir_impl( const char* name, bool include_hidden) { + size_t _len; char path_buf[1024]; - size_t copied = 0; wchar_t* path_wide = NULL; libretro_vfs_implementation_dir* rdir; @@ -674,14 +674,14 @@ libretro_vfs_implementation_dir* retro_vfs_opendir_impl( rdir->orig_path = strdup(name); - copied = strlcpy(path_buf, name, sizeof(path_buf)); + _len = strlcpy(path_buf, name, sizeof(path_buf)); /* Non-NT platforms don't like extra slashes in the path */ - if (path_buf[copied - 1] != '\\') - path_buf[copied++] = '\\'; + if (path_buf[_len - 1] != '\\') + path_buf[_len++] = '\\'; - path_buf[copied] = '*'; - path_buf[copied + 1] = '\0'; + path_buf[_len] = '*'; + path_buf[_len + 1] = '\0'; path_wide = utf8_to_utf16_string_alloc(path_buf); rdir->directory = FindFirstFileExFromAppW( diff --git a/libretro-db/query.c b/libretro-db/query.c index 370d2b665c8..7fcf86bdf13 100644 --- a/libretro-db/query.c +++ b/libretro-db/query.c @@ -272,15 +272,13 @@ static void query_raise_unknown_function( ssize_t where, const char *name, ssize_t len, const char **error) { - int n = snprintf(s, _len, + int __len = snprintf(s, _len, "%" PRIu64 "::Unknown function '", (uint64_t)where ); - - if (len < ((ssize_t)_len - n - 3)) - strncpy(s + n, name, len); - - strcpy_literal(s + n + len, "'"); + if (len < ((ssize_t)_len - __len - 3)) + strncpy(s + __len, name, len); + strcpy_literal(s + __len + len, "'"); *error = s; } @@ -671,8 +669,7 @@ static struct buffer query_parse_method_call( { if (argi >= QUERY_MAX_ARGS) { - strcpy_literal(s, - "Too many arguments in function call."); + strlcpy(s, "Too many arguments in function call.", len); *error = s; goto clean; } @@ -797,8 +794,7 @@ static struct buffer query_parse_table( { if (argi >= QUERY_MAX_ARGS) { - strcpy_literal(s, - "Too many arguments in function call."); + strlcpy(s, "Too many arguments in function call.", len); *error = s; goto clean; } @@ -846,8 +842,7 @@ static struct buffer query_parse_table( if (argi >= QUERY_MAX_ARGS) { - strcpy_literal(s, - "Too many arguments in function call."); + strlcpy(s, "Too many arguments in function call.", len); *error = s; goto clean; } diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index ab9a963b457..512140d664d 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -1377,10 +1377,12 @@ int generic_action_ok_displaylist_push( { filebrowser_clear_type(); if (content_get_subsystem_rom_id() > 0) - strlcpy(tmp, content_get_subsystem_rom(content_get_subsystem_rom_id() - 1), sizeof(tmp)); + fill_pathname_basedir(tmp, + content_get_subsystem_rom(content_get_subsystem_rom_id() - 1), + sizeof(tmp)); else - strlcpy(tmp, path_get(RARCH_PATH_CONTENT), sizeof(tmp)); - path_basedir(tmp); + fill_pathname_basedir(tmp, + path_get(RARCH_PATH_CONTENT), sizeof(tmp)); if (content_get_subsystem() != (int)type - MENU_SETTINGS_SUBSYSTEM_ADD) content_clear_subsystem(); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 2a7db944aff..ccf102220ce 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -500,9 +500,9 @@ static int filebrowser_parse( if (str_list->size <= 0) { char dir[DIR_MAX_LENGTH]; - fill_pathname_application_dir(dir, sizeof(dir)); + size_t _len = fill_pathname_application_dir(dir, sizeof(dir)); if (string_ends_with(full_path, "/") && !string_ends_with(dir, "/")) - strlcat(dir, "/", sizeof(dir)); + strlcpy(dir + _len, "/", sizeof(dir) - _len); if (string_is_equal(dir, full_path)) allow_parent_directory = false; else @@ -2409,6 +2409,9 @@ static unsigned menu_displaylist_parse_system_info(file_list_t *list) #ifdef HAVE_NETWORKING {SUPPORTS_NETPLAY , MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT}, #endif +#ifdef HAVE_SSL + {SUPPORTS_SSL , MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT}, +#endif #ifdef HAVE_V4L2 {SUPPORTS_V4L2 , MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT}, #endif @@ -2783,14 +2786,13 @@ static int menu_displaylist_parse_database_entry(menu_handle_t *menu, if (entry->crc32) { - char *elem0 = NULL; char *save = NULL; char *entry_crc32_cpy = strdup(entry->crc32); const char *con = strtok_r(entry_crc32_cpy, "|", &save); if (con) { - elem0 = strdup(con); + char *elem0 = strdup(con); if ((con = strtok_r(NULL, "|", &save))) { switch (extension_to_file_hash_type(con)) @@ -5137,13 +5139,21 @@ static unsigned menu_displaylist_parse_content_information( if ( !string_is_empty(content_label) && !string_is_empty(db_name)) { + char *last; char db_path[PATH_MAX_LENGTH]; fill_pathname_join_special(db_path, settings->paths.path_content_database, db_name, sizeof(db_path)); - path_remove_extension(db_path); - strlcat(db_path, ".rdb", sizeof(db_path)); + last = (char*)strrchr(path_basename(db_path), '.'); + if (*last) + { + last[0] = '.'; + last[1] = 'r'; + last[2] = 'd'; + last[3] = 'b'; + last[4] = '\0'; + } if (path_is_valid(db_path)) if (menu_entries_append(info_list, diff --git a/menu/menu_driver.c b/menu/menu_driver.c index d8f95d9f3a1..254bc73bbea 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -2985,16 +2985,12 @@ static bool menu_shader_manager_save_preset_internal( fill_pathname_join(buffer, target_dirs[i], fullname, sizeof(buffer)); - strlcpy(basedir, buffer, sizeof(basedir)); - path_basedir(basedir); + fill_pathname_basedir(basedir, buffer, sizeof(basedir)); - if (!path_is_directory(basedir)) + if (!path_is_directory(basedir) && !(ret = path_mkdir(basedir))) { - if (!(ret = path_mkdir(basedir))) - { - RARCH_WARN("[Shaders]: Failed to create preset directory \"%s\".\n", basedir); - continue; - } + RARCH_WARN("[Shaders]: Failed to create preset directory \"%s\".\n", basedir); + continue; } preset_path = buffer; @@ -3183,6 +3179,7 @@ static bool menu_shader_manager_operate_auto_preset( { if (!(BIT32_GET(flags.flags, shader_types_flags[j]))) continue; + strlcpy(end, video_shader_get_preset_extension(shader_types[j]), sizeof(preset_path) - (end - preset_path)); @@ -3227,7 +3224,7 @@ static bool menu_shader_manager_operate_auto_preset( for (j = 0; j < ARRAY_SIZE(shader_types); j++) { - if (!(BIT32_GET(flags.flags, shader_types[j]))) + if (!(BIT32_GET(flags.flags, shader_types_flags[j]))) continue; strlcpy(end, video_shader_get_preset_extension(shader_types[j]), @@ -4068,8 +4065,7 @@ static size_t menu_driver_get_current_menu_label(struct menu_state *menu_st, #endif static size_t menu_driver_get_current_menu_sublabel( - struct menu_state *menu_st, - char *s, size_t len) + struct menu_state *menu_st, char *s, size_t len) { menu_entry_t entry; MENU_ENTRY_INITIALIZE(entry); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index f8cb052b842..87aa0e469c1 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -8670,9 +8670,6 @@ static void general_write_handler(rarch_setting_t *setting) configuration_set_bool(settings, settings->bools.video_frame_delay_auto, 0); - configuration_set_bool(settings, - settings->bools.vrr_runloop_enable, - 0); configuration_set_uint(settings, settings->uints.video_black_frame_insertion, 0); @@ -8698,9 +8695,6 @@ static void general_write_handler(rarch_setting_t *setting) configuration_set_bool(settings, settings->uints.video_black_frame_insertion, 0); - configuration_set_uint(settings, - settings->uints.video_shader_subframes, - 1); #ifdef HAVE_CHEEVOS rcheevos_validate_config_settings(); #endif @@ -14338,7 +14332,6 @@ static bool setting_append_list( SD_FLAG_NONE ); -#if !defined(RARCH_MOBILE) || defined(IOS) { #if defined(HAVE_STEAM) && defined(HAVE_MIST) bool on_deck = false; @@ -14385,7 +14378,7 @@ static bool setting_append_list( menu_settings_list_current_add_range(list, list_info, 1, 15, 1, true, true); } } -#endif + END_SUB_GROUP(list, list_info, parent_group); START_SUB_GROUP( list, diff --git a/msg_hash.h b/msg_hash.h index 434cb3d63de..777cd346a13 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -3558,6 +3558,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_STB_TRUETYPE_SUPPORT, MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT, MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, diff --git a/network/cloud_sync/webdav.c b/network/cloud_sync/webdav.c index 7620ee7aa36..075c2fb3472 100644 --- a/network/cloud_sync/webdav.c +++ b/network/cloud_sync/webdav.c @@ -70,26 +70,24 @@ webdav_state_t *webdav_state_get_ptr(void) static char *webdav_create_basic_auth(void) { - settings_t *settings = config_get_ptr(); - size_t len = 0; - char userpass[512]; - char *base64auth; int flen; - + char *base64auth; + char userpass[512]; + settings_t *settings = config_get_ptr(); + size_t _len = 0; if (!string_is_empty(settings->arrays.webdav_username)) - len += strlcpy(userpass + len, settings->arrays.webdav_username, sizeof(userpass) - len); - userpass[len++] = ':'; + _len += strlcpy(userpass + _len, settings->arrays.webdav_username, sizeof(userpass) - _len); + userpass[_len++] = ':'; if (!string_is_empty(settings->arrays.webdav_password)) - len += strlcpy(userpass + len, settings->arrays.webdav_password, sizeof(userpass) - len); - userpass[len] = '\0'; - base64auth = base64(userpass, (int)len, &flen); - len = strlcpy(userpass, "Authorization: Basic ", sizeof(userpass)); - len += strlcpy(userpass + len, base64auth, sizeof(userpass) - len); + _len += strlcpy(userpass + _len, settings->arrays.webdav_password, sizeof(userpass) - _len); + userpass[_len] = '\0'; + base64auth = base64(userpass, (int)_len, &flen); + _len = strlcpy(userpass, "Authorization: Basic ", sizeof(userpass)); + _len += strlcpy(userpass + _len, base64auth, sizeof(userpass) - _len); free(base64auth); - userpass[len++] = '\r'; - userpass[len++] = '\n'; - userpass[len ] = '\0'; - + userpass[_len++] = '\r'; + userpass[_len++] = '\n'; + userpass[_len ] = '\0'; return strdup(userpass); } @@ -357,13 +355,13 @@ static char *webdav_create_digest_response(const char *method, const char *path) static char *webdav_create_digest_auth_header(const char *method, const char *url) { + size_t _len; + char nonceCount[10]; webdav_state_t *webdav_st = webdav_state_get_ptr(); - char *header; - char *response; - char nonceCount[10]; + char *header = NULL; + char *response = NULL; const char *path = url; int count = 0; - size_t len = 0; size_t total = 0; do @@ -376,48 +374,46 @@ static char *webdav_create_digest_auth_header(const char *method, const char *ur response = webdav_create_digest_response(method, path); snprintf(nonceCount, sizeof(nonceCount), "%08x", webdav_st->nc++); - len = STRLEN_CONST("Authorization: Digest "); - len += STRLEN_CONST("username=\"") + strlen(webdav_st->username) + STRLEN_CONST("\", "); - len += STRLEN_CONST("realm=\"") + strlen(webdav_st->realm) + STRLEN_CONST("\", "); - len += STRLEN_CONST("nonce=\"") + strlen(webdav_st->nonce) + STRLEN_CONST("\", "); - len += STRLEN_CONST("uri=\"") + strlen(path) + STRLEN_CONST("\", "); - len += STRLEN_CONST("nc=\"") + strlen(nonceCount) + STRLEN_CONST("\", "); - len += STRLEN_CONST("cnonce=\"") + strlen(webdav_st->cnonce) + STRLEN_CONST("\", "); + _len = STRLEN_CONST("Authorization: Digest "); + _len += STRLEN_CONST("username=\"") + strlen(webdav_st->username) + STRLEN_CONST("\", "); + _len += STRLEN_CONST("realm=\"") + strlen(webdav_st->realm) + STRLEN_CONST("\", "); + _len += STRLEN_CONST("nonce=\"") + strlen(webdav_st->nonce) + STRLEN_CONST("\", "); + _len += STRLEN_CONST("uri=\"") + strlen(path) + STRLEN_CONST("\", "); + _len += STRLEN_CONST("nc=\"") + strlen(nonceCount) + STRLEN_CONST("\", "); + _len += STRLEN_CONST("cnonce=\"") + strlen(webdav_st->cnonce) + STRLEN_CONST("\", "); if (webdav_st->qop_auth) - len += STRLEN_CONST("qop=\"auth\", "); + _len += STRLEN_CONST("qop=\"auth\", "); if (webdav_st->opaque) - len += STRLEN_CONST("opaque=\"") + strlen(webdav_st->opaque) + STRLEN_CONST("\", "); - len += STRLEN_CONST("response=\"") + strlen(response) + STRLEN_CONST("\"\r\n"); - len += 1; - - total = len; - len = 0; - header = malloc(total); - len = strlcpy(header, "Authorization: Digest username=\"", total - len); - len += strlcpy(header + len, webdav_st->username, total - len); - len += strlcpy(header + len, "\", realm=\"", total - len); - len += strlcpy(header + len, webdav_st->realm, total - len); - len += strlcpy(header + len, "\", nonce=\"", total - len); - len += strlcpy(header + len, webdav_st->nonce, total - len); - len += strlcpy(header + len, "\", uri=\"", total - len); - len += strlcpy(header + len, path, total - len); - len += strlcpy(header + len, "\", nc=\"", total - len); - len += strlcpy(header + len, nonceCount, total - len); - len += strlcpy(header + len, "\", cnonce=\"", total - len); - len += strlcpy(header + len, webdav_st->cnonce, total - len); + _len += STRLEN_CONST("opaque=\"") + strlen(webdav_st->opaque) + STRLEN_CONST("\", "); + _len += STRLEN_CONST("response=\"") + strlen(response) + STRLEN_CONST("\"\r\n"); + _len += 1; + + total = _len; + _len = 0; + header = (char*)malloc(total); + _len = strlcpy(header, "Authorization: Digest username=\"", total - _len); + _len += strlcpy(header + _len, webdav_st->username, total - _len); + _len += strlcpy(header + _len, "\", realm=\"", total - _len); + _len += strlcpy(header + _len, webdav_st->realm, total - _len); + _len += strlcpy(header + _len, "\", nonce=\"", total - _len); + _len += strlcpy(header + _len, webdav_st->nonce, total - _len); + _len += strlcpy(header + _len, "\", uri=\"", total - _len); + _len += strlcpy(header + _len, path, total - _len); + _len += strlcpy(header + _len, "\", nc=\"", total - _len); + _len += strlcpy(header + _len, nonceCount, total - _len); + _len += strlcpy(header + _len, "\", cnonce=\"", total - _len); + _len += strlcpy(header + _len, webdav_st->cnonce, total - _len); if (webdav_st->qop_auth) - len += strlcpy(header + len, "\", qop=\"auth", total - len); + _len += strlcpy(header + _len, "\", qop=\"auth", total - _len); if (webdav_st->opaque) { - len += strlcpy(header + len, "\", opaque=\"", total - len); - len += strlcpy(header + len, webdav_st->opaque, total - len); + _len += strlcpy(header + _len, "\", opaque=\"", total - _len); + _len += strlcpy(header + _len, webdav_st->opaque, total - _len); } - len += strlcpy(header + len, "\", response=\"", total - len); - len += strlcpy(header + len, response, total - len); - strlcpy(header + len, "\"\r\n", total - len); - + _len += strlcpy(header + _len, "\", response=\"", total - _len); + _len += strlcpy(header + _len, response, total - _len); + strlcpy(header + _len, "\"\r\n", total - _len); free(response); - return header; } diff --git a/pkg/emscripten/libretro/index.html b/pkg/emscripten/libretro/index.html index eae5da79f17..f4cdc5f4f6c 100644 --- a/pkg/emscripten/libretro/index.html +++ b/pkg/emscripten/libretro/index.html @@ -28,96 +28,94 @@