diff --git a/.editorconfig b/.editorconfig index 7692ac78..ef6e90b2 100644 --- a/.editorconfig +++ b/.editorconfig @@ -6,5 +6,27 @@ root = true [*] charset = utf-8 end_of_line = lf -trim_trailing_whitespaces = true indent_style = tab +trim_trailing_whitespace = true +insert_final_newline = true +quote_type = single +max_line_length = off + +[*.js] +quote_type = double +ij_javascript_use_double_quotes = true + +[*.yml] +indent_style = space +indent_size = 2 + +[*.xml] +indent_style = space +indent_size = 2 + +[*.json] +indent_style = space +indent_size = 2 + +[composer.json] +indent_size = 4 diff --git a/.tx/config b/.tx/config index 710a560e..8542c680 100644 --- a/.tx/config +++ b/.tx/config @@ -1,399 +1,399 @@ [main] -host = https://www.transifex.com +host = https://api.transifex.com -[friendica.addon_advancedcontentfilter_messagespo] +[o:Friendica:p:friendica:r:addon_advancedcontentfilter_messagespo] file_filter = advancedcontentfilter/lang//messages.po source_file = advancedcontentfilter/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_blackout_messagespo] +[o:Friendica:p:friendica:r:addon_blackout_messagespo] file_filter = blackout/lang//messages.po source_file = blackout/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_blockem_messagespo] +[o:Friendica:p:friendica:r:addon_blockem_messagespo] file_filter = blockem/lang//messages.po source_file = blockem/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_blogger_messagespo] +[o:Friendica:p:friendica:r:addon_blogger_messagespo] file_filter = blogger/lang//messages.po source_file = blogger/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_buffer_messagespo] +[o:Friendica:p:friendica:r:addon_buffer_messagespo] file_filter = buffer/lang//messages.po source_file = buffer/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_buglink_messagespo] +[o:Friendica:p:friendica:r:addon_buglink_messagespo] file_filter = buglink/lang//messages.po source_file = buglink/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_catavatar_messagespo] +[o:Friendica:p:friendica:r:addon_catavatar_messagespo] file_filter = catavatar/lang//messages.po source_file = catavatar/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_cookienotice_messagespo] +[o:Friendica:p:friendica:r:addon_cookienotice_messagespo] file_filter = cookienotice/lang//messages.po source_file = cookienotice/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_curweather_messagespo] +[o:Friendica:p:friendica:r:addon_curweather_messagespo] file_filter = curweather/lang//messages.po source_file = curweather/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_diaspora_messagespo] +[o:Friendica:p:friendica:r:addon_diaspora_messagespo] file_filter = diaspora/lang//messages.po source_file = diaspora/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_dwpost_messagespo] +[o:Friendica:p:friendica:r:addon_dwpost_messagespo] file_filter = dwpost/lang//messages.po source_file = dwpost/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_forumdirectory_messagespo] +[o:Friendica:p:friendica:r:addon_forumdirectory_messagespo] file_filter = forumdirectory/lang//messages.po source_file = forumdirectory/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_fromapp_messagespo] +[o:Friendica:p:friendica:r:addon_fromapp_messagespo] file_filter = fromapp/lang//messages.po source_file = fromapp/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_fromgplus_messagespo] +[o:Friendica:p:friendica:r:addon_fromgplus_messagespo] file_filter = fromgplus/lang//messages.po source_file = fromgplus/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_geonames_messagespo] +[o:Friendica:p:friendica:r:addon_geonames_messagespo] file_filter = geonames/lang//messages.po source_file = geonames/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_gnot_messagespo] +[o:Friendica:p:friendica:r:addon_gnot_messagespo] file_filter = gnot/lang//messages.po source_file = gnot/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_gravatar_messagespo] +[o:Friendica:p:friendica:r:addon_gravatar_messagespo] file_filter = gravatar/lang//messages.po source_file = gravatar/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_group_text_messagespo] +[o:Friendica:p:friendica:r:addon_group_text_messagespo] file_filter = group_text/lang//messages.po source_file = group_text/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_ifttt_messagespo] +[o:Friendica:p:friendica:r:addon_ifttt_messagespo] file_filter = ifttt/lang//messages.po source_file = ifttt/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_ijpost_messagespo] +[o:Friendica:p:friendica:r:addon_ijpost_messagespo] file_filter = ijpost/lang//messages.po source_file = ijpost/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_impressum_messagespo] +[o:Friendica:p:friendica:r:addon_impressum_messagespo] file_filter = impressum/lang//messages.po source_file = impressum/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_infiniteimprobabilitydrive_messagespo] +[o:Friendica:p:friendica:r:addon_infiniteimprobabilitydrive_messagespo] file_filter = infiniteimprobabilitydrive/lang//messages.po source_file = infiniteimprobabilitydrive/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_irc_messagespo] +[o:Friendica:p:friendica:r:addon_irc_messagespo] file_filter = irc/lang//messages.po source_file = irc/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_jappixmini_messagespo] +[o:Friendica:p:friendica:r:addon_jappixmini_messagespo] file_filter = jappixmini/lang//messages.po source_file = jappixmini/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_js_upload_messagespo] +[o:Friendica:p:friendica:r:addon_js_upload_messagespo] file_filter = js_upload/lang//messages.po source_file = js_upload/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_krynn_messagespo] +[o:Friendica:p:friendica:r:addon_krynn_messagespo] file_filter = krynn/lang//messages.po source_file = krynn/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_langfilter_messagespo] +[o:Friendica:p:friendica:r:addon_langfilter_messagespo] file_filter = langfilter/lang//messages.po source_file = langfilter/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_libertree_messagespo] +[o:Friendica:p:friendica:r:addon_libertree_messagespo] file_filter = libertree/lang//messages.po source_file = libertree/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_libravatar_messagespo] +[o:Friendica:p:friendica:r:addon_libravatar_messagespo] file_filter = libravatar/lang//messages.po source_file = libravatar/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_ljpost_messagespo] +[o:Friendica:p:friendica:r:addon_ljpost_messagespo] file_filter = ljpost/lang//messages.po source_file = ljpost/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_mailstream_messagespo] +[o:Friendica:p:friendica:r:addon_mailstream_messagespo] file_filter = mailstream/lang//messages.po source_file = mailstream/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_mathjax_messagespo] +[o:Friendica:p:friendica:r:addon_mathjax_messagespo] file_filter = mathjax/lang//messages.po source_file = mathjax/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_membersince_messagespo] +[o:Friendica:p:friendica:r:addon_membersince_messagespo] file_filter = membersince/lang//messages.po source_file = membersince/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_morechoice_messagespo] +[o:Friendica:p:friendica:r:addon_morechoice_messagespo] file_filter = morechoice/lang//messages.po source_file = morechoice/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_morepokes_messagespo] +[o:Friendica:p:friendica:r:addon_morepokes_messagespo] file_filter = morepokes/lang//messages.po source_file = morepokes/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_newmemberwidget_messagespo] +[o:Friendica:p:friendica:r:addon_newmemberwidget_messagespo] file_filter = newmemberwidget/lang//messages.po source_file = newmemberwidget/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_notifyall_messagespo] +[o:Friendica:p:friendica:r:addon_notifyall_messagespo] file_filter = notifyall/lang//messages.po source_file = notifyall/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_notimeline_messagespo] +[o:Friendica:p:friendica:r:addon_notimeline_messagespo] file_filter = notimeline/lang//messages.po source_file = notimeline/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_nsfw_messagespo] +[o:Friendica:p:friendica:r:addon_nsfw_messagespo] file_filter = nsfw/lang//messages.po source_file = nsfw/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_numfriends_messagespo] +[o:Friendica:p:friendica:r:addon_numfriends_messagespo] file_filter = numfriends/lang//messages.po source_file = numfriends/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_openstreetmap_messagespo] +[o:Friendica:p:friendica:r:addon_openstreetmap_messagespo] file_filter = openstreetmap/lang//messages.po source_file = openstreetmap/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_pageheader_messagespo] +[o:Friendica:p:friendica:r:addon_pageheader_messagespo] file_filter = pageheader/lang//messages.po source_file = pageheader/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_piwik_messagespo] +[o:Friendica:p:friendica:r:addon_piwik_messagespo] file_filter = piwik/lang//messages.po source_file = piwik/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_planets_messagespo] +[o:Friendica:p:friendica:r:addon_planets_messagespo] file_filter = planets/lang//messages.po source_file = planets/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_public_server_messagespo] +[o:Friendica:p:friendica:r:addon_public_server_messagespo] file_filter = public_server/lang//messages.po source_file = public_server/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_pumpio_messagespo] +[o:Friendica:p:friendica:r:addon_pumpio_messagespo] file_filter = pumpio/lang//messages.po source_file = pumpio/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_qcomment_messagespo] +[o:Friendica:p:friendica:r:addon_qcomment_messagespo] file_filter = qcomment/lang//messages.po source_file = qcomment/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_randplace_messagespo] +[o:Friendica:p:friendica:r:addon_randplace_messagespo] file_filter = randplace/lang//messages.po source_file = randplace/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_remote_permissions_messagespo] +[o:Friendica:p:friendica:r:addon_remote_permissions_messagespo] file_filter = remote_permissions/lang//messages.po source_file = remote_permissions/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_rendertime_messagespo] +[o:Friendica:p:friendica:r:addon_rendertime_messagespo] file_filter = rendertime/lang//messages.po source_file = rendertime/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_securemail_messagespo] +[o:Friendica:p:friendica:r:addon_securemail_messagespo] file_filter = securemail/lang//messages.po source_file = securemail/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_showmore_messagespo] +[o:Friendica:p:friendica:r:addon_showmore_messagespo] file_filter = showmore/lang//messages.po source_file = showmore/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_smileybutton_messagespo] +[o:Friendica:p:friendica:r:addon_smileybutton_messagespo] file_filter = smileybutton/lang//messages.po source_file = smileybutton/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_startpage_messagespo] +[o:Friendica:p:friendica:r:addon_startpage_messagespo] file_filter = startpage/lang//messages.po source_file = startpage/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_statusnet_messagespo] +[o:Friendica:p:friendica:r:addon_statusnet_messagespo] file_filter = statusnet/lang//messages.po source_file = statusnet/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_superblock_messagespo] +[o:Friendica:p:friendica:r:addon_superblock_messagespo] file_filter = superblock/lang//messages.po source_file = superblock/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_testdrive_messagespo] +[o:Friendica:p:friendica:r:addon_testdrive_messagespo] file_filter = testdrive/lang//messages.po source_file = testdrive/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_tictac_messagespo] +[o:Friendica:p:friendica:r:addon_tictac_messagespo] file_filter = tictac/lang//messages.po source_file = tictac/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_tumblr_messagespo] +[o:Friendica:p:friendica:r:addon_tumblr_messagespo] file_filter = tumblr/lang//messages.po source_file = tumblr/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_twitter_messagespo] +[o:Friendica:p:friendica:r:addon_twitter_messagespo] file_filter = twitter/lang//messages.po source_file = twitter/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_viewsrc_messagespo] +[o:Friendica:p:friendica:r:addon_viewsrc_messagespo] file_filter = viewsrc/lang//messages.po source_file = viewsrc/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_webrtc_messagespo] +[o:Friendica:p:friendica:r:addon_webrtc_messagespo] file_filter = webrtc/lang//messages.po source_file = webrtc/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_widgets_messagespo] +[o:Friendica:p:friendica:r:addon_widgets_messagespo] file_filter = widgets/lang//messages.po source_file = widgets/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_windowsphonepush_messagespo] +[o:Friendica:p:friendica:r:addon_windowsphonepush_messagespo] file_filter = windowsphonepush/lang//messages.po source_file = windowsphonepush/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_wppost_messagespo] +[o:Friendica:p:friendica:r:addon_wppost_messagespo] file_filter = wppost/lang//messages.po source_file = wppost/lang/C/messages.po source_lang = en -type = PO +type = PO -[friendica.addon_xmpp_messagespo] +[o:Friendica:p:friendica:r:addon_xmpp_messagespo] file_filter = xmpp/lang//messages.po source_file = xmpp/lang/C/messages.po source_lang = en -type = PO +type = PO diff --git a/.woodpecker/.code_standards_check.yml b/.woodpecker/.code_standards_check.yml index 9d59dc08..60a1bd2a 100644 --- a/.woodpecker/.code_standards_check.yml +++ b/.woodpecker/.code_standards_check.yml @@ -1,9 +1,12 @@ skip_clone: true -pipeline: +steps: clone_friendica_base: image: alpine/git commands: + - git config --global user.email "no-reply@friendi.ca" + - git config --global user.name "Friendica" + - git config --global --add safe.directory $CI_WORKSPACE - git clone https://github.com/friendica/friendica.git . - git checkout $CI_COMMIT_BRANCH when: @@ -13,7 +16,7 @@ pipeline: commands: - git config --global user.email "no-reply@friendi.ca" - git config --global user.name "Friendica" - - git clone $CI_REPO_LINK addon + - git clone $CI_REPO_CLONE_URL addon - cd addon/ - git checkout $CI_COMMIT_BRANCH - git fetch origin $CI_COMMIT_REF @@ -53,6 +56,10 @@ pipeline: - /tmp/drone-cache:/tmp/cache when: event: pull_request + phpstan: + image: friendicaci/php8.3:php8.3.3 + commands: + - ./bin/composer.phar run phpstan; check: image: friendicaci/php-cs commands: diff --git a/.woodpecker/.continuous-deployment.yml b/.woodpecker/.continuous-deployment.yml index ab6e07e9..d6d8a22a 100644 --- a/.woodpecker/.continuous-deployment.yml +++ b/.woodpecker/.continuous-deployment.yml @@ -5,10 +5,13 @@ labels: skip_clone: true -pipeline: +steps: clone_friendica_base: image: alpine/git commands: + - git config --global user.email "no-reply@friendi.ca" + - git config --global user.name "Friendica" + - git config --global --add safe.directory $CI_WORKSPACE - git clone https://github.com/friendica/friendica.git . - git checkout $CI_COMMIT_BRANCH when: @@ -20,7 +23,7 @@ pipeline: commands: - git config --global user.email "no-reply@friendi.ca" - git config --global user.name "Friendica" - - git clone $CI_REPO_LINK addon + - git clone $CI_REPO_CLONE_URL addon - cd addon/ - git checkout $CI_COMMIT_BRANCH - git fetch origin $CI_COMMIT_REF @@ -45,7 +48,7 @@ pipeline: branch: [ develop, '*-rc' ] event: push composer_install: - image: friendicaci/php7.4:php7.4.33 + image: friendicaci/php8.2:php8.2.28 commands: - export COMPOSER_HOME=.composer - composer validate diff --git a/.woodpecker/.messages.po_check.yml b/.woodpecker/.messages.po_check.yml index f5691e00..e0239dcd 100644 --- a/.woodpecker/.messages.po_check.yml +++ b/.woodpecker/.messages.po_check.yml @@ -1,9 +1,12 @@ skip_clone: true -pipeline: +steps: clone_friendica_base: image: alpine/git commands: + - git config --global user.email "no-reply@friendi.ca" + - git config --global user.name "Friendica" + - git config --global --add safe.directory $CI_WORKSPACE - git clone https://github.com/friendica/friendica.git . - git checkout $CI_COMMIT_BRANCH when: @@ -13,7 +16,7 @@ pipeline: commands: - git config --global user.email "no-reply@friendi.ca" - git config --global user.name "Friendica" - - git clone $CI_REPO_LINK addon + - git clone $CI_REPO_CLONE_URL addon - cd addon/ - git checkout $CI_COMMIT_BRANCH - git fetch origin $CI_COMMIT_REF diff --git a/.woodpecker/.phpunit.yml b/.woodpecker/.phpunit.yml new file mode 100644 index 00000000..b0745ad0 --- /dev/null +++ b/.woodpecker/.phpunit.yml @@ -0,0 +1,120 @@ +matrix: + include: + - PHP_MAJOR_VERSION: 7.4 + PHP_VERSION: 7.4.33 + - PHP_MAJOR_VERSION: 8.0 + PHP_VERSION: 8.0.30 + - PHP_MAJOR_VERSION: 8.1 + PHP_VERSION: 8.1.31 + - PHP_MAJOR_VERSION: 8.2 + PHP_VERSION: 8.2.28 + - PHP_MAJOR_VERSION: 8.3 + PHP_VERSION: 8.3.17 + - PHP_MAJOR_VERSION: 8.4 + PHP_VERSION: 8.4.5 + +# This forces PHP Unit executions at the "opensocial" labeled location (because of much more power...) +labels: + location: opensocial + +skip_clone: true + +steps: + clone_friendica_base: + image: alpine/git + commands: + - git config --global user.email "no-reply@friendi.ca" + - git config --global user.name "Friendica" + - git config --global --add safe.directory $CI_WORKSPACE + - git clone https://github.com/friendica/friendica.git . + - git checkout $CI_COMMIT_BRANCH + clone_friendica_addon: + image: alpine/git + commands: + - git config --global user.email "no-reply@friendi.ca" + - git config --global user.name "Friendica" + - git clone $CI_REPO_CLONE_URL addon + - cd addon/ + - git checkout $CI_COMMIT_BRANCH + - git fetch origin $CI_COMMIT_REF + - git merge $CI_COMMIT_SHA + restore_cache: + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + restore: true + cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}" + archive_format: "gzip" + mount: + - '.composer' + volumes: + - /tmp/drone-cache:/tmp/cache + composer_install: + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} + commands: + - export COMPOSER_HOME=.composer + - ./bin/composer.phar validate + - ./bin/composer.phar install --prefer-dist + volumes: + - /etc/hosts:/etc/hosts + rebuild_cache: + image: meltwater/drone-cache:dev + settings: + backend: "filesystem" + rebuild: true + cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}" + archive_format: "gzip" + mount: + - '.composer' + volumes: + - /tmp/drone-cache:/tmp/cache + test: + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} + environment: + MYSQL_HOST: "mariadb" + MYSQL_PORT: "3306" + MYSQL_DATABASE: "test" + MYSQL_PASSWORD: "test" + MYSQL_USER: "test" + REDIS_HOST: "redis" + MEMCACHED_HOST: "memcached" + MEMCACHE_HOST: "memcached" + commands: + - cp config/local-sample.config.php config/local.config.php + - if ! bin/wait-for-connection $MYSQL_HOST $MYSQL_PORT 300; then echo "[ERROR] Waited 300 seconds, no response" >&2; exit 1; fi + - mysql -h$MYSQL_HOST -P$MYSQL_PORT -p$MYSQL_PASSWORD -u$MYSQL_USER $MYSQL_DATABASE < database.sql + - if [ "${PHP_MAJOR_VERSION}" = "8.2" -a "${CI_REPO}" = "friendica/friendica-addons" ]; then + phpenmod xdebug; + export XDEBUG_MODE=coverage; + phpunit --configuration tests/phpunit-addons.xml --coverage-clover clover.xml; + else + phpunit --configuration tests/phpunit-addons.xml; + fi + codecov: + image: friendicaci/codecov + when: + matrix: + PHP_MAJOR_VERSION: 8.2 + PHP_VERSION: 8.2.16 + repo: + - friendica/friendica-addons + commands: + - codecov -R '.' -Z -f 'clover.xml' + environment: + CODECOV_TOKEN: + from_secret: codecov-token + +services: + mariadb: + image: mariadb:latest + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: "true" + MYSQL_DATABASE: "test" + MYSQL_PASSWORD: "test" + MYSQL_USER: "test" + + memcached: + image: memcached + + redis: + image: redis diff --git a/.woodpecker/.releaser.yml b/.woodpecker/.releaser.yml index 4a661937..7407f2bc 100644 --- a/.woodpecker/.releaser.yml +++ b/.woodpecker/.releaser.yml @@ -5,10 +5,13 @@ labels: skip_clone: true -pipeline: +steps: clone_friendica_base: image: alpine/git commands: + - git config --global user.email "no-reply@friendi.ca" + - git config --global user.name "Friendica" + - git config --global --add safe.directory $CI_WORKSPACE - git clone https://github.com/friendica/friendica.git . - git checkout $CI_COMMIT_BRANCH when: @@ -19,7 +22,7 @@ pipeline: commands: - git config --global user.email "no-reply@friendi.ca" - git config --global user.name "Friendica" - - git clone $CI_REPO_LINK addon + - git clone $CI_REPO_CLONE_URL addon - cd addon/ - git checkout $CI_COMMIT_BRANCH - git fetch origin $CI_COMMIT_REF @@ -42,7 +45,7 @@ pipeline: repo: friendica/friendica-addons event: tag composer_install: - image: friendicaci/php7.4:php7.4.33 + image: friendicaci/php8.2:php8.2.28 commands: - export COMPOSER_HOME=.composer - composer validate diff --git a/advancedcontentfilter/advancedcontentfilter.js b/advancedcontentfilter/advancedcontentfilter.js index fcf7b096..a8fc1c65 100644 --- a/advancedcontentfilter/advancedcontentfilter.js +++ b/advancedcontentfilter/advancedcontentfilter.js @@ -54,7 +54,7 @@ new Vue({ self.rules.push(responseJSON.rule); self.resetForm(); }, function (response) { - self.errorMessage = response.responseJSON.message; + self.errorMessage = response.responseJSON.exception[0].message; }); } }, @@ -74,7 +74,7 @@ new Vue({ self.rules[self.editedIndex] = rule; self.resetForm(); }, function (response) { - self.errorMessage = response.responseJSON.message; + self.errorMessage = response.responseJSON.exception[0].message; }); }, diff --git a/advancedcontentfilter/advancedcontentfilter.php b/advancedcontentfilter/advancedcontentfilter.php index 2254e587..53cb9ebe 100644 --- a/advancedcontentfilter/advancedcontentfilter.php +++ b/advancedcontentfilter/advancedcontentfilter.php @@ -33,16 +33,13 @@ * */ -use Friendica\App; use Friendica\BaseModule; use Friendica\Content\Text\Markdown; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\DI; -use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\Tag; use Friendica\Model\User; @@ -64,7 +61,7 @@ function advancedcontentfilter_install() Hook::add('dbstructure_definition' , __FILE__, 'advancedcontentfilter_dbstructure_definition'); DBStructure::performUpdate(); - Logger::notice('installed advancedcontentfilter'); + DI::logger()->notice('installed advancedcontentfilter'); } /* @@ -123,21 +120,22 @@ function advancedcontentfilter_prepare_body_content_filter(&$hook_data) $expressionLanguage = new ExpressionLanguage\ExpressionLanguage(); } - if (!DI::userSession()->getLocalUserId()) { + $uid = $hook_data['uid'] ?? DI::userSession()->getLocalUserId(); + if (!$uid) { return; } $vars = advancedcontentfilter_get_filter_fields($hook_data['item']); - $rules = DI::cache()->get('rules_' . DI::userSession()->getLocalUserId()); + $rules = DI::cache()->get('rules_' . $uid); if (!isset($rules)) { $rules = DBA::toArray(DBA::select( 'advancedcontentfilter_rules', ['name', 'expression', 'serialized'], - ['uid' => DI::userSession()->getLocalUserId(), 'active' => true] + ['uid' => $uid, 'active' => true] )); - DI::cache()->set('rules_' . DI::userSession()->getLocalUserId(), $rules); + DI::cache()->set('rules_' . $uid, $rules); } if ($rules) { @@ -190,11 +188,32 @@ function advancedcontentfilter_module() {} function advancedcontentfilter_init() { if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'api') { - $slim = new \Slim\App(); + $slim = \Slim\Factory\AppFactory::create(); - require __DIR__ . '/src/middlewares.php'; + /** + * The routing middleware should be added before the ErrorMiddleware + * Otherwise exceptions thrown from it will not be handled + */ + $slim->addRoutingMiddleware(); + + $slim->addErrorMiddleware(true, true, true, DI::logger()); + + // register routes + $slim->group('/advancedcontentfilter/api', function (\Slim\Routing\RouteCollectorProxy $app) { + $app->group('/rules', function (\Slim\Routing\RouteCollectorProxy $app) { + $app->get('', 'advancedcontentfilter_get_rules'); + $app->post('', 'advancedcontentfilter_post_rules'); + + $app->get('/{id}', 'advancedcontentfilter_get_rules_id'); + $app->put('/{id}', 'advancedcontentfilter_put_rules_id'); + $app->delete('/{id}', 'advancedcontentfilter_delete_rules_id'); + }); + + $app->group('/variables', function (\Slim\Routing\RouteCollectorProxy $app) { + $app->get('/{guid}', 'advancedcontentfilter_get_variables_guid'); + }); + }); - require __DIR__ . '/src/routes.php'; $slim->run(); exit; @@ -252,8 +271,8 @@ function advancedcontentfilter_content() 'rule_expression' => DI::l10n()->t('Rule Expression'), 'cancel' => DI::l10n()->t('Cancel'), ], - '$current_theme' => DI::app()->getCurrentTheme(), - '$rules' => advancedcontentfilter_get_rules(), + '$current_theme' => DI::appHelper()->getCurrentTheme(), + '$rules' => DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => DI::userSession()->getLocalUserId()])), '$form_security_token' => BaseModule::getFormSecurityToken() ]); } @@ -305,7 +324,7 @@ function advancedcontentfilter_build_fields($data) * API */ -function advancedcontentfilter_get_rules() +function advancedcontentfilter_get_rules(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface { if (!DI::userSession()->getLocalUserId()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); @@ -313,7 +332,8 @@ function advancedcontentfilter_get_rules() $rules = DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => DI::userSession()->getLocalUserId()])); - return json_encode($rules); + $response->getBody()->write(json_encode($rules)); + return $response->withHeader('Content-Type', 'application/json'); } function advancedcontentfilter_get_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args) @@ -324,10 +344,11 @@ function advancedcontentfilter_get_rules_id(ServerRequestInterface $request, Res $rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => $args['id'], 'uid' => DI::userSession()->getLocalUserId()]); - return json_encode($rule); + $response->getBody()->write(json_encode($rule)); + return $response->withHeader('Content-Type', 'application/json'); } -function advancedcontentfilter_post_rules(ServerRequestInterface $request) +function advancedcontentfilter_post_rules(ServerRequestInterface $request, ResponseInterface $response) { if (!DI::userSession()->getLocalUserId()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); @@ -360,7 +381,8 @@ function advancedcontentfilter_post_rules(ServerRequestInterface $request) DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId()); - return json_encode(['message' => DI::l10n()->t('Rule successfully added'), 'rule' => $rule]); + $response->getBody()->write(json_encode(['message' => DI::l10n()->t('Rule successfully added'), 'rule' => $rule])); + return $response->withHeader('Content-Type', 'application/json'); } function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args) @@ -391,7 +413,8 @@ function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, Res DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId()); - return json_encode(['message' => DI::l10n()->t('Rule successfully updated')]); + $response->getBody()->write(json_encode(['message' => DI::l10n()->t('Rule successfully updated')])); + return $response->withHeader('Content-Type', 'application/json'); } function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args) @@ -414,7 +437,8 @@ function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId()); - return json_encode(['message' => DI::l10n()->t('Rule successfully deleted')]); + $response->getBody()->write(json_encode(['message' => DI::l10n()->t('Rule successfully deleted')])); + return $response->withHeader('Content-Type', 'application/json'); } function advancedcontentfilter_get_variables_guid(ServerRequestInterface $request, ResponseInterface $response, $args) @@ -437,7 +461,8 @@ function advancedcontentfilter_get_variables_guid(ServerRequestInterface $reques $return = advancedcontentfilter_get_filter_fields(advancedcontentfilter_prepare_item_row($item_row)); - return json_encode(['variables' => str_replace('\\\'', '\'', var_export($return, true))]); + $response->getBody()->write(json_encode(['variables' => str_replace('\\\'', '\'', var_export($return, true))])); + return $response->withHeader('Content-Type', 'application/json'); } /** @@ -455,7 +480,7 @@ function advancedcontentfilter_prepare_item_row(array $item_row): array $item_row['tags'] = $tags['tags']; $item_row['hashtags'] = $tags['hashtags']; $item_row['mentions'] = $tags['mentions']; - $item_row['attachments'] = Post\Media::splitAttachments($item_row['uri-id']); + $item_row['attachments'] = DI::postMediaRepository()->splitAttachments($item_row['uri-id']); return $item_row; } diff --git a/advancedcontentfilter/composer.json b/advancedcontentfilter/composer.json index 93b19cd5..b9ab1900 100644 --- a/advancedcontentfilter/composer.json +++ b/advancedcontentfilter/composer.json @@ -1,25 +1,27 @@ { - "name": "friendica-addons/advancedcontentfilter", - "description": "Advanced Content Filter addon for Friendica", - "type": "friendica-addon", - "authors": [ - { - "name": "Hypolite Petovan", - "email": "hypolite@mrpetovan.com", - "homepage": "https://friendica.mrpetovan.com/profile/hypolite", - "role": "Developer" - } - ], - "require": { - "php": ">=5.6.0", - "slim/slim": "^3.1", - "symfony/expression-language": "^3.4" - }, - "license": "3-clause BSD license", - "minimum-stability": "stable", - "config": { - "optimize-autoloader": true, - "autoloader-suffix": "AdvancedContentFilterAddon", - "preferred-install": "dist" - } + "name": "friendica-addons/advancedcontentfilter", + "description": "Advanced Content Filter addon for Friendica", + "type": "friendica-addon", + "authors": [ + { + "name": "Hypolite Petovan", + "email": "hypolite@mrpetovan.com", + "homepage": "https://friendica.mrpetovan.com/profile/hypolite", + "role": "Developer" + } + ], + "require": { + "slim/slim": "^4", + "symfony/expression-language": "^3.4" + }, + "license": "3-clause BSD license", + "minimum-stability": "stable", + "config": { + "platform": { + "php": "7.4" + }, + "optimize-autoloader": true, + "autoloader-suffix": "AdvancedContentFilterAddon", + "preferred-install": "dist" + } } diff --git a/advancedcontentfilter/composer.lock b/advancedcontentfilter/composer.lock index 774b5ec8..6dbd17ba 100644 --- a/advancedcontentfilter/composer.lock +++ b/advancedcontentfilter/composer.lock @@ -4,40 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d0e3662dd9d910ffe4f71d325bc39319", + "content-hash": "a7276eb2d2108a26699f69c750d02d27", "packages": [ - { - "name": "container-interop/container-interop", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "shasum": "" - }, - "require": { - "psr/container": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "homepage": "https://github.com/container-interop/container-interop", - "abandoned": "psr/container", - "time": "2017-02-14T19:40:03+00:00" - }, { "name": "nikic/fast-route", "version": "v1.3.0", @@ -84,56 +52,6 @@ ], "time": "2018-02-13T20:26:39+00:00" }, - { - "name": "pimple/pimple", - "version": "v3.2.3", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", - "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/container": "^1.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "http://pimple.sensiolabs.org", - "keywords": [ - "container", - "dependency injection" - ], - "time": "2018-01-21T07:42:36+00:00" - }, { "name": "psr/cache", "version": "1.0.1", @@ -182,27 +100,22 @@ }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.4.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -215,7 +128,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -227,24 +140,25 @@ "container-interop", "psr" ], - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "psr/http-factory", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -264,7 +178,58 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -277,20 +242,126 @@ "request", "response" ], - "time": "2016-08-06T14:39:51+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { - "name": "psr/log", - "version": "1.1.2", + "name": "psr/http-server-handler", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "url": "https://github.com/php-fig/http-server-handler.git", + "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4", + "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side request handler", + "keywords": [ + "handler", + "http", + "http-interop", + "psr", + "psr-15", + "psr-7", + "request", + "response", + "server" + ], + "time": "2023-04-10T20:06:20+00:00" + }, + { + "name": "psr/http-server-middleware", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-middleware.git", + "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829", + "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/http-server-handler": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side middleware", + "keywords": [ + "http", + "http-interop", + "middleware", + "psr", + "psr-15", + "psr-7", + "request", + "response" + ], + "time": "2023-04-11T06:14:47+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { @@ -314,7 +385,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -324,84 +395,55 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "time": "2017-10-23T01:57:42+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { "name": "slim/slim", - "version": "3.9.2", + "version": "4.13.0", "source": { "type": "git", "url": "https://github.com/slimphp/Slim.git", - "reference": "4086d0106cf5a7135c69fce4161fe355a8feb118" + "reference": "038fd5713d5a41636fdff0e8dcceedecdd17fc17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/4086d0106cf5a7135c69fce4161fe355a8feb118", - "reference": "4086d0106cf5a7135c69fce4161fe355a8feb118", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/038fd5713d5a41636fdff0e8dcceedecdd17fc17", + "reference": "038fd5713d5a41636fdff0e8dcceedecdd17fc17", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.2", - "nikic/fast-route": "^1.0", - "php": ">=5.5.0", - "pimple/pimple": "^3.0", - "psr/container": "^1.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" + "ext-json": "*", + "nikic/fast-route": "^1.3", + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1 || ^2.0 || ^3.0" }, "require-dev": { - "phpunit/phpunit": "^4.0", - "squizlabs/php_codesniffer": "^2.5" + "adriansuter/php-autoload-override": "^1.4", + "ext-simplexml": "*", + "guzzlehttp/psr7": "^2.6", + "httpsoft/http-message": "^1.1", + "httpsoft/http-server-request": "^1.1", + "laminas/laminas-diactoros": "^2.17 || ^3", + "nyholm/psr7": "^1.8", + "nyholm/psr7-server": "^1.1", + "phpspec/prophecy": "^1.19", + "phpspec/prophecy-phpunit": "^2.1", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.6", + "slim/http": "^1.3", + "slim/psr7": "^1.6", + "squizlabs/php_codesniffer": "^3.9" + }, + "suggest": { + "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware", + "ext-xml": "Needed to support XML format in BodyParsingMiddleware", + "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim", + "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information." }, "type": "library", "autoload": { @@ -414,77 +456,100 @@ "MIT" ], "authors": [ - { - "name": "Rob Allen", - "email": "rob@akrabat.com", - "homepage": "http://akrabat.com" - }, { "name": "Josh Lockhart", "email": "hello@joshlockhart.com", "homepage": "https://joshlockhart.com" }, - { - "name": "Gabriel Manricks", - "email": "gmanricks@me.com", - "homepage": "http://gabrielmanricks.com" - }, { "name": "Andrew Smith", "email": "a.smith@silentworks.co.uk", "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + }, + { + "name": "Gabriel Manricks", + "email": "gmanricks@me.com", + "homepage": "http://gabrielmanricks.com" } ], "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", - "homepage": "https://slimframework.com", + "homepage": "https://www.slimframework.com", "keywords": [ "api", "framework", "micro", "router" ], - "time": "2017-11-26T19:13:09+00:00" + "funding": [ + { + "url": "https://opencollective.com/slimphp", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slim/slim", + "type": "tidelift" + } + ], + "time": "2024-03-03T21:25:30+00:00" }, { "name": "symfony/cache", - "version": "v3.4.36", + "version": "v4.4.48", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "3d9f46a6960fd5cd7f030f86adc5b4b63bcfa4e3" + "reference": "3b98ed664887ad197b8ede3da2432787212eb915" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/3d9f46a6960fd5cd7f030f86adc5b4b63bcfa4e3", - "reference": "3d9f46a6960fd5cd7f030f86adc5b4b63bcfa4e3", + "url": "https://api.github.com/repos/symfony/cache/zipball/3b98ed664887ad197b8ede3da2432787212eb915", + "reference": "3b98ed664887ad197b8ede3da2432787212eb915", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/cache": "~1.0", - "psr/log": "~1.0", - "psr/simple-cache": "^1.0", - "symfony/polyfill-apcu": "~1.1" + "php": ">=7.1.3", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.2|^5.0" }, "conflict": { - "symfony/var-dumper": "<3.3" + "doctrine/dbal": "<2.7", + "symfony/dependency-injection": "<3.4", + "symfony/http-kernel": "<4.4|>=5.0", + "symfony/var-dumper": "<4.4" }, "provide": { - "psr/cache-implementation": "1.0", - "psr/simple-cache-implementation": "1.0" + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "~1.6", - "doctrine/dbal": "~2.4", - "predis/predis": "~1.0" + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.7|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.1|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/var-dumper": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Cache\\": "" @@ -507,38 +572,188 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Cache component with PSR-6, PSR-16, and tags", + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", "homepage": "https://symfony.com", "keywords": [ "caching", "psr6" ], - "time": "2019-12-01T10:45:41+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-17T20:21:54+00:00" }, { - "name": "symfony/expression-language", - "version": "v3.4.8", + "name": "symfony/cache-contracts", + "version": "v2.5.2", "source": { "type": "git", - "url": "https://github.com/symfony/expression-language.git", - "reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241" + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/867e4d1f5d4e52435a8ffff6b24fd6a801582241", - "reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/cache": "~3.1|~4.0" + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v3.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "de38e66398fca1fcb9c48e80279910e6889cb28f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/de38e66398fca1fcb9c48e80279910e6889cb28f", + "reference": "de38e66398fca1fcb9c48e80279910e6889cb28f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/cache": "~3.1|~4.0", + "symfony/polyfill-php70": "~1.6" + }, + "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\ExpressionLanguage\\": "" @@ -563,37 +778,120 @@ ], "description": "Symfony ExpressionLanguage Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:37:34+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-24T10:57:07+00:00" }, { - "name": "symfony/polyfill-apcu", - "version": "v1.13.1", + "name": "symfony/polyfill-php70", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "a8e961c841b9ec52927a87914f8820a1ad8f8116" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/a8e961c841b9ec52927a87914f8820a1ad8f8116", - "reference": "a8e961c841b9ec52927a87914f8820a1ad8f8116", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "type": "metapackage", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "shasum": "" + }, + "require": { + "php": ">=7.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.13-dev" + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Apcu\\": "" - }, "files": [ "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -610,16 +908,256 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "apcu", "compatibility", "polyfill", "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-30T19:17:29+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.4.35", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "abb0a151b62d6b07e816487e20040464af96cae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/abb0a151b62d6b07e816487e20040464af96cae7", + "reference": "abb0a151b62d6b07e816487e20040464af96cae7", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T13:51:25+00:00" } ], "packages-dev": [], @@ -628,8 +1166,10 @@ "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, - "platform": { - "php": ">=5.6.0" + "platform": [], + "platform-dev": [], + "platform-overrides": { + "php": "7.4" }, - "platform-dev": [] + "plugin-api-version": "1.1.0" } diff --git a/advancedcontentfilter/lang/de/messages.po b/advancedcontentfilter/lang/de/messages.po index cbd8b37a..e338fb61 100644 --- a/advancedcontentfilter/lang/de/messages.po +++ b/advancedcontentfilter/lang/de/messages.po @@ -15,7 +15,7 @@ msgstr "" "POT-Creation-Date: 2022-05-11 08:54-0400\n" "PO-Revision-Date: 2018-05-24 06:41+0000\n" "Last-Translator: Tobias Diekershoff , 2022\n" -"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n" +"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/advancedcontentfilter/lang/it/messages.po b/advancedcontentfilter/lang/it/messages.po index 95f14912..325be52c 100644 --- a/advancedcontentfilter/lang/it/messages.po +++ b/advancedcontentfilter/lang/it/messages.po @@ -3,60 +3,63 @@ # This file is distributed under the same license as the Friendica advancedcontentfilter addon package. # # +# Translators: +# fabrixxm , 2018 +# Sylke Vicious , 2023 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-17 04:04+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: fabrixxm , 2018\n" -"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n" +"POT-Creation-Date: 2022-05-11 08:54-0400\n" +"PO-Revision-Date: 2018-05-24 06:41+0000\n" +"Last-Translator: Sylke Vicious , 2023\n" +"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: advancedcontentfilter.php:134 +#: advancedcontentfilter.php:154 #, php-format msgid "Filtered by rule: %s" msgstr "Filtrato dalla regola: %s" -#: advancedcontentfilter.php:147 advancedcontentfilter.php:204 +#: advancedcontentfilter.php:170 advancedcontentfilter.php:225 msgid "Advanced Content Filter" msgstr "Filtro Avanzato Contenuti" -#: advancedcontentfilter.php:203 +#: advancedcontentfilter.php:224 msgid "Back to Addon Settings" msgstr "Torna alle impostazioni del componente aggiuntivo" -#: advancedcontentfilter.php:205 +#: advancedcontentfilter.php:226 msgid "Add a Rule" msgstr "Aggiungi una regola" -#: advancedcontentfilter.php:206 +#: advancedcontentfilter.php:227 msgid "Help" msgstr "Aiuto" -#: advancedcontentfilter.php:207 +#: advancedcontentfilter.php:228 msgid "" "Add and manage your personal content filter rules in this screen. Rules have" " a name and an arbitrary expression that will be matched against post data. " "For a complete reference of the available operations and variables, check " -"the help page." +"the help page." msgstr "" "Aggiungi e gestisci le tue regole personali di filtro contenuti in questa " "schermata. Le regole hanno un nome e un'espressione arbitraria che sarà " "confrontata con i dati del messaggio. Per un elenco completo delle " -"operazioni disponibili, controlla la pagina di aiuto." +"operazioni e variabili disponibili, controlla la pagina di aiuto." -#: advancedcontentfilter.php:208 +#: advancedcontentfilter.php:229 msgid "Your rules" msgstr "Le tue regole" -#: advancedcontentfilter.php:209 +#: advancedcontentfilter.php:230 msgid "" "You have no rules yet! Start adding one by clicking on the button above next" " to the title." @@ -64,110 +67,106 @@ msgstr "" "Non hai ancora nessuna regola! Aggiungine una cliccando sul bottone qui " "sopra a fianco al titolo." -#: advancedcontentfilter.php:210 +#: advancedcontentfilter.php:231 msgid "Disabled" msgstr "Disabilitato" -#: advancedcontentfilter.php:211 +#: advancedcontentfilter.php:232 msgid "Enabled" msgstr "Abilitato" -#: advancedcontentfilter.php:212 +#: advancedcontentfilter.php:233 msgid "Disable this rule" msgstr "Diabilita questa regola" -#: advancedcontentfilter.php:213 +#: advancedcontentfilter.php:234 msgid "Enable this rule" msgstr "Abilita questa regola" -#: advancedcontentfilter.php:214 +#: advancedcontentfilter.php:235 msgid "Edit this rule" msgstr "Modifica questa regola" -#: advancedcontentfilter.php:215 +#: advancedcontentfilter.php:236 msgid "Edit the rule" msgstr "Modifica la regola" -#: advancedcontentfilter.php:216 +#: advancedcontentfilter.php:237 msgid "Save this rule" msgstr "Salva questa regola" -#: advancedcontentfilter.php:217 +#: advancedcontentfilter.php:238 msgid "Delete this rule" msgstr "Elimina questa regola" -#: advancedcontentfilter.php:218 +#: advancedcontentfilter.php:239 msgid "Rule" msgstr "Regola" -#: advancedcontentfilter.php:219 +#: advancedcontentfilter.php:240 msgid "Close" msgstr "Chiudi" -#: advancedcontentfilter.php:220 +#: advancedcontentfilter.php:241 msgid "Add new rule" msgstr "Aggiungi nuova regola" -#: advancedcontentfilter.php:221 +#: advancedcontentfilter.php:242 msgid "Rule Name" msgstr "Nome Regola" -#: advancedcontentfilter.php:222 +#: advancedcontentfilter.php:243 msgid "Rule Expression" msgstr "Espressione Regola" -#: advancedcontentfilter.php:223 -msgid "" -"

Examples:

  • author_link == "
    -"'https://friendica.mrpetovan.com/profile/hypolite'
  • tags
" -msgstr "" -"

Esempi:

  • author_link == "
    -"'https://friendica.mrpetovan.com/profile/hypolite'
  • tags
" - -#: advancedcontentfilter.php:224 +#: advancedcontentfilter.php:244 msgid "Cancel" msgstr "Annulla" -#: advancedcontentfilter.php:290 advancedcontentfilter.php:301 -#: advancedcontentfilter.php:312 advancedcontentfilter.php:346 -#: advancedcontentfilter.php:375 advancedcontentfilter.php:396 +#: advancedcontentfilter.php:295 +msgid "This addon requires this node having at least one post" +msgstr "Questo addon richiede che questo nodo abbia almeno un messaggio" + +#: advancedcontentfilter.php:325 advancedcontentfilter.php:336 +#: advancedcontentfilter.php:347 advancedcontentfilter.php:383 +#: advancedcontentfilter.php:414 advancedcontentfilter.php:437 msgid "You must be logged in to use this method" msgstr "Devi essere autenticato per usare questo metodo" -#: advancedcontentfilter.php:316 advancedcontentfilter.php:350 -#: advancedcontentfilter.php:379 +#: advancedcontentfilter.php:351 advancedcontentfilter.php:387 +#: advancedcontentfilter.php:418 msgid "Invalid form security token, please refresh the page." msgstr "Token di sicurezza invalido, aggiorna la pagina." -#: advancedcontentfilter.php:328 +#: advancedcontentfilter.php:363 msgid "The rule name and expression are required." msgstr "Il nome e l'espressione della regola sono richiesti." -#: advancedcontentfilter.php:340 +#: advancedcontentfilter.php:377 msgid "Rule successfully added" msgstr "Regola aggiunta con successo" -#: advancedcontentfilter.php:354 advancedcontentfilter.php:383 +#: advancedcontentfilter.php:391 advancedcontentfilter.php:422 msgid "Rule doesn't exist or doesn't belong to you." msgstr "La regola non esiste o non ti appartiene." -#: advancedcontentfilter.php:369 +#: advancedcontentfilter.php:408 msgid "Rule successfully updated" msgstr "Regola aggiornata con successo" -#: advancedcontentfilter.php:390 +#: advancedcontentfilter.php:431 msgid "Rule successfully deleted" msgstr "Regola eliminata con successo" -#: advancedcontentfilter.php:400 +#: advancedcontentfilter.php:441 msgid "Missing argument: guid." msgstr "Argomento mancante: guid." -#: advancedcontentfilter.php:406 +#: advancedcontentfilter.php:449 #, php-format msgid "Unknown post with guid: %s" msgstr "Messaggio con guid %s sconosciuto" -#: src/middlewares.php:28 +#: src/middlewares.php:49 msgid "Method not found" msgstr "Metodo non trovato" diff --git a/advancedcontentfilter/lang/it/strings.php b/advancedcontentfilter/lang/it/strings.php index 50cde891..d47d7a5a 100644 --- a/advancedcontentfilter/lang/it/strings.php +++ b/advancedcontentfilter/lang/it/strings.php @@ -3,14 +3,14 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Filtered by rule: %s'] = 'Filtrato dalla regola: %s'; $a->strings['Advanced Content Filter'] = 'Filtro Avanzato Contenuti'; $a->strings['Back to Addon Settings'] = 'Torna alle impostazioni del componente aggiuntivo'; $a->strings['Add a Rule'] = 'Aggiungi una regola'; $a->strings['Help'] = 'Aiuto'; -$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Aggiungi e gestisci le tue regole personali di filtro contenuti in questa schermata. Le regole hanno un nome e un\'espressione arbitraria che sarà confrontata con i dati del messaggio. Per un elenco completo delle operazioni disponibili, controlla la pagina di aiuto.'; +$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Aggiungi e gestisci le tue regole personali di filtro contenuti in questa schermata. Le regole hanno un nome e un\'espressione arbitraria che sarà confrontata con i dati del messaggio. Per un elenco completo delle operazioni e variabili disponibili, controlla la pagina di aiuto.'; $a->strings['Your rules'] = 'Le tue regole'; $a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Non hai ancora nessuna regola! Aggiungine una cliccando sul bottone qui sopra a fianco al titolo.'; $a->strings['Disabled'] = 'Disabilitato'; @@ -26,8 +26,8 @@ $a->strings['Close'] = 'Chiudi'; $a->strings['Add new rule'] = 'Aggiungi nuova regola'; $a->strings['Rule Name'] = 'Nome Regola'; $a->strings['Rule Expression'] = 'Espressione Regola'; -$a->strings['

Examples:

  • author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'
  • tags
'] = '

Esempi:

  • author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'
  • tags
'; $a->strings['Cancel'] = 'Annulla'; +$a->strings['This addon requires this node having at least one post'] = 'Questo addon richiede che questo nodo abbia almeno un messaggio'; $a->strings['You must be logged in to use this method'] = 'Devi essere autenticato per usare questo metodo'; $a->strings['Invalid form security token, please refresh the page.'] = 'Token di sicurezza invalido, aggiorna la pagina.'; $a->strings['The rule name and expression are required.'] = 'Il nome e l\'espressione della regola sono richiesti.'; diff --git a/advancedcontentfilter/src/middlewares.php b/advancedcontentfilter/src/middlewares.php deleted file mode 100644 index dffb9363..00000000 --- a/advancedcontentfilter/src/middlewares.php +++ /dev/null @@ -1,51 +0,0 @@ -. - * - */ - -use Friendica\DI; - -$container = $slim->getContainer(); - -// Error handler based off https://stackoverflow.com/a/48135009/757392 -$container['errorHandler'] = function () { - return function(Psr\Http\Message\RequestInterface $request, Psr\Http\Message\ResponseInterface $response, Exception $exception) - { - $responseCode = 500; - - if (is_a($exception, 'Friendica\Network\HTTPException')) { - $responseCode = $exception->getCode(); - } - - $errors['message'] = $exception->getMessage(); - - $errors['responseCode'] = $responseCode; - - return $response - ->withStatus($responseCode) - ->withJson($errors); - }; -}; - -$container['notFoundHandler'] = function () { - return function () - { - throw new \Friendica\Network\HTTPException\NotFoundException(DI::l10n()->t('Method not found')); - }; -}; diff --git a/advancedcontentfilter/src/routes.php b/advancedcontentfilter/src/routes.php deleted file mode 100644 index 09077bda..00000000 --- a/advancedcontentfilter/src/routes.php +++ /dev/null @@ -1,39 +0,0 @@ -. - * - */ - -/* @var $slim Slim\App */ -$slim->group('/advancedcontentfilter/api', function () { - /* @var $this Slim\App */ - $this->group('/rules', function () { - /* @var $this Slim\App */ - $this->get('', 'advancedcontentfilter_get_rules'); - $this->post('', 'advancedcontentfilter_post_rules'); - - $this->get('/{id}', 'advancedcontentfilter_get_rules_id'); - $this->put('/{id}', 'advancedcontentfilter_put_rules_id'); - $this->delete('/{id}', 'advancedcontentfilter_delete_rules_id'); - }); - - $this->group('/variables', function () { - /* @var $this Slim\App */ - $this->get('/{guid}', 'advancedcontentfilter_get_variables_guid'); - }); -}); diff --git a/advancedcontentfilter/templates/settings.tpl b/advancedcontentfilter/templates/settings.tpl index c9dfbe3a..8b82e595 100644 --- a/advancedcontentfilter/templates/settings.tpl +++ b/advancedcontentfilter/templates/settings.tpl @@ -3,7 +3,7 @@
- -EOT; -} - -function blockem_item_photo_menu(array &$b) -{ - global $blockem_words; - - if (!DI::userSession()->getLocalUserId() || $b['item']['self']) { - return; - } - - $blocked = false; - $author = $b['item']['author-link']; - - if (!empty($blockem_words)) { - foreach($blockem_words as $bloke) { - if (Strings::compareLink($bloke,$author)) { - $blocked = true; - break; - } - } - } - if ($blocked) { - $b['menu'][DI::l10n()->t('Unblock Author')] = 'javascript:blockemUnblock(\'' . $author . '\');'; - } else { - $b['menu'][DI::l10n()->t('Block Author')] = 'javascript:blockemBlock(\'' . $author . '\');'; - } -} - -/** - * This is a statement rather than an actual function definition. The simple - * existence of this method is checked to figure out if the addon offers a - * module. - */ -function blockem_module() {} - -function blockem_init() -{ - if (!DI::userSession()->getLocalUserId()) { - return; - } - - $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'blockem', 'words'); - - if (array_key_exists('block', $_GET) && $_GET['block']) { - if (strlen($words)) { - $words .= ','; - } - - $words .= trim($_GET['block']); - } - - if (array_key_exists('unblock', $_GET) && $_GET['unblock']) { - $arr = explode(',',$words); - $newarr = []; - - if (count($arr)) { - foreach ($arr as $x) { - if (!Strings::compareLink(trim($x), trim($_GET['unblock']))) { - $newarr[] = $x; - } - } - } - - $words = implode(',', $newarr); - } - - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'blockem', 'words', $words); - exit(); -} diff --git a/blockem/lang/C/messages.po b/blockem/lang/C/messages.po deleted file mode 100644 index 64bb3fc4..00000000 --- a/blockem/lang/C/messages.po +++ /dev/null @@ -1,45 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: blockem.php:39 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "" - -#: blockem.php:40 -msgid "Comma separated profile URLS:" -msgstr "" - -#: blockem.php:45 -msgid "Blockem" -msgstr "" - -#: blockem.php:120 -#, php-format -msgid "Filtered user: %s" -msgstr "" - -#: blockem.php:183 -msgid "Unblock Author" -msgstr "" - -#: blockem.php:185 -msgid "Block Author" -msgstr "" diff --git a/blockem/lang/ar/messages.po b/blockem/lang/ar/messages.po deleted file mode 100644 index c9d6d5f9..00000000 --- a/blockem/lang/ar/messages.po +++ /dev/null @@ -1,52 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# abidin toumi , 2021 -# Farida Khalaf , 2021 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-10-29 08:15+0000\n" -"Last-Translator: abidin toumi \n" -"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ar\n" -"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" - -#: blockem.php:42 blockem.php:46 -msgid "Blockem" -msgstr "احجبه
" - -#: blockem.php:50 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "إخفاء محتوى المستخدم عن طريق تصغير المشاركات. و استبدال الصورة الرمزية الخاصة بهم بصورة عامة." - -#: blockem.php:51 -msgid "Comma separated profile URLS:" -msgstr "عناوين الملفات الشخصية مفصولة بفواصل:" - -#: blockem.php:55 -msgid "Save Settings" -msgstr "احفظ الإعدادات" - -#: blockem.php:131 -#, php-format -msgid "Filtered user: %s" -msgstr "ترشيح المستخدم :1%s" - -#: blockem.php:190 -msgid "Unblock Author" -msgstr "ألغ الحجب عن المدون" - -#: blockem.php:192 -msgid "Block Author" -msgstr "احجب المدون" diff --git a/blockem/lang/ar/strings.php b/blockem/lang/ar/strings.php deleted file mode 100644 index 0f58fa22..00000000 --- a/blockem/lang/ar/strings.php +++ /dev/null @@ -1,14 +0,0 @@ -=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; } -}} -$a->strings['Blockem'] = 'احجبه
'; -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'إخفاء محتوى المستخدم عن طريق تصغير المشاركات. و استبدال الصورة الرمزية الخاصة بهم بصورة عامة.'; -$a->strings['Comma separated profile URLS:'] = 'عناوين الملفات الشخصية مفصولة بفواصل:'; -$a->strings['Save Settings'] = 'احفظ الإعدادات'; -$a->strings['Filtered user: %s'] = 'ترشيح المستخدم :1%s'; -$a->strings['Unblock Author'] = 'ألغ الحجب عن المدون'; -$a->strings['Block Author'] = 'احجب المدون'; diff --git a/blockem/lang/ca/messages.po b/blockem/lang/ca/messages.po deleted file mode 100644 index 6d4c3468..00000000 --- a/blockem/lang/ca/messages.po +++ /dev/null @@ -1,59 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Joan Bar , 2019 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-17 10:23+0200\n" -"PO-Revision-Date: 2019-10-14 11:50+0000\n" -"Last-Translator: Joan Bar \n" -"Language-Team: Catalan (http://www.transifex.com/Friendica/friendica/language/ca/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:54 blockem.php:58 -msgid "Blockem" -msgstr "Blockem" - -#: blockem.php:62 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Amaga el contingut de l'usuari mitjançant la publicació col·lapsada. També substitueix el seu avatar per una imatge genèrica" - -#: blockem.php:63 -msgid "Comma separated profile URLS:" -msgstr "URL de perfil separats per comes:" - -#: blockem.php:67 -msgid "Save Settings" -msgstr "Desa la configuració" - -#: blockem.php:81 -msgid "BLOCKEM Settings saved." -msgstr "S'ha desat la configuració de BLOCKEM." - -#: blockem.php:143 -#, php-format -msgid "Filtered user: %s" -msgstr "Usuari filtrat:%s" - -#: blockem.php:202 -msgid "Unblock Author" -msgstr "Desbloca l'autor" - -#: blockem.php:204 -msgid "Block Author" -msgstr "Autor de bloc" - -#: blockem.php:244 -msgid "blockem settings updated" -msgstr "S'ha actualitzat la configuració de blockem" diff --git a/blockem/lang/ca/strings.php b/blockem/lang/ca/strings.php deleted file mode 100644 index be4deede..00000000 --- a/blockem/lang/ca/strings.php +++ /dev/null @@ -1,16 +0,0 @@ -strings['Blockem'] = 'Blockem'; -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Amaga el contingut de l\'usuari mitjançant la publicació col·lapsada. També substitueix el seu avatar per una imatge genèrica'; -$a->strings['Comma separated profile URLS:'] = 'URL de perfil separats per comes:'; -$a->strings['Save Settings'] = 'Desa la configuració'; -$a->strings['BLOCKEM Settings saved.'] = 'S\'ha desat la configuració de BLOCKEM.'; -$a->strings['Filtered user: %s'] = 'Usuari filtrat:%s'; -$a->strings['Unblock Author'] = 'Desbloca l\'autor'; -$a->strings['Block Author'] = 'Autor de bloc'; -$a->strings['blockem settings updated'] = 'S\'ha actualitzat la configuració de blockem'; diff --git a/blockem/lang/cs/messages.po b/blockem/lang/cs/messages.po deleted file mode 100644 index fb90a2ca..00000000 --- a/blockem/lang/cs/messages.po +++ /dev/null @@ -1,60 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Aditoo, 2018 -# michal_s , 2014 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-17 10:23+0200\n" -"PO-Revision-Date: 2018-08-18 12:25+0000\n" -"Last-Translator: Aditoo\n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" - -#: blockem.php:54 blockem.php:58 -msgid "Blockem" -msgstr "Blockem" - -#: blockem.php:62 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Skrývá uživatelský obsah zabalením příspěvků. Navíc nahrazuje avatar generickým obrázkem." - -#: blockem.php:63 -msgid "Comma separated profile URLS:" -msgstr "URL adresy profilů, oddělené čárkami:" - -#: blockem.php:67 -msgid "Save Settings" -msgstr "Uložit nastavení" - -#: blockem.php:81 -msgid "BLOCKEM Settings saved." -msgstr "Nastavení BLOCKEM uložena." - -#: blockem.php:143 -#, php-format -msgid "Filtered user: %s" -msgstr "Filtrovaný uživatel: %s" - -#: blockem.php:202 -msgid "Unblock Author" -msgstr "Odblokovat autora" - -#: blockem.php:204 -msgid "Block Author" -msgstr "Zablokovat autora" - -#: blockem.php:244 -msgid "blockem settings updated" -msgstr "nastavení blockem aktualizována" diff --git a/blockem/lang/cs/strings.php b/blockem/lang/cs/strings.php deleted file mode 100644 index ac32d78f..00000000 --- a/blockem/lang/cs/strings.php +++ /dev/null @@ -1,16 +0,0 @@ -= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } -}} -$a->strings['Blockem'] = 'Blockem'; -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Skrývá uživatelský obsah zabalením příspěvků. Navíc nahrazuje avatar generickým obrázkem.'; -$a->strings['Comma separated profile URLS:'] = 'URL adresy profilů, oddělené čárkami:'; -$a->strings['Save Settings'] = 'Uložit nastavení'; -$a->strings['BLOCKEM Settings saved.'] = 'Nastavení BLOCKEM uložena.'; -$a->strings['Filtered user: %s'] = 'Filtrovaný uživatel: %s'; -$a->strings['Unblock Author'] = 'Odblokovat autora'; -$a->strings['Block Author'] = 'Zablokovat autora'; -$a->strings['blockem settings updated'] = 'nastavení blockem aktualizována'; diff --git a/blockem/lang/da-dk/messages.po b/blockem/lang/da-dk/messages.po deleted file mode 100644 index e4a80bff..00000000 --- a/blockem/lang/da-dk/messages.po +++ /dev/null @@ -1,47 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Anton , 2022 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" -"PO-Revision-Date: 2014-06-22 11:20+0000\n" -"Last-Translator: Anton , 2022\n" -"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: da_DK\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:39 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Skjul brugers indhold ved at kollapse deres opslag. Erstatter også deres avatar med et generisk billede." - -#: blockem.php:40 -msgid "Comma separated profile URLS:" -msgstr "Kommasepareret liste over profil-URL's:" - -#: blockem.php:45 -msgid "Blockem" -msgstr "Blokdem" - -#: blockem.php:120 -#, php-format -msgid "Filtered user: %s" -msgstr "Filtreret bruger: %s" - -#: blockem.php:183 -msgid "Unblock Author" -msgstr "Fjern blokering af forfatter" - -#: blockem.php:185 -msgid "Block Author" -msgstr "Blokér forfatter" diff --git a/blockem/lang/da-dk/strings.php b/blockem/lang/da-dk/strings.php deleted file mode 100644 index e99144ec..00000000 --- a/blockem/lang/da-dk/strings.php +++ /dev/null @@ -1,13 +0,0 @@ -strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Skjul brugers indhold ved at kollapse deres opslag. Erstatter også deres avatar med et generisk billede.'; -$a->strings['Comma separated profile URLS:'] = 'Kommasepareret liste over profil-URL\'s:'; -$a->strings['Blockem'] = 'Blokdem'; -$a->strings['Filtered user: %s'] = 'Filtreret bruger: %s'; -$a->strings['Unblock Author'] = 'Fjern blokering af forfatter'; -$a->strings['Block Author'] = 'Blokér forfatter'; diff --git a/blockem/lang/de/messages.po b/blockem/lang/de/messages.po deleted file mode 100644 index d1e2f704..00000000 --- a/blockem/lang/de/messages.po +++ /dev/null @@ -1,50 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Andreas H., 2018 -# Tobias Diekershoff , 2014 -# Tobias Diekershoff , 2018 -# Ulf Rompe , 2019 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" -"PO-Revision-Date: 2021-12-22 15:27+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: de\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:39 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Verbirgt Inhalte von Benutzern durch Zusammenklappen der Beiträge. Des Weiteren wird das Profilbild durch einen generischen Avatar ersetzt." - -#: blockem.php:40 -msgid "Comma separated profile URLS:" -msgstr "Komma-separierte Liste von Profil-URLs" - -#: blockem.php:45 -msgid "Blockem" -msgstr "Blockem" - -#: blockem.php:120 -#, php-format -msgid "Filtered user: %s" -msgstr "Gefilterte Person: %s" - -#: blockem.php:183 -msgid "Unblock Author" -msgstr "Autor freischalten" - -#: blockem.php:185 -msgid "Block Author" -msgstr "Autor blockieren" diff --git a/blockem/lang/de/strings.php b/blockem/lang/de/strings.php deleted file mode 100644 index 109af368..00000000 --- a/blockem/lang/de/strings.php +++ /dev/null @@ -1,13 +0,0 @@ -strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Verbirgt Inhalte von Benutzern durch Zusammenklappen der Beiträge. Des Weiteren wird das Profilbild durch einen generischen Avatar ersetzt.'; -$a->strings['Comma separated profile URLS:'] = 'Komma-separierte Liste von Profil-URLs'; -$a->strings['Blockem'] = 'Blockem'; -$a->strings['Filtered user: %s'] = 'Gefilterte Person: %s'; -$a->strings['Unblock Author'] = 'Autor freischalten'; -$a->strings['Block Author'] = 'Autor blockieren'; diff --git a/blockem/lang/en-gb/messages.po b/blockem/lang/en-gb/messages.po deleted file mode 100644 index 6bcc7b9b..00000000 --- a/blockem/lang/en-gb/messages.po +++ /dev/null @@ -1,59 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Andy H3 , 2018 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-09 13:00+0100\n" -"PO-Revision-Date: 2018-03-15 14:10+0000\n" -"Last-Translator: Andy H3 \n" -"Language-Team: English (United Kingdom) (http://www.transifex.com/Friendica/friendica/language/en_GB/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: en_GB\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:51 blockem.php:55 -msgid "\"Blockem\"" -msgstr "\"Blockem\"" - -#: blockem.php:59 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Hides user's content by collapsing posts. Also replaces their avatar with generic image." - -#: blockem.php:60 -msgid "Comma separated profile URLS:" -msgstr "Comma separated profile URLs:" - -#: blockem.php:64 -msgid "Save Settings" -msgstr "Save settings" - -#: blockem.php:77 -msgid "BLOCKEM Settings saved." -msgstr "Blockem settings saved." - -#: blockem.php:140 -#, php-format -msgid "Hidden content by %s - Click to open/close" -msgstr "Hidden content by %s - Reveal/hide" - -#: blockem.php:193 -msgid "Unblock Author" -msgstr "Unblock author" - -#: blockem.php:195 -msgid "Block Author" -msgstr "Block author" - -#: blockem.php:227 -msgid "blockem settings updated" -msgstr "Blockem settings updated" diff --git a/blockem/lang/en-gb/strings.php b/blockem/lang/en-gb/strings.php deleted file mode 100644 index 0b9d9e4b..00000000 --- a/blockem/lang/en-gb/strings.php +++ /dev/null @@ -1,16 +0,0 @@ -strings['"Blockem"'] = '"Blockem"'; -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'; -$a->strings['Comma separated profile URLS:'] = 'Comma separated profile URLs:'; -$a->strings['Save Settings'] = 'Save settings'; -$a->strings['BLOCKEM Settings saved.'] = 'Blockem settings saved.'; -$a->strings['Hidden content by %s - Click to open/close'] = 'Hidden content by %s - Reveal/hide'; -$a->strings['Unblock Author'] = 'Unblock author'; -$a->strings['Block Author'] = 'Block author'; -$a->strings['blockem settings updated'] = 'Blockem settings updated'; diff --git a/blockem/lang/en-us/messages.po b/blockem/lang/en-us/messages.po deleted file mode 100644 index 1d64620b..00000000 --- a/blockem/lang/en-us/messages.po +++ /dev/null @@ -1,61 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Adam Clark , 2018 -# Andy H3 , 2018 -# R C , 2018 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 11:11-0400\n" -"PO-Revision-Date: 2018-06-13 02:40+0000\n" -"Last-Translator: R C \n" -"Language-Team: English (United States) (http://www.transifex.com/Friendica/friendica/language/en_US/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: en_US\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:52 blockem.php:56 -msgid "\"Blockem\"" -msgstr "Blockem" - -#: blockem.php:60 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Hides user's content by collapsing posts. Also replaces their avatar with generic image." - -#: blockem.php:61 -msgid "Comma separated profile URLS:" -msgstr "Comma-separated profile URLs:" - -#: blockem.php:65 -msgid "Save Settings" -msgstr "Save settings" - -#: blockem.php:78 -msgid "BLOCKEM Settings saved." -msgstr "Blockem settings saved." - -#: blockem.php:136 -#, php-format -msgid "Filtered user: %s" -msgstr "Filtered user: %s" - -#: blockem.php:189 -msgid "Unblock Author" -msgstr "Unblock author" - -#: blockem.php:191 -msgid "Block Author" -msgstr "Block author" - -#: blockem.php:223 -msgid "blockem settings updated" -msgstr "Blockem settings updated" diff --git a/blockem/lang/en-us/strings.php b/blockem/lang/en-us/strings.php deleted file mode 100644 index fd76a1bc..00000000 --- a/blockem/lang/en-us/strings.php +++ /dev/null @@ -1,16 +0,0 @@ -strings['"Blockem"'] = 'Blockem'; -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'; -$a->strings['Comma separated profile URLS:'] = 'Comma-separated profile URLs:'; -$a->strings['Save Settings'] = 'Save settings'; -$a->strings['BLOCKEM Settings saved.'] = 'Blockem settings saved.'; -$a->strings['Filtered user: %s'] = 'Filtered user: %s'; -$a->strings['Unblock Author'] = 'Unblock author'; -$a->strings['Block Author'] = 'Block author'; -$a->strings['blockem settings updated'] = 'Blockem settings updated'; diff --git a/blockem/lang/eo/strings.php b/blockem/lang/eo/strings.php deleted file mode 100644 index b6116507..00000000 --- a/blockem/lang/eo/strings.php +++ /dev/null @@ -1,10 +0,0 @@ -strings["\"Blockem\" Settings"] = "\"Blockem\" Agordoj"; -$a->strings["Comma separated profile URLS to block"] = "Blokotaj URL adresoj, disigita per komo"; -$a->strings["Submit"] = "Sendi"; -$a->strings["BLOCKEM Settings saved."] = "Konservis Agordojn de BLOCKEM."; -$a->strings["Blocked %s - Click to open/close"] = "%s blokita - Klaku por malfermi/fermi"; -$a->strings["Unblock Author"] = "Malbloki Aŭtoron"; -$a->strings["Block Author"] = "Bloki Aŭtoron"; -$a->strings["blockem settings updated"] = "Ĝisdatigis la blockem agordojn"; diff --git a/blockem/lang/es/messages.po b/blockem/lang/es/messages.po deleted file mode 100644 index 0b59921e..00000000 --- a/blockem/lang/es/messages.po +++ /dev/null @@ -1,53 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Albert, 2018 -# Senex Petrovic , 2021 -# Tupambae.org, 2016 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-04-01 09:45+0000\n" -"Last-Translator: Senex Petrovic \n" -"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:42 blockem.php:46 -msgid "Blockem" -msgstr "Blockem (Bloquealos)" - -#: blockem.php:50 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Oculta el contenido del usuario al colapsar las publicaciones. También reemplaza su avatar con una imagen genérica." - -#: blockem.php:51 -msgid "Comma separated profile URLS:" -msgstr "URLs de perfil separadas por comas:" - -#: blockem.php:55 -msgid "Save Settings" -msgstr "Guardar configuración" - -#: blockem.php:131 -#, php-format -msgid "Filtered user: %s" -msgstr "Usuario filtrado: %s" - -#: blockem.php:190 -msgid "Unblock Author" -msgstr "Desbloquear autor" - -#: blockem.php:192 -msgid "Block Author" -msgstr "Bloquear autor" diff --git a/blockem/lang/es/strings.php b/blockem/lang/es/strings.php deleted file mode 100644 index 7d1de601..00000000 --- a/blockem/lang/es/strings.php +++ /dev/null @@ -1,14 +0,0 @@ -strings['Blockem'] = 'Blockem (Bloquealos)'; -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Oculta el contenido del usuario al colapsar las publicaciones. También reemplaza su avatar con una imagen genérica.'; -$a->strings['Comma separated profile URLS:'] = 'URLs de perfil separadas por comas:'; -$a->strings['Save Settings'] = 'Guardar configuración'; -$a->strings['Filtered user: %s'] = 'Usuario filtrado: %s'; -$a->strings['Unblock Author'] = 'Desbloquear autor'; -$a->strings['Block Author'] = 'Bloquear autor'; diff --git a/blockem/lang/fi-fi/messages.po b/blockem/lang/fi-fi/messages.po deleted file mode 100644 index 4fac9aa7..00000000 --- a/blockem/lang/fi-fi/messages.po +++ /dev/null @@ -1,60 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Kris, 2018 -# Kris, 2018 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 11:11-0400\n" -"PO-Revision-Date: 2018-04-18 14:44+0000\n" -"Last-Translator: Kris\n" -"Language-Team: Finnish (Finland) (http://www.transifex.com/Friendica/friendica/language/fi_FI/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fi_FI\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:52 blockem.php:56 -msgid "\"Blockem\"" -msgstr "\"Blockem\"" - -#: blockem.php:60 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "" - -#: blockem.php:61 -msgid "Comma separated profile URLS:" -msgstr "Profiilien URL-osoitteet pilkulla erotettuina:" - -#: blockem.php:65 -msgid "Save Settings" -msgstr "Tallenna asetukset" - -#: blockem.php:78 -msgid "BLOCKEM Settings saved." -msgstr "Blockem -asetukset tallennettu" - -#: blockem.php:136 -#, php-format -msgid "Filtered user: %s" -msgstr "Suodatettu käyttäjä: %s" - -#: blockem.php:189 -msgid "Unblock Author" -msgstr "Poista kirjoittaja estolistalta" - -#: blockem.php:191 -msgid "Block Author" -msgstr "Lisää kirjoittaja estolistalle" - -#: blockem.php:223 -msgid "blockem settings updated" -msgstr "blockem -asetukset päivitetty" diff --git a/blockem/lang/fi-fi/strings.php b/blockem/lang/fi-fi/strings.php deleted file mode 100644 index d15b4a56..00000000 --- a/blockem/lang/fi-fi/strings.php +++ /dev/null @@ -1,15 +0,0 @@ -strings['"Blockem"'] = '"Blockem"'; -$a->strings['Comma separated profile URLS:'] = 'Profiilien URL-osoitteet pilkulla erotettuina:'; -$a->strings['Save Settings'] = 'Tallenna asetukset'; -$a->strings['BLOCKEM Settings saved.'] = 'Blockem -asetukset tallennettu'; -$a->strings['Filtered user: %s'] = 'Suodatettu käyttäjä: %s'; -$a->strings['Unblock Author'] = 'Poista kirjoittaja estolistalta'; -$a->strings['Block Author'] = 'Lisää kirjoittaja estolistalle'; -$a->strings['blockem settings updated'] = 'blockem -asetukset päivitetty'; diff --git a/blockem/lang/fr/messages.po b/blockem/lang/fr/messages.po deleted file mode 100644 index d3617290..00000000 --- a/blockem/lang/fr/messages.po +++ /dev/null @@ -1,50 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Hypolite Petovan , 2016 -# Marie Olive , 2018 -# StefOfficiel , 2015 -# Vladimir Núñez , 2018 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" -"PO-Revision-Date: 2014-06-22 11:20+0000\n" -"Last-Translator: Vladimir Núñez , 2018\n" -"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" - -#: blockem.php:39 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Cache le contenu de l'utilisateur en contractant les publications. Remplace aussi leur avatar par une image générique." - -#: blockem.php:40 -msgid "Comma separated profile URLS:" -msgstr "URLs de profil séparées par des virgules:" - -#: blockem.php:45 -msgid "Blockem" -msgstr "Bloquez-les" - -#: blockem.php:120 -#, php-format -msgid "Filtered user: %s" -msgstr "Utilisateur filtré:%s" - -#: blockem.php:183 -msgid "Unblock Author" -msgstr "Débloquer l'Auteur" - -#: blockem.php:185 -msgid "Block Author" -msgstr "Bloquer l'Auteur" diff --git a/blockem/lang/fr/strings.php b/blockem/lang/fr/strings.php deleted file mode 100644 index 26b86f24..00000000 --- a/blockem/lang/fr/strings.php +++ /dev/null @@ -1,13 +0,0 @@ -strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Cache le contenu de l\'utilisateur en contractant les publications. Remplace aussi leur avatar par une image générique.'; -$a->strings['Comma separated profile URLS:'] = 'URLs de profil séparées par des virgules:'; -$a->strings['Blockem'] = 'Bloquez-les'; -$a->strings['Filtered user: %s'] = 'Utilisateur filtré:%s'; -$a->strings['Unblock Author'] = 'Débloquer l\'Auteur'; -$a->strings['Block Author'] = 'Bloquer l\'Auteur'; diff --git a/blockem/lang/hu/messages.po b/blockem/lang/hu/messages.po deleted file mode 100644 index 3a29b820..00000000 --- a/blockem/lang/hu/messages.po +++ /dev/null @@ -1,47 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Balázs Úr, 2020 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" -"PO-Revision-Date: 2014-06-22 11:20+0000\n" -"Last-Translator: Balázs Úr, 2020\n" -"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: hu\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:39 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Elrejti a felhasználók tartalmát a bejegyzések összecsukásával. Ezenkívül lecseréli a profilképeiket egy általános képre." - -#: blockem.php:40 -msgid "Comma separated profile URLS:" -msgstr "Profil URL-ek vesszővel elválasztva:" - -#: blockem.php:45 -msgid "Blockem" -msgstr "Blockem" - -#: blockem.php:120 -#, php-format -msgid "Filtered user: %s" -msgstr "Kiszűrt felhasználó: %s" - -#: blockem.php:183 -msgid "Unblock Author" -msgstr "Szerző tiltásának feloldása" - -#: blockem.php:185 -msgid "Block Author" -msgstr "Szerző tiltása" diff --git a/blockem/lang/hu/strings.php b/blockem/lang/hu/strings.php deleted file mode 100644 index 5a3abfec..00000000 --- a/blockem/lang/hu/strings.php +++ /dev/null @@ -1,13 +0,0 @@ -strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Elrejti a felhasználók tartalmát a bejegyzések összecsukásával. Ezenkívül lecseréli a profilképeiket egy általános képre.'; -$a->strings['Comma separated profile URLS:'] = 'Profil URL-ek vesszővel elválasztva:'; -$a->strings['Blockem'] = 'Blockem'; -$a->strings['Filtered user: %s'] = 'Kiszűrt felhasználó: %s'; -$a->strings['Unblock Author'] = 'Szerző tiltásának feloldása'; -$a->strings['Block Author'] = 'Szerző tiltása'; diff --git a/blockem/lang/is/strings.php b/blockem/lang/is/strings.php deleted file mode 100644 index 3075c457..00000000 --- a/blockem/lang/is/strings.php +++ /dev/null @@ -1,10 +0,0 @@ -strings["\"Blockem\" Settings"] = "\"Blockem\" stillingar"; -$a->strings["Comma separated profile URLS to block"] = "Banna lista af forsíðum (komma á milli)"; -$a->strings["Submit"] = "Senda inn"; -$a->strings["BLOCKEM Settings saved."] = "BLOCKEM stillingar vistaðar."; -$a->strings["Blocked %s - Click to open/close"] = "%s sett í straff - Smella til að taka úr/setja á"; -$a->strings["Unblock Author"] = "Leyfa notanda"; -$a->strings["Block Author"] = "Banna notanda"; -$a->strings["blockem settings updated"] = ""; diff --git a/blockem/lang/it/messages.po b/blockem/lang/it/messages.po deleted file mode 100644 index cdf74f99..00000000 --- a/blockem/lang/it/messages.po +++ /dev/null @@ -1,59 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# fabrixxm , 2014,2018-2019 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-17 10:23+0200\n" -"PO-Revision-Date: 2019-03-11 14:21+0000\n" -"Last-Translator: fabrixxm \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:54 blockem.php:58 -msgid "Blockem" -msgstr "Blockem" - -#: blockem.php:62 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Nascondi il contenuto degli utenti collassando i messaggi. Sostituisce anche gli avatar con un'immagine generica." - -#: blockem.php:63 -msgid "Comma separated profile URLS:" -msgstr "URL profili separati da virgola:" - -#: blockem.php:67 -msgid "Save Settings" -msgstr "Salva Impostazioni" - -#: blockem.php:81 -msgid "BLOCKEM Settings saved." -msgstr "Impostazioni BLOCKEM salvate." - -#: blockem.php:143 -#, php-format -msgid "Filtered user: %s" -msgstr "Utente filtrato: %s" - -#: blockem.php:202 -msgid "Unblock Author" -msgstr "Sblocca autore" - -#: blockem.php:204 -msgid "Block Author" -msgstr "Blocca autore" - -#: blockem.php:244 -msgid "blockem settings updated" -msgstr "Impostazioni 'blockem' aggiornate." diff --git a/blockem/lang/it/strings.php b/blockem/lang/it/strings.php deleted file mode 100644 index aa73286a..00000000 --- a/blockem/lang/it/strings.php +++ /dev/null @@ -1,16 +0,0 @@ -strings['Blockem'] = 'Blockem'; -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Nascondi il contenuto degli utenti collassando i messaggi. Sostituisce anche gli avatar con un\'immagine generica.'; -$a->strings['Comma separated profile URLS:'] = 'URL profili separati da virgola:'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; -$a->strings['BLOCKEM Settings saved.'] = 'Impostazioni BLOCKEM salvate.'; -$a->strings['Filtered user: %s'] = 'Utente filtrato: %s'; -$a->strings['Unblock Author'] = 'Sblocca autore'; -$a->strings['Block Author'] = 'Blocca autore'; -$a->strings['blockem settings updated'] = 'Impostazioni \'blockem\' aggiornate.'; diff --git a/blockem/lang/nb-no/strings.php b/blockem/lang/nb-no/strings.php deleted file mode 100644 index 0dd6660d..00000000 --- a/blockem/lang/nb-no/strings.php +++ /dev/null @@ -1,10 +0,0 @@ -strings["\"Blockem\" Settings"] = ""; -$a->strings["Comma separated profile URLS to block"] = ""; -$a->strings["Submit"] = "Lagre"; -$a->strings["BLOCKEM Settings saved."] = ""; -$a->strings["Blocked %s - Click to open/close"] = ""; -$a->strings["Unblock Author"] = ""; -$a->strings["Block Author"] = ""; -$a->strings["blockem settings updated"] = ""; diff --git a/blockem/lang/nl/messages.po b/blockem/lang/nl/messages.po deleted file mode 100644 index f8bde25c..00000000 --- a/blockem/lang/nl/messages.po +++ /dev/null @@ -1,60 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# AgnesElisa , 2018 -# Jeroen De Meerleer , 2018 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-17 10:23+0200\n" -"PO-Revision-Date: 2018-08-24 13:49+0000\n" -"Last-Translator: Jeroen De Meerleer \n" -"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: nl\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:54 blockem.php:58 -msgid "Blockem" -msgstr "Blockem" - -#: blockem.php:62 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Verbergt de inhoud van het bericht van de gebruiker. Daarnaast vervangt het de avatar door een standaardafbeelding." - -#: blockem.php:63 -msgid "Comma separated profile URLS:" -msgstr "Profiel URLs (kommagescheiden):" - -#: blockem.php:67 -msgid "Save Settings" -msgstr "Instellingen opslaan" - -#: blockem.php:81 -msgid "BLOCKEM Settings saved." -msgstr "BLOCKEM instellingen opgeslagen." - -#: blockem.php:143 -#, php-format -msgid "Filtered user: %s" -msgstr "Gefilterde gebruiker: %s" - -#: blockem.php:202 -msgid "Unblock Author" -msgstr "Deblokkeer Auteur" - -#: blockem.php:204 -msgid "Block Author" -msgstr "Auteur blokkeren" - -#: blockem.php:244 -msgid "blockem settings updated" -msgstr "blockem instellingen opgeslagen" diff --git a/blockem/lang/nl/strings.php b/blockem/lang/nl/strings.php deleted file mode 100644 index b523cdc4..00000000 --- a/blockem/lang/nl/strings.php +++ /dev/null @@ -1,16 +0,0 @@ -strings['Blockem'] = 'Blockem'; -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Verbergt de inhoud van het bericht van de gebruiker. Daarnaast vervangt het de avatar door een standaardafbeelding.'; -$a->strings['Comma separated profile URLS:'] = 'Profiel URLs (kommagescheiden):'; -$a->strings['Save Settings'] = 'Instellingen opslaan'; -$a->strings['BLOCKEM Settings saved.'] = 'BLOCKEM instellingen opgeslagen.'; -$a->strings['Filtered user: %s'] = 'Gefilterde gebruiker: %s'; -$a->strings['Unblock Author'] = 'Deblokkeer Auteur'; -$a->strings['Block Author'] = 'Auteur blokkeren'; -$a->strings['blockem settings updated'] = 'blockem instellingen opgeslagen'; diff --git a/blockem/lang/pl/messages.po b/blockem/lang/pl/messages.po deleted file mode 100644 index 8e70e0b5..00000000 --- a/blockem/lang/pl/messages.po +++ /dev/null @@ -1,47 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Waldemar Stoczkowski, 2018 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" -"PO-Revision-Date: 2014-06-22 11:20+0000\n" -"Last-Translator: Waldemar Stoczkowski, 2018\n" -"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" -"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" - -#: blockem.php:39 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Ukrywa zawartość użytkownika, zwijając posty. Zastępuje również awatar wygenerowanym obrazem." - -#: blockem.php:40 -msgid "Comma separated profile URLS:" -msgstr "Rozdzielone przecinkami adresy URL profilu:" - -#: blockem.php:45 -msgid "Blockem" -msgstr "Zablokowanie" - -#: blockem.php:120 -#, php-format -msgid "Filtered user: %s" -msgstr "Użytkownik filtrowany: %s" - -#: blockem.php:183 -msgid "Unblock Author" -msgstr "Odblokuj autora" - -#: blockem.php:185 -msgid "Block Author" -msgstr "Zablokuj autora" diff --git a/blockem/lang/pl/strings.php b/blockem/lang/pl/strings.php deleted file mode 100644 index 49951a68..00000000 --- a/blockem/lang/pl/strings.php +++ /dev/null @@ -1,13 +0,0 @@ -=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } -}} -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Ukrywa zawartość użytkownika, zwijając posty. Zastępuje również awatar wygenerowanym obrazem.'; -$a->strings['Comma separated profile URLS:'] = 'Rozdzielone przecinkami adresy URL profilu:'; -$a->strings['Blockem'] = 'Zablokowanie'; -$a->strings['Filtered user: %s'] = 'Użytkownik filtrowany: %s'; -$a->strings['Unblock Author'] = 'Odblokuj autora'; -$a->strings['Block Author'] = 'Zablokuj autora'; diff --git a/blockem/lang/pt-br/strings.php b/blockem/lang/pt-br/strings.php deleted file mode 100644 index 49f69cc3..00000000 --- a/blockem/lang/pt-br/strings.php +++ /dev/null @@ -1,10 +0,0 @@ -strings["\"Blockem\" Settings"] = "Configurações \"Blockem\""; -$a->strings["Comma separated profile URLS to block"] = "URLS de perfis separados por vírgulas a serem bloqueados"; -$a->strings["Submit"] = "Enviar"; -$a->strings["BLOCKEM Settings saved."] = "Configurações BLOCKEM armazenadas."; -$a->strings["Blocked %s - Click to open/close"] = "Bloqueado %s - Clique para abrir/fechar"; -$a->strings["Unblock Author"] = "Desbloqueie Autor"; -$a->strings["Block Author"] = "Bloqueie Autor"; -$a->strings["blockem settings updated"] = "configurações blockem atualizadas"; diff --git a/blockem/lang/ro/messages.po b/blockem/lang/ro/messages.po deleted file mode 100644 index a74e5757..00000000 --- a/blockem/lang/ro/messages.po +++ /dev/null @@ -1,52 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-22 13:18+0200\n" -"PO-Revision-Date: 2014-07-08 11:43+0000\n" -"Last-Translator: Arian - Cazare Muncitori \n" -"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/friendica/language/ro_RO/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ro_RO\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" - -#: blockem.php:53 blockem.php:57 -msgid "\"Blockem\"" -msgstr "\"Blockem\"" - -#: blockem.php:61 -msgid "Comma separated profile URLS to block" -msgstr "Adresele URL de profil, de blocat, separate prin virgulă" - -#: blockem.php:65 -msgid "Save Settings" -msgstr "Salvare Configurări" - -#: blockem.php:78 -msgid "BLOCKEM Settings saved." -msgstr "Configurările BLOCKEM au fost salvate." - -#: blockem.php:142 -#, php-format -msgid "Blocked %s - Click to open/close" -msgstr "%s Blocate - Apăsați pentru a deschide/închide" - -#: blockem.php:197 -msgid "Unblock Author" -msgstr "Deblocare Autor" - -#: blockem.php:199 -msgid "Block Author" -msgstr "Blocare Autor" - -#: blockem.php:231 -msgid "blockem settings updated" -msgstr "Configurările blockem au fost actualizate" diff --git a/blockem/lang/ro/strings.php b/blockem/lang/ro/strings.php deleted file mode 100644 index 6fc8a094..00000000 --- a/blockem/lang/ro/strings.php +++ /dev/null @@ -1,15 +0,0 @@ -19)||(($n%100==0)&&($n!=0)))) { return 2; } else { return 1; } -}} -$a->strings['"Blockem"'] = '"Blockem"'; -$a->strings['Comma separated profile URLS to block'] = 'Adresele URL de profil, de blocat, separate prin virgulă'; -$a->strings['Save Settings'] = 'Salvare Configurări'; -$a->strings['BLOCKEM Settings saved.'] = 'Configurările BLOCKEM au fost salvate.'; -$a->strings['Blocked %s - Click to open/close'] = '%s Blocate - Apăsați pentru a deschide/închide'; -$a->strings['Unblock Author'] = 'Deblocare Autor'; -$a->strings['Block Author'] = 'Blocare Autor'; -$a->strings['blockem settings updated'] = 'Configurările blockem au fost actualizate'; diff --git a/blockem/lang/ru/messages.po b/blockem/lang/ru/messages.po deleted file mode 100644 index 22427327..00000000 --- a/blockem/lang/ru/messages.po +++ /dev/null @@ -1,60 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Alexander An , 2020 -# Stanislav N. , 2017-2018 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-17 10:23+0200\n" -"PO-Revision-Date: 2020-04-23 14:13+0000\n" -"Last-Translator: Alexander An \n" -"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" - -#: blockem.php:54 blockem.php:58 -msgid "Blockem" -msgstr "Blockem" - -#: blockem.php:62 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Скрыть контент пользователя. Также заменяет его аватар изображением по-умолчанию." - -#: blockem.php:63 -msgid "Comma separated profile URLS:" -msgstr "URL профилей, разделенные запятыми:" - -#: blockem.php:67 -msgid "Save Settings" -msgstr "Сохранить настройки" - -#: blockem.php:81 -msgid "BLOCKEM Settings saved." -msgstr "BLOCKEM Настройки сохранены." - -#: blockem.php:143 -#, php-format -msgid "Filtered user: %s" -msgstr "Отфильтрованный пользователь: %s" - -#: blockem.php:202 -msgid "Unblock Author" -msgstr "Разблокировать автора" - -#: blockem.php:204 -msgid "Block Author" -msgstr "Блокировать автора" - -#: blockem.php:244 -msgid "blockem settings updated" -msgstr "Настройки Blockem обновлены" diff --git a/blockem/lang/ru/strings.php b/blockem/lang/ru/strings.php deleted file mode 100644 index ef586740..00000000 --- a/blockem/lang/ru/strings.php +++ /dev/null @@ -1,16 +0,0 @@ -=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } -}} -$a->strings['Blockem'] = 'Blockem'; -$a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Скрыть контент пользователя. Также заменяет его аватар изображением по-умолчанию.'; -$a->strings['Comma separated profile URLS:'] = 'URL профилей, разделенные запятыми:'; -$a->strings['Save Settings'] = 'Сохранить настройки'; -$a->strings['BLOCKEM Settings saved.'] = 'BLOCKEM Настройки сохранены.'; -$a->strings['Filtered user: %s'] = 'Отфильтрованный пользователь: %s'; -$a->strings['Unblock Author'] = 'Разблокировать автора'; -$a->strings['Block Author'] = 'Блокировать автора'; -$a->strings['blockem settings updated'] = 'Настройки Blockem обновлены'; diff --git a/blockem/lang/sv/messages.po b/blockem/lang/sv/messages.po deleted file mode 100644 index ede8ee94..00000000 --- a/blockem/lang/sv/messages.po +++ /dev/null @@ -1,47 +0,0 @@ -# ADDON blockem -# Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. -# -# -# Translators: -# Bjoessi , 2019 -msgid "" -msgstr "" -"Project-Id-Version: friendica\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" -"PO-Revision-Date: 2021-12-22 15:27+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: sv\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: blockem.php:39 -msgid "" -"Hides user's content by collapsing posts. Also replaces their avatar with " -"generic image." -msgstr "Döljer användares inlägg genom sammanslagning nedåt. Användarens profilbild ersätts med en standardbild." - -#: blockem.php:40 -msgid "Comma separated profile URLS:" -msgstr "Kommaseparerade profiladresser:" - -#: blockem.php:45 -msgid "Blockem" -msgstr "BLOCKEM" - -#: blockem.php:120 -#, php-format -msgid "Filtered user: %s" -msgstr "Filtrerat på användare:%s" - -#: blockem.php:183 -msgid "Unblock Author" -msgstr "Avblockera författare" - -#: blockem.php:185 -msgid "Block Author" -msgstr "Blockera författare" diff --git a/blockem/lang/sv/strings.php b/blockem/lang/sv/strings.php deleted file mode 100644 index 724e2d23..00000000 --- a/blockem/lang/sv/strings.php +++ /dev/null @@ -1,13 +0,0 @@ -strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Döljer användares inlägg genom sammanslagning nedåt. Användarens profilbild ersätts med en standardbild.'; -$a->strings['Comma separated profile URLS:'] = 'Kommaseparerade profiladresser:'; -$a->strings['Blockem'] = 'BLOCKEM'; -$a->strings['Filtered user: %s'] = 'Filtrerat på användare:%s'; -$a->strings['Unblock Author'] = 'Avblockera författare'; -$a->strings['Block Author'] = 'Blockera författare'; diff --git a/blockem/lang/zh-cn/strings.php b/blockem/lang/zh-cn/strings.php deleted file mode 100644 index 3a3dfaeb..00000000 --- a/blockem/lang/zh-cn/strings.php +++ /dev/null @@ -1,10 +0,0 @@ -strings["\"Blockem\" Settings"] = "「Blockem」配置"; -$a->strings["Comma separated profile URLS to block"] = "逗号分简介URL为栏"; -$a->strings["Submit"] = "提交"; -$a->strings["BLOCKEM Settings saved."] = "「Blockem」配置保存了。"; -$a->strings["Blocked %s - Click to open/close"] = "%s拦了-点击为开关"; -$a->strings["Unblock Author"] = "不拦作家"; -$a->strings["Block Author"] = "拦作家"; -$a->strings["blockem settings updated"] = "blockem设置更新了"; diff --git a/blockem/templates/settings.tpl b/blockem/templates/settings.tpl deleted file mode 100644 index 67398400..00000000 --- a/blockem/templates/settings.tpl +++ /dev/null @@ -1 +0,0 @@ -{{include file="field_textarea.tpl" field=$words}} diff --git a/bluesky/README.md b/bluesky/README.md new file mode 100644 index 00000000..bf900fcd --- /dev/null +++ b/bluesky/README.md @@ -0,0 +1,9 @@ +Bluesky Addon +============== + +This addon supports posting to and receiving posts from Bluesky. + +No setup is needed for the admins to make it work for their users. + +Bluesky itself is under development as well. It is planned to make it decentral. +The addon is prepared to support different servers. But it isn't enabled yet. \ No newline at end of file diff --git a/bluesky/bluesky.php b/bluesky/bluesky.php new file mode 100644 index 00000000..aef7156c --- /dev/null +++ b/bluesky/bluesky.php @@ -0,0 +1,1205 @@ + + * + * @todo + * Currently technical issues in the core: + * - Outgoing mentions + * + * At some point in time: + * - post videos + * - direct messages + * - Sending Quote shares https://atproto.com/lexicons/app-bsky-embed#appbskyembedrecord and https://atproto.com/lexicons/app-bsky-embed#appbskyembedrecordwithmedia + * + * Possibly not possible: + * - only fetch new posts + * + * Currently not possible, due to limitations in Friendica + * - mute contacts https://atproto.com/lexicons/app-bsky-graph#appbskygraphmuteactor + * - unmute contacts https://atproto.com/lexicons/app-bsky-graph#appbskygraphunmuteactor + * + * Possibly interesting: + * - https://atproto.com/lexicons/com-atproto-label#comatprotolabelsubscribelabels + */ + +use Friendica\Content\Text\BBCode; +use Friendica\Content\Text\Plaintext; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Config\Util\ConfigFileManager; +use Friendica\Core\Hook; +use Friendica\Core\Protocol; +use Friendica\Core\Renderer; +use Friendica\Core\Worker; +use Friendica\Database\DBA; +use Friendica\DI; +use Friendica\Model\Contact; +use Friendica\Model\Conversation; +use Friendica\Model\Item; +use Friendica\Model\Photo; +use Friendica\Model\Post; +use Friendica\Model\User; +use Friendica\Object\Image; +use Friendica\Protocol\Activity; +use Friendica\Protocol\ATProtocol; +use Friendica\Protocol\Relay; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Strings; + +const BLUESKY_DEFAULT_POLL_INTERVAL = 10; // given in minutes +const BLUESKY_IMAGE_SIZE = [1000000, 500000, 100000, 50000]; + +function bluesky_install() +{ + Hook::register('load_config', __FILE__, 'bluesky_load_config'); + Hook::register('hook_fork', __FILE__, 'bluesky_hook_fork'); + Hook::register('post_local', __FILE__, 'bluesky_post_local'); + Hook::register('notifier_normal', __FILE__, 'bluesky_send'); + Hook::register('jot_networks', __FILE__, 'bluesky_jot_nets'); + Hook::register('connector_settings', __FILE__, 'bluesky_settings'); + Hook::register('connector_settings_post', __FILE__, 'bluesky_settings_post'); + Hook::register('cron', __FILE__, 'bluesky_cron'); + Hook::register('support_follow', __FILE__, 'bluesky_support_follow'); + Hook::register('follow', __FILE__, 'bluesky_follow'); + Hook::register('unfollow', __FILE__, 'bluesky_unfollow'); + Hook::register('block', __FILE__, 'bluesky_block'); + Hook::register('unblock', __FILE__, 'bluesky_unblock'); + Hook::register('check_item_notification', __FILE__, 'bluesky_check_item_notification'); + Hook::register('item_by_link', __FILE__, 'bluesky_item_by_link'); +} + +function bluesky_load_config(ConfigFileManager $loader) +{ + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('bluesky'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); +} + +function bluesky_check_item_notification(array &$notification_data) +{ + if (empty($notification_data['uid'])) { + return; + } + + $did = DI::atProtocol()->getUserDid($notification_data['uid']); + if (empty($did)) { + return; + } + + $notification_data['profiles'][] = $did; +} + +function bluesky_item_by_link(array &$hookData) +{ + // Don't overwrite an existing result + if (isset($hookData['item_id'])) { + return; + } + + if (substr($hookData['uri'], 0, 5) != 'at://') { + if (!preg_match('#^' . ATProtocol::WEB . '/profile/(.+)/post/(.+)#', $hookData['uri'], $matches)) { + return; + } + + $did = DI::atProtocol()->getDid($matches[1]); + if (empty($did)) { + return; + } + + DI::logger()->debug('Found bluesky post', ['uri' => $hookData['uri'], 'did' => $did, 'cid' => $matches[2]]); + + $uri = 'at://' . $did . '/app.bsky.feed.post/' . $matches[2]; + } else { + $uri = $hookData['uri']; + } + + $uri = DI::atpProcessor()->fetchMissingPost($uri, $hookData['uid'], Item::PR_FETCHED, 0, 0); + DI::logger()->debug('Got post', ['uri' => $uri]); + if (!empty($uri)) { + $item = Post::selectFirst(['id'], ['uri' => $uri, 'uid' => $hookData['uid']]); + if (!empty($item['id'])) { + $hookData['item_id'] = $item['id']; + } + } +} + +function bluesky_support_follow(array &$data) +{ + if ($data['protocol'] == Protocol::BLUESKY) { + $data['result'] = true; + } +} + +function bluesky_follow(array &$hook_data) +{ + $token = DI::atProtocol()->getUserToken($hook_data['uid']); + if (empty($token)) { + return; + } + + DI::logger()->debug('Check if contact is bluesky', ['data' => $hook_data]); + $contact = DBA::selectFirst('contact', [], ['network' => Protocol::BLUESKY, 'url' => $hook_data['url'], 'uid' => [0, $hook_data['uid']]]); + if (empty($contact)) { + return; + } + + $record = [ + 'subject' => $contact['url'], + 'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + '$type' => 'app.bsky.graph.follow' + ]; + + $post = [ + 'collection' => 'app.bsky.graph.follow', + 'repo' => DI::atProtocol()->getUserDid($hook_data['uid']), + 'record' => $record + ]; + + $activity = DI::atProtocol()->XRPCPost($hook_data['uid'], 'com.atproto.repo.createRecord', $post); + if (!empty($activity->uri)) { + $hook_data['contact'] = $contact; + DI::logger()->debug('Successfully start following', ['url' => $contact['url'], 'uri' => $activity->uri]); + } +} + +function bluesky_unfollow(array &$hook_data) +{ + $token = DI::atProtocol()->getUserToken($hook_data['uid']); + if (empty($token)) { + return; + } + + if ($hook_data['contact']['network'] != Protocol::BLUESKY) { + return; + } + + $data = DI::atProtocol()->XRPCGet('app.bsky.actor.getProfile', ['actor' => $hook_data['contact']['url']], $hook_data['uid']); + if (empty($data->viewer) || empty($data->viewer->following)) { + return; + } + + bluesky_delete_post($data->viewer->following, $hook_data['uid']); + + $hook_data['result'] = true; +} + +function bluesky_block(array &$hook_data) +{ + $token = DI::atProtocol()->getUserToken($hook_data['uid']); + if (empty($token)) { + return; + } + + if ($hook_data['contact']['network'] != Protocol::BLUESKY) { + return; + } + + $record = [ + 'subject' => $hook_data['contact']['url'], + 'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + '$type' => 'app.bsky.graph.block' + ]; + + $post = [ + 'collection' => 'app.bsky.graph.block', + 'repo' => DI::atProtocol()->getUserDid($hook_data['uid']), + 'record' => $record + ]; + + $activity = DI::atProtocol()->XRPCPost($hook_data['uid'], 'com.atproto.repo.createRecord', $post); + if (!empty($activity->uri)) { + $ucid = Contact::getUserContactId($hook_data['contact']['id'], $hook_data['uid']); + if ($ucid) { + Contact::remove($ucid); + } + DI::logger()->debug('Successfully blocked contact', ['url' => $hook_data['contact']['url'], 'uri' => $activity->uri]); + } +} + +function bluesky_unblock(array &$hook_data) +{ + $token = DI::atProtocol()->getUserToken($hook_data['uid']); + if (empty($token)) { + return; + } + + if ($hook_data['contact']['network'] != Protocol::BLUESKY) { + return; + } + + $data = DI::atProtocol()->XRPCGet('app.bsky.actor.getProfile', ['actor' => $hook_data['contact']['url']], $hook_data['uid']); + if (empty($data->viewer) || empty($data->viewer->blocking)) { + return; + } + + bluesky_delete_post($data->viewer->blocking, $hook_data['uid']); + + $hook_data['result'] = true; +} + +function bluesky_addon_admin(string &$o) +{ + $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/bluesky/'); + + $o = Renderer::replaceMacros($t, [ + '$submit' => DI::l10n()->t('Save Settings'), + '$friendica_handles' => ['friendica_handles', DI::l10n()->t('Allow your users to use your hostname for their Bluesky handles'), DI::config()->get('bluesky', 'friendica_handles'), DI::l10n()->t('Before enabling this option, you have to setup a wildcard domain configuration and you have to enable wildcard requests in your webserver configuration. On Apache this is done by adding "ServerAlias *.%s" to your HTTP configuration. You don\'t need to change the HTTPS configuration.', DI::baseUrl()->getHost())], + ]); +} + +function bluesky_addon_admin_post() +{ + DI::config()->set('bluesky', 'friendica_handles', (bool)$_POST['friendica_handles']); +} + +function bluesky_settings(array &$data) +{ + if (!DI::userSession()->getLocalUserId()) { + return; + } + + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post') ?? false; + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post_by_default') ?? false; + $pds = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'pds'); + $handle = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'handle'); + $did = DI::atProtocol()->getUserDid(DI::userSession()->getLocalUserId()); + $token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'access_token'); + $import = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'import') ?? false; + $import_feeds = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'import_feeds') ?? false; + $complete_threads = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'complete_threads') ?? false; + $custom_handle = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'friendica_handle') ?? false; + + if (DI::config()->get('bluesky', 'friendica_handles')) { + $self = User::getById(DI::userSession()->getLocalUserId(), ['nickname']); + $host_handle = $self['nickname'] . '.' . DI::baseUrl()->getHost(); + $friendica_handle = ['bluesky_friendica_handle', DI::l10n()->t('Allow to use %s as your Bluesky handle.', $host_handle), $custom_handle, DI::l10n()->t('When enabled, you can use %s as your Bluesky handle. After you enabled this option, please go to https://bsky.app/settings and select to change your handle. Select that you have got your own domain. Then enter %s and select "No DNS Panel". Then select "Verify Text File".', $host_handle, $host_handle)]; + if ($custom_handle) { + $handle = $host_handle; + } + } else { + $friendica_handle = []; + } + + $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/bluesky/'); + $html = Renderer::replaceMacros($t, [ + '$enable' => ['bluesky', DI::l10n()->t('Enable Bluesky Post Addon'), $enabled], + '$bydefault' => ['bluesky_bydefault', DI::l10n()->t('Post to Bluesky by default'), $def_enabled], + '$import' => ['bluesky_import', DI::l10n()->t('Import the remote timeline'), $import], + '$import_feeds' => ['bluesky_import_feeds', DI::l10n()->t('Import the pinned feeds'), $import_feeds, DI::l10n()->t('When activated, Posts will be imported from all the feeds that you pinned in Bluesky.')], + '$complete_threads' => ['bluesky_complete_threads', DI::l10n()->t('Complete the threads'), $complete_threads, DI::l10n()->t('When activated, the system fetches additional replies for the posts in the timeline. This leads to more complete threads.')], + '$custom_handle' => $friendica_handle, + '$pds' => ['bluesky_pds', DI::l10n()->t('Personal Data Server'), $pds, DI::l10n()->t('The personal data server (PDS) is the system that hosts your profile.'), '', 'readonly'], + '$handle' => ['bluesky_handle', DI::l10n()->t('Bluesky handle'), $handle, '', '', $custom_handle ? 'readonly' : ''], + '$did' => ['bluesky_did', DI::l10n()->t('Bluesky DID'), $did, DI::l10n()->t('This is the unique identifier. It will be fetched automatically, when the handle is entered.'), '', 'readonly'], + '$password' => ['bluesky_password', DI::l10n()->t('Bluesky app password'), '', DI::l10n()->t("Please don't add your real password here, but instead create a specific app password in the Bluesky settings.")], + '$status' => bluesky_get_status($handle, $did, $pds, $token), + ]); + + $data = [ + 'connector' => 'bluesky', + 'title' => DI::l10n()->t('Bluesky Import/Export'), + 'image' => 'images/bluesky.jpg', + 'enabled' => $enabled, + 'html' => $html, + ]; +} + +function bluesky_get_status(string $handle = null, string $did = null, string $pds = null, string $token = null): string +{ + if (empty($handle)) { + return DI::l10n()->t('You are not authenticated. Please enter your handle and the app password.'); + } + + $status = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'status') ?? ATProtocol::STATUS_UNKNOWN; + $message = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'status-message') ?? ''; + + // Fallback mechanism for connection that had been established before the introduction of the status + if ($status == ATProtocol::STATUS_UNKNOWN) { + if (empty($did)) { + $status = ATProtocol::STATUS_DID_FAIL; + } elseif (empty($pds)) { + $status = ATProtocol::STATUS_PDS_FAIL; + } elseif (!empty($token)) { + $status = ATProtocol::STATUS_TOKEN_OK; + } else { + $status = ATProtocol::STATUS_TOKEN_FAIL; + } + } + + switch ($status) { + case ATProtocol::STATUS_TOKEN_OK: + return DI::l10n()->t("You are authenticated to Bluesky. For security reasons the password isn't stored."); + case ATProtocol::STATUS_SUCCESS: + return DI::l10n()->t('The communication with the personal data server service (PDS) is established.'); + case ATProtocol::STATUS_API_FAIL; + return DI::l10n()->t('Communication issues with the personal data server service (PDS): %s', $message); + case ATProtocol::STATUS_DID_FAIL: + return DI::l10n()->t('The DID for the provided handle could not be detected. Please check if you entered the correct handle.'); + case ATProtocol::STATUS_PDS_FAIL: + return DI::l10n()->t('The personal data server service (PDS) could not be detected.'); + case ATProtocol::STATUS_TOKEN_FAIL: + return DI::l10n()->t('The authentication with the provided handle and password failed. Please check if you entered the correct password.'); + default: + return ''; + } +} + +function bluesky_settings_post(array &$b) +{ + if (empty($_POST['bluesky-submit'])) { + return; + } + + $old_pds = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'pds'); + $old_handle = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'handle'); + $old_did = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'did'); + + $handle = trim($_POST['bluesky_handle'], ' @'); + + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'post', intval($_POST['bluesky'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'post_by_default', intval($_POST['bluesky_bydefault'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'handle', $handle); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'import', intval($_POST['bluesky_import'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'import_feeds', intval($_POST['bluesky_import_feeds'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'complete_threads', intval($_POST['bluesky_complete_threads'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'friendica_handle', intval($_POST['bluesky_friendica_handle'] ?? false)); + + if (!empty($handle)) { + $did = DI::atProtocol()->getUserDid(DI::userSession()->getLocalUserId(), empty($old_did) || $old_handle != $handle); + if (!empty($did) && (empty($old_pds) || $old_handle != $handle)) { + $pds = DI::atProtocol()->getPdsOfDid($did); + if (empty($pds)) { + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'status', ATProtocol::STATUS_PDS_FAIL); + } + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'pds', $pds); + } else { + $pds = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'pds'); + } + } else { + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'did'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'pds'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'password'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'access_token'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'refresh_token'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'token_created'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'bluesky', 'status'); + } + + if (!empty($did) && !empty($pds) && !empty($_POST['bluesky_password'])) { + DI::atProtocol()->createUserToken(DI::userSession()->getLocalUserId(), $_POST['bluesky_password']); + } +} + +function bluesky_jot_nets(array &$jotnets_fields) +{ + if (!DI::userSession()->getLocalUserId()) { + return; + } + + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post')) { + $jotnets_fields[] = [ + 'type' => 'checkbox', + 'field' => [ + 'bluesky_enable', + DI::l10n()->t('Post to Bluesky'), + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post_by_default') + ] + ]; + } +} + +function bluesky_cron() +{ + $last = (int)DI::keyValue()->get('bluesky_last_poll'); + + $poll_interval = intval(DI::config()->get('bluesky', 'poll_interval')); + if (!$poll_interval) { + $poll_interval = BLUESKY_DEFAULT_POLL_INTERVAL; + } + + if ($last) { + $next = $last + ($poll_interval * 60); + if ($next > time()) { + DI::logger()->notice('poll interval not reached'); + return; + } + } + DI::logger()->notice('cron_start'); + + $abandon_days = intval(DI::config()->get('system', 'account_abandon_days')); + if ($abandon_days < 1) { + $abandon_days = 0; + } + + $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); + + $pconfigs = DBA::selectToArray('pconfig', [], ["`cat` = ? AND `k` IN (?, ?) AND `v`", 'bluesky', 'import', 'import_feeds']); + foreach ($pconfigs as $pconfig) { + if (empty(DI::atProtocol()->getUserDid($pconfig['uid']))) { + DI::logger()->debug('User has got no valid DID', ['uid' => $pconfig['uid']]); + continue; + } + + if ($abandon_days != 0) { + if (!DBA::exists('user', ["`uid` = ? AND `login_date` >= ?", $pconfig['uid'], $abandon_limit])) { + DI::logger()->notice('abandoned account: timeline from user will not be imported', ['user' => $pconfig['uid']]); + continue; + } + } + + // Refresh the token now, so that it doesn't need to be refreshed in parallel by the following workers + DI::logger()->debug('Refresh the token', ['uid' => $pconfig['uid']]); + DI::atProtocol()->getUserToken($pconfig['uid']); + + $last_sync = DI::pConfig()->get($pconfig['uid'], 'bluesky', 'last_contact_sync'); + if ($last_sync < (time() - 86400)) { + DI::atpActor()->syncContacts($pconfig['uid']); + DI::pConfig()->set($pconfig['uid'], 'bluesky', 'last_contact_sync', time()); + } + + Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/bluesky/bluesky_notifications.php', $pconfig['uid']); + if (DI::pConfig()->get($pconfig['uid'], 'bluesky', 'import')) { + Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/bluesky/bluesky_timeline.php', $pconfig['uid']); + } + if (DI::pConfig()->get($pconfig['uid'], 'bluesky', 'import_feeds')) { + DI::logger()->debug('Fetch feeds for user', ['uid' => $pconfig['uid']]); + $feeds = bluesky_get_feeds($pconfig['uid']); + foreach ($feeds as $feed) { + Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/bluesky/bluesky_feed.php', $pconfig['uid'], $feed); + } + } + DI::logger()->debug('Polling done for user', ['uid' => $pconfig['uid']]); + } + + DI::logger()->notice('Polling done for all users'); + + DI::keyValue()->set('bluesky_last_poll', time()); + + $last_clean = DI::keyValue()->get('bluesky_last_clean'); + if (empty($last_clean) || ($last_clean + 86400 < time())) { + DI::logger()->notice('Start contact cleanup'); + $contacts = DBA::select('account-user-view', ['id', 'pid'], ["`network` = ? AND `uid` != ? AND `rel` = ?", Protocol::BLUESKY, 0, Contact::NOTHING]); + while ($contact = DBA::fetch($contacts)) { + Worker::add(Worker::PRIORITY_LOW, 'MergeContact', $contact['pid'], $contact['id'], 0); + } + DBA::close($contacts); + DI::keyValue()->set('bluesky_last_clean', time()); + DI::logger()->notice('Contact cleanup done'); + } + + DI::logger()->notice('cron_end'); +} + +function bluesky_hook_fork(array &$b) +{ + if ($b['name'] != 'notifier_normal') { + return; + } + + $post = $b['data']; + + if (($post['created'] !== $post['edited']) && !$post['deleted']) { + DI::logger()->info('Editing is not supported by the addon'); + $b['execute'] = false; + return; + } + + if (DI::pConfig()->get($post['uid'], 'bluesky', 'import')) { + // Don't post if it isn't a reply to a bluesky post + if (($post['gravity'] != Item::GRAVITY_PARENT) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::BLUESKY])) { + DI::logger()->notice('No bluesky parent found', ['item' => $post['id']]); + $b['execute'] = false; + return; + } + } elseif (!strstr($post['postopts'] ?? '', 'bluesky') || ($post['gravity'] != Item::GRAVITY_PARENT) || ($post['private'] == Item::PRIVATE)) { + DI::logger()->info('Post will not be exported', ['uid' => $post['uid'], 'postopts' => $post['postopts'], 'gravity' => $post['gravity'], 'private' => $post['private']]); + $b['execute'] = false; + return; + } +} + +function bluesky_post_local(array &$b) +{ + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { + return; + } + + if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) { + return; + } + + $bluesky_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post')); + $bluesky_enable = (($bluesky_post && !empty($_REQUEST['bluesky_enable'])) ? intval($_REQUEST['bluesky_enable']) : 0); + + // if API is used, default to the chosen settings + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post_by_default'))) { + $bluesky_enable = 1; + } + + if (!$bluesky_enable) { + return; + } + + if (strlen($b['postopts'])) { + $b['postopts'] .= ','; + } + + $b['postopts'] .= 'bluesky'; +} + +function bluesky_send(array &$b) +{ + if (($b['created'] !== $b['edited']) && !$b['deleted']) { + return; + } + + if ($b['gravity'] != Item::GRAVITY_PARENT) { + DI::logger()->debug('Got comment', ['item' => $b]); + + if ($b['deleted']) { + $uri = DI::atpProcessor()->getUriClass($b['uri']); + if (empty($uri)) { + DI::logger()->debug('Not a bluesky post', ['uri' => $b['uri']]); + return; + } + bluesky_delete_post($b['uri'], $b['uid']); + return; + } + + $root = DI::atpProcessor()->getUriClass($b['parent-uri']); + $parent = DI::atpProcessor()->getUriClass($b['thr-parent']); + + if (empty($root) || empty($parent)) { + DI::logger()->debug('No bluesky post', ['parent' => $b['parent'], 'thr-parent' => $b['thr-parent']]); + return; + } + + if ($b['gravity'] == Item::GRAVITY_COMMENT) { + DI::logger()->debug('Posting comment', ['root' => $root, 'parent' => $parent]); + bluesky_create_post($b, $root, $parent); + return; + } elseif (in_array($b['verb'], [Activity::LIKE, Activity::ANNOUNCE])) { + bluesky_create_activity($b, $parent); + } + return; + } elseif (($b['private'] == Item::PRIVATE) || !strstr($b['postopts'], 'bluesky')) { + return; + } + + bluesky_create_post($b); +} + +function bluesky_create_activity(array $item, stdClass $parent = null) +{ + $uid = $item['uid']; + $token = DI::atProtocol()->getUserToken($uid); + if (empty($token)) { + return; + } + + $did = DI::atProtocol()->getUserDid($uid); + if (empty($did)) { + return; + } + + $post = []; + + if ($item['verb'] == Activity::LIKE) { + $record = [ + 'subject' => $parent, + 'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + '$type' => 'app.bsky.feed.like' + ]; + + $post = [ + 'collection' => 'app.bsky.feed.like', + 'repo' => $did, + 'record' => $record + ]; + } elseif ($item['verb'] == Activity::ANNOUNCE) { + $record = [ + 'subject' => $parent, + 'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + '$type' => 'app.bsky.feed.repost' + ]; + + $post = [ + 'collection' => 'app.bsky.feed.repost', + 'repo' => $did, + 'record' => $record + ]; + } + + $activity = DI::atProtocol()->XRPCPost($uid, 'com.atproto.repo.createRecord', $post); + if (empty($activity->uri)) { + return; + } + DI::logger()->debug('Activity done', ['return' => $activity]); + $uri = DI::atpProcessor()->getUri($activity); + Item::update(['extid' => $uri], ['guid' => $item['guid']]); + DI::logger()->debug('Set extid', ['id' => $item['id'], 'extid' => $activity]); +} + +function bluesky_create_post(array $item, stdClass $root = null, stdClass $parent = null) +{ + $uid = $item['uid']; + $token = DI::atProtocol()->getUserToken($uid); + if (empty($token)) { + return; + } + + // Try to fetch the language from the post itself + if (!empty($item['language'])) { + $language = array_key_first(json_decode($item['language'], true)); + } else { + $language = ''; + } + + $item['body'] = Post\Media::removeFromBody($item['body']); + + foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::AUDIO, Post\Media::VIDEO, Post\Media::ACTIVITY]) as $media) { + if (strpos($item['body'], $media['url']) === false) { + $item['body'] .= "\n[url]" . $media['url'] . "[/url]\n"; + } + } + + if (!empty($item['quote-uri-id'])) { + $quote = Post::selectFirstPost(['uri', 'plink'], ['uri-id' => $item['quote-uri-id']]); + if (!empty($quote)) { + if ((strpos($item['body'], $quote['plink'] ?: $quote['uri']) === false) && (strpos($item['body'], $quote['uri']) === false)) { + $item['body'] .= "\n[url]" . ($quote['plink'] ?: $quote['uri']) . "[/url]\n"; + } + } + } + + $item['body'] = bluesky_set_mentions($item['body']); + + $urls = bluesky_get_urls($item['body']); + $item['body'] = $urls['body']; + + $msg = Plaintext::getPost($item, 300, false, BBCode::BLUESKY); + foreach ($msg['parts'] as $key => $part) { + + $facets = bluesky_get_facets($part, $urls['urls']); + + $record = [ + 'text' => $facets['body'], + '$type' => 'app.bsky.feed.post', + 'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + ]; + + if (!empty($language)) { + $record['langs'] = [$language]; + } + + if (!empty($facets['facets'])) { + $record['facets'] = $facets['facets']; + } + + if (!empty($root)) { + $record['reply'] = ['root' => $root, 'parent' => $parent]; + } + + if ($key == count($msg['parts']) - 1) { + $record = bluesky_add_embed($uid, $msg, $record); + if (empty($record)) { + if (Worker::getRetrial() < 3) { + Worker::defer(); + } + return; + } + } + + $post = [ + 'collection' => 'app.bsky.feed.post', + 'repo' => DI::atProtocol()->getUserDid($uid), + 'record' => $record + ]; + + $parent = DI::atProtocol()->XRPCPost($uid, 'com.atproto.repo.createRecord', $post); + if (empty($parent->uri)) { + if ($part == 0) { + Worker::defer(); + } + return; + } + DI::logger()->debug('Posting done', ['return' => $parent]); + if (empty($root)) { + $root = $parent; + } + if (($key == 0) && ($item['gravity'] != Item::GRAVITY_PARENT)) { + $uri = DI::atpProcessor()->getUri($parent); + Item::update(['extid' => $uri], ['guid' => $item['guid']]); + DI::logger()->debug('Set extid', ['id' => $item['id'], 'extid' => $uri]); + } + } +} + +function bluesky_set_mentions(string $body): string +{ + // Remove all url based mention links + $body = preg_replace("/([@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '$1$3', $body); + + if (!preg_match_all("/[@!]\[url\=(did:.*?)\](.*?)\[\/url\]/ism", $body, $matches, PREG_SET_ORDER)) { + return $body; + } + + foreach ($matches as $match) { + $contact = Contact::selectFirst(['addr'], ['nurl' => $match[1]]); + if (!empty($contact['addr'])) { + $body = str_replace($match[0], '@[url=' . $match[1] . ']' . $contact['addr'] . '[/url]', $body); + } else { + $body = str_replace($match[0], '@' . $match[2], $body); + } + } + + return $body; +} + +function bluesky_get_urls(string $body): array +{ + $body = BBCode::expandVideoLinks($body); + $urls = []; + + // Search for Mentions + if (preg_match_all("/[@!]\[url\=(did:.*?)\](.*?)\[\/url\]/ism", $body, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $text = '@' . $match[2]; + $urls[strpos($body, $match[0])] = ['mention' => $match[1], 'text' => $text, 'hash' => $text]; + $body = str_replace($match[0], $text, $body); + } + } + + // Search for hash tags + if (preg_match_all("/#\[url\=(https?:.*?)\](.*?)\[\/url\]/ism", $body, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $text = '#' . $match[2]; + $urls[strpos($body, $match[0])] = ['tag' => $match[2], 'text' => $text, 'hash' => $text]; + $body = str_replace($match[0], $text, $body); + } + } + + // Search for pure links + if (preg_match_all("/\[url\](https?:.*?)\[\/url\]/ism", $body, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $text = Strings::getStyledURL($match[1]); + $hash = bluesky_get_hash_for_url($match[0], mb_strlen($text)); + $urls[strpos($body, $match[0])] = ['url' => $match[1], 'text' => $text, 'hash' => $hash]; + $body = str_replace($match[0], $hash, $body); + } + } + + // Search for links with descriptions + if (preg_match_all("/\[url\=(https?:.*?)\](.*?)\[\/url\]/ism", $body, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + if ($match[1] == $match[2]) { + $text = Strings::getStyledURL($match[1]); + } else { + $text = $match[2]; + } + if (mb_strlen($text) < 100) { + $hash = bluesky_get_hash_for_url($match[0], mb_strlen($text)); + $urls[strpos($body, $match[0])] = ['url' => $match[1], 'text' => $text, 'hash' => $hash]; + $body = str_replace($match[0], $hash, $body); + } else { + $text = Strings::getStyledURL($match[1]); + $hash = bluesky_get_hash_for_url($match[0], mb_strlen($text)); + $urls[strpos($body, $match[0])] = ['url' => $match[1], 'text' => $text, 'hash' => $hash]; + $body = str_replace($match[0], $text . ' ' . $hash, $body); + } + } + } + + asort($urls); + + return ['body' => $body, 'urls' => $urls]; +} + +function bluesky_get_hash_for_url(string $text, int $linklength): string +{ + if ($linklength <= 10) { + return '|' . hash('crc32', $text) . '|'; + } + return substr('|' . hash('crc32', $text) . base64_encode($text), 0, $linklength - 2) . '|'; +} + +function bluesky_get_facets(string $body, array $urls): array +{ + $facets = []; + + foreach ($urls as $url) { + $pos = strpos($body, $url['hash']); + if ($pos === false) { + continue; + } + if ($pos > 0) { + $prefix = substr($body, 0, $pos); + } else { + $prefix = ''; + } + + $body = $prefix . $url['text'] . substr($body, $pos + strlen($url['hash'])); + + $facet = new stdClass; + $facet->index = new stdClass; + $facet->index->byteEnd = $pos + strlen($url['text']); + $facet->index->byteStart = $pos; + + $feature = new stdClass; + + $type = '$type'; + if (!empty($url['tag'])) { + $feature->tag = $url['tag']; + $feature->$type = 'app.bsky.richtext.facet#tag'; + } elseif (!empty($url['url'])) { + $feature->uri = $url['url']; + $feature->$type = 'app.bsky.richtext.facet#link'; + } elseif (!empty($url['mention'])) { + $feature->did = $url['mention']; + $feature->$type = 'app.bsky.richtext.facet#mention'; + } else { + continue; + } + + $facet->features = [$feature]; + $facets[] = $facet; + } + + return ['facets' => $facets, 'body' => $body]; +} + +function bluesky_add_embed(int $uid, array $msg, array $record): array +{ + if (($msg['type'] != 'link') && !empty($msg['images'])) { + $images = []; + foreach ($msg['images'] as $image) { + if (count($images) == 4) { + continue; + } + $photo = Photo::selectFirst([], ['id' => $image['id']]); + $blob = bluesky_upload_blob($uid, $photo); + if (empty($blob)) { + return []; + } + $images[] = [ + 'alt' => $image['description'] ?? '', + 'image' => $blob, + 'aspectRatio' => [ + 'width' => $photo['width'], + 'height' => $photo['height'], + ] + ]; + } + if (!empty($images)) { + $record['embed'] = ['$type' => 'app.bsky.embed.images', 'images' => $images]; + } + } elseif ($msg['type'] == 'link') { + $record['embed'] = [ + '$type' => 'app.bsky.embed.external', + 'external' => [ + 'uri' => $msg['url'], + 'title' => $msg['title'] ?? '', + 'description' => $msg['description'] ?? '', + ] + ]; + if (!empty($msg['image'])) { + $photo = Photo::createPhotoForExternalResource($msg['image']); + $blob = bluesky_upload_blob($uid, $photo); + if (!empty($blob)) { + $record['embed']['external']['thumb'] = $blob; + } + } + } + return $record; +} + +function bluesky_upload_blob(int $uid, array $photo): ?stdClass +{ + $retrial = Worker::getRetrial(); + $content = Photo::getImageForPhoto($photo); + + $picture = new Image($content, $photo['type'], $photo['filename']); + $height = $picture->getHeight(); + $width = $picture->getWidth(); + $size = strlen($content); + + $picture = Photo::resizeToFileSize($picture, BLUESKY_IMAGE_SIZE[$retrial]); + $new_height = $picture->getHeight(); + $new_width = $picture->getWidth(); + $content = (string)$picture->asString(); + $new_size = strlen($content); + + if (($size != 0) && ($new_size == 0) && ($retrial == 0)) { + DI::logger()->warning('Size is empty after resize, uploading original file', ['uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size]); + $content = Photo::getImageForPhoto($photo); + } else { + DI::logger()->info('Uploading', ['uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size]); + } + + $data = DI::atProtocol()->post($uid, '/xrpc/com.atproto.repo.uploadBlob', $content, ['Content-type' => $photo['type'], 'Authorization' => ['Bearer ' . DI::atProtocol()->getUserToken($uid)]]); + if (empty($data) || empty($data->blob)) { + DI::logger()->info('Uploading failed', ['uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size]); + return null; + } + + Item::incrementOutbound(Protocol::BLUESKY); + DI::logger()->debug('Uploaded blob', ['return' => $data, 'uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size]); + return $data->blob; +} + +function bluesky_delete_post(string $uri, int $uid) +{ + $parts = DI::atpProcessor()->getUriParts($uri); + if (empty($parts)) { + DI::logger()->debug('No uri delected', ['uri' => $uri]); + return; + } + DI::atProtocol()->XRPCPost($uid, 'com.atproto.repo.deleteRecord', $parts); + DI::logger()->debug('Deleted', ['parts' => $parts]); +} + +function bluesky_fetch_timeline(int $uid) +{ + $data = DI::atProtocol()->XRPCGet('app.bsky.feed.getTimeline', [], $uid); + if (empty($data)) { + return; + } + + if (empty($data->feed)) { + return; + } + + foreach (array_reverse($data->feed) as $entry) { + $causer = DI::atpActor()->getContactByDID($entry->post->author->did, $uid, 0, true); + if (!empty($entry->reply)) { + if (!empty($entry->reply->root)) { + bluesky_complete_post($entry->reply->root, $uid, Item::PR_COMMENT, $causer['id'], Conversation::PARCEL_CONNECTOR); + } + if (!empty($entry->reply->parent)) { + bluesky_complete_post($entry->reply->parent, $uid, Item::PR_COMMENT, $causer['id'], Conversation::PARCEL_CONNECTOR); + } + } + DI::atpProcessor()->processPost($entry->post, $uid, Item::PR_NONE, 0, 0, Conversation::PARCEL_CONNECTOR); + if (!empty($entry->reason)) { + bluesky_process_reason($entry->reason, DI::atpProcessor()->getUri($entry->post), $uid); + } + } +} + +function bluesky_complete_post(stdClass $post, int $uid, int $post_reason, int $causer, int $protocol): int +{ + $complete = DI::pConfig()->get($uid, 'bluesky', 'complete_threads'); + $existing_uri = DI::atpProcessor()->getPostUri(DI::atpProcessor()->getUri($post), $uid); + if (!empty($existing_uri)) { + $comments = Post::countPosts(['thr-parent' => $existing_uri, 'gravity' => Item::GRAVITY_COMMENT]); + if (($post->replyCount <= $comments) || !$complete) { + return DI::atpProcessor()->fetchUriId($existing_uri, $uid); + } + } + + if ($complete) { + $uri = DI::atpProcessor()->fetchMissingPost(DI::atpProcessor()->getUri($post), $uid, $post_reason, $causer, 0, '', true, $protocol); + $uri_id = DI::atpProcessor()->fetchUriId($uri, $uid); + } else { + $uri_id = DI::atpProcessor()->processPost($post, $uid, $post_reason, $causer, 0, $protocol); + } + return $uri_id; +} + +function bluesky_process_reason(stdClass $reason, string $uri, int $uid) +{ + $type = '$type'; + if ($reason->$type != 'app.bsky.feed.defs#reasonRepost') { + return; + } + + $contact = DI::atpActor()->getContactByDID($reason->by->did, $uid, 0); + + $item = [ + 'network' => Protocol::BLUESKY, + 'protocol' => Conversation::PARCEL_CONNECTOR, + 'uid' => $uid, + 'wall' => false, + 'uri' => $reason->by->did . '/app.bsky.feed.repost/' . $reason->indexedAt, + 'private' => Item::UNLISTED, + 'contact-id' => $contact['id'], + 'author-name' => $contact['name'], + 'author-link' => $contact['url'], + 'author-avatar' => $contact['avatar'], + 'verb' => Activity::ANNOUNCE, + 'body' => Activity::ANNOUNCE, + 'gravity' => Item::GRAVITY_ACTIVITY, + 'object-type' => Activity\ObjectType::NOTE, + 'thr-parent' => $uri, + ]; + + if (Post::exists(['uri' => $item['uri'], 'uid' => $uid])) { + return; + } + + if (Post::exists(['uid' => $item['uid'], 'thr-parent' => $item['thr-parent'], 'verb' => $item['verb'], 'contact-id' => $item['contact-id']])) { + return; + } + + $item['guid'] = Item::guidFromUri($item['uri'], $contact['alias']); + $item['owner-name'] = $item['author-name']; + $item['owner-link'] = $item['author-link']; + $item['owner-avatar'] = $item['author-avatar']; + if (Item::insert($item)) { + $pcid = Contact::getPublicContactId($contact['id'], $uid); + Item::update(['post-reason' => Item::PR_ANNOUNCEMENT, 'causer-id' => $pcid], ['uri' => $uri, 'uid' => $uid]); + } +} + +function bluesky_fetch_notifications(int $uid) +{ + $data = DI::atProtocol()->XRPCGet('app.bsky.notification.listNotifications', [], $uid); + if (empty($data->notifications)) { + return; + } + + foreach ($data->notifications as $notification) { + $uri = DI::atpProcessor()->getUri($notification); + if (Post::exists(['uri' => $uri, 'uid' => $uid]) || Post::exists(['extid' => $uri, 'uid' => $uid])) { + DI::logger()->debug('Notification already processed', ['uid' => $uid, 'reason' => $notification->reason, 'uri' => $uri, 'indexedAt' => $notification->indexedAt]); + continue; + } + DI::logger()->debug('Process notification', ['uid' => $uid, 'reason' => $notification->reason, 'uri' => $uri, 'indexedAt' => $notification->indexedAt]); + switch ($notification->reason) { + case 'like': + $item = DI::atpProcessor()->getHeaderFromPost($notification, $uri, $uid, Conversation::PARCEL_CONNECTOR); + $item['gravity'] = Item::GRAVITY_ACTIVITY; + $item['body'] = $item['verb'] = Activity::LIKE; + $item['thr-parent'] = DI::atpProcessor()->getUri($notification->record->subject); + $item['thr-parent'] = DI::atpProcessor()->fetchMissingPost($item['thr-parent'], $uid, Item::PR_FETCHED, $item['contact-id'], 0); + if (!empty($item['thr-parent'])) { + $data = Item::insert($item); + DI::logger()->debug('Got like', ['uid' => $uid, 'result' => $data, 'uri' => $uri]); + } else { + DI::logger()->info('Thread parent not found', ['uid' => $uid, 'parent' => $item['thr-parent'], 'uri' => $uri]); + } + break; + + case 'repost': + $item = DI::atpProcessor()->getHeaderFromPost($notification, $uri, $uid, Conversation::PARCEL_CONNECTOR); + $item['gravity'] = Item::GRAVITY_ACTIVITY; + $item['body'] = $item['verb'] = Activity::ANNOUNCE; + $item['thr-parent'] = DI::atpProcessor()->getUri($notification->record->subject); + $item['thr-parent'] = DI::atpProcessor()->fetchMissingPost($item['thr-parent'], $uid, Item::PR_FETCHED, $item['contact-id'], 0); + if (!empty($item['thr-parent'])) { + $data = Item::insert($item); + DI::logger()->debug('Got repost', ['uid' => $uid, 'result' => $data, 'uri' => $uri]); + } else { + DI::logger()->info('Thread parent not found', ['uid' => $uid, 'parent' => $item['thr-parent'], 'uri' => $uri]); + } + break; + + case 'follow': + $contact = DI::atpActor()->getContactByDID($notification->author->did, $uid, $uid); + DI::logger()->debug('New follower', ['uid' => $uid, 'nick' => $contact['nick'], 'uri' => $uri]); + break; + + case 'mention': + $contact = DI::atpActor()->getContactByDID($notification->author->did, $uid, 0); + $result = DI::atpProcessor()->fetchMissingPost($uri, $uid, Item::PR_TO, $contact['id'], 0); + DI::logger()->debug('Got mention', ['uid' => $uid, 'nick' => $contact['nick'], 'result' => $result, 'uri' => $uri]); + break; + + case 'reply': + $contact = DI::atpActor()->getContactByDID($notification->author->did, $uid, 0); + $result = DI::atpProcessor()->fetchMissingPost($uri, $uid, Item::PR_COMMENT, $contact['id'], 0); + DI::logger()->debug('Got reply', ['uid' => $uid, 'nick' => $contact['nick'], 'result' => $result, 'uri' => $uri]); + break; + + case 'quote': + $contact = DI::atpActor()->getContactByDID($notification->author->did, $uid, 0); + $result = DI::atpProcessor()->fetchMissingPost($uri, $uid, Item::PR_PUSHED, $contact['id'], 0); + DI::logger()->debug('Got quote', ['uid' => $uid, 'nick' => $contact['nick'], 'result' => $result, 'uri' => $uri]); + break; + + default: + DI::logger()->notice('Unhandled reason', ['reason' => $notification->reason, 'uri' => $uri]); + break; + } + } +} + +function bluesky_fetch_feed(int $uid, string $feed) +{ + $data = DI::atProtocol()->XRPCGet('app.bsky.feed.getFeed', ['feed' => $feed], $uid); + if (empty($data)) { + return; + } + + if (empty($data->feed)) { + return; + } + + $feeddata = DI::atProtocol()->XRPCGet('app.bsky.feed.getFeedGenerator', ['feed' => $feed], $uid); + if (!empty($feeddata) && !empty($feeddata->view)) { + $feedurl = $feeddata->view->uri; + $feedname = $feeddata->view->displayName; + } else { + $feedurl = $feed; + $feedname = $feed; + } + + foreach (array_reverse($data->feed) as $entry) { + $contact = DI::atpActor()->getContactByDID($entry->post->author->did, $uid, 0); + $languages = $entry->post->record->langs ?? []; + + if (!Relay::isWantedLanguage($entry->post->record->text, 0, $contact['id'] ?? 0, $languages)) { + DI::logger()->debug('Unwanted language detected', ['languages' => $languages, 'text' => $entry->post->record->text]); + continue; + } + $causer = DI::atpActor()->getContactByDID($entry->post->author->did, $uid, 0); + $uri_id = bluesky_complete_post($entry->post, $uid, Item::PR_TAG, $causer['id'], Conversation::PARCEL_CONNECTOR); + if (!empty($uri_id)) { + $stored = Post\Category::storeFileByURIId($uri_id, $uid, Post\Category::SUBCRIPTION, $feedname, $feedurl); + DI::logger()->debug('Stored tag subscription for user', ['uri-id' => $uri_id, 'uid' => $uid, 'name' => $feedname, 'url' => $feedurl, 'stored' => $stored]); + } else { + DI::logger()->notice('Post not found', ['entry' => $entry]); + } + if (!empty($entry->reason)) { + bluesky_process_reason($entry->reason, DI::atpProcessor()->getUri($entry->post), $uid); + } + } +} + +function bluesky_get_feeds(int $uid): array +{ + $type = '$type'; + $preferences = bluesky_get_preferences($uid); + if (empty($preferences) || empty($preferences->preferences)) { + return []; + } + foreach ($preferences->preferences as $preference) { + if ($preference->$type == 'app.bsky.actor.defs#savedFeedsPrefV2') { + $pinned = []; + foreach ($preference->items as $item) { + if (($item->type == 'feed') && $item->pinned) { + $pinned[] = $item->value; + } + } + return $pinned; + } + } + return []; +} + +function bluesky_get_preferences(int $uid): ?stdClass +{ + $cachekey = 'bluesky:preferences:' . $uid; + $data = DI::cache()->get($cachekey); + if (!is_null($data)) { + return $data; + } + + $data = DI::atProtocol()->XRPCGet('app.bsky.actor.getPreferences', [], $uid); + if (empty($data)) { + return null; + } + + DI::cache()->set($cachekey, $data, Duration::HOUR); + return $data; +} diff --git a/bluesky/bluesky_feed.php b/bluesky/bluesky_feed.php new file mode 100644 index 00000000..e4aa3fdc --- /dev/null +++ b/bluesky/bluesky_feed.php @@ -0,0 +1,16 @@ +debug('Importing feed - start', ['user' => $argv[1], 'feed' => $argv[2]]); + bluesky_fetch_feed($argv[1], $argv[2]); + DI::logger()->debug('Importing feed - done', ['user' => $argv[1], 'feed' => $argv[2]]); +} diff --git a/bluesky/bluesky_notifications.php b/bluesky/bluesky_notifications.php new file mode 100644 index 00000000..e1bf2047 --- /dev/null +++ b/bluesky/bluesky_notifications.php @@ -0,0 +1,16 @@ +notice('importing notifications - start', ['user' => $argv[1]]); + bluesky_fetch_notifications($argv[1]); + DI::logger()->notice('importing notifications - done', ['user' => $argv[1]]); +} diff --git a/bluesky/bluesky_timeline.php b/bluesky/bluesky_timeline.php new file mode 100644 index 00000000..37b22d99 --- /dev/null +++ b/bluesky/bluesky_timeline.php @@ -0,0 +1,16 @@ +notice('importing timeline - start', ['user' => $argv[1]]); + bluesky_fetch_timeline($argv[1]); + DI::logger()->notice('importing timeline - done', ['user' => $argv[1]]); +} diff --git a/bluesky/lang/C/messages.po b/bluesky/lang/C/messages.po new file mode 100644 index 00000000..d573972c --- /dev/null +++ b/bluesky/lang/C/messages.po @@ -0,0 +1,133 @@ +# ADDON bluesky +# Copyright (C) +# This file is distributed under the same license as the Friendica bluesky addon package. +# +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-29 18:16+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: bluesky.php:335 +msgid "Save Settings" +msgstr "" + +#: bluesky.php:336 +msgid "Allow your users to use your hostname for their Bluesky handles" +msgstr "" + +#: bluesky.php:336 +#, php-format +msgid "Before enabling this option, you have to setup a wildcard domain configuration and you have to enable wildcard requests in your webserver configuration. On Apache this is done by adding \"ServerAlias *.%s\" to your HTTP configuration. You don't need to change the HTTPS configuration." +msgstr "" + +#: bluesky.php:365 +#, php-format +msgid "Allow to use %s as your Bluesky handle." +msgstr "" + +#: bluesky.php:365 +#, php-format +msgid "When enabled, you can use %s as your Bluesky handle. After you enabled this option, please go to https://bsky.app/settings and select to change your handle. Select that you have got your own domain. Then enter %s and select \"No DNS Panel\". Then select \"Verify Text File\"." +msgstr "" + +#: bluesky.php:375 +msgid "Enable Bluesky Post Addon" +msgstr "" + +#: bluesky.php:376 +msgid "Post to Bluesky by default" +msgstr "" + +#: bluesky.php:377 +msgid "Import the remote timeline" +msgstr "" + +#: bluesky.php:378 +msgid "Import the pinned feeds" +msgstr "" + +#: bluesky.php:378 +msgid "When activated, Posts will be imported from all the feeds that you pinned in Bluesky." +msgstr "" + +#: bluesky.php:379 +msgid "Complete the threads" +msgstr "" + +#: bluesky.php:379 +msgid "When activated, the system fetches additional replies for the posts in the timeline. This leads to more complete threads." +msgstr "" + +#: bluesky.php:381 +msgid "Personal Data Server" +msgstr "" + +#: bluesky.php:381 +msgid "The personal data server (PDS) is the system that hosts your profile." +msgstr "" + +#: bluesky.php:382 +msgid "Bluesky handle" +msgstr "" + +#: bluesky.php:383 +msgid "Bluesky DID" +msgstr "" + +#: bluesky.php:383 +msgid "This is the unique identifier. It will be fetched automatically, when the handle is entered." +msgstr "" + +#: bluesky.php:384 +msgid "Bluesky app password" +msgstr "" + +#: bluesky.php:384 +msgid "Please don't add your real password here, but instead create a specific app password in the Bluesky settings." +msgstr "" + +#: bluesky.php:390 +msgid "Bluesky Import/Export" +msgstr "" + +#: bluesky.php:400 +msgid "You are not authenticated. Please enter your handle and the app password." +msgstr "" + +#: bluesky.php:420 +msgid "You are authenticated to Bluesky. For security reasons the password isn't stored." +msgstr "" + +#: bluesky.php:422 +msgid "The communication with the personal data server service (PDS) is established." +msgstr "" + +#: bluesky.php:424 +msgid "Communication issues with the personal data server service (PDS)." +msgstr "" + +#: bluesky.php:426 +msgid "The DID for the provided handle could not be detected. Please check if you entered the correct handle." +msgstr "" + +#: bluesky.php:428 +msgid "The personal data server service (PDS) could not be detected." +msgstr "" + +#: bluesky.php:430 +msgid "The authentication with the provided handle and password failed. Please check if you entered the correct password." +msgstr "" + +#: bluesky.php:492 +msgid "Post to Bluesky" +msgstr "" diff --git a/bluesky/lang/de/messages.po b/bluesky/lang/de/messages.po new file mode 100644 index 00000000..13ea8e96 --- /dev/null +++ b/bluesky/lang/de/messages.po @@ -0,0 +1,89 @@ +# ADDON bluesky +# Copyright (C) +# This file is distributed under the same license as the Friendica bluesky addon package. +# +# +# Translators: +# Tobias Diekershoff , 2023 +# haheute , 2023 +# Raroun, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-24 05:52+0000\n" +"PO-Revision-Date: 2023-05-24 06:02+0000\n" +"Last-Translator: Raroun, 2023\n" +"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: bluesky.php:100 +msgid "" +"You are authenticated to Bluesky. For security reasons the password isn't " +"stored." +msgstr "" +"Du bist auf Bluesky authentifiziert. Aus Sicherheitsgründen wird das " +"Passwort nicht gespeichert." + +#: bluesky.php:100 +msgid "You are not authenticated. Please enter the app password." +msgstr "" +"Du bist derzeit nicht authentifiziert. Bitte gib dein App Passwort ein." + +#: bluesky.php:104 +msgid "Enable Bluesky Post Addon" +msgstr "Bluesky Post Addon aktivieren" + +#: bluesky.php:105 +msgid "Post to Bluesky by default" +msgstr "Standardmäßig auf Bluesky veröffentlichen" + +#: bluesky.php:106 +msgid "Import the remote timeline" +msgstr "Importiere die entfernte Timeline" + +#: bluesky.php:107 +msgid "Bluesky host" +msgstr "Bluesky Host" + +#: bluesky.php:108 +msgid "Bluesky handle" +msgstr "Bluesky Handle" + +#: bluesky.php:109 +msgid "Bluesky DID" +msgstr "Bluesky DID" + +#: bluesky.php:109 +msgid "" +"This is the unique identifier. It will be fetched automatically, when the " +"handle is entered." +msgstr "" +"Sobald das Handle eingegeben ist, wird diese einzigartige Kennung " +"automatisch abgerufen." + +#: bluesky.php:110 +msgid "Bluesky app password" +msgstr "Bluesky App Passwort" + +#: bluesky.php:110 +msgid "" +"Please don't add your real password here, but instead create a specific app " +"password in the Bluesky settings." +msgstr "" +"Bitte verwende hier nicht dein echtes Passwort, sondern stattdessen ein " +"speziell für diese App in den Bluesky Einstellungen festgelegtes Passwort." + +#: bluesky.php:116 +msgid "Bluesky Import/Export" +msgstr "Bluesky Import/Export" + +#: bluesky.php:167 +msgid "Post to Bluesky" +msgstr "Auf Bluesky veröffentlichen" diff --git a/bluesky/lang/de/strings.php b/bluesky/lang/de/strings.php new file mode 100644 index 00000000..8e3c9421 --- /dev/null +++ b/bluesky/lang/de/strings.php @@ -0,0 +1,20 @@ +strings['You are authenticated to Bluesky. For security reasons the password isn\'t stored.'] = 'Du bist auf Bluesky authentifiziert. Aus Sicherheitsgründen wird das Passwort nicht gespeichert.'; +$a->strings['You are not authenticated. Please enter the app password.'] = 'Du bist derzeit nicht authentifiziert. Bitte gib dein App Passwort ein.'; +$a->strings['Enable Bluesky Post Addon'] = 'Bluesky Post Addon aktivieren'; +$a->strings['Post to Bluesky by default'] = 'Standardmäßig auf Bluesky veröffentlichen'; +$a->strings['Import the remote timeline'] = 'Importiere die entfernte Timeline'; +$a->strings['Bluesky host'] = 'Bluesky Host'; +$a->strings['Bluesky handle'] = 'Bluesky Handle'; +$a->strings['Bluesky DID'] = 'Bluesky DID'; +$a->strings['This is the unique identifier. It will be fetched automatically, when the handle is entered.'] = 'Sobald das Handle eingegeben ist, wird diese einzigartige Kennung automatisch abgerufen.'; +$a->strings['Bluesky app password'] = 'Bluesky App Passwort'; +$a->strings['Please don\'t add your real password here, but instead create a specific app password in the Bluesky settings.'] = 'Bitte verwende hier nicht dein echtes Passwort, sondern stattdessen ein speziell für diese App in den Bluesky Einstellungen festgelegtes Passwort.'; +$a->strings['Bluesky Import/Export'] = 'Bluesky Import/Export'; +$a->strings['Post to Bluesky'] = 'Auf Bluesky veröffentlichen'; diff --git a/bluesky/lang/zh-cn/messages.po b/bluesky/lang/zh-cn/messages.po new file mode 100644 index 00000000..9074ce34 --- /dev/null +++ b/bluesky/lang/zh-cn/messages.po @@ -0,0 +1,80 @@ +# ADDON bluesky +# Copyright (C) +# This file is distributed under the same license as the Friendica bluesky addon package. +# +# +# Translators: +# tslmuun, 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-24 05:52+0000\n" +"PO-Revision-Date: 2023-05-24 06:02+0000\n" +"Last-Translator: tslmuun, 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/Friendica/teams/12172/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: bluesky.php:100 +msgid "" +"You are authenticated to Bluesky. For security reasons the password isn't " +"stored." +msgstr "您已通过 Bluesky 的身份验证。 出于安全原因,不存储密码。" + +#: bluesky.php:100 +msgid "You are not authenticated. Please enter the app password." +msgstr "您未通过身份验证。 请输入应用密码。" + +#: bluesky.php:104 +msgid "Enable Bluesky Post Addon" +msgstr "启用Bluesky插件" + +#: bluesky.php:105 +msgid "Post to Bluesky by default" +msgstr "默认发布到Bluesky" + +#: bluesky.php:106 +msgid "Import the remote timeline" +msgstr "导入远程时间线" + +#: bluesky.php:107 +msgid "Bluesky host" +msgstr "Bluesky地址" + +#: bluesky.php:108 +msgid "Bluesky handle" +msgstr "Bluesky handle" + +#: bluesky.php:109 +msgid "Bluesky DID" +msgstr "Bluesky DID" + +#: bluesky.php:109 +msgid "" +"This is the unique identifier. It will be fetched automatically, when the " +"handle is entered." +msgstr "这是唯一标识符。 输入句柄时,它将自动获取。" + +#: bluesky.php:110 +msgid "Bluesky app password" +msgstr "Bluesky 应用密码" + +#: bluesky.php:110 +msgid "" +"Please don't add your real password here, but instead create a specific app " +"password in the Bluesky settings." +msgstr "请不要在此处填写您的真实密码,而是在 Bluesky 设置中创建一个特定的应用程序密码。" + +#: bluesky.php:116 +msgid "Bluesky Import/Export" +msgstr "Bluesky 导入/导出" + +#: bluesky.php:167 +msgid "Post to Bluesky" +msgstr "发布到Bluesky" diff --git a/bluesky/lang/zh-cn/strings.php b/bluesky/lang/zh-cn/strings.php new file mode 100644 index 00000000..9c71d974 --- /dev/null +++ b/bluesky/lang/zh-cn/strings.php @@ -0,0 +1,20 @@ +strings['You are authenticated to Bluesky. For security reasons the password isn\'t stored.'] = '您已通过 Bluesky 的身份验证。 出于安全原因,不存储密码。'; +$a->strings['You are not authenticated. Please enter the app password.'] = '您未通过身份验证。 请输入应用密码。'; +$a->strings['Enable Bluesky Post Addon'] = '启用Bluesky插件'; +$a->strings['Post to Bluesky by default'] = '默认发布到Bluesky'; +$a->strings['Import the remote timeline'] = '导入远程时间线'; +$a->strings['Bluesky host'] = 'Bluesky地址'; +$a->strings['Bluesky handle'] = 'Bluesky handle'; +$a->strings['Bluesky DID'] = 'Bluesky DID'; +$a->strings['This is the unique identifier. It will be fetched automatically, when the handle is entered.'] = '这是唯一标识符。 输入句柄时,它将自动获取。'; +$a->strings['Bluesky app password'] = 'Bluesky 应用密码'; +$a->strings['Please don\'t add your real password here, but instead create a specific app password in the Bluesky settings.'] = '请不要在此处填写您的真实密码,而是在 Bluesky 设置中创建一个特定的应用程序密码。'; +$a->strings['Bluesky Import/Export'] = 'Bluesky 导入/导出'; +$a->strings['Post to Bluesky'] = '发布到Bluesky'; diff --git a/bluesky/templates/admin.tpl b/bluesky/templates/admin.tpl new file mode 100644 index 00000000..7b752a88 --- /dev/null +++ b/bluesky/templates/admin.tpl @@ -0,0 +1,2 @@ +{{include file="field_checkbox.tpl" field=$friendica_handles}} +
diff --git a/bluesky/templates/connector_settings.tpl b/bluesky/templates/connector_settings.tpl new file mode 100644 index 00000000..a85bcd89 --- /dev/null +++ b/bluesky/templates/connector_settings.tpl @@ -0,0 +1,13 @@ +

{{$status}}

+{{include file="field_checkbox.tpl" field=$enable}} +{{include file="field_checkbox.tpl" field=$bydefault}} +{{include file="field_checkbox.tpl" field=$import}} +{{include file="field_checkbox.tpl" field=$import_feeds}} +{{include file="field_checkbox.tpl" field=$complete_threads}} +{{if $custom_handle}} + {{include file="field_checkbox.tpl" field=$custom_handle}} +{{/if}} +{{include file="field_input.tpl" field=$pds}} +{{include file="field_input.tpl" field=$handle}} +{{include file="field_input.tpl" field=$did}} +{{include file="field_input.tpl" field=$password}} \ No newline at end of file diff --git a/buglink/buglink.php b/buglink/buglink.php index 78fb8bef..b7dd6504 100644 --- a/buglink/buglink.php +++ b/buglink/buglink.php @@ -6,7 +6,6 @@ * Author: Mike Macgirvin */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; diff --git a/buglink/lang/cs/messages.po b/buglink/lang/cs/messages.po index 61dc88cf..0e200c14 100644 --- a/buglink/lang/cs/messages.po +++ b/buglink/lang/cs/messages.po @@ -4,21 +4,21 @@ # # # Translators: -# Michal Šupler , 2014 +# michal_s , 2014 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-22 13:18+0200\n" -"PO-Revision-Date: 2014-07-07 18:27+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-22 11:27+0000\n" +"Last-Translator: michal_s , 2014\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: buglink.php:15 +#: buglink.php:20 msgid "Report Bug" msgstr "Nahlásit chybu" diff --git a/buglink/lang/cs/strings.php b/buglink/lang/cs/strings.php index 048b8334..ae45ea37 100644 --- a/buglink/lang/cs/strings.php +++ b/buglink/lang/cs/strings.php @@ -3,6 +3,6 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} $a->strings['Report Bug'] = 'Nahlásit chybu'; diff --git a/buglink/lang/de/messages.po b/buglink/lang/de/messages.po index 0e8d02d5..4858bc77 100644 --- a/buglink/lang/de/messages.po +++ b/buglink/lang/de/messages.po @@ -10,16 +10,16 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-22 13:18+0200\n" -"PO-Revision-Date: 2019-11-10 20:12+0000\n" -"Last-Translator: René Wagner \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-22 11:27+0000\n" +"Last-Translator: René Wagner , 2019\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: buglink.php:15 +#: buglink.php:20 msgid "Report Bug" msgstr "Fehler melden" diff --git a/calc/calc.php b/calc/calc.php index a8a340c4..76d1805c 100644 --- a/calc/calc.php +++ b/calc/calc.php @@ -6,7 +6,6 @@ * Author: Mike Macgirvin */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; @@ -16,7 +15,7 @@ function calc_install() { function calc_app_menu(array &$b) { - $b['app_menu'][] = ''; + $b['app_menu'][] = ''; } /** @@ -296,7 +295,7 @@ $o .= <<< EOT

Calculator



-
+
'; - if (($x + 1) % (sqrt(count($params['texts'])) + 1) == 0) { + if (($x + 1) % (floor(sqrt(count($params['texts']))) + 1) == 0) { $s .= ''; } } $s .= '
@@ -323,7 +322,7 @@ $o .= <<< EOT - + @@ -345,13 +344,13 @@ $o .= <<< EOT - +
diff --git a/catavatar/catavatar.php b/catavatar/catavatar.php index 69f71ef6..7b5f05c0 100644 --- a/catavatar/catavatar.php +++ b/catavatar/catavatar.php @@ -6,11 +6,8 @@ * Author: Fabio */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; @@ -29,7 +26,7 @@ function catavatar_install() Hook::register('addon_settings', __FILE__, 'catavatar_addon_settings'); Hook::register('addon_settings_post', __FILE__, 'catavatar_addon_settings_post'); - Logger::notice('registered catavatar'); + DI::logger()->notice('registered catavatar'); } /** @@ -70,7 +67,7 @@ function catavatar_addon_settings_post(&$s) } if (!empty($_POST['catavatar-usecat'])) { - $url = DI::baseUrl()->get() . '/catavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time(); + $url = DI::baseUrl() . '/catavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time(); $self = DBA::selectFirst('contact', ['id'], ['uid' => DI::userSession()->getLocalUserId(), 'self' => true]); if (!DBA::isResult($self)) { @@ -121,9 +118,9 @@ function catavatar_lookup(array &$b) { $user = DBA::selectFirst('user', ['uid'], ['email' => $b['email']]); if (DBA::isResult($user)) { - $url = DI::baseUrl()->get() . '/catavatar/' . $user['uid']; + $url = DI::baseUrl() . '/catavatar/' . $user['uid']; } else { - $url = DI::baseUrl()->get() . '/catavatar/' . md5(trim(strtolower($b['email']))); + $url = DI::baseUrl() . '/catavatar/' . md5(trim(strtolower($b['email']))); } switch($b['size']) { diff --git a/catavatar/lang/de/messages.po b/catavatar/lang/de/messages.po index d78030ab..f99acaba 100644 --- a/catavatar/lang/de/messages.po +++ b/catavatar/lang/de/messages.po @@ -15,7 +15,7 @@ msgstr "" "POT-Creation-Date: 2021-11-21 19:14-0500\n" "PO-Revision-Date: 2018-04-07 05:23+0000\n" "Last-Translator: Tobias Diekershoff , 2022\n" -"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n" +"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/catavatar/lang/fr/messages.po b/catavatar/lang/fr/messages.po index f4c4dd0d..64e98568 100644 --- a/catavatar/lang/fr/messages.po +++ b/catavatar/lang/fr/messages.po @@ -5,8 +5,7 @@ # # Translators: # Vladimir Núñez , 2019 -# Walter Bulbazor, 2021 -# Hypolite Petovan , 2022 +# Florent C., 2023 # #, fuzzy msgid "" @@ -15,8 +14,8 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:14-0500\n" "PO-Revision-Date: 2018-04-07 05:23+0000\n" -"Last-Translator: Hypolite Petovan , 2022\n" -"Language-Team: French (https://www.transifex.com/Friendica/teams/12172/fr/)\n" +"Last-Translator: Florent C., 2023\n" +"Language-Team: French (https://app.transifex.com/Friendica/teams/12172/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -25,7 +24,7 @@ msgstr "" #: catavatar.php:48 msgid "Set default profile avatar or randomize the cat." -msgstr "Mettre l'avatar par défaut ou tirer au sort le Chat." +msgstr "Mettre l'avatar par défaut ou tirer au sort le chat." #: catavatar.php:53 msgid "Cat Avatar Settings" @@ -33,15 +32,15 @@ msgstr "Paramètres de Chat avatar" #: catavatar.php:56 msgid "Use Cat as Avatar" -msgstr "Utiliser Chat comme avatar" +msgstr "Utiliser ce Chat" #: catavatar.php:57 msgid "Another random Cat!" -msgstr "Un autre chat aléatoire !" +msgstr "Un autre Chat aléatoire !" #: catavatar.php:58 msgid "Reset to email Cat" -msgstr "Réinitialiser à Chat courriel" +msgstr "Revenir au Chat par défaut" #: catavatar.php:77 msgid "The cat hadn't found itself." diff --git a/catavatar/lang/fr/strings.php b/catavatar/lang/fr/strings.php index 5d8a10a3..b68b9d45 100644 --- a/catavatar/lang/fr/strings.php +++ b/catavatar/lang/fr/strings.php @@ -5,11 +5,11 @@ function string_plural_select_fr($n){ $n = intval($n); if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Set default profile avatar or randomize the cat.'] = 'Mettre l\'avatar par défaut ou tirer au sort le Chat.'; +$a->strings['Set default profile avatar or randomize the cat.'] = 'Mettre l\'avatar par défaut ou tirer au sort le chat.'; $a->strings['Cat Avatar Settings'] = 'Paramètres de Chat avatar'; -$a->strings['Use Cat as Avatar'] = 'Utiliser Chat comme avatar'; -$a->strings['Another random Cat!'] = 'Un autre chat aléatoire !'; -$a->strings['Reset to email Cat'] = 'Réinitialiser à Chat courriel'; +$a->strings['Use Cat as Avatar'] = 'Utiliser ce Chat'; +$a->strings['Another random Cat!'] = 'Un autre Chat aléatoire !'; +$a->strings['Reset to email Cat'] = 'Revenir au Chat par défaut'; $a->strings['The cat hadn\'t found itself.'] = 'Le Chat ne s\'y est pas retrouvé'; $a->strings['There was an error, the cat ran away.'] = 'Il y a eu une erreur et le chat s\'est enfui'; $a->strings['Profile Photos'] = 'Photos de profil'; diff --git a/catavatar/lang/it/messages.po b/catavatar/lang/it/messages.po index e05bd277..9155bb48 100644 --- a/catavatar/lang/it/messages.po +++ b/catavatar/lang/it/messages.po @@ -6,55 +6,55 @@ # Translators: # fabrixxm , 2018 # Davide Pesenti , 2018 -# Sylke Vicious , 2021 +# Sylke Vicious , 2023 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-29 00:53+0000\n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" "PO-Revision-Date: 2018-04-07 05:23+0000\n" -"Last-Translator: Sylke Vicious , 2021\n" -"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n" +"Last-Translator: Sylke Vicious , 2023\n" +"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: catavatar.php:48 -msgid "Use Cat as Avatar" -msgstr "Usa il Gatto come avatar" - -#: catavatar.php:49 -msgid "More Random Cat!" -msgstr "Altro Gatto a caso!" - -#: catavatar.php:50 -msgid "Reset to email Cat" -msgstr "Reimposta Gatto" - -#: catavatar.php:52 -msgid "Cat Avatar Settings" -msgstr "Impostazioni Avatar Gatto" - -#: catavatar.php:53 msgid "Set default profile avatar or randomize the cat." msgstr "Imposta l'immagine di profilo predefinita o crea un gatto casuale." -#: catavatar.php:78 +#: catavatar.php:53 +msgid "Cat Avatar Settings" +msgstr "Impostazioni Avatar Gatto" + +#: catavatar.php:56 +msgid "Use Cat as Avatar" +msgstr "Usa il Gatto come avatar" + +#: catavatar.php:57 +msgid "Another random Cat!" +msgstr "Un altro Gatto casuale!" + +#: catavatar.php:58 +msgid "Reset to email Cat" +msgstr "Reimposta Gatto" + +#: catavatar.php:77 msgid "The cat hadn't found itself." msgstr "Il gatto non ha trovato sé stesso." -#: catavatar.php:87 +#: catavatar.php:86 msgid "There was an error, the cat ran away." msgstr "Si è verificato un errore, il gatto è scappato." -#: catavatar.php:93 +#: catavatar.php:92 msgid "Profile Photos" msgstr "Foto del profilo" -#: catavatar.php:108 +#: catavatar.php:102 msgid "Meow!" msgstr "Miao!" diff --git a/catavatar/lang/it/strings.php b/catavatar/lang/it/strings.php index 3a33374a..8f78b3fe 100644 --- a/catavatar/lang/it/strings.php +++ b/catavatar/lang/it/strings.php @@ -3,13 +3,13 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Use Cat as Avatar'] = 'Usa il Gatto come avatar'; -$a->strings['More Random Cat!'] = 'Altro Gatto a caso!'; -$a->strings['Reset to email Cat'] = 'Reimposta Gatto'; -$a->strings['Cat Avatar Settings'] = 'Impostazioni Avatar Gatto'; $a->strings['Set default profile avatar or randomize the cat.'] = 'Imposta l\'immagine di profilo predefinita o crea un gatto casuale.'; +$a->strings['Cat Avatar Settings'] = 'Impostazioni Avatar Gatto'; +$a->strings['Use Cat as Avatar'] = 'Usa il Gatto come avatar'; +$a->strings['Another random Cat!'] = 'Un altro Gatto casuale!'; +$a->strings['Reset to email Cat'] = 'Reimposta Gatto'; $a->strings['The cat hadn\'t found itself.'] = 'Il gatto non ha trovato sé stesso.'; $a->strings['There was an error, the cat ran away.'] = 'Si è verificato un errore, il gatto è scappato.'; $a->strings['Profile Photos'] = 'Foto del profilo'; diff --git a/circle_text/group_text.php b/circle_text/group_text.php new file mode 100644 index 00000000..b52cbc19 --- /dev/null +++ b/circle_text/group_text.php @@ -0,0 +1,64 @@ + + */ + +use Friendica\Core\Hook; +use Friendica\Core\Renderer; +use Friendica\DI; + +function circle_text_install() +{ + Hook::register('addon_settings', __FILE__, 'circle_text_settings'); + Hook::register('addon_settings_post', __FILE__, 'circle_text_settings_post'); +} + +/** + * + * Callback from the settings post function. + * $post contains the $_POST array. + * We will make sure we've got a valid user account + * and if so set our configuration setting for this person. + * + */ + +function circle_text_settings_post(array $post) +{ + if (!DI::userSession()->getLocalUserId() || empty($post['circle_text-submit'])) { + return; + } + + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'circle_edit_image_limit', intval($post['circle_text'])); +} + + +/** + * + * Called from the Addon Setting form. + * Add our own settings info to the page. + * + */ + +function circle_text_settings(array &$data) +{ + if (!DI::userSession()->getLocalUserId()) { + return; + } + + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'circle_edit_image_limit') ?? + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'groupedit_image_limit'); + + $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/circle_text/'); + $html = Renderer::replaceMacros($t, [ + '$enabled' => ['circle_text', DI::l10n()->t('Use a text only (non-image) circle selector in the "circle edit" menu'), $enabled], + ]); + + $data = [ + 'addon' => 'circle_text', + 'title' => DI::l10n()->t('Circle Text'), + 'html' => $html, + ]; +} diff --git a/circle_text/lang/C/messages.po b/circle_text/lang/C/messages.po new file mode 100644 index 00000000..27c0e60e --- /dev/null +++ b/circle_text/lang/C/messages.po @@ -0,0 +1,26 @@ +# ADDON circle_text +# Copyright (C) +# This file is distributed under the same license as the Friendica circle_text addon package. +# +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-06-03 15:48-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: group_text.php:56 +msgid "Use a text only (non-image) circle selector in the \"circle edit\" menu" +msgstr "" + +#: group_text.php:61 +msgid "Circle Text" +msgstr "" diff --git a/circle_text/lang/ar/messages.po b/circle_text/lang/ar/messages.po new file mode 100644 index 00000000..cfe9bb63 --- /dev/null +++ b/circle_text/lang/ar/messages.po @@ -0,0 +1,32 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Farida Khalaf , 2021 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2021-02-21 02:59+0000\n" +"Last-Translator: Farida Khalaf \n" +"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#: group_text.php:62 +msgid "Group Text" +msgstr "نص المجموعة:" + +#: group_text.php:64 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "استخدم محدد نصي للمجموعة فقط (غير مصور) في قائمة \"تعديل المجموعة\"" + +#: group_text.php:70 +msgid "Save Settings" +msgstr "حفظ الإعدادات" diff --git a/circle_text/lang/ar/strings.php b/circle_text/lang/ar/strings.php new file mode 100644 index 00000000..20e8496a --- /dev/null +++ b/circle_text/lang/ar/strings.php @@ -0,0 +1,10 @@ +=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; } +}} +$a->strings['Group Text'] = 'نص المجموعة:'; +$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'استخدم محدد نصي للمجموعة فقط (غير مصور) في قائمة "تعديل المجموعة"'; +$a->strings['Save Settings'] = 'حفظ الإعدادات'; diff --git a/circle_text/lang/ca/messages.po b/circle_text/lang/ca/messages.po new file mode 100644 index 00000000..7081c0d7 --- /dev/null +++ b/circle_text/lang/ca/messages.po @@ -0,0 +1,36 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Joan Bar , 2019 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"PO-Revision-Date: 2019-10-14 00:45+0000\n" +"Last-Translator: Joan Bar \n" +"Language-Team: Catalan (http://www.transifex.com/Friendica/friendica/language/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:46 +msgid "Group Text settings updated." +msgstr "La configuració del text del grup s'ha actualitzat." + +#: group_text.php:76 +msgid "Group Text" +msgstr "Missatge del grup" + +#: group_text.php:78 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Utilitzeu un selector de grup de només text (que no sigui una imatge) al menú 'Edita grup'" + +#: group_text.php:84 +msgid "Submit" +msgstr "sotmetre's" diff --git a/circle_text/lang/ca/strings.php b/circle_text/lang/ca/strings.php new file mode 100644 index 00000000..b28db322 --- /dev/null +++ b/circle_text/lang/ca/strings.php @@ -0,0 +1,11 @@ +strings['Group Text settings updated.'] = 'La configuració del text del grup s\'ha actualitzat.'; +$a->strings['Group Text'] = 'Missatge del grup'; +$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Utilitzeu un selector de grup de només text (que no sigui una imatge) al menú \'Edita grup\''; +$a->strings['Submit'] = 'sotmetre\'s'; diff --git a/circle_text/lang/cs/messages.po b/circle_text/lang/cs/messages.po new file mode 100644 index 00000000..8b56b630 --- /dev/null +++ b/circle_text/lang/cs/messages.po @@ -0,0 +1,37 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Aditoo, 2018 +# michal_s , 2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"PO-Revision-Date: 2018-09-12 09:47+0000\n" +"Last-Translator: Aditoo\n" +"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +#: group_text.php:46 +msgid "Group Text settings updated." +msgstr "Nastavení Group Text aktualizována." + +#: group_text.php:76 +msgid "Group Text" +msgstr "Skupinový text" + +#: group_text.php:78 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Použijte pouze textový (bezobrázkový) výběr skupiny v menu úpravy skupin." + +#: group_text.php:84 +msgid "Submit" +msgstr "Odeslat" diff --git a/circle_text/lang/cs/strings.php b/circle_text/lang/cs/strings.php new file mode 100644 index 00000000..510453af --- /dev/null +++ b/circle_text/lang/cs/strings.php @@ -0,0 +1,11 @@ += 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } +}} +$a->strings['Group Text settings updated.'] = 'Nastavení Group Text aktualizována.'; +$a->strings['Group Text'] = 'Skupinový text'; +$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Použijte pouze textový (bezobrázkový) výběr skupiny v menu úpravy skupin.'; +$a->strings['Submit'] = 'Odeslat'; diff --git a/circle_text/lang/da-dk/messages.po b/circle_text/lang/da-dk/messages.po new file mode 100644 index 00000000..9f1fbefa --- /dev/null +++ b/circle_text/lang/da-dk/messages.po @@ -0,0 +1,28 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:35+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:58 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Brug en kun-tekst (intet billede) gruppevælger i grupperedigeringsmenuen" + +#: group_text.php:63 +msgid "Group Text" +msgstr "Gruppebesked" diff --git a/circle_text/lang/da-dk/strings.php b/circle_text/lang/da-dk/strings.php new file mode 100644 index 00000000..4306b769 --- /dev/null +++ b/circle_text/lang/da-dk/strings.php @@ -0,0 +1,9 @@ +strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Brug en kun-tekst (intet billede) gruppevælger i grupperedigeringsmenuen'; +$a->strings['Group Text'] = 'Gruppebesked'; diff --git a/circle_text/lang/de/messages.po b/circle_text/lang/de/messages.po new file mode 100644 index 00000000..e4e5d782 --- /dev/null +++ b/circle_text/lang/de/messages.po @@ -0,0 +1,31 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Andreas H., 2014 +# Tobias Diekershoff , 2014 +# Tobias Diekershoff , 2021 +# Ulf Rompe , 2019 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:35+0000\n" +"Last-Translator: Tobias Diekershoff , 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:58 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Beim Bearbeiten von Gruppen Text statt Bilder anzeigen" + +#: group_text.php:63 +msgid "Group Text" +msgstr "Gruppen als Text" diff --git a/circle_text/lang/de/strings.php b/circle_text/lang/de/strings.php new file mode 100644 index 00000000..7a75b54d --- /dev/null +++ b/circle_text/lang/de/strings.php @@ -0,0 +1,9 @@ +strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Beim Bearbeiten von Gruppen Text statt Bilder anzeigen'; +$a->strings['Group Text'] = 'Gruppen als Text'; diff --git a/circle_text/lang/eo/strings.php b/circle_text/lang/eo/strings.php new file mode 100644 index 00000000..4e220fb0 --- /dev/null +++ b/circle_text/lang/eo/strings.php @@ -0,0 +1,5 @@ +strings["Group Text"] = ""; +$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = ""; +$a->strings["Submit"] = "Sendi"; diff --git a/circle_text/lang/es/messages.po b/circle_text/lang/es/messages.po new file mode 100644 index 00000000..5d6d4107 --- /dev/null +++ b/circle_text/lang/es/messages.po @@ -0,0 +1,33 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Albert, 2016 +# Senex Petrovic , 2021 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2021-04-01 09:56+0000\n" +"Last-Translator: Senex Petrovic \n" +"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:62 +msgid "Group Text" +msgstr "Grupo de Texto" + +#: group_text.php:64 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Utilice sólo el selector de grupo de texto (no imagen) en el menú \"edición de grupo\"" + +#: group_text.php:70 +msgid "Save Settings" +msgstr "Guardar Ajustes" diff --git a/circle_text/lang/es/strings.php b/circle_text/lang/es/strings.php new file mode 100644 index 00000000..632130fd --- /dev/null +++ b/circle_text/lang/es/strings.php @@ -0,0 +1,10 @@ +strings['Group Text'] = 'Grupo de Texto'; +$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Utilice sólo el selector de grupo de texto (no imagen) en el menú "edición de grupo"'; +$a->strings['Save Settings'] = 'Guardar Ajustes'; diff --git a/circle_text/lang/fi-fi/messages.po b/circle_text/lang/fi-fi/messages.po new file mode 100644 index 00000000..2e3782fd --- /dev/null +++ b/circle_text/lang/fi-fi/messages.po @@ -0,0 +1,37 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Kris, 2018 +# Kris, 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"PO-Revision-Date: 2018-04-08 15:51+0000\n" +"Last-Translator: Kris\n" +"Language-Team: Finnish (Finland) (http://www.transifex.com/Friendica/friendica/language/fi_FI/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi_FI\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:46 +msgid "Group Text settings updated." +msgstr "Group Text -asetukset päivitetty." + +#: group_text.php:76 +msgid "Group Text" +msgstr "Group Text" + +#: group_text.php:78 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "" + +#: group_text.php:84 +msgid "Submit" +msgstr "Lähetä" diff --git a/circle_text/lang/fi-fi/strings.php b/circle_text/lang/fi-fi/strings.php new file mode 100644 index 00000000..5bcd0ddc --- /dev/null +++ b/circle_text/lang/fi-fi/strings.php @@ -0,0 +1,10 @@ +strings['Group Text settings updated.'] = 'Group Text -asetukset päivitetty.'; +$a->strings['Group Text'] = 'Group Text'; +$a->strings['Submit'] = 'Lähetä'; diff --git a/circle_text/lang/fr/messages.po b/circle_text/lang/fr/messages.po new file mode 100644 index 00000000..c076d697 --- /dev/null +++ b/circle_text/lang/fr/messages.po @@ -0,0 +1,29 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# bob lebonche , 2021 +# Hypolite Petovan , 2016 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:35+0000\n" +"Last-Translator: bob lebonche , 2021\n" +"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: group_text.php:58 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Utiliser uniquement un groupe de texte (pas d'image) dans le menu \"groupedit\"" + +#: group_text.php:63 +msgid "Group Text" +msgstr "Groupe de texte" diff --git a/circle_text/lang/fr/strings.php b/circle_text/lang/fr/strings.php new file mode 100644 index 00000000..657d7657 --- /dev/null +++ b/circle_text/lang/fr/strings.php @@ -0,0 +1,9 @@ +strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Utiliser uniquement un groupe de texte (pas d\'image) dans le menu "groupedit"'; +$a->strings['Group Text'] = 'Groupe de texte'; diff --git a/circle_text/lang/hu/messages.po b/circle_text/lang/hu/messages.po new file mode 100644 index 00000000..2c4f19c9 --- /dev/null +++ b/circle_text/lang/hu/messages.po @@ -0,0 +1,28 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Balázs Úr, 2020-2021 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:35+0000\n" +"Last-Translator: Balázs Úr, 2020-2021\n" +"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:58 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Csak szöveges (kép nélküli) csoportválasztó használata a „csoportszerkesztés” menüben" + +#: group_text.php:63 +msgid "Group Text" +msgstr "Csoportszöveg" diff --git a/circle_text/lang/hu/strings.php b/circle_text/lang/hu/strings.php new file mode 100644 index 00000000..ac72f9e0 --- /dev/null +++ b/circle_text/lang/hu/strings.php @@ -0,0 +1,9 @@ +strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Csak szöveges (kép nélküli) csoportválasztó használata a „csoportszerkesztés” menüben'; +$a->strings['Group Text'] = 'Csoportszöveg'; diff --git a/circle_text/lang/is/strings.php b/circle_text/lang/is/strings.php new file mode 100644 index 00000000..d331b2f9 --- /dev/null +++ b/circle_text/lang/is/strings.php @@ -0,0 +1,5 @@ +strings["Group Text"] = ""; +$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = ""; +$a->strings["Submit"] = "Senda inn"; diff --git a/circle_text/lang/it/messages.po b/circle_text/lang/it/messages.po new file mode 100644 index 00000000..daab3fb6 --- /dev/null +++ b/circle_text/lang/it/messages.po @@ -0,0 +1,33 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# fabrixxm , 2014-2015 +# Sylke Vicious , 2021 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2021-02-16 12:48+0000\n" +"Last-Translator: Sylke Vicious \n" +"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:62 +msgid "Group Text" +msgstr "Editor Gruppi Testuale" + +#: group_text.php:64 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Usa un selettore testuale (senza immagini) nella pagina \"modifica gruppo\"" + +#: group_text.php:70 +msgid "Save Settings" +msgstr "Salva Impostazioni" diff --git a/circle_text/lang/it/strings.php b/circle_text/lang/it/strings.php new file mode 100644 index 00000000..e52683e9 --- /dev/null +++ b/circle_text/lang/it/strings.php @@ -0,0 +1,10 @@ +strings['Group Text'] = 'Editor Gruppi Testuale'; +$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Usa un selettore testuale (senza immagini) nella pagina "modifica gruppo"'; +$a->strings['Save Settings'] = 'Salva Impostazioni'; diff --git a/circle_text/lang/nb-no/strings.php b/circle_text/lang/nb-no/strings.php new file mode 100644 index 00000000..cd9bebd4 --- /dev/null +++ b/circle_text/lang/nb-no/strings.php @@ -0,0 +1,5 @@ +strings["Group Text"] = ""; +$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = ""; +$a->strings["Submit"] = "Lagre"; diff --git a/circle_text/lang/nl/messages.po b/circle_text/lang/nl/messages.po new file mode 100644 index 00000000..56b5aae0 --- /dev/null +++ b/circle_text/lang/nl/messages.po @@ -0,0 +1,36 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Jeroen De Meerleer , 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"PO-Revision-Date: 2018-08-24 13:48+0000\n" +"Last-Translator: Jeroen De Meerleer \n" +"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:46 +msgid "Group Text settings updated." +msgstr "Groupsberichten instellingen opgeslagen" + +#: group_text.php:76 +msgid "Group Text" +msgstr "Groepsbericht" + +#: group_text.php:78 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "" + +#: group_text.php:84 +msgid "Submit" +msgstr "" diff --git a/circle_text/lang/nl/strings.php b/circle_text/lang/nl/strings.php new file mode 100644 index 00000000..ba3cb3ec --- /dev/null +++ b/circle_text/lang/nl/strings.php @@ -0,0 +1,9 @@ +strings['Group Text settings updated.'] = 'Groupsberichten instellingen opgeslagen'; +$a->strings['Group Text'] = 'Groepsbericht'; diff --git a/circle_text/lang/pl/messages.po b/circle_text/lang/pl/messages.po new file mode 100644 index 00000000..a1d6a3c8 --- /dev/null +++ b/circle_text/lang/pl/messages.po @@ -0,0 +1,28 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Waldemar Stoczkowski, 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:35+0000\n" +"Last-Translator: Waldemar Stoczkowski, 2018\n" +"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#: group_text.php:58 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Użyj tylko tekst (bez obrazu) selektor grupy w menu \"Edycja grupy\"" + +#: group_text.php:63 +msgid "Group Text" +msgstr "Grupuj tekst" diff --git a/circle_text/lang/pl/strings.php b/circle_text/lang/pl/strings.php new file mode 100644 index 00000000..96157c99 --- /dev/null +++ b/circle_text/lang/pl/strings.php @@ -0,0 +1,9 @@ +=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } +}} +$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Użyj tylko tekst (bez obrazu) selektor grupy w menu "Edycja grupy"'; +$a->strings['Group Text'] = 'Grupuj tekst'; diff --git a/circle_text/lang/pt-br/strings.php b/circle_text/lang/pt-br/strings.php new file mode 100644 index 00000000..4579a5b1 --- /dev/null +++ b/circle_text/lang/pt-br/strings.php @@ -0,0 +1,5 @@ +strings["Group Text"] = ""; +$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = ""; +$a->strings["Submit"] = "Enviar"; diff --git a/circle_text/lang/ro/messages.po b/circle_text/lang/ro/messages.po new file mode 100644 index 00000000..c912f113 --- /dev/null +++ b/circle_text/lang/ro/messages.po @@ -0,0 +1,36 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Doru DEACONU , 2014 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"PO-Revision-Date: 2014-11-27 14:15+0000\n" +"Last-Translator: Doru DEACONU \n" +"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/friendica/language/ro_RO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro_RO\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#: group_text.php:46 +msgid "Group Text settings updated." +msgstr "Configurările Text Grup, au fost actualizate." + +#: group_text.php:76 +msgid "Group Text" +msgstr "Text Grup" + +#: group_text.php:78 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Folosiți în meniul \"editare grup\" un selector de grup strict textual (fără-imagine)" + +#: group_text.php:84 +msgid "Submit" +msgstr "Trimite" diff --git a/circle_text/lang/ro/strings.php b/circle_text/lang/ro/strings.php new file mode 100644 index 00000000..892ffc68 --- /dev/null +++ b/circle_text/lang/ro/strings.php @@ -0,0 +1,11 @@ +19)||(($n%100==0)&&($n!=0)))) { return 2; } else { return 1; } +}} +$a->strings['Group Text settings updated.'] = 'Configurările Text Grup, au fost actualizate.'; +$a->strings['Group Text'] = 'Text Grup'; +$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Folosiți în meniul "editare grup" un selector de grup strict textual (fără-imagine)'; +$a->strings['Submit'] = 'Trimite'; diff --git a/circle_text/lang/ru/messages.po b/circle_text/lang/ru/messages.po new file mode 100644 index 00000000..05a25367 --- /dev/null +++ b/circle_text/lang/ru/messages.po @@ -0,0 +1,36 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Stanislav N. , 2017 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"PO-Revision-Date: 2017-04-08 17:26+0000\n" +"Last-Translator: Stanislav N. \n" +"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: group_text.php:46 +msgid "Group Text settings updated." +msgstr "Настройки Group Text обновлены." + +#: group_text.php:76 +msgid "Group Text" +msgstr "Group Text" + +#: group_text.php:78 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Используйте текстовый (не изображение) селектор группы в режиме редактирования группы" + +#: group_text.php:84 +msgid "Submit" +msgstr "Добавить" diff --git a/circle_text/lang/ru/strings.php b/circle_text/lang/ru/strings.php new file mode 100644 index 00000000..0f74e7ca --- /dev/null +++ b/circle_text/lang/ru/strings.php @@ -0,0 +1,11 @@ +=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } +}} +$a->strings['Group Text settings updated.'] = 'Настройки Group Text обновлены.'; +$a->strings['Group Text'] = 'Group Text'; +$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Используйте текстовый (не изображение) селектор группы в режиме редактирования группы'; +$a->strings['Submit'] = 'Добавить'; diff --git a/circle_text/lang/sv/messages.po b/circle_text/lang/sv/messages.po new file mode 100644 index 00000000..8ddc1806 --- /dev/null +++ b/circle_text/lang/sv/messages.po @@ -0,0 +1,28 @@ +# ADDON group_text +# Copyright (C) +# This file is distributed under the same license as the Friendica group_text addon package. +# +# +# Translators: +# Kristoffer Grundström , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2022-01-16 00:35+0000\n" +"Last-Translator: Kristoffer Grundström \n" +"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:58 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "" + +#: group_text.php:63 +msgid "Group Text" +msgstr "Grupptext" diff --git a/circle_text/lang/sv/strings.php b/circle_text/lang/sv/strings.php new file mode 100644 index 00000000..5d5e98db --- /dev/null +++ b/circle_text/lang/sv/strings.php @@ -0,0 +1,8 @@ +strings['Group Text'] = 'Grupptext'; diff --git a/circle_text/lang/zh-cn/strings.php b/circle_text/lang/zh-cn/strings.php new file mode 100644 index 00000000..a7b37bf2 --- /dev/null +++ b/circle_text/lang/zh-cn/strings.php @@ -0,0 +1,6 @@ +strings["Group Text settings updated."] = "组正文设置更新了。"; +$a->strings["Group Text"] = "组正文"; +$a->strings["Use a text only (non-image) group selector in the \"group edit\" menu"] = "用光正文(无图片)组选择器在「组编辑」单"; +$a->strings["Submit"] = "提交"; diff --git a/circle_text/templates/settings.tpl b/circle_text/templates/settings.tpl new file mode 100644 index 00000000..2f3f4ce7 --- /dev/null +++ b/circle_text/templates/settings.tpl @@ -0,0 +1 @@ +{{include file="field_checkbox.tpl" field=$enabled}} diff --git a/cld/README.md b/cld/README.md new file mode 100644 index 00000000..933dbcee --- /dev/null +++ b/cld/README.md @@ -0,0 +1,85 @@ +Compact Language Detector +=== +CLD2 is an advanced language dectection library with a high reliability. + +This addon depends on the CLD PHP module which is not included in any Linux distribution. +It needs to be built and installed by hand, which is not totally straightforward. + +Prerequisite +--- +To be able to build the extension, you need the CLD module and the files for the PHP module development. +On Debian you install the packages php-dev, libcld2-dev and libcld2-0. +Make sure to have installed the correct PHP version. +Means: When you have got both PHP 8.0 and 8.2 on your system, you have to install php8.0-dev as well. + +Installation +--- +The original PHP extension is https://github.com/fntlnz/cld2-php-ext. +However, it doesn't support PHP8. +So https://github.com/hiteule/cld2-php-ext/tree/support-php8 has to be used. + +Download the source code: +``` +wget https://github.com/hiteule/cld2-php-ext/archive/refs/heads/support-php8.zip +``` + +Unzip it: +``` +unzip support-php8.zip +``` + +Change into the folder: +``` +cd cld2-php-ext-support-php8/ +``` + +Configure for the PHP Api version: +``` +phpize +``` +(if you have got several PHP versions on your system, execute the command with the version that you run Friendica with, e.g. `phpize8.0`) + +Create the Makefile: +``` +./configure --with-cld2=/usr/include/cld2 +``` + +Have a look at the line `checking for PHP includes`. +When the output (for example `/usr/include/php/20220829` doesn't match the API version that you got from `phpize`, then you have to change all the version codes in your `Makefile` afterwards) + +Create the module: +``` +make -j +``` + +Install it: +``` +sudo make install +``` + +Change to the folder with the available modules. When you use PHP 8.2 on Debian it is: +``` +cd /etc/php/8.2/mods-available +``` + +Create the file `cld2.ini` with this content: +``` +; configuration for php cld2 module +; priority=20 +extension=cld2.so +``` + +Enable the module for all versions and all sapi: +``` +phpenmod -v ALL -s ALL cld2 +``` + +Then restart the apache or fpm (or whatever you use) to load the changed configuration. + +Call `/admin/phpinfo` on your webserver. +You then see the PHP Info. +Search for "cld2". +The module is installed, when you find it here. +**Only proceed when the module is installed** + +Now you can enable the addon. \ No newline at end of file diff --git a/cld/cld.php b/cld/cld.php new file mode 100644 index 00000000..d4fef6c5 --- /dev/null +++ b/cld/cld.php @@ -0,0 +1,80 @@ + + */ + +use Friendica\Core\Hook; +use Friendica\DI; + +function cld_install() +{ + Hook::register('detect_languages', __FILE__, 'cld_detect_languages'); +} + +function cld_detect_languages(array &$data) +{ + if (!in_array('cld2', get_loaded_extensions())) { + DI::logger()->warning('CLD2 is not installed.'); + return; + } + + if (!class_exists('CLD2Detector')) { + DI::logger()->warning('CLD2Detector class does not exist.'); + return; + } + + if (!class_exists('CLD2Encoding')) { + DI::logger()->warning('CLD2Encoding class does not exist.'); + return; + } + + $cld2 = new \CLD2Detector(); + + $cld2->setEncodingHint(CLD2Encoding::UTF8); // optional, hints about text encoding + $cld2->setPlainText(true); + + $result = $cld2->detect($data['text']); + + if ($data['detected']) { + $original = array_key_first($data['detected']); + } else { + $original = ''; + } + + $detected = DI::l10n()->toISO6391($result['language_code']); + + // languages that aren't supported via the base language detection or tend to false detections + if ((strlen($detected) == 3) || in_array($detected, ['ht', 'kk', 'ku', 'ky', 'lg', 'mg', 'mk', 'mt', 'ny', 'rw', 'st', 'su', 'tg', 'ts', 'xx'])) { + return; + } + + if (!$result['is_reliable']) { + DI::logger()->debug('Unreliable detection', ['uri-id' => $data['uri-id'], 'original' => $original, 'detected' => $detected, 'name' => $result['language_name'], 'probability' => $result['language_probability'], 'text' => $data['text']]); + if (($original == $detected) && ($data['detected'][$original] < $result['language_probability'] / 100)) { + $data['detected'][$original] = $result['language_probability'] / 100; + } + return; + } + + $available = array_keys(DI::l10n()->getLanguageCodes()); + + if (!in_array($detected, $available)) { + DI::logger()->debug('Unsupported language', ['uri-id' => $data['uri-id'], 'original' => $original, 'detected' => $detected, 'name' => $result['language_name'], 'probability' => $result['language_probability'], 'text' => $data['text']]); + return; + } + + if ($original != $detected) { + DI::logger()->debug('Detected different language', ['uri-id' => $data['uri-id'], 'original' => $original, 'detected' => $detected, 'name' => $result['language_name'], 'probability' => $result['language_probability'], 'text' => $data['text']]); + } + + $length = count($data['detected']); + if ($length > 0) { + unset($data['detected'][$detected]); + $data['detected'] = array_merge([$detected => $result['language_probability'] / 100], array_slice($data['detected'], 0, $length - 1)); + } else { + $data['detected'] = [$detected => $result['language_probability'] / 100]; + } +} diff --git a/convert/UnitConvertor.php b/convert/UnitConvertor.php index d7933a8f..a3650e9b 100644 --- a/convert/UnitConvertor.php +++ b/convert/UnitConvertor.php @@ -169,7 +169,6 @@ class UnitConvertor * @param string name of the source unit from which to convert * @param string name of the target unit to which we are converting * @param integer double precision of the end result - * @return void * @access public */ function convert($value, $from_unit, $to_unit, $precision) @@ -280,4 +279,4 @@ class UnitConvertor } // end func getConvSpecs } // end class UnitConvertor -?> \ No newline at end of file +?> diff --git a/convert/convert.php b/convert/convert.php index 57ce6ea8..2545974c 100644 --- a/convert/convert.php +++ b/convert/convert.php @@ -6,7 +6,6 @@ * Author: Mike Macgirvin */ -use Friendica\App; use Friendica\Core\Hook; function convert_install() { @@ -26,7 +25,7 @@ function convert_content() { // @TODO Let's one day rewrite this to a modern composer package include 'UnitConvertor.php'; - class TP_Converter extends UnitConvertor + $conv = new class('en') extends UnitConvertor { public function __construct(string $lang = 'en') { @@ -43,7 +42,7 @@ function convert_content() { private function findBaseUnit($from, $to) { - while (list($skey, $sval) = each($this->bases)) { + foreach ($this->bases as $skey => $sval) { if ($skey == $from || $to == $skey || in_array($to, $sval) || in_array($from, $sval)) { return $skey; } @@ -63,7 +62,7 @@ function convert_content() { $cells[] = $cell; // We now have the base unit and value now lets produce the table; - while (list($key, $val) = each($this->bases[$base_unit])) { + foreach ($this->bases[$base_unit] as $val) { $cell ['value'] = $this->convert($value, $from_unit, $val, $precision) . ' ' . $val; $cell ['class'] = ($val == $from_unit || $val == $to_unit) ? 'framedred' : ''; $cells[] = $cell; @@ -86,9 +85,7 @@ function convert_content() { return $string; } - } - - $conv = new TP_Converter('en'); + }; $conversions = [ 'Temperature' => ['base' => 'Celsius', @@ -176,15 +173,15 @@ function convert_content() { ] ]; - while (list($key, $val) = each($conversions)) { + foreach ($conversions as $key => $val) { $conv->addConversion($val['base'], $val['conv']); $list[$key][] = $val['base']; - while (list($ukey, $uval) = each($val['conv'])) { + foreach ($val['conv'] as $ukey => $uval) { $list[$key][] = $ukey; } } - $o .= '

Unit Conversions

'; + $o = '

Unit Conversions

'; if (isset($_POST['from_unit']) && isset($_POST['value'])) { $o .= ($conv->getTable(intval($_POST['value']), $_POST['from_unit'], $_POST['to_unit'], 5)) . '

'; @@ -202,10 +199,9 @@ function convert_content() { $o .= ''; $o .= ' diff --git a/invidious/templates/settings.tpl b/invidious/templates/settings.tpl new file mode 100644 index 00000000..387286ef --- /dev/null +++ b/invidious/templates/settings.tpl @@ -0,0 +1,2 @@ +{{include file="field_checkbox.tpl" field=$enabled}} +{{include file="field_input.tpl" field=$server}} diff --git a/irc/irc.php b/irc/irc.php index 8bd05fb7..db808a99 100644 --- a/irc/irc.php +++ b/irc/irc.php @@ -7,7 +7,6 @@ * Author: Tobias Diekershoff */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; @@ -73,7 +72,7 @@ function irc_module() {} function irc_content() { - $baseurl = DI::baseUrl()->get() . '/addon/irc'; + $baseurl = DI::baseUrl() . '/addon/irc'; $o = ''; /* set the list of popular channels */ @@ -95,7 +94,7 @@ function irc_content() DI::page()['aside'] .= '

' . DI::l10n()->t('Popular Channels') . '

'; diff --git a/irc/lang/cs/messages.po b/irc/lang/cs/messages.po index 29d5fcea..8f25d7ed 100644 --- a/irc/lang/cs/messages.po +++ b/irc/lang/cs/messages.po @@ -11,59 +11,55 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-08 13:17+0200\n" -"PO-Revision-Date: 2018-06-14 14:36+0000\n" -"Last-Translator: Aditoo\n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:41+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: irc.php:37 -msgid "IRC Settings" -msgstr "Nastavení IRC" - -#: irc.php:38 +#: irc.php:32 msgid "" "Here you can change the system wide settings for the channels to " "automatically join and access via the side bar. Note the changes you do " "here, only effect the channel selection if you are logged in." -msgstr "" +msgstr "Zde můžete změnit systémová nastavení pro kanály pro automatické spojení a přístup přes postranní lištu. Mějte na paměti, že změny, které zde provedete, ovlivní výběr kanálů pouze, pokud jste přihlášen/a." -#: irc.php:39 irc.php:136 -msgid "Save Settings" -msgstr "Uložit nastavení" - -#: irc.php:40 irc.php:137 +#: irc.php:33 irc.php:133 msgid "Channel(s) to auto connect (comma separated)" msgstr "Kanál(y) pro automatické připojení (oddělené čárkami)" -#: irc.php:40 irc.php:137 +#: irc.php:33 irc.php:133 msgid "" "List of channels that shall automatically connected to when the app is " "launched." msgstr "Seznam kanálů, které budou při spuštění aplikace automaticky připojeny." -#: irc.php:41 irc.php:138 +#: irc.php:34 irc.php:134 msgid "Popular Channels (comma separated)" msgstr "Populární kanály (oddělené čárkami)" -#: irc.php:41 irc.php:138 +#: irc.php:34 irc.php:134 msgid "" "List of popular channels, will be displayed at the side and hotlinked for " "easy joining." msgstr "Seznam populárních kanálů, bude zobrazen na straně a bude obsahovat odkazy pro snadné připojení." -#: irc.php:57 irc.php:128 -msgid "IRC settings saved." -msgstr "IRC Nastavení uloženo." +#: irc.php:39 +msgid "IRC Settings" +msgstr "Nastavení IRC" -#: irc.php:62 +#: irc.php:60 msgid "IRC Chatroom" msgstr "IRC Místnost" -#: irc.php:90 +#: irc.php:88 msgid "Popular Channels" msgstr "Populární kanály" + +#: irc.php:132 +msgid "Save Settings" +msgstr "Uložit nastavení" diff --git a/irc/lang/cs/strings.php b/irc/lang/cs/strings.php index 89431a1c..6c6d5aea 100644 --- a/irc/lang/cs/strings.php +++ b/irc/lang/cs/strings.php @@ -5,12 +5,12 @@ function string_plural_select_cs($n){ $n = intval($n); if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} -$a->strings['IRC Settings'] = 'Nastavení IRC'; -$a->strings['Save Settings'] = 'Uložit nastavení'; +$a->strings['Here you can change the system wide settings for the channels to automatically join and access via the side bar. Note the changes you do here, only effect the channel selection if you are logged in.'] = 'Zde můžete změnit systémová nastavení pro kanály pro automatické spojení a přístup přes postranní lištu. Mějte na paměti, že změny, které zde provedete, ovlivní výběr kanálů pouze, pokud jste přihlášen/a.'; $a->strings['Channel(s) to auto connect (comma separated)'] = 'Kanál(y) pro automatické připojení (oddělené čárkami)'; $a->strings['List of channels that shall automatically connected to when the app is launched.'] = 'Seznam kanálů, které budou při spuštění aplikace automaticky připojeny.'; $a->strings['Popular Channels (comma separated)'] = 'Populární kanály (oddělené čárkami)'; $a->strings['List of popular channels, will be displayed at the side and hotlinked for easy joining.'] = 'Seznam populárních kanálů, bude zobrazen na straně a bude obsahovat odkazy pro snadné připojení.'; -$a->strings['IRC settings saved.'] = 'IRC Nastavení uloženo.'; +$a->strings['IRC Settings'] = 'Nastavení IRC'; $a->strings['IRC Chatroom'] = 'IRC Místnost'; $a->strings['Popular Channels'] = 'Populární kanály'; +$a->strings['Save Settings'] = 'Uložit nastavení'; diff --git a/irc/lang/de/messages.po b/irc/lang/de/messages.po index 4b47999b..84c95f4a 100644 --- a/irc/lang/de/messages.po +++ b/irc/lang/de/messages.po @@ -12,9 +12,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:14-0500\n" -"PO-Revision-Date: 2021-02-01 18:19+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 08:41+0000\n" +"Last-Translator: Ulf Rompe , 2019\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/irc/lang/it/messages.po b/irc/lang/it/messages.po index bbd199b8..8144342b 100644 --- a/irc/lang/it/messages.po +++ b/irc/lang/it/messages.po @@ -10,59 +10,55 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-08 13:17+0200\n" -"PO-Revision-Date: 2020-09-17 11:40+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:41+0000\n" +"Last-Translator: Sylke Vicious , 2020\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: irc.php:37 -msgid "IRC Settings" -msgstr "Impostazioni IRC" - -#: irc.php:38 +#: irc.php:32 msgid "" "Here you can change the system wide settings for the channels to " "automatically join and access via the side bar. Note the changes you do " "here, only effect the channel selection if you are logged in." msgstr "Qui puoi modificare le impostazioni globali di sistema per i canali a cui accedere automaticamente attraverso la barra laterale. Nota che le modifiche che effetti qui hanno effetto sulla selezione di canali solo se sei loggato." -#: irc.php:39 irc.php:136 -msgid "Save Settings" -msgstr "Salva Impostazioni" - -#: irc.php:40 irc.php:137 +#: irc.php:33 irc.php:133 msgid "Channel(s) to auto connect (comma separated)" msgstr "Canale(i) a cui autocollegarsi (separati da virgola)" -#: irc.php:40 irc.php:137 +#: irc.php:33 irc.php:133 msgid "" "List of channels that shall automatically connected to when the app is " "launched." msgstr "Lista di canali che a cui connettersi automaticamente quando l'app è avviata." -#: irc.php:41 irc.php:138 +#: irc.php:34 irc.php:134 msgid "Popular Channels (comma separated)" msgstr "Canali popolari (separati da virgola)" -#: irc.php:41 irc.php:138 +#: irc.php:34 irc.php:134 msgid "" "List of popular channels, will be displayed at the side and hotlinked for " "easy joining." msgstr "Lista di canali popolari: sarà visualizzata a lato e provvista di collegamento per facilitare l'adesione." -#: irc.php:57 irc.php:128 -msgid "IRC settings saved." -msgstr "Impostazioni IRC salvate." +#: irc.php:39 +msgid "IRC Settings" +msgstr "Impostazioni IRC" -#: irc.php:62 +#: irc.php:60 msgid "IRC Chatroom" msgstr "Stanza IRC" -#: irc.php:90 +#: irc.php:88 msgid "Popular Channels" msgstr "Canali Popolari" + +#: irc.php:132 +msgid "Save Settings" +msgstr "Salva Impostazioni" diff --git a/irc/lang/it/strings.php b/irc/lang/it/strings.php index 42cf7c0d..09aafe6e 100644 --- a/irc/lang/it/strings.php +++ b/irc/lang/it/strings.php @@ -3,15 +3,14 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['IRC Settings'] = 'Impostazioni IRC'; $a->strings['Here you can change the system wide settings for the channels to automatically join and access via the side bar. Note the changes you do here, only effect the channel selection if you are logged in.'] = 'Qui puoi modificare le impostazioni globali di sistema per i canali a cui accedere automaticamente attraverso la barra laterale. Nota che le modifiche che effetti qui hanno effetto sulla selezione di canali solo se sei loggato.'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; $a->strings['Channel(s) to auto connect (comma separated)'] = 'Canale(i) a cui autocollegarsi (separati da virgola)'; $a->strings['List of channels that shall automatically connected to when the app is launched.'] = 'Lista di canali che a cui connettersi automaticamente quando l\'app è avviata.'; $a->strings['Popular Channels (comma separated)'] = 'Canali popolari (separati da virgola)'; $a->strings['List of popular channels, will be displayed at the side and hotlinked for easy joining.'] = 'Lista di canali popolari: sarà visualizzata a lato e provvista di collegamento per facilitare l\'adesione.'; -$a->strings['IRC settings saved.'] = 'Impostazioni IRC salvate.'; +$a->strings['IRC Settings'] = 'Impostazioni IRC'; $a->strings['IRC Chatroom'] = 'Stanza IRC'; $a->strings['Popular Channels'] = 'Canali Popolari'; +$a->strings['Save Settings'] = 'Salva Impostazioni'; diff --git a/js_upload/file-uploader/server/php.php b/js_upload/file-uploader/server/php.php index 2248c8f0..ff485dec 100644 --- a/js_upload/file-uploader/server/php.php +++ b/js_upload/file-uploader/server/php.php @@ -77,10 +77,10 @@ class qqFileUploader { public function __construct(array $allowedExtensions = [], $sizeLimit = 10485760) { $allowedExtensions = array_map('strtolower', $allowedExtensions); - + $this->allowedExtensions = $allowedExtensions; $this->sizeLimit = $sizeLimit; - + $this->checkServerSettings(); if (isset($_GET['qqfile'])) { @@ -88,7 +88,7 @@ class qqFileUploader { } elseif (isset($_FILES['qqfile'])) { $this->file = new qqUploadedFileForm(); } else { - $this->file = false; + $this->file = false; } } @@ -105,7 +105,7 @@ class qqFileUploader { private function toBytes(string $str): int { - $val = trim($str); + $val = (int) trim($str); $last = strtolower($str[strlen($str) - 1]); switch($last) { diff --git a/js_upload/file-uploader/tests/action-acceptance.php b/js_upload/file-uploader/tests/action-acceptance.php index fc9583f2..172b8857 100644 --- a/js_upload/file-uploader/tests/action-acceptance.php +++ b/js_upload/file-uploader/tests/action-acceptance.php @@ -2,12 +2,12 @@ usleep(100000); -$fileName; -$fileSize; +$fileName = ''; +$fileSize = 0;; if (isset($_GET['qqfile'])){ $fileName = $_GET['qqfile']; - + // xhr request $headers = apache_request_headers(); $fileSize = (int)$headers['Content-Length']; @@ -34,13 +34,13 @@ if ($fileSize > 9 * 1024){ die ('{error: "server-error file size is bigger than 9kB"}'); } -if (count($_GET)){ +if (count($_GET)){ array_merge($_GET, array('fileName'=>$fileName)); - + $response = array_merge($_GET, array('success'=>true, 'fileName'=>$fileName)); - - // to pass data through iframe you will need to encode all html tags - echo htmlspecialchars(json_encode($response), ENT_NOQUOTES); + + // to pass data through iframe you will need to encode all html tags + echo htmlspecialchars(json_encode($response), ENT_NOQUOTES); } else { die ('{error: "server-error query params not passed"}'); } diff --git a/js_upload/file-uploader/tests/action-handler-queue-test.php b/js_upload/file-uploader/tests/action-handler-queue-test.php index ff13576d..78760d64 100644 --- a/js_upload/file-uploader/tests/action-handler-queue-test.php +++ b/js_upload/file-uploader/tests/action-handler-queue-test.php @@ -2,11 +2,11 @@ sleep(4); -$fileName; +$fileName = ''; if (isset($_GET['qqfile'])){ $fileName = $_GET['qqfile']; - + // xhr request $headers = apache_request_headers(); if ((int)$headers['Content-Length'] == 0){ @@ -14,7 +14,7 @@ if (isset($_GET['qqfile'])){ } } elseif (isset($_FILES['qqfile'])){ $fileName = basename($_FILES['qqfile']['name']); - + // form request if ($_FILES['qqfile']['size'] == 0){ die ('{error: "file size is zero"}'); @@ -25,7 +25,7 @@ if (isset($_GET['qqfile'])){ if (count($_GET)){ $_GET['success'] = true; - echo json_encode(array_merge($_GET)); + echo json_encode(array_merge($_GET)); } else { die ('{error: "query params not passed"}'); } diff --git a/js_upload/file-uploader/tests/action-handler-test.php b/js_upload/file-uploader/tests/action-handler-test.php index 24466b12..9fa72023 100644 --- a/js_upload/file-uploader/tests/action-handler-test.php +++ b/js_upload/file-uploader/tests/action-handler-test.php @@ -2,11 +2,11 @@ usleep(300); -$fileName; +$fileName = ''; if (isset($_GET['qqfile'])){ $fileName = $_GET['qqfile']; - + // xhr request $headers = apache_request_headers(); if ((int)$headers['Content-Length'] == 0){ @@ -14,7 +14,7 @@ if (isset($_GET['qqfile'])){ } } elseif (isset($_FILES['qqfile'])){ $fileName = basename($_FILES['qqfile']['name']); - + // form request if ($_FILES['qqfile']['size'] == 0){ die ('{error: "file size is zero"}'); @@ -25,7 +25,7 @@ if (isset($_GET['qqfile'])){ if (count($_GET)){ //return query params - echo json_encode(array_merge($_GET, array('fileName'=>$fileName))); + echo json_encode(array_merge($_GET, array('fileName'=>$fileName))); } else { die ('{error: "query params not passed"}'); } diff --git a/js_upload/js_upload.php b/js_upload/js_upload.php index 089cb7e2..4bf91de1 100644 --- a/js_upload/js_upload.php +++ b/js_upload/js_upload.php @@ -7,11 +7,10 @@ * Maintainer: Hypolite Petovan */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; +use Friendica\Util\Images; use Friendica\Util\Strings; global $js_upload_jsonresponse; @@ -20,9 +19,9 @@ global $js_upload_result; function js_upload_install() { Hook::register('photo_upload_form', __FILE__, 'js_upload_form'); - Hook::register('photo_post_init', __FILE__, 'js_upload_post_init'); - Hook::register('photo_post_file', __FILE__, 'js_upload_post_file'); - Hook::register('photo_post_end', __FILE__, 'js_upload_post_end'); + Hook::register('photo_post_init', __FILE__, 'js_upload_post_init'); + Hook::register('photo_post_file', __FILE__, 'js_upload_post_file'); + Hook::register('photo_post_end', __FILE__, 'js_upload_post_end'); } function js_upload_form(array &$b) @@ -34,11 +33,11 @@ function js_upload_form(array &$b) $tpl = Renderer::getMarkupTemplate('js_upload.tpl', 'addon/js_upload'); $b['addon_text'] .= Renderer::replaceMacros($tpl, [ - '$upload_msg' => DI::l10n()->t('Select files for upload'), - '$drop_msg' => DI::l10n()->t('Drop files here to upload'), - '$cancel' => DI::l10n()->t('Cancel'), - '$failed' => DI::l10n()->t('Failed'), - '$post_url' => $b['post_url'], + '$upload_msg' => DI::l10n()->t('Select files for upload'), + '$drop_msg' => DI::l10n()->t('Drop files here to upload'), + '$cancel' => DI::l10n()->t('Cancel'), + '$failed' => DI::l10n()->t('Failed'), + '$post_url' => $b['post_url'], '$maximagesize' => Strings::getBytesFromShorthand(DI::config()->get('system', 'maximagesize')), ]); } @@ -48,12 +47,19 @@ function js_upload_post_init(array &$b) global $js_upload_result, $js_upload_jsonresponse; // list of valid extensions - $allowedExtensions = ['jpeg', 'gif', 'png', 'jpg']; + $allowedExtensions = []; + foreach (Images::IMAGETYPES as $type) { + $extension = image_type_to_extension($type, false); + if ($extension == 'jpeg') { + $allowedExtensions[] = 'jpg'; + } + $allowedExtensions[] = $extension; + } // max file size in bytes $sizeLimit = Strings::getBytesFromShorthand(DI::config()->get('system', 'maximagesize')); - $uploader = new qqFileUploader($allowedExtensions, $sizeLimit); + $uploader = new js_upload_qqFileUploader($allowedExtensions, $sizeLimit); $result = $uploader->handleUpload(); @@ -61,7 +67,7 @@ function js_upload_post_init(array &$b) $js_upload_jsonresponse = htmlspecialchars(json_encode($result), ENT_NOQUOTES); if (isset($result['error'])) { - Logger::info('mod/photos.php: photos_post(): error uploading photo: ' . $result['error']); + DI::logger()->info('mod/photos.php: photos_post(): error uploading photo: ' . $result['error']); echo json_encode($result); exit(); } @@ -75,17 +81,16 @@ function js_upload_post_file(array &$b) $result = $js_upload_result; - $b['src'] = $result['path']; + $b['src'] = $result['path']; $b['filename'] = $result['filename']; $b['filesize'] = filesize($b['src']); - } function js_upload_post_end(int &$b) { global $js_upload_jsonresponse; - Logger::notice('upload_post_end'); + DI::logger()->notice('upload_post_end'); if (!empty($js_upload_jsonresponse)) { echo $js_upload_jsonresponse; exit(); @@ -95,7 +100,7 @@ function js_upload_post_end(int &$b) /** * Handle file uploads via XMLHttpRequest */ -class qqUploadedFileXhr +class js_upload_qqUploadedFileXhr { private $pathnm = ''; @@ -149,7 +154,7 @@ class qqUploadedFileXhr /** * Handle file uploads via regular form post (uses the $_FILES array) */ -class qqUploadedFileForm +class js_upload_qqUploadedFileForm { /** * Save the file to the specified path @@ -177,13 +182,17 @@ class qqUploadedFileForm } } -class qqFileUploader +class js_upload_qqFileUploader { - private $allowedExtensions = []; - private $sizeLimit = 10485760; + private $allowedExtensions; + private $sizeLimit; + + /** + * @var js_upload_qqUploadedFileXhr|js_upload_qqUploadedFileForm|false + */ private $file; - function __construct(array $allowedExtensions = [], $sizeLimit = 10485760) + function __construct(array $allowedExtensions = [], $sizeLimit) { $allowedExtensions = array_map('strtolower', $allowedExtensions); @@ -191,13 +200,12 @@ class qqFileUploader $this->sizeLimit = $sizeLimit; if (isset($_GET['qqfile'])) { - $this->file = new qqUploadedFileXhr(); + $this->file = new js_upload_qqUploadedFileXhr(); } elseif (isset($_FILES['qqfile'])) { - $this->file = new qqUploadedFileForm(); + $this->file = new js_upload_qqUploadedFileForm(); } else { $this->file = false; } - } /** @@ -215,11 +223,9 @@ class qqFileUploader return ['error' => DI::l10n()->t('Uploaded file is empty')]; } -// if ($size > $this->sizeLimit) { - -// return array('error' => DI::l10n()->t('Uploaded file is too large')); -// } - + // if ($size > $this->sizeLimit) { + // return array('error' => DI::l10n()->t('Uploaded file is too large')); + // } $maximagesize = Strings::getBytesFromShorthand(DI::config()->get('system', 'maximagesize')); @@ -231,7 +237,7 @@ class qqFileUploader $filename = $pathinfo['filename']; if (!isset($pathinfo['extension'])) { - Logger::warning('extension isn\'t set.', ['filename' => $filename]); + DI::logger()->warning('extension isn\'t set.', ['filename' => $filename]); } $ext = $pathinfo['extension'] ?? ''; @@ -241,14 +247,14 @@ class qqFileUploader if ($this->file->save()) { return [ - 'success' => true, - 'path' => $this->file->getPath(), + 'success' => true, + 'path' => $this->file->getPath(), 'filename' => $filename . '.' . $ext ]; } else { return [ - 'error' => DI::l10n()->t('Upload was cancelled, or server error encountered'), - 'path' => $this->file->getPath(), + 'error' => DI::l10n()->t('Upload was cancelled, or server error encountered'), + 'path' => $this->file->getPath(), 'filename' => $filename . '.' . $ext ]; } diff --git a/js_upload/lang/C/messages.po b/js_upload/lang/C/messages.po index 4d16fe17..0d607bd5 100644 --- a/js_upload/lang/C/messages.po +++ b/js_upload/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-23 23:53-0400\n" +"POT-Creation-Date: 2023-06-03 15:49-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,40 +17,40 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: js_upload.php:34 +#: js_upload.php:37 msgid "Select files for upload" msgstr "" -#: js_upload.php:35 +#: js_upload.php:38 msgid "Drop files here to upload" msgstr "" -#: js_upload.php:36 +#: js_upload.php:39 msgid "Cancel" msgstr "" -#: js_upload.php:37 +#: js_upload.php:40 msgid "Failed" msgstr "" -#: js_upload.php:215 +#: js_upload.php:209 msgid "No files were uploaded." msgstr "" -#: js_upload.php:221 +#: js_upload.php:215 msgid "Uploaded file is empty" msgstr "" -#: js_upload.php:233 +#: js_upload.php:227 #, php-format msgid "Image exceeds size limit of %s" msgstr "" -#: js_upload.php:245 +#: js_upload.php:239 #, php-format msgid "File has an invalid extension, it should be one of %s." msgstr "" -#: js_upload.php:256 +#: js_upload.php:250 msgid "Upload was cancelled, or server error encountered" msgstr "" diff --git a/js_upload/lang/cs/messages.po b/js_upload/lang/cs/messages.po index 731d165c..1241523f 100644 --- a/js_upload/lang/cs/messages.po +++ b/js_upload/lang/cs/messages.po @@ -4,53 +4,56 @@ # # # Translators: -# Michal Šupler , 2014 +# Aditoo, 2018 +# michal_s , 2014 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2014-07-07 19:13+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-03-23 23:53-0400\n" +"PO-Revision-Date: 2014-06-23 08:46+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: js_upload.php:43 -msgid "Upload a file" -msgstr "Nahrát soubor" +#: js_upload.php:34 +msgid "Select files for upload" +msgstr "" -#: js_upload.php:44 +#: js_upload.php:35 msgid "Drop files here to upload" -msgstr "Přeneste sem soubory k nahrání" +msgstr "Přetáhněte sem soubory k nahrání" -#: js_upload.php:45 +#: js_upload.php:36 msgid "Cancel" msgstr "Zrušit" -#: js_upload.php:46 +#: js_upload.php:37 msgid "Failed" msgstr "Neúspěch" -#: js_upload.php:303 +#: js_upload.php:215 msgid "No files were uploaded." msgstr "Žádné soubory nebyly nahrány." -#: js_upload.php:309 +#: js_upload.php:221 msgid "Uploaded file is empty" msgstr "Nahraný soubor je prázdný" -#: js_upload.php:321 -msgid "Image exceeds size limit of " -msgstr "Velikost obrázku překračuje limit velikosti" +#: js_upload.php:233 +#, php-format +msgid "Image exceeds size limit of %s" +msgstr "" -#: js_upload.php:332 -msgid "File has an invalid extension, it should be one of " -msgstr "Soubor má neplatnou příponu, ta by měla být jednou z" +#: js_upload.php:245 +#, php-format +msgid "File has an invalid extension, it should be one of %s." +msgstr "" -#: js_upload.php:343 +#: js_upload.php:256 msgid "Upload was cancelled, or server error encountered" msgstr "Nahrávání bylo zrušeno nebo došlo k chybě na serveru" diff --git a/js_upload/lang/cs/strings.php b/js_upload/lang/cs/strings.php index e03aceb0..55ec72a2 100644 --- a/js_upload/lang/cs/strings.php +++ b/js_upload/lang/cs/strings.php @@ -3,14 +3,11 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} -$a->strings['Upload a file'] = 'Nahrát soubor'; -$a->strings['Drop files here to upload'] = 'Přeneste sem soubory k nahrání'; +$a->strings['Drop files here to upload'] = 'Přetáhněte sem soubory k nahrání'; $a->strings['Cancel'] = 'Zrušit'; $a->strings['Failed'] = 'Neúspěch'; $a->strings['No files were uploaded.'] = 'Žádné soubory nebyly nahrány.'; $a->strings['Uploaded file is empty'] = 'Nahraný soubor je prázdný'; -$a->strings['Image exceeds size limit of '] = 'Velikost obrázku překračuje limit velikosti'; -$a->strings['File has an invalid extension, it should be one of '] = 'Soubor má neplatnou příponu, ta by měla být jednou z'; $a->strings['Upload was cancelled, or server error encountered'] = 'Nahrávání bylo zrušeno nebo došlo k chybě na serveru'; diff --git a/js_upload/lang/de/messages.po b/js_upload/lang/de/messages.po index 6cbf8445..010704c5 100644 --- a/js_upload/lang/de/messages.po +++ b/js_upload/lang/de/messages.po @@ -12,9 +12,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-23 23:53-0400\n" -"PO-Revision-Date: 2021-12-05 08:34+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 08:46+0000\n" +"Last-Translator: Tobias Diekershoff , 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/js_upload/lang/es/messages.po b/js_upload/lang/es/messages.po index 0b737806..a105d93e 100644 --- a/js_upload/lang/es/messages.po +++ b/js_upload/lang/es/messages.po @@ -5,52 +5,55 @@ # # Translators: # Albert, 2016 +# Senex Petrovic , 2021 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2016-11-17 18:59+0000\n" -"Last-Translator: Albert\n" -"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n" +"POT-Creation-Date: 2021-03-23 23:53-0400\n" +"PO-Revision-Date: 2014-06-23 08:46+0000\n" +"Last-Translator: Senex Petrovic , 2021\n" +"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: js_upload.php:43 -msgid "Upload a file" -msgstr "Subir un archivo" +#: js_upload.php:34 +msgid "Select files for upload" +msgstr "Seleciona archivos a subir" -#: js_upload.php:44 +#: js_upload.php:35 msgid "Drop files here to upload" msgstr "Soltar archivos aquí para subir" -#: js_upload.php:45 +#: js_upload.php:36 msgid "Cancel" msgstr "Cancelar" -#: js_upload.php:46 +#: js_upload.php:37 msgid "Failed" msgstr "Fallido" -#: js_upload.php:303 +#: js_upload.php:215 msgid "No files were uploaded." msgstr "No se subió ningún archivo." -#: js_upload.php:309 +#: js_upload.php:221 msgid "Uploaded file is empty" msgstr "El archivo subido está vacío" -#: js_upload.php:321 -msgid "Image exceeds size limit of " -msgstr "La imagen excede el tamaño de" +#: js_upload.php:233 +#, php-format +msgid "Image exceeds size limit of %s" +msgstr "" -#: js_upload.php:332 -msgid "File has an invalid extension, it should be one of " -msgstr "El archivo tiene una extensión inválida, debería ser una de" +#: js_upload.php:245 +#, php-format +msgid "File has an invalid extension, it should be one of %s." +msgstr "" -#: js_upload.php:343 +#: js_upload.php:256 msgid "Upload was cancelled, or server error encountered" msgstr "La subida fue cancelada, o el servidor tuvo un error" diff --git a/js_upload/lang/es/strings.php b/js_upload/lang/es/strings.php index e15c1149..4c0dc66b 100644 --- a/js_upload/lang/es/strings.php +++ b/js_upload/lang/es/strings.php @@ -3,14 +3,12 @@ if(! function_exists("string_plural_select_es")) { function string_plural_select_es($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Upload a file'] = 'Subir un archivo'; +$a->strings['Select files for upload'] = 'Seleciona archivos a subir'; $a->strings['Drop files here to upload'] = 'Soltar archivos aquí para subir'; $a->strings['Cancel'] = 'Cancelar'; $a->strings['Failed'] = 'Fallido'; $a->strings['No files were uploaded.'] = 'No se subió ningún archivo.'; $a->strings['Uploaded file is empty'] = 'El archivo subido está vacío'; -$a->strings['Image exceeds size limit of '] = 'La imagen excede el tamaño de'; -$a->strings['File has an invalid extension, it should be one of '] = 'El archivo tiene una extensión inválida, debería ser una de'; $a->strings['Upload was cancelled, or server error encountered'] = 'La subida fue cancelada, o el servidor tuvo un error'; diff --git a/js_upload/lang/it/messages.po b/js_upload/lang/it/messages.po index 271057cb..172ee90d 100644 --- a/js_upload/lang/it/messages.po +++ b/js_upload/lang/it/messages.po @@ -11,14 +11,14 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-23 23:53-0400\n" -"PO-Revision-Date: 2021-05-05 10:50+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"PO-Revision-Date: 2014-06-23 08:46+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: js_upload.php:34 msgid "Select files for upload" diff --git a/js_upload/lang/it/strings.php b/js_upload/lang/it/strings.php index f2ebfe0b..5c961761 100644 --- a/js_upload/lang/it/strings.php +++ b/js_upload/lang/it/strings.php @@ -3,7 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Select files for upload'] = 'Seleziona file per il caricamento'; $a->strings['Drop files here to upload'] = 'Trascina un file qui per caricarlo'; diff --git a/js_upload/lang/nl/messages.po b/js_upload/lang/nl/messages.po index 713ba3a2..8b3179ff 100644 --- a/js_upload/lang/nl/messages.po +++ b/js_upload/lang/nl/messages.po @@ -5,52 +5,55 @@ # # Translators: # Jeroen De Meerleer , 2018 +# Ruud Schilders , 2020 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-08-24 11:48+0000\n" -"Last-Translator: Jeroen De Meerleer \n" -"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n" +"POT-Creation-Date: 2021-03-23 23:53-0400\n" +"PO-Revision-Date: 2014-06-23 08:46+0000\n" +"Last-Translator: Ruud Schilders , 2020\n" +"Language-Team: Dutch (http://app.transifex.com/Friendica/friendica/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js_upload.php:43 -msgid "Upload a file" -msgstr "Upload een bestand" +#: js_upload.php:34 +msgid "Select files for upload" +msgstr "" -#: js_upload.php:44 +#: js_upload.php:35 msgid "Drop files here to upload" msgstr "Sleep uw bestanden hier om ze te uploaden" -#: js_upload.php:45 +#: js_upload.php:36 msgid "Cancel" -msgstr "" +msgstr "Afbreken" -#: js_upload.php:46 +#: js_upload.php:37 msgid "Failed" -msgstr "" +msgstr "Mislukt" -#: js_upload.php:303 +#: js_upload.php:215 msgid "No files were uploaded." -msgstr "" +msgstr "Er waren geen bestanden geüpload." -#: js_upload.php:309 +#: js_upload.php:221 msgid "Uploaded file is empty" +msgstr "Het geüploade bestand is leeg" + +#: js_upload.php:233 +#, php-format +msgid "Image exceeds size limit of %s" msgstr "" -#: js_upload.php:321 -msgid "Image exceeds size limit of " +#: js_upload.php:245 +#, php-format +msgid "File has an invalid extension, it should be one of %s." msgstr "" -#: js_upload.php:332 -msgid "File has an invalid extension, it should be one of " -msgstr "" - -#: js_upload.php:343 +#: js_upload.php:256 msgid "Upload was cancelled, or server error encountered" msgstr "" diff --git a/js_upload/lang/nl/strings.php b/js_upload/lang/nl/strings.php index dcdf634a..4ba709a4 100644 --- a/js_upload/lang/nl/strings.php +++ b/js_upload/lang/nl/strings.php @@ -5,5 +5,8 @@ function string_plural_select_nl($n){ $n = intval($n); return intval($n != 1); }} -$a->strings['Upload a file'] = 'Upload een bestand'; $a->strings['Drop files here to upload'] = 'Sleep uw bestanden hier om ze te uploaden'; +$a->strings['Cancel'] = 'Afbreken'; +$a->strings['Failed'] = 'Mislukt'; +$a->strings['No files were uploaded.'] = 'Er waren geen bestanden geüpload.'; +$a->strings['Uploaded file is empty'] = 'Het geüploade bestand is leeg'; diff --git a/js_upload/templates/js_upload.tpl b/js_upload/templates/js_upload.tpl index f45b495c..b482cd2b 100644 --- a/js_upload/templates/js_upload.tpl +++ b/js_upload/templates/js_upload.tpl @@ -35,18 +35,18 @@ let albumElm = document.getElementById('photos-upload-album-select'); let contact_allow = document.querySelector('[name="contact_allow"]:not(:disabled)'); - let group_allow = document.querySelector('[name="group_allow"]:not(:disabled)'); - let contact_deny = document.querySelector('[name="contact_deny"]:not(:disabled)'); - let group_deny = document.querySelector('[name="group_deny"]:not(:disabled)'); + let circle_allow = document.querySelector('[name="circle_allow"]:not(:disabled)'); + let contact_deny = document.querySelector('[name="contact_deny"]:not(:disabled)'); + let circle_deny = document.querySelector('[name="circle_deny"]:not(:disabled)'); uploader.setParams({ newalbum : newalbumElm ? newalbumElm.value : '', album : albumElm ? albumElm.value : '', not_visible : document.getElementById('photos-upload-noshare').checked, contact_allow : contact_allow ? contact_allow.value : '', - group_allow : group_allow ? group_allow.value : '', + circle_allow : circle_allow ? circle_allow.value : '', contact_deny : contact_deny ? contact_deny.value : '', - group_deny : group_deny ? group_deny.value : '', + circle_deny : circle_deny ? circle_deny.value : '', }); } }); diff --git a/keycloakpassword/keycloakpassword.php b/keycloakpassword/keycloakpassword.php index bfff4ea4..11034ffe 100644 --- a/keycloakpassword/keycloakpassword.php +++ b/keycloakpassword/keycloakpassword.php @@ -6,9 +6,7 @@ * Author: Ryan */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Database\DBA; use Friendica\DI; @@ -38,7 +36,7 @@ function keycloakpassword_request($client_id, $secret, $url, $params = []) $res = curl_exec($ch); if (curl_errno($ch)) { - Logger::error(curl_error($ch)); + DI::logger()->error(curl_error($ch)); } curl_close($ch); @@ -92,7 +90,7 @@ function keycloakpassword_authenticate(array &$b) $client_id, $secret, $endpoint . '/logout', - [ 'refresh_token' => res['refresh_token'] ] + [ 'refresh_token' => $res['refresh_token'] ] ); } } diff --git a/krynn/krynn.php b/krynn/krynn.php index f7e77c26..b57d827e 100644 --- a/krynn/krynn.php +++ b/krynn/krynn.php @@ -10,9 +10,7 @@ *"My body was my sacrifice... for my magic. This damage is permanent." - Raistlin Majere */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; @@ -32,7 +30,7 @@ function krynn_install() Hook::register('addon_settings', 'addon/krynn/krynn.php', 'krynn_settings'); Hook::register('addon_settings_post', 'addon/krynn/krynn.php', 'krynn_settings_post'); - Logger::notice("installed krynn"); + DI::logger()->notice("installed krynn"); } function krynn_post_hook(&$item) diff --git a/krynn/lang/de/messages.po b/krynn/lang/de/messages.po index 5dfa7269..1159354b 100644 --- a/krynn/lang/de/messages.po +++ b/krynn/lang/de/messages.po @@ -14,9 +14,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:14-0500\n" -"PO-Revision-Date: 2021-12-22 16:22+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2015-07-07 15:14+0000\n" +"Last-Translator: Tobias Diekershoff , 2018,2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/krynn/lang/fr/messages.po b/krynn/lang/fr/messages.po index a96af8de..8a306eb1 100644 --- a/krynn/lang/fr/messages.po +++ b/krynn/lang/fr/messages.po @@ -5,14 +5,15 @@ # # Translators: # bob lebonche , 2021 +# cracrayol, 2024 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:14-0500\n" "PO-Revision-Date: 2015-07-07 15:14+0000\n" -"Last-Translator: bob lebonche , 2021\n" -"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" +"Last-Translator: cracrayol, 2024\n" +"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -21,7 +22,7 @@ msgstr "" #: krynn.php:127 msgid "Enable Krynn Addon" -msgstr "Activer l'application complémentaire Krynn" +msgstr "Activer l'extension Krynn" #: krynn.php:132 msgid "Krynn Settings" diff --git a/krynn/lang/fr/strings.php b/krynn/lang/fr/strings.php index 3c3574d0..84293f79 100644 --- a/krynn/lang/fr/strings.php +++ b/krynn/lang/fr/strings.php @@ -5,5 +5,5 @@ function string_plural_select_fr($n){ $n = intval($n); if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Enable Krynn Addon'] = 'Activer l\'application complémentaire Krynn'; +$a->strings['Enable Krynn Addon'] = 'Activer l\'extension Krynn'; $a->strings['Krynn Settings'] = 'Paramètres de Krynn'; diff --git a/krynn/lang/it/messages.po b/krynn/lang/it/messages.po index c1bb0949..d9614ca1 100644 --- a/krynn/lang/it/messages.po +++ b/krynn/lang/it/messages.po @@ -10,28 +10,20 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-04-19 11:11+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2015-07-07 15:14+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: krynn.php:132 krynn.php:136 -msgid "Krynn" -msgstr "Krynn" - -#: krynn.php:141 -msgid "Krynn Settings" -msgstr "Impostazioni Krynn" - -#: krynn.php:143 +#: krynn.php:127 msgid "Enable Krynn Addon" msgstr "Abilita componente aggiuntivo Krynn" -#: krynn.php:148 -msgid "Save Settings" -msgstr "Salva Impostazioni" +#: krynn.php:132 +msgid "Krynn Settings" +msgstr "Impostazioni Krynn" diff --git a/krynn/lang/it/strings.php b/krynn/lang/it/strings.php index 6322a0c2..727d2877 100644 --- a/krynn/lang/it/strings.php +++ b/krynn/lang/it/strings.php @@ -3,9 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Krynn'] = 'Krynn'; -$a->strings['Krynn Settings'] = 'Impostazioni Krynn'; $a->strings['Enable Krynn Addon'] = 'Abilita componente aggiuntivo Krynn'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Krynn Settings'] = 'Impostazioni Krynn'; diff --git a/langfilter/lang/ar/messages.po b/langfilter/lang/ar/messages.po index 6bcc67f9..e68e49fb 100644 --- a/langfilter/lang/ar/messages.po +++ b/langfilter/lang/ar/messages.po @@ -4,73 +4,74 @@ # # # Translators: +# abidin toumi , 2021 # Farida Khalaf , 2021 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-04-26 09:14+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2015-07-25 08:05+0000\n" +"Last-Translator: abidin toumi , 2021\n" +"Language-Team: Arabic (http://app.transifex.com/Friendica/friendica/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: langfilter.php:50 -msgid "Language Filter" -msgstr "اللغة" - -#: langfilter.php:51 +#: langfilter.php:49 msgid "" "This addon tries to identify the language posts are written in. If it does " "not match any language specified below, posts will be hidden by collapsing " "them." msgstr "" -#: langfilter.php:52 +#: langfilter.php:50 msgid "Use the language filter" msgstr "اختيار اللغة" -#: langfilter.php:53 +#: langfilter.php:51 msgid "Able to read" msgstr " قابل للقراءة" -#: langfilter.php:53 +#: langfilter.php:51 msgid "" "List of abbreviations (ISO 639-1 codes) for languages you speak, comma " "separated. For example \"de,it\"." msgstr "قائمة الرموز ( ISO 639-1) للغات ، مفصولة بفواصل. على سبيل المثال \"de، it\"" -#: langfilter.php:54 +#: langfilter.php:52 msgid "Minimum confidence in language detection" msgstr "الحد الأدنى من نسبة اكتشاف اللغة" -#: langfilter.php:54 +#: langfilter.php:52 msgid "" "Minimum confidence in language detection being correct, from 0 to 100. Posts" " will not be filtered when the confidence of language detection is below " "this percent value." msgstr "الحد الأدنى من صحة اكتشاف اللغة ، من 0 إلى 100. لن تتم فلترة المشاركات عندما تكون صحة اكتشاف اللغة أقل من هذه النسبة المئوية." -#: langfilter.php:55 +#: langfilter.php:53 msgid "Minimum length of message body" msgstr "الحد الأدنى لنص الرسالة" -#: langfilter.php:55 +#: langfilter.php:53 msgid "" "Minimum number of characters in message body for filter to be used. Posts " "shorter than this will not be filtered. Note: Language detection is " "unreliable for short content (<200 characters)." msgstr "الحد الأدنى لأحرف نص الرسالة لاستخدام الفلتر. لن يتم فلترة المشاركات الأقصر من هذا. ملاحظة: لا يمكن الاعتماد على اكتشاف اللغة للمحتوى القصير (<200 حرف)." -#: langfilter.php:56 +#: langfilter.php:58 +msgid "Language Filter" +msgstr "مرشح اللغة" + +#: langfilter.php:60 msgid "Save Settings" msgstr "حفظ الإعدادات" -#: langfilter.php:187 +#: langfilter.php:193 #, php-format msgid "Filtered language: %s" msgstr "اختيار اللغة: %s" diff --git a/langfilter/lang/ar/strings.php b/langfilter/lang/ar/strings.php index 0c07842c..cf8a7632 100644 --- a/langfilter/lang/ar/strings.php +++ b/langfilter/lang/ar/strings.php @@ -5,7 +5,6 @@ function string_plural_select_ar($n){ $n = intval($n); if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; } }} -$a->strings['Language Filter'] = 'اللغة'; $a->strings['Use the language filter'] = 'اختيار اللغة'; $a->strings['Able to read'] = ' قابل للقراءة'; $a->strings['List of abbreviations (ISO 639-1 codes) for languages you speak, comma separated. For example "de,it".'] = 'قائمة الرموز ( ISO 639-1) للغات ، مفصولة بفواصل. على سبيل المثال "de، it"'; @@ -13,5 +12,6 @@ $a->strings['Minimum confidence in language detection'] = 'الحد الأدنى $a->strings['Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value.'] = 'الحد الأدنى من صحة اكتشاف اللغة ، من 0 إلى 100. لن تتم فلترة المشاركات عندما تكون صحة اكتشاف اللغة أقل من هذه النسبة المئوية.'; $a->strings['Minimum length of message body'] = 'الحد الأدنى لنص الرسالة'; $a->strings['Minimum number of characters in message body for filter to be used. Posts shorter than this will not be filtered. Note: Language detection is unreliable for short content (<200 characters).'] = 'الحد الأدنى لأحرف نص الرسالة لاستخدام الفلتر. لن يتم فلترة المشاركات الأقصر من هذا. ملاحظة: لا يمكن الاعتماد على اكتشاف اللغة للمحتوى القصير (<200 حرف).'; +$a->strings['Language Filter'] = 'مرشح اللغة'; $a->strings['Save Settings'] = 'حفظ الإعدادات'; $a->strings['Filtered language: %s'] = 'اختيار اللغة: %s'; diff --git a/langfilter/lang/de/messages.po b/langfilter/lang/de/messages.po index baac99d2..9a9c2b24 100644 --- a/langfilter/lang/de/messages.po +++ b/langfilter/lang/de/messages.po @@ -5,7 +5,7 @@ # # Translators: # Andreas H., 2018 -# Copiis Praeesse , 2018 +# Copiis Praeesse , 2018 # Ralf Thees , 2019 # Tobias Diekershoff , 2015 # Tobias Diekershoff , 2020-2021 @@ -15,9 +15,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:15-0500\n" -"PO-Revision-Date: 2021-10-19 18:08+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2015-07-25 08:05+0000\n" +"Last-Translator: Tobias Diekershoff , 2020-2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/langfilter/lang/it/messages.po b/langfilter/lang/it/messages.po index 3bf7baed..a1dab65a 100644 --- a/langfilter/lang/it/messages.po +++ b/langfilter/lang/it/messages.po @@ -12,68 +12,68 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-10-17 21:25+0000\n" -"Last-Translator: SickShark X\n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2015-07-25 08:05+0000\n" +"Last-Translator: SickShark X, 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: langfilter.php:50 -msgid "Language Filter" -msgstr "Filtro Lingua" - -#: langfilter.php:51 +#: langfilter.php:49 msgid "" "This addon tries to identify the language posts are written in. If it does " "not match any language specified below, posts will be hidden by collapsing " "them." msgstr "Questo plug-in prova a identificare la lingua con cui sono stati scritti i posts. Se non corrisponde a nessuna delle lingue specificate qui sotto, i post verranno nascosti." -#: langfilter.php:52 +#: langfilter.php:50 msgid "Use the language filter" msgstr "Usa il filtro lingua" -#: langfilter.php:53 +#: langfilter.php:51 msgid "Able to read" msgstr "In grado di leggere" -#: langfilter.php:53 +#: langfilter.php:51 msgid "" "List of abbreviations (ISO 639-1 codes) for languages you speak, comma " "separated. For example \"de,it\"." msgstr "Lista di abbreviazioni (codici ISO 639-1) per le lingue che parli, separate da virgola. Per esempio \"it,de\"." -#: langfilter.php:54 +#: langfilter.php:52 msgid "Minimum confidence in language detection" msgstr "Fiducia minima nel rilevamento della lingua" -#: langfilter.php:54 +#: langfilter.php:52 msgid "" "Minimum confidence in language detection being correct, from 0 to 100. Posts" " will not be filtered when the confidence of language detection is below " "this percent value." msgstr "Fiducia minima che il rilevamento della lingua sia corretto, da 0 a 100. I messaggi non saranno filtrati quando la fiducia nel rilevamento della lingua è sotto questo valore percentuale." -#: langfilter.php:55 +#: langfilter.php:53 msgid "Minimum length of message body" msgstr "Lunghezza minima del corpo del messaggio" -#: langfilter.php:55 +#: langfilter.php:53 msgid "" "Minimum number of characters in message body for filter to be used. Posts " "shorter than this will not be filtered. Note: Language detection is " "unreliable for short content (<200 characters)." msgstr "Numero di caratteri minimo perché il filtro venga usato. I messaggio più corti non saranno filtrati. Nota: la rilevazione della lingua non è affidabile con messaggi brevi (<200 caratteri)" -#: langfilter.php:56 +#: langfilter.php:58 +msgid "Language Filter" +msgstr "Filtro Lingua" + +#: langfilter.php:60 msgid "Save Settings" msgstr "Salva Impostazioni" -#: langfilter.php:187 +#: langfilter.php:193 #, php-format msgid "Filtered language: %s" msgstr "Lingua filtrata: %s" diff --git a/langfilter/lang/it/strings.php b/langfilter/lang/it/strings.php index f1afafad..8cae0b57 100644 --- a/langfilter/lang/it/strings.php +++ b/langfilter/lang/it/strings.php @@ -3,9 +3,8 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Language Filter'] = 'Filtro Lingua'; $a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = 'Questo plug-in prova a identificare la lingua con cui sono stati scritti i posts. Se non corrisponde a nessuna delle lingue specificate qui sotto, i post verranno nascosti.'; $a->strings['Use the language filter'] = 'Usa il filtro lingua'; $a->strings['Able to read'] = 'In grado di leggere'; @@ -14,5 +13,6 @@ $a->strings['Minimum confidence in language detection'] = 'Fiducia minima nel ri $a->strings['Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value.'] = 'Fiducia minima che il rilevamento della lingua sia corretto, da 0 a 100. I messaggi non saranno filtrati quando la fiducia nel rilevamento della lingua è sotto questo valore percentuale.'; $a->strings['Minimum length of message body'] = 'Lunghezza minima del corpo del messaggio'; $a->strings['Minimum number of characters in message body for filter to be used. Posts shorter than this will not be filtered. Note: Language detection is unreliable for short content (<200 characters).'] = 'Numero di caratteri minimo perché il filtro venga usato. I messaggio più corti non saranno filtrati. Nota: la rilevazione della lingua non è affidabile con messaggi brevi (<200 caratteri)'; +$a->strings['Language Filter'] = 'Filtro Lingua'; $a->strings['Save Settings'] = 'Salva Impostazioni'; $a->strings['Filtered language: %s'] = 'Lingua filtrata: %s'; diff --git a/langfilter/lang/ru/messages.po b/langfilter/lang/ru/messages.po index e1fbc9e8..45ad7b3d 100644 --- a/langfilter/lang/ru/messages.po +++ b/langfilter/lang/ru/messages.po @@ -4,63 +4,59 @@ # # # Translators: -# Alexander An , 2020 +# Alexander An , 2020,2023 # Stanislav N. , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-03 22:02-0400\n" -"PO-Revision-Date: 2020-10-09 17:48+0000\n" -"Last-Translator: Alexander An \n" -"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2015-07-25 08:05+0000\n" +"Last-Translator: Alexander An , 2020,2023\n" +"Language-Team: Russian (http://app.transifex.com/Friendica/friendica/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: langfilter.php:52 -msgid "Language Filter" -msgstr "Языковой фильтр" - -#: langfilter.php:53 +#: langfilter.php:49 msgid "" "This addon tries to identify the language posts are written in. If it does " "not match any language specified below, posts will be hidden by collapsing " "them." -msgstr "Это дополнение пытается идентифицировать язык, на котором написаны посты. Если язык не соответствует ни одному, указанному ниже, то такие посты будут скрыты." +msgstr "Это дополнение пытается идентифицировать язык, на котором сделаны записи. Если язык не соответствует ни одному, указанному ниже, то такие посты будут свёрнуты." -#: langfilter.php:54 +#: langfilter.php:50 msgid "Use the language filter" msgstr "Использовать языковой фильтр" -#: langfilter.php:55 +#: langfilter.php:51 msgid "Able to read" msgstr "Возможность читать" -#: langfilter.php:55 +#: langfilter.php:51 msgid "" "List of abbreviations (ISO 639-1 codes) for languages you speak, comma " "separated. For example \"de,it\"." msgstr "Список аббревиатур (кодов по ISO 639-1 ) для языков, на которых вы говорите. Например, \"ru,en\"." -#: langfilter.php:56 +#: langfilter.php:52 msgid "Minimum confidence in language detection" msgstr "Минимальная уверенность в определении языка" -#: langfilter.php:56 +#: langfilter.php:52 msgid "" "Minimum confidence in language detection being correct, from 0 to 100. Posts" " will not be filtered when the confidence of language detection is below " "this percent value." msgstr "Минимальная уверенность в правильном определении языка, от 0 до 100. Посты не будут скрыты, если уверенность в правильном определении языка в процентах ниже этого значения." -#: langfilter.php:57 +#: langfilter.php:53 msgid "Minimum length of message body" msgstr "Минимальная длина тела сообщения" -#: langfilter.php:57 +#: langfilter.php:53 msgid "" "Minimum number of characters in message body for filter to be used. Posts " "shorter than this will not be filtered. Note: Language detection is " @@ -68,10 +64,14 @@ msgid "" msgstr "Минимальное количество знаков в теле сообщения для применения фильтрации. Посты, длина которых меньше указанного значения, не будут отфильтрованы. Обратите внимание, что определение языка работает ненадежно для небольших постов (<200 символов)." #: langfilter.php:58 +msgid "Language Filter" +msgstr "Языковой фильтр" + +#: langfilter.php:60 msgid "Save Settings" msgstr "Сохранить настройки" -#: langfilter.php:189 +#: langfilter.php:193 #, php-format msgid "Filtered language: %s" msgstr "Отфильтрованный язык: %s" diff --git a/langfilter/lang/ru/strings.php b/langfilter/lang/ru/strings.php index 0489bd4f..1f5619f7 100644 --- a/langfilter/lang/ru/strings.php +++ b/langfilter/lang/ru/strings.php @@ -5,8 +5,7 @@ function string_plural_select_ru($n){ $n = intval($n); if ($n%10==1 && $n%100!=11) { return 0; } else if ($n%10>=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Language Filter'] = 'Языковой фильтр'; -$a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = 'Это дополнение пытается идентифицировать язык, на котором написаны посты. Если язык не соответствует ни одному, указанному ниже, то такие посты будут скрыты.'; +$a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = 'Это дополнение пытается идентифицировать язык, на котором сделаны записи. Если язык не соответствует ни одному, указанному ниже, то такие посты будут свёрнуты.'; $a->strings['Use the language filter'] = 'Использовать языковой фильтр'; $a->strings['Able to read'] = 'Возможность читать'; $a->strings['List of abbreviations (ISO 639-1 codes) for languages you speak, comma separated. For example "de,it".'] = 'Список аббревиатур (кодов по ISO 639-1 ) для языков, на которых вы говорите. Например, "ru,en".'; @@ -14,5 +13,6 @@ $a->strings['Minimum confidence in language detection'] = 'Минимальна $a->strings['Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value.'] = 'Минимальная уверенность в правильном определении языка, от 0 до 100. Посты не будут скрыты, если уверенность в правильном определении языка в процентах ниже этого значения.'; $a->strings['Minimum length of message body'] = 'Минимальная длина тела сообщения'; $a->strings['Minimum number of characters in message body for filter to be used. Posts shorter than this will not be filtered. Note: Language detection is unreliable for short content (<200 characters).'] = 'Минимальное количество знаков в теле сообщения для применения фильтрации. Посты, длина которых меньше указанного значения, не будут отфильтрованы. Обратите внимание, что определение языка работает ненадежно для небольших постов (<200 символов).'; +$a->strings['Language Filter'] = 'Языковой фильтр'; $a->strings['Save Settings'] = 'Сохранить настройки'; $a->strings['Filtered language: %s'] = 'Отфильтрованный язык: %s'; diff --git a/langfilter/langfilter.php b/langfilter/langfilter.php index 020a32df..3a202fcd 100644 --- a/langfilter/langfilter.php +++ b/langfilter/langfilter.php @@ -7,7 +7,6 @@ * License: MIT */ -use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Renderer; @@ -100,21 +99,21 @@ function langfilter_addon_settings_post(array &$b) function langfilter_prepare_body_content_filter(&$hook_data) { - $logged_user = DI::userSession()->getLocalUserId(); - if (!$logged_user) { + $uid = $hook_data['uid'] ?? DI::userSession()->getLocalUserId(); + if (!$uid) { return; } // Never filter own messages // TODO: find a better way to extract this - $logged_user_profile = DI::baseUrl()->get() . '/profile/' . DI::userSession()->getLocalUserNickname(); + $logged_user_profile = DI::baseUrl() . '/profile/' . DI::userSession()->getLocalUserNickname(); if ($logged_user_profile == $hook_data['item']['author-link']) { return; } // Don't filter if language filter is disabled - if (!DI::pConfig()->get($logged_user, 'langfilter', 'enable', - !DI::pConfig()->get($logged_user, 'langfilter', 'disable')) + if (!DI::pConfig()->get($uid, 'langfilter', 'enable', + !DI::pConfig()->get($uid, 'langfilter', 'disable')) ) { return; } @@ -122,13 +121,13 @@ function langfilter_prepare_body_content_filter(&$hook_data) $naked_body = strip_tags( $hook_data['item']['rendered-html'] ??''?: // Equivalent of !empty() - BBCode::convert($hook_data['item']['body'], false, BBCode::ACTIVITYPUB, true) + BBCode::convertForUriId($hook_data['item']['uri-id'], $hook_data['item']['body'], BBCode::ACTIVITYPUB) ); $naked_body = preg_replace('#\s+#', ' ', trim($naked_body)); // Don't filter if body lenght is below minimum - $minlen = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'minlength', 32); + $minlen = DI::pConfig()->get($uid, 'langfilter', 'minlength', 32); if (!$minlen) { $minlen = 32; } @@ -137,8 +136,8 @@ function langfilter_prepare_body_content_filter(&$hook_data) return; } - $read_languages_string = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'languages'); - $minconfidence = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'minconfidence'); + $read_languages_string = DI::pConfig()->get($uid, 'langfilter', 'languages'); + $minconfidence = DI::pConfig()->get($uid, 'langfilter', 'minconfidence'); // Don't filter if no spoken languages are configured if (!$read_languages_string) { @@ -148,6 +147,8 @@ function langfilter_prepare_body_content_filter(&$hook_data) $iso639 = new Matriphe\ISO639\ISO639; + $confidence = null; + // Extract the language of the post if (!empty($hook_data['item']['language'])) { $languages = json_decode($hook_data['item']['language'], true); @@ -163,7 +164,7 @@ function langfilter_prepare_body_content_filter(&$hook_data) return; } - $lang = $iso639->languageByCode1($iso2); + $lang = $iso639->languageByCode1(substr($iso2, 0, 2)); } else { $opts = $hook_data['item']['postopts']; if (!$opts) { diff --git a/ldapauth/ldapauth.php b/ldapauth/ldapauth.php index 38e2d6a1..b80c5226 100644 --- a/ldapauth/ldapauth.php +++ b/ldapauth/ldapauth.php @@ -29,9 +29,7 @@ * The configuration options for this module are described in the config/ldapauth.config.php file */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\User; @@ -45,7 +43,7 @@ function ldapauth_install() function ldapauth_load_config(ConfigFileManager $loader) { - DI::app()->getConfigCache()->load($loader->loadAddonConfig('ldapauth'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('ldapauth'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); } function ldapauth_hook_authenticate(array &$b) @@ -70,54 +68,54 @@ function ldapauth_authenticate($username, $password) $ldap_autocreateaccount_nameattribute = DI::config()->get('ldapauth', 'ldap_autocreateaccount_nameattribute'); if (!extension_loaded('ldap') || !strlen($ldap_server)) { - Logger::error('Addon not configured or missing php-ldap extension', ['extension_loaded' => extension_loaded('ldap'), 'server' => $ldap_server]); + DI::logger()->error('Addon not configured or missing php-ldap extension', ['extension_loaded' => extension_loaded('ldap'), 'server' => $ldap_server]); return false; } if (!strlen($password)) { - Logger::error('Empty password disallowed', ['provided_password_length' => strlen($password)]); + DI::logger()->error('Empty password disallowed', ['provided_password_length' => strlen($password)]); return false; } $connect = @ldap_connect($ldap_server); if ($connect === false) { - Logger::warning('Could not connect to LDAP server', ['server' => $ldap_server]); + DI::logger()->warning('Could not connect to LDAP server', ['server' => $ldap_server]); return false; } @ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); @ldap_set_option($connect, LDAP_OPT_REFERRALS, 0); if ((@ldap_bind($connect, $ldap_binddn, $ldap_bindpw)) === false) { - Logger::warning('Could not bind to LDAP server', ['server' => $ldap_server, 'binddn' => $ldap_binddn, 'errno' => ldap_errno($connect), 'error' => ldap_error($connect)]); + DI::logger()->warning('Could not bind to LDAP server', ['server' => $ldap_server, 'binddn' => $ldap_binddn, 'errno' => ldap_errno($connect), 'error' => ldap_error($connect)]); return false; } $res = @ldap_search($connect, $ldap_searchdn, $ldap_userattr . '=' . $username); if (!$res) { - Logger::notice('LDAP user not found.', ['searchdn' => $ldap_searchdn, 'userattr' => $ldap_userattr, 'username' => $username, 'errno' => ldap_errno($connect), 'error' => ldap_error($connect)]); + DI::logger()->notice('LDAP user not found.', ['searchdn' => $ldap_searchdn, 'userattr' => $ldap_userattr, 'username' => $username, 'errno' => ldap_errno($connect), 'error' => ldap_error($connect)]); return false; } $id = @ldap_first_entry($connect, $res); if (!$id) { - Logger::notice('Could not retrieve first LDAP entry.', ['searchdn' => $ldap_searchdn, 'userattr' => $ldap_userattr, 'username' => $username, 'errno' => ldap_errno($connect), 'error' => ldap_error($connect)]); + DI::logger()->notice('Could not retrieve first LDAP entry.', ['searchdn' => $ldap_searchdn, 'userattr' => $ldap_userattr, 'username' => $username, 'errno' => ldap_errno($connect), 'error' => ldap_error($connect)]); return false; } $dn = @ldap_get_dn($connect, $id); if (!@ldap_bind($connect, $dn, $password)) { - Logger::notice('Could not authenticate LDAP user with provided password', ['errno' => ldap_errno($connect), 'error' => ldap_error($connect)]); + DI::logger()->notice('Could not authenticate LDAP user with provided password', ['errno' => ldap_errno($connect), 'error' => ldap_error($connect)]); return false; } if (strlen($ldap_group) && @ldap_compare($connect, $ldap_group, 'member', $dn) !== true) { $errno = @ldap_errno($connect); if ($errno === 32) { - Logger::notice('LDAP Access Control Group does not exist', ['errno' => $errno, 'error' => ldap_error($connect)]); + DI::logger()->notice('LDAP Access Control Group does not exist', ['errno' => $errno, 'error' => ldap_error($connect)]); } elseif ($errno === 16) { - Logger::notice('LDAP membership attribute does not exist in access control group', ['errno' => $errno, 'error' => ldap_error($connect)]); + DI::logger()->notice('LDAP membership attribute does not exist in access control group', ['errno' => $errno, 'error' => ldap_error($connect)]); } else { - Logger::notice('LDAP user isn\'t part of the authorized group', ['dn' => $dn]); + DI::logger()->notice('LDAP user isn\'t part of the authorized group', ['dn' => $dn]); } @ldap_close($connect); @@ -141,7 +139,7 @@ function ldapauth_authenticate($username, $password) $authentication = User::getAuthenticationInfo($username); return User::getById($authentication['uid']); } catch (Exception $e) { - Logger::notice('LDAP authentication error: ' . $e->getMessage()); + DI::logger()->notice('LDAP authentication error: ' . $e->getMessage()); return false; } } @@ -149,7 +147,7 @@ function ldapauth_authenticate($username, $password) function ldap_createaccount($username, $password, $email, $name) { if (!strlen($email) || !strlen($name)) { - Logger::notice('Could not create local user from LDAP data, no email or nickname provided'); + DI::logger()->notice('Could not create local user from LDAP data, no email or nickname provided'); return false; } @@ -161,10 +159,10 @@ function ldap_createaccount($username, $password, $email, $name) 'password' => $password, 'verified' => 1 ]); - Logger::info('Local user created from LDAP data', ['username' => $username, 'name' => $name]); + DI::logger()->info('Local user created from LDAP data', ['username' => $username, 'name' => $name]); return $user; } catch (Exception $ex) { - Logger::error('Could not create local user from LDAP data', ['username' => $username, 'exception' => $ex->getMessage()]); + DI::logger()->error('Could not create local user from LDAP data', ['username' => $username, 'exception' => $ex->getMessage()]); } return false; diff --git a/leistungsschutzrecht/leistungsschutzrecht.php b/leistungsschutzrecht/leistungsschutzrecht.php index f6c65399..891cb6ca 100644 --- a/leistungsschutzrecht/leistungsschutzrecht.php +++ b/leistungsschutzrecht/leistungsschutzrecht.php @@ -6,9 +6,7 @@ * Author: Michael Vogel */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\DI; function leistungsschutzrecht_install() @@ -149,7 +147,7 @@ function leistungsschutzrecht_is_member_site(string $url): bool $cleanedurlpart = explode('%', $urldata['host']); $hostname = explode('.', $cleanedurlpart[0]); - if (empty($hostname)) { + if ($hostname === false || $hostname === '') { return false; } @@ -169,7 +167,7 @@ function leistungsschutzrecht_cron($b) if ($last) { $next = $last + 86400; if ($next > time()) { - Logger::notice('poll intervall not reached'); + DI::logger()->notice('poll intervall not reached'); return; } } diff --git a/libertree/lang/C/messages.po b/libertree/lang/C/messages.po index 6feeef8d..3162b6a7 100644 --- a/libertree/lang/C/messages.po +++ b/libertree/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2023-06-03 15:49-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,22 +21,22 @@ msgstr "" msgid "Post to libertree" msgstr "" -#: libertree.php:60 +#: libertree.php:59 msgid "Enable Libertree Post Addon" msgstr "" -#: libertree.php:61 +#: libertree.php:60 msgid "Libertree site URL" msgstr "" -#: libertree.php:62 +#: libertree.php:61 msgid "Libertree API token" msgstr "" -#: libertree.php:63 +#: libertree.php:62 msgid "Post to Libertree by default" msgstr "" -#: libertree.php:68 +#: libertree.php:67 msgid "Libertree Export" msgstr "" diff --git a/libertree/lang/cs/messages.po b/libertree/lang/cs/messages.po index b97b17ed..649fef00 100644 --- a/libertree/lang/cs/messages.po +++ b/libertree/lang/cs/messages.po @@ -4,45 +4,42 @@ # # # Translators: -# Michal Šupler , 2014-2015 +# Aditoo, 2018 +# michal_s , 2014-2015 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-02-11 19:39+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 09:44+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: libertree.php:36 +#: libertree.php:39 msgid "Post to libertree" msgstr "Poslat na libertree" -#: libertree.php:67 -msgid "libertree Post Settings" -msgstr "libertree nastavení příspěvků" - -#: libertree.php:69 +#: libertree.php:60 msgid "Enable Libertree Post Addon" -msgstr "Povolit Libertree Post rozšíření" +msgstr "Povolit doplněk Libertree Post" -#: libertree.php:74 -msgid "Libertree API token" -msgstr "Libertree API token" - -#: libertree.php:79 +#: libertree.php:61 msgid "Libertree site URL" msgstr "URL adresa Libertree " -#: libertree.php:84 -msgid "Post to Libertree by default" -msgstr "Defaultně poslat na Libertree" +#: libertree.php:62 +msgid "Libertree API token" +msgstr "Libertree API token" -#: libertree.php:90 -msgid "Submit" -msgstr "Odeslat" +#: libertree.php:63 +msgid "Post to Libertree by default" +msgstr "Ve výchozím stavu posílat na Libertree" + +#: libertree.php:68 +msgid "Libertree Export" +msgstr "" diff --git a/libertree/lang/cs/strings.php b/libertree/lang/cs/strings.php index 2bd6ed4d..49a3dd54 100644 --- a/libertree/lang/cs/strings.php +++ b/libertree/lang/cs/strings.php @@ -3,12 +3,10 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} $a->strings['Post to libertree'] = 'Poslat na libertree'; -$a->strings['libertree Post Settings'] = 'libertree nastavení příspěvků'; -$a->strings['Enable Libertree Post Addon'] = 'Povolit Libertree Post rozšíření'; -$a->strings['Libertree API token'] = 'Libertree API token'; +$a->strings['Enable Libertree Post Addon'] = 'Povolit doplněk Libertree Post'; $a->strings['Libertree site URL'] = 'URL adresa Libertree '; -$a->strings['Post to Libertree by default'] = 'Defaultně poslat na Libertree'; -$a->strings['Submit'] = 'Odeslat'; +$a->strings['Libertree API token'] = 'Libertree API token'; +$a->strings['Post to Libertree by default'] = 'Ve výchozím stavu posílat na Libertree'; diff --git a/libertree/lang/de/messages.po b/libertree/lang/de/messages.po index ae86cb53..434b64ab 100644 --- a/libertree/lang/de/messages.po +++ b/libertree/lang/de/messages.po @@ -13,9 +13,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2022-01-22 17:34+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 09:44+0000\n" +"Last-Translator: Tobias Diekershoff , 2018,2021-2022\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/libertree/lang/it/messages.po b/libertree/lang/it/messages.po index 7c3bc1ec..cc890cc5 100644 --- a/libertree/lang/it/messages.po +++ b/libertree/lang/it/messages.po @@ -5,45 +5,41 @@ # # Translators: # fabrixxm , 2014-2015,2018 -# Sylke Vicious , 2021 +# Sylke Vicious , 2021,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 12:47+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2023-06-03 15:49-0400\n" +"PO-Revision-Date: 2014-06-23 09:44+0000\n" +"Last-Translator: Sylke Vicious , 2021,2023\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: libertree.php:37 +#: libertree.php:39 msgid "Post to libertree" msgstr "Invia a Libertree" -#: libertree.php:71 libertree.php:75 -msgid "libertree Export" -msgstr "Esporta libertree" - -#: libertree.php:79 +#: libertree.php:59 msgid "Enable Libertree Post Addon" msgstr "Abilita il componente aggiuntivo di invio a Libertree" -#: libertree.php:84 -msgid "Libertree API token" -msgstr "Token API Libertree" - -#: libertree.php:89 +#: libertree.php:60 msgid "Libertree site URL" msgstr "Indirizzo sito Libertree" -#: libertree.php:94 +#: libertree.php:61 +msgid "Libertree API token" +msgstr "Token API Libertree" + +#: libertree.php:62 msgid "Post to Libertree by default" msgstr "Invia sempre a Libertree" -#: libertree.php:100 -msgid "Save Settings" -msgstr "Salva Impostazioni" +#: libertree.php:67 +msgid "Libertree Export" +msgstr "Esporta Libertree" diff --git a/libertree/lang/it/strings.php b/libertree/lang/it/strings.php index 02d26542..8abcfa2d 100644 --- a/libertree/lang/it/strings.php +++ b/libertree/lang/it/strings.php @@ -3,12 +3,11 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Post to libertree'] = 'Invia a Libertree'; -$a->strings['libertree Export'] = 'Esporta libertree'; $a->strings['Enable Libertree Post Addon'] = 'Abilita il componente aggiuntivo di invio a Libertree'; -$a->strings['Libertree API token'] = 'Token API Libertree'; $a->strings['Libertree site URL'] = 'Indirizzo sito Libertree'; +$a->strings['Libertree API token'] = 'Token API Libertree'; $a->strings['Post to Libertree by default'] = 'Invia sempre a Libertree'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Libertree Export'] = 'Esporta Libertree'; diff --git a/libertree/libertree.php b/libertree/libertree.php index 0a909f35..1489a029 100644 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -6,13 +6,12 @@ * Author: Tony Baldwin */ -use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Model\Item; use Friendica\Model\Post; function libertree_install() @@ -74,13 +73,11 @@ function libertree_settings(array &$data) function libertree_settings_post(array &$b) { if (!empty($_POST['libertree-submit'])) { - DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','post',intval($_POST['libertree'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','post_by_default',intval($_POST['libertree_bydefault'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','libertree_api_token',trim($_POST['libertree_api_token'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','libertree_url',trim($_POST['libertree_url'])); - + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'libertree', 'post', intval($_POST['libertree'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'libertree', 'post_by_default', intval($_POST['libertree_bydefault'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'libertree', 'libertree_api_token', trim($_POST['libertree_api_token'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'libertree', 'libertree_url', trim($_POST['libertree_url'])); } - } function libertree_hook_fork(array &$b) @@ -91,8 +88,10 @@ function libertree_hook_fork(array &$b) $post = $b['data']; - if ($post['deleted'] || $post['private'] || ($post['created'] !== $post['edited']) || - !strstr($post['postopts'], 'libertree') || ($post['parent'] != $post['id'])) { + if ( + $post['deleted'] || ($post['private'] == Item::PRIVATE) || ($post['created'] !== $post['edited']) || + !strstr($post['postopts'], 'libertree') || ($post['gravity'] != Item::GRAVITY_PARENT) + ) { $b['execute'] = false; return; } @@ -100,26 +99,20 @@ function libertree_hook_fork(array &$b) function libertree_post_local(array &$b) { - - // This can probably be changed to allow editing by pointing to a different API endpoint - - if ($b['edit']) { - return; - } - if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } - if ($b['private'] || $b['parent']) { + // This can probably be changed to allow editing by pointing to a different API endpoint + if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) { return; } - $ltree_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'libertree','post')); + $ltree_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'libertree', 'post')); $ltree_enable = (($ltree_post && !empty($_REQUEST['libertree_enable'])) ? intval($_REQUEST['libertree_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'libertree','post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'libertree', 'post_by_default'))) { $ltree_enable = 1; } @@ -136,13 +129,13 @@ function libertree_post_local(array &$b) function libertree_send(array &$b) { - Logger::notice('libertree_send: invoked'); + DI::logger()->notice('libertree_send: invoked'); - if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) { + if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) { return; } - if (! strstr($b['postopts'],'libertree')) { + if (! strstr($b['postopts'], 'libertree')) { return; } @@ -151,7 +144,7 @@ function libertree_send(array &$b) } // Dont't post if the post doesn't belong to us. - // This is a check for forum postings + // This is a check for group postings $self = DBA::selectFirst('contact', ['id'], ['uid' => $b['uid'], 'self' => true]); if ($b['contact-id'] != $self['id']) { return; @@ -159,15 +152,15 @@ function libertree_send(array &$b) $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], DI::contentItem()->addSharedPost($b)); - $ltree_api_token = DI::pConfig()->get($b['uid'],'libertree','libertree_api_token'); - $ltree_url = DI::pConfig()->get($b['uid'],'libertree','libertree_url'); + $ltree_api_token = DI::pConfig()->get($b['uid'], 'libertree', 'libertree_api_token'); + $ltree_url = DI::pConfig()->get($b['uid'], 'libertree', 'libertree_url'); $ltree_blog = "$ltree_url/api/v1/posts/create/?token=$ltree_api_token"; - $ltree_source = DI::baseUrl()->getHostname(); + $ltree_source = DI::baseUrl()->getHost(); if ($b['app'] != "") - $ltree_source .= " (".$b['app'].")"; + $ltree_source .= " (" . $b['app'] . ")"; - if($ltree_url && $ltree_api_token && $ltree_blog && $ltree_source) { + if ($ltree_url && $ltree_api_token && $ltree_blog && $ltree_source) { $title = $b['title']; $body = $b['body']; // Insert a newline before and after a quote @@ -177,7 +170,7 @@ function libertree_send(array &$b) // Removal of tags and mentions // #-tags $body = preg_replace('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', '#$2', $body); - // @-mentions + // @-mentions $body = preg_replace('/@\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', '@$2', $body); // remove multiple newlines @@ -198,10 +191,10 @@ function libertree_send(array &$b) $params = [ 'text' => $body, 'source' => $ltree_source - // 'token' => $ltree_api_token + // 'token' => $ltree_api_token ]; - $result = DI::httpClient()->post($ltree_blog, $params)->getBody(); - Logger::notice('libertree: ' . $result); + $result = DI::httpClient()->post($ltree_blog, $params)->getBodyString(); + DI::logger()->notice('libertree: ' . $result); } } diff --git a/libravatar/Services/Libravatar.php b/libravatar/Services/Libravatar.php index 18aa5c90..8b3dd493 100644 --- a/libravatar/Services/Libravatar.php +++ b/libravatar/Services/Libravatar.php @@ -217,7 +217,7 @@ class Services_Libravatar * * @param array $options Array of options for getUrl() * - * @return void + * @return array * @throws Exception When an invalid option is used */ protected function checkOptionsArray($options) @@ -361,7 +361,7 @@ class Services_Libravatar protected function domainGet($identifier) { if ($identifier === null) { - return null; + return ''; } // What are we, email or openid? Split ourself up and get the @@ -401,9 +401,8 @@ class Services_Libravatar */ protected function srvGet($domain, $https = false) { - // Are we going secure? Set up a fallback too. - if (isset($https) && $https === true) { + if ($https === true) { $subdomain = '_avatars-sec._tcp.'; $fallback = 'seccdn.'; } else { @@ -426,6 +425,7 @@ class Services_Libravatar $top = $srv[0]; $sum = 0; + $pri = []; // Try to adhere to RFC2782's weighting algorithm, page 3 // "arrange all SRV RRs (that have not been ordered yet) in any order, @@ -462,6 +462,8 @@ class Services_Libravatar return $v['target']; } } + + return ''; } /** diff --git a/libravatar/lang/de/messages.po b/libravatar/lang/de/messages.po index 60575f0c..6c0d7c01 100644 --- a/libravatar/lang/de/messages.po +++ b/libravatar/lang/de/messages.po @@ -12,10 +12,10 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-08 07:16+0000\n" -"PO-Revision-Date: 2021-02-01 06:30+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 09:49+0000\n" +"Last-Translator: Tobias Diekershoff , 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/libravatar/lang/it/messages.po b/libravatar/lang/it/messages.po index 7036dc1c..931fefb8 100644 --- a/libravatar/lang/it/messages.po +++ b/libravatar/lang/it/messages.po @@ -11,14 +11,14 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-05-05 11:06+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"PO-Revision-Date: 2014-06-23 09:49+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: libravatar.php:68 msgid "generic profile image" diff --git a/libravatar/lang/it/strings.php b/libravatar/lang/it/strings.php index 08b1503b..75fa4190 100644 --- a/libravatar/lang/it/strings.php +++ b/libravatar/lang/it/strings.php @@ -3,7 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['generic profile image'] = 'immagine generica del profilo'; $a->strings['random geometric pattern'] = 'schema geometrico casuale'; diff --git a/libravatar/libravatar.php b/libravatar/libravatar.php index 54594b88..6f47bf51 100644 --- a/libravatar/libravatar.php +++ b/libravatar/libravatar.php @@ -6,10 +6,7 @@ * Author: Klaus Weidenbach */ -use Friendica\App; -use Friendica\Core\Addon; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; use Friendica\Core\Config\Util\ConfigFileManager; @@ -21,12 +18,12 @@ function libravatar_install() { Hook::register('load_config', 'addon/libravatar/libravatar.php', 'libravatar_load_config'); Hook::register('avatar_lookup', 'addon/libravatar/libravatar.php', 'libravatar_lookup'); - Logger::notice("registered libravatar in avatar_lookup hook"); + DI::logger()->notice("registered libravatar in avatar_lookup hook"); } function libravatar_load_config(ConfigFileManager $loader) { - DI::app()->getConfigCache()->load($loader->loadAddonConfig('libravatar'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('libravatar'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); } /** @@ -73,7 +70,9 @@ function libravatar_addon_admin(string &$o) 'pagan' => DI::l10n()->t('retro adventure game character'), ]; - if (Addon::isEnabled('gravatar')) { + $addonHelper = DI::addonHelper(); + + if ($addonHelper->isAddonEnabled('gravatar')) { $o = '
' .DI::l10n()->t('Information') .'

' .DI::l10n()->t('Gravatar addon is installed. Please disable the Gravatar addon.
The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.') .'



'; } diff --git a/ljpost/lang/cs/messages.po b/ljpost/lang/cs/messages.po index 74a88433..1578bf38 100644 --- a/ljpost/lang/cs/messages.po +++ b/ljpost/lang/cs/messages.po @@ -4,45 +4,42 @@ # # # Translators: -# Michal Šupler , 2014-2015 +# Aditoo, 2018 +# michal_s , 2014-2015 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-02-11 19:38+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 09:51+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: ljpost.php:39 +#: ljpost.php:43 msgid "Post to LiveJournal" -msgstr "Poslat na LiveJournal" +msgstr "Odeslat na LiveJournal" -#: ljpost.php:70 -msgid "LiveJournal Post Settings" -msgstr "Nastavení LiveJournal Post" - -#: ljpost.php:72 +#: ljpost.php:63 msgid "Enable LiveJournal Post Addon" -msgstr "Povolit LiveJournal Post addon" +msgstr "Povolit doplněk LiveJournal Post" -#: ljpost.php:77 +#: ljpost.php:64 msgid "LiveJournal username" msgstr "LiveJournal uživatelské jméno" -#: ljpost.php:82 +#: ljpost.php:65 msgid "LiveJournal password" msgstr "LiveJournal heslo" -#: ljpost.php:87 +#: ljpost.php:66 msgid "Post to LiveJournal by default" msgstr "Defaultně umístit na LiveJournal" -#: ljpost.php:93 -msgid "Submit" -msgstr "Odeslat" +#: ljpost.php:71 +msgid "LiveJournal Export" +msgstr "" diff --git a/ljpost/lang/cs/strings.php b/ljpost/lang/cs/strings.php index 76721b77..2430efbd 100644 --- a/ljpost/lang/cs/strings.php +++ b/ljpost/lang/cs/strings.php @@ -3,12 +3,10 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} -$a->strings['Post to LiveJournal'] = 'Poslat na LiveJournal'; -$a->strings['LiveJournal Post Settings'] = 'Nastavení LiveJournal Post'; -$a->strings['Enable LiveJournal Post Addon'] = 'Povolit LiveJournal Post addon'; +$a->strings['Post to LiveJournal'] = 'Odeslat na LiveJournal'; +$a->strings['Enable LiveJournal Post Addon'] = 'Povolit doplněk LiveJournal Post'; $a->strings['LiveJournal username'] = 'LiveJournal uživatelské jméno'; $a->strings['LiveJournal password'] = 'LiveJournal heslo'; $a->strings['Post to LiveJournal by default'] = 'Defaultně umístit na LiveJournal'; -$a->strings['Submit'] = 'Odeslat'; diff --git a/ljpost/lang/de/messages.po b/ljpost/lang/de/messages.po index 13d7d6c7..7a41438f 100644 --- a/ljpost/lang/de/messages.po +++ b/ljpost/lang/de/messages.po @@ -6,16 +6,16 @@ # Translators: # Andreas H., 2014 # Tobias Diekershoff , 2014 -# Tobias Diekershoff , 2018,2021 +# Tobias Diekershoff , 2018,2021-2022 # Ulf Rompe , 2019 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2021-12-22 17:23+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 09:51+0000\n" +"Last-Translator: Tobias Diekershoff , 2018,2021-2022\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -44,4 +44,4 @@ msgstr "Standardmäßig bei LiveJournal veröffentlichen" #: ljpost.php:71 msgid "LiveJournal Export" -msgstr "" +msgstr "LiveJournal Export" diff --git a/ljpost/lang/de/strings.php b/ljpost/lang/de/strings.php index 99641213..88c98dd0 100644 --- a/ljpost/lang/de/strings.php +++ b/ljpost/lang/de/strings.php @@ -10,3 +10,4 @@ $a->strings['Enable LiveJournal Post Addon'] = 'LiveJournal-Post-Addon aktiviere $a->strings['LiveJournal username'] = 'LiveJournal-Benutzername'; $a->strings['LiveJournal password'] = 'LiveJournal-Passwort'; $a->strings['Post to LiveJournal by default'] = 'Standardmäßig bei LiveJournal veröffentlichen'; +$a->strings['LiveJournal Export'] = 'LiveJournal Export'; diff --git a/ljpost/lang/it/messages.po b/ljpost/lang/it/messages.po index c7a8c3cb..f24ca580 100644 --- a/ljpost/lang/it/messages.po +++ b/ljpost/lang/it/messages.po @@ -5,45 +5,41 @@ # # Translators: # fabrixxm , 2014-2015,2018 -# Sylke Vicious , 2021 +# Sylke Vicious , 2021,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 12:57+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 09:51+0000\n" +"Last-Translator: Sylke Vicious , 2021,2023\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: ljpost.php:39 +#: ljpost.php:43 msgid "Post to LiveJournal" msgstr "Invia a LiveJournal" -#: ljpost.php:73 -msgid "LiveJournal Post Settings" -msgstr "Impostazioni invio a LiveJournal" - -#: ljpost.php:75 +#: ljpost.php:63 msgid "Enable LiveJournal Post Addon" msgstr "Abilita il componente aggiuntivo di invio a LiveJournal" -#: ljpost.php:80 +#: ljpost.php:64 msgid "LiveJournal username" msgstr "Nome utente LiveJournal" -#: ljpost.php:85 +#: ljpost.php:65 msgid "LiveJournal password" msgstr "Password LiveJournal" -#: ljpost.php:90 +#: ljpost.php:66 msgid "Post to LiveJournal by default" msgstr "Invia sempre a LiveJournal" -#: ljpost.php:96 -msgid "Save Settings" -msgstr "Salva Impostazioni" +#: ljpost.php:71 +msgid "LiveJournal Export" +msgstr "Esporta LiveJournal" diff --git a/ljpost/lang/it/strings.php b/ljpost/lang/it/strings.php index c52326e0..3f857ed8 100644 --- a/ljpost/lang/it/strings.php +++ b/ljpost/lang/it/strings.php @@ -3,12 +3,11 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Post to LiveJournal'] = 'Invia a LiveJournal'; -$a->strings['LiveJournal Post Settings'] = 'Impostazioni invio a LiveJournal'; $a->strings['Enable LiveJournal Post Addon'] = 'Abilita il componente aggiuntivo di invio a LiveJournal'; $a->strings['LiveJournal username'] = 'Nome utente LiveJournal'; $a->strings['LiveJournal password'] = 'Password LiveJournal'; $a->strings['Post to LiveJournal by default'] = 'Invia sempre a LiveJournal'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['LiveJournal Export'] = 'Esporta LiveJournal'; diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index f6f2b79a..fd7d1bd8 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -8,12 +8,11 @@ * Author: Cat Gray */ -use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; +use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\Tag; use Friendica\Model\User; @@ -35,7 +34,7 @@ function ljpost_jot_nets(array &$jotnets_fields) return; } - if (DI::pConfig()->get(DI::userSession()->getLocalUserId(),'ljpost','post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ @@ -57,7 +56,7 @@ function ljpost_settings(array &$data) $ij_username = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'ij_username'); $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'post_by_default'); - $t= Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/ljpost/'); + $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/ljpost/'); $html = Renderer::replaceMacros($t, [ '$enabled' => ['ljpost', DI::l10n()->t('Enable LiveJournal Post Addon'), $enabled], '$username' => ['ij_username', DI::l10n()->t('LiveJournal username'), $ij_username], @@ -86,20 +85,16 @@ function ljpost_settings_post(array &$b) function ljpost_post_local(array &$b) { - // This can probably be changed to allow editing by pointing to a different API endpoint - if ($b['edit']) { - return; - } - if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } - if ($b['private'] || $b['parent']) { + // This can probably be changed to allow editing by pointing to a different API endpoint + if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) { return; } - $lj_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'ljpost','post')); + $lj_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'post')); $lj_enable = (($lj_post && !empty($_REQUEST['ljpost_enable'])) ? intval($_REQUEST['ljpost_enable']) : 0); if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'post_by_default'))) { @@ -118,11 +113,11 @@ function ljpost_post_local(array &$b) function ljpost_send(array &$b) { - if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) { + if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) { return; } - if (!strstr($b['postopts'],'ljpost')) { + if (!strstr($b['postopts'], 'ljpost')) { return; } @@ -139,13 +134,13 @@ function ljpost_send(array &$b) $user = User::getById($b['uid']); $tz = $user['timezone'] ?: 'UTC'; - $lj_username = XML::escape(DI::pConfig()->get($b['uid'],'ljpost','lj_username')); - $lj_password = XML::escape(DI::pConfig()->get($b['uid'],'ljpost','lj_password')); - $lj_journal = XML::escape(DI::pConfig()->get($b['uid'],'ljpost','lj_journal')); -// if(! $lj_journal) -// $lj_journal = $lj_username; + $lj_username = XML::escape(DI::pConfig()->get($b['uid'], 'ljpost', 'lj_username')); + $lj_password = XML::escape(DI::pConfig()->get($b['uid'], 'ljpost', 'lj_password')); + $lj_journal = XML::escape(DI::pConfig()->get($b['uid'], 'ljpost', 'lj_journal')); + // if(! $lj_journal) + // $lj_journal = $lj_username; - $lj_blog = XML::escape(DI::pConfig()->get($b['uid'],'ljpost','lj_blog')); + $lj_blog = XML::escape(DI::pConfig()->get($b['uid'], 'ljpost', 'lj_blog')); if (!strlen($lj_blog)) { $lj_blog = XML::escape('http://www.livejournal.com/interface/xmlrpc'); } @@ -157,11 +152,11 @@ function ljpost_send(array &$b) $tags = Tag::getCSVByURIId($b['uri-id'], [Tag::HASHTAG]); $date = DateTimeFormat::convert($b['created'], $tz); - $year = intval(substr($date,0,4)); - $mon = intval(substr($date,5,2)); - $day = intval(substr($date,8,2)); - $hour = intval(substr($date,11,2)); - $min = intval(substr($date,14,2)); + $year = intval(substr($date, 0, 4)); + $mon = intval(substr($date, 5, 2)); + $day = intval(substr($date, 8, 2)); + $hour = intval(substr($date, 11, 2)); + $min = intval(substr($date, 14, 2)); $xml = <<< EOT @@ -204,12 +199,14 @@ function ljpost_send(array &$b) EOT; - Logger::debug('ljpost: data: ' . $xml); + DI::logger()->debug('ljpost: data: ' . $xml); + + $x = ''; if ($lj_blog !== 'test') { - $x = DI::httpClient()->post($lj_blog, $xml, ['Content-Type' => 'text/xml'])->getBody(); + $x = DI::httpClient()->post($lj_blog, $xml, ['Content-Type' => 'text/xml'])->getBodyString(); } - Logger::info('posted to livejournal: ' . ($x) ? $x : ''); + DI::logger()->info('posted to livejournal: ' . $x); } } diff --git a/mailstream/lang/C/messages.po b/mailstream/lang/C/messages.po index 5115d8cb..666181b8 100644 --- a/mailstream/lang/C/messages.po +++ b/mailstream/lang/C/messages.po @@ -29,68 +29,72 @@ msgstr "" msgid "Save Settings" msgstr "" -#: mailstream.php:301 +#: mailstream.php:311 msgid "Re:" msgstr "" -#: mailstream.php:314 mailstream.php:317 +#: mailstream.php:324 mailstream.php:327 msgid "Friendica post" msgstr "" -#: mailstream.php:320 +#: mailstream.php:330 msgid "Diaspora post" msgstr "" -#: mailstream.php:330 +#: mailstream.php:340 msgid "Feed item" msgstr "" -#: mailstream.php:333 +#: mailstream.php:343 msgid "Email" msgstr "" -#: mailstream.php:335 +#: mailstream.php:345 msgid "Friendica Item" msgstr "" -#: mailstream.php:404 +#: mailstream.php:419 msgid "Upstream" msgstr "" -#: mailstream.php:405 +#: mailstream.php:420 +msgid "URI" +msgstr "" + +#: mailstream.php:421 msgid "Local" msgstr "" -#: mailstream.php:481 +#: mailstream.php:499 msgid "Enabled" msgstr "" -#: mailstream.php:486 +#: mailstream.php:504 msgid "Email Address" msgstr "" -#: mailstream.php:488 +#: mailstream.php:506 msgid "Leave blank to use your account email address" msgstr "" -#: mailstream.php:492 +#: mailstream.php:510 msgid "Exclude Likes" msgstr "" -#: mailstream.php:494 +#: mailstream.php:512 msgid "Check this to omit mailing \"Like\" notifications" msgstr "" -#: mailstream.php:498 +#: mailstream.php:516 msgid "Attach Images" msgstr "" -#: mailstream.php:500 +#: mailstream.php:518 msgid "" "Download images in posts and attach them to the email. Useful for reading " "email while offline." msgstr "" -#: mailstream.php:507 +#: mailstream.php:525 msgid "Mail Stream Settings" msgstr "" diff --git a/mailstream/lang/de/messages.po b/mailstream/lang/de/messages.po index 236e7d0e..cd55d952 100644 --- a/mailstream/lang/de/messages.po +++ b/mailstream/lang/de/messages.po @@ -5,16 +5,18 @@ # # Translators: # Andreas H., 2014 +# foss , 2022 +# Raroun, 2023 # Tobias Diekershoff , 2018 # Ulf Rompe , 2019 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-11 19:13+0100\n" -"PO-Revision-Date: 2019-02-18 15:05+0000\n" -"Last-Translator: Ulf Rompe \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 09:54+0000\n" +"Last-Translator: Raroun, 2023\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -29,72 +31,76 @@ msgstr "Absender" msgid "Email address that stream items will appear to be from." msgstr "E-Mail-Adresse, die in hochgeladenen Artikeln erscheint." -#: mailstream.php:82 mailstream.php:380 +#: mailstream.php:82 msgid "Save Settings" msgstr "Einstellungen speichern" -#: mailstream.php:223 +#: mailstream.php:311 msgid "Re:" msgstr "Re:" -#: mailstream.php:231 +#: mailstream.php:324 mailstream.php:327 msgid "Friendica post" msgstr "Friendica-Veröffentlichung" -#: mailstream.php:234 +#: mailstream.php:330 msgid "Diaspora post" msgstr "Diaspora-Veröffentlichung" -#: mailstream.php:244 +#: mailstream.php:340 msgid "Feed item" msgstr "Artikel-Feed" -#: mailstream.php:247 +#: mailstream.php:343 msgid "Email" msgstr "E-Mail" -#: mailstream.php:249 +#: mailstream.php:345 msgid "Friendica Item" msgstr "Friendica-Artikel" -#: mailstream.php:293 +#: mailstream.php:419 msgid "Upstream" msgstr "Upstream" -#: mailstream.php:294 +#: mailstream.php:420 +msgid "URI" +msgstr "URI" + +#: mailstream.php:421 msgid "Local" msgstr "Lokal" -#: mailstream.php:362 +#: mailstream.php:499 msgid "Enabled" -msgstr "eingeschaltet" +msgstr "Aktiv" -#: mailstream.php:366 +#: mailstream.php:504 msgid "Email Address" msgstr "E-Mail-Adresse" -#: mailstream.php:368 +#: mailstream.php:506 msgid "Leave blank to use your account email address" msgstr "Leer lassen für deine Konto-E-Mail-Addresse" -#: mailstream.php:371 +#: mailstream.php:510 msgid "Exclude Likes" msgstr "Likes ignorieren" -#: mailstream.php:373 +#: mailstream.php:512 msgid "Check this to omit mailing \"Like\" notifications" msgstr "Diese Option verhindert das Versenden von \"Like\"-Benachrichtigungen per E-Mail." -#: mailstream.php:376 +#: mailstream.php:516 msgid "Attach Images" msgstr "Bilder anhängen" -#: mailstream.php:378 +#: mailstream.php:518 msgid "" "Download images in posts and attach them to the email. Useful for reading " "email while offline." msgstr "Sollen Bilder, die im Beitrag eingebettet sind, als Dateianhang in den E-Mails verschickt werden?" -#: mailstream.php:379 +#: mailstream.php:525 msgid "Mail Stream Settings" msgstr "Mail-Nachrichten-Einstellungen" diff --git a/mailstream/lang/de/strings.php b/mailstream/lang/de/strings.php index 80f9a7a2..e107b7d0 100644 --- a/mailstream/lang/de/strings.php +++ b/mailstream/lang/de/strings.php @@ -15,8 +15,9 @@ $a->strings['Feed item'] = 'Artikel-Feed'; $a->strings['Email'] = 'E-Mail'; $a->strings['Friendica Item'] = 'Friendica-Artikel'; $a->strings['Upstream'] = 'Upstream'; +$a->strings['URI'] = 'URI'; $a->strings['Local'] = 'Lokal'; -$a->strings['Enabled'] = 'eingeschaltet'; +$a->strings['Enabled'] = 'Aktiv'; $a->strings['Email Address'] = 'E-Mail-Adresse'; $a->strings['Leave blank to use your account email address'] = 'Leer lassen für deine Konto-E-Mail-Addresse'; $a->strings['Exclude Likes'] = 'Likes ignorieren'; diff --git a/mailstream/lang/fr/messages.po b/mailstream/lang/fr/messages.po index 488d4c08..043181c5 100644 --- a/mailstream/lang/fr/messages.po +++ b/mailstream/lang/fr/messages.po @@ -4,6 +4,7 @@ # # # Translators: +# Florent C., 2023 # Nicolas Derive, 2022 # ea1cd8241cb389ffb6f92bc6891eff5d_dc12308 <70dced5587d47e18d88f9298024d96f8_93383>, 2015 # StefOfficiel , 2015 @@ -13,8 +14,8 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:15-0500\n" "PO-Revision-Date: 2014-06-23 09:54+0000\n" -"Last-Translator: Nicolas Derive, 2022\n" -"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" +"Last-Translator: Florent C., 2023\n" +"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -33,68 +34,72 @@ msgstr "Adresse de courriel de laquelle les éléments du flux sembleront proven msgid "Save Settings" msgstr "Sauvegarder les paramètres" -#: mailstream.php:301 +#: mailstream.php:311 msgid "Re:" msgstr "Re :" -#: mailstream.php:314 mailstream.php:317 +#: mailstream.php:324 mailstream.php:327 msgid "Friendica post" msgstr "Message Friendica" -#: mailstream.php:320 +#: mailstream.php:330 msgid "Diaspora post" msgstr "Message Diaspora" -#: mailstream.php:330 +#: mailstream.php:340 msgid "Feed item" msgstr "Élément du flux" -#: mailstream.php:333 +#: mailstream.php:343 msgid "Email" msgstr "Courriel" -#: mailstream.php:335 +#: mailstream.php:345 msgid "Friendica Item" msgstr "Élément de Friendica" -#: mailstream.php:404 +#: mailstream.php:419 msgid "Upstream" msgstr "En amont" -#: mailstream.php:405 +#: mailstream.php:420 +msgid "URI" +msgstr "URI" + +#: mailstream.php:421 msgid "Local" msgstr "Local" -#: mailstream.php:481 +#: mailstream.php:499 msgid "Enabled" msgstr "Activer" -#: mailstream.php:486 +#: mailstream.php:504 msgid "Email Address" msgstr "Adresse de courriel" -#: mailstream.php:488 +#: mailstream.php:506 msgid "Leave blank to use your account email address" msgstr "Laissez vide pour utiliser l'adresse de courriel de votre compte" -#: mailstream.php:492 +#: mailstream.php:510 msgid "Exclude Likes" msgstr "Exclure les \"j'aime\"" -#: mailstream.php:494 +#: mailstream.php:512 msgid "Check this to omit mailing \"Like\" notifications" msgstr "Cochez ceci pour éviter d'envoyer les notifications des \"J'aime\"" -#: mailstream.php:498 +#: mailstream.php:516 msgid "Attach Images" msgstr "Attacher les images" -#: mailstream.php:500 +#: mailstream.php:518 msgid "" "Download images in posts and attach them to the email. Useful for reading " "email while offline." msgstr "Télécharger les images des messages et les attacher au courriel. Utile pour les les courriels hors-ligne." -#: mailstream.php:507 +#: mailstream.php:525 msgid "Mail Stream Settings" msgstr "Paramètres de Mail Stream" diff --git a/mailstream/lang/fr/strings.php b/mailstream/lang/fr/strings.php index bfaf4389..a21d80b8 100644 --- a/mailstream/lang/fr/strings.php +++ b/mailstream/lang/fr/strings.php @@ -15,6 +15,7 @@ $a->strings['Feed item'] = 'Élément du flux'; $a->strings['Email'] = 'Courriel'; $a->strings['Friendica Item'] = 'Élément de Friendica'; $a->strings['Upstream'] = 'En amont'; +$a->strings['URI'] = 'URI'; $a->strings['Local'] = 'Local'; $a->strings['Enabled'] = 'Activer'; $a->strings['Email Address'] = 'Adresse de courriel'; diff --git a/mailstream/lang/hu/messages.po b/mailstream/lang/hu/messages.po index 3302564d..66d09299 100644 --- a/mailstream/lang/hu/messages.po +++ b/mailstream/lang/hu/messages.po @@ -4,15 +4,15 @@ # # # Translators: -# Balázs Úr, 2020-2021 +# Balázs Úr, 2020-2021,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:15-0500\n" "PO-Revision-Date: 2014-06-23 09:54+0000\n" -"Last-Translator: Balázs Úr, 2020-2021\n" -"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n" +"Last-Translator: Balázs Úr, 2020-2021,2023\n" +"Language-Team: Hungarian (http://app.transifex.com/Friendica/friendica/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -31,68 +31,72 @@ msgstr "E-mail-cím, ahonnan úgy tűnik, hogy a folyam elemei származnak." msgid "Save Settings" msgstr "Beállítások mentése" -#: mailstream.php:301 +#: mailstream.php:311 msgid "Re:" msgstr "Vá:" -#: mailstream.php:314 mailstream.php:317 +#: mailstream.php:324 mailstream.php:327 msgid "Friendica post" msgstr "Friendica-bejegyzés" -#: mailstream.php:320 +#: mailstream.php:330 msgid "Diaspora post" msgstr "Diaspora-bejegyzés" -#: mailstream.php:330 +#: mailstream.php:340 msgid "Feed item" msgstr "Hírforráselem" -#: mailstream.php:333 +#: mailstream.php:343 msgid "Email" msgstr "E-mail" -#: mailstream.php:335 +#: mailstream.php:345 msgid "Friendica Item" msgstr "Friendica-elem" -#: mailstream.php:404 +#: mailstream.php:419 msgid "Upstream" msgstr "Távoli" -#: mailstream.php:405 +#: mailstream.php:420 +msgid "URI" +msgstr "URI" + +#: mailstream.php:421 msgid "Local" msgstr "Helyi" -#: mailstream.php:481 +#: mailstream.php:499 msgid "Enabled" msgstr "Engedélyezve" -#: mailstream.php:486 +#: mailstream.php:504 msgid "Email Address" msgstr "E-mail-cím" -#: mailstream.php:488 +#: mailstream.php:506 msgid "Leave blank to use your account email address" msgstr "Hagyja üresen a fiókja e-mail-címének használatához" -#: mailstream.php:492 +#: mailstream.php:510 msgid "Exclude Likes" msgstr "Kedvelések kizárása" -#: mailstream.php:494 +#: mailstream.php:512 msgid "Check this to omit mailing \"Like\" notifications" msgstr "Jelölje be ezt a „Tetszik” értesítések elküldésének kihagyásához" -#: mailstream.php:498 +#: mailstream.php:516 msgid "Attach Images" msgstr "Képek csatolása" -#: mailstream.php:500 +#: mailstream.php:518 msgid "" "Download images in posts and attach them to the email. Useful for reading " "email while offline." msgstr "Képek letöltése a bejegyzésekből és csatolás az e-mailhez. Hasznos az e-mailek kapcsolat nélküli olvasásakor." -#: mailstream.php:507 +#: mailstream.php:525 msgid "Mail Stream Settings" msgstr "Levelezőfolyam beállításai" diff --git a/mailstream/lang/hu/strings.php b/mailstream/lang/hu/strings.php index 5a7383bd..5b1e5a51 100644 --- a/mailstream/lang/hu/strings.php +++ b/mailstream/lang/hu/strings.php @@ -15,6 +15,7 @@ $a->strings['Feed item'] = 'Hírforráselem'; $a->strings['Email'] = 'E-mail'; $a->strings['Friendica Item'] = 'Friendica-elem'; $a->strings['Upstream'] = 'Távoli'; +$a->strings['URI'] = 'URI'; $a->strings['Local'] = 'Helyi'; $a->strings['Enabled'] = 'Engedélyezve'; $a->strings['Email Address'] = 'E-mail-cím'; diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index bf4c9906..98654831 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -6,22 +6,19 @@ * Author: Matthew Exon */ -use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; -use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\User; use Friendica\Network\HTTPClient\Client\HttpClientAccept; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Protocol\Activity; -use Friendica\Util\DateTimeFormat; /** * Sets up the addon hooks and the database table @@ -32,29 +29,9 @@ function mailstream_install() Hook::register('addon_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_addon_settings_post'); Hook::register('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); Hook::register('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); - Hook::register('cron', 'addon/mailstream/mailstream.php', 'mailstream_cron'); Hook::register('mailstream_send_hook', 'addon/mailstream/mailstream.php', 'mailstream_send_hook'); - Logger::info("mailstream: installed"); -} - -/** - * Enforces that mailstream_install has set up the current version - */ -function mailstream_check_version() -{ - if (!is_null(DI::config()->get('mailstream', 'dbversion'))) { - DI::config()->delete('mailstream', 'dbversion'); - Logger::info("mailstream_check_version: old version detected, reinstalling"); - mailstream_install(); - Hook::loadHooks(); - Hook::add( - 'mailstream_convert_table_entries', - 'addon/mailstream/mailstream.php', - 'mailstream_convert_table_entries' - ); - Hook::fork(Worker::PRIORITY_LOW, 'mailstream_convert_table_entries'); - } + DI::logger()->info("installed mailstream"); } /** @@ -73,10 +50,12 @@ function mailstream_addon_admin(string &$o) { $frommail = DI::config()->get('mailstream', 'frommail'); $template = Renderer::getMarkupTemplate('admin.tpl', 'addon/mailstream/'); - $config = ['frommail', + $config = [ + 'frommail', DI::l10n()->t('From Address'), $frommail, - DI::l10n()->t('Email address that stream items will appear to be from.')]; + DI::l10n()->t('Email address that stream items will appear to be from.') + ]; $o .= Renderer::replaceMacros($template, [ '$frommail' => $config, '$submit' => DI::l10n()->t('Save Settings') @@ -103,10 +82,10 @@ function mailstream_addon_admin_post() */ function mailstream_generate_id(string $uri): string { - $host = DI::baseUrl()->getHostname(); + $host = DI::baseUrl()->getHost(); $resource = hash('md5', $uri); $message_id = "<" . $resource . "@" . $host . ">"; - Logger::debug('mailstream: Generated message ID ' . $message_id . ' for URI ' . $uri); + DI::logger()->debug('generated message ID', ['id' => $message_id, 'uri' => $uri]); return $message_id; } @@ -115,20 +94,20 @@ function mailstream_send_hook(array $data) $criteria = array('uid' => $data['uid'], 'contact-id' => $data['contact-id'], 'uri' => $data['uri']); $item = Post::selectFirst([], $criteria); if (empty($item)) { - Logger::error('mailstream_send_hook could not find item'); + DI::logger()->error('could not find item'); return; } $user = User::getById($item['uid']); if (empty($user)) { - Logger::error('mailstream_send_hook could not fund user', ['uid' => $item['uid']]); + DI::logger()->error('could not find user', ['uid' => $item['uid']]); return; } if (!mailstream_send($data['message_id'], $item, $user)) { - Logger::debug('mailstream_send_hook send failed, will retry', $data); + DI::logger()->debug('send failed, will retry', $data); if (!Worker::defer()) { - Logger::error('mailstream_send_hook failed and could not defer', $data); + DI::logger()->error('failed and could not defer', $data); } } } @@ -143,31 +122,33 @@ function mailstream_send_hook(array $data) */ function mailstream_post_hook(array &$item) { - mailstream_check_version(); - - if (!DI::pConfig()->get($item['uid'], 'mailstream', 'enabled')) { - Logger::debug('mailstream: not enabled for item ' . $item['id']); + if ($item['uid'] === 0) { + DI::logger()->debug('mailstream: root user, skipping item ' . $item['id']); return; } - if (!$item['uid']) { - Logger::debug('mailstream: no uid for item ' . $item['id']); + if (!DI::pConfig()->get($item['uid'], 'mailstream', 'enabled')) { + DI::logger()->debug('mailstream: not enabled.', ['item' => $item['id'], ' uid ' => $item['uid']]); return; } if (!$item['contact-id']) { - Logger::debug('mailstream: no contact-id for item ' . $item['id']); + DI::logger()->debug('no contact-id', ['item' => $item['id']]); return; } if (!$item['uri']) { - Logger::debug('mailstream: no uri for item ' . $item['id']); + DI::logger()->debug('no uri', ['item' => $item['id']]); return; } - if (!$item['plink']) { - Logger::debug('mailstream: no plink for item ' . $item['id']); + if ($item['verb'] == Activity::ANNOUNCE) { + DI::logger()->debug('ignoring announce', ['item' => $item['id']]); return; } if (DI::pConfig()->get($item['uid'], 'mailstream', 'nolikes')) { if ($item['verb'] == Activity::LIKE) { - Logger::debug('mailstream: like item ' . $item['id']); + DI::logger()->debug('ignoring like', ['item' => $item['id']]); + return; + } + if ($item['verb'] == Activity::DISLIKE) { + DI::logger()->debug('ignoring dislike', ['item' => $item['id']]); return; } } @@ -198,7 +179,7 @@ function mailstream_post_hook(array &$item) function mailstream_do_images(array &$item, array &$attachments) { if (!DI::pConfig()->get($item['uid'], 'mailstream', 'attachimg')) { - return; + return $attachments; } $attachments = []; @@ -215,9 +196,22 @@ function mailstream_do_images(array &$item, array &$attachments) } $cookiejar = tempnam(System::getTempPath(), 'cookiejar-mailstream-'); - $curlResult = DI::httpClient()->fetchFull($url, HttpClientAccept::DEFAULT, 0, $cookiejar); + try { + $curlResult = DI::httpClient()->get($url, HttpClientAccept::DEFAULT, [HttpClientOptions::COOKIEJAR => $cookiejar]); + if (!$curlResult->isSuccess()) { + DI::logger()->debug('mailstream: fetch image url failed', [ + 'url' => $url, + 'item_id' => $item['id'], + 'return_code' => $curlResult->getReturnCode() + ]); + continue; + } + } catch (InvalidArgumentException $e) { + DI::logger()->error('exception fetching url', ['url' => $url, 'item_id' => $item['id']]); + continue; + } $attachments[$url] = [ - 'data' => $curlResult->getBody(), + 'data' => $curlResult->getBodyString(), 'guid' => hash('crc32', $url), 'filename' => basename($components['path']), 'type' => $curlResult->getContentType() @@ -254,12 +248,13 @@ function mailstream_sender(array $item): string * Converts a bbcode-encoded subject line into a plaintext version suitable for the subject line of an email * * @param string $subject bbcode-encoded subject line + * @param int $uri_id * * @return string plaintext subject line */ -function mailstream_decode_subject(string $subject): string +function mailstream_decode_subject(string $subject, int $uri_id): string { - $html = BBCode::convert($subject); + $html = BBCode::convertForUriId($uri_id, $subject); if (!$html) { return $subject; } @@ -294,7 +289,7 @@ function mailstream_decode_subject(string $subject): string function mailstream_subject(array $item): string { if ($item['title']) { - return mailstream_decode_subject($item['title']); + return mailstream_decode_subject($item['title'], $item['uri-id']); } $parent = $item['thr-parent']; // Don't look more than 100 levels deep for a subject, in case of loops @@ -307,19 +302,18 @@ function mailstream_subject(array $item): string break; } if ($parent_item['title']) { - return DI::l10n()->t('Re:') . ' ' . mailstream_decode_subject($parent_item['title']); + return DI::l10n()->t('Re:') . ' ' . mailstream_decode_subject($parent_item['title'], $item['uri-id']); } $parent = $parent_item['thr-parent']; } $contact = Contact::selectFirst([], ['id' => $item['contact-id'], 'uid' => $item['uid']]); if (!DBA::isResult($contact)) { - Logger::error( - 'mailstream_subject no contact for item', - ['id' => $item['id'], - 'plink' => $item['plink'], - 'contact id' => $item['contact-id'], - 'uid' => $item['uid']] - ); + DI::logger()->error('no contact', [ + 'item' => $item['id'], + 'plink' => $item['plink'], + 'contact id' => $item['contact-id'], + 'uid' => $item['uid'] + ]); return DI::l10n()->t("Friendica post"); } if ($contact['network'] === 'dfrn') { @@ -329,7 +323,7 @@ function mailstream_subject(array $item): string return DI::l10n()->t("Diaspora post"); } if ($contact['network'] === 'face') { - $text = mailstream_decode_subject($item['body']); + $text = mailstream_decode_subject($item['body'], $item['uri-id']); // For some reason these do show up in Facebook $text = preg_replace('/\xA0$/', '', $text); $subject = (strlen($text) > 150) ? (substr($text, 0, 140) . '...') : $text; @@ -356,21 +350,20 @@ function mailstream_subject(array $item): string function mailstream_send(string $message_id, array $item, array $user): bool { if (!is_array($item)) { - Logger::error('mailstream_send item is empty', ['message_id' => $message_id]); + DI::logger()->error('item is empty', ['message_id' => $message_id]); return false; } if (!$item['visible']) { - Logger::debug('mailstream_send item not yet visible', ['item uri' => $item['uri']]); + DI::logger()->debug('item not yet visible', ['item uri' => $item['uri']]); return false; } if (!$message_id) { - Logger::error('mailstream_send no message ID supplied', ['item uri' => $item['uri'], - 'user email' => $user['email']]); + DI::logger()->error('no message ID supplied', ['item uri' => $item['uri'], 'user email' => $user['email']]); return true; } - require_once (dirname(__file__) . '/phpmailer/class.phpmailer.php'); + require_once(dirname(__file__) . '/phpmailer/class.phpmailer.php'); $item['body'] = Post\Media::addAttachmentsToBody($item['uri-id'], $item['body']); @@ -384,7 +377,7 @@ function mailstream_send(string $message_id, array $item, array $user): bool if (!$address) { $address = $user['email']; } - $mail = new PHPmailer(); + $mail = new PHPMailer(); try { $mail->XMailer = 'Friendica Mailstream Addon'; $mail->SetFrom($frommail, mailstream_sender($item)); @@ -395,7 +388,9 @@ function mailstream_send(string $message_id, array $item, array $user): bool $mail->addCustomHeader('In-Reply-To: ' . mailstream_generate_id($item['thr-parent'])); } $mail->addCustomHeader('X-Friendica-Mailstream-URI: ' . $item['uri']); - $mail->addCustomHeader('X-Friendica-Mailstream-Plink: ' . $item['plink']); + if ($item['plink']) { + $mail->addCustomHeader('X-Friendica-Mailstream-Plink: ' . $item['plink']); + } $encoding = 'base64'; foreach ($attachments as $url => $image) { $mail->AddStringEmbeddedImage( @@ -411,22 +406,26 @@ function mailstream_send(string $message_id, array $item, array $user): bool $template = Renderer::getMarkupTemplate('mail.tpl', 'addon/mailstream/'); $mail->AltBody = BBCode::toPlaintext($item['body']); $item['body'] = BBCode::convertForUriId($item['uri-id'], $item['body'], BBCode::CONNECTORS); - $item['url'] = DI::baseUrl()->get() . '/display/' . $item['guid']; + $item['url'] = DI::baseUrl() . '/display/' . $item['guid']; $mail->Body = Renderer::replaceMacros($template, [ - '$upstream' => DI::l10n()->t('Upstream'), - '$local' => DI::l10n()->t('Local'), - '$item' => $item]); - mailstream_html_wrap($mail->Body); + '$upstream' => DI::l10n()->t('Upstream'), + '$uri' => DI::l10n()->t('URI'), + '$local' => DI::l10n()->t('Local'), + '$item' => $item + ]); + $mail->Body = mailstream_html_wrap($mail->Body); if (!$mail->Send()) { throw new Exception($mail->ErrorInfo); } - Logger::debug('mailstream_send sent message', ['message ID' => $mail->MessageID, - 'subject' => $mail->Subject, - 'address' => $address]); + DI::logger()->debug('sent message', [ + 'message ID' => $mail->MessageID, + 'subject' => $mail->Subject, + 'address' => $address + ]); } catch (phpmailerException $e) { - Logger::debug('mailstream_send PHPMailer exception sending message ' . $message_id . ': ' . $e->errorMessage()); + DI::logger()->debug('PHPMailer exception sending message', ['id' => $message_id, 'error' => $e->errorMessage()]); } catch (Exception $e) { - Logger::debug('mailstream_send exception sending message ' . $message_id . ': ' . $e->getMessage()); + DI::logger()->debug('exception sending message', ['id' => $message_id, 'error' => $e->getMessage()]); } return true; @@ -437,7 +436,8 @@ function mailstream_send(string $message_id, array $item, array $user): bool * bbcode's output suitable for transmission, we try to break things * up so that lines are about 200 characters. * - * @param string $text text to word wrap - modified in-place + * @param string $text text to word wrap + * @return string wrapped text */ function mailstream_html_wrap(string &$text) { @@ -446,30 +446,7 @@ function mailstream_html_wrap(string &$text) $lines[$i] = preg_replace('/ /', "\n", $lines[$i], 1); } $text = implode($lines); -} - -/** - * Convert v1 mailstream table entries to v2 workerqueue items - */ -function mailstream_convert_table_entries() -{ - $ms_item_ids = DBA::selectToArray('mailstream_item', [], ['message-id', 'uri', 'uid', 'contact-id'], ["`mailstream_item`.`completed` IS NULL"]); - Logger::debug('mailstream_convert_table_entries processing ' . count($ms_item_ids) . ' items'); - foreach ($ms_item_ids as $ms_item_id) { - $send_hook_data = array('uid' => $ms_item_id['uid'], - 'contact-id' => $ms_item_id['contact-id'], - 'uri' => $ms_item_id['uri'], - 'message_id' => $ms_item_id['message-id'], - 'tries' => 0); - if (!$ms_item_id['message-id'] || !strlen($ms_item_id['message-id'])) { - Logger::info('mailstream_cron: Item ' . - $ms_item_id['id'] . ' URI ' . $ms_item_id['uri'] . ' has no message-id'); - continue; - } - Logger::info('mailstream_convert_table_entries: convert item to workerqueue', $send_hook_data); - Hook::fork(Worker::PRIORITY_LOW, 'mailstream_send_hook', $send_hook_data); - } - DBA::e('DROP TABLE `mailstream_item`'); + return $text; } /** diff --git a/mailstream/phpmailer/class.phpmailer.php b/mailstream/phpmailer/class.phpmailer.php index ab7fe030..8cd05a2c 100644 --- a/mailstream/phpmailer/class.phpmailer.php +++ b/mailstream/phpmailer/class.phpmailer.php @@ -2690,10 +2690,10 @@ class PHPMailer if (!is_readable($path)) { throw new phpmailerException($this->lang('file_open') . $path, self::STOP_CONTINUE); } - $magic_quotes = get_magic_quotes_runtime(); + $magic_quotes = false; if ($magic_quotes) { if (version_compare(PHP_VERSION, '5.3.0', '<')) { - set_magic_quotes_runtime(false); + //set_magic_quotes_runtime(false); } else { //Doesn't exist in PHP 5.4, but we don't need to check because //get_magic_quotes_runtime always returns false in 5.4+ @@ -2705,7 +2705,7 @@ class PHPMailer $file_buffer = $this->encodeString($file_buffer, $encoding); if ($magic_quotes) { if (version_compare(PHP_VERSION, '5.3.0', '<')) { - set_magic_quotes_runtime($magic_quotes); + //set_magic_quotes_runtime($magic_quotes); } else { ini_set('magic_quotes_runtime', $magic_quotes); } @@ -3286,7 +3286,7 @@ class PHPMailer $result = 'localhost.localdomain'; if (!empty($this->Hostname)) { $result = $this->Hostname; - } elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER) and !empty($_SERVER['SERVER_NAME'])) { + } elseif (!empty($_SERVER['SERVER_NAME'])) { $result = $_SERVER['SERVER_NAME']; } elseif (function_exists('gethostname') && gethostname() !== false) { $result = gethostname(); diff --git a/mailstream/templates/mail.tpl b/mailstream/templates/mail.tpl index 526ca4ef..8015b45f 100644 --- a/mailstream/templates/mail.tpl +++ b/mailstream/templates/mail.tpl @@ -6,5 +6,6 @@
{{$item.body nofilter}}
{{if $item.plink}}
{{$upstream}}: {{$item.plink}}
+
{{$uri}}: {{$item.uri}}
{{$local}}: {{$item.url}}
{{/if}} diff --git a/markdown/markdown.php b/markdown/markdown.php index 236fb297..1ef6cd9a 100644 --- a/markdown/markdown.php +++ b/markdown/markdown.php @@ -5,7 +5,6 @@ * Version: 0.1 * Author: Michael Vogel */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Content\Text\Markdown; use Friendica\Core\Renderer; @@ -27,7 +26,7 @@ function markdown_addon_settings(array &$data) $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/markdown/'); $html = Renderer::replaceMacros($t, [ - '$enabled' => ['enabled', DI::l10n()->t('Enable Markdown parsing'), $enabled, DI::l10n()->t('If enabled, adds Markdown support to the Compose Post form.')], + '$enabled' => ['markdown-enabled', DI::l10n()->t('Enable Markdown parsing'), $enabled, DI::l10n()->t('If enabled, adds Markdown support to the Compose Post form.')], ]); $data = [ @@ -43,7 +42,7 @@ function markdown_addon_settings_post(array &$b) return; } - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'markdown', 'enabled', intval($_POST['enabled'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'markdown', 'enabled', intval($_POST['markdown-enabled'])); } function markdown_post_local_start(&$request) { @@ -64,6 +63,7 @@ function markdown_post_local_start(&$request) { // (right chevrons are used for quoting in Markdown) // See https://github.com/friendica/friendica/issues/10634 $text = strtr($text, ['<' => '<']); + $text = str_replace('[*]', '[li]', $text); return Markdown::toBBCode($text); }); diff --git a/mastodoncustomemojis/mastodoncustomemojis.php b/mastodoncustomemojis/mastodoncustomemojis.php index c84f1a4f..fcb8feea 100644 --- a/mastodoncustomemojis/mastodoncustomemojis.php +++ b/mastodoncustomemojis/mastodoncustomemojis.php @@ -1,5 +1,4 @@ fetchFull($api_url); + $fetchResult = DI::httpClient()->get($api_url); if ($fetchResult->isSuccess()) { - $emojis_array = json_decode($fetchResult->getBody(), true); + $emojis_array = json_decode($fetchResult->getBodyString(), true); if (is_array($emojis_array) && count($emojis_array)) { foreach ($emojis_array as $emoji) { if (!empty($emoji['shortcode']) && !empty($emoji['static_url'])) { $return['texts'][] = ':' . $emoji['shortcode'] . ':'; - $return['icons'][] = ':' . $emoji['shortcode'] . ':'; + $return['icons'][] = ':' . $emoji['shortcode'] . ':'; } } } diff --git a/mathjax/lang/cs/messages.po b/mathjax/lang/cs/messages.po index 66d201f6..ae2968be 100644 --- a/mathjax/lang/cs/messages.po +++ b/mathjax/lang/cs/messages.po @@ -4,50 +4,29 @@ # # # Translators: -# Michal Šupler , 2014-2015 +# Aditoo, 2018 +# michal_s , 2014-2015 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-02-11 19:38+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 09:55+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: mathjax.php:36 -msgid "Settings" -msgstr "Nastavení" - -#: mathjax.php:37 +#: mathjax.php:42 msgid "" "The MathJax addon renders mathematical formulae written using the LaTeX " "syntax surrounded by the usual $$ or an eqnarray block in the postings of " "your wall,network tab and private mail." -msgstr "Rozšíření MathJax vykresluje matematické vzorce zapsané s použitím syntaxe LaTeX označené obvyklými znaky $$ nebo v bloku \"eqnarray\" v příspěvcích na vaší zdi, záložce síť a soukromých zprávách." +msgstr "Doplněk MathJax vykresluje matematické vzorce zapsané s použitím syntaxe LaTeX označené obvyklými znaky $$, nebo blok \"eqnarray\" v příspěvcích na Vaší zdi, záložce Síť a soukromých zprávách." -#: mathjax.php:38 +#: mathjax.php:43 msgid "Use the MathJax renderer" -msgstr "Použít Mathjax vykreslování" - -#: mathjax.php:42 -msgid "Submit" -msgstr "Odeslat" - -#: mathjax.php:66 -msgid "Settings updated." -msgstr "Nastavení aktualizováno." - -#: mathjax.php:75 -msgid "MathJax Base URL" -msgstr "Základní MathJax adresa URL" - -#: mathjax.php:75 -msgid "" -"The URL for the javascript file that should be included to use MathJax. Can " -"be either the MathJax CDN or another installation of MathJax." -msgstr "URL adresa na javascriptový soubor, který musí být obsažen pro použití MathJax. Může to být MathJax CDN nebo or jiná instalace MathJax." +msgstr "Použít vykreslování MathJax" diff --git a/mathjax/lang/cs/strings.php b/mathjax/lang/cs/strings.php index a591bb3c..f73b931a 100644 --- a/mathjax/lang/cs/strings.php +++ b/mathjax/lang/cs/strings.php @@ -3,12 +3,7 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} -$a->strings['Settings'] = 'Nastavení'; -$a->strings['The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail.'] = 'Rozšíření MathJax vykresluje matematické vzorce zapsané s použitím syntaxe LaTeX označené obvyklými znaky $$ nebo v bloku "eqnarray" v příspěvcích na vaší zdi, záložce síť a soukromých zprávách.'; -$a->strings['Use the MathJax renderer'] = 'Použít Mathjax vykreslování'; -$a->strings['Submit'] = 'Odeslat'; -$a->strings['Settings updated.'] = 'Nastavení aktualizováno.'; -$a->strings['MathJax Base URL'] = 'Základní MathJax adresa URL'; -$a->strings['The URL for the javascript file that should be included to use MathJax. Can be either the MathJax CDN or another installation of MathJax.'] = 'URL adresa na javascriptový soubor, který musí být obsažen pro použití MathJax. Může to být MathJax CDN nebo or jiná instalace MathJax.'; +$a->strings['The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail.'] = 'Doplněk MathJax vykresluje matematické vzorce zapsané s použitím syntaxe LaTeX označené obvyklými znaky $$, nebo blok "eqnarray" v příspěvcích na Vaší zdi, záložce Síť a soukromých zprávách.'; +$a->strings['Use the MathJax renderer'] = 'Použít vykreslování MathJax'; diff --git a/mathjax/lang/de/messages.po b/mathjax/lang/de/messages.po index cbc9d2ca..e60d9676 100644 --- a/mathjax/lang/de/messages.po +++ b/mathjax/lang/de/messages.po @@ -13,9 +13,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:15-0500\n" -"PO-Revision-Date: 2021-12-22 16:24+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 09:55+0000\n" +"Last-Translator: Tobias Diekershoff , 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/mathjax/lang/it/messages.po b/mathjax/lang/it/messages.po index eef9ca86..9aa6154f 100644 --- a/mathjax/lang/it/messages.po +++ b/mathjax/lang/it/messages.po @@ -10,27 +10,23 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 12:51+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 09:55+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: mathjax.php:43 +#: mathjax.php:42 msgid "" "The MathJax addon renders mathematical formulae written using the LaTeX " "syntax surrounded by the usual $$ or an eqnarray block in the postings of " "your wall,network tab and private mail." msgstr "Il plugin \"MatJax\" renderizza formule matematiche scritta usando la sintassi LaTeX circondate dalle usuali $$ o un blocco eqnarray nei messaggi della tua bacheca, pagina Rete e messaggi privati." -#: mathjax.php:44 +#: mathjax.php:43 msgid "Use the MathJax renderer" msgstr "Usa il render MathJax" - -#: mathjax.php:45 -msgid "Save Settings" -msgstr "Salva Impostazioni" diff --git a/mathjax/lang/it/strings.php b/mathjax/lang/it/strings.php index 4ba4f721..f5580a39 100644 --- a/mathjax/lang/it/strings.php +++ b/mathjax/lang/it/strings.php @@ -3,8 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail.'] = 'Il plugin "MatJax" renderizza formule matematiche scritta usando la sintassi LaTeX circondate dalle usuali $$ o un blocco eqnarray nei messaggi della tua bacheca, pagina Rete e messaggi privati.'; $a->strings['Use the MathJax renderer'] = 'Usa il render MathJax'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; diff --git a/mathjax/mathjax.php b/mathjax/mathjax.php index d0046cf7..e96aaddf 100644 --- a/mathjax/mathjax.php +++ b/mathjax/mathjax.php @@ -8,7 +8,6 @@ * License: 3-clause BSD license */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; diff --git a/membersince/membersince.php b/membersince/membersince.php index f8128eb7..df6388c6 100644 --- a/membersince/membersince.php +++ b/membersince/membersince.php @@ -7,9 +7,9 @@ * Status: Unsupported */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; +use Friendica\Model\User; use Friendica\Util\DateTimeFormat; function membersince_install() @@ -17,9 +17,25 @@ function membersince_install() Hook::register('profile_advanced', 'addon/membersince/membersince.php', 'membersince_display'); } -function membersince_display(array &$b) +/** + * @param array|string|null $b + * @return void + */ +function membersince_display(&$b) { - if (DI::app()->getCurrentTheme() == 'frio') { + $uid = DI::userSession()->getLocalUserId(); + + if ($uid === false) { + return; + } + + $user = User::getById($uid, ['register_date']); + + if ($user === false || !array_key_exists('register_date', $user)) { + return; + } + + if (DI::appHelper()->getCurrentTheme() == 'frio') { // Works in Frio. $doc = new DOMDocument(); $doc->loadHTML(mb_convert_encoding($b, 'HTML-ENTITIES', 'UTF-8')); @@ -39,7 +55,7 @@ function membersince_display(array &$b) $label->setAttribute('class', 'col-lg-4 col-md-4 col-sm-4 col-xs-12 profile-label-name text-muted'); // The div for the register date of the profile owner. - $entry = $doc->createElement('div', DateTimeFormat::local(DI::app()->profile['register_date'])); + $entry = $doc->createElement('div', DateTimeFormat::local($user['register_date'])); $entry->setAttribute('class', 'col-lg-8 col-md-8 col-sm-8 col-xs-12 profile-entry'); $div->appendChild($hr); @@ -47,9 +63,9 @@ function membersince_display(array &$b) $div->appendChild($entry); $elm->parentNode->insertBefore($div, $elm->nextSibling); - $b = $doc->saveHTML(); + $b = (string) $doc->saveHTML(); } else { // Works in Vier. - $b = preg_replace('/<\/dl>/', "\n\n\n
\n
" . DI::l10n()->t('Member since:') . "
\n
" . DateTimeFormat::local(DI::app()->profile['register_date']) . "
\n
", $b, 1); + $b = preg_replace('/<\/dl>/', "\n\n\n
\n
" . DI::l10n()->t('Member since:') . "
\n
" . DateTimeFormat::local($user['register_date']) . "
\n
", $b, 1); } } diff --git a/monolog/README.md b/monolog/README.md new file mode 100644 index 00000000..efb7959a --- /dev/null +++ b/monolog/README.md @@ -0,0 +1,4 @@ +# Monolog Addon + +A Logging framework with lots of additions (see [Monolog](https://github.com/Seldaek/monolog/)). +There are just Friendica additions inside the src directory. diff --git a/monolog/composer.json b/monolog/composer.json index e2117166..9cf42dbe 100644 --- a/monolog/composer.json +++ b/monolog/composer.json @@ -1,23 +1,26 @@ { - "name": "friendica-addons/monolog", - "description": "Monolog can send your logs to files, sockets, inboxes, database, etc..", - "type": "friendica-addon", - "authors": [ - { - "name": "Philipp Holzer", - "email": "admin@philipp.info", - "homepage": "https://blog.philipp.info", - "role": "Developer" - } - ], - "require": { - "php": ">=7.3", - "monolog/monolog": "^2.8" - }, - "license": "3-clause BSD license", - "config": { - "optimize-autoloader": true, - "autoloader-suffix": "MonologAddon", - "preferred-install": "dist" - } + "name": "friendica-addons/monolog", + "description": "Monolog can send your logs to files, sockets, inboxes, database, etc..", + "type": "friendica-addon", + "authors": [ + { + "name": "Philipp Holzer", + "email": "admin@philipp.info", + "homepage": "https://blog.philipp.info", + "role": "Developer" + } + ], + "require": { + "php": ">=7.3", + "monolog/monolog": "^2.9" + }, + "license": "3-clause BSD license", + "config": { + "platform": { + "php": "7.4" + }, + "optimize-autoloader": true, + "autoloader-suffix": "MonologAddon", + "preferred-install": "dist" + } } diff --git a/monolog/composer.lock b/monolog/composer.lock index 3f4b225a..5d1da32f 100644 --- a/monolog/composer.lock +++ b/monolog/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d360e9eb0b5580e44579a3780be74dec", + "content-hash": "037f2db47e77c9af2960dde65ebafa8d", "packages": [ { "name": "monolog/monolog", - "version": "2.8.0", + "version": "2.9.2", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", + "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", "shasum": "" }, "require": { @@ -32,7 +32,7 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", "guzzlehttp/guzzle": "^7.4", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", @@ -102,7 +102,7 @@ "type": "tidelift" } ], - "time": "2022-07-24T11:55:47+00:00" + "time": "2023-10-27T15:25:26+00:00" }, { "name": "psr/log", @@ -162,5 +162,8 @@ "php": ">=7.3" }, "platform-dev": [], + "platform-overrides": { + "php": "7.4" + }, "plugin-api-version": "1.1.0" } diff --git a/monolog/monolog.php b/monolog/monolog.php new file mode 100644 index 00000000..f194aac4 --- /dev/null +++ b/monolog/monolog.php @@ -0,0 +1,7 @@ +. - * - */ - -namespace Friendica\Addon\monolog\src\Factory; - -use Friendica\Core\Hooks\Capabilities\IAmAStrategy; -use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections; -use Friendica\Core\Logger\Exception\LoggerException; -use Monolog as MonologModel; -use Friendica\Addon\monolog\src\Monolog\IntrospectionProcessor; -use Friendica\Core\Config\Capability\IManageConfigValues; -use Psr\Log\LoggerInterface; -use Psr\Log\LogLevel; - -class Monolog implements IAmAStrategy -{ - /** @var IManageConfigValues */ - protected $config; - /** @var string */ - protected $channel = ''; - /** @var string */ - protected $loglevel = LogLevel::NOTICE; - /** @var IHaveCallIntrospections */ - protected $introspection; - - public function __construct(IManageConfigValues $config, IHaveCallIntrospections $introspection, string $channel = '', string $loglevel = LogLevel::NOTICE) - { - $this->config = $config; - $this->channel = $channel; - $this->loglevel = $loglevel; - $this->introspection = $introspection; - } - - public function create(): LoggerInterface - { - $loggerTimeZone = new \DateTimeZone('UTC'); - - $logger = new MonologModel\Logger($this->channel); - $logger->setTimezone($loggerTimeZone); - $logger->pushProcessor(new MonologModel\Processor\PsrLogMessageProcessor()); - $logger->pushProcessor(new MonologModel\Processor\ProcessIdProcessor()); - $logger->pushProcessor(new MonologModel\Processor\UidProcessor()); - $logger->pushProcessor(new IntrospectionProcessor($this->introspection, LogLevel::DEBUG)); - - $stream = $this->config->get('system', 'logfile'); - - // just add a stream in case it's either writable or not file - if (!is_file($stream) || is_writable($stream)) { - try { - $loglevel = MonologModel\Logger::toMonologLevel($this->loglevel); - - // fallback to notice if an invalid loglevel is set - if (!is_int($loglevel)) { - $loglevel = LogLevel::NOTICE; - } - - $fileHandler = new MonologModel\Handler\StreamHandler($stream, $loglevel); - - $formatter = new MonologModel\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n"); - $fileHandler->setFormatter($formatter); - - $logger->pushHandler($fileHandler); - - return $logger; - } catch (\Throwable $e) { - throw new LoggerException('Cannot create Loger', $e); - } - } else { - throw new LoggerException(sprintf('Cannot write to file or stream %s', $stream)); - } - } -} diff --git a/monolog/src/Factory/MonologFactory.php b/monolog/src/Factory/MonologFactory.php new file mode 100644 index 00000000..e0c11e13 --- /dev/null +++ b/monolog/src/Factory/MonologFactory.php @@ -0,0 +1,72 @@ +introspection = $introspection; + $this->config = $config; + } + + /** + * Creates and returns a PSR-3 Logger instance. + * + * Calling this method multiple times with the same parameters SHOULD return the same object. + * + * @param \Psr\Log\LogLevel::* $logLevel The log level + * @param \Friendica\Core\Logger\Capability\LogChannel::* $logChannel The log channel + */ + public function createLogger(string $logLevel, string $logChannel): LoggerInterface + { + $loggerTimeZone = new \DateTimeZone('UTC'); + + $logger = new Logger($logChannel); + $logger->setTimezone($loggerTimeZone); + $logger->pushProcessor(new PsrLogMessageProcessor()); + $logger->pushProcessor(new ProcessIdProcessor()); + $logger->pushProcessor(new UidProcessor()); + $logger->pushProcessor(new IntrospectionProcessor($this->introspection, LogLevel::DEBUG)); + + $logfile = $this->config->get('system', 'logfile'); + + // just add a stream in case it's either writable or not file + if (is_writable($logfile)) { + $logLevel = Logger::toMonologLevel($logLevel); + + // fallback to notice if an invalid loglevel is set + if (!is_int($logLevel)) { + $logLevel = LogLevel::NOTICE; + } + + $fileHandler = new StreamHandler($logfile, $logLevel); + + $formatter = new LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n"); + $fileHandler->setFormatter($formatter); + + $logger->pushHandler($fileHandler); + } + + return $logger; + } +} diff --git a/monolog/src/Monolog/IntrospectionProcessor.php b/monolog/src/Monolog/IntrospectionProcessor.php index e06e9de1..2df0e21a 100644 --- a/monolog/src/Monolog/IntrospectionProcessor.php +++ b/monolog/src/Monolog/IntrospectionProcessor.php @@ -41,7 +41,7 @@ class IntrospectionProcessor implements ProcessorInterface public function __construct(Introspection $introspection, $level = Logger::DEBUG) { $this->level = Logger::toMonologLevel($level); - $introspection->addClasses(['Monolog\\', IntrospectionProcessor::class]); + $introspection->addClasses(['Monolog\\', static::class]); $this->introspection = $introspection; } diff --git a/monolog/static/addon.config.php b/monolog/static/addon.config.php deleted file mode 100644 index 155bd60d..00000000 --- a/monolog/static/addon.config.php +++ /dev/null @@ -1,35 +0,0 @@ -. - * - */ - -$ADDON = [ - 'name' => 'monolog', - 'description' => 'Monolog can send your logs to files, sockets, inboxes, database, etc..', - 'author' => [ - 'name' => 'Philipp Holzer', - 'email' => 'admin@philipp.info', - ], - 'maintainer' => [ - 'name' => 'Philipp Holzer', - 'email' => 'admin@philipp.info', - ], - 'version' => '1.0', - 'status' => 'supported', -]; diff --git a/monolog/static/dependencies.config.php b/monolog/static/dependencies.config.php index 2da375f7..f992d69c 100644 --- a/monolog/static/dependencies.config.php +++ b/monolog/static/dependencies.config.php @@ -2,7 +2,7 @@ /** * @copyright Copyright (C) 2010-2023, the Friendica project * - * @license GNU AGPL version 3 or any later version + * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -19,13 +19,9 @@ * */ -use Dice\Dice; -use Friendica\Addon\monolog\src\Factory\Monolog; - return [ - Monolog::class => [ - 'call' => [ - ['create', [], Dice::CHAIN_CALL], - ], + \Friendica\Core\Logger\Factory\LoggerFactory::class => [ + 'instanceOf' => \Friendica\Addon\monolog\src\Factory\MonologFactory::class, + 'call' => null, ], ]; diff --git a/monolog/static/hooks.config.php b/monolog/static/hooks.config.php deleted file mode 100644 index 31f58f40..00000000 --- a/monolog/static/hooks.config.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - */ - -use Friendica\Addon\monolog\src\Factory\Monolog; -use Friendica\Core\Addons\Capabilities\IManageAddons; -use Psr\Log\LoggerInterface; - -return [ - IManageAddons::ADDON_HOOK_STRATEGIES => [ - LoggerInterface::class => [ - 'monolog' => [Monolog::class, []], - ], - ], -]; diff --git a/monolog/tests/MonologTest.php b/monolog/tests/MonologTest.php deleted file mode 100644 index 69e2ebec..00000000 --- a/monolog/tests/MonologTest.php +++ /dev/null @@ -1,81 +0,0 @@ -setUpVfsDir(); - } - - protected function getContent() - { - return $this->logfile->getContent(); - } - - protected function getInstance($level = LogLevel::DEBUG) - { - $this->logfile = vfsStream::newFile('friendica.log') - ->at($this->root); - - $this->config->shouldReceive('get')->with('system', 'logfile')->andReturn($this->logfile->url())->once(); - $this->introspection->shouldReceive('addClasses')->with(['Monolog\\']); - - $loggerFactory = new Monolog($this->config, $this->introspection, 'test', $level); - return $loggerFactory->create(); - } - - /** - * Test if a log entry is correctly interpolated - * - * @note - override the base class, because Monolog adds an "array" prefix to the PsrInterpolate when using arrays - */ - public function testPsrInterpolate() - { - $logger = $this->getInstance(); - - $logger->emergency('A {psr} test', ['psr' => 'working']); - $logger->alert('An {array} test', ['array' => ['it', 'is', 'working']]); - $text = $this->getContent(); - self::assertStringContainsString('A working test', $text); - self::assertStringContainsString('An array["it","is","working"] test', $text); - } - - /** - * Test a message with an exception - * - * @note - override the base class, because Monolog has an own formatter logic for printing exceptions - */ - public function testExceptionHandling() - { - $e = new \Exception("Test String", 123); - $eFollowUp = new \Exception("FollowUp", 456, $e); - - $assertion = '[object] (Exception(code: 456)'; - - $logger = $this->getInstance(); - $logger->alert('test', ['e' => $eFollowUp]); - $text = $this->getContent(); - - self::assertLogline($text); - - self::assertStringContainsString($assertion, $this->getContent()); - } -} diff --git a/monolog/vendor/composer/autoload_classmap.php b/monolog/vendor/composer/autoload_classmap.php index 3c89f22c..c12d7340 100644 --- a/monolog/vendor/composer/autoload_classmap.php +++ b/monolog/vendor/composer/autoload_classmap.php @@ -121,15 +121,4 @@ return array( 'Monolog\\SignalHandler' => $vendorDir . '/monolog/monolog/src/Monolog/SignalHandler.php', 'Monolog\\Test\\TestCase' => $vendorDir . '/monolog/monolog/src/Monolog/Test/TestCase.php', 'Monolog\\Utils' => $vendorDir . '/monolog/monolog/src/Monolog/Utils.php', - 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php', - 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', - 'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php', ); diff --git a/monolog/vendor/composer/autoload_static.php b/monolog/vendor/composer/autoload_static.php index 95ed9e75..a44984ec 100644 --- a/monolog/vendor/composer/autoload_static.php +++ b/monolog/vendor/composer/autoload_static.php @@ -144,17 +144,6 @@ class ComposerStaticInitMonologAddon 'Monolog\\SignalHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/SignalHandler.php', 'Monolog\\Test\\TestCase' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Test/TestCase.php', 'Monolog\\Utils' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Utils.php', - 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php', - 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', - 'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php', ); public static function getInitializer(ClassLoader $loader) diff --git a/monolog/vendor/composer/installed.json b/monolog/vendor/composer/installed.json index 88238fe7..2b129417 100644 --- a/monolog/vendor/composer/installed.json +++ b/monolog/vendor/composer/installed.json @@ -1,17 +1,17 @@ [ { "name": "monolog/monolog", - "version": "2.8.0", - "version_normalized": "2.8.0.0", + "version": "2.9.2", + "version_normalized": "2.9.2.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", + "reference": "437cb3628f4cf6042cc10ae97fc2b8472e48ca1f", "shasum": "" }, "require": { @@ -26,7 +26,7 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", "guzzlehttp/guzzle": "^7.4", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", @@ -57,7 +57,7 @@ "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, - "time": "2022-07-24T11:55:47+00:00", + "time": "2023-10-27T15:25:26+00:00", "type": "library", "extra": { "branch-alias": { diff --git a/monolog/vendor/monolog/monolog/CHANGELOG.md b/monolog/vendor/monolog/monolog/CHANGELOG.md index 7f9db2b0..aca1bdd0 100644 --- a/monolog/vendor/monolog/monolog/CHANGELOG.md +++ b/monolog/vendor/monolog/monolog/CHANGELOG.md @@ -1,3 +1,24 @@ +### 2.9.2 (2023-10-27) + + * Fixed display_errors parsing in ErrorHandler which did not support string values (#1804) + * Fixed bug where the previous error handler would not be restored in some cases where StreamHandler fails (#1815) + * Fixed normalization error when normalizing incomplete classes (#1833) + +### 2.9.1 (2023-02-06) + + * Fixed Logger not being serializable anymore (#1792) + +### 2.9.0 (2023-02-05) + + * Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748) + * Added support for enum context values in PsrLogMessageProcessor (#1773) + * Added graylog2/gelf-php 2.x support (#1747) + * Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739) + * Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791) + * Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758) + * Fixed infinite loop detection within Fibers (#1753) + * Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781) + ### 2.8.0 (2022-07-24) * Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734) diff --git a/monolog/vendor/monolog/monolog/UPGRADE.md b/monolog/vendor/monolog/monolog/UPGRADE.md new file mode 100644 index 00000000..84e15e6b --- /dev/null +++ b/monolog/vendor/monolog/monolog/UPGRADE.md @@ -0,0 +1,72 @@ +### 2.0.0 + +- `Monolog\Logger::API` can be used to distinguish between a Monolog `1` and `2` + install of Monolog when writing integration code. + +- Removed non-PSR-3 methods to add records, all the `add*` (e.g. `addWarning`) + methods as well as `emerg`, `crit`, `err` and `warn`. + +- DateTime are now formatted with a timezone and microseconds (unless disabled). + Various formatters and log output might be affected, which may mess with log parsing + in some cases. + +- The `datetime` in every record array is now a DateTimeImmutable, not that you + should have been modifying these anyway. + +- The timezone is now set per Logger instance and not statically, either + via ->setTimezone or passed in the constructor. Calls to Logger::setTimezone + should be converted. + +- `HandlerInterface` has been split off and two new interfaces now exist for + more granular controls: `ProcessableHandlerInterface` and + `FormattableHandlerInterface`. Handlers not extending `AbstractHandler` + should make sure to implement the relevant interfaces. + +- `HandlerInterface` now requires the `close` method to be implemented. This + only impacts you if you implement the interface yourself, but you can extend + the new `Monolog\Handler\Handler` base class too. + +- There is no more default handler configured on empty Logger instances, if + you were relying on that you will not get any output anymore, make sure to + configure the handler you need. + +#### LogglyFormatter + +- The records' `datetime` is not sent anymore. Only `timestamp` is sent to Loggly. + +#### AmqpHandler + +- Log levels are not shortened to 4 characters anymore. e.g. a warning record + will be sent using the `warning.channel` routing key instead of `warn.channel` + as in 1.x. +- The exchange name does not default to 'log' anymore, and it is completely ignored + now for the AMQP extension users. Only PHPAmqpLib uses it if provided. + +#### RotatingFileHandler + +- The file name format must now contain `{date}` and the date format must be set + to one of the predefined FILE_PER_* constants to avoid issues with file rotation. + See `setFilenameFormat`. + +#### LogstashFormatter + +- Removed Logstash V0 support +- Context/extra prefix has been removed in favor of letting users configure the exact key being sent +- Context/extra data are now sent as an object instead of single keys + +#### HipChatHandler + +- Removed deprecated HipChat handler, migrate to Slack and use SlackWebhookHandler or SlackHandler instead + +#### SlackbotHandler + +- Removed deprecated SlackbotHandler handler, use SlackWebhookHandler or SlackHandler instead + +#### RavenHandler + +- Removed deprecated RavenHandler handler, use sentry/sentry 2.x and their Sentry\Monolog\Handler instead + +#### ElasticSearchHandler + +- As support for the official Elasticsearch library was added, the former ElasticSearchHandler has been + renamed to ElasticaHandler and the new one added as ElasticsearchHandler. diff --git a/monolog/vendor/monolog/monolog/composer.json b/monolog/vendor/monolog/monolog/composer.json index ab775ad6..b9437d6d 100644 --- a/monolog/vendor/monolog/monolog/composer.json +++ b/monolog/vendor/monolog/monolog/composer.json @@ -21,7 +21,7 @@ "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", - "graylog2/gelf-php": "^1.4.2", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", "guzzlehttp/guzzle": "^7.4", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", diff --git a/monolog/vendor/monolog/monolog/src/Monolog/ErrorHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/ErrorHandler.php index 576f1713..1406d34e 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/ErrorHandler.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/ErrorHandler.php @@ -198,7 +198,7 @@ class ErrorHandler ($this->previousExceptionHandler)($e); } - if (!headers_sent() && !ini_get('display_errors')) { + if (!headers_sent() && in_array(strtolower((string) ini_get('display_errors')), ['0', '', 'false', 'off', 'none', 'no'], true)) { http_response_code(500); } diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php index 41b56b3c..867ae586 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php @@ -15,6 +15,7 @@ namespace Monolog\Formatter; * formats the record to be used in the FlowdockHandler * * @author Dominik Liebler + * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4 */ class FlowdockFormatter implements FormatterInterface { diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php index a1a79372..3b3e1e7f 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php @@ -47,6 +47,11 @@ class GelfMessageFormatter extends NormalizerFormatter */ protected $maxLength; + /** + * @var int + */ + private $gelfVersion = 2; + /** * Translates Monolog log levels to Graylog2 log priorities. * @@ -78,6 +83,10 @@ class GelfMessageFormatter extends NormalizerFormatter $this->extraPrefix = is_null($extraPrefix) ? '' : $extraPrefix; $this->contextPrefix = $contextPrefix; $this->maxLength = is_null($maxLength) ? self::DEFAULT_MAX_LENGTH : $maxLength; + + if (method_exists(Message::class, 'setFacility')) { + $this->gelfVersion = 1; + } } /** @@ -113,16 +122,20 @@ class GelfMessageFormatter extends NormalizerFormatter $message->setShortMessage(Utils::substr($record['message'], 0, $this->maxLength)); } - if (isset($record['channel'])) { - $message->setFacility($record['channel']); - } - if (isset($extra['line'])) { - $message->setLine($extra['line']); - unset($extra['line']); - } - if (isset($extra['file'])) { - $message->setFile($extra['file']); - unset($extra['file']); + if ($this->gelfVersion === 1) { + if (isset($record['channel'])) { + $message->setFacility($record['channel']); + } + if (isset($extra['line'])) { + $message->setLine($extra['line']); + unset($extra['line']); + } + if (isset($extra['file'])) { + $message->setFile($extra['file']); + unset($extra['file']); + } + } else { + $message->setAdditional('facility', $record['channel']); } foreach ($extra as $key => $val) { @@ -147,11 +160,13 @@ class GelfMessageFormatter extends NormalizerFormatter $message->setAdditional($this->contextPrefix . $key, $val); } - /** @phpstan-ignore-next-line */ - if (null === $message->getFile() && isset($context['exception']['file'])) { - if (preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) { - $message->setFile($matches[1]); - $message->setLine($matches[2]); + if ($this->gelfVersion === 1) { + /** @phpstan-ignore-next-line */ + if (null === $message->getFile() && isset($context['exception']['file'])) { + if (preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) { + $message->setFile($matches[1]); + $message->setLine($matches[2]); + } } } diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php index 0cd287f5..ca52ebf4 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php @@ -17,6 +17,7 @@ use Monolog\LogRecord; /** * Encodes message information into JSON in a format compatible with Cloud logging. * + * @see https://cloud.google.com/logging/docs/structured-logging * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry * * @author Luís Cobucci @@ -28,7 +29,7 @@ final class GoogleCloudLoggingFormatter extends JsonFormatter { // Re-key level for GCP logging $record['severity'] = $record['level_name']; - $record['timestamp'] = $record['datetime']->format(DateTimeInterface::RFC3339_EXTENDED); + $record['time'] = $record['datetime']->format(DateTimeInterface::RFC3339_EXTENDED); // Remove keys that are not used by GCP unset($record['level'], $record['level_name'], $record['datetime']); diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php index b31b2971..e6e78983 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php @@ -155,7 +155,7 @@ class LineFormatter extends NormalizerFormatter do { $depth++; if ($depth > $this->maxNormalizeDepth) { - $str .= '\n[previous exception] Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization'; + $str .= "\n[previous exception] Over " . $this->maxNormalizeDepth . ' levels deep, aborting normalization'; break; } diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php index 5441bc0a..f926a842 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php @@ -174,6 +174,9 @@ class NormalizerFormatter implements FormatterInterface if ($data instanceof \JsonSerializable) { /** @var null|scalar|array $value */ $value = $data->jsonSerialize(); + } elseif (\get_class($data) === '__PHP_Incomplete_Class') { + $accessor = new \ArrayObject($data); + $value = (string) $accessor['__PHP_Incomplete_Class_Name']; } elseif (method_exists($data, '__toString')) { /** @var string $value */ $value = $data->__toString(); diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php index c4997482..994872ce 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php @@ -151,13 +151,14 @@ class AmqpHandler extends AbstractProcessingHandler private function createAmqpMessage(string $data): AMQPMessage { - return new AMQPMessage( - $data, - [ - 'delivery_mode' => 2, - 'content_type' => 'application/json', - ] - ); + $attributes = [ + 'delivery_mode' => 2, + 'content_type' => 'application/json', + ]; + if ($this->extraAttributes) { + $attributes = array_merge($attributes, $this->extraAttributes); + } + return new AMQPMessage($data, $attributes); } /** diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php index fa383f1c..95bbfed4 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php @@ -14,6 +14,7 @@ namespace Monolog\Handler; use Monolog\Formatter\FormatterInterface; use Monolog\Formatter\LineFormatter; use Monolog\Utils; +use Monolog\Logger; use function count; use function headers_list; @@ -177,7 +178,7 @@ class BrowserConsoleHandler extends AbstractProcessingHandler $extra = static::dump('Extra', $record['extra']); if (empty($context) && empty($extra)) { - $script[] = static::call_array('log', static::handleStyles($record['formatted'])); + $script[] = static::call_array(static::getConsoleMethodForLevel($record['level']), static::handleStyles($record['formatted'])); } else { $script = array_merge( $script, @@ -192,6 +193,20 @@ class BrowserConsoleHandler extends AbstractProcessingHandler return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);"; } + private static function getConsoleMethodForLevel(int $level): string + { + return [ + Logger::DEBUG => 'debug', + Logger::INFO => 'info', + Logger::NOTICE => 'info', + Logger::WARNING => 'warn', + Logger::ERROR => 'error', + Logger::CRITICAL => 'error', + Logger::ALERT => 'error', + Logger::EMERGENCY => 'error', + ][$level] ?? 'log'; + } + /** * @return string[] */ diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php index b837bdb6..5715d580 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php @@ -28,6 +28,7 @@ use Monolog\Formatter\FormatterInterface; * @see https://www.flowdock.com/api/push * * @phpstan-import-type FormattedRecord from AbstractProcessingHandler + * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4 */ class FlowdockHandler extends SocketHandler { diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php index 65183512..82c048e1 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php @@ -135,11 +135,14 @@ class StreamHandler extends AbstractProcessingHandler $this->createDir($url); $this->errorMessage = null; set_error_handler([$this, 'customErrorHandler']); - $stream = fopen($url, 'a'); - if ($this->filePermission !== null) { - @chmod($url, $this->filePermission); + try { + $stream = fopen($url, 'a'); + if ($this->filePermission !== null) { + @chmod($url, $this->filePermission); + } + } finally { + restore_error_handler(); } - restore_error_handler(); if (!is_resource($stream)) { $this->stream = null; diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php new file mode 100644 index 00000000..fae92514 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php @@ -0,0 +1,115 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; +use Monolog\Utils; +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\LineFormatter; +use Swift_Message; +use Swift; + +/** + * SwiftMailerHandler uses Swift_Mailer to send the emails + * + * @author Gyula Sallai + * + * @phpstan-import-type Record from \Monolog\Logger + * @deprecated Since Monolog 2.6. Use SymfonyMailerHandler instead. + */ +class SwiftMailerHandler extends MailHandler +{ + /** @var \Swift_Mailer */ + protected $mailer; + /** @var Swift_Message|callable(string, Record[]): Swift_Message */ + private $messageTemplate; + + /** + * @psalm-param Swift_Message|callable(string, Record[]): Swift_Message $message + * + * @param \Swift_Mailer $mailer The mailer to use + * @param callable|Swift_Message $message An example message for real messages, only the body will be replaced + */ + public function __construct(\Swift_Mailer $mailer, $message, $level = Logger::ERROR, bool $bubble = true) + { + parent::__construct($level, $bubble); + + @trigger_error('The SwiftMailerHandler is deprecated since Monolog 2.6. Use SymfonyMailerHandler instead.', E_USER_DEPRECATED); + + $this->mailer = $mailer; + $this->messageTemplate = $message; + } + + /** + * {@inheritDoc} + */ + protected function send(string $content, array $records): void + { + $this->mailer->send($this->buildMessage($content, $records)); + } + + /** + * Gets the formatter for the Swift_Message subject. + * + * @param string|null $format The format of the subject + */ + protected function getSubjectFormatter(?string $format): FormatterInterface + { + return new LineFormatter($format); + } + + /** + * Creates instance of Swift_Message to be sent + * + * @param string $content formatted email body to be sent + * @param array $records Log records that formed the content + * @return Swift_Message + * + * @phpstan-param Record[] $records + */ + protected function buildMessage(string $content, array $records): Swift_Message + { + $message = null; + if ($this->messageTemplate instanceof Swift_Message) { + $message = clone $this->messageTemplate; + $message->generateId(); + } elseif (is_callable($this->messageTemplate)) { + $message = ($this->messageTemplate)($content, $records); + } + + if (!$message instanceof Swift_Message) { + $record = reset($records); + throw new \InvalidArgumentException('Could not resolve message as instance of Swift_Message or a callable returning it' . ($record ? Utils::getRecordMessageForException($record) : '')); + } + + if ($records) { + $subjectFormatter = $this->getSubjectFormatter($message->getSubject()); + $message->setSubject($subjectFormatter->format($this->getHighestRecord($records))); + } + + $mime = 'text/plain'; + if ($this->isHtmlBody($content)) { + $mime = 'text/html'; + } + + $message->setBody($content, $mime); + /** @phpstan-ignore-next-line */ + if (version_compare(Swift::VERSION, '6.0.0', '>=')) { + $message->setDate(new \DateTimeImmutable()); + } else { + /** @phpstan-ignore-next-line */ + $message->setDate(time()); + } + + return $message; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php index 2dd13672..b6d3d3b1 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php @@ -64,4 +64,18 @@ class WhatFailureGroupHandler extends GroupHandler } } } + + /** + * {@inheritDoc} + */ + public function close(): void + { + foreach ($this->handlers as $handler) { + try { + $handler->close(); + } catch (\Throwable $e) { + // What failure? + } + } + } } diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Logger.php b/monolog/vendor/monolog/monolog/src/Monolog/Logger.php index 1ab75b9e..84a2f551 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Logger.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Logger.php @@ -168,6 +168,11 @@ class Logger implements LoggerInterface, ResettableInterface */ private $logDepth = 0; + /** + * @var \WeakMap<\Fiber, int>|null Keeps track of depth inside fibers to prevent infinite logging loops + */ + private $fiberLogDepth; + /** * @var bool Whether to detect infinite logging loops * @@ -189,6 +194,13 @@ class Logger implements LoggerInterface, ResettableInterface $this->setHandlers($handlers); $this->processors = $processors; $this->timezone = $timezone ?: new DateTimeZone(date_default_timezone_get() ?: 'UTC'); + + if (\PHP_VERSION_ID >= 80100) { + // Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412 + /** @var \WeakMap<\Fiber, int> $fiberLogDepth */ + $fiberLogDepth = new \WeakMap(); + $this->fiberLogDepth = $fiberLogDepth; + } } public function getName(): string @@ -332,12 +344,20 @@ class Logger implements LoggerInterface, ResettableInterface } if ($this->detectCycles) { - $this->logDepth += 1; + if (\PHP_VERSION_ID >= 80100 && $fiber = \Fiber::getCurrent()) { + $this->fiberLogDepth[$fiber] = $this->fiberLogDepth[$fiber] ?? 0; + $logDepth = ++$this->fiberLogDepth[$fiber]; + } else { + $logDepth = ++$this->logDepth; + } + } else { + $logDepth = 0; } - if ($this->logDepth === 3) { + + if ($logDepth === 3) { $this->warning('A possible infinite logging loop was detected and aborted. It appears some of your handler code is triggering logging, see the previous log record for a hint as to what may be the cause.'); return false; - } elseif ($this->logDepth >= 5) { // log depth 4 is let through so we can log the warning above + } elseif ($logDepth >= 5) { // log depth 4 is let through, so we can log the warning above return false; } @@ -387,7 +407,11 @@ class Logger implements LoggerInterface, ResettableInterface } } finally { if ($this->detectCycles) { - $this->logDepth--; + if (isset($fiber)) { + $this->fiberLogDepth[$fiber]--; + } else { + $this->logDepth--; + } } } @@ -698,4 +722,40 @@ class Logger implements LoggerInterface, ResettableInterface ($this->exceptionHandler)($e, $record); } + + /** + * @return array + */ + public function __serialize(): array + { + return [ + 'name' => $this->name, + 'handlers' => $this->handlers, + 'processors' => $this->processors, + 'microsecondTimestamps' => $this->microsecondTimestamps, + 'timezone' => $this->timezone, + 'exceptionHandler' => $this->exceptionHandler, + 'logDepth' => $this->logDepth, + 'detectCycles' => $this->detectCycles, + ]; + } + + /** + * @param array $data + */ + public function __unserialize(array $data): void + { + foreach (['name', 'handlers', 'processors', 'microsecondTimestamps', 'timezone', 'exceptionHandler', 'logDepth', 'detectCycles'] as $property) { + if (isset($data[$property])) { + $this->$property = $data[$property]; + } + } + + if (\PHP_VERSION_ID >= 80100) { + // Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412 + /** @var \WeakMap<\Fiber, int> $fiberLogDepth */ + $fiberLogDepth = new \WeakMap(); + $this->fiberLogDepth = $fiberLogDepth; + } + } } diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php index 2c2a00e7..e7c12176 100644 --- a/monolog/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php @@ -66,6 +66,8 @@ class PsrLogMessageProcessor implements ProcessorInterface } else { $replacements[$placeholder] = $val->format($this->dateFormat ?: static::SIMPLE_DATE); } + } elseif ($val instanceof \UnitEnum) { + $replacements[$placeholder] = $val instanceof \BackedEnum ? $val->value : $val->name; } elseif (is_object($val)) { $replacements[$placeholder] = '[object '.Utils::getClass($val).']'; } elseif (is_array($val)) { diff --git a/morechoice/morechoice.php b/morechoice/morechoice.php index fe726d27..fbb88ce1 100644 --- a/morechoice/morechoice.php +++ b/morechoice/morechoice.php @@ -8,7 +8,6 @@ * Status: Deprecated */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; diff --git a/morepokes/morepokes.php b/morepokes/morepokes.php index abe59a6e..2ac09a73 100644 --- a/morepokes/morepokes.php +++ b/morepokes/morepokes.php @@ -7,7 +7,6 @@ * */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; diff --git a/newmemberwidget/README.md b/newmemberwidget/README.md index 39522238..e467708e 100644 --- a/newmemberwidget/README.md +++ b/newmemberwidget/README.md @@ -5,8 +5,8 @@ With this addon you can enable a widget for the sidebar of the network tab, which will be displayed for new members. It contains a linkt to friendicas introduction pages at /newmember and optionally - * a link to the global support forum - * a link to an eventually existing local support forum + * a link to the global support group + * a link to an eventually existing local support group * a welcome message you might want to send to your new members. There is no extra styling added for this added, so it should work with any diff --git a/newmemberwidget/lang/C/messages.po b/newmemberwidget/lang/C/messages.po index 1e7d608a..0dc91e13 100644 --- a/newmemberwidget/lang/C/messages.po +++ b/newmemberwidget/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,48 +26,48 @@ msgid "Tips for New Members" msgstr "" #: newmemberwidget.php:33 -msgid "Global Support Forum" +msgid "Global Support Group" msgstr "" #: newmemberwidget.php:37 -msgid "Local Support Forum" +msgid "Local Support Group" msgstr "" -#: newmemberwidget.php:65 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Message" msgstr "" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "" -#: newmemberwidget.php:67 -msgid "Add a link to global support forum" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" msgstr "" -#: newmemberwidget.php:67 -msgid "Should a link to the global support forum be displayed?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" msgstr "" -#: newmemberwidget.php:68 -msgid "Add a link to the local support forum" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" msgstr "" -#: newmemberwidget.php:68 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and want to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." msgstr "" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support " "group here (i.e. helpers)" diff --git a/newmemberwidget/lang/cs/messages.po b/newmemberwidget/lang/cs/messages.po index c774e302..387144ab 100644 --- a/newmemberwidget/lang/cs/messages.po +++ b/newmemberwidget/lang/cs/messages.po @@ -4,73 +4,74 @@ # # # Translators: -# Michal Šupler , 2014 +# Aditoo, 2018 +# michal_s , 2014 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-01 14:12+0200\n" -"PO-Revision-Date: 2014-07-07 19:25+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: newmemberwidget.php:21 +#: newmemberwidget.php:29 msgid "New Member" msgstr "Nový člen" -#: newmemberwidget.php:22 +#: newmemberwidget.php:30 msgid "Tips for New Members" msgstr "Tipy pro nové členy" -#: newmemberwidget.php:24 -msgid "Global Support Forum" -msgstr "Globální fórum podpory" +#: newmemberwidget.php:33 +msgid "Global Support Group" +msgstr "" -#: newmemberwidget.php:26 -msgid "Local Support Forum" -msgstr "Lokální fórum podpory" +#: newmemberwidget.php:37 +msgid "Local Support Group" +msgstr "" -#: newmemberwidget.php:49 +#: newmemberwidget.php:62 msgid "Save Settings" -msgstr "Uložit Nastavení" +msgstr "Uložit nastavení" -#: newmemberwidget.php:50 +#: newmemberwidget.php:63 msgid "Message" msgstr "Zpráva" -#: newmemberwidget.php:50 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "Vaše zpráva pro nové členy. Zde můžete použít BBCode." -#: newmemberwidget.php:51 -msgid "Add a link to global support forum" -msgstr "Přidejte odkaz na globální fórum podpory" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" +msgstr "" -#: newmemberwidget.php:51 -msgid "Should a link to the global support forum be displayed?" -msgstr "Má být odkaz na globální fórum podpory zobrazen?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" +msgstr "" -#: newmemberwidget.php:52 -msgid "Add a link to the local support forum" -msgstr "Přidejte odkaz na lokální fórum podpory" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" +msgstr "" -#: newmemberwidget.php:52 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and wand to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." -msgstr "Pokud máte lokální fórum podpory a chcete mít zobrazen jeho odkaz, zvolte tuto volbu." +msgstr "" -#: newmemberwidget.php:53 +#: newmemberwidget.php:66 msgid "Name of the local support group" -msgstr "Název lokálního fóra podpory" +msgstr "Název místního fóra podpory" -#: newmemberwidget.php:53 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" -msgstr "Pokud jste výše uvedené zaškrtli, specifikujte zde přezdívku lokální podpůrné skupiny (např. pomahači)" +msgstr "Pokud jste zaškrtl/a výše uvedenou možnost, specifikujte zde přezdívku místní skupiny podpory (např. pomocnici)" diff --git a/newmemberwidget/lang/cs/strings.php b/newmemberwidget/lang/cs/strings.php index 62673df9..2f150466 100644 --- a/newmemberwidget/lang/cs/strings.php +++ b/newmemberwidget/lang/cs/strings.php @@ -3,18 +3,12 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} $a->strings['New Member'] = 'Nový člen'; $a->strings['Tips for New Members'] = 'Tipy pro nové členy'; -$a->strings['Global Support Forum'] = 'Globální fórum podpory'; -$a->strings['Local Support Forum'] = 'Lokální fórum podpory'; -$a->strings['Save Settings'] = 'Uložit Nastavení'; +$a->strings['Save Settings'] = 'Uložit nastavení'; $a->strings['Message'] = 'Zpráva'; $a->strings['Your message for new members. You can use bbcode here.'] = 'Vaše zpráva pro nové členy. Zde můžete použít BBCode.'; -$a->strings['Add a link to global support forum'] = 'Přidejte odkaz na globální fórum podpory'; -$a->strings['Should a link to the global support forum be displayed?'] = 'Má být odkaz na globální fórum podpory zobrazen?'; -$a->strings['Add a link to the local support forum'] = 'Přidejte odkaz na lokální fórum podpory'; -$a->strings['If you have a local support forum and wand to have a link displayed in the widget, check this box.'] = 'Pokud máte lokální fórum podpory a chcete mít zobrazen jeho odkaz, zvolte tuto volbu.'; -$a->strings['Name of the local support group'] = 'Název lokálního fóra podpory'; -$a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Pokud jste výše uvedené zaškrtli, specifikujte zde přezdívku lokální podpůrné skupiny (např. pomahači)'; +$a->strings['Name of the local support group'] = 'Název místního fóra podpory'; +$a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Pokud jste zaškrtl/a výše uvedenou možnost, specifikujte zde přezdívku místní skupiny podpory (např. pomocnici)'; diff --git a/newmemberwidget/lang/de/messages.po b/newmemberwidget/lang/de/messages.po index 17696cfd..87289e3e 100644 --- a/newmemberwidget/lang/de/messages.po +++ b/newmemberwidget/lang/de/messages.po @@ -4,16 +4,17 @@ # # # Translators: +# Raroun, 2023 # Tobias Diekershoff , 2021 # Ulf Rompe , 2019 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-03-29 05:38+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: Raroun, 2023\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -29,48 +30,48 @@ msgid "Tips for New Members" msgstr "Tipps für neue Nutzer" #: newmemberwidget.php:33 -msgid "Global Support Forum" -msgstr "Globales Forum für Hilfsanfragen" +msgid "Global Support Group" +msgstr "Globale Support-Gruppe" #: newmemberwidget.php:37 -msgid "Local Support Forum" -msgstr "Lokales Forum für Hilfsanfragen" +msgid "Local Support Group" +msgstr "Lokale Support-Gruppe" -#: newmemberwidget.php:65 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "Einstellungen speichern" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Message" msgstr "Nachricht" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "Deine Nachricht für neue Nutzer. BBCode kann verwendet werden." -#: newmemberwidget.php:67 -msgid "Add a link to global support forum" -msgstr "Link zum globalen Support-Forum anzeigen" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" +msgstr "Fügen Sie einen Link der globalen Support-Gruppe hinzu" -#: newmemberwidget.php:67 -msgid "Should a link to the global support forum be displayed?" -msgstr "Soll ein Link zum globalen Support-Forum angezeigt werden?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" +msgstr "Soll ein Link zur globalen Support-Gruppe angezeigt werden?" -#: newmemberwidget.php:68 -msgid "Add a link to the local support forum" -msgstr "Link zum lokalen Support-Forum anzeigen" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" +msgstr "Fügen Sie einen Link der lokalen Support-Gruppe hinzu" -#: newmemberwidget.php:68 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and want to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." -msgstr "Wenn du ein lokales Support-Forum eingerichtet hast und ein Link darauf angezeigt werden soll, schalte dies ein." +msgstr "Wenn Sie eine lokale Support-Gruppe haben und einen Link im Widget anzeigen lassen möchten, markieren Sie dieses Feld." -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "Name des lokalen Support-Forums" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/de/strings.php b/newmemberwidget/lang/de/strings.php index c7dc503c..aa3e0f88 100644 --- a/newmemberwidget/lang/de/strings.php +++ b/newmemberwidget/lang/de/strings.php @@ -7,14 +7,14 @@ function string_plural_select_de($n){ }} $a->strings['New Member'] = 'Neue Nutzer'; $a->strings['Tips for New Members'] = 'Tipps für neue Nutzer'; -$a->strings['Global Support Forum'] = 'Globales Forum für Hilfsanfragen'; -$a->strings['Local Support Forum'] = 'Lokales Forum für Hilfsanfragen'; +$a->strings['Global Support Group'] = 'Globale Support-Gruppe'; +$a->strings['Local Support Group'] = 'Lokale Support-Gruppe'; $a->strings['Save Settings'] = 'Einstellungen speichern'; $a->strings['Message'] = 'Nachricht'; $a->strings['Your message for new members. You can use bbcode here.'] = 'Deine Nachricht für neue Nutzer. BBCode kann verwendet werden.'; -$a->strings['Add a link to global support forum'] = 'Link zum globalen Support-Forum anzeigen'; -$a->strings['Should a link to the global support forum be displayed?'] = 'Soll ein Link zum globalen Support-Forum angezeigt werden?'; -$a->strings['Add a link to the local support forum'] = 'Link zum lokalen Support-Forum anzeigen'; -$a->strings['If you have a local support forum and want to have a link displayed in the widget, check this box.'] = 'Wenn du ein lokales Support-Forum eingerichtet hast und ein Link darauf angezeigt werden soll, schalte dies ein.'; +$a->strings['Add a link to global support group'] = 'Fügen Sie einen Link der globalen Support-Gruppe hinzu'; +$a->strings['Should a link to the global support group be displayed?'] = 'Soll ein Link zur globalen Support-Gruppe angezeigt werden?'; +$a->strings['Add a link to the local support group'] = 'Fügen Sie einen Link der lokalen Support-Gruppe hinzu'; +$a->strings['If you have a local support group and want to have a link displayed in the widget, check this box.'] = 'Wenn Sie eine lokale Support-Gruppe haben und einen Link im Widget anzeigen lassen möchten, markieren Sie dieses Feld.'; $a->strings['Name of the local support group'] = 'Name des lokalen Support-Forums'; $a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Wenn der Link angezeigt werden soll, dann trage hier den Spitznamen des Forums ein (z.B. helpers)'; diff --git a/newmemberwidget/lang/es/messages.po b/newmemberwidget/lang/es/messages.po index fb31e143..b731a041 100644 --- a/newmemberwidget/lang/es/messages.po +++ b/newmemberwidget/lang/es/messages.po @@ -10,15 +10,15 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-04-06 01:46+0000\n" -"Last-Translator: Senex Petrovic \n" -"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: Senex Petrovic , 2021\n" +"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: newmemberwidget.php:29 msgid "New Member" @@ -29,48 +29,48 @@ msgid "Tips for New Members" msgstr "Consejos para Nuevos Miembros" #: newmemberwidget.php:33 -msgid "Global Support Forum" -msgstr "Foro de Soporte Global" +msgid "Global Support Group" +msgstr "" #: newmemberwidget.php:37 -msgid "Local Support Forum" -msgstr "Foro de Soporte Local" +msgid "Local Support Group" +msgstr "" -#: newmemberwidget.php:65 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "Guardar Ajustes" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Message" msgstr "Mensaje" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "Su mensaje para los nuevos miembros. Puede usar bbcode aquí" -#: newmemberwidget.php:67 -msgid "Add a link to global support forum" -msgstr "Añadir un enlace al foro de soporte global" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" +msgstr "" -#: newmemberwidget.php:67 -msgid "Should a link to the global support forum be displayed?" -msgstr "¿Debería mostrarse un enlace al foro de soporte global?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" +msgstr "" -#: newmemberwidget.php:68 -msgid "Add a link to the local support forum" -msgstr "Añadir un enlace al foro de soporte local" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" +msgstr "" -#: newmemberwidget.php:68 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and want to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." -msgstr "Si tiene foro de soporte local y desea que se muestre un enlace en el widget, marque esta casilla." +msgstr "" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "Nombre del grupo de soporte local" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/es/strings.php b/newmemberwidget/lang/es/strings.php index 28253b73..8798813a 100644 --- a/newmemberwidget/lang/es/strings.php +++ b/newmemberwidget/lang/es/strings.php @@ -3,18 +3,12 @@ if(! function_exists("string_plural_select_es")) { function string_plural_select_es($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['New Member'] = 'Nuevo Miembro'; $a->strings['Tips for New Members'] = 'Consejos para Nuevos Miembros'; -$a->strings['Global Support Forum'] = 'Foro de Soporte Global'; -$a->strings['Local Support Forum'] = 'Foro de Soporte Local'; $a->strings['Save Settings'] = 'Guardar Ajustes'; $a->strings['Message'] = 'Mensaje'; $a->strings['Your message for new members. You can use bbcode here.'] = 'Su mensaje para los nuevos miembros. Puede usar bbcode aquí'; -$a->strings['Add a link to global support forum'] = 'Añadir un enlace al foro de soporte global'; -$a->strings['Should a link to the global support forum be displayed?'] = '¿Debería mostrarse un enlace al foro de soporte global?'; -$a->strings['Add a link to the local support forum'] = 'Añadir un enlace al foro de soporte local'; -$a->strings['If you have a local support forum and want to have a link displayed in the widget, check this box.'] = 'Si tiene foro de soporte local y desea que se muestre un enlace en el widget, marque esta casilla.'; $a->strings['Name of the local support group'] = 'Nombre del grupo de soporte local'; $a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Si chequeó arriba, especifique el apodo del grupo de soporte local aquí (asistentes)'; diff --git a/newmemberwidget/lang/et/messages.po b/newmemberwidget/lang/et/messages.po index 969efad9..6f52dff8 100644 --- a/newmemberwidget/lang/et/messages.po +++ b/newmemberwidget/lang/et/messages.po @@ -9,67 +9,67 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-01 14:12+0200\n" -"PO-Revision-Date: 2019-04-16 05:07+0000\n" -"Last-Translator: Rain Hawk\n" -"Language-Team: Estonian (http://www.transifex.com/Friendica/friendica/language/et/)\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: Rain Hawk, 2019\n" +"Language-Team: Estonian (http://app.transifex.com/Friendica/friendica/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: newmemberwidget.php:21 +#: newmemberwidget.php:29 msgid "New Member" msgstr "Uus liige" -#: newmemberwidget.php:22 +#: newmemberwidget.php:30 msgid "Tips for New Members" msgstr "Nippe uutele liikmetele" -#: newmemberwidget.php:24 -msgid "Global Support Forum" -msgstr "Globaalne tugifoorum" +#: newmemberwidget.php:33 +msgid "Global Support Group" +msgstr "" -#: newmemberwidget.php:26 -msgid "Local Support Forum" -msgstr "Lokaalne tugifoorum" +#: newmemberwidget.php:37 +msgid "Local Support Group" +msgstr "" -#: newmemberwidget.php:49 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "Salvesta sätted" -#: newmemberwidget.php:50 +#: newmemberwidget.php:63 msgid "Message" msgstr "Sõnum" -#: newmemberwidget.php:50 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "" -#: newmemberwidget.php:51 -msgid "Add a link to global support forum" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" msgstr "" -#: newmemberwidget.php:51 -msgid "Should a link to the global support forum be displayed?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" msgstr "" -#: newmemberwidget.php:52 -msgid "Add a link to the local support forum" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" msgstr "" -#: newmemberwidget.php:52 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and wand to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." msgstr "" -#: newmemberwidget.php:53 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "" -#: newmemberwidget.php:53 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/et/strings.php b/newmemberwidget/lang/et/strings.php index 3d4f8167..e4465d99 100644 --- a/newmemberwidget/lang/et/strings.php +++ b/newmemberwidget/lang/et/strings.php @@ -7,7 +7,5 @@ function string_plural_select_et($n){ }} $a->strings['New Member'] = 'Uus liige'; $a->strings['Tips for New Members'] = 'Nippe uutele liikmetele'; -$a->strings['Global Support Forum'] = 'Globaalne tugifoorum'; -$a->strings['Local Support Forum'] = 'Lokaalne tugifoorum'; $a->strings['Save Settings'] = 'Salvesta sätted'; $a->strings['Message'] = 'Sõnum'; diff --git a/newmemberwidget/lang/fr/messages.po b/newmemberwidget/lang/fr/messages.po index 296c2755..3e1f2505 100644 --- a/newmemberwidget/lang/fr/messages.po +++ b/newmemberwidget/lang/fr/messages.po @@ -4,6 +4,7 @@ # # # Translators: +# Florent C., 2023 # Hypolite Petovan , 2022 # Nicolas Derive, 2022 # StefOfficiel , 2015 @@ -11,10 +12,10 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" "PO-Revision-Date: 2014-06-23 10:26+0000\n" -"Last-Translator: Nicolas Derive, 2022\n" -"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" +"Last-Translator: Florent C., 2023\n" +"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -30,48 +31,48 @@ msgid "Tips for New Members" msgstr "Conseils aux nouveaux venus" #: newmemberwidget.php:33 -msgid "Global Support Forum" -msgstr "Forum de support global" +msgid "Global Support Group" +msgstr "Groupe de support global" #: newmemberwidget.php:37 -msgid "Local Support Forum" -msgstr "Forum de support local" +msgid "Local Support Group" +msgstr "Groupe de support local" -#: newmemberwidget.php:65 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "Enregistrer les paramètres" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Message" msgstr "Message" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "Votre messages aux nouveaux venus. Vous pouvez utiliser des BBCodes." -#: newmemberwidget.php:67 -msgid "Add a link to global support forum" -msgstr "Ajouter un lien vers le forum de support global" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" +msgstr "Ajouter un lien vers le groupe de support global" -#: newmemberwidget.php:67 -msgid "Should a link to the global support forum be displayed?" -msgstr "Montrer un lien vers le forum de support global?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" +msgstr "Montrer un lien vers le groupe de support global ?" -#: newmemberwidget.php:68 -msgid "Add a link to the local support forum" -msgstr "Ajouter un lien vers le forum de support local" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" +msgstr "Ajouter un lien vers le groupe de support local" -#: newmemberwidget.php:68 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and want to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." -msgstr "Si vous avez un forum d'assistance local et désirez avoir un lien affiché dans l'appliquette/widget, cochez cette case." +msgstr "Si vous avez un groupe de support local et désirez avoir un lien affiché dans l'appliquette/widget, cochez cette case." -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "Nom du groupe de support local" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/fr/strings.php b/newmemberwidget/lang/fr/strings.php index 8de178f2..cc437f89 100644 --- a/newmemberwidget/lang/fr/strings.php +++ b/newmemberwidget/lang/fr/strings.php @@ -7,14 +7,14 @@ function string_plural_select_fr($n){ }} $a->strings['New Member'] = 'Nouveau Membre'; $a->strings['Tips for New Members'] = 'Conseils aux nouveaux venus'; -$a->strings['Global Support Forum'] = 'Forum de support global'; -$a->strings['Local Support Forum'] = 'Forum de support local'; +$a->strings['Global Support Group'] = 'Groupe de support global'; +$a->strings['Local Support Group'] = 'Groupe de support local'; $a->strings['Save Settings'] = 'Enregistrer les paramètres'; $a->strings['Message'] = 'Message'; $a->strings['Your message for new members. You can use bbcode here.'] = 'Votre messages aux nouveaux venus. Vous pouvez utiliser des BBCodes.'; -$a->strings['Add a link to global support forum'] = 'Ajouter un lien vers le forum de support global'; -$a->strings['Should a link to the global support forum be displayed?'] = 'Montrer un lien vers le forum de support global?'; -$a->strings['Add a link to the local support forum'] = 'Ajouter un lien vers le forum de support local'; -$a->strings['If you have a local support forum and want to have a link displayed in the widget, check this box.'] = 'Si vous avez un forum d\'assistance local et désirez avoir un lien affiché dans l\'appliquette/widget, cochez cette case.'; +$a->strings['Add a link to global support group'] = 'Ajouter un lien vers le groupe de support global'; +$a->strings['Should a link to the global support group be displayed?'] = 'Montrer un lien vers le groupe de support global ?'; +$a->strings['Add a link to the local support group'] = 'Ajouter un lien vers le groupe de support local'; +$a->strings['If you have a local support group and want to have a link displayed in the widget, check this box.'] = 'Si vous avez un groupe de support local et désirez avoir un lien affiché dans l\'appliquette/widget, cochez cette case.'; $a->strings['Name of the local support group'] = 'Nom du groupe de support local'; $a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Si vous avez coché la case ci-dessus, spécifiez le nom d\'utilisateur du groupe de support local (par ex. "helpers")'; diff --git a/newmemberwidget/lang/hu/messages.po b/newmemberwidget/lang/hu/messages.po index 41453463..f3babd21 100644 --- a/newmemberwidget/lang/hu/messages.po +++ b/newmemberwidget/lang/hu/messages.po @@ -4,15 +4,15 @@ # # # Translators: -# Balázs Úr, 2020-2021 +# Balázs Úr, 2020-2021,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" "PO-Revision-Date: 2014-06-23 10:26+0000\n" -"Last-Translator: Balázs Úr, 2020-2021\n" -"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n" +"Last-Translator: Balázs Úr, 2020-2021,2023\n" +"Language-Team: Hungarian (http://app.transifex.com/Friendica/friendica/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -28,48 +28,48 @@ msgid "Tips for New Members" msgstr "Tippek új tagoknak" #: newmemberwidget.php:33 -msgid "Global Support Forum" -msgstr "Globális támogató fórum" +msgid "Global Support Group" +msgstr "Globális támogatási csoport" #: newmemberwidget.php:37 -msgid "Local Support Forum" -msgstr "Helyi támogató fórum" +msgid "Local Support Group" +msgstr "Helyi támogatási csoport" -#: newmemberwidget.php:65 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "Beállítások mentése" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Message" msgstr "Üzenet" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "Az Ön üzenete az új tagoknak. Itt használhat BBCode-ot." -#: newmemberwidget.php:67 -msgid "Add a link to global support forum" -msgstr "A globális támogató fórumra mutató hivatkozás hozzáadása" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" +msgstr "A globális támogatási csoportra mutató hivatkozás hozzáadása" -#: newmemberwidget.php:67 -msgid "Should a link to the global support forum be displayed?" -msgstr "Meg kell jeleníteni a globális támogató fórumra mutató hivatkozást?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" +msgstr "Meg kell jeleníteni a globális támogatási csoportra mutató hivatkozást?" -#: newmemberwidget.php:68 -msgid "Add a link to the local support forum" -msgstr "A helyi támogató fórumra mutató hivatkozás hozzáadása" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" +msgstr "A helyi támogatási csoportra mutató hivatkozás hozzáadása" -#: newmemberwidget.php:68 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and want to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." -msgstr "Ha van helyi támogató fóruma és szeretne egy hivatkozást megjeleníteni a felületi elemben, akkor jelölje be azt a négyzetet." +msgstr "Ha van helyi támogatási csoportja és meg szeretne jeleníteni egy hivatkozást a felületi elemben, akkor jelölje be ezt a négyzetet." -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "A helyi támogató csoport neve" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/hu/strings.php b/newmemberwidget/lang/hu/strings.php index edf2a003..2f0066cd 100644 --- a/newmemberwidget/lang/hu/strings.php +++ b/newmemberwidget/lang/hu/strings.php @@ -7,14 +7,14 @@ function string_plural_select_hu($n){ }} $a->strings['New Member'] = 'Új tag'; $a->strings['Tips for New Members'] = 'Tippek új tagoknak'; -$a->strings['Global Support Forum'] = 'Globális támogató fórum'; -$a->strings['Local Support Forum'] = 'Helyi támogató fórum'; +$a->strings['Global Support Group'] = 'Globális támogatási csoport'; +$a->strings['Local Support Group'] = 'Helyi támogatási csoport'; $a->strings['Save Settings'] = 'Beállítások mentése'; $a->strings['Message'] = 'Üzenet'; $a->strings['Your message for new members. You can use bbcode here.'] = 'Az Ön üzenete az új tagoknak. Itt használhat BBCode-ot.'; -$a->strings['Add a link to global support forum'] = 'A globális támogató fórumra mutató hivatkozás hozzáadása'; -$a->strings['Should a link to the global support forum be displayed?'] = 'Meg kell jeleníteni a globális támogató fórumra mutató hivatkozást?'; -$a->strings['Add a link to the local support forum'] = 'A helyi támogató fórumra mutató hivatkozás hozzáadása'; -$a->strings['If you have a local support forum and want to have a link displayed in the widget, check this box.'] = 'Ha van helyi támogató fóruma és szeretne egy hivatkozást megjeleníteni a felületi elemben, akkor jelölje be azt a négyzetet.'; +$a->strings['Add a link to global support group'] = 'A globális támogatási csoportra mutató hivatkozás hozzáadása'; +$a->strings['Should a link to the global support group be displayed?'] = 'Meg kell jeleníteni a globális támogatási csoportra mutató hivatkozást?'; +$a->strings['Add a link to the local support group'] = 'A helyi támogatási csoportra mutató hivatkozás hozzáadása'; +$a->strings['If you have a local support group and want to have a link displayed in the widget, check this box.'] = 'Ha van helyi támogatási csoportja és meg szeretne jeleníteni egy hivatkozást a felületi elemben, akkor jelölje be ezt a négyzetet.'; $a->strings['Name of the local support group'] = 'A helyi támogató csoport neve'; $a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Ha bejelölte a fentit, akkor itt adja meg a helyi támogató csoport becenevét (például segítők)'; diff --git a/newmemberwidget/lang/it/messages.po b/newmemberwidget/lang/it/messages.po index e1a075a9..91d5c03e 100644 --- a/newmemberwidget/lang/it/messages.po +++ b/newmemberwidget/lang/it/messages.po @@ -10,15 +10,15 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 12:48+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: Sylke Vicious , 2020-2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: newmemberwidget.php:29 msgid "New Member" @@ -29,48 +29,48 @@ msgid "Tips for New Members" msgstr "Consigli per i Nuovi Utenti" #: newmemberwidget.php:33 -msgid "Global Support Forum" -msgstr "Forum Globale di Supporto" +msgid "Global Support Group" +msgstr "" #: newmemberwidget.php:37 -msgid "Local Support Forum" -msgstr "Forum Locale di Supporto" +msgid "Local Support Group" +msgstr "" -#: newmemberwidget.php:65 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "Salva Impostazioni" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Message" msgstr "Messaggio" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "Il tuo messaggio per i nuovi utenti. Puoi usare BBCode" -#: newmemberwidget.php:67 -msgid "Add a link to global support forum" -msgstr "Aggiunge un collegamento al forum di supporto globale" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" +msgstr "" -#: newmemberwidget.php:67 -msgid "Should a link to the global support forum be displayed?" -msgstr "Mostrare il collegamento al forum di supporto globale?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" +msgstr "" -#: newmemberwidget.php:68 -msgid "Add a link to the local support forum" -msgstr "Aggiunge un collegamento al forum di supporto locale" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" +msgstr "" -#: newmemberwidget.php:68 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and want to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." -msgstr "Se hai un forum di supporto locale e vuoi che sia mostrato il collegamento nel widget, seleziona questo box." +msgstr "" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "Nome del gruppo locale di supporto" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/it/strings.php b/newmemberwidget/lang/it/strings.php index 8e8ae7c7..56798c2a 100644 --- a/newmemberwidget/lang/it/strings.php +++ b/newmemberwidget/lang/it/strings.php @@ -3,18 +3,12 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['New Member'] = 'Nuovi Utenti'; $a->strings['Tips for New Members'] = 'Consigli per i Nuovi Utenti'; -$a->strings['Global Support Forum'] = 'Forum Globale di Supporto'; -$a->strings['Local Support Forum'] = 'Forum Locale di Supporto'; $a->strings['Save Settings'] = 'Salva Impostazioni'; $a->strings['Message'] = 'Messaggio'; $a->strings['Your message for new members. You can use bbcode here.'] = 'Il tuo messaggio per i nuovi utenti. Puoi usare BBCode'; -$a->strings['Add a link to global support forum'] = 'Aggiunge un collegamento al forum di supporto globale'; -$a->strings['Should a link to the global support forum be displayed?'] = 'Mostrare il collegamento al forum di supporto globale?'; -$a->strings['Add a link to the local support forum'] = 'Aggiunge un collegamento al forum di supporto locale'; -$a->strings['If you have a local support forum and want to have a link displayed in the widget, check this box.'] = 'Se hai un forum di supporto locale e vuoi che sia mostrato il collegamento nel widget, seleziona questo box.'; $a->strings['Name of the local support group'] = 'Nome del gruppo locale di supporto'; $a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Se hai selezionato il box sopra, specifica qui il nome utente del gruppo locale di supporto (e.s. \'supporto\')'; diff --git a/newmemberwidget/lang/nl/messages.po b/newmemberwidget/lang/nl/messages.po index a1ce7269..232ae370 100644 --- a/newmemberwidget/lang/nl/messages.po +++ b/newmemberwidget/lang/nl/messages.po @@ -4,72 +4,73 @@ # # # Translators: +# a a , 2019 # Jeroen De Meerleer , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-01 14:12+0200\n" -"PO-Revision-Date: 2018-08-24 13:40+0000\n" -"Last-Translator: Jeroen De Meerleer \n" -"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: a a , 2019\n" +"Language-Team: Dutch (http://app.transifex.com/Friendica/friendica/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: newmemberwidget.php:21 +#: newmemberwidget.php:29 msgid "New Member" msgstr "Nieuw lid" -#: newmemberwidget.php:22 +#: newmemberwidget.php:30 msgid "Tips for New Members" msgstr "Tips voor nieuwe leden" -#: newmemberwidget.php:24 +#: newmemberwidget.php:33 msgid "Global Support Forum" msgstr "" -#: newmemberwidget.php:26 +#: newmemberwidget.php:37 msgid "Local Support Forum" msgstr "" -#: newmemberwidget.php:49 +#: newmemberwidget.php:65 msgid "Save Settings" msgstr "Instellingen opslaan" -#: newmemberwidget.php:50 +#: newmemberwidget.php:66 msgid "Message" -msgstr "" +msgstr "Bericht" -#: newmemberwidget.php:50 +#: newmemberwidget.php:66 msgid "Your message for new members. You can use bbcode here." -msgstr "" +msgstr "Uw bericht aan nieuwe leden. U kunt hier bbcode gebruiken." -#: newmemberwidget.php:51 +#: newmemberwidget.php:67 msgid "Add a link to global support forum" msgstr "" -#: newmemberwidget.php:51 +#: newmemberwidget.php:67 msgid "Should a link to the global support forum be displayed?" msgstr "" -#: newmemberwidget.php:52 +#: newmemberwidget.php:68 msgid "Add a link to the local support forum" msgstr "" -#: newmemberwidget.php:52 +#: newmemberwidget.php:68 msgid "" -"If you have a local support forum and wand to have a link displayed in the " +"If you have a local support forum and want to have a link displayed in the " "widget, check this box." msgstr "" -#: newmemberwidget.php:53 +#: newmemberwidget.php:69 msgid "Name of the local support group" msgstr "" -#: newmemberwidget.php:53 +#: newmemberwidget.php:69 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/nl/strings.php b/newmemberwidget/lang/nl/strings.php index 0d492eea..e81e7fcd 100644 --- a/newmemberwidget/lang/nl/strings.php +++ b/newmemberwidget/lang/nl/strings.php @@ -8,3 +8,5 @@ function string_plural_select_nl($n){ $a->strings['New Member'] = 'Nieuw lid'; $a->strings['Tips for New Members'] = 'Tips voor nieuwe leden'; $a->strings['Save Settings'] = 'Instellingen opslaan'; +$a->strings['Message'] = 'Bericht'; +$a->strings['Your message for new members. You can use bbcode here.'] = 'Uw bericht aan nieuwe leden. U kunt hier bbcode gebruiken.'; diff --git a/newmemberwidget/lang/pl/messages.po b/newmemberwidget/lang/pl/messages.po index 3f1838b5..90dda1ff 100644 --- a/newmemberwidget/lang/pl/messages.po +++ b/newmemberwidget/lang/pl/messages.po @@ -10,10 +10,10 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" "PO-Revision-Date: 2014-06-23 10:26+0000\n" "Last-Translator: Piotr Strębski , 2022\n" -"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" +"Language-Team: Polish (http://app.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -29,48 +29,48 @@ msgid "Tips for New Members" msgstr "Wskazówki dla nowych użytkowników" #: newmemberwidget.php:33 -msgid "Global Support Forum" -msgstr "Globalne forum pomocy technicznej" +msgid "Global Support Group" +msgstr "" #: newmemberwidget.php:37 -msgid "Local Support Forum" -msgstr "Lokalne Forum Wsparcia" +msgid "Local Support Group" +msgstr "" -#: newmemberwidget.php:65 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Message" msgstr "Wiadomość" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "Twoja wiadomość dla nowych członków. Możesz tutaj użyć bbcode." -#: newmemberwidget.php:67 -msgid "Add a link to global support forum" -msgstr "Dodaj odnośnik do globalnego forum pomocy technicznej" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" +msgstr "" -#: newmemberwidget.php:67 -msgid "Should a link to the global support forum be displayed?" -msgstr "Czy powinien być wyświetlany odnośnik do globalnego forum pomocy technicznej?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" +msgstr "" -#: newmemberwidget.php:68 -msgid "Add a link to the local support forum" -msgstr "Dodaj odnośnik do lokalnego forum pomocy technicznej" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" +msgstr "" -#: newmemberwidget.php:68 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and want to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." -msgstr "Jeżeli masz lokalne wsparcie forum i chcesz mieć łącze wyświetlane w widżecie, zaznacz to pole wyboru." +msgstr "" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "Nazwa grupy lokalnej pomocy technicznej" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/pl/strings.php b/newmemberwidget/lang/pl/strings.php index 97103add..22a9e9a9 100644 --- a/newmemberwidget/lang/pl/strings.php +++ b/newmemberwidget/lang/pl/strings.php @@ -7,14 +7,8 @@ function string_plural_select_pl($n){ }} $a->strings['New Member'] = 'Nowy użytkownik'; $a->strings['Tips for New Members'] = 'Wskazówki dla nowych użytkowników'; -$a->strings['Global Support Forum'] = 'Globalne forum pomocy technicznej'; -$a->strings['Local Support Forum'] = 'Lokalne Forum Wsparcia'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Message'] = 'Wiadomość'; $a->strings['Your message for new members. You can use bbcode here.'] = 'Twoja wiadomość dla nowych członków. Możesz tutaj użyć bbcode.'; -$a->strings['Add a link to global support forum'] = 'Dodaj odnośnik do globalnego forum pomocy technicznej'; -$a->strings['Should a link to the global support forum be displayed?'] = 'Czy powinien być wyświetlany odnośnik do globalnego forum pomocy technicznej?'; -$a->strings['Add a link to the local support forum'] = 'Dodaj odnośnik do lokalnego forum pomocy technicznej'; -$a->strings['If you have a local support forum and want to have a link displayed in the widget, check this box.'] = 'Jeżeli masz lokalne wsparcie forum i chcesz mieć łącze wyświetlane w widżecie, zaznacz to pole wyboru.'; $a->strings['Name of the local support group'] = 'Nazwa grupy lokalnej pomocy technicznej'; $a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Jeśli zaznaczyłeś powyższe, określ tutaj pseudonim lokalnej grupy wsparcia (np. Pomocnicy)'; diff --git a/newmemberwidget/lang/ru/messages.po b/newmemberwidget/lang/ru/messages.po index 94d61e3f..1fe611e9 100644 --- a/newmemberwidget/lang/ru/messages.po +++ b/newmemberwidget/lang/ru/messages.po @@ -9,67 +9,67 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-01 14:12+0200\n" -"PO-Revision-Date: 2020-04-23 14:23+0000\n" -"Last-Translator: Alexander An \n" -"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: Alexander An , 2020\n" +"Language-Team: Russian (http://app.transifex.com/Friendica/friendica/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: newmemberwidget.php:21 +#: newmemberwidget.php:29 msgid "New Member" msgstr "Новичок" -#: newmemberwidget.php:22 +#: newmemberwidget.php:30 msgid "Tips for New Members" msgstr "Советы новичкам" -#: newmemberwidget.php:24 -msgid "Global Support Forum" -msgstr "Общий форум поддержки" +#: newmemberwidget.php:33 +msgid "Global Support Group" +msgstr "" -#: newmemberwidget.php:26 -msgid "Local Support Forum" -msgstr "Местный форум поддержки" +#: newmemberwidget.php:37 +msgid "Local Support Group" +msgstr "" -#: newmemberwidget.php:49 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "Сохранить настройки" -#: newmemberwidget.php:50 +#: newmemberwidget.php:63 msgid "Message" msgstr "Сообщение" -#: newmemberwidget.php:50 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "Ваше сообщение новичкам. Вы можете использовать BBCode." -#: newmemberwidget.php:51 -msgid "Add a link to global support forum" -msgstr "Добавить ссылку на общий форум поддержки" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" +msgstr "" -#: newmemberwidget.php:51 -msgid "Should a link to the global support forum be displayed?" -msgstr "Показывать ссылку на общий форум поддержки?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" +msgstr "" -#: newmemberwidget.php:52 -msgid "Add a link to the local support forum" -msgstr "Добавить ссылку на местный форум поддержки" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" +msgstr "" -#: newmemberwidget.php:52 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and wand to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." -msgstr "Если у вас есть местный форум поддержки и вы хотите добавить ссылку на него, включите это." +msgstr "" -#: newmemberwidget.php:53 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "Название местной группы поддержки" -#: newmemberwidget.php:53 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/ru/strings.php b/newmemberwidget/lang/ru/strings.php index 7992e64b..6f27bb1a 100644 --- a/newmemberwidget/lang/ru/strings.php +++ b/newmemberwidget/lang/ru/strings.php @@ -7,14 +7,8 @@ function string_plural_select_ru($n){ }} $a->strings['New Member'] = 'Новичок'; $a->strings['Tips for New Members'] = 'Советы новичкам'; -$a->strings['Global Support Forum'] = 'Общий форум поддержки'; -$a->strings['Local Support Forum'] = 'Местный форум поддержки'; $a->strings['Save Settings'] = 'Сохранить настройки'; $a->strings['Message'] = 'Сообщение'; $a->strings['Your message for new members. You can use bbcode here.'] = 'Ваше сообщение новичкам. Вы можете использовать BBCode.'; -$a->strings['Add a link to global support forum'] = 'Добавить ссылку на общий форум поддержки'; -$a->strings['Should a link to the global support forum be displayed?'] = 'Показывать ссылку на общий форум поддержки?'; -$a->strings['Add a link to the local support forum'] = 'Добавить ссылку на местный форум поддержки'; -$a->strings['If you have a local support forum and wand to have a link displayed in the widget, check this box.'] = 'Если у вас есть местный форум поддержки и вы хотите добавить ссылку на него, включите это.'; $a->strings['Name of the local support group'] = 'Название местной группы поддержки'; $a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Если вы включили настройку выше, укажите никместной группы поддержки пользователей.'; diff --git a/newmemberwidget/lang/sv/messages.po b/newmemberwidget/lang/sv/messages.po index 0d6171b2..a1a6167a 100644 --- a/newmemberwidget/lang/sv/messages.po +++ b/newmemberwidget/lang/sv/messages.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2022-01-16 00:48+0000\n" -"Last-Translator: Kristoffer Grundström \n" -"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: Kristoffer Grundström , 2022\n" +"Language-Team: Swedish (http://app.transifex.com/Friendica/friendica/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -28,48 +28,48 @@ msgid "Tips for New Members" msgstr "Tips för nya medlemmar" #: newmemberwidget.php:33 -msgid "Global Support Forum" +msgid "Global Support Group" msgstr "" #: newmemberwidget.php:37 -msgid "Local Support Forum" -msgstr "Lokalt hjälpforum" +msgid "Local Support Group" +msgstr "" -#: newmemberwidget.php:65 +#: newmemberwidget.php:62 msgid "Save Settings" msgstr "Spara inställningar" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Message" msgstr "Meddelande" -#: newmemberwidget.php:66 +#: newmemberwidget.php:63 msgid "Your message for new members. You can use bbcode here." msgstr "" -#: newmemberwidget.php:67 -msgid "Add a link to global support forum" +#: newmemberwidget.php:64 +msgid "Add a link to global support group" msgstr "" -#: newmemberwidget.php:67 -msgid "Should a link to the global support forum be displayed?" +#: newmemberwidget.php:64 +msgid "Should a link to the global support group be displayed?" msgstr "" -#: newmemberwidget.php:68 -msgid "Add a link to the local support forum" +#: newmemberwidget.php:65 +msgid "Add a link to the local support group" msgstr "" -#: newmemberwidget.php:68 +#: newmemberwidget.php:65 msgid "" -"If you have a local support forum and want to have a link displayed in the " +"If you have a local support group and want to have a link displayed in the " "widget, check this box." msgstr "" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "Name of the local support group" msgstr "" -#: newmemberwidget.php:69 +#: newmemberwidget.php:66 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/sv/strings.php b/newmemberwidget/lang/sv/strings.php index 38292306..e92a428f 100644 --- a/newmemberwidget/lang/sv/strings.php +++ b/newmemberwidget/lang/sv/strings.php @@ -7,6 +7,5 @@ function string_plural_select_sv($n){ }} $a->strings['New Member'] = 'Ny medlem'; $a->strings['Tips for New Members'] = 'Tips för nya medlemmar'; -$a->strings['Local Support Forum'] = 'Lokalt hjälpforum'; $a->strings['Save Settings'] = 'Spara inställningar'; $a->strings['Message'] = 'Meddelande'; diff --git a/newmemberwidget/newmemberwidget.php b/newmemberwidget/newmemberwidget.php index 5689971b..ba7dfb39 100644 --- a/newmemberwidget/newmemberwidget.php +++ b/newmemberwidget/newmemberwidget.php @@ -6,17 +6,16 @@ * Author: Tobias Diekershoff ***/ -use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; +use Friendica\Model\User; function newmemberwidget_install() { Hook::register( 'network_mod_init', 'addon/newmemberwidget/newmemberwidget.php', 'newmemberwidget_network_mod_init'); - Logger::notice('newmemberwidget installed'); + DI::logger()->notice('newmemberwidget installed'); } function newmemberwidget_network_mod_init ($b) @@ -30,16 +29,16 @@ function newmemberwidget_network_mod_init ($b) $t .= '' . DI::l10n()->t('Tips for New Members') . '
'; if (DI::config()->get('newmemberwidget','linkglobalsupport', false)) { - $t .= ''.DI::l10n()->t('Global Support Forum').'
'; + $t .= '' . DI::l10n()->t('Global Support Group') . '
'; } if (DI::config()->get('newmemberwidget','linklocalsupport', false)) { - $t .= ''.DI::l10n()->t('Local Support Forum').'
'; + $t .= '' . DI::l10n()->t('Local Support Group') . '
'; } $ft = DI::config()->get('newmemberwidget','freetext', ''); if (!empty($ft)) { - $t .= '

'.BBCode::convert(trim($ft)).'

'; + $t .= '

'.BBCode::convertForUriId(User::getSystemUriId(), trim($ft)).'

'; } $t .= '
'; @@ -61,8 +60,8 @@ function newmemberwidget_addon_admin(string &$o) $o = Renderer::replaceMacros($t, [ '$submit' => DI::l10n()->t('Save Settings'), '$freetext' => ["freetext", DI::l10n()->t("Message"), DI::config()->get("newmemberwidget", "freetext"), DI::l10n()->t("Your message for new members. You can use bbcode here.")], - '$linkglobalsupport' => ["linkglobalsupport", DI::l10n()->t('Add a link to global support forum'), DI::config()->get('newmemberwidget', 'linkglobalsupport'), DI::l10n()->t('Should a link to the global support forum be displayed?')." (@helpers)"], - '$linklocalsupport' => ["linklocalsupport", DI::l10n()->t('Add a link to the local support forum'), DI::config()->get('newmemberwidget', 'linklocalsupport'), DI::l10n()->t('If you have a local support forum and want to have a link displayed in the widget, check this box.')], + '$linkglobalsupport' => ["linkglobalsupport", DI::l10n()->t('Add a link to global support group'), DI::config()->get('newmemberwidget', 'linkglobalsupport'), DI::l10n()->t('Should a link to the global support group be displayed?')." (@helpers)"], + '$linklocalsupport' => ["linklocalsupport", DI::l10n()->t('Add a link to the local support group'), DI::config()->get('newmemberwidget', 'linklocalsupport'), DI::l10n()->t('If you have a local support group and want to have a link displayed in the widget, check this box.')], '$localsupportname' => ["localsupportname", DI::l10n()->t('Name of the local support group'), DI::config()->get('newmemberwidget', 'localsupport'), DI::l10n()->t('If you checked the above, specify the nickname of the local support group here (i.e. helpers)')], ]); } diff --git a/nitter/nitter.php b/nitter/nitter.php index e9454c5d..adbfd6b0 100644 --- a/nitter/nitter.php +++ b/nitter/nitter.php @@ -4,18 +4,20 @@ * Description: Replaces links to twitter.com to a nitter server in all displays of postings on a node. * Version: 2.0 * Author: Tobias Diekershoff + * Status: Unsupported + * Note: Please use the URL Replace addon instead * * Copyright (c) 2020 Tobias Diekershoff * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and * associated documentation files (the "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to * the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all copies or substantial * portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, @@ -23,7 +25,6 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; @@ -49,7 +50,7 @@ function nitter_addon_admin(string &$o) $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/nitter/'); $o = Renderer::replaceMacros($t, [ '$settingdescription' => DI::l10n()->t('Which nitter server shall be used for the replacements in the post bodies? Use the URL with servername and protocol. See %s for a list of available public Nitter servers.', 'https://github.com/zedeus/nitter/wiki/Instances'), - '$nitterserver' => ['nitterserver', DI::l10n()->t('Nitter server'), $nitterserver, 'https://example.com'], + '$nitterserver' => ['nitterserver', DI::l10n()->t('Nitter server'), $nitterserver, 'https://example.com'], '$submit' => DI::l10n()->t('Save Settings'), ]); } diff --git a/nominatim/nominatim.php b/nominatim/nominatim.php index 6ad4a8a3..3a567b7b 100644 --- a/nominatim/nominatim.php +++ b/nominatim/nominatim.php @@ -6,9 +6,7 @@ * Author: Michael Vogel */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; @@ -46,19 +44,19 @@ function nominatim_resolve_item(array &$item) $s = DI::httpClient()->fetch('https://nominatim.openstreetmap.org/reverse?lat=' . $coords[0] . '&lon=' . $coords[1] . '&format=json&addressdetails=0&accept-language=' . $language); if (empty($s)) { - Logger::info('API could not be queried'); + DI::logger()->info('API could not be queried'); return; } $data = json_decode($s, true); if (empty($data['display_name'])) { - Logger::info('No results found for coordinates', ['coordinates' => $item['coord'], 'data' => $data]); + DI::logger()->info('No results found for coordinates', ['coordinates' => $item['coord'], 'data' => $data]); return; } $item['location'] = $data['display_name']; - Logger::info('Got location', ['lat' => $coords[0], 'long' => $coords[1], 'location' => $item['location']]); + DI::logger()->info('Got location', ['lat' => $coords[0], 'long' => $coords[1], 'location' => $item['location']]); if (!empty($item['location'])) { DI::cache()->set('nominatim:' . $language . ':' . $coords[0] . '-' . $coords[1], $item['location']); diff --git a/notifyall/NotifyAllEmail.php b/notifyall/NotifyAllEmail.php index abdb9549..7a00a2c9 100644 --- a/notifyall/NotifyAllEmail.php +++ b/notifyall/NotifyAllEmail.php @@ -25,6 +25,7 @@ use Friendica\App\BaseURL; use Friendica\Content\Text\BBCode; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; +use Friendica\Model\User; use Friendica\Object\Email; /** @@ -43,16 +44,16 @@ class NotifyAllEmail extends Email } if (!$config->get('config', 'sender_email')) { - $sender_email = 'noreply@' . $baseUrl->getHostname(); + $sender_email = 'noreply@' . $baseUrl->getHost(); } else { $sender_email = $config->get('config', 'sender_email'); } $subject = $_REQUEST['subject']; - $textversion = strip_tags(html_entity_decode(BBCode::convert(stripslashes(str_replace(["\\r", "\\n"], ["", "\n"], $text))), ENT_QUOTES, 'UTF-8')); + $textversion = strip_tags(html_entity_decode(BBCode::convertForUriId(User::getSystemUriId(), stripslashes(str_replace(["\\r", "\\n"], ["", "\n"], $text))), ENT_QUOTES, 'UTF-8')); - $htmlversion = BBCode::convert(stripslashes(str_replace(["\\r", "\\n"], ["", "
\n"], $text))); + $htmlversion = BBCode::convertForUriId(User::getSystemUriId(), stripslashes(str_replace(["\\r", "\\n"], ["", "
\n"], $text))); parent::__construct($sender_name, $sender_email, $sender_email, '', $subject, $htmlversion, $textversion); } diff --git a/notifyall/lang/de/messages.po b/notifyall/lang/de/messages.po index c8b4deac..372694ef 100644 --- a/notifyall/lang/de/messages.po +++ b/notifyall/lang/de/messages.po @@ -15,7 +15,7 @@ msgstr "" "POT-Creation-Date: 2021-02-01 18:15+0100\n" "PO-Revision-Date: 2016-08-14 19:29+0000\n" "Last-Translator: Ulf Rompe , 2019\n" -"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n" +"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/notifyall/lang/hu/messages.po b/notifyall/lang/hu/messages.po index 808d22ea..8d030ab8 100644 --- a/notifyall/lang/hu/messages.po +++ b/notifyall/lang/hu/messages.po @@ -14,7 +14,7 @@ msgstr "" "POT-Creation-Date: 2021-02-01 18:15+0100\n" "PO-Revision-Date: 2016-08-14 19:29+0000\n" "Last-Translator: Balázs Úr, 2021\n" -"Language-Team: Hungarian (https://www.transifex.com/Friendica/teams/12172/hu/)\n" +"Language-Team: Hungarian (https://app.transifex.com/Friendica/teams/12172/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/notifyall/lang/it/messages.po b/notifyall/lang/it/messages.po index 1667afe8..d590306b 100644 --- a/notifyall/lang/it/messages.po +++ b/notifyall/lang/it/messages.po @@ -15,12 +15,12 @@ msgstr "" "POT-Creation-Date: 2021-02-01 18:15+0100\n" "PO-Revision-Date: 2016-08-14 19:29+0000\n" "Last-Translator: fabrixxm , 2017\n" -"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n" +"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: NotifyAllEmail.php:40 #, php-format diff --git a/notifyall/lang/it/strings.php b/notifyall/lang/it/strings.php index 0d719df1..630f693a 100644 --- a/notifyall/lang/it/strings.php +++ b/notifyall/lang/it/strings.php @@ -3,7 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['%s Administrator'] = 'Amministratore %s'; $a->strings['%1$s, %2$s Administrator'] = '%1$s, amministratore di %2$s'; diff --git a/notifyall/notifyall.php b/notifyall/notifyall.php index 0c291f04..f814c4f5 100644 --- a/notifyall/notifyall.php +++ b/notifyall/notifyall.php @@ -9,9 +9,7 @@ */ use Friendica\Addon\notifyall\NotifyAllEmail; -use Friendica\App; use Friendica\Database\DBA; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; @@ -24,7 +22,7 @@ function notifyall_module() {} function notifyall_addon_admin(string &$o) { - $o = '
    ' . DI::l10n()->t('Send email to all members') . '
'; + $o = '
    ' . DI::l10n()->t('Send email to all members') . '
'; } @@ -59,7 +57,7 @@ function notifyall_post() $notifyEmail = new NotifyAllEmail(DI::l10n(), DI::config(), DI::baseUrl(), $text); - foreach ($recipients as $recipient) { + foreach (DBA::toArray($recipients) as $recipient) { DI::emailer()->send($notifyEmail->withRecipient($recipient['email'])); } diff --git a/nsfw/lang/cs/messages.po b/nsfw/lang/cs/messages.po index fc585d80..34a931ad 100644 --- a/nsfw/lang/cs/messages.po +++ b/nsfw/lang/cs/messages.po @@ -11,21 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 11:11-0400\n" -"PO-Revision-Date: 2018-08-16 10:09+0000\n" -"Last-Translator: Aditoo\n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"POT-Creation-Date: 2022-12-10 14:42-0500\n" +"PO-Revision-Date: 2014-06-23 10:34+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: nsfw.php:77 nsfw.php:81 -msgid "Content Filter (NSFW and more)" -msgstr "Filtr obsahu (citlivý obsah a další)" - -#: nsfw.php:85 +#: nsfw.php:65 msgid "" "This addon searches for specified words/text in posts and collapses them. It" " can be used to filter content tagged with for instance #NSFW that may be " @@ -33,32 +29,35 @@ msgid "" "is also useful for hiding irrelevant or annoying content from direct view." msgstr "Tento doplněk vyhledává specifikovaná slova/text v příspěvcích a skrývá je. Může být použit pro filtrování obsahu označeného štítky, jako například #NSFW, který může být považován za nevhodný v určitých časech či místech, například když jste v práci. Může být také užitečný ke skrývání nepodstatného či nepříjemného obsahu z přímého pohledu." -#: nsfw.php:86 +#: nsfw.php:66 msgid "Enable Content filter" msgstr "Povolit filtr obsahu" -#: nsfw.php:89 +#: nsfw.php:67 msgid "Comma separated list of keywords to hide" -msgstr "Čárkou oddělený seznam klíčových slov ke skrytí" +msgstr "Seznam klíčových slov ke skrytí, oddělených čárkami" -#: nsfw.php:93 -msgid "Save Settings" -msgstr "Uložit nastavení" +#: nsfw.php:67 +msgid "" +"Use /expression/ to provide regular expressions, #tag to specfically match " +"hashtags (case-insensitive), or regular words (case-sensitive)" +msgstr "" -#: nsfw.php:94 -msgid "Use /expression/ to provide regular expressions" -msgstr "Použijte /výraz/ pro použití regulárních výrazů" +#: nsfw.php:72 +msgid "Content Filter (NSFW and more)" +msgstr "Filtr obsahu (citlivý obsah a další)" -#: nsfw.php:109 -msgid "NSFW Settings saved." -msgstr "Nastavení NSFW uloženo" +#: nsfw.php:96 +#, php-format +msgid "Regular expression \"%s\" fails to compile" +msgstr "" -#: nsfw.php:162 +#: nsfw.php:154 #, php-format msgid "Filtered tag: %s" -msgstr "Filtrovaná značka: %s" +msgstr "Filtrovaný štítek: %s" -#: nsfw.php:164 +#: nsfw.php:156 #, php-format msgid "Filtered word: %s" msgstr "Filtrované slovo: %s" diff --git a/nsfw/lang/cs/strings.php b/nsfw/lang/cs/strings.php index 8b5fccca..4898f2f1 100644 --- a/nsfw/lang/cs/strings.php +++ b/nsfw/lang/cs/strings.php @@ -5,12 +5,9 @@ function string_plural_select_cs($n){ $n = intval($n); if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} -$a->strings['Content Filter (NSFW and more)'] = 'Filtr obsahu (citlivý obsah a další)'; $a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Tento doplněk vyhledává specifikovaná slova/text v příspěvcích a skrývá je. Může být použit pro filtrování obsahu označeného štítky, jako například #NSFW, který může být považován za nevhodný v určitých časech či místech, například když jste v práci. Může být také užitečný ke skrývání nepodstatného či nepříjemného obsahu z přímého pohledu.'; $a->strings['Enable Content filter'] = 'Povolit filtr obsahu'; -$a->strings['Comma separated list of keywords to hide'] = 'Čárkou oddělený seznam klíčových slov ke skrytí'; -$a->strings['Save Settings'] = 'Uložit nastavení'; -$a->strings['Use /expression/ to provide regular expressions'] = 'Použijte /výraz/ pro použití regulárních výrazů'; -$a->strings['NSFW Settings saved.'] = 'Nastavení NSFW uloženo'; -$a->strings['Filtered tag: %s'] = 'Filtrovaná značka: %s'; +$a->strings['Comma separated list of keywords to hide'] = 'Seznam klíčových slov ke skrytí, oddělených čárkami'; +$a->strings['Content Filter (NSFW and more)'] = 'Filtr obsahu (citlivý obsah a další)'; +$a->strings['Filtered tag: %s'] = 'Filtrovaný štítek: %s'; $a->strings['Filtered word: %s'] = 'Filtrované slovo: %s'; diff --git a/nsfw/lang/de/messages.po b/nsfw/lang/de/messages.po index 350b2bbe..4fefb60c 100644 --- a/nsfw/lang/de/messages.po +++ b/nsfw/lang/de/messages.po @@ -6,6 +6,7 @@ # Translators: # Andreas H., 2014 # hoergen , 2018 +# foss , 2022 # Tobias Diekershoff , 2014 # Tobias Diekershoff , 2018,2022 # Ulf Rompe , 2019 @@ -13,10 +14,10 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-18 11:57-0500\n" +"POT-Creation-Date: 2022-12-10 14:42-0500\n" "PO-Revision-Date: 2014-06-23 10:34+0000\n" -"Last-Translator: Tobias Diekershoff , 2018,2022\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"Last-Translator: foss , 2022\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -49,12 +50,17 @@ msgstr "Verwende /ausdruck/ für reguläre Ausdrücke, #tag um einen speziellen msgid "Content Filter (NSFW and more)" msgstr "Inhaltsfilter (NSFW und mehr)" -#: nsfw.php:140 +#: nsfw.php:96 +#, php-format +msgid "Regular expression \"%s\" fails to compile" +msgstr "Regulärer Ausdruck \"%s\" schlägt beim Kompiliern fehl." + +#: nsfw.php:154 #, php-format msgid "Filtered tag: %s" msgstr "Gefiltertes Schlagwort: %s" -#: nsfw.php:142 +#: nsfw.php:156 #, php-format msgid "Filtered word: %s" msgstr "Gefilterter Begriff: %s" diff --git a/nsfw/lang/de/strings.php b/nsfw/lang/de/strings.php index e538e37c..9e0546ad 100644 --- a/nsfw/lang/de/strings.php +++ b/nsfw/lang/de/strings.php @@ -10,5 +10,6 @@ $a->strings['Enable Content filter'] = 'Aktiviere den Inhaltsfilter'; $a->strings['Comma separated list of keywords to hide'] = 'Durch Kommata getrennte Liste von Schlüsselwörtern, die verborgen werden sollen'; $a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Verwende /ausdruck/ für reguläre Ausdrücke, #tag um einen speziellen Hashtag zu filtern (unabhängig von der Groß- und Kleinschreibung) oder einfache Wörter (Groß- und Kleinschreibung beachten).'; $a->strings['Content Filter (NSFW and more)'] = 'Inhaltsfilter (NSFW und mehr)'; +$a->strings['Regular expression "%s" fails to compile'] = 'Regulärer Ausdruck "%s" schlägt beim Kompiliern fehl.'; $a->strings['Filtered tag: %s'] = 'Gefiltertes Schlagwort: %s'; $a->strings['Filtered word: %s'] = 'Gefilterter Begriff: %s'; diff --git a/nsfw/lang/es/messages.po b/nsfw/lang/es/messages.po index d1a72567..43fde3cb 100644 --- a/nsfw/lang/es/messages.po +++ b/nsfw/lang/es/messages.po @@ -10,21 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-04-06 01:49+0000\n" -"Last-Translator: Senex Petrovic \n" -"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n" +"POT-Creation-Date: 2022-12-10 14:42-0500\n" +"PO-Revision-Date: 2014-06-23 10:34+0000\n" +"Last-Translator: Senex Petrovic , 2021\n" +"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: nsfw.php:68 nsfw.php:72 -msgid "Content Filter (NSFW and more)" -msgstr "Filtro de contenido (NSFW y más)" - -#: nsfw.php:76 +#: nsfw.php:65 msgid "" "This addon searches for specified words/text in posts and collapses them. It" " can be used to filter content tagged with for instance #NSFW that may be " @@ -32,28 +28,35 @@ msgid "" "is also useful for hiding irrelevant or annoying content from direct view." msgstr "Este complemento busca palabras / texto específicos en las publicaciones y las contrae. Se puede utilizar para filtrar contenido etiquetado con, por ejemplo, #NSFW que puede considerarse inapropiado en determinados momentos o lugares, como en el trabajo. También es útil para ocultar contenido irrelevante o molesto de la vista directa." -#: nsfw.php:77 +#: nsfw.php:66 msgid "Enable Content filter" msgstr "Habilitar filtro de contenido" -#: nsfw.php:80 +#: nsfw.php:67 msgid "Comma separated list of keywords to hide" msgstr "Lista de palabras claves separadas por coma para colapsar el contenido correspondiente." -#: nsfw.php:84 -msgid "Save Settings" -msgstr "Grabar ajustes" +#: nsfw.php:67 +msgid "" +"Use /expression/ to provide regular expressions, #tag to specfically match " +"hashtags (case-insensitive), or regular words (case-sensitive)" +msgstr "" -#: nsfw.php:85 -msgid "Use /expression/ to provide regular expressions" -msgstr "Utiliza /expresión/ para proveer expresiones regulares." +#: nsfw.php:72 +msgid "Content Filter (NSFW and more)" +msgstr "Filtro de contenido (NSFW y más)" -#: nsfw.php:152 +#: nsfw.php:96 +#, php-format +msgid "Regular expression \"%s\" fails to compile" +msgstr "" + +#: nsfw.php:154 #, php-format msgid "Filtered tag: %s" msgstr "Etiqueta filtrada: %s" -#: nsfw.php:154 +#: nsfw.php:156 #, php-format msgid "Filtered word: %s" msgstr "Palabra filtrada: %s" diff --git a/nsfw/lang/es/strings.php b/nsfw/lang/es/strings.php index e46967a6..4b41bd14 100644 --- a/nsfw/lang/es/strings.php +++ b/nsfw/lang/es/strings.php @@ -3,13 +3,11 @@ if(! function_exists("string_plural_select_es")) { function string_plural_select_es($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Content Filter (NSFW and more)'] = 'Filtro de contenido (NSFW y más)'; $a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Este complemento busca palabras / texto específicos en las publicaciones y las contrae. Se puede utilizar para filtrar contenido etiquetado con, por ejemplo, #NSFW que puede considerarse inapropiado en determinados momentos o lugares, como en el trabajo. También es útil para ocultar contenido irrelevante o molesto de la vista directa.'; $a->strings['Enable Content filter'] = 'Habilitar filtro de contenido'; $a->strings['Comma separated list of keywords to hide'] = 'Lista de palabras claves separadas por coma para colapsar el contenido correspondiente.'; -$a->strings['Save Settings'] = 'Grabar ajustes'; -$a->strings['Use /expression/ to provide regular expressions'] = 'Utiliza /expresión/ para proveer expresiones regulares.'; +$a->strings['Content Filter (NSFW and more)'] = 'Filtro de contenido (NSFW y más)'; $a->strings['Filtered tag: %s'] = 'Etiqueta filtrada: %s'; $a->strings['Filtered word: %s'] = 'Palabra filtrada: %s'; diff --git a/nsfw/lang/fr/messages.po b/nsfw/lang/fr/messages.po index 58066902..2af1c3d4 100644 --- a/nsfw/lang/fr/messages.po +++ b/nsfw/lang/fr/messages.po @@ -4,17 +4,18 @@ # # # Translators: -# Nicolas Derive, 2022 +# cracrayol, 2023-2024 +# Nicolas Derive, 2022-2023 # StefOfficiel , 2015 # Vincent Vindarel , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-18 11:57-0500\n" +"POT-Creation-Date: 2022-12-10 14:42-0500\n" "PO-Revision-Date: 2014-06-23 10:34+0000\n" -"Last-Translator: Nicolas Derive, 2022\n" -"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" +"Last-Translator: cracrayol, 2023-2024\n" +"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -41,18 +42,23 @@ msgstr "Liste de mots-clés - séparés par des virgules - à cacher" msgid "" "Use /expression/ to provide regular expressions, #tag to specfically match " "hashtags (case-insensitive), or regular words (case-sensitive)" -msgstr "Utiliser /expression/ pour fournir des expressions régulières, #tag pour correspondre à un mot-dièse (hashtag, insensible à la casse), ou des mots classiques (sensible à la casse)" +msgstr "Utiliser /expression/ pour fournir des expressions régulières, #etiquette pour correspondre à une étiquette (insensible à la casse), ou des mots classiques (sensible à la casse)" #: nsfw.php:72 msgid "Content Filter (NSFW and more)" msgstr "Filtre de contenu (NSFW et autres)" -#: nsfw.php:140 +#: nsfw.php:96 +#, php-format +msgid "Regular expression \"%s\" fails to compile" +msgstr "La compilation de l'expression régulière \"%s\" a échoué" + +#: nsfw.php:154 #, php-format msgid "Filtered tag: %s" -msgstr "Tag filtré: %s" +msgstr "Tag filtré : %s" -#: nsfw.php:142 +#: nsfw.php:156 #, php-format msgid "Filtered word: %s" msgstr "Mot filtré: %s" diff --git a/nsfw/lang/fr/strings.php b/nsfw/lang/fr/strings.php index 7b334956..0f717797 100644 --- a/nsfw/lang/fr/strings.php +++ b/nsfw/lang/fr/strings.php @@ -8,7 +8,8 @@ function string_plural_select_fr($n){ $a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Cette extension recherche des mots/textes spécifiés dans les publications et les masque. Elle peut être utilisée pour filtrer le contenu étiqueté par exemple avec #NSFW qui peut être considéré comme inapproprié à certains moments ou endroits, comme par exemple au travail. Elle est aussi utile pour cacher du contenu non pertinent ou ennuyeux d\'une vue directe.'; $a->strings['Enable Content filter'] = 'Activer le filtrage de contenu'; $a->strings['Comma separated list of keywords to hide'] = 'Liste de mots-clés - séparés par des virgules - à cacher'; -$a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Utiliser /expression/ pour fournir des expressions régulières, #tag pour correspondre à un mot-dièse (hashtag, insensible à la casse), ou des mots classiques (sensible à la casse)'; +$a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Utiliser /expression/ pour fournir des expressions régulières, #etiquette pour correspondre à une étiquette (insensible à la casse), ou des mots classiques (sensible à la casse)'; $a->strings['Content Filter (NSFW and more)'] = 'Filtre de contenu (NSFW et autres)'; -$a->strings['Filtered tag: %s'] = 'Tag filtré: %s'; +$a->strings['Regular expression "%s" fails to compile'] = 'La compilation de l\'expression régulière "%s" a échoué'; +$a->strings['Filtered tag: %s'] = 'Tag filtré : %s'; $a->strings['Filtered word: %s'] = 'Mot filtré: %s'; diff --git a/nsfw/lang/hu/messages.po b/nsfw/lang/hu/messages.po index a862c0da..9632a2ff 100644 --- a/nsfw/lang/hu/messages.po +++ b/nsfw/lang/hu/messages.po @@ -4,15 +4,15 @@ # # # Translators: -# Balázs Úr, 2020-2022 +# Balázs Úr, 2020-2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-18 11:57-0500\n" +"POT-Creation-Date: 2022-12-10 14:42-0500\n" "PO-Revision-Date: 2014-06-23 10:34+0000\n" -"Last-Translator: Balázs Úr, 2020-2022\n" -"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n" +"Last-Translator: Balázs Úr, 2020-2023\n" +"Language-Team: Hungarian (http://app.transifex.com/Friendica/friendica/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -45,12 +45,17 @@ msgstr "Használjon /kifejezést/ reguláris kifejezések megadásához, #címk msgid "Content Filter (NSFW and more)" msgstr "Tartalomszűrő (érzékeny tartalmak és egyebek)" -#: nsfw.php:140 +#: nsfw.php:96 +#, php-format +msgid "Regular expression \"%s\" fails to compile" +msgstr "A(z) „%s” reguláris kifejezés nem fordítható le" + +#: nsfw.php:154 #, php-format msgid "Filtered tag: %s" msgstr "Kiszűrt címke: %s" -#: nsfw.php:142 +#: nsfw.php:156 #, php-format msgid "Filtered word: %s" msgstr "Kiszűrt szó: %s" diff --git a/nsfw/lang/hu/strings.php b/nsfw/lang/hu/strings.php index c837a423..5f335b3e 100644 --- a/nsfw/lang/hu/strings.php +++ b/nsfw/lang/hu/strings.php @@ -10,5 +10,6 @@ $a->strings['Enable Content filter'] = 'Tartalomszűrő engedélyezése'; $a->strings['Comma separated list of keywords to hide'] = 'Kulcsszavak vesszővel elválasztott listája az elrejtéshez'; $a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Használjon /kifejezést/ reguláris kifejezések megadásához, #címkét a kettőskeresztescímkék kifejezett illesztéséhez (nem érzékeny a kis- és nagybetűkre) vagy szabályos szavakat (kis- és nagybetűérzékeny)'; $a->strings['Content Filter (NSFW and more)'] = 'Tartalomszűrő (érzékeny tartalmak és egyebek)'; +$a->strings['Regular expression "%s" fails to compile'] = 'A(z) „%s” reguláris kifejezés nem fordítható le'; $a->strings['Filtered tag: %s'] = 'Kiszűrt címke: %s'; $a->strings['Filtered word: %s'] = 'Kiszűrt szó: %s'; diff --git a/nsfw/lang/it/messages.po b/nsfw/lang/it/messages.po index a84d0a13..eadbb1aa 100644 --- a/nsfw/lang/it/messages.po +++ b/nsfw/lang/it/messages.po @@ -5,26 +5,22 @@ # # Translators: # fabrixxm , 2014-2015,2018 -# Sylke Vicious , 2020 +# Sylke Vicious , 2020,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 11:11-0400\n" -"PO-Revision-Date: 2020-09-17 11:25+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2022-12-10 14:42-0500\n" +"PO-Revision-Date: 2014-06-23 10:34+0000\n" +"Last-Translator: Sylke Vicious , 2020,2023\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: nsfw.php:77 nsfw.php:81 -msgid "Content Filter (NSFW and more)" -msgstr "Filtro Contenuto (NSFW e altro)" - -#: nsfw.php:85 +#: nsfw.php:65 msgid "" "This addon searches for specified words/text in posts and collapses them. It" " can be used to filter content tagged with for instance #NSFW that may be " @@ -32,32 +28,35 @@ msgid "" "is also useful for hiding irrelevant or annoying content from direct view." msgstr "Questo componente aggiuntivo cerca per le parole specificate nei messaggi e li collassa. Può essere usato per filtrare contenuto taggato, per esempio, #NSFW (non sicuro per il lavoro), che può risultare inappropriato in certi orari o in certi luoghi, come appunto al lavoro. È anche utile per nascondere contenuto irrilevante o fastidioso." -#: nsfw.php:86 +#: nsfw.php:66 msgid "Enable Content filter" msgstr "Abilita il Filtro Contenuti" -#: nsfw.php:89 +#: nsfw.php:67 msgid "Comma separated list of keywords to hide" msgstr "Elenco separato da virgole di parole da nascondere" -#: nsfw.php:93 -msgid "Save Settings" -msgstr "Salva Impostazioni" +#: nsfw.php:67 +msgid "" +"Use /expression/ to provide regular expressions, #tag to specfically match " +"hashtags (case-insensitive), or regular words (case-sensitive)" +msgstr "Usa /expression/ per fornire espressioni regolari, #tag per gli hashtag che coincidono specificatamente (insensibile alle maiuscole), o parole normali (sensibile alle maiuscole)" -#: nsfw.php:94 -msgid "Use /expression/ to provide regular expressions" -msgstr "Utilizza /espressione/ per inserire espressioni regolari" +#: nsfw.php:72 +msgid "Content Filter (NSFW and more)" +msgstr "Filtro Contenuto (NSFW e altro)" -#: nsfw.php:109 -msgid "NSFW Settings saved." -msgstr "Impostazioni NSFW salvate." +#: nsfw.php:96 +#, php-format +msgid "Regular expression \"%s\" fails to compile" +msgstr "L'espressione regolare \"%s\" fallisce la compilazione" -#: nsfw.php:162 +#: nsfw.php:154 #, php-format msgid "Filtered tag: %s" msgstr "Tag filtrato: %s" -#: nsfw.php:164 +#: nsfw.php:156 #, php-format msgid "Filtered word: %s" msgstr "Parola filtrata: %s" diff --git a/nsfw/lang/it/strings.php b/nsfw/lang/it/strings.php index 05bd0112..ff963972 100644 --- a/nsfw/lang/it/strings.php +++ b/nsfw/lang/it/strings.php @@ -3,14 +3,13 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Content Filter (NSFW and more)'] = 'Filtro Contenuto (NSFW e altro)'; $a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Questo componente aggiuntivo cerca per le parole specificate nei messaggi e li collassa. Può essere usato per filtrare contenuto taggato, per esempio, #NSFW (non sicuro per il lavoro), che può risultare inappropriato in certi orari o in certi luoghi, come appunto al lavoro. È anche utile per nascondere contenuto irrilevante o fastidioso.'; $a->strings['Enable Content filter'] = 'Abilita il Filtro Contenuti'; $a->strings['Comma separated list of keywords to hide'] = 'Elenco separato da virgole di parole da nascondere'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; -$a->strings['Use /expression/ to provide regular expressions'] = 'Utilizza /espressione/ per inserire espressioni regolari'; -$a->strings['NSFW Settings saved.'] = 'Impostazioni NSFW salvate.'; +$a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Usa /expression/ per fornire espressioni regolari, #tag per gli hashtag che coincidono specificatamente (insensibile alle maiuscole), o parole normali (sensibile alle maiuscole)'; +$a->strings['Content Filter (NSFW and more)'] = 'Filtro Contenuto (NSFW e altro)'; +$a->strings['Regular expression "%s" fails to compile'] = 'L\'espressione regolare "%s" fallisce la compilazione'; $a->strings['Filtered tag: %s'] = 'Tag filtrato: %s'; $a->strings['Filtered word: %s'] = 'Parola filtrata: %s'; diff --git a/nsfw/lang/ru/messages.po b/nsfw/lang/ru/messages.po index caa7ef3a..b3298e11 100644 --- a/nsfw/lang/ru/messages.po +++ b/nsfw/lang/ru/messages.po @@ -9,21 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 11:11-0400\n" -"PO-Revision-Date: 2020-09-01 05:38+0000\n" -"Last-Translator: Alexander An \n" -"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"POT-Creation-Date: 2022-12-10 14:42-0500\n" +"PO-Revision-Date: 2014-06-23 10:34+0000\n" +"Last-Translator: Alexander An , 2020\n" +"Language-Team: Russian (http://app.transifex.com/Friendica/friendica/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: nsfw.php:77 nsfw.php:81 -msgid "Content Filter (NSFW and more)" -msgstr "Фильтр контента (NSFW и прочее)" - -#: nsfw.php:85 +#: nsfw.php:65 msgid "" "This addon searches for specified words/text in posts and collapses them. It" " can be used to filter content tagged with for instance #NSFW that may be " @@ -31,32 +27,35 @@ msgid "" "is also useful for hiding irrelevant or annoying content from direct view." msgstr "Это дополнение ищет указанные слова и выражения в записях и сворачивает запись, если найдёт. Это можно использовать для скрытия записей с тэгом #NSFW, просмотр которых может быть нежелателен в определённое время, например, на работе. Так же можно использовать для скрытия иного контента." -#: nsfw.php:86 +#: nsfw.php:66 msgid "Enable Content filter" msgstr "Включить фильтр контента" -#: nsfw.php:89 +#: nsfw.php:67 msgid "Comma separated list of keywords to hide" msgstr "Ключевые слова для скрытия, через запятую" -#: nsfw.php:93 -msgid "Save Settings" -msgstr "Сохранить настройки" +#: nsfw.php:67 +msgid "" +"Use /expression/ to provide regular expressions, #tag to specfically match " +"hashtags (case-insensitive), or regular words (case-sensitive)" +msgstr "" -#: nsfw.php:94 -msgid "Use /expression/ to provide regular expressions" -msgstr "Используйте формат /expression/ для регулярных выражений" +#: nsfw.php:72 +msgid "Content Filter (NSFW and more)" +msgstr "Фильтр контента (NSFW и прочее)" -#: nsfw.php:109 -msgid "NSFW Settings saved." -msgstr "Настройки NSFW сохранены" +#: nsfw.php:96 +#, php-format +msgid "Regular expression \"%s\" fails to compile" +msgstr "" -#: nsfw.php:162 +#: nsfw.php:154 #, php-format msgid "Filtered tag: %s" msgstr "Скрыт тэг: %s" -#: nsfw.php:164 +#: nsfw.php:156 #, php-format msgid "Filtered word: %s" msgstr "Скрыто слово: %s" diff --git a/nsfw/lang/ru/strings.php b/nsfw/lang/ru/strings.php index 71a02e12..c9035421 100644 --- a/nsfw/lang/ru/strings.php +++ b/nsfw/lang/ru/strings.php @@ -5,12 +5,9 @@ function string_plural_select_ru($n){ $n = intval($n); if ($n%10==1 && $n%100!=11) { return 0; } else if ($n%10>=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Content Filter (NSFW and more)'] = 'Фильтр контента (NSFW и прочее)'; $a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Это дополнение ищет указанные слова и выражения в записях и сворачивает запись, если найдёт. Это можно использовать для скрытия записей с тэгом #NSFW, просмотр которых может быть нежелателен в определённое время, например, на работе. Так же можно использовать для скрытия иного контента.'; $a->strings['Enable Content filter'] = 'Включить фильтр контента'; $a->strings['Comma separated list of keywords to hide'] = 'Ключевые слова для скрытия, через запятую'; -$a->strings['Save Settings'] = 'Сохранить настройки'; -$a->strings['Use /expression/ to provide regular expressions'] = 'Используйте формат /expression/ для регулярных выражений'; -$a->strings['NSFW Settings saved.'] = 'Настройки NSFW сохранены'; +$a->strings['Content Filter (NSFW and more)'] = 'Фильтр контента (NSFW и прочее)'; $a->strings['Filtered tag: %s'] = 'Скрыт тэг: %s'; $a->strings['Filtered word: %s'] = 'Скрыто слово: %s'; diff --git a/nsfw/nsfw.php b/nsfw/nsfw.php index 2c8235dd..37d34d7d 100644 --- a/nsfw/nsfw.php +++ b/nsfw/nsfw.php @@ -8,7 +8,6 @@ * */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; @@ -88,7 +87,7 @@ function nsfw_addon_settings_post(array &$b) $word_list = explode(',', $words); foreach ($word_list as $word) { $word = trim($word); - if (!$words || $word[0] != '/') { + if (!$words || strpos($word, '/') !== 0) { continue; } @@ -105,12 +104,13 @@ function nsfw_addon_settings_post(array &$b) function nsfw_prepare_body_content_filter(&$hook_data) { $words = null; - if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'nsfw', 'disable')) { + $uid = $hook_data['uid'] ?? DI::userSession()->getLocalUserId(); + if (DI::pConfig()->get($uid, 'nsfw', 'disable')) { return; } - if (DI::userSession()->getLocalUserId()) { - $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'nsfw', 'words'); + if ($uid) { + $words = DI::pConfig()->get($uid, 'nsfw', 'words'); } if ($words) { @@ -119,7 +119,9 @@ function nsfw_prepare_body_content_filter(&$hook_data) $word_list = ['nsfw']; } - $found = false; + $found = false; + $tag_search = false; + if (count($word_list)) { $body = $hook_data['item']['title'] . "\n" . nsfw_extract_photos($hook_data['item']['body']); @@ -129,17 +131,16 @@ function nsfw_prepare_body_content_filter(&$hook_data) continue; } - $tag_search = false; switch ($word[0]) { case '/'; // Regular expression $found = @preg_match($word, $body); break; case '#': // Hashtag-only search $tag_search = true; - $found = nsfw_find_word_in_item_tags($hook_data['item']['hashtags'], substr($word, 1)); + $found = nsfw_find_word_in_item_tags($hook_data['item']['hashtags'] ?? [], substr($word, 1)); break; default: - $found = strpos($body, $word) !== false || nsfw_find_word_in_item_tags($hook_data['item']['tags'], $word); + $found = strpos($body, $word) !== false || nsfw_find_word_in_item_tags($hook_data['item']['tags'] ?? [], $word); break; } diff --git a/numfriends/lang/cs/messages.po b/numfriends/lang/cs/messages.po index 1c2b092e..1598bc1d 100644 --- a/numfriends/lang/cs/messages.po +++ b/numfriends/lang/cs/messages.po @@ -10,28 +10,20 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-07-03 14:45+0000\n" -"Last-Translator: Aditoo\n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 10:58+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: numfriends.php:46 -msgid "Numfriends settings updated." -msgstr "Nastavení Numfriends aktualizováno" +#: numfriends.php:55 +msgid "How many contacts to display on profile sidebar" +msgstr "Počet kontaktů k zobrazení na profilové postranní liště" -#: numfriends.php:77 +#: numfriends.php:60 msgid "Numfriends Settings" msgstr "Nastavení Numfriends" - -#: numfriends.php:79 -msgid "How many contacts to display on profile sidebar" -msgstr "Kolik kontaktů zobrazit na profilové postranní liště" - -#: numfriends.php:85 -msgid "Submit" -msgstr "Odeslat" diff --git a/numfriends/lang/cs/strings.php b/numfriends/lang/cs/strings.php index d7535632..2f58574d 100644 --- a/numfriends/lang/cs/strings.php +++ b/numfriends/lang/cs/strings.php @@ -5,7 +5,5 @@ function string_plural_select_cs($n){ $n = intval($n); if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} -$a->strings['Numfriends settings updated.'] = 'Nastavení Numfriends aktualizováno'; +$a->strings['How many contacts to display on profile sidebar'] = 'Počet kontaktů k zobrazení na profilové postranní liště'; $a->strings['Numfriends Settings'] = 'Nastavení Numfriends'; -$a->strings['How many contacts to display on profile sidebar'] = 'Kolik kontaktů zobrazit na profilové postranní liště'; -$a->strings['Submit'] = 'Odeslat'; diff --git a/numfriends/lang/it/messages.po b/numfriends/lang/it/messages.po index 167ad9e1..55ac96af 100644 --- a/numfriends/lang/it/messages.po +++ b/numfriends/lang/it/messages.po @@ -10,24 +10,20 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 12:44+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 10:58+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: numfriends.php:59 -msgid "Numfriends Settings" -msgstr "Impostazioni Numfriends" - -#: numfriends.php:61 +#: numfriends.php:55 msgid "How many contacts to display on profile sidebar" msgstr "Quanti contatti visualizzare nella barra laterale del profilo" -#: numfriends.php:67 -msgid "Save Settings" -msgstr "Salva Impostazioni" +#: numfriends.php:60 +msgid "Numfriends Settings" +msgstr "Impostazioni Numfriends" diff --git a/numfriends/lang/it/strings.php b/numfriends/lang/it/strings.php index 208af559..d593d0ea 100644 --- a/numfriends/lang/it/strings.php +++ b/numfriends/lang/it/strings.php @@ -3,8 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Numfriends Settings'] = 'Impostazioni Numfriends'; $a->strings['How many contacts to display on profile sidebar'] = 'Quanti contatti visualizzare nella barra laterale del profilo'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Numfriends Settings'] = 'Impostazioni Numfriends'; diff --git a/numfriends/numfriends.php b/numfriends/numfriends.php index 538a4a3e..5652c8f0 100644 --- a/numfriends/numfriends.php +++ b/numfriends/numfriends.php @@ -6,9 +6,7 @@ * Author: Mike Macgirvin */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; @@ -17,7 +15,7 @@ function numfriends_install() { Hook::register('addon_settings', 'addon/numfriends/numfriends.php', 'numfriends_settings'); Hook::register('addon_settings_post', 'addon/numfriends/numfriends.php', 'numfriends_settings_post'); - Logger::notice("installed numfriends"); + DI::logger()->notice("installed numfriends"); } /** @@ -39,7 +37,7 @@ function numfriends_settings_post($post) { /** * - * Called from the Addon Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ @@ -50,7 +48,7 @@ function numfriends_settings(array &$data) } $numfriends = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'display_friend_count', 24); - + $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/numfriends/'); $html = Renderer::replaceMacros($t, [ '$numfriends' => ['numfriends', DI::l10n()->t('How many contacts to display on profile sidebar'), $numfriends], diff --git a/openstreetmap/config/openstreetmap.config.php b/openstreetmap/config/openstreetmap.config.php index c649da5f..d633fd26 100644 --- a/openstreetmap/config/openstreetmap.config.php +++ b/openstreetmap/config/openstreetmap.config.php @@ -10,7 +10,7 @@ return [ 'tmsserver' => 'https://www.openstreetmap.org', // nomserver (String) - 'nomserver' => 'https://nominatim.openstreetmap.org/search.php', + 'nomserver' => 'https://nominatim.openstreetmap.org/search', // zoom (Integer) // The default zoom level on the map. diff --git a/openstreetmap/lang/cs/messages.po b/openstreetmap/lang/cs/messages.po index 6385626b..ee350a4e 100644 --- a/openstreetmap/lang/cs/messages.po +++ b/openstreetmap/lang/cs/messages.po @@ -4,43 +4,63 @@ # # # Translators: -# Michal Šupler , 2014-2015 +# Aditoo, 2018 +# michal_s , 2014-2015 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-02-11 19:39+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 11:01+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: openstreetmap.php:94 +#: openstreetmap.php:167 +msgid "View Larger" +msgstr "" + +#: openstreetmap.php:194 msgid "Submit" msgstr "Odeslat" -#: openstreetmap.php:95 +#: openstreetmap.php:195 msgid "Tile Server URL" msgstr "URL adresa Tile serveru" -#: openstreetmap.php:95 +#: openstreetmap.php:195 msgid "" "A list of public tile servers" -msgstr "Seznam veřejných tile serverů" +"target=\"_blank\" rel=\"noopener noreferrer\">public tile servers" +msgstr "" -#: openstreetmap.php:96 +#: openstreetmap.php:196 +msgid "Nominatim (reverse geocoding) Server URL" +msgstr "" + +#: openstreetmap.php:196 +msgid "" +"A list of Nominatim servers" +msgstr "" + +#: openstreetmap.php:197 msgid "Default zoom" -msgstr "Defaultní lupa" +msgstr "Výchozí zvětšení" -#: openstreetmap.php:96 -msgid "The default zoom level. (1:world, 18:highest)" -msgstr "Defaultní nastavení lupy (1:svět, 18:nejvyšší)" +#: openstreetmap.php:197 +msgid "" +"The default zoom level. (1:world, 18:highest, also depends on tile server)" +msgstr "" -#: openstreetmap.php:104 -msgid "Settings updated." -msgstr "Nastavení aktualizováno." +#: openstreetmap.php:198 +msgid "Include marker on map" +msgstr "" + +#: openstreetmap.php:198 +msgid "Include a marker on the map." +msgstr "" diff --git a/openstreetmap/lang/cs/strings.php b/openstreetmap/lang/cs/strings.php index fd4d896d..dc941275 100644 --- a/openstreetmap/lang/cs/strings.php +++ b/openstreetmap/lang/cs/strings.php @@ -3,11 +3,8 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} $a->strings['Submit'] = 'Odeslat'; $a->strings['Tile Server URL'] = 'URL adresa Tile serveru'; -$a->strings['A list of public tile servers'] = 'Seznam veřejných tile serverů'; -$a->strings['Default zoom'] = 'Defaultní lupa'; -$a->strings['The default zoom level. (1:world, 18:highest)'] = 'Defaultní nastavení lupy (1:svět, 18:nejvyšší)'; -$a->strings['Settings updated.'] = 'Nastavení aktualizováno.'; +$a->strings['Default zoom'] = 'Výchozí zvětšení'; diff --git a/openstreetmap/lang/de/messages.po b/openstreetmap/lang/de/messages.po index 693ed136..f99bdb2f 100644 --- a/openstreetmap/lang/de/messages.po +++ b/openstreetmap/lang/de/messages.po @@ -13,9 +13,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-12-13 05:55+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 11:01+0000\n" +"Last-Translator: Tobias Diekershoff , 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/openstreetmap/openstreetmap.php b/openstreetmap/openstreetmap.php index 3c21a51f..bf0f54b6 100644 --- a/openstreetmap/openstreetmap.php +++ b/openstreetmap/openstreetmap.php @@ -9,10 +9,8 @@ * */ -use Friendica\App; use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; use Friendica\Core\Config\Util\ConfigFileManager; @@ -32,17 +30,17 @@ function openstreetmap_install() Hook::register('Map::getCoordinates', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_get_coordinates'); Hook::register('page_header', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_alterheader'); - Logger::notice("installed openstreetmap"); + DI::logger()->notice("installed openstreetmap"); } function openstreetmap_load_config(ConfigFileManager $loader) { - DI::app()->getConfigCache()->load($loader->loadAddonConfig('openstreetmap'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('openstreetmap'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); } function openstreetmap_alterheader(&$navHtml) { - $addScriptTag = '' . "\r\n"; + $addScriptTag = '' . "\r\n"; DI::page()['htmlhead'] .= $addScriptTag; } @@ -121,7 +119,7 @@ function openstreetmap_get_coordinates(array &$b) if (is_null($j)) { $curlResult = DI::httpClient()->get($nomserver . $args); if ($curlResult->isSuccess()) { - $j = json_decode($curlResult->getBody(), true); + $j = json_decode($curlResult->getBodyString(), true); DI::cache()->set($cachekey, $j, Duration::MONTH); } } @@ -145,7 +143,7 @@ function openstreetmap_generate_map(array &$b) { $tmsserver = DI::config()->get('openstreetmap', 'tmsserver', OSM_TMS); - if (strpos(DI::baseUrl()->get(true), 'https:') !== false) { + if (strpos(DI::baseUrl(), 'https:') !== false) { $tmsserver = str_replace('http:','https:',$tmsserver); } @@ -155,8 +153,8 @@ function openstreetmap_generate_map(array &$b) $lat = $b['lat']; // round($b['lat'], 5); $lon = $b['lon']; // round($b['lon'], 5); - Logger::debug('lat: ' . $lat); - Logger::debug('lon: ' . $lon); + DI::logger()->debug('lat: ' . $lat); + DI::logger()->debug('lon: ' . $lon); $cardlink = '\n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 11:17+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: pageheader.php:53 +#: pageheader.php:36 msgid "\"pageheader\" Settings" msgstr "Nastavení záhlaví stránky" -#: pageheader.php:54 +#: pageheader.php:37 msgid "Message" msgstr "Zpráva" -#: pageheader.php:54 +#: pageheader.php:37 msgid "" "Message to display on every page on this server (or put a pageheader.html " "file in your docroot)" -msgstr "Zpráva, která má být zobrazena na každé stránce tohoto serveru (nebo vložte soubor pageheader.html do kořenové složky Vašeho serveru)" +msgstr "Zpráva, která má být zobrazena na každé stránce tohoto serveru (nebo vložte do kořenové složky Vašeho serveru soubor pageheader.html)" -#: pageheader.php:55 +#: pageheader.php:38 msgid "Save Settings" msgstr "Uložit nastavení" - -#: pageheader.php:69 -msgid "pageheader Settings saved." -msgstr "Nastavení záhlaví stránky uloženo." diff --git a/pageheader/lang/cs/strings.php b/pageheader/lang/cs/strings.php index 0675ea52..3cb727cc 100644 --- a/pageheader/lang/cs/strings.php +++ b/pageheader/lang/cs/strings.php @@ -7,6 +7,5 @@ function string_plural_select_cs($n){ }} $a->strings['"pageheader" Settings'] = 'Nastavení záhlaví stránky'; $a->strings['Message'] = 'Zpráva'; -$a->strings['Message to display on every page on this server (or put a pageheader.html file in your docroot)'] = 'Zpráva, která má být zobrazena na každé stránce tohoto serveru (nebo vložte soubor pageheader.html do kořenové složky Vašeho serveru)'; +$a->strings['Message to display on every page on this server (or put a pageheader.html file in your docroot)'] = 'Zpráva, která má být zobrazena na každé stránce tohoto serveru (nebo vložte do kořenové složky Vašeho serveru soubor pageheader.html)'; $a->strings['Save Settings'] = 'Uložit nastavení'; -$a->strings['pageheader Settings saved.'] = 'Nastavení záhlaví stránky uloženo.'; diff --git a/pageheader/lang/it/messages.po b/pageheader/lang/it/messages.po index f3ac805c..2da356d0 100644 --- a/pageheader/lang/it/messages.po +++ b/pageheader/lang/it/messages.po @@ -9,34 +9,30 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-11 18:52+0100\n" -"PO-Revision-Date: 2018-03-19 13:19+0000\n" -"Last-Translator: fabrixxm \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 11:17+0000\n" +"Last-Translator: fabrixxm , 2014-2015,2018\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: pageheader.php:53 +#: pageheader.php:36 msgid "\"pageheader\" Settings" msgstr "Impostazioni \"Intestazione pagina\"" -#: pageheader.php:54 +#: pageheader.php:37 msgid "Message" msgstr "Messaggio" -#: pageheader.php:54 +#: pageheader.php:37 msgid "" "Message to display on every page on this server (or put a pageheader.html " "file in your docroot)" msgstr "Il messaggio da mostrare su ogni pagina di questo server (puoi anche aggiungere un file pageheader.html nella root)" -#: pageheader.php:55 +#: pageheader.php:38 msgid "Save Settings" msgstr "Salva Impostazioni" - -#: pageheader.php:69 -msgid "pageheader Settings saved." -msgstr "Impostazioni \"Intestazione pagina\" salvate." diff --git a/pageheader/lang/it/strings.php b/pageheader/lang/it/strings.php index ed5257f7..deed2ed9 100644 --- a/pageheader/lang/it/strings.php +++ b/pageheader/lang/it/strings.php @@ -3,10 +3,9 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['"pageheader" Settings'] = 'Impostazioni "Intestazione pagina"'; $a->strings['Message'] = 'Messaggio'; $a->strings['Message to display on every page on this server (or put a pageheader.html file in your docroot)'] = 'Il messaggio da mostrare su ogni pagina di questo server (puoi anche aggiungere un file pageheader.html nella root)'; $a->strings['Save Settings'] = 'Salva Impostazioni'; -$a->strings['pageheader Settings saved.'] = 'Impostazioni "Intestazione pagina" salvate.'; diff --git a/pageheader/pageheader.css b/pageheader/pageheader.css index 8b3282fb..f6c28fbf 100644 --- a/pageheader/pageheader.css +++ b/pageheader/pageheader.css @@ -20,4 +20,9 @@ width: 100%; margin-top: 25px; font-size: 20px; + /* The pageheader box */ + padding: 20px; + border: 1px solid transparent; + border-radius: 2px; + margin-bottom: 15px; } diff --git a/pageheader/pageheader.php b/pageheader/pageheader.php index 057bb863..d729acc1 100644 --- a/pageheader/pageheader.php +++ b/pageheader/pageheader.php @@ -5,10 +5,9 @@ * Version: 1.1 * Author: Keith Fernie * Hauke Altmann - * + * */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; diff --git a/phpmailer/composer.json b/phpmailer/composer.json index 5779773a..84d18543 100644 --- a/phpmailer/composer.json +++ b/phpmailer/composer.json @@ -1,22 +1,22 @@ { - "name": "friendica-addons/phpmailer", - "description": "Replaces the default `mail()` function by the `PHPMailer` library", - "type": "friendica-addon", - "authors": [ - { - "name": "Marcus Mueller", - "role": "Developer" - } - ], - "require": { - "php": ">=7.0", - "phpmailer/phpmailer": "^6.1" - }, - "license": "3-clause BSD license", - "minimum-stability": "stable", - "config": { - "optimize-autoloader": true, - "autoloader-suffix": "PhpMailerAddon", - "preferred-install": "dist" - } + "name": "friendica-addons/phpmailer", + "description": "Replaces the default `mail()` function by the `PHPMailer` library", + "type": "friendica-addon", + "authors": [ + { + "name": "Marcus Mueller", + "role": "Developer" + } + ], + "require": { + "php": ">=7.0", + "phpmailer/phpmailer": "^6.1" + }, + "license": "3-clause BSD license", + "minimum-stability": "stable", + "config": { + "optimize-autoloader": true, + "autoloader-suffix": "PhpMailerAddon", + "preferred-install": "dist" + } } diff --git a/phpmailer/composer.lock b/phpmailer/composer.lock index b1f2a5d9..7cd1afd5 100644 --- a/phpmailer/composer.lock +++ b/phpmailer/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "phpmailer/phpmailer", - "version": "v6.5.0", + "version": "v6.10.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c" + "reference": "bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a5b5c43e50b7fba655f793ad27303cd74c57363c", - "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144", + "reference": "bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144", "shasum": "" }, "require": { @@ -27,20 +27,25 @@ "php": ">=5.5.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.2", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "doctrine/annotations": "^1.2.6 || ^1.13.3", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", "phpcompatibility/php-compatibility": "^9.3.5", "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.5.6", - "yoast/phpunit-polyfills": "^0.2.0" + "squizlabs/php_codesniffer": "^3.7.2", + "yoast/phpunit-polyfills": "^1.0.4" }, "suggest": { + "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "ext-openssl": "Needed for secure SMTP sending and DKIM signing", + "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication", "psr/log": "For optional PSR-3 debug logging", - "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" }, "type": "library", "autoload": { @@ -72,7 +77,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.0" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.10.0" }, "funding": [ { @@ -80,18 +85,18 @@ "type": "github" } ], - "time": "2021-06-16T14:33:43+00:00" + "time": "2025-04-24T15:19:31+00:00" } ], "packages-dev": [], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { "php": ">=7.0" }, - "platform-dev": [], - "plugin-api-version": "2.1.0" + "platform-dev": {}, + "plugin-api-version": "2.6.0" } diff --git a/phpmailer/phpmailer.php b/phpmailer/phpmailer.php index 4c12709d..10287a04 100644 --- a/phpmailer/phpmailer.php +++ b/phpmailer/phpmailer.php @@ -7,7 +7,6 @@ * Maintainer: Hypolite Petovan */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; use Friendica\Object\EMail\IEmail; @@ -25,14 +24,18 @@ function phpmailer_install() function phpmailer_load_config(ConfigFileManager $loader) { - DI::app()->getConfigCache()->load($loader->loadAddonConfig('phpmailer'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('phpmailer'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); } /** - * @param IEmail $email + * @param null|IEmail $email */ -function phpmailer_emailer_send_prepare(IEmail &$email) +function phpmailer_emailer_send_prepare(?IEmail &$email) { + if ($email === null) { + return; + } + // Passing `true` enables exceptions $mailer = new PHPMailer(true); try { diff --git a/phpmailer/vendor/autoload.php b/phpmailer/vendor/autoload.php index 60925835..1d45b283 100644 --- a/phpmailer/vendor/autoload.php +++ b/phpmailer/vendor/autoload.php @@ -2,6 +2,24 @@ // autoload.php @generated by Composer +if (PHP_VERSION_ID < 50600) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, $err); + } elseif (!headers_sent()) { + echo $err; + } + } + trigger_error( + $err, + E_USER_ERROR + ); +} + require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInitPhpMailerAddon::getLoader(); diff --git a/phpmailer/vendor/composer/ClassLoader.php b/phpmailer/vendor/composer/ClassLoader.php index 03b9bb9c..7824d8f7 100644 --- a/phpmailer/vendor/composer/ClassLoader.php +++ b/phpmailer/vendor/composer/ClassLoader.php @@ -37,26 +37,81 @@ namespace Composer\Autoload; * * @author Fabien Potencier * @author Jordi Boggiano - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ */ class ClassLoader { + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ + private $vendorDir; + // PSR-4 + /** + * @var array> + */ private $prefixLengthsPsr4 = array(); + /** + * @var array> + */ private $prefixDirsPsr4 = array(); + /** + * @var list + */ private $fallbackDirsPsr4 = array(); // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> + */ private $prefixesPsr0 = array(); + /** + * @var list + */ private $fallbackDirsPsr0 = array(); + /** @var bool */ private $useIncludePath = false; + + /** + * @var array + */ private $classMap = array(); + + /** @var bool */ private $classMapAuthoritative = false; + + /** + * @var array + */ private $missingClasses = array(); + + /** @var string|null */ private $apcuPrefix; + /** + * @var array + */ + private static $registeredLoaders = array(); + + /** + * @param string|null $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return array> + */ public function getPrefixes() { if (!empty($this->prefixesPsr0)) { @@ -66,28 +121,42 @@ class ClassLoader return array(); } + /** + * @return array> + */ public function getPrefixesPsr4() { return $this->prefixDirsPsr4; } + /** + * @return list + */ public function getFallbackDirs() { return $this->fallbackDirsPsr0; } + /** + * @return list + */ public function getFallbackDirsPsr4() { return $this->fallbackDirsPsr4; } + /** + * @return array Array of classname => path + */ public function getClassMap() { return $this->classMap; } /** - * @param array $classMap Class to filename map + * @param array $classMap Class to filename map + * + * @return void */ public function addClassMap(array $classMap) { @@ -102,22 +171,25 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void */ public function add($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { if ($prepend) { $this->fallbackDirsPsr0 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, - (array) $paths + $paths ); } @@ -126,19 +198,19 @@ class ClassLoader $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; + $this->prefixesPsr0[$first][$prefix] = $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], - (array) $paths + $paths ); } } @@ -147,25 +219,28 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException + * + * @return void */ public function addPsr4($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, - (array) $paths + $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { @@ -175,18 +250,18 @@ class ClassLoader throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; + $this->prefixDirsPsr4[$prefix] = $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], - (array) $paths + $paths ); } } @@ -195,8 +270,10 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 base directories + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 base directories + * + * @return void */ public function set($prefix, $paths) { @@ -211,10 +288,12 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException + * + * @return void */ public function setPsr4($prefix, $paths) { @@ -234,6 +313,8 @@ class ClassLoader * Turns on searching the include path for class files. * * @param bool $useIncludePath + * + * @return void */ public function setUseIncludePath($useIncludePath) { @@ -256,6 +337,8 @@ class ClassLoader * that have not been registered with the class map. * * @param bool $classMapAuthoritative + * + * @return void */ public function setClassMapAuthoritative($classMapAuthoritative) { @@ -276,6 +359,8 @@ class ClassLoader * APCu prefix to use to cache found/not-found classes, if the extension is enabled. * * @param string|null $apcuPrefix + * + * @return void */ public function setApcuPrefix($apcuPrefix) { @@ -296,33 +381,55 @@ class ClassLoader * Registers this instance as an autoloader. * * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void */ public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } } /** * Unregisters this instance as an autoloader. + * + * @return void */ public function unregister() { spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } } /** * Loads the given class or interface. * * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise + * @return true|null True if loaded, null otherwise */ public function loadClass($class) { if ($file = $this->findFile($class)) { - includeFile($file); + $includeFile = self::$includeFile; + $includeFile($file); return true; } + + return null; } /** @@ -367,6 +474,21 @@ class ClassLoader return $file; } + /** + * Returns the currently registered loaders keyed by their corresponding vendor directories. + * + * @return array + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ private function findFileWithExtension($class, $ext) { // PSR-4 lookup @@ -432,14 +554,26 @@ class ClassLoader return false; } -} -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - */ -function includeFile($file) -{ - include $file; + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } } diff --git a/phpmailer/vendor/composer/InstalledVersions.php b/phpmailer/vendor/composer/InstalledVersions.php new file mode 100644 index 00000000..51e734a7 --- /dev/null +++ b/phpmailer/vendor/composer/InstalledVersions.php @@ -0,0 +1,359 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/phpmailer/vendor/composer/autoload_classmap.php b/phpmailer/vendor/composer/autoload_classmap.php index 6000382d..c20440c1 100644 --- a/phpmailer/vendor/composer/autoload_classmap.php +++ b/phpmailer/vendor/composer/autoload_classmap.php @@ -2,12 +2,15 @@ // autoload_classmap.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', + 'PHPMailer\\PHPMailer\\DSNConfigurator' => $vendorDir . '/phpmailer/phpmailer/src/DSNConfigurator.php', 'PHPMailer\\PHPMailer\\Exception' => $vendorDir . '/phpmailer/phpmailer/src/Exception.php', 'PHPMailer\\PHPMailer\\OAuth' => $vendorDir . '/phpmailer/phpmailer/src/OAuth.php', + 'PHPMailer\\PHPMailer\\OAuthTokenProvider' => $vendorDir . '/phpmailer/phpmailer/src/OAuthTokenProvider.php', 'PHPMailer\\PHPMailer\\PHPMailer' => $vendorDir . '/phpmailer/phpmailer/src/PHPMailer.php', 'PHPMailer\\PHPMailer\\POP3' => $vendorDir . '/phpmailer/phpmailer/src/POP3.php', 'PHPMailer\\PHPMailer\\SMTP' => $vendorDir . '/phpmailer/phpmailer/src/SMTP.php', diff --git a/phpmailer/vendor/composer/autoload_namespaces.php b/phpmailer/vendor/composer/autoload_namespaces.php index b7fc0125..15a2ff3a 100644 --- a/phpmailer/vendor/composer/autoload_namespaces.php +++ b/phpmailer/vendor/composer/autoload_namespaces.php @@ -2,7 +2,7 @@ // autoload_namespaces.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( diff --git a/phpmailer/vendor/composer/autoload_psr4.php b/phpmailer/vendor/composer/autoload_psr4.php index 0706da6f..28567a00 100644 --- a/phpmailer/vendor/composer/autoload_psr4.php +++ b/phpmailer/vendor/composer/autoload_psr4.php @@ -2,7 +2,7 @@ // autoload_psr4.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( diff --git a/phpmailer/vendor/composer/autoload_real.php b/phpmailer/vendor/composer/autoload_real.php index e7e97ae8..65adf3da 100644 --- a/phpmailer/vendor/composer/autoload_real.php +++ b/phpmailer/vendor/composer/autoload_real.php @@ -22,31 +22,14 @@ class ComposerAutoloaderInitPhpMailerAddon return self::$loader; } + require __DIR__ . '/platform_check.php'; + spl_autoload_register(array('ComposerAutoloaderInitPhpMailerAddon', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); spl_autoload_unregister(array('ComposerAutoloaderInitPhpMailerAddon', 'loadClassLoader')); - $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); - if ($useStaticLoader) { - require_once __DIR__ . '/autoload_static.php'; - - call_user_func(\Composer\Autoload\ComposerStaticInitPhpMailerAddon::getInitializer($loader)); - } else { - $map = require __DIR__ . '/autoload_namespaces.php'; - foreach ($map as $namespace => $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - } + require __DIR__ . '/autoload_static.php'; + call_user_func(\Composer\Autoload\ComposerStaticInitPhpMailerAddon::getInitializer($loader)); $loader->register(true); diff --git a/phpmailer/vendor/composer/autoload_static.php b/phpmailer/vendor/composer/autoload_static.php index 20cd9684..8fc70b40 100644 --- a/phpmailer/vendor/composer/autoload_static.php +++ b/phpmailer/vendor/composer/autoload_static.php @@ -21,8 +21,11 @@ class ComposerStaticInitPhpMailerAddon ); public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'PHPMailer\\PHPMailer\\DSNConfigurator' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/DSNConfigurator.php', 'PHPMailer\\PHPMailer\\Exception' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/Exception.php', 'PHPMailer\\PHPMailer\\OAuth' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/OAuth.php', + 'PHPMailer\\PHPMailer\\OAuthTokenProvider' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/OAuthTokenProvider.php', 'PHPMailer\\PHPMailer\\PHPMailer' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/PHPMailer.php', 'PHPMailer\\PHPMailer\\POP3' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/POP3.php', 'PHPMailer\\PHPMailer\\SMTP' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/SMTP.php', diff --git a/phpmailer/vendor/composer/installed.json b/phpmailer/vendor/composer/installed.json index 20714abc..142a295b 100644 --- a/phpmailer/vendor/composer/installed.json +++ b/phpmailer/vendor/composer/installed.json @@ -1,80 +1,90 @@ -[ - { - "name": "phpmailer/phpmailer", - "version": "v6.5.0", - "version_normalized": "6.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a5b5c43e50b7fba655f793ad27303cd74c57363c", - "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.2", - "phpcompatibility/php-compatibility": "^9.3.5", - "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.5.6", - "yoast/phpunit-polyfills": "^0.2.0" - }, - "suggest": { - "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", - "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", - "league/oauth2-google": "Needed for Google XOAUTH2 authentication", - "psr/log": "For optional PSR-3 debug logging", - "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" - }, - "time": "2021-06-16T14:33:43+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "PHPMailer\\PHPMailer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-only" +{ + "packages": [ + { + "name": "phpmailer/phpmailer", + "version": "v6.10.0", + "version_normalized": "6.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144", + "reference": "bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "doctrine/annotations": "^1.2.6 || ^1.13.3", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.7.2", + "yoast/phpunit-polyfills": "^1.0.4" + }, + "suggest": { + "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "ext-openssl": "Needed for secure SMTP sending and DKIM signing", + "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" + }, + "time": "2025-04-24T15:19:31+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.10.0" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "install-path": "../phpmailer/phpmailer" + } ], - "authors": [ - { - "name": "Marcus Bointon", - "email": "phpmailer@synchromedia.co.uk" - }, - { - "name": "Jim Jagielski", - "email": "jimjag@gmail.com" - }, - { - "name": "Andy Prevost", - "email": "codeworxtech@users.sourceforge.net" - }, - { - "name": "Brent R. Matzelle" - } - ], - "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "support": { - "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.0" - }, - "funding": [ - { - "url": "https://github.com/Synchro", - "type": "github" - } - ] - } -] + "dev": true, + "dev-package-names": [] +} diff --git a/phpmailer/vendor/composer/installed.php b/phpmailer/vendor/composer/installed.php new file mode 100644 index 00000000..554d2c40 --- /dev/null +++ b/phpmailer/vendor/composer/installed.php @@ -0,0 +1,32 @@ + array( + 'name' => 'friendica-addons/phpmailer', + 'pretty_version' => 'dev-2025.07-rc', + 'version' => 'dev-2025.07-rc', + 'reference' => '715f70032330ad14f710284104c8593c7800e125', + 'type' => 'friendica-addon', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + 'friendica-addons/phpmailer' => array( + 'pretty_version' => 'dev-2025.07-rc', + 'version' => 'dev-2025.07-rc', + 'reference' => '715f70032330ad14f710284104c8593c7800e125', + 'type' => 'friendica-addon', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'phpmailer/phpmailer' => array( + 'pretty_version' => 'v6.10.0', + 'version' => '6.10.0.0', + 'reference' => 'bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpmailer/phpmailer', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/securemail/vendor/composer/platform_check.php b/phpmailer/vendor/composer/platform_check.php similarity index 100% rename from securemail/vendor/composer/platform_check.php rename to phpmailer/vendor/composer/platform_check.php diff --git a/phpmailer/vendor/phpmailer/phpmailer/README.md b/phpmailer/vendor/phpmailer/phpmailer/README.md index fa27d2f6..862a4e1a 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/README.md +++ b/phpmailer/vendor/phpmailer/phpmailer/README.md @@ -1,45 +1,54 @@ +[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://supportukrainenow.org/) + ![PHPMailer](https://raw.github.com/PHPMailer/PHPMailer/master/examples/images/phpmailer.png) # PHPMailer – A full-featured email creation and transfer class for PHP -[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions) [![Latest Stable Version](https://poser.pugx.org/phpmailer/phpmailer/v/stable.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer) [![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/) +[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions) +[![codecov.io](https://codecov.io/gh/PHPMailer/PHPMailer/branch/master/graph/badge.svg?token=iORZpwmYmM)](https://codecov.io/gh/PHPMailer/PHPMailer) +[![Latest Stable Version](https://poser.pugx.org/phpmailer/phpmailer/v/stable.svg)](https://packagist.org/packages/phpmailer/phpmailer) +[![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer) +[![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer) +[![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/) +[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer/badge)](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer) ## Features - Probably the world's most popular code for sending email from PHP! - Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more - Integrated SMTP support – send without a local mail server -- Send emails with multiple To, CC, BCC and Reply-to addresses +- Send emails with multiple To, CC, BCC, and Reply-to addresses - Multipart/alternative emails for mail clients that do not read HTML email - Add attachments, including inline - Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings -- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SMTPS and SMTP+STARTTLS transports +- Full UTF-8 support when using servers that support `SMTPUTF8`. +- Support for iCal events in multiparts and attachments +- SMTP authentication with `LOGIN`, `PLAIN`, `CRAM-MD5`, and `XOAUTH2` mechanisms over SMTPS and SMTP+STARTTLS transports - Validates email addresses automatically - Protects against header injection attacks - Error messages in over 50 languages! - DKIM and S/MIME signing support -- Compatible with PHP 5.5 and later, including PHP 8.0 +- Compatible with PHP 5.5 and later, including PHP 8.4 - Namespaced to prevent name clashes - Much more! ## Why you might need it -Many PHP developers need to send email from their code. The only PHP function that supports this directly is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments. +Many PHP developers need to send email from their code. The only PHP function that supports this directly is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as authentication, HTML messages, and attachments. Formatting email correctly is surprisingly difficult. There are myriad overlapping (and conflicting) standards, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong, if not unsafe! The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP client allows email sending on all platforms without needing a local mail server. Be aware though, that the `mail()` function should be avoided when possible; it's both faster and [safer](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) to use SMTP to localhost. *Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that -you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/) -, [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail) etc. +you should look at before rolling your own. Try [Symfony Mailer](https://symfony.com/doc/current/mailer.html), [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail), etc. ## License -This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution. +This software is distributed under the [LGPL 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution. ## Installation & loading PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file: ```json -"phpmailer/phpmailer": "^6.2" +"phpmailer/phpmailer": "^6.10.0" ``` or run @@ -50,7 +59,8 @@ composer require phpmailer/phpmailer Note that the `vendor` folder and the `vendor/autoload.php` script are generated by Composer; they are not part of PHPMailer. -If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package in your `composer.json`. +If you want to use XOAUTH2 authentication, you will also need to add a dependency on the `league/oauth2-client` and appropriate service adapters package in your `composer.json`, or take a look at +by @decomplexity's [SendOauth2 wrapper](https://github.com/decomplexity/SendOauth2), especially if you're using Microsoft services. Alternatively, if you're not using Composer, you can [download PHPMailer as a zip file](https://github.com/PHPMailer/PHPMailer/archive/master.zip), (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually: @@ -65,7 +75,7 @@ require 'path/to/PHPMailer/src/PHPMailer.php'; require 'path/to/PHPMailer/src/SMTP.php'; ``` -If you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for the SMTP class. Even if you're not using exceptions, you do still need to load the `Exception` class as it is used internally. +If you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for it. Even if you're not using exceptions, you do still need to load the `Exception` class as it is used internally. ## Legacy versions PHPMailer 5.2 (which is compatible with PHP 5.0 — 7.0) is no longer supported, even for security updates. You will find the latest version of 5.2 in the [5.2-stable branch](https://github.com/PHPMailer/PHPMailer/tree/5.2-stable). If you're using PHP 5.5 or later (which you should be), switch to the 6.x releases. @@ -86,10 +96,10 @@ use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; -//Load Composer's autoloader +//Load Composer's autoloader (created by composer, not included with PHPMailer) require 'vendor/autoload.php'; -//Instantiation and passing `true` enables exceptions +//Create an instance; passing `true` enables exceptions $mail = new PHPMailer(true); try { @@ -100,8 +110,8 @@ try { $mail->SMTPAuth = true; //Enable SMTP authentication $mail->Username = 'user@example.com'; //SMTP username $mail->Password = 'secret'; //SMTP password - $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged - $mail->Port = 587; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above + $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption + $mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS` //Recipients $mail->setFrom('from@example.com', 'Mailer'); @@ -128,21 +138,21 @@ try { } ``` -You'll find plenty to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder, which covers many common scenarios including sending through gmail, building contact forms, sending to mailing lists, and more. +You'll find plenty to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder, which covers many common scenarios including sending through Gmail, building contact forms, sending to mailing lists, and more. If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance. That's it. You should now be ready to use PHPMailer! ## Localization -PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: +PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder, you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: ```php //To load the French version $mail->setLanguage('fr', '/optional/path/to/language/directory/'); ``` -We welcome corrections and new languages – if you're looking for corrections, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations. +We welcome corrections and new languages – if you're looking for corrections, run the [Language/TranslationCompletenessTest.php](https://github.com/PHPMailer/PHPMailer/blob/master/test/Language/TranslationCompletenessTest.php) script in the tests folder and it will show any missing translations. ## Documentation Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, head for [the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting) as it's frequently updated. @@ -153,9 +163,9 @@ To reduce PHPMailer's deployed code footprint, examples are not included if you Complete generated API documentation is [available online](https://phpmailer.github.io/PHPMailer/). -You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good reference for how to do various operations such as encryption. +You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](https://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailer/PHPMailerTest.php) a good reference for how to do various operations such as encryption. -If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). +If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](https://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). ## Tests [PHPMailer tests](https://github.com/PHPMailer/PHPMailer/tree/master/test/) use PHPUnit 9, with [a polyfill](https://github.com/Yoast/PHPUnit-Polyfills) to let 9-style tests run on older PHPUnit and PHP versions. @@ -170,9 +180,9 @@ Please disclose any vulnerabilities found responsibly – report security issues See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) and [PHPMailer's security advisories on GitHub](https://github.com/PHPMailer/PHPMailer/security). ## Contributing -Please submit bug reports, suggestions and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues). +Please submit bug reports, suggestions, and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues). -We're particularly interested in fixing edge-cases, expanding test coverage and updating translations. +We're particularly interested in fixing edge cases, expanding test coverage, and updating translations. If you found a mistake in the docs, or want to add something, go ahead and amend the wiki – anyone can edit it. @@ -196,7 +206,7 @@ Donations are very welcome, whether in beer 🍺, T-shirts 👕, or cold, hard c Available as part of the Tidelift Subscription. The maintainers of PHPMailer and thousands of other packages are working with Tidelift to deliver commercial -support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and +support and maintenance for the open-source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-phpmailer-phpmailer?utm_source=packagist-phpmailer-phpmailer&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) @@ -204,7 +214,7 @@ use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-phpmailer-php See [changelog](changelog.md). ## History -- PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](http://sourceforge.net/projects/phpmailer/). +- PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](https://sourceforge.net/projects/phpmailer/). - [Marcus Bointon](https://github.com/Synchro) (`coolbru` on SF) and Andy Prevost (`codeworxtech`) took over the project in 2004. - Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski. - Marcus created [his fork on GitHub](https://github.com/Synchro/PHPMailer) in 2008. @@ -214,9 +224,9 @@ See [changelog](changelog.md). ### What's changed since moving from SourceForge? - Official successor to the SourceForge and Google Code projects. - Test suite. -- Continuous integration with Github Actions. +- Continuous integration with GitHub Actions. - Composer support. - Public development. - Additional languages and language strings. - CRAM-MD5 authentication support. -- Preserves full repo history of authors, commits and branches from the original SourceForge project. +- Preserves full repo history of authors, commits, and branches from the original SourceForge project. diff --git a/phpmailer/vendor/phpmailer/phpmailer/SECURITY.md b/phpmailer/vendor/phpmailer/phpmailer/SECURITY.md index 035a87f7..4f34026d 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/SECURITY.md +++ b/phpmailer/vendor/phpmailer/phpmailer/SECURITY.md @@ -13,13 +13,13 @@ PHPMailer versions 6.1.5 and earlier contain an output escaping bug that occurs PHPMailer versions prior to 6.0.6 and 5.2.27 are vulnerable to an object injection attack by passing `phar://` paths into `addAttachment()` and other functions that may receive unfiltered local paths, possibly leading to RCE. Recorded as [CVE-2018-19296](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2018-19296). See [this article](https://knasmueller.net/5-answers-about-php-phar-exploitation) for more info on this type of vulnerability. Mitigated by blocking the use of paths containing URL-protocol style prefixes such as `phar://`. Reported by Sehun Oh of cyberone.kr. -PHPMailer versions prior to 5.2.24 (released July 26th 2017) have an XSS vulnerability in one of the code examples, [CVE-2017-11503](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-11503). The `code_generator.phps` example did not filter user input prior to output. This file is distributed with a `.phps` extension, so it it not normally executable unless it is explicitly renamed, and the file is not included when PHPMailer is loaded through composer, so it is safe by default. There was also an undisclosed potential XSS vulnerability in the default exception handler (unused by default). Patches for both issues kindly provided by Patrick Monnerat of the Fedora Project. +PHPMailer versions prior to 5.2.24 (released July 26th 2017) have an XSS vulnerability in one of the code examples, [CVE-2017-11503](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-11503). The `code_generator.phps` example did not filter user input prior to output. This file is distributed with a `.phps` extension, so it is not normally executable unless it is explicitly renamed, and the file is not included when PHPMailer is loaded through composer, so it is safe by default. There was also an undisclosed potential XSS vulnerability in the default exception handler (unused by default). Patches for both issues kindly provided by Patrick Monnerat of the Fedora Project. PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity. PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer). -PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html). +PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html). PHPMailer versions prior to 5.2.14 (released November 2015) are vulnerable to [CVE-2015-8476](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8476) an SMTP CRLF injection bug permitting arbitrary message sending. diff --git a/phpmailer/vendor/phpmailer/phpmailer/SMTPUTF8.md b/phpmailer/vendor/phpmailer/phpmailer/SMTPUTF8.md new file mode 100644 index 00000000..ca284ee2 --- /dev/null +++ b/phpmailer/vendor/phpmailer/phpmailer/SMTPUTF8.md @@ -0,0 +1,48 @@ +# A short history of UTF-8 in email + +## Background + +For most of its existence, SMTP has been a 7-bit channel, only supporting US-ASCII characters. This has been a problem for many languages, especially those that use non-Latin scripts, and has led to the development of various workarounds. + +The first major improvement, introduced in 1994 in [RFC 1652](https://www.rfc-editor.org/rfc/rfc1652) and extended in 2011 in [RFC 6152](https://www.rfc-editor.org/rfc/rfc6152), was the addition of the `8BITMIME` SMTP extension, which allowed raw 8-bit data to be included in message bodies sent over SMTP. +This allowed the message *contents* to contain 8-bit data, including things like UTF-8 text, even though the SMTP protocol itself was still firmly 7-bit. This worked by having the server switch to 8-bit after the headers, and then back to 7-bit after the completion of a `DATA` command. + +From 1996, messages could support [RFC 2047 encoding](https://www.rfc-editor.org/rfc/rfc2047), which permitted inserting characters from any character set into header *values* (but not names), but only by encoding them in somewhat unreadable ways to allow them to survive passage through a 7-bit channel. An example with a subject of "Schrödinger's cat" would be: + +``` +Subject: =?utf-8?Q=Schr=C3=B6dinger=92s_Cat?= +``` + +Here the accented `ö` is encoded as `=C3=B6`, which is the UTF-8 encoding of the 2-byte character, and the whole thing is wrapped in `=?utf-8?Q?` to indicate that it uses the UTF-8 charset and `quoted-printable` encoding. This is a bit of a hack, and not very human-friendly, but it works. + +Similarly, 8-bit message bodies could be encoded using the same `quoted-printable` and `base64` content transfer encoding (CTE) schemes, which preserved the 8-bit content while encoding it in a format that could survive transmission through a 7-bit channel. + +Domain names were originally also stuck in a 7-bit world, actually even more constrained to only a subset of the US-ASCII character set. But of course, many people want to have domains in their own language/script. Internationalized domain name (IDN) permitted this, using yet another complex encoding scheme called punycode, defined for domain names in 2003 in [RFC 3492](https://www.rfc-editor.org/rfc/rfc3492). This finally allowed the domain part (after the `@`) of email addresses to contain UTF-8, though it was actually an illusion preserved by email client applications. For example, an address of +`user@café.example.com` translates to +`user@xn--caf-dma.example.com` in punycode, rendering it mostly unreadable, but 7-bit friendly, and remaining compatible with email clients that don't know about IDN. + +The one remaining part of email that could not handle UTF-8 is the local part of email addresses (the part before the `@`). + +I've only mentioned UTF-8 here, but most of these approaches also allowed other character sets that were popular, such as [the ISO-8859 family](https://en.wikipedia.org/wiki/ISO/IEC_8859). However, UTF-8 solves so many problems that these other character sets are gradually falling out of favour, as UTF-8 can support all languages. + +This patchwork of overlapping approaches has served us well, but we have to admit that it's a mess. + +## SMTPUTF8 + +`SMTPUTF8` is another SMTP extension, defined in [RFC 6531](https://www.rfc-editor.org/rfc/rfc6531) in 2012. This essentially solves the whole problem, allowing the entire SMTP conversation — commands, headers, and message bodies — to be sent in raw, unencoded UTF-8. + +But there's a problem with this approach: adoption. If you send a UTF-8 message to a recipient whose mail server doesn't support this format, the sender has to somehow downgrade the message to make it survive a transition to 7-bit. This is a hard problem to solve, especially since there is no way to make a 7-bit system support UTF-8 in the local parts of addresses. This downgrade problem is what held up the adoption of `SMTPUTF8` in PHPMailer for many years, but in that time the *de facto* approach has become to simply fail in that situation, and tell the recipient it's time they upgraded their mail server 😅. + +The vast majority of large email providers (gmail, Yahoo, Microsoft, etc), mail servers (postfix, exim, IIS, etc), and mail clients (Apple Mail, Outlook, Thunderbird, etc) now all support SMTPUTF8, so the need for backward compatibility is no longer what it was. + +## SMTPUTF8 in PHPMailer + +Several other PHP email libraries have implemented a halfway solution to `SMTPUTF8`, adding only the ability to support UTF-8 in email addresses, not elsewhere in the protocol. I wanted PHPMailer to do it "the right way", and this has taken much longer. PHPMailer now supports UTF-8 everywhere, and does not need to use transfer or header encodings for UTF-8 text when connecting to an `SMTPUTF8`-capable mail server. + +This support is handled automatically: if you add an email address that requires UTF-8, PHPMailer will use UTF-8 for everything. If not, it will fall back to 7-bit and encode the message as necessary. + +The one place you will need to be careful is in the selection of the address validator. By default, PHPMailer uses PHP's built-in `filter_var` validator, which does not allow UTF-8 email addresses. When PHPMailer spots that you have submitted a UTF-8 address, but have not altered the default validator, it will automatically switch to using a UTF-8-compatible validator. As soon as you do this, any SMTP connection you make will *require* that the server you connect to supports `SMTPUTF8`. You can select this validator explicitly by setting `PHPMailer::$validator = 'eai'` (an acronym for Email Address Internationalization). + +### Postfix gotcha + +Postfix has supported `SMTPUTF8` for a long time, but it has a peculiarity that it does not always advertise that it does so. However, rather surprisingly, if you use UTF-8 in the conversation, it will work anyway. diff --git a/phpmailer/vendor/phpmailer/phpmailer/VERSION b/phpmailer/vendor/phpmailer/phpmailer/VERSION index 4be2c727..cf79bf90 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/VERSION +++ b/phpmailer/vendor/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -6.5.0 \ No newline at end of file +6.10.0 diff --git a/phpmailer/vendor/phpmailer/phpmailer/composer.json b/phpmailer/vendor/phpmailer/phpmailer/composer.json index 58393b2c..7b008b7c 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/composer.json +++ b/phpmailer/vendor/phpmailer/phpmailer/composer.json @@ -25,6 +25,12 @@ "type": "github" } ], + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "lock": false + }, "require": { "php": ">=5.5.0", "ext-ctype": "*", @@ -32,19 +38,24 @@ "ext-hash": "*" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.2", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "doctrine/annotations": "^1.2.6 || ^1.13.3", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", "phpcompatibility/php-compatibility": "^9.3.5", "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.5.6", - "yoast/phpunit-polyfills": "^0.2.0" + "squizlabs/php_codesniffer": "^3.7.2", + "yoast/phpunit-polyfills": "^1.0.4" }, "suggest": { + "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "ext-openssl": "Needed for secure SMTP sending and DKIM signing", + "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication", "psr/log": "For optional PSR-3 debug logging", - "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication", "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" }, "autoload": { @@ -60,6 +71,10 @@ "license": "LGPL-2.1-only", "scripts": { "check": "./vendor/bin/phpcs", - "test": "./vendor/bin/phpunit" + "test": "./vendor/bin/phpunit --no-coverage", + "coverage": "./vendor/bin/phpunit", + "lint": [ + "@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . --show-deprecated -e php,phps --exclude vendor --exclude .git --exclude build" + ] } } diff --git a/phpmailer/vendor/phpmailer/phpmailer/get_oauth_token.php b/phpmailer/vendor/phpmailer/phpmailer/get_oauth_token.php index befdc34a..0e54a00b 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/get_oauth_token.php +++ b/phpmailer/vendor/phpmailer/phpmailer/get_oauth_token.php @@ -12,7 +12,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. @@ -36,7 +36,7 @@ namespace PHPMailer\PHPMailer; * Aliases for League Provider Classes * Make sure you have added these to your composer.json and run `composer install` * Plenty to choose from here: - * @see http://oauth2-client.thephpleague.com/providers/thirdparty/ + * @see https://oauth2-client.thephpleague.com/providers/thirdparty/ */ //@see https://github.com/thephpleague/oauth2-google use League\OAuth2\Client\Provider\Google; @@ -44,14 +44,31 @@ use League\OAuth2\Client\Provider\Google; use Hayageek\OAuth2\Client\Provider\Yahoo; //@see https://github.com/stevenmaguire/oauth2-microsoft use Stevenmaguire\OAuth2\Client\Provider\Microsoft; +//@see https://github.com/greew/oauth2-azure-provider +use Greew\OAuth2\Client\Provider\Azure; -if (!isset($_GET['code']) && !isset($_GET['provider'])) { +if (!isset($_GET['code']) && !isset($_POST['provider'])) { ?> -Select Provider:
-
Google
-Yahoo
-Microsoft/Outlook/Hotmail/Live/Office365
+ +
+

Select Provider

+ +
+ +
+ +
+ +
+

Enter id and secret

+

These details are obtained by setting up an app in your provider's developer console. +

+

ClientId:

+

ClientSecret:

+

TenantID (only relevant for Azure):

+ +
[ + 'https://outlook.office.com/SMTP.Send', + 'offline_access' + ] + ]; + break; } if (null === $provider) { @@ -142,5 +178,5 @@ if (!isset($_GET['code'])) { ); //Use this to interact with an API on the users behalf //Use this to get a new access token if the old one expires - echo 'Refresh Token: ', $token->getRefreshToken(); + echo 'Refresh Token: ', htmlspecialchars($token->getRefreshToken()); } diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-as.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-as.php new file mode 100644 index 00000000..327dfbaf --- /dev/null +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-as.php @@ -0,0 +1,35 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP ত্ৰুটি: প্ৰমাণীকৰণ কৰিব নোৱাৰি'; +$PHPMAILER_LANG['buggy_php'] = 'আপোনাৰ PHP সংস্কৰণ এটা বাগৰ দ্বাৰা প্ৰভাৱিত হয় যাৰ ফলত নষ্ট বাৰ্তা হব পাৰে । ইয়াক সমাধান কৰিবলে, প্ৰেৰণ কৰিবলে SMTP ব্যৱহাৰ কৰক, আপোনাৰ php.ini ত mail.add_x_header বিকল্প নিষ্ক্ৰিয় কৰক, MacOS বা Linux লৈ সলনি কৰক, বা আপোনাৰ PHP সংস্কৰণ 7.0.17+ বা 7.1.3+ লৈ সলনি কৰক ।'; +$PHPMAILER_LANG['connect_host'] = 'SMTP ত্ৰুটি: SMTP চাৰ্ভাৰৰ সৈতে সংযোগ কৰিবলে অক্ষম'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP ত্ৰুটি: তথ্য গ্ৰহণ কৰা হোৱা নাই'; +$PHPMAILER_LANG['empty_message'] = 'বাৰ্তাৰ মূখ্য অংশ খালী।'; +$PHPMAILER_LANG['encoding'] = 'অজ্ঞাত এনকোডিং: '; +$PHPMAILER_LANG['execute'] = 'এক্সিকিউট কৰিব নোৱাৰি: '; +$PHPMAILER_LANG['extension_missing'] = 'সম্প্ৰসাৰণ নোহোৱা হৈছে: '; +$PHPMAILER_LANG['file_access'] = 'ফাইল অভিগম কৰিবলে অক্ষম: '; +$PHPMAILER_LANG['file_open'] = 'ফাইল ত্ৰুটি: ফাইল খোলিবলৈ অক্ষম: '; +$PHPMAILER_LANG['from_failed'] = 'নিম্নলিখিত প্ৰেৰকৰ ঠিকনা(সমূহ) ব্যৰ্থ: '; +$PHPMAILER_LANG['instantiate'] = 'মেইল ফাংচনৰ এটা উদাহৰণ সৃষ্টি কৰিবলে অক্ষম'; +$PHPMAILER_LANG['invalid_address'] = 'প্ৰেৰণ কৰিব নোৱাৰি: অবৈধ ইমেইল ঠিকনা: '; +$PHPMAILER_LANG['invalid_header'] = 'অবৈধ হেডাৰৰ নাম বা মান'; +$PHPMAILER_LANG['invalid_hostentry'] = 'অবৈধ হোষ্টেন্ট্ৰি: '; +$PHPMAILER_LANG['invalid_host'] = 'অবৈধ হস্ট:'; +$PHPMAILER_LANG['mailer_not_supported'] = 'মেইলাৰ সমৰ্থিত নহয়।'; +$PHPMAILER_LANG['provide_address'] = 'আপুনি অন্ততঃ এটা গন্তব্য ইমেইল ঠিকনা দিব লাগিব'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP ত্ৰুটি: নিম্নলিখিত গন্তব্যস্থানসমূহ ব্যৰ্থ: '; +$PHPMAILER_LANG['signing'] = 'স্বাক্ষৰ কৰাত ব্যৰ্থ: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP কড: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'অতিৰিক্ত SMTP তথ্য: '; +$PHPMAILER_LANG['smtp_detail'] = 'বিৱৰণ:'; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP সংযোগ() ব্যৰ্থ'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP চাৰ্ভাৰৰ ত্ৰুটি: '; +$PHPMAILER_LANG['variable_set'] = 'চলক নিৰ্ধাৰণ কৰিব পৰা নগল: '; +$PHPMAILER_LANG['extension_missing'] = 'অনুপস্থিত সম্প্ৰসাৰণ: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-bn.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-bn.php new file mode 100644 index 00000000..47365108 --- /dev/null +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-bn.php @@ -0,0 +1,35 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP ত্রুটি: প্রমাণীকরণ করতে অক্ষম৷'; +$PHPMAILER_LANG['buggy_php'] = 'আপনার PHP সংস্করণ একটি বাগ দ্বারা প্রভাবিত হয় যার ফলে দূষিত বার্তা হতে পারে। এটি ঠিক করতে, পাঠাতে SMTP ব্যবহার করুন, আপনার php.ini এ mail.add_x_header বিকল্পটি নিষ্ক্রিয় করুন, MacOS বা Linux-এ স্যুইচ করুন, অথবা আপনার PHP সংস্করণকে 7.0.17+ বা 7.1.3+ এ পরিবর্তন করুন।'; +$PHPMAILER_LANG['connect_host'] = 'SMTP ত্রুটি: SMTP সার্ভারের সাথে সংযোগ করতে অক্ষম৷'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP ত্রুটি: ডেটা গ্রহণ করা হয়নি৷'; +$PHPMAILER_LANG['empty_message'] = 'বার্তার অংশটি খালি।'; +$PHPMAILER_LANG['encoding'] = 'অজানা এনকোডিং: '; +$PHPMAILER_LANG['execute'] = 'নির্বাহ করতে অক্ষম: '; +$PHPMAILER_LANG['extension_missing'] = 'এক্সটেনশন অনুপস্থিত:'; +$PHPMAILER_LANG['file_access'] = 'ফাইল অ্যাক্সেস করতে অক্ষম: '; +$PHPMAILER_LANG['file_open'] = 'ফাইল ত্রুটি: ফাইল খুলতে অক্ষম: '; +$PHPMAILER_LANG['from_failed'] = 'নিম্নলিখিত প্রেরকের ঠিকানা(গুলি) ব্যর্থ হয়েছে: '; +$PHPMAILER_LANG['instantiate'] = 'মেল ফাংশনের একটি উদাহরণ তৈরি করতে অক্ষম৷'; +$PHPMAILER_LANG['invalid_address'] = 'পাঠাতে অক্ষম: অবৈধ ইমেল ঠিকানা: '; +$PHPMAILER_LANG['invalid_header'] = 'অবৈধ হেডার নাম বা মান'; +$PHPMAILER_LANG['invalid_hostentry'] = 'অবৈধ হোস্টেন্ট্রি: '; +$PHPMAILER_LANG['invalid_host'] = 'অবৈধ হোস্ট:'; +$PHPMAILER_LANG['mailer_not_supported'] = 'মেইলার সমর্থিত নয়।'; +$PHPMAILER_LANG['provide_address'] = 'আপনাকে অবশ্যই অন্তত একটি গন্তব্য ইমেল ঠিকানা প্রদান করতে হবে৷'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP ত্রুটি: নিম্নলিখিত গন্তব্যগুলি ব্যর্থ হয়েছে: '; +$PHPMAILER_LANG['signing'] = 'স্বাক্ষর করতে ব্যর্থ হয়েছে: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP কোড: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'অতিরিক্ত SMTP তথ্য:'; +$PHPMAILER_LANG['smtp_detail'] = 'বর্ণনা: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP সংযোগ() ব্যর্থ হয়েছে৷'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP সার্ভার ত্রুটি: '; +$PHPMAILER_LANG['variable_set'] = 'পরিবর্তনশীল সেট করা যায়নি: '; +$PHPMAILER_LANG['extension_missing'] = 'অনুপস্থিত এক্সটেনশন: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php deleted file mode 100644 index 500c9526..00000000 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:身份验证失败。'; -$PHPMAILER_LANG['connect_host'] = 'SMTP 错误: 不能连接SMTP主机。'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误: 数据不可接受。'; -//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; -$PHPMAILER_LANG['encoding'] = '未知编码:'; -$PHPMAILER_LANG['execute'] = '不能执行: '; -$PHPMAILER_LANG['file_access'] = '不能访问文件:'; -$PHPMAILER_LANG['file_open'] = '文件错误:不能打开文件:'; -$PHPMAILER_LANG['from_failed'] = '下面的发送地址邮件发送失败了: '; -$PHPMAILER_LANG['instantiate'] = '不能实现mail方法。'; -//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。'; -$PHPMAILER_LANG['provide_address'] = '您必须提供至少一个 收信人的email地址。'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误: 下面的 收件人失败了: '; -//$PHPMAILER_LANG['signing'] = 'Signing Error: '; -//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; -//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; -//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php index 1edba1d7..db9a1ef5 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php @@ -9,21 +9,28 @@ */ $PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Login mislykkedes.'; +$PHPMAILER_LANG['buggy_php'] = 'Din version af PHP er berørt af en fejl, som gør at dine beskeder muligvis vises forkert. For at rette dette kan du skifte til SMTP, slå mail.add_x_header headeren i din php.ini fil fra, skifte til MacOS eller Linux eller opgradere din version af PHP til 7.0.17+ eller 7.1.3+.'; $PHPMAILER_LANG['connect_host'] = 'SMTP fejl: Forbindelse til SMTP serveren kunne ikke oprettes.'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data blev ikke accepteret.'; $PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold'; $PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: '; $PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: '; +$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: '; $PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: '; $PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: '; $PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: '; $PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.'; $PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: '; +$PHPMAILER_LANG['invalid_header'] = 'Ugyldig header navn eller værdi'; +$PHPMAILER_LANG['invalid_hostentry'] = 'Ugyldig hostentry: '; +$PHPMAILER_LANG['invalid_host'] = 'Ugyldig vært: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.'; $PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere er forkerte: '; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere fejlede: '; $PHPMAILER_LANG['signing'] = 'Signeringsfejl: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP kode: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Yderligere SMTP info: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.'; +$PHPMAILER_LANG['smtp_detail'] = 'Detalje: '; $PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: '; $PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: '; -$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php index b3d5ca94..339ee575 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php @@ -5,22 +5,29 @@ * @package PHPMailer */ -$PHPMAILER_LANG['authenticate'] = 'SMTP Σφάλμα: Αδυναμία πιστοποίησης (authentication).'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Σφάλμα: Αδυναμία σύνδεσης στον SMTP-Host.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Σφάλμα: Τα δεδομένα δεν έγιναν αποδεκτά.'; -$PHPMAILER_LANG['empty_message'] = 'Το E-Mail δεν έχει περιεχόμενο .'; -$PHPMAILER_LANG['encoding'] = 'Αγνωστο Encoding-Format: '; -$PHPMAILER_LANG['execute'] = 'Αδυναμία εκτέλεσης ακόλουθης εντολής: '; -$PHPMAILER_LANG['file_access'] = 'Αδυναμία προσπέλασης του αρχείου: '; -$PHPMAILER_LANG['file_open'] = 'Σφάλμα Αρχείου: Δεν είναι δυνατό το άνοιγμα του ακόλουθου αρχείου: '; -$PHPMAILER_LANG['from_failed'] = 'Η παρακάτω διεύθυνση αποστολέα δεν είναι σωστή: '; -$PHPMAILER_LANG['instantiate'] = 'Αδυναμία εκκίνησης Mail function.'; -$PHPMAILER_LANG['invalid_address'] = 'Το μήνυμα δεν εστάλη, η διεύθυνση δεν είναι έγκυρη: '; +$PHPMAILER_LANG['authenticate'] = 'Σφάλμα SMTP: Αδυναμία πιστοποίησης.'; +$PHPMAILER_LANG['buggy_php'] = 'Η έκδοση PHP που χρησιμοποιείτε παρουσιάζει σφάλμα που μπορεί να έχει ως αποτέλεσμα κατεστραμένα μηνύματα. Για να το διορθώσετε, αλλάξτε τον τρόπο αποστολής σε SMTP, απενεργοποιήστε την επιλογή mail.add_x_header στο αρχείο php.ini, αλλάξτε λειτουργικό σε MacOS ή Linux ή αναβαθμίστε την PHP σε έκδοση 7.0.17+ ή 7.1.3+.'; +$PHPMAILER_LANG['connect_host'] = 'Σφάλμα SMTP: Αδυναμία σύνδεσης με τον φιλοξενητή SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Σφάλμα SMTP: Μη αποδεκτά δεδομένα.'; +$PHPMAILER_LANG['empty_message'] = 'Η ηλεκτρονική επιστολή δεν έχει περιεχόμενο.'; +$PHPMAILER_LANG['encoding'] = 'Άγνωστη μορφή κωδικοποίησης: '; +$PHPMAILER_LANG['execute'] = 'Αδυναμία εκτέλεσης: '; +$PHPMAILER_LANG['extension_missing'] = 'Απουσία επέκτασης: '; +$PHPMAILER_LANG['file_access'] = 'Αδυναμία πρόσβασης στο αρχείο: '; +$PHPMAILER_LANG['file_open'] = 'Σφάλμα Αρχείου: Αδυναμία ανοίγματος αρχείου: '; +$PHPMAILER_LANG['from_failed'] = 'Η ακόλουθη διεύθυνση αποστολέα δεν είναι σωστή: '; +$PHPMAILER_LANG['instantiate'] = 'Αδυναμία εκκίνησης συνάρτησης Mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Μη έγκυρη διεύθυνση: '; +$PHPMAILER_LANG['invalid_header'] = 'Μη έγκυρο όνομα κεφαλίδας ή τιμή'; +$PHPMAILER_LANG['invalid_hostentry'] = 'Μη έγκυρη εισαγωγή φιλοξενητή: '; +$PHPMAILER_LANG['invalid_host'] = 'Μη έγκυρος φιλοξενητής: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer δεν υποστηρίζεται.'; -$PHPMAILER_LANG['provide_address'] = 'Παρακαλούμε δώστε τουλάχιστον μια e-mail διεύθυνση παραλήπτη.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Σφάλμα: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: '; +$PHPMAILER_LANG['provide_address'] = 'Δώστε τουλάχιστον μια ηλεκτρονική διεύθυνση παραλήπτη.'; +$PHPMAILER_LANG['recipients_failed'] = 'Σφάλμα SMTP: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: '; $PHPMAILER_LANG['signing'] = 'Σφάλμα υπογραφής: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Αποτυχία σύνδεσης στον SMTP Server.'; -$PHPMAILER_LANG['smtp_error'] = 'Σφάλμα από τον SMTP Server: '; -$PHPMAILER_LANG['variable_set'] = 'Αδυναμία ορισμού ή αρχικοποίησης μεταβλητής: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; +$PHPMAILER_LANG['smtp_code'] = 'Κώδικάς SMTP: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Πρόσθετες πληροφορίες SMTP: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Αποτυχία σύνδεσης SMTP.'; +$PHPMAILER_LANG['smtp_detail'] = 'Λεπτομέρεια: '; +$PHPMAILER_LANG['smtp_error'] = 'Σφάλμα με τον διακομιστή SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Αδυναμία ορισμού ή επαναφοράς μεταβλητής: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php index 6ba74627..4e74bfb7 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php @@ -4,24 +4,33 @@ * Spanish PHPMailer language file: refer to English translation for definitive list * @package PHPMailer * @author Matt Sturdy + * @author Crystopher Glodzienski Cardoso + * @author Daniel Cruz */ $PHPMAILER_LANG['authenticate'] = 'Error SMTP: Imposible autentificar.'; +$PHPMAILER_LANG['buggy_php'] = 'Tu versión de PHP está afectada por un bug que puede resultar en mensajes corruptos. Para arreglarlo, cambia a enviar usando SMTP, deshabilita la opción mail.add_x_header en tu php.ini, cambia a MacOS o Linux, o actualiza tu PHP a la versión 7.0.17+ o 7.1.3+.'; $PHPMAILER_LANG['connect_host'] = 'Error SMTP: Imposible conectar al servidor SMTP.'; $PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Datos no aceptados.'; $PHPMAILER_LANG['empty_message'] = 'El cuerpo del mensaje está vacío.'; $PHPMAILER_LANG['encoding'] = 'Codificación desconocida: '; $PHPMAILER_LANG['execute'] = 'Imposible ejecutar: '; +$PHPMAILER_LANG['extension_missing'] = 'Extensión faltante: '; $PHPMAILER_LANG['file_access'] = 'Imposible acceder al archivo: '; $PHPMAILER_LANG['file_open'] = 'Error de Archivo: Imposible abrir el archivo: '; $PHPMAILER_LANG['from_failed'] = 'La(s) siguiente(s) direcciones de remitente fallaron: '; $PHPMAILER_LANG['instantiate'] = 'Imposible crear una instancia de la función Mail.'; $PHPMAILER_LANG['invalid_address'] = 'Imposible enviar: dirección de email inválido: '; +$PHPMAILER_LANG['invalid_header'] = 'Nombre o valor de encabezado no válido'; +$PHPMAILER_LANG['invalid_hostentry'] = 'Hostentry inválido: '; +$PHPMAILER_LANG['invalid_host'] = 'Host inválido: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.'; $PHPMAILER_LANG['provide_address'] = 'Debe proporcionar al menos una dirección de email de destino.'; $PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Los siguientes destinos fallaron: '; $PHPMAILER_LANG['signing'] = 'Error al firmar: '; +$PHPMAILER_LANG['smtp_code'] = 'Código del servidor SMTP: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Información adicional del servidor SMTP: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falló.'; +$PHPMAILER_LANG['smtp_detail'] = 'Detalle: '; $PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: '; $PHPMAILER_LANG['variable_set'] = 'No se pudo configurar la variable: '; -$PHPMAILER_LANG['extension_missing'] = 'Extensión faltante: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php index 243c0548..6d1e6373 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php @@ -20,7 +20,6 @@ $PHPMAILER_LANG['instantiate'] = 'mail-funktion luonti epäonnistui.'; $PHPMAILER_LANG['mailer_not_supported'] = 'postivälitintyyppiä ei tueta.'; $PHPMAILER_LANG['provide_address'] = 'Aseta vähintään yksi vastaanottajan sähköpostiosoite.'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP-virhe: seuraava vastaanottaja osoite on virheellinen.'; -$PHPMAILER_LANG['encoding'] = 'Tuntematon koodaustyyppi: '; //$PHPMAILER_LANG['signing'] = 'Signing Error: '; //$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; //$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php index b57f0ec6..a6d582d8 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php @@ -6,27 +6,31 @@ * Some French punctuation requires a thin non-breaking space (U+202F) character before it, * for example before a colon or exclamation mark. * There is one of these characters between these quotes: " " - * @see http://unicode.org/udhr/n/notes_fra.html */ -$PHPMAILER_LANG['authenticate'] = 'Erreur SMTP : échec de l\'authentification.'; +$PHPMAILER_LANG['authenticate'] = 'Erreur SMTP : échec de l’authentification.'; +$PHPMAILER_LANG['buggy_php'] = 'Votre version de PHP est affectée par un bug qui peut entraîner des messages corrompus. Pour résoudre ce problème, passez à l’envoi par SMTP, désactivez l’option mail.add_x_header dans le fichier php.ini, passez à MacOS ou Linux, ou passez PHP à la version 7.0.17+ ou 7.1.3+.'; $PHPMAILER_LANG['connect_host'] = 'Erreur SMTP : impossible de se connecter au serveur SMTP.'; $PHPMAILER_LANG['data_not_accepted'] = 'Erreur SMTP : données incorrectes.'; $PHPMAILER_LANG['empty_message'] = 'Corps du message vide.'; $PHPMAILER_LANG['encoding'] = 'Encodage inconnu : '; -$PHPMAILER_LANG['execute'] = 'Impossible de lancer l\'exécution : '; -$PHPMAILER_LANG['file_access'] = 'Impossible d\'accéder au fichier : '; +$PHPMAILER_LANG['execute'] = 'Impossible de lancer l’exécution : '; +$PHPMAILER_LANG['extension_missing'] = 'Extension manquante : '; +$PHPMAILER_LANG['file_access'] = 'Impossible d’accéder au fichier : '; $PHPMAILER_LANG['file_open'] = 'Ouverture du fichier impossible : '; -$PHPMAILER_LANG['from_failed'] = 'L\'adresse d\'expéditeur suivante a échoué : '; -$PHPMAILER_LANG['instantiate'] = 'Impossible d\'instancier la fonction mail.'; -$PHPMAILER_LANG['invalid_address'] = 'L\'adresse courriel n\'est pas valide : '; -$PHPMAILER_LANG['invalid_hostentry'] = 'L\'entrée hôte n\'est pas valide : '; -$PHPMAILER_LANG['invalid_host'] = 'L\'hôte n\'est pas valide : '; +$PHPMAILER_LANG['from_failed'] = 'L’adresse d’expéditeur suivante a échoué : '; +$PHPMAILER_LANG['instantiate'] = 'Impossible d’instancier la fonction mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Adresse courriel non valide : '; +$PHPMAILER_LANG['invalid_header'] = 'Nom ou valeur de l’en-tête non valide'; +$PHPMAILER_LANG['invalid_hostentry'] = 'Entrée d’hôte non valide : '; +$PHPMAILER_LANG['invalid_host'] = 'Hôte non valide : '; $PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.'; $PHPMAILER_LANG['provide_address'] = 'Vous devez fournir au moins une adresse de destinataire.'; -$PHPMAILER_LANG['recipients_failed'] = 'Erreur SMTP : les destinataires suivants sont en erreur : '; +$PHPMAILER_LANG['recipients_failed'] = 'Erreur SMTP : les destinataires suivants ont échoué : '; $PHPMAILER_LANG['signing'] = 'Erreur de signature : '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Échec de la connexion SMTP.'; +$PHPMAILER_LANG['smtp_code'] = 'Code SMTP : '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Informations supplémentaires SMTP : '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'La fonction SMTP connect() a échoué.'; +$PHPMAILER_LANG['smtp_detail'] = 'Détails : '; $PHPMAILER_LANG['smtp_error'] = 'Erreur du serveur SMTP : '; -$PHPMAILER_LANG['variable_set'] = 'Impossible d\'initialiser ou de réinitialiser une variable : '; -$PHPMAILER_LANG['extension_missing'] = 'Extension manquante : '; +$PHPMAILER_LANG['variable_set'] = 'Impossible d’initialiser ou de réinitialiser une variable : '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php index d973a359..d2856e05 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php @@ -4,24 +4,32 @@ * Hindi PHPMailer language file: refer to English translation for definitive list * @package PHPMailer * @author Yash Karanke + * Rewrite and extension of the work by Jayanti Suthar */ $PHPMAILER_LANG['authenticate'] = 'SMTP त्रुटि: प्रामाणिकता की जांच नहीं हो सका। '; +$PHPMAILER_LANG['buggy_php'] = 'PHP का आपका संस्करण एक बग से प्रभावित है जिसके परिणामस्वरूप संदेश दूषित हो सकते हैं. इसे ठीक करने हेतु, भेजने के लिए SMTP का उपयोग करे, अपने php.ini में mail.add_x_header विकल्प को अक्षम करें, MacOS या Linux पर जाए, या अपने PHP संस्करण को 7.0.17+ या 7.1.3+ बदले.'; $PHPMAILER_LANG['connect_host'] = 'SMTP त्रुटि: SMTP सर्वर से कनेक्ट नहीं हो सका। '; $PHPMAILER_LANG['data_not_accepted'] = 'SMTP त्रुटि: डेटा स्वीकार नहीं किया जाता है। '; $PHPMAILER_LANG['empty_message'] = 'संदेश खाली है। '; $PHPMAILER_LANG['encoding'] = 'अज्ञात एन्कोडिंग प्रकार। '; $PHPMAILER_LANG['execute'] = 'आदेश को निष्पादित करने में विफल। '; +$PHPMAILER_LANG['extension_missing'] = 'एक्सटेन्षन गायब है: '; $PHPMAILER_LANG['file_access'] = 'फ़ाइल उपलब्ध नहीं है। '; $PHPMAILER_LANG['file_open'] = 'फ़ाइल त्रुटि: फाइल को खोला नहीं जा सका। '; $PHPMAILER_LANG['from_failed'] = 'प्रेषक का पता गलत है। '; $PHPMAILER_LANG['instantiate'] = 'मेल फ़ंक्शन कॉल नहीं कर सकता है।'; $PHPMAILER_LANG['invalid_address'] = 'पता गलत है। '; +$PHPMAILER_LANG['invalid_header'] = 'अमान्य हेडर नाम या मान'; +$PHPMAILER_LANG['invalid_hostentry'] = 'अमान्य hostentry: '; +$PHPMAILER_LANG['invalid_host'] = 'अमान्य होस्ट: '; $PHPMAILER_LANG['mailer_not_supported'] = 'मेल सर्वर के साथ काम नहीं करता है। '; $PHPMAILER_LANG['provide_address'] = 'आपको कम से कम एक प्राप्तकर्ता का ई-मेल पता प्रदान करना होगा।'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP त्रुटि: निम्न प्राप्तकर्ताओं को पते भेजने में विफल। '; -$PHPMAILER_LANG['signing'] = 'साइनअप त्रुटि:। '; +$PHPMAILER_LANG['signing'] = 'साइनअप त्रुटि: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP कोड: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'अतिरिक्त SMTP जानकारी: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP का connect () फ़ंक्शन विफल हुआ। '; +$PHPMAILER_LANG['smtp_detail'] = 'विवरण: '; $PHPMAILER_LANG['smtp_error'] = 'SMTP सर्वर त्रुटि। '; $PHPMAILER_LANG['variable_set'] = 'चर को बना या संशोधित नहीं किया जा सकता। '; -$PHPMAILER_LANG['extension_missing'] = 'एक्सटेन्षन गायब है: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php index eee79898..d01869ce 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php @@ -3,26 +3,35 @@ /** * Japanese PHPMailer language file: refer to English translation for definitive list * @package PHPMailer - * @author Mitsuhiro Yoshida + * @author Mitsuhiro Yoshida * @author Yoshi Sakai + * @author Arisophy + * @author ARAKI Musashi */ $PHPMAILER_LANG['authenticate'] = 'SMTPエラー: 認証できませんでした。'; +$PHPMAILER_LANG['buggy_php'] = 'ご利用のバージョンのPHPには不具合があり、メッセージが破損するおそれがあります。問題の解決は以下のいずれかを行ってください。SMTPでの送信に切り替える。php.iniのmail.add_x_headerをoffにする。MacOSまたはLinuxに切り替える。PHPバージョン7.0.17以降または7.1.3以降にアップグレードする。'; $PHPMAILER_LANG['connect_host'] = 'SMTPエラー: SMTPホストに接続できませんでした。'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTPエラー: データが受け付けられませんでした。'; -//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; +$PHPMAILER_LANG['empty_message'] = 'メール本文が空です。'; $PHPMAILER_LANG['encoding'] = '不明なエンコーディング: '; $PHPMAILER_LANG['execute'] = '実行できませんでした: '; +$PHPMAILER_LANG['extension_missing'] = '拡張機能が見つかりません: '; $PHPMAILER_LANG['file_access'] = 'ファイルにアクセスできません: '; $PHPMAILER_LANG['file_open'] = 'ファイルエラー: ファイルを開けません: '; $PHPMAILER_LANG['from_failed'] = 'Fromアドレスを登録する際にエラーが発生しました: '; $PHPMAILER_LANG['instantiate'] = 'メール関数が正常に動作しませんでした。'; -//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: '; -$PHPMAILER_LANG['provide_address'] = '少なくとも1つメールアドレスを 指定する必要があります。'; +$PHPMAILER_LANG['invalid_address'] = '不正なメールアドレス: '; +$PHPMAILER_LANG['invalid_header'] = '不正なヘッダー名またはその内容'; +$PHPMAILER_LANG['invalid_hostentry'] = '不正なホストエントリー: '; +$PHPMAILER_LANG['invalid_host'] = '不正なホスト: '; $PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。'; +$PHPMAILER_LANG['provide_address'] = '少なくとも1つメールアドレスを 指定する必要があります。'; $PHPMAILER_LANG['recipients_failed'] = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: '; -//$PHPMAILER_LANG['signing'] = 'Signing Error: '; -//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; -//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; -//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; +$PHPMAILER_LANG['signing'] = '署名エラー: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTPコード: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'SMTP追加情報: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP接続に失敗しました。'; +$PHPMAILER_LANG['smtp_detail'] = '詳細: '; +$PHPMAILER_LANG['smtp_error'] = 'SMTPサーバーエラー: '; +$PHPMAILER_LANG['variable_set'] = '変数が存在しません: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ku.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ku.php new file mode 100644 index 00000000..cf3bda69 --- /dev/null +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ku.php @@ -0,0 +1,27 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'هەڵەی SMTP : نەتوانرا کۆدەکە پشتڕاست بکرێتەوە '; +$PHPMAILER_LANG['connect_host'] = 'هەڵەی SMTP: نەتوانرا پەیوەندی بە سێرڤەرەوە بکات SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'هەڵەی SMTP: ئەو زانیاریانە قبوڵ نەکرا.'; +$PHPMAILER_LANG['empty_message'] = 'پەیامەکە بەتاڵە'; +$PHPMAILER_LANG['encoding'] = 'کۆدکردنی نەزانراو : '; +$PHPMAILER_LANG['execute'] = 'ناتوانرێت جێبەجێ بکرێت: '; +$PHPMAILER_LANG['file_access'] = 'ناتوانرێت دەستت بگات بە فایلەکە: '; +$PHPMAILER_LANG['file_open'] = 'هەڵەی پەڕگە(فایل): ناتوانرێت بکرێتەوە: '; +$PHPMAILER_LANG['from_failed'] = 'هەڵە لە ئاستی ناونیشانی نێرەر: '; +$PHPMAILER_LANG['instantiate'] = 'ناتوانرێت خزمەتگوزاری پۆستە پێشکەش بکرێت.'; +$PHPMAILER_LANG['invalid_address'] = 'نەتوانرا بنێردرێت ، چونکە ناونیشانی ئیمەیڵەکە نادروستە: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' مەیلەر پشتگیری ناکات'; +$PHPMAILER_LANG['provide_address'] = 'دەبێت ناونیشانی ئیمەیڵی لانیکەم یەک وەرگر دابین بکرێت.'; +$PHPMAILER_LANG['recipients_failed'] = ' هەڵەی SMTP: ئەم هەڵانەی خوارەوەشکستی هێنا لە ناردن بۆ هەردووکیان: '; +$PHPMAILER_LANG['signing'] = 'هەڵەی واژۆ: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect()پەیوەندی شکستی هێنا .'; +$PHPMAILER_LANG['smtp_error'] = 'هەڵەی ئاستی سێرڤەری SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'ناتوانرێت بیگۆڕیت یان دوبارە بینێریتەوە: '; +$PHPMAILER_LANG['extension_missing'] = 'درێژکراوە نەماوە: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-mn.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-mn.php new file mode 100644 index 00000000..04d262c7 --- /dev/null +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-mn.php @@ -0,0 +1,27 @@ + + * @author João Vieira */ -$PHPMAILER_LANG['authenticate'] = 'Erro do SMTP: Não foi possível realizar a autenticação.'; -$PHPMAILER_LANG['connect_host'] = 'Erro do SMTP: Não foi possível realizar ligação com o servidor SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Erro do SMTP: Os dados foram rejeitados.'; -$PHPMAILER_LANG['empty_message'] = 'A mensagem no e-mail está vazia.'; +$PHPMAILER_LANG['authenticate'] = 'Erro SMTP: Falha na autenticação.'; +$PHPMAILER_LANG['buggy_php'] = 'A sua versão do PHP tem um bug que pode causar mensagens corrompidas. Para resolver, utilize o envio por SMTP, desative a opção mail.add_x_header no ficheiro php.ini, mude para MacOS ou Linux, ou atualize o PHP para a versão 7.0.17+ ou 7.1.3+.'; +$PHPMAILER_LANG['connect_host'] = 'Erro SMTP: Não foi possível ligar ao servidor SMTP.'; +$PHPMAILER_LANG['data_not_accepted'] = 'Erro SMTP: Dados não aceites.'; +$PHPMAILER_LANG['empty_message'] = 'A mensagem de e-mail está vazia.'; $PHPMAILER_LANG['encoding'] = 'Codificação desconhecida: '; $PHPMAILER_LANG['execute'] = 'Não foi possível executar: '; -$PHPMAILER_LANG['file_access'] = 'Não foi possível aceder o ficheiro: '; -$PHPMAILER_LANG['file_open'] = 'Abertura do ficheiro: Não foi possível abrir o ficheiro: '; -$PHPMAILER_LANG['from_failed'] = 'Ocorreram falhas nos endereços dos seguintes remententes: '; -$PHPMAILER_LANG['instantiate'] = 'Não foi possível iniciar uma instância da função mail.'; -$PHPMAILER_LANG['invalid_address'] = 'Não foi enviado nenhum e-mail para o endereço de e-mail inválido: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.'; -$PHPMAILER_LANG['provide_address'] = 'Tem de fornecer pelo menos um endereço como destinatário do e-mail.'; -$PHPMAILER_LANG['recipients_failed'] = 'Erro do SMTP: O endereço do seguinte destinatário falhou: '; -$PHPMAILER_LANG['signing'] = 'Erro ao assinar: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falhou.'; -$PHPMAILER_LANG['smtp_error'] = 'Erro de servidor SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: '; $PHPMAILER_LANG['extension_missing'] = 'Extensão em falta: '; +$PHPMAILER_LANG['file_access'] = 'Não foi possível aceder ao ficheiro: '; +$PHPMAILER_LANG['file_open'] = 'Erro ao abrir o ficheiro: '; +$PHPMAILER_LANG['from_failed'] = 'O envio falhou para o seguinte endereço do remetente: '; +$PHPMAILER_LANG['instantiate'] = 'Não foi possível instanciar a função mail.'; +$PHPMAILER_LANG['invalid_address'] = 'Endereço de e-mail inválido: '; +$PHPMAILER_LANG['invalid_header'] = 'Nome ou valor do cabeçalho inválido.'; +$PHPMAILER_LANG['invalid_hostentry'] = 'Entrada de host inválida: '; +$PHPMAILER_LANG['invalid_host'] = 'Host inválido: '; +$PHPMAILER_LANG['mailer_not_supported'] = 'O cliente de e-mail não é suportado.'; +$PHPMAILER_LANG['provide_address'] = 'Deve fornecer pelo menos um endereço de destinatário.'; +$PHPMAILER_LANG['recipients_failed'] = 'Erro SMTP: Falha no envio para os seguintes destinatários: '; +$PHPMAILER_LANG['signing'] = 'Erro ao assinar: '; +$PHPMAILER_LANG['smtp_code'] = 'Código SMTP: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Informações adicionais SMTP: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Falha na função SMTP connect().'; +$PHPMAILER_LANG['smtp_detail'] = 'Detalhes: '; +$PHPMAILER_LANG['smtp_error'] = 'Erro do servidor SMTP: '; +$PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php index d8638098..5239865a 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php @@ -7,24 +7,32 @@ * @author Lucas Guimarães * @author Phelipe Alves * @author Fabio Beneditto + * @author Geidson Benício Coelho */ $PHPMAILER_LANG['authenticate'] = 'Erro de SMTP: Não foi possível autenticar.'; +$PHPMAILER_LANG['buggy_php'] = 'Sua versão do PHP é afetada por um bug que por resultar em messagens corrompidas. Para corrigir, mude para enviar usando SMTP, desative a opção mail.add_x_header em seu php.ini, mude para MacOS ou Linux, ou atualize seu PHP para versão 7.0.17+ ou 7.1.3+ '; $PHPMAILER_LANG['connect_host'] = 'Erro de SMTP: Não foi possível conectar ao servidor SMTP.'; $PHPMAILER_LANG['data_not_accepted'] = 'Erro de SMTP: Dados rejeitados.'; $PHPMAILER_LANG['empty_message'] = 'Mensagem vazia'; $PHPMAILER_LANG['encoding'] = 'Codificação desconhecida: '; $PHPMAILER_LANG['execute'] = 'Não foi possível executar: '; +$PHPMAILER_LANG['extension_missing'] = 'Extensão não existe: '; $PHPMAILER_LANG['file_access'] = 'Não foi possível acessar o arquivo: '; $PHPMAILER_LANG['file_open'] = 'Erro de Arquivo: Não foi possível abrir o arquivo: '; $PHPMAILER_LANG['from_failed'] = 'Os seguintes remetentes falharam: '; $PHPMAILER_LANG['instantiate'] = 'Não foi possível instanciar a função mail.'; $PHPMAILER_LANG['invalid_address'] = 'Endereço de e-mail inválido: '; +$PHPMAILER_LANG['invalid_header'] = 'Nome ou valor de cabeçalho inválido'; +$PHPMAILER_LANG['invalid_hostentry'] = 'hostentry inválido: '; +$PHPMAILER_LANG['invalid_host'] = 'host inválido: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.'; $PHPMAILER_LANG['provide_address'] = 'Você deve informar pelo menos um destinatário.'; $PHPMAILER_LANG['recipients_failed'] = 'Erro de SMTP: Os seguintes destinatários falharam: '; $PHPMAILER_LANG['signing'] = 'Erro de Assinatura: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falhou.'; +$PHPMAILER_LANG['smtp_code'] = 'Código do servidor SMTP: '; $PHPMAILER_LANG['smtp_error'] = 'Erro de servidor SMTP: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Informações adicionais do servidor SMTP: '; +$PHPMAILER_LANG['smtp_detail'] = 'Detalhes do servidor SMTP: '; $PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: '; -$PHPMAILER_LANG['extension_missing'] = 'Extensão não existe: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php index 292ec1e4..45bef915 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php @@ -3,25 +3,31 @@ /** * Romanian PHPMailer language file: refer to English translation for definitive list * @package PHPMailer - * @author Alex Florea */ $PHPMAILER_LANG['authenticate'] = 'Eroare SMTP: Autentificarea a eșuat.'; +$PHPMAILER_LANG['buggy_php'] = 'Versiunea instalată de PHP este afectată de o problemă care poate duce la coruperea mesajelor Pentru a preveni această problemă, folosiți SMTP, dezactivați opțiunea mail.add_x_header din php.ini, folosiți MacOS/Linux sau actualizați versiunea de PHP la 7.0.17+ sau 7.1.3+.'; $PHPMAILER_LANG['connect_host'] = 'Eroare SMTP: Conectarea la serverul SMTP a eșuat.'; $PHPMAILER_LANG['data_not_accepted'] = 'Eroare SMTP: Datele nu au fost acceptate.'; $PHPMAILER_LANG['empty_message'] = 'Mesajul este gol.'; $PHPMAILER_LANG['encoding'] = 'Encodare necunoscută: '; $PHPMAILER_LANG['execute'] = 'Nu se poate executa următoarea comandă: '; +$PHPMAILER_LANG['extension_missing'] = 'Lipsește extensia: '; $PHPMAILER_LANG['file_access'] = 'Nu se poate accesa următorul fișier: '; $PHPMAILER_LANG['file_open'] = 'Eroare fișier: Nu se poate deschide următorul fișier: '; $PHPMAILER_LANG['from_failed'] = 'Următoarele adrese From au dat eroare: '; $PHPMAILER_LANG['instantiate'] = 'Funcția mail nu a putut fi inițializată.'; $PHPMAILER_LANG['invalid_address'] = 'Adresa de email nu este validă: '; +$PHPMAILER_LANG['invalid_header'] = 'Numele sau valoarea header-ului nu este validă: '; +$PHPMAILER_LANG['invalid_hostentry'] = 'Hostentry invalid: '; +$PHPMAILER_LANG['invalid_host'] = 'Host invalid: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer nu este suportat.'; $PHPMAILER_LANG['provide_address'] = 'Trebuie să adăugați cel puțin o adresă de email.'; $PHPMAILER_LANG['recipients_failed'] = 'Eroare SMTP: Următoarele adrese de email au eșuat: '; $PHPMAILER_LANG['signing'] = 'A aparut o problemă la semnarea emailului. '; +$PHPMAILER_LANG['smtp_code'] = 'Cod SMTP: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Informații SMTP adiționale: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'Conectarea la serverul SMTP a eșuat.'; +$PHPMAILER_LANG['smtp_detail'] = 'Detalii SMTP: '; $PHPMAILER_LANG['smtp_error'] = 'Eroare server SMTP: '; $PHPMAILER_LANG['variable_set'] = 'Nu se poate seta/reseta variabila. '; -$PHPMAILER_LANG['extension_missing'] = 'Lipsește extensia: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php index 8c8c5e81..8013f37c 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php @@ -5,24 +5,32 @@ * @package PHPMailer * @author Alexey Chumakov * @author Foster Snowhill + * @author ProjectSoft */ -$PHPMAILER_LANG['authenticate'] = 'Ошибка SMTP: ошибка авторизации.'; +$PHPMAILER_LANG['authenticate'] = 'Ошибка SMTP: не удалось пройти аутентификацию.'; +$PHPMAILER_LANG['buggy_php'] = 'В вашей версии PHP есть ошибка, которая может привести к повреждению сообщений. Чтобы исправить, переключитесь на отправку по SMTP, отключите опцию mail.add_x_header в ваш php.ini, переключитесь на MacOS или Linux или обновите PHP до версии 7.0.17+ или 7.1.3+.'; $PHPMAILER_LANG['connect_host'] = 'Ошибка SMTP: не удается подключиться к SMTP-серверу.'; $PHPMAILER_LANG['data_not_accepted'] = 'Ошибка SMTP: данные не приняты.'; +$PHPMAILER_LANG['empty_message'] = 'Пустое сообщение'; $PHPMAILER_LANG['encoding'] = 'Неизвестная кодировка: '; $PHPMAILER_LANG['execute'] = 'Невозможно выполнить команду: '; +$PHPMAILER_LANG['extension_missing'] = 'Расширение отсутствует: '; $PHPMAILER_LANG['file_access'] = 'Нет доступа к файлу: '; $PHPMAILER_LANG['file_open'] = 'Файловая ошибка: не удаётся открыть файл: '; $PHPMAILER_LANG['from_failed'] = 'Неверный адрес отправителя: '; $PHPMAILER_LANG['instantiate'] = 'Невозможно запустить функцию mail().'; -$PHPMAILER_LANG['provide_address'] = 'Пожалуйста, введите хотя бы один email-адрес получателя.'; -$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.'; -$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: не удалась отправка таким адресатам: '; -$PHPMAILER_LANG['empty_message'] = 'Пустое сообщение'; $PHPMAILER_LANG['invalid_address'] = 'Не отправлено из-за неправильного формата email-адреса: '; +$PHPMAILER_LANG['invalid_header'] = 'Неверное имя или значение заголовка'; +$PHPMAILER_LANG['invalid_hostentry'] = 'Неверная запись хоста: '; +$PHPMAILER_LANG['invalid_host'] = 'Неверный хост: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.'; +$PHPMAILER_LANG['provide_address'] = 'Вы должны указать хотя бы один адрес электронной почты получателя.'; +$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: Ошибка следующих получателей: '; $PHPMAILER_LANG['signing'] = 'Ошибка подписи: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Ошибка соединения с SMTP-сервером'; +$PHPMAILER_LANG['smtp_code'] = 'Код SMTP: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Дополнительная информация SMTP: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'Ошибка соединения с SMTP-сервером.'; +$PHPMAILER_LANG['smtp_detail'] = 'Детали: '; $PHPMAILER_LANG['smtp_error'] = 'Ошибка SMTP-сервера: '; $PHPMAILER_LANG['variable_set'] = 'Невозможно установить или сбросить переменную: '; -$PHPMAILER_LANG['extension_missing'] = 'Расширение отсутствует: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php new file mode 100644 index 00000000..dce502aa --- /dev/null +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php @@ -0,0 +1,34 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP දෝෂය: සත්‍යාපනය අසාර්ථක විය.'; +$PHPMAILER_LANG['buggy_php'] = 'ඔබගේ PHP version එකෙහි පවතින දෝෂයක් නිසා email පණිවිඩ දෝෂ සහගත වීමේ හැකියාවක් ඇත. මෙය විසදීම සදහා SMTP භාවිතා කිරීම, mail.add_x_header INI setting එක අක්‍රීය කිරීම, MacOS හෝ Linux වලට මාරු වීම, හෝ ඔබගේ PHP version එක 7.0.17+ හෝ 7.1.3+ වලට අලුත් කිරීම කරගන්න.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP දෝෂය: සම්බන්ධ වීමට නොහැකි විය.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP දෝෂය: දත්ත පිළිගනු නොලැබේ.'; +$PHPMAILER_LANG['empty_message'] = 'පණිවිඩ අන්තර්ගතය හිස්'; +$PHPMAILER_LANG['encoding'] = 'නොදන්නා කේතනය: '; +$PHPMAILER_LANG['execute'] = 'ක්‍රියාත්මක කළ නොහැකි විය: '; +$PHPMAILER_LANG['extension_missing'] = 'Extension එක නොමැත: '; +$PHPMAILER_LANG['file_access'] = 'File එකට ප්‍රවේශ විය නොහැකි විය: '; +$PHPMAILER_LANG['file_open'] = 'File දෝෂය: File එක විවෘත කළ නොහැක: '; +$PHPMAILER_LANG['from_failed'] = 'පහත From ලිපිනයන් අසාර්ථක විය: '; +$PHPMAILER_LANG['instantiate'] = 'mail function එක ක්‍රියාත්මක කළ නොහැක.'; +$PHPMAILER_LANG['invalid_address'] = 'වලංගු නොවන ලිපිනය: '; +$PHPMAILER_LANG['invalid_header'] = 'වලංගු නොවන header නාමයක් හෝ අගයක්'; +$PHPMAILER_LANG['invalid_hostentry'] = 'වලංගු නොවන hostentry එකක්: '; +$PHPMAILER_LANG['invalid_host'] = 'වලංගු නොවන host එකක්: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer සහාය නොදක්වයි.'; +$PHPMAILER_LANG['provide_address'] = 'ඔබ අවම වශයෙන් එක් ලබන්නෙකුගේ ඊමේල් ලිපිනයක් සැපයිය යුතුය.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP දෝෂය: පහත ලබන්නන් අසමත් විය: '; +$PHPMAILER_LANG['signing'] = 'Sign කිරීමේ දෝෂය: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP කේතය: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'අමතර SMTP තොරතුරු: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP සම්බන්ධය අසාර්ථක විය.'; +$PHPMAILER_LANG['smtp_detail'] = 'තොරතුරු: '; +$PHPMAILER_LANG['smtp_error'] = 'SMTP දෝෂය: '; +$PHPMAILER_LANG['variable_set'] = 'Variable එක සැකසීමට හෝ නැවත සැකසීමට නොහැක: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php index c437a886..3e00c259 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php @@ -9,23 +9,28 @@ */ $PHPMAILER_LANG['authenticate'] = 'SMTP napaka: Avtentikacija ni uspela.'; +$PHPMAILER_LANG['buggy_php'] = 'Na vašo PHP različico vpliva napaka, ki lahko povzroči poškodovana sporočila. Če želite težavo odpraviti, preklopite na pošiljanje prek SMTP, onemogočite možnost mail.add_x_header v vaši php.ini datoteki, preklopite na MacOS ali Linux, ali nadgradite vašo PHP zaličico na 7.0.17+ ali 7.1.3+.'; $PHPMAILER_LANG['connect_host'] = 'SMTP napaka: Vzpostavljanje povezave s SMTP gostiteljem ni uspelo.'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTP napaka: Strežnik zavrača podatke.'; $PHPMAILER_LANG['empty_message'] = 'E-poštno sporočilo nima vsebine.'; $PHPMAILER_LANG['encoding'] = 'Nepoznan tip kodiranja: '; $PHPMAILER_LANG['execute'] = 'Operacija ni uspela: '; +$PHPMAILER_LANG['extension_missing'] = 'Manjkajoča razširitev: '; $PHPMAILER_LANG['file_access'] = 'Nimam dostopa do datoteke: '; $PHPMAILER_LANG['file_open'] = 'Ne morem odpreti datoteke: '; $PHPMAILER_LANG['from_failed'] = 'Neveljaven e-naslov pošiljatelja: '; $PHPMAILER_LANG['instantiate'] = 'Ne morem inicializirati mail funkcije.'; $PHPMAILER_LANG['invalid_address'] = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: '; +$PHPMAILER_LANG['invalid_header'] = 'Neveljavno ime ali vrednost glave'; $PHPMAILER_LANG['invalid_hostentry'] = 'Neveljaven vnos gostitelja: '; $PHPMAILER_LANG['invalid_host'] = 'Neveljaven gostitelj: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.'; $PHPMAILER_LANG['provide_address'] = 'Prosimo, vnesite vsaj enega naslovnika.'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP napaka: Sledeči naslovniki so neveljavni: '; $PHPMAILER_LANG['signing'] = 'Napaka pri podpisovanju: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP koda: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Dodatne informacije o SMTP: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'Ne morem vzpostaviti povezave s SMTP strežnikom.'; +$PHPMAILER_LANG['smtp_detail'] = 'Podrobnosti: '; $PHPMAILER_LANG['smtp_error'] = 'Napaka SMTP strežnika: '; $PHPMAILER_LANG['variable_set'] = 'Ne morem nastaviti oz. ponastaviti spremenljivke: '; -$PHPMAILER_LANG['extension_missing'] = 'Manjkajoča razširitev: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php index f938f802..3c45bc1c 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php @@ -11,21 +11,28 @@ */ $PHPMAILER_LANG['authenticate'] = 'SMTP Hatası: Oturum açılamadı.'; +$PHPMAILER_LANG['buggy_php'] = 'PHP sürümünüz iletilerin bozulmasına neden olabilecek bir hatadan etkileniyor. Bunu düzeltmek için, SMTP kullanarak göndermeye geçin, mail.add_x_header seçeneğini devre dışı bırakın php.ini dosyanızdaki mail.add_x_header seçeneğini devre dışı bırakın, MacOS veya Linux geçin veya PHP sürümünü 7.0.17+ veya 7.1.3+ sürümüne yükseltin,'; $PHPMAILER_LANG['connect_host'] = 'SMTP Hatası: SMTP sunucusuna bağlanılamadı.'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTP Hatası: Veri kabul edilmedi.'; $PHPMAILER_LANG['empty_message'] = 'Mesajın içeriği boş'; $PHPMAILER_LANG['encoding'] = 'Bilinmeyen karakter kodlama: '; $PHPMAILER_LANG['execute'] = 'Çalıştırılamadı: '; +$PHPMAILER_LANG['extension_missing'] = 'Eklenti bulunamadı: '; $PHPMAILER_LANG['file_access'] = 'Dosyaya erişilemedi: '; $PHPMAILER_LANG['file_open'] = 'Dosya Hatası: Dosya açılamadı: '; $PHPMAILER_LANG['from_failed'] = 'Belirtilen adreslere gönderme başarısız: '; $PHPMAILER_LANG['instantiate'] = 'Örnek e-posta fonksiyonu oluşturulamadı.'; $PHPMAILER_LANG['invalid_address'] = 'Geçersiz e-posta adresi: '; +$PHPMAILER_LANG['invalid_header'] = 'Geçersiz başlık adı veya değeri: '; +$PHPMAILER_LANG['invalid_hostentry'] = 'Geçersiz ana bilgisayar girişi: '; +$PHPMAILER_LANG['invalid_host'] = 'Geçersiz ana bilgisayar: '; $PHPMAILER_LANG['mailer_not_supported'] = ' e-posta kütüphanesi desteklenmiyor.'; $PHPMAILER_LANG['provide_address'] = 'En az bir alıcı e-posta adresi belirtmelisiniz.'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP Hatası: Belirtilen alıcılara ulaşılamadı: '; $PHPMAILER_LANG['signing'] = 'İmzalama hatası: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP kodu: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'ek SMTP bilgileri: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP connect() fonksiyonu başarısız.'; +$PHPMAILER_LANG['smtp_detail'] = 'SMTP SMTP Detayı: '; $PHPMAILER_LANG['smtp_error'] = 'SMTP sunucu hatası: '; $PHPMAILER_LANG['variable_set'] = 'Değişken ayarlanamadı ya da sıfırlanamadı: '; -$PHPMAILER_LANG['extension_missing'] = 'Eklenti bulunamadı: '; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ur.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ur.php new file mode 100644 index 00000000..0b9de0f1 --- /dev/null +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-ur.php @@ -0,0 +1,30 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP خرابی: تصدیق کرنے سے قاصر۔'; +$PHPMAILER_LANG['connect_host'] = 'SMTP خرابی: سرور سے منسلک ہونے سے قاصر۔'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP خرابی: ڈیٹا قبول نہیں کیا گیا۔'; +$PHPMAILER_LANG['empty_message'] = 'پیغام کی باڈی خالی ہے۔'; +$PHPMAILER_LANG['encoding'] = 'نامعلوم انکوڈنگ: '; +$PHPMAILER_LANG['execute'] = 'عمل کرنے کے قابل نہیں '; +$PHPMAILER_LANG['file_access'] = 'فائل تک رسائی سے قاصر:'; +$PHPMAILER_LANG['file_open'] = 'فائل کی خرابی: فائل کو کھولنے سے قاصر:'; +$PHPMAILER_LANG['from_failed'] = 'درج ذیل بھیجنے والے کا پتہ ناکام ہو گیا:'; +$PHPMAILER_LANG['instantiate'] = 'میل فنکشن کی مثال بنانے سے قاصر۔'; +$PHPMAILER_LANG['invalid_address'] = 'بھیجنے سے قاصر: غلط ای میل پتہ:'; +$PHPMAILER_LANG['mailer_not_supported'] = ' میلر تعاون یافتہ نہیں ہے۔'; +$PHPMAILER_LANG['provide_address'] = 'آپ کو کم از کم ایک منزل کا ای میل پتہ فراہم کرنا چاہیے۔'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP خرابی: درج ذیل پتہ پر نہیں بھیجا جاسکا: '; +$PHPMAILER_LANG['signing'] = 'دستخط کی خرابی: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP ملنا ناکام ہوا'; +$PHPMAILER_LANG['smtp_error'] = 'SMTP سرور کی خرابی: '; +$PHPMAILER_LANG['variable_set'] = 'متغیر سیٹ نہیں کیا جا سکا: '; +$PHPMAILER_LANG['extension_missing'] = 'ایکٹینشن موجود نہیں ہے۔ '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP سرور کوڈ: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'اضافی SMTP سرور کی معلومات:'; +$PHPMAILER_LANG['invalid_header'] = 'غلط ہیڈر کا نام یا قدر'; diff --git a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php index 728a4994..03d49116 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php +++ b/phpmailer/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php @@ -9,11 +9,13 @@ */ $PHPMAILER_LANG['authenticate'] = 'SMTP 错误:登录失败。'; +$PHPMAILER_LANG['buggy_php'] = '您的 PHP 版本存在漏洞,可能会导致消息损坏。为修复此问题,请切换到使用 SMTP 发送,在您的 php.ini 中禁用 mail.add_x_header 选项。切换到 MacOS 或 Linux,或将您的 PHP 升级到 7.0.17+ 或 7.1.3+ 版本。'; $PHPMAILER_LANG['connect_host'] = 'SMTP 错误:无法连接到 SMTP 主机。'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误:数据不被接受。'; $PHPMAILER_LANG['empty_message'] = '邮件正文为空。'; $PHPMAILER_LANG['encoding'] = '未知编码:'; $PHPMAILER_LANG['execute'] = '无法执行:'; +$PHPMAILER_LANG['extension_missing'] = '缺少扩展名:'; $PHPMAILER_LANG['file_access'] = '无法访问文件:'; $PHPMAILER_LANG['file_open'] = '文件错误:无法打开文件:'; $PHPMAILER_LANG['from_failed'] = '发送地址错误:'; @@ -22,8 +24,13 @@ $PHPMAILER_LANG['invalid_address'] = '发送失败,电子邮箱地址是 $PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。'; $PHPMAILER_LANG['provide_address'] = '必须提供至少一个收件人地址。'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误:收件人地址错误:'; -$PHPMAILER_LANG['signing'] = '登录失败:'; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP服务器连接失败。'; $PHPMAILER_LANG['smtp_error'] = 'SMTP服务器出错:'; $PHPMAILER_LANG['variable_set'] = '无法设置或重置变量:'; -$PHPMAILER_LANG['extension_missing'] = '丢失模块 Extension:'; +$PHPMAILER_LANG['invalid_header'] = '无效的标题名称或值'; +$PHPMAILER_LANG['invalid_hostentry'] = '无效的hostentry: '; +$PHPMAILER_LANG['invalid_host'] = '无效的主机:'; +$PHPMAILER_LANG['signing'] = '签名错误:'; +$PHPMAILER_LANG['smtp_code'] = 'SMTP代码: '; +$PHPMAILER_LANG['smtp_code_ex'] = '附加SMTP信息: '; +$PHPMAILER_LANG['smtp_detail'] = '详情:'; diff --git a/phpmailer/vendor/phpmailer/phpmailer/phpunit.xml.dist b/phpmailer/vendor/phpmailer/phpmailer/phpunit.xml.dist deleted file mode 100644 index c68df965..00000000 --- a/phpmailer/vendor/phpmailer/phpmailer/phpunit.xml.dist +++ /dev/null @@ -1,35 +0,0 @@ - - - - - ./test/ - - - - - - - - languages - pop3 - - - - - ./src - - - - - - - - diff --git a/phpmailer/vendor/phpmailer/phpmailer/src/DSNConfigurator.php b/phpmailer/vendor/phpmailer/phpmailer/src/DSNConfigurator.php new file mode 100644 index 00000000..7058c1f0 --- /dev/null +++ b/phpmailer/vendor/phpmailer/phpmailer/src/DSNConfigurator.php @@ -0,0 +1,245 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2023 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * Configure PHPMailer with DSN string. + * + * @see https://en.wikipedia.org/wiki/Data_source_name + * + * @author Oleg Voronkovich + */ +class DSNConfigurator +{ + /** + * Create new PHPMailer instance configured by DSN. + * + * @param string $dsn DSN + * @param bool $exceptions Should we throw external exceptions? + * + * @return PHPMailer + */ + public static function mailer($dsn, $exceptions = null) + { + static $configurator = null; + + if (null === $configurator) { + $configurator = new DSNConfigurator(); + } + + return $configurator->configure(new PHPMailer($exceptions), $dsn); + } + + /** + * Configure PHPMailer instance with DSN string. + * + * @param PHPMailer $mailer PHPMailer instance + * @param string $dsn DSN + * + * @return PHPMailer + */ + public function configure(PHPMailer $mailer, $dsn) + { + $config = $this->parseDSN($dsn); + + $this->applyConfig($mailer, $config); + + return $mailer; + } + + /** + * Parse DSN string. + * + * @param string $dsn DSN + * + * @throws Exception If DSN is malformed + * + * @return array Configuration + */ + private function parseDSN($dsn) + { + $config = $this->parseUrl($dsn); + + if (false === $config || !isset($config['scheme']) || !isset($config['host'])) { + throw new Exception('Malformed DSN'); + } + + if (isset($config['query'])) { + parse_str($config['query'], $config['query']); + } + + return $config; + } + + /** + * Apply configuration to mailer. + * + * @param PHPMailer $mailer PHPMailer instance + * @param array $config Configuration + * + * @throws Exception If scheme is invalid + */ + private function applyConfig(PHPMailer $mailer, $config) + { + switch ($config['scheme']) { + case 'mail': + $mailer->isMail(); + break; + case 'sendmail': + $mailer->isSendmail(); + break; + case 'qmail': + $mailer->isQmail(); + break; + case 'smtp': + case 'smtps': + $mailer->isSMTP(); + $this->configureSMTP($mailer, $config); + break; + default: + throw new Exception( + sprintf( + 'Invalid scheme: "%s". Allowed values: "mail", "sendmail", "qmail", "smtp", "smtps".', + $config['scheme'] + ) + ); + } + + if (isset($config['query'])) { + $this->configureOptions($mailer, $config['query']); + } + } + + /** + * Configure SMTP. + * + * @param PHPMailer $mailer PHPMailer instance + * @param array $config Configuration + */ + private function configureSMTP($mailer, $config) + { + $isSMTPS = 'smtps' === $config['scheme']; + + if ($isSMTPS) { + $mailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; + } + + $mailer->Host = $config['host']; + + if (isset($config['port'])) { + $mailer->Port = $config['port']; + } elseif ($isSMTPS) { + $mailer->Port = SMTP::DEFAULT_SECURE_PORT; + } + + $mailer->SMTPAuth = isset($config['user']) || isset($config['pass']); + + if (isset($config['user'])) { + $mailer->Username = $config['user']; + } + + if (isset($config['pass'])) { + $mailer->Password = $config['pass']; + } + } + + /** + * Configure options. + * + * @param PHPMailer $mailer PHPMailer instance + * @param array $options Options + * + * @throws Exception If option is unknown + */ + private function configureOptions(PHPMailer $mailer, $options) + { + $allowedOptions = get_object_vars($mailer); + + unset($allowedOptions['Mailer']); + unset($allowedOptions['SMTPAuth']); + unset($allowedOptions['Username']); + unset($allowedOptions['Password']); + unset($allowedOptions['Hostname']); + unset($allowedOptions['Port']); + unset($allowedOptions['ErrorInfo']); + + $allowedOptions = \array_keys($allowedOptions); + + foreach ($options as $key => $value) { + if (!in_array($key, $allowedOptions)) { + throw new Exception( + sprintf( + 'Unknown option: "%s". Allowed values: "%s"', + $key, + implode('", "', $allowedOptions) + ) + ); + } + + switch ($key) { + case 'AllowEmpty': + case 'SMTPAutoTLS': + case 'SMTPKeepAlive': + case 'SingleTo': + case 'UseSendmailOptions': + case 'do_verp': + case 'DKIM_copyHeaderFields': + $mailer->$key = (bool) $value; + break; + case 'Priority': + case 'SMTPDebug': + case 'WordWrap': + $mailer->$key = (int) $value; + break; + default: + $mailer->$key = $value; + break; + } + } + } + + /** + * Parse a URL. + * Wrapper for the built-in parse_url function to work around a bug in PHP 5.5. + * + * @param string $url URL + * + * @return array|false + */ + protected function parseUrl($url) + { + if (\PHP_VERSION_ID >= 50600 || false === strpos($url, '?')) { + return parse_url($url); + } + + $chunks = explode('?', $url); + if (is_array($chunks)) { + $result = parse_url($chunks[0]); + if (is_array($result)) { + $result['query'] = $chunks[1]; + } + return $result; + } + + return false; + } +} diff --git a/phpmailer/vendor/phpmailer/phpmailer/src/Exception.php b/phpmailer/vendor/phpmailer/phpmailer/src/Exception.php index a50a8991..09c1a2cf 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/src/Exception.php +++ b/phpmailer/vendor/phpmailer/phpmailer/src/Exception.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. @@ -35,6 +35,6 @@ class Exception extends \Exception */ public function errorMessage() { - return '' . htmlspecialchars($this->getMessage()) . "
\n"; + return '' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . "
\n"; } } diff --git a/phpmailer/vendor/phpmailer/phpmailer/src/OAuth.php b/phpmailer/vendor/phpmailer/phpmailer/src/OAuth.php index c93d0be1..a7e95886 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/src/OAuth.php +++ b/phpmailer/vendor/phpmailer/phpmailer/src/OAuth.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. @@ -29,11 +29,11 @@ use League\OAuth2\Client\Token\AccessToken; * OAuth - OAuth2 authentication wrapper class. * Uses the oauth2-client package from the League of Extraordinary Packages. * - * @see http://oauth2-client.thephpleague.com + * @see https://oauth2-client.thephpleague.com * * @author Marcus Bointon (Synchro/coolbru) */ -class OAuth +class OAuth implements OAuthTokenProvider { /** * An instance of the League OAuth Client Provider. diff --git a/phpmailer/vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php b/phpmailer/vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php new file mode 100644 index 00000000..cbda1a12 --- /dev/null +++ b/phpmailer/vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php @@ -0,0 +1,44 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * OAuthTokenProvider - OAuth2 token provider interface. + * Provides base64 encoded OAuth2 auth strings for SMTP authentication. + * + * @see OAuth + * @see SMTP::authenticate() + * + * @author Peter Scopes (pdscopes) + * @author Marcus Bointon (Synchro/coolbru) + */ +interface OAuthTokenProvider +{ + /** + * Generate a base64-encoded OAuth token ensuring that the access token has not expired. + * The string to be base 64 encoded should be in the form: + * "user=\001auth=Bearer \001\001" + * + * @return string + */ + public function getOauth64(); +} diff --git a/phpmailer/vendor/phpmailer/phpmailer/src/PHPMailer.php b/phpmailer/vendor/phpmailer/phpmailer/src/PHPMailer.php index eb4b742b..2444bcf3 100644 --- a/phpmailer/vendor/phpmailer/phpmailer/src/PHPMailer.php +++ b/phpmailer/vendor/phpmailer/phpmailer/src/PHPMailer.php @@ -13,7 +13,7 @@ * @copyright 2012 - 2020 Marcus Bointon * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License * @note This program is distributed in the hope that it will be useful - WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. @@ -103,14 +103,14 @@ class PHPMailer * * @var string */ - public $From = 'root@localhost'; + public $From = ''; /** * The From name of the message. * * @var string */ - public $FromName = 'Root User'; + public $FromName = ''; /** * The envelope sender of the message. @@ -152,8 +152,7 @@ class PHPMailer * Only supported in simple alt or alt_inline message types * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator. * - * @see http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/ - * @see http://kigkonsult.se/iCalcreator/ + * @see https://kigkonsult.se/iCalcreator/ * * @var string */ @@ -254,7 +253,7 @@ class PHPMailer * You can set your own, but it must be in the format "", * as defined in RFC5322 section 3.6.4 or it will be ignored. * - * @see https://tools.ietf.org/html/rfc5322#section-3.6.4 + * @see https://www.rfc-editor.org/rfc/rfc5322#section-3.6.4 * * @var string */ @@ -350,17 +349,24 @@ class PHPMailer public $Password = ''; /** - * SMTP auth type. - * Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2, attempted in that order if not specified. + * SMTP authentication type. Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2. + * If not specified, the first one from that list that the server supports will be selected. * * @var string */ public $AuthType = ''; /** - * An instance of the PHPMailer OAuth class. + * SMTP SMTPXClient command attributes * - * @var OAuth + * @var array + */ + protected $SMTPXClient = []; + + /** + * An implementation of the PHPMailer OAuthTokenProvider interface. + * + * @var OAuthTokenProvider */ protected $oauth; @@ -381,7 +387,7 @@ class PHPMailer * 'DELAY' will notify you if there is an unusual delay in delivery, but the actual * delivery's outcome (success or failure) is not yet decided. * - * @see https://tools.ietf.org/html/rfc3461 See section 4.1 for more information about NOTIFY + * @see https://www.rfc-editor.org/rfc/rfc3461.html#section-4.1 for more information about NOTIFY */ public $dsn = ''; @@ -461,7 +467,7 @@ class PHPMailer * Only applicable when sending via SMTP. * * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path - * @see http://www.postfix.org/VERP_README.html Postfix VERP info + * @see https://www.postfix.org/VERP_README.html Postfix VERP info * * @var bool */ @@ -544,10 +550,10 @@ class PHPMailer * The function that handles the result of the send email action. * It is called out by send() for each email sent. * - * Value can be any php callable: http://www.php.net/is_callable + * Value can be any php callable: https://www.php.net/is_callable * * Parameters: - * bool $result result of the send action + * bool $result result of the send action * array $to email addresses of the recipients * array $cc cc email addresses * array $bcc bcc email addresses @@ -574,6 +580,10 @@ class PHPMailer * May be a callable to inject your own validator, but there are several built-in validators. * The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option. * + * If CharSet is UTF8, the validator is left at the default value, + * and you send to addresses that use non-ASCII local parts, then + * PHPMailer automatically changes to the 'eai' validator. + * * @see PHPMailer::validateAddress() * * @var string|callable @@ -653,6 +663,14 @@ class PHPMailer */ protected $ReplyToQueue = []; + /** + * Whether the need for SMTPUTF8 has been detected. Set by + * preSend() if necessary. + * + * @var bool + */ + public $UseSMTPUTF8 = false; + /** * The array of attachments. * @@ -689,7 +707,7 @@ class PHPMailer protected $boundary = []; /** - * The array of available languages. + * The array of available text strings for the current language. * * @var array */ @@ -750,7 +768,7 @@ class PHPMailer * * @var string */ - const VERSION = '6.5.0'; + const VERSION = '6.10.0'; /** * Error severity: message only, continue processing. @@ -795,7 +813,7 @@ class PHPMailer * The maximum line length supported by mail(). * * Background: mail() will sometimes corrupt messages - * with headers headers longer than 65 chars, see #818. + * with headers longer than 65 chars, see #818. * * @var int */ @@ -858,7 +876,7 @@ class PHPMailer private function mailPassthru($to, $subject, $body, $header, $params) { //Check overloading of mail function to avoid double-encoding - if (ini_get('mbstring.func_overload') & 1) { + if ((int)ini_get('mbstring.func_overload') & 1) { $subject = $this->secureHeader($subject); } else { $subject = $this->encodeHeader($this->secureHeader($subject)); @@ -896,7 +914,7 @@ class PHPMailer } //Is this a PSR-3 logger? if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { - $this->Debugoutput->debug($str); + $this->Debugoutput->debug(rtrim($str, "\r\n")); return; } @@ -1065,9 +1083,9 @@ class PHPMailer * be modified after calling this function), addition of such addresses is delayed until send(). * Addresses that have been added already return false, but do not throw exceptions. * - * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' - * @param string $address The email address to send, resp. to reply to - * @param string $name + * @param string $kind One of 'to', 'cc', 'bcc', or 'Reply-To' + * @param string $address The email address + * @param string $name An optional username associated with the address * * @throws Exception * @@ -1075,9 +1093,11 @@ class PHPMailer */ protected function addOrEnqueueAnAddress($kind, $address, $name) { - $address = trim($address); - $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim - $pos = strrpos($address, '@'); + $pos = false; + if ($address !== null) { + $address = trim($address); + $pos = strrpos($address, '@'); + } if (false === $pos) { //At-sign is missing. $error_message = sprintf( @@ -1094,21 +1114,30 @@ class PHPMailer return false; } + if ($name !== null && is_string($name)) { + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + } else { + $name = ''; + } $params = [$kind, $address, $name]; //Enqueue addresses with IDN until we know the PHPMailer::$CharSet. - if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) { - if ('Reply-To' !== $kind) { - if (!array_key_exists($address, $this->RecipientsQueue)) { - $this->RecipientsQueue[$address] = $params; + //Domain is assumed to be whatever is after the last @ symbol in the address + if ($this->has8bitChars(substr($address, ++$pos))) { + if (static::idnSupported()) { + if ('Reply-To' !== $kind) { + if (!array_key_exists($address, $this->RecipientsQueue)) { + $this->RecipientsQueue[$address] = $params; + + return true; + } + } elseif (!array_key_exists($address, $this->ReplyToQueue)) { + $this->ReplyToQueue[$address] = $params; return true; } - } elseif (!array_key_exists($address, $this->ReplyToQueue)) { - $this->ReplyToQueue[$address] = $params; - - return true; } - + //We have an 8-bit domain, but we are missing the necessary extensions to support it + //Or we are already sending to this address return false; } @@ -1116,6 +1145,22 @@ class PHPMailer return call_user_func_array([$this, 'addAnAddress'], $params); } + /** + * Set the boundaries to use for delimiting MIME parts. + * If you override this, ensure you set all 3 boundaries to unique values. + * The default boundaries include a "=_" sequence which cannot occur in quoted-printable bodies, + * as suggested by https://www.rfc-editor.org/rfc/rfc2045#section-6.7 + * + * @return void + */ + public function setBoundaries() + { + $this->uniqueid = $this->generateId(); + $this->boundary[1] = 'b1=_' . $this->uniqueid; + $this->boundary[2] = 'b2=_' . $this->uniqueid; + $this->boundary[3] = 'b3=_' . $this->uniqueid; + } + /** * Add an address to one of the recipient arrays or to the ReplyTo array. * Addresses that have been added already return false, but do not throw exceptions. @@ -1130,6 +1175,15 @@ class PHPMailer */ protected function addAnAddress($kind, $address, $name = '') { + if ( + self::$validator === 'php' && + ((bool) preg_match('/[\x80-\xFF]/', $address)) + ) { + //The caller has not altered the validator and is sending to an address + //with UTF-8, so assume that they want UTF-8 support instead of failing + $this->CharSet = self::CHARSET_UTF8; + self::$validator = 'eai'; + } if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) { $error_message = sprintf( '%s: %s', @@ -1181,32 +1235,41 @@ class PHPMailer * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available. * Note that quotes in the name part are removed. * - * @see http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation + * @see https://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation * * @param string $addrstr The address list string * @param bool $useimap Whether to use the IMAP extension to parse the list + * @param string $charset The charset to use when decoding the address list string. * * @return array */ - public static function parseAddresses($addrstr, $useimap = true) + public static function parseAddresses($addrstr, $useimap = true, $charset = self::CHARSET_ISO88591) { $addresses = []; if ($useimap && function_exists('imap_rfc822_parse_adrlist')) { //Use this built-in parser if it's available $list = imap_rfc822_parse_adrlist($addrstr, ''); + // Clear any potential IMAP errors to get rid of notices being thrown at end of script. + imap_errors(); foreach ($list as $address) { if ( - ('.SYNTAX-ERROR.' !== $address->host) && static::validateAddress( - $address->mailbox . '@' . $address->host - ) + '.SYNTAX-ERROR.' !== $address->host && + static::validateAddress($address->mailbox . '@' . $address->host) ) { //Decode the name part if it's present and encoded if ( property_exists($address, 'personal') && - extension_loaded('mbstring') && - preg_match('/^=\?.*\?=$/', $address->personal) + //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled + defined('MB_CASE_UPPER') && + preg_match('/^=\?.*\?=$/s', $address->personal) ) { + $origCharset = mb_internal_encoding(); + mb_internal_encoding($charset); + //Undo any RFC2047-encoded spaces-as-underscores + $address->personal = str_replace('_', '=20', $address->personal); + //Decode the name $address->personal = mb_decode_mimeheader($address->personal); + mb_internal_encoding($origCharset); } $addresses[] = [ @@ -1234,9 +1297,16 @@ class PHPMailer $email = trim(str_replace('>', '', $email)); $name = trim($name); if (static::validateAddress($email)) { + //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled //If this name is encoded, decode it - if (preg_match('/^=\?.*\?=$/', $name)) { + if (defined('MB_CASE_UPPER') && preg_match('/^=\?.*\?=$/s', $name)) { + $origCharset = mb_internal_encoding(); + mb_internal_encoding($charset); + //Undo any RFC2047-encoded spaces-as-underscores + $name = str_replace('_', '=20', $name); + //Decode the name $name = mb_decode_mimeheader($name); + mb_internal_encoding($origCharset); } $addresses[] = [ //Remove any surrounding quotes and spaces from the name @@ -1264,7 +1334,7 @@ class PHPMailer */ public function setFrom($address, $name = '', $auto = true) { - $address = trim($address); + $address = trim((string)$address); $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim //Don't validate now addresses with IDN. Will be done in send(). $pos = strrpos($address, '@'); @@ -1316,6 +1386,7 @@ class PHPMailer * * `pcre` Use old PCRE implementation; * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL; * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements. + * * `eai` Use a pattern similar to the HTML5 spec for 'email' and to firefox, extended to support EAI (RFC6530). * * `noregex` Don't use a regex: super fast, really dumb. * Alternatively you may pass in a callable to inject your own validator, for example: * @@ -1360,7 +1431,6 @@ class PHPMailer * * IPv6 literals: 'first.last@[IPv6:a1::]' * Not all of these will necessarily work for sending! * - * @see http://squiloople.com/2009/12/20/email-address-validation/ * @copyright 2009-2010 Michael Rushton * Feel free to use and redistribute this code. But please keep this copyright notice. */ @@ -1387,6 +1457,24 @@ class PHPMailer '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD', $address ); + case 'eai': + /* + * This is the pattern used in the HTML5 spec for validation of 'email' type + * form input elements (as above), modified to accept Unicode email addresses. + * This is also more lenient than Firefox' html5 spec, in order to make the regex faster. + * 'eai' is an acronym for Email Address Internationalization. + * This validator is selected automatically if you attempt to use recipient addresses + * that contain Unicode characters in the local part. + * + * @see https://html.spec.whatwg.org/#e-mail-state-(type=email) + * @see https://en.wikipedia.org/wiki/International_email + */ + return (bool) preg_match( + '/^[-\p{L}\p{N}\p{M}.!#$%&\'*+\/=?^_`{|}~]+@[\p{L}\p{N}\p{M}](?:[\p{L}\p{N}\p{M}-]{0,61}' . + '[\p{L}\p{N}\p{M}])?(?:\.[\p{L}\p{N}\p{M}]' . + '(?:[-\p{L}\p{N}\p{M}]{0,61}[\p{L}\p{N}\p{M}])?)*$/usD', + $address + ); case 'php': default: return filter_var($address, FILTER_VALIDATE_EMAIL) !== false; @@ -1436,7 +1524,12 @@ class PHPMailer $errorcode = 0; if (defined('INTL_IDNA_VARIANT_UTS46')) { //Use the current punycode standard (appeared in PHP 7.2) - $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_UTS46); + $punycode = idn_to_ascii( + $domain, + \IDNA_DEFAULT | \IDNA_USE_STD3_RULES | \IDNA_CHECK_BIDI | + \IDNA_CHECK_CONTEXTJ | \IDNA_NONTRANSITIONAL_TO_ASCII, + \INTL_IDNA_VARIANT_UTS46 + ); } elseif (defined('INTL_IDNA_VARIANT_2003')) { //Fall back to this old, deprecated/removed encoding $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_2003); @@ -1508,21 +1601,33 @@ class PHPMailer && ini_get('mail.add_x_header') === '1' && stripos(PHP_OS, 'WIN') === 0 ) { - trigger_error( - 'Your version of PHP is affected by a bug that may result in corrupted messages.' . - ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' . - ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', - E_USER_WARNING - ); + trigger_error($this->lang('buggy_php'), E_USER_WARNING); } try { $this->error_count = 0; //Reset errors $this->mailHeader = ''; + //The code below tries to support full use of Unicode, + //while remaining compatible with legacy SMTP servers to + //the greatest degree possible: If the message uses + //Unicode in the local parts of any addresses, it is sent + //using SMTPUTF8. If not, it it sent using + //punycode-encoded domains and plain SMTP. + if ( + static::CHARSET_UTF8 === strtolower($this->CharSet) && + ($this->anyAddressHasUnicodeLocalPart($this->RecipientsQueue) || + $this->anyAddressHasUnicodeLocalPart(array_keys($this->all_recipients)) || + $this->anyAddressHasUnicodeLocalPart($this->ReplyToQueue) || + $this->addressHasUnicodeLocalPart($this->From)) + ) { + $this->UseSMTPUTF8 = true; + } //Dequeue recipient and Reply-To addresses with IDN foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) { - $params[1] = $this->punyencodeAddress($params[1]); + if (!$this->UseSMTPUTF8) { + $params[1] = $this->punyencodeAddress($params[1]); + } call_user_func_array([$this, 'addAnAddress'], $params); } if (count($this->to) + count($this->cc) + count($this->bcc) < 1) { @@ -1531,17 +1636,21 @@ class PHPMailer //Validate From, Sender, and ConfirmReadingTo addresses foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) { - $this->$address_kind = trim($this->$address_kind); - if (empty($this->$address_kind)) { + if ($this->{$address_kind} === null) { + $this->{$address_kind} = ''; continue; } - $this->$address_kind = $this->punyencodeAddress($this->$address_kind); - if (!static::validateAddress($this->$address_kind)) { + $this->{$address_kind} = trim($this->{$address_kind}); + if (empty($this->{$address_kind})) { + continue; + } + $this->{$address_kind} = $this->punyencodeAddress($this->{$address_kind}); + if (!static::validateAddress($this->{$address_kind})) { $error_message = sprintf( '%s (%s): %s', $this->lang('invalid_address'), $address_kind, - $this->$address_kind + $this->{$address_kind} ); $this->setError($error_message); $this->edebug($error_message); @@ -1641,17 +1750,17 @@ class PHPMailer default: $sendMethod = $this->Mailer . 'Send'; if (method_exists($this, $sendMethod)) { - return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody); + return $this->{$sendMethod}($this->MIMEHeader, $this->MIMEBody); } return $this->mailSend($this->MIMEHeader, $this->MIMEBody); } } catch (Exception $exc) { - if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true) { - $this->smtp->reset(); - } $this->setError($exc->getMessage()); $this->edebug($exc->getMessage()); + if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true && $this->smtp->connected()) { + $this->smtp->reset(); + } if ($this->exceptions) { throw $exc; } @@ -1683,11 +1792,13 @@ class PHPMailer //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver //A space after `-f` is optional, but there is a long history of its presence //causing problems, so we don't use one - //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html - //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html - //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html + //Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html + //Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html //Example problem: https://www.drupal.org/node/1057954 - if (empty($this->Sender) && !empty(ini_get('sendmail_from'))) { + + //PHP 5.6 workaround + $sendmail_from_value = ini_get('sendmail_from'); + if (empty($this->Sender) && !empty($sendmail_from_value)) { //PHP config has a sender address we can use $this->Sender = ini_get('sendmail_from'); } @@ -1724,7 +1835,7 @@ class PHPMailer fwrite($mail, $header); fwrite($mail, $body); $result = pclose($mail); - $addrinfo = static::parseAddresses($toAddr); + $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet); $this->doCallback( ($result === 0), [[$addrinfo['address'], $addrinfo['name']]], @@ -1779,7 +1890,13 @@ class PHPMailer */ protected static function isShellSafe($string) { - //Future-proof + //It's not possible to use shell commands safely (which includes the mail() function) without escapeshellarg, + //but some hosting providers disable it, creating a security problem that we don't want to have to deal with, + //so we don't. + if (!function_exists('escapeshellarg') || !function_exists('escapeshellcmd')) { + return false; + } + if ( escapeshellcmd($string) !== $string || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) @@ -1814,7 +1931,7 @@ class PHPMailer */ protected static function isPermittedPath($path) { - //Matches scheme definition from https://tools.ietf.org/html/rfc3986#section-3.1 + //Matches scheme definition from https://www.rfc-editor.org/rfc/rfc3986#section-3.1 return !preg_match('#^[a-z][a-z\d+.-]*://#i', $path); } @@ -1830,7 +1947,7 @@ class PHPMailer if (!static::isPermittedPath($path)) { return false; } - $readable = file_exists($path); + $readable = is_file($path); //If not a UNC path (expected to start with \\), check read permission, see #2069 if (strpos($path, '\\\\') !== 0) { $readable = $readable && is_readable($path); @@ -1841,7 +1958,7 @@ class PHPMailer /** * Send mail using the PHP mail() function. * - * @see http://www.php.net/manual/en/book.mail.php + * @see https://www.php.net/manual/en/book.mail.php * * @param string $header The message headers * @param string $body The message body @@ -1858,18 +1975,27 @@ class PHPMailer foreach ($this->to as $toaddr) { $toArr[] = $this->addrFormat($toaddr); } - $to = implode(', ', $toArr); + $to = trim(implode(', ', $toArr)); + + //If there are no To-addresses (e.g. when sending only to BCC-addresses) + //the following should be added to get a correct DKIM-signature. + //Compare with $this->preSend() + if ($to === '') { + $to = 'undisclosed-recipients:;'; + } $params = null; //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver //A space after `-f` is optional, but there is a long history of its presence //causing problems, so we don't use one - //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html - //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html - //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html + //Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html + //Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html //Example problem: https://www.drupal.org/node/1057954 //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. - if (empty($this->Sender) && !empty(ini_get('sendmail_from'))) { + + //PHP 5.6 workaround + $sendmail_from_value = ini_get('sendmail_from'); + if (empty($this->Sender) && !empty($sendmail_from_value)) { //PHP config has a sender address we can use $this->Sender = ini_get('sendmail_from'); } @@ -1884,7 +2010,7 @@ class PHPMailer if ($this->SingleTo && count($toArr) > 1) { foreach ($toArr as $toAddr) { $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); - $addrinfo = static::parseAddresses($toAddr); + $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet); $this->doCallback( $result, [[$addrinfo['address'], $addrinfo['name']]], @@ -1938,6 +2064,38 @@ class PHPMailer return $this->smtp; } + /** + * Provide SMTP XCLIENT attributes + * + * @param string $name Attribute name + * @param ?string $value Attribute value + * + * @return bool + */ + public function setSMTPXclientAttribute($name, $value) + { + if (!in_array($name, SMTP::$xclient_allowed_attributes)) { + return false; + } + if (isset($this->SMTPXClient[$name]) && $value === null) { + unset($this->SMTPXClient[$name]); + } elseif ($value !== null) { + $this->SMTPXClient[$name] = $value; + } + + return true; + } + + /** + * Get SMTP XCLIENT attributes + * + * @return array + */ + public function getSMTPXclientAttributes() + { + return $this->SMTPXClient; + } + /** * Send mail via SMTP. * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. @@ -1960,12 +2118,20 @@ class PHPMailer if (!$this->smtpConnect($this->SMTPOptions)) { throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL); } + //If we have recipient addresses that need Unicode support, + //but the server doesn't support it, stop here + if ($this->UseSMTPUTF8 && !$this->smtp->getServerExt('SMTPUTF8')) { + throw new Exception($this->lang('no_smtputf8'), self::STOP_CRITICAL); + } //Sender already validated in preSend() if ('' === $this->Sender) { $smtp_from = $this->From; } else { $smtp_from = $this->Sender; } + if (count($this->SMTPXClient)) { + $this->smtp->xclient($this->SMTPXClient); + } if (!$this->smtp->mail($smtp_from)) { $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError())); throw new Exception($this->ErrorInfo, self::STOP_CRITICAL); @@ -2058,6 +2224,10 @@ class PHPMailer $this->smtp->setDebugLevel($this->SMTPDebug); $this->smtp->setDebugOutput($this->Debugoutput); $this->smtp->setVerp($this->do_verp); + $this->smtp->setSMTPUTF8($this->UseSMTPUTF8); + if ($this->Host === null) { + $this->Host = 'localhost'; + } $hosts = explode(';', $this->Host); $lastexception = null; @@ -2125,15 +2295,23 @@ class PHPMailer $this->smtp->hello($hello); //Automatically enable TLS encryption if: //* it's not disabled + //* we are not connecting to localhost //* we have openssl extension //* we are not already using SSL //* the server offers STARTTLS - if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) { + if ( + $this->SMTPAutoTLS && + $this->Host !== 'localhost' && + $sslext && + $secure !== 'ssl' && + $this->smtp->getServerExt('STARTTLS') + ) { $tls = true; } if ($tls) { if (!$this->smtp->startTLS()) { - throw new Exception($this->lang('connect_host')); + $message = $this->getSmtpErrorMessage('connect_host'); + throw new Exception($message); } //We must resend EHLO after TLS negotiation $this->smtp->hello($hello); @@ -2164,6 +2342,11 @@ class PHPMailer if ($this->exceptions && null !== $lastexception) { throw $lastexception; } + if ($this->exceptions) { + // no exception was thrown, likely $this->smtp->connect() failed + $message = $this->getSmtpErrorMessage('connect_host'); + throw new Exception($message); + } return false; } @@ -2181,14 +2364,15 @@ class PHPMailer /** * Set the language for error messages. - * Returns false if it cannot load the language file. * The default language is English. * * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr") - * @param string $lang_path Path to the language file directory, with trailing separator (slash).D + * Optionally, the language code can be enhanced with a 4-character + * script annotation and/or a 2-character country annotation. + * @param string $lang_path Path to the language file directory, with trailing separator (slash) * Do not set this from user input! * - * @return bool + * @return bool Returns true if the requested language was loaded, false otherwise. */ public function setLanguage($langcode = 'en', $lang_path = '') { @@ -2211,44 +2395,78 @@ class PHPMailer //Define full set of translatable strings in English $PHPMAILER_LANG = [ 'authenticate' => 'SMTP Error: Could not authenticate.', + 'buggy_php' => 'Your version of PHP is affected by a bug that may result in corrupted messages.' . + ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' . + ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', 'data_not_accepted' => 'SMTP Error: data not accepted.', 'empty_message' => 'Message body empty', 'encoding' => 'Unknown encoding: ', 'execute' => 'Could not execute: ', + 'extension_missing' => 'Extension missing: ', 'file_access' => 'Could not access file: ', 'file_open' => 'File Error: Could not open file: ', 'from_failed' => 'The following From address failed: ', 'instantiate' => 'Could not instantiate mail function.', 'invalid_address' => 'Invalid address: ', + 'invalid_header' => 'Invalid header name or value', 'invalid_hostentry' => 'Invalid hostentry: ', 'invalid_host' => 'Invalid host: ', 'mailer_not_supported' => ' mailer is not supported.', 'provide_address' => 'You must provide at least one recipient email address.', 'recipients_failed' => 'SMTP Error: The following recipients failed: ', 'signing' => 'Signing Error: ', + 'smtp_code' => 'SMTP code: ', + 'smtp_code_ex' => 'Additional SMTP info: ', 'smtp_connect_failed' => 'SMTP connect() failed.', + 'smtp_detail' => 'Detail: ', 'smtp_error' => 'SMTP server error: ', 'variable_set' => 'Cannot set or reset variable: ', - 'extension_missing' => 'Extension missing: ', + 'no_smtputf8' => 'Server does not support SMTPUTF8 needed to send to Unicode addresses', ]; if (empty($lang_path)) { //Calculate an absolute path so it can work if CWD is not here $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; } + //Validate $langcode - if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) { + $foundlang = true; + $langcode = strtolower($langcode); + if ( + !preg_match('/^(?P[a-z]{2})(?P \r\n"; + if ($async) { - $b .= " \r\n"; - $b .= "
\r\n\r\n
"; - } else { - $b .= " \r\n"; + $b .= "
\r\n\r\n
"; } /* @@ -89,7 +93,7 @@ function piwik_analytics(string &$b) $b .= ""; } @@ -104,6 +108,7 @@ function piwik_addon_admin (string &$o) '$siteid' => ['siteid', DI::l10n()->t('Site ID'), DI::config()->get('piwik','siteid' ), ''], '$optout' => ['optout', DI::l10n()->t('Show opt-out cookie link?'), DI::config()->get('piwik','optout' ), ''], '$async' => ['async', DI::l10n()->t('Asynchronous tracking'), DI::config()->get('piwik','async' ), ''], + '$shortendpoint' => ['shortendpoint', DI::l10n()->t("Shortcut path to the script ('/js/' instead of '/piwik.js')"), DI::config()->get('piwik','shortendpoint' ), ''], ]); } @@ -113,4 +118,5 @@ function piwik_addon_admin_post() DI::config()->set('piwik', 'siteid', trim($_POST['siteid'] ?? '')); DI::config()->set('piwik', 'optout', trim($_POST['optout'] ?? '')); DI::config()->set('piwik', 'async', trim($_POST['async'] ?? '')); + DI::config()->set('piwik', 'shortendpoint', trim($_POST['shortendpoint'] ?? '')); } diff --git a/piwik/templates/admin.tpl b/piwik/templates/admin.tpl index 2ab1869b..7a9b5d71 100644 --- a/piwik/templates/admin.tpl +++ b/piwik/templates/admin.tpl @@ -2,4 +2,5 @@ {{include file="field_input.tpl" field=$siteid}} {{include file="field_checkbox.tpl" field=$optout}} {{include file="field_checkbox.tpl" field=$async}} +{{include file="field_checkbox.tpl" field=$shortendpoint}}
diff --git a/planets/lang/de/messages.po b/planets/lang/de/messages.po index 507bbbf5..c06493e2 100644 --- a/planets/lang/de/messages.po +++ b/planets/lang/de/messages.po @@ -14,9 +14,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:15-0500\n" -"PO-Revision-Date: 2021-12-22 16:22+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 11:19+0000\n" +"Last-Translator: Steffen K9, 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/planets/lang/it/messages.po b/planets/lang/it/messages.po index b3a93820..c15d7460 100644 --- a/planets/lang/it/messages.po +++ b/planets/lang/it/messages.po @@ -10,28 +10,20 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 12:56+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 11:19+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: planets.php:131 planets.php:135 -msgid "Planets" -msgstr "Pianeti" - -#: planets.php:139 -msgid "Planets Settings" -msgstr "Impostazioni \"Pianeti\"" - -#: planets.php:141 +#: planets.php:126 msgid "Enable Planets Addon" msgstr "Abilita il componente aggiuntivo Pianeti" -#: planets.php:147 -msgid "Save Settings" -msgstr "Salva Impostazioni" +#: planets.php:131 +msgid "Planets Settings" +msgstr "Impostazioni \"Pianeti\"" diff --git a/planets/lang/it/strings.php b/planets/lang/it/strings.php index 7d5ac516..040f65ad 100644 --- a/planets/lang/it/strings.php +++ b/planets/lang/it/strings.php @@ -3,9 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Planets'] = 'Pianeti'; -$a->strings['Planets Settings'] = 'Impostazioni "Pianeti"'; $a->strings['Enable Planets Addon'] = 'Abilita il componente aggiuntivo Pianeti'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Planets Settings'] = 'Impostazioni "Pianeti"'; diff --git a/planets/planets.php b/planets/planets.php index 8a206fb5..8849010a 100644 --- a/planets/planets.php +++ b/planets/planets.php @@ -7,9 +7,7 @@ * Author: Tony Baldwin */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; @@ -29,7 +27,7 @@ function planets_install() Hook::register('addon_settings', 'addon/planets/planets.php', 'planets_settings'); Hook::register('addon_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); - Logger::notice("installed planets"); + DI::logger()->notice("installed planets"); } /** @@ -40,7 +38,7 @@ function planets_install() */ function planets_post_hook(&$item) { - Logger::notice('planets invoked'); + DI::logger()->notice('planets invoked'); if (!DI::userSession()->getLocalUserId()) { /* non-zero if this is a logged in user of this system */ diff --git a/twitter/vendor/jublonet/codebird-php/LICENSE b/pnut/LICENSE similarity index 86% rename from twitter/vendor/jublonet/codebird-php/LICENSE rename to pnut/LICENSE index 94a9ed02..fe6b9036 100644 --- a/twitter/vendor/jublonet/codebird-php/LICENSE +++ b/pnut/LICENSE @@ -1,23 +1,21 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble - The GNU General Public License is a free, copyleft license for -software and other kinds of works. + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to +our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. +software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you @@ -26,44 +24,34 @@ them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. The precise terms and conditions for copying, distribution and modification follow. @@ -72,7 +60,7 @@ modification follow. 0. Definitions. - "This License" refers to version 3 of the GNU General Public License. + "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. @@ -549,35 +537,45 @@ to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - 13. Use with the GNU Affero General Public License. + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single +under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General +Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published +GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's +versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. @@ -635,40 +633,30 @@ the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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 Foundation, either version 3 of the License, or + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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. + GNU Affero General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. +For more information on this, and how to apply and follow the GNU AGPL, see +. - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/pnut/README.md b/pnut/README.md new file mode 100644 index 00000000..798174b8 --- /dev/null +++ b/pnut/README.md @@ -0,0 +1,10 @@ +# Pnut connector + +With this addon to friendica you can give your users the possibility to post their *public* messages to pnut.io. + +No setup is needed for the admins to make it work for their users, however it is possible for the admin to create a client, so that the users don't have to. + +To do so, go to https://pnut.io/dev and scroll down to "Create New Client". +Enter a name of your choice and enter your Friendica host name as the website. +Use https://(yourhost.name)/pnut/connect as a redirect url, replace "(yourhost.name)" with the host name of your system. +Limit the scope to "basic,files,follow,polls,presence,stream,update_profile,write_post" \ No newline at end of file diff --git a/pnut/lang/C/messages.po b/pnut/lang/C/messages.po new file mode 100644 index 00000000..89b065fd --- /dev/null +++ b/pnut/lang/C/messages.po @@ -0,0 +1,74 @@ +# ADDON pnut +# Copyright (C) +# This file is distributed under the same license as the Friendica pnut addon package. +# +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-03-03 11:53+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: pnut.php:42 +msgid "Permission denied." +msgstr "" + +#: pnut.php:79 +msgid "You are now authenticated with pnut.io." +msgstr "" + +#: pnut.php:82 +msgid "Error fetching token. Please try again." +msgstr "" + +#: pnut.php:85 +msgid "return to the connector page" +msgstr "" + +#: pnut.php:103 +msgid "Save Settings" +msgstr "" + +#: pnut.php:104 pnut.php:150 +msgid "Client ID" +msgstr "" + +#: pnut.php:105 pnut.php:151 +msgid "Client Secret" +msgstr "" + +#: pnut.php:139 +msgid "Authenticate with pnut.io" +msgstr "" + +#: pnut.php:143 +msgid "Disconnect" +msgstr "" + +#: pnut.php:148 +msgid "Enable Pnut Post Addon" +msgstr "" + +#: pnut.php:149 +msgid "Post to Pnut by default" +msgstr "" + +#: pnut.php:152 +msgid "Access Token" +msgstr "" + +#: pnut.php:161 +msgid "Pnut Export" +msgstr "" + +#: pnut.php:203 +msgid "Post to Pnut" +msgstr "" diff --git a/pnut/lib/LICENSE b/pnut/lib/LICENSE new file mode 100644 index 00000000..579599a8 --- /dev/null +++ b/pnut/lib/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2013, Josh Dolitsky +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Josh Dolitsky nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL TRAVIS RICHARDSON BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/pnut/lib/phpnut.php b/pnut/lib/phpnut.php new file mode 100644 index 00000000..716945ed --- /dev/null +++ b/pnut/lib/phpnut.php @@ -0,0 +1,2512 @@ +_clientId = $client_id_or_token; + $this->_clientSecret = $client_secret; + } else { + $this->_accessToken = $client_id_or_token; + } + + // if the digicert certificate exists in the same folder as this file, + // remember that fact for later + if (file_exists(__DIR__ . '/DigiCertHighAssuranceEVRootCA.pem')) { + $this->_sslCA = __DIR__ . '/DigiCertHighAssuranceEVRootCA.pem'; + } + } + + /** + * Set whether or not to strip Envelope Response (meta) information + * This option will be deprecated in the future. Is it to allow + * a stepped migration path between code expecting the old behavior + * and new behavior. When not stripped, you still can use the proper + * method to pull the meta information. Please start converting your code ASAP + */ + public function includeResponseEnvelope(): void + { + $this->_stripResponseEnvelope = false; + } + + /** + * Construct the proper Auth URL for the user to visit and either grant + * or not access to your app. Usually you would place this as a link for + * the user to client, or a redirect to send them to the auth URL. + * Also can be called after authentication for additional scopes + * @param string $callback_uri Where you want the user to be directed + * after authenticating with pnut.io. This must be one of the URIs + * allowed by your pnut.io application settings. + * @param array $scope An array of scopes (permissions) you wish to obtain + * from the user. If you don't specify anything, you'll only receive + * access to the user's basic profile (the default). + */ + public function getAuthUrl(?string $callback_uri=null, array $scope=null): string + { + if (empty($this->_clientId)) { + throw new phpnutException('You must specify your pnut client ID'); + } + + if (is_null($callback_uri)) { + if (defined('PNUT_REDIRECT_URI')) { + $callback_uri = PNUT_REDIRECT_URI; + } elseif (isset($_ENV['PNUT_REDIRECT_URI'])) { + $callback_uri = $_ENV['PNUT_REDIRECT_URI']; + } else { + throw new phpnutException('You must specify your pnut callback URI'); + } + } + + if (is_null($scope)) { + if (defined('PNUT_APP_SCOPE')) { + $scope = PNUT_APP_SCOPE; + } elseif (isset($_ENV['PNUT_APP_SCOPE'])) { + $scope = $_ENV['PNUT_APP_SCOPE']; + } else { + $scope = 'basic'; + } + } + + if (is_array($scope)) { + $scope = implode(',', $scope); + } + + // construct an authorization url based on our client id and other data + $data = [ + 'client_id'=>$this->_clientId, + 'response_type'=>'code', + 'redirect_uri'=>$callback_uri, + 'scope'=>$scope, + ]; + + $url = $this->_authUrl; + if ($this->_accessToken) { + $url .= 'authorize?'; + } else { + $url .= 'authenticate?'; + } + $url .= $this->buildQueryString($data); + + // return the constructed url + return $url; + } + + /** + * Call this after they return from the auth page, or anytime you need the + * token. For example, you could store it in a database and use + * setAccessToken() later on to return on behalf of the user. + */ + public function getAccessToken(string $callback_uri) + { + // if there's no access token set, and they're returning from + // the auth page with a code, use the code to get a token + if (!$this->_accessToken && isset($_GET['code']) && $_GET['code'] !== '') { + + if (empty($this->_clientId) || empty($this->_clientSecret)) { + throw new phpnutException('You must specify your Pnut client ID and client secret'); + } + + // construct the necessary elements to get a token + $data = [ + 'client_id'=>$this->_clientId, + 'client_secret'=>$this->_clientSecret, + 'grant_type'=>'authorization_code', + 'redirect_uri'=>$callback_uri, + 'code'=>$_GET['code'], + ]; + + // try and fetch the token with the above data + $res = $this->httpReq( + 'post', + "{$this->_baseUrl}oauth/access_token", + $data + ); + + // store it for later + $this->_accessToken = $res['access_token']; + $this->_username = $res['username']; + $this->_user_id = $res['user_id']; + } + + // return what we have (this may be a token, or it may be nothing) + return $this->_accessToken; + } + + /** + * Check the scope of current token to see if it has required scopes + * has to be done after a check + * + * @return int|array + */ + public function checkScopes(array $app_scopes) + { + if (count($this->_scopes) === 0) { + return -1; // _scope is empty + } + $missing = []; + foreach($app_scopes as $scope) { + if (!in_array($scope, $this->_scopes)) { + if ($scope === 'public_messages') { + // messages works for public_messages + if (in_array('messages', $this->_scopes)) { + // if we have messages in our scopes + continue; + } + } + $missing[] = $scope; + } + } + // identify the ones missing + if (count($missing) !== 0) { + // do something + return $missing; + } + return 0; // 0 missing + } + + /** + * Set the access token (eg: after retrieving it from offline storage) + * @param string $token A valid access token you're previously received + * from calling getAccessToken(). + */ + public function setAccessToken(?string $token=null): void + { + $this->_accessToken = $token; + } + + /** + * Deauthorize the current token (delete your authorization from the API) + * Generally this is useful for logging users out from a web app, so they + * don't get automatically logged back in the next time you redirect them + * to the authorization URL. + */ + public function deauthorizeToken() + { + return $this->httpReq('delete', "{$this->_baseUrl}token"); + } + + /** + * Retrieve an app access token from the app.net API. This allows you + * to access the API without going through the user access flow if you + * just want to (eg) consume global. App access tokens are required for + * some actions (like streaming global). DO NOT share the return value + * of this function with any user (or save it in a cookie, etc). This + * is considered secret info for your app only. + * @return string The app access token + */ + public function getAppAccessToken() + { + if (empty($this->_clientId) || empty($this->_clientSecret)) { + throw new phpnutException('You must specify your Pnut client ID and client secret'); + } + + // construct the necessary elements to get a token + $data = [ + 'client_id'=>$this->_clientId, + 'client_secret'=>$this->_clientSecret, + 'grant_type'=>'client_credentials', + ]; + // try and fetch the token with the above data + $res = $this->httpReq( + 'post', + "{$this->_baseUrl}oauth/access_token", + $data + ); + // store it for later + $this->_appAccessToken = $res['access_token']; + $this->_accessToken = $res['access_token']; + $this->_username = null; + $this->_user_id = null; + return $this->_accessToken; + } + + /** + * Returns the total number of requests you're allowed within the + * alloted time period. + * @see getRateLimitReset() + */ + public function getRateLimit() + { + return $this->_rateLimit; + } + + /** + * The number of requests you have remaining within the alloted time period + * @see getRateLimitReset() + */ + public function getRateLimitRemaining() + { + return $this->_rateLimitRemaining; + } + + /** + * The number of seconds remaining in the alloted time period. + * When this time is up you'll have getRateLimit() available again. + */ + public function getRateLimitReset() + { + return $this->_rateLimitReset; + } + + /** + * The scope the user has + */ + public function getScope() + { + return $this->_scope; + } + + /** + * Internal function, parses out important information pnut.io adds + * to the headers. + */ + protected function parseHeaders(string $response) + { + // take out the headers + // set internal variables + // return the body/content + $this->_rateLimit = null; + $this->_rateLimitRemaining = null; + $this->_rateLimitReset = null; + $this->_scope = null; + + $response = explode("\r\n\r\n", $response, 2); + $headers = $response[0]; + + if ($headers === 'HTTP/1.1 100 Continue') { + $response = explode("\r\n\r\n", $response[1], 2); + $headers = $response[0]; + } + + // this is not a good way to parse http headers + // it will not (for example) take into account multiline headers + // but what we're looking for is pretty basic, so we can ignore those shortcomings + $headers = explode("\r\n", $headers); + foreach ($headers as $header) { + $header = explode(': ', $header, 2); + if (count($header) < 2) { + continue; + } + list($k, $v) = $header; + switch ($k) { + case 'X-RateLimit-Remaining': + $this->_rateLimitRemaining = $v; + break; + case 'X-RateLimit-Limit': + $this->_rateLimit = $v; + break; + case 'X-RateLimit-Reset': + $this->_rateLimitReset = $v; + break; + case 'X-OAuth-Scopes': + $this->_scope = $v; + $this->_scopes = explode(',', $v); + break; + } + } + return $response[1] ?? null; + } + + /** + * Internal function. Used to turn things like TRUE into 1, and then + * calls http_build_query. + */ + protected function buildQueryString(array $array): string + { + foreach ($array as $k => &$v) { + if (is_array($v)) { + $v = implode(',', $v); + } elseif ($v === true) { + $v = '1'; + } + elseif ($v === false) { + $v = '0'; + } + unset($v); + } + return http_build_query($array); + } + + + /** + * Internal function to handle all + * HTTP requests (POST,PUT,GET,DELETE) + * + * @param string|array $params + */ + protected function httpReq(string $act, string $req, $params = [], string $contentType='application/x-www-form-urlencoded') + { + $ch = curl_init($req); + $headers = []; + if($act !== 'get') { + curl_setopt($ch, CURLOPT_POST, true); + // if they passed an array, build a list of parameters from it + if (is_array($params) && $act !== 'post-raw') { + $params = $this->buildQueryString($params); + } + curl_setopt($ch, CURLOPT_POSTFIELDS, $params); + $headers[] = "Content-Type: {$contentType}"; + } + if($act !== 'post' && $act !== 'post-raw') { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($act)); + } + if($act === 'get' && isset($params['access_token'])) { + $headers[] = "Authorization: Bearer {$params['access_token']}"; + } elseif ($this->_accessToken) { + $headers[] = "Authorization: Bearer {$this->_accessToken}"; + } + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLINFO_HEADER_OUT, true); + curl_setopt($ch, CURLOPT_HEADER, true); + if ($this->_sslCA) { + curl_setopt($ch, CURLOPT_CAINFO, $this->_sslCA); + } + $this->_last_response = curl_exec($ch); + $this->_last_request = curl_getinfo($ch, CURLINFO_HEADER_OUT); + $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($http_status === 0) { + throw new phpnutException("Unable to connect to {$req}"); + } + if ($this->_last_request === false) { + if (!curl_getinfo($ch, CURLINFO_SSL_VERIFYRESULT)) { + throw new phpnutException('SSL verification failed, connection terminated.'); + } + } + if ($this->_last_response) { + $response = $this->parseHeaders($this->_last_response); + if ($response) { + $response = json_decode($response, true); + + if (isset($response['meta'])) { + if (isset($response['meta']['max_id'])) { + $this->_maxid = $response['meta']['max_id']; + $this->_minid = $response['meta']['min_id']; + } + if (isset($response['meta']['more'])) { + $this->_more = $response['meta']['more']; + } + if (isset($response['meta']['marker'])) { + $this->_last_marker = $response['meta']['marker']; + } + } + + // look for errors + if (isset($response['error'])) { + if (is_array($response['error'])) { + throw new phpnutException( + $response['error']['message'], + $response['error']['code'] + ); + } else { + throw new phpnutException($response['error']); + } + } + + // look for response migration errors + elseif (isset($response['meta'], $response['meta']['error_message'])) { + throw new phpnutException( + $response['meta']['error_message'], + $response['meta']['code'] + ); + } + } + } + + if ($http_status < 200 || $http_status >= 300) { + throw new phpnutException("HTTP error {$http_status}"); + } + + // if we've received a migration response, handle it and return data only + elseif ($this->_stripResponseEnvelope && isset($response['meta'], $response['data'])) { + return $response['data']; + } + + // else non response migration response, just return it + elseif (isset($response)) { + return $response; + } + + else { + throw new phpnutException('No response'); + } + } + + + /** + * Get max_id from last meta response data envelope + */ + public function getResponseMaxID() + { + return $this->_maxid; + } + + /** + * Get min_id from last meta response data envelope + */ + public function getResponseMinID() + { + return $this->_minid; + } + + /** + * Get more from last meta response data envelope + */ + public function getResponseMore() + { + return $this->_more; + } + + /** + * Get marker from last meta response data envelope + */ + public function getResponseMarker() + { + return $this->_last_marker; + } + + public function getLastRequest() + { + return $this->_last_request; + } + + public function getLastResponse() + { + return $this->_last_response; + } + + /** + * Fetch API configuration object + * @return array + */ + public function getConfig() + { + return $this->httpReq('get', "{$this->_baseUrl}sys/config"); + } + + /** + * Fetch basic API statistics + * @return array + */ + public function getStats() + { + return $this->httpReq('get', "{$this->_baseUrl}sys/stats"); + } + + /** + * Process user content, message or post text. + * Mentions and hashtags will be parsed out of the + * text, as will bare URLs. To create a link in the text without using a + * bare URL, include the anchor text in the object text and include a link + * entity in the function call. + * @param string $text The text of the user/message/post + * @param array $data An associative array of optional post data. This + * will likely change as the API evolves, as of this writing allowed keys are: + * reply_to, and raw. "raw" may be a complex object represented + * by an associative array. + * @param array $params An associative array of optional data to be included + * in the URL (such as 'include_raw') + * @return array An associative array representing the post. + */ + public function processText(string $text, array $data=[], array $params=[]) + { + $data['text'] = $text; + $json = json_encode($data); + $qs = ''; + if (!empty($params)) { + $qs = '?' . $this->buildQueryString($params); + } + return $this->httpReq( + 'post', + $this->_baseUrl . 'text/process' . $qs, + $json, + 'application/json' + ); + } + + /** + * Create a new Post object. Mentions and hashtags will be parsed out of the + * post text, as will bare URLs. To create a link in a post without using a + * bare URL, include the anchor text in the post's text and include a link + * entity in the post creation call. + * @param string $text The text of the post + * @param array $data An associative array of optional post data. This + * will likely change as the API evolves, as of this writing allowed keys are: + * reply_to, is_nsfw, and raw. "raw" may be a complex object represented + * by an associative array. + * @param array $params An associative array of optional data to be included + * in the URL (such as 'include_raw') + * @return array An associative array representing the post. + */ + public function createPost(string $text, array $data=[], array $params=[]) + { + $data['text'] = $text; + $json = json_encode($data); + $qs = ''; + if (!empty($params)) { + $qs = '?' . $this->buildQueryString($params); + } + return $this->httpReq( + 'post', + $this->_baseUrl . 'posts' . $qs, + $json, + 'application/json' + ); + } + + /** + * Create a new Post object. Mentions and hashtags will be parsed out of the + * post text, as will bare URLs. To create a link in a post without using a + * bare URL, include the anchor text in the post's text and include a link + * entity in the post creation call. + * @param integer $post_id The ID of the post to revise + * @param string $text The new text of the post + * @param array $data An associative array of optional post data. This + * will likely change as the API evolves, as of this writing allowed keys are: + * is_nsfw. + * @param array $params An associative array of optional data to be included + * in the URL (such as 'include_raw') + * @return array An associative array representing the post. + */ + public function revisePost(int $post_id, string $text, array $data=[], array $params=[]) + { + $data['text'] = $text; + $json = json_encode($data); + $qs = ''; + if (!empty($params)) { + $qs = '?' . $this->buildQueryString($params); + } + return $this->httpReq( + 'put', + $this->_baseUrl . 'posts/' . urlencode($post_id) . $qs, + $json, + 'application/json' + ); + } + + /** + * Returns a specific Post. + * @param integer $post_id The ID of the post to retrieve + * @param array $params An associative array of optional general parameters. + * @return array An associative array representing the post + */ + public function getPost(int $post_id, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/' . urlencode($post_id) . '?' + . $this->buildQueryString($params) + ); + } + + /** + * Returns a list of Posts. + * @param array $post_ids The list of post IDs to retrieve + * @param array $params An associative array of optional general parameters. + * @return array An array of arrays representing the posts + */ + public function getMultiplePosts(array $post_ids, array $params=[]) + { + $params['ids'] = $post_ids; + + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts?' . $this->buildQueryString($params) + ); + } + + /** + * Delete a Post. The current user must be the same user who created the Post. + * It returns the deleted Post on success. + * @param integer $post_id The ID of the post to delete + * @return array An associative array representing the post that was deleted + */ + public function deletePost(int $post_id) + { + return $this->httpReq( + 'delete', + $this->_baseUrl . 'posts/' . urlencode($post_id) + ); + } + + /** + * Retrieve the Posts that are 'in reply to' a specific Post. + * @param integer $post_id The ID of the post you want to retrieve replies for. + * @param array $params An associative array of optional general parameters. + * @return array An array of associative arrays, each representing a single post. + */ + public function getPostThread(int $post_id, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/' . urlencode($post_id) . '/thread?' + . $this->buildQueryString($params) + ); + } + + /** + * Retrieve revisions of a post. Currently only one can be created. + * @param integer $post_id The ID of the post you want to retrieve previous revisions of. + * @param array $params An associative array of optional general parameters. + * @return array An array of associative arrays, each representing a single post. + */ + public function getPostRevisions(int $post_id, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/' . urlencode($post_id) . '/revisions?' + . $this->buildQueryString($params) + ); + } + + /** + * Get the most recent Posts created by a specific User in reverse + * chronological order (most recent first). + * @param string|int $user_id $user_id Either the ID of the user you wish to retrieve posts by, + * or the string "me", which will retrieve posts for the user you're authenticated + * as. + * @param array $params An associative array of optional general parameters. + * @return array An array of associative arrays, each representing a single post. + */ + public function getUserPosts($user_id = 'me', array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/posts?' + . $this->buildQueryString($params) + ); + } + + /** + * Get the most recent Posts mentioning by a specific User in reverse + * chronological order (newest first). + * @param string|int $user_id Either the ID of the user who is being mentioned, or + * the string "me", which will retrieve posts for the user you're authenticated + * as. + * @param array $params An associative array of optional general parameters. + * @return array An array of associative arrays, each representing a single post. + */ + public function getUserMentions($user_id='me', array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/mentions?' + . $this->buildQueryString($params) + ); + } + + /** + * Get the currently authenticated user's recent messages + * @param array $params An associative array of optional general parameters. + * @return array An array of associative arrays, each representing a single post. + */ + public function getUserMessages(array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/me/messages?' + . $this->buildQueryString($params) + ); + } + + /** + * Return the 20 most recent posts from the current User and + * the Users they follow. + * @param array $params An associative array of optional general parameters. + * @return array An array of associative arrays, each representing a single post. + */ + public function getUserStream(array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/streams/me?' + . $this->buildQueryString($params) + ); + } + + /** + * Retrieve a list of all public Posts on pnut.io, often referred to as the + * global stream. + * @param array $params An associative array of optional general parameters. + * @return array An array of associative arrays, each representing a single post. + */ + public function getPublicPosts(array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/streams/global?' + . $this->buildQueryString($params) + ); + } + + /** + * Retrieve a list of "explore" streams + * @return array An array of associative arrays, each representing a single explore stream. + */ + public function getPostExploreStreams() + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/streams/explore' + ); + } + + /** + * Retrieve a list of posts from an "explore" stream on pnut.io. + * @param string $slug [] + * @param array $params An associative array of optional general parameters. + * @return array An array of associative arrays, each representing a single post. + */ + public function getPostExploreStream(string $slug, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/streams/explore/' . urlencode($slug) . '?' + . $this->buildQueryString($params) + ); + } + + /** + * Bookmark a post + * @param integer $post_id The post ID to bookmark + */ + public function bookmarkPost(int $post_id) + { + return $this->httpReq( + 'put', + $this->_baseUrl . 'posts/' . urlencode($post_id) . '/bookmark' + ); + } + + /** + * Unbookmark a post + * @param integer $post_id The post ID to unbookmark + */ + public function unbookmarkPost(int $post_id) + { + return $this->httpReq( + 'delete', + $this->_baseUrl . 'posts/' . urlencode($post_id) . '/bookmark' + ); + } + + /** + * List the posts bookmarked by the current user + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: count, before_id, since_id, include_muted, include_deleted, + * and include_post_raw. + * See https://github.com/phpnut/api-spec/blob/master/resources/posts.md#general-parameters + * @param string|int $user_id + * @return array An array of associative arrays, each representing a single + * user who has bookmarked a post + */ + public function getBookmarked($user_id='me', array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/bookmarks?' + . $this->buildQueryString($params) + ); + } + + /** + * List the interactions with a post (bookmark, repost, reply) + * @param integer $post_id the post ID to get interactions from + * @param array $params optional parameters like filters or excludes + * @return array An array of associative arrays, each representing one post interaction. + */ + public function getPostInteractions(int $post_id, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/' . urlencode($post_id) . '/interactions?' + . $this->buildQueryString($params) + ); + } + + /** + * List the bookmarks of a post + * @param integer $post_id the post ID to get stars from + * @return array An array of associative arrays, each representing one bookmark action. + */ + public function getPostBookmarks(int $post_id) + { + return $this->getPostInteractions($post_id, ['filters'=>['bookmark']]); + } + + /** + * Returns an array of User objects of users who reposted the specified post. + * @param integer $post_id the post ID to + * @return array An array of associative arrays, each representing a single + * user who reposted $post_id + */ + public function getPostReposts(int $post_id) + { + return $this->getPostInteractions($post_id, ['filters'=>['repost']]); + } + + /** + * Repost an existing Post object. + * @param integer $post_id The id of the post + * @return mixed the reposted post + */ + public function repost(int $post_id) + { + return $this->httpReq( + 'put', + $this->_baseUrl . 'posts/' . urlencode($post_id) . '/repost' + ); + } + + /** + * Delete a post that the user has reposted. + * @param integer $post_id The id of the post + * @return mixed the un-reposted post + */ + public function deleteRepost(int $post_id) + { + return $this->httpReq( + 'delete', + $this->_baseUrl . 'posts/' . urlencode($post_id) . '/repost' + ); + } + + /** + * Return Posts matching a specific #hashtag. + * @param string $hashtag The hashtag you're looking for. + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: count, before_id, since_id, include_muted, include_deleted, + * include_directed_posts, and include_raw. + * @return array An array of associative arrays, each representing a single post. + */ + public function searchHashtags(string $hashtag, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/tags/' . urlencode($hashtag) . '?' + . $this->buildQueryString($params) + ); + } + + /** + * List the posts who match a specific search term + * @param array $params a list of filter, search query, and general Post parameters + * see: https://docs.pnut.io/resources/posts/search + * @param string $query The search query. Supports + * normal search terms. Searches post text. + * @return string|array|false An array of associative arrays, each representing one post. + * or false on error + */ + public function searchPosts(array $params=[], string $query='', string $order='default') + { + if (!is_array($params)) { + return false; + } + if (!empty($query)) { + $params['q'] = $query; + } + if ($order === 'default') { + if (!empty($query)) { + $params['order'] = 'relevance'; + } else { + $params['order'] = 'id'; + } + } + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/search?' . $this->buildQueryString($params) + ); + } + + /** + * Return the 20 most recent posts for a stream using a valid Token + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: count, before_id, since_id, include_muted, include_deleted, + * and include_post_raw. + * @return array An array of associative arrays, each representing a single post. + */ + public function getUserPersonalStream(array $params=[]) + { + if ($params['access_token']) { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/streams/me?' + . $this->buildQueryString($params), + $params + ); + } else { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/streams/me?' + . $this->buildQueryString($params) + ); + } + } + + /** + * Return the 20 most recent Posts from the current User's personalized stream + * and mentions stream merged into one stream. + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: count, before_id, since_id, include_muted, include_deleted, + * include_directed_posts, and include_raw. + * @return array An array of associative arrays, each representing a single post. + */ + public function getUserUnifiedStream(array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'posts/streams/unified?' + . $this->buildQueryString($params) + ); + } + + /** + * List User interactions + */ + public function getMyActions(array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/me/interactions?' + . $this->buildQueryString($params) + ); + } + + /** + * Returns a specific user object. + * @param string|int $user_id The ID of the user you want to retrieve, or the string "@-username", or the string + * "me" to retrieve data for the users you're currently authenticated as. + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: include_raw|include_user_raw. + * @return array An associative array representing the user data. + */ + public function getUser($user_id='me', array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/' . urlencode($user_id) . '?' + . $this->buildQueryString($params) + ); + } + + /** + * Returns multiple users request by an array of user ids + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: include_raw|include_user_raw. + * @return array An associative array representing the users data. + */ + public function getUsers(array $user_arr, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users?ids=' . implode(',', $user_arr) + . '&' . $this->buildQueryString($params) + ); + } + + /** + * Add the specified user ID to the list of users followed. + * Returns the User object of the user being followed. + * @param string|int $user_id The user ID of the user to follow. + * @return array An associative array representing the user you just followed. + */ + public function followUser($user_id) + { + return $this->httpReq( + 'put', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/follow' + ); + } + + /** + * Removes the specified user ID to the list of users followed. + * Returns the User object of the user being unfollowed. + * @param string|int $user_id The user ID of the user to unfollow. + * @return array An associative array representing the user you just unfollowed. + */ + public function unfollowUser($user_id) + { + return $this->httpReq( + 'delete', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/follow' + ); + } + + /** + * Returns an array of User objects the specified user is following. + * @param string|int $user_id Either the ID of the user being followed, or + * the string "me", which will retrieve posts for the user you're authenticated + * as. + * @return array An array of associative arrays, each representing a single + * user following $user_id + */ + public function getFollowing($user_id='me', array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/following?' + . $this->buildQueryString($params) + ); + } + + /** + * Returns an array of User ids the specified user is following. + * @param string|int $user_id Either the ID of the user being followed, or + * the string "me", which will retrieve posts for the user you're authenticated + * as. + * @return array user ids the specified user is following. + */ + public function getFollowingIDs($user_id='me') + { + return $this->httpReq( + 'get', + "{$this->_baseUrl}users/{$user_id}/following?include_user=0" + ); + } + + /** + * Returns an array of User objects for users following the specified user. + * @param string|int $user_id Either the ID of the user being followed, or + * the string "me", which will retrieve posts for the user you're authenticated + * as. + * @return array An array of associative arrays, each representing a single + * user following $user_id + */ + public function getFollowers($user_id='me', array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/followers?' + . $this->buildQueryString($params) + ); + } + + /** + * Returns an array of User ids for users following the specified user. + * @param string|int $user_id Either the ID of the user being followed, or + * the string "me", which will retrieve posts for the user you're authenticated + * as. + * @return array user ids for users following the specified user + */ + public function getFollowersIDs($user_id='me') + { + return $this->httpReq( + 'get', + "{$this->_baseUrl}users/{$user_id}/followers?include_user=0" + ); + } + + /** + * Retrieve a user's user ID by specifying their username. + * @param string $username The username of the user you want the ID of, without + * an @ symbol at the beginning. + * @return integer The user's user ID + */ + public function getIdByUsername(string $username) + { + return $this->httpReq( + 'get', + "{$this->_baseUrl}users/@{$username}?include_user=0" + ); + } + + /** + * Mute a user + * @param string|int $user_id The user ID to mute + */ + public function muteUser($user_id) + { + return $this->httpReq( + 'put', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/mute' + ); + } + + /** + * Unmute a user + * @param string|int $user_id The user ID to unmute + */ + public function unmuteUser($user_id) + { + return $this->httpReq( + 'delete', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/mute' + ); + } + + /** + * List the users muted by the current user + * @return array An array of associative arrays, each representing one muted user. + */ + public function getMuted() + { + return $this->httpReq( + 'get', + "{$this->_baseUrl}users/me/muted" + ); + } + + /** + * Get a user object by username + * @param string $name the @name to get + * @return array representing one user + */ + public function getUserByName(string $name) + { + return $this->httpReq( + 'get', + "{$this->_baseUrl}users/@{$name}" + ); + } + + /** + * List the users who match a specific search term + * @param string $query The search query. Supports @username or #tag searches as + * well as normal search terms. Searches username, display name, bio information. + * Does not search posts. + * @return array|false An array of associative arrays, each representing one user. + */ + public function searchUsers(array $params=[], string $query='') + { + if (!is_array($params)) { + return false; + } + if ($query === '') { + return false; + } + $params['q'] = $query; + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/search?q=' . $this->buildQueryString($params) + ); + } + + /** + * Update Profile Data via JSON + * @data array containing user descriptors + */ + public function updateUserData(array $data=[], array $params=[]) + { + $json = json_encode($data); + return $this->httpReq( + 'put', + $this->_baseUrl . 'users/me?' + . $this->buildQueryString($params), + $json, + 'application/json' + ); + } + + /** + * Update a user image + * @image path reference to image + * @which avatar|cover + */ + protected function updateUserImage(string $image, string $which='avatar') + { + $mimeType = ''; + + $test = @getimagesize($image); + if ($test && array_key_exists('mime', $test)) { + $mimeType = $test['mime']; + } + $data = [ + $which => new CURLFile($image, $mimeType) + ]; + return $this->httpReq( + 'post-raw', + "{$this->_baseUrl}users/me/{$which}", + $data, + 'multipart/form-data' + ); + } + + public function updateUserAvatar($avatar) + { + return $this->updateUserImage('avatar', $avatar); + } + + public function updateUserCover($cover) + { + return $this->updateUserImage('cover', $cover); + } + + /** + * Returns a Client object + * @param string $client_id + * @return array An array representing the client + */ + public function getClient(string $client_id, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'clients/' . urlencode($client_id) . '?' + . $this->buildQueryString($params) + ); + } + + /** + * Returns a list of truncated client details made by a user + * @param string $user_id + * @return array A list of arrays representing clients + */ + public function getUserClients(string $user_id) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/' . urlencode($user_id) . '/clients' + ); + } + + /** + * update stream marker + */ + public function updateStreamMarker(array $data=[]) + { + $json = json_encode($data); + return $this->httpReq( + 'post', + "{$this->_baseUrl}markers", + $json, + 'application/json' + ); + } + + /** + * get a page of current user subscribed channels + */ + public function getMyChannelSubscriptions(array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/me/channels/subscribed?' . $this->buildQueryString($params) + ); + } + + /** + * get user channels + */ + public function getMyChannels(array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/me/channels?' . $this->buildQueryString($params) + ); + } + + /** + * create a channel + * note: you cannot create a channel with type=io.pnut.core.pm (see createMessage) + */ + public function createChannel(array $data=[]) + { + $json = json_encode($data); + return $this->httpReq( + 'post', + "{$this->_baseUrl}channels", + $json, + 'application/json' + ); + } + + /** + * get channelid info + */ + public function getChannel(int $channelid, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'channels/' . $channelid . '?' + . $this->buildQueryString($params) + ); + } + + /** + * get an existing private message channel between multiple users + * @param string|array $users Can be a comma- or space-separated string, or an array. + * Usernames with @-symbol, or user ids. + */ + public function getExistingPM($users, array $params=[]) + { + if (is_string($users)) { + $users = explode(',', str_replace(' ', ',', $users)); + } + foreach($users as $key=>$user) { + if (!is_numeric($user) && substr($user, 0, 1) !== '@') { + $users[$key] = "@{$user}"; + } + } + $params['ids'] = $users; + return $this->httpReq( + 'get', + $this->_baseUrl . 'users/me/channels/existing_pm?' + . $this->buildQueryString($params) + ); + } + + /** + * get multiple channels' info by an array of channelids + */ + public function getChannels(array $channels, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'channels?ids=' . implode(',', $channels) . '&' + . $this->buildQueryString($params) + ); + } + + /** + * update channelid + */ + public function updateChannel(int $channelid, array $data=[]) + { + $json = json_encode($data); + return $this->httpReq( + 'put', + "{$this->_baseUrl}channels/{$channelid}", + $json, + 'application/json' + ); + } + + /** + * subscribe from channelid + */ + public function channelSubscribe(int $channelid) + { + return $this->httpReq( + 'put', + $this->_baseUrl.'channels/'.$channelid.'/subscribe' + ); + } + + /** + * unsubscribe from channelid + */ + public function channelUnsubscribe(int $channelid) + { + return $this->httpReq( + 'delete', + $this->_baseUrl.'channels/'.$channelid.'/subscribe' + ); + } + + /** + * mute channelid + */ + public function channelMute(int $channelid) + { + return $this->httpReq( + 'put', + $this->_baseUrl.'channels/'.$channelid.'/mute' + ); + } + + /** + * unmute channelid + */ + public function channelUnmute(int $channelid) + { + return $this->httpReq( + 'delete', + $this->_baseUrl.'channels/'.$channelid.'/mute' + ); + } + + /** + * get all user objects subscribed to channelid + */ + public function getChannelSubscriptions(int $channelid, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'channels/'.$channelid.'/subscribers?' + . $this->buildQueryString($params) + ); + } + + /** + * get all user IDs subscribed to channelid + */ + public function getChannelSubscriptionsById(int $channelid) + { + return $this->httpReq( + 'get', + "{$this->_baseUrl}channels/{$channelid}/subscribers?include_user=0" + ); + } + + /** + * Retrieve a list of "explore" streams + * @return array An array of associative arrays, each representing a single explore stream. + */ + public function getChannelExploreStreams() + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'channels/streams/explore' + ); + } + + /** + * Retrieve a list of channels from an "explore" stream on pnut.io. + * @param string $slug [] + * @param array $params An associative array of optional general parameters. + * @return array An array of associative arrays, each representing a single channel. + */ + public function getChannelExploreStream(string $slug, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl . 'channels/streams/explore/' . urlencode($slug) . '?' + . $this->buildQueryString($params) + ); + } + + /** + * mark channel inactive + */ + public function deleteChannel(int $channelid) + { + return $this->httpReq( + 'delete', + $this->_baseUrl.'channels/'.$channelid + ); + } + + /** + * List the channels that match a specific search term + * @param array $params a list of filter, search query, and general Channel parameters + * see: https://docs.pnut.io/resources/channels/search + * @param string $query The search query. Supports + * normal search terms. Searches common channel raw. + * @return array An array of associative arrays, each representing one channel. + * or false on error + */ + public function searchChannels(array $params=[], string $query='', string $order='default') + { + if (!empty($query)) { + $params['q'] = $query; + } + if ($order === 'default') { + if (!empty($query)) { + $params['order'] = 'id'; + } else { + $params['order'] = 'activity'; + } + } + return $this->httpReq( + 'get', + $this->_baseUrl . 'channels/search?' . $this->buildQueryString($params) + ); + } + + + /** + * get a page of messages in channelid + */ + public function getMessages(int $channelid, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'channels/'.$channelid.'/messages?' + . $this->buildQueryString($params) + ); + } + + /** + * get a page of messages in channelid in a thread + */ + public function getMessageThread(int $channelid, int $messageid, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'channels/'.$channelid.'/messages/'.$messageid.'/thread?' + . $this->buildQueryString($params) + ); + } + + /** + * get a page of sticky messages in channelid + */ + public function getStickyMessages(int $channelid, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'channels/'.$channelid.'/sticky_messages?' + . $this->buildQueryString($params) + ); + } + + /** + * sticky messsage + */ + public function stickyMessage(int $channelid, int $messageid) + { + return $this->httpReq( + 'put', + $this->_baseUrl.'channels/'.$channelid.'/messages/'.$messageid.'/sticky' + ); + } + + /** + * unsticky messsage + */ + public function unstickyMessage(int $channelid, int $messageid) + { + return $this->httpReq( + 'delete', + $this->_baseUrl.'channels/'.$channelid.'/messages/'.$messageid.'/sticky' + ); + } + + /** + * create message + * @param string|int $channelid numeric or "pm" for auto-channel (type=io.pnut.core.pm) + * @param array $data array('text'=>'YOUR_MESSAGE') If a type=io.pnut.core.pm, then "destinations" key can be set to address as an array of people to send this PM too + * @param array $params query parameters + */ + public function createMessage($channelid, array $data, array $params=[]) + { + if (isset($data['destinations'])) { + if (is_string($data['destinations'])) { + $data['destinations'] = explode(',', str_replace(' ', ',', $data['destinations'])); + } + foreach($data['destinations'] as $key=>$user) { + if (!is_numeric($user) && substr($user, 0,1 ) !== '@') { + $data['destinations'][$key] = "@{$user}"; + } + } + } + $json = json_encode($data); + return $this->httpReq( + 'post', + $this->_baseUrl.'channels/'.$channelid.'/messages?' + . $this->buildQueryString($params), + $json, + 'application/json' + ); + } + + /** + * get message + */ + public function getMessage(int $channelid, int $messageid, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'channels/'.$channelid.'/messages/'.$messageid.'?' + . $this->buildQueryString($params) + ); + } + + /** + * Returns a list of Messages. + * @param array $message_ids The list of message IDs to retrieve + * @param array $params An associative array of optional general parameters. + * @return array An array of arrays representing the messages + */ + public function getMultipleMessages(array $message_ids, array $params=[]) + { + $params['ids'] = $message_ids; + + return $this->httpReq( + 'get', + $this->_baseUrl . 'channels/messages?' . $this->buildQueryString($params) + ); + } + + /** + * delete messsage + */ + public function deleteMessage(int $channelid, int $messageid) + { + return $this->httpReq( + 'delete', + $this->_baseUrl.'channels/'.$channelid.'/messages/'.$messageid + ); + } + + /** + * List the messages that match a specific search term + * @param array $params a list of filter, search query, and general Message parameters + * see: https://docs.pnut.io/resources/messages/search + * @param string $query The search query. Supports + * normal search terms. Searches common channel raw. + * @return string|array|false An array of associative arrays, each representing one channel. + * or false on error + */ + public function searchMessages(array $params=[], string $query='', string $order='default') + { + if (!is_array($params)) { + return false; + } + if (!empty($query)) { + $params['q'] = $query; + } + if ($order === 'default') { + if (!empty($query)) { + $params['order'] = 'id'; + } else { + $params['order'] = 'relevance'; + } + } + return $this->httpReq( + 'get', + $this->_baseUrl . 'channels/messages/search?' + . $this->buildQueryString($params) + ); + } + + /** + * Upload a file to a user's file store + * @param string $file A string containing the path of the file to upload. + * @param array $data Additional data about the file you're uploading. At the + * moment accepted keys are: mime-type, kind, type, name, public and raw. + * - If you don't specify mime-type, phpnut will attempt to guess the mime type + * based on the file, however this isn't always reliable. + * - If you don't specify kind phpnut will attempt to determine if the file is + * an image or not. + * - If you don't specify name, phpnut will use the filename of the first + * parameter. + * - If you don't specify is_public, your file will be uploaded as a private file. + * - Type is REQUIRED. + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: include_raw|include_file_raw. + * @return array An associative array representing the file + */ + public function createFile($file, array $data, array $params=[]) + { + if (!$file) { + throw new phpnutException('You must specify a path to a file'); + } + if (!file_exists($file)) { + throw new phpnutException('File path specified does not exist'); + } + if (!is_readable($file)) { + throw new phpnutException('File path specified is not readable'); + } + if (!array_key_exists('type', $data) || !$data['type']) { + throw new phpnutException('Type is required when creating a file'); + } + if (!array_key_exists('name', $data)) { + $data['name'] = basename($file); + } + if (array_key_exists('mime-type', $data)) { + $mimeType = $data['mime-type']; + unset($data['mime-type']); + } else { + $mimeType = null; + } + if (!array_key_exists('kind', $data)) { + $test = @getimagesize($file); + if ($test && array_key_exists('mime', $test)) { + $data['kind'] = 'image'; + if (!$mimeType) { + $mimeType = $test['mime']; + } + } + else { + $data['kind'] = 'other'; + } + } + if (!$mimeType) { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mimeType = finfo_file($finfo, $file); + finfo_close($finfo); + } + if (!$mimeType) { + throw new phpnutException('Unable to determine mime type of file, try specifying it explicitly'); + } + $data['content'] = new \CurlFile($file, $mimeType); + return $this->httpReq( + 'post-raw', + "{$this->_baseUrl}files", + $data, + 'multipart/form-data' + ); + } + + public function createFilePlaceholder($file, array $params=[]) + { + $name = basename($file); + $data = [ + 'raw' => $params['raw'], + 'kind' => $params['kind'], + 'name' => $name, + 'type' => $params['metadata'] + ]; + $json = json_encode($data); + return $this->httpReq( + 'post', + $this->_baseUrl.'files', + $json, + 'application/json' + ); + } + + public function updateFileContent(int $fileid, string $file) + { + $data = file_get_contents($file); + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mime = finfo_file($finfo, $file); + finfo_close($finfo); + return $this->httpReq( + 'put', + $this->_baseUrl.'files/'.$fileid.'/content', + $data, + $mime + ); + } + + /** + * Allows for file rename and annotation changes. + * @param integer $file_id The ID of the file to update + * @param array $params An associative array of file parameters. + * @return array An associative array representing the updated file + */ + public function updateFile(int $file_id, array $params=[]) + { + $data = [ + 'raw' => $params['raw'], + 'name' => $params['name'], + ]; + $json = json_encode($data); + return $this->httpReq( + 'put', + $this->_baseUrl.'files/'.urlencode($file_id), + $json, + 'application/json' + ); + } + + /** + * Returns a specific File. + * @param integer $file_id The ID of the file to retrieve + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: include_raw|include_file_raw. + * @return array An associative array representing the file + */ + public function getFile(int $file_id, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'files/'.urlencode($file_id).'?' + . $this->buildQueryString($params) + ); + } + + public function getFileContent(int $file_id, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'files/'.urlencode($file_id).'/content?' + . $this->buildQueryString($params) + ); + } + + /** $file_key : derived_file_key */ + public function getDerivedFileContent(int $file_id, string $file_key, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'files/'.urlencode($file_id).'/content/'.urlencode($file_key).'?'.$this->buildQueryString($params) + ); + } + + /** + * Returns file objects. + * @param array $file_ids The IDs of the files to retrieve + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: include_raw|include_file_raw. + * @return array An associative array representing the file data. + */ + public function getFiles(array $file_ids, array $params=[]) + { + $ids = ''; + foreach($file_ids as $id) { + $ids .= $id . ','; + } + $params['ids'] = substr($ids, 0, -1); + return $this->httpReq( + 'get', + $this->_baseUrl.'files?'.$this->buildQueryString($params) + ); + } + + /** + * Returns a user's file objects. + * @param array $params An associative array of optional general parameters. + * This will likely change as the API evolves, as of this writing allowed keys + * are: include_raw|include_file_raw|include_user_raw. + * @return array An associative array representing the file data. + */ + public function getUserFiles(array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'users/me/files?'.$this->buildQueryString($params) + ); + } + + /** + * Delete a File. The current user must be the same user who created the File. + * It returns the deleted File on success. + * @param integer $file_id The ID of the file to delete + * @return array An associative array representing the file that was deleted + */ + public function deleteFile(int $file_id) + { + return $this->httpReq( + 'delete', + $this->_baseUrl.'files/'.urlencode($file_id) + ); + } + + /** + * Create a poll + * @param array $data An associative array of the required parameters. + * @param array $params An associative array of optional general parameters. + * Allowed keys: include_raw,include_poll_raw, ... + * @return array An associative array representing the poll + */ + public function createPoll(array $data, array $params=[]) + { + $json = json_encode($data); + return $this->httpReq( + 'post', + $this->_baseUrl.'polls?'.$this->buildQueryString($params), + $json, + 'application/json' + ); + } + + /** + * Responds to a poll. + * @param integer $poll_id The ID of the poll to respond to + * @param array $positions list of positions for the poll response + * @param array $params An associative array of optional general parameters. + */ + public function respondToPoll(int $poll_id, array $positions, array $params=[]) + { + $json = json_encode(['positions' => $positions]); + return $this->httpReq( + 'put', + $this->_baseUrl.'polls/'.urlencode($poll_id).'/response?'.$this->buildQueryString($params), + $json, + 'application/json' + ); + } + + /** + * Returns a specific Poll. + * @param integer $poll_id The ID of the poll to retrieve + * @param array $params An associative array of optional general parameters. + * @return array An associative array representing the poll + */ + public function getPoll(int $poll_id, array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'polls/'.urlencode($poll_id).'?'.$this->buildQueryString($params) + ); + } + + /** + * Returns a list of Polls. + * @param array $poll_ids The list of poll IDs to retrieve + * @param array $params An associative array of optional general parameters. + * @return array An array of arrays representing the polls + */ + public function getMultiplePolls(array $poll_ids, array $params=[]) + { + $params['ids'] = $poll_ids; + + return $this->httpReq( + 'get', + $this->_baseUrl . 'polls?' . $this->buildQueryString($params) + ); + } + + /** + * Returns a user's poll objects. + * @param array $params An associative array of optional general parameters. + * @return array An associative array representing the poll data. + */ + public function getUserPolls(array $params=[]) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'users/me/polls?'.$this->buildQueryString($params) + ); + } + + /** + * Delete a Poll. The current user must be the same user who created the Poll. + * @param integer $poll_id The ID of the poll to delete + * @param array $params An associative array of optional general parameters. + * @return array An associative array representing the poll that was deleted + */ + public function deletePoll(int $poll_id, array $params=[]) + { + return $this->httpReq( + 'delete', + $this->_baseUrl.'polls/'.urlencode($poll_id).'?'.$this->buildQueryString($params) + ); + } + + /** + * List the polls that match a specific search term + * @param array $params a list of filter, search query, and general Poll parameters + * see: https://docs.pnut.io/resources/channels/search + * @return array An array of associative arrays, each representing one poll. + * or false on error + */ + public function searchPolls(array $params=[], string $order='id') + { + $params['order'] = $order; + + return $this->httpReq( + 'get', + $this->_baseUrl . 'polls/search?' . $this->buildQueryString($params) + ); + } + + + /** + * Get Application Information + */ + public function getAppTokenInfo() + { + // requires appAccessToken + if (!$this->_appAccessToken) { + $this->getAppAccessToken(); + } + // ensure request is made with our appAccessToken + $params['access_token'] = $this->_appAccessToken; + return $this->httpReq( + 'get', + "{$this->_baseUrl}token", + $params + ); + } + + /** + * Get User Information + */ + public function getUserTokenInfo() + { + return $this->httpReq( + 'get', + "{$this->_baseUrl}token" + ); + } + + /** + * Get Application Authorized User IDs + */ + public function getAppUserIDs() + { + // requires appAccessToken + if (!$this->_appAccessToken) { + $this->getAppAccessToken(); + } + // ensure request is made with our appAccessToken + $params['access_token'] = $this->_appAccessToken; + return $this->httpReq( + 'get', + "{$this->_baseUrl}apps/me/users/ids", + $params + ); + } + + /** + * Get Application Authorized User Tokens + */ + public function getAppUserTokens() + { + // requires appAccessToken + if (!$this->_appAccessToken) { + $this->getAppAccessToken(); + } + // ensure request is made with our appAccessToken + $params['access_token'] = $this->_appAccessToken; + return $this->httpReq( + 'get', + "{$this->_baseUrl}apps/me/users/tokens", + $params + ); + } + + /** + * Registers your function (or an array of object and method) to be called + * whenever an event is received via an open pnut.io stream. Your function + * will receive a single parameter, which is the object wrapper containing + * the meta and data. + * @param mixed $function A PHP callback (either a string containing the function name, + * or an array where the first element is the class/object and the second + * is the method). + */ + public function registerStreamFunction($function): void + { + $this->_streamCallback = $function; + } + + /** + * Opens a stream that's been created for this user/app and starts sending + * events/objects to your defined callback functions. You must define at + * least one callback function before opening a stream. + * @param mixed $stream Either a stream ID or the endpoint of a stream + * you've already created. This stream must exist and must be valid for + * your current access token. If you pass a stream ID, the library will + * make an API call to get the endpoint. + * + * This function will return immediately, but your callback functions + * will continue to receive events until you call closeStream() or until + * pnut.io terminates the stream from their end with an error. + * + * If you're disconnected due to a network error, the library will + * automatically attempt to reconnect you to the same stream, no action + * on your part is necessary for this. However if the pnut.io API returns + * an error, a reconnection attempt will not be made. + * + * Note there is no closeStream, because once you open a stream you + * can't stop it (unless you exit() or die() or throw an uncaught + * exception, or something else that terminates the script). + * @return boolean True + * @see createStream() + */ + public function openStream($stream): bool + { + // if there's already a stream running, don't allow another + if ($this->_currentStream) { + throw new phpnutException('There is already a stream being consumed, only one stream can be consumed per phpnutStream instance'); + } + // must register a callback (or the exercise is pointless) + if (!$this->_streamCallback) { + throw new phpnutException('You must define your callback function using registerStreamFunction() before calling openStream'); + } + // if the stream is a numeric value, get the stream info from the api + if (is_numeric($stream)) { + $stream = $this->getStream($stream); + $this->_streamUrl = $stream['endpoint']; + } + else { + $this->_streamUrl = $stream; + } + // continue doing this until we get an error back or something...? + $this->httpStream( + 'get', + $this->_streamUrl + ); + return true; + } + + /** + * Close the currently open stream. + */ + public function closeStream(): void + { + if (!$this->_lastStreamActivity) { + // never opened + return; + } + if (!$this->_multiStream) { + throw new phpnutException('You must open a stream before calling closeStream()'); + } + curl_close($this->_currentStream); + curl_multi_remove_handle($this->_multiStream, $this->_currentStream); + curl_multi_close($this->_multiStream); + $this->_currentStream = null; + $this->_multiStream = null; + } + + /** + * Retrieve all streams for the current access token. + * @return array An array of stream definitions. + */ + public function getAllStreams() + { + return $this->httpReq( + 'get', + "{$this->_baseUrl}streams" + ); + } + + /** + * Returns a single stream specified by a stream ID. The stream must have been + * created with the current access token. + * @return array A stream definition + */ + public function getStream(string $streamId) + { + return $this->httpReq( + 'get', + $this->_baseUrl.'streams/'.urlencode($streamId) + ); + } + + /** + * Creates a stream for the current app access token. + * + * @param array $objectTypes The objects you want to retrieve data for from the + * stream. At time of writing these can be 'post', 'bookmark', 'user_follow', 'mute', 'block', 'stream_marker', 'message', 'channel', 'channel_subscription', 'token', and/or 'user'. + * If you don't specify, a few standard events will be retrieved. + */ + public function createStream(?array $objectTypes=null) + { + // default object types to everything + if (is_null($objectTypes)) { + $objectTypes = [ + 'post', + 'bookmark', + 'user_follow', + ]; + } + $data = [ + 'object_types'=>$objectTypes, + 'type'=>'long_poll', + ]; + $data = json_encode($data); + $response = $this->httpReq( + 'post', + "{$this->_baseUrl}streams", + $data, + 'application/json' + ); + return $response; + } + + /** + * Update stream for the current app access token + * + * @param string $streamId The stream ID to update. This stream must have been + * created by the current access token. + * @param array $data allows object_types, type, filter_id and key to be updated. filter_id/key can be omitted + */ + public function updateStream(string $streamId, array $data) + { + // objectTypes is likely required + if (is_null($data['object_types'])) { + $data['object_types'] = [ + 'post', + 'bookmark', + 'user_follow', + ]; + } + // type can still only be long_poll + if (is_null($data['type'])) { + $data['type'] = 'long_poll'; + } + $data = json_encode($data); + $response = $this->httpReq( + 'put', + $this->_baseUrl.'streams/'.urlencode($streamId), + $data, + 'application/json' + ); + return $response; + } + + /** + * Deletes a stream if you no longer need it. + * + * @param string $streamId The stream ID to delete. This stream must have been + * created by the current access token. + */ + public function deleteStream(string $streamId) + { + return $this->httpReq( + 'delete', + $this->_baseUrl.'streams/'.urlencode($streamId) + ); + } + + /** + * Deletes all streams created by the current access token. + */ + public function deleteAllStreams() + { + return $this->httpReq( + 'delete', + "{$this->_baseUrl}streams" + ); + } + + /** + * Internal function used to process incoming chunks from the stream. This is only + * public because it needs to be accessed by CURL. Do not call or use this function + * in your own code. + * @ignore + */ + public function httpStreamReceive($ch, $data) + { + $this->_lastStreamActivity = time(); + $this->_streamBuffer .= $data; + if (!$this->_streamHeaders) { + $pos = strpos($this->_streamBuffer, "\r\n\r\n"); + if ($pos !== false) { + $this->_streamHeaders = substr($this->_streamBuffer, 0, $pos); + $this->_streamBuffer = substr($this->_streamBuffer, $pos+4); + } + } else { + $pos = strpos($this->_streamBuffer, "\r\n"); + while ($pos !== false) { + $command = substr($this->_streamBuffer, 0, $pos); + $this->_streamBuffer = substr($this->_streamBuffer, $pos+2); + $command = json_decode($command, true); + if ($command) { + call_user_func($this->_streamCallback, $command); + } + $pos = strpos($this->_streamBuffer, "\r\n"); + } + } + return strlen($data); + } + + /** + * Opens a long lived HTTP connection to the pnut.io servers, and sends data + * received to the httpStreamReceive function. As a general rule you should not + * directly call this method, it's used by openStream(). + */ + protected function httpStream(string $act, $req, array $params=[], string $contentType='application/x-www-form-urlencoded'): void + { + if ($this->_currentStream) { + throw new phpnutException('There is already an open stream, you must close the existing one before opening a new one'); + } + $headers = []; + $this->_streamBuffer = ''; + if ($this->_accessToken) { + $headers[] = "Authorization: Bearer {$this->_accessToken}"; + } + $this->_currentStream = curl_init($req); + curl_setopt($this->_currentStream, CURLOPT_HTTPHEADER, $headers); + curl_setopt($this->_currentStream, CURLOPT_RETURNTRANSFER, true); + curl_setopt($this->_currentStream, CURLINFO_HEADER_OUT, true); + curl_setopt($this->_currentStream, CURLOPT_HEADER, true); + if ($this->_sslCA) { + curl_setopt($this->_currentStream, CURLOPT_CAINFO, $this->_sslCA); + } + // every time we receive a chunk of data, forward it to httpStreamReceive + curl_setopt($this->_currentStream, CURLOPT_WRITEFUNCTION, array($this, 'httpStreamReceive')); + // curl_exec($ch); + // return; + $this->_multiStream = curl_multi_init(); + $this->_lastStreamActivity = time(); + curl_multi_add_handle($this->_multiStream, $this->_currentStream); + } + + public function reconnectStream(): void + { + $this->closeStream(); + $this->_connectFailCounter++; + // if we've failed a few times, back off + if ($this->_connectFailCounter > 1) { + $sleepTime = pow(2, $this->_connectFailCounter); + // don't sleep more than 60 seconds + if ($sleepTime > 60) { + $sleepTime = 60; + } + sleep($sleepTime); + } + $this->httpStream('get', $this->_streamUrl); + } + + /** + * Process an open stream for x microseconds, then return. This is useful if you want + * to be doing other things while processing the stream. If you just want to + * consume the stream without other actions, you can call processForever() instead. + * @param null|float $microseconds The number of microseconds to process for before + * returning. There are 1,000,000 microseconds in a second. + * + * @return void + */ + public function processStream($microseconds=null): void + { + if (!$this->_multiStream) { + throw new phpnutException('You must open a stream before calling processStream()'); + } + $start = microtime(true); + $active = null; + $inQueue = null; + $sleepFor = 0; + do { + // if we haven't received anything within 5.5 minutes, reconnect + // keepalives are sent every 5 minutes (measured on 2013-3-12 by @ryantharp) + if (time()-$this->_lastStreamActivity >= 330) { + $this->reconnectStream(); + } + curl_multi_exec($this->_multiStream, $active); + if (!$active) { + $httpCode = curl_getinfo($this->_currentStream, CURLINFO_HTTP_CODE); + // don't reconnect on 400 errors + if ($httpCode >= 400 && $httpCode <= 499) { + throw new phpnutException("Received HTTP error {$httpCode} check your URL and credentials before reconnecting"); + } + $this->reconnectStream(); + } + // sleep for a max of 2/10 of a second + $timeSoFar = (microtime(true)-$start)*1000000; + $sleepFor = $this->streamingSleepFor; + if ($timeSoFar+$sleepFor > $microseconds) { + $sleepFor = $microseconds - $timeSoFar; + } + if ($sleepFor > 0) { + usleep($sleepFor); + } + } while ($timeSoFar+$sleepFor < $microseconds); + } + + /** + * Process an open stream forever. This function will never return, if you + * want to perform other actions while consuming the stream, you should use + * processFor() instead. + * @return void This function will never return + * @see processFor(); + */ + public function processStreamForever(): void + { + while (true) { + $this->processStream(600); + } + } +} diff --git a/pnut/lib/phpnutException.php b/pnut/lib/phpnutException.php new file mode 100644 index 00000000..77e768fe --- /dev/null +++ b/pnut/lib/phpnutException.php @@ -0,0 +1,5 @@ + + * Status: In Development + */ + +require_once 'addon/pnut/lib/phpnut.php'; +require_once 'addon/pnut/lib/phpnutException.php'; + +use Friendica\Content\Text\BBCode; +use Friendica\Content\Text\Plaintext; +use Friendica\Core\Config\Util\ConfigFileManager; +use Friendica\Core\Hook; +use Friendica\Core\Renderer; +use Friendica\Core\System; +use Friendica\DI; +use Friendica\Model\Item; +use Friendica\Model\Photo; +use phpnut\phpnutException; + +const PNUT_LIMIT = 256; + +function pnut_install() +{ + Hook::register('load_config', __FILE__, 'pnut_load_config'); + Hook::register('hook_fork', __FILE__, 'pnut_hook_fork'); + Hook::register('post_local', __FILE__, 'pnut_post_local'); + Hook::register('notifier_normal', __FILE__, 'pnut_post_hook'); + Hook::register('jot_networks', __FILE__, 'pnut_jot_nets'); + Hook::register('connector_settings', __FILE__, 'pnut_settings'); + Hook::register('connector_settings_post', __FILE__, 'pnut_settings_post'); +} + +function pnut_module() {} + +function pnut_content() +{ + if (!DI::userSession()->getLocalUserId()) { + DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); + return ''; + } + + if (isset(DI::args()->getArgv()[1])) { + switch (DI::args()->getArgv()[1]) { + case 'connect': + $o = pnut_connect(); + break; + + default: + $o = print_r(DI::args()->getArgv(), true); + break; + } + } else { + $o = pnut_connect(); + } + return $o; +} + +function pnut_connect() +{ + $client_id = DI::config()->get('pnut', 'client_id'); + $client_secret = DI::config()->get('pnut', 'client_secret'); + + if (empty($client_id) || empty($client_secret)) { + $client_id = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'client_id'); + $client_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'client_secret'); + } + + $callback_url = DI::baseUrl() . '/pnut/connect'; + + $nut = new phpnut\phpnut($client_id, $client_secret); + + try { + $token = $nut->getAccessToken($callback_url); + DI::logger()->debug('Got Token', [$token]); + $o = DI::l10n()->t('You are now authenticated with pnut.io.'); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pnut', 'access_token', $token); + } catch (phpnutException $e) { + $o = DI::l10n()->t('Error fetching token. Please try again.', ['code' => $e->getCode(), 'message' => $e->getMessage()]); + } + + $o .= '
' . DI::l10n()->t("return to the connector page") . ''; + + return $o; +} + +function pnut_load_config(ConfigFileManager $loader) +{ + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('pnut'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); +} + +function pnut_addon_admin(string &$o) +{ + $client_id = DI::config()->get('pnut', 'client_id'); + $client_secret = DI::config()->get('pnut', 'client_secret'); + + $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/pnut/'); + + $o = Renderer::replaceMacros($t, [ + '$submit' => DI::l10n()->t('Save Settings'), + '$client_id' => ['pnut_client_id', DI::l10n()->t('Client ID'), $client_id], + '$client_secret' => ['pnut_client_secret', DI::l10n()->t('Client Secret'), $client_secret], + ]); +} + +function pnut_addon_admin_post() +{ + DI::config()->set('pnut', 'client_id', $_POST['pnut_client_id']); + DI::config()->set('pnut', 'client_secret', $_POST['pnut_client_secret']); +} + +function pnut_settings(array &$data) +{ + if (!DI::userSession()->getLocalUserId()) { + return; + } + + $redirectUri = DI::baseUrl() . '/pnut/connect'; + $scope = ['write_post', 'files']; + + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'post') ?? false; + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'post_by_default') ?? false; + $client_id = DI::config()->get('pnut', 'client_id'); + $client_secret = DI::config()->get('pnut', 'client_secret'); + $token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'access_token'); + + $user_client = empty($client_id) || empty($client_secret); + if ($user_client) { + $client_id = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'client_id'); + $client_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'client_secret'); + } + + if (!empty($client_id) && !empty($client_secret) && empty($token)) { + $nut = new phpnut\phpnut($client_id, $client_secret); + $authorize_url = $nut->getAuthUrl($redirectUri, $scope); + $authorize_text = DI::l10n()->t('Authenticate with pnut.io'); + } + + if (!empty($token)) { + $disconn_btn = DI::l10n()->t('Disconnect'); + } + + $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/pnut/'); + $html = Renderer::replaceMacros($t, [ + '$enable' => ['pnut', DI::l10n()->t('Enable Pnut Post Addon'), $enabled], + '$bydefault' => ['pnut_bydefault', DI::l10n()->t('Post to Pnut by default'), $def_enabled], + '$client_id' => ['pnut_client_id', DI::l10n()->t('Client ID'), $client_id], + '$client_secret' => ['pnut_client_secret', DI::l10n()->t('Client Secret'), $client_secret], + '$access_token' => ['pnut_access_token', DI::l10n()->t('Access Token'), $token, '', '', 'readonly'], + '$authorize_url' => $authorize_url ?? '', + '$authorize_text' => $authorize_text ?? '', + '$disconn_btn' => $disconn_btn ?? '', + 'user_client' => $user_client, + ]); + + $data = [ + 'connector' => 'pnut', + 'title' => DI::l10n()->t('Pnut Export'), + 'image' => 'addon/pnut/pnut.svg', + 'enabled' => $enabled, + 'html' => $html, + ]; +} + +function pnut_settings_post(array &$b) +{ + if (empty($_POST['pnut-submit']) && empty($_POST['pnut-disconnect'])) { + return; + } + + if (!empty($_POST['pnut-disconnect'])) { + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'pnut', 'post'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'pnut', 'post_by_default'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'pnut', 'client_id'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'pnut', 'client_secret'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'pnut', 'access_token'); + } else { + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pnut', 'post', intval($_POST['pnut'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pnut', 'post_by_default', intval($_POST['pnut_bydefault'])); + if (!empty($_POST['pnut_client_id'])) { + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pnut', 'client_id', $_POST['pnut_client_id']); + } + if (!empty($_POST['pnut_client_secret'])) { + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pnut', 'client_secret', $_POST['pnut_client_secret']); + } + } +} + +function pnut_jot_nets(array &$jotnets_fields) +{ + if (!DI::userSession()->getLocalUserId()) { + return; + } + + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'post')) { + $jotnets_fields[] = [ + 'type' => 'checkbox', + 'field' => [ + 'pnut_enable', + DI::l10n()->t('Post to Pnut'), + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'post_by_default') + ] + ]; + } +} + +function pnut_hook_fork(array &$b) +{ + if ($b['name'] != 'notifier_normal') { + return; + } + + $post = $b['data']; + + if (($post['created'] !== $post['edited']) && !$post['deleted']) { + DI::logger()->info('Editing is not supported by the addon'); + $b['execute'] = false; + return; + } + + if (!strstr($post['postopts'] ?? '', 'pnut') || ($post['gravity'] != Item::GRAVITY_PARENT) || ($post['private'] == Item::PRIVATE)) { + $b['execute'] = false; + return; + } +} + +function pnut_post_local(array &$b) +{ + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { + return; + } + + if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) { + return; + } + + $pnut_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'post')); + $pnut_enable = (($pnut_post && !empty($_REQUEST['pnut_enable'])) ? intval($_REQUEST['pnut_enable']) : 0); + + // if API is used, default to the chosen settings + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pnut', 'post_by_default'))) { + $pnut_enable = 1; + } + + if (!$pnut_enable) { + return; + } + + if (strlen($b['postopts'])) { + $b['postopts'] .= ','; + } + + $b['postopts'] .= 'pnut'; +} + +function pnut_post_hook(array &$b) +{ + /** + * Post to pnut.io + */ + if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) { + return; + } + + DI::logger()->notice('PNUT post invoked', ['id' => $b['id'], 'guid' => $b['guid'], 'plink' => $b['plink']]); + DI::logger()->debug('PNUT array', $b); + + $token = DI::pConfig()->get($b['uid'], 'pnut', 'access_token'); + $nut = new phpnut\phpnut($token); + + $msgarr = Plaintext::getPost($b, PNUT_LIMIT, true, BBCode::EXTERNAL); + $text = $msgarr['text']; + $raw = []; + + DI::logger()->debug('PNUT msgarr', $msgarr); + + if (count($msgarr['parts']) > 1) { + $tstamp = time(); + $raw['nl.chimpnut.blog.post'][] = ['body' => $b['body'], 'tstamp' => $tstamp]; + $text = Plaintext::shorten($text, 252 - strlen($b['plink']), $b['uid']); + $text .= "\n" . $b['plink']; + } + + if ($msgarr['type'] == 'link') { + $text .= "\n[" . $msgarr['title'] . "](" . $msgarr['url'] . ")"; + } + + if ($msgarr['type'] == 'photo') { + $fileraw = ['type' => 'dev.mcmillian.friendica.image', 'kind' => 'image', 'is_public' => true]; + foreach ($msgarr['images'] as $image) { + DI::logger()->debug('PNUT image', $image); + + if (!empty($image['id'])) { + $photo = Photo::selectFirst([], ['id' => $image['id']]); + DI::logger()->debug('PNUT selectFirst'); + } else { + $photo = Photo::createPhotoForExternalResource($image['url']); + DI::logger()->debug('PNUT createPhotoForExternalResource'); + } + $picturedata = Photo::getImageForPhoto($photo); + + DI::logger()->debug('PNUT photo', $photo); + $picurefile = tempnam(System::getTempPath(), 'pnut'); + file_put_contents($picurefile, $picturedata); + DI::logger()->debug('PNUT got file?', ['filename' => $picurefile]); + $imagefile = $nut->createFile($picurefile, $fileraw); + DI::logger()->debug('PNUT file', ['pnutimagefile' => $imagefile]); + unlink($picurefile); + + $raw['io.pnut.core.oembed'][] = ['+io.pnut.core.file' => ['file_id' => $imagefile['id'], 'file_token' => $imagefile['file_token'], 'format' => 'oembed']]; + } + } + + $raw['io.pnut.core.crosspost'][] = ['canonical_url' => $b['plink']]; + $nut->createPost($text, ['raw' => $raw]); + + DI::logger()->debug('PNUT post complete', ['id' => $b['id'], 'text' => $text, 'raw' => $raw]); +} diff --git a/pnut/pnut.svg b/pnut/pnut.svg new file mode 100644 index 00000000..6cc64b01 --- /dev/null +++ b/pnut/pnut.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pnut/templates/admin.tpl b/pnut/templates/admin.tpl new file mode 100644 index 00000000..b4cc3651 --- /dev/null +++ b/pnut/templates/admin.tpl @@ -0,0 +1,3 @@ +{{include file="field_input.tpl" field=$client_id}} +{{include file="field_input.tpl" field=$client_secret}} +
diff --git a/pnut/templates/connector_settings.tpl b/pnut/templates/connector_settings.tpl new file mode 100644 index 00000000..6662a5ae --- /dev/null +++ b/pnut/templates/connector_settings.tpl @@ -0,0 +1,14 @@ +

{{$status}}

+{{include file="field_checkbox.tpl" field=$enable}} +{{include file="field_checkbox.tpl" field=$bydefault}} +{{if $user_client}} + {{include file="field_input.tpl" field=$client_id}} + {{include file="field_input.tpl" field=$client_secret}} + {{include file="field_input.tpl" field=$access_token}} +{{/if}} +{{if $authorize_url}} + {{$authorize_text}} +{{/if}} +{{if $disconn_btn}} +
+{{/if}} diff --git a/public_server/lang/de/messages.po b/public_server/lang/de/messages.po index 514d579d..cc2cf617 100644 --- a/public_server/lang/de/messages.po +++ b/public_server/lang/de/messages.po @@ -12,9 +12,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-05-23 19:49+0000\n" -"Last-Translator: Till Mohr \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 11:24+0000\n" +"Last-Translator: Till Mohr , 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/public_server/lang/it/messages.po b/public_server/lang/it/messages.po index 5c46ab33..c091cfd6 100644 --- a/public_server/lang/it/messages.po +++ b/public_server/lang/it/messages.po @@ -11,14 +11,14 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 12:57+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"PO-Revision-Date: 2014-06-23 11:24+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: public_server.php:64 msgid "Administrator" diff --git a/public_server/lang/it/strings.php b/public_server/lang/it/strings.php index a095f2a6..41d5b0e9 100644 --- a/public_server/lang/it/strings.php +++ b/public_server/lang/it/strings.php @@ -3,7 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Administrator'] = 'Amministratore'; $a->strings['Your account on %s will expire in a few days.'] = 'Il tuo account su %s scadrà tra pochi giorni.'; diff --git a/public_server/public_server.php b/public_server/public_server.php index 79201007..9cd0f667 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -6,10 +6,8 @@ * Author: Keith Fernie */ -use Friendica\App; use Friendica\BaseModule; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Database\DBA; use Friendica\DI; @@ -29,7 +27,7 @@ function public_server_install() function public_server_load_config(ConfigFileManager $loader) { - DI::app()->getConfigCache()->load($loader->loadAddonConfig('public_server'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('public_server'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); } function public_server_register_account($b) @@ -48,7 +46,7 @@ function public_server_register_account($b) function public_server_cron($b) { - Logger::notice("public_server: cron start"); + DI::logger()->notice("public_server: cron start"); $users = DBA::selectToArray('user', [], ["`account_expires_on` > ? AND `account_expires_on` < ? AND `expire_notification_sent` <= ?", DBA::NULL_DATETIME, DateTimeFormat::utc('now + 5 days'), DBA::NULL_DATETIME]); @@ -59,8 +57,8 @@ function public_server_cron($b) 'uid' => $rr['uid'], 'system_type' => 'public_server_expire', 'source_name' => DI::l10n()->t('Administrator'), - 'source_link' => DI::baseUrl()->get(), - 'source_photo' => DI::baseUrl()->get() . '/images/person-80.jpg', + 'source_link' => DI::baseUrl(), + 'source_photo' => DI::baseUrl() . '/images/person-80.jpg', ]); $fields = ['expire_notification_sent' => DateTimeFormat::utcNow()]; @@ -97,14 +95,14 @@ function public_server_cron($b) } } - Logger::notice("public_server: cron end"); + DI::logger()->notice("public_server: cron end"); } function public_server_enotify(array &$b) { if (!empty($b['params']) && $b['params']['type'] == Notification\Type::SYSTEM && !empty($b['params']['system_type']) && $b['params']['system_type'] === 'public_server_expire') { - $b['itemlink'] = DI::baseUrl()->get(); + $b['itemlink'] = DI::baseUrl(); $b['epreamble'] = $b['preamble'] = DI::l10n()->t('Your account on %s will expire in a few days.', DI::config()->get('system', 'sitename')); $b['subject'] = DI::l10n()->t('Your Friendica account is about to expire.'); $b['body'] = DI::l10n()->t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days", $b['params']['to_name'], "[url=" . DI::config()->get('system', 'url') . "]" . DI::config()->get('config', 'sitename') . "[/url]"); diff --git a/pumpio/lang/C/messages.po b/pumpio/lang/C/messages.po index baac56e6..7e14cd79 100644 --- a/pumpio/lang/C/messages.po +++ b/pumpio/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,76 +17,76 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pumpio.php:57 +#: pumpio.php:62 msgid "Permission denied." msgstr "" -#: pumpio.php:152 +#: pumpio.php:156 #, php-format msgid "Unable to register the client at the pump.io server '%s'." msgstr "" -#: pumpio.php:192 +#: pumpio.php:196 msgid "You are now authenticated to pumpio." msgstr "" -#: pumpio.php:193 +#: pumpio.php:197 msgid "return to the connector page" msgstr "" -#: pumpio.php:213 +#: pumpio.php:217 msgid "Post to pumpio" msgstr "" -#: pumpio.php:237 +#: pumpio.php:241 msgid "Save Settings" msgstr "" -#: pumpio.php:239 +#: pumpio.php:243 msgid "Delete this preset" msgstr "" -#: pumpio.php:245 +#: pumpio.php:249 msgid "Authenticate your pump.io connection" msgstr "" -#: pumpio.php:252 +#: pumpio.php:256 msgid "Pump.io servername (without \"http://\" or \"https://\" )" msgstr "" -#: pumpio.php:253 +#: pumpio.php:257 msgid "Pump.io username (without the servername)" msgstr "" -#: pumpio.php:254 +#: pumpio.php:258 msgid "Import the remote timeline" msgstr "" -#: pumpio.php:255 +#: pumpio.php:259 msgid "Enable Pump.io Post Addon" msgstr "" -#: pumpio.php:256 +#: pumpio.php:260 msgid "Post to Pump.io by default" msgstr "" -#: pumpio.php:257 +#: pumpio.php:261 msgid "Should posts be public?" msgstr "" -#: pumpio.php:258 +#: pumpio.php:262 msgid "Mirror all public posts" msgstr "" -#: pumpio.php:263 +#: pumpio.php:267 msgid "Pump.io Import/Export/Mirror" msgstr "" -#: pumpio.php:920 +#: pumpio.php:924 msgid "status" msgstr "" -#: pumpio.php:924 +#: pumpio.php:928 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "" diff --git a/pumpio/lang/cs/messages.po b/pumpio/lang/cs/messages.po index 73453e94..64293afb 100644 --- a/pumpio/lang/cs/messages.po +++ b/pumpio/lang/cs/messages.po @@ -10,94 +10,86 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2018-06-11 19:43+0000\n" -"Last-Translator: Aditoo\n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 11:30+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: pumpio.php:38 +#: pumpio.php:57 msgid "Permission denied." msgstr "Přístup odmítnut." -#: pumpio.php:124 +#: pumpio.php:152 #, php-format msgid "Unable to register the client at the pump.io server '%s'." -msgstr "Nebylo možné registrovat klienta na pump.io serveru '%s'." +msgstr "Nebylo možné registrovat klienta na serveru pump.io \"%s\"." -#: pumpio.php:164 +#: pumpio.php:192 msgid "You are now authenticated to pumpio." -msgstr "Nyní jste přihlášen k pumpio." +msgstr "Nyní jste přihlášen/a na pump.io." -#: pumpio.php:165 +#: pumpio.php:193 msgid "return to the connector page" -msgstr "návrat ke stránce konektor" +msgstr "návrat na stránku konektoru" -#: pumpio.php:183 +#: pumpio.php:213 msgid "Post to pumpio" -msgstr "Příspěvek na pumpio" +msgstr "Posílat na pump.io" -#: pumpio.php:221 pumpio.php:225 -msgid "Pump.io Import/Export/Mirror" -msgstr "Pump.oi Import/Export/Zrcadlení" +#: pumpio.php:237 +msgid "Save Settings" +msgstr "Uložit nastavení" -#: pumpio.php:229 -msgid "pump.io username (without the servername)" -msgstr "uživatelské jméno pump.io (bez jména serveru)" +#: pumpio.php:239 +msgid "Delete this preset" +msgstr "" -#: pumpio.php:234 -msgid "pump.io servername (without \"http://\" or \"https://\" )" -msgstr "jméno serveru pump.io (bez \"http://\" nebo \"https://\" )" - -#: pumpio.php:246 +#: pumpio.php:245 msgid "Authenticate your pump.io connection" msgstr "Přihlásit ke spojení na pump.io" -#: pumpio.php:250 +#: pumpio.php:252 +msgid "Pump.io servername (without \"http://\" or \"https://\" )" +msgstr "" + +#: pumpio.php:253 +msgid "Pump.io username (without the servername)" +msgstr "" + +#: pumpio.php:254 msgid "Import the remote timeline" msgstr "Importovat vzdálenou časovou osu" #: pumpio.php:255 -msgid "Enable pump.io Post Addon" -msgstr "Povolit doplněk pumo.io Post" +msgid "Enable Pump.io Post Addon" +msgstr "" -#: pumpio.php:260 -msgid "Post to pump.io by default" -msgstr "Posílat příspěvky na pump.io automaticky" +#: pumpio.php:256 +msgid "Post to Pump.io by default" +msgstr "" -#: pumpio.php:265 +#: pumpio.php:257 msgid "Should posts be public?" msgstr "Mají být příspěvky veřejné?" -#: pumpio.php:270 +#: pumpio.php:258 msgid "Mirror all public posts" msgstr "Zrcadlit všechny veřejné příspěvky" -#: pumpio.php:275 -msgid "Check to delete this preset" -msgstr "Zaškrtnout pro smazání tohoto nastavení" +#: pumpio.php:263 +msgid "Pump.io Import/Export/Mirror" +msgstr "Import/Export/Zrcadlení Pump.io" -#: pumpio.php:285 -msgid "Save Settings" -msgstr "Uložit Nastavení" - -#: pumpio.php:515 -msgid "Pump.io post failed. Queued for retry." -msgstr "Zaslání příspěvku na Pump.io selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání." - -#: pumpio.php:587 -msgid "Pump.io like failed. Queued for retry." -msgstr "Zaslání příspěvku na Pump.io zřejmě selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání." - -#: pumpio.php:875 +#: pumpio.php:920 msgid "status" msgstr "stav" -#: pumpio.php:879 +#: pumpio.php:924 #, php-format msgid "%1$s likes %2$s's %3$s" -msgstr "%1$s se líbí %3$s %2$s" +msgstr "Uživateli %1$s se líbí %3$s uživatele %2$s" diff --git a/pumpio/lang/cs/strings.php b/pumpio/lang/cs/strings.php index b05b20d7..9e90d014 100644 --- a/pumpio/lang/cs/strings.php +++ b/pumpio/lang/cs/strings.php @@ -6,22 +6,15 @@ function string_plural_select_cs($n){ if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} $a->strings['Permission denied.'] = 'Přístup odmítnut.'; -$a->strings['Unable to register the client at the pump.io server \'%s\'.'] = 'Nebylo možné registrovat klienta na pump.io serveru \'%s\'.'; -$a->strings['You are now authenticated to pumpio.'] = 'Nyní jste přihlášen k pumpio.'; -$a->strings['return to the connector page'] = 'návrat ke stránce konektor'; -$a->strings['Post to pumpio'] = 'Příspěvek na pumpio'; -$a->strings['Pump.io Import/Export/Mirror'] = 'Pump.oi Import/Export/Zrcadlení'; -$a->strings['pump.io username (without the servername)'] = 'uživatelské jméno pump.io (bez jména serveru)'; -$a->strings['pump.io servername (without "http://" or "https://" )'] = 'jméno serveru pump.io (bez "http://" nebo "https://" )'; +$a->strings['Unable to register the client at the pump.io server \'%s\'.'] = 'Nebylo možné registrovat klienta na serveru pump.io "%s".'; +$a->strings['You are now authenticated to pumpio.'] = 'Nyní jste přihlášen/a na pump.io.'; +$a->strings['return to the connector page'] = 'návrat na stránku konektoru'; +$a->strings['Post to pumpio'] = 'Posílat na pump.io'; +$a->strings['Save Settings'] = 'Uložit nastavení'; $a->strings['Authenticate your pump.io connection'] = 'Přihlásit ke spojení na pump.io'; $a->strings['Import the remote timeline'] = 'Importovat vzdálenou časovou osu'; -$a->strings['Enable pump.io Post Addon'] = 'Povolit doplněk pumo.io Post'; -$a->strings['Post to pump.io by default'] = 'Posílat příspěvky na pump.io automaticky'; $a->strings['Should posts be public?'] = 'Mají být příspěvky veřejné?'; $a->strings['Mirror all public posts'] = 'Zrcadlit všechny veřejné příspěvky'; -$a->strings['Check to delete this preset'] = 'Zaškrtnout pro smazání tohoto nastavení'; -$a->strings['Save Settings'] = 'Uložit Nastavení'; -$a->strings['Pump.io post failed. Queued for retry.'] = 'Zaslání příspěvku na Pump.io selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání.'; -$a->strings['Pump.io like failed. Queued for retry.'] = 'Zaslání příspěvku na Pump.io zřejmě selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání.'; +$a->strings['Pump.io Import/Export/Mirror'] = 'Import/Export/Zrcadlení Pump.io'; $a->strings['status'] = 'stav'; -$a->strings['%1$s likes %2$s\'s %3$s'] = '%1$s se líbí %3$s %2$s'; +$a->strings['%1$s likes %2$s\'s %3$s'] = 'Uživateli %1$s se líbí %3$s uživatele %2$s'; diff --git a/pumpio/lang/de/messages.po b/pumpio/lang/de/messages.po index 5b33d2e3..40119f32 100644 --- a/pumpio/lang/de/messages.po +++ b/pumpio/lang/de/messages.po @@ -12,9 +12,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2022-01-22 17:36+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 11:30+0000\n" +"Last-Translator: Tobias Diekershoff , 2018,2022\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/pumpio/lang/fr/messages.po b/pumpio/lang/fr/messages.po index 2966c49c..22b98743 100644 --- a/pumpio/lang/fr/messages.po +++ b/pumpio/lang/fr/messages.po @@ -4,6 +4,7 @@ # # # Translators: +# Florent C., 2023 # Hypolite Petovan , 2022 # ea1cd8241cb389ffb6f92bc6891eff5d_dc12308 <70dced5587d47e18d88f9298024d96f8_93383>, 2015 # StefOfficiel , 2015 @@ -11,86 +12,86 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2023-06-03 15:50-0400\n" "PO-Revision-Date: 2014-06-23 11:30+0000\n" -"Last-Translator: Hypolite Petovan , 2022\n" -"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" +"Last-Translator: Florent C., 2023\n" +"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: pumpio.php:57 +#: pumpio.php:62 msgid "Permission denied." msgstr "Permission refusée." -#: pumpio.php:152 +#: pumpio.php:156 #, php-format msgid "Unable to register the client at the pump.io server '%s'." msgstr "Impossible d'enregistrer le client sur le serveur pump.io \"%s\"." -#: pumpio.php:192 +#: pumpio.php:196 msgid "You are now authenticated to pumpio." msgstr "Vous êtes maintenant authentifié sur pump.io." -#: pumpio.php:193 +#: pumpio.php:197 msgid "return to the connector page" msgstr "Retourner à la page du connecteur" -#: pumpio.php:213 +#: pumpio.php:217 msgid "Post to pumpio" msgstr "Publier sur pump.io" -#: pumpio.php:237 +#: pumpio.php:241 msgid "Save Settings" msgstr "Sauvegarder les paramètres" -#: pumpio.php:239 +#: pumpio.php:243 msgid "Delete this preset" msgstr "Supprimer ce préréglage" -#: pumpio.php:245 +#: pumpio.php:249 msgid "Authenticate your pump.io connection" msgstr "Identifiez votre connexion à pump.io" -#: pumpio.php:252 +#: pumpio.php:256 msgid "Pump.io servername (without \"http://\" or \"https://\" )" msgstr "Domaine du serveur Pump.io (sans \"http://\" ou \"https://\")" -#: pumpio.php:253 +#: pumpio.php:257 msgid "Pump.io username (without the servername)" msgstr "Nom d'utilisateur Pump.io (sans le domaine de serveur)" -#: pumpio.php:254 +#: pumpio.php:258 msgid "Import the remote timeline" -msgstr "Importer la timeline distante" +msgstr "Importer le flux distant" -#: pumpio.php:255 +#: pumpio.php:259 msgid "Enable Pump.io Post Addon" msgstr "Activer l'extension Pump.io" -#: pumpio.php:256 +#: pumpio.php:260 msgid "Post to Pump.io by default" msgstr "Publier sur Pump.io par défaut" -#: pumpio.php:257 +#: pumpio.php:261 msgid "Should posts be public?" msgstr "Les messages devraient être publiques ?" -#: pumpio.php:258 +#: pumpio.php:262 msgid "Mirror all public posts" msgstr "Refléter toutes les publications publiques" -#: pumpio.php:263 +#: pumpio.php:267 msgid "Pump.io Import/Export/Mirror" msgstr "Import/Export/Miroir Pump.io" -#: pumpio.php:920 +#: pumpio.php:924 msgid "status" msgstr "statut" -#: pumpio.php:924 +#: pumpio.php:928 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "%1$s aime lea %3$s de %2$s" diff --git a/pumpio/lang/fr/strings.php b/pumpio/lang/fr/strings.php index bdbbc462..14ddade1 100644 --- a/pumpio/lang/fr/strings.php +++ b/pumpio/lang/fr/strings.php @@ -15,7 +15,7 @@ $a->strings['Delete this preset'] = 'Supprimer ce préréglage'; $a->strings['Authenticate your pump.io connection'] = 'Identifiez votre connexion à pump.io'; $a->strings['Pump.io servername (without "http://" or "https://" )'] = 'Domaine du serveur Pump.io (sans "http://" ou "https://")'; $a->strings['Pump.io username (without the servername)'] = 'Nom d\'utilisateur Pump.io (sans le domaine de serveur)'; -$a->strings['Import the remote timeline'] = 'Importer la timeline distante'; +$a->strings['Import the remote timeline'] = 'Importer le flux distant'; $a->strings['Enable Pump.io Post Addon'] = 'Activer l\'extension Pump.io'; $a->strings['Post to Pump.io by default'] = 'Publier sur Pump.io par défaut'; $a->strings['Should posts be public?'] = 'Les messages devraient être publiques ?'; diff --git a/pumpio/lang/it/messages.po b/pumpio/lang/it/messages.po index 2ab7e050..052e8797 100644 --- a/pumpio/lang/it/messages.po +++ b/pumpio/lang/it/messages.po @@ -5,98 +5,91 @@ # # Translators: # fabrixxm , 2014,2018 +# Sylke Vicious , 2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2018-03-19 13:25+0000\n" -"Last-Translator: fabrixxm \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 11:30+0000\n" +"Last-Translator: Sylke Vicious , 2023\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: pumpio.php:38 +#: pumpio.php:57 msgid "Permission denied." msgstr "Permesso negato." -#: pumpio.php:124 +#: pumpio.php:152 #, php-format msgid "Unable to register the client at the pump.io server '%s'." msgstr "Impossibile registrare il client sul server pump.io '%s'" -#: pumpio.php:164 +#: pumpio.php:192 msgid "You are now authenticated to pumpio." msgstr "Sei autenticato su pump.io" -#: pumpio.php:165 +#: pumpio.php:193 msgid "return to the connector page" msgstr "ritorna alla pagina del connettore" -#: pumpio.php:183 +#: pumpio.php:213 msgid "Post to pumpio" msgstr "Invia a pump.io" -#: pumpio.php:221 pumpio.php:225 -msgid "Pump.io Import/Export/Mirror" -msgstr "Esporta/Importa/Clona pump.io" +#: pumpio.php:237 +msgid "Save Settings" +msgstr "Salva Impostazioni" -#: pumpio.php:229 -msgid "pump.io username (without the servername)" -msgstr "nome utente pump.io (senza il nome del server)" +#: pumpio.php:239 +msgid "Delete this preset" +msgstr "Elimina questa preimpostazione" -#: pumpio.php:234 -msgid "pump.io servername (without \"http://\" or \"https://\" )" -msgstr "nome del server pump.io (senza \"http://\" o \"https://\")" - -#: pumpio.php:246 +#: pumpio.php:245 msgid "Authenticate your pump.io connection" msgstr "Autentica la tua connessione pump.io" -#: pumpio.php:250 +#: pumpio.php:252 +msgid "Pump.io servername (without \"http://\" or \"https://\" )" +msgstr "Nome server Pump.io (senza \"http://\" o \"https://\" )" + +#: pumpio.php:253 +msgid "Pump.io username (without the servername)" +msgstr "Nome utente Pump.io (senza nome server)" + +#: pumpio.php:254 msgid "Import the remote timeline" msgstr "Importa la timeline remota" #: pumpio.php:255 -msgid "Enable pump.io Post Addon" -msgstr "Abilita il componente aggiuntivo di invio ad pump.io" +msgid "Enable Pump.io Post Addon" +msgstr "Abilita componente aggiuntivo di pubblicazione Pump.io" -#: pumpio.php:260 -msgid "Post to pump.io by default" -msgstr "Invia sempre a pump.io" +#: pumpio.php:256 +msgid "Post to Pump.io by default" +msgstr "Pubblica su Pump.io per impostazione predefinita" -#: pumpio.php:265 +#: pumpio.php:257 msgid "Should posts be public?" msgstr "I messaggi devono essere pubblici?" -#: pumpio.php:270 +#: pumpio.php:258 msgid "Mirror all public posts" msgstr "Clona tutti i messaggi pubblici" -#: pumpio.php:275 -msgid "Check to delete this preset" -msgstr "Seleziona per elimiare queto preset" +#: pumpio.php:263 +msgid "Pump.io Import/Export/Mirror" +msgstr "Esporta/Importa/Clona pump.io" -#: pumpio.php:285 -msgid "Save Settings" -msgstr "Salva Impostazioni" - -#: pumpio.php:515 -msgid "Pump.io post failed. Queued for retry." -msgstr "Invio a pump.io fallito. In attesa di riprovare." - -#: pumpio.php:587 -msgid "Pump.io like failed. Queued for retry." -msgstr "Invio 'mi piace' a pump.io fallito. In attesa di riprovare." - -#: pumpio.php:875 +#: pumpio.php:920 msgid "status" msgstr "stato" -#: pumpio.php:879 +#: pumpio.php:924 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "a %1$s piace %2$s di %3$s" diff --git a/pumpio/lang/it/strings.php b/pumpio/lang/it/strings.php index 8721222c..512d3e7f 100644 --- a/pumpio/lang/it/strings.php +++ b/pumpio/lang/it/strings.php @@ -3,25 +3,23 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Permission denied.'] = 'Permesso negato.'; $a->strings['Unable to register the client at the pump.io server \'%s\'.'] = 'Impossibile registrare il client sul server pump.io \'%s\''; $a->strings['You are now authenticated to pumpio.'] = 'Sei autenticato su pump.io'; $a->strings['return to the connector page'] = 'ritorna alla pagina del connettore'; $a->strings['Post to pumpio'] = 'Invia a pump.io'; -$a->strings['Pump.io Import/Export/Mirror'] = 'Esporta/Importa/Clona pump.io'; -$a->strings['pump.io username (without the servername)'] = 'nome utente pump.io (senza il nome del server)'; -$a->strings['pump.io servername (without "http://" or "https://" )'] = 'nome del server pump.io (senza "http://" o "https://")'; +$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Delete this preset'] = 'Elimina questa preimpostazione'; $a->strings['Authenticate your pump.io connection'] = 'Autentica la tua connessione pump.io'; +$a->strings['Pump.io servername (without "http://" or "https://" )'] = 'Nome server Pump.io (senza "http://" o "https://" )'; +$a->strings['Pump.io username (without the servername)'] = 'Nome utente Pump.io (senza nome server)'; $a->strings['Import the remote timeline'] = 'Importa la timeline remota'; -$a->strings['Enable pump.io Post Addon'] = 'Abilita il componente aggiuntivo di invio ad pump.io'; -$a->strings['Post to pump.io by default'] = 'Invia sempre a pump.io'; +$a->strings['Enable Pump.io Post Addon'] = 'Abilita componente aggiuntivo di pubblicazione Pump.io'; +$a->strings['Post to Pump.io by default'] = 'Pubblica su Pump.io per impostazione predefinita'; $a->strings['Should posts be public?'] = 'I messaggi devono essere pubblici?'; $a->strings['Mirror all public posts'] = 'Clona tutti i messaggi pubblici'; -$a->strings['Check to delete this preset'] = 'Seleziona per elimiare queto preset'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; -$a->strings['Pump.io post failed. Queued for retry.'] = 'Invio a pump.io fallito. In attesa di riprovare.'; -$a->strings['Pump.io like failed. Queued for retry.'] = 'Invio \'mi piace\' a pump.io fallito. In attesa di riprovare.'; +$a->strings['Pump.io Import/Export/Mirror'] = 'Esporta/Importa/Clona pump.io'; $a->strings['status'] = 'stato'; $a->strings['%1$s likes %2$s\'s %3$s'] = 'a %1$s piace %2$s di %3$s'; diff --git a/pumpio/oauth/http.php b/pumpio/oauth/http.php index 5d5e23f0..3045e509 100644 --- a/pumpio/oauth/http.php +++ b/pumpio/oauth/http.php @@ -109,9 +109,11 @@ class http_class var $connected_port = -1; var $connected_ssl = 0; + private $content_length_set; + /* Private methods - DO NOT CALL */ - Function Tokenize($string,$separator="") + private function Tokenize($string,$separator="") { if(!strcmp($separator,"")) { @@ -135,18 +137,18 @@ class http_class } } - Function CookieEncode($value, $name) + private function CookieEncode($value, $name) { return($name ? str_replace("=", "%25", $value) : str_replace(";", "%3B", $value)); } - Function SetError($error, $error_code = HTTP_CLIENT_ERROR_UNSPECIFIED_ERROR) + private function SetError($error, $error_code = HTTP_CLIENT_ERROR_UNSPECIFIED_ERROR) { $this->error_code = $error_code; return($this->error=$error); } - Function SetPHPError($error, &$php_error_message, $error_code = HTTP_CLIENT_ERROR_UNSPECIFIED_ERROR) + private function SetPHPError($error, &$php_error_message, $error_code = HTTP_CLIENT_ERROR_UNSPECIFIED_ERROR) { if(IsSet($php_error_message) && strlen($php_error_message)) @@ -154,7 +156,7 @@ class http_class return($this->SetError($error, $error_code)); } - Function SetDataAccessError($error,$check_connection=0) + private function SetDataAccessError($error,$check_connection=0) { $this->error=$error; $this->error_code = HTTP_CLIENT_ERROR_COMMUNICATION_FAILURE; @@ -174,7 +176,7 @@ class http_class } } - Function OutputDebug($message) + private function OutputDebug($message) { if($this->log_debug) error_log($message); @@ -188,7 +190,7 @@ class http_class } } - Function GetLine() + private function GetLine() { for($line="";;) { @@ -227,7 +229,7 @@ class http_class } } - Function PutLine($line) + private function PutLine($line) { if($this->debug) $this->OutputDebug("C $line"); @@ -239,7 +241,7 @@ class http_class return(1); } - Function PutData($data) + private function PutData($data) { if(strlen($data)) { @@ -254,7 +256,7 @@ class http_class return(1); } - Function FlushData() + private function FlushData() { if(!fflush($this->connection)) { @@ -264,7 +266,7 @@ class http_class return(1); } - Function ReadChunkSize() + private function ReadChunkSize() { if($this->remaining_chunk==0) { @@ -289,7 +291,7 @@ class http_class return(""); } - Function ReadBytes($length) + private function ReadBytes($length) { if($this->use_curl) { @@ -356,7 +358,7 @@ class http_class return($bytes); } - Function EndOfInput() + private function EndOfInput() { if($this->use_curl) return($this->read_response>=strlen($this->response)); @@ -367,7 +369,7 @@ class http_class return(feof($this->connection)); } - Function Resolve($domain, &$ip, $server_type) + private function Resolve($domain, &$ip, $server_type) { if(preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$domain)) $ip=$domain; @@ -385,7 +387,7 @@ class http_class return(''); } - Function Connect($host_name, $host_port, $ssl, $server_type = 'HTTP') + private function Connect($host_name, $host_port, $ssl, $server_type = 'HTTP') { $domain=$host_name; $port = $host_port; @@ -552,7 +554,7 @@ class http_class } } - Function Disconnect() + private function Disconnect() { if($this->debug) $this->OutputDebug("Disconnected from ".$this->connected_host); @@ -569,7 +571,7 @@ class http_class /* Public methods */ - Function GetRequestArguments($url, &$arguments) + public function GetRequestArguments($url, &$arguments) { $this->error = ''; $this->error_code = HTTP_CLIENT_ERROR_NO_ERROR; @@ -621,7 +623,7 @@ class http_class return(""); } - Function Open($arguments) + public function Open($arguments) { if(strlen($this->error)) return($this->error); @@ -750,7 +752,7 @@ class http_class return(""); } - Function Close($force = 0) + public function Close($force = 0) { if($this->state=="Disconnected") return("1 already disconnected"); @@ -767,7 +769,7 @@ class http_class return($this->Disconnect()); } - Function PickCookies(&$cookies,$secure) + private function PickCookies(&$cookies,$secure) { if(IsSet($this->cookies[$secure])) { @@ -803,7 +805,7 @@ class http_class } } - Function GetFileDefinition($file, &$definition) + private function GetFileDefinition($file, &$definition) { $name=""; if(IsSet($file["FileName"])) @@ -990,9 +992,6 @@ class http_class if(GetType($length=@filesize($file["FileName"]))!="integer") { $error="it was not possible to determine the length of the file ".$file["FileName"]; - if(IsSet($php_errormsg) - && strlen($php_errormsg)) - $error.=": ".$php_errormsg; if(!file_exists($file["FileName"])) $error="it was not possible to access the file ".$file["FileName"]; return($error); @@ -1007,7 +1006,7 @@ class http_class return(""); } - Function ConnectFromProxy($arguments, &$headers) + private function ConnectFromProxy($arguments, &$headers) { if(!$this->PutLine('CONNECT '.$this->host_name.':'.($this->host_port ? $this->host_port : 443).' HTTP/1.0') || (strlen($this->user_agent) @@ -1052,7 +1051,7 @@ class http_class return(""); } - Function SendRequest($arguments) + public function SendRequest($arguments) { if(strlen($this->error)) return($this->error); @@ -1440,7 +1439,7 @@ class http_class return(""); } - Function SetCookie($name, $value, $expires="" , $path="/" , $domain="" , $secure=0, $verbatim=0) + private function SetCookie($name, $value, $expires="" , $path="/" , $domain="" , $secure=0, $verbatim=0) { if(strlen($this->error)) return($this->error); @@ -1472,7 +1471,7 @@ class http_class return(""); } - Function SendRequestBody($data, $end_of_data) + private function SendRequestBody($data, $end_of_data) { if(strlen($this->error)) return($this->error); @@ -1508,7 +1507,7 @@ class http_class return(""); } - Function ReadReplyHeadersResponse(&$headers) + private function ReadReplyHeadersResponse(&$headers) { $headers=array(); if(strlen($this->error)) @@ -1635,7 +1634,7 @@ class http_class return(""); } - Function Redirect(&$headers) + private function Redirect(&$headers) { if($this->follow_redirect) { @@ -1678,7 +1677,7 @@ class http_class return(""); } - Function Authenticate(&$headers, $proxy, &$proxy_authorization, &$user, &$password, &$realm, &$workstation) + private function Authenticate(&$headers, $proxy, &$proxy_authorization, &$user, &$password, &$realm, &$workstation) { if($proxy) { @@ -1697,9 +1696,10 @@ class http_class if(IsSet($headers[$authenticate_header]) && $this->sasl_authenticate) { - if(function_exists("class_exists") - && !class_exists("sasl_client_class")) + if(!class_exists('sasl_client_class')) + { return($this->SetError("the SASL client class needs to be loaded to be able to authenticate".($proxy ? " with the proxy server" : "")." and access this site", HTTP_CLIENT_ERROR_INVALID_PARAMETERS)); + } if(GetType($headers[$authenticate_header])=="array") $authenticate=$headers[$authenticate_header]; else @@ -1719,7 +1719,7 @@ class http_class else $mechanisms[]=$mechanism; } - $sasl=new sasl_client_class; + $sasl=new \sasl_client_class(); if(IsSet($user)) $sasl->SetCredential("user",$user); if(IsSet($password)) @@ -1731,6 +1731,8 @@ class http_class $sasl->SetCredential("uri",$this->request_uri); $sasl->SetCredential("method",$this->request_method); $sasl->SetCredential("session",$this->session); + $message = ''; + $interactions = []; do { $status=$sasl->Start($mechanisms,$message,$interactions); @@ -1906,8 +1908,8 @@ class http_class } return(""); } - - Function ReadReplyHeaders(&$headers) + + public function ReadReplyHeaders(&$headers) { if(strlen($error=$this->ReadReplyHeadersResponse($headers))) return($error); @@ -1938,7 +1940,7 @@ class http_class return(""); } - Function ReadReplyBody(&$body,$length) + private function ReadReplyBody(&$body,$length) { $body=""; if(strlen($this->error)) @@ -1980,7 +1982,7 @@ class http_class return(""); } - Function ReadWholeReplyBody(&$body) + public function ReadWholeReplyBody(&$body) { $body = ''; for(;;) @@ -1993,7 +1995,7 @@ class http_class } } - Function SaveCookies(&$cookies, $domain='', $secure_only=0, $persistent_only=0) + private function SaveCookies(&$cookies, $domain='', $secure_only=0, $persistent_only=0) { $now=gmdate("Y-m-d H-i-s"); $cookies=array(); @@ -2034,17 +2036,17 @@ class http_class } } - Function SavePersistentCookies(&$cookies, $domain='', $secure_only=0) + private function SavePersistentCookies(&$cookies, $domain='', $secure_only=0) { $this->SaveCookies($cookies, $domain, $secure_only, 1); } - Function GetPersistentCookies(&$cookies, $domain='', $secure_only=0) + private function GetPersistentCookies(&$cookies, $domain='', $secure_only=0) { $this->SavePersistentCookies($cookies, $domain, $secure_only); } - Function RestoreCookies($cookies, $clear=1) + private function RestoreCookies($cookies, $clear=1) { $new_cookies=($clear ? array() : $this->cookies); for($secure_cookies=0, Reset($cookies); $secure_cookies */ -use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; -use Friendica\Core\Addon; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; -use Friendica\Model\Group; +use Friendica\Model\Circle; use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\User; @@ -96,7 +93,7 @@ function pumpio_registerclient($host) $application_name = DI::config()->get('pumpio', 'application_name'); if ($application_name == '') { - $application_name = DI::baseUrl()->getHostname(); + $application_name = DI::baseUrl()->getHost(); } $firstAdmin = User::getFirstAdmin(['email']); @@ -105,10 +102,10 @@ function pumpio_registerclient($host) $params['contacts'] = $firstAdmin['email']; $params['application_type'] = 'native'; $params['application_name'] = $application_name; - $params['logo_url'] = DI::baseUrl()->get() . '/images/friendica-256.png'; - $params['redirect_uris'] = DI::baseUrl()->get() . '/pumpio/connect'; + $params['logo_url'] = DI::baseUrl() . '/images/friendica-256.png'; + $params['redirect_uris'] = DI::baseUrl() . '/pumpio/connect'; - Logger::info('pumpio_registerclient: ' . $url . ' parameters', $params); + DI::logger()->info('pumpio_registerclient: ' . $url . ' parameters', $params); // @TODO Rewrite this to our own HTTP client $ch = curl_init($url); @@ -123,10 +120,10 @@ function pumpio_registerclient($host) if ($curl_info['http_code'] == '200') { $values = json_decode($s); - Logger::info('pumpio_registerclient: success ', (array)$values); + DI::logger()->info('pumpio_registerclient: success ', (array)$values); return $values; } - Logger::info('pumpio_registerclient: failed: ', $curl_info); + DI::logger()->info('pumpio_registerclient: failed: ', $curl_info); return false; } @@ -139,7 +136,7 @@ function pumpio_connect() $hostname = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'host'); if ((($consumer_key == '') || ($consumer_secret == '')) && ($hostname != '')) { - Logger::notice('pumpio_connect: register client'); + DI::logger()->notice('pumpio_connect: register client'); $clientdata = pumpio_registerclient($hostname); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_key', $clientdata->client_id); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_secret', $clientdata->client_secret); @@ -147,17 +144,17 @@ function pumpio_connect() $consumer_key = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_key'); $consumer_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_secret'); - Logger::info('pumpio_connect: ckey: ' . $consumer_key . ' csecrect: ' . $consumer_secret); + DI::logger()->info('pumpio_connect: ckey: ' . $consumer_key . ' csecrect: ' . $consumer_secret); } if (($consumer_key == '') || ($consumer_secret == '')) { - Logger::notice('pumpio_connect: '.sprintf('Unable to register the client at the pump.io server "%s".', $hostname)); + DI::logger()->notice('pumpio_connect: '.sprintf('Unable to register the client at the pump.io server "%s".', $hostname)); return DI::l10n()->t("Unable to register the client at the pump.io server '%s'.", $hostname); } // The callback URL is the script that gets called after the user authenticates with pumpio - $callback_url = DI::baseUrl()->get() . '/pumpio/connect'; + $callback_url = DI::baseUrl() . '/pumpio/connect'; // Let's begin. First we need a Request Token. The request token is required to send the user // to pumpio's login page. @@ -180,7 +177,7 @@ function pumpio_connect() if (($success = $client->Initialize())) { if (($success = $client->Process())) { if (strlen($client->access_token)) { - Logger::info('pumpio_connect: otoken: ' . $client->access_token . ', osecrect: ' . $client->access_token_secret); + DI::logger()->info('pumpio_connect: otoken: ' . $client->access_token . ', osecrect: ' . $client->access_token_secret); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'oauth_token', $client->access_token); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'oauth_token_secret', $client->access_token_secret); } @@ -192,11 +189,11 @@ function pumpio_connect() } if ($success) { - Logger::notice('pumpio_connect: authenticated'); + DI::logger()->notice('pumpio_connect: authenticated'); $o = DI::l10n()->t('You are now authenticated to pumpio.'); - $o .= '
' . DI::l10n()->t('return to the connector page') . ''; + $o .= '
' . DI::l10n()->t('return to the connector page') . ''; } else { - Logger::notice('pumpio_connect: could not connect'); + DI::logger()->notice('pumpio_connect: could not connect'); $o = 'Could not connect to pumpio. Refresh the page or try again later.'; } @@ -252,7 +249,7 @@ function pumpio_settings(array &$data) '$pumpio_user' => $pumpio_user, '$oauth_token' => $oauth_token, '$oauth_token_secret' => $oauth_token_secret, - '$authenticate_url' => DI::baseUrl()->get() . '/pumpio/connect', + '$authenticate_url' => DI::baseUrl() . '/pumpio/connect', '$servername' => ['pumpio_host', DI::l10n()->t('Pump.io servername (without "http://" or "https://" )'), $pumpio_host], '$username' => ['pumpio_user', DI::l10n()->t('Pump.io username (without the servername)'), $pumpio_user], '$import' => ['pumpio_import', DI::l10n()->t('Import the remote timeline'), $import_enabled], @@ -320,7 +317,7 @@ function pumpio_settings_post(array &$b) function pumpio_load_config(ConfigFileManager $loader) { - DI::app()->getConfigCache()->load($loader->loadAddonConfig('pumpio'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('pumpio'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); } function pumpio_hook_fork(array &$b) @@ -345,14 +342,14 @@ function pumpio_hook_fork(array &$b) if (DI::pConfig()->get($post['uid'], 'pumpio', 'import')) { // Don't fork if it isn't a reply to a pump.io post - if (($post['parent'] != $post['id']) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::PUMPIO])) { - Logger::notice('No pump.io parent found for item ' . $post['id']); + if (($post['gravity'] != Item::GRAVITY_PARENT) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::PUMPIO])) { + DI::logger()->notice('No pump.io parent found for item ' . $post['id']); $b['execute'] = false; return; } } else { // Comments are never exported when we don't import the pumpio timeline - if (!strstr($post['postopts'], 'pumpio') || ($post['parent'] != $post['id']) || $post['private']) { + if (!strstr($post['postopts'], 'pumpio') || ($post['gravity'] != Item::GRAVITY_PARENT)|| ($post['private'] == Item::PRIVATE)) { $b['execute'] = false; return; } @@ -390,7 +387,7 @@ function pumpio_send(array &$b) return; } - Logger::debug('pumpio_send: parameter ', $b); + DI::logger()->debug('pumpio_send: parameter ', $b); $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], DI::contentItem()->addSharedPost($b)); @@ -400,7 +397,7 @@ function pumpio_send(array &$b) $orig_post = Post::selectFirst([], $condition); if (!DBA::isResult($orig_post)) { - Logger::notice('pumpio_send: no pumpio post ' . $b['parent']); + DI::logger()->notice('pumpio_send: no pumpio post ' . $b['parent']); return; } else { $iscomment = true; @@ -410,14 +407,14 @@ function pumpio_send(array &$b) $receiver = pumpio_getreceiver($b); - Logger::notice('pumpio_send: receiver ', $receiver); + DI::logger()->notice('pumpio_send: receiver ', $receiver); - if (!count($receiver) && ($b['private'] || !strstr($b['postopts'], 'pumpio'))) { + if (!count($receiver) && ($b['private'] == Item::PRIVATE) || !strstr($b['postopts'], 'pumpio')) { return; } // Dont't post if the post doesn't belong to us. - // This is a check for forum postings + // This is a check for group postings $self = User::getOwnerDataById($b['uid']); if ($b['contact-id'] != $self['id']) { return; @@ -544,13 +541,13 @@ function pumpio_send(array &$b) } $post_id = $user->object->id; - Logger::notice('pumpio_send ' . $username . ': success ' . $post_id); + DI::logger()->notice('pumpio_send ' . $username . ': success ' . $post_id); if ($post_id && $iscomment) { - Logger::notice('pumpio_send ' . $username . ': Update extid ' . $post_id . ' for post id ' . $b['id']); + DI::logger()->notice('pumpio_send ' . $username . ': Update extid ' . $post_id . ' for post id ' . $b['id']); Item::update(['extid' => $post_id], ['id' => $b['id']]); } } else { - Logger::notice('pumpio_send '.$username.': '.$url.' general error: ' . print_r($user, true)); + DI::logger()->notice('pumpio_send '.$username.': '.$url.' general error: ' . print_r($user, true)); Worker::defer(); } } @@ -582,6 +579,8 @@ function pumpio_action(int $uid, string $uri, string $action, string $content = $uri = $orig_post['uri']; } + $objectType = ''; + if (($orig_post['object-type'] != '') && (strstr($orig_post['object-type'], ActivityNamespace::ACTIVITY_SCHEMA))) { $objectType = str_replace(ActivityNamespace::ACTIVITY_SCHEMA, '', $orig_post['object-type']); } elseif (strstr($uri, '/api/comment/')) { @@ -618,16 +617,18 @@ function pumpio_action(int $uid, string $uri, string $action, string $content = } if ($success) { - Logger::notice('pumpio_action '.$username.' '.$action.': success '.$uri); + DI::logger()->notice('pumpio_action '.$username.' '.$action.': success '.$uri); } else { - Logger::notice('pumpio_action '.$username.' '.$action.': general error: '.$uri); + DI::logger()->notice('pumpio_action '.$username.' '.$action.': general error: '.$uri); Worker::defer(); } } function pumpio_sync() { - if (!Addon::isEnabled('pumpio')) { + $addonHelper = DI::addonHelper(); + + if (!$addonHelper->isAddonEnabled('pumpio')) { return; } @@ -638,15 +639,15 @@ function pumpio_sync() if ($last) { $next = $last + ($poll_interval * 60); if ($next > time()) { - Logger::notice('pumpio: poll intervall not reached'); + DI::logger()->notice('pumpio: poll intervall not reached'); return; } } - Logger::notice('pumpio: cron_start'); + DI::logger()->notice('pumpio: cron_start'); $pconfigs = DBA::selectToArray('pconfig', ['uid'], ['cat' => 'pumpio', 'k' => 'mirror', 'v' => '1']); foreach ($pconfigs as $rr) { - Logger::notice('pumpio: mirroring user '.$rr['uid']); + DI::logger()->notice('pumpio: mirroring user '.$rr['uid']); pumpio_fetchtimeline($rr['uid']); } @@ -661,12 +662,12 @@ function pumpio_sync() foreach ($pconfigs as $rr) { if ($abandon_days != 0) { if (DBA::exists('user', ["uid = ? AND `login_date` >= ?", $rr['uid'], $abandon_limit])) { - Logger::notice('abandoned account: timeline from user '.$rr['uid'].' will not be imported'); + DI::logger()->notice('abandoned account: timeline from user '.$rr['uid'].' will not be imported'); continue; } } - Logger::notice('pumpio: importing timeline from user '.$rr['uid']); + DI::logger()->notice('pumpio: importing timeline from user '.$rr['uid']); pumpio_fetchinbox($rr['uid']); // check for new contacts once a day @@ -683,7 +684,7 @@ function pumpio_sync() } } - Logger::notice('pumpio: cron_end'); + DI::logger()->notice('pumpio: cron_end'); DI::keyValue()->set('pumpio_last_poll', time()); } @@ -711,7 +712,7 @@ function pumpio_fetchtimeline(int $uid) $application_name = DI::config()->get('pumpio', 'application_name'); } if ($application_name == '') { - $application_name = DI::baseUrl()->getHostname(); + $application_name = DI::baseUrl()->getHost(); } $first_time = ($lastdate == ''); @@ -728,7 +729,7 @@ function pumpio_fetchtimeline(int $uid) $url = 'https://'.$hostname.'/api/user/'.$username.'/feed/major'; - Logger::notice('pumpio: fetching for user ' . $uid . ' ' . $url . ' C:' . $client->client_id . ' CS:' . $client->client_secret . ' T:' . $client->access_token . ' TS:' . $client->access_token_secret); + DI::logger()->notice('pumpio: fetching for user ' . $uid . ' ' . $url . ' C:' . $client->client_id . ' CS:' . $client->client_secret . ' T:' . $client->access_token . ' TS:' . $client->access_token_secret); $useraddr = $username.'@'.$hostname; @@ -740,7 +741,7 @@ function pumpio_fetchtimeline(int $uid) } if (!$success) { - Logger::notice('pumpio: error fetching posts for user ' . $uid . ' ' . $useraddr . ' ', $user); + DI::logger()->notice('pumpio: error fetching posts for user ' . $uid . ' ' . $useraddr . ' ', $user); return; } @@ -800,11 +801,11 @@ function pumpio_fetchtimeline(int $uid) } } - Logger::notice('pumpio: posting for user ' . $uid); + DI::logger()->notice('pumpio: posting for user ' . $uid); Item::insert($postarray, true); - Logger::notice('pumpio: posting done - user ' . $uid); + DI::logger()->notice('pumpio: posting done - user ' . $uid); } } } @@ -827,6 +828,7 @@ function pumpio_dounlike(int $uid, array $self, $post, string $own_id) } $contactid = 0; + $contact = []; if (Strings::compareLink($post->actor->url, $own_id)) { $contactid = $self['id']; @@ -844,16 +846,16 @@ function pumpio_dounlike(int $uid, array $self, $post, string $own_id) Item::markForDeletion(['verb' => Activity::LIKE, 'uid' => $uid, 'contact-id' => $contactid, 'thr-parent' => $orig_post['uri']]); if (DBA::isResult($contact)) { - Logger::notice('pumpio_dounlike: unliked existing like. User ' . $own_id . ' ' . $uid . ' Contact: ' . $contactid . ' URI ' . $orig_post['uri']); + DI::logger()->notice('pumpio_dounlike: unliked existing like. User ' . $own_id . ' ' . $uid . ' Contact: ' . $contactid . ' URI ' . $orig_post['uri']); } else { - Logger::notice('pumpio_dounlike: not found. User ' . $own_id . ' ' . $uid . ' Contact: ' . $contactid . ' Url ' . $orig_post['uri']); + DI::logger()->notice('pumpio_dounlike: not found. User ' . $own_id . ' ' . $uid . ' Contact: ' . $contactid . ' Url ' . $orig_post['uri']); } } function pumpio_dolike(int $uid, array $self, $post, string $own_id, $threadcompletion = true) { if (empty($post->object->id)) { - Logger::info('Got empty like: '.print_r($post, true)); + DI::logger()->info('Got empty like: '.print_r($post, true)); return; } @@ -898,7 +900,7 @@ function pumpio_dolike(int $uid, array $self, $post, string $own_id, $threadcomp ]; if (Post::exists($condition)) { - Logger::notice('pumpio_dolike: found existing like. User ' . $own_id . ' ' . $uid . ' Contact: ' . $contactid . ' URI ' . $orig_post['uri']); + DI::logger()->notice('pumpio_dolike: found existing like. User ' . $own_id . ' ' . $uid . ' Contact: ' . $contactid . ' URI ' . $orig_post['uri']); return; } @@ -932,7 +934,7 @@ function pumpio_dolike(int $uid, array $self, $post, string $own_id, $threadcomp $ret = Item::insert($likedata); - Logger::notice('pumpio_dolike: ' . $ret . ' User ' . $own_id . ' ' . $uid . ' Contact: ' . $contactid . ' URI ' . $orig_post['uri']); + DI::logger()->notice('pumpio_dolike: ' . $ret . ' User ' . $own_id . ' ' . $uid . ' Contact: ' . $contactid . ' URI ' . $orig_post['uri']); } function pumpio_get_contact($uid, $contact, $no_insert = false) @@ -976,7 +978,7 @@ function pumpio_get_contact($uid, $contact, $no_insert = false) $contact_id = $r['id']; - Group::addMember(User::getDefaultGroup($uid), $contact_id); + Circle::addMember(User::getDefaultCircle($uid), $contact_id); } else { $contact_id = $r['id']; } @@ -1319,7 +1321,7 @@ function pumpio_getreceiver(array $b) { $receiver = []; - if (!$b['private']) { + if ($b['private'] != Item::PRIVATE) { if (!strstr($b['postopts'], 'pumpio')) { return $receiver; } @@ -1353,8 +1355,8 @@ function pumpio_getreceiver(array $b) $gid = trim($gid, ' <>'); $contacts = DBA::p("SELECT `contact`.`name`, `contact`.`nick`, `contact`.`url`, `contact`.`network` - FROM `group_member`, `contact` WHERE `group_member`.`gid` = ? - AND `contact`.`id` = `group_member`.`contact-id` AND `contact`.`network` = ?", + FROM `group_member` AS `circle_member`, `contact` WHERE `circle_member`.`gid` = ? + AND `contact`.`id` = `circle_member`.`contact-id` AND `contact`.`network` = ?", $gid, Protocol::PUMPIO); while ($row = DBA::fetch($contacts)) { @@ -1403,7 +1405,7 @@ function pumpio_fetchallcomments($uid, $id) $hostname = DI::pConfig()->get($uid, 'pumpio', 'host'); $username = DI::pConfig()->get($uid, 'pumpio', 'user'); - Logger::notice('pumpio_fetchallcomments: completing comment for user ' . $uid . ' post id ' . $id); + DI::logger()->notice('pumpio_fetchallcomments: completing comment for user ' . $uid . ' post id ' . $id); $own_id = 'https://' . $hostname . '/' . $username; @@ -1428,7 +1430,9 @@ function pumpio_fetchallcomments($uid, $id) $client->access_token = $otoken; $client->access_token_secret = $osecret; - Logger::notice('pumpio_fetchallcomments: fetching comment for user ' . $uid . ', URL ' . $url); + DI::logger()->notice('pumpio_fetchallcomments: fetching comment for user ' . $uid . ', URL ' . $url); + + $item = new \stdClass(); if (pumpio_reachable($url)) { $success = $client->CallAPI($url, 'GET', [], ['FailOnAccessError' => true], $item); @@ -1491,7 +1495,7 @@ function pumpio_fetchallcomments($uid, $id) $post->object = $item; - Logger::notice('pumpio_fetchallcomments: posting comment ' . $post->object->id . ' ', json_decode(json_encode($post), true)); + DI::logger()->notice('pumpio_fetchallcomments: posting comment ' . $post->object->id . ' ', json_decode(json_encode($post), true)); pumpio_dopost($client, $uid, $self, $post, $own_id, false); } } diff --git a/pumpio/pumpio_sync.php b/pumpio/pumpio_sync.php index beaf6e81..09548c6d 100644 --- a/pumpio/pumpio_sync.php +++ b/pumpio/pumpio_sync.php @@ -1,5 +1,5 @@ DI::config()->get('system', 'maxloadavg', 50)) { - Logger::notice('system: load ' . $load[0] . ' too high. Pumpio sync deferred to next scheduled run.'); + DI::logger()->notice('system: load ' . $load[0] . ' too high. Pumpio sync deferred to next scheduled run.'); return; } } diff --git a/qcomment/lang/cs/messages.po b/qcomment/lang/cs/messages.po index d2a204e3..deb0b4ec 100644 --- a/qcomment/lang/cs/messages.po +++ b/qcomment/lang/cs/messages.po @@ -10,46 +10,38 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-06-13 18:00+0000\n" -"Last-Translator: Aditoo\n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:30+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: qcomment.php:51 +#: qcomment.php:45 msgid ":-)" msgstr ":-)" -#: qcomment.php:51 +#: qcomment.php:45 msgid ":-(" msgstr ":-(" -#: qcomment.php:51 +#: qcomment.php:45 msgid "lol" msgstr "lol" -#: qcomment.php:54 -msgid "Quick Comment Settings" -msgstr "Nastavení rychlých komentářů" - -#: qcomment.php:56 +#: qcomment.php:49 msgid "" "Quick comments are found near comment boxes, sometimes hidden. Click them to" " provide simple replies." -msgstr "Rychlé komentáře jsou k nalezení blízko polí s komentáři, někdy jsou skryté. Klikněte na ně k poskytnutí jednoduchých odpovědí." +msgstr "Rychlé komentáře jsou k nalezení blízko polí s komentáři, někdy jsou skryté. Klikněte na ně pro poskytnutí jednoduchých odpovědí." -#: qcomment.php:57 +#: qcomment.php:50 msgid "Enter quick comments, one per line" msgstr "Zadejte rychlé komentáře, každý na nový řádek" -#: qcomment.php:61 -msgid "Submit" -msgstr "Odeslat" - -#: qcomment.php:75 -msgid "Quick Comment settings saved." -msgstr "Nastavení Quick Comment uloženo." +#: qcomment.php:55 +msgid "Quick Comment Settings" +msgstr "Nastavení rychlých komentářů" diff --git a/qcomment/lang/cs/strings.php b/qcomment/lang/cs/strings.php index 3d70952f..08df5fb4 100644 --- a/qcomment/lang/cs/strings.php +++ b/qcomment/lang/cs/strings.php @@ -8,8 +8,6 @@ function string_plural_select_cs($n){ $a->strings[':-)'] = ':-)'; $a->strings[':-('] = ':-('; $a->strings['lol'] = 'lol'; -$a->strings['Quick Comment Settings'] = 'Nastavení rychlých komentářů'; -$a->strings['Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.'] = 'Rychlé komentáře jsou k nalezení blízko polí s komentáři, někdy jsou skryté. Klikněte na ně k poskytnutí jednoduchých odpovědí.'; +$a->strings['Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.'] = 'Rychlé komentáře jsou k nalezení blízko polí s komentáři, někdy jsou skryté. Klikněte na ně pro poskytnutí jednoduchých odpovědí.'; $a->strings['Enter quick comments, one per line'] = 'Zadejte rychlé komentáře, každý na nový řádek'; -$a->strings['Submit'] = 'Odeslat'; -$a->strings['Quick Comment settings saved.'] = 'Nastavení Quick Comment uloženo.'; +$a->strings['Quick Comment Settings'] = 'Nastavení rychlých komentářů'; diff --git a/qcomment/lang/de/messages.po b/qcomment/lang/de/messages.po index 323ef82d..bab1515f 100644 --- a/qcomment/lang/de/messages.po +++ b/qcomment/lang/de/messages.po @@ -12,9 +12,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:16-0500\n" -"PO-Revision-Date: 2021-12-22 16:24+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 12:30+0000\n" +"Last-Translator: Steffen K9, 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/qcomment/lang/it/messages.po b/qcomment/lang/it/messages.po index 5772fcd2..2347a0dd 100644 --- a/qcomment/lang/it/messages.po +++ b/qcomment/lang/it/messages.po @@ -5,50 +5,43 @@ # # Translators: # fabrixxm , 2014-2015 +# Sylke Vicious , 2021 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2017-09-20 06:08+0000\n" -"Last-Translator: fabrixxm \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:30+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: qcomment.php:51 +#: qcomment.php:45 msgid ":-)" msgstr ":-)" -#: qcomment.php:51 +#: qcomment.php:45 msgid ":-(" msgstr ":-(" -#: qcomment.php:51 +#: qcomment.php:45 msgid "lol" msgstr "lol" -#: qcomment.php:54 -msgid "Quick Comment Settings" -msgstr "Impostazioni commento rapido" - -#: qcomment.php:56 +#: qcomment.php:49 msgid "" "Quick comments are found near comment boxes, sometimes hidden. Click them to" " provide simple replies." msgstr "Trovi i commenti rapidi vicino al box dei commenti, a volte nascosti. Cliccali per inviare semplici risposte." -#: qcomment.php:57 +#: qcomment.php:50 msgid "Enter quick comments, one per line" msgstr "Inserire un commento rapido, uno per linea" -#: qcomment.php:61 -msgid "Submit" -msgstr "Invia" - -#: qcomment.php:75 -msgid "Quick Comment settings saved." -msgstr "Impostazioni commento rapido salvate." +#: qcomment.php:55 +msgid "Quick Comment Settings" +msgstr "Impostazioni commento rapido" diff --git a/qcomment/lang/it/strings.php b/qcomment/lang/it/strings.php index 59edbe06..26f8229a 100644 --- a/qcomment/lang/it/strings.php +++ b/qcomment/lang/it/strings.php @@ -3,13 +3,11 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings[':-)'] = ':-)'; $a->strings[':-('] = ':-('; $a->strings['lol'] = 'lol'; -$a->strings['Quick Comment Settings'] = 'Impostazioni commento rapido'; $a->strings['Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.'] = 'Trovi i commenti rapidi vicino al box dei commenti, a volte nascosti. Cliccali per inviare semplici risposte.'; $a->strings['Enter quick comments, one per line'] = 'Inserire un commento rapido, uno per linea'; -$a->strings['Submit'] = 'Invia'; -$a->strings['Quick Comment settings saved.'] = 'Impostazioni commento rapido salvate.'; +$a->strings['Quick Comment Settings'] = 'Impostazioni commento rapido'; diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index 1b8bfcbf..f7126531 100644 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -18,7 +18,6 @@ * */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; diff --git a/randplace/lang/de/messages.po b/randplace/lang/de/messages.po index f2d1fb54..abbaefd8 100644 --- a/randplace/lang/de/messages.po +++ b/randplace/lang/de/messages.po @@ -12,9 +12,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:16-0500\n" -"PO-Revision-Date: 2021-12-22 17:21+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 12:34+0000\n" +"Last-Translator: Steffen K9, 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/randplace/lang/it/messages.po b/randplace/lang/it/messages.po index 708a60ac..673d0f6f 100644 --- a/randplace/lang/it/messages.po +++ b/randplace/lang/it/messages.po @@ -10,24 +10,20 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 12:57+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:34+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: randplace.php:161 +msgid "Enable Randplace Addon" +msgstr "Abilita il componente aggiuntivo Posizione Casuale" #: randplace.php:166 msgid "Randplace Settings" msgstr "Impostazioni \"Posizione casuale\"" - -#: randplace.php:168 -msgid "Enable Randplace Addon" -msgstr "Abilita il componente aggiuntivo Posizione Casuale" - -#: randplace.php:174 -msgid "Save Settings" -msgstr "Salva Impostazioni" diff --git a/randplace/lang/it/strings.php b/randplace/lang/it/strings.php index 7b4a9947..5d71eba3 100644 --- a/randplace/lang/it/strings.php +++ b/randplace/lang/it/strings.php @@ -3,8 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Randplace Settings'] = 'Impostazioni "Posizione casuale"'; $a->strings['Enable Randplace Addon'] = 'Abilita il componente aggiuntivo Posizione Casuale'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Randplace Settings'] = 'Impostazioni "Posizione casuale"'; diff --git a/randplace/randplace.php b/randplace/randplace.php index 34f48c6c..89a75f98 100644 --- a/randplace/randplace.php +++ b/randplace/randplace.php @@ -19,9 +19,7 @@ * */ -use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; @@ -41,7 +39,7 @@ function randplace_install() Hook::register('addon_settings', 'addon/randplace/randplace.php', 'randplace_settings'); Hook::register('addon_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); - Logger::notice("installed randplace"); + DI::logger()->notice("installed randplace"); } function randplace_uninstall() @@ -51,7 +49,7 @@ function randplace_uninstall() * * Except hooks, they are all unregistered automatically and don't need to be unregistered manually. */ - Logger::notice("removed randplace"); + DI::logger()->notice("removed randplace"); } function randplace_post_hook(&$item) @@ -62,7 +60,7 @@ function randplace_post_hook(&$item) * - A status post by a profile owner * - The profile owner must have allowed our addon */ - Logger::notice('randplace invoked'); + DI::logger()->notice('randplace invoked'); if (!DI::userSession()->getLocalUserId()) { /* non-zero if this is a logged in user of this system */ diff --git a/ratioed/RatioedPanel.php b/ratioed/RatioedPanel.php new file mode 100644 index 00000000..4cf5d7ff --- /dev/null +++ b/ratioed/RatioedPanel.php @@ -0,0 +1,323 @@ +getArgv()[1]) and DI::args()->getArgv()[1] === 'help') { + $template = Renderer::getMarkupTemplate('/help.tpl', 'addon/ratioed/'); + return Renderer::replaceMacros($template, array('$config' => DI::baseUrl() . '/settings/addon')); + } + + $uid = $this->parameters['uid'] ?? 0; + $user = []; + + if ($uid) { + $user = User::getById($uid, ['username', 'blocked']); + if (!$user) { + $this->systemMessages->addNotice($this->t('User not found')); + $this->baseUrl->redirect('ratioed'); + } + } + + $pager = new Pager($this->l10n, $this->args->getQueryString(), 100); + + $valid_orders = [ + 'name', + 'email', + 'register_date', + 'last-activity', + 'last-item', + 'page-flags', + ]; + + $order = 'last-item'; + $order_direction = '+'; + if (!empty($_REQUEST['o'])) { + $new_order = $_REQUEST['o']; + if ($new_order[0] === '-') { + $order_direction = '-'; + $new_order = substr($new_order, 1); + } + + if (in_array($new_order, $valid_orders)) { + $order = $new_order; + } + } + + $users = User::getList($pager->getStart(), $pager->getItemsPerPage(), 'active', $order, ($order_direction == '-')); + + $users = array_map($this->setupUserCallback(), $users); + + $header_titles = [ + $this->t('Name'), + $this->t('Email'), + $this->t('Register date'), + $this->t('Last login'), + $this->t('Last public item'), + $this->t('Type'), + $this->t('Blocked by'), + $this->t('Comments last 24h'), + $this->t('Reactions last 24h'), + $this->t('Ratio last 24h'), + $this->t('Replies last month'), + $this->t('Reply likes'), + $this->t('Respondee likes'), + $this->t('OP likes'), + $this->t('Reply guy score'), + ]; + $field_names = [ + 'name', + 'email', + 'register_date', + 'login_date', + 'lastitem_date', + 'page_flags', + 'blocked_by', + 'comments', + 'reactions', + 'ratio', + 'reply_count', + 'reply_likes', + 'reply_respondee_likes', + 'reply_op_likes', + 'reply_guy_score', + ]; + $th_users = array_map(null, $header_titles, $valid_orders, $field_names); + + $count = $this->database->count('user', ["`verified` AND NOT `blocked` AND NOT `account_removed` AND NOT `account_expired` AND `uid` != ?", 0]); + + $t = Renderer::getMarkupTemplate('ratioed.tpl', 'addon/ratioed'); + return self::getTabsHTML('ratioed') . Renderer::replaceMacros($t, [ + // strings // + '$title' => $this->t('Moderation'), + '$help_url' => $this->baseUrl . '/ratioed/help', + '$page' => $this->t('Behaviour'), + '$select_all' => $this->t('select all'), + '$delete' => $this->t('Delete'), + '$block' => $this->t('Block'), + '$blocked' => $this->t('User blocked'), + '$siteadmin' => $this->t('Site admin'), + '$accountexpired' => $this->t('Account expired'), + '$h_newuser' => $this->t('Create a new user'), + + '$th_users' => $th_users, + '$order_users' => $order, + '$order_direction_users' => $order_direction, + + '$confirm_delete_multi' => $this->t('Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?'), + '$confirm_delete' => $this->t('The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?'), + + '$form_security_token' => self::getFormSecurityToken('moderation_users_active'), + + // values // + '$baseurl' => $this->baseUrl, + '$query_string' => $this->args->getQueryString(), + + '$users' => $users, + '$count' => $count, + '$pager' => $pager->renderFull($count), + ]); + } + + protected function getReplyGuyRow($contact_uid) + { + $like_vid = Verb::getID(Activity::LIKE); + $post_vid = Verb::getID(Activity::POST); + + /* + * This is a complicated query. + * + * The innermost select retrieves a chain of four posts: an + * original post, a target comment (possibly deep down in the + * thread), a reply from our user, and a like for that reply. + * If there's no like, we still want to count the reply, so we + * use an outer join. + * + * The second select adds "points" for different kinds of + * likes. The outermost select then counts up these points, + * and the number of distinct replies. + */ + $reply_guy_result = DBA::p(' +SELECT + COUNT(distinct reply_id) AS replies_total, + SUM(like_point) AS like_total, + SUM(target_like_point) AS target_like_total, + SUM(original_like_point) AS original_like_total +FROM ( + SELECT + reply_id, + like_date, + like_date IS NOT NULL AS like_point, + like_author = target_author AS target_like_point, + like_author = original_author AS original_like_point + FROM ( + SELECT + original_post.`uri-id` AS original_id, + original_post.`author-id` AS original_author, + original_post.created AS original_date, + target_post.`uri-id` AS target_id, + target_post.`author-id` AS target_author, + target_post.created AS target_date, + reply_post.`uri-id` AS reply_id, + reply_post.`author-id` AS reply_author, + reply_post.created AS reply_date, + like_post.`uri-id` AS like_id, + like_post.`author-id` AS like_author, + like_post.created AS like_date + FROM + post AS original_post + JOIN + post AS target_post + ON + original_post.`uri-id` = target_post.`parent-uri-id` + JOIN + post AS reply_post + ON + target_post.`uri-id` = reply_post.`thr-parent-id` AND + reply_post.`author-id` = ? AND + reply_post.`author-id` != target_post.`author-id` AND + reply_post.`author-id` != original_post.`author-id` AND + reply_post.`uri-id` != reply_post.`thr-parent-id` AND + reply_post.vid = ? AND + reply_post.created > CURDATE() - INTERVAL 1 MONTH + LEFT OUTER JOIN + post AS like_post + ON + reply_post.`uri-id` = like_post.`thr-parent-id` AND + like_post.vid = ? AND + like_post.`author-id` != reply_post.`author-id` + ) AS post_meta +) AS reply_counts +', $contact_uid, $post_vid, $like_vid); + return $reply_guy_result; + } + + // https://stackoverflow.com/a/48283297/235936 + protected function sigFig($value, $digits) + { + if ($value == 0) { + $decimalPlaces = $digits - 1; + } elseif ($value < 0) { + $decimalPlaces = $digits - floor(log10($value * -1)) - 1; + } else { + $decimalPlaces = $digits - floor(log10($value)) - 1; + } + + $answer = ($decimalPlaces > 0) ? + number_format($value, $decimalPlaces) : round($value, $decimalPlaces); + return $answer; + } + + protected function fillReplyGuyData(&$user) + { + $reply_guy_result = $this->getReplyGuyRow($user['user_contact_uid']); + if (DBA::isResult($reply_guy_result)) { + $reply_guy_result_row = DBA::fetch($reply_guy_result); + $user['reply_count'] = (int) $reply_guy_result_row['replies_total'] ?? 0; + $user['reply_likes'] = (int) $reply_guy_result_row['like_total'] ?? 0; + $user['reply_respondee_likes'] = (int) $reply_guy_result_row['target_like_total'] ?? 0; + $user['reply_op_likes'] = (int) $reply_guy_result_row['original_like_total'] ?? 0; + + $denominator = $user['reply_likes'] + $user['reply_respondee_likes'] + $user['reply_op_likes']; + if ($user['reply_count'] === 0) { + $user['reply_guy'] = false; + $user['reply_guy_score'] = 0; + } elseif ($denominator == 0) { + $user['reply_guy'] = true; + $user['reply_guy_score'] = '∞'; + } else { + $reply_guy_score = $user['reply_count'] / $denominator; + $user['reply_guy'] = $reply_guy_score >= 1.0; + $user['reply_guy_score'] = $this->sigFig($reply_guy_score, 2); + } + } else { + $user['reply_count'] = "error"; + $user['reply_likes'] = "error"; + $user['reply_respondee_likes'] = "error"; + $user['reply_op_likes'] = "error"; + $user['reply_guy'] = false; + $user['reply_guy_score'] = 0; + } + } + + protected function setupUserCallback(): \Closure + { + DI::logger()->debug("ratioed: setupUserCallback"); + $parentCallback = parent::setupUserCallback(); + return function ($user) use ($parentCallback) { + $blocked_count = DBA::count('user-contact', ['uid' => $user['uid'], 'is-blocked' => 1]); + $user['blocked_by'] = $blocked_count; + + $self_contact_result = DBA::p('SELECT admin_contact.id AS user_contact_uid FROM contact AS admin_contact JOIN contact AS user_contact ON admin_contact.`uri-id` = user_contact.`uri-id` AND admin_contact.self = 0 AND user_contact.self = 1 WHERE user_contact.uid = ?', $user['uid']); + if (DBA::isResult($self_contact_result)) { + $self_contact_result_row = DBA::fetch($self_contact_result); + $user['user_contact_uid'] = $self_contact_result_row['user_contact_uid']; + } else { + $user['user_contact_uid'] = null; + } + + if ($user['user_contact_uid']) { + $post_engagement_result = DBA::p('SELECT SUM(`comments`) AS `comment_count`, SUM(`activities`) AS `activities_count` FROM `post-engagement` WHERE `post-engagement`.created > DATE_SUB(now(), INTERVAL 1 DAY) AND `post-engagement`.`owner-id` = ?', $user['user_contact_uid']); + if (DBA::isResult($post_engagement_result)) { + $post_engagement_result_row = DBA::fetch($post_engagement_result); + $user['comments'] = $post_engagement_result_row['comment_count']; + $user['reactions'] = $post_engagement_result_row['activities_count']; + if ($user['reactions'] > 0) { + $user['ratio'] = number_format($user['comments'] / $user['reactions'], 1, '.', ''); + $user['ratioed'] = (float)($user['ratio']) >= 2.0; + } else { + $user['reactions'] = 0; + if ($user['comments'] == 0) { + $user['comments'] = 0; + $user['ratio'] = 0; + $user['ratioed'] = false; + } else { + $user['ratio'] = '∞'; + $user['ratioed'] = false; + } + } + } else { + $user['comments'] = 'error'; + $user['reactions'] = 'error'; + $user['ratio'] = 'error'; + $user['ratioed'] = false; + } + } else { + $user['comments'] = 'error'; + $user['reactions'] = 'error'; + $user['ratio'] = 'error'; + $user['ratioed'] = false; + } + + $this->fillReplyGuyData($user); + + $user = $parentCallback($user); + DI::logger()->debug("ratioed: setupUserCallback", [ + 'uid' => $user['uid'], + 'blocked_by' => $user['blocked_by'], + 'comments' => $user['comments'], + 'reactions' => $user['reactions'], + 'ratio' => $user['ratio'], + 'ratioed' => $user['ratioed'], + ]); + return $user; + }; + } +} diff --git a/ratioed/ratioed.php b/ratioed/ratioed.php new file mode 100644 index 00000000..5cc6d539 --- /dev/null +++ b/ratioed/ratioed.php @@ -0,0 +1,57 @@ + + */ + +use Friendica\Addon\ratioed\RatioedPanel; +use Friendica\Core\Hook; +use Friendica\DI; + +/** + * Sets up the addon hooks and updates data in the database if needed + */ +function ratioed_install() +{ + Hook::register('moderation_users_tabs', 'addon/ratioed/ratioed.php', 'ratioed_users_tabs'); + + DI::logger()->info("ratioed: installed"); +} + +/** + * This is a statement rather than an actual function definition. The simple + * existence of this method is checked to figure out if the addon offers a + * module. + */ +function ratioed_module() {} + +/** + * @brief Adds additional users tab to the moderation panel + * + * @param array $arr Parameters, including "tabs" which is the list to modify, and "selectedTab", which is the currently selected tab ID + */ +function ratioed_users_tabs(array &$arr) { + DI::logger()->debug("ratioed: users tabs"); + + array_push($arr['tabs'], [ + 'label' => DI::l10n()->t('Behaviour'), + 'url' => 'ratioed', + 'sel' => $arr['selectedTab'] == 'ratioed' ? 'active' : '', + 'title' => DI::l10n()->t('Statistics about users behaviour'), + 'id' => 'admin-users-ratioed', + 'accesskey' => 'r', + ]); +} + +/** + * @brief Displays the ratioed tab in the moderation panel + */ +function ratioed_content() { + DI::logger()->debug("ratioed: content"); + + $ratioed = DI::getDice()->create(RatioedPanel::class, [$_SERVER]); + $httpException = DI::getDice()->create(Friendica\Module\Special\HTTPException::class); + $ratioed->run($httpException); +} diff --git a/ratioed/templates/help.tpl b/ratioed/templates/help.tpl new file mode 100644 index 00000000..0d012ca7 --- /dev/null +++ b/ratioed/templates/help.tpl @@ -0,0 +1,145 @@ +
+
+

Ratioed Plugin Help

+

+ This plugin provides moderators with additional statistics about + the behaviour of users. These may be useful as early warning signs + that warrant more carefully watching the behaviour of a user. They + are not suitable as a trigger for instantly blocking, + muting, or reporting a user, since they lack context. +

+

+ The name of the plugin comes + from "The + Ratio", a well-known quick rule of thumb: +

+
+ If the Replies:RT ratio is greater than 2:1, you done messed up. +
+

+ To "get ratioed" is to receive a large number of comments in a short + space of time, with relatively few likes or boosts. If commenters + were enthusiastic about the posts, they would also have liked or + boosted them. Receiving many comments without such likes or boosts + indicates the comments were probably angry. This anger may or may + not be justified, but either way this is probably something + moderators should be aware of. +

+

+ This plugin allows viewing of an actual ratio, calculated over the + last 24 hours. This is a useful timeframe for sudden dogpiling + events that moderators might not otherwise notice. The plugin + also calculates other statistics. +

+

Explanation of Statistics

+

Blocked by

+

+ This summarises the number of users on remote servers that have + blocked this user. +

+

+ Note that the ActivityPub spec expressly says that + implementations "SHOULD NOT" forward such block messages to + remote servers. Nevertheless some implementations do this + anyway, notably Mastodon. This statistic can only count block + messages from servers that do this, as well as blocks from local + users. As such, it is usually an undercount. +

+

+ The reason the spec recommends against forwarding these messages + is that they can lead to retaliation. For this reason, this + plugin deliberately does not provide any way to investigate + exactly who blocked the user. +

+

Comments last 24h

+

+ This gives the number of comments made on the top-level posts that + this user made within the last 24 hours. +

+

Reactions last 24h

+

+ This collects the number of likes, boosts, or other "one-click" + interactions made on the user's top-level posts within the last 24 + hours. +

+

Ratio last 24h

+

+ This is the ratio between "Comments last 24h" and "Reactions last + 24h". It is intended to approximate the traditional ratio as + understood on Twitter. +

+

Replies last month

+

+ This is the number of times the user posted a reply to someone + else, on a thread the user did not start, any time in the last + month. +

+

Reply likes

+

+ This is the number of likes received by the user on their + replies to other people's posts in the last month. Replies that + receive likes can be assumed to be more of a valuable + contribution than replies that do not. +

+

Respondee likes

+

+ The number of times in the last month the user replied to + someone else's comment and that person then liked the reply. + Likes to replies are not necessarily a positive thing, but if + the person you're replying to approves the reply, that's a very + good sign. Of course it's also common in a debate for neither + side to like the other side's comments without that indicating + an unhealthy interaction, so interpret this statistic cautiously. +

+

OP likes

+

+ The number of times in the last month the user replied on a + thread and the original poster that started the thread liked the + reply. While there is no formal concept of "ownership" of a + thread, conventionally the original poster is assumed to have + started the thread for a reason, and making replies that do not + fulfil that purpose are bad etiquette. Getting approval from + the original poster therefore is a good sign that the user is + posting replies that are wanted. +

+

Reply guy score

+

+ A "reply + guy" is a common Internet phenomenon of people + (disproportionately male) posting unwanted comments on other + (disproportionately female) people's threads, derailing the + conversation. This score loosely quantifies this phenomenon, + as the ratio betwen the number of replies and the sum of likes, + respondee likes, and OP likes. This formula gives extra weight + to particularly relevant likes: a reply to a top-level post that + is liked by the original poster scores the maximum of 3 + "points". A score above 1.0 might indicate cause for concern + for moderators. +

+

+ Since this is indicative of long-term behaviour, the score is + calculated over a month instead of 24 hours. +

+

+

Performance

+

+ The statistics are computed from scratch each time the page loads. + It's possible that this might put a heavy load on the database, and + the page may take a long time to load. +

+

Extending

+

+ Suggestions for additional statistics are welcome, especially from + moderators. This plugin should be considered a sandbox for + experimentation, so it is not necessary to prove that any statistic + is correlated with unwanted behaviour. +

+

+ However, this plugin does deal with potentially sensitive + information. Even if moderators do in principle have access to all + information, it should not necessarily be highlighted. Statistics + should be kept anonymous and neutral. Also, they should be + presented only to moderators, not to the users themselves. +

+
+
diff --git a/ratioed/templates/ratioed.tpl b/ratioed/templates/ratioed.tpl new file mode 100644 index 00000000..2413ed9d --- /dev/null +++ b/ratioed/templates/ratioed.tpl @@ -0,0 +1,131 @@ + + + +
+

+ {{$title}} - {{$page}} ({{$count}}) + +

+
+ + + + + + + {{foreach $th_users as $k=>$th}} + {{if $k < 2 || $order_users == $th.1 || ($k==4 && !in_array($order_users,[$th_users.2.1, $th_users.3.1, $th_users.5.1])) }} + + {{/if}} + {{/foreach}} + + + + + {{foreach $users as $u}} + + + + + + {{if $order_users == $th_users.2.1}} + + {{/if}} + + {{if $order_users == $th_users.3.1}} + + {{/if}} + + {{if $order_users == $th_users.5.1}} + + {{/if}} + + {{if !in_array($order_users,[$th_users.2.1, $th_users.3.1, $th_users.5.1]) }} + + {{/if}} + + + + + + + + + {{/foreach}} + +
+ + {{if $order_users == $th.1}} + {{if $order_direction_users == "+"}} + ↓ + {{else}} + ↑ + {{/if}} + {{else}} + ↕ + {{/if}} + {{$th.0}} + +
{{$u.name}}{{$u.email}}{{$u.register_date}}{{$u.login_date}} + + + {{if $u.page_flags_raw==0 && $u.account_type_raw > 0}} + + {{/if}} + {{if $u.is_admin}}{{/if}} + {{if $u.account_expired}}{{/if}} + {{$u.lastitem_date}} + +
+ {{$pager nofilter}} +
+
diff --git a/rendertime/lang/cs/messages.po b/rendertime/lang/cs/messages.po index 1a2404d7..e9fc0c9b 100644 --- a/rendertime/lang/cs/messages.po +++ b/rendertime/lang/cs/messages.po @@ -4,24 +4,52 @@ # # # Translators: -# Michal Šupler , 2014 +# Aditoo, 2018 +# michal_s , 2014 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-22 13:18+0200\n" -"PO-Revision-Date: 2014-07-28 18:10+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-12-12 22:09+0000\n" +"PO-Revision-Date: 2014-06-23 12:36+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" #: rendertime.php:30 +msgid "Save Settings" +msgstr "" + +#: rendertime.php:31 +msgid "Show callstack" +msgstr "" + +#: rendertime.php:31 +msgid "" +"Show detailed performance measures in the callstack. When deactivated, only " +"the summary will be displayed." +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time" +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time that an activity needs to be listed in the callstack." +msgstr "" + +#: rendertime.php:57 #, php-format msgid "" -"Performance: Database: %s, Network: %s, Rendering: %s, Parser: %s, I/O: %s, " -"Other: %s, Total: %s" -msgstr "Výkonnost: Databáze: %s, Síť: %s, Rendering: %s, Parser: %s, I/O: %s, Ostatní: %s, Celkem: %s" +"Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: " +"%s, Total: %s" +msgstr "" + +#: rendertime.php:74 +#, php-format +msgid "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s" +msgstr "" diff --git a/rendertime/lang/cs/strings.php b/rendertime/lang/cs/strings.php index 1fc547fa..ce2e465e 100644 --- a/rendertime/lang/cs/strings.php +++ b/rendertime/lang/cs/strings.php @@ -3,6 +3,5 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} -$a->strings['Performance: Database: %s, Network: %s, Rendering: %s, Parser: %s, I/O: %s, Other: %s, Total: %s'] = 'Výkonnost: Databáze: %s, Síť: %s, Rendering: %s, Parser: %s, I/O: %s, Ostatní: %s, Celkem: %s'; diff --git a/rendertime/lang/de/messages.po b/rendertime/lang/de/messages.po index f615f1b3..293ed698 100644 --- a/rendertime/lang/de/messages.po +++ b/rendertime/lang/de/messages.po @@ -11,9 +11,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-12 22:09+0000\n" -"PO-Revision-Date: 2022-01-22 17:39+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 12:36+0000\n" +"Last-Translator: Tobias Diekershoff , 2021-2022\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/rendertime/lang/it/messages.po b/rendertime/lang/it/messages.po index abbc63e6..482abb02 100644 --- a/rendertime/lang/it/messages.po +++ b/rendertime/lang/it/messages.po @@ -10,24 +10,46 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 13:01+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-12-12 22:09+0000\n" +"PO-Revision-Date: 2014-06-23 12:36+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: rendertime.php:36 +#: rendertime.php:30 +msgid "Save Settings" +msgstr "" + +#: rendertime.php:31 +msgid "Show callstack" +msgstr "" + +#: rendertime.php:31 +msgid "" +"Show detailed performance measures in the callstack. When deactivated, only " +"the summary will be displayed." +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time" +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time that an activity needs to be listed in the callstack." +msgstr "" + +#: rendertime.php:57 #, php-format msgid "" "Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: " "%s, Total: %s" msgstr "Database: %s/%s, Rete: %s, Rendering: %s, Sessione: %s, I/O: %s, Altro: %s, Totale: %s" -#: rendertime.php:53 +#: rendertime.php:74 #, php-format msgid "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s" msgstr "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Altro: %s, Totale: %s" diff --git a/rendertime/lang/it/strings.php b/rendertime/lang/it/strings.php index 6eaf200c..5b05d933 100644 --- a/rendertime/lang/it/strings.php +++ b/rendertime/lang/it/strings.php @@ -3,7 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s'] = 'Database: %s/%s, Rete: %s, Rendering: %s, Sessione: %s, I/O: %s, Altro: %s, Totale: %s'; $a->strings['Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s'] = 'Class-Init: %s, Boot: %s, Init: %s, Content: %s, Altro: %s, Totale: %s'; diff --git a/rendertime/rendertime.php b/rendertime/rendertime.php index 731cf003..4523d911 100644 --- a/rendertime/rendertime.php +++ b/rendertime/rendertime.php @@ -7,7 +7,6 @@ * */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; @@ -60,7 +59,7 @@ function rendertime_page_end(string &$o) if (DI::userSession()->isSiteAdmin() && (($_GET['mode'] ?? '') != 'minimal') && !DI::mode()->isMobile() && !DI::mode()->isMobile() && !$ignored) { - $o = $o . '
' . DI::l10n()->t("Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s", + $o = $o . '
' . $icon . '
'; //Add css to header - $css_file = __DIR__ . '/view/' . DI::app()->getCurrentTheme() . '.css'; + $css_file = __DIR__ . '/view/' . DI::appHelper()->getCurrentTheme() . '.css'; if (!file_exists($css_file)) { $css_file = __DIR__ . '/view/default.css'; } @@ -105,12 +104,12 @@ function smileybutton_jot_tool(string &$body) DI::page()->registerStylesheet($css_file); //Get the correct image for the theme - $image = 'addon/smileybutton/view/' . DI::app()->getCurrentTheme() . '.png'; + $image = 'addon/smileybutton/view/' . DI::appHelper()->getCurrentTheme() . '.png'; if (!file_exists($image)) { $image = 'addon/smileybutton/view/default.png'; } - $image_url = DI::baseUrl()->get() . '/' . $image; + $image_url = DI::baseUrl() . '/' . $image; //Add the hmtl and script to the page $body = <<< EOT diff --git a/smilies_adult/smilies_adult.php b/smilies_adult/smilies_adult.php index a7e0c383..4a80168d 100644 --- a/smilies_adult/smilies_adult.php +++ b/smilies_adult/smilies_adult.php @@ -4,12 +4,11 @@ * Description: Smily icons that could or should not be included in core * Version: 1.0 * Author: Mike Macgirvin - * + * * This is a template for how to extend the "smily" code. - * + * */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; @@ -20,20 +19,20 @@ function smilies_adult_install() { function smilies_adult_smilies(array &$b) { $b['texts'][] = '(o)(o)'; - $b['icons'][] = '' . '(o)(o)' . ''; + $b['icons'][] = '' . '(o)(o)' . ''; $b['texts'][] = '(.)(.)'; - $b['icons'][] = '' . '(.)(.)' . ''; + $b['icons'][] = '' . '(.)(.)' . ''; $b['texts'][] = ':bong'; - $b['icons'][] = '' . ':bong' . ''; + $b['icons'][] = '' . ':bong' . ''; $b['texts'][] = ':sperm'; - $b['icons'][] = '' . ':sperm' . ''; + $b['icons'][] = '' . ':sperm' . ''; $b['texts'][] = ':drunk'; - $b['icons'][] = '' . ':drunk' . ''; + $b['icons'][] = '' . ':drunk' . ''; $b['texts'][] = ':finger'; - $b['icons'][] = '' . ':finger' . ''; + $b['icons'][] = '' . ':finger' . ''; } diff --git a/startpage/lang/de/messages.po b/startpage/lang/de/messages.po index 62adb1cc..f8b4ddbc 100644 --- a/startpage/lang/de/messages.po +++ b/startpage/lang/de/messages.po @@ -11,9 +11,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:16-0500\n" -"PO-Revision-Date: 2022-01-22 17:40+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 12:51+0000\n" +"Last-Translator: Tobias Diekershoff , 2021-2022\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/startpage/lang/it/messages.po b/startpage/lang/it/messages.po index a4305d27..efabb8f0 100644 --- a/startpage/lang/it/messages.po +++ b/startpage/lang/it/messages.po @@ -5,33 +5,29 @@ # # Translators: # fabrixxm , 2014-2015 -# Sylke Vicious , 2021 +# Sylke Vicious , 2021,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-16 12:47+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:51+0000\n" +"Last-Translator: Sylke Vicious , 2021,2023\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: startpage.php:74 startpage.php:78 -msgid "Startpage" -msgstr "Pagina iniziale" - -#: startpage.php:81 +#: startpage.php:70 msgid "Home page to load after login - leave blank for profile wall" msgstr "Home page da caricare dopo il login - lasciare in bianco per la bacheca" -#: startpage.php:84 -msgid "Examples: "network" or "notifications/system"" -msgstr "Esempi: "network" or "notifications/system"" +#: startpage.php:70 +msgid "Examples: \"network\" or \"notifications/system\"" +msgstr "Esempi: \"rete\" o \"notifiche/sistema\"" -#: startpage.php:88 -msgid "Save Settings" -msgstr "Salva Impostazioni" +#: startpage.php:75 +msgid "Startpage" +msgstr "Pagina iniziale" diff --git a/startpage/lang/it/strings.php b/startpage/lang/it/strings.php index b253a774..111a2abb 100644 --- a/startpage/lang/it/strings.php +++ b/startpage/lang/it/strings.php @@ -3,9 +3,8 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Startpage'] = 'Pagina iniziale'; $a->strings['Home page to load after login - leave blank for profile wall'] = 'Home page da caricare dopo il login - lasciare in bianco per la bacheca'; -$a->strings['Examples: "network" or "notifications/system"'] = 'Esempi: "network" or "notifications/system"'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Examples: "network" or "notifications/system"'] = 'Esempi: "rete" o "notifiche/sistema"'; +$a->strings['Startpage'] = 'Pagina iniziale'; diff --git a/startpage/startpage.php b/startpage/startpage.php index e4d80c0c..558af473 100644 --- a/startpage/startpage.php +++ b/startpage/startpage.php @@ -7,7 +7,6 @@ * */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; diff --git a/statusnet/lang/ar/messages.po b/statusnet/lang/ar/messages.po index 96722c86..89352f37 100644 --- a/statusnet/lang/ar/messages.po +++ b/statusnet/lang/ar/messages.po @@ -10,40 +10,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" "PO-Revision-Date: 2014-06-23 12:54+0000\n" "Last-Translator: ButterflyOfFire, 2022\n" -"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" +"Language-Team: Arabic (http://app.transifex.com/Friendica/friendica/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: statusnet.php:97 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "" -#: statusnet.php:148 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "" -#: statusnet.php:176 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "" -#: statusnet.php:243 statusnet.php:656 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "حفظ الإعدادات" -#: statusnet.php:255 +#: statusnet.php:220 #, php-format msgid "Currently connected to: %s" msgstr "" -#: statusnet.php:260 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -51,30 +51,30 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "" -#: statusnet.php:263 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "" -#: statusnet.php:275 +#: statusnet.php:240 msgid "Cancel GNU Social Connection" msgstr "" -#: statusnet.php:283 +#: statusnet.php:247 msgid "Globally Available GNU Social OAuthKeys" msgstr "" -#: statusnet.php:284 +#: statusnet.php:248 msgid "" "There are preconfigured OAuth key pairs for some GNU Social servers " "available. If you are using one of them, please use these credentials. If " "not feel free to connect to any other GNU Social instance (see below)." msgstr "" -#: statusnet.php:285 +#: statusnet.php:249 msgid "Provide your own OAuth Credentials" msgstr "" -#: statusnet.php:286 +#: statusnet.php:250 msgid "" "No consumer key pair for GNU Social found. Register your Friendica Account " "as a desktop application on your GNU Social account, copy the consumer key " @@ -83,7 +83,7 @@ msgid "" " Friendica installation at your favorite GNU Social installation." msgstr "" -#: statusnet.php:287 +#: statusnet.php:251 msgid "" "To connect to your GNU Social account click the button below to get a " "security code from GNU Social which you have to copy into the input box " @@ -91,86 +91,62 @@ msgid "" "posted to GNU Social." msgstr "" -#: statusnet.php:288 +#: statusnet.php:252 msgid "Log in with GNU Social" msgstr "" -#: statusnet.php:289 +#: statusnet.php:253 msgid "Cancel Connection Process" msgstr "" -#: statusnet.php:290 +#: statusnet.php:254 #, php-format msgid "Current GNU Social API is: %s" msgstr "" -#: statusnet.php:307 +#: statusnet.php:271 msgid "OAuth Consumer Key" msgstr "" -#: statusnet.php:308 +#: statusnet.php:272 msgid "OAuth Consumer Secret" msgstr "" -#: statusnet.php:310 statusnet.php:636 statusnet.php:648 +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 msgid "Base API Path (remember the trailing /)" msgstr "" -#: statusnet.php:311 +#: statusnet.php:275 msgid "Copy the security code from GNU Social here" msgstr "" -#: statusnet.php:313 +#: statusnet.php:277 msgid "Allow posting to GNU Social" msgstr "" -#: statusnet.php:313 +#: statusnet.php:277 msgid "" "If enabled all your public postings can be posted to the " "associated GNU Social account. You can choose to do so by default (here) or " "for every posting separately in the posting options when writing the entry." msgstr "" -#: statusnet.php:314 +#: statusnet.php:278 msgid "Post to GNU Social by default" msgstr "" -#: statusnet.php:315 -msgid "Mirror all public posts" -msgstr "" - -#: statusnet.php:316 -msgid "Automatically create contacts" -msgstr "" - -#: statusnet.php:317 -msgid "Import the remote timeline" -msgstr "" - -#: statusnet.php:318 -msgid "Disabled" -msgstr "معطل" - -#: statusnet.php:319 -msgid "Full Timeline" -msgstr "" - -#: statusnet.php:320 -msgid "Only Mentions" -msgstr "" - -#: statusnet.php:326 +#: statusnet.php:283 msgid "GNU Social Import/Export/Mirror" msgstr "" -#: statusnet.php:647 +#: statusnet.php:480 msgid "Site name" msgstr "اسم الموقع" -#: statusnet.php:649 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "" -#: statusnet.php:650 +#: statusnet.php:483 msgid "Consumer Key" msgstr "" diff --git a/statusnet/lang/ar/strings.php b/statusnet/lang/ar/strings.php index 1cd72f3c..8fa1ef3e 100644 --- a/statusnet/lang/ar/strings.php +++ b/statusnet/lang/ar/strings.php @@ -6,5 +6,4 @@ function string_plural_select_ar($n){ if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; } }} $a->strings['Save Settings'] = 'حفظ الإعدادات'; -$a->strings['Disabled'] = 'معطل'; $a->strings['Site name'] = 'اسم الموقع'; diff --git a/statusnet/lang/cs/messages.po b/statusnet/lang/cs/messages.po index 851164df..6ed2d9b2 100644 --- a/statusnet/lang/cs/messages.po +++ b/statusnet/lang/cs/messages.po @@ -11,119 +11,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-27 07:21+0200\n" -"PO-Revision-Date: 2018-06-14 14:47+0000\n" -"Last-Translator: Aditoo\n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: statusnet.php:151 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "Poslat na GNU social" -#: statusnet.php:196 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "Obraťte se na administratora webu.
Poskytnutý odkaz na API není platný." -#: statusnet.php:225 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "Nemohli jsme kontaktovat API GNU social pomocí cesty, kterou jste zadal/a." -#: statusnet.php:259 -msgid "GNU Social settings updated." -msgstr "Nastavení pro GNU social aktualizována." - -#: statusnet.php:294 statusnet.php:298 -msgid "GNU Social Import/Export/Mirror" -msgstr "Import/export/zrcadlení GNU social" - -#: statusnet.php:313 -msgid "Globally Available GNU Social OAuthKeys" -msgstr "Globálně dostupné OAuth klíče pro GNU" - -#: statusnet.php:314 -msgid "" -"There are preconfigured OAuth key pairs for some GNU Social servers " -"available. If you are using one of them, please use these credentials. If " -"not feel free to connect to any other GNU Social instance (see below)." -msgstr "Jsou dostupné předkonfigurované páry klíčů OAuth pro některé servery GNU social. Pokud některý z nich používáte, prosím používejte tyto kredenciály. Pokud ne, můžete se klidně připojit k jakékoliv jiné instanci GNU social (viz dole)." - -#: statusnet.php:320 statusnet.php:337 statusnet.php:364 statusnet.php:371 -#: statusnet.php:416 statusnet.php:699 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Uložit nastavení" -#: statusnet.php:322 -msgid "Provide your own OAuth Credentials" -msgstr "Uveďte své vlastní OAuth přihlašovací údaje" +#: statusnet.php:220 +#, php-format +msgid "Currently connected to: %s" +msgstr "" -#: statusnet.php:323 -msgid "" -"No consumer key pair for GNU Social found. Register your Friendica Account " -"as an desktop client on your GNU Social account, copy the consumer key pair " -"here and enter the API base root.
Before you register your own OAuth " -"key pair ask the administrator if there is already a key pair for this " -"Friendica installation at your favorited GNU Social installation." -msgstr "Nenalezen žádný pár klíčů pro GNU social. Registrujte svůj účet Friendica na Vašem účtu GNU social jako desktopový klient, zkopírujte sem pár klíčů consumer key a zadejte kořenovou složku API.
Dříve, než si zaregistrujete Váš vlastní pár klíčů, se zeptejte administrátora, jestli již na Vaší oblíbené instalaci GNU social existuje pár klíčů pro tuto instalaci Friendica." - -#: statusnet.php:325 -msgid "OAuth Consumer Key" -msgstr "OAuth Consumer Key" - -#: statusnet.php:328 -msgid "OAuth Consumer Secret" -msgstr "OAuth Consumer Secret" - -#: statusnet.php:331 statusnet.php:679 statusnet.php:691 -msgid "Base API Path (remember the trailing /)" -msgstr "Cesta k Base API (nezapomeňte na koncové /)" - -#: statusnet.php:356 -msgid "" -"To connect to your GNU Social account click the button below to get a " -"security code from GNU Social which you have to copy into the input box " -"below and submit the form. Only your public posts will be " -"posted to GNU Social." -msgstr "Pro připojení k Vašemu účtu na GNU social klikněte na tlačítko níže. Obdržíte bezpečnostní kód od GNU social, ten musíte zkopírovat do vyplňovacího pole níže a odeslat formulář. Pouze Vaše veřejné příspěvky budou odesílány na GNU social." - -#: statusnet.php:357 -msgid "Log in with GNU Social" -msgstr "Přihlásit se pomocí GNU social" - -#: statusnet.php:359 -msgid "Copy the security code from GNU Social here" -msgstr "Zde překopírujte váš bezpečnostní kód z GNU social" - -#: statusnet.php:365 -msgid "Cancel Connection Process" -msgstr "Zrušit připojování" - -#: statusnet.php:367 -msgid "Current GNU Social API is" -msgstr "Aktuální API GNU social je:" - -#: statusnet.php:368 -msgid "Cancel GNU Social Connection" -msgstr "Zrušit spojení s GNU social" - -#: statusnet.php:379 -msgid "Currently connected to: " -msgstr "Aktuálně jste připojen/a k:" - -#: statusnet.php:380 -msgid "" -"If enabled all your public postings can be posted to the " -"associated GNU Social account. You can choose to do so by default (here) or " -"for every posting separately in the posting options when writing the entry." -msgstr "Je-li povoleno, všechny Vaše veřejné příspěvky mohou být zasílány na související účet na GNU social. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku." - -#: statusnet.php:382 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -131,47 +52,102 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "Poznámka: Kvůli vašim nastavením o soukromí (Skrýt Vaše profilové detaily před neznámými návštěvníky?), odkaz potenciálně obsažen ve veřejných příspěvcích přeposílaných na GNU social zavedou návštěvníky na prázdnou stránku informující návštěvníky, že přístup na Váš profil byl zakázán." -#: statusnet.php:385 -msgid "Allow posting to GNU Social" -msgstr "Povolit posílání příspěvků na GNU social" - -#: statusnet.php:388 -msgid "Send public postings to GNU Social by default" -msgstr "Ve výchozím stavu posílat veřejné příspěvky na GNU social" - -#: statusnet.php:392 -msgid "" -"Mirror all posts from GNU Social that are no replies or repeated messages" -msgstr "Zrcadlit všechny příspěvky z GNU social, které nejsou odpovědi nebo zopakované zprávy" - -#: statusnet.php:398 -msgid "Import the remote timeline" -msgstr "Importovat vzdálenou časovou osu" - -#: statusnet.php:402 -msgid "Disabled" -msgstr "Zakázáno" - -#: statusnet.php:403 -msgid "Full Timeline" -msgstr "Plná časová osa" - -#: statusnet.php:404 -msgid "Only Mentions" -msgstr "Pouze zmínky" - -#: statusnet.php:413 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "Vymazat konfiguraci OAuth" -#: statusnet.php:690 +#: statusnet.php:240 +msgid "Cancel GNU Social Connection" +msgstr "Zrušit spojení s GNU social" + +#: statusnet.php:247 +msgid "Globally Available GNU Social OAuthKeys" +msgstr "Globálně dostupné OAuth klíče pro GNU" + +#: statusnet.php:248 +msgid "" +"There are preconfigured OAuth key pairs for some GNU Social servers " +"available. If you are using one of them, please use these credentials. If " +"not feel free to connect to any other GNU Social instance (see below)." +msgstr "Jsou dostupné předkonfigurované páry klíčů OAuth pro některé servery GNU social. Pokud některý z nich používáte, prosím používejte tyto kredenciály. Pokud ne, můžete se klidně připojit k jakékoliv jiné instanci GNU social (viz dole)." + +#: statusnet.php:249 +msgid "Provide your own OAuth Credentials" +msgstr "Uveďte své vlastní OAuth přihlašovací údaje" + +#: statusnet.php:250 +msgid "" +"No consumer key pair for GNU Social found. Register your Friendica Account " +"as a desktop application on your GNU Social account, copy the consumer key " +"pair here and enter the API base root.
Before you register your own " +"OAuth key pair ask the administrator if there is already a key pair for this" +" Friendica installation at your favorite GNU Social installation." +msgstr "" + +#: statusnet.php:251 +msgid "" +"To connect to your GNU Social account click the button below to get a " +"security code from GNU Social which you have to copy into the input box " +"below and submit the form. Only your public posts will be " +"posted to GNU Social." +msgstr "Pro připojení k Vašemu účtu na GNU social klikněte na tlačítko níže. Obdržíte bezpečnostní kód od GNU social, ten musíte zkopírovat do vyplňovacího pole níže a odeslat formulář. Pouze Vaše veřejné příspěvky budou odesílány na GNU social." + +#: statusnet.php:252 +msgid "Log in with GNU Social" +msgstr "Přihlásit se pomocí GNU social" + +#: statusnet.php:253 +msgid "Cancel Connection Process" +msgstr "Zrušit připojování" + +#: statusnet.php:254 +#, php-format +msgid "Current GNU Social API is: %s" +msgstr "" + +#: statusnet.php:271 +msgid "OAuth Consumer Key" +msgstr "OAuth Consumer Key" + +#: statusnet.php:272 +msgid "OAuth Consumer Secret" +msgstr "OAuth Consumer Secret" + +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 +msgid "Base API Path (remember the trailing /)" +msgstr "Cesta k Base API (nezapomeňte na koncové /)" + +#: statusnet.php:275 +msgid "Copy the security code from GNU Social here" +msgstr "Zde překopírujte váš bezpečnostní kód z GNU social" + +#: statusnet.php:277 +msgid "Allow posting to GNU Social" +msgstr "Povolit posílání příspěvků na GNU social" + +#: statusnet.php:277 +msgid "" +"If enabled all your public postings can be posted to the " +"associated GNU Social account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." +msgstr "Je-li povoleno, všechny Vaše veřejné příspěvky mohou být zasílány na související účet na GNU social. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku." + +#: statusnet.php:278 +msgid "Post to GNU Social by default" +msgstr "" + +#: statusnet.php:283 +msgid "GNU Social Import/Export/Mirror" +msgstr "Import/export/zrcadlení GNU social" + +#: statusnet.php:480 msgid "Site name" msgstr "Název webu" -#: statusnet.php:692 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "Consumer Secret" -#: statusnet.php:693 +#: statusnet.php:483 msgid "Consumer Key" msgstr "Consumer Key" diff --git a/statusnet/lang/cs/strings.php b/statusnet/lang/cs/strings.php index ce6ea1e4..991901c3 100644 --- a/statusnet/lang/cs/strings.php +++ b/statusnet/lang/cs/strings.php @@ -8,33 +8,23 @@ function string_plural_select_cs($n){ $a->strings['Post to GNU Social'] = 'Poslat na GNU social'; $a->strings['Please contact your site administrator.
The provided API URL is not valid.'] = 'Obraťte se na administratora webu.
Poskytnutý odkaz na API není platný.'; $a->strings['We could not contact the GNU Social API with the Path you entered.'] = 'Nemohli jsme kontaktovat API GNU social pomocí cesty, kterou jste zadal/a.'; -$a->strings['GNU Social settings updated.'] = 'Nastavení pro GNU social aktualizována.'; -$a->strings['GNU Social Import/Export/Mirror'] = 'Import/export/zrcadlení GNU social'; +$a->strings['Save Settings'] = 'Uložit nastavení'; +$a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Poznámka: Kvůli vašim nastavením o soukromí (Skrýt Vaše profilové detaily před neznámými návštěvníky?), odkaz potenciálně obsažen ve veřejných příspěvcích přeposílaných na GNU social zavedou návštěvníky na prázdnou stránku informující návštěvníky, že přístup na Váš profil byl zakázán.'; +$a->strings['Clear OAuth configuration'] = 'Vymazat konfiguraci OAuth'; +$a->strings['Cancel GNU Social Connection'] = 'Zrušit spojení s GNU social'; $a->strings['Globally Available GNU Social OAuthKeys'] = 'Globálně dostupné OAuth klíče pro GNU'; $a->strings['There are preconfigured OAuth key pairs for some GNU Social servers available. If you are using one of them, please use these credentials. If not feel free to connect to any other GNU Social instance (see below).'] = 'Jsou dostupné předkonfigurované páry klíčů OAuth pro některé servery GNU social. Pokud některý z nich používáte, prosím používejte tyto kredenciály. Pokud ne, můžete se klidně připojit k jakékoliv jiné instanci GNU social (viz dole).'; -$a->strings['Save Settings'] = 'Uložit nastavení'; $a->strings['Provide your own OAuth Credentials'] = 'Uveďte své vlastní OAuth přihlašovací údaje'; -$a->strings['No consumer key pair for GNU Social found. Register your Friendica Account as an desktop client on your GNU Social account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendica installation at your favorited GNU Social installation.'] = 'Nenalezen žádný pár klíčů pro GNU social. Registrujte svůj účet Friendica na Vašem účtu GNU social jako desktopový klient, zkopírujte sem pár klíčů consumer key a zadejte kořenovou složku API.
Dříve, než si zaregistrujete Váš vlastní pár klíčů, se zeptejte administrátora, jestli již na Vaší oblíbené instalaci GNU social existuje pár klíčů pro tuto instalaci Friendica.'; +$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Pro připojení k Vašemu účtu na GNU social klikněte na tlačítko níže. Obdržíte bezpečnostní kód od GNU social, ten musíte zkopírovat do vyplňovacího pole níže a odeslat formulář. Pouze Vaše veřejné příspěvky budou odesílány na GNU social.'; +$a->strings['Log in with GNU Social'] = 'Přihlásit se pomocí GNU social'; +$a->strings['Cancel Connection Process'] = 'Zrušit připojování'; $a->strings['OAuth Consumer Key'] = 'OAuth Consumer Key'; $a->strings['OAuth Consumer Secret'] = 'OAuth Consumer Secret'; $a->strings['Base API Path (remember the trailing /)'] = 'Cesta k Base API (nezapomeňte na koncové /)'; -$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Pro připojení k Vašemu účtu na GNU social klikněte na tlačítko níže. Obdržíte bezpečnostní kód od GNU social, ten musíte zkopírovat do vyplňovacího pole níže a odeslat formulář. Pouze Vaše veřejné příspěvky budou odesílány na GNU social.'; -$a->strings['Log in with GNU Social'] = 'Přihlásit se pomocí GNU social'; $a->strings['Copy the security code from GNU Social here'] = 'Zde překopírujte váš bezpečnostní kód z GNU social'; -$a->strings['Cancel Connection Process'] = 'Zrušit připojování'; -$a->strings['Current GNU Social API is'] = 'Aktuální API GNU social je:'; -$a->strings['Cancel GNU Social Connection'] = 'Zrušit spojení s GNU social'; -$a->strings['Currently connected to: '] = 'Aktuálně jste připojen/a k:'; -$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Je-li povoleno, všechny Vaše veřejné příspěvky mohou být zasílány na související účet na GNU social. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku.'; -$a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Poznámka: Kvůli vašim nastavením o soukromí (Skrýt Vaše profilové detaily před neznámými návštěvníky?), odkaz potenciálně obsažen ve veřejných příspěvcích přeposílaných na GNU social zavedou návštěvníky na prázdnou stránku informující návštěvníky, že přístup na Váš profil byl zakázán.'; $a->strings['Allow posting to GNU Social'] = 'Povolit posílání příspěvků na GNU social'; -$a->strings['Send public postings to GNU Social by default'] = 'Ve výchozím stavu posílat veřejné příspěvky na GNU social'; -$a->strings['Mirror all posts from GNU Social that are no replies or repeated messages'] = 'Zrcadlit všechny příspěvky z GNU social, které nejsou odpovědi nebo zopakované zprávy'; -$a->strings['Import the remote timeline'] = 'Importovat vzdálenou časovou osu'; -$a->strings['Disabled'] = 'Zakázáno'; -$a->strings['Full Timeline'] = 'Plná časová osa'; -$a->strings['Only Mentions'] = 'Pouze zmínky'; -$a->strings['Clear OAuth configuration'] = 'Vymazat konfiguraci OAuth'; +$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Je-li povoleno, všechny Vaše veřejné příspěvky mohou být zasílány na související účet na GNU social. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku.'; +$a->strings['GNU Social Import/Export/Mirror'] = 'Import/export/zrcadlení GNU social'; $a->strings['Site name'] = 'Název webu'; $a->strings['Consumer Secret'] = 'Consumer Secret'; $a->strings['Consumer Key'] = 'Consumer Key'; diff --git a/statusnet/lang/de/messages.po b/statusnet/lang/de/messages.po index fa9cba59..2b92005f 100644 --- a/statusnet/lang/de/messages.po +++ b/statusnet/lang/de/messages.po @@ -13,40 +13,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2022-01-22 17:42+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: Tobias Diekershoff , 2016,2022\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: statusnet.php:97 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "Auf GNU Social veröffentlichen" -#: statusnet.php:148 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "Bitte kontaktiere den Administrator der Seite.
Die gegebene API URL ist nicht gültig." -#: statusnet.php:176 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "Die GNU Social-API konnte mit dem angegebenen Pfad nicht erreicht werden." -#: statusnet.php:243 statusnet.php:656 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Einstellungen speichern" -#: statusnet.php:255 +#: statusnet.php:220 #, php-format msgid "Currently connected to: %s" msgstr "Derzeit verbunden mit: %s" -#: statusnet.php:260 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -54,30 +54,30 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) wird der Link, der eventuell an deinen GNU Social-Beitrag angehängt wird, um auf den Originalbeitrag zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde." -#: statusnet.php:263 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "OAuth-Konfiguration löschen" -#: statusnet.php:275 +#: statusnet.php:240 msgid "Cancel GNU Social Connection" msgstr "Verbindung zum GNU Social-Server abbrechen" -#: statusnet.php:283 +#: statusnet.php:247 msgid "Globally Available GNU Social OAuthKeys" msgstr "Verfügbare OAuth-Schlüssel für GNU Social" -#: statusnet.php:284 +#: statusnet.php:248 msgid "" "There are preconfigured OAuth key pairs for some GNU Social servers " "available. If you are using one of them, please use these credentials. If " "not feel free to connect to any other GNU Social instance (see below)." msgstr "Für einige GNU Social-Server sind voreingestellte OAuth-Schlüsselpaare verfügbar. Solltest du einen dieser Server benutzen, dann verwende bitte diese Schlüssel. Falls nicht, stelle stattdessen eine Verbindung zu irgendeinem anderen StatusNet-Server her (siehe unten)." -#: statusnet.php:285 +#: statusnet.php:249 msgid "Provide your own OAuth Credentials" msgstr "Eigene OAuth-Schlüssel eintragen" -#: statusnet.php:286 +#: statusnet.php:250 msgid "" "No consumer key pair for GNU Social found. Register your Friendica Account " "as a desktop application on your GNU Social account, copy the consumer key " @@ -86,7 +86,7 @@ msgid "" " Friendica installation at your favorite GNU Social installation." msgstr "Kein Consumer-Schlüsselpaar für GNU Social gefunden. Registriere deinen Friendica-Account als Desktop-Client bei deinem GNU Social-Account, kopiere das Consumer-Schlüsselpaar hierher und gib die API-URL ein.
Bevor du dein eigenes Consumer-Schlüsselpaar registrierst, frage den Administrator dieses Friendica-Servers, ob schon ein Schlüsselpaar für diesen Friendica-Server auf diesem GNU Social-Server existiert." -#: statusnet.php:287 +#: statusnet.php:251 msgid "" "To connect to your GNU Social account click the button below to get a " "security code from GNU Social which you have to copy into the input box " @@ -94,86 +94,62 @@ msgid "" "posted to GNU Social." msgstr "Um dein Konto mit einem GNU Social-Konto zu verknüpfen, klicke den Button an, um einen Sicherheitscode von GNU Social zu erhalten, und kopiere diesen in das Eingabefeld weiter unten. Es werden ausschließlich deine öffentlichen Nachrichten an GNU Social gesendet." -#: statusnet.php:288 +#: statusnet.php:252 msgid "Log in with GNU Social" msgstr "Bei GNU Social anmelden" -#: statusnet.php:289 +#: statusnet.php:253 msgid "Cancel Connection Process" msgstr "Verbindungsprozess abbrechen" -#: statusnet.php:290 +#: statusnet.php:254 #, php-format msgid "Current GNU Social API is: %s" msgstr "Derzeitige GNU Social-API-URL lautet %s" -#: statusnet.php:307 +#: statusnet.php:271 msgid "OAuth Consumer Key" msgstr "OAuth Consumer Key" -#: statusnet.php:308 +#: statusnet.php:272 msgid "OAuth Consumer Secret" msgstr "OAuth Consumer Secret" -#: statusnet.php:310 statusnet.php:636 statusnet.php:648 +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 msgid "Base API Path (remember the trailing /)" msgstr "Basis-URL der StatusNet-API (vergiss den abschließenden / nicht)" -#: statusnet.php:311 +#: statusnet.php:275 msgid "Copy the security code from GNU Social here" msgstr "Kopiere den Sicherheitscode von GNU social hier hin" -#: statusnet.php:313 +#: statusnet.php:277 msgid "Allow posting to GNU Social" msgstr "Veröffentlichung bei GNU Social erlauben" -#: statusnet.php:313 +#: statusnet.php:277 msgid "" "If enabled all your public postings can be posted to the " "associated GNU Social account. You can choose to do so by default (here) or " "for every posting separately in the posting options when writing the entry." msgstr "Wenn aktiviert, können all deine öffentlichen Einträge auf dem verbundenen GNU Social-Konto veröffentlicht werden. Du kannst das (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen." -#: statusnet.php:314 +#: statusnet.php:278 msgid "Post to GNU Social by default" msgstr "Standardmäßig bei GNU Social veröffentlichen" -#: statusnet.php:315 -msgid "Mirror all public posts" -msgstr "Spiegle alle öffentlichen Nachrichten" - -#: statusnet.php:316 -msgid "Automatically create contacts" -msgstr "Automatisch Kontakte anlegen" - -#: statusnet.php:317 -msgid "Import the remote timeline" -msgstr "Importiere die entfernte Zeitleiste" - -#: statusnet.php:318 -msgid "Disabled" -msgstr "Deaktiviert" - -#: statusnet.php:319 -msgid "Full Timeline" -msgstr "Komplette Timeline" - -#: statusnet.php:320 -msgid "Only Mentions" -msgstr "Nur Erwähnungen" - -#: statusnet.php:326 +#: statusnet.php:283 msgid "GNU Social Import/Export/Mirror" msgstr "GNU Social-Import/Export/Spiegeln" -#: statusnet.php:647 +#: statusnet.php:480 msgid "Site name" msgstr "Seitenname" -#: statusnet.php:649 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "Consumer Secret" -#: statusnet.php:650 +#: statusnet.php:483 msgid "Consumer Key" msgstr "Consumer Key" diff --git a/statusnet/lang/de/strings.php b/statusnet/lang/de/strings.php index b381c408..a35e425c 100644 --- a/statusnet/lang/de/strings.php +++ b/statusnet/lang/de/strings.php @@ -28,12 +28,6 @@ $a->strings['Copy the security code from GNU Social here'] = 'Kopiere den Sicher $a->strings['Allow posting to GNU Social'] = 'Veröffentlichung bei GNU Social erlauben'; $a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Wenn aktiviert, können all deine öffentlichen Einträge auf dem verbundenen GNU Social-Konto veröffentlicht werden. Du kannst das (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen.'; $a->strings['Post to GNU Social by default'] = 'Standardmäßig bei GNU Social veröffentlichen'; -$a->strings['Mirror all public posts'] = 'Spiegle alle öffentlichen Nachrichten'; -$a->strings['Automatically create contacts'] = 'Automatisch Kontakte anlegen'; -$a->strings['Import the remote timeline'] = 'Importiere die entfernte Zeitleiste'; -$a->strings['Disabled'] = 'Deaktiviert'; -$a->strings['Full Timeline'] = 'Komplette Timeline'; -$a->strings['Only Mentions'] = 'Nur Erwähnungen'; $a->strings['GNU Social Import/Export/Mirror'] = 'GNU Social-Import/Export/Spiegeln'; $a->strings['Site name'] = 'Seitenname'; $a->strings['Consumer Secret'] = 'Consumer Secret'; diff --git a/statusnet/lang/es/messages.po b/statusnet/lang/es/messages.po index bf9cdcc6..8ab9a31b 100644 --- a/statusnet/lang/es/messages.po +++ b/statusnet/lang/es/messages.po @@ -9,119 +9,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-27 07:21+0200\n" -"PO-Revision-Date: 2016-11-17 23:07+0000\n" -"Last-Translator: Albert\n" -"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: Albert, 2016\n" +"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: statusnet.php:151 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "Publicar en GNU Social" -#: statusnet.php:196 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "Por favor contacte con el administrador de su página.
La URL de API provista no es válida." -#: statusnet.php:225 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "No pudimos contactar con la API de GNU Social con el Camino que introdujo." -#: statusnet.php:259 -msgid "GNU Social settings updated." -msgstr "Ajustes de GNU Social actualizados." - -#: statusnet.php:294 statusnet.php:298 -msgid "GNU Social Import/Export/Mirror" -msgstr "Importar/Exportar/Reflejar GNU Social" - -#: statusnet.php:313 -msgid "Globally Available GNU Social OAuthKeys" -msgstr "Disponible globalmente GNU Social OAuthKeys" - -#: statusnet.php:314 -msgid "" -"There are preconfigured OAuth key pairs for some GNU Social servers " -"available. If you are using one of them, please use these credentials. If " -"not feel free to connect to any other GNU Social instance (see below)." -msgstr "Hay pares de clave preconfigurados OAuth para algunos servidores disponibles de GNU Social. Si está utilizando uno de ellos, por favor utilice estas credenciales. Si no se siente libre de conectar a alguna otra instancia de GNU Social (vea abajo)." - -#: statusnet.php:320 statusnet.php:337 statusnet.php:364 statusnet.php:371 -#: statusnet.php:416 statusnet.php:699 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Guardar Ajustes" -#: statusnet.php:322 -msgid "Provide your own OAuth Credentials" -msgstr "Proveer sus propias credenciales de OAuth" +#: statusnet.php:220 +#, php-format +msgid "Currently connected to: %s" +msgstr "" -#: statusnet.php:323 -msgid "" -"No consumer key pair for GNU Social found. Register your Friendica Account " -"as an desktop client on your GNU Social account, copy the consumer key pair " -"here and enter the API base root.
Before you register your own OAuth " -"key pair ask the administrator if there is already a key pair for this " -"Friendica installation at your favorited GNU Social installation." -msgstr "No se encontró el par de claves de consumidor para GNU Social. Registre su cuenta de Friendica como un cliente de escritorio en su cuenta de GNU, copie el par de claves aquí e introduzca el origen de la API.
Antes de qeu registre su propio par de claves de OAuth pregunte al administrador si ya hay un par de claves para esta instalación de Friendica en su instalación de GNU Social favorita." - -#: statusnet.php:325 -msgid "OAuth Consumer Key" -msgstr "Clave de Consumidor de OAuth" - -#: statusnet.php:328 -msgid "OAuth Consumer Secret" -msgstr "Secreto de Consumidor de OAuth" - -#: statusnet.php:331 statusnet.php:679 statusnet.php:691 -msgid "Base API Path (remember the trailing /)" -msgstr "Camino Base de API (Recordar la cola /)" - -#: statusnet.php:356 -msgid "" -"To connect to your GNU Social account click the button below to get a " -"security code from GNU Social which you have to copy into the input box " -"below and submit the form. Only your public posts will be " -"posted to GNU Social." -msgstr "Para conectarse a su cuenta GNU Social click en el botón de abajo para obtener un código de seguridad de GNU Social que puede copiar en la caja de abajo y enviar el formulario. Sólo sus entradas públicas se publicarán en GNU Social." - -#: statusnet.php:357 -msgid "Log in with GNU Social" -msgstr "Acceder a GNU Social" - -#: statusnet.php:359 -msgid "Copy the security code from GNU Social here" -msgstr "Copiar el código de seguridad de GNU Social aquí" - -#: statusnet.php:365 -msgid "Cancel Connection Process" -msgstr "Cancelar el Proceso de Conexión" - -#: statusnet.php:367 -msgid "Current GNU Social API is" -msgstr "API de GNU Social actual" - -#: statusnet.php:368 -msgid "Cancel GNU Social Connection" -msgstr "Cancelar la conexión a GNU Social" - -#: statusnet.php:379 -msgid "Currently connected to: " -msgstr "Actualmente conectado a:" - -#: statusnet.php:380 -msgid "" -"If enabled all your public postings can be posted to the " -"associated GNU Social account. You can choose to do so by default (here) or " -"for every posting separately in the posting options when writing the entry." -msgstr "Si está habilitado, todas sus publicaciones públicas pueden publicarse en la cuenta asociada de GNU Social. Puede elegir hacer eso por defecto (aquí) o por cada publicación por separado en las opciones de publicación mientras escribe la entrada." - -#: statusnet.php:382 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -129,47 +50,102 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "Nota: Debido a sus ajustes de privacidad (?Ocultar los detalles de su perfil a espectadores desconocidos?) el enlace potencialmente incluído en publicaciones públicas transmitidas a GNU Social llevarán al visitante a una página en blanco informándole de que el acceso a su perfil ha sido restringido." -#: statusnet.php:385 -msgid "Allow posting to GNU Social" -msgstr "Permitir publicar en GNU Social" - -#: statusnet.php:388 -msgid "Send public postings to GNU Social by default" -msgstr "Enviar las publicaciones públicas a GNU Social por defecto" - -#: statusnet.php:392 -msgid "" -"Mirror all posts from GNU Social that are no replies or repeated messages" -msgstr "Reflejar todas las entradas de GNU Social que no son respuestas o mensajes repetidos" - -#: statusnet.php:398 -msgid "Import the remote timeline" -msgstr "Importar la línea de tiempo remota" - -#: statusnet.php:402 -msgid "Disabled" -msgstr "Deshabilitado" - -#: statusnet.php:403 -msgid "Full Timeline" -msgstr "Línea de Tiempo completa" - -#: statusnet.php:404 -msgid "Only Mentions" -msgstr "Sólo Menciones" - -#: statusnet.php:413 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "Limpiar la configuración de OAuth" -#: statusnet.php:690 +#: statusnet.php:240 +msgid "Cancel GNU Social Connection" +msgstr "Cancelar la conexión a GNU Social" + +#: statusnet.php:247 +msgid "Globally Available GNU Social OAuthKeys" +msgstr "Disponible globalmente GNU Social OAuthKeys" + +#: statusnet.php:248 +msgid "" +"There are preconfigured OAuth key pairs for some GNU Social servers " +"available. If you are using one of them, please use these credentials. If " +"not feel free to connect to any other GNU Social instance (see below)." +msgstr "Hay pares de clave preconfigurados OAuth para algunos servidores disponibles de GNU Social. Si está utilizando uno de ellos, por favor utilice estas credenciales. Si no se siente libre de conectar a alguna otra instancia de GNU Social (vea abajo)." + +#: statusnet.php:249 +msgid "Provide your own OAuth Credentials" +msgstr "Proveer sus propias credenciales de OAuth" + +#: statusnet.php:250 +msgid "" +"No consumer key pair for GNU Social found. Register your Friendica Account " +"as a desktop application on your GNU Social account, copy the consumer key " +"pair here and enter the API base root.
Before you register your own " +"OAuth key pair ask the administrator if there is already a key pair for this" +" Friendica installation at your favorite GNU Social installation." +msgstr "" + +#: statusnet.php:251 +msgid "" +"To connect to your GNU Social account click the button below to get a " +"security code from GNU Social which you have to copy into the input box " +"below and submit the form. Only your public posts will be " +"posted to GNU Social." +msgstr "Para conectarse a su cuenta GNU Social click en el botón de abajo para obtener un código de seguridad de GNU Social que puede copiar en la caja de abajo y enviar el formulario. Sólo sus entradas públicas se publicarán en GNU Social." + +#: statusnet.php:252 +msgid "Log in with GNU Social" +msgstr "Acceder a GNU Social" + +#: statusnet.php:253 +msgid "Cancel Connection Process" +msgstr "Cancelar el Proceso de Conexión" + +#: statusnet.php:254 +#, php-format +msgid "Current GNU Social API is: %s" +msgstr "" + +#: statusnet.php:271 +msgid "OAuth Consumer Key" +msgstr "Clave de Consumidor de OAuth" + +#: statusnet.php:272 +msgid "OAuth Consumer Secret" +msgstr "Secreto de Consumidor de OAuth" + +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 +msgid "Base API Path (remember the trailing /)" +msgstr "Camino Base de API (Recordar la cola /)" + +#: statusnet.php:275 +msgid "Copy the security code from GNU Social here" +msgstr "Copiar el código de seguridad de GNU Social aquí" + +#: statusnet.php:277 +msgid "Allow posting to GNU Social" +msgstr "Permitir publicar en GNU Social" + +#: statusnet.php:277 +msgid "" +"If enabled all your public postings can be posted to the " +"associated GNU Social account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." +msgstr "Si está habilitado, todas sus publicaciones públicas pueden publicarse en la cuenta asociada de GNU Social. Puede elegir hacer eso por defecto (aquí) o por cada publicación por separado en las opciones de publicación mientras escribe la entrada." + +#: statusnet.php:278 +msgid "Post to GNU Social by default" +msgstr "" + +#: statusnet.php:283 +msgid "GNU Social Import/Export/Mirror" +msgstr "Importar/Exportar/Reflejar GNU Social" + +#: statusnet.php:480 msgid "Site name" msgstr "Nombre de la página" -#: statusnet.php:692 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "Secreto de Consumidor" -#: statusnet.php:693 +#: statusnet.php:483 msgid "Consumer Key" msgstr "Clave de Consumidor" diff --git a/statusnet/lang/es/strings.php b/statusnet/lang/es/strings.php index 7aa44911..50df793a 100644 --- a/statusnet/lang/es/strings.php +++ b/statusnet/lang/es/strings.php @@ -3,38 +3,28 @@ if(! function_exists("string_plural_select_es")) { function string_plural_select_es($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Post to GNU Social'] = 'Publicar en GNU Social'; $a->strings['Please contact your site administrator.
The provided API URL is not valid.'] = 'Por favor contacte con el administrador de su página.
La URL de API provista no es válida.'; $a->strings['We could not contact the GNU Social API with the Path you entered.'] = 'No pudimos contactar con la API de GNU Social con el Camino que introdujo.'; -$a->strings['GNU Social settings updated.'] = 'Ajustes de GNU Social actualizados.'; -$a->strings['GNU Social Import/Export/Mirror'] = 'Importar/Exportar/Reflejar GNU Social'; +$a->strings['Save Settings'] = 'Guardar Ajustes'; +$a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Nota: Debido a sus ajustes de privacidad (?Ocultar los detalles de su perfil a espectadores desconocidos?) el enlace potencialmente incluído en publicaciones públicas transmitidas a GNU Social llevarán al visitante a una página en blanco informándole de que el acceso a su perfil ha sido restringido.'; +$a->strings['Clear OAuth configuration'] = 'Limpiar la configuración de OAuth'; +$a->strings['Cancel GNU Social Connection'] = 'Cancelar la conexión a GNU Social'; $a->strings['Globally Available GNU Social OAuthKeys'] = 'Disponible globalmente GNU Social OAuthKeys'; $a->strings['There are preconfigured OAuth key pairs for some GNU Social servers available. If you are using one of them, please use these credentials. If not feel free to connect to any other GNU Social instance (see below).'] = 'Hay pares de clave preconfigurados OAuth para algunos servidores disponibles de GNU Social. Si está utilizando uno de ellos, por favor utilice estas credenciales. Si no se siente libre de conectar a alguna otra instancia de GNU Social (vea abajo).'; -$a->strings['Save Settings'] = 'Guardar Ajustes'; $a->strings['Provide your own OAuth Credentials'] = 'Proveer sus propias credenciales de OAuth'; -$a->strings['No consumer key pair for GNU Social found. Register your Friendica Account as an desktop client on your GNU Social account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendica installation at your favorited GNU Social installation.'] = 'No se encontró el par de claves de consumidor para GNU Social. Registre su cuenta de Friendica como un cliente de escritorio en su cuenta de GNU, copie el par de claves aquí e introduzca el origen de la API.
Antes de qeu registre su propio par de claves de OAuth pregunte al administrador si ya hay un par de claves para esta instalación de Friendica en su instalación de GNU Social favorita.'; +$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Para conectarse a su cuenta GNU Social click en el botón de abajo para obtener un código de seguridad de GNU Social que puede copiar en la caja de abajo y enviar el formulario. Sólo sus entradas públicas se publicarán en GNU Social.'; +$a->strings['Log in with GNU Social'] = 'Acceder a GNU Social'; +$a->strings['Cancel Connection Process'] = 'Cancelar el Proceso de Conexión'; $a->strings['OAuth Consumer Key'] = 'Clave de Consumidor de OAuth'; $a->strings['OAuth Consumer Secret'] = 'Secreto de Consumidor de OAuth'; $a->strings['Base API Path (remember the trailing /)'] = 'Camino Base de API (Recordar la cola /)'; -$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Para conectarse a su cuenta GNU Social click en el botón de abajo para obtener un código de seguridad de GNU Social que puede copiar en la caja de abajo y enviar el formulario. Sólo sus entradas públicas se publicarán en GNU Social.'; -$a->strings['Log in with GNU Social'] = 'Acceder a GNU Social'; $a->strings['Copy the security code from GNU Social here'] = 'Copiar el código de seguridad de GNU Social aquí'; -$a->strings['Cancel Connection Process'] = 'Cancelar el Proceso de Conexión'; -$a->strings['Current GNU Social API is'] = 'API de GNU Social actual'; -$a->strings['Cancel GNU Social Connection'] = 'Cancelar la conexión a GNU Social'; -$a->strings['Currently connected to: '] = 'Actualmente conectado a:'; -$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Si está habilitado, todas sus publicaciones públicas pueden publicarse en la cuenta asociada de GNU Social. Puede elegir hacer eso por defecto (aquí) o por cada publicación por separado en las opciones de publicación mientras escribe la entrada.'; -$a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Nota: Debido a sus ajustes de privacidad (?Ocultar los detalles de su perfil a espectadores desconocidos?) el enlace potencialmente incluído en publicaciones públicas transmitidas a GNU Social llevarán al visitante a una página en blanco informándole de que el acceso a su perfil ha sido restringido.'; $a->strings['Allow posting to GNU Social'] = 'Permitir publicar en GNU Social'; -$a->strings['Send public postings to GNU Social by default'] = 'Enviar las publicaciones públicas a GNU Social por defecto'; -$a->strings['Mirror all posts from GNU Social that are no replies or repeated messages'] = 'Reflejar todas las entradas de GNU Social que no son respuestas o mensajes repetidos'; -$a->strings['Import the remote timeline'] = 'Importar la línea de tiempo remota'; -$a->strings['Disabled'] = 'Deshabilitado'; -$a->strings['Full Timeline'] = 'Línea de Tiempo completa'; -$a->strings['Only Mentions'] = 'Sólo Menciones'; -$a->strings['Clear OAuth configuration'] = 'Limpiar la configuración de OAuth'; +$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Si está habilitado, todas sus publicaciones públicas pueden publicarse en la cuenta asociada de GNU Social. Puede elegir hacer eso por defecto (aquí) o por cada publicación por separado en las opciones de publicación mientras escribe la entrada.'; +$a->strings['GNU Social Import/Export/Mirror'] = 'Importar/Exportar/Reflejar GNU Social'; $a->strings['Site name'] = 'Nombre de la página'; $a->strings['Consumer Secret'] = 'Secreto de Consumidor'; $a->strings['Consumer Key'] = 'Clave de Consumidor'; diff --git a/statusnet/lang/fr/messages.po b/statusnet/lang/fr/messages.po index 92f185c0..b9623537 100644 --- a/statusnet/lang/fr/messages.po +++ b/statusnet/lang/fr/messages.po @@ -12,40 +12,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" "PO-Revision-Date: 2014-06-23 12:54+0000\n" "Last-Translator: Nicolas Derive, 2022\n" -"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" +"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: statusnet.php:97 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "Publier sur GNU Social" -#: statusnet.php:148 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "Merci de contacter l'administrateur du site.
L'URL d'API fournie est invalide." -#: statusnet.php:176 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "Impossible de se connecter à l'API GNU Social avec le chemin indiqué." -#: statusnet.php:243 statusnet.php:656 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Sauvegarder les paramètres" -#: statusnet.php:255 +#: statusnet.php:220 #, php-format msgid "Currently connected to: %s" msgstr "Actuellement connecté à : %s" -#: statusnet.php:260 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -53,30 +53,30 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "Note: En lien avec vos paramètres de confidentialité (Masquer vos détails de profil de visiteurs inconnus ?) le lien potentiellement inclus dans vos publications publiques relayées à GNU Social emmèneront le visiteur à une page blanche l'informant que l'accès à votre profil a été restreint." -#: statusnet.php:263 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "Effacer la configuration OAuth" -#: statusnet.php:275 +#: statusnet.php:240 msgid "Cancel GNU Social Connection" msgstr "Annuler la connexion à GNU Social" -#: statusnet.php:283 +#: statusnet.php:247 msgid "Globally Available GNU Social OAuthKeys" msgstr "Clés OAuth de GNU Social disponibles globalement" -#: statusnet.php:284 +#: statusnet.php:248 msgid "" "There are preconfigured OAuth key pairs for some GNU Social servers " "available. If you are using one of them, please use these credentials. If " "not feel free to connect to any other GNU Social instance (see below)." msgstr "Il y a des paires des clés OAuth préconfigurées disponibles pour certains serveurs GNU Social. Si vous utilisez l'une d'elles, merci d'utiliser ces identifiants. Si non, soyez libre de vous connecter à n'importe quelle autre instance GNU Social (voir ci-dessous)." -#: statusnet.php:285 +#: statusnet.php:249 msgid "Provide your own OAuth Credentials" msgstr "Fournissez vos propres identifiants OAuth" -#: statusnet.php:286 +#: statusnet.php:250 msgid "" "No consumer key pair for GNU Social found. Register your Friendica Account " "as a desktop application on your GNU Social account, copy the consumer key " @@ -85,7 +85,7 @@ msgid "" " Friendica installation at your favorite GNU Social installation." msgstr "Aucune paire de clés cliente pour GNU Social n'a été trouvée. Enregistrez votre compte Friendica comme une application de bureau sur votre compte GNU Social, copiez la paire de clés cliente ici et saisissez la racine de base de l'API.
Avant d'enregistrer votre propre paire de clés, demandez à l'administrateur si il y a déjà une paire de clés pour cette installation de Friendica sur votre installation GNU Social favorite." -#: statusnet.php:287 +#: statusnet.php:251 msgid "" "To connect to your GNU Social account click the button below to get a " "security code from GNU Social which you have to copy into the input box " @@ -93,86 +93,62 @@ msgid "" "posted to GNU Social." msgstr "Pour vous connecter à votre compte GNU Social, cliquez sur le bouton ci-dessous pour obtenir un code de sécurité de GNU Social, que vous devrez copier dans le champ de saisie ci-dessous, puis validez le formulaire. Seules vos publications publiques seront relayées sur GNU Social." -#: statusnet.php:288 +#: statusnet.php:252 msgid "Log in with GNU Social" msgstr "Se connecter avec GNU Social" -#: statusnet.php:289 +#: statusnet.php:253 msgid "Cancel Connection Process" msgstr "Annuler le processus de connexion" -#: statusnet.php:290 +#: statusnet.php:254 #, php-format msgid "Current GNU Social API is: %s" msgstr "L'API GNU Social actuelle est : %s" -#: statusnet.php:307 +#: statusnet.php:271 msgid "OAuth Consumer Key" msgstr "Clé d'Utilisateur OAuth" -#: statusnet.php:308 +#: statusnet.php:272 msgid "OAuth Consumer Secret" msgstr "Secret d'Utilisateur OAuth" -#: statusnet.php:310 statusnet.php:636 statusnet.php:648 +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 msgid "Base API Path (remember the trailing /)" msgstr "Chemin de base de l'API (n'oubliez pas le / final)" -#: statusnet.php:311 +#: statusnet.php:275 msgid "Copy the security code from GNU Social here" msgstr "Coller le code de sécurité de GNU Social ici" -#: statusnet.php:313 +#: statusnet.php:277 msgid "Allow posting to GNU Social" msgstr "Autoriser la publication sur GNU Social" -#: statusnet.php:313 +#: statusnet.php:277 msgid "" "If enabled all your public postings can be posted to the " "associated GNU Social account. You can choose to do so by default (here) or " "for every posting separately in the posting options when writing the entry." msgstr "Si activé, toutes vos publications publiques pourront être relayées sur le compte GNU Social associé. Vous pouvez choisir de faire cela par défaut (ici) ou individuellement pour chaque publication dans les options de publications au moment ou vous la créez." -#: statusnet.php:314 +#: statusnet.php:278 msgid "Post to GNU Social by default" msgstr "Publier sur GNU Social par défaut" -#: statusnet.php:315 -msgid "Mirror all public posts" -msgstr "Refléter toutes les publications publiques" - -#: statusnet.php:316 -msgid "Automatically create contacts" -msgstr "Créer les contacts automatiquement" - -#: statusnet.php:317 -msgid "Import the remote timeline" -msgstr "Importer la Timeline distante" - -#: statusnet.php:318 -msgid "Disabled" -msgstr "Désactiver" - -#: statusnet.php:319 -msgid "Full Timeline" -msgstr "Timeline complète" - -#: statusnet.php:320 -msgid "Only Mentions" -msgstr "Mentions uniquement" - -#: statusnet.php:326 +#: statusnet.php:283 msgid "GNU Social Import/Export/Mirror" msgstr "Import/Export/Miroir GNU Social" -#: statusnet.php:647 +#: statusnet.php:480 msgid "Site name" msgstr "Nom du site" -#: statusnet.php:649 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "Secret d'Utilisateur" -#: statusnet.php:650 +#: statusnet.php:483 msgid "Consumer Key" msgstr "Clé d'Utilisateur" diff --git a/statusnet/lang/fr/strings.php b/statusnet/lang/fr/strings.php index 9672216a..0809548f 100644 --- a/statusnet/lang/fr/strings.php +++ b/statusnet/lang/fr/strings.php @@ -28,12 +28,6 @@ $a->strings['Copy the security code from GNU Social here'] = 'Coller le code de $a->strings['Allow posting to GNU Social'] = 'Autoriser la publication sur GNU Social'; $a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Si activé, toutes vos publications publiques pourront être relayées sur le compte GNU Social associé. Vous pouvez choisir de faire cela par défaut (ici) ou individuellement pour chaque publication dans les options de publications au moment ou vous la créez.'; $a->strings['Post to GNU Social by default'] = 'Publier sur GNU Social par défaut'; -$a->strings['Mirror all public posts'] = 'Refléter toutes les publications publiques'; -$a->strings['Automatically create contacts'] = 'Créer les contacts automatiquement'; -$a->strings['Import the remote timeline'] = 'Importer la Timeline distante'; -$a->strings['Disabled'] = 'Désactiver'; -$a->strings['Full Timeline'] = 'Timeline complète'; -$a->strings['Only Mentions'] = 'Mentions uniquement'; $a->strings['GNU Social Import/Export/Mirror'] = 'Import/Export/Miroir GNU Social'; $a->strings['Site name'] = 'Nom du site'; $a->strings['Consumer Secret'] = 'Secret d\'Utilisateur'; diff --git a/statusnet/lang/hu/messages.po b/statusnet/lang/hu/messages.po index ec800d85..4d54bc6a 100644 --- a/statusnet/lang/hu/messages.po +++ b/statusnet/lang/hu/messages.po @@ -9,40 +9,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" "PO-Revision-Date: 2014-06-23 12:54+0000\n" "Last-Translator: Balázs Úr, 2020-2021\n" -"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n" +"Language-Team: Hungarian (http://app.transifex.com/Friendica/friendica/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: statusnet.php:97 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "Beküldés a GNU Socialra" -#: statusnet.php:148 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "Vegye fel a kapcsolatot az oldal adminisztrátorával.
A megadott API URL nem érvényes." -#: statusnet.php:176 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "Nem tudtunk kapcsolatba lépni a GNU Social API-val azon az útvonalon, amelyet megadott." -#: statusnet.php:243 statusnet.php:656 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Beállítások mentése" -#: statusnet.php:255 +#: statusnet.php:220 #, php-format msgid "Currently connected to: %s" msgstr "Jelenleg ehhez kapcsolódott: %s" -#: statusnet.php:260 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -50,30 +50,30 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "Megjegyzés: az adatvédelmi beállításai miatt (Elrejti a profilja részleteit az ismeretlen megtekintők elől?) a GNU Socialra továbbított nyilvános beküldésekben vélhetően tartalmazott hivatkozás a látogatót egy üres oldalra fogja vezetni, amely arról tájékoztatja a látogatót, hogy a profiljához való hozzáférés korlátozva lett." -#: statusnet.php:263 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "OAuth beállítás törlése" -#: statusnet.php:275 +#: statusnet.php:240 msgid "Cancel GNU Social Connection" msgstr "GNU Social kapcsolódás megszakítása" -#: statusnet.php:283 +#: statusnet.php:247 msgid "Globally Available GNU Social OAuthKeys" msgstr "Globálisan elérhető GNU Social OAuth-kulcsok" -#: statusnet.php:284 +#: statusnet.php:248 msgid "" "There are preconfigured OAuth key pairs for some GNU Social servers " "available. If you are using one of them, please use these credentials. If " "not feel free to connect to any other GNU Social instance (see below)." msgstr "Előre beállított OAuth-kulcspárok érhetők el néhány GNU Social kiszolgálóhoz. Ha ezek egyikét használja, akkor használja ezeket a hitelesítési adatokat. Ha nem használja, akkor nyugodtan kapcsolódjon bármely egyéb GNU Social példányhoz (lásd lent)." -#: statusnet.php:285 +#: statusnet.php:249 msgid "Provide your own OAuth Credentials" msgstr "Adja meg a saját OAuth hitelesítési adatait" -#: statusnet.php:286 +#: statusnet.php:250 msgid "" "No consumer key pair for GNU Social found. Register your Friendica Account " "as a desktop application on your GNU Social account, copy the consumer key " @@ -82,7 +82,7 @@ msgid "" " Friendica installation at your favorite GNU Social installation." msgstr "Nem találhatók felhasználói kulcspárok a GNU Socialhoz. Regisztrálja a Friendica fiókját asztali alkalmazásként a GNU Social fiókjánál, másolja be a felhasználói kulcspárt ide, és adja meg az API alapgyökerét.
Mielőtt saját OAuth kulcspárt regisztrálna, kérdezze meg az adminisztrátort, hogy van-e már kulcspár ehhez a Friendica telepítéshez a kedvenc GNU Social telepítésénél." -#: statusnet.php:287 +#: statusnet.php:251 msgid "" "To connect to your GNU Social account click the button below to get a " "security code from GNU Social which you have to copy into the input box " @@ -90,86 +90,62 @@ msgid "" "posted to GNU Social." msgstr "A GNU Social fiókhoz való kapcsolódáshoz kattintson a lenti gombra, hogy megkapja a biztonsági kódot a GNU Socialtól, amelyet a lenti beviteli mezőbe kell bemásolnia, majd el kell küldenie az űrlapot. Csak a nyilvános bejegyzései lesznek beküldve a GNU Socialra." -#: statusnet.php:288 +#: statusnet.php:252 msgid "Log in with GNU Social" msgstr "Bejelentkezés GNU Social használatával" -#: statusnet.php:289 +#: statusnet.php:253 msgid "Cancel Connection Process" msgstr "Kapcsolódási folyamat megszakítása" -#: statusnet.php:290 +#: statusnet.php:254 #, php-format msgid "Current GNU Social API is: %s" msgstr "A jelenlegi GNU Social API: %s" -#: statusnet.php:307 +#: statusnet.php:271 msgid "OAuth Consumer Key" msgstr "OAuth felhasználói kulcs" -#: statusnet.php:308 +#: statusnet.php:272 msgid "OAuth Consumer Secret" msgstr "OAuth felhasználói titok" -#: statusnet.php:310 statusnet.php:636 statusnet.php:648 +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 msgid "Base API Path (remember the trailing /)" msgstr "Alap API útvonal (ne felejtse el a záró / karaktert)" -#: statusnet.php:311 +#: statusnet.php:275 msgid "Copy the security code from GNU Social here" msgstr "Másolja be ide a GNU Socialtól származó biztonsági kódot" -#: statusnet.php:313 +#: statusnet.php:277 msgid "Allow posting to GNU Social" msgstr "Beküldés engedélyezése a GNU Socialra" -#: statusnet.php:313 +#: statusnet.php:277 msgid "" "If enabled all your public postings can be posted to the " "associated GNU Social account. You can choose to do so by default (here) or " "for every posting separately in the posting options when writing the entry." msgstr "Ha engedélyezve van, akkor az összes nyilvános beküldés beküldhető a hozzárendelt GNU Social fiókba. Kiválaszthatja, hogy ezt alapértelmezetten szeretné-e (itt), vagy minden egyes beküldésnél különállóan a beküldési beállításokban, amikor megírja a bejegyzést." -#: statusnet.php:314 +#: statusnet.php:278 msgid "Post to GNU Social by default" msgstr "Beküldés a GNU Socialra alapértelmezetten" -#: statusnet.php:315 -msgid "Mirror all public posts" -msgstr "Összes nyilvános bejegyzés tükrözése" - -#: statusnet.php:316 -msgid "Automatically create contacts" -msgstr "Partnerek automatikus létrehozása" - -#: statusnet.php:317 -msgid "Import the remote timeline" -msgstr "A távoli idővonal importálása" - -#: statusnet.php:318 -msgid "Disabled" -msgstr "Letiltva" - -#: statusnet.php:319 -msgid "Full Timeline" -msgstr "Teljes idővonal" - -#: statusnet.php:320 -msgid "Only Mentions" -msgstr "Csak említések" - -#: statusnet.php:326 +#: statusnet.php:283 msgid "GNU Social Import/Export/Mirror" msgstr "GNU Social importálás, exportálás vagy tükrözés" -#: statusnet.php:647 +#: statusnet.php:480 msgid "Site name" msgstr "Oldal neve" -#: statusnet.php:649 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "Felhasználói titok" -#: statusnet.php:650 +#: statusnet.php:483 msgid "Consumer Key" msgstr "Felhasználói kulcs" diff --git a/statusnet/lang/hu/strings.php b/statusnet/lang/hu/strings.php index aa202430..b1fe1550 100644 --- a/statusnet/lang/hu/strings.php +++ b/statusnet/lang/hu/strings.php @@ -28,12 +28,6 @@ $a->strings['Copy the security code from GNU Social here'] = 'Másolja be ide a $a->strings['Allow posting to GNU Social'] = 'Beküldés engedélyezése a GNU Socialra'; $a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Ha engedélyezve van, akkor az összes nyilvános beküldés beküldhető a hozzárendelt GNU Social fiókba. Kiválaszthatja, hogy ezt alapértelmezetten szeretné-e (itt), vagy minden egyes beküldésnél különállóan a beküldési beállításokban, amikor megírja a bejegyzést.'; $a->strings['Post to GNU Social by default'] = 'Beküldés a GNU Socialra alapértelmezetten'; -$a->strings['Mirror all public posts'] = 'Összes nyilvános bejegyzés tükrözése'; -$a->strings['Automatically create contacts'] = 'Partnerek automatikus létrehozása'; -$a->strings['Import the remote timeline'] = 'A távoli idővonal importálása'; -$a->strings['Disabled'] = 'Letiltva'; -$a->strings['Full Timeline'] = 'Teljes idővonal'; -$a->strings['Only Mentions'] = 'Csak említések'; $a->strings['GNU Social Import/Export/Mirror'] = 'GNU Social importálás, exportálás vagy tükrözés'; $a->strings['Site name'] = 'Oldal neve'; $a->strings['Consumer Secret'] = 'Felhasználói titok'; diff --git a/statusnet/lang/is/messages.po b/statusnet/lang/is/messages.po index 512c6560..fbf4e25d 100644 --- a/statusnet/lang/is/messages.po +++ b/statusnet/lang/is/messages.po @@ -9,119 +9,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-27 07:21+0200\n" -"PO-Revision-Date: 2018-05-24 10:00+0000\n" -"Last-Translator: Sveinn í Felli \n" -"Language-Team: Icelandic (http://www.transifex.com/Friendica/friendica/language/is/)\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: Sveinn í Felli , 2018\n" +"Language-Team: Icelandic (http://app.transifex.com/Friendica/friendica/language/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" -#: statusnet.php:151 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "Senda á GNU Social" -#: statusnet.php:196 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "Hafðu samband við kerfisstjóra.
Uppgefin API-slóð er ógild." -#: statusnet.php:225 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "Ekki náðist í GNU Social API með slóðinni sem þú gafst upp." -#: statusnet.php:259 -msgid "GNU Social settings updated." -msgstr "Stillingar GNU Social uppfærðar." - -#: statusnet.php:294 statusnet.php:298 -msgid "GNU Social Import/Export/Mirror" -msgstr "" - -#: statusnet.php:313 -msgid "Globally Available GNU Social OAuthKeys" -msgstr "Víðværir OAuth-lyklar GNU Social eru til taks" - -#: statusnet.php:314 -msgid "" -"There are preconfigured OAuth key pairs for some GNU Social servers " -"available. If you are using one of them, please use these credentials. If " -"not feel free to connect to any other GNU Social instance (see below)." -msgstr "Það eru forstillt OAuth-lyklapör í sumum GNU Social þjónum. Ef þú ert að nota slíkt par, notaðu þá þau auðkenni. Ef ekki þá er þér frjálst að tengjast hvaða öðrum GNU Social þjónum (sjá fyrir neðan)." - -#: statusnet.php:320 statusnet.php:337 statusnet.php:364 statusnet.php:371 -#: statusnet.php:416 statusnet.php:699 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Vista stillingar" -#: statusnet.php:322 -msgid "Provide your own OAuth Credentials" -msgstr "Gefðu upp eigin OAuth auðkenni" - -#: statusnet.php:323 -msgid "" -"No consumer key pair for GNU Social found. Register your Friendica Account " -"as an desktop client on your GNU Social account, copy the consumer key pair " -"here and enter the API base root.
Before you register your own OAuth " -"key pair ask the administrator if there is already a key pair for this " -"Friendica installation at your favorited GNU Social installation." +#: statusnet.php:220 +#, php-format +msgid "Currently connected to: %s" msgstr "" -#: statusnet.php:325 -msgid "OAuth Consumer Key" -msgstr "OAuth-lykill notanda" - -#: statusnet.php:328 -msgid "OAuth Consumer Secret" -msgstr "OAuth-leyniorð notanda" - -#: statusnet.php:331 statusnet.php:679 statusnet.php:691 -msgid "Base API Path (remember the trailing /)" -msgstr "Grunn API-slóð (muna eftir / í endann)" - -#: statusnet.php:356 -msgid "" -"To connect to your GNU Social account click the button below to get a " -"security code from GNU Social which you have to copy into the input box " -"below and submit the form. Only your public posts will be " -"posted to GNU Social." -msgstr "Til að tengjast GNU Social notandaaðgangnum ýttu á hnappinn hér fyrir neðan, þá fæst öryggislykill frá GNU Social sem þarf að afrita í svæðið fyrir neðan og senda inn. Aðeins opinberar færslur munu flæða yfir á GNU Social." - -#: statusnet.php:357 -msgid "Log in with GNU Social" -msgstr "Skrá inn með GNU Social" - -#: statusnet.php:359 -msgid "Copy the security code from GNU Social here" -msgstr "Afrita öryggislykil frá GNU Social hingað" - -#: statusnet.php:365 -msgid "Cancel Connection Process" -msgstr "Hætta við tengiferli" - -#: statusnet.php:367 -msgid "Current GNU Social API is" -msgstr "Núverandi GNU Social API er" - -#: statusnet.php:368 -msgid "Cancel GNU Social Connection" -msgstr "Hætta við GNU Social tengingu" - -#: statusnet.php:379 -msgid "Currently connected to: " -msgstr "Núna tengdur við:" - -#: statusnet.php:380 -msgid "" -"If enabled all your public postings can be posted to the " -"associated GNU Social account. You can choose to do so by default (here) or " -"for every posting separately in the posting options when writing the entry." -msgstr "Ef virkt þá geta allar opinberu stöðu meldingarnar þínar verið birtar á tengdri GNU Social síðu. Þú getur valið að gera þetta sjálfvirkt (hér) eða fyrir hvern póst í senn þegar hann er skrifaður." - -#: statusnet.php:382 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -129,47 +50,102 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "" -#: statusnet.php:385 -msgid "Allow posting to GNU Social" -msgstr "Leyfa sendingu færslna til GNU Social" - -#: statusnet.php:388 -msgid "Send public postings to GNU Social by default" -msgstr "Sjálfgefið senda opinberar færslur á GNU Social" - -#: statusnet.php:392 -msgid "" -"Mirror all posts from GNU Social that are no replies or repeated messages" -msgstr "" - -#: statusnet.php:398 -msgid "Import the remote timeline" -msgstr "Flytja inn fjartengdu tímalínuna" - -#: statusnet.php:402 -msgid "Disabled" -msgstr "Slökkt" - -#: statusnet.php:403 -msgid "Full Timeline" -msgstr "Öll tímalínan" - -#: statusnet.php:404 -msgid "Only Mentions" -msgstr "" - -#: statusnet.php:413 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "Hreinsa OAuth stillingar" -#: statusnet.php:690 +#: statusnet.php:240 +msgid "Cancel GNU Social Connection" +msgstr "Hætta við GNU Social tengingu" + +#: statusnet.php:247 +msgid "Globally Available GNU Social OAuthKeys" +msgstr "Víðværir OAuth-lyklar GNU Social eru til taks" + +#: statusnet.php:248 +msgid "" +"There are preconfigured OAuth key pairs for some GNU Social servers " +"available. If you are using one of them, please use these credentials. If " +"not feel free to connect to any other GNU Social instance (see below)." +msgstr "Það eru forstillt OAuth-lyklapör í sumum GNU Social þjónum. Ef þú ert að nota slíkt par, notaðu þá þau auðkenni. Ef ekki þá er þér frjálst að tengjast hvaða öðrum GNU Social þjónum (sjá fyrir neðan)." + +#: statusnet.php:249 +msgid "Provide your own OAuth Credentials" +msgstr "Gefðu upp eigin OAuth auðkenni" + +#: statusnet.php:250 +msgid "" +"No consumer key pair for GNU Social found. Register your Friendica Account " +"as a desktop application on your GNU Social account, copy the consumer key " +"pair here and enter the API base root.
Before you register your own " +"OAuth key pair ask the administrator if there is already a key pair for this" +" Friendica installation at your favorite GNU Social installation." +msgstr "" + +#: statusnet.php:251 +msgid "" +"To connect to your GNU Social account click the button below to get a " +"security code from GNU Social which you have to copy into the input box " +"below and submit the form. Only your public posts will be " +"posted to GNU Social." +msgstr "Til að tengjast GNU Social notandaaðgangnum ýttu á hnappinn hér fyrir neðan, þá fæst öryggislykill frá GNU Social sem þarf að afrita í svæðið fyrir neðan og senda inn. Aðeins opinberar færslur munu flæða yfir á GNU Social." + +#: statusnet.php:252 +msgid "Log in with GNU Social" +msgstr "Skrá inn með GNU Social" + +#: statusnet.php:253 +msgid "Cancel Connection Process" +msgstr "Hætta við tengiferli" + +#: statusnet.php:254 +#, php-format +msgid "Current GNU Social API is: %s" +msgstr "" + +#: statusnet.php:271 +msgid "OAuth Consumer Key" +msgstr "OAuth-lykill notanda" + +#: statusnet.php:272 +msgid "OAuth Consumer Secret" +msgstr "OAuth-leyniorð notanda" + +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 +msgid "Base API Path (remember the trailing /)" +msgstr "Grunn API-slóð (muna eftir / í endann)" + +#: statusnet.php:275 +msgid "Copy the security code from GNU Social here" +msgstr "Afrita öryggislykil frá GNU Social hingað" + +#: statusnet.php:277 +msgid "Allow posting to GNU Social" +msgstr "Leyfa sendingu færslna til GNU Social" + +#: statusnet.php:277 +msgid "" +"If enabled all your public postings can be posted to the " +"associated GNU Social account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." +msgstr "Ef virkt þá geta allar opinberu stöðu meldingarnar þínar verið birtar á tengdri GNU Social síðu. Þú getur valið að gera þetta sjálfvirkt (hér) eða fyrir hvern póst í senn þegar hann er skrifaður." + +#: statusnet.php:278 +msgid "Post to GNU Social by default" +msgstr "" + +#: statusnet.php:283 +msgid "GNU Social Import/Export/Mirror" +msgstr "" + +#: statusnet.php:480 msgid "Site name" msgstr "Heiti vefsvæðis" -#: statusnet.php:692 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "Leyniorð notanda" -#: statusnet.php:693 +#: statusnet.php:483 msgid "Consumer Key" msgstr "Lykill notanda" diff --git a/statusnet/lang/is/strings.php b/statusnet/lang/is/strings.php index bdf3c9a3..18a3b8b6 100644 --- a/statusnet/lang/is/strings.php +++ b/statusnet/lang/is/strings.php @@ -8,28 +8,21 @@ function string_plural_select_is($n){ $a->strings['Post to GNU Social'] = 'Senda á GNU Social'; $a->strings['Please contact your site administrator.
The provided API URL is not valid.'] = 'Hafðu samband við kerfisstjóra.
Uppgefin API-slóð er ógild.'; $a->strings['We could not contact the GNU Social API with the Path you entered.'] = 'Ekki náðist í GNU Social API með slóðinni sem þú gafst upp.'; -$a->strings['GNU Social settings updated.'] = 'Stillingar GNU Social uppfærðar.'; +$a->strings['Save Settings'] = 'Vista stillingar'; +$a->strings['Clear OAuth configuration'] = 'Hreinsa OAuth stillingar'; +$a->strings['Cancel GNU Social Connection'] = 'Hætta við GNU Social tengingu'; $a->strings['Globally Available GNU Social OAuthKeys'] = 'Víðværir OAuth-lyklar GNU Social eru til taks'; $a->strings['There are preconfigured OAuth key pairs for some GNU Social servers available. If you are using one of them, please use these credentials. If not feel free to connect to any other GNU Social instance (see below).'] = 'Það eru forstillt OAuth-lyklapör í sumum GNU Social þjónum. Ef þú ert að nota slíkt par, notaðu þá þau auðkenni. Ef ekki þá er þér frjálst að tengjast hvaða öðrum GNU Social þjónum (sjá fyrir neðan).'; -$a->strings['Save Settings'] = 'Vista stillingar'; $a->strings['Provide your own OAuth Credentials'] = 'Gefðu upp eigin OAuth auðkenni'; +$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Til að tengjast GNU Social notandaaðgangnum ýttu á hnappinn hér fyrir neðan, þá fæst öryggislykill frá GNU Social sem þarf að afrita í svæðið fyrir neðan og senda inn. Aðeins opinberar færslur munu flæða yfir á GNU Social.'; +$a->strings['Log in with GNU Social'] = 'Skrá inn með GNU Social'; +$a->strings['Cancel Connection Process'] = 'Hætta við tengiferli'; $a->strings['OAuth Consumer Key'] = 'OAuth-lykill notanda'; $a->strings['OAuth Consumer Secret'] = 'OAuth-leyniorð notanda'; $a->strings['Base API Path (remember the trailing /)'] = 'Grunn API-slóð (muna eftir / í endann)'; -$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Til að tengjast GNU Social notandaaðgangnum ýttu á hnappinn hér fyrir neðan, þá fæst öryggislykill frá GNU Social sem þarf að afrita í svæðið fyrir neðan og senda inn. Aðeins opinberar færslur munu flæða yfir á GNU Social.'; -$a->strings['Log in with GNU Social'] = 'Skrá inn með GNU Social'; $a->strings['Copy the security code from GNU Social here'] = 'Afrita öryggislykil frá GNU Social hingað'; -$a->strings['Cancel Connection Process'] = 'Hætta við tengiferli'; -$a->strings['Current GNU Social API is'] = 'Núverandi GNU Social API er'; -$a->strings['Cancel GNU Social Connection'] = 'Hætta við GNU Social tengingu'; -$a->strings['Currently connected to: '] = 'Núna tengdur við:'; -$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Ef virkt þá geta allar opinberu stöðu meldingarnar þínar verið birtar á tengdri GNU Social síðu. Þú getur valið að gera þetta sjálfvirkt (hér) eða fyrir hvern póst í senn þegar hann er skrifaður.'; $a->strings['Allow posting to GNU Social'] = 'Leyfa sendingu færslna til GNU Social'; -$a->strings['Send public postings to GNU Social by default'] = 'Sjálfgefið senda opinberar færslur á GNU Social'; -$a->strings['Import the remote timeline'] = 'Flytja inn fjartengdu tímalínuna'; -$a->strings['Disabled'] = 'Slökkt'; -$a->strings['Full Timeline'] = 'Öll tímalínan'; -$a->strings['Clear OAuth configuration'] = 'Hreinsa OAuth stillingar'; +$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Ef virkt þá geta allar opinberu stöðu meldingarnar þínar verið birtar á tengdri GNU Social síðu. Þú getur valið að gera þetta sjálfvirkt (hér) eða fyrir hvern póst í senn þegar hann er skrifaður.'; $a->strings['Site name'] = 'Heiti vefsvæðis'; $a->strings['Consumer Secret'] = 'Leyniorð notanda'; $a->strings['Consumer Key'] = 'Lykill notanda'; diff --git a/statusnet/lang/it/messages.po b/statusnet/lang/it/messages.po index 9216db8f..6cc89fc9 100644 --- a/statusnet/lang/it/messages.po +++ b/statusnet/lang/it/messages.po @@ -5,124 +5,45 @@ # # Translators: # fabrixxm , 2014-2015 -# Sylke Vicious , 2020 +# Sylke Vicious , 2020,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-27 07:21+0200\n" -"PO-Revision-Date: 2020-09-17 11:40+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: Sylke Vicious , 2020,2023\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: statusnet.php:151 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "Invia a GNU Social" -#: statusnet.php:196 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "Contatta l'amministratore del sito.
L'URL delle API fornito non è valido." -#: statusnet.php:225 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "Non possiamo conttattare le API di GNU Social con il percorso che hai inserito." -#: statusnet.php:259 -msgid "GNU Social settings updated." -msgstr "Impostazioni di GNU Social aggiornate." - -#: statusnet.php:294 statusnet.php:298 -msgid "GNU Social Import/Export/Mirror" -msgstr "Esporta/Importa/Clona GNU Social" - -#: statusnet.php:313 -msgid "Globally Available GNU Social OAuthKeys" -msgstr "OAuthKeys globali di GNU Social" - -#: statusnet.php:314 -msgid "" -"There are preconfigured OAuth key pairs for some GNU Social servers " -"available. If you are using one of them, please use these credentials. If " -"not feel free to connect to any other GNU Social instance (see below)." -msgstr "Esistono coppie di chiavi OAuth precofigurate per alcuni server GNU Social. Se usi uno di questi server, per favore scegli queste credenziali. Altrimenti sei libero di collegarti a un'altra installazione di GNU Social (vedi sotto)." - -#: statusnet.php:320 statusnet.php:337 statusnet.php:364 statusnet.php:371 -#: statusnet.php:416 statusnet.php:699 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Salva Impostazioni" -#: statusnet.php:322 -msgid "Provide your own OAuth Credentials" -msgstr "Fornisci le tue credenziali OAuth" +#: statusnet.php:220 +#, php-format +msgid "Currently connected to: %s" +msgstr "Attualmente connesso a: %s" -#: statusnet.php:323 -msgid "" -"No consumer key pair for GNU Social found. Register your Friendica Account " -"as an desktop client on your GNU Social account, copy the consumer key pair " -"here and enter the API base root.
Before you register your own OAuth " -"key pair ask the administrator if there is already a key pair for this " -"Friendica installation at your favorited GNU Social installation." -msgstr "Nessuna coppia di chiavi consumer trovate per GNU Social. Registra il tuo account Friendica come un client desktop nel tuo account GNU Social, copia la coppia di chiavi consumer qui e inserisci l'url base delle API.
Prima di registrare la tua coppia di chiavi OAuth, chiedi all'amministratore se esiste già una coppia di chiavi per questo sito Friendica presso la tua installazione GNU Social preferita." - -#: statusnet.php:325 -msgid "OAuth Consumer Key" -msgstr "OAuth Consumer Key" - -#: statusnet.php:328 -msgid "OAuth Consumer Secret" -msgstr "OAuth Consumer Secret" - -#: statusnet.php:331 statusnet.php:679 statusnet.php:691 -msgid "Base API Path (remember the trailing /)" -msgstr "Indirizzo di base per le API (ricorda la / alla fine)" - -#: statusnet.php:356 -msgid "" -"To connect to your GNU Social account click the button below to get a " -"security code from GNU Social which you have to copy into the input box " -"below and submit the form. Only your public posts will be " -"posted to GNU Social." -msgstr "Per collegare il tuo account GNU Social, clicca sul bottone per ottenere un codice di sicurezza da GNU Social, che dovrai copiare nel box sottostante e poi inviare la form. Solo i tuoi messaggi pubblici saranno inviati a GNU Social." - -#: statusnet.php:357 -msgid "Log in with GNU Social" -msgstr "Accedi con GNU Social" - -#: statusnet.php:359 -msgid "Copy the security code from GNU Social here" -msgstr "Copia il codice di sicurezza da GNU Social qui" - -#: statusnet.php:365 -msgid "Cancel Connection Process" -msgstr "Annulla il processo di connessione" - -#: statusnet.php:367 -msgid "Current GNU Social API is" -msgstr "Le API GNU Social correnti sono" - -#: statusnet.php:368 -msgid "Cancel GNU Social Connection" -msgstr "Annulla la connessione a GNU Social" - -#: statusnet.php:379 -msgid "Currently connected to: " -msgstr "Al momento connesso con:" - -#: statusnet.php:380 -msgid "" -"If enabled all your public postings can be posted to the " -"associated GNU Social account. You can choose to do so by default (here) or " -"for every posting separately in the posting options when writing the entry." -msgstr "Se abilitato tutti i tuoi messaggi pubblici possono essere inviati all'account GNU Social associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio." - -#: statusnet.php:382 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -130,47 +51,102 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "Nota: A causa delle tue impostazioni di privacy(Nascondi i dettagli del tuo profilo ai visitatori sconosciuti?) il collegamento potenzialmente incluso nei messaggi pubblici inviati a GNU Social porterà i visitatori a una pagina bianca con una nota che li informa che l'accesso al tuo profilo è stato limitato." -#: statusnet.php:385 -msgid "Allow posting to GNU Social" -msgstr "Permetti l'invio a GNU Social" - -#: statusnet.php:388 -msgid "Send public postings to GNU Social by default" -msgstr "Invia sempre i messaggi pubblici a GNU Social" - -#: statusnet.php:392 -msgid "" -"Mirror all posts from GNU Social that are no replies or repeated messages" -msgstr "Clona tutti i messaggi da GNU Social che non sono risposte o messaggi ripetuti" - -#: statusnet.php:398 -msgid "Import the remote timeline" -msgstr "Importa la timeline remota" - -#: statusnet.php:402 -msgid "Disabled" -msgstr "Disabilitato" - -#: statusnet.php:403 -msgid "Full Timeline" -msgstr "Timeline completa" - -#: statusnet.php:404 -msgid "Only Mentions" -msgstr "Solo menzioni" - -#: statusnet.php:413 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "Rimuovi la configurazione OAuth" -#: statusnet.php:690 +#: statusnet.php:240 +msgid "Cancel GNU Social Connection" +msgstr "Annulla la connessione a GNU Social" + +#: statusnet.php:247 +msgid "Globally Available GNU Social OAuthKeys" +msgstr "OAuthKeys globali di GNU Social" + +#: statusnet.php:248 +msgid "" +"There are preconfigured OAuth key pairs for some GNU Social servers " +"available. If you are using one of them, please use these credentials. If " +"not feel free to connect to any other GNU Social instance (see below)." +msgstr "Esistono coppie di chiavi OAuth precofigurate per alcuni server GNU Social. Se usi uno di questi server, per favore scegli queste credenziali. Altrimenti sei libero di collegarti a un'altra installazione di GNU Social (vedi sotto)." + +#: statusnet.php:249 +msgid "Provide your own OAuth Credentials" +msgstr "Fornisci le tue credenziali OAuth" + +#: statusnet.php:250 +msgid "" +"No consumer key pair for GNU Social found. Register your Friendica Account " +"as a desktop application on your GNU Social account, copy the consumer key " +"pair here and enter the API base root.
Before you register your own " +"OAuth key pair ask the administrator if there is already a key pair for this" +" Friendica installation at your favorite GNU Social installation." +msgstr "Coppia di chiavi consumer per GNU Social non trovata. Registra il tuo Account Friendica come applicazione desktop nel tuo account GNU Social, copia la coppia di chiavi consumer qui e inserisci il percorso delle API.
Prima di registrare una tua coppia di chiavi OAuth chiedi all'amministratore se esiste già una coppia di chiavi tra questa installazione Friendica e l'installazione GNU Social." + +#: statusnet.php:251 +msgid "" +"To connect to your GNU Social account click the button below to get a " +"security code from GNU Social which you have to copy into the input box " +"below and submit the form. Only your public posts will be " +"posted to GNU Social." +msgstr "Per collegare il tuo account GNU Social, clicca sul bottone per ottenere un codice di sicurezza da GNU Social, che dovrai copiare nel box sottostante e poi inviare la form. Solo i tuoi messaggi pubblici saranno inviati a GNU Social." + +#: statusnet.php:252 +msgid "Log in with GNU Social" +msgstr "Accedi con GNU Social" + +#: statusnet.php:253 +msgid "Cancel Connection Process" +msgstr "Annulla il processo di connessione" + +#: statusnet.php:254 +#, php-format +msgid "Current GNU Social API is: %s" +msgstr "La API attuale di GNU Social è: %s" + +#: statusnet.php:271 +msgid "OAuth Consumer Key" +msgstr "OAuth Consumer Key" + +#: statusnet.php:272 +msgid "OAuth Consumer Secret" +msgstr "OAuth Consumer Secret" + +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 +msgid "Base API Path (remember the trailing /)" +msgstr "Indirizzo di base per le API (ricorda la / alla fine)" + +#: statusnet.php:275 +msgid "Copy the security code from GNU Social here" +msgstr "Copia il codice di sicurezza da GNU Social qui" + +#: statusnet.php:277 +msgid "Allow posting to GNU Social" +msgstr "Permetti l'invio a GNU Social" + +#: statusnet.php:277 +msgid "" +"If enabled all your public postings can be posted to the " +"associated GNU Social account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." +msgstr "Se abilitato tutti i tuoi messaggi pubblici possono essere inviati all'account GNU Social associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio." + +#: statusnet.php:278 +msgid "Post to GNU Social by default" +msgstr "Pubblica su GNU Social per impostazione predefinita" + +#: statusnet.php:283 +msgid "GNU Social Import/Export/Mirror" +msgstr "Esporta/Importa/Clona GNU Social" + +#: statusnet.php:480 msgid "Site name" msgstr "Nome del sito" -#: statusnet.php:692 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "Consumer Secret" -#: statusnet.php:693 +#: statusnet.php:483 msgid "Consumer Key" msgstr "Consumer Key" diff --git a/statusnet/lang/it/strings.php b/statusnet/lang/it/strings.php index 06bc8b12..309f8bb2 100644 --- a/statusnet/lang/it/strings.php +++ b/statusnet/lang/it/strings.php @@ -3,38 +3,32 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Post to GNU Social'] = 'Invia a GNU Social'; $a->strings['Please contact your site administrator.
The provided API URL is not valid.'] = 'Contatta l\'amministratore del sito.
L\'URL delle API fornito non è valido.'; $a->strings['We could not contact the GNU Social API with the Path you entered.'] = 'Non possiamo conttattare le API di GNU Social con il percorso che hai inserito.'; -$a->strings['GNU Social settings updated.'] = 'Impostazioni di GNU Social aggiornate.'; -$a->strings['GNU Social Import/Export/Mirror'] = 'Esporta/Importa/Clona GNU Social'; +$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Currently connected to: %s'] = 'Attualmente connesso a: %s'; +$a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Nota: A causa delle tue impostazioni di privacy(Nascondi i dettagli del tuo profilo ai visitatori sconosciuti?) il collegamento potenzialmente incluso nei messaggi pubblici inviati a GNU Social porterà i visitatori a una pagina bianca con una nota che li informa che l\'accesso al tuo profilo è stato limitato.'; +$a->strings['Clear OAuth configuration'] = 'Rimuovi la configurazione OAuth'; +$a->strings['Cancel GNU Social Connection'] = 'Annulla la connessione a GNU Social'; $a->strings['Globally Available GNU Social OAuthKeys'] = 'OAuthKeys globali di GNU Social'; $a->strings['There are preconfigured OAuth key pairs for some GNU Social servers available. If you are using one of them, please use these credentials. If not feel free to connect to any other GNU Social instance (see below).'] = 'Esistono coppie di chiavi OAuth precofigurate per alcuni server GNU Social. Se usi uno di questi server, per favore scegli queste credenziali. Altrimenti sei libero di collegarti a un\'altra installazione di GNU Social (vedi sotto).'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; $a->strings['Provide your own OAuth Credentials'] = 'Fornisci le tue credenziali OAuth'; -$a->strings['No consumer key pair for GNU Social found. Register your Friendica Account as an desktop client on your GNU Social account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendica installation at your favorited GNU Social installation.'] = 'Nessuna coppia di chiavi consumer trovate per GNU Social. Registra il tuo account Friendica come un client desktop nel tuo account GNU Social, copia la coppia di chiavi consumer qui e inserisci l\'url base delle API.
Prima di registrare la tua coppia di chiavi OAuth, chiedi all\'amministratore se esiste già una coppia di chiavi per questo sito Friendica presso la tua installazione GNU Social preferita.'; +$a->strings['No consumer key pair for GNU Social found. Register your Friendica Account as a desktop application on your GNU Social account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendica installation at your favorite GNU Social installation.'] = 'Coppia di chiavi consumer per GNU Social non trovata. Registra il tuo Account Friendica come applicazione desktop nel tuo account GNU Social, copia la coppia di chiavi consumer qui e inserisci il percorso delle API.
Prima di registrare una tua coppia di chiavi OAuth chiedi all\'amministratore se esiste già una coppia di chiavi tra questa installazione Friendica e l\'installazione GNU Social.'; +$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Per collegare il tuo account GNU Social, clicca sul bottone per ottenere un codice di sicurezza da GNU Social, che dovrai copiare nel box sottostante e poi inviare la form. Solo i tuoi messaggi pubblici saranno inviati a GNU Social.'; +$a->strings['Log in with GNU Social'] = 'Accedi con GNU Social'; +$a->strings['Cancel Connection Process'] = 'Annulla il processo di connessione'; +$a->strings['Current GNU Social API is: %s'] = 'La API attuale di GNU Social è: %s'; $a->strings['OAuth Consumer Key'] = 'OAuth Consumer Key'; $a->strings['OAuth Consumer Secret'] = 'OAuth Consumer Secret'; $a->strings['Base API Path (remember the trailing /)'] = 'Indirizzo di base per le API (ricorda la / alla fine)'; -$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Per collegare il tuo account GNU Social, clicca sul bottone per ottenere un codice di sicurezza da GNU Social, che dovrai copiare nel box sottostante e poi inviare la form. Solo i tuoi messaggi pubblici saranno inviati a GNU Social.'; -$a->strings['Log in with GNU Social'] = 'Accedi con GNU Social'; $a->strings['Copy the security code from GNU Social here'] = 'Copia il codice di sicurezza da GNU Social qui'; -$a->strings['Cancel Connection Process'] = 'Annulla il processo di connessione'; -$a->strings['Current GNU Social API is'] = 'Le API GNU Social correnti sono'; -$a->strings['Cancel GNU Social Connection'] = 'Annulla la connessione a GNU Social'; -$a->strings['Currently connected to: '] = 'Al momento connesso con:'; -$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Se abilitato tutti i tuoi messaggi pubblici possono essere inviati all\'account GNU Social associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio.'; -$a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Nota: A causa delle tue impostazioni di privacy(Nascondi i dettagli del tuo profilo ai visitatori sconosciuti?) il collegamento potenzialmente incluso nei messaggi pubblici inviati a GNU Social porterà i visitatori a una pagina bianca con una nota che li informa che l\'accesso al tuo profilo è stato limitato.'; $a->strings['Allow posting to GNU Social'] = 'Permetti l\'invio a GNU Social'; -$a->strings['Send public postings to GNU Social by default'] = 'Invia sempre i messaggi pubblici a GNU Social'; -$a->strings['Mirror all posts from GNU Social that are no replies or repeated messages'] = 'Clona tutti i messaggi da GNU Social che non sono risposte o messaggi ripetuti'; -$a->strings['Import the remote timeline'] = 'Importa la timeline remota'; -$a->strings['Disabled'] = 'Disabilitato'; -$a->strings['Full Timeline'] = 'Timeline completa'; -$a->strings['Only Mentions'] = 'Solo menzioni'; -$a->strings['Clear OAuth configuration'] = 'Rimuovi la configurazione OAuth'; +$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Se abilitato tutti i tuoi messaggi pubblici possono essere inviati all\'account GNU Social associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio.'; +$a->strings['Post to GNU Social by default'] = 'Pubblica su GNU Social per impostazione predefinita'; +$a->strings['GNU Social Import/Export/Mirror'] = 'Esporta/Importa/Clona GNU Social'; $a->strings['Site name'] = 'Nome del sito'; $a->strings['Consumer Secret'] = 'Consumer Secret'; $a->strings['Consumer Key'] = 'Consumer Key'; diff --git a/statusnet/lang/nl/messages.po b/statusnet/lang/nl/messages.po index e3d82e6e..0537d80b 100644 --- a/statusnet/lang/nl/messages.po +++ b/statusnet/lang/nl/messages.po @@ -9,119 +9,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-27 07:21+0200\n" -"PO-Revision-Date: 2018-08-24 13:56+0000\n" -"Last-Translator: Jeroen De Meerleer \n" -"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: Jeroen De Meerleer , 2018\n" +"Language-Team: Dutch (http://app.transifex.com/Friendica/friendica/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: statusnet.php:151 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "Post naar GNU Social" -#: statusnet.php:196 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "" -#: statusnet.php:225 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "" -#: statusnet.php:259 -msgid "GNU Social settings updated." -msgstr "GNU Social instellingen opgeslagen" - -#: statusnet.php:294 statusnet.php:298 -msgid "GNU Social Import/Export/Mirror" -msgstr "GNU Social Import/Exporteren/Spiegelen" - -#: statusnet.php:313 -msgid "Globally Available GNU Social OAuthKeys" -msgstr "" - -#: statusnet.php:314 -msgid "" -"There are preconfigured OAuth key pairs for some GNU Social servers " -"available. If you are using one of them, please use these credentials. If " -"not feel free to connect to any other GNU Social instance (see below)." -msgstr "" - -#: statusnet.php:320 statusnet.php:337 statusnet.php:364 statusnet.php:371 -#: statusnet.php:416 statusnet.php:699 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Instellingen opslaan" -#: statusnet.php:322 -msgid "Provide your own OAuth Credentials" +#: statusnet.php:220 +#, php-format +msgid "Currently connected to: %s" msgstr "" -#: statusnet.php:323 -msgid "" -"No consumer key pair for GNU Social found. Register your Friendica Account " -"as an desktop client on your GNU Social account, copy the consumer key pair " -"here and enter the API base root.
Before you register your own OAuth " -"key pair ask the administrator if there is already a key pair for this " -"Friendica installation at your favorited GNU Social installation." -msgstr "" - -#: statusnet.php:325 -msgid "OAuth Consumer Key" -msgstr "" - -#: statusnet.php:328 -msgid "OAuth Consumer Secret" -msgstr "" - -#: statusnet.php:331 statusnet.php:679 statusnet.php:691 -msgid "Base API Path (remember the trailing /)" -msgstr "" - -#: statusnet.php:356 -msgid "" -"To connect to your GNU Social account click the button below to get a " -"security code from GNU Social which you have to copy into the input box " -"below and submit the form. Only your public posts will be " -"posted to GNU Social." -msgstr "" - -#: statusnet.php:357 -msgid "Log in with GNU Social" -msgstr "" - -#: statusnet.php:359 -msgid "Copy the security code from GNU Social here" -msgstr "" - -#: statusnet.php:365 -msgid "Cancel Connection Process" -msgstr "" - -#: statusnet.php:367 -msgid "Current GNU Social API is" -msgstr "" - -#: statusnet.php:368 -msgid "Cancel GNU Social Connection" -msgstr "" - -#: statusnet.php:379 -msgid "Currently connected to: " -msgstr "" - -#: statusnet.php:380 -msgid "" -"If enabled all your public postings can be posted to the " -"associated GNU Social account. You can choose to do so by default (here) or " -"for every posting separately in the posting options when writing the entry." -msgstr "" - -#: statusnet.php:382 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -129,47 +50,102 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "" -#: statusnet.php:385 -msgid "Allow posting to GNU Social" -msgstr "Plaatsen op GNU Social toestaan" - -#: statusnet.php:388 -msgid "Send public postings to GNU Social by default" -msgstr "Verzend publieke berichten naar GNU Social als standaard instellen" - -#: statusnet.php:392 -msgid "" -"Mirror all posts from GNU Social that are no replies or repeated messages" -msgstr "" - -#: statusnet.php:398 -msgid "Import the remote timeline" -msgstr "" - -#: statusnet.php:402 -msgid "Disabled" -msgstr "Uitgeschakeld" - -#: statusnet.php:403 -msgid "Full Timeline" -msgstr "" - -#: statusnet.php:404 -msgid "Only Mentions" -msgstr "" - -#: statusnet.php:413 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "" -#: statusnet.php:690 +#: statusnet.php:240 +msgid "Cancel GNU Social Connection" +msgstr "" + +#: statusnet.php:247 +msgid "Globally Available GNU Social OAuthKeys" +msgstr "" + +#: statusnet.php:248 +msgid "" +"There are preconfigured OAuth key pairs for some GNU Social servers " +"available. If you are using one of them, please use these credentials. If " +"not feel free to connect to any other GNU Social instance (see below)." +msgstr "" + +#: statusnet.php:249 +msgid "Provide your own OAuth Credentials" +msgstr "" + +#: statusnet.php:250 +msgid "" +"No consumer key pair for GNU Social found. Register your Friendica Account " +"as a desktop application on your GNU Social account, copy the consumer key " +"pair here and enter the API base root.
Before you register your own " +"OAuth key pair ask the administrator if there is already a key pair for this" +" Friendica installation at your favorite GNU Social installation." +msgstr "" + +#: statusnet.php:251 +msgid "" +"To connect to your GNU Social account click the button below to get a " +"security code from GNU Social which you have to copy into the input box " +"below and submit the form. Only your public posts will be " +"posted to GNU Social." +msgstr "" + +#: statusnet.php:252 +msgid "Log in with GNU Social" +msgstr "" + +#: statusnet.php:253 +msgid "Cancel Connection Process" +msgstr "" + +#: statusnet.php:254 +#, php-format +msgid "Current GNU Social API is: %s" +msgstr "" + +#: statusnet.php:271 +msgid "OAuth Consumer Key" +msgstr "" + +#: statusnet.php:272 +msgid "OAuth Consumer Secret" +msgstr "" + +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 +msgid "Base API Path (remember the trailing /)" +msgstr "" + +#: statusnet.php:275 +msgid "Copy the security code from GNU Social here" +msgstr "" + +#: statusnet.php:277 +msgid "Allow posting to GNU Social" +msgstr "Plaatsen op GNU Social toestaan" + +#: statusnet.php:277 +msgid "" +"If enabled all your public postings can be posted to the " +"associated GNU Social account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." +msgstr "" + +#: statusnet.php:278 +msgid "Post to GNU Social by default" +msgstr "" + +#: statusnet.php:283 +msgid "GNU Social Import/Export/Mirror" +msgstr "GNU Social Import/Exporteren/Spiegelen" + +#: statusnet.php:480 msgid "Site name" msgstr "" -#: statusnet.php:692 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "" -#: statusnet.php:693 +#: statusnet.php:483 msgid "Consumer Key" msgstr "" diff --git a/statusnet/lang/nl/strings.php b/statusnet/lang/nl/strings.php index 2914e7d4..038d2ac5 100644 --- a/statusnet/lang/nl/strings.php +++ b/statusnet/lang/nl/strings.php @@ -6,9 +6,6 @@ function string_plural_select_nl($n){ return intval($n != 1); }} $a->strings['Post to GNU Social'] = 'Post naar GNU Social'; -$a->strings['GNU Social settings updated.'] = 'GNU Social instellingen opgeslagen'; -$a->strings['GNU Social Import/Export/Mirror'] = 'GNU Social Import/Exporteren/Spiegelen'; $a->strings['Save Settings'] = 'Instellingen opslaan'; $a->strings['Allow posting to GNU Social'] = 'Plaatsen op GNU Social toestaan'; -$a->strings['Send public postings to GNU Social by default'] = 'Verzend publieke berichten naar GNU Social als standaard instellen'; -$a->strings['Disabled'] = 'Uitgeschakeld'; +$a->strings['GNU Social Import/Export/Mirror'] = 'GNU Social Import/Exporteren/Spiegelen'; diff --git a/statusnet/lang/pl/messages.po b/statusnet/lang/pl/messages.po index cfde6e2e..0f0fa1db 100644 --- a/statusnet/lang/pl/messages.po +++ b/statusnet/lang/pl/messages.po @@ -11,40 +11,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" "PO-Revision-Date: 2014-06-23 12:54+0000\n" "Last-Translator: Piotr Strębski , 2022\n" -"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" +"Language-Team: Polish (http://app.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: statusnet.php:97 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "Opublikuj w GNU Social" -#: statusnet.php:148 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "Skontaktuj się z administratorem witryny.
Podany adres URL interfejsu API jest nieprawidłowy." -#: statusnet.php:176 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "Nie mogliśmy skontaktować się z GNU Social API z wprowadzoną ścieżką." -#: statusnet.php:243 statusnet.php:656 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: statusnet.php:255 +#: statusnet.php:220 #, php-format msgid "Currently connected to: %s" msgstr "Obecnie połączony z: %s" -#: statusnet.php:260 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -52,30 +52,30 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony." -#: statusnet.php:263 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "Wyczyść konfigurację OAuth" -#: statusnet.php:275 +#: statusnet.php:240 msgid "Cancel GNU Social Connection" msgstr "Anuluj połaczenie z GNU Social" -#: statusnet.php:283 +#: statusnet.php:247 msgid "Globally Available GNU Social OAuthKeys" msgstr "Globalnie dostępne GNU Social OAuthKeys" -#: statusnet.php:284 +#: statusnet.php:248 msgid "" "There are preconfigured OAuth key pairs for some GNU Social servers " "available. If you are using one of them, please use these credentials. If " "not feel free to connect to any other GNU Social instance (see below)." msgstr "Istnieją wstępnie skonfigurowane pary kluczy OAuth dla niektórych serwerów społecznościowych GNU. Jeśli używasz jednego z nich, użyj tych poświadczeń. Jeśli nie, możesz połączyć się z dowolną inną instancją społecznościową GNU (patrz poniżej)." -#: statusnet.php:285 +#: statusnet.php:249 msgid "Provide your own OAuth Credentials" msgstr "Podaj własne dane uwierzytelniające OAuth" -#: statusnet.php:286 +#: statusnet.php:250 msgid "" "No consumer key pair for GNU Social found. Register your Friendica Account " "as a desktop application on your GNU Social account, copy the consumer key " @@ -84,7 +84,7 @@ msgid "" " Friendica installation at your favorite GNU Social installation." msgstr "Nie znaleziono pary kluczy konsumenckich dla GNU Social. Zarejestruj swoje konto Friendica jako aplikację komputerową na swoim koncie GNU Social, skopiuj tutaj parę kluczy klienta i wprowadź podstawowy root API.
Przed zarejestrowaniem własnej pary kluczy OAuth zapytaj administratora, czy istnieje już para kluczy dla tej instalacji Friendica pod adresem Twojej ulubionej instalacji GNU Social." -#: statusnet.php:287 +#: statusnet.php:251 msgid "" "To connect to your GNU Social account click the button below to get a " "security code from GNU Social which you have to copy into the input box " @@ -92,86 +92,62 @@ msgid "" "posted to GNU Social." msgstr "Aby połączyć się z kontem społecznościowym GNU, kliknij przycisk poniżej, aby uzyskać kod bezpieczeństwa z GNU Social, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko twoje publiczne posty będą publikowane w GNU Social." -#: statusnet.php:288 +#: statusnet.php:252 msgid "Log in with GNU Social" msgstr "Zaloguj się za pomocą GNU Social" -#: statusnet.php:289 +#: statusnet.php:253 msgid "Cancel Connection Process" msgstr "Anuluj proces połączenia" -#: statusnet.php:290 +#: statusnet.php:254 #, php-format msgid "Current GNU Social API is: %s" msgstr "Obecne API GNU Social to: %s" -#: statusnet.php:307 +#: statusnet.php:271 msgid "OAuth Consumer Key" msgstr "Klucz klienta OAuth" -#: statusnet.php:308 +#: statusnet.php:272 msgid "OAuth Consumer Secret" msgstr "Tajny klucz klienta OAuth" -#: statusnet.php:310 statusnet.php:636 statusnet.php:648 +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 msgid "Base API Path (remember the trailing /)" msgstr "Podstawowa ścieżka interfejsu API (pamiętaj na końcu /)" -#: statusnet.php:311 +#: statusnet.php:275 msgid "Copy the security code from GNU Social here" msgstr "Skopiuj tutaj kod bezpieczeństwa z GNU Social" -#: statusnet.php:313 +#: statusnet.php:277 msgid "Allow posting to GNU Social" msgstr "Zezwalaj na publikowanie w GNU Social" -#: statusnet.php:313 +#: statusnet.php:277 msgid "" "If enabled all your public postings can be posted to the " "associated GNU Social account. You can choose to do so by default (here) or " "for every posting separately in the posting options when writing the entry." msgstr "Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą zostać wysłane na powiązane konto społecznościowe GNU. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu." -#: statusnet.php:314 +#: statusnet.php:278 msgid "Post to GNU Social by default" msgstr "Publikuj domyślnie w GNU Social" -#: statusnet.php:315 -msgid "Mirror all public posts" -msgstr "Odbij wszystkie publiczne wpisy" - -#: statusnet.php:316 -msgid "Automatically create contacts" -msgstr "Automatycznie twórz kontakty" - -#: statusnet.php:317 -msgid "Import the remote timeline" -msgstr "Zaimportuj na zdalnej oś czasu" - -#: statusnet.php:318 -msgid "Disabled" -msgstr "Wyłącz" - -#: statusnet.php:319 -msgid "Full Timeline" -msgstr "Pełna oś czasu" - -#: statusnet.php:320 -msgid "Only Mentions" -msgstr "Tylko wzmianki" - -#: statusnet.php:326 +#: statusnet.php:283 msgid "GNU Social Import/Export/Mirror" msgstr "GNU Social Import/Export/Mirror" -#: statusnet.php:647 +#: statusnet.php:480 msgid "Site name" msgstr "Nazwa strony" -#: statusnet.php:649 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "Tajny klucz klienta" -#: statusnet.php:650 +#: statusnet.php:483 msgid "Consumer Key" msgstr "Klucz klienta" diff --git a/statusnet/lang/pl/strings.php b/statusnet/lang/pl/strings.php index 76333a2a..53b38655 100644 --- a/statusnet/lang/pl/strings.php +++ b/statusnet/lang/pl/strings.php @@ -28,12 +28,6 @@ $a->strings['Copy the security code from GNU Social here'] = 'Skopiuj tutaj kod $a->strings['Allow posting to GNU Social'] = 'Zezwalaj na publikowanie w GNU Social'; $a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą zostać wysłane na powiązane konto społecznościowe GNU. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu.'; $a->strings['Post to GNU Social by default'] = 'Publikuj domyślnie w GNU Social'; -$a->strings['Mirror all public posts'] = 'Odbij wszystkie publiczne wpisy'; -$a->strings['Automatically create contacts'] = 'Automatycznie twórz kontakty'; -$a->strings['Import the remote timeline'] = 'Zaimportuj na zdalnej oś czasu'; -$a->strings['Disabled'] = 'Wyłącz'; -$a->strings['Full Timeline'] = 'Pełna oś czasu'; -$a->strings['Only Mentions'] = 'Tylko wzmianki'; $a->strings['GNU Social Import/Export/Mirror'] = 'GNU Social Import/Export/Mirror'; $a->strings['Site name'] = 'Nazwa strony'; $a->strings['Consumer Secret'] = 'Tajny klucz klienta'; diff --git a/statusnet/lang/sv/messages.po b/statusnet/lang/sv/messages.po index de131c33..0c0b4807 100644 --- a/statusnet/lang/sv/messages.po +++ b/statusnet/lang/sv/messages.po @@ -9,40 +9,40 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2022-01-16 01:06+0000\n" -"Last-Translator: Kristoffer Grundström \n" -"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n" +"POT-Creation-Date: 2022-12-21 22:32+0000\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: Kristoffer Grundström , 2022\n" +"Language-Team: Swedish (http://app.transifex.com/Friendica/friendica/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: statusnet.php:97 +#: statusnet.php:76 msgid "Post to GNU Social" msgstr "" -#: statusnet.php:148 +#: statusnet.php:122 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "" -#: statusnet.php:176 +#: statusnet.php:150 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "" -#: statusnet.php:243 statusnet.php:656 +#: statusnet.php:208 statusnet.php:489 msgid "Save Settings" msgstr "Spara inställningar" -#: statusnet.php:255 +#: statusnet.php:220 #, php-format msgid "Currently connected to: %s" msgstr "" -#: statusnet.php:260 +#: statusnet.php:225 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -50,30 +50,30 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "" -#: statusnet.php:263 +#: statusnet.php:228 msgid "Clear OAuth configuration" msgstr "" -#: statusnet.php:275 +#: statusnet.php:240 msgid "Cancel GNU Social Connection" msgstr "" -#: statusnet.php:283 +#: statusnet.php:247 msgid "Globally Available GNU Social OAuthKeys" msgstr "" -#: statusnet.php:284 +#: statusnet.php:248 msgid "" "There are preconfigured OAuth key pairs for some GNU Social servers " "available. If you are using one of them, please use these credentials. If " "not feel free to connect to any other GNU Social instance (see below)." msgstr "" -#: statusnet.php:285 +#: statusnet.php:249 msgid "Provide your own OAuth Credentials" msgstr "" -#: statusnet.php:286 +#: statusnet.php:250 msgid "" "No consumer key pair for GNU Social found. Register your Friendica Account " "as a desktop application on your GNU Social account, copy the consumer key " @@ -82,7 +82,7 @@ msgid "" " Friendica installation at your favorite GNU Social installation." msgstr "" -#: statusnet.php:287 +#: statusnet.php:251 msgid "" "To connect to your GNU Social account click the button below to get a " "security code from GNU Social which you have to copy into the input box " @@ -90,86 +90,62 @@ msgid "" "posted to GNU Social." msgstr "" -#: statusnet.php:288 +#: statusnet.php:252 msgid "Log in with GNU Social" msgstr "Logga in med GNU Social" -#: statusnet.php:289 +#: statusnet.php:253 msgid "Cancel Connection Process" msgstr "" -#: statusnet.php:290 +#: statusnet.php:254 #, php-format msgid "Current GNU Social API is: %s" msgstr "" -#: statusnet.php:307 +#: statusnet.php:271 msgid "OAuth Consumer Key" msgstr "" -#: statusnet.php:308 +#: statusnet.php:272 msgid "OAuth Consumer Secret" msgstr "" -#: statusnet.php:310 statusnet.php:636 statusnet.php:648 +#: statusnet.php:274 statusnet.php:469 statusnet.php:481 msgid "Base API Path (remember the trailing /)" msgstr "" -#: statusnet.php:311 +#: statusnet.php:275 msgid "Copy the security code from GNU Social here" msgstr "" -#: statusnet.php:313 +#: statusnet.php:277 msgid "Allow posting to GNU Social" msgstr "" -#: statusnet.php:313 +#: statusnet.php:277 msgid "" "If enabled all your public postings can be posted to the " "associated GNU Social account. You can choose to do so by default (here) or " "for every posting separately in the posting options when writing the entry." msgstr "" -#: statusnet.php:314 +#: statusnet.php:278 msgid "Post to GNU Social by default" msgstr "" -#: statusnet.php:315 -msgid "Mirror all public posts" -msgstr "" - -#: statusnet.php:316 -msgid "Automatically create contacts" -msgstr "" - -#: statusnet.php:317 -msgid "Import the remote timeline" -msgstr "" - -#: statusnet.php:318 -msgid "Disabled" -msgstr "" - -#: statusnet.php:319 -msgid "Full Timeline" -msgstr "Fullständig tidslinje" - -#: statusnet.php:320 -msgid "Only Mentions" -msgstr "Endast omnämningar" - -#: statusnet.php:326 +#: statusnet.php:283 msgid "GNU Social Import/Export/Mirror" msgstr "" -#: statusnet.php:647 +#: statusnet.php:480 msgid "Site name" msgstr "Namn på sidan" -#: statusnet.php:649 +#: statusnet.php:482 msgid "Consumer Secret" msgstr "Kundhemlighet" -#: statusnet.php:650 +#: statusnet.php:483 msgid "Consumer Key" msgstr "Kundnyckel" diff --git a/statusnet/lang/sv/strings.php b/statusnet/lang/sv/strings.php index e1f41128..e0a09d78 100644 --- a/statusnet/lang/sv/strings.php +++ b/statusnet/lang/sv/strings.php @@ -7,8 +7,6 @@ function string_plural_select_sv($n){ }} $a->strings['Save Settings'] = 'Spara inställningar'; $a->strings['Log in with GNU Social'] = 'Logga in med GNU Social'; -$a->strings['Full Timeline'] = 'Fullständig tidslinje'; -$a->strings['Only Mentions'] = 'Endast omnämningar'; $a->strings['Site name'] = 'Namn på sidan'; $a->strings['Consumer Secret'] = 'Kundhemlighet'; $a->strings['Consumer Key'] = 'Kundnyckel'; diff --git a/statusnet/library/codebirdsn.php b/statusnet/library/codebirdsn.php index 020c69c4..bffca163 100644 --- a/statusnet/library/codebirdsn.php +++ b/statusnet/library/codebirdsn.php @@ -31,11 +31,10 @@ use Friendica\Core\System; /** * Define constants */ -$constants = explode(' ', 'OBJECT ARRAY JSON'); -foreach ($constants as $i => $id) { - $id = 'CODEBIRD_RETURNFORMAT_' . $id; - defined($id) or define($id, $i); -} +defined('CODEBIRD_RETURNFORMAT_ARRAY') or define('CODEBIRD_RETURNFORMAT_ARRAY', 0); +defined('CODEBIRD_RETURNFORMAT_JSON') or define('CODEBIRD_RETURNFORMAT_JSON', 1); +defined('CODEBIRD_RETURNFORMAT_OBJECT') or define('CODEBIRD_RETURNFORMAT_OBJECT', 2); + $constants = array( 'CURLE_SSL_CERTPROBLEM' => 58, 'CURLE_SSL_CACERT' => 60, @@ -55,6 +54,8 @@ unset($id); * * @package codebird * @subpackage codebird-php + * + * @method object statuses_update(array $postdata) */ class CodebirdSN { @@ -117,7 +118,7 @@ class CodebirdSN * Returns singleton class instance * Always use this method unless you're working with multiple authenticated users at once * - * @return Codebird The instance + * @return CodebirdSN The instance */ public static function getInstance() { @@ -421,6 +422,7 @@ class CodebirdSN } break; case CODEBIRD_RETURNFORMAT_OBJECT: + /** @var object $reply */ $reply->httpstatus = $httpstatus; if ($httpstatus == 200) { self::setBearerToken($reply->access_token); @@ -491,7 +493,7 @@ class CodebirdSN /** * Generates a (hopefully) unique random string * - * @param int optional $length The length of the string to generate + * @param int $length The optional length of the string to generate * * @return string The random string */ @@ -506,9 +508,9 @@ class CodebirdSN /** * Generates an OAuth signature * - * @param string $httpmethod Usually either 'GET' or 'POST' or 'DELETE' - * @param string $method The API method to call - * @param array optional $params The API call parameters, associative + * @param string $httpmethod Usually either 'GET' or 'POST' or 'DELETE' + * @param string $method The API method to call + * @param array $params optional The API call parameters, associative * * @return string Authorization HTTP header */ @@ -762,13 +764,13 @@ class CodebirdSN * @param string $method The API method to call * @param array $params The parameters to send along * - * @return void + * @return string */ protected function _buildMultipart($method, $params) { // well, files will only work in multipart methods if (! $this->_detectMultipart($method)) { - return; + return ''; } // only check specific parameters @@ -783,18 +785,19 @@ class CodebirdSN ); // method might have files? if (! in_array($method, array_keys($possible_files))) { - return; + return ''; } $possible_files = explode(' ', $possible_files[$method]); + $data = ''; + $multipart_border = '--------------------' . $this->_nonce(); $multipart_request = ''; foreach ($params as $key => $value) { // is it an array? if (is_array($value)) { throw new \Exception('Using URL-encoded parameters is not supported for uploading media.'); - continue; } // check for filenames @@ -871,12 +874,12 @@ class CodebirdSN /** * Calls the API using cURL * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $method The API method to call - * @param string $method_template The templated API method to call - * @param array optional $params The parameters to send along - * @param bool optional $multipart Whether to use multipart/form-data - * @param bool optional $app_only_auth Whether to use app-only bearer authentication + * @param string $httpmethod The HTTP method to use for making the request + * @param string $method The API method to call + * @param string $method_template The templated API method to call + * @param array $params optional The parameters to send along + * @param bool $multipart optional Whether to use multipart/form-data + * @param bool $app_only_auth optional Whether to use app-only bearer authentication * * @return mixed The API reply, encoded in the set return_format */ @@ -918,7 +921,7 @@ class CodebirdSN $authorization = 'Authorization: Bearer ' . self::$_oauth_bearer_token; } $request_headers = array(); - if (isset($authorization)) { + if ($authorization !== '') { $request_headers[] = $authorization; $request_headers[] = 'Expect:'; } @@ -959,6 +962,7 @@ class CodebirdSN $httpstatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); $reply = $this->_parseApiReply($method_template, $reply); if ($this->_return_format == CODEBIRD_RETURNFORMAT_OBJECT) { + /** @var object $reply */ $reply->httpstatus = $httpstatus; } elseif ($this->_return_format == CODEBIRD_RETURNFORMAT_ARRAY) { $reply['httpstatus'] = $httpstatus; @@ -972,7 +976,7 @@ class CodebirdSN * @param string $method The method that has been called * @param string $reply The actual reply, JSON-encoded or URL-encoded * - * @return array|object The parsed reply + * @return string|array|object The parsed reply */ protected function _parseApiReply($method, $reply) { diff --git a/statusnet/library/statusnetoauth.php b/statusnet/library/statusnetoauth.php index c9bb0163..da21be58 100644 --- a/statusnet/library/statusnetoauth.php +++ b/statusnet/library/statusnetoauth.php @@ -12,7 +12,7 @@ require_once __DIR__ . DIRECTORY_SEPARATOR . 'twitteroauth.php'; */ class StatusNetOAuth extends TwitterOAuth { - function get_maxlength() + public function get_maxlength() { $config = $this->get($this->host . 'statusnet/config.json'); if (empty($config)) { @@ -21,27 +21,27 @@ class StatusNetOAuth extends TwitterOAuth return $config->site->textlimit; } - function accessTokenURL() + public function accessTokenURL() { return $this->host . 'oauth/access_token'; } - function authenticateURL() + public function authenticateURL() { return $this->host . 'oauth/authenticate'; } - function authorizeURL() + public function authorizeURL() { return $this->host . 'oauth/authorize'; } - function requestTokenURL() + public function requestTokenURL() { return $this->host . 'oauth/request_token'; } - function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) + public function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); $this->host = $apipath; @@ -52,14 +52,9 @@ class StatusNetOAuth extends TwitterOAuth * * Copied here from the TwitterOAuth library and complemented by applying the proxy settings of Friendica * - * @param string $method - * @param string $host - * @param string $path - * @param array $parameters - * - * @return array|object API results + * @return array|object|mixed API results */ - function http($url, $method, $postfields = NULL) + public function http($url, $method, $postfields = NULL) { $this->http_info = []; $ci = curl_init(); diff --git a/statusnet/library/twitteroauth.php b/statusnet/library/twitteroauth.php index b33b5f9d..bab66195 100644 --- a/statusnet/library/twitteroauth.php +++ b/statusnet/library/twitteroauth.php @@ -45,11 +45,11 @@ class TwitterOAuth public $http_header; /** * Contains the last HTTP request info - * @var string + * @var array */ public $http_info; - /** @var OAuthToken */ + /** @var OAuthToken|null */ private $token; /** @var OAuthConsumer */ private $consumer; @@ -59,27 +59,27 @@ class TwitterOAuth /** * Set API URLS */ - function accessTokenURL() + public function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; } - function authenticateURL() + public function authenticateURL() { return 'https://twitter.com/oauth/authenticate'; } - function authorizeURL() + public function authorizeURL() { return 'https://twitter.com/oauth/authorize'; } - function requestTokenURL() + public function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; } - function __construct($consumer_key, $consumer_secret, $oauth_token = null, $oauth_token_secret = null) + public function __construct($consumer_key, $consumer_secret, $oauth_token = null, $oauth_token_secret = null) { $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); @@ -93,10 +93,10 @@ class TwitterOAuth /** * Get a request_token * - * @param callback $oauth_callback + * @param callable $oauth_callback * @return array */ - function getRequestToken($oauth_callback = null) + public function getRequestToken($oauth_callback = null) { $parameters = []; if (!empty($oauth_callback)) { @@ -112,11 +112,9 @@ class TwitterOAuth /** * Get the authorize URL * - * @param array $token - * @param bool $sign_in_with_tumblr * @return string */ - function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) + public function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { if (is_array($token)) { $token = $token['oauth_token']; @@ -139,7 +137,7 @@ class TwitterOAuth * "user_id" => "9436992", * "screen_name" => "abraham") */ - function getAccessToken($oauth_verifier = FALSE) + public function getAccessToken($oauth_verifier = FALSE) { $parameters = []; if (!empty($oauth_verifier)) { @@ -164,7 +162,7 @@ class TwitterOAuth * "screen_name" => "abraham", * "x_auth_expires" => "0") */ - function getXAuthToken($username, $password) + public function getXAuthToken($username, $password) { $parameters = []; $parameters['x_auth_username'] = $username; @@ -184,7 +182,7 @@ class TwitterOAuth * @param array $parameters * @return mixed|string */ - function get($url, $parameters = []) + public function get($url, $parameters = []) { $response = $this->oAuthRequest($url, 'GET', $parameters); if ($this->format === 'json' && $this->decode_json) { @@ -201,7 +199,7 @@ class TwitterOAuth * @param array $parameters * @return mixed|string */ - function post($url, $parameters = []) + public function post($url, $parameters = []) { $response = $this->oAuthRequest($url, 'POST', $parameters); if ($this->format === 'json' && $this->decode_json) { @@ -218,7 +216,7 @@ class TwitterOAuth * @param array $parameters * @return mixed|string */ - function delete($url, $parameters = []) + public function delete($url, $parameters = []) { $response = $this->oAuthRequest($url, 'DELETE', $parameters); if ($this->format === 'json' && $this->decode_json) { @@ -236,7 +234,7 @@ class TwitterOAuth * @param array $parameters * @return mixed|string */ - function oAuthRequest($url, $method, $parameters) + public function oAuthRequest($url, $method, $parameters) { if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { $url = "{$this->host}{$url}.{$this->format}"; @@ -260,9 +258,9 @@ class TwitterOAuth * @param string $url * @param string $method * @param mixed $postfields - * @return string API results + * @return string|bool|mixed API results */ - function http($url, $method, $postfields = null) + public function http($url, $method, $postfields = null) { $this->http_info = []; $ci = curl_init(); @@ -307,7 +305,7 @@ class TwitterOAuth * @param string $header * @return int */ - function getHeader($ch, $header) + public function getHeader($ch, $header) { $i = strpos($header, ':'); if (!empty($i)) { diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index c168d612..8663aaea 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -38,10 +38,8 @@ define('STATUSNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'statusnetoauth.php'; use CodebirdSN\CodebirdSN; -use Friendica\App; use Friendica\Content\Text\Plaintext; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Core\System; use Friendica\Database\DBA; @@ -59,7 +57,7 @@ function statusnet_install() Hook::register('hook_fork', 'addon/statusnet/statusnet.php', 'statusnet_hook_fork'); Hook::register('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); Hook::register('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); - Logger::notice('installed GNU Social'); + DI::logger()->notice('installed GNU Social'); } function statusnet_jot_nets(array &$jotnets_fields) @@ -266,7 +264,7 @@ function statusnet_settings(array &$data) '$request_token' => $request_token ?? null, '$account' => $account ?? null, - '$authenticate_url' => DI::baseUrl()->get() . '/statusnet/connect', + '$authenticate_url' => DI::baseUrl() . '/statusnet/connect', '$consumerkey' => ['statusnet-consumerkey', DI::l10n()->t('OAuth Consumer Key'), '', '', false, ' size="35'], '$consumersecret' => ['statusnet-consumersecret', DI::l10n()->t('OAuth Consumer Secret'), '', '', false, ' size="35'], @@ -296,7 +294,7 @@ function statusnet_hook_fork(array &$b) $post = $b['data']; - if ($post['deleted'] || ($post['created'] !== $post['edited']) || strpos($post['postopts'] ?? '', 'statusnet') === false || ($post['parent'] != $post['id']) || $post['private']) { + if ($post['deleted'] || ($post['created'] !== $post['edited']) || strpos($post['postopts'] ?? '', 'statusnet') === false || ($post['gravity'] != Item::GRAVITY_PARENT) || ($post['private'] == Item::PRIVATE)) { $b['execute'] = false; return; } @@ -336,7 +334,7 @@ function statusnet_post_hook(array &$b) /** * Post to GNU Social */ - if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) { + if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) { return; } @@ -350,13 +348,13 @@ function statusnet_post_hook(array &$b) } // Dont't post if the post doesn't belong to us. - // This is a check for forum postings + // This is a check for group postings $self = DBA::selectFirst('contact', ['id'], ['uid' => $b['uid'], 'self' => true]); if ($b['contact-id'] != $self['id']) { return; } - Logger::notice('GNU Socialpost invoked'); + DI::logger()->notice('GNU Socialpost invoked'); DI::pConfig()->load($b['uid'], 'statusnet'); @@ -366,6 +364,8 @@ function statusnet_post_hook(array &$b) $otoken = DI::pConfig()->get($b['uid'], 'statusnet', 'oauthtoken'); $osecret = DI::pConfig()->get($b['uid'], 'statusnet', 'oauthsecret'); + $iscomment = null; + if ($ckey && $csecret && $otoken && $osecret) { $dent = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); $max_char = $dent->get_maxlength(); // max. length for a dent @@ -406,7 +406,7 @@ function statusnet_post_hook(array &$b) $cb->setToken($otoken, $osecret); $result = $cb->statuses_update($postdata); //$result = $dent->post('statuses/update', $postdata); - Logger::info('statusnet_post send, result: ' . print_r($result, true) . + DI::logger()->info('statusnet_post send, result: ' . print_r($result, true) . "\nmessage: " . $msg . "\nOriginal post: " . print_r($b, true) . "\nPost Data: " . print_r($postdata, true)); if (!empty($result->source)) { @@ -414,9 +414,9 @@ function statusnet_post_hook(array &$b) } if (!empty($result->error)) { - Logger::notice('Send to GNU Social failed: "' . $result->error . '"'); + DI::logger()->notice('Send to GNU Social failed: "' . $result->error . '"'); } elseif ($iscomment) { - Logger::notice('statusnet_post: Update extid ' . $result->id . ' for post id ' . $b['id']); + DI::logger()->notice('statusnet_post: Update extid ' . $result->id . ' for post id ' . $b['id']); Item::update(['extid' => $hostname . '::' . $result->id, 'body' => $result->text], ['id' => $b['id']]); } } @@ -439,11 +439,13 @@ function statusnet_addon_admin_post() $secret = trim($_POST['secret'][$id]); $key = trim($_POST['key'][$id]); //$applicationname = (!empty($_POST['applicationname']) ? Strings::escapeTags(trim($_POST['applicationname'][$id])):''); - if ($sitename != '' && + if ( + $sitename != '' && $apiurl != '' && $secret != '' && $key != '' && - empty($_POST['delete'][$id])) { + empty($_POST['delete'][$id]) + ) { $sites[] = [ 'sitename' => $sitename, diff --git a/tesseract/README.md b/tesseract/README.md new file mode 100644 index 00000000..d0b5eee2 --- /dev/null +++ b/tesseract/README.md @@ -0,0 +1 @@ +To make the addon work, you have to install the tesseract-ocr command line tool. \ No newline at end of file diff --git a/tesseract/composer.json b/tesseract/composer.json new file mode 100644 index 00000000..2a0937c0 --- /dev/null +++ b/tesseract/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "thiagoalessio/tesseract_ocr": "^2.13" + } +} diff --git a/tesseract/composer.lock b/tesseract/composer.lock new file mode 100644 index 00000000..036868e7 --- /dev/null +++ b/tesseract/composer.lock @@ -0,0 +1,66 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "778b5479cb5d2b31b57f40473a87f8eb", + "packages": [ + { + "name": "thiagoalessio/tesseract_ocr", + "version": "2.13.0", + "source": { + "type": "git", + "url": "https://github.com/thiagoalessio/tesseract-ocr-for-php.git", + "reference": "232a8cb9d571992f9bd1e263f2f6909cf6c173a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thiagoalessio/tesseract-ocr-for-php/zipball/232a8cb9d571992f9bd1e263f2f6909cf6c173a1", + "reference": "232a8cb9d571992f9bd1e263f2f6909cf6c173a1", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/php-code-coverage": "^2.2.4 || ^9.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "thiagoalessio\\TesseractOCR\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "thiagoalessio", + "email": "thiagoalessio@me.com" + } + ], + "description": "A wrapper to work with Tesseract OCR inside PHP.", + "keywords": [ + "OCR", + "Tesseract", + "text recognition" + ], + "time": "2023-10-05T21:14:48+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "platform-overrides": { + "php": "7.2" + }, + "plugin-api-version": "1.1.0" +} diff --git a/tesseract/tesseract.php b/tesseract/tesseract.php new file mode 100644 index 00000000..a07c690c --- /dev/null +++ b/tesseract/tesseract.php @@ -0,0 +1,38 @@ + + */ + +use Friendica\Core\Hook; +use Friendica\Core\System; +use Friendica\DI; +use thiagoalessio\TesseractOCR\TesseractOCR; + +require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; + +function tesseract_install() +{ + Hook::register('ocr-detection', __FILE__, 'tesseract_ocr_detection'); + + DI::logger()->notice('installed tesseract'); +} + +function tesseract_ocr_detection(&$media) +{ + $ocr = new TesseractOCR(); + try { + $languages = $ocr->availableLanguages(); + if ($languages) { + /** @phpstan-ignore-next-line ignore call of \thiagoalessio\TesseractOCR\Option::lang() */ + $ocr->lang(implode('+', $languages)); + } + $ocr->tempDir(System::getTempPath()); + $ocr->imageData($media['img_str'], strlen($media['img_str'])); + $media['description'] = $ocr->run(); + } catch (\Throwable $th) { + DI::logger()->info('Error calling TesseractOCR', ['message' => $th->getMessage()]); + } +} diff --git a/twitter/vendor/autoload.php b/tesseract/vendor/autoload.php similarity index 57% rename from twitter/vendor/autoload.php rename to tesseract/vendor/autoload.php index b727d660..1238ecea 100644 --- a/twitter/vendor/autoload.php +++ b/tesseract/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInitTwitterAddon::getLoader(); +return ComposerAutoloaderInit695d781792f754383aa61632167d066e::getLoader(); diff --git a/twitter/vendor/composer/ClassLoader.php b/tesseract/vendor/composer/ClassLoader.php similarity index 100% rename from twitter/vendor/composer/ClassLoader.php rename to tesseract/vendor/composer/ClassLoader.php diff --git a/twitter/vendor/composer/LICENSE b/tesseract/vendor/composer/LICENSE similarity index 100% rename from twitter/vendor/composer/LICENSE rename to tesseract/vendor/composer/LICENSE diff --git a/tesseract/vendor/composer/autoload_classmap.php b/tesseract/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..7a91153b --- /dev/null +++ b/tesseract/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ + array($vendorDir . '/thiagoalessio/tesseract_ocr/src'), +); diff --git a/twitter/vendor/composer/autoload_real.php b/tesseract/vendor/composer/autoload_real.php similarity index 79% rename from twitter/vendor/composer/autoload_real.php rename to tesseract/vendor/composer/autoload_real.php index 35a93688..10af9c56 100644 --- a/twitter/vendor/composer/autoload_real.php +++ b/tesseract/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInitTwitterAddon +class ComposerAutoloaderInit695d781792f754383aa61632167d066e { private static $loader; @@ -22,15 +22,15 @@ class ComposerAutoloaderInitTwitterAddon return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInitTwitterAddon', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit695d781792f754383aa61632167d066e', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInitTwitterAddon', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit695d781792f754383aa61632167d066e', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInitTwitterAddon::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit695d781792f754383aa61632167d066e::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { diff --git a/tesseract/vendor/composer/autoload_static.php b/tesseract/vendor/composer/autoload_static.php new file mode 100644 index 00000000..59b66053 --- /dev/null +++ b/tesseract/vendor/composer/autoload_static.php @@ -0,0 +1,31 @@ + + array ( + 'thiagoalessio\\TesseractOCR\\' => 27, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'thiagoalessio\\TesseractOCR\\' => + array ( + 0 => __DIR__ . '/..' . '/thiagoalessio/tesseract_ocr/src', + ), + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit695d781792f754383aa61632167d066e::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit695d781792f754383aa61632167d066e::$prefixDirsPsr4; + + }, null, ClassLoader::class); + } +} diff --git a/tesseract/vendor/composer/installed.json b/tesseract/vendor/composer/installed.json new file mode 100644 index 00000000..70bcc01c --- /dev/null +++ b/tesseract/vendor/composer/installed.json @@ -0,0 +1,48 @@ +[ + { + "name": "thiagoalessio/tesseract_ocr", + "version": "2.13.0", + "version_normalized": "2.13.0.0", + "source": { + "type": "git", + "url": "https://github.com/thiagoalessio/tesseract-ocr-for-php.git", + "reference": "232a8cb9d571992f9bd1e263f2f6909cf6c173a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thiagoalessio/tesseract-ocr-for-php/zipball/232a8cb9d571992f9bd1e263f2f6909cf6c173a1", + "reference": "232a8cb9d571992f9bd1e263f2f6909cf6c173a1", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/php-code-coverage": "^2.2.4 || ^9.0.0" + }, + "time": "2023-10-05T21:14:48+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "thiagoalessio\\TesseractOCR\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "thiagoalessio", + "email": "thiagoalessio@me.com" + } + ], + "description": "A wrapper to work with Tesseract OCR inside PHP.", + "keywords": [ + "OCR", + "Tesseract", + "text recognition" + ] + } +] diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/.appveyor.yml b/tesseract/vendor/thiagoalessio/tesseract_ocr/.appveyor.yml new file mode 100644 index 00000000..1debc1a1 --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/.appveyor.yml @@ -0,0 +1,14 @@ +--- +build: false + +install: + - ps: Set-Service wuauserv -StartupType Manual + - choco install php + - choco install capture2text --version 3.9 + - choco install composer + - refreshenv + - cd %APPVEYOR_BUILD_FOLDER% + - composer install + +test_script: + - php tests\run.php unit e2e diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/MIT-LICENSE b/tesseract/vendor/thiagoalessio/tesseract_ocr/MIT-LICENSE new file mode 100644 index 00000000..448104d6 --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/MIT-LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012-2021 Thiago Alessio Pereira + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/README.md b/tesseract/vendor/thiagoalessio/tesseract_ocr/README.md new file mode 100644 index 00000000..b828344c --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/README.md @@ -0,0 +1,508 @@ +Tesseract OCR for PHP + +# Tesseract OCR for PHP + +A wrapper to work with Tesseract OCR inside PHP. + +[![CI][ci_badge]][ci] +[![AppVeyor][appveyor_badge]][appveyor] +[![Codacy][codacy_badge]][codacy] +[![Test Coverage][test_coverage_badge]][test_coverage] +
+[![Latest Stable Version][stable_version_badge]][packagist] +[![Total Downloads][total_downloads_badge]][packagist] +[![Monthly Downloads][monthly_downloads_badge]][packagist] + +## Installation + +Via [Composer][]: + + $ composer require thiagoalessio/tesseract_ocr + +:bangbang: **This library depends on [Tesseract OCR][], version _3.02_ or later.** + +
+ +### ![][windows_icon] Note for Windows users + +There are [many ways][tesseract_installation_on_windows] to install +[Tesseract OCR][] on your system, but if you just want something quick to +get up and running, I recommend installing the [Capture2Text][] package with +[Chocolatey][]. + + choco install capture2text --version 3.9 + +:warning: Recent versions of [Capture2Text][] stopped shipping the `tesseract` binary. + +
+ +### ![][macos_icon] Note for macOS users + +With [MacPorts][] you can install support for individual languages, like so: + + $ sudo port install tesseract- + +But that is not possible with [Homebrew][]. It comes only with **English** support +by default, so if you intend to use it for other language, the quickest solution +is to install them all: + + $ brew install tesseract tesseract-lang + +
+ +## Usage + +### Basic usage + + + +```php +use thiagoalessio\TesseractOCR\TesseractOCR; +echo (new TesseractOCR('text.png')) + ->run(); +``` + +``` +The quick brown fox +jumps over +the lazy dog. +``` + +
+ +### Other languages + + + +```php +use thiagoalessio\TesseractOCR\TesseractOCR; +echo (new TesseractOCR('german.png')) + ->lang('deu') + ->run(); +``` + +``` +Bülowstraße +``` + +
+ +### Multiple languages + + + +```php +use thiagoalessio\TesseractOCR\TesseractOCR; +echo (new TesseractOCR('mixed-languages.png')) + ->lang('eng', 'jpn', 'spa') + ->run(); +``` + +``` +I eat すし y Pollo +``` + +
+ +### Inducing recognition + + + +```php +use thiagoalessio\TesseractOCR\TesseractOCR; +echo (new TesseractOCR('8055.png')) + ->allowlist(range('A', 'Z')) + ->run(); +``` + +``` +BOSS +``` + +
+ +### Breaking CAPTCHAs + +Yes, I know some of you might want to use this library for the *noble* purpose +of breaking CAPTCHAs, so please take a look at this comment: + + + +## API + +### run + +Executes a `tesseract` command, optionally receiving an integer as `timeout`, +in case you experience stalled tesseract processes. + +```php +$ocr = new TesseractOCR(); +$ocr->run(); +``` +```php +$ocr = new TesseractOCR(); +$timeout = 500; +$ocr->run($timeout); +``` + +### image + +Define the path of an image to be recognized by `tesseract`. + +```php +$ocr = new TesseractOCR(); +$ocr->image('/path/to/image.png'); +$ocr->run(); +``` + +### imageData + +Set the image to be recognized by `tesseract` from a string, with its size. +This can be useful when dealing with files that are already loaded in memory. +You can easily retrieve the image data and size of an image object : +```php +//Using Imagick +$data = $img->getImageBlob(); +$size = $img->getImageLength(); +//Using GD +ob_start(); +// Note that you can use any format supported by tesseract +imagepng($img, null, 0); +$size = ob_get_length(); +$data = ob_get_clean(); + +$ocr = new TesseractOCR(); +$ocr->imageData($data, $size); +$ocr->run(); +``` + +### executable + +Define a custom location of the `tesseract` executable, +if by any reason it is not present in the `$PATH`. + +```php +echo (new TesseractOCR('img.png')) + ->executable('/path/to/tesseract') + ->run(); +``` + +### version + +Returns the current version of `tesseract`. + +```php +echo (new TesseractOCR())->version(); +``` + +### availableLanguages + +Returns a list of available languages/scripts. + +```php +foreach((new TesseractOCR())->availableLanguages() as $lang) echo $lang; +``` + +__More info:__ + +### tessdataDir + +Specify a custom location for the tessdata directory. + +```php +echo (new TesseractOCR('img.png')) + ->tessdataDir('/path') + ->run(); +``` + +### userWords + +Specify the location of user words file. + +This is a plain text file containing a list of words that you want to be +considered as a normal dictionary words by `tesseract`. + +Useful when dealing with contents that contain technical terminology, jargon, +etc. + +``` +$ cat /path/to/user-words.txt +foo +bar +``` + +```php +echo (new TesseractOCR('img.png')) + ->userWords('/path/to/user-words.txt') + ->run(); +``` + +### userPatterns + +Specify the location of user patterns file. + +If the contents you are dealing with have known patterns, this option can help +a lot tesseract's recognition accuracy. + +``` +$ cat /path/to/user-patterns.txt' +1-\d\d\d-GOOG-441 +www.\n\\\*.com +``` + +```php +echo (new TesseractOCR('img.png')) + ->userPatterns('/path/to/user-patterns.txt') + ->run(); +``` + +### lang + +Define one or more languages to be used during the recognition. +A complete list of available languages can be found at: + + +__Tip from [@daijiale][]:__ Use the combination `->lang('chi_sim', 'chi_tra')` +for proper recognition of Chinese. + +```php + echo (new TesseractOCR('img.png')) + ->lang('lang1', 'lang2', 'lang3') + ->run(); +``` + +### psm + +Specify the Page Segmentation Method, which instructs `tesseract` how to +interpret the given image. + +__More info:__ + +```php +echo (new TesseractOCR('img.png')) + ->psm(6) + ->run(); +``` + +### oem + +Specify the OCR Engine Mode. (see `tesseract --help-oem`) + +```php +echo (new TesseractOCR('img.png')) + ->oem(2) + ->run(); +``` + +### dpi + +Specify the image DPI. It is useful if your image does not contain this information in its metadata. + +```php +echo (new TesseractOCR('img.png')) + ->dpi(300) + ->run(); +``` + +### allowlist + +This is a shortcut for `->config('tessedit_char_whitelist', 'abcdef....')`. + +```php +echo (new TesseractOCR('img.png')) + ->allowlist(range('a', 'z'), range(0, 9), '-_@') + ->run(); +``` + +### configFile + +Specify a config file to be used. It can either be the path to your own +config file or the name of one of the predefined config files: + + +```php +echo (new TesseractOCR('img.png')) + ->configFile('hocr') + ->run(); +``` + +### setOutputFile + +Specify an Outputfile to be used. Be aware: If you set an outputfile then +the option `withoutTempFiles` is ignored. +Tempfiles are written (and deleted) even if `withoutTempFiles = true`. + +In combination with `configFile` you are able to get the `hocr`, `tsv` or +`pdf` files. + +```php +echo (new TesseractOCR('img.png')) + ->configFile('pdf') + ->setOutputFile('/PATH_TO_MY_OUTPUTFILE/searchable.pdf') + ->run(); +``` + +### digits + +Shortcut for `->configFile('digits')`. + +```php +echo (new TesseractOCR('img.png')) + ->digits() + ->run(); +``` + +### hocr + +Shortcut for `->configFile('hocr')`. + +```php +echo (new TesseractOCR('img.png')) + ->hocr() + ->run(); +``` + +### pdf + +Shortcut for `->configFile('pdf')`. + +```php +echo (new TesseractOCR('img.png')) + ->pdf() + ->run(); +``` + +### quiet + +Shortcut for `->configFile('quiet')`. + +```php +echo (new TesseractOCR('img.png')) + ->quiet() + ->run(); +``` + +### tsv + +Shortcut for `->configFile('tsv')`. + +```php +echo (new TesseractOCR('img.png')) + ->tsv() + ->run(); +``` + +### txt + +Shortcut for `->configFile('txt')`. + +```php +echo (new TesseractOCR('img.png')) + ->txt() + ->run(); +``` + +### tempDir + +Define a custom directory to store temporary files generated by tesseract. +Make sure the directory actually exists and the user running `php` is allowed +to write in there. + +```php +echo (new TesseractOCR('img.png')) + ->tempDir('./my/custom/temp/dir') + ->run(); +``` + +### withoutTempFiles + +Specify that `tesseract` should output the recognized text without writing to temporary files. +The data is gathered from the standard output of `tesseract` instead. + +```php +echo (new TesseractOCR('img.png')) + ->withoutTempFiles() + ->run(); +``` + +### Other options + +Any configuration option offered by Tesseract can be used like that: + +```php +echo (new TesseractOCR('img.png')) + ->config('config_var', 'value') + ->config('other_config_var', 'other value') + ->run(); +``` + +Or like that: + +```php +echo (new TesseractOCR('img.png')) + ->configVar('value') + ->otherConfigVar('other value') + ->run(); +``` + +__More info:__ + +### Thread-limit + +Sometimes, it may be useful to limit the number of threads that tesseract is +allowed to use (e.g. in [this case](https://github.com/tesseract-ocr/tesseract/issues/898)). +Set the maxmium number of threads as param for the `run` function: + +```php +echo (new TesseractOCR('img.png')) + ->threadLimit(1) + ->run(); +``` + +## How to contribute + +You can contribute to this project by: + +* Opening an [Issue][] if you found a bug or wish to propose a new feature; +* Placing a [Pull Request][] with code that fix a bug, missing/wrong documentation + or implement a new feature; + +Just make sure you take a look at our [Code of Conduct][] and [Contributing][] +instructions. + +## License + +tesseract-ocr-for-php is released under the [MIT License][]. + + +

Made with love in Berlin

+ +[ci_badge]: https://github.com/thiagoalessio/tesseract-ocr-for-php/workflows/CI/badge.svg?event=push&branch=main +[ci]: https://github.com/thiagoalessio/tesseract-ocr-for-php/actions?query=workflow%3ACI +[appveyor_badge]: https://ci.appveyor.com/api/projects/status/xwy5ls0798iwcim3/branch/main?svg=true +[appveyor]: https://ci.appveyor.com/project/thiagoalessio/tesseract-ocr-for-php/branch/main +[codacy_badge]: https://app.codacy.com/project/badge/Grade/a81aa10012874f23a57df5b492d835f2 +[codacy]: https://www.codacy.com/gh/thiagoalessio/tesseract-ocr-for-php/dashboard +[test_coverage_badge]: https://codecov.io/gh/thiagoalessio/tesseract-ocr-for-php/branch/main/graph/badge.svg?token=Y0VnrqiSIf +[test_coverage]: https://codecov.io/gh/thiagoalessio/tesseract-ocr-for-php +[stable_version_badge]: https://img.shields.io/packagist/v/thiagoalessio/tesseract_ocr.svg +[packagist]: https://packagist.org/packages/thiagoalessio/tesseract_ocr +[total_downloads_badge]: https://img.shields.io/packagist/dt/thiagoalessio/tesseract_ocr.svg +[monthly_downloads_badge]: https://img.shields.io/packagist/dm/thiagoalessio/tesseract_ocr.svg +[Tesseract OCR]: https://github.com/tesseract-ocr/tesseract +[Composer]: http://getcomposer.org/ +[windows_icon]: https://thiagoalessio.github.io/tesseract-ocr-for-php/images/windows-18.svg +[macos_icon]: https://thiagoalessio.github.io/tesseract-ocr-for-php/images/apple-18.svg +[tesseract_installation_on_windows]: https://github.com/tesseract-ocr/tesseract/wiki#windows +[Capture2Text]: https://chocolatey.org/packages/capture2text +[Chocolatey]: https://chocolatey.org +[MacPorts]: https://www.macports.org +[Homebrew]: https://brew.sh +[@daijiale]: https://github.com/daijiale +[HOCR]: https://github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage#hocr-output +[TSV]: https://github.com/tesseract-ocr/tesseract/wiki/Command-Line-Usage#tsv-output-currently-available-in-305-dev-in-master-branch-on-github +[Issue]: https://github.com/thiagoalessio/tesseract-ocr-for-php/issues +[Pull Request]: https://github.com/thiagoalessio/tesseract-ocr-for-php/pulls +[Code of Conduct]: https://github.com/thiagoalessio/tesseract-ocr-for-php/blob/main/.github/CODE_OF_CONDUCT.md +[Contributing]: https://github.com/thiagoalessio/tesseract-ocr-for-php/blob/main/.github/CONTRIBUTING.md +[MIT License]: https://github.com/thiagoalessio/tesseract-ocr-for-php/blob/main/MIT-LICENSE diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/codecov.yml b/tesseract/vendor/thiagoalessio/tesseract_ocr/codecov.yml new file mode 100644 index 00000000..8fd4c921 --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/codecov.yml @@ -0,0 +1,4 @@ +fixes: +- "/home/runner/work/tesseract-ocr-for-php/tesseract-ocr-for-php/::" +- "/Users/runner/work/tesseract-ocr-for-php/tesseract-ocr-for-php/::" +- "C:\\projects\\tesseract-ocr-for-php\\::" diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/composer.json b/tesseract/vendor/thiagoalessio/tesseract_ocr/composer.json new file mode 100644 index 00000000..9a07e6d5 --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/composer.json @@ -0,0 +1,35 @@ +{ + "name": "thiagoalessio/tesseract_ocr", + "description": "A wrapper to work with Tesseract OCR inside PHP.", + "version": "2.13.0", + "type": "library", + "keywords": ["Tesseract", "OCR", "text recognition"], + "license": "MIT", + "authors": [ + { + "name": "thiagoalessio", + "email": "thiagoalessio@me.com" + } + ], + "support": { + "issues": "https://github.com/thiagoalessio/tesseract-ocr-for-php/issues", + "irc": "irc://irc.freenode.net/tesseract-ocr-for-php", + "source": "https://github.com/thiagoalessio/tesseract-ocr-for-php" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/php-code-coverage": "^2.2.4 || ^9.0.0" + }, + "autoload": { + "psr-4": { + "thiagoalessio\\TesseractOCR\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "thiagoalessio\\TesseractOCR\\Tests\\": "tests/" + } + } +} diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/src/Command.php b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/Command.php new file mode 100644 index 00000000..ad123e82 --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/Command.php @@ -0,0 +1,80 @@ +image = $image; + $this->outputFile = $outputFile; + } + + public function build() { return "$this"; } + + public function __toString() + { + $cmd = array(); + if ($this->threadLimit) $cmd[] = "OMP_THREAD_LIMIT={$this->threadLimit}"; + $cmd[] = self::escape($this->executable); + $cmd[] = $this->useFileAsInput ? self::escape($this->image) : "-"; + $cmd[] = $this->useFileAsOutput ? self::escape($this->getOutputFile(false)) : "-"; + + $version = $this->getTesseractVersion(); + + foreach ($this->options as $option) { + $cmd[] = is_callable($option) ? $option($version) : "$option"; + } + if ($this->configFile) $cmd[] = $this->configFile; + + return join(' ', $cmd); + } + + public function getOutputFile($withExt=true) + { + if (!$this->outputFile) + $this->outputFile = $this->getTempDir() + .DIRECTORY_SEPARATOR + .basename(tempnam($this->getTempDir(), 'ocr')); + if (!$withExt) return $this->outputFile; + + $hasCustomExt = array('hocr', 'tsv', 'pdf'); + $ext = in_array($this->configFile, $hasCustomExt) ? $this->configFile : 'txt'; + return "{$this->outputFile}.{$ext}"; + } + + public function getTempDir() + { + return $this->tempDir ?: sys_get_temp_dir(); + } + + public function getTesseractVersion() + { + exec(self::escape($this->executable).' --version 2>&1', $output); + $outputParts = explode(' ', $output[0]); + return $outputParts[1]; + } + + public function getAvailableLanguages() + { + exec(self::escape($this->executable) . ' --list-langs 2>&1', $output); + array_shift($output); + sort($output); + return $output; + } + + public static function escape($str) + { + $charlist = strtoupper(substr(PHP_OS, 0, 3)) == 'WIN' ? '$"`' : '$"\\`'; + return '"'.addcslashes($str, $charlist).'"'; + } +} diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/src/FeatureNotAvailableException.php b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/FeatureNotAvailableException.php new file mode 100644 index 00000000..12264f5c --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/FeatureNotAvailableException.php @@ -0,0 +1,7 @@ + NUL 2>&1' + : 'type '.Command::escape($executable).' > /dev/null 2>&1'; + system($cmd, $exitCode); + + if ($exitCode == 0) return; + + $currentPath = getenv('PATH'); + $msg = array(); + $msg[] = "Error! The command \"$executable\" was not found."; + $msg[] = ''; + $msg[] = 'Make sure you have Tesseract OCR installed on your system:'; + $msg[] = 'https://github.com/tesseract-ocr/tesseract'; + $msg[] = ''; + $msg[] = "The current \$PATH is $currentPath"; + $msg = join(PHP_EOL, $msg); + + throw new TesseractNotFoundException($msg); + } + + public static function checkCommandExecution($command, $stdout, $stderr) + { + if ($command->useFileAsOutput) { + $file = $command->getOutputFile(); + if (file_exists($file) && filesize($file) > 0) return; + } + + if (!$command->useFileAsOutput && $stdout) { + return; + } + + $msg = array(); + $msg[] = 'Error! The command did not produce any output.'; + $msg[] = ''; + $msg[] = 'Generated command:'; + $msg[] = "$command"; + $msg[] = ''; + $msg[] = 'Returned message:'; + $arrayStderr = explode(PHP_EOL, $stderr); + array_pop($arrayStderr); + $msg = array_merge($msg, $arrayStderr); + $msg = join(PHP_EOL, $msg); + + throw new UnsuccessfulCommandException($msg); + } + + public static function checkProcessCreation($processHandle, $command) + { + if ($processHandle !== FALSE) return; + + $msg = array(); + $msg[] = 'Error! The command could not be launched.'; + $msg[] = ''; + $msg[] = 'Generated command:'; + $msg[] = "$command"; + $msg = join(PHP_EOL, $msg); + + throw new UnsuccessfulCommandException($msg); + } + + public static function checkTesseractVersion($expected, $action, $command) + { + $actual = $command->getTesseractVersion(); + + if ($actual[0] === 'v') + $actual = substr($actual, 1); + + if (version_compare($actual, $expected, ">=")) return; + + $msg = array(); + $msg[] = "Error! $action is not available this tesseract version"; + $msg[] = "Required version is $expected, actual version is $actual"; + $msg[] = ''; + $msg[] = 'Generated command:'; + $msg[] = "$command"; + $msg = join(PHP_EOL, $msg); + + throw new FeatureNotAvailableException($msg); + } + + public static function checkWritePermissions($path) + { + if (!is_dir(dirname($path))) mkdir(dirname($path)); + $writableDirectory = is_writable(dirname($path)); + $writableFile = true; + if (file_exists($path)) $writableFile = is_writable($path); + if ($writableFile && $writableDirectory) return; + + $msg = array(); + $msg[] = "Error! No permission to write to $path"; + $msg[] = "Make sure you have the right outputFile and permissions " + ."to write to the folder"; + $msg[] = ''; + $msg = join(PHP_EOL, $msg); + + throw new NoWritePermissionsForOutputFile($msg); + } +} diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/src/ImageNotFoundException.php b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/ImageNotFoundException.php new file mode 100644 index 00000000..2ba7df64 --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/ImageNotFoundException.php @@ -0,0 +1,7 @@ +=') ? '-' : '')."-psm $psm"; + }; + } + + public static function oem($oem) + { + return function($version) use ($oem) { + Option::checkMinVersion('3.05', $version, 'oem'); + return "--oem $oem"; + }; + } + + public static function dpi($dpi) + { + return function() use ($dpi) { + return "--dpi $dpi"; + }; + } + + public static function userWords($path) + { + return function($version) use ($path) { + Option::checkMinVersion('3.04', $version, 'user-words'); + return '--user-words "'.addcslashes($path, '\\"').'"'; + }; + } + + public static function userPatterns($path) + { + return function($version) use ($path) { + Option::checkMinVersion('3.04', $version, 'user-patterns'); + return '--user-patterns "'.addcslashes($path, '\\"').'"'; + }; + } + + public static function tessdataDir($path) + { + return function() use ($path) { + return '--tessdata-dir "'.addcslashes($path, '\\"').'"'; + }; + } + + public static function lang() + { + $languages = func_get_args(); + return function() use ($languages) { + return '-l '.join('+', $languages); + }; + } + + public static function config($var, $value) + { + return function() use($var, $value) { + $snakeCase = function($str) { + return strtolower(preg_replace('/([A-Z])+/', '_$1', $str)); + }; + $pair = $snakeCase($var).'='.$value; + return '-c "'.addcslashes($pair, '\\"').'"'; + }; + } + + public static function checkMinVersion($minVersion, $currVersion, $option) + { + $minVersion = preg_replace('/^v/', '', $minVersion); + $currVersion = preg_replace('/^v/', '', $currVersion); + if (!version_compare($currVersion, $minVersion, '<')) return; + $msg = "$option option is only available on Tesseract $minVersion or later."; + $msg.= PHP_EOL."Your version of Tesseract is $currVersion"; + throw new \Exception($msg); + } +} diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/src/Process.php b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/Process.php new file mode 100644 index 00000000..38460eb0 --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/Process.php @@ -0,0 +1,83 @@ +startTime = microtime(true); + $streamDescriptors = [ + array("pipe", "r"), + array("pipe", "w"), + array("pipe", "w") + ]; + $this->handle = proc_open($command, $streamDescriptors, $pipes, NULL, NULL, ["bypass_shell" => true]); + list($this->stdin, $this->stdout, $this->stderr) = $pipes; + + FriendlyErrors::checkProcessCreation($this->handle, $command); + + //This is can avoid deadlock on some cases (when stderr buffer is filled up before writing to stdout and vice-versa) + stream_set_blocking($this->stdout, 0); + stream_set_blocking($this->stderr, 0); + } + + public function write($data, $len) + { + $total = 0; + do + { + $res = fwrite($this->stdin, substr($data, $total)); + } while($res && $total += $res < $len); + return $total === $len; + } + + + public function wait($timeout = 0) + { + $running = true; + $data = ["out" => "", "err" => ""]; + while (($running === true) && !$this->hasTimedOut($timeout)) + { + $data["out"] .= fread($this->stdout, 8192); + $data["err"] .= fread($this->stderr, 8192); + $procInfo = proc_get_status($this->handle); + $running = $procInfo["running"]; + if ($running) { + usleep(1000); // Sleep 1ms to yield CPU time + } + } + return $data; + } + + public function close() + { + $this->closeStream($this->stdin); + $this->closeStream($this->stdout); + $this->closeStream($this->stderr); + return proc_close($this->handle); + } + + public function closeStdin() + { + $this->closeStream($this->stdin); + } + + private function hasTimedOut($timeout) + { + return (($timeout > 0) && ($this->startTime + $timeout < microtime(true))); + } + + private function closeStream(&$stream) + { + if ($stream !== NULL) + { + fclose($stream); + $stream = NULL; + } + } +} diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/src/TesseractNotFoundException.php b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/TesseractNotFoundException.php new file mode 100644 index 00000000..7b7f0c1e --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/TesseractNotFoundException.php @@ -0,0 +1,7 @@ +command = $command ?: new Command; + $this->image("$image"); + } + + public function run($timeout = 0) + { + try { + if ($this->outputFile !== null) { + FriendlyErrors::checkWritePermissions($this->outputFile); + $this->command->useFileAsOutput = true; + } + + FriendlyErrors::checkTesseractPresence($this->command->executable); + if ($this->command->useFileAsInput) { + FriendlyErrors::checkImagePath($this->command->image); + } + + $process = new Process("{$this->command}"); + + if (!$this->command->useFileAsInput) { + $process->write($this->command->image, $this->command->imageSize); + $process->closeStdin(); + } + $output = $process->wait($timeout); + + FriendlyErrors::checkCommandExecution($this->command, $output["out"], $output["err"]); + } + catch (TesseractOcrException $e) { + if ($this->command->useFileAsOutput) $this->cleanTempFiles(); + throw $e; + } + + if ($this->command->useFileAsOutput) { + $text = file_get_contents($this->command->getOutputFile()); + + if ($this->outputFile !== null) { + rename($this->command->getOutputFile(), $this->outputFile); + } + + $this->cleanTempFiles(); + } + else + $text = $output["out"]; + + return trim($text, " \t\n\r\0\x0A\x0B\x0C"); + } + + public function imageData($image, $size) + { + FriendlyErrors::checkTesseractVersion("3.03-rc1", "Reading image data from stdin", $this->command); + $this->command->useFileAsInput = false; + $this->command->image = $image; + $this->command->imageSize = $size; + return $this; + } + + public function withoutTempFiles() + { + FriendlyErrors::checkTesseractVersion("3.03-rc1", "Writing to stdout (without using temp files)", $this->command); + $this->command->useFileAsOutput = false; + return $this; + } + + public function image($image) + { + $this->command->image = $image; + return $this; + } + + public function executable($executable) + { + FriendlyErrors::checkTesseractPresence($executable); + $this->command->executable = $executable; + return $this; + } + + public function configFile($configFile) + { + $this->command->configFile = $configFile; + return $this; + } + + public function tempDir($tempDir) + { + $this->command->tempDir = $tempDir; + return $this; + } + + public function threadLimit($limit) + { + $this->command->threadLimit = $limit; + return $this; + } + + // @deprecated + public function format($fmt) { return $this->configFile($fmt); } + + public function setOutputFile($path) { + $this->outputFile = $path; + return $this; + } + + public function allowlist() + { + $concat = function ($arg) { return is_array($arg) ? join('', $arg) : $arg; }; + $allowlist = join('', array_map($concat, func_get_args())); + $this->command->options[] = Option::config('tessedit_char_whitelist', $allowlist); + return $this; + } + + public function whitelist() + { + $warningMsg = 'Notice: whitelist is deprecated, use allowlist instead.'; + trigger_error($warningMsg, E_USER_NOTICE); + + $concat = function ($arg) { return is_array($arg) ? join('', $arg) : $arg; }; + $allowlist = join('', array_map($concat, func_get_args())); + return $this->allowlist($allowlist); + } + + public function version() + { + return $this->command->getTesseractVersion(); + } + + public function availableLanguages() + { + return $this->command->getAvailableLanguages(); + } + + public function __call($method, $args) + { + if ($this->isConfigFile($method)) return $this->configFile($method); + if ($this->isOption($method)) { + $option = $this->getOptionClassName().'::'.$method; + $this->command->options[] = call_user_func_array($option, $args); + return $this; + } + $arg = empty($args) ? null : $args[0]; + $this->command->options[] = Option::config($method, $arg); + return $this; + } + + private function isConfigFile($name) + { + return in_array($name, array('digits', 'hocr', 'pdf', 'quiet', 'tsv', 'txt')); + } + + private function isOption($name) + { + return in_array($name, get_class_methods($this->getOptionClassName())); + } + + private function getOptionClassName() + { + return __NAMESPACE__.'\\Option'; + } + + private function cleanTempFiles() + { + if (file_exists($this->command->getOutputFile(false))) { + unlink($this->command->getOutputFile(false)); + } + if (file_exists($this->command->getOutputFile(true))) { + unlink($this->command->getOutputFile(true)); + } + } +} diff --git a/tesseract/vendor/thiagoalessio/tesseract_ocr/src/TesseractOcrException.php b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/TesseractOcrException.php new file mode 100644 index 00000000..8c078616 --- /dev/null +++ b/tesseract/vendor/thiagoalessio/tesseract_ocr/src/TesseractOcrException.php @@ -0,0 +1,7 @@ +, 2014 +# Aditoo, 2018 +# michal_s , 2014 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2014-07-28 18:16+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 12:56+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: testdrive.php:67 +#: testdrive.php:64 msgid "Administrator" msgstr "Administrátor" -#: testdrive.php:94 +#: testdrive.php:89 #, php-format msgid "Your account on %s will expire in a few days." msgstr "Platnost Vašeho účtu na %s vyprší během několika dní." -#: testdrive.php:95 +#: testdrive.php:90 msgid "Your Friendica test account is about to expire." -msgstr "Váš Friendica testovací účet brzy vyprší." +msgstr "Váš testovací účet na Friendica brzy vyprší." -#: testdrive.php:96 +#: testdrive.php:91 #, php-format msgid "" "Hi %1$s,\n" "\n" -"Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at http://dir.friendica.com/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com." -msgstr "Ahoj %1$s,\n\nplatnost Vašeho testovacího účtu na %2$s vyprší za méně než 5 dní. Doufáme, že jste si testovací jízdu užili a že se Vám povedlo najít trvalý Friendica server pro Vaši integrovanou sociální komunikaci. List veřejně dostupných serverů je k dispozici na http://dir.friendica.com/siteinfo - a pro více informací, jak si vytvořit svůj vlastní server, navštivte stránky projektu Friendica na adrese http://friendica.com." +"Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca." +msgstr "" diff --git a/testdrive/lang/cs/strings.php b/testdrive/lang/cs/strings.php index 7eb1b5b0..cc68b58b 100644 --- a/testdrive/lang/cs/strings.php +++ b/testdrive/lang/cs/strings.php @@ -3,13 +3,8 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} $a->strings['Administrator'] = 'Administrátor'; $a->strings['Your account on %s will expire in a few days.'] = 'Platnost Vašeho účtu na %s vyprší během několika dní.'; -$a->strings['Your Friendica test account is about to expire.'] = 'Váš Friendica testovací účet brzy vyprší.'; -$a->strings['Hi %1$s, - -Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at http://dir.friendica.com/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com.'] = 'Ahoj %1$s, - -platnost Vašeho testovacího účtu na %2$s vyprší za méně než 5 dní. Doufáme, že jste si testovací jízdu užili a že se Vám povedlo najít trvalý Friendica server pro Vaši integrovanou sociální komunikaci. List veřejně dostupných serverů je k dispozici na http://dir.friendica.com/siteinfo - a pro více informací, jak si vytvořit svůj vlastní server, navštivte stránky projektu Friendica na adrese http://friendica.com.'; +$a->strings['Your Friendica test account is about to expire.'] = 'Váš testovací účet na Friendica brzy vyprší.'; diff --git a/testdrive/lang/de/messages.po b/testdrive/lang/de/messages.po index f91b1407..8d7e7977 100644 --- a/testdrive/lang/de/messages.po +++ b/testdrive/lang/de/messages.po @@ -11,9 +11,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-03-29 05:42+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 12:56+0000\n" +"Last-Translator: Tobias Diekershoff , 2021\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/testdrive/lang/it/messages.po b/testdrive/lang/it/messages.po index 42a4a6ab..f393766e 100644 --- a/testdrive/lang/it/messages.po +++ b/testdrive/lang/it/messages.po @@ -11,14 +11,14 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-04-19 11:11+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"PO-Revision-Date: 2014-06-23 12:56+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: testdrive.php:64 msgid "Administrator" diff --git a/testdrive/lang/it/strings.php b/testdrive/lang/it/strings.php index 8923cc15..8faf5a06 100644 --- a/testdrive/lang/it/strings.php +++ b/testdrive/lang/it/strings.php @@ -3,7 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Administrator'] = 'Amministratore'; $a->strings['Your account on %s will expire in a few days.'] = 'Il tuo account su %s scadrà tra pochi giorni.'; diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php index d9bc0b3b..90fb5918 100644 --- a/testdrive/testdrive.php +++ b/testdrive/testdrive.php @@ -6,7 +6,6 @@ * Author: Mike Macgirvin */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Search; use Friendica\Database\DBA; @@ -27,7 +26,7 @@ function testdrive_install() function testdrive_load_config(ConfigFileManager $loader) { - DI::app()->getConfigCache()->load($loader->loadAddonConfig('testdrive'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('testdrive'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); } function testdrive_globaldir_update(array &$b) @@ -59,8 +58,8 @@ function testdrive_cron($b) 'uid' => $rr['uid'], 'system_type' => 'testdrive_expire', 'source_name' => DI::l10n()->t('Administrator'), - 'source_link' => DI::baseUrl()->get(), - 'source_photo' => DI::baseUrl()->get() . '/images/person-80.jpg', + 'source_link' => DI::baseUrl(), + 'source_photo' => DI::baseUrl() . '/images/person-80.jpg', ]); DBA::update('user', ['expire_notification_sent' => DateTimeFormat::utcNow()], ['uid' => $rr['uid']]); @@ -76,7 +75,7 @@ function testdrive_enotify(array &$b) { if (!empty($b['params']) && $b['params']['type'] == Notification\Type::SYSTEM && !empty($b['params']['system_type']) && $b['params']['system_type'] === 'testdrive_expire') { - $b['itemlink'] = DI::baseUrl()->get(); + $b['itemlink'] = DI::baseUrl(); $b['epreamble'] = $b['preamble'] = DI::l10n()->t('Your account on %s will expire in a few days.', DI::config()->get('system', 'sitename')); $b['subject'] = DI::l10n()->t('Your Friendica test account is about to expire.'); $b['body'] = DI::l10n()->t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca.", $b['params']['to_name'], "[url=".DI::config()->get('system', 'url')."]".DI::config()->get('config', 'sitename')."[/url]", Search::getGlobalDirectory()); diff --git a/tictac/lang/cs/messages.po b/tictac/lang/cs/messages.po index 7e2725da..cd720924 100644 --- a/tictac/lang/cs/messages.po +++ b/tictac/lang/cs/messages.po @@ -4,71 +4,72 @@ # # # Translators: -# Michal Šupler , 2014 +# Aditoo, 2018 +# michal_s , 2014 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2014-07-28 18:18+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 12:57+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: tictac.php:20 +#: tictac.php:16 msgid "Three Dimensional Tic-Tac-Toe" -msgstr "Trojrozměrné Tic-Tac-Toe" +msgstr "Trojrozměrné piškvorky" -#: tictac.php:53 +#: tictac.php:49 msgid "3D Tic-Tac-Toe" -msgstr "3D Tic-Tac-Toe" +msgstr "3D piškvorky" -#: tictac.php:58 +#: tictac.php:54 msgid "New game" msgstr "Nová hra" -#: tictac.php:59 +#: tictac.php:55 msgid "New game with handicap" msgstr "Nová hra s handicapem" -#: tictac.php:60 +#: tictac.php:56 msgid "" "Three dimensional tic-tac-toe is just like the traditional game except that " "it is played on multiple levels simultaneously. " -msgstr "Trojrozměrné tic-tac-toe je podobná této tradiční hře kromě toho, že se hraje na více úrovních současně." +msgstr "Trojrozměrné piškvorky jsou podobné této tradiční hře kromě toho, že se hrají na více úrovních současně." -#: tictac.php:61 +#: tictac.php:57 msgid "" "In this case there are three levels. You win by getting three in a row on " "any level, as well as up, down, and diagonally across the different levels." msgstr "V tomto případě existují tři úrovně. Vyhrajete tím, že dostane tři v řadě na jakékoli úrovni, stejně jako nahoru, dolů a šikmo na různých úrovních." -#: tictac.php:63 +#: tictac.php:59 msgid "" "The handicap game disables the center position on the middle level because " "the player claiming this square often has an unfair advantage." msgstr "Hra s handicapem zakáže centrální pozici na střední úrovni, protože hráč zaujímající tuto polohu má často nespravedlivou výhodu." -#: tictac.php:182 +#: tictac.php:178 msgid "You go first..." msgstr "Vy začněte ..." -#: tictac.php:187 +#: tictac.php:183 msgid "I'm going first this time..." msgstr "Tentokrát začnu já..." -#: tictac.php:193 +#: tictac.php:189 msgid "You won!" -msgstr "Vyhrál jste!" +msgstr "Vyhrál/a jste!" -#: tictac.php:199 tictac.php:224 +#: tictac.php:195 tictac.php:220 msgid "\"Cat\" game!" -msgstr "Pat hra!" +msgstr "Remíza!" -#: tictac.php:222 +#: tictac.php:218 msgid "I won!" msgstr "Vyhrál jsem!" diff --git a/tictac/lang/cs/strings.php b/tictac/lang/cs/strings.php index f128aeda..f895d630 100644 --- a/tictac/lang/cs/strings.php +++ b/tictac/lang/cs/strings.php @@ -3,17 +3,17 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} -$a->strings['Three Dimensional Tic-Tac-Toe'] = 'Trojrozměrné Tic-Tac-Toe'; -$a->strings['3D Tic-Tac-Toe'] = '3D Tic-Tac-Toe'; +$a->strings['Three Dimensional Tic-Tac-Toe'] = 'Trojrozměrné piškvorky'; +$a->strings['3D Tic-Tac-Toe'] = '3D piškvorky'; $a->strings['New game'] = 'Nová hra'; $a->strings['New game with handicap'] = 'Nová hra s handicapem'; -$a->strings['Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '] = 'Trojrozměrné tic-tac-toe je podobná této tradiční hře kromě toho, že se hraje na více úrovních současně.'; +$a->strings['Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '] = 'Trojrozměrné piškvorky jsou podobné této tradiční hře kromě toho, že se hrají na více úrovních současně.'; $a->strings['In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.'] = 'V tomto případě existují tři úrovně. Vyhrajete tím, že dostane tři v řadě na jakékoli úrovni, stejně jako nahoru, dolů a šikmo na různých úrovních.'; $a->strings['The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.'] = 'Hra s handicapem zakáže centrální pozici na střední úrovni, protože hráč zaujímající tuto polohu má často nespravedlivou výhodu.'; $a->strings['You go first...'] = 'Vy začněte ...'; $a->strings['I\'m going first this time...'] = 'Tentokrát začnu já...'; -$a->strings['You won!'] = 'Vyhrál jste!'; -$a->strings['"Cat" game!'] = 'Pat hra!'; +$a->strings['You won!'] = 'Vyhrál/a jste!'; +$a->strings['"Cat" game!'] = 'Remíza!'; $a->strings['I won!'] = 'Vyhrál jsem!'; diff --git a/tictac/lang/de/messages.po b/tictac/lang/de/messages.po index da67a6f7..351aaf32 100644 --- a/tictac/lang/de/messages.po +++ b/tictac/lang/de/messages.po @@ -11,9 +11,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2019-02-11 13:44+0000\n" -"Last-Translator: Ulf Rompe \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 12:57+0000\n" +"Last-Translator: Ulf Rompe , 2019\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/tictac/lang/it/messages.po b/tictac/lang/it/messages.po index fc0458f1..e8f01e49 100644 --- a/tictac/lang/it/messages.po +++ b/tictac/lang/it/messages.po @@ -9,66 +9,66 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2017-09-20 06:09+0000\n" -"Last-Translator: fabrixxm \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 12:57+0000\n" +"Last-Translator: fabrixxm , 2014\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: tictac.php:20 +#: tictac.php:16 msgid "Three Dimensional Tic-Tac-Toe" msgstr "Tic-Tac-Toe tridimensionale" -#: tictac.php:53 +#: tictac.php:49 msgid "3D Tic-Tac-Toe" msgstr "3D Tic-Tac-Toe" -#: tictac.php:58 +#: tictac.php:54 msgid "New game" msgstr "Nuova partita" -#: tictac.php:59 +#: tictac.php:55 msgid "New game with handicap" msgstr "Nuova partita con handicap" -#: tictac.php:60 +#: tictac.php:56 msgid "" "Three dimensional tic-tac-toe is just like the traditional game except that " "it is played on multiple levels simultaneously. " msgstr "Tic-tac-toe tridimensionale è come il gioco tradizionale, solo che si gioca su livelli multipli contemporaneamente." -#: tictac.php:61 +#: tictac.php:57 msgid "" "In this case there are three levels. You win by getting three in a row on " "any level, as well as up, down, and diagonally across the different levels." msgstr "In questo caso ci sono tre livelli. Puoi vincere mettendo tre segni in fila su ogni livello, anche verso l'alto, il basso e diagonalmente anche attraverso i diversi livelli." -#: tictac.php:63 +#: tictac.php:59 msgid "" "The handicap game disables the center position on the middle level because " "the player claiming this square often has an unfair advantage." msgstr "L'handicap disabilita la casella centrale sul livello di mezzo, perchè il giocatore che si prende quella casella spesso ha un deciso vantaggio." -#: tictac.php:182 +#: tictac.php:178 msgid "You go first..." msgstr "Cominci tu..." -#: tictac.php:187 +#: tictac.php:183 msgid "I'm going first this time..." msgstr "Comincio io questa volta..." -#: tictac.php:193 +#: tictac.php:189 msgid "You won!" msgstr "Hai vinto!" -#: tictac.php:199 tictac.php:224 +#: tictac.php:195 tictac.php:220 msgid "\"Cat\" game!" msgstr "Stallo!" -#: tictac.php:222 +#: tictac.php:218 msgid "I won!" msgstr "Ho vinto!" diff --git a/tictac/lang/it/strings.php b/tictac/lang/it/strings.php index 10f63f57..716be3c2 100644 --- a/tictac/lang/it/strings.php +++ b/tictac/lang/it/strings.php @@ -3,7 +3,7 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Three Dimensional Tic-Tac-Toe'] = 'Tic-Tac-Toe tridimensionale'; $a->strings['3D Tic-Tac-Toe'] = '3D Tic-Tac-Toe'; diff --git a/tictac/tictac.php b/tictac/tictac.php index 0f9f4fb6..082b58c1 100644 --- a/tictac/tictac.php +++ b/tictac/tictac.php @@ -7,7 +7,6 @@ * Status: unsupported */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; @@ -30,7 +29,12 @@ function tictac_module() {} function tictac_content() { - $o = ''; + $o = ''; + $dimen = 3; + $handicap = 0; + $mefirst = 0; + $yours = ''; + $mine = ''; if($_POST['move']) { $handicap = DI::args()->get(1); @@ -45,9 +49,6 @@ function tictac_content() { $handicap = DI::args()->get(1); $dimen = 3; } - else { - $dimen = 3; - } $o .= '

' . DI::l10n()->t('3D Tic-Tac-Toe') . '


'; @@ -70,6 +71,7 @@ class tictac { private $dimen; private $first_move = true; private $handicap = 0; + private $mefirst; private $yours; private $mine; private $winning_play; @@ -161,10 +163,10 @@ class tictac { ]; - function __construct($dimen,$handicap,$mefirst,$yours,$mine) { - $this->dimen = 3; - $this->handicap = (($handicap) ? 1 : 0); - $this->mefirst = (($mefirst) ? 1 : 0); + function __construct($dimen, $handicap, $mefirst, $yours, $mine) { + $this->dimen = $dimen; + $this->handicap = $handicap ? 1 : 0; + $this->mefirst = $mefirst ? 1 : 0; $this->yours = str_replace('XXX','',$yours); $this->mine = $mine; $this->you = $this->parse_moves('you'); @@ -175,6 +177,7 @@ class tictac { } function play() { + $o = ''; if($this->first_move) { if(rand(0,1) == 1) { @@ -226,6 +229,8 @@ class tictac { } function parse_moves($player) { + $str = ''; + if($player == 'me') $str = $this->mine; if($player == 'you') @@ -629,7 +634,7 @@ function winning_move() { function draw_board() { if(! strlen($this->yours)) $this->yours = 'XXX'; - $o .= "
handicap}/{$this->mefirst}/{$this->dimen}/{$this->yours}/{$this->mine}\" method=\"post\" />"; + $o = "handicap}/{$this->mefirst}/{$this->dimen}/{$this->yours}/{$this->mine}\" method=\"post\" />"; for($x = 0; $x < $this->dimen; $x ++) { $o .= ''; for($y = 0; $y < $this->dimen; $y ++) { diff --git a/tumblr/README.md b/tumblr/README.md index 57ca145a..98ff2161 100644 --- a/tumblr/README.md +++ b/tumblr/README.md @@ -1,12 +1,7 @@ Installation ------------ -[Register](http://www.tumblr.com/oauth/apps) an application and use (your server name)/addon/tumblr/callback.php as -callback URL +[Register](http://www.tumblr.com/oauth/apps) an application and use (your server name)/tumblr/callback as +callback URL and (your server name)/tumblr/redirect as OAuth2 redirect URL. -After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/tumblr). - -Notice ------- -This connector is using the Tumblr-OAuth-Library: -[https://groups.google.com/d/msg/tumblr-api/g6SeIBWvsnE/gnWqT9jFSlEJ](https://groups.google.com/d/msg/tumblr-api/g6SeIBWvsnE/gnWqT9jFSlEJ) +After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/tumblr). \ No newline at end of file diff --git a/tumblr/lang/C/messages.po b/tumblr/lang/C/messages.po index 83434406..74968015 100644 --- a/tumblr/lang/C/messages.po +++ b/tumblr/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,54 +17,71 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: tumblr.php:39 +#: tumblr.php:243 msgid "Permission denied." msgstr "" -#: tumblr.php:69 +#: tumblr.php:296 msgid "Save Settings" msgstr "" -#: tumblr.php:71 +#: tumblr.php:297 msgid "Consumer Key" msgstr "" -#: tumblr.php:72 +#: tumblr.php:298 msgid "Consumer Secret" msgstr "" -#: tumblr.php:177 -msgid "You are now authenticated to tumblr." +#: tumblr.php:299 +msgid "Maximum tags" msgstr "" -#: tumblr.php:178 -msgid "return to the connector page" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." msgstr "" -#: tumblr.php:194 -msgid "Post to Tumblr" -msgstr "" - -#: tumblr.php:225 +#: tumblr.php:336 msgid "Post to page:" msgstr "" -#: tumblr.php:231 +#: tumblr.php:342 msgid "(Re-)Authenticate your tumblr page" msgstr "" -#: tumblr.php:232 +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "" -#: tumblr.php:237 +#: tumblr.php:348 msgid "Enable Tumblr Post Addon" msgstr "" -#: tumblr.php:238 +#: tumblr.php:349 msgid "Post to Tumblr by default" msgstr "" -#: tumblr.php:244 -msgid "Tumblr Export" +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "" + +#: tumblr.php:375 +msgid "Post to Tumblr" msgstr "" diff --git a/tumblr/lang/ar/messages.po b/tumblr/lang/ar/messages.po index 7879231d..48a9e8cb 100644 --- a/tumblr/lang/ar/messages.po +++ b/tumblr/lang/ar/messages.po @@ -8,64 +8,81 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-25 13:15+0000\n" -"PO-Revision-Date: 2021-02-20 00:23+0000\n" -"Last-Translator: Farida Khalaf \n" -"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Arabic (http://app.transifex.com/Friendica/friendica/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: tumblr.php:40 +#: tumblr.php:243 msgid "Permission denied." msgstr "الطلب مرفوض." -#: tumblr.php:70 tumblr.php:284 +#: tumblr.php:296 msgid "Save Settings" msgstr "Save Settings" -#: tumblr.php:72 +#: tumblr.php:297 msgid "Consumer Key" msgstr "" -#: tumblr.php:73 +#: tumblr.php:298 msgid "Consumer Secret" msgstr "" -#: tumblr.php:178 -msgid "You are now authenticated to tumblr." +#: tumblr.php:299 +msgid "Maximum tags" msgstr "" -#: tumblr.php:179 -msgid "return to the connector page" -msgstr "الرجوع إلى صفحة الموصل" - -#: tumblr.php:195 -msgid "Post to Tumblr" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." msgstr "" -#: tumblr.php:225 tumblr.php:229 -msgid "Tumblr Export" -msgstr "" - -#: tumblr.php:233 -msgid "(Re-)Authenticate your tumblr page" -msgstr "" - -#: tumblr.php:237 -msgid "Enable Tumblr Post Addon" -msgstr "" - -#: tumblr.php:243 -msgid "Post to Tumblr by default" -msgstr "" - -#: tumblr.php:264 +#: tumblr.php:336 msgid "Post to page:" msgstr "" -#: tumblr.php:278 +#: tumblr.php:342 +msgid "(Re-)Authenticate your tumblr page" +msgstr "" + +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "" + +#: tumblr.php:348 +msgid "Enable Tumblr Post Addon" +msgstr "" + +#: tumblr.php:349 +msgid "Post to Tumblr by default" +msgstr "" + +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "" + +#: tumblr.php:375 +msgid "Post to Tumblr" +msgstr "" diff --git a/tumblr/lang/ar/strings.php b/tumblr/lang/ar/strings.php index ffd3337c..3f7ca4e4 100644 --- a/tumblr/lang/ar/strings.php +++ b/tumblr/lang/ar/strings.php @@ -7,4 +7,3 @@ function string_plural_select_ar($n){ }} $a->strings['Permission denied.'] = 'الطلب مرفوض.'; $a->strings['Save Settings'] = 'Save Settings'; -$a->strings['return to the connector page'] = 'الرجوع إلى صفحة الموصل'; diff --git a/tumblr/lang/cs/messages.po b/tumblr/lang/cs/messages.po index ebb525ff..cb6f91e6 100644 --- a/tumblr/lang/cs/messages.po +++ b/tumblr/lang/cs/messages.po @@ -4,62 +4,88 @@ # # # Translators: -# Lorem Ipsum , 2018 +# Aditoo, 2018 +# Aditoo, 2018 # michal_s , 2014 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-06-10 09:07+0000\n" -"Last-Translator: Lorem Ipsum \n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: tumblr.php:34 +#: tumblr.php:243 msgid "Permission denied." msgstr "Přístup odmítnut." -#: tumblr.php:144 -msgid "You are now authenticated to tumblr." -msgstr "Nyní jste přihlášen k tumblr." +#: tumblr.php:296 +msgid "Save Settings" +msgstr "" -#: tumblr.php:145 -msgid "return to the connector page" -msgstr "návrat ke stránce konektor" +#: tumblr.php:297 +msgid "Consumer Key" +msgstr "" -#: tumblr.php:158 -msgid "Post to Tumblr" -msgstr "Příspěvek na Tumbir" +#: tumblr.php:298 +msgid "Consumer Secret" +msgstr "" -#: tumblr.php:185 -msgid "Tumblr Post Settings" -msgstr "Nastavení Tumblr Post" +#: tumblr.php:299 +msgid "Maximum tags" +msgstr "" -#: tumblr.php:188 +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." +msgstr "" + +#: tumblr.php:336 +msgid "Post to page:" +msgstr "Posílat na stránku:" + +#: tumblr.php:342 msgid "(Re-)Authenticate your tumblr page" -msgstr "(Znovu) přihlásit k Vaší tumblr stránce" +msgstr "(Znovu) přihlásit k Vaší stránce Tumblr" -#: tumblr.php:192 +#: tumblr.php:343 +msgid "You are not authenticated to tumblr" +msgstr "Nyní nejste přihlášen/a k Tumblr." + +#: tumblr.php:348 msgid "Enable Tumblr Post Addon" msgstr "Povolit doplněk Tumblr Post" -#: tumblr.php:197 +#: tumblr.php:349 msgid "Post to Tumblr by default" -msgstr "Standardně posílat příspěvky na Tumbir" +msgstr "Ve výchozím stavu posílat příspěvky na Tumblr" -#: tumblr.php:217 -msgid "Post to page:" -msgstr "Příspěvek ke stránce:" +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "" -#: tumblr.php:228 -msgid "You are not authenticated to tumblr" -msgstr "Nyní nejste přihlášen k tumblr." +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "" -#: tumblr.php:233 -msgid "Submit" -msgstr "Odeslat" +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "" + +#: tumblr.php:375 +msgid "Post to Tumblr" +msgstr "Posílat na Tumblr" diff --git a/tumblr/lang/cs/strings.php b/tumblr/lang/cs/strings.php index 6c0a2b10..3135b0b8 100644 --- a/tumblr/lang/cs/strings.php +++ b/tumblr/lang/cs/strings.php @@ -6,13 +6,9 @@ function string_plural_select_cs($n){ if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} $a->strings['Permission denied.'] = 'Přístup odmítnut.'; -$a->strings['You are now authenticated to tumblr.'] = 'Nyní jste přihlášen k tumblr.'; -$a->strings['return to the connector page'] = 'návrat ke stránce konektor'; -$a->strings['Post to Tumblr'] = 'Příspěvek na Tumbir'; -$a->strings['Tumblr Post Settings'] = 'Nastavení Tumblr Post'; -$a->strings['(Re-)Authenticate your tumblr page'] = '(Znovu) přihlásit k Vaší tumblr stránce'; +$a->strings['Post to page:'] = 'Posílat na stránku:'; +$a->strings['(Re-)Authenticate your tumblr page'] = '(Znovu) přihlásit k Vaší stránce Tumblr'; +$a->strings['You are not authenticated to tumblr'] = 'Nyní nejste přihlášen/a k Tumblr.'; $a->strings['Enable Tumblr Post Addon'] = 'Povolit doplněk Tumblr Post'; -$a->strings['Post to Tumblr by default'] = 'Standardně posílat příspěvky na Tumbir'; -$a->strings['Post to page:'] = 'Příspěvek ke stránce:'; -$a->strings['You are not authenticated to tumblr'] = 'Nyní nejste přihlášen k tumblr.'; -$a->strings['Submit'] = 'Odeslat'; +$a->strings['Post to Tumblr by default'] = 'Ve výchozím stavu posílat příspěvky na Tumblr'; +$a->strings['Post to Tumblr'] = 'Posílat na Tumblr'; diff --git a/tumblr/lang/de/messages.po b/tumblr/lang/de/messages.po index adeb5de1..c41ba45f 100644 --- a/tumblr/lang/de/messages.po +++ b/tumblr/lang/de/messages.po @@ -4,6 +4,8 @@ # # # Translators: +# Raroun, 2023 +# Raroun, 2023 # Tobias Diekershoff , 2014-2015 # Tobias Diekershoff , 2018,2021 # Ulf Rompe , 2019 @@ -11,64 +13,81 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:16+0100\n" -"PO-Revision-Date: 2021-02-06 16:53+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Raroun, 2023\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: tumblr.php:39 +#: tumblr.php:243 msgid "Permission denied." msgstr "Zugriff verweigert." -#: tumblr.php:69 tumblr.php:283 +#: tumblr.php:296 msgid "Save Settings" msgstr "Einstellungen speichern" -#: tumblr.php:71 +#: tumblr.php:297 msgid "Consumer Key" msgstr "Consumer Key" -#: tumblr.php:72 +#: tumblr.php:298 msgid "Consumer Secret" msgstr "Consumer Secret" -#: tumblr.php:177 -msgid "You are now authenticated to tumblr." -msgstr "Du bist nun auf tumblr authentifiziert." +#: tumblr.php:299 +msgid "Maximum tags" +msgstr "Maximale Anzahl an Tags" -#: tumblr.php:178 -msgid "return to the connector page" -msgstr "zurück zur Connector-Seite" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." +msgstr "Maximale Anzahl von Tags, die ein Benutzer verfolgen kann. Geben Sie 0 ein, um die Funktion zu deaktivieren." -#: tumblr.php:194 -msgid "Post to Tumblr" -msgstr "Auf Tumblr veröffentlichen" - -#: tumblr.php:224 tumblr.php:228 -msgid "Tumblr Export" -msgstr "Tumblr Export" - -#: tumblr.php:232 -msgid "(Re-)Authenticate your tumblr page" -msgstr "(Re-)Authentifizierung deiner tumblr-Seite" - -#: tumblr.php:236 -msgid "Enable Tumblr Post Addon" -msgstr "Tumblr-Post-Addon aktivieren" - -#: tumblr.php:242 -msgid "Post to Tumblr by default" -msgstr "Standardmäßig bei Tumblr veröffentlichen" - -#: tumblr.php:263 +#: tumblr.php:336 msgid "Post to page:" msgstr "Auf tumblr veröffentlichen" -#: tumblr.php:277 +#: tumblr.php:342 +msgid "(Re-)Authenticate your tumblr page" +msgstr "(Re-)Authentifizierung deiner tumblr-Seite" + +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "Du bist gegenüber tumblr nicht authentifiziert" + +#: tumblr.php:348 +msgid "Enable Tumblr Post Addon" +msgstr "Tumblr-Post-Addon aktivieren" + +#: tumblr.php:349 +msgid "Post to Tumblr by default" +msgstr "Standardmäßig bei Tumblr veröffentlichen" + +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "Importiere die entfernte Timeline" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "Abonnierte Tags" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "Durch Kommata getrennte Liste von bis zu %d Tags, die zusätzlich in die Timeline importiert werden sollen" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "Tumblr Import/Export" + +#: tumblr.php:375 +msgid "Post to Tumblr" +msgstr "Auf Tumblr veröffentlichen" diff --git a/tumblr/lang/de/strings.php b/tumblr/lang/de/strings.php index a961347b..ed9af957 100644 --- a/tumblr/lang/de/strings.php +++ b/tumblr/lang/de/strings.php @@ -9,12 +9,15 @@ $a->strings['Permission denied.'] = 'Zugriff verweigert.'; $a->strings['Save Settings'] = 'Einstellungen speichern'; $a->strings['Consumer Key'] = 'Consumer Key'; $a->strings['Consumer Secret'] = 'Consumer Secret'; -$a->strings['You are now authenticated to tumblr.'] = 'Du bist nun auf tumblr authentifiziert.'; -$a->strings['return to the connector page'] = 'zurück zur Connector-Seite'; -$a->strings['Post to Tumblr'] = 'Auf Tumblr veröffentlichen'; -$a->strings['Tumblr Export'] = 'Tumblr Export'; +$a->strings['Maximum tags'] = 'Maximale Anzahl an Tags'; +$a->strings['Maximum number of tags that a user can follow. Enter 0 to deactivate the feature.'] = 'Maximale Anzahl von Tags, die ein Benutzer verfolgen kann. Geben Sie 0 ein, um die Funktion zu deaktivieren.'; +$a->strings['Post to page:'] = 'Auf tumblr veröffentlichen'; $a->strings['(Re-)Authenticate your tumblr page'] = '(Re-)Authentifizierung deiner tumblr-Seite'; +$a->strings['You are not authenticated to tumblr'] = 'Du bist gegenüber tumblr nicht authentifiziert'; $a->strings['Enable Tumblr Post Addon'] = 'Tumblr-Post-Addon aktivieren'; $a->strings['Post to Tumblr by default'] = 'Standardmäßig bei Tumblr veröffentlichen'; -$a->strings['Post to page:'] = 'Auf tumblr veröffentlichen'; -$a->strings['You are not authenticated to tumblr'] = 'Du bist gegenüber tumblr nicht authentifiziert'; +$a->strings['Import the remote timeline'] = 'Importiere die entfernte Timeline'; +$a->strings['Subscribed tags'] = 'Abonnierte Tags'; +$a->strings['Comma separated list of up to %d tags that will be imported additionally to the timeline'] = 'Durch Kommata getrennte Liste von bis zu %d Tags, die zusätzlich in die Timeline importiert werden sollen'; +$a->strings['Tumblr Import/Export'] = 'Tumblr Import/Export'; +$a->strings['Post to Tumblr'] = 'Auf Tumblr veröffentlichen'; diff --git a/tumblr/lang/es/messages.po b/tumblr/lang/es/messages.po index 83f1d7be..d78060c6 100644 --- a/tumblr/lang/es/messages.po +++ b/tumblr/lang/es/messages.po @@ -10,64 +10,81 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:16+0100\n" -"PO-Revision-Date: 2021-04-06 02:11+0000\n" -"Last-Translator: Senex Petrovic \n" -"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Senex Petrovic , 2021\n" +"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: tumblr.php:39 +#: tumblr.php:243 msgid "Permission denied." msgstr "Permiso denegado." -#: tumblr.php:69 tumblr.php:283 +#: tumblr.php:296 msgid "Save Settings" msgstr "Guardar ajustes" -#: tumblr.php:71 +#: tumblr.php:297 msgid "Consumer Key" msgstr "Consumer Key" -#: tumblr.php:72 +#: tumblr.php:298 msgid "Consumer Secret" msgstr "Consumer Secret" -#: tumblr.php:177 -msgid "You are now authenticated to tumblr." -msgstr "Está ahora autenticado en tumblr." +#: tumblr.php:299 +msgid "Maximum tags" +msgstr "" -#: tumblr.php:178 -msgid "return to the connector page" -msgstr "Vuelva a la página del conector" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." +msgstr "" -#: tumblr.php:194 -msgid "Post to Tumblr" -msgstr "Publicar en Tumblr" - -#: tumblr.php:224 tumblr.php:228 -msgid "Tumblr Export" -msgstr "Exportar a Tumblr " - -#: tumblr.php:232 -msgid "(Re-)Authenticate your tumblr page" -msgstr "(Re-)autenticar su página de tumblr" - -#: tumblr.php:236 -msgid "Enable Tumblr Post Addon" -msgstr "Habilitar el complemento de publicación de Tumblr" - -#: tumblr.php:242 -msgid "Post to Tumblr by default" -msgstr "Publique en Tumblr por defecto" - -#: tumblr.php:263 +#: tumblr.php:336 msgid "Post to page:" msgstr "Publicar en página:" -#: tumblr.php:277 +#: tumblr.php:342 +msgid "(Re-)Authenticate your tumblr page" +msgstr "(Re-)autenticar su página de tumblr" + +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "No está autenticado en tumblr" + +#: tumblr.php:348 +msgid "Enable Tumblr Post Addon" +msgstr "Habilitar el complemento de publicación de Tumblr" + +#: tumblr.php:349 +msgid "Post to Tumblr by default" +msgstr "Publique en Tumblr por defecto" + +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "" + +#: tumblr.php:375 +msgid "Post to Tumblr" +msgstr "Publicar en Tumblr" diff --git a/tumblr/lang/es/strings.php b/tumblr/lang/es/strings.php index a124729b..550f6dc8 100644 --- a/tumblr/lang/es/strings.php +++ b/tumblr/lang/es/strings.php @@ -3,18 +3,15 @@ if(! function_exists("string_plural_select_es")) { function string_plural_select_es($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Permission denied.'] = 'Permiso denegado.'; $a->strings['Save Settings'] = 'Guardar ajustes'; $a->strings['Consumer Key'] = 'Consumer Key'; $a->strings['Consumer Secret'] = 'Consumer Secret'; -$a->strings['You are now authenticated to tumblr.'] = 'Está ahora autenticado en tumblr.'; -$a->strings['return to the connector page'] = 'Vuelva a la página del conector'; -$a->strings['Post to Tumblr'] = 'Publicar en Tumblr'; -$a->strings['Tumblr Export'] = 'Exportar a Tumblr '; +$a->strings['Post to page:'] = 'Publicar en página:'; $a->strings['(Re-)Authenticate your tumblr page'] = '(Re-)autenticar su página de tumblr'; +$a->strings['You are not authenticated to tumblr'] = 'No está autenticado en tumblr'; $a->strings['Enable Tumblr Post Addon'] = 'Habilitar el complemento de publicación de Tumblr'; $a->strings['Post to Tumblr by default'] = 'Publique en Tumblr por defecto'; -$a->strings['Post to page:'] = 'Publicar en página:'; -$a->strings['You are not authenticated to tumblr'] = 'No está autenticado en tumblr'; +$a->strings['Post to Tumblr'] = 'Publicar en Tumblr'; diff --git a/tumblr/lang/fr/messages.po b/tumblr/lang/fr/messages.po index 3e9fe83d..43dba8e3 100644 --- a/tumblr/lang/fr/messages.po +++ b/tumblr/lang/fr/messages.po @@ -5,69 +5,87 @@ # # Translators: # bob lebonche , 2021 +# cracrayol, 2023-2024 # StefOfficiel , 2015 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" "PO-Revision-Date: 2014-06-23 12:58+0000\n" -"Last-Translator: bob lebonche , 2021\n" -"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" +"Last-Translator: cracrayol, 2023-2024\n" +"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: tumblr.php:39 +#: tumblr.php:243 msgid "Permission denied." msgstr "Permission refusée." -#: tumblr.php:69 +#: tumblr.php:296 msgid "Save Settings" msgstr "Sauvegarder les paramètres" -#: tumblr.php:71 +#: tumblr.php:297 msgid "Consumer Key" msgstr "Clé utilisateur" -#: tumblr.php:72 +#: tumblr.php:298 msgid "Consumer Secret" msgstr "Secret utilisateur" -#: tumblr.php:177 -msgid "You are now authenticated to tumblr." -msgstr "Vous êtes maintenant identifié sur Tumblr" +#: tumblr.php:299 +msgid "Maximum tags" +msgstr "Étiquettes maximum" -#: tumblr.php:178 -msgid "return to the connector page" -msgstr "Revenir à la page de connexion" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." +msgstr "Nombre maximum d'étiquettes qu'un utilisateur peut suivre. Entrez 0 pour désactiver cette fonctionnalité." -#: tumblr.php:194 -msgid "Post to Tumblr" -msgstr "Publier vers Tumblr" - -#: tumblr.php:225 +#: tumblr.php:336 msgid "Post to page:" msgstr "Publier sur la page :" -#: tumblr.php:231 +#: tumblr.php:342 msgid "(Re-)Authenticate your tumblr page" msgstr "(re)Authentifiez votre page Tumblr" -#: tumblr.php:232 +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "Vous n'êtes pas identifié sur Tumblr" -#: tumblr.php:237 +#: tumblr.php:348 msgid "Enable Tumblr Post Addon" msgstr "Activez l'extension de publication Tumblr" -#: tumblr.php:238 +#: tumblr.php:349 msgid "Post to Tumblr by default" msgstr "Publier sur Tumblr par défaut" -#: tumblr.php:244 -msgid "Tumblr Export" -msgstr "Exporter vers Tumblr" +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "Importer le flux distant" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "Étiquettes suivies" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "Liste contenant jusqu'à %d étiquettes, séparées par des virgules, qui seront importées dans le flux" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "Import/Export Tumblr" + +#: tumblr.php:375 +msgid "Post to Tumblr" +msgstr "Publier vers Tumblr" diff --git a/tumblr/lang/fr/strings.php b/tumblr/lang/fr/strings.php index b3e0ec77..f23c9c44 100644 --- a/tumblr/lang/fr/strings.php +++ b/tumblr/lang/fr/strings.php @@ -9,12 +9,15 @@ $a->strings['Permission denied.'] = 'Permission refusée.'; $a->strings['Save Settings'] = 'Sauvegarder les paramètres'; $a->strings['Consumer Key'] = 'Clé utilisateur'; $a->strings['Consumer Secret'] = 'Secret utilisateur'; -$a->strings['You are now authenticated to tumblr.'] = 'Vous êtes maintenant identifié sur Tumblr'; -$a->strings['return to the connector page'] = 'Revenir à la page de connexion'; -$a->strings['Post to Tumblr'] = 'Publier vers Tumblr'; +$a->strings['Maximum tags'] = 'Étiquettes maximum'; +$a->strings['Maximum number of tags that a user can follow. Enter 0 to deactivate the feature.'] = 'Nombre maximum d\'étiquettes qu\'un utilisateur peut suivre. Entrez 0 pour désactiver cette fonctionnalité.'; $a->strings['Post to page:'] = 'Publier sur la page :'; $a->strings['(Re-)Authenticate your tumblr page'] = '(re)Authentifiez votre page Tumblr'; $a->strings['You are not authenticated to tumblr'] = 'Vous n\'êtes pas identifié sur Tumblr'; $a->strings['Enable Tumblr Post Addon'] = 'Activez l\'extension de publication Tumblr'; $a->strings['Post to Tumblr by default'] = 'Publier sur Tumblr par défaut'; -$a->strings['Tumblr Export'] = 'Exporter vers Tumblr'; +$a->strings['Import the remote timeline'] = 'Importer le flux distant'; +$a->strings['Subscribed tags'] = 'Étiquettes suivies'; +$a->strings['Comma separated list of up to %d tags that will be imported additionally to the timeline'] = 'Liste contenant jusqu\'à %d étiquettes, séparées par des virgules, qui seront importées dans le flux'; +$a->strings['Tumblr Import/Export'] = 'Import/Export Tumblr'; +$a->strings['Post to Tumblr'] = 'Publier vers Tumblr'; diff --git a/tumblr/lang/hu/messages.po b/tumblr/lang/hu/messages.po index c3920576..3c8eb396 100644 --- a/tumblr/lang/hu/messages.po +++ b/tumblr/lang/hu/messages.po @@ -4,69 +4,86 @@ # # # Translators: -# Balázs Úr, 2020-2021 +# Balázs Úr, 2020-2021,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" "PO-Revision-Date: 2014-06-23 12:58+0000\n" -"Last-Translator: Balázs Úr, 2020-2021\n" -"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n" +"Last-Translator: Balázs Úr, 2020-2021,2023\n" +"Language-Team: Hungarian (http://app.transifex.com/Friendica/friendica/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: tumblr.php:39 +#: tumblr.php:243 msgid "Permission denied." msgstr "Engedély megtagadva." -#: tumblr.php:69 +#: tumblr.php:296 msgid "Save Settings" msgstr "Beállítások mentése" -#: tumblr.php:71 +#: tumblr.php:297 msgid "Consumer Key" msgstr "Felhasználói kulcs" -#: tumblr.php:72 +#: tumblr.php:298 msgid "Consumer Secret" msgstr "Felhasználói titok" -#: tumblr.php:177 -msgid "You are now authenticated to tumblr." -msgstr "Most már hitelesítve van a Tumblr-hez." +#: tumblr.php:299 +msgid "Maximum tags" +msgstr "Legtöbb címke" -#: tumblr.php:178 -msgid "return to the connector page" -msgstr "visszatérés a csatlakozó oldalára" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." +msgstr "A címkék legnagyobb száma, amit egy felhasználó követhet. Adjon meg 0 értéket a funkció kikapcsolásához." -#: tumblr.php:194 -msgid "Post to Tumblr" -msgstr "Beküldése a Tumblr-re" - -#: tumblr.php:225 +#: tumblr.php:336 msgid "Post to page:" msgstr "Beküldés az oldalra:" -#: tumblr.php:231 +#: tumblr.php:342 msgid "(Re-)Authenticate your tumblr page" msgstr "A Tumblr-oldal (újra)hitelesítése" -#: tumblr.php:232 +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "Nincs hitelesítve van a Tumblr-hez" -#: tumblr.php:237 +#: tumblr.php:348 msgid "Enable Tumblr Post Addon" msgstr "A Tumblr-beküldő bővítmény engedélyezése" -#: tumblr.php:238 +#: tumblr.php:349 msgid "Post to Tumblr by default" msgstr "Beküldés a Tumblr-re alapértelmezetten" -#: tumblr.php:244 -msgid "Tumblr Export" -msgstr "Tumblr exportálás" +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "A távoli idővonal importálása" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "Feliratkozott címkék" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "Legfeljebb %d címke vesszővel elválasztott listája, amelyek szintén importálásra kerülnek az idővonalon felül" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "Tumblr importálás és exportálás" + +#: tumblr.php:375 +msgid "Post to Tumblr" +msgstr "Beküldése a Tumblr-re" diff --git a/tumblr/lang/hu/strings.php b/tumblr/lang/hu/strings.php index cd3e3e19..a3838b4a 100644 --- a/tumblr/lang/hu/strings.php +++ b/tumblr/lang/hu/strings.php @@ -9,12 +9,15 @@ $a->strings['Permission denied.'] = 'Engedély megtagadva.'; $a->strings['Save Settings'] = 'Beállítások mentése'; $a->strings['Consumer Key'] = 'Felhasználói kulcs'; $a->strings['Consumer Secret'] = 'Felhasználói titok'; -$a->strings['You are now authenticated to tumblr.'] = 'Most már hitelesítve van a Tumblr-hez.'; -$a->strings['return to the connector page'] = 'visszatérés a csatlakozó oldalára'; -$a->strings['Post to Tumblr'] = 'Beküldése a Tumblr-re'; +$a->strings['Maximum tags'] = 'Legtöbb címke'; +$a->strings['Maximum number of tags that a user can follow. Enter 0 to deactivate the feature.'] = 'A címkék legnagyobb száma, amit egy felhasználó követhet. Adjon meg 0 értéket a funkció kikapcsolásához.'; $a->strings['Post to page:'] = 'Beküldés az oldalra:'; $a->strings['(Re-)Authenticate your tumblr page'] = 'A Tumblr-oldal (újra)hitelesítése'; $a->strings['You are not authenticated to tumblr'] = 'Nincs hitelesítve van a Tumblr-hez'; $a->strings['Enable Tumblr Post Addon'] = 'A Tumblr-beküldő bővítmény engedélyezése'; $a->strings['Post to Tumblr by default'] = 'Beküldés a Tumblr-re alapértelmezetten'; -$a->strings['Tumblr Export'] = 'Tumblr exportálás'; +$a->strings['Import the remote timeline'] = 'A távoli idővonal importálása'; +$a->strings['Subscribed tags'] = 'Feliratkozott címkék'; +$a->strings['Comma separated list of up to %d tags that will be imported additionally to the timeline'] = 'Legfeljebb %d címke vesszővel elválasztott listája, amelyek szintén importálásra kerülnek az idővonalon felül'; +$a->strings['Tumblr Import/Export'] = 'Tumblr importálás és exportálás'; +$a->strings['Post to Tumblr'] = 'Beküldése a Tumblr-re'; diff --git a/tumblr/lang/it/messages.po b/tumblr/lang/it/messages.po index fbd17655..0f7e2237 100644 --- a/tumblr/lang/it/messages.po +++ b/tumblr/lang/it/messages.po @@ -5,60 +5,86 @@ # # Translators: # fabrixxm , 2014-2015,2018 +# Sylke Vicious , 2021 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-19 13:25+0000\n" -"Last-Translator: fabrixxm \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Sylke Vicious , 2021\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: tumblr.php:34 +#: tumblr.php:243 msgid "Permission denied." msgstr "Permesso negato." -#: tumblr.php:144 -msgid "You are now authenticated to tumblr." -msgstr "Sei autenticato su Tumblr." +#: tumblr.php:296 +msgid "Save Settings" +msgstr "Salva Impostazioni" -#: tumblr.php:145 -msgid "return to the connector page" -msgstr "ritorna alla pagina del connettore" +#: tumblr.php:297 +msgid "Consumer Key" +msgstr "Consumer Key" -#: tumblr.php:158 -msgid "Post to Tumblr" -msgstr "Invia a Tumblr" +#: tumblr.php:298 +msgid "Consumer Secret" +msgstr "Consumer Secret" -#: tumblr.php:185 -msgid "Tumblr Post Settings" -msgstr "Impostazioni di invio a Tumblr" +#: tumblr.php:299 +msgid "Maximum tags" +msgstr "" -#: tumblr.php:188 -msgid "(Re-)Authenticate your tumblr page" -msgstr "(Ri)Autenticati con la tua pagina Tumblr" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." +msgstr "" -#: tumblr.php:192 -msgid "Enable Tumblr Post Addon" -msgstr "Abilita componente aggiuntivo di invio a Tumblr" - -#: tumblr.php:197 -msgid "Post to Tumblr by default" -msgstr "Invia sempre a Tumblr" - -#: tumblr.php:217 +#: tumblr.php:336 msgid "Post to page:" msgstr "Invia alla pagina:" -#: tumblr.php:228 +#: tumblr.php:342 +msgid "(Re-)Authenticate your tumblr page" +msgstr "(Ri)Autenticati con la tua pagina Tumblr" + +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "Non sei autenticato su Tumblr" -#: tumblr.php:233 -msgid "Submit" -msgstr "Invia" +#: tumblr.php:348 +msgid "Enable Tumblr Post Addon" +msgstr "Abilita componente aggiuntivo di invio a Tumblr" + +#: tumblr.php:349 +msgid "Post to Tumblr by default" +msgstr "Invia sempre a Tumblr" + +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "" + +#: tumblr.php:375 +msgid "Post to Tumblr" +msgstr "Invia a Tumblr" diff --git a/tumblr/lang/it/strings.php b/tumblr/lang/it/strings.php index d5075e65..e58ab31c 100644 --- a/tumblr/lang/it/strings.php +++ b/tumblr/lang/it/strings.php @@ -3,16 +3,15 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Permission denied.'] = 'Permesso negato.'; -$a->strings['You are now authenticated to tumblr.'] = 'Sei autenticato su Tumblr.'; -$a->strings['return to the connector page'] = 'ritorna alla pagina del connettore'; -$a->strings['Post to Tumblr'] = 'Invia a Tumblr'; -$a->strings['Tumblr Post Settings'] = 'Impostazioni di invio a Tumblr'; +$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Consumer Key'] = 'Consumer Key'; +$a->strings['Consumer Secret'] = 'Consumer Secret'; +$a->strings['Post to page:'] = 'Invia alla pagina:'; $a->strings['(Re-)Authenticate your tumblr page'] = '(Ri)Autenticati con la tua pagina Tumblr'; +$a->strings['You are not authenticated to tumblr'] = 'Non sei autenticato su Tumblr'; $a->strings['Enable Tumblr Post Addon'] = 'Abilita componente aggiuntivo di invio a Tumblr'; $a->strings['Post to Tumblr by default'] = 'Invia sempre a Tumblr'; -$a->strings['Post to page:'] = 'Invia alla pagina:'; -$a->strings['You are not authenticated to tumblr'] = 'Non sei autenticato su Tumblr'; -$a->strings['Submit'] = 'Invia'; +$a->strings['Post to Tumblr'] = 'Invia a Tumblr'; diff --git a/tumblr/lang/nl/messages.po b/tumblr/lang/nl/messages.po index f299c6f3..ae8e284c 100644 --- a/tumblr/lang/nl/messages.po +++ b/tumblr/lang/nl/messages.po @@ -9,56 +9,81 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-08-24 13:53+0000\n" -"Last-Translator: Jeroen De Meerleer \n" -"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Jeroen De Meerleer , 2018\n" +"Language-Team: Dutch (http://app.transifex.com/Friendica/friendica/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: tumblr.php:34 +#: tumblr.php:243 msgid "Permission denied." msgstr "Toegang geweigerd." -#: tumblr.php:144 -msgid "You are now authenticated to tumblr." -msgstr "Je bent nu aangemeld bij tumblr" - -#: tumblr.php:145 -msgid "return to the connector page" +#: tumblr.php:296 +msgid "Save Settings" msgstr "" -#: tumblr.php:158 -msgid "Post to Tumblr" +#: tumblr.php:297 +msgid "Consumer Key" msgstr "" -#: tumblr.php:185 -msgid "Tumblr Post Settings" +#: tumblr.php:298 +msgid "Consumer Secret" msgstr "" -#: tumblr.php:188 -msgid "(Re-)Authenticate your tumblr page" +#: tumblr.php:299 +msgid "Maximum tags" msgstr "" -#: tumblr.php:192 -msgid "Enable Tumblr Post Addon" -msgstr "Tumblr Post Addon inschakelen" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." +msgstr "" -#: tumblr.php:197 -msgid "Post to Tumblr by default" -msgstr "Plaatsen op Tumblr als standaard instellen " - -#: tumblr.php:217 +#: tumblr.php:336 msgid "Post to page:" msgstr "Plaats op pagina:" -#: tumblr.php:228 +#: tumblr.php:342 +msgid "(Re-)Authenticate your tumblr page" +msgstr "" + +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "" -#: tumblr.php:233 -msgid "Submit" +#: tumblr.php:348 +msgid "Enable Tumblr Post Addon" +msgstr "Tumblr Post Addon inschakelen" + +#: tumblr.php:349 +msgid "Post to Tumblr by default" +msgstr "Plaatsen op Tumblr als standaard instellen " + +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "" + +#: tumblr.php:375 +msgid "Post to Tumblr" msgstr "" diff --git a/tumblr/lang/nl/strings.php b/tumblr/lang/nl/strings.php index 9f7f2828..0c70f7f3 100644 --- a/tumblr/lang/nl/strings.php +++ b/tumblr/lang/nl/strings.php @@ -6,7 +6,6 @@ function string_plural_select_nl($n){ return intval($n != 1); }} $a->strings['Permission denied.'] = 'Toegang geweigerd.'; -$a->strings['You are now authenticated to tumblr.'] = 'Je bent nu aangemeld bij tumblr'; +$a->strings['Post to page:'] = 'Plaats op pagina:'; $a->strings['Enable Tumblr Post Addon'] = 'Tumblr Post Addon inschakelen'; $a->strings['Post to Tumblr by default'] = 'Plaatsen op Tumblr als standaard instellen '; -$a->strings['Post to page:'] = 'Plaats op pagina:'; diff --git a/tumblr/lang/pl/messages.po b/tumblr/lang/pl/messages.po index 27a44e15..a8676455 100644 --- a/tumblr/lang/pl/messages.po +++ b/tumblr/lang/pl/messages.po @@ -10,64 +10,81 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" "PO-Revision-Date: 2014-06-23 12:58+0000\n" "Last-Translator: Piotr Strębski , 2022\n" -"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" +"Language-Team: Polish (http://app.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: tumblr.php:39 +#: tumblr.php:243 msgid "Permission denied." msgstr "Odmowa dostępu." -#: tumblr.php:69 +#: tumblr.php:296 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: tumblr.php:71 +#: tumblr.php:297 msgid "Consumer Key" msgstr "Klucz klienta" -#: tumblr.php:72 +#: tumblr.php:298 msgid "Consumer Secret" msgstr "Tajny klucz klienta" -#: tumblr.php:177 -msgid "You are now authenticated to tumblr." -msgstr "Jesteś teraz uwierzytelniony na tumblr." +#: tumblr.php:299 +msgid "Maximum tags" +msgstr "" -#: tumblr.php:178 -msgid "return to the connector page" -msgstr "powrót do strony łącza" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." +msgstr "" -#: tumblr.php:194 -msgid "Post to Tumblr" -msgstr "Opublikuj w Tumblr" - -#: tumblr.php:225 +#: tumblr.php:336 msgid "Post to page:" msgstr "Opublikuj na stronie:" -#: tumblr.php:231 +#: tumblr.php:342 msgid "(Re-)Authenticate your tumblr page" msgstr "(Re-) Uwierzytelnij swoją stronę tumblr" -#: tumblr.php:232 +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "Nie jesteś uwierzytelniony w tumblr" -#: tumblr.php:237 +#: tumblr.php:348 msgid "Enable Tumblr Post Addon" msgstr "Włącz dodatek Tumblr" -#: tumblr.php:238 +#: tumblr.php:349 msgid "Post to Tumblr by default" msgstr "Wyślij domyślnie do Tumblr" -#: tumblr.php:244 -msgid "Tumblr Export" -msgstr "Eksportuj do Tumblr" +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "" + +#: tumblr.php:375 +msgid "Post to Tumblr" +msgstr "Opublikuj w Tumblr" diff --git a/tumblr/lang/pl/strings.php b/tumblr/lang/pl/strings.php index a9f3bfb5..896b21ba 100644 --- a/tumblr/lang/pl/strings.php +++ b/tumblr/lang/pl/strings.php @@ -9,12 +9,9 @@ $a->strings['Permission denied.'] = 'Odmowa dostępu.'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Consumer Key'] = 'Klucz klienta'; $a->strings['Consumer Secret'] = 'Tajny klucz klienta'; -$a->strings['You are now authenticated to tumblr.'] = 'Jesteś teraz uwierzytelniony na tumblr.'; -$a->strings['return to the connector page'] = 'powrót do strony łącza'; -$a->strings['Post to Tumblr'] = 'Opublikuj w Tumblr'; $a->strings['Post to page:'] = 'Opublikuj na stronie:'; $a->strings['(Re-)Authenticate your tumblr page'] = '(Re-) Uwierzytelnij swoją stronę tumblr'; $a->strings['You are not authenticated to tumblr'] = 'Nie jesteś uwierzytelniony w tumblr'; $a->strings['Enable Tumblr Post Addon'] = 'Włącz dodatek Tumblr'; $a->strings['Post to Tumblr by default'] = 'Wyślij domyślnie do Tumblr'; -$a->strings['Tumblr Export'] = 'Eksportuj do Tumblr'; +$a->strings['Post to Tumblr'] = 'Opublikuj w Tumblr'; diff --git a/tumblr/lang/sv/messages.po b/tumblr/lang/sv/messages.po index fe631007..3ff328a8 100644 --- a/tumblr/lang/sv/messages.po +++ b/tumblr/lang/sv/messages.po @@ -10,64 +10,81 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2022-01-16 00:55+0000\n" -"Last-Translator: Kristoffer Grundström \n" -"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n" +"POT-Creation-Date: 2023-04-29 06:56+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Kristoffer Grundström , 2022\n" +"Language-Team: Swedish (http://app.transifex.com/Friendica/friendica/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: tumblr.php:39 +#: tumblr.php:243 msgid "Permission denied." msgstr "Åtkomst nekad." -#: tumblr.php:69 +#: tumblr.php:296 msgid "Save Settings" msgstr "" -#: tumblr.php:71 +#: tumblr.php:297 msgid "Consumer Key" msgstr "" -#: tumblr.php:72 +#: tumblr.php:298 msgid "Consumer Secret" msgstr "" -#: tumblr.php:177 -msgid "You are now authenticated to tumblr." -msgstr "Du är nu autentiserad till tumblr." - -#: tumblr.php:178 -msgid "return to the connector page" +#: tumblr.php:299 +msgid "Maximum tags" msgstr "" -#: tumblr.php:194 -msgid "Post to Tumblr" +#: tumblr.php:299 +msgid "" +"Maximum number of tags that a user can follow. Enter 0 to deactivate the " +"feature." msgstr "" -#: tumblr.php:225 +#: tumblr.php:336 msgid "Post to page:" msgstr "" -#: tumblr.php:231 +#: tumblr.php:342 msgid "(Re-)Authenticate your tumblr page" msgstr "" -#: tumblr.php:232 +#: tumblr.php:343 msgid "You are not authenticated to tumblr" msgstr "Du är inte autentiserad till tumblr" -#: tumblr.php:237 +#: tumblr.php:348 msgid "Enable Tumblr Post Addon" msgstr "" -#: tumblr.php:238 +#: tumblr.php:349 msgid "Post to Tumblr by default" msgstr "" -#: tumblr.php:244 -msgid "Tumblr Export" +#: tumblr.php:350 +msgid "Import the remote timeline" +msgstr "" + +#: tumblr.php:351 +msgid "Subscribed tags" +msgstr "" + +#: tumblr.php:351 +#, php-format +msgid "" +"Comma separated list of up to %d tags that will be imported additionally to " +"the timeline" +msgstr "" + +#: tumblr.php:357 +msgid "Tumblr Import/Export" +msgstr "" + +#: tumblr.php:375 +msgid "Post to Tumblr" msgstr "" diff --git a/tumblr/lang/sv/strings.php b/tumblr/lang/sv/strings.php index 4d39d3c2..84a0e774 100644 --- a/tumblr/lang/sv/strings.php +++ b/tumblr/lang/sv/strings.php @@ -6,5 +6,4 @@ function string_plural_select_sv($n){ return intval($n != 1); }} $a->strings['Permission denied.'] = 'Åtkomst nekad.'; -$a->strings['You are now authenticated to tumblr.'] = 'Du är nu autentiserad till tumblr.'; $a->strings['You are not authenticated to tumblr'] = 'Du är inte autentiserad till tumblr'; diff --git a/tumblr/library/tumblroauth.php b/tumblr/library/tumblroauth.php deleted file mode 100644 index 418f4c86..00000000 --- a/tumblr/library/tumblroauth.php +++ /dev/null @@ -1,317 +0,0 @@ -sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); - $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); - if (!empty($oauth_token) && !empty($oauth_token_secret)) { - $this->token = new OAuthToken($oauth_token, $oauth_token_secret); - } else { - $this->token = null; - } - } - - /** - * Get a request_token from Tumblr - * - * @param callback $oauth_callback - * @return array - */ - function getRequestToken($oauth_callback = null) - { - $parameters = []; - if (!empty($oauth_callback)) { - $parameters['oauth_callback'] = $oauth_callback; - } - - $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthToken($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * Get the authorize URL - * - * @param array $token - * @param bool $sign_in_with_tumblr - * @return string - */ - function getAuthorizeURL($token, $sign_in_with_tumblr = TRUE) - { - if (is_array($token)) { - $token = $token['oauth_token']; - } - - if (empty($sign_in_with_tumblr)) { - return $this->authorizeURL() . "?oauth_token={$token}"; - } else { - return $this->authenticateURL() . "?oauth_token={$token}"; - } - } - - /** - * Exchange request token and secret for an access token and - * secret, to sign API calls. - * - * @param bool $oauth_verifier - * @return array ("oauth_token" => "the-access-token", - * "oauth_token_secret" => "the-access-secret", - * "user_id" => "9436992", - * "screen_name" => "abraham") - */ - function getAccessToken($oauth_verifier = FALSE) - { - $parameters = []; - if (!empty($oauth_verifier)) { - $parameters['oauth_verifier'] = $oauth_verifier; - } - - $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthToken($token['oauth_token'], $token['oauth_token_secret']); - - return $token; - } - - /** - * One time exchange of username and password for access token and secret. - * - * @param string $username - * @param string $password - * @return array ("oauth_token" => "the-access-token", - * "oauth_token_secret" => "the-access-secret", - * "user_id" => "9436992", - * "screen_name" => "abraham", - * "x_auth_expires" => "0") - */ - function getXAuthToken($username, $password) - { - $parameters = []; - $parameters['x_auth_username'] = $username; - $parameters['x_auth_password'] = $password; - $parameters['x_auth_mode'] = 'client_auth'; - $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthToken($token['oauth_token'], $token['oauth_token_secret']); - - return $token; - } - - /** - * GET wrapper for oAuthRequest. - * - * @param string $url - * @param array $parameters - * @return mixed|string - */ - function get($url, $parameters = []) - { - $response = $this->oAuthRequest($url, 'GET', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - - return $response; - } - - /** - * POST wrapper for oAuthRequest. - * - * @param string $url - * @param array $parameters - * @return mixed|string - */ - function post($url, $parameters = []) - { - $response = $this->oAuthRequest($url, 'POST', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - - return $response; - } - - /** - * DELETE wrapper for oAuthReqeust. - * - * @param string $url - * @param array $parameters - * @return mixed|string - */ - function delete($url, $parameters = []) - { - $response = $this->oAuthRequest($url, 'DELETE', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - - return $response; - } - - /** - * Format and sign an OAuth / API request - * - * @param string $url - * @param string $method - * @param array $parameters - * @return mixed|string - */ - function oAuthRequest($url, $method, $parameters) - { - if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { - $url = "{$this->host}{$url}"; - } - - $request = OAuthRequest::from_consumer_and_token($this->consumer, $method, $url, $parameters, $this->token); - $request->sign_request($this->sha1_method, $this->consumer, $this->token); - switch ($method) { - case 'GET': - return $this->http($request->to_url(), 'GET'); - default: - return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); - } - } - - /** - * Make an HTTP request - * - * @param string $url - * @param string $method - * @param mixed $postfields - * @return string API results - */ - function http($url, $method, $postfields = null) - { - $this->http_info = []; - $ci = curl_init(); - /* Curl settings */ - curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); - curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); - curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); - curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); - curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); - curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); - curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); - curl_setopt($ci, CURLOPT_HEADER, FALSE); - - switch ($method) { - case 'POST': - curl_setopt($ci, CURLOPT_POST, TRUE); - if (!empty($postfields)) { - curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); - } - break; - case 'DELETE': - curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); - if (!empty($postfields)) { - $url = "{$url}?{$postfields}"; - } - } - - curl_setopt($ci, CURLOPT_URL, $url); - $response = curl_exec($ci); - $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); - $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); - $this->url = $url; - curl_close($ci); - - return $response; - } - - /** - * Get the header info to store. - * - * @param resource $ch - * @param string $header - * @return int - */ - function getHeader($ch, $header) - { - $i = strpos($header, ':'); - if (!empty($i)) { - $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); - $value = trim(substr($header, $i + 2)); - $this->http_header[$key] = $value; - } - - return strlen($header); - } -} diff --git a/tumblr/templates/admin.tpl b/tumblr/templates/admin.tpl index b361f182..f38844a2 100644 --- a/tumblr/templates/admin.tpl +++ b/tumblr/templates/admin.tpl @@ -1,3 +1,4 @@ {{include file="field_input.tpl" field=$consumer_key}} {{include file="field_input.tpl" field=$consumer_secret}} +{{include file="field_input.tpl" field=$max_tags}}
diff --git a/tumblr/templates/connector_settings.tpl b/tumblr/templates/connector_settings.tpl index d28fab9d..435059e6 100644 --- a/tumblr/templates/connector_settings.tpl +++ b/tumblr/templates/connector_settings.tpl @@ -2,6 +2,8 @@ {{include file="field_checkbox.tpl" field=$enable}} {{include file="field_checkbox.tpl" field=$bydefault}} +{{include file="field_checkbox.tpl" field=$import}} +{{include file="field_input.tpl" field=$tags}} {{if $page_select}} {{include file="field_select.tpl" field=$page_select}} diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 6cf47fbe..9e691bf2 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -7,26 +7,230 @@ * Author: Michael Vogel */ -require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'tumblroauth.php'; - -use Friendica\App; +use Friendica\Content\PageInfo; use Friendica\Content\Text\BBCode; +use Friendica\Content\Text\HTML; +use Friendica\Content\Text\NPF; +use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\Config\Util\ConfigFileManager; use Friendica\Core\Hook; -use Friendica\Core\Logger; +use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\System; +use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Model\Contact; +use Friendica\Model\Conversation; +use Friendica\Model\Item; +use Friendica\Model\Photo; use Friendica\Model\Post; use Friendica\Model\Tag; +use Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; +use Friendica\Network\HTTPClient\Client\HttpClientOptions; +use Friendica\Protocol\Activity; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Strings; +use GuzzleHttp\Client; +use GuzzleHttp\Exception\RequestException; +use GuzzleHttp\HandlerStack; +use GuzzleHttp\Subscriber\Oauth\Oauth1; + +define('TUMBLR_DEFAULT_POLL_INTERVAL', 10); // given in minutes +define('TUMBLR_DEFAULT_MAXIMUM_TAGS', 10); function tumblr_install() { - Hook::register('hook_fork', 'addon/tumblr/tumblr.php', 'tumblr_hook_fork'); - Hook::register('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); - Hook::register('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); - Hook::register('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); - Hook::register('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); - Hook::register('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); + Hook::register('load_config', __FILE__, 'tumblr_load_config'); + Hook::register('hook_fork', __FILE__, 'tumblr_hook_fork'); + Hook::register('post_local', __FILE__, 'tumblr_post_local'); + Hook::register('notifier_normal', __FILE__, 'tumblr_send'); + Hook::register('jot_networks', __FILE__, 'tumblr_jot_nets'); + Hook::register('connector_settings', __FILE__, 'tumblr_settings'); + Hook::register('connector_settings_post', __FILE__, 'tumblr_settings_post'); + Hook::register('cron', __FILE__, 'tumblr_cron'); + Hook::register('support_follow', __FILE__, 'tumblr_support_follow'); + Hook::register('support_probe', __FILE__, 'tumblr_support_probe'); + Hook::register('follow', __FILE__, 'tumblr_follow'); + Hook::register('unfollow', __FILE__, 'tumblr_unfollow'); + Hook::register('block', __FILE__, 'tumblr_block'); + Hook::register('unblock', __FILE__, 'tumblr_unblock'); + Hook::register('check_item_notification', __FILE__, 'tumblr_check_item_notification'); + Hook::register('probe_detect', __FILE__, 'tumblr_probe_detect'); + Hook::register('item_by_link', __FILE__, 'tumblr_item_by_link'); + DI::logger()->info('installed tumblr'); +} + +function tumblr_load_config(ConfigFileManager $loader) +{ + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('tumblr'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); +} + +function tumblr_check_item_notification(array &$notification_data) +{ + if (!tumblr_enabled_for_user($notification_data['uid'])) { + return; + } + + $page = tumblr_get_page($notification_data['uid']); + if (empty($page)) { + return; + } + + $own_user = Contact::selectFirst(['url', 'alias'], ['network' => Protocol::TUMBLR, 'uid' => [0, $notification_data['uid']], 'poll' => 'tumblr::' . $page]); + if ($own_user) { + $notification_data['profiles'][] = $own_user['url']; + $notification_data['profiles'][] = $own_user['alias']; + } +} + +function tumblr_probe_detect(array &$hookData) +{ + // Don't overwrite an existing result + if (isset($hookData['result'])) { + return; + } + + // Avoid a lookup for the wrong network + if (!in_array($hookData['network'], ['', Protocol::TUMBLR])) { + return; + } + + $hookData['result'] = tumblr_get_contact_by_url($hookData['uri'], $hookData['uid']); + + // Authoritative probe should set the result even if the probe was unsuccessful + if ($hookData['network'] == Protocol::TUMBLR && empty($hookData['result'])) { + $hookData['result'] = []; + } +} + +function tumblr_item_by_link(array &$hookData) +{ + // Don't overwrite an existing result + if (isset($hookData['item_id'])) { + return; + } + + if (!tumblr_enabled_for_user($hookData['uid'])) { + return; + } + + if (!preg_match('#^https?://www\.tumblr.com/blog/view/(.+)/(\d+).*#', $hookData['uri'], $matches) && !preg_match('#^https?://www\.tumblr.com/(.+)/(\d+).*#', $hookData['uri'], $matches)) { + return; + } + + DI::logger()->debug('Found tumblr post', ['url' => $hookData['uri'], 'blog' => $matches[1], 'id' => $matches[2]]); + + $parameters = ['id' => $matches[2], 'reblog_info' => false, 'notes_info' => false, 'npf' => false]; + $result = tumblr_get($hookData['uid'], 'blog/' . $matches[1] . '/posts', $parameters); + if ($result->meta->status > 399) { + DI::logger()->notice('Error fetching status', ['meta' => $result->meta, 'response' => $result->response, 'errors' => $result->errors, 'blog' => $matches[1], 'id' => $matches[2]]); + return []; + } + + DI::logger()->debug('Got post', ['blog' => $matches[1], 'id' => $matches[2], 'result' => $result->response->posts]); + if (!empty($result->response->posts)) { + $hookData['item_id'] = tumblr_process_post($result->response->posts[0], $hookData['uid'], Item::PR_FETCHED); + Item::incrementInbound(Protocol::TUMBLR); + } +} + +function tumblr_support_follow(array &$data) +{ + if ($data['protocol'] == Protocol::TUMBLR) { + $data['result'] = true; + } +} + +function tumblr_support_probe(array &$data) +{ + if ($data['protocol'] == Protocol::TUMBLR) { + $data['result'] = true; + } +} + +function tumblr_follow(array &$hook_data) +{ + $uid = DI::userSession()->getLocalUserId(); + + if (!tumblr_enabled_for_user($uid)) { + return; + } + + DI::logger()->debug('Check if contact is Tumblr', ['url' => $hook_data['url']]); + + $fields = tumblr_get_contact_by_url($hook_data['url'], $uid); + if (empty($fields)) { + DI::logger()->debug('Contact is not a Tumblr contact', ['url' => $hook_data['url']]); + return; + } + + $result = tumblr_post($uid, 'user/follow', ['url' => $fields['url']]); + if ($result->meta->status <= 399) { + $hook_data['contact'] = $fields; + DI::logger()->debug('Successfully start following', ['url' => $fields['url']]); + } else { + DI::logger()->notice('Following failed', ['meta' => $result->meta, 'response' => $result->response, 'errors' => $result->errors, 'url' => $fields['url']]); + } +} + +function tumblr_unfollow(array &$hook_data) +{ + if (!tumblr_enabled_for_user($hook_data['uid'])) { + return; + } + + if (!tumblr_get_contact_uuid($hook_data['contact'])) { + return; + } + $result = tumblr_post($hook_data['uid'], 'user/unfollow', ['url' => $hook_data['contact']['url']]); + $hook_data['result'] = ($result->meta->status <= 399); +} + +function tumblr_block(array &$hook_data) +{ + if (!tumblr_enabled_for_user($hook_data['uid'])) { + return; + } + + $uuid = tumblr_get_contact_uuid($hook_data['contact']); + if (!$uuid) { + return; + } + + $result = tumblr_post($hook_data['uid'], 'blog/' . tumblr_get_page($hook_data['uid']) . '/blocks', ['blocked_tumblelog' => $uuid]); + $hook_data['result'] = ($result->meta->status <= 399); + + if ($hook_data['result']) { + $ucid = Contact::getUserContactId($hook_data['contact']['id'], $hook_data['uid']); + if ($ucid) { + Contact::remove($ucid); + } + } +} + +function tumblr_unblock(array &$hook_data) +{ + if (!tumblr_enabled_for_user($hook_data['uid'])) { + return; + } + + $uuid = tumblr_get_contact_uuid($hook_data['contact']); + if (!$uuid) { + return; + } + + $result = tumblr_delete($hook_data['uid'], 'blog/' . tumblr_get_page($hook_data['uid']) . '/blocks', ['blocked_tumblelog' => $uuid]); + $hook_data['result'] = ($result->meta->status <= 399); +} + +function tumblr_get_contact_uuid(array $contact): string +{ + if (($contact['network'] != Protocol::TUMBLR) || (substr($contact['poll'], 0, 8) != 'tumblr::')) { + return ''; + } + return substr($contact['poll'], 8); } /** @@ -40,39 +244,62 @@ function tumblr_content() { if (!DI::userSession()->getLocalUserId()) { DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); - return ''; + return; } - if (isset(DI::args()->getArgv()[1])) { - switch (DI::args()->getArgv()[1]) { - case "connect": - $o = tumblr_connect(); - break; + switch (DI::args()->getArgv()[1] ?? '') { + case 'connect': + tumblr_connect(); + break; - case "callback": - $o = tumblr_callback(); - break; + case 'redirect': + tumblr_redirect(); + break; + } + DI::baseUrl()->redirect('settings/connectors/tumblr'); +} - default: - $o = print_r(DI::args()->getArgv(), true); - break; - } - } else { - $o = tumblr_connect(); +function tumblr_redirect() +{ + if (($_REQUEST['state'] ?? '') != DI::session()->get('oauth_state')) { + return; } - return $o; + tumblr_get_token(DI::userSession()->getLocalUserId(), $_REQUEST['code'] ?? ''); +} + +function tumblr_connect() +{ + // Define the needed keys + $consumer_key = DI::config()->get('tumblr', 'consumer_key'); + $consumer_secret = DI::config()->get('tumblr', 'consumer_secret'); + + if (empty($consumer_key) || empty($consumer_secret)) { + return; + } + + $state = base64_encode(random_bytes(20)); + DI::session()->set('oauth_state', $state); + + $parameters = [ + 'client_id' => $consumer_key, + 'response_type' => 'code', + 'scope' => 'basic write offline_access', + 'state' => $state + ]; + + System::externalRedirect('https://www.tumblr.com/oauth2/authorize?' . http_build_query($parameters)); } function tumblr_addon_admin(string &$o) { - $t = Renderer::getMarkupTemplate( "admin.tpl", "addon/tumblr/" ); + $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/tumblr/'); $o = Renderer::replaceMacros($t, [ '$submit' => DI::l10n()->t('Save Settings'), - // name, label, value, help, [extra values] - '$consumer_key' => ['consumer_key', DI::l10n()->t('Consumer Key'), DI::config()->get('tumblr', 'consumer_key' ), ''], - '$consumer_secret' => ['consumer_secret', DI::l10n()->t('Consumer Secret'), DI::config()->get('tumblr', 'consumer_secret' ), ''], + '$consumer_key' => ['consumer_key', DI::l10n()->t('Consumer Key'), DI::config()->get('tumblr', 'consumer_key'), ''], + '$consumer_secret' => ['consumer_secret', DI::l10n()->t('Consumer Secret'), DI::config()->get('tumblr', 'consumer_secret'), ''], + '$max_tags' => ['max_tags', DI::l10n()->t('Maximum tags'), DI::config()->get('tumblr', 'max_tags') ?? TUMBLR_DEFAULT_MAXIMUM_TAGS, DI::l10n()->t('Maximum number of tags that a user can follow. Enter 0 to deactivate the feature.')], ]); } @@ -80,122 +307,7 @@ function tumblr_addon_admin_post() { DI::config()->set('tumblr', 'consumer_key', trim($_POST['consumer_key'] ?? '')); DI::config()->set('tumblr', 'consumer_secret', trim($_POST['consumer_secret'] ?? '')); -} - -function tumblr_connect() -{ - // Start a session. This is necessary to hold on to a few keys the callback script will also need - session_start(); - - // Include the TumblrOAuth library - //require_once('addon/tumblr/tumblroauth/tumblroauth.php'); - - // Define the needed keys - $consumer_key = DI::config()->get('tumblr', 'consumer_key'); - $consumer_secret = DI::config()->get('tumblr', 'consumer_secret'); - - // The callback URL is the script that gets called after the user authenticates with tumblr - // In this example, it would be the included callback.php - $callback_url = DI::baseUrl()->get() . '/tumblr/callback'; - - // Let's begin. First we need a Request Token. The request token is required to send the user - // to Tumblr's login page. - - // Create a new instance of the TumblrOAuth library. For this step, all we need to give the library is our - // Consumer Key and Consumer Secret - $tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret); - - // Ask Tumblr for a Request Token. Specify the Callback URL here too (although this should be optional) - $request_token = $tum_oauth->getRequestToken($callback_url); - - // Store the request token and Request Token Secret as out callback.php script will need this - $_SESSION['request_token'] = $token = $request_token['oauth_token']; - $_SESSION['request_token_secret'] = $request_token['oauth_token_secret']; - - // Check the HTTP Code. It should be a 200 (OK), if it's anything else then something didn't work. - switch ($tum_oauth->http_code) { - case 200: - // Ask Tumblr to give us a special address to their login page - $url = $tum_oauth->getAuthorizeURL($token); - - // Redirect the user to the login URL given to us by Tumblr - header('Location: ' . $url); - - /* - * That's it for our side. The user is sent to a Tumblr Login page and - * asked to authroize our app. After that, Tumblr sends the user back to - * our Callback URL (callback.php) along with some information we need to get - * an access token. - */ - break; - - default: - // Give an error message - $o = 'Could not connect to Tumblr. Refresh the page or try again later.'; - } - - return $o; -} - -function tumblr_callback() -{ - // Start a session, load the library - session_start(); - //require_once('addon/tumblr/tumblroauth/tumblroauth.php'); - - // Define the needed keys - $consumer_key = DI::config()->get('tumblr', 'consumer_key'); - $consumer_secret = DI::config()->get('tumblr', 'consumer_secret'); - - // Once the user approves your app at Tumblr, they are sent back to this script. - // This script is passed two parameters in the URL, oauth_token (our Request Token) - // and oauth_verifier (Key that we need to get Access Token). - // We'll also need out Request Token Secret, which we stored in a session. - - // Create instance of TumblrOAuth. - // It'll need our Consumer Key and Secret as well as our Request Token and Secret - $tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret, $_SESSION['request_token'], $_SESSION['request_token_secret']); - - // Ok, let's get an Access Token. We'll need to pass along our oauth_verifier which was given to us in the URL. - $access_token = $tum_oauth->getAccessToken($_REQUEST['oauth_verifier']); - - // We're done with the Request Token and Secret so let's remove those. - unset($_SESSION['request_token']); - unset($_SESSION['request_token_secret']); - - // Make sure nothing went wrong. - if (200 == $tum_oauth->http_code) { - // good to go - } else { - return 'Unable to authenticate'; - } - - // What's next? Now that we have an Access Token and Secret, we can make an API call. - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'oauth_token', $access_token['oauth_token']); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'oauth_token_secret', $access_token['oauth_token_secret']); - - $o = DI::l10n()->t("You are now authenticated to tumblr."); - $o .= '
' . DI::l10n()->t("return to the connector page") . ''; - - return $o; -} - -function tumblr_jot_nets(array &$jotnets_fields) -{ - if (!DI::userSession()->getLocalUserId()) { - return; - } - - if (DI::pConfig()->get(DI::userSession()->getLocalUserId(),'tumblr','post')) { - $jotnets_fields[] = [ - 'type' => 'checkbox', - 'field' => [ - 'tumblr_enable', - DI::l10n()->t('Post to Tumblr'), - DI::pConfig()->get(DI::userSession()->getLocalUserId(),'tumblr','post_by_default') - ] - ]; - } + DI::config()->set('tumblr', 'max_tags', max(0, intval($_POST['max_tags'] ?? ''))); } function tumblr_settings(array &$data) @@ -204,25 +316,27 @@ function tumblr_settings(array &$data) return; } - $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post', false); - $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post_by_default', false); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post') ?? false; + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post_by_default') ?? false; + $import = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'import') ?? false; + $tags = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'tags') ?? []; - $oauth_token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'oauth_token'); - $oauth_token_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'oauth_token_secret'); + $max_tags = DI::config()->get('tumblr', 'max_tags') ?? TUMBLR_DEFAULT_MAXIMUM_TAGS; - if ($oauth_token && $oauth_token_secret) { - $page = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'page'); - $consumer_key = DI::config()->get('tumblr', 'consumer_key'); - $consumer_secret = DI::config()->get('tumblr', 'consumer_secret'); + $tags_str = implode(', ', $tags); + $cachekey = 'tumblr-blogs-' . DI::userSession()->getLocalUserId(); + $blogs = DI::cache()->get($cachekey); + if (empty($blogs)) { + $blogs = tumblr_get_blogs(DI::userSession()->getLocalUserId()); + if (!empty($blogs)) { + DI::cache()->set($cachekey, $blogs, Duration::HALF_HOUR); + } + } - $tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); - $userinfo = $tum_oauth->get('user/info'); + if (!empty($blogs)) { + $page = tumblr_get_page(DI::userSession()->getLocalUserId(), $blogs); - $blogs = array_map(function ($blog) { - return substr(str_replace(["http://", "https://"], ["", ""], $blog->url), 0, -1); - }, $userinfo->response->user->blogs); - - $page_select = ['tumblr-page', DI::l10n()->t('Post to page:'), $page, '', $blogs]; + $page_select = ['tumblr_page', DI::l10n()->t('Post to page:'), $page, '', $blogs]; } $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/tumblr/'); @@ -232,31 +346,124 @@ function tumblr_settings(array &$data) 'noconnect' => DI::l10n()->t('You are not authenticated to tumblr'), ], - '$authenticate_url' => DI::baseUrl()->get() . '/tumblr/connect', + '$authenticate_url' => DI::baseUrl() . '/tumblr/connect', '$enable' => ['tumblr', DI::l10n()->t('Enable Tumblr Post Addon'), $enabled], '$bydefault' => ['tumblr_bydefault', DI::l10n()->t('Post to Tumblr by default'), $def_enabled], + '$import' => ['tumblr_import', DI::l10n()->t('Import the remote timeline'), $import], + '$tags' => ['tags', DI::l10n()->t('Subscribed tags'), $tags_str, DI::l10n()->t('Comma separated list of up to %d tags that will be imported additionally to the timeline', $max_tags)], '$page_select' => $page_select ?? '', ]); $data = [ 'connector' => 'tumblr', - 'title' => DI::l10n()->t('Tumblr Export'), + 'title' => DI::l10n()->t('Tumblr Import/Export'), 'image' => 'images/tumblr.png', 'enabled' => $enabled, 'html' => $html, ]; } +function tumblr_jot_nets(array &$jotnets_fields) +{ + if (!DI::userSession()->getLocalUserId()) { + return; + } + + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post')) { + $jotnets_fields[] = [ + 'type' => 'checkbox', + 'field' => [ + 'tumblr_enable', + DI::l10n()->t('Post to Tumblr'), + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post_by_default') + ] + ]; + } +} + function tumblr_settings_post(array &$b) { if (!empty($_POST['tumblr-submit'])) { DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'post', intval($_POST['tumblr'])); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'page', $_POST['tumblr_page']); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'post_by_default', intval($_POST['tumblr_bydefault'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'import', intval($_POST['tumblr_import'])); + + $max_tags = DI::config()->get('tumblr', 'max_tags') ?? TUMBLR_DEFAULT_MAXIMUM_TAGS; + + $tags = array_slice( + array_filter( + array_map( + function($tag) { return trim($tag, ' #');}, + explode(',', $_POST['tags']) ?: [] + ) + ), + 0, + $max_tags, + ); + + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'tags', $tags); } } +function tumblr_cron() +{ + $last = (int)DI::keyValue()->get('tumblr_last_poll'); + + $poll_interval = intval(DI::config()->get('tumblr', 'poll_interval')); + if (!$poll_interval) { + $poll_interval = TUMBLR_DEFAULT_POLL_INTERVAL; + } + + if ($last) { + $next = $last + ($poll_interval * 60); + if ($next > time()) { + DI::logger()->notice('poll interval not reached'); + return; + } + } + DI::logger()->notice('cron_start'); + + $abandon_days = intval(DI::config()->get('system', 'account_abandon_days')); + if ($abandon_days < 1) { + $abandon_days = 0; + } + + $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); + + $pconfigs = DBA::selectToArray('pconfig', [], ['cat' => 'tumblr', 'k' => 'import', 'v' => true]); + foreach ($pconfigs as $pconfig) { + if ($abandon_days != 0) { + if (!DBA::exists('user', ["`uid` = ? AND `login_date` >= ?", $pconfig['uid'], $abandon_limit])) { + DI::logger()->notice('abandoned account: timeline from user will not be imported', ['user' => $pconfig['uid']]); + continue; + } + } + + DI::logger()->notice('importing timeline - start', ['user' => $pconfig['uid']]); + tumblr_fetch_dashboard($pconfig['uid'], $last); + tumblr_fetch_tags($pconfig['uid'], $last); + DI::logger()->notice('importing timeline - done', ['user' => $pconfig['uid']]); + } + + $last_clean = DI::keyValue()->get('tumblr_last_clean'); + if (empty($last_clean) || ($last_clean + 86400 < time())) { + DI::logger()->notice('Start contact cleanup'); + $contacts = DBA::select('account-user-view', ['id', 'pid'], ["`network` = ? AND `uid` != ? AND `rel` = ?", Protocol::TUMBLR, 0, Contact::NOTHING]); + while ($contact = DBA::fetch($contacts)) { + Worker::add(Worker::PRIORITY_LOW, 'MergeContact', $contact['pid'], $contact['id'], 0); + } + DBA::close($contacts); + DI::keyValue()->set('tumblr_last_clean', time()); + DI::logger()->notice('Contact cleanup done'); + } + + DI::logger()->notice('cron_end'); + + DI::keyValue()->set('tumblr_last_poll', time()); +} + function tumblr_hook_fork(array &$b) { if ($b['name'] != 'notifier_normal') { @@ -265,8 +472,22 @@ function tumblr_hook_fork(array &$b) $post = $b['data']; - if ($post['deleted'] || $post['private'] || ($post['created'] !== $post['edited']) || - !strstr($post['postopts'] ?? '', 'tumblr') || ($post['parent'] != $post['id'])) { + // Editing is not supported by the addon + if (($post['created'] !== $post['edited']) && !$post['deleted']) { + DI::logger()->info('Editing is not supported by the addon'); + $b['execute'] = false; + return; + } + + if (DI::pConfig()->get($post['uid'], 'tumblr', 'import')) { + // Don't post if it isn't a reply to a tumblr post + if (($post['gravity'] != Item::GRAVITY_PARENT) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::TUMBLR])) { + DI::logger()->notice('No tumblr parent found', ['item' => $post['id']]); + $b['execute'] = false; + return; + } + } elseif (!strstr($post['postopts'] ?? '', 'tumblr') || ($post['gravity'] != Item::GRAVITY_PARENT) || ($post['private'] == Item::PRIVATE)) { + DI::logger()->info('Post will not be exported', ['uid' => $post['uid'], 'postopts' => $post['postopts'], 'gravity' => $post['gravity'], 'private' => $post['private']]); $b['execute'] = false; return; } @@ -274,24 +495,18 @@ function tumblr_hook_fork(array &$b) function tumblr_post_local(array &$b) { - // This can probably be changed to allow editing by pointing to a different API endpoint - - if ($b['edit']) { - return; - } - if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } - if ($b['private'] || $b['parent']) { + if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) { return; } $tmbl_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post')); - $tmbl_enable = (($tmbl_post && !empty($_REQUEST['tumblr_enable'])) ? intval($_REQUEST['tumblr_enable']) : 0); + // if API is used, default to the chosen settings if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post_by_default'))) { $tmbl_enable = 1; } @@ -307,138 +522,1002 @@ function tumblr_post_local(array &$b) $b['postopts'] .= 'tumblr'; } - - - -function tumblr_send(array &$b) { - - if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) { +function tumblr_send(array &$b) +{ + if (($b['created'] !== $b['edited']) && !$b['deleted']) { return; } - if (! strstr($b['postopts'],'tumblr')) { - return; - } + if ($b['gravity'] != Item::GRAVITY_PARENT) { + DI::logger()->debug('Got comment', ['item' => $b]); - if ($b['parent'] != $b['id']) { - return; - } - - // Dont't post if the post doesn't belong to us. - // This is a check for forum postings - $self = DBA::selectFirst('contact', ['id'], ['uid' => $b['uid'], 'self' => true]); - if ($b['contact-id'] != $self['id']) { - return; - } - - $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], DI::contentItem()->addSharedPost($b)); - - $oauth_token = DI::pConfig()->get($b['uid'], "tumblr", "oauth_token"); - $oauth_token_secret = DI::pConfig()->get($b['uid'], "tumblr", "oauth_token_secret"); - $page = DI::pConfig()->get($b['uid'], "tumblr", "page"); - $tmbl_blog = 'blog/' . $page . '/post'; - - if ($oauth_token && $oauth_token_secret && $tmbl_blog) { - $tags = Tag::getByURIId($b['uri-id']); - - $tag_arr = []; - - foreach($tags as $tag) { - $tag_arr[] = $tag['name']; + $parent = tumblr_get_post_from_uri($b['thr-parent']); + if (empty($parent)) { + DI::logger()->notice('No tumblr post', ['thr-parent' => $b['thr-parent']]); + return; } - if (count($tag_arr)) { - $tags = implode(',', $tag_arr); - } + DI::logger()->debug('Parent found', ['parent' => $parent]); - $title = trim($b['title']); + $page = tumblr_get_page($b['uid']); - $siteinfo = BBCode::getAttachedData($b["body"]); - - $params = [ - 'state' => 'published', - 'tags' => $tags, - 'tweet' => 'off', - 'format' => 'html', - ]; - - if (!isset($siteinfo["type"])) { - $siteinfo["type"] = ""; - } - - if (($title == "") && isset($siteinfo["title"])) { - $title = $siteinfo["title"]; - } - - if (isset($siteinfo["text"])) { - $body = $siteinfo["text"]; + if ($b['gravity'] == Item::GRAVITY_COMMENT) { + DI::logger()->notice('Commenting is not supported (yet)'); } else { - $body = BBCode::removeShareInformation($b["body"]); - } - - switch ($siteinfo["type"]) { - case "photo": - $params['type'] = "photo"; - $params['caption'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS);; - - if (isset($siteinfo["url"])) { - $params['link'] = $siteinfo["url"]; + if (($b['verb'] == Activity::LIKE) && !$b['deleted']) { + $params = ['id' => $parent['id'], 'reblog_key' => $parent['reblog_key']]; + $result = tumblr_post($b['uid'], 'user/like', $params); + } elseif (($b['verb'] == Activity::LIKE) && $b['deleted']) { + $params = ['id' => $parent['id'], 'reblog_key' => $parent['reblog_key']]; + $result = tumblr_post($b['uid'], 'user/unlike', $params); + } elseif (($b['verb'] == Activity::ANNOUNCE) && !$b['deleted']) { + $params = ['id' => $parent['id'], 'reblog_key' => $parent['reblog_key']]; + $result = tumblr_post($b['uid'], 'blog/' . $page . '/post/reblog', $params); + } elseif (($b['verb'] == Activity::ANNOUNCE) && $b['deleted']) { + $announce = tumblr_get_post_from_uri($b['extid']); + if (empty($announce)) { + return; } + $params = ['id' => $announce['id']]; + $result = tumblr_post($b['uid'], 'blog/' . $page . '/post/delete', $params); + } else { + // Unsupported activity + return; + } - $params['source'] = $siteinfo["image"]; - break; + if ($result->meta->status < 400) { + DI::logger()->info('Successfully performed activity', ['verb' => $b['verb'], 'deleted' => $b['deleted'], 'meta' => $result->meta, 'response' => $result->response]); + if (!$b['deleted'] && !empty($result->response->id_string)) { + Item::update(['extid' => 'tumblr::' . $result->response->id_string], ['guid' => $b['guid']]); + } + } else { + DI::logger()->notice('Error while performing activity', ['verb' => $b['verb'], 'deleted' => $b['deleted'], 'meta' => $result->meta, 'response' => $result->response, 'errors' => $result->errors, 'params' => $params]); + } + } + return; + } elseif (($b['private'] == Item::PRIVATE) || !strstr($b['postopts'], 'tumblr')) { + return; + } - case "link": - $params['type'] = "link"; - $params['title'] = $title; - $params['url'] = $siteinfo["url"]; - $params['description'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS); - break; + if (!tumblr_send_npf($b)) { + tumblr_send_legacy($b); + } +} - case "audio": - $params['type'] = "audio"; - $params['external_url'] = $siteinfo["url"]; - $params['caption'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS); - break; +function tumblr_send_legacy(array $b) +{ + $b['body'] = BBCode::removeAttachment($b['body']); - case "video": - $params['type'] = "video"; - $params['embed'] = $siteinfo["url"]; - $params['caption'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS); - break; + $title = trim($b['title']); - default: - $params['type'] = "text"; - $params['title'] = $title; - $params['body'] = BBCode::convertForUriId($b['uri-id'], $b['body'], BBCode::CONNECTORS); - break; + $media = Post\Media::getByURIId($b['uri-id'], [Post\Media::HTML, Post\Media::AUDIO, Post\Media::VIDEO, Post\Media::IMAGE]); + + $photo = array_search(Post\Media::IMAGE, array_column($media, 'type')); + $link = array_search(Post\Media::HTML, array_column($media, 'type')); + $audio = array_search(Post\Media::AUDIO, array_column($media, 'type')); + $video = array_search(Post\Media::VIDEO, array_column($media, 'type')); + + $params = [ + 'state' => 'published', + 'tags' => implode(',', array_column(Tag::getByURIId($b['uri-id']), 'name')), + 'tweet' => 'off', + 'format' => 'html', + ]; + + $body = BBCode::removeShareInformation($b['body']); + $body = Post\Media::removeFromEndOfBody($body); + + if (!empty($b['quote-uri-id'])) { + $quote = Post::selectFirstPost(['uri', 'plink'], ['uri-id' => $b['quote-uri-id']]); + if (!empty($quote)) { + if ((strpos($body, $quote['plink'] ?: $quote['uri']) === false) && (strpos($body, $quote['uri']) === false)) { + $body .= "\n[url]" . ($quote['plink'] ?: $quote['uri']) . "[/url]\n"; + } + } + } + + if ($photo !== false) { + $params['type'] = 'photo'; + $params['caption'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS); + $params['data'] = []; + foreach ($media as $photo) { + if ($photo['type'] == Post\Media::IMAGE) { + if (DI::baseUrl()->isLocalUrl($photo['url']) && ($data = Photo::getResourceData($photo['url']))) { + $photo = Photo::selectFirst([], ["`resource-id` = ? AND `scale` > ?", $data['guid'], 0]); + if (!empty($photo)) { + $params['data'][] = Photo::getImageDataForPhoto($photo); + } + } + } + } + } elseif ($link !== false) { + $params['type'] = 'link'; + $params['title'] = $media[$link]['name']; + $params['url'] = $media[$link]['url']; + $params['description'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS); + + if (!empty($media[$link]['preview'])) { + $params['thumbnail'] = $media[$link]['preview']; + } + if (!empty($media[$link]['description'])) { + $params['excerpt'] = $media[$link]['description']; + } + if (!empty($media[$link]['author-name'])) { + $params['author'] = $media[$link]['author-name']; + } + } elseif ($audio !== false) { + $params['type'] = 'audio'; + $params['external_url'] = $media[$audio]['url']; + $params['caption'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS); + } elseif ($video !== false) { + $params['type'] = 'video'; + $params['embed'] = $media[$video]['url']; + $params['caption'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS); + } else { + $params['type'] = 'text'; + $params['title'] = $title; + $params['body'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS); + } + + if (isset($params['caption']) && (trim($title) != '')) { + $params['caption'] = '

' . $title . '

' . + '

' . $params['caption'] . '

'; + } + + $page = tumblr_get_page($b['uid']); + + $result = tumblr_post($b['uid'], 'blog/' . $page . '/post', $params); + + if ($result->meta->status < 400) { + DI::logger()->info('Success (legacy)', ['blog' => $page, 'meta' => $result->meta, 'response' => $result->response]); + } else { + DI::logger()->notice('Error posting blog (legacy)', ['blog' => $page, 'meta' => $result->meta, 'response' => $result->response, 'errors' => $result->errors, 'params' => $params]); + } +} + +function tumblr_send_npf(array $post): bool +{ + $page = tumblr_get_page($post['uid']); + + if (empty($page)) { + DI::logger()->notice('Missing page, post will not be send to Tumblr.', ['uid' => $post['uid'], 'page' => $page, 'id' => $post['id']]); + // "true" is returned, since the legacy function will fail as well. + return true; + } + + $post['body'] = Post\Media::addAttachmentsToBody($post['uri-id'], $post['body'], [Post\Media::IMAGE, Post\Media::AUDIO, Post\Media::VIDEO, Post\Media::ACTIVITY]); + if (!empty($post['title'])) { + $post['body'] = '[h1]' . $post['title'] . "[/h1]\n" . $post['body']; + } + + if (!empty($post['quote-uri-id'])) { + $quote = Post::selectFirstPost(['uri', 'plink'], ['uri-id' => $post['quote-uri-id']]); + if (!empty($quote)) { + if ((strpos($post['body'], $quote['plink'] ?: $quote['uri']) === false) && (strpos($post['body'], $quote['uri']) === false)) { + $post['body'] .= "\n[url]" . ($quote['plink'] ?: $quote['uri']) . "[/url]\n"; + } + } + } + + $params = [ + 'content' => NPF::fromBBCode($post['body'], $post['uri-id']), + 'state' => 'published', + 'date' => DateTimeFormat::utc($post['created'], DateTimeFormat::ATOM), + 'tags' => implode(',', array_column(Tag::getByURIId($post['uri-id']), 'name')), + 'is_private' => false, + 'interactability_reblog' => 'everyone' + ]; + + $result = tumblr_post($post['uid'], 'blog/' . $page . '/posts', $params); + + if ($result->meta->status < 400) { + DI::logger()->info('Success (NPF)', ['blog' => $page, 'meta' => $result->meta, 'response' => $result->response]); + return true; + } else { + DI::logger()->notice('Error posting blog (NPF)', ['blog' => $page, 'meta' => $result->meta, 'response' => $result->response, 'errors' => $result->errors, 'params' => $params]); + return false; + } +} + +function tumblr_get_post_from_uri(string $uri): array +{ + $parts = explode(':', $uri); + if (($parts[0] != 'tumblr') || empty($parts[2])) { + return []; + } + + $post['id'] = $parts[2]; + $post['reblog_key'] = $parts[3] ?? ''; + + $post['reblog_key'] = str_replace('@t', '', $post['reblog_key']); // Temp + return $post; +} + +/** + * Fetch posts for user defined hashtags for the given user + * + * @param int $uid + * @param int $last_poll + * @return void + */ +function tumblr_fetch_tags(int $uid, int $last_poll) +{ + if (!DI::config()->get('tumblr', 'max_tags') ?? TUMBLR_DEFAULT_MAXIMUM_TAGS) { + return; + } + + foreach (DI::pConfig()->get($uid, 'tumblr', 'tags') ?? [] as $tag) { + // Tumblr will return an error for queries on empty tag + if (!$tag) { + continue; } - if (isset($params['caption']) && (trim($title) != "")) { - $params['caption'] = '

'.$title."

". - "

".$params['caption']."

"; + $data = tumblr_get($uid, 'tagged', ['tag' => $tag]); + + if (!is_array($data->response)) { + DI::logger()->warning('Unexpected Tumblr response format', ['uid' => $uid, 'url' => 'tagged', 'parameters' => ['tag' => $tag], 'data' => $data]); + continue; } - if (empty($params['caption']) && !empty($siteinfo["description"])) { - $params['caption'] = BBCode::convertForUriId($b['uri-id'], "[quote]" . $siteinfo["description"] . "[/quote]", BBCode::CONNECTORS); - } - - $consumer_key = DI::config()->get('tumblr','consumer_key'); - $consumer_secret = DI::config()->get('tumblr','consumer_secret'); - - $tum_oauth = new TumblrOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); - - // Make an API call with the TumblrOAuth instance. - $x = $tum_oauth->post($tmbl_blog,$params); - $ret_code = $tum_oauth->http_code; - - //print_r($params); - if ($ret_code == 201) { - Logger::notice('tumblr_send: success'); - } elseif ($ret_code == 403) { - Logger::notice('tumblr_send: authentication failure'); - } else { - Logger::notice('tumblr_send: general error', ['error' => $x]); + foreach (array_reverse($data->response) as $post) { + $id = tumblr_process_post($post, $uid, Item::PR_TAG, $last_poll); + if (!empty($id)) { + DI::logger()->debug('Tag post imported', ['tag' => $tag, 'id' => $id]); + $post = Post::selectFirst(['uri-id'], ['id' => $id]); + $stored = Post\Category::storeFileByURIId($post['uri-id'], $uid, Post\Category::SUBCRIPTION, $tag); + DI::logger()->debug('Stored tag subscription for user', ['uri-id' => $post['uri-id'], 'uid' => $uid, 'tag' => $tag, 'stored' => $stored]); + Item::incrementInbound(Protocol::TUMBLR); + } } } } + +/** + * Fetch the dashboard (timeline) for the given user + * + * @param int $uid + * @param int $last_poll + * @return void + */ +function tumblr_fetch_dashboard(int $uid, int $last_poll) +{ + $parameters = ['reblog_info' => false, 'notes_info' => false, 'npf' => false]; + + $last = DI::pConfig()->get($uid, 'tumblr', 'last_id'); + if (!empty($last)) { + $parameters['since_id'] = $last; + } + + $dashboard = tumblr_get($uid, 'user/dashboard', $parameters); + if ($dashboard->meta->status > 399) { + DI::logger()->notice('Error fetching dashboard', ['meta' => $dashboard->meta, 'response' => $dashboard->response, 'errors' => $dashboard->errors]); + return; + } + + if (empty($dashboard->response->posts)) { + return; + } + + foreach (array_reverse($dashboard->response->posts) as $post) { + if ($post->id > $last) { + $last = $post->id; + } + + DI::logger()->debug('Importing post', ['uid' => $uid, 'created' => date(DateTimeFormat::MYSQL, $post->timestamp), 'id' => $post->id_string]); + + tumblr_process_post($post, $uid, Item::PR_NONE, $last_poll); + Item::incrementInbound(Protocol::TUMBLR); + + DI::pConfig()->set($uid, 'tumblr', 'last_id', $last); + } +} + +function tumblr_process_post(stdClass $post, int $uid, int $post_reason, int $last_poll = 0): int +{ + $uri = 'tumblr::' . $post->id_string . ':' . $post->reblog_key; + + if (Post::exists(['uri' => $uri, 'uid' => $uid]) || ($post->blog->uuid == tumblr_get_page($uid))) { + return 0; + } + + $item = tumblr_get_header($post, $uri, $uid); + + $item = tumblr_get_content($item, $post); + + $item['post-reason'] = $post_reason; + + if (!empty($post->followed)) { + $item['post-reason'] = Item::PR_FOLLOWER; + } + + if (($last_poll != 0) && strtotime($item['created']) > $last_poll) { + $item['received'] = $item['created']; + } + + $id = Item::insert($item); + + if ($id) { + $stored = Post::selectFirst(['uri-id'], ['id' => $id]); + + if (!empty($post->tags)) { + foreach ($post->tags as $tag) { + Tag::store($stored['uri-id'], Tag::HASHTAG, $tag); + } + } + } + return $id; +} + +/** + * Sets the initial data for the item array + * + * @param stdClass $post + * @param string $uri + * @param integer $uid + * @return array + */ +function tumblr_get_header(stdClass $post, string $uri, int $uid): array +{ + $contact = tumblr_get_contact($post->blog, $uid); + $item = [ + 'network' => Protocol::TUMBLR, + 'protocol' => Conversation::PARCEL_CONNECTOR, + 'uid' => $uid, + 'wall' => false, + 'uri' => $uri, + 'private' => Item::UNLISTED, + 'verb' => Activity::POST, + 'contact-id' => $contact['id'], + 'author-name' => $contact['name'], + 'author-link' => $contact['url'], + 'author-avatar' => $contact['avatar'], + 'plink' => $post->post_url, + 'created' => date(DateTimeFormat::MYSQL, $post->timestamp) + ]; + + $item['owner-name'] = $item['author-name']; + $item['owner-link'] = $item['author-link']; + $item['owner-avatar'] = $item['author-avatar']; + + return $item; +} + +/** + * Set the body according the given content type + * + * @param array $item + * @param stdClass $post + * @return array + */ +function tumblr_get_content(array $item, stdClass $post): array +{ + switch ($post->type) { + case 'text': + $item['title'] = $post->title; + $item['body'] = HTML::toBBCode(tumblr_add_npf_data($post->body, $post->post_url)); + break; + + case 'quote': + if (empty($post->text)) { + $body = HTML::toBBCode($post->text) . "\n"; + } else { + $body = ''; + } + if (!empty($post->source_title) && !empty($post->source_url)) { + $body .= '[url=' . $post->source_url . ']' . $post->source_title . "[/url]:\n"; + } elseif (!empty($post->source_title)) { + $body .= $post->source_title . ":\n"; + } + $body .= '[quote]' . HTML::toBBCode($post->source) . '[/quote]'; + $item['body'] = $body; + break; + + case 'link': + $item['body'] = HTML::toBBCode($post->description) . "\n" . PageInfo::getFooterFromUrl($post->url); + break; + + case 'answer': + if (!empty($post->asking_name) && !empty($post->asking_url)) { + $body = '[url=' . $post->asking_url . ']' . $post->asking_name . "[/url]:\n"; + } elseif (!empty($post->asking_name)) { + $body = $post->asking_name . ":\n"; + } else { + $body = ''; + } + $body .= '[quote]' . HTML::toBBCode($post->question) . "[/quote]\n" . HTML::toBBCode($post->answer); + $item['body'] = $body; + break; + + case 'video': + $item['body'] = HTML::toBBCode($post->caption); + if (!empty($post->video_url)) { + $item['body'] .= "\n[video]" . $post->video_url . "[/video]\n"; + } elseif (!empty($post->thumbnail_url)) { + $item['body'] .= "\n[url=" . $post->permalink_url . "][img]" . $post->thumbnail_url . "[/img][/url]\n"; + } elseif (!empty($post->permalink_url)) { + $item['body'] .= "\n[url]" . $post->permalink_url . "[/url]\n"; + } elseif (!empty($post->source_url) && !empty($post->source_title)) { + $item['body'] .= "\n[url=" . $post->source_url . "]" . $post->source_title . "[/url]\n"; + } elseif (!empty($post->source_url)) { + $item['body'] .= "\n[url]" . $post->source_url . "[/url]\n"; + } + break; + + case 'audio': + $item['body'] = HTML::toBBCode($post->caption); + if (!empty($post->source_url) && !empty($post->source_title)) { + $item['body'] .= "\n[url=" . $post->source_url . "]" . $post->source_title . "[/url]\n"; + } elseif (!empty($post->source_url)) { + $item['body'] .= "\n[url]" . $post->source_url . "[/url]\n"; + } + break; + + case 'photo': + $item['body'] = HTML::toBBCode($post->caption); + foreach ($post->photos as $photo) { + if (!empty($photo->original_size)) { + $item['body'] .= "\n[img]" . $photo->original_size->url . "[/img]"; + } elseif (!empty($photo->alt_sizes)) { + $item['body'] .= "\n[img]" . $photo->alt_sizes[0]->url . "[/img]"; + } + } + break; + + case 'chat': + $item['title'] = $post->title; + $item['body'] = "\n[ul]"; + foreach ($post->dialogue as $line) { + $item['body'] .= "\n[li]" . $line->label . " " . $line->phrase . "[/li]"; + } + $item['body'] .= "[/ul]\n"; + break; + } + return $item; +} + +function tumblr_add_npf_data(string $html, string $plink): string +{ + $doc = new DOMDocument(); + + $doc->formatOutput = true; + @$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8')); + $xpath = new DomXPath($doc); + $list = $xpath->query('//p[@class="npf_link"]'); + foreach ($list as $node) { + $data = tumblr_get_npf_data($node); + if (empty($data)) { + continue; + } + + tumblr_replace_with_npf($doc, $node, tumblr_get_type_replacement($data, $plink)); + } + + $list = $xpath->query('//div[@data-npf]'); + foreach ($list as $node) { + $data = tumblr_get_npf_data($node); + if (empty($data)) { + continue; + } + + tumblr_replace_with_npf($doc, $node, tumblr_get_type_replacement($data, $plink)); + } + + $list = $xpath->query('//figure[@data-provider="youtube"]'); + foreach ($list as $node) { + $attributes = tumblr_get_attributes($node); + if (empty($attributes['data-url'])) { + continue; + } + tumblr_replace_with_npf($doc, $node, '[youtube]' . $attributes['data-url'] . '[/youtube]'); + } + + $list = $xpath->query('//figure[@data-npf]'); + foreach ($list as $node) { + $data = tumblr_get_npf_data($node); + if (empty($data)) { + continue; + } + tumblr_replace_with_npf($doc, $node, tumblr_get_type_replacement($data, $plink)); + } + + return $doc->saveHTML(); +} + +function tumblr_replace_with_npf(DOMDocument $doc, DOMNode $node, string $replacement) +{ + if (empty($replacement)) { + return; + } + $replace = $doc->createTextNode($replacement); + $node->parentNode->insertBefore($replace, $node); + $node->parentNode->removeChild($node); +} + +function tumblr_get_npf_data(DOMNode $node): array +{ + $attributes = tumblr_get_attributes($node); + if (empty($attributes['data-npf'])) { + return []; + } + + return json_decode($attributes['data-npf'], true); +} + +function tumblr_get_attributes($node): array +{ + if (empty($node->attributes)) { + return []; + } + + $attributes = []; + foreach ($node->attributes as $key => $attribute) { + $attributes[$key] = trim($attribute->value); + } + return $attributes; +} + +function tumblr_get_type_replacement(array $data, string $plink): string +{ + switch ($data['type']) { + case 'poll': + $body = '[p][url=' . $plink . ']' . $data['question'] . '[/url][/p][ul]'; + foreach ($data['answers'] as $answer) { + $body .= '[li]' . $answer['answer_text'] . '[/li]'; + } + $body .= '[/ul]'; + break; + + case 'link': + $body = PageInfo::getFooterFromUrl(str_replace('https://href.li/?', '', $data['url'])); + break; + + case 'video': + if (!empty($data['url']) && ($data['provider'] == 'tumblr')) { + $body = '[video]' . $data['url'] . '[/video]'; + break; + } + + default: + DI::logger()->notice('Unknown type', ['type' => $data['type'], 'data' => $data, 'plink' => $plink]); + $body = ''; + } + + return $body; +} + +/** + * Get a contact array for the given blog + * + * @param stdClass $blog + * @param integer $uid + * @return array + */ +function tumblr_get_contact(stdClass $blog, int $uid): array +{ + $condition = ['network' => Protocol::TUMBLR, 'uid' => 0, 'poll' => 'tumblr::' . $blog->uuid]; + $contact = Contact::selectFirst(['id', 'updated'], $condition); + + $update = empty($contact) || $contact['updated'] < DateTimeFormat::utc('now -24 hours'); + + $public_fields = $fields = tumblr_get_contact_fields($blog, $uid, $update); + + $avatar = $fields['avatar'] ?? ''; + unset($fields['avatar']); + unset($public_fields['avatar']); + + $public_fields['uid'] = 0; + $public_fields['rel'] = Contact::NOTHING; + + if (empty($contact)) { + $cid = Contact::insert($public_fields); + } else { + $cid = $contact['id']; + Contact::update($public_fields, ['id' => $cid], true); + } + + if ($uid != 0) { + $condition = ['network' => Protocol::TUMBLR, 'uid' => $uid, 'poll' => 'tumblr::' . $blog->uuid]; + + $contact = Contact::selectFirst(['id', 'rel', 'uid'], $condition); + if (!isset($fields['rel']) && isset($contact['rel'])) { + $fields['rel'] = $contact['rel']; + } elseif (!isset($fields['rel'])) { + $fields['rel'] = Contact::NOTHING; + } + } + + if (($uid != 0) && ($fields['rel'] != Contact::NOTHING)) { + if (empty($contact)) { + $cid = Contact::insert($fields); + } else { + $cid = $contact['id']; + Contact::update($fields, ['id' => $cid], true); + } + DI::logger()->debug('Get user contact', ['id' => $cid, 'uid' => $uid, 'update' => $update]); + } else { + DI::logger()->debug('Get public contact', ['id' => $cid, 'uid' => $uid, 'update' => $update]); + } + + if (!empty($avatar)) { + Contact::updateAvatar($cid, $avatar); + } + + return Contact::getById($cid); +} + +function tumblr_get_contact_fields(stdClass $blog, int $uid, bool $update): array +{ + $baseurl = 'https://tumblr.com'; + $url = $baseurl . '/' . $blog->name; + + $fields = [ + 'uid' => $uid, + 'network' => Protocol::TUMBLR, + 'poll' => 'tumblr::' . $blog->uuid, + 'baseurl' => $baseurl, + 'priority' => 1, + 'writable' => true, + 'blocked' => false, + 'readonly' => false, + 'pending' => false, + 'url' => $url, + 'nurl' => Strings::normaliseLink($url), + 'alias' => $blog->url, + 'name' => $blog->title ?: $blog->name, + 'nick' => $blog->name, + 'addr' => $blog->name . '@tumblr.com', + 'about' => HTML::toBBCode($blog->description), + 'updated' => date(DateTimeFormat::MYSQL, $blog->updated) + ]; + + if (!$update) { + DI::logger()->debug('Got contact fields', ['uid' => $uid, 'url' => $fields['url']]); + return $fields; + } + + $info = tumblr_get($uid, 'blog/' . $blog->uuid . '/info'); + if ($info->meta->status > 399) { + DI::logger()->notice('Error fetching blog info', ['meta' => $info->meta, 'response' => $info->response, 'errors' => $info->errors]); + return $fields; + } + Item::incrementInbound(Protocol::TUMBLR); + + $avatar = $info->response->blog->avatar; + if (!empty($avatar)) { + $fields['avatar'] = $avatar[0]->url; + } + + if ($info->response->blog->followed && $info->response->blog->subscribed) { + $fields['rel'] = Contact::FRIEND; + } elseif ($info->response->blog->followed && !$info->response->blog->subscribed) { + $fields['rel'] = Contact::SHARING; + } elseif (!$info->response->blog->followed && $info->response->blog->subscribed) { + $fields['rel'] = Contact::FOLLOWER; + } else { + $fields['rel'] = Contact::NOTHING; + } + + $fields['header'] = $info->response->blog->theme->header_image_focused; + + DI::logger()->debug('Got updated contact fields', ['uid' => $uid, 'url' => $fields['url']]); + return $fields; +} + +/** + * Get the default page for posting. Detects the value if not provided or has got a bad value. + * + * @param integer $uid + * @param array $blogs + * @return string + */ +function tumblr_get_page(int $uid, array $blogs = []): string +{ + $page = DI::pConfig()->get($uid, 'tumblr', 'page'); + + if (!empty($page) && (strpos($page, '/') === false)) { + return $page; + } + + if (empty($blogs)) { + $blogs = tumblr_get_blogs($uid); + } + + if (!empty($blogs)) { + $page = array_key_first($blogs); + DI::pConfig()->set($uid, 'tumblr', 'page', $page); + return $page; + } + + return ''; +} + +/** + * Get an array of blogs for the given user + * + * @param integer $uid + * @return array + */ +function tumblr_get_blogs(int $uid): array +{ + $userinfo = tumblr_get($uid, 'user/info'); + if ($userinfo->meta->status > 399) { + DI::logger()->notice('Error fetching blogs', ['meta' => $userinfo->meta, 'response' => $userinfo->response, 'errors' => $userinfo->errors]); + return []; + } + + Item::incrementInbound(Protocol::TUMBLR); + + $blogs = []; + foreach ($userinfo->response->user->blogs as $blog) { + $blogs[$blog->uuid] = $blog->name; + } + return $blogs; +} + +function tumblr_enabled_for_user(int $uid) +{ + return !empty($uid) && !empty(DI::pConfig()->get($uid, 'tumblr', 'access_token')) && + !empty(DI::pConfig()->get($uid, 'tumblr', 'refresh_token')) && + !empty(DI::config()->get('tumblr', 'consumer_key')) && + !empty(DI::config()->get('tumblr', 'consumer_secret')); +} + +/** + * Get a contact array from a Tumblr url + * + * @param string $url + * @param int $uid + * @return array|null + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ +function tumblr_get_contact_by_url(string $url, int $uid): ?array +{ + if (!preg_match('#^https?://tumblr.com/(.+)#', $url, $matches) && !preg_match('#^https?://www\.tumblr.com/(.+)#', $url, $matches) && !preg_match('#^https?://(.+)\.tumblr.com#', $url, $matches)) { + try { + $curlResult = DI::httpClient()->get($url); + } catch (\Exception $e) { + return null; + } + $html = $curlResult->getBodyString(); + if (empty($html)) { + return null; + } + $doc = new DOMDocument(); + @$doc->loadHTML($html); + $xpath = new DomXPath($doc); + $body = $xpath->query('body'); + $attributes = tumblr_get_attributes($body->item(0)); + $blog = $attributes['data-urlencoded-name'] ?? ''; + } else { + $blogs = explode('/', $matches[1]); + $blog = $blogs[0] ?? ''; + } + + if (empty($blog)) { + return null; + } + + DI::logger()->debug('Update Tumblr blog data', ['url' => $url, 'blog' => $blog, 'uid' => $uid]); + + $info = tumblr_get($uid, 'blog/' . $blog . '/info'); + if ($info->meta->status > 399) { + DI::logger()->notice('Error fetching blog info', ['meta' => $info->meta, 'response' => $info->response, 'errors' => $info->errors, 'blog' => $blog, 'uid' => $uid]); + return null; + } + + DI::logger()->debug('Got data', ['blog' => $blog, 'meta' => $info->meta]); + Item::incrementInbound(Protocol::TUMBLR); + + $baseurl = 'https://tumblr.com'; + $url = $baseurl . '/' . $info->response->blog->name; + + return [ + 'url' => $url, + 'nurl' => Strings::normaliseLink($url), + 'addr' => $info->response->blog->name . '@tumblr.com', + 'alias' => $info->response->blog->url, + 'batch' => '', + 'notify' => '', + 'poll' => 'tumblr::' . $info->response->blog->uuid, + 'poco' => '', + 'name' => $info->response->blog->title ?: $info->response->blog->name, + 'nick' => $info->response->blog->name, + 'network' => Protocol::TUMBLR, + 'baseurl' => $baseurl, + 'pubkey' => '', + 'priority' => 0, + 'guid' => $info->response->blog->uuid, + 'about' => HTML::toBBCode($info->response->blog->description), + 'photo' => $info->response->blog->avatar[0]->url, + 'header' => $info->response->blog->theme->header_image_focused, + ]; +} + +/** + * Perform an OAuth2 GET request + * + * @param integer $uid + * @param string $url + * @param array $parameters + * @return stdClass + */ +function tumblr_get(int $uid, string $url, array $parameters = []): stdClass +{ + $url = 'https://api.tumblr.com/v2/' . $url; + + if ($uid == 0) { + $consumer_key = DI::config()->get('tumblr', 'consumer_key'); + $parameters['api_key'] = $consumer_key; + } + + if (!empty($parameters)) { + $url .= '?' . http_build_query($parameters); + } + + if ($uid > 0) { + $curlResult = DI::httpClient()->get($url, HttpClientAccept::JSON, [HttpClientOptions::HEADERS => ['Authorization' => ['Bearer ' . tumblr_get_token($uid)]]]); + } else { + $curlResult = DI::httpClient()->get($url, HttpClientAccept::JSON); + } + return tumblr_format_result($curlResult); +} + +/** + * Perform an OAuth2 POST request + * + * @param integer $uid + * @param string $url + * @param array $parameters + * @return stdClass + */ +function tumblr_post(int $uid, string $url, array $parameters): stdClass +{ + Item::incrementOutbound(Protocol::TUMBLR); + $url = 'https://api.tumblr.com/v2/' . $url; + + $curlResult = DI::httpClient()->post($url, $parameters, ['Authorization' => ['Bearer ' . tumblr_get_token($uid)]]); + return tumblr_format_result($curlResult); +} + +/** + * Perform an OAuth2 DELETE request + * + * @param integer $uid + * @param string $url + * @param array $parameters + * @return stdClass + */ +function tumblr_delete(int $uid, string $url, array $parameters): stdClass +{ + $url = 'https://api.tumblr.com/v2/' . $url; + + $opts = [ + HttpClientOptions::HEADERS => ['Authorization' => ['Bearer ' . tumblr_get_token($uid)]], + HttpClientOptions::FORM_PARAMS => $parameters + ]; + + $curlResult = DI::httpClient()->request('delete', $url, $opts); + return tumblr_format_result($curlResult); +} + +/** + * Format the get/post result value + * + * @param ICanHandleHttpResponses $curlResult + * @return stdClass + */ +function tumblr_format_result(ICanHandleHttpResponses $curlResult): stdClass +{ + $result = json_decode($curlResult->getBodyString()); + if (empty($result) || empty($result->meta)) { + $result = new stdClass; + $result->meta = new stdClass; + $result->meta->status = 500; + $result->meta->msg = ''; + $result->response = []; + $result->errors = []; + } + return $result; +} + +/** + * Fetch the OAuth token, update it if needed + * + * @param integer $uid + * @param string $code + * @return string + */ +function tumblr_get_token(int $uid, string $code = ''): string +{ + $access_token = DI::pConfig()->get($uid, 'tumblr', 'access_token'); + $expires_at = DI::pConfig()->get($uid, 'tumblr', 'expires_at'); + $refresh_token = DI::pConfig()->get($uid, 'tumblr', 'refresh_token'); + + if (empty($code) && !empty($access_token) && ($expires_at > (time()))) { + DI::logger()->debug('Got token', ['uid' => $uid, 'expires_at' => date('c', $expires_at)]); + return $access_token; + } + + $consumer_key = DI::config()->get('tumblr', 'consumer_key'); + $consumer_secret = DI::config()->get('tumblr', 'consumer_secret'); + + $parameters = ['client_id' => $consumer_key, 'client_secret' => $consumer_secret]; + + if (empty($refresh_token) && empty($code)) { + $result = tumblr_exchange_token($uid); + if (empty($result->refresh_token)) { + DI::logger()->info('Invalid result while exchanging token', ['uid' => $uid]); + return ''; + } + $expires_at = time() + $result->expires_in; + DI::logger()->debug('Updated token from OAuth1 to OAuth2', ['uid' => $uid, 'expires_at' => date('c', $expires_at)]); + } else { + if (!empty($code)) { + $parameters['code'] = $code; + $parameters['grant_type'] = 'authorization_code'; + } else { + $parameters['refresh_token'] = $refresh_token; + $parameters['grant_type'] = 'refresh_token'; + } + + $curlResult = DI::httpClient()->post('https://api.tumblr.com/v2/oauth2/token', $parameters); + if (!$curlResult->isSuccess()) { + DI::logger()->info('Error fetching token', ['uid' => $uid, 'code' => $code, 'result' => $curlResult->getBodyString(), 'parameters' => $parameters]); + return ''; + } + + $result = json_decode($curlResult->getBodyString()); + if (empty($result)) { + DI::logger()->info('Invalid result when updating token', ['uid' => $uid]); + return ''; + } + + $expires_at = time() + $result->expires_in; + DI::logger()->debug('Renewed token', ['uid' => $uid, 'expires_at' => date('c', $expires_at)]); + } + + DI::pConfig()->set($uid, 'tumblr', 'access_token', $result->access_token); + DI::pConfig()->set($uid, 'tumblr', 'expires_at', $expires_at); + DI::pConfig()->set($uid, 'tumblr', 'refresh_token', $result->refresh_token); + + return $result->access_token; +} + +/** + * Create an OAuth2 token out of an OAuth1 token + * + * @param int $uid + * @return stdClass + */ +function tumblr_exchange_token(int $uid): stdClass +{ + $oauth_token = DI::pConfig()->get($uid, 'tumblr', 'oauth_token'); + $oauth_token_secret = DI::pConfig()->get($uid, 'tumblr', 'oauth_token_secret'); + + $consumer_key = DI::config()->get('tumblr', 'consumer_key'); + $consumer_secret = DI::config()->get('tumblr', 'consumer_secret'); + + $stack = HandlerStack::create(); + + $middleware = new Oauth1([ + 'consumer_key' => $consumer_key, + 'consumer_secret' => $consumer_secret, + 'token' => $oauth_token, + 'token_secret' => $oauth_token_secret + ]); + + $stack->push($middleware); + + try { + $client = new Client([ + 'base_uri' => 'https://api.tumblr.com/v2/', + 'handler' => $stack + ]); + + $response = $client->post('oauth2/exchange', ['auth' => 'oauth']); + return json_decode($response->getBody()->getContents()); + } catch (RequestException $exception) { + DI::logger()->notice('Exchange failed', ['code' => $exception->getCode(), 'message' => $exception->getMessage()]); + return new stdClass; + } +} diff --git a/twitter/README.md b/twitter/README.md index 7e0fabc5..038bf1ca 100644 --- a/twitter/README.md +++ b/twitter/README.md @@ -3,44 +3,14 @@ Twitter Addon Main authors Tobias Diekershoff, Michael Vogel and Hypolite Petovan. -This bi-directional connector addon allows each user to crosspost their Friendica public posts to Twitter, import their Twitter timeline, interact with tweets from Friendica, and crosspost to Friendica their public tweets. +This is a uni-directional posting connector addon that allows each user to crosspost their Friendica public posts to Twitter. ## Installation -To use this addon you have to register an [application](https://apps.twitter.com/) for your Friendica instance on Twitter. -Register your Friendica site as "Client" application with "Read & Write" access we do not need "Twitter as login". -Please leave the field "Callback URL" empty. -When you've registered the app you get the OAuth Consumer key and secret pair for your application/site. - -After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/twitter). - -## Alternative configuration - -Open the `config/local.config.php` file and add "twitter" to the list of activated addons: - - 'addons' => [ - ... - 'twitter' => [ - admin => true, - ], - ] - -Add your key pair to your `config/twitter.config.php` file. - - return [ - 'twitter' => [ - 'consumerkey' => 'your consumer_key here', - 'consumersecret' => 'your consumer_secret here', - ], - ]; - -After this, users can configure their Twitter account settings from "Settings -> Addon Settings". +To use this addon each single user has to register their own [application](https://developer.twitter.com/en/portal/projects-and-apps), no setup is needed by the administration. ## License -The _Twitter Connector_ is licensed under the [3-clause BSD license][2] see the LICENSE file in the addons directory. - -The _Twitter Connector_ uses the [Twitter OAuth library][2] by Abraham Williams, MIT licensed +The _Twitter Connector_ is licensed under the [3-clause BSD license][1] see the LICENSE file in the addons directory. [1]: http://opensource.org/licenses/BSD-3-Clause -[2]: https://github.com/abraham/twitteroauth diff --git a/twitter/composer.json b/twitter/composer.json deleted file mode 100644 index 75090195..00000000 --- a/twitter/composer.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "friendica-addons/twitter", - "description": "Twitter Connector addon for Friendica", - "type": "friendica-addon", - "authors": [ - { - "name": "Tobias Diekershoff", - "homepage": "https://f.diekershoff.de/profile/tobias", - "role": "Developer" - }, - { - "name": "Michael Vogel", - "homepage": "https://pirati.ca/profile/heluecht", - "role": "Developer" - }, - { - "name": "Hypolite Petovan", - "email": "hypolite@mrpetovan.com", - "homepage": "https://friendica.mrpetovan.com/profile/hypolite", - "role": "Developer" - } - ], - "require": { - "abraham/twitteroauth": "2.0.0", - "jublonet/codebird-php": "dev-master" - }, - "license": "3-clause BSD license", - "minimum-stability": "stable", - "config": { - "autoloader-suffix": "TwitterAddon" - } -} diff --git a/twitter/composer.lock b/twitter/composer.lock deleted file mode 100644 index 80583397..00000000 --- a/twitter/composer.lock +++ /dev/null @@ -1,328 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "fafd1db0b4f04c4268f5034ce8c7f6ea", - "packages": [ - { - "name": "abraham/twitteroauth", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/abraham/twitteroauth.git", - "reference": "96f49e67baec10f5e5cb703d87be16ba01a798a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/abraham/twitteroauth/zipball/96f49e67baec10f5e5cb703d87be16ba01a798a5", - "reference": "96f49e67baec10f5e5cb703d87be16ba01a798a5", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.2", - "ext-curl": "*", - "php": "^7.2 || ^7.3 || ^7.4 || ^8.0" - }, - "require-dev": { - "php-vcr/php-vcr": "^1", - "php-vcr/phpunit-testlistener-vcr": "dev-php-8", - "phpmd/phpmd": "^2", - "phpunit/phpunit": "^8", - "squizlabs/php_codesniffer": "^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Abraham\\TwitterOAuth\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Abraham Williams", - "email": "abraham@abrah.am", - "homepage": "https://abrah.am", - "role": "Developer" - } - ], - "description": "The most popular PHP library for use with the Twitter OAuth REST API.", - "homepage": "https://twitteroauth.com", - "keywords": [ - "Twitter API", - "Twitter oAuth", - "api", - "oauth", - "rest", - "social", - "twitter" - ], - "time": "2020-12-02T01:27:06+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.2.10", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "9fdb22c2e97a614657716178093cd1da90a64aa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/9fdb22c2e97a614657716178093cd1da90a64aa8", - "reference": "9fdb22c2e97a614657716178093cd1da90a64aa8", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-06-07T13:58:28+00:00" - }, - { - "name": "composer/installers", - "version": "v1.6.0", - "source": { - "type": "git", - "url": "https://github.com/composer/installers.git", - "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b", - "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0" - }, - "replace": { - "roundcube/plugin-installer": "*", - "shama/baton": "*" - }, - "require-dev": { - "composer/composer": "1.0.*@dev", - "phpunit/phpunit": "^4.8.36" - }, - "type": "composer-plugin", - "extra": { - "class": "Composer\\Installers\\Plugin", - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Installers\\": "src/Composer/Installers" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kyle Robinson Young", - "email": "kyle@dontkry.com", - "homepage": "https://github.com/shama" - } - ], - "description": "A multi-framework Composer library installer", - "homepage": "https://composer.github.io/installers/", - "keywords": [ - "Craft", - "Dolibarr", - "Eliasis", - "Hurad", - "ImageCMS", - "Kanboard", - "Lan Management System", - "MODX Evo", - "Mautic", - "Maya", - "OXID", - "Plentymarkets", - "Porto", - "RadPHP", - "SMF", - "Thelia", - "WolfCMS", - "agl", - "aimeos", - "annotatecms", - "attogram", - "bitrix", - "cakephp", - "chef", - "cockpit", - "codeigniter", - "concrete5", - "croogo", - "dokuwiki", - "drupal", - "eZ Platform", - "elgg", - "expressionengine", - "fuelphp", - "grav", - "installer", - "itop", - "joomla", - "kohana", - "laravel", - "lavalite", - "lithium", - "magento", - "majima", - "mako", - "mediawiki", - "modulework", - "modx", - "moodle", - "osclass", - "phpbb", - "piwik", - "ppi", - "puppet", - "pxcms", - "reindex", - "roundcube", - "shopware", - "silverstripe", - "sydes", - "symfony", - "typo3", - "wordpress", - "yawik", - "zend", - "zikula" - ], - "time": "2018-08-27T06:10:37+00:00" - }, - { - "name": "jublonet/codebird-php", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/jublo/codebird-php.git", - "reference": "df362d8ad629aad6c4c7dbf36a440e569ec41368" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jublo/codebird-php/zipball/df362d8ad629aad6c4c7dbf36a440e569ec41368", - "reference": "df362d8ad629aad6c4c7dbf36a440e569ec41368", - "shasum": "" - }, - "require": { - "composer/installers": "~1.0", - "ext-hash": "*", - "ext-json": "*", - "lib-openssl": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": ">=0.6", - "phpunit/phpunit": ">=7.3", - "squizlabs/php_codesniffer": "2.*" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-3.0+" - ], - "authors": [ - { - "name": "Joshua Atkins", - "role": "Developer", - "email": "joshua.atkins@jublo.net", - "homepage": "http://atkins.im/" - }, - { - "name": "J.M.", - "role": "Developer", - "email": "jm@jublo.net", - "homepage": "http://mynetx.net/" - } - ], - "description": "Easy access to the Twitter REST API, Direct Messages API, Account Activity API, TON (Object Nest) API and Twitter Ads API — all from one PHP library.", - "homepage": "https://www.jublo.net/projects/codebird/php", - "keywords": [ - "api", - "networking", - "twitter" - ], - "time": "2018-08-16T00:07:08+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "jublonet/codebird-php": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "1.1.0" -} diff --git a/twitter/config/twitter.config.php b/twitter/config/twitter.config.php deleted file mode 100644 index 8895814d..00000000 --- a/twitter/config/twitter.config.php +++ /dev/null @@ -1,16 +0,0 @@ - [ - // consumerkey (String) - // OAuth Consumer Key provided by Twitter on registering an app at https://twitter.com/apps - 'consumerkey' => '', - - // consumersecret (String) - // OAuth Consumer Secret provided by Twitter on registering an app at https://twitter.com/apps - 'consumersecret' => '', - ], -]; diff --git a/twitter/lang/C/messages.po b/twitter/lang/C/messages.po index 43d00fc1..366d6c8f 100644 --- a/twitter/lang/C/messages.po +++ b/twitter/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-13 10:15+0000\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,143 +17,62 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: twitter.php:216 +#: twitter.php:84 msgid "Post to Twitter" msgstr "" -#: twitter.php:263 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." +#: twitter.php:123 +msgid "No status." msgstr "" -#: twitter.php:330 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "" - -#: twitter.php:343 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input " -"box below and submit the form. Only your public posts will " -"be posted to Twitter." -msgstr "" - -#: twitter.php:344 -msgid "Log in with Twitter" -msgstr "" - -#: twitter.php:346 -msgid "Copy the PIN from Twitter here" -msgstr "" - -#: twitter.php:354 twitter.php:399 -msgid "An error occured: " -msgstr "" - -#: twitter.php:368 -#, php-format -msgid "" -"Currently connected to: %1$s" -msgstr "" - -#: twitter.php:374 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "" - -#: twitter.php:381 -msgid "Invalid Twitter info" -msgstr "" - -#: twitter.php:382 -msgid "Disconnect" -msgstr "" - -#: twitter.php:387 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "" -#: twitter.php:387 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for " "every posting separately in the posting options when writing the entry." msgstr "" -#: twitter.php:388 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "" -#: twitter.php:389 -msgid "Use threads instead of truncating the content" +#: twitter.php:131 +msgid "API Key" msgstr "" -#: twitter.php:390 -msgid "Mirror all posts from twitter that are no replies" +#: twitter.php:132 +msgid "API Secret" msgstr "" -#: twitter.php:391 -msgid "Import the remote timeline" +#: twitter.php:133 +msgid "Access Token" msgstr "" -#: twitter.php:392 -msgid "Automatically create contacts" +#: twitter.php:134 +msgid "Access Secret" msgstr "" -#: twitter.php:392 +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive " -"a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You " +"will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." msgstr "" -#: twitter.php:393 -msgid "Follow in fediverse" +#: twitter.php:136 +msgid "Last Status Summary" msgstr "" -#: twitter.php:393 -msgid "" -"Automatically subscribe to the contact in the fediverse, when a fediverse " -"account is mentioned in name or description and we are following the Twitter " -"contact." +#: twitter.php:137 +msgid "Last Status Content" msgstr "" -#: twitter.php:406 -msgid "Twitter Import/Export/Mirror" -msgstr "" - -#: twitter.php:558 -msgid "" -"Please connect a Twitter account in your Social Network settings to import " -"Twitter posts." -msgstr "" - -#: twitter.php:565 -msgid "Twitter post not found." -msgstr "" - -#: twitter.php:965 -msgid "Save Settings" -msgstr "" - -#: twitter.php:967 -msgid "Consumer key" -msgstr "" - -#: twitter.php:968 -msgid "Consumer secret" -msgstr "" - -#: twitter.php:1167 -#, php-format -msgid "%s on Twitter" +#: twitter.php:142 +msgid "Twitter Export" msgstr "" diff --git a/twitter/lang/ar/messages.po b/twitter/lang/ar/messages.po index 0c1b26ae..e12139c6 100644 --- a/twitter/lang/ar/messages.po +++ b/twitter/lang/ar/messages.po @@ -9,121 +9,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-10-08 22:25-0400\n" -"PO-Revision-Date: 2021-10-09 06:17+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Farida Khalaf , 2021\n" +"Language-Team: Arabic (http://app.transifex.com/Friendica/friendica/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: twitter.php:224 +#: twitter.php:84 msgid "Post to Twitter" msgstr "" -#: twitter.php:269 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." +#: twitter.php:123 +msgid "No status." msgstr "" -#: twitter.php:329 twitter.php:333 -msgid "Twitter Import/Export/Mirror" -msgstr "" - -#: twitter.php:340 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "" - -#: twitter.php:352 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "" - -#: twitter.php:353 -msgid "Log in with Twitter" -msgstr "" - -#: twitter.php:355 -msgid "Copy the PIN from Twitter here" -msgstr "" - -#: twitter.php:360 twitter.php:415 twitter.php:803 -msgid "Save Settings" -msgstr "حفظ الإعدادات" - -#: twitter.php:362 twitter.php:417 -msgid "An error occured: " -msgstr "" - -#: twitter.php:379 -msgid "Currently connected to: " -msgstr "" - -#: twitter.php:380 twitter.php:390 -msgid "Disconnect" -msgstr "" - -#: twitter.php:397 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "" -#: twitter.php:397 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "" -#: twitter.php:400 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "" - -#: twitter.php:403 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "" -#: twitter.php:406 -msgid "Mirror all posts from twitter that are no replies" +#: twitter.php:131 +msgid "API Key" msgstr "" -#: twitter.php:409 -msgid "Import the remote timeline" +#: twitter.php:132 +msgid "API Secret" msgstr "" -#: twitter.php:412 -msgid "Automatically create contacts" +#: twitter.php:133 +msgid "Access Token" msgstr "" -#: twitter.php:412 +#: twitter.php:134 +msgid "Access Secret" +msgstr "" + +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." msgstr "" -#: twitter.php:805 -msgid "Consumer key" +#: twitter.php:136 +msgid "Last Status Summary" msgstr "" -#: twitter.php:806 -msgid "Consumer secret" +#: twitter.php:137 +msgid "Last Status Content" msgstr "" -#: twitter.php:1002 -#, php-format -msgid "%s on Twitter" +#: twitter.php:142 +msgid "Twitter Export" msgstr "" diff --git a/twitter/lang/ar/strings.php b/twitter/lang/ar/strings.php index 285ad303..eea34dd6 100644 --- a/twitter/lang/ar/strings.php +++ b/twitter/lang/ar/strings.php @@ -5,4 +5,3 @@ function string_plural_select_ar($n){ $n = intval($n); if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; } }} -$a->strings['Save Settings'] = 'حفظ الإعدادات'; diff --git a/twitter/lang/cs/messages.po b/twitter/lang/cs/messages.po index 68586a7e..3e9d27d5 100644 --- a/twitter/lang/cs/messages.po +++ b/twitter/lang/cs/messages.po @@ -11,126 +11,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-02 10:25+0700\n" -"PO-Revision-Date: 2018-06-14 10:10+0000\n" -"Last-Translator: Aditoo\n" -"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: twitter.php:195 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Poslat příspěvek na Twitter" -#: twitter.php:236 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." -msgstr "Vložil/a jste prázdný PIN kód, prosím přihlaste se opět na Twitter pro nový." +#: twitter.php:123 +msgid "No status." +msgstr "" -#: twitter.php:263 -msgid "Twitter settings updated." -msgstr "Nastavení pro Twitter aktualizována." - -#: twitter.php:293 twitter.php:297 -msgid "Twitter Import/Export/Mirror" -msgstr "Import/Export/Zrcadlení Twitteru" - -#: twitter.php:304 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na administrátora webu." - -#: twitter.php:316 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "Na této instanci Friendica byl doplněk pro Twitter povolen, ještě jste však nepřipojil/a Váš účet k Vašemu účtu na Twitteru. Pokud to chcete udělat, kliknutím na tlačítko níže získáte od Twitteru PIN kód, zkopírujte jej do pole níže a odešlete formulář. Pouze Vaše veřejné příspěvky budou odesílány na Twitter." - -#: twitter.php:317 -msgid "Log in with Twitter" -msgstr "Přihlásit se přes Twitter" - -#: twitter.php:319 -msgid "Copy the PIN from Twitter here" -msgstr "Zkopírujte sem PIN z Twitteru" - -#: twitter.php:324 twitter.php:366 twitter.php:636 -msgid "Save Settings" -msgstr "Uložit nastavení" - -#: twitter.php:336 -msgid "Currently connected to: " -msgstr "V současné době připojen k:" - -#: twitter.php:337 -msgid "Disconnect" -msgstr "Odpojit" - -#: twitter.php:347 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "Povolit odesílání na Twitter" -#: twitter.php:347 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Je-li povoleno, všechny Vaše veřejné příspěvky mohou být zasílány na související účet na Twitteru. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku." -#: twitter.php:350 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "Poznámka: Kvůli vašim nastavením o soukromí (Skrýt Vaše profilové detaily před neznámými návštěvníky?), odkaz potenciálně obsažen ve veřejných příspěvcích přeposílaných na Twitter zavedou návštěvníky na prázdnou stránku informující návštěvníky, že přístup na Váš profil byl zakázán." - -#: twitter.php:353 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "Defaultně zasílat veřejné komentáře na Twitter" -#: twitter.php:356 -msgid "Mirror all posts from twitter that are no replies" -msgstr "Zrcadlit všechny příspěvky z Twitteru, které nejsou odpovědi." +#: twitter.php:131 +msgid "API Key" +msgstr "" -#: twitter.php:359 -msgid "Import the remote timeline" -msgstr "Importovat vzdálenou časovou osu" +#: twitter.php:132 +msgid "API Secret" +msgstr "" -#: twitter.php:362 -msgid "Automatically create contacts" -msgstr "Automaticky vytvořit kontakty" +#: twitter.php:133 +msgid "Access Token" +msgstr "" -#: twitter.php:362 +#: twitter.php:134 +msgid "Access Secret" +msgstr "" + +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here. However if enabled, you cannot " -"merely remove a twitter contact from the Friendica contact list, as it will " -"recreate this contact when they post again." -msgstr "Tato možnost automaticky vytvoří kontakt na Friendica, jakmile obdržíte zprávu od existujícího kontaktu přes síť Twitter. Pokud toto nezapnete, budete si muset tyto kontakty na Twitteru, od kterých chcete dostávat příspěvky, přidávat do Friendica manuálně. Pokud toto ovšem zapnete, nemůžete jednoduše odstranit kontakt na Twitteru ze seznamu kontaktů na Friendica, neboť tato možnost jej při každém novém příspěvku opět vytvoří." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." +msgstr "" -#: twitter.php:614 -msgid "Twitter post failed. Queued for retry." -msgstr "Poslání příspěvku na Twitter selhalo. Příspěvek byl poslán do fronty pro zopakování." +#: twitter.php:136 +msgid "Last Status Summary" +msgstr "" -#: twitter.php:628 -msgid "Settings updated." -msgstr "Nastavení aktualizováno." +#: twitter.php:137 +msgid "Last Status Content" +msgstr "" -#: twitter.php:638 -msgid "Consumer key" -msgstr "Consumer key" - -#: twitter.php:639 -msgid "Consumer secret" -msgstr "Consumer secret" +#: twitter.php:142 +msgid "Twitter Export" +msgstr "" diff --git a/twitter/lang/cs/strings.php b/twitter/lang/cs/strings.php index 59a584ce..da68673d 100644 --- a/twitter/lang/cs/strings.php +++ b/twitter/lang/cs/strings.php @@ -6,25 +6,6 @@ function string_plural_select_cs($n){ if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} $a->strings['Post to Twitter'] = 'Poslat příspěvek na Twitter'; -$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Vložil/a jste prázdný PIN kód, prosím přihlaste se opět na Twitter pro nový.'; -$a->strings['Twitter settings updated.'] = 'Nastavení pro Twitter aktualizována.'; -$a->strings['Twitter Import/Export/Mirror'] = 'Import/Export/Zrcadlení Twitteru'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na administrátora webu.'; -$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'Na této instanci Friendica byl doplněk pro Twitter povolen, ještě jste však nepřipojil/a Váš účet k Vašemu účtu na Twitteru. Pokud to chcete udělat, kliknutím na tlačítko níže získáte od Twitteru PIN kód, zkopírujte jej do pole níže a odešlete formulář. Pouze Vaše veřejné příspěvky budou odesílány na Twitter.'; -$a->strings['Log in with Twitter'] = 'Přihlásit se přes Twitter'; -$a->strings['Copy the PIN from Twitter here'] = 'Zkopírujte sem PIN z Twitteru'; -$a->strings['Save Settings'] = 'Uložit nastavení'; -$a->strings['Currently connected to: '] = 'V současné době připojen k:'; -$a->strings['Disconnect'] = 'Odpojit'; $a->strings['Allow posting to Twitter'] = 'Povolit odesílání na Twitter'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Je-li povoleno, všechny Vaše veřejné příspěvky mohou být zasílány na související účet na Twitteru. Můžete si vybrat, zda-li toto bude výchozí nastavení (zde), nebo budete mít možnost si vybrat požadované chování při psaní každého příspěvku.'; -$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Poznámka: Kvůli vašim nastavením o soukromí (Skrýt Vaše profilové detaily před neznámými návštěvníky?), odkaz potenciálně obsažen ve veřejných příspěvcích přeposílaných na Twitter zavedou návštěvníky na prázdnou stránku informující návštěvníky, že přístup na Váš profil byl zakázán.'; $a->strings['Send public postings to Twitter by default'] = 'Defaultně zasílat veřejné komentáře na Twitter'; -$a->strings['Mirror all posts from twitter that are no replies'] = 'Zrcadlit všechny příspěvky z Twitteru, které nejsou odpovědi.'; -$a->strings['Import the remote timeline'] = 'Importovat vzdálenou časovou osu'; -$a->strings['Automatically create contacts'] = 'Automaticky vytvořit kontakty'; -$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here. However if enabled, you cannot merely remove a twitter contact from the Friendica contact list, as it will recreate this contact when they post again.'] = 'Tato možnost automaticky vytvoří kontakt na Friendica, jakmile obdržíte zprávu od existujícího kontaktu přes síť Twitter. Pokud toto nezapnete, budete si muset tyto kontakty na Twitteru, od kterých chcete dostávat příspěvky, přidávat do Friendica manuálně. Pokud toto ovšem zapnete, nemůžete jednoduše odstranit kontakt na Twitteru ze seznamu kontaktů na Friendica, neboť tato možnost jej při každém novém příspěvku opět vytvoří.'; -$a->strings['Twitter post failed. Queued for retry.'] = 'Poslání příspěvku na Twitter selhalo. Příspěvek byl poslán do fronty pro zopakování.'; -$a->strings['Settings updated.'] = 'Nastavení aktualizováno.'; -$a->strings['Consumer key'] = 'Consumer key'; -$a->strings['Consumer secret'] = 'Consumer secret'; diff --git a/twitter/lang/de/messages.po b/twitter/lang/de/messages.po index 855293a4..a38392a2 100644 --- a/twitter/lang/de/messages.po +++ b/twitter/lang/de/messages.po @@ -4,6 +4,7 @@ # # # Translators: +# Raroun, 2023 # Till Mohr , 2021 # Tobias Diekershoff , 2014-2015 # Tobias Diekershoff , 2018,2020-2022 @@ -12,153 +13,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-13 10:15+0000\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" "PO-Revision-Date: 2014-06-23 12:58+0000\n" -"Last-Translator: Tobias Diekershoff , 2018,2020-2022\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"Last-Translator: Raroun, 2023\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: twitter.php:216 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Auf Twitter veröffentlichen" -#: twitter.php:263 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." -msgstr "Du hast keine PIN übertragen. Bitte melde dich erneut bei Twitter an, um eine neue PIN zu erhalten." +#: twitter.php:123 +msgid "No status." +msgstr "Kein Status." -#: twitter.php:330 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "Kein Consumer-Schlüsselpaar für Twitter gefunden. Bitte wende dich an den Administrator der Seite." - -#: twitter.php:343 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "Auf diesem Friendica-Server wurde das Twitter-Addon aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht." - -#: twitter.php:344 -msgid "Log in with Twitter" -msgstr "bei Twitter anmelden" - -#: twitter.php:346 -msgid "Copy the PIN from Twitter here" -msgstr "Kopiere die Twitter-PIN hierher" - -#: twitter.php:354 twitter.php:399 -msgid "An error occured: " -msgstr "Ein Fehler ist aufgetreten:" - -#: twitter.php:368 -#, php-format -msgid "" -"Currently connected to: %1$s" -msgstr "Derzeit verbunden mit: %1$s" - -#: twitter.php:374 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) wird der Link, der eventuell an deinen Twitter-Beitrag angehängt wird, um auf den Originalbeitrag zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde." - -#: twitter.php:381 -msgid "Invalid Twitter info" -msgstr "Ungültige Twitter Informationen" - -#: twitter.php:382 -msgid "Disconnect" -msgstr "Trennen" - -#: twitter.php:387 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "Veröffentlichung bei Twitter erlauben" -#: twitter.php:387 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Wenn aktiviert, können all deine öffentlichen Einträge auf dem verbundenen Twitter-Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen." -#: twitter.php:388 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "Veröffentliche öffentliche Beiträge standardmäßig bei Twitter" -#: twitter.php:389 -msgid "Use threads instead of truncating the content" -msgstr "Verwende Threads anstelle den Inhalt zu kürzen" +#: twitter.php:131 +msgid "API Key" +msgstr "API Key" -#: twitter.php:390 -msgid "Mirror all posts from twitter that are no replies" -msgstr "Spiegle alle Beiträge von Twitter, die keine Antworten sind" +#: twitter.php:132 +msgid "API Secret" +msgstr "API Secret" -#: twitter.php:391 -msgid "Import the remote timeline" -msgstr "Importiere die Remote-Zeitleiste" +#: twitter.php:133 +msgid "Access Token" +msgstr "Access Token" -#: twitter.php:392 -msgid "Automatically create contacts" -msgstr "Automatisch Kontakte anlegen" +#: twitter.php:134 +msgid "Access Secret" +msgstr "Access Secret" -#: twitter.php:392 +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here." -msgstr "Mit dieser Option wird automatisch ein Kontakt bei Friendica angelegt, wenn du eine Nachricht von einem bestehenden Kontakt auf Twitter erhältst. Ist die Option nicht aktiv, musst du manuell Kontakte für diejenigen deiner Twitter-Kontakte anlegen, deren Nachrichten du auf Friendica lesen möchtest." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." +msgstr "Jeder Nutzer muss seine eigene App registrieren, um auf Twitter posten zu können. Bitte besuchen Sie https://developer.twitter.com/en/portal/projects-and-apps, um ein Projekt zu registrieren. Innerhalb des Projekts müssen Sie dann eine App registrieren. Die benötigten Daten für den Connector finden Sie auf der Seite \"Keys and token\" in den App-Einstellungen." -#: twitter.php:393 -msgid "Follow in fediverse" -msgstr "Im Fediverse folgen" +#: twitter.php:136 +msgid "Last Status Summary" +msgstr "Zusammenfassung des letzten Status" -#: twitter.php:393 -msgid "" -"Automatically subscribe to the contact in the fediverse, when a fediverse " -"account is mentioned in name or description and we are following the Twitter" -" contact." -msgstr "Hat ein Twitter Kontakt eine Profiladresse im Fediverse im Namen oder der Beschreibung genannt, wird dieser automatisch gefolgt." +#: twitter.php:137 +msgid "Last Status Content" +msgstr "Inhalt des letzten Status" -#: twitter.php:406 -msgid "Twitter Import/Export/Mirror" -msgstr "Twitter-Import/Export/Spiegeln" - -#: twitter.php:558 -msgid "" -"Please connect a Twitter account in your Social Network settings to import " -"Twitter posts." -msgstr "Bitte verbinde deinen Twitter Account in den Einstellungen zu den Soziale Netzwerken damit deine Twitter Beiträge importiert werden." - -#: twitter.php:565 -msgid "Twitter post not found." -msgstr "Beiträge auf Twitter nicht gefunden." - -#: twitter.php:965 -msgid "Save Settings" -msgstr "Einstellungen speichern" - -#: twitter.php:967 -msgid "Consumer key" -msgstr "Consumer Key" - -#: twitter.php:968 -msgid "Consumer secret" -msgstr "Consumer Secret" - -#: twitter.php:1167 -#, php-format -msgid "%s on Twitter" -msgstr "%s auf Twitter" +#: twitter.php:142 +msgid "Twitter Export" +msgstr "Twitter Export" diff --git a/twitter/lang/de/strings.php b/twitter/lang/de/strings.php index f465aab2..4079ddfe 100644 --- a/twitter/lang/de/strings.php +++ b/twitter/lang/de/strings.php @@ -6,30 +6,15 @@ function string_plural_select_de($n){ return intval($n != 1); }} $a->strings['Post to Twitter'] = 'Auf Twitter veröffentlichen'; -$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Du hast keine PIN übertragen. Bitte melde dich erneut bei Twitter an, um eine neue PIN zu erhalten.'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Kein Consumer-Schlüsselpaar für Twitter gefunden. Bitte wende dich an den Administrator der Seite.'; -$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'Auf diesem Friendica-Server wurde das Twitter-Addon aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht.'; -$a->strings['Log in with Twitter'] = 'bei Twitter anmelden'; -$a->strings['Copy the PIN from Twitter here'] = 'Kopiere die Twitter-PIN hierher'; -$a->strings['An error occured: '] = 'Ein Fehler ist aufgetreten:'; -$a->strings['Currently connected to: %1$s'] = 'Derzeit verbunden mit: %1$s'; -$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) wird der Link, der eventuell an deinen Twitter-Beitrag angehängt wird, um auf den Originalbeitrag zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde.'; -$a->strings['Invalid Twitter info'] = 'Ungültige Twitter Informationen'; -$a->strings['Disconnect'] = 'Trennen'; +$a->strings['No status.'] = 'Kein Status.'; $a->strings['Allow posting to Twitter'] = 'Veröffentlichung bei Twitter erlauben'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Wenn aktiviert, können all deine öffentlichen Einträge auf dem verbundenen Twitter-Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen.'; $a->strings['Send public postings to Twitter by default'] = 'Veröffentliche öffentliche Beiträge standardmäßig bei Twitter'; -$a->strings['Use threads instead of truncating the content'] = 'Verwende Threads anstelle den Inhalt zu kürzen'; -$a->strings['Mirror all posts from twitter that are no replies'] = 'Spiegle alle Beiträge von Twitter, die keine Antworten sind'; -$a->strings['Import the remote timeline'] = 'Importiere die Remote-Zeitleiste'; -$a->strings['Automatically create contacts'] = 'Automatisch Kontakte anlegen'; -$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here.'] = 'Mit dieser Option wird automatisch ein Kontakt bei Friendica angelegt, wenn du eine Nachricht von einem bestehenden Kontakt auf Twitter erhältst. Ist die Option nicht aktiv, musst du manuell Kontakte für diejenigen deiner Twitter-Kontakte anlegen, deren Nachrichten du auf Friendica lesen möchtest.'; -$a->strings['Follow in fediverse'] = 'Im Fediverse folgen'; -$a->strings['Automatically subscribe to the contact in the fediverse, when a fediverse account is mentioned in name or description and we are following the Twitter contact.'] = 'Hat ein Twitter Kontakt eine Profiladresse im Fediverse im Namen oder der Beschreibung genannt, wird dieser automatisch gefolgt.'; -$a->strings['Twitter Import/Export/Mirror'] = 'Twitter-Import/Export/Spiegeln'; -$a->strings['Please connect a Twitter account in your Social Network settings to import Twitter posts.'] = 'Bitte verbinde deinen Twitter Account in den Einstellungen zu den Soziale Netzwerken damit deine Twitter Beiträge importiert werden.'; -$a->strings['Twitter post not found.'] = 'Beiträge auf Twitter nicht gefunden.'; -$a->strings['Save Settings'] = 'Einstellungen speichern'; -$a->strings['Consumer key'] = 'Consumer Key'; -$a->strings['Consumer secret'] = 'Consumer Secret'; -$a->strings['%s on Twitter'] = '%s auf Twitter'; +$a->strings['API Key'] = 'API Key'; +$a->strings['API Secret'] = 'API Secret'; +$a->strings['Access Token'] = 'Access Token'; +$a->strings['Access Secret'] = 'Access Secret'; +$a->strings['Each user needs to register their own app to be able to post to Twitter. Please visit https://developer.twitter.com/en/portal/projects-and-apps to register a project. Inside the project you then have to register an app. You will find the needed data for the connector on the page "Keys and token" in the app settings.'] = 'Jeder Nutzer muss seine eigene App registrieren, um auf Twitter posten zu können. Bitte besuchen Sie https://developer.twitter.com/en/portal/projects-and-apps, um ein Projekt zu registrieren. Innerhalb des Projekts müssen Sie dann eine App registrieren. Die benötigten Daten für den Connector finden Sie auf der Seite "Keys and token" in den App-Einstellungen.'; +$a->strings['Last Status Summary'] = 'Zusammenfassung des letzten Status'; +$a->strings['Last Status Content'] = 'Inhalt des letzten Status'; +$a->strings['Twitter Export'] = 'Twitter Export'; diff --git a/twitter/lang/es/messages.po b/twitter/lang/es/messages.po index 6673ef0a..f479b846 100644 --- a/twitter/lang/es/messages.po +++ b/twitter/lang/es/messages.po @@ -11,123 +11,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:16+0100\n" -"PO-Revision-Date: 2021-04-06 02:17+0000\n" -"Last-Translator: Senex Petrovic \n" -"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Senex Petrovic , 2021\n" +"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: twitter.php:189 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Entrada para Twitter" -#: twitter.php:234 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." -msgstr "Envió un PIN vacío, inicie sesión con Twitter nuevamente para obtener uno nuevo." +#: twitter.php:123 +msgid "No status." +msgstr "" -#: twitter.php:291 twitter.php:295 -msgid "Twitter Import/Export/Mirror" -msgstr "Importación / Exportación / Espejo de Twitter" - -#: twitter.php:302 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "No se ha encontrado ningún par de claves de consumidor para Twitter. Por favor, póngase en contacto con el administrador de su sitio. " - -#: twitter.php:314 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "En esta instancia de Friendica, se habilitó el complemento de Twitter, pero aún no ha conectado su cuenta a su cuenta de Twitter. Para hacerlo, haga clic en el botón de abajo para obtener un PIN de Twitter que debe copiar en el cuadro de entrada a continuación y enviar el formulario. Solo sus publicaciones de public se publicarán en Twitter." - -#: twitter.php:315 -msgid "Log in with Twitter" -msgstr "Iniciar sesión con Twitter" - -#: twitter.php:317 -msgid "Copy the PIN from Twitter here" -msgstr "Copie el PIN de Twitter aquí" - -#: twitter.php:322 twitter.php:377 twitter.php:768 -msgid "Save Settings" -msgstr "Guardar ajustes" - -#: twitter.php:324 twitter.php:379 -msgid "An error occured: " -msgstr "Ocurrió un error:" - -#: twitter.php:341 -msgid "Currently connected to: " -msgstr "Moneda conectada a:" - -#: twitter.php:342 twitter.php:352 -msgid "Disconnect" -msgstr "Desconectar" - -#: twitter.php:359 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "Permitir publicar en Twitter" -#: twitter.php:359 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Si habilita todas sus publicaciones públicas pueden ser publicadas en la cuenta de Twitter asociada. Puede elegir hacer eso por defecto (aquí) o por cada publicación por separado en las opciones de entrada cuando escriba la entrada." -#: twitter.php:362 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "Nota: Debido a tu privacidad (Ocultar tu perfil de desconocidos?) el enlace potencialmente incluido en publicaciones públicas retransmitidas a Twitter llevará al visitante a una página en blanco que le informa que el acceso a su perfil ha sido restringido." - -#: twitter.php:365 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "Enviar publicaciones públicas a Twitter por defecto" -#: twitter.php:368 -msgid "Mirror all posts from twitter that are no replies" -msgstr "Refleje todas las publicaciones de Twitter que no sean respuestas" +#: twitter.php:131 +msgid "API Key" +msgstr "" -#: twitter.php:371 -msgid "Import the remote timeline" -msgstr "Importar la línea de tiempo remota" +#: twitter.php:132 +msgid "API Secret" +msgstr "" -#: twitter.php:374 -msgid "Automatically create contacts" -msgstr "Crea contactos automáticamente" +#: twitter.php:133 +msgid "Access Token" +msgstr "" -#: twitter.php:374 +#: twitter.php:134 +msgid "Access Secret" +msgstr "" + +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here. However if enabled, you cannot " -"merely remove a twitter contact from the Friendica contact list, as it will " -"recreate this contact when they post again." -msgstr "Esto creará automáticamente un contacto en Friendica tan pronto como reciba un mensaje de un contacto existente a través de la red de Twitter. Si no habilita esto, debe agregar manualmente los contactos de Twitter en Friendica de los que le gustaría ver las publicaciones aquí. Sin embargo, si está habilitado, no puede simplemente eliminar un contacto de Twitter de la lista de contactos de Friendica, ya que volverá a crear este contacto cuando vuelva a publicar." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." +msgstr "" -#: twitter.php:770 -msgid "Consumer key" -msgstr "Clave de consumidor" +#: twitter.php:136 +msgid "Last Status Summary" +msgstr "" -#: twitter.php:771 -msgid "Consumer secret" -msgstr "Secreto de consumidor" +#: twitter.php:137 +msgid "Last Status Content" +msgstr "" -#: twitter.php:967 -#, php-format -msgid "%s on Twitter" -msgstr "%s en Twitter" +#: twitter.php:142 +msgid "Twitter Export" +msgstr "" diff --git a/twitter/lang/es/strings.php b/twitter/lang/es/strings.php index 1aa0cd14..368c871c 100644 --- a/twitter/lang/es/strings.php +++ b/twitter/lang/es/strings.php @@ -3,27 +3,9 @@ if(! function_exists("string_plural_select_es")) { function string_plural_select_es($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Post to Twitter'] = 'Entrada para Twitter'; -$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Envió un PIN vacío, inicie sesión con Twitter nuevamente para obtener uno nuevo.'; -$a->strings['Twitter Import/Export/Mirror'] = 'Importación / Exportación / Espejo de Twitter'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'No se ha encontrado ningún par de claves de consumidor para Twitter. Por favor, póngase en contacto con el administrador de su sitio. '; -$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'En esta instancia de Friendica, se habilitó el complemento de Twitter, pero aún no ha conectado su cuenta a su cuenta de Twitter. Para hacerlo, haga clic en el botón de abajo para obtener un PIN de Twitter que debe copiar en el cuadro de entrada a continuación y enviar el formulario. Solo sus publicaciones de public se publicarán en Twitter.'; -$a->strings['Log in with Twitter'] = 'Iniciar sesión con Twitter'; -$a->strings['Copy the PIN from Twitter here'] = 'Copie el PIN de Twitter aquí'; -$a->strings['Save Settings'] = 'Guardar ajustes'; -$a->strings['An error occured: '] = 'Ocurrió un error:'; -$a->strings['Currently connected to: '] = 'Moneda conectada a:'; -$a->strings['Disconnect'] = 'Desconectar'; $a->strings['Allow posting to Twitter'] = 'Permitir publicar en Twitter'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Si habilita todas sus publicaciones públicas pueden ser publicadas en la cuenta de Twitter asociada. Puede elegir hacer eso por defecto (aquí) o por cada publicación por separado en las opciones de entrada cuando escriba la entrada.'; -$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Nota: Debido a tu privacidad (Ocultar tu perfil de desconocidos?) el enlace potencialmente incluido en publicaciones públicas retransmitidas a Twitter llevará al visitante a una página en blanco que le informa que el acceso a su perfil ha sido restringido.'; $a->strings['Send public postings to Twitter by default'] = 'Enviar publicaciones públicas a Twitter por defecto'; -$a->strings['Mirror all posts from twitter that are no replies'] = 'Refleje todas las publicaciones de Twitter que no sean respuestas'; -$a->strings['Import the remote timeline'] = 'Importar la línea de tiempo remota'; -$a->strings['Automatically create contacts'] = 'Crea contactos automáticamente'; -$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here. However if enabled, you cannot merely remove a twitter contact from the Friendica contact list, as it will recreate this contact when they post again.'] = 'Esto creará automáticamente un contacto en Friendica tan pronto como reciba un mensaje de un contacto existente a través de la red de Twitter. Si no habilita esto, debe agregar manualmente los contactos de Twitter en Friendica de los que le gustaría ver las publicaciones aquí. Sin embargo, si está habilitado, no puede simplemente eliminar un contacto de Twitter de la lista de contactos de Friendica, ya que volverá a crear este contacto cuando vuelva a publicar.'; -$a->strings['Consumer key'] = 'Clave de consumidor'; -$a->strings['Consumer secret'] = 'Secreto de consumidor'; -$a->strings['%s on Twitter'] = '%s en Twitter'; diff --git a/twitter/lang/fr/messages.po b/twitter/lang/fr/messages.po index f6afa0a6..b510d6d8 100644 --- a/twitter/lang/fr/messages.po +++ b/twitter/lang/fr/messages.po @@ -4,6 +4,7 @@ # # # Translators: +# Florent C., 2023 # Nicolas Derive, 2022 # ea1cd8241cb389ffb6f92bc6891eff5d_dc12308 <70dced5587d47e18d88f9298024d96f8_93383>, 2015 # StefOfficiel , 2015 @@ -11,153 +12,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-13 10:15+0000\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" "PO-Revision-Date: 2014-06-23 12:58+0000\n" -"Last-Translator: Nicolas Derive, 2022\n" -"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" +"Last-Translator: Florent C., 2023\n" +"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: twitter.php:216 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Publier sur Twitter" -#: twitter.php:263 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." -msgstr "Vous avez envoyé un PIN vide, veuillez vous connecter à Twitter à nouveau pour en avoir un autre." +#: twitter.php:123 +msgid "No status." +msgstr "Aucun statut" -#: twitter.php:330 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "Aucune clé d'application pour Twitter n'a été trouvée. Merci de contacter l'administrateur de votre site." - -#: twitter.php:343 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "Sur cette instance de Friendica, le connecteur Twitter a été activé, mais vous n'avez pas encore connecté votre compte local à votre compte Twitter. Pour ce faire, cliquer sur le bouton ci-dessous. Vous obtiendrez alors un 'PIN' de Twitter, que vous devrez copier dans le champ ci-dessous, puis soumettre le formulaire. Seules vos publications publiques seront transmises à Twitter." - -#: twitter.php:344 -msgid "Log in with Twitter" -msgstr "Se connecter avec Twitter" - -#: twitter.php:346 -msgid "Copy the PIN from Twitter here" -msgstr "Copier le PIN de Twitter ici" - -#: twitter.php:354 twitter.php:399 -msgid "An error occured: " -msgstr "Une erreur est survenue :" - -#: twitter.php:368 -#, php-format -msgid "" -"Currently connected to: %1$s" -msgstr "Actuellement connecté à : %1$s" - -#: twitter.php:374 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "Note: Du fait de vos paramètres de vie privée (Cacher les détails de votre profil des visiteurs inconnus?), le lien potentiellement inclus dans les publications publiques relayées vers Twitter conduira les visiteurs vers une page blanche les informant que leur accès à votre profil a été restreint." - -#: twitter.php:381 -msgid "Invalid Twitter info" -msgstr "Informations Twitter invalides" - -#: twitter.php:382 -msgid "Disconnect" -msgstr "Se déconnecter" - -#: twitter.php:387 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "Autoriser la publication sur Twitter" -#: twitter.php:387 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "En cas d'activation, toutes vos publications publiques seront transmises au compte Twitter associé. Vous pourrez choisir de le faire par défaut (ici), ou bien pour chaque publication séparément lors de sa rédaction." -#: twitter.php:388 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "Envoyer par défaut les publications publiques sur Twitter" -#: twitter.php:389 -msgid "Use threads instead of truncating the content" -msgstr "Utiliser des fils de discussion (threads) au lieu de tronquer le contenu" +#: twitter.php:131 +msgid "API Key" +msgstr "Clé API" -#: twitter.php:390 -msgid "Mirror all posts from twitter that are no replies" -msgstr "Synchroniser toutes les publications de Twitter qui ne sont pas des réponses" +#: twitter.php:132 +msgid "API Secret" +msgstr "Secret API" -#: twitter.php:391 -msgid "Import the remote timeline" -msgstr "Importer la Timeline distante" +#: twitter.php:133 +msgid "Access Token" +msgstr "Token Accès" -#: twitter.php:392 -msgid "Automatically create contacts" -msgstr "Créer automatiquement les contacts" +#: twitter.php:134 +msgid "Access Secret" +msgstr "Secret Accès" -#: twitter.php:392 +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here." -msgstr "Cela va automatiquement créer un contact dans Friendica dès qu'une publication d'un contact existant est reçue de Twitter. Si vous n'activez pas ceci, vous devrez ajouter manuellement ces contacts dans Friendica afin d'y voir leurs publications." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." +msgstr "Chaque utilisateur doit enregistrer sa propre application pour pouvoir publier des messages sur Twitter. Allez sur https://developer.twitter.com/en/portal/projects-and-apps pour enregistrer un projet. Dans le projet, vous devez ensuite enregistrer une application. Vous trouverez les données nécessaires pour le connecteur sur la page \"Keys and token\" dans les paramètres de l'application." -#: twitter.php:393 -msgid "Follow in fediverse" -msgstr "Suivre dans le fediverse" +#: twitter.php:136 +msgid "Last Status Summary" +msgstr "Résumé du dernier statut" -#: twitter.php:393 -msgid "" -"Automatically subscribe to the contact in the fediverse, when a fediverse " -"account is mentioned in name or description and we are following the Twitter" -" contact." -msgstr "Suivre automatiquement le contact dans le fediverse, quand un compte fediverse est mentionné dans le nom ou la description et que le contact Twitter est suivi." +#: twitter.php:137 +msgid "Last Status Content" +msgstr "Contenu du dernier statut" -#: twitter.php:406 -msgid "Twitter Import/Export/Mirror" -msgstr "Importation/Exportation/Synchronisation avec Twitter" - -#: twitter.php:558 -msgid "" -"Please connect a Twitter account in your Social Network settings to import " -"Twitter posts." -msgstr "Merci de connecter un compte Twitter depuis vos Paramètres de réseaux sociaux afin d'importer les publications Twitter." - -#: twitter.php:565 -msgid "Twitter post not found." -msgstr "Publication Twitter non trouvée." - -#: twitter.php:965 -msgid "Save Settings" -msgstr "Sauvegarder les paramètres" - -#: twitter.php:967 -msgid "Consumer key" -msgstr "Consumer key" - -#: twitter.php:968 -msgid "Consumer secret" -msgstr "Consumer secret" - -#: twitter.php:1167 -#, php-format -msgid "%s on Twitter" -msgstr "%s sur Twitter" +#: twitter.php:142 +msgid "Twitter Export" +msgstr "Export Twitter" diff --git a/twitter/lang/fr/strings.php b/twitter/lang/fr/strings.php index ff46a386..d75116e9 100644 --- a/twitter/lang/fr/strings.php +++ b/twitter/lang/fr/strings.php @@ -6,30 +6,15 @@ function string_plural_select_fr($n){ if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Post to Twitter'] = 'Publier sur Twitter'; -$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Vous avez envoyé un PIN vide, veuillez vous connecter à Twitter à nouveau pour en avoir un autre.'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Aucune clé d\'application pour Twitter n\'a été trouvée. Merci de contacter l\'administrateur de votre site.'; -$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'Sur cette instance de Friendica, le connecteur Twitter a été activé, mais vous n\'avez pas encore connecté votre compte local à votre compte Twitter. Pour ce faire, cliquer sur le bouton ci-dessous. Vous obtiendrez alors un \'PIN\' de Twitter, que vous devrez copier dans le champ ci-dessous, puis soumettre le formulaire. Seules vos publications publiques seront transmises à Twitter.'; -$a->strings['Log in with Twitter'] = 'Se connecter avec Twitter'; -$a->strings['Copy the PIN from Twitter here'] = 'Copier le PIN de Twitter ici'; -$a->strings['An error occured: '] = 'Une erreur est survenue :'; -$a->strings['Currently connected to: %1$s'] = 'Actuellement connecté à : %1$s'; -$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Note: Du fait de vos paramètres de vie privée (Cacher les détails de votre profil des visiteurs inconnus?), le lien potentiellement inclus dans les publications publiques relayées vers Twitter conduira les visiteurs vers une page blanche les informant que leur accès à votre profil a été restreint.'; -$a->strings['Invalid Twitter info'] = 'Informations Twitter invalides'; -$a->strings['Disconnect'] = 'Se déconnecter'; +$a->strings['No status.'] = 'Aucun statut'; $a->strings['Allow posting to Twitter'] = 'Autoriser la publication sur Twitter'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'En cas d\'activation, toutes vos publications publiques seront transmises au compte Twitter associé. Vous pourrez choisir de le faire par défaut (ici), ou bien pour chaque publication séparément lors de sa rédaction.'; $a->strings['Send public postings to Twitter by default'] = 'Envoyer par défaut les publications publiques sur Twitter'; -$a->strings['Use threads instead of truncating the content'] = 'Utiliser des fils de discussion (threads) au lieu de tronquer le contenu'; -$a->strings['Mirror all posts from twitter that are no replies'] = 'Synchroniser toutes les publications de Twitter qui ne sont pas des réponses'; -$a->strings['Import the remote timeline'] = 'Importer la Timeline distante'; -$a->strings['Automatically create contacts'] = 'Créer automatiquement les contacts'; -$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here.'] = 'Cela va automatiquement créer un contact dans Friendica dès qu\'une publication d\'un contact existant est reçue de Twitter. Si vous n\'activez pas ceci, vous devrez ajouter manuellement ces contacts dans Friendica afin d\'y voir leurs publications.'; -$a->strings['Follow in fediverse'] = 'Suivre dans le fediverse'; -$a->strings['Automatically subscribe to the contact in the fediverse, when a fediverse account is mentioned in name or description and we are following the Twitter contact.'] = 'Suivre automatiquement le contact dans le fediverse, quand un compte fediverse est mentionné dans le nom ou la description et que le contact Twitter est suivi.'; -$a->strings['Twitter Import/Export/Mirror'] = 'Importation/Exportation/Synchronisation avec Twitter'; -$a->strings['Please connect a Twitter account in your Social Network settings to import Twitter posts.'] = 'Merci de connecter un compte Twitter depuis vos Paramètres de réseaux sociaux afin d\'importer les publications Twitter.'; -$a->strings['Twitter post not found.'] = 'Publication Twitter non trouvée.'; -$a->strings['Save Settings'] = 'Sauvegarder les paramètres'; -$a->strings['Consumer key'] = 'Consumer key'; -$a->strings['Consumer secret'] = 'Consumer secret'; -$a->strings['%s on Twitter'] = '%s sur Twitter'; +$a->strings['API Key'] = 'Clé API'; +$a->strings['API Secret'] = 'Secret API'; +$a->strings['Access Token'] = 'Token Accès'; +$a->strings['Access Secret'] = 'Secret Accès'; +$a->strings['Each user needs to register their own app to be able to post to Twitter. Please visit https://developer.twitter.com/en/portal/projects-and-apps to register a project. Inside the project you then have to register an app. You will find the needed data for the connector on the page "Keys and token" in the app settings.'] = 'Chaque utilisateur doit enregistrer sa propre application pour pouvoir publier des messages sur Twitter. Allez sur https://developer.twitter.com/en/portal/projects-and-apps pour enregistrer un projet. Dans le projet, vous devez ensuite enregistrer une application. Vous trouverez les données nécessaires pour le connecteur sur la page "Keys and token" dans les paramètres de l\'application.'; +$a->strings['Last Status Summary'] = 'Résumé du dernier statut'; +$a->strings['Last Status Content'] = 'Contenu du dernier statut'; +$a->strings['Twitter Export'] = 'Export Twitter'; diff --git a/twitter/lang/hu/messages.po b/twitter/lang/hu/messages.po index 7ff28101..a42e3327 100644 --- a/twitter/lang/hu/messages.po +++ b/twitter/lang/hu/messages.po @@ -4,158 +4,77 @@ # # # Translators: -# Balázs Úr, 2020-2022 +# Balázs Úr, 2020-2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-13 10:15+0000\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" "PO-Revision-Date: 2014-06-23 12:58+0000\n" -"Last-Translator: Balázs Úr, 2020-2022\n" -"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n" +"Last-Translator: Balázs Úr, 2020-2023\n" +"Language-Team: Hungarian (http://app.transifex.com/Friendica/friendica/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: twitter.php:216 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Beküldés a Twitterre" -#: twitter.php:263 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." -msgstr "Üres PIN-kódot küldött be. Jelentkezzen be a Twitter használatával újra, hogy egy újat kapjon." +#: twitter.php:123 +msgid "No status." +msgstr "Nincs állapot." -#: twitter.php:330 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "Nem találhatók felhasználói kulcspárok a Twitterhez. Vegye fel a kapcsolatot az oldal adminisztrátorával." - -#: twitter.php:343 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "Ennél a Friendica példánynál a Twitter bővítmény engedélyezve lett, de még nem kapcsolta hozzá a fiókját a Twitter-fiókjához. Ehhez kattintson a lenti gombra, hogy kapjon egy PIN-kódot a Twittertől, amelyet a lenti beviteli mezőbe kell bemásolnia, majd el kell küldenie az űrlapot. Csak a nyilvános bejegyzései lesznek beküldve a Twitterre." - -#: twitter.php:344 -msgid "Log in with Twitter" -msgstr "Bejelentkezés Twitter használatával" - -#: twitter.php:346 -msgid "Copy the PIN from Twitter here" -msgstr "Másolja be ide a Twittertől kapott PIN-kódot" - -#: twitter.php:354 twitter.php:399 -msgid "An error occured: " -msgstr "Hiba történt: " - -#: twitter.php:368 -#, php-format -msgid "" -"Currently connected to: %1$s" -msgstr "Jelenleg ehhez kapcsolódott: %1$s" - -#: twitter.php:374 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "Megjegyzés: az adatvédelmi beállításai miatt (Elrejti a profilja részleteit az ismeretlen megtekintők elől?) a Twitterre továbbított nyilvános beküldésekben vélhetően tartalmazott hivatkozás a látogatót egy üres oldalra fogja vezetni, amely arról tájékoztatja a látogatót, hogy a profiljához való hozzáférés korlátozva lett." - -#: twitter.php:381 -msgid "Invalid Twitter info" -msgstr "Érvénytelen Twitter-információk" - -#: twitter.php:382 -msgid "Disconnect" -msgstr "Leválasztás" - -#: twitter.php:387 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "Beküldés engedélyezése a Twitterre" -#: twitter.php:387 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Ha engedélyezve van, akkor az összes nyilvános beküldés beküldhető a hozzárendelt Twitter-fiókba. Kiválaszthatja, hogy ezt alapértelmezetten szeretné-e (itt), vagy minden egyes beküldésnél különállóan a beküldési beállításokban, amikor megírja a bejegyzést." -#: twitter.php:388 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "Nyilvános beküldések küldése a Twitterre alapértelmezetten" -#: twitter.php:389 -msgid "Use threads instead of truncating the content" -msgstr "Szálak használata a tartalom csonkítása helyett" +#: twitter.php:131 +msgid "API Key" +msgstr "API-kulcs" -#: twitter.php:390 -msgid "Mirror all posts from twitter that are no replies" -msgstr "A Twittertől származó összes bejegyzés tükrözése, amelyek nem válaszok" +#: twitter.php:132 +msgid "API Secret" +msgstr "API-titok" -#: twitter.php:391 -msgid "Import the remote timeline" -msgstr "A távoli idővonal importálása" +#: twitter.php:133 +msgid "Access Token" +msgstr "Hozzáférési token" -#: twitter.php:392 -msgid "Automatically create contacts" -msgstr "Partnerek automatikus létrehozása" +#: twitter.php:134 +msgid "Access Secret" +msgstr "Hozzáférési titok" -#: twitter.php:392 +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here." -msgstr "Ez automatikusan létre fog hozni egy partnert a Friendicán, amint üzenetet fogad egy meglévő partnertől a Twitter hálózaton keresztül. Ha ezt nem engedélyezi, akkor kézzel kell hozzáadnia azokat a Twitter-partnereket a Friendicában, akiktől bejegyzéseket szeretne látni itt." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." +msgstr "Minden felhasználónak regisztrálnia kell a saját alkalmazását, hogy bejegyzést küldhessen a Twitterre. Látogassa meg a https://developer.twitter.com/en/portal/projects-and-apps oldalt egy projekt regisztrálásához. A projekten belül ezután regisztrálnia kell egy alkalmazást. A csatlakozóhoz szükséges adatokat a „Kulcsok és token” oldalon találja az alkalmazás beállításaiban." -#: twitter.php:393 -msgid "Follow in fediverse" -msgstr "Követés a födiverzumban" +#: twitter.php:136 +msgid "Last Status Summary" +msgstr "Utolsó állapot összegzése" -#: twitter.php:393 -msgid "" -"Automatically subscribe to the contact in the fediverse, when a fediverse " -"account is mentioned in name or description and we are following the Twitter" -" contact." -msgstr "Automatikus feliratkozás a födiverzumban lévő partnerre, ha egy födiverzumfiókot említenek a névben vagy a leírásban, és követjük a Twitter-partnert." +#: twitter.php:137 +msgid "Last Status Content" +msgstr "Utolsó állapot tartalma" -#: twitter.php:406 -msgid "Twitter Import/Export/Mirror" -msgstr "Twitter importálás, exportálás vagy tükrözés" - -#: twitter.php:558 -msgid "" -"Please connect a Twitter account in your Social Network settings to import " -"Twitter posts." -msgstr "Kapcsoljon hozzá egy Twitter-fiókot a közösségi hálózatok beállításában a Twitter-bejegyzések importálásához." - -#: twitter.php:565 -msgid "Twitter post not found." -msgstr "A Twitter-bejegyzés nem található." - -#: twitter.php:965 -msgid "Save Settings" -msgstr "Beállítások mentése" - -#: twitter.php:967 -msgid "Consumer key" -msgstr "Felhasználói kulcs" - -#: twitter.php:968 -msgid "Consumer secret" -msgstr "Felhasználói titok" - -#: twitter.php:1167 -#, php-format -msgid "%s on Twitter" -msgstr "%s a Twitteren" +#: twitter.php:142 +msgid "Twitter Export" +msgstr "Twitter exportálás" diff --git a/twitter/lang/hu/strings.php b/twitter/lang/hu/strings.php index 552ebb3e..8e2a5084 100644 --- a/twitter/lang/hu/strings.php +++ b/twitter/lang/hu/strings.php @@ -6,30 +6,15 @@ function string_plural_select_hu($n){ return intval($n != 1); }} $a->strings['Post to Twitter'] = 'Beküldés a Twitterre'; -$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Üres PIN-kódot küldött be. Jelentkezzen be a Twitter használatával újra, hogy egy újat kapjon.'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Nem találhatók felhasználói kulcspárok a Twitterhez. Vegye fel a kapcsolatot az oldal adminisztrátorával.'; -$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'Ennél a Friendica példánynál a Twitter bővítmény engedélyezve lett, de még nem kapcsolta hozzá a fiókját a Twitter-fiókjához. Ehhez kattintson a lenti gombra, hogy kapjon egy PIN-kódot a Twittertől, amelyet a lenti beviteli mezőbe kell bemásolnia, majd el kell küldenie az űrlapot. Csak a nyilvános bejegyzései lesznek beküldve a Twitterre.'; -$a->strings['Log in with Twitter'] = 'Bejelentkezés Twitter használatával'; -$a->strings['Copy the PIN from Twitter here'] = 'Másolja be ide a Twittertől kapott PIN-kódot'; -$a->strings['An error occured: '] = 'Hiba történt: '; -$a->strings['Currently connected to: %1$s'] = 'Jelenleg ehhez kapcsolódott: %1$s'; -$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Megjegyzés: az adatvédelmi beállításai miatt (Elrejti a profilja részleteit az ismeretlen megtekintők elől?) a Twitterre továbbított nyilvános beküldésekben vélhetően tartalmazott hivatkozás a látogatót egy üres oldalra fogja vezetni, amely arról tájékoztatja a látogatót, hogy a profiljához való hozzáférés korlátozva lett.'; -$a->strings['Invalid Twitter info'] = 'Érvénytelen Twitter-információk'; -$a->strings['Disconnect'] = 'Leválasztás'; +$a->strings['No status.'] = 'Nincs állapot.'; $a->strings['Allow posting to Twitter'] = 'Beküldés engedélyezése a Twitterre'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Ha engedélyezve van, akkor az összes nyilvános beküldés beküldhető a hozzárendelt Twitter-fiókba. Kiválaszthatja, hogy ezt alapértelmezetten szeretné-e (itt), vagy minden egyes beküldésnél különállóan a beküldési beállításokban, amikor megírja a bejegyzést.'; $a->strings['Send public postings to Twitter by default'] = 'Nyilvános beküldések küldése a Twitterre alapértelmezetten'; -$a->strings['Use threads instead of truncating the content'] = 'Szálak használata a tartalom csonkítása helyett'; -$a->strings['Mirror all posts from twitter that are no replies'] = 'A Twittertől származó összes bejegyzés tükrözése, amelyek nem válaszok'; -$a->strings['Import the remote timeline'] = 'A távoli idővonal importálása'; -$a->strings['Automatically create contacts'] = 'Partnerek automatikus létrehozása'; -$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here.'] = 'Ez automatikusan létre fog hozni egy partnert a Friendicán, amint üzenetet fogad egy meglévő partnertől a Twitter hálózaton keresztül. Ha ezt nem engedélyezi, akkor kézzel kell hozzáadnia azokat a Twitter-partnereket a Friendicában, akiktől bejegyzéseket szeretne látni itt.'; -$a->strings['Follow in fediverse'] = 'Követés a födiverzumban'; -$a->strings['Automatically subscribe to the contact in the fediverse, when a fediverse account is mentioned in name or description and we are following the Twitter contact.'] = 'Automatikus feliratkozás a födiverzumban lévő partnerre, ha egy födiverzumfiókot említenek a névben vagy a leírásban, és követjük a Twitter-partnert.'; -$a->strings['Twitter Import/Export/Mirror'] = 'Twitter importálás, exportálás vagy tükrözés'; -$a->strings['Please connect a Twitter account in your Social Network settings to import Twitter posts.'] = 'Kapcsoljon hozzá egy Twitter-fiókot a közösségi hálózatok beállításában a Twitter-bejegyzések importálásához.'; -$a->strings['Twitter post not found.'] = 'A Twitter-bejegyzés nem található.'; -$a->strings['Save Settings'] = 'Beállítások mentése'; -$a->strings['Consumer key'] = 'Felhasználói kulcs'; -$a->strings['Consumer secret'] = 'Felhasználói titok'; -$a->strings['%s on Twitter'] = '%s a Twitteren'; +$a->strings['API Key'] = 'API-kulcs'; +$a->strings['API Secret'] = 'API-titok'; +$a->strings['Access Token'] = 'Hozzáférési token'; +$a->strings['Access Secret'] = 'Hozzáférési titok'; +$a->strings['Each user needs to register their own app to be able to post to Twitter. Please visit https://developer.twitter.com/en/portal/projects-and-apps to register a project. Inside the project you then have to register an app. You will find the needed data for the connector on the page "Keys and token" in the app settings.'] = 'Minden felhasználónak regisztrálnia kell a saját alkalmazását, hogy bejegyzést küldhessen a Twitterre. Látogassa meg a https://developer.twitter.com/en/portal/projects-and-apps oldalt egy projekt regisztrálásához. A projekten belül ezután regisztrálnia kell egy alkalmazást. A csatlakozóhoz szükséges adatokat a „Kulcsok és token” oldalon találja az alkalmazás beállításaiban.'; +$a->strings['Last Status Summary'] = 'Utolsó állapot összegzése'; +$a->strings['Last Status Content'] = 'Utolsó állapot tartalma'; +$a->strings['Twitter Export'] = 'Twitter exportálás'; diff --git a/twitter/lang/it/messages.po b/twitter/lang/it/messages.po index a199980c..dfb7adb2 100644 --- a/twitter/lang/it/messages.po +++ b/twitter/lang/it/messages.po @@ -10,123 +10,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-23 02:00-0400\n" -"PO-Revision-Date: 2020-11-20 16:52+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Sylke Vicious , 2020\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: twitter.php:189 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Invia a Twitter" -#: twitter.php:234 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." -msgstr "Hai inserito un PIN vuoto, autenticati con Twitter nuovamente per averne uno nuovo." +#: twitter.php:123 +msgid "No status." +msgstr "" -#: twitter.php:291 twitter.php:295 -msgid "Twitter Import/Export/Mirror" -msgstr "Importa/Esporta/Clona Twitter" - -#: twitter.php:302 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "Nessuna coppia di chiavi per Twitter trovata. Contatta l'amministratore del sito." - -#: twitter.php:314 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "Il componente aggiuntivo Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi messaggi pubblici saranno inviati a Twitter." - -#: twitter.php:315 -msgid "Log in with Twitter" -msgstr "Accedi con Twitter" - -#: twitter.php:317 -msgid "Copy the PIN from Twitter here" -msgstr "Copia il PIN da Twitter qui" - -#: twitter.php:322 twitter.php:377 twitter.php:757 -msgid "Save Settings" -msgstr "Salva Impostazioni" - -#: twitter.php:324 twitter.php:379 -msgid "An error occured: " -msgstr "Si è verificato un errore:" - -#: twitter.php:341 -msgid "Currently connected to: " -msgstr "Al momento connesso con:" - -#: twitter.php:342 twitter.php:352 -msgid "Disconnect" -msgstr "Disconnetti" - -#: twitter.php:359 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "Permetti l'invio a Twitter" -#: twitter.php:359 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Se abilitato tutti i tuoi messaggi pubblici possono essere inviati all'account Twitter associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio." -#: twitter.php:362 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "Nota: A causa delle tue impostazioni di privacy(Nascondi i dettagli del tuo profilo ai visitatori sconosciuti?) il collegamento potenzialmente incluso nei messaggi pubblici inviati a Twitter porterà i visitatori a una pagina bianca con una nota che li informa che l'accesso al tuo profilo è stato limitato." - -#: twitter.php:365 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "Invia sempre i messaggi pubblici a Twitter" -#: twitter.php:368 -msgid "Mirror all posts from twitter that are no replies" -msgstr "Clona tutti i messaggi da Twitter che non sono risposte" +#: twitter.php:131 +msgid "API Key" +msgstr "" -#: twitter.php:371 -msgid "Import the remote timeline" -msgstr "Importa la timeline remota" +#: twitter.php:132 +msgid "API Secret" +msgstr "" -#: twitter.php:374 -msgid "Automatically create contacts" -msgstr "Crea automaticamente i contatti" +#: twitter.php:133 +msgid "Access Token" +msgstr "" -#: twitter.php:374 +#: twitter.php:134 +msgid "Access Secret" +msgstr "" + +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here. However if enabled, you cannot " -"merely remove a twitter contact from the Friendica contact list, as it will " -"recreate this contact when they post again." -msgstr "Questo creerà automaticamente un contatto in Friendica appena ricevi un messaggio da un tuo contatto sulla rete Twitter. Se non abiliti questa opzione, dovrai aggiungere a mano in Friendica i contatti Twitter da cui vuoi ricevere i messaggi. Se abilitato, però, non potrai semplicemente rimuovere un contatto Twitter dal tuo elenco contatti su Friendica, dato che questo sarà ricreato la prossima volta che invierà un messaggio." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." +msgstr "" -#: twitter.php:759 -msgid "Consumer key" -msgstr "Consumer key" +#: twitter.php:136 +msgid "Last Status Summary" +msgstr "" -#: twitter.php:760 -msgid "Consumer secret" -msgstr "Consumer secret" +#: twitter.php:137 +msgid "Last Status Content" +msgstr "" -#: twitter.php:945 -#, php-format -msgid "%s on Twitter" -msgstr "%s su Twitter" +#: twitter.php:142 +msgid "Twitter Export" +msgstr "" diff --git a/twitter/lang/it/strings.php b/twitter/lang/it/strings.php index e4797a7e..f744c242 100644 --- a/twitter/lang/it/strings.php +++ b/twitter/lang/it/strings.php @@ -3,27 +3,9 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Post to Twitter'] = 'Invia a Twitter'; -$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Hai inserito un PIN vuoto, autenticati con Twitter nuovamente per averne uno nuovo.'; -$a->strings['Twitter Import/Export/Mirror'] = 'Importa/Esporta/Clona Twitter'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Nessuna coppia di chiavi per Twitter trovata. Contatta l\'amministratore del sito.'; -$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'Il componente aggiuntivo Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi messaggi pubblici saranno inviati a Twitter.'; -$a->strings['Log in with Twitter'] = 'Accedi con Twitter'; -$a->strings['Copy the PIN from Twitter here'] = 'Copia il PIN da Twitter qui'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; -$a->strings['An error occured: '] = 'Si è verificato un errore:'; -$a->strings['Currently connected to: '] = 'Al momento connesso con:'; -$a->strings['Disconnect'] = 'Disconnetti'; $a->strings['Allow posting to Twitter'] = 'Permetti l\'invio a Twitter'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Se abilitato tutti i tuoi messaggi pubblici possono essere inviati all\'account Twitter associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio.'; -$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Nota: A causa delle tue impostazioni di privacy(Nascondi i dettagli del tuo profilo ai visitatori sconosciuti?) il collegamento potenzialmente incluso nei messaggi pubblici inviati a Twitter porterà i visitatori a una pagina bianca con una nota che li informa che l\'accesso al tuo profilo è stato limitato.'; $a->strings['Send public postings to Twitter by default'] = 'Invia sempre i messaggi pubblici a Twitter'; -$a->strings['Mirror all posts from twitter that are no replies'] = 'Clona tutti i messaggi da Twitter che non sono risposte'; -$a->strings['Import the remote timeline'] = 'Importa la timeline remota'; -$a->strings['Automatically create contacts'] = 'Crea automaticamente i contatti'; -$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here. However if enabled, you cannot merely remove a twitter contact from the Friendica contact list, as it will recreate this contact when they post again.'] = 'Questo creerà automaticamente un contatto in Friendica appena ricevi un messaggio da un tuo contatto sulla rete Twitter. Se non abiliti questa opzione, dovrai aggiungere a mano in Friendica i contatti Twitter da cui vuoi ricevere i messaggi. Se abilitato, però, non potrai semplicemente rimuovere un contatto Twitter dal tuo elenco contatti su Friendica, dato che questo sarà ricreato la prossima volta che invierà un messaggio.'; -$a->strings['Consumer key'] = 'Consumer key'; -$a->strings['Consumer secret'] = 'Consumer secret'; -$a->strings['%s on Twitter'] = '%s su Twitter'; diff --git a/twitter/lang/ja/messages.po b/twitter/lang/ja/messages.po index bc0d4360..f65c86c1 100644 --- a/twitter/lang/ja/messages.po +++ b/twitter/lang/ja/messages.po @@ -4,128 +4,77 @@ # # # Translators: -# XMPPはいいぞ, 2021 +# daingewuvzeevisiddfddd, 2021 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:16+0100\n" -"PO-Revision-Date: 2021-05-19 00:39+0000\n" -"Last-Translator: XMPPはいいぞ\n" -"Language-Team: Japanese (http://www.transifex.com/Friendica/friendica/language/ja/)\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: daingewuvzeevisiddfddd, 2021\n" +"Language-Team: Japanese (http://app.transifex.com/Friendica/friendica/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: twitter.php:189 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Twitterに投稿" -#: twitter.php:234 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." -msgstr "空のPINを送信しました。もう一度Twitterでサインインして新しいPINを取得してください。" +#: twitter.php:123 +msgid "No status." +msgstr "" -#: twitter.php:291 twitter.php:295 -msgid "Twitter Import/Export/Mirror" -msgstr "Twitterインポート/エクスポート/ミラー" - -#: twitter.php:302 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "Twitterのコンシューマキーペアが見つかりません。サイト管理者に連絡してください。" - -#: twitter.php:314 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "このFriendicaインスタンスでは、Twitterアドオンは有効になっていますが、アカウントをTwitterアカウントにまだ接続していません。これを行うには、下のボタンをクリックしてTwitterからPINを取得し、それを下の入力ボックスにコピーしてフォームを送信する必要があります。 一般公開投稿のみがTwitterに投稿されます。" - -#: twitter.php:315 -msgid "Log in with Twitter" -msgstr "Twitterでログイン" - -#: twitter.php:317 -msgid "Copy the PIN from Twitter here" -msgstr "ここからTwitterからPINをコピーします" - -#: twitter.php:322 twitter.php:377 twitter.php:768 -msgid "Save Settings" -msgstr "設定を保存する" - -#: twitter.php:324 twitter.php:379 -msgid "An error occured: " -msgstr "エラーが発生しました:" - -#: twitter.php:341 -msgid "Currently connected to: " -msgstr "現在接続中:" - -#: twitter.php:342 twitter.php:352 -msgid "Disconnect" -msgstr "切断する" - -#: twitter.php:359 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "Twitterへの投稿を許可する" -#: twitter.php:359 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "有効にすると、すべての一般公開投稿を、関連づけたTwitterアカウントに投稿できます。デフォルト(ここ)で行うか、エントリを書き込む際に投稿オプションですべての投稿を個別に行うかを選択できます。" -#: twitter.php:362 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr ":プライバシー設定(未知の視聴者からプロフィールの詳細を非表示にしますか?)により、Twitterに中継・公開される投稿内のリンクは、プロフィールへのアクセスが制限されている訪問者に対して空白ページを表示します。" - -#: twitter.php:365 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "デフォルトでTwitterに一般公開投稿を送信する" -#: twitter.php:368 -msgid "Mirror all posts from twitter that are no replies" -msgstr "返信がないTwitterのすべての投稿をミラーリングする" - -#: twitter.php:371 -msgid "Import the remote timeline" -msgstr "リモートタイムラインをインポートする" - -#: twitter.php:374 -msgid "Automatically create contacts" -msgstr "連絡先を自動的に作成する" - -#: twitter.php:374 -msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here. However if enabled, you cannot " -"merely remove a twitter contact from the Friendica contact list, as it will " -"recreate this contact when they post again." -msgstr "これにより、Twitterネットワーク経由で既存の連絡先からメッセージを受信するとすぐに、Friendicaに連絡先が自動的に作成されます。これを有効にしない場合、ここで投稿を表示するFriendicaのTwitter連絡先を手動で追加する必要があります。ただし、有効にした場合、Twitterの連絡先をFriendicaの連絡先リストから単に削除することはできません。再送信するとこの連絡先が再作成されるためです。" - -#: twitter.php:770 -msgid "Consumer key" -msgstr "コンシューマ キー" - -#: twitter.php:771 -msgid "Consumer secret" -msgstr "コンシューマ シークレット" - -#: twitter.php:967 -#, php-format -msgid "%s on Twitter" +#: twitter.php:131 +msgid "API Key" +msgstr "" + +#: twitter.php:132 +msgid "API Secret" +msgstr "" + +#: twitter.php:133 +msgid "Access Token" +msgstr "" + +#: twitter.php:134 +msgid "Access Secret" +msgstr "" + +#: twitter.php:135 +msgid "" +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." +msgstr "" + +#: twitter.php:136 +msgid "Last Status Summary" +msgstr "" + +#: twitter.php:137 +msgid "Last Status Content" +msgstr "" + +#: twitter.php:142 +msgid "Twitter Export" msgstr "" diff --git a/twitter/lang/ja/strings.php b/twitter/lang/ja/strings.php index 935058fb..9fda4106 100644 --- a/twitter/lang/ja/strings.php +++ b/twitter/lang/ja/strings.php @@ -6,23 +6,6 @@ function string_plural_select_ja($n){ return intval(0); }} $a->strings['Post to Twitter'] = 'Twitterに投稿'; -$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = '空のPINを送信しました。もう一度Twitterでサインインして新しいPINを取得してください。'; -$a->strings['Twitter Import/Export/Mirror'] = 'Twitterインポート/エクスポート/ミラー'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Twitterのコンシューマキーペアが見つかりません。サイト管理者に連絡してください。'; -$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'このFriendicaインスタンスでは、Twitterアドオンは有効になっていますが、アカウントをTwitterアカウントにまだ接続していません。これを行うには、下のボタンをクリックしてTwitterからPINを取得し、それを下の入力ボックスにコピーしてフォームを送信する必要があります。 一般公開投稿のみがTwitterに投稿されます。'; -$a->strings['Log in with Twitter'] = 'Twitterでログイン'; -$a->strings['Copy the PIN from Twitter here'] = 'ここからTwitterからPINをコピーします'; -$a->strings['Save Settings'] = '設定を保存する'; -$a->strings['An error occured: '] = 'エラーが発生しました:'; -$a->strings['Currently connected to: '] = '現在接続中:'; -$a->strings['Disconnect'] = '切断する'; $a->strings['Allow posting to Twitter'] = 'Twitterへの投稿を許可する'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = '有効にすると、すべての一般公開投稿を、関連づけたTwitterアカウントに投稿できます。デフォルト(ここ)で行うか、エントリを書き込む際に投稿オプションですべての投稿を個別に行うかを選択できます。'; -$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = ':プライバシー設定(未知の視聴者からプロフィールの詳細を非表示にしますか?)により、Twitterに中継・公開される投稿内のリンクは、プロフィールへのアクセスが制限されている訪問者に対して空白ページを表示します。'; $a->strings['Send public postings to Twitter by default'] = 'デフォルトでTwitterに一般公開投稿を送信する'; -$a->strings['Mirror all posts from twitter that are no replies'] = '返信がないTwitterのすべての投稿をミラーリングする'; -$a->strings['Import the remote timeline'] = 'リモートタイムラインをインポートする'; -$a->strings['Automatically create contacts'] = '連絡先を自動的に作成する'; -$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here. However if enabled, you cannot merely remove a twitter contact from the Friendica contact list, as it will recreate this contact when they post again.'] = 'これにより、Twitterネットワーク経由で既存の連絡先からメッセージを受信するとすぐに、Friendicaに連絡先が自動的に作成されます。これを有効にしない場合、ここで投稿を表示するFriendicaのTwitter連絡先を手動で追加する必要があります。ただし、有効にした場合、Twitterの連絡先をFriendicaの連絡先リストから単に削除することはできません。再送信するとこの連絡先が再作成されるためです。'; -$a->strings['Consumer key'] = 'コンシューマ キー'; -$a->strings['Consumer secret'] = 'コンシューマ シークレット'; diff --git a/twitter/lang/nl/messages.po b/twitter/lang/nl/messages.po index b0af4dc9..d1f397ae 100644 --- a/twitter/lang/nl/messages.po +++ b/twitter/lang/nl/messages.po @@ -9,126 +9,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-02 10:25+0700\n" -"PO-Revision-Date: 2018-08-24 13:56+0000\n" -"Last-Translator: Jeroen De Meerleer \n" -"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Jeroen De Meerleer , 2018\n" +"Language-Team: Dutch (http://app.transifex.com/Friendica/friendica/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: twitter.php:195 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Plaatsen op Twitter" -#: twitter.php:236 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." +#: twitter.php:123 +msgid "No status." msgstr "" -#: twitter.php:263 -msgid "Twitter settings updated." -msgstr "Twitter instellingen opgeslagen" - -#: twitter.php:293 twitter.php:297 -msgid "Twitter Import/Export/Mirror" -msgstr "Twitter Import/Exporteren/Spiegelen" - -#: twitter.php:304 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "" - -#: twitter.php:316 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "" - -#: twitter.php:317 -msgid "Log in with Twitter" -msgstr "" - -#: twitter.php:319 -msgid "Copy the PIN from Twitter here" -msgstr "" - -#: twitter.php:324 twitter.php:366 twitter.php:636 -msgid "Save Settings" -msgstr "Instellingen opslaan" - -#: twitter.php:336 -msgid "Currently connected to: " -msgstr "" - -#: twitter.php:337 -msgid "Disconnect" -msgstr "" - -#: twitter.php:347 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "Plaatsen op Twitter toestaan" -#: twitter.php:347 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "" -#: twitter.php:350 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "" - -#: twitter.php:353 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "Verzend publieke berichten naar Twitter als standaard instellen " -#: twitter.php:356 -msgid "Mirror all posts from twitter that are no replies" +#: twitter.php:131 +msgid "API Key" msgstr "" -#: twitter.php:359 -msgid "Import the remote timeline" +#: twitter.php:132 +msgid "API Secret" msgstr "" -#: twitter.php:362 -msgid "Automatically create contacts" +#: twitter.php:133 +msgid "Access Token" msgstr "" -#: twitter.php:362 +#: twitter.php:134 +msgid "Access Secret" +msgstr "" + +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here. However if enabled, you cannot " -"merely remove a twitter contact from the Friendica contact list, as it will " -"recreate this contact when they post again." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." msgstr "" -#: twitter.php:614 -msgid "Twitter post failed. Queued for retry." +#: twitter.php:136 +msgid "Last Status Summary" msgstr "" -#: twitter.php:628 -msgid "Settings updated." -msgstr "Instellingen opgeslagen" - -#: twitter.php:638 -msgid "Consumer key" +#: twitter.php:137 +msgid "Last Status Content" msgstr "" -#: twitter.php:639 -msgid "Consumer secret" +#: twitter.php:142 +msgid "Twitter Export" msgstr "" diff --git a/twitter/lang/nl/strings.php b/twitter/lang/nl/strings.php index 60a1d4ab..41c44f25 100644 --- a/twitter/lang/nl/strings.php +++ b/twitter/lang/nl/strings.php @@ -6,9 +6,5 @@ function string_plural_select_nl($n){ return intval($n != 1); }} $a->strings['Post to Twitter'] = 'Plaatsen op Twitter'; -$a->strings['Twitter settings updated.'] = 'Twitter instellingen opgeslagen'; -$a->strings['Twitter Import/Export/Mirror'] = 'Twitter Import/Exporteren/Spiegelen'; -$a->strings['Save Settings'] = 'Instellingen opslaan'; $a->strings['Allow posting to Twitter'] = 'Plaatsen op Twitter toestaan'; $a->strings['Send public postings to Twitter by default'] = 'Verzend publieke berichten naar Twitter als standaard instellen '; -$a->strings['Settings updated.'] = 'Instellingen opgeslagen'; diff --git a/twitter/lang/pl/messages.po b/twitter/lang/pl/messages.po index adf3809c..11aaef7c 100644 --- a/twitter/lang/pl/messages.po +++ b/twitter/lang/pl/messages.po @@ -10,153 +10,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-11-13 10:15+0000\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" "PO-Revision-Date: 2014-06-23 12:58+0000\n" "Last-Translator: Piotr Strębski , 2022\n" -"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" +"Language-Team: Polish (http://app.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: twitter.php:216 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Opublikuj na Twitterze" -#: twitter.php:263 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." -msgstr "Przesłałeś pusty kod PIN, zaloguj się ponownie na Twitterze, aby otrzymać nowy." +#: twitter.php:123 +msgid "No status." +msgstr "" -#: twitter.php:330 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "Nie znaleziono pary kluczy konsumpcyjnych dla Twittera. Skontaktuj się z administratorem witryny." - -#: twitter.php:343 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "W tej instancji Friendica dodatek do Twittera został włączony, ale jeszcze nie podłączyłeś swojego konta do konta na Twitterze. Aby to zrobić, kliknij przycisk poniżej, aby uzyskać numer PIN z Twittera, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko Twoje publiczne posty będą publikowane na Twitterze." - -#: twitter.php:344 -msgid "Log in with Twitter" -msgstr "Zaloguj się przez Twitter" - -#: twitter.php:346 -msgid "Copy the PIN from Twitter here" -msgstr "Skopiuj tutaj kod PIN z Twittera" - -#: twitter.php:354 twitter.php:399 -msgid "An error occured: " -msgstr "Wystąpił błąd:" - -#: twitter.php:368 -#, php-format -msgid "" -"Currently connected to: %1$s" -msgstr "Obecnie połączony z: %1$s" - -#: twitter.php:374 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony." - -#: twitter.php:381 -msgid "Invalid Twitter info" -msgstr "Nieprawidłowe informacje Twittera" - -#: twitter.php:382 -msgid "Disconnect" -msgstr "Rozłączony" - -#: twitter.php:387 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "Zezwalaj na publikowanie na Twitterze" -#: twitter.php:387 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą być wysyłane na powiązane konto Twitter. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu." -#: twitter.php:388 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "Wyślij domyślnie komentarze publiczne do Twitter" -#: twitter.php:389 -msgid "Use threads instead of truncating the content" -msgstr "Używaj wątków zamiast obcinania treści" +#: twitter.php:131 +msgid "API Key" +msgstr "" -#: twitter.php:390 -msgid "Mirror all posts from twitter that are no replies" -msgstr "Lustro wszystkich postów Twitter, które są bez odpowiedzi" +#: twitter.php:132 +msgid "API Secret" +msgstr "" -#: twitter.php:391 -msgid "Import the remote timeline" -msgstr "Zaimportuj zdalną oś czasu" +#: twitter.php:133 +msgid "Access Token" +msgstr "" -#: twitter.php:392 -msgid "Automatically create contacts" -msgstr "Automatycznie twórz kontakty" +#: twitter.php:134 +msgid "Access Secret" +msgstr "" -#: twitter.php:392 +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here." -msgstr "Spowoduje to automatyczne utworzenie kontaktu w Friendica, gdy tylko otrzymasz wiadomość od istniejącego kontaktu za pośrednictwem sieci Twitter. Jeśli nie włączysz tej opcji, musisz ręcznie dodać te kontakty z Twittera w Friendica, od których chciałbyś widzieć tutaj wpisy." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." +msgstr "" -#: twitter.php:393 -msgid "Follow in fediverse" -msgstr "Śledź w fediverse" +#: twitter.php:136 +msgid "Last Status Summary" +msgstr "" -#: twitter.php:393 -msgid "" -"Automatically subscribe to the contact in the fediverse, when a fediverse " -"account is mentioned in name or description and we are following the Twitter" -" contact." -msgstr "Automatycznie subskrybuj kontakt w fediverse, gdy konto fediverse jest wymienione w nazwie lub opisie i obserwujesz kontakt na Twitterze." +#: twitter.php:137 +msgid "Last Status Content" +msgstr "" -#: twitter.php:406 -msgid "Twitter Import/Export/Mirror" -msgstr "Twitter Import/Export/Mirror" - -#: twitter.php:558 -msgid "" -"Please connect a Twitter account in your Social Network settings to import " -"Twitter posts." -msgstr "Aby zaimportować wpisy z Twittera, połącz konto Twitter w ustawieniach sieci społecznościowej." - -#: twitter.php:565 -msgid "Twitter post not found." -msgstr "Nie odnaleziono wpisu Twittera." - -#: twitter.php:965 -msgid "Save Settings" -msgstr "Zapisz ustawienia" - -#: twitter.php:967 -msgid "Consumer key" -msgstr "Klucz klienta" - -#: twitter.php:968 -msgid "Consumer secret" -msgstr "Tajny klucz klienta" - -#: twitter.php:1167 -#, php-format -msgid "%s on Twitter" -msgstr "%s na Twitterze" +#: twitter.php:142 +msgid "Twitter Export" +msgstr "" diff --git a/twitter/lang/pl/strings.php b/twitter/lang/pl/strings.php index 3d44c3e5..d160fa3b 100644 --- a/twitter/lang/pl/strings.php +++ b/twitter/lang/pl/strings.php @@ -6,30 +6,6 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Post to Twitter'] = 'Opublikuj na Twitterze'; -$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Przesłałeś pusty kod PIN, zaloguj się ponownie na Twitterze, aby otrzymać nowy.'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Nie znaleziono pary kluczy konsumpcyjnych dla Twittera. Skontaktuj się z administratorem witryny.'; -$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'W tej instancji Friendica dodatek do Twittera został włączony, ale jeszcze nie podłączyłeś swojego konta do konta na Twitterze. Aby to zrobić, kliknij przycisk poniżej, aby uzyskać numer PIN z Twittera, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko Twoje publiczne posty będą publikowane na Twitterze.'; -$a->strings['Log in with Twitter'] = 'Zaloguj się przez Twitter'; -$a->strings['Copy the PIN from Twitter here'] = 'Skopiuj tutaj kod PIN z Twittera'; -$a->strings['An error occured: '] = 'Wystąpił błąd:'; -$a->strings['Currently connected to: %1$s'] = 'Obecnie połączony z: %1$s'; -$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony.'; -$a->strings['Invalid Twitter info'] = 'Nieprawidłowe informacje Twittera'; -$a->strings['Disconnect'] = 'Rozłączony'; $a->strings['Allow posting to Twitter'] = 'Zezwalaj na publikowanie na Twitterze'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą być wysyłane na powiązane konto Twitter. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu.'; $a->strings['Send public postings to Twitter by default'] = 'Wyślij domyślnie komentarze publiczne do Twitter'; -$a->strings['Use threads instead of truncating the content'] = 'Używaj wątków zamiast obcinania treści'; -$a->strings['Mirror all posts from twitter that are no replies'] = 'Lustro wszystkich postów Twitter, które są bez odpowiedzi'; -$a->strings['Import the remote timeline'] = 'Zaimportuj zdalną oś czasu'; -$a->strings['Automatically create contacts'] = 'Automatycznie twórz kontakty'; -$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here.'] = 'Spowoduje to automatyczne utworzenie kontaktu w Friendica, gdy tylko otrzymasz wiadomość od istniejącego kontaktu za pośrednictwem sieci Twitter. Jeśli nie włączysz tej opcji, musisz ręcznie dodać te kontakty z Twittera w Friendica, od których chciałbyś widzieć tutaj wpisy.'; -$a->strings['Follow in fediverse'] = 'Śledź w fediverse'; -$a->strings['Automatically subscribe to the contact in the fediverse, when a fediverse account is mentioned in name or description and we are following the Twitter contact.'] = 'Automatycznie subskrybuj kontakt w fediverse, gdy konto fediverse jest wymienione w nazwie lub opisie i obserwujesz kontakt na Twitterze.'; -$a->strings['Twitter Import/Export/Mirror'] = 'Twitter Import/Export/Mirror'; -$a->strings['Please connect a Twitter account in your Social Network settings to import Twitter posts.'] = 'Aby zaimportować wpisy z Twittera, połącz konto Twitter w ustawieniach sieci społecznościowej.'; -$a->strings['Twitter post not found.'] = 'Nie odnaleziono wpisu Twittera.'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['Consumer key'] = 'Klucz klienta'; -$a->strings['Consumer secret'] = 'Tajny klucz klienta'; -$a->strings['%s on Twitter'] = '%s na Twitterze'; diff --git a/twitter/lang/ru/messages.po b/twitter/lang/ru/messages.po index 911b2e08..d6b4b442 100644 --- a/twitter/lang/ru/messages.po +++ b/twitter/lang/ru/messages.po @@ -9,115 +9,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2017-04-08 05:49+0000\n" -"Last-Translator: Stanislav N. \n" -"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Stanislav N. , 2017\n" +"Language-Team: Russian (http://app.transifex.com/Friendica/friendica/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: twitter.php:77 +#: twitter.php:84 msgid "Post to Twitter" msgstr "Отправить в Twitter" +#: twitter.php:123 +msgid "No status." +msgstr "" + #: twitter.php:129 -msgid "Twitter settings updated." -msgstr "Настройки Twitter обновлены." +msgid "Allow posting to Twitter" +msgstr "Разрешить отправку сообщений на Twitter" -#: twitter.php:157 -msgid "Twitter Posting Settings" -msgstr "Настройка отправки сообщений в Twitter" - -#: twitter.php:164 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "Не найдено пары потребительских ключей для Twitter. Пожалуйста, обратитесь к администратору сайта." - -#: twitter.php:183 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "Чтобы подключиться к Twitter аккаунту, нажмите на кнопку ниже, чтобы получить код безопасности от Twitter, который нужно скопировать в поле ввода ниже, и отправить форму. Только ваши публичные сообщения будут отправляться на Twitter." - -#: twitter.php:184 -msgid "Log in with Twitter" -msgstr "Войдите через Twitter" - -#: twitter.php:186 -msgid "Copy the PIN from Twitter here" -msgstr "Скопируйте PIN с Twitter сюда" - -#: twitter.php:191 twitter.php:229 twitter.php:556 -msgid "Submit" -msgstr "Подтвердить" - -#: twitter.php:200 -msgid "Currently connected to: " -msgstr "В настоящее время соединены с: " - -#: twitter.php:201 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Если включено, то все ваши общественные сообщения могут быть отправлены на связанный аккаунт Twitter. Вы можете сделать это по умолчанию (здесь) или для каждого сообщения отдельно при написании записи." -#: twitter.php:203 -msgid "" -"Note: Due your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "Внимание: Из-за настроек приватности (Hide your profile details from unknown viewers?) ссылка, которая может быть включена в твит, будет вести посетителя на пустую страницу с информированием о том, что доступ к профилю запрещен." - -#: twitter.php:206 -msgid "Allow posting to Twitter" -msgstr "Разрешить отправку сообщений на Twitter" - -#: twitter.php:209 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "Отправлять сообщения для всех в Twitter по умолчанию" -#: twitter.php:213 -msgid "Mirror all posts from twitter that are no replies or retweets" -msgstr "Получать посты с Twitter у которых нет ответов и ретвитов" +#: twitter.php:131 +msgid "API Key" +msgstr "" -#: twitter.php:217 -msgid "Shortening method that optimizes the tweet" -msgstr "Метод сокращения ссылок для оптимизации твита" +#: twitter.php:132 +msgid "API Secret" +msgstr "" -#: twitter.php:221 -msgid "Send linked #-tags and @-names to Twitter" -msgstr "Отправлять #-теги и @-имена в Twitter ссылками" +#: twitter.php:133 +msgid "Access Token" +msgstr "" -#: twitter.php:226 -msgid "Clear OAuth configuration" -msgstr "Удалить конфигурацию OAuth" +#: twitter.php:134 +msgid "Access Secret" +msgstr "" -#: twitter.php:550 -msgid "Settings updated." -msgstr "Настройки обновлены." - -#: twitter.php:558 -msgid "Consumer key" -msgstr "Consumer key" - -#: twitter.php:559 -msgid "Consumer secret" -msgstr "Consumer secret" - -#: twitter.php:560 -msgid "Name of the Twitter Application" -msgstr "Имя приложения для Twitter" - -#: twitter.php:560 +#: twitter.php:135 msgid "" -"set this to avoid mirroring postings from ~friendica back to ~friendica" -msgstr "установите это для избежания отправки сообщений из Friendica обратно в Friendica" +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." +msgstr "" + +#: twitter.php:136 +msgid "Last Status Summary" +msgstr "" + +#: twitter.php:137 +msgid "Last Status Content" +msgstr "" + +#: twitter.php:142 +msgid "Twitter Export" +msgstr "" diff --git a/twitter/lang/ru/strings.php b/twitter/lang/ru/strings.php index 237d68bb..94582c11 100644 --- a/twitter/lang/ru/strings.php +++ b/twitter/lang/ru/strings.php @@ -6,24 +6,6 @@ function string_plural_select_ru($n){ if ($n%10==1 && $n%100!=11) { return 0; } else if ($n%10>=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Post to Twitter'] = 'Отправить в Twitter'; -$a->strings['Twitter settings updated.'] = 'Настройки Twitter обновлены.'; -$a->strings['Twitter Posting Settings'] = 'Настройка отправки сообщений в Twitter'; -$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Не найдено пары потребительских ключей для Twitter. Пожалуйста, обратитесь к администратору сайта.'; -$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'Чтобы подключиться к Twitter аккаунту, нажмите на кнопку ниже, чтобы получить код безопасности от Twitter, который нужно скопировать в поле ввода ниже, и отправить форму. Только ваши публичные сообщения будут отправляться на Twitter.'; -$a->strings['Log in with Twitter'] = 'Войдите через Twitter'; -$a->strings['Copy the PIN from Twitter here'] = 'Скопируйте PIN с Twitter сюда'; -$a->strings['Submit'] = 'Подтвердить'; -$a->strings['Currently connected to: '] = 'В настоящее время соединены с: '; -$a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Если включено, то все ваши общественные сообщения могут быть отправлены на связанный аккаунт Twitter. Вы можете сделать это по умолчанию (здесь) или для каждого сообщения отдельно при написании записи.'; -$a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Внимание: Из-за настроек приватности (Hide your profile details from unknown viewers?) ссылка, которая может быть включена в твит, будет вести посетителя на пустую страницу с информированием о том, что доступ к профилю запрещен.'; $a->strings['Allow posting to Twitter'] = 'Разрешить отправку сообщений на Twitter'; +$a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Если включено, то все ваши общественные сообщения могут быть отправлены на связанный аккаунт Twitter. Вы можете сделать это по умолчанию (здесь) или для каждого сообщения отдельно при написании записи.'; $a->strings['Send public postings to Twitter by default'] = 'Отправлять сообщения для всех в Twitter по умолчанию'; -$a->strings['Mirror all posts from twitter that are no replies or retweets'] = 'Получать посты с Twitter у которых нет ответов и ретвитов'; -$a->strings['Shortening method that optimizes the tweet'] = 'Метод сокращения ссылок для оптимизации твита'; -$a->strings['Send linked #-tags and @-names to Twitter'] = 'Отправлять #-теги и @-имена в Twitter ссылками'; -$a->strings['Clear OAuth configuration'] = 'Удалить конфигурацию OAuth'; -$a->strings['Settings updated.'] = 'Настройки обновлены.'; -$a->strings['Consumer key'] = 'Consumer key'; -$a->strings['Consumer secret'] = 'Consumer secret'; -$a->strings['Name of the Twitter Application'] = 'Имя приложения для Twitter'; -$a->strings['set this to avoid mirroring postings from ~friendica back to ~friendica'] = 'установите это для избежания отправки сообщений из Friendica обратно в Friendica'; diff --git a/twitter/lang/sv/messages.po b/twitter/lang/sv/messages.po index ccbfe7a7..df5c8ac1 100644 --- a/twitter/lang/sv/messages.po +++ b/twitter/lang/sv/messages.po @@ -10,138 +10,72 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-27 10:25-0500\n" -"PO-Revision-Date: 2022-01-16 00:56+0000\n" -"Last-Translator: Kristoffer Grundström \n" -"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n" +"POT-Creation-Date: 2023-08-16 03:27+0000\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Kristoffer Grundström , 2022\n" +"Language-Team: Swedish (http://app.transifex.com/Friendica/friendica/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: twitter.php:213 +#: twitter.php:84 msgid "Post to Twitter" msgstr "" -#: twitter.php:258 -msgid "" -"You submitted an empty PIN, please Sign In with Twitter again to get a new " -"one." +#: twitter.php:123 +msgid "No status." msgstr "" -#: twitter.php:321 -msgid "" -"No consumer key pair for Twitter found. Please contact your site " -"administrator." -msgstr "" - -#: twitter.php:334 -msgid "" -"At this Friendica instance the Twitter addon was enabled but you have not " -"yet connected your account to your Twitter account. To do so click the " -"button below to get a PIN from Twitter which you have to copy into the input" -" box below and submit the form. Only your public posts will" -" be posted to Twitter." -msgstr "" - -#: twitter.php:335 -msgid "Log in with Twitter" -msgstr "Logga in med Twitter" - -#: twitter.php:337 -msgid "Copy the PIN from Twitter here" -msgstr "Kopiera PIN-koden från Twitter här" - -#: twitter.php:345 twitter.php:388 -msgid "An error occured: " -msgstr "" - -#: twitter.php:359 -#, php-format -msgid "" -"Currently connected to: %1$s" -msgstr "" - -#: twitter.php:365 -msgid "" -"Note: Due to your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "" - -#: twitter.php:372 -msgid "Invalid Twitter info" -msgstr "" - -#: twitter.php:373 -msgid "Disconnect" -msgstr "" - -#: twitter.php:378 +#: twitter.php:129 msgid "Allow posting to Twitter" msgstr "" -#: twitter.php:378 +#: twitter.php:129 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "" -#: twitter.php:379 +#: twitter.php:130 msgid "Send public postings to Twitter by default" msgstr "" -#: twitter.php:380 -msgid "Mirror all posts from twitter that are no replies" +#: twitter.php:131 +msgid "API Key" msgstr "" -#: twitter.php:381 -msgid "Import the remote timeline" +#: twitter.php:132 +msgid "API Secret" msgstr "" -#: twitter.php:382 -msgid "Automatically create contacts" +#: twitter.php:133 +msgid "Access Token" msgstr "" -#: twitter.php:382 +#: twitter.php:134 +msgid "Access Secret" +msgstr "" + +#: twitter.php:135 msgid "" -"This will automatically create a contact in Friendica as soon as you receive" -" a message from an existing contact via the Twitter network. If you do not " -"enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here." +"Each user needs to register their own app to be able to post to Twitter. " +"Please visit https://developer.twitter.com/en/portal/projects-and-apps to " +"register a project. Inside the project you then have to register an app. You" +" will find the needed data for the connector on the page \"Keys and token\" " +"in the app settings." msgstr "" -#: twitter.php:395 -msgid "Twitter Import/Export/Mirror" +#: twitter.php:136 +msgid "Last Status Summary" msgstr "" -#: twitter.php:547 -msgid "" -"Please connect a Twitter account in your Social Network settings to import " -"Twitter posts." +#: twitter.php:137 +msgid "Last Status Content" msgstr "" -#: twitter.php:554 -msgid "Twitter post not found." -msgstr "" - -#: twitter.php:914 -msgid "Save Settings" -msgstr "" - -#: twitter.php:916 -msgid "Consumer key" -msgstr "Kundnyckel" - -#: twitter.php:917 -msgid "Consumer secret" -msgstr "Kundhemlighet" - -#: twitter.php:1113 -#, php-format -msgid "%s on Twitter" +#: twitter.php:142 +msgid "Twitter Export" msgstr "" diff --git a/twitter/lang/sv/strings.php b/twitter/lang/sv/strings.php index 13200174..72e9772f 100644 --- a/twitter/lang/sv/strings.php +++ b/twitter/lang/sv/strings.php @@ -5,7 +5,3 @@ function string_plural_select_sv($n){ $n = intval($n); return intval($n != 1); }} -$a->strings['Log in with Twitter'] = 'Logga in med Twitter'; -$a->strings['Copy the PIN from Twitter here'] = 'Kopiera PIN-koden från Twitter här'; -$a->strings['Consumer key'] = 'Kundnyckel'; -$a->strings['Consumer secret'] = 'Kundhemlighet'; diff --git a/twitter/lighter.png b/twitter/lighter.png deleted file mode 100644 index 297bb034..00000000 Binary files a/twitter/lighter.png and /dev/null differ diff --git a/twitter/templates/admin.tpl b/twitter/templates/admin.tpl deleted file mode 100644 index d598e888..00000000 --- a/twitter/templates/admin.tpl +++ /dev/null @@ -1,4 +0,0 @@ -{{include file="field_input.tpl" field=$consumerkey}} -{{include file="field_input.tpl" field=$consumersecret}} - -
diff --git a/twitter/templates/connector_settings.tpl b/twitter/templates/connector_settings.tpl index 5d0061d1..251093de 100644 --- a/twitter/templates/connector_settings.tpl +++ b/twitter/templates/connector_settings.tpl @@ -1,25 +1,9 @@ -
-{{if $l10n.connected}} -

{{$l10n.connected nofilter}}

-

- - {{$account->description}} -

-{{else}} -

{{$l10n.invalid}}

- -{{/if}} -
- -
- {{include file="field_checkbox.tpl" field=$enable}} -{{if $l10n.privacy_warning}} -

{{$l10n.privacy_warning nofilter}}

-{{/if}} {{include file="field_checkbox.tpl" field=$default}} -{{include file="field_checkbox.tpl" field=$thread}} -{{include file="field_checkbox.tpl" field=$mirror}} -{{include file="field_checkbox.tpl" field=$import}} -{{include file="field_checkbox.tpl" field=$create_user}} -{{include file="field_checkbox.tpl" field=$auto_follow}} +

{{$help}}

+{{include file="field_input.tpl" field=$api_key}} +{{include file="field_input.tpl" field=$api_secret}} +{{include file="field_input.tpl" field=$access_token}} +{{include file="field_input.tpl" field=$access_secret}} +{{include file="field_input.tpl" field=$status_title}} +{{include file="field_textarea.tpl" field=$status}} \ No newline at end of file diff --git a/twitter/twitter.css b/twitter/twitter.css deleted file mode 100644 index 480ce28d..00000000 --- a/twitter/twitter.css +++ /dev/null @@ -1,12 +0,0 @@ - - -#twitter-avatar { - float: left; - width: 48px; - height: 48px; - padding: 2px; -} -#twitter-info-block { - height: 52px; - vertical-align: middle; -} diff --git a/twitter/twitter.php b/twitter/twitter.php index d7cce96a..a9654405 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1,13 +1,14 @@ * Author: Michael Vogel * Maintainer: Hypolite Petovan + * Maintainer: Michael Vogel * - * Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel, Hypolite Petovan + * Copyright (c) 2011-2023 Tobias Diekershoff, Michael Vogel, Hypolite Petovan * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -33,176 +34,39 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -/* Twitter Addon for Friendica - * - * Author: Tobias Diekershoff - * tobias.diekershoff@gmx.net - * - * License:3-clause BSD license - * - * Configuration: - * To use this addon you need a OAuth Consumer key pair (key & secret) - * you can get it from Twitter at https://twitter.com/apps - * - * Register your Friendica site as "Client" application with "Read & Write" access - * we do not need "Twitter as login". When you've registered the app you get the - * OAuth Consumer key and secret pair for your application/site. - * - * Add this key pair to your config/twitter.config.php file or use the admin panel. - * - * return [ - * 'twitter' => [ - * 'consumerkey' => '', - * 'consumersecret' => '', - * ], - * ]; - * - * To activate the addon itself add it to the system.addon - * setting. After this, your user can configure their Twitter account settings - * from "Settings -> Addon Settings". - * - * Requirements: PHP5, curl - */ -use Abraham\TwitterOAuth\TwitterOAuth; -use Abraham\TwitterOAuth\TwitterOAuthException; -use Codebird\Codebird; -use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Plaintext; use Friendica\Core\Hook; -use Friendica\Core\Logger; -use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Worker; -use Friendica\Database\DBA; use Friendica\DI; -use Friendica\Model\Contact; -use Friendica\Model\Conversation; -use Friendica\Model\Group; use Friendica\Model\Item; -use Friendica\Model\ItemURI; use Friendica\Model\Post; -use Friendica\Model\Tag; -use Friendica\Model\User; -use Friendica\Protocol\Activity; use Friendica\Core\Config\Util\ConfigFileManager; -use Friendica\Core\System; use Friendica\Model\Photo; -use Friendica\Util\DateTimeFormat; -use Friendica\Util\Images; -use Friendica\Util\Strings; +use Friendica\Object\Image; +use GuzzleHttp\Client; +use GuzzleHttp\Exception\RequestException; +use GuzzleHttp\HandlerStack; +use GuzzleHttp\Subscriber\Oauth\Oauth1; -require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; - -define('TWITTER_DEFAULT_POLL_INTERVAL', 5); // given in minutes +const TWITTER_IMAGE_SIZE = [2000000, 1000000, 500000, 100000, 50000]; function twitter_install() { - // we need some hooks, for the configuration and for sending tweets - Hook::register('load_config' , __FILE__, 'twitter_load_config'); - Hook::register('connector_settings' , __FILE__, 'twitter_settings'); + Hook::register('load_config', __FILE__, 'twitter_load_config'); + Hook::register('connector_settings', __FILE__, 'twitter_settings'); Hook::register('connector_settings_post', __FILE__, 'twitter_settings_post'); - Hook::register('hook_fork' , __FILE__, 'twitter_hook_fork'); - Hook::register('post_local' , __FILE__, 'twitter_post_local'); - Hook::register('notifier_normal' , __FILE__, 'twitter_post_hook'); - Hook::register('jot_networks' , __FILE__, 'twitter_jot_nets'); - Hook::register('cron' , __FILE__, 'twitter_cron'); - Hook::register('support_follow' , __FILE__, 'twitter_support_follow'); - Hook::register('follow' , __FILE__, 'twitter_follow'); - Hook::register('unfollow' , __FILE__, 'twitter_unfollow'); - Hook::register('block' , __FILE__, 'twitter_block'); - Hook::register('unblock' , __FILE__, 'twitter_unblock'); - Hook::register('expire' , __FILE__, 'twitter_expire'); - Hook::register('prepare_body' , __FILE__, 'twitter_prepare_body'); - Hook::register('check_item_notification', __FILE__, 'twitter_check_item_notification'); - Hook::register('probe_detect' , __FILE__, 'twitter_probe_detect'); - Hook::register('item_by_link' , __FILE__, 'twitter_item_by_link'); - Hook::register('parse_link' , __FILE__, 'twitter_parse_link'); - Logger::info('installed twitter'); + Hook::register('hook_fork', __FILE__, 'twitter_hook_fork'); + Hook::register('post_local', __FILE__, 'twitter_post_local'); + Hook::register('notifier_normal', __FILE__, 'twitter_post_hook'); + Hook::register('jot_networks', __FILE__, 'twitter_jot_nets'); } -// Hook functions - function twitter_load_config(ConfigFileManager $loader) { - DI::app()->getConfigCache()->load($loader->loadAddonConfig('twitter'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); -} - -function twitter_check_item_notification(array &$notification_data) -{ - $own_id = DI::pConfig()->get($notification_data['uid'], 'twitter', 'own_id'); - - $own_user = Contact::selectFirst(['url'], ['uid' => $notification_data['uid'], 'alias' => 'twitter::'.$own_id]); - if ($own_user) { - $notification_data['profiles'][] = $own_user['url']; - } -} - -function twitter_support_follow(array &$data) -{ - if ($data['protocol'] == Protocol::TWITTER) { - $data['result'] = true; - } -} - -function twitter_follow(array &$contact) -{ - Logger::info('Check if contact is twitter contact', ['url' => $contact['url']]); - - if (!strstr($contact['url'], '://twitter.com') && !strstr($contact['url'], '@twitter.com')) { - return; - } - - // contact seems to be a twitter contact, so continue - $nickname = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $contact['url']); - $nickname = str_replace('@twitter.com', '', $nickname); - - $uid = DI::userSession()->getLocalUserId(); - - if (!twitter_api_contact('friendships/create', ['network' => Protocol::TWITTER, 'nick' => $nickname], $uid)) { - $contact = null; - return; - } - - $user = twitter_fetchuser($nickname); - - $contact_id = twitter_fetch_contact($uid, $user, true); - - $contact = Contact::getById($contact_id, ['name', 'nick', 'url', 'addr', 'batch', 'notify', 'poll', 'request', 'confirm', 'poco', 'photo', 'priority', 'network', 'alias', 'pubkey']); - - if (DBA::isResult($contact)) { - $contact['contact'] = $contact; - } -} - -function twitter_unfollow(array &$hook_data) -{ - $hook_data['result'] = twitter_api_contact('friendships/destroy', $hook_data['contact'], $hook_data['uid']); -} - -function twitter_block(array &$hook_data) -{ - $hook_data['result'] = twitter_api_contact('blocks/create', $hook_data['contact'], $hook_data['uid']); - - if ($hook_data['result'] === true) { - $cdata = Contact::getPublicAndUserContactID($hook_data['contact']['id'], $hook_data['uid']); - Contact::remove($cdata['user']); - } -} - -function twitter_unblock(array &$hook_data) -{ - $hook_data['result'] = twitter_api_contact('blocks/destroy', $hook_data['contact'], $hook_data['uid']); -} - -function twitter_api_contact(string $apiPath, array $contact, int $uid): ?bool -{ - if ($contact['network'] !== Protocol::TWITTER) { - return null; - } - - return (bool)twitter_api_call($uid, $apiPath, ['screen_name' => $contact['nick']]); + DI::appHelper()->getConfigCache()->load($loader->loadAddonConfig('twitter'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); } function twitter_jot_nets(array &$jotnets_fields) @@ -223,75 +87,30 @@ function twitter_jot_nets(array &$jotnets_fields) } } - function twitter_settings_post() { - if (!DI::userSession()->getLocalUserId()) { - return; - } - // don't check twitter settings if twitter submit button is not clicked - if (empty($_POST['twitter-disconnect']) && empty($_POST['twitter-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($_POST['twitter-submit'])) { return; } - if (!empty($_POST['twitter-disconnect'])) { - /* * * - * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair - * from the user configuration - */ - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'consumerkey'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'consumersecret'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'oauthtoken'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'oauthsecret'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'post'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'lastid'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'thread'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'mirror_posts'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'import'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'create_user'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'auto_follow'); - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'own_id'); - } else { - if (isset($_POST['twitter-pin'])) { - // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen - Logger::notice('got a Twitter PIN'); - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - // the token and secret for which the PIN was generated were hidden in the settings - // form as token and token2, we need a new connection to Twitter using these token - // and secret to request a Access Token with the PIN - try { - if (empty($_POST['twitter-pin'])) { - throw new Exception(DI::l10n()->t('You submitted an empty PIN, please Sign In with Twitter again to get a new one.')); - } + $api_key = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_key'); + $api_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_secret'); + $access_token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_token'); + $access_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_secret'); - $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']); - $token = $connection->oauth('oauth/access_token', ['oauth_verifier' => $_POST['twitter-pin']]); - // ok, now that we have the Access Token, save them in the user config - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'oauthtoken', $token['oauth_token']); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post', 1); - } catch(Exception $e) { - DI::sysmsg()->addNotice($e->getMessage()); - } catch(TwitterOAuthException $e) { - DI::sysmsg()->addNotice($e->getMessage()); - } - } else { - // if no PIN is supplied in the POST variables, the user has changed the setting - // to post a tweet for every new __public__ posting to the wall - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post', intval($_POST['twitter-enable'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default', intval($_POST['twitter-default'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'thread', intval($_POST['twitter-thread'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'mirror_posts', intval($_POST['twitter-mirror'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'import', intval($_POST['twitter-import'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'create_user', intval($_POST['twitter-create_user'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'auto_follow', intval($_POST['twitter-auto_follow'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post', (bool)$_POST['twitter-enable']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default', (bool)$_POST['twitter-default']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'api_key', $_POST['twitter-api-key']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'api_secret', $_POST['twitter-api-secret']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'access_token', $_POST['twitter-access-token']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'access_secret', $_POST['twitter-access-secret']); - if (!intval($_POST['twitter-mirror'])) { - DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'lastid'); - } - } + if ( + empty(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'last_status')) || + ($api_key != $_POST['twitter-api-key']) || ($api_secret != $_POST['twitter-api-secret']) || + ($access_token != $_POST['twitter-access-token']) || ($access_secret != $_POST['twitter-access-secret']) + ) { + twitter_test_connection(DI::userSession()->getLocalUserId()); } } @@ -301,116 +120,41 @@ function twitter_settings(array &$data) return; } - $user = User::getById(DI::userSession()->getLocalUserId()); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post') ?? false; + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default') ?? false; - DI::page()->registerStylesheet(__DIR__ . '/twitter.css', 'all'); + $api_key = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_key'); + $api_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'api_secret'); + $access_token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_token'); + $access_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'access_secret'); - /* * * - * 1) Check that we have global consumer key & secret - * 2) If no OAuthtoken & stuff is present, generate button to get some - * 3) Checkbox for "Send public notices (280 chars only) - */ - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - $otoken = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'oauthtoken'); - $osecret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'oauthsecret'); - - $enabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post')); - $defenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default')); - $threadenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'thread')); - $mirrorenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'mirror_posts')); - $importenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'import')); - $create_userenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'create_user')); - $auto_followenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'auto_follow')); - - // Hide the submit button by default - $submit = ''; - - if ((!$ckey) && (!$csecret)) { - /* no global consumer keys - * display warning and skip personal config - */ - $html = '

' . DI::l10n()->t('No consumer key pair for Twitter found. Please contact your site administrator.') . '

'; + $last_status = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'last_status'); + if (!empty($last_status['code']) && !empty($last_status['reason'])) { + $status_title = sprintf('%d - %s', $last_status['code'], $last_status['reason']); } else { - // ok we have a consumer key pair now look into the OAuth stuff - if ((!$otoken) && (!$osecret)) { - /* the user has not yet connected the account to twitter... - * get a temporary OAuth key/secret pair and display a button with - * which the user can request a PIN to connect the account to a - * account at Twitter. - */ - $connection = new TwitterOAuth($ckey, $csecret); - try { - $result = $connection->oauth('oauth/request_token', ['oauth_callback' => 'oob']); - - $html = '

' . DI::l10n()->t('At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.') . '

'; - $html .= '' . DI::l10n()->t('Log in with Twitter') . ''; - $html .= '
'; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= '
'; - - $submit = null; - } catch (TwitterOAuthException $e) { - $html = '

' . DI::l10n()->t('An error occured: ') . $e->getMessage() . '

'; - } - } else { - /* * * - * we have an OAuth key / secret pair for the user - * so let's give a chance to disable the postings to Twitter - */ - $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); - try { - $account = $connection->get('account/verify_credentials'); - if (property_exists($account, 'screen_name') && - property_exists($account, 'description') && - property_exists($account, 'profile_image_url') - ) { - $connected = DI::l10n()->t('Currently connected to: %1$s', $account->screen_name); - } else { - Logger::notice('Invalid twitter info (verify credentials).', ['auth' => TwitterOAuth::class]); - } - - if ($user['hidewall']) { - $privacy_warning = DI::l10n()->t('Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'); - } - - $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/twitter/'); - $html = Renderer::replaceMacros($t, [ - '$l10n' => [ - 'connected' => $connected ?? '', - 'invalid' => DI::l10n()->t('Invalid Twitter info'), - 'disconnect' => DI::l10n()->t('Disconnect'), - 'privacy_warning' => $privacy_warning ?? '', - ], - - '$account' => $account, - '$enable' => ['twitter-enable', DI::l10n()->t('Allow posting to Twitter'), $enabled, DI::l10n()->t('If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.')], - '$default' => ['twitter-default', DI::l10n()->t('Send public postings to Twitter by default'), $defenabled], - '$thread' => ['twitter-thread', DI::l10n()->t('Use threads instead of truncating the content'), $threadenabled], - '$mirror' => ['twitter-mirror', DI::l10n()->t('Mirror all posts from twitter that are no replies'), $mirrorenabled], - '$import' => ['twitter-import', DI::l10n()->t('Import the remote timeline'), $importenabled], - '$create_user' => ['twitter-create_user', DI::l10n()->t('Automatically create contacts'), $create_userenabled, DI::l10n()->t('This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here.')], - '$auto_follow' => ['twitter-auto_follow', DI::l10n()->t('Follow in fediverse'), $auto_followenabled, DI::l10n()->t('Automatically subscribe to the contact in the fediverse, when a fediverse account is mentioned in name or description and we are following the Twitter contact.')], - ]); - - // Enable the default submit button - $submit = null; - } catch (TwitterOAuthException $e) { - $html = '

' . DI::l10n()->t('An error occured: ') . $e->getMessage() . '

'; - } - } + $status_title = DI::l10n()->t('No status.'); } + $status_content = $last_status['content'] ?? ''; + + $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/twitter/'); + $html = Renderer::replaceMacros($t, [ + '$enable' => ['twitter-enable', DI::l10n()->t('Allow posting to Twitter'), $enabled, DI::l10n()->t('If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.')], + '$default' => ['twitter-default', DI::l10n()->t('Send public postings to Twitter by default'), $def_enabled], + '$api_key' => ['twitter-api-key', DI::l10n()->t('API Key'), $api_key], + '$api_secret' => ['twitter-api-secret', DI::l10n()->t('API Secret'), $api_secret], + '$access_token' => ['twitter-access-token', DI::l10n()->t('Access Token'), $access_token], + '$access_secret' => ['twitter-access-secret', DI::l10n()->t('Access Secret'), $access_secret], + '$help' => DI::l10n()->t('Each user needs to register their own app to be able to post to Twitter. Please visit https://developer.twitter.com/en/portal/projects-and-apps to register a project. Inside the project you then have to register an app. You will find the needed data for the connector on the page "Keys and token" in the app settings.'), + '$status_title' => ['twitter-status-title', DI::l10n()->t('Last Status Summary'), $status_title, '', '', 'readonly'], + '$status' => ['twitter-status', DI::l10n()->t('Last Status Content'), $status_content, '', '', 'readonly'], + ]); $data = [ 'connector' => 'twitter', - 'title' => DI::l10n()->t('Twitter Import/Export/Mirror'), + 'title' => DI::l10n()->t('Twitter Export'), 'enabled' => $enabled, 'image' => 'images/twitter.png', 'html' => $html, - 'submit' => $submit ?? null, ]; } @@ -424,64 +168,31 @@ function twitter_hook_fork(array &$b) $post = $b['data']; - // Deletion checks are done in twitter_delete_item() - if ($post['deleted']) { - return; - } - - // Editing is not supported by the addon - if ($post['created'] !== $post['edited']) { - DI::logger()->info('Editing is not supported by the addon'); + if ( + $post['deleted'] || ($post['private'] == Item::PRIVATE) || ($post['created'] !== $post['edited']) || + !strstr($post['postopts'], 'twitter') || ($post['gravity'] != Item::GRAVITY_PARENT) + ) { $b['execute'] = false; return; } - - // if post comes from twitter don't send it back - if (($post['extid'] == Protocol::TWITTER) || twitter_get_id($post['extid'])) { - DI::logger()->info('If post comes from twitter don\'t send it back'); - $b['execute'] = false; - return; - } - - if (substr($post['app'] ?? '', 0, 7) == 'Twitter') { - DI::logger()->info('No Twitter app'); - $b['execute'] = false; - return; - } - - if (DI::pConfig()->get($post['uid'], 'twitter', 'import')) { - // Don't fork if it isn't a reply to a twitter post - if (($post['parent'] != $post['id']) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::TWITTER])) { - Logger::notice('No twitter parent found', ['item' => $post['id']]); - $b['execute'] = false; - return; - } - } else { - // Comments are never exported when we don't import the twitter timeline - if (!strstr($post['postopts'] ?? '', 'twitter') || ($post['parent'] != $post['id']) || $post['private']) { - DI::logger()->info('Comments are never exported when we don\'t import the twitter timeline'); - $b['execute'] = false; - return; - } - } } function twitter_post_local(array &$b) { - if ($b['edit']) { - return; - } - if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } - $twitter_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post')); - $twitter_enable = (($twitter_post && !empty($_REQUEST['twitter_enable'])) ? intval($_REQUEST['twitter_enable']) : 0); + if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) { + return; + } + + $twitter_post = (bool)DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post'); + $twitter_enable = (($twitter_post && !empty($_REQUEST['twitter_enable'])) ? (bool)$_REQUEST['twitter_enable'] : false); // if API is used, default to the chosen settings if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default'))) { - $twitter_enable = 1; + $twitter_enable = true; } if (!$twitter_enable) { @@ -495,393 +206,98 @@ function twitter_post_local(array &$b) $b['postopts'] .= 'twitter'; } -function twitter_probe_detect(array &$hookData) -{ - // Don't overwrite an existing result - if (isset($hookData['result'])) { - return; - } - - // Avoid a lookup for the wrong network - if (!in_array($hookData['network'], ['', Protocol::TWITTER])) { - return; - } - - if (preg_match('=([^@]+)@(?:mobile\.)?twitter\.com$=i', $hookData['uri'], $matches)) { - $nick = $matches[1]; - } elseif (preg_match('=^https?://(?:mobile\.)?twitter\.com/(.+)=i', $hookData['uri'], $matches)) { - if (strpos($matches[1], '/') !== false) { - // Status case: https://twitter.com//status/ - // Not a contact - $hookData['result'] = false; - return; - } - - $nick = $matches[1]; - } else { - return; - } - - $user = twitter_fetchuser($nick); - - if ($user) { - $hookData['result'] = twitter_user_to_contact($user); - } -} - -function twitter_item_by_link(array &$hookData) -{ - // Don't overwrite an existing result - if (isset($hookData['item_id'])) { - return; - } - - // Relevancy check - if (!preg_match('#^https?://(?:mobile\.|www\.)?twitter.com/[^/]+/status/(\d+).*#', $hookData['uri'], $matches)) { - return; - } - - // From now on, any early return should abort the whole chain since we've established it was a Twitter URL - $hookData['item_id'] = false; - - // Node-level configuration check - if (empty(DI::config()->get('twitter', 'consumerkey')) || empty(DI::config()->get('twitter', 'consumersecret'))) { - return; - } - - // No anonymous import - if (!$hookData['uid']) { - return; - } - - if ( - empty(DI::pConfig()->get($hookData['uid'], 'twitter', 'oauthtoken')) - || empty(DI::pConfig()->get($hookData['uid'], 'twitter', 'oauthsecret')) - ) { - DI::sysmsg()->addNotice(DI::l10n()->t('Please connect a Twitter account in your Social Network settings to import Twitter posts.')); - return; - } - - $status = twitter_statuses_show($matches[1]); - - if (empty($status->id_str)) { - DI::sysmsg()->addNotice(DI::l10n()->t('Twitter post not found.')); - return; - } - - $item = twitter_createpost($hookData['uid'], $status, [], true, false, false); - if (!empty($item)) { - $hookData['item_id'] = Item::insert($item); - } -} - -function twitter_api_post(string $apiPath, string $pid, int $uid): ?object -{ - if (empty($pid)) { - return null; - } - - return twitter_api_call($uid, $apiPath, ['id' => $pid]); -} - -function twitter_api_call(int $uid, string $apiPath, array $parameters = []): ?object -{ - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - $otoken = DI::pConfig()->get($uid, 'twitter', 'oauthtoken'); - $osecret = DI::pConfig()->get($uid, 'twitter', 'oauthsecret'); - - // If the addon is not configured (general or for this user) quit here - if (empty($ckey) || empty($csecret) || empty($otoken) || empty($osecret)) { - return null; - } - - try { - $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); - $result = $connection->post($apiPath, $parameters); - - if ($connection->getLastHttpCode() != 200) { - throw new Exception($result->errors[0]->message ?? json_encode($result), $connection->getLastHttpCode()); - } - - if (!empty($result->errors)) { - throw new Exception($result->errors[0]->message, $result->errors[0]->code); - } - - Logger::info('[twitter] API call successful', ['apiPath' => $apiPath, 'parameters' => $parameters]); - Logger::debug('[twitter] API call result', ['apiPath' => $apiPath, 'parameters' => $parameters, 'result' => $result]); - - return $result; - } catch (TwitterOAuthException $twitterOAuthException) { - Logger::notice('Unable to communicate with twitter', ['apiPath' => $apiPath, 'parameters' => $parameters, 'code' => $twitterOAuthException->getCode(), 'exception' => $twitterOAuthException]); - return null; - } catch (Exception $e) { - Logger::notice('[twitter] API call failed', ['apiPath' => $apiPath, 'parameters' => $parameters, 'code' => $e->getCode(), 'message' => $e->getMessage()]); - return null; - } -} - -function twitter_get_id(string $uri) -{ - if ((substr($uri, 0, 9) != 'twitter::') || (strlen($uri) <= 9)) { - return 0; - } - - $id = substr($uri, 9); - if (!is_numeric($id)) { - return 0; - } - - return (int)$id; -} - function twitter_post_hook(array &$b) { DI::logger()->debug('Invoke post hook', $b); - if ($b['deleted']) { - twitter_delete_item($b); - return; - } - - // Post to Twitter - if (!DI::pConfig()->get($b['uid'], 'twitter', 'import') - && ($b['private'] || ($b['created'] !== $b['edited']))) { + if (($b['gravity'] != Item::GRAVITY_PARENT) || !strstr($b['postopts'], 'twitter') || ($b['private'] == Item::PRIVATE) || $b['deleted'] || ($b['created'] !== $b['edited'])) { return; } $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], DI::contentItem()->addSharedPost($b)); - $thr_parent = null; - - if ($b['parent'] != $b['id']) { - Logger::debug('Got comment', ['item' => $b]); - - // Looking if its a reply to a twitter post - if (!twitter_get_id($b['parent-uri']) && - !twitter_get_id($b['extid']) && - !twitter_get_id($b['thr-parent'])) { - Logger::info('No twitter post', ['parent' => $b['parent']]); - return; - } - - $condition = ['uri' => $b['thr-parent'], 'uid' => $b['uid']]; - $thr_parent = Post::selectFirst(['uri', 'extid', 'author-link', 'author-nick', 'author-network'], $condition); - if (!DBA::isResult($thr_parent)) { - Logger::notice('No parent found', ['thr-parent' => $b['thr-parent']]); - return; - } - - if ($thr_parent['author-network'] == Protocol::TWITTER) { - $nickname = '@[url=' . $thr_parent['author-link'] . ']' . $thr_parent['author-nick'] . '[/url]'; - $nicknameplain = '@' . $thr_parent['author-nick']; - - Logger::info('Comparing', ['nickname' => $nickname, 'nicknameplain' => $nicknameplain, 'body' => $b['body']]); - if ((strpos($b['body'], $nickname) === false) && (strpos($b['body'], $nicknameplain) === false)) { - $b['body'] = $nickname . ' ' . $b['body']; - } - } - - Logger::debug('Parent found', ['parent' => $thr_parent]); - } else { - if ($b['private'] || !strstr($b['postopts'], 'twitter')) { - return; - } - - // Dont't post if the post doesn't belong to us. - // This is a check for forum postings - $self = DBA::selectFirst('contact', ['id'], ['uid' => $b['uid'], 'self' => true]); - if ($b['contact-id'] != $self['id']) { - return; - } - } - - if ($b['verb'] == Activity::LIKE) { - Logger::info('Like', ['uid' => $b['uid'], 'id' => twitter_get_id($b['thr-parent'])]); - - twitter_api_post('favorites/create', twitter_get_id($b['thr-parent']), $b['uid']); - - return; - } - - if ($b['verb'] == Activity::ANNOUNCE) { - Logger::info('Retweet', ['uid' => $b['uid'], 'id' => twitter_get_id($b['thr-parent'])]); - twitter_retweet($b['uid'], twitter_get_id($b['thr-parent'])); - return; - } - - if ($b['created'] !== $b['edited']) { - return; - } - - // if post comes from twitter don't send it back - if (($b['extid'] == Protocol::TWITTER) || twitter_get_id($b['extid'])) { - return; - } - - if ($b['app'] == 'Twitter') { - return; - } - - Logger::notice('twitter post invoked', ['id' => $b['id'], 'guid' => $b['guid']]); + DI::logger()->notice('twitter post invoked', ['id' => $b['id'], 'guid' => $b['guid']]); DI::pConfig()->load($b['uid'], 'twitter'); - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - $otoken = DI::pConfig()->get($b['uid'], 'twitter', 'oauthtoken'); - $osecret = DI::pConfig()->get($b['uid'], 'twitter', 'oauthsecret'); + $api_key = DI::pConfig()->get($b['uid'], 'twitter', 'api_key'); + $api_secret = DI::pConfig()->get($b['uid'], 'twitter', 'api_secret'); + $access_token = DI::pConfig()->get($b['uid'], 'twitter', 'access_token'); + $access_secret = DI::pConfig()->get($b['uid'], 'twitter', 'access_secret'); - if ($ckey && $csecret && $otoken && $osecret) { - Logger::info('We have customer key and oauth stuff, going to send.'); + if (empty($api_key) || empty($api_secret) || empty($access_token) || empty($access_secret)) { + DI::logger()->info('Missing keys, secrets or tokens.'); + return; + } - // If it's a repeated message from twitter then do a native retweet and exit - if (twitter_is_retweet($b['uid'], $b['body'])) { + $msgarr = Plaintext::getPost($b, 280, true, BBCode::TWITTER); + DI::logger()->debug('Got plaintext', ['id' => $b['id'], 'message' => $msgarr]); + + $media_ids = []; + + if (!empty($msgarr['images']) || !empty($msgarr['remote_images'])) { + DI::logger()->info('Got images', ['id' => $b['id'], 'images' => $msgarr['images'] ?? []]); + + $retrial = Worker::getRetrial(); + if ($retrial > 4) { return; } - - Codebird::setConsumerKey($ckey, $csecret); - $cb = Codebird::getInstance(); - $cb->setToken($otoken, $osecret); - - $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); - - // Set the timeout for upload to 30 seconds - $connection->setTimeouts(10, 30); - - $max_char = 280; - - // Handling non-native reshares - $b['body'] = Friendica\Content\Text\BBCode::convertShare( - $b['body'], - function (array $attributes, array $author_contact, $content, $is_quote_share) { - return twitter_convert_share($attributes, $author_contact, $content, $is_quote_share); + foreach ($msgarr['images'] ?? [] as $image) { + if (count($media_ids) == 4) { + continue; } - ); - - $b['body'] = twitter_update_mentions($b['body']); - - $msgarr = Plaintext::getPost($b, $max_char, true, BBCode::TWITTER); - Logger::info('Got plaintext', ['id' => $b['id'], 'message' => $msgarr]); - $msg = $msgarr['text']; - - if (($msg == '') && isset($msgarr['title'])) { - $msg = Plaintext::shorten($msgarr['title'], $max_char - 50, $b['uid']); - } - - // Add the link to the body if the type isn't a photo or there are more than 4 images in the post - if (!empty($msgarr['url']) && (strpos($msg, $msgarr['url']) === false) && (($msgarr['type'] != 'photo') || empty($msgarr['images']) || (count($msgarr['images']) > 4))) { - $msg .= "\n" . $msgarr['url']; - } - - if (empty($msg)) { - Logger::notice('Empty message', ['id' => $b['id']]); - return; - } - - // and now tweet it :-) - $post = []; - - if (!empty($msgarr['images']) || !empty($msgarr['remote_images'])) { - Logger::info('Got images', ['id' => $b['id'], 'images' => $msgarr['images'] ?? [], 'remote_images' => $msgarr['remote_images'] ?? []]); try { - $media_ids = []; - foreach ($msgarr['images'] ?? [] as $image) { - if (count($media_ids) == 4) { - continue; - } - try { - $media_ids[] = twitter_upload_image($connection, $cb, $image, $b); - } catch (\Throwable $th) { - Logger::warning('Error while uploading image', ['code' => $th->getCode(), 'message' => $th->getMessage()]); - } - } - - foreach ($msgarr['remote_images'] ?? [] as $image) { - if (count($media_ids) == 4) { - continue; - } - try { - $media_ids[] = twitter_upload_image($connection, $cb, $image, $b); - } catch (\Throwable $th) { - Logger::warning('Error while uploading image', ['code' => $th->getCode(), 'message' => $th->getMessage()]); - } - } - $post['media_ids'] = implode(',', $media_ids); - if (empty($post['media_ids'])) { - unset($post['media_ids']); - } - } catch (Exception $e) { - Logger::warning('Exception when trying to send to Twitter', ['id' => $b['id'], 'message' => $e->getMessage()]); - } - } - - if (!DI::pConfig()->get($b['uid'], 'twitter', 'thread') || empty($msgarr['parts']) || (count($msgarr['parts']) == 1)) { - Logger::debug('Post single message', ['id' => $b['id']]); - - $post['status'] = $msg; - - if ($thr_parent) { - $post['in_reply_to_status_id'] = twitter_get_id($thr_parent['uri']); - } - - $result = $connection->post('statuses/update', $post); - Logger::info('twitter_post send', ['id' => $b['id'], 'result' => $result]); - - if (!empty($result->source)) { - DI::config()->set('twitter', 'application_name', strip_tags($result->source)); - } - - if (!empty($result->errors)) { - Logger::error('Send to Twitter failed', ['id' => $b['id'], 'error' => $result->errors]); + $media_ids[] = twitter_upload_image($b['uid'], $image, $retrial); + } catch (RequestException $exception) { + DI::logger()->warning('Error while uploading image', ['image' => $image, 'code' => $exception->getCode(), 'message' => $exception->getMessage()]); Worker::defer(); - } elseif ($thr_parent) { - Logger::notice('Post send, updating extid', ['id' => $b['id'], 'extid' => $result->id_str]); - Item::update(['extid' => 'twitter::' . $result->id_str], ['id' => $b['id']]); - } - } else { - if ($thr_parent) { - $in_reply_to_status_id = twitter_get_id($thr_parent['uri']); - } else { - $in_reply_to_status_id = 0; - } - - Logger::debug('Post message thread', ['id' => $b['id'], 'parts' => count($msgarr['parts'])]); - foreach ($msgarr['parts'] as $key => $part) { - $post['status'] = $part; - - if ($in_reply_to_status_id) { - $post['in_reply_to_status_id'] = $in_reply_to_status_id; - } - - $result = $connection->post('statuses/update', $post); - Logger::debug('twitter_post send', ['part' => $key, 'id' => $b['id'], 'result' => $result]); - - if (!empty($result->errors)) { - Logger::warning('Send to Twitter failed', ['part' => $key, 'id' => $b['id'], 'error' => $result->errors]); - Worker::defer(); - break; - } elseif ($key == 0) { - Logger::debug('Updating extid', ['part' => $key, 'id' => $b['id'], 'extid' => $result->id_str]); - Item::update(['extid' => 'twitter::' . $result->id_str], ['id' => $b['id']]); - } - - if (!empty($result->source)) { - $application_name = strip_tags($result->source); - } - - $in_reply_to_status_id = $result->id_str; - unset($post['media_ids']); - } - - if (!empty($application_name)) { - DI::config()->set('twitter', 'application_name', strip_tags($application_name)); + return; } } } + + $in_reply_to_tweet_id = 0; + + DI::logger()->debug('Post message', ['id' => $b['id'], 'parts' => count($msgarr['parts'])]); + foreach ($msgarr['parts'] as $key => $part) { + try { + $id = twitter_post_status($b['uid'], $part, $media_ids, $in_reply_to_tweet_id); + DI::logger()->info('twitter_post send', ['part' => $key, 'id' => $b['id'], 'result' => $id]); + } catch (RequestException $exception) { + DI::logger()->warning('Error while posting message', ['part' => $key, 'id' => $b['id'], 'code' => $exception->getCode(), 'message' => $exception->getMessage()]); + $status = [ + 'code' => $exception->getCode(), + 'reason' => $exception->getResponse()->getReasonPhrase(), + 'content' => $exception->getMessage() + ]; + DI::pConfig()->set($b['uid'], 'twitter', 'last_status', $status); + if ($key == 0) { + Worker::defer(); + } + break; + } + + $in_reply_to_tweet_id = $id; + $media_ids = []; + } } -function twitter_upload_image($connection, $cb, array $image, array $item) +function twitter_post_status(int $uid, string $status, array $media_ids = [], string $in_reply_to_tweet_id = ''): string +{ + $parameters = ['text' => $status]; + if (!empty($media_ids)) { + $parameters['media'] = ['media_ids' => $media_ids]; + } + if (!empty($in_reply_to_tweet_id)) { + $parameters['reply'] = ['in_reply_to_tweet_id' => $in_reply_to_tweet_id]; + } + + $response = twitter_post($uid, 'https://api.twitter.com/2/tweets', 'json', $parameters); + + return $response->data->id; +} + +function twitter_upload_image(int $uid, array $image, int $retrial) { if (!empty($image['id'])) { $photo = Photo::selectFirst([], ['id' => $image['id']]); @@ -889,1606 +305,110 @@ function twitter_upload_image($connection, $cb, array $image, array $item) $photo = Photo::createPhotoForExternalResource($image['url']); } - $tempfile = tempnam(System::getTempPath(), 'cache'); - file_put_contents($tempfile, Photo::getImageForPhoto($photo)); + $picturedata = Photo::getImageForPhoto($photo); - Logger::info('Uploading', ['id' => $item['id'], 'image' => $image]); - $media = $connection->upload('media/upload', ['media' => $tempfile]); + $picture = new Image($picturedata, $photo['type'], $photo['filename']); + $height = $picture->getHeight(); + $width = $picture->getWidth(); + $size = strlen($picturedata); - unlink($tempfile); + $picture = Photo::resizeToFileSize($picture, TWITTER_IMAGE_SIZE[$retrial]); + $new_height = $picture->getHeight(); + $new_width = $picture->getWidth(); + $picturedata = $picture->asString(); + $new_size = strlen($picturedata); + + DI::logger()->info('Uploading', ['uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size, 'image' => $image]); + $media = twitter_post($uid, 'https://upload.twitter.com/1.1/media/upload.json', 'form_params', ['media' => base64_encode($picturedata)]); + DI::logger()->info('Uploading done', ['uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size, 'image' => $image]); if (isset($media->media_id_string)) { $media_id = $media->media_id_string; if (!empty($image['description'])) { - $data = ['media_id' => $media->media_id_string, - 'alt_text' => ['text' => substr($image['description'], 0, 420)]]; - $ret = $cb->media_metadata_create($data); - Logger::info('Metadata create', ['id' => $item['id'], 'data' => $data, 'return' => $ret]); + $data = [ + 'media_id' => $media->media_id_string, + 'alt_text' => [ + 'text' => substr($image['description'], 0, 1000) + ] + ]; + $ret = twitter_post($uid, 'https://upload.twitter.com/1.1/media/metadata/create.json', 'json', $data); + DI::logger()->info('Metadata create', ['uid' => $uid, 'data' => $data, 'return' => $ret]); } } else { - Logger::error('Failed upload', ['id' => $item['id'], 'image' => $image['url'], 'return' => $media]); + DI::logger()->error('Failed upload', ['uid' => $uid, 'size' => strlen($picturedata), 'image' => $image['url'], 'return' => $media]); throw new Exception('Failed upload of ' . $image['url']); } return $media_id; } -function twitter_delete_item(array $item) +function twitter_post(int $uid, string $url, string $type, array $data): stdClass { - if (!$item['deleted']) { - return; - } + $stack = HandlerStack::create(); - if ($item['parent'] != $item['id']) { - Logger::debug('Deleting comment/announce', ['item' => $item]); - - // Looking if it's a reply to a twitter post - if (!twitter_get_id($item['parent-uri']) && - !twitter_get_id($item['extid']) && - !twitter_get_id($item['thr-parent'])) { - Logger::info('No twitter post', ['parent' => $item['parent']]); - return; - } - - $condition = ['uri' => $item['thr-parent'], 'uid' => $item['uid']]; - $thr_parent = Post::selectFirst(['uri', 'extid', 'author-link', 'author-nick', 'author-network'], $condition); - if (!DBA::isResult($thr_parent)) { - Logger::notice('No parent found', ['thr-parent' => $item['thr-parent']]); - return; - } - - Logger::debug('Parent found', ['parent' => $thr_parent]); - } else { - if (!strstr($item['extid'], 'twitter')) { - DI::logger()->info('Not a Twitter post', ['extid' => $item['extid']]); - return; - } - - // Don't delete if the post doesn't belong to us. - // This is a check for forum postings - $self = DBA::selectFirst('contact', ['id'], ['uid' => $item['uid'], 'self' => true]); - if ($item['contact-id'] != $self['id']) { - DI::logger()->info('Don\'t delete if the post doesn\'t belong to the user', ['contact-id' => $item['contact-id'], 'self' => $self['id']]); - return; - } - } - - /** - * @TODO Remaining caveat: Comments posted on Twitter and imported in Friendica do not trigger any Notifier task, - * possibly because they are private to the user and don't require any remote deletion notifications sent. - * Comments posted on Friendica and mirrored on Twitter trigger the Notifier task and the Twitter counter-part - * will be deleted accordingly. - */ - if ($item['verb'] == Activity::POST) { - Logger::info('Delete post/comment', ['uid' => $item['uid'], 'id' => twitter_get_id($item['extid'])]); - twitter_api_post('statuses/destroy', twitter_get_id($item['extid']), $item['uid']); - return; - } - - if ($item['verb'] == Activity::LIKE) { - Logger::info('Unlike', ['uid' => $item['uid'], 'id' => twitter_get_id($item['thr-parent'])]); - twitter_api_post('favorites/destroy', twitter_get_id($item['thr-parent']), $item['uid']); - return; - } - - if ($item['verb'] == Activity::ANNOUNCE && !empty($thr_parent['uri'])) { - Logger::info('Unretweet', ['uid' => $item['uid'], 'extid' => $thr_parent['uri'], 'id' => twitter_get_id($thr_parent['uri'])]); - twitter_api_post('statuses/unretweet', twitter_get_id($thr_parent['uri']), $item['uid']); - return; - } -} - -function twitter_addon_admin_post() -{ - DI::config()->set('twitter', 'consumerkey', trim($_POST['consumerkey'] ?? '')); - DI::config()->set('twitter', 'consumersecret', trim($_POST['consumersecret'] ?? '')); -} - -function twitter_addon_admin(string &$o) -{ - $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/twitter/'); - - $o = Renderer::replaceMacros($t, [ - '$submit' => DI::l10n()->t('Save Settings'), - // name, label, value, help, [extra values] - '$consumerkey' => ['consumerkey', DI::l10n()->t('Consumer key'), DI::config()->get('twitter', 'consumerkey'), ''], - '$consumersecret' => ['consumersecret', DI::l10n()->t('Consumer secret'), DI::config()->get('twitter', 'consumersecret'), ''], + $middleware = new Oauth1([ + 'consumer_key' => DI::pConfig()->get($uid, 'twitter', 'api_key'), + 'consumer_secret' => DI::pConfig()->get($uid, 'twitter', 'api_secret'), + 'token' => DI::pConfig()->get($uid, 'twitter', 'access_token'), + 'token_secret' => DI::pConfig()->get($uid, 'twitter', 'access_secret'), ]); -} -function twitter_cron() -{ - $last = DI::keyValue()->get('twitter_last_poll'); + $stack->push($middleware); - $poll_interval = intval(DI::config()->get('twitter', 'poll_interval')); - if (!$poll_interval) { - $poll_interval = TWITTER_DEFAULT_POLL_INTERVAL; - } + $client = new Client([ + 'handler' => $stack + ]); - if ($last) { - $next = $last + ($poll_interval * 60); - if ($next > time()) { - Logger::notice('twitter: poll intervall not reached'); - return; - } - } - Logger::notice('twitter: cron_start'); + $response = $client->post($url, ['auth' => 'oauth', $type => $data]); + $body = $response->getBody()->getContents(); - $pconfigs = DBA::selectToArray('pconfig', [], ['cat' => 'twitter', 'k' => 'mirror_posts', 'v' => true]); - foreach ($pconfigs as $rr) { - Logger::notice('Fetching', ['user' => $rr['uid']]); - Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/twitter/twitter_sync.php', 1, (int) $rr['uid']); - } - - $abandon_days = intval(DI::config()->get('system', 'account_abandon_days')); - if ($abandon_days < 1) { - $abandon_days = 0; - } - - $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); - - $pconfigs = DBA::selectToArray('pconfig', [], ['cat' => 'twitter', 'k' => 'import', 'v' => true]); - foreach ($pconfigs as $rr) { - if ($abandon_days != 0) { - if (!DBA::exists('user', ["`uid` = ? AND `login_date` >= ?", $rr['uid'], $abandon_limit])) { - Logger::notice('abandoned account: timeline from user will not be imported', ['user' => $rr['uid']]); - continue; - } - } - - Logger::notice('importing timeline', ['user' => $rr['uid']]); - Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/twitter/twitter_sync.php', 2, (int) $rr['uid']); - /* - // To-Do - // check for new contacts once a day - $last_contact_check = DI::pConfig()->get($rr['uid'],'pumpio','contact_check'); - if($last_contact_check) - $next_contact_check = $last_contact_check + 86400; - else - $next_contact_check = 0; - - if($next_contact_check <= time()) { - pumpio_getallusers($rr["uid"]); - DI::pConfig()->set($rr['uid'],'pumpio','contact_check',time()); - } - */ - } - - Logger::notice('twitter: cron_end'); - - DI::keyValue()->set('twitter_last_poll', time()); -} - -function twitter_expire() -{ - $days = DI::config()->get('twitter', 'expire'); - - if ($days == 0) { - return; - } - - Logger::notice('Start deleting expired posts'); - - $r = Post::select(['id', 'guid'], ['deleted' => true, 'network' => Protocol::TWITTER]); - while ($row = Post::fetch($r)) { - Logger::info('[twitter] Delete expired item', ['id' => $row['id'], 'guid' => $row['guid'], 'callstack' => \Friendica\Core\System::callstack()]); - Item::markForDeletionById($row['id']); - } - DBA::close($r); - - Logger::notice('End deleting expired posts'); - - Logger::notice('Start expiry'); - - $pconfigs = DBA::selectToArray('pconfig', [], ['cat' => 'twitter', 'k' => 'import', 'v' => true]); - foreach ($pconfigs as $rr) { - Logger::notice('twitter_expire', ['user' => $rr['uid']]); - Item::expire($rr['uid'], $days, Protocol::TWITTER, true); - } - - Logger::notice('End expiry'); -} - -function twitter_prepare_body(array &$b) -{ - if ($b['item']['network'] != Protocol::TWITTER) { - return; - } - - if ($b['preview']) { - $max_char = 280; - $item = $b['item']; - $item['plink'] = DI::baseUrl()->get() . '/display/' . $item['guid']; - - $condition = ['uri' => $item['thr-parent'], 'uid' => DI::userSession()->getLocalUserId()]; - $orig_post = Post::selectFirst(['author-link'], $condition); - if (DBA::isResult($orig_post)) { - $nicknameplain = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $orig_post['author-link']); - $nickname = '@[url=' . $orig_post['author-link'] . ']' . $nicknameplain . '[/url]'; - $nicknameplain = '@' . $nicknameplain; - - if ((strpos($item['body'], $nickname) === false) && (strpos($item['body'], $nicknameplain) === false)) { - $item['body'] = $nickname . ' ' . $item['body']; - } - } - - $msgarr = Plaintext::getPost($item, $max_char, true, BBCode::TWITTER); - $msg = $msgarr['text']; - - if (isset($msgarr['url']) && ($msgarr['type'] != 'photo')) { - $msg .= ' ' . $msgarr['url']; - } - - if (isset($msgarr['image'])) { - $msg .= ' ' . $msgarr['image']; - } - - $b['html'] = nl2br(htmlspecialchars($msg)); - } -} - -function twitter_statuses_show(string $id, TwitterOAuth $twitterOAuth = null) -{ - if ($twitterOAuth === null) { - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - - if (empty($ckey) || empty($csecret)) { - return new stdClass(); - } - - $twitterOAuth = new TwitterOAuth($ckey, $csecret); - } - - $parameters = ['trim_user' => false, 'tweet_mode' => 'extended', 'id' => $id, 'include_ext_alt_text' => true]; - - return $twitterOAuth->get('statuses/show', $parameters); -} - -/** - * Parse Twitter status URLs since Twitter removed OEmbed - * - * @param array $b Expected format: - * [ - * 'url' => [URL to parse], - * 'format' => 'json'|'', - * 'text' => Output parameter - * ] - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - */ -function twitter_parse_link(array &$b) -{ - // Only handle Twitter status URLs - if (!preg_match('#^https?://(?:mobile\.|www\.)?twitter.com/[^/]+/status/(\d+).*#', $b['url'], $matches)) { - return; - } - - $status = twitter_statuses_show($matches[1]); - - if (empty($status->id)) { - return; - } - - $item = twitter_createpost(0, $status, [], true, false, true); - if (empty($item)) { - return; - } - - if ($b['format'] == 'json') { - $images = []; - foreach ($status->extended_entities->media ?? [] as $media) { - if (!empty($media->media_url_https)) { - $images[] = [ - 'src' => $media->media_url_https, - 'width' => $media->sizes->thumb->w, - 'height' => $media->sizes->thumb->h, - ]; - } - } - - $b['text'] = [ - 'data' => [ - 'type' => 'link', - 'url' => $item['plink'], - 'title' => DI::l10n()->t('%s on Twitter', $status->user->name), - 'text' => BBCode::toPlaintext($item['body'], false), - 'images' => $images, - ], - 'contentType' => 'attachment', - 'success' => true, - ]; - } else { - $b['text'] = BBCode::getShareOpeningTag( - $item['author-name'], - $item['author-link'], - $item['author-avatar'], - $item['plink'], - $item['created'] - ); - $b['text'] .= $item['body'] . '[/share]'; - } -} - - -/********************* - * - * General functions - * - *********************/ - - -/** - * @brief Build the item array for the mirrored post - * - * @param integer $uid User id - * @param object $post Twitter object with the post - * - * @return array item data to be posted - */ -function twitter_do_mirrorpost(int $uid, $post) -{ - $datarray['uid'] = $uid; - $datarray['extid'] = 'twitter::' . $post->id; - $datarray['title'] = ''; - - if (!empty($post->retweeted_status)) { - // We don't support nested shares, so we mustn't show quotes as shares on retweets - $item = twitter_createpost($uid, $post->retweeted_status, ['id' => 0], false, false, true, -1); - - if (empty($item)) { - return []; - } - - $datarray['body'] = "\n" . BBCode::getShareOpeningTag( - $item['author-name'], - $item['author-link'], - $item['author-avatar'], - $item['plink'], - $item['created'] - ); - - $datarray['body'] .= $item['body'] . '[/share]'; - } else { - $item = twitter_createpost($uid, $post, ['id' => 0], false, false, false, -1); - - if (empty($item)) { - return []; - } - - $datarray['body'] = $item['body']; - } - - $datarray['app'] = $item['app']; - $datarray['verb'] = $item['verb']; - - if (isset($item['location'])) { - $datarray['location'] = $item['location']; - } - - if (isset($item['coord'])) { - $datarray['coord'] = $item['coord']; - } - - return $datarray; -} - -/** - * Fetches the Twitter user's own posts - * - * @param int $uid - * @return void - * @throws Exception - */ -function twitter_fetchtimeline(int $uid): void -{ - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - $otoken = DI::pConfig()->get($uid, 'twitter', 'oauthtoken'); - $osecret = DI::pConfig()->get($uid, 'twitter', 'oauthsecret'); - $lastid = DI::pConfig()->get($uid, 'twitter', 'lastid'); - - $application_name = DI::config()->get('twitter', 'application_name'); - - if ($application_name == '') { - $application_name = DI::baseUrl()->getHostname(); - } - - $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); - - // Ensure to have the own contact - try { - twitter_fetch_own_contact($uid); - } catch (TwitterOAuthException $e) { - Logger::notice('Error fetching own contact', ['uid' => $uid, 'message' => $e->getMessage()]); - return; - } - - $parameters = [ - 'exclude_replies' => true, - 'trim_user' => false, - 'contributor_details' => true, - 'include_rts' => true, - 'tweet_mode' => 'extended', - 'include_ext_alt_text' => true, + $status = [ + 'code' => $response->getStatusCode(), + 'reason' => $response->getReasonPhrase(), + 'content' => $body ]; - $first_time = ($lastid == ''); + DI::pConfig()->set($uid, 'twitter', 'last_status', $status); - if ($lastid != '') { - $parameters['since_id'] = $lastid; - } + $content = json_decode($body) ?? new stdClass; + DI::logger()->debug('Success', ['content' => $content]); + return $content; +} + +function twitter_test_connection(int $uid) +{ + $stack = HandlerStack::create(); + + $middleware = new Oauth1([ + 'consumer_key' => DI::pConfig()->get($uid, 'twitter', 'api_key'), + 'consumer_secret' => DI::pConfig()->get($uid, 'twitter', 'api_secret'), + 'token' => DI::pConfig()->get($uid, 'twitter', 'access_token'), + 'token_secret' => DI::pConfig()->get($uid, 'twitter', 'access_secret'), + ]); + + $stack->push($middleware); + + $client = new Client([ + 'handler' => $stack + ]); try { - $items = $connection->get('statuses/user_timeline', $parameters); - } catch (TwitterOAuthException $e) { - Logger::notice('Error fetching timeline', ['uid' => $uid, 'message' => $e->getMessage()]); - return; - } - - if (!is_array($items)) { - Logger::notice('No items', ['user' => $uid]); - return; - } - - $posts = array_reverse($items); - - Logger::notice('Start processing posts', ['from' => $lastid, 'user' => $uid, 'count' => count($posts)]); - - if (count($posts)) { - foreach ($posts as $post) { - if ($post->id_str > $lastid) { - $lastid = $post->id_str; - DI::pConfig()->set($uid, 'twitter', 'lastid', $lastid); - } - - if ($first_time) { - Logger::notice('First time, continue'); - continue; - } - - if (stristr($post->source, $application_name)) { - Logger::notice('Source is application name', ['source' => $post->source, 'application_name' => $application_name]); - continue; - } - Logger::info('Preparing mirror post', ['twitter-id' => $post->id_str, 'uid' => $uid]); - - $mirrorpost = twitter_do_mirrorpost($uid, $post); - - if (empty($mirrorpost['body'])) { - Logger::notice('Body is empty', ['post' => $post, 'mirrorpost' => $mirrorpost]); - continue; - } - - Logger::info('Posting mirror post', ['twitter-id' => $post->id_str, 'uid' => $uid]); - - Post\Delayed::add($mirrorpost['extid'], $mirrorpost, Worker::PRIORITY_MEDIUM, Post\Delayed::PREPARED); - } - } - DI::pConfig()->set($uid, 'twitter', 'lastid', $lastid); - Logger::info('Last ID for user ' . $uid . ' is now ' . $lastid); -} - -function twitter_fix_avatar($avatar) -{ - $new_avatar = str_replace('_normal.', '_400x400.', $avatar); - - $info = Images::getInfoFromURLCached($new_avatar); - if (!$info) { - $new_avatar = $avatar; - } - - return $new_avatar; -} - -function twitter_get_relation($uid, $target, $contact = []) -{ - if (isset($contact['rel'])) { - $relation = $contact['rel']; - } else { - $relation = 0; - } - - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - $otoken = DI::pConfig()->get($uid, 'twitter', 'oauthtoken'); - $osecret = DI::pConfig()->get($uid, 'twitter', 'oauthsecret'); - $own_id = DI::pConfig()->get($uid, 'twitter', 'own_id'); - - $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); - $parameters = ['source_id' => $own_id, 'target_screen_name' => $target]; - - try { - $status = $connection->get('friendships/show', $parameters); - if ($connection->getLastHttpCode() !== 200) { - throw new Exception($status->errors[0]->message ?? 'HTTP response code ' . $connection->getLastHttpCode(), $status->errors[0]->code ?? $connection->getLastHttpCode()); - } - - $following = $status->relationship->source->following; - $followed = $status->relationship->source->followed_by; - - if ($following && !$followed) { - $relation = Contact::SHARING; - } elseif (!$following && $followed) { - $relation = Contact::FOLLOWER; - } elseif ($following && $followed) { - $relation = Contact::FRIEND; - } elseif (!$following && !$followed) { - $relation = 0; - } - - Logger::info('Fetched friendship relation', ['user' => $uid, 'target' => $target, 'relation' => $relation]); - } catch (Throwable $e) { - Logger::notice('Error fetching friendship status', ['uid' => $uid, 'target' => $target, 'message' => $e->getMessage()]); - } - - return $relation; -} - -/** - * @param $data - * @return array - */ -function twitter_user_to_contact($data) -{ - if (empty($data->id_str)) { - return []; - } - - $baseurl = 'https://twitter.com'; - $url = $baseurl . '/' . $data->screen_name; - $addr = $data->screen_name . '@twitter.com'; - - $fields = [ - 'url' => $url, - 'nurl' => Strings::normaliseLink($url), - 'uri-id' => ItemURI::getIdByURI($url), - 'network' => Protocol::TWITTER, - 'alias' => 'twitter::' . $data->id_str, - 'baseurl' => $baseurl, - 'name' => $data->name, - 'nick' => $data->screen_name, - 'addr' => $addr, - 'location' => $data->location, - 'about' => $data->description, - 'photo' => twitter_fix_avatar($data->profile_image_url_https), - 'header' => $data->profile_banner_url ?? $data->profile_background_image_url_https, - ]; - - return $fields; -} - -function twitter_get_contact($data, int $uid = 0) -{ - $contact = DBA::selectFirst('contact', ['id'], ['uid' => $uid, 'alias' => 'twitter::' . $data->id_str]); - if (DBA::isResult($contact)) { - return $contact['id']; - } else { - return twitter_fetch_contact($uid, $data, false); - } -} - -function twitter_fetch_contact($uid, $data, $create_user) -{ - $fields = twitter_user_to_contact($data); - - if (empty($fields)) { - return -1; - } - - // photo comes from twitter_user_to_contact but shouldn't be saved directly in the contact row - $avatar = $fields['photo']; - unset($fields['photo']); - - // Update the public contact - $pcontact = DBA::selectFirst('contact', ['id'], ['uid' => 0, 'alias' => 'twitter::' . $data->id_str]); - if (DBA::isResult($pcontact)) { - $cid = $pcontact['id']; - } else { - $cid = Contact::getIdForURL($fields['url'], 0, false, $fields); - } - - if (!empty($cid)) { - Contact::update($fields, ['id' => $cid]); - Contact::updateAvatar($cid, $avatar); - } else { - Logger::notice('No contact found', ['fields' => $fields]); - } - - $contact = DBA::selectFirst('contact', [], ['uid' => $uid, 'alias' => 'twitter::' . $data->id_str]); - if (!DBA::isResult($contact) && empty($cid)) { - Logger::notice('User contact not found', ['uid' => $uid, 'twitter-id' => $data->id_str]); - return 0; - } elseif (!$create_user) { - return $cid; - } - - if (!DBA::isResult($contact)) { - $relation = twitter_get_relation($uid, $data->screen_name); - - // create contact record - $fields['uid'] = $uid; - $fields['created'] = DateTimeFormat::utcNow(); - $fields['poll'] = 'twitter::' . $data->id_str; - $fields['rel'] = $relation; - $fields['priority'] = 1; - $fields['writable'] = true; - $fields['blocked'] = false; - $fields['readonly'] = false; - $fields['pending'] = false; - - if (!Contact::insert($fields)) { - return false; - } - - $contact_id = DBA::lastInsertId(); - - Group::addMember(User::getDefaultGroup($uid), $contact_id); - } else { - if ($contact['readonly'] || $contact['blocked']) { - Logger::notice('Contact is blocked or readonly.', ['nickname' => $contact['nick']]); - return -1; - } - - $contact_id = $contact['id']; - $update = false; - - // Update the contact relation once per day - if ($contact['updated'] < DateTimeFormat::utc('now -24 hours')) { - $fields['rel'] = twitter_get_relation($uid, $data->screen_name, $contact); - $update = true; - } - - if ($contact['name'] != $data->name) { - $fields['name-date'] = $fields['uri-date'] = DateTimeFormat::utcNow(); - $update = true; - } - - if ($contact['nick'] != $data->screen_name) { - $fields['uri-date'] = DateTimeFormat::utcNow(); - $update = true; - } - - if (($contact['location'] != $data->location) || ($contact['about'] != $data->description)) { - $update = true; - } - - if ($update) { - $fields['updated'] = DateTimeFormat::utcNow(); - Contact::update($fields, ['id' => $contact['id']]); - Logger::info('Updated contact', ['id' => $contact['id'], 'nick' => $data->screen_name]); - } - } - - Contact::updateAvatar($contact_id, $avatar); - - if (Contact::isSharing($contact_id, $uid, true) && DI::pConfig()->get($uid, 'twitter', 'auto_follow')) { - twitter_auto_follow($uid, $data); - } - - return $contact_id; -} - -/** - * Follow a fediverse account that is proived in the name or the profile - * - * @param integer $uid - * @param object $data - */ -function twitter_auto_follow(int $uid, object $data) -{ - $addrpattern = '([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6})'; - - // Search for user@domain.tld in the name - if (preg_match('#' . $addrpattern . '#', $data->name, $match)) { - if (twitter_add_contact($match[1], true, $uid)) { - return; - } - } - - // Search for @user@domain.tld in the description - if (preg_match('#@' . $addrpattern . '#', $data->description, $match)) { - if (twitter_add_contact($match[1], true, $uid)) { - return; - } - } - - // Search for user@domain.tld in the description - // We don't probe here, since this could be a mail address - if (preg_match('#' . $addrpattern . '#', $data->description, $match)) { - if (twitter_add_contact($match[1], false, $uid)) { - return; - } - } - - // Search for profile links in the description - foreach ($data->entities->description->urls as $url) { - if (!empty($url->expanded_url)) { - // We only probe on Mastodon style URL to reduce the number of unsuccessful probes - twitter_add_contact($url->expanded_url, strpos($url->expanded_url, '@'), $uid); - } - } -} - -/** - * Check if the provided address is a fediverse account and adds it - * - * @param string $addr - * @param boolean $probe - * @param integer $uid - * @return boolean - */ -function twitter_add_contact(string $addr, bool $probe, int $uid): bool -{ - $contact = Contact::getByURL($addr, $probe ? null : false, ['id', 'url', 'network']); - if (empty($contact)) { - Logger::debug('Not a contact address', ['uid' => $uid, 'probe' => $probe, 'addr' => $addr]); - return false; - } - - if (!in_array($contact['network'], Protocol::FEDERATED)) { - Logger::debug('Not a federated network', ['uid' => $uid, 'addr' => $addr, 'contact' => $contact]); - return false; - } - - if (Contact::isSharing($contact['id'], $uid)) { - Logger::debug('Contact has already been added', ['uid' => $uid, 'addr' => $addr, 'contact' => $contact]); - return true; - } - - Logger::info('Add contact', ['uid' => $uid, 'addr' => $addr, 'contact' => $contact]); - Worker::add(Worker::PRIORITY_LOW, 'AddContact', $uid, $contact['url']); - - return true; -} - -/** - * @param string $screen_name - * @return stdClass|null - * @throws Exception - */ -function twitter_fetchuser($screen_name) -{ - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - - try { - // Fetching user data - $connection = new TwitterOAuth($ckey, $csecret); - $parameters = ['screen_name' => $screen_name]; - $user = $connection->get('users/show', $parameters); - } catch (TwitterOAuthException $e) { - Logger::notice('Error fetching user', ['user' => $screen_name, 'message' => $e->getMessage()]); - return null; - } - - if (!is_object($user)) { - return null; - } - - return $user; -} - -/** - * Replaces Twitter entities with Friendica-friendly links. - * - * The Twitter API gives indices for each entity, which allows for fine-grained replacement. - * - * First, we need to collect everything that needs to be replaced, what we will replace it with, and the start index. - * Then we sort the indices decreasingly, and we replace from the end of the body to the start in order for the next - * index to be correct even after the last replacement. - * - * @param string $body - * @param stdClass $status - * @return array - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - */ -function twitter_expand_entities($body, stdClass $status) -{ - $plain = $body; - $contains_urls = false; - - $taglist = []; - - $replacementList = []; - - foreach ($status->entities->hashtags AS $hashtag) { - $replace = '#[url=' . DI::baseUrl()->get() . '/search?tag=' . $hashtag->text . ']' . $hashtag->text . '[/url]'; - $taglist['#' . $hashtag->text] = ['#', $hashtag->text, '']; - - $replacementList[$hashtag->indices[0]] = [ - 'replace' => $replace, - 'length' => $hashtag->indices[1] - $hashtag->indices[0], + $response = $client->get('https://api.twitter.com/2/users/me', ['auth' => 'oauth']); + $status = [ + 'code' => $response->getStatusCode(), + 'reason' => $response->getReasonPhrase(), + 'content' => $response->getBody()->getContents() ]; - } - - foreach ($status->entities->user_mentions AS $mention) { - $replace = '@[url=https://twitter.com/' . rawurlencode($mention->screen_name) . ']' . $mention->screen_name . '[/url]'; - $taglist['@' . $mention->screen_name] = ['@', $mention->screen_name, 'https://twitter.com/' . rawurlencode($mention->screen_name)]; - - $replacementList[$mention->indices[0]] = [ - 'replace' => $replace, - 'length' => $mention->indices[1] - $mention->indices[0], + DI::pConfig()->set(1, 'twitter', 'last_status', $status); + DI::logger()->info('Test successful', ['uid' => $uid]); + } catch (RequestException $exception) { + $status = [ + 'code' => $exception->getCode(), + 'reason' => $exception->getResponse()->getReasonPhrase(), + 'content' => $exception->getMessage() ]; - } - - foreach ($status->entities->urls ?? [] as $url) { - $plain = str_replace($url->url, '', $plain); - - if ($url->url && $url->expanded_url && $url->display_url) { - // Quote tweet, we just remove the quoted tweet URL from the body, the share block will be added later. - if (!empty($status->quoted_status) && isset($status->quoted_status_id_str) - && substr($url->expanded_url, -strlen($status->quoted_status_id_str)) == $status->quoted_status_id_str - ) { - $replacementList[$url->indices[0]] = [ - 'replace' => '', - 'length' => $url->indices[1] - $url->indices[0], - ]; - continue; - } - - $contains_urls = true; - - $expanded_url = $url->expanded_url; - - // Quickfix: Workaround for URL with '[' and ']' in it - if (strpos($expanded_url, '[') || strpos($expanded_url, ']')) { - $expanded_url = $url->url; - } - - $replacementList[$url->indices[0]] = [ - 'replace' => '[url=' . $expanded_url . ']' . $url->display_url . '[/url]', - 'length' => $url->indices[1] - $url->indices[0], - ]; - } - } - - krsort($replacementList); - - foreach ($replacementList as $startIndex => $parameters) { - $body = Strings::substringReplace($body, $parameters['replace'], $startIndex, $parameters['length']); - } - - $body = trim($body); - - return ['body' => trim($body), 'plain' => trim($plain), 'taglist' => $taglist, 'urls' => $contains_urls]; -} - -/** - * Store entity attachments - * - * @param integer $uriId - * @param object $post Twitter object with the post - */ -function twitter_store_attachments(int $uriId, $post) -{ - if (!empty($post->extended_entities->media)) { - foreach ($post->extended_entities->media AS $medium) { - switch ($medium->type) { - case 'photo': - $attachment = ['uri-id' => $uriId, 'type' => Post\Media::IMAGE]; - - $attachment['url'] = $medium->media_url_https . '?name=large'; - $attachment['width'] = $medium->sizes->large->w; - $attachment['height'] = $medium->sizes->large->h; - - if ($medium->sizes->small->w != $attachment['width']) { - $attachment['preview'] = $medium->media_url_https . '?name=small'; - $attachment['preview-width'] = $medium->sizes->small->w; - $attachment['preview-height'] = $medium->sizes->small->h; - } - - $attachment['name'] = $medium->display_url ?? null; - $attachment['description'] = $medium->ext_alt_text ?? null; - Logger::debug('Photo attachment', ['attachment' => $attachment]); - Post\Media::insert($attachment); - break; - case 'video': - case 'animated_gif': - $attachment = ['uri-id' => $uriId, 'type' => Post\Media::VIDEO]; - if (is_array($medium->video_info->variants)) { - $bitrate = 0; - // We take the video with the highest bitrate - foreach ($medium->video_info->variants AS $variant) { - if (($variant->content_type == 'video/mp4') && ($variant->bitrate >= $bitrate)) { - $attachment['url'] = $variant->url; - $bitrate = $variant->bitrate; - } - } - } - - $attachment['name'] = $medium->display_url ?? null; - $attachment['preview'] = $medium->media_url_https . ':small'; - $attachment['preview-width'] = $medium->sizes->small->w; - $attachment['preview-height'] = $medium->sizes->small->h; - $attachment['description'] = $medium->ext_alt_text ?? null; - Logger::debug('Video attachment', ['attachment' => $attachment]); - Post\Media::insert($attachment); - break; - default: - Logger::notice('Unknown media type', ['medium' => $medium]); - } - } - } - - if (!empty($post->entities->urls)) { - foreach ($post->entities->urls as $url) { - $attachment = ['uri-id' => $uriId, 'type' => Post\Media::UNKNOWN, 'url' => $url->expanded_url, 'name' => $url->display_url]; - Logger::debug('Attached link', ['attachment' => $attachment]); - Post\Media::insert($attachment); - } + DI::pConfig()->set(1, 'twitter', 'last_status', $status); + DI::logger()->info('Test failed', ['uid' => $uid]); } } - -/** - * @brief Fetch media entities and add media links to the body - * - * @param object $post Twitter object with the post - * @param array $postarray Array of the item that is about to be posted - * @param integer $uriId URI Id used to store tags. -1 = don't store tags for this post. - */ -function twitter_media_entities($post, array &$postarray, int $uriId = -1) -{ - // There are no media entities? So we quit. - if (empty($post->extended_entities->media)) { - return; - } - - // This is a pure media post, first search for all media urls - $media = []; - foreach ($post->extended_entities->media AS $medium) { - if (!isset($media[$medium->url])) { - $media[$medium->url] = ''; - } - switch ($medium->type) { - case 'photo': - if (!empty($medium->ext_alt_text)) { - Logger::info('Got text description', ['alt_text' => $medium->ext_alt_text]); - $media[$medium->url] .= "\n[img=" . $medium->media_url_https .']' . $medium->ext_alt_text . '[/img]'; - } else { - $media[$medium->url] .= "\n[img]" . $medium->media_url_https . '[/img]'; - } - - $postarray['object-type'] = Activity\ObjectType::IMAGE; - $postarray['post-type'] = Item::PT_IMAGE; - break; - case 'video': - // Currently deactivated, since this causes the video to be display before the content - // We have to figure out a better way for declaring the post type and the display style. - //$postarray['post-type'] = Item::PT_VIDEO; - case 'animated_gif': - if (!empty($medium->ext_alt_text)) { - Logger::info('Got text description', ['alt_text' => $medium->ext_alt_text]); - $media[$medium->url] .= "\n[img=" . $medium->media_url_https .']' . $medium->ext_alt_text . '[/img]'; - } else { - $media[$medium->url] .= "\n[img]" . $medium->media_url_https . '[/img]'; - } - - $postarray['object-type'] = Activity\ObjectType::VIDEO; - if (is_array($medium->video_info->variants)) { - $bitrate = 0; - // We take the video with the highest bitrate - foreach ($medium->video_info->variants AS $variant) { - if (($variant->content_type == 'video/mp4') && ($variant->bitrate >= $bitrate)) { - $media[$medium->url] = "\n[video]" . $variant->url . '[/video]'; - $bitrate = $variant->bitrate; - } - } - } - break; - } - } - - if ($uriId != -1) { - foreach ($media AS $key => $value) { - $postarray['body'] = str_replace($key, '', $postarray['body']); - } - return; - } - - // Now we replace the media urls. - foreach ($media AS $key => $value) { - $postarray['body'] = str_replace($key, "\n" . $value . "\n", $postarray['body']); - } -} - -/** - * Undocumented function - * - * @param integer $uid User ID - * @param object $post Incoming Twitter post - * @param array $self - * @param bool $create_user Should users be created? - * @param bool $only_existing_contact Only import existing contacts if set to "true" - * @param bool $noquote - * @param integer $uriId URI Id used to store tags. 0 = create a new one; -1 = don't store tags for this post. - * @return array item array - */ -function twitter_createpost(int $uid, $post, array $self, $create_user, bool $only_existing_contact, bool $noquote, int $uriId = 0): array -{ - $postarray = []; - $postarray['network'] = Protocol::TWITTER; - $postarray['uid'] = $uid; - $postarray['wall'] = 0; - $postarray['uri'] = 'twitter::' . $post->id_str; - $postarray['protocol'] = Conversation::PARCEL_TWITTER; - $postarray['source'] = json_encode($post); - $postarray['direction'] = Conversation::PULL; - - if (empty($uriId)) { - $uriId = $postarray['uri-id'] = ItemURI::insert(['uri' => $postarray['uri']]); - } - - // Don't import our own comments - if (Post::exists(['extid' => $postarray['uri'], 'uid' => $uid])) { - Logger::info('Item found', ['extid' => $postarray['uri']]); - return []; - } - - $contactid = 0; - - if ($post->in_reply_to_status_id_str != '') { - $thr_parent = 'twitter::' . $post->in_reply_to_status_id_str; - - $item = Post::selectFirst(['uri'], ['uri' => $thr_parent, 'uid' => $uid]); - if (!DBA::isResult($item)) { - $item = Post::selectFirst(['uri'], ['extid' => $thr_parent, 'uid' => $uid, 'gravity' => Item::GRAVITY_COMMENT]); - } - - if (DBA::isResult($item)) { - $postarray['thr-parent'] = $item['uri']; - $postarray['object-type'] = Activity\ObjectType::COMMENT; - } else { - $postarray['object-type'] = Activity\ObjectType::NOTE; - } - - // Is it me? - $own_id = DI::pConfig()->get($uid, 'twitter', 'own_id'); - - if ($post->user->id_str == $own_id) { - $self = Contact::selectFirst(['id', 'name', 'url', 'photo'], ['self' => true, 'uid' => $uid]); - if (DBA::isResult($self)) { - $contactid = $self['id']; - - $postarray['owner-id'] = Contact::getIdForURL($self['url']); - $postarray['owner-name'] = $self['name']; - $postarray['owner-link'] = $self['url']; - $postarray['owner-avatar'] = $self['photo']; - } else { - Logger::error('No self contact found', ['uid' => $uid]); - return []; - } - } - // Don't create accounts of people who just comment something - $create_user = false; - } else { - $postarray['object-type'] = Activity\ObjectType::NOTE; - } - - if ($contactid == 0) { - $contactid = twitter_fetch_contact($uid, $post->user, $create_user); - - $postarray['owner-id'] = twitter_get_contact($post->user); - $postarray['owner-name'] = $post->user->name; - $postarray['owner-link'] = 'https://twitter.com/' . $post->user->screen_name; - $postarray['owner-avatar'] = twitter_fix_avatar($post->user->profile_image_url_https); - } - - if (($contactid == 0) && !$only_existing_contact) { - $contactid = $self['id']; - } elseif ($contactid <= 0) { - Logger::info('Contact ID is zero or less than zero.'); - return []; - } - - $postarray['contact-id'] = $contactid; - $postarray['verb'] = Activity::POST; - $postarray['author-id'] = $postarray['owner-id']; - $postarray['author-name'] = $postarray['owner-name']; - $postarray['author-link'] = $postarray['owner-link']; - $postarray['author-avatar'] = $postarray['owner-avatar']; - $postarray['plink'] = 'https://twitter.com/' . $post->user->screen_name . '/status/' . $post->id_str; - $postarray['app'] = strip_tags($post->source); - - if ($post->user->protected) { - $postarray['private'] = Item::PRIVATE; - $postarray['allow_cid'] = '<' . $self['id'] . '>'; - } else { - $postarray['private'] = Item::UNLISTED; - $postarray['allow_cid'] = ''; - } - - if (!empty($post->full_text)) { - $postarray['body'] = $post->full_text; - } else { - $postarray['body'] = $post->text; - } - - // When the post contains links then use the correct object type - if (count($post->entities->urls) > 0) { - $postarray['object-type'] = Activity\ObjectType::BOOKMARK; - } - - // Search for media links - twitter_media_entities($post, $postarray, $uriId); - - $converted = twitter_expand_entities($postarray['body'], $post); - - // When the post contains external links then images or videos are just "decorations". - if (!empty($converted['urls'])) { - $postarray['post-type'] = Item::PT_NOTE; - } - - $postarray['body'] = $converted['body']; - $postarray['created'] = DateTimeFormat::utc($post->created_at); - $postarray['edited'] = DateTimeFormat::utc($post->created_at); - - if ($uriId > 0) { - twitter_store_tags($uriId, $converted['taglist']); - twitter_store_attachments($uriId, $post); - } - - if (!empty($post->place->name)) { - $postarray['location'] = $post->place->name; - } - if (!empty($post->place->full_name)) { - $postarray['location'] = $post->place->full_name; - } - if (!empty($post->geo->coordinates)) { - $postarray['coord'] = $post->geo->coordinates[0] . ' ' . $post->geo->coordinates[1]; - } - if (!empty($post->coordinates->coordinates)) { - $postarray['coord'] = $post->coordinates->coordinates[1] . ' ' . $post->coordinates->coordinates[0]; - } - if (!empty($post->retweeted_status)) { - $retweet = twitter_createpost($uid, $post->retweeted_status, $self, false, false, $noquote); - - if (empty($retweet)) { - return []; - } - - if (!$noquote) { - // Store the original tweet - Item::insert($retweet); - - // CHange the other post into a reshare activity - $postarray['verb'] = Activity::ANNOUNCE; - $postarray['gravity'] = Item::GRAVITY_ACTIVITY; - $postarray['object-type'] = Activity\ObjectType::NOTE; - - $postarray['thr-parent'] = $retweet['uri']; - } else { - $retweet['source'] = $postarray['source']; - $retweet['direction'] = $postarray['direction']; - $retweet['private'] = $postarray['private']; - $retweet['allow_cid'] = $postarray['allow_cid']; - $retweet['contact-id'] = $postarray['contact-id']; - $retweet['owner-id'] = $postarray['owner-id']; - $retweet['owner-name'] = $postarray['owner-name']; - $retweet['owner-link'] = $postarray['owner-link']; - $retweet['owner-avatar'] = $postarray['owner-avatar']; - - $postarray = $retweet; - } - } - - if (!empty($post->quoted_status)) { - if ($noquote) { - // To avoid recursive share blocks we just provide the link to avoid removing quote context. - $postarray['body'] .= "\n\nhttps://twitter.com/" . $post->quoted_status->user->screen_name . "/status/" . $post->quoted_status->id_str; - } else { - $quoted = twitter_createpost(0, $post->quoted_status, $self, false, false, true); - if (!empty($quoted)) { - Item::insert($quoted); - $post = Post::selectFirst(['guid', 'uri-id'], ['uri' => $quoted['uri'], 'uid' => 0]); - Logger::info('Stored quoted post', ['uid' => $uid, 'uri-id' => $uriId, 'post' => $post]); - - $postarray['body'] .= "\n" . BBCode::getShareOpeningTag( - $quoted['author-name'], - $quoted['author-link'], - $quoted['author-avatar'], - $quoted['plink'], - $quoted['created'], - $post['guid'] ?? '' - ); - - $postarray['body'] .= $quoted['body'] . '[/share]'; - } else { - // Quoted post author is blocked/ignored, so we just provide the link to avoid removing quote context. - $postarray['body'] .= "\n\nhttps://twitter.com/" . $post->quoted_status->user->screen_name . '/status/' . $post->quoted_status->id_str; - } - } - } - - return $postarray; -} - -/** - * Store tags and mentions - * - * @param integer $uriId - * @param array $taglist - * @return void - */ -function twitter_store_tags(int $uriId, array $taglist) -{ - foreach ($taglist as $tag) { - Tag::storeByHash($uriId, $tag[0], $tag[1], $tag[2]); - } -} - -function twitter_fetchparentposts(int $uid, $post, TwitterOAuth $connection, array $self) -{ - Logger::info('Fetching parent posts', ['user' => $uid, 'post' => $post->id_str]); - - $posts = []; - - while (!empty($post->in_reply_to_status_id_str)) { - try { - $post = twitter_statuses_show($post->in_reply_to_status_id_str, $connection); - } catch (TwitterOAuthException $e) { - Logger::notice('Error fetching parent post', ['uid' => $uid, 'post' => $post->id_str, 'message' => $e->getMessage()]); - break; - } - - if (empty($post)) { - Logger::info("twitter_fetchparentposts: Can't fetch post"); - break; - } - - if (empty($post->id_str)) { - Logger::info('twitter_fetchparentposts: This is not a post', ['post' => $post]); - break; - } - - if (Post::exists(['uri' => 'twitter::' . $post->id_str, 'uid' => $uid])) { - break; - } - - $posts[] = $post; - } - - Logger::info('twitter_fetchparentposts: Fetching ' . count($posts) . ' parents'); - - $posts = array_reverse($posts); - - if (!empty($posts)) { - foreach ($posts as $post) { - $postarray = twitter_createpost($uid, $post, $self, false, !DI::pConfig()->get($uid, 'twitter', 'create_user'), false); - - if (empty($postarray)) { - continue; - } - - $item = Item::insert($postarray); - - $postarray['id'] = $item; - - Logger::notice('twitter_fetchparentpost: User ' . $self['nick'] . ' posted parent timeline item ' . $item); - } - } -} - -/** - * Fetches the posts received by the Twitter user - * - * @param int $uid - * @return void - * @throws Exception - */ -function twitter_fetchhometimeline(int $uid): void -{ - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - $otoken = DI::pConfig()->get($uid, 'twitter', 'oauthtoken'); - $osecret = DI::pConfig()->get($uid, 'twitter', 'oauthsecret'); - $create_user = DI::pConfig()->get($uid, 'twitter', 'create_user'); - $mirror_posts = DI::pConfig()->get($uid, 'twitter', 'mirror_posts'); - - Logger::info('Fetching timeline', ['uid' => $uid]); - - $application_name = DI::config()->get('twitter', 'application_name'); - - if ($application_name == '') { - $application_name = DI::baseUrl()->getHostname(); - } - - $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); - - try { - $own_contact = twitter_fetch_own_contact($uid); - } catch (TwitterOAuthException $e) { - Logger::notice('Error fetching own contact', ['uid' => $uid, 'message' => $e->getMessage()]); - return; - } - - $contact = Contact::selectFirst(['nick'], ['id' => $own_contact, 'uid' => $uid]); - if (DBA::isResult($contact)) { - $own_id = $contact['nick']; - } else { - Logger::notice('Own twitter contact not found', ['uid' => $uid]); - return; - } - - $self = User::getOwnerDataById($uid); - if ($self === false) { - Logger::warning('Own contact not found', ['uid' => $uid]); - return; - } - - $parameters = [ - 'exclude_replies' => false, - 'trim_user' => false, - 'contributor_details' => true, - 'include_rts' => true, - 'tweet_mode' => 'extended', - 'include_ext_alt_text' => true, - //'count' => 200, - ]; - - // Fetching timeline - $lastid = DI::pConfig()->get($uid, 'twitter', 'lasthometimelineid'); - - $first_time = ($lastid == ''); - - if ($lastid != '') { - $parameters['since_id'] = $lastid; - } - - try { - $items = $connection->get('statuses/home_timeline', $parameters); - } catch (TwitterOAuthException $e) { - Logger::notice('Error fetching home timeline', ['uid' => $uid, 'message' => $e->getMessage()]); - return; - } - - if (!is_array($items)) { - Logger::notice('home timeline is no array', ['items' => $items]); - return; - } - - if (empty($items)) { - Logger::info('No new timeline content', ['uid' => $uid]); - return; - } - - $posts = array_reverse($items); - - Logger::notice('Processing timeline', ['lastid' => $lastid, 'uid' => $uid, 'count' => count($posts)]); - - if (count($posts)) { - foreach ($posts as $post) { - if ($post->id_str > $lastid) { - $lastid = $post->id_str; - DI::pConfig()->set($uid, 'twitter', 'lasthometimelineid', $lastid); - } - - if ($first_time) { - continue; - } - - if (stristr($post->source, $application_name) && $post->user->screen_name == $own_id) { - Logger::info('Skip previously sent post'); - continue; - } - - if ($mirror_posts && $post->user->screen_name == $own_id && $post->in_reply_to_status_id_str == '') { - Logger::info('Skip post that will be mirrored'); - continue; - } - - if ($post->in_reply_to_status_id_str != '') { - twitter_fetchparentposts($uid, $post, $connection, $self); - } - - Logger::info('Preparing post ' . $post->id_str . ' for user ' . $uid); - - $postarray = twitter_createpost($uid, $post, $self, $create_user, true, false); - - if (empty($postarray)) { - Logger::info('Empty post ' . $post->id_str . ' and user ' . $uid); - continue; - } - - $notify = false; - - if (empty($postarray['thr-parent'])) { - $contact = DBA::selectFirst('contact', [], ['id' => $postarray['contact-id'], 'self' => false]); - if (DBA::isResult($contact) && Item::isRemoteSelf($contact, $postarray)) { - $notify = Worker::PRIORITY_MEDIUM; - } - } - - $postarray['wall'] = (bool)$notify; - - $item = Item::insert($postarray, $notify); - $postarray['id'] = $item; - - Logger::notice('User ' . $uid . ' posted home timeline item ' . $item); - } - } - DI::pConfig()->set($uid, 'twitter', 'lasthometimelineid', $lastid); - - Logger::info('Last timeline ID for user ' . $uid . ' is now ' . $lastid); - - // Fetching mentions - $lastid = DI::pConfig()->get($uid, 'twitter', 'lastmentionid'); - - $first_time = ($lastid == ''); - - if ($lastid != '') { - $parameters['since_id'] = $lastid; - } - - try { - $items = $connection->get('statuses/mentions_timeline', $parameters); - } catch (TwitterOAuthException $e) { - Logger::notice('Error fetching mentions', ['uid' => $uid, 'message' => $e->getMessage()]); - return; - } - - if (!is_array($items)) { - Logger::notice('mentions are no arrays', ['items' => $items]); - return; - } - - $posts = array_reverse($items); - - Logger::info('Fetching mentions for user ' . $uid . ' ' . sizeof($posts) . ' items'); - - if (count($posts)) { - foreach ($posts as $post) { - if ($post->id_str > $lastid) { - $lastid = $post->id_str; - } - - if ($first_time) { - continue; - } - - if ($post->in_reply_to_status_id_str != '') { - twitter_fetchparentposts($uid, $post, $connection, $self); - } - - $postarray = twitter_createpost($uid, $post, $self, false, !$create_user, false); - - if (empty($postarray)) { - continue; - } - - $item = Item::insert($postarray); - - Logger::notice('User ' . $uid . ' posted mention timeline item ' . $item); - } - } - - DI::pConfig()->set($uid, 'twitter', 'lastmentionid', $lastid); - - Logger::info('Last mentions ID for user ' . $uid . ' is now ' . $lastid); -} - -function twitter_fetch_own_contact(int $uid) -{ - $ckey = DI::config()->get('twitter', 'consumerkey'); - $csecret = DI::config()->get('twitter', 'consumersecret'); - $otoken = DI::pConfig()->get($uid, 'twitter', 'oauthtoken'); - $osecret = DI::pConfig()->get($uid, 'twitter', 'oauthsecret'); - - $own_id = DI::pConfig()->get($uid, 'twitter', 'own_id'); - - $contact_id = 0; - - if ($own_id == '') { - $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); - - // Fetching user data - // get() may throw TwitterOAuthException, but we will catch it later - $user = $connection->get('account/verify_credentials'); - if (empty($user->id_str)) { - return false; - } - - DI::pConfig()->set($uid, 'twitter', 'own_id', $user->id_str); - - $contact_id = twitter_fetch_contact($uid, $user, true); - } else { - $contact = Contact::selectFirst(['id'], ['uid' => $uid, 'alias' => 'twitter::' . $own_id]); - if (DBA::isResult($contact)) { - $contact_id = $contact['id']; - } else { - DI::pConfig()->delete($uid, 'twitter', 'own_id'); - } - } - - return $contact_id; -} - -function twitter_is_retweet(int $uid, string $body): bool -{ - $body = trim($body); - - // Skip if it isn't a pure repeated messages - // Does it start with a share? - if (strpos($body, '[share') > 0) { - return false; - } - - // Does it end with a share? - if (strlen($body) > (strrpos($body, '[/share]') + 8)) { - return false; - } - - $attributes = preg_replace("/\[share(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism", "$1", $body); - // Skip if there is no shared message in there - if ($body == $attributes) { - return false; - } - - $link = ''; - preg_match("/link='(.*?)'/ism", $attributes, $matches); - if (!empty($matches[1])) { - $link = $matches[1]; - } - - preg_match('/link="(.*?)"/ism', $attributes, $matches); - if (!empty($matches[1])) { - $link = $matches[1]; - } - - $id = preg_replace("=https?://twitter.com/(.*)/status/(.*)=ism", "$2", $link); - if ($id == $link) { - return false; - } - return twitter_retweet($uid, $id); -} - -function twitter_retweet(int $uid, int $id, int $item_id = 0): bool -{ - Logger::info('Retweeting', ['user' => $uid, 'id' => $id]); - - $result = twitter_api_post('statuses/retweet', $id, $uid); - - Logger::info('Retweeted', ['user' => $uid, 'id' => $id, 'result' => $result]); - - if (!empty($item_id) && !empty($result->id_str)) { - Logger::notice('Update extid', ['id' => $item_id, 'extid' => $result->id_str]); - Item::update(['extid' => 'twitter::' . $result->id_str], ['id' => $item_id]); - } - - return !isset($result->errors); -} - -function twitter_update_mentions(string $body): string -{ - $URLSearchString = '^\[\]'; - $return = preg_replace_callback( - "/@\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", - function ($matches) { - if (strpos($matches[1], 'twitter.com')) { - $return = '@' . substr($matches[1], strrpos($matches[1], '/') + 1); - } else { - $return = $matches[2] . ' (' . $matches[1] . ')'; - } - - return $return; - }, - $body - ); - - return $return; -} - -function twitter_convert_share(array $attributes, array $author_contact, string $content, bool $is_quote_share): string -{ - if (empty($author_contact)) { - return $content . "\n\n" . $attributes['link']; - } - - if (!empty($author_contact['network']) && ($author_contact['network'] == Protocol::TWITTER)) { - $mention = '@' . $author_contact['nick']; - } else { - $mention = $author_contact['addr']; - } - - return ($is_quote_share ? "\n\n" : '' ) . 'RT ' . $mention . ': ' . $content . "\n\n" . $attributes['link']; -} diff --git a/twitter/twitter_sync.php b/twitter/twitter_sync.php deleted file mode 100644 index 073793e2..00000000 --- a/twitter/twitter_sync.php +++ /dev/null @@ -1,31 +0,0 @@ -get('system', 'maxloadavg', 50); - if (intval($load[0]) > $maxload) { - Logger::notice('load too high. Twitter sync deferred to next scheduled run.', ['current' => $load[0], 'max' => $maxload]); - return; - } - } - - if ($argc < 3) { - return; - } - - $mode = intval($argv[1]); - $uid = intval($argv[2]); - - if ($mode == 1) { - twitter_fetchtimeline($uid); - } elseif ($mode == 2) { - twitter_fetchhometimeline($uid); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/.github/dependabot.yml b/twitter/vendor/abraham/twitteroauth/.github/dependabot.yml deleted file mode 100644 index e064c4e0..00000000 --- a/twitter/vendor/abraham/twitteroauth/.github/dependabot.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: 2 -updates: - - package-ecosystem: npm - directory: '/' - schedule: - interval: daily - time: '11:00' - open-pull-requests-limit: 10 - - package-ecosystem: composer - directory: '/' - schedule: - interval: daily - time: '11:00' - open-pull-requests-limit: 10 diff --git a/twitter/vendor/abraham/twitteroauth/.github/workflows/lint.yaml b/twitter/vendor/abraham/twitteroauth/.github/workflows/lint.yaml deleted file mode 100644 index 6b718cd8..00000000 --- a/twitter/vendor/abraham/twitteroauth/.github/workflows/lint.yaml +++ /dev/null @@ -1,12 +0,0 @@ -name: Lint -on: push -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: 12 - - run: npm ci - - run: npm run lint diff --git a/twitter/vendor/abraham/twitteroauth/.github/workflows/test.yaml b/twitter/vendor/abraham/twitteroauth/.github/workflows/test.yaml deleted file mode 100644 index 78af4a8f..00000000 --- a/twitter/vendor/abraham/twitteroauth/.github/workflows/test.yaml +++ /dev/null @@ -1,18 +0,0 @@ -name: Test -on: push -jobs: - run: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - php-versions: ['7.2', '7.3', '7.4', '8.0'] - name: PHP ${{ matrix.php-versions }} - steps: - - uses: actions/checkout@v2 - - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-versions }} - - run: composer validate --no-interaction --strict - - run: composer install --no-interaction --prefer-dist - - run: npm test diff --git a/twitter/vendor/abraham/twitteroauth/.gitignore b/twitter/vendor/abraham/twitteroauth/.gitignore deleted file mode 100644 index f018d18a..00000000 --- a/twitter/vendor/abraham/twitteroauth/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.DS_Store -vendor -env -*.cache -node_modules diff --git a/twitter/vendor/abraham/twitteroauth/.prettierignore b/twitter/vendor/abraham/twitteroauth/.prettierignore deleted file mode 100644 index fb96e452..00000000 --- a/twitter/vendor/abraham/twitteroauth/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -vendor -composer.lock -tests/fixtures diff --git a/twitter/vendor/abraham/twitteroauth/.prettierrc.json b/twitter/vendor/abraham/twitteroauth/.prettierrc.json deleted file mode 100644 index cf18896b..00000000 --- a/twitter/vendor/abraham/twitteroauth/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "singleQuote": true, - "phpVersion": "7.2", - "trailingCommaPHP": true, - "braceStyle": "psr-2" -} diff --git a/twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md b/twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md deleted file mode 100644 index 80b42390..00000000 --- a/twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual attention or advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at abraham@abrah.am. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/twitter/vendor/abraham/twitteroauth/CONTRIBUTING.md b/twitter/vendor/abraham/twitteroauth/CONTRIBUTING.md deleted file mode 100644 index d941b2c9..00000000 --- a/twitter/vendor/abraham/twitteroauth/CONTRIBUTING.md +++ /dev/null @@ -1,21 +0,0 @@ -# Contributing to TwitterOAuth - -## 👏 Thanks! - -Thanks for your interest in contributing to TwitterOAuth. We appreciate contributions small and large. - -## 🌱 Grow - -If you have an idea for something new or would like to improve something. Please [open a quick issue](https://github.com/abraham/twitteroauth/issues/new) explaining the changes and the reasons for them. Everyone's time is important and we don't want you duplicating work someone else might already be working on. - -GitHub has [outlined instructions](https://help.github.com/articles/fork-a-repo/) for forking a repo. To work on an update to this repo, you will: - -- Fork the repo -- Make the changes -- Submit a pull request - -Once the [pull request](https://help.github.com/articles/about-pull-requests/) is reviewed, if the changes are approved they will be merged in to the project. - -## 🐛 Bugs - -Please [open a new issue](https://github.com/abraham/twitteroauth/issues/new) and details what you are trying to do, what is happening, and what you expect to happen. Err on the side of providing more details. diff --git a/twitter/vendor/abraham/twitteroauth/LICENSE.md b/twitter/vendor/abraham/twitteroauth/LICENSE.md deleted file mode 100644 index 3a631e0c..00000000 --- a/twitter/vendor/abraham/twitteroauth/LICENSE.md +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2009 Abraham Williams - http://abrah.am - abraham@abrah.am - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/twitter/vendor/abraham/twitteroauth/README.md b/twitter/vendor/abraham/twitteroauth/README.md deleted file mode 100644 index 5afe95f0..00000000 --- a/twitter/vendor/abraham/twitteroauth/README.md +++ /dev/null @@ -1,11 +0,0 @@ -TwitterOAuth [![Build Status](https://github.com/abraham/twitteroauth/workflows/Test/badge.svg)](https://github.com/abraham/twitteroauth/actions) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/abraham/twitteroauth/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/abraham/twitteroauth/?branch=master) [![Issues Count](https://img.shields.io/github/issues/abraham/twitteroauth.svg)](https://github.com/abraham/twitteroauth/issues) [![Latest Version](https://img.shields.io/packagist/v/abraham/twitteroauth.svg)](https://packagist.org/packages/abraham/twitteroauth) [![Downloads this Month](https://img.shields.io/packagist/dm/abraham/twitteroauth.svg)](https://packagist.org/packages/abraham/twitteroauth) - ---- - -

The most popular PHP library for Twitter's OAuth REST API.

- -See documentation at https://twitteroauth.com. - -PHP versions [listed](https://secure.php.net/supported-versions.php) as "active support" or "security fixes only" are supported. - -Twitter bird diff --git a/twitter/vendor/abraham/twitteroauth/autoload.php b/twitter/vendor/abraham/twitteroauth/autoload.php deleted file mode 100644 index 33797545..00000000 --- a/twitter/vendor/abraham/twitteroauth/autoload.php +++ /dev/null @@ -1,35 +0,0 @@ -=6.0.0", - "yoast/phpunit-polyfills": "^0.1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, - "files": [ - "lib/Assert/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "time": "2020-11-13T20:02:54+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "1.4.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ebd27a9866ae8254e873866f795491f02418c5a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ebd27a9866ae8254e873866f795491f02418c5a5", - "reference": "ebd27a9866ae8254e873866f795491f02418c5a5", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2020-08-19T10:27:58+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T18:47:58+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" - }, - { - "name": "pdepend/pdepend", - "version": "2.8.0", - "source": { - "type": "git", - "url": "https://github.com/pdepend/pdepend.git", - "reference": "c64472f8e76ca858c79ad9a4cf1e2734b3f8cc38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/c64472f8e76ca858c79ad9a4cf1e2734b3f8cc38", - "reference": "c64472f8e76ca858c79ad9a4cf1e2734b3f8cc38", - "shasum": "" - }, - "require": { - "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5", - "symfony/filesystem": "^2.3.0|^3|^4|^5" - }, - "require-dev": { - "easy-doc/easy-doc": "0.0.0 || ^1.2.3", - "gregwar/rst": "^1.0", - "phpunit/phpunit": "^4.8.35|^5.7", - "squizlabs/php_codesniffer": "^2.0.0" - }, - "bin": [ - "src/bin/pdepend" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "PDepend\\": "src/main/php/PDepend" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Official version of pdepend to be handled with Composer", - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend", - "type": "tidelift" - } - ], - "time": "2020-06-20T10:53:13+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2020-06-27T14:33:11+00:00" - }, - { - "name": "phar-io/version", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "time": "2020-11-30T09:21:21+00:00" - }, - { - "name": "php-vcr/php-vcr", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/php-vcr/php-vcr.git", - "reference": "c482b6e7da4135a04329ffe1e0528ccc3c082bc6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-vcr/php-vcr/zipball/c482b6e7da4135a04329ffe1e0528ccc3c082bc6", - "reference": "c482b6e7da4135a04329ffe1e0528ccc3c082bc6", - "shasum": "" - }, - "require": { - "beberlei/assert": "^3.2.5", - "ext-curl": "*", - "php": ">=7.2", - "symfony/event-dispatcher": "^2.4|^3.0|^4.0|^5.0", - "symfony/yaml": "~2.1|^3.0|^4.0|^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", - "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-beberlei-assert": "^0.12.0", - "phpunit/phpunit": "^7.4.3", - "sebastian/version": "^1.0.3|^2.0", - "thecodingmachine/phpstan-strict-rules": "^0.12" - }, - "type": "library", - "autoload": { - "psr-4": { - "VCR\\": "src/VCR/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adrian Philipp", - "email": "mail@adrian-philipp.com" - } - ], - "description": "Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.", - "time": "2020-11-22T13:11:57+00:00" - }, - { - "name": "php-vcr/phpunit-testlistener-vcr", - "version": "dev-php-8", - "source": { - "type": "git", - "url": "https://github.com/abraham/phpunit-testlistener-vcr", - "reference": "13a0e1213d3415e3c5cdda9450a4979b5867020a" - }, - "require": { - "php": "^7.1 | ^8.0", - "php-vcr/php-vcr": "^1.4" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "VCR\\PHPUnit\\TestListener\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Tests\\VCR\\PHPUnit\\TestListener\\": "tests/" - } - }, - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adrian Philipp", - "email": "mail@adrian-philipp.com" - } - ], - "description": "Integrates PHPUnit with PHP-VCR.", - "time": "2020-11-28T17:40:26+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-09-17T18:55:26+00:00" - }, - { - "name": "phpmd/phpmd", - "version": "2.9.1", - "source": { - "type": "git", - "url": "https://github.com/phpmd/phpmd.git", - "reference": "ce10831d4ddc2686c1348a98069771dd314534a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/ce10831d4ddc2686c1348a98069771dd314534a8", - "reference": "ce10831d4ddc2686c1348a98069771dd314534a8", - "shasum": "" - }, - "require": { - "composer/xdebug-handler": "^1.0", - "ext-xml": "*", - "pdepend/pdepend": "^2.7.1", - "php": ">=5.3.9" - }, - "require-dev": { - "easy-doc/easy-doc": "0.0.0 || ^1.3.2", - "ext-json": "*", - "ext-simplexml": "*", - "gregwar/rst": "^1.0", - "mikey179/vfsstream": "^1.6.4", - "phpunit/phpunit": "^4.8.36 || ^5.7.27", - "squizlabs/php_codesniffer": "^2.0" - }, - "bin": [ - "src/bin/phpmd" - ], - "type": "library", - "autoload": { - "psr-0": { - "PHPMD\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Manuel Pichler", - "email": "github@manuel-pichler.de", - "homepage": "https://github.com/manuelpichler", - "role": "Project Founder" - }, - { - "name": "Marc Würth", - "email": "ravage@bluewin.ch", - "homepage": "https://github.com/ravage84", - "role": "Project Maintainer" - }, - { - "name": "Other contributors", - "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", - "role": "Contributors" - } - ], - "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", - "homepage": "https://phpmd.org/", - "keywords": [ - "mess detection", - "mess detector", - "pdepend", - "phpmd", - "pmd" - ], - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd", - "type": "tidelift" - } - ], - "time": "2020-09-23T22:06:32+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.12.1", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0 <9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2020-09-29T09:10:42+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "7.0.13", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ad0dcd7b184e76f7198a1fe07685bfbec3ae911a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ad0dcd7b184e76f7198a1fe07685bfbec3ae911a", - "reference": "ad0dcd7b184e76f7198a1fe07685bfbec3ae911a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": ">=7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" - }, - "require-dev": { - "phpunit/phpunit": "^8.2.2" - }, - "suggest": { - "ext-xdebug": "^2.7.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:35:22+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357", - "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:25:21+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21T13:50:34+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "2.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:20:02+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "3.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "472b687829041c24b25f475e14c2f38a09edf1c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/472b687829041c24b25f475e14c2f38a09edf1c2", - "reference": "472b687829041c24b25f475e14c2f38a09edf1c2", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "abandoned": true, - "time": "2020-11-30T08:38:46+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "8.5.13", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e86be391a58104ef86037ba8a846524528d784e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e86be391a58104ef86037ba8a846524528d784e", - "reference": "8e86be391a58104ef86037ba8a846524528d784e", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.0", - "phar-io/manifest": "^2.0.1", - "phar-io/version": "^3.0.2", - "php": ">=7.2", - "phpspec/prophecy": "^1.10.3", - "phpunit/php-code-coverage": "^7.0.12", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.3", - "sebastian/exporter": "^3.1.2", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-12-01T04:53:52+00:00" - }, - { - "name": "psr/container", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "time": "2017-02-14T16:28:37+00:00" - }, - { - "name": "psr/log", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2020-03-23T09:12:05+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:15:22+00:00" - }, - { - "name": "sebastian/comparator", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:04:30+00:00" - }, - { - "name": "sebastian/diff", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:59:04+00:00" - }, - { - "name": "sebastian/environment", - "version": "4.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:53:42+00:00" - }, - { - "name": "sebastian/exporter", - "version": "3.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:47:53+00:00" - }, - { - "name": "sebastian/global-state", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", - "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^8.0" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:43:24+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:40:27+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:37:18+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:34:24+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:30:19+00:00" - }, - { - "name": "sebastian/type", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:25:11+00:00" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.5.8", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "time": "2020-10-23T02:01:07+00:00" - }, - { - "name": "symfony/config", - "version": "v4.4.13", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "043bf8652c307ebc23ce44047d215eec889d8850" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/043bf8652c307ebc23ce44047d215eec889d8850", - "reference": "043bf8652c307ebc23ce44047d215eec889d8850", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/filesystem": "^3.4|^4.0|^5.0", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/finder": "<3.4" - }, - "require-dev": { - "symfony/event-dispatcher": "^3.4|^4.0|^5.0", - "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/messenger": "^4.1|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Config Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-08-10T07:27:51+00:00" - }, - { - "name": "symfony/dependency-injection", - "version": "v4.4.13", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "384c2601e5a6228d60b041911d63f010e0885ffb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/384c2601e5a6228d60b041911d63f010e0885ffb", - "reference": "384c2601e5a6228d60b041911d63f010e0885ffb", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/container": "^1.0", - "symfony/service-contracts": "^1.1.6|^2" - }, - "conflict": { - "symfony/config": "<4.3|>=5.0", - "symfony/finder": "<3.4", - "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0" - }, - "require-dev": { - "symfony/config": "^4.3", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony DependencyInjection Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-09-01T17:42:15+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v4.4.16", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4204f13d2d0b7ad09454f221bb2195fccdf1fe98" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4204f13d2d0b7ad09454f221bb2195fccdf1fe98", - "reference": "4204f13d2d0b7ad09454f221bb2195fccdf1fe98", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/error-handler": "~3.4|~4.4", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T11:50:19+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", - "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-07-06T13:19:58+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v4.4.13", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "27575bcbc68db1f6d06218891296572c9b845704" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/27575bcbc68db1f6d06218891296572c9b845704", - "reference": "27575bcbc68db1f6d06218891296572c9b845704", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-08-21T17:19:37+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v1.1.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26", - "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/container": "^1.0" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-07-06T13:19:58+00:00" - }, - { - "name": "symfony/yaml", - "version": "v4.4.16", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "543cb4dbd45ed803f08a9a65f27fb149b5dd20c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/543cb4dbd45ed803f08a9a65f27fb149b5dd20c2", - "reference": "543cb4dbd45ed803f08a9a65f27fb149b5dd20c2", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T11:50:19+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2020-07-08T17:02:28+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "php-vcr/phpunit-testlistener-vcr": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "^7.2 || ^7.3 || ^7.4 || ^8.0", - "ext-curl": "*" - }, - "platform-dev": [], - "plugin-api-version": "2.0.0" -} diff --git a/twitter/vendor/abraham/twitteroauth/package-lock.json b/twitter/vendor/abraham/twitteroauth/package-lock.json deleted file mode 100644 index daafae0c..00000000 --- a/twitter/vendor/abraham/twitteroauth/package-lock.json +++ /dev/null @@ -1,511 +0,0 @@ -{ - "name": "twitteroauth", - "version": "0.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@prettier/plugin-php": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@prettier/plugin-php/-/plugin-php-0.16.0.tgz", - "integrity": "sha512-HG/FamMUtq4/9hZmeuvwy0BWmOr4m9OWacvLSUmmgUrQd4+TRZW7Nqs2MAJkwSNiBIgAKTt2Vw9PK+33Gxxx8g==", - "dev": true, - "requires": { - "linguist-languages": "^7.5.1", - "mem": "^8.0.0", - "php-parser": "3.0.2" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "concurrently": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", - "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "date-fns": "^2.0.1", - "lodash": "^4.17.15", - "read-pkg": "^4.0.1", - "rxjs": "^6.5.2", - "spawn-command": "^0.0.2-1", - "supports-color": "^6.1.0", - "tree-kill": "^1.2.2", - "yargs": "^13.3.0" - } - }, - "date-fns": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.15.0.tgz", - "integrity": "sha512-ZCPzAMJZn3rNUvvQIMlXhDr4A+Ar07eLeGsGREoWU19a3Pqf5oYa+ccd+B3F6XVtQY6HANMFdOQ8A+ipFnvJdQ==", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "linguist-languages": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/linguist-languages/-/linguist-languages-7.11.1.tgz", - "integrity": "sha512-+cRUk+1WTbydcdzipXQER2iilX+wMrb1LPkbkGuDP/IcGPJRDmOZH6Olf1iH6sHlHwPnJYiNJH39YsFCVZxvUQ==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "mem": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.0.0.tgz", - "integrity": "sha512-qrcJOe6uD+EW8Wrci1Vdiua/15Xw3n/QnaNXE7varnB6InxSk7nu3/i5jfy3S6kWxr8WYJ6R1o0afMUtvorTsA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - } - }, - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "php-parser": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.0.2.tgz", - "integrity": "sha512-a7y1+odEGsceLDLpu7oNyspZ0pK8FMWJOoim4/yd82AtnEZNLdCLZ67arnOQZ9K0lHJiSp4/7lVUpGELVxE14w==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true - }, - "prettier-plugin-package": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-package/-/prettier-plugin-package-1.3.0.tgz", - "integrity": "sha512-KPNHR/Jm2zTevBp1SnjzMnooO1BOQW2bixVbOp8flOJoW+dxdDwEncObfsKZdkjwrv6AIH4oWqm5EO/etDmK9Q==", - "dev": true - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/twitter/vendor/abraham/twitteroauth/package.json b/twitter/vendor/abraham/twitteroauth/package.json deleted file mode 100644 index 81746e3d..00000000 --- a/twitter/vendor/abraham/twitteroauth/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "twitteroauth", - "version": "0.0.0", - "description": "The most popular PHP library for use with the Twitter OAuth REST API.", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/abraham/twitteroauth.git" - }, - "author": "Abraham Williams ", - "homepage": "https://github.com/abraham/twitteroauth#readme", - "bugs": { - "url": "https://github.com/abraham/twitteroauth/issues" - }, - "scripts": { - "fix": "concurrently npm:fix:*", - "fix:phpcbf": "./vendor/bin/phpcbf src tests --standard=PSR12", - "fix:prettier": "prettier . --write", - "lint": "concurrently npm:lint:*", - "lint:phpcs": "./vendor/bin/phpcs src tests --standard=PSR12", - "lint:prettier": "prettier . --check", - "postinstall": "composer install --no-interaction", - "test": "./vendor/bin/phpunit" - }, - "keywords": [ - "twitter", - "api", - "oauth", - "rest", - "social", - "twitter-api", - "twitter-oauth" - ], - "dependencies": {}, - "devDependencies": { - "@prettier/plugin-php": "0.16.0", - "concurrently": "^5.3.0", - "prettier": "2.2.1", - "prettier-plugin-package": "1.3.0" - }, - "directories": { - "test": "tests" - } -} diff --git a/twitter/vendor/abraham/twitteroauth/phpmd.xml b/twitter/vendor/abraham/twitteroauth/phpmd.xml deleted file mode 100644 index ef45e75a..00000000 --- a/twitter/vendor/abraham/twitteroauth/phpmd.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - Keep TwitterOAuth source code clean. - - - - - - - - diff --git a/twitter/vendor/abraham/twitteroauth/phpunit.xml b/twitter/vendor/abraham/twitteroauth/phpunit.xml deleted file mode 100644 index d882f5bd..00000000 --- a/twitter/vendor/abraham/twitteroauth/phpunit.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - ./tests/ - - - - - - - diff --git a/twitter/vendor/abraham/twitteroauth/src/Config.php b/twitter/vendor/abraham/twitteroauth/src/Config.php deleted file mode 100644 index ab7ee2e4..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/Config.php +++ /dev/null @@ -1,109 +0,0 @@ - - */ -class Config -{ - /** @var int How long to wait for a response from the API */ - protected $timeout = 5; - /** @var int how long to wait while connecting to the API */ - protected $connectionTimeout = 5; - /** @var int How many times we retry request when API is down */ - protected $maxRetries = 0; - /** @var int Delay in seconds before we retry the request */ - protected $retriesDelay = 1; - - /** - * Decode JSON Response as associative Array - * - * @see http://php.net/manual/en/function.json-decode.php - * - * @var bool - */ - protected $decodeJsonAsArray = false; - /** @var string User-Agent header */ - protected $userAgent = 'TwitterOAuth (+https://twitteroauth.com)'; - /** @var array Store proxy connection details */ - protected $proxy = []; - - /** @var bool Whether to encode the curl requests with gzip or not */ - protected $gzipEncoding = true; - - /** @var integer Size for Chunked Uploads */ - protected $chunkSize = 250000; // 0.25 MegaByte - - /** - * Set the connection and response timeouts. - * - * @param int $connectionTimeout - * @param int $timeout - */ - public function setTimeouts(int $connectionTimeout, int $timeout): void - { - $this->connectionTimeout = $connectionTimeout; - $this->timeout = $timeout; - } - - /** - * Set the number of times to retry on error and how long between each. - * - * @param int $maxRetries - * @param int $retriesDelay - */ - public function setRetries(int $maxRetries, int $retriesDelay): void - { - $this->maxRetries = $maxRetries; - $this->retriesDelay = $retriesDelay; - } - - /** - * @param bool $value - */ - public function setDecodeJsonAsArray(bool $value): void - { - $this->decodeJsonAsArray = $value; - } - - /** - * @param string $userAgent - */ - public function setUserAgent(string $userAgent): void - { - $this->userAgent = $userAgent; - } - - /** - * @param array $proxy - */ - public function setProxy(array $proxy): void - { - $this->proxy = $proxy; - } - - /** - * Whether to encode the curl requests with gzip or not. - * - * @param boolean $gzipEncoding - */ - public function setGzipEncoding(bool $gzipEncoding): void - { - $this->gzipEncoding = $gzipEncoding; - } - - /** - * Set the size of each part of file for chunked media upload. - * - * @param int $value - */ - public function setChunkSize(int $value): void - { - $this->chunkSize = $value; - } -} diff --git a/twitter/vendor/abraham/twitteroauth/src/Consumer.php b/twitter/vendor/abraham/twitteroauth/src/Consumer.php deleted file mode 100644 index 3f3797a0..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/Consumer.php +++ /dev/null @@ -1,43 +0,0 @@ -key = $key; - $this->secret = $secret; - $this->callbackUrl = $callbackUrl; - } - - /** - * @return string - */ - public function __toString() - { - return "Consumer[key=$this->key,secret=$this->secret]"; - } -} diff --git a/twitter/vendor/abraham/twitteroauth/src/HmacSha1.php b/twitter/vendor/abraham/twitteroauth/src/HmacSha1.php deleted file mode 100644 index 922b2cf0..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/HmacSha1.php +++ /dev/null @@ -1,46 +0,0 @@ -getSignatureBaseString(); - - $parts = [$consumer->secret, null !== $token ? $token->secret : '']; - - $parts = Util::urlencodeRfc3986($parts); - $key = implode('&', $parts); - - return base64_encode(hash_hmac('sha1', $signatureBase, $key, true)); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/src/Request.php b/twitter/vendor/abraham/twitteroauth/src/Request.php deleted file mode 100644 index c3e1dc17..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/Request.php +++ /dev/null @@ -1,289 +0,0 @@ -parameters = $parameters; - $this->httpMethod = $httpMethod; - $this->httpUrl = $httpUrl; - } - - /** - * pretty much a helper function to set up the request - * - * @param Consumer $consumer - * @param Token $token - * @param string $httpMethod - * @param string $httpUrl - * @param array $parameters - * - * @return Request - */ - public static function fromConsumerAndToken( - Consumer $consumer, - Token $token = null, - string $httpMethod, - string $httpUrl, - array $parameters = [], - $json = false - ) { - $defaults = [ - 'oauth_version' => Request::$version, - 'oauth_nonce' => Request::generateNonce(), - 'oauth_timestamp' => time(), - 'oauth_consumer_key' => $consumer->key, - ]; - if (null !== $token) { - $defaults['oauth_token'] = $token->key; - } - - // The json payload is not included in the signature on json requests, - // therefore it shouldn't be included in the parameters array. - if ($json) { - $parameters = $defaults; - } else { - $parameters = array_merge($defaults, $parameters); - } - - return new Request($httpMethod, $httpUrl, $parameters); - } - - /** - * @param string $name - * @param string $value - */ - public function setParameter(string $name, string $value) - { - $this->parameters[$name] = $value; - } - - /** - * @param string $name - * - * @return string|null - */ - public function getParameter(string $name): ?string - { - return isset($this->parameters[$name]) - ? $this->parameters[$name] - : null; - } - - /** - * @return array - */ - public function getParameters(): array - { - return $this->parameters; - } - - /** - * @param string $name - */ - public function removeParameter(string $name): void - { - unset($this->parameters[$name]); - } - - /** - * The request parameters, sorted and concatenated into a normalized string. - * - * @return string - */ - public function getSignableParameters(): string - { - // Grab all parameters - $params = $this->parameters; - - // Remove oauth_signature if present - // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") - if (isset($params['oauth_signature'])) { - unset($params['oauth_signature']); - } - - return Util::buildHttpQuery($params); - } - - /** - * Returns the base string of this request - * - * The base string defined as the method, the url - * and the parameters (normalized), each urlencoded - * and the concated with &. - * - * @return string - */ - public function getSignatureBaseString(): string - { - $parts = [ - $this->getNormalizedHttpMethod(), - $this->getNormalizedHttpUrl(), - $this->getSignableParameters(), - ]; - - $parts = Util::urlencodeRfc3986($parts); - - return implode('&', $parts); - } - - /** - * Returns the HTTP Method in uppercase - * - * @return string - */ - public function getNormalizedHttpMethod(): string - { - return strtoupper($this->httpMethod); - } - - /** - * parses the url and rebuilds it to be - * scheme://host/path - * - * @return string - */ - public function getNormalizedHttpUrl(): string - { - $parts = parse_url($this->httpUrl); - - $scheme = $parts['scheme']; - $host = strtolower($parts['host']); - $path = $parts['path']; - - return "$scheme://$host$path"; - } - - /** - * Builds a url usable for a GET request - * - * @return string - */ - public function toUrl(): string - { - $postData = $this->toPostdata(); - $out = $this->getNormalizedHttpUrl(); - if ($postData) { - $out .= '?' . $postData; - } - return $out; - } - - /** - * Builds the data one would send in a POST request - * - * @return string - */ - public function toPostdata(): string - { - return Util::buildHttpQuery($this->parameters); - } - - /** - * Builds the Authorization: header - * - * @return string - * @throws TwitterOAuthException - */ - public function toHeader(): string - { - $first = true; - $out = 'Authorization: OAuth'; - foreach ($this->parameters as $k => $v) { - if (substr($k, 0, 5) != 'oauth') { - continue; - } - if (is_array($v)) { - throw new TwitterOAuthException( - 'Arrays not supported in headers' - ); - } - $out .= $first ? ' ' : ', '; - $out .= - Util::urlencodeRfc3986($k) . - '="' . - Util::urlencodeRfc3986($v) . - '"'; - $first = false; - } - return $out; - } - - /** - * @return string - */ - public function __toString(): string - { - return $this->toUrl(); - } - - /** - * @param SignatureMethod $signatureMethod - * @param Consumer $consumer - * @param Token $token - */ - public function signRequest( - SignatureMethod $signatureMethod, - Consumer $consumer, - Token $token = null - ) { - $this->setParameter( - 'oauth_signature_method', - $signatureMethod->getName() - ); - $signature = $this->buildSignature($signatureMethod, $consumer, $token); - $this->setParameter('oauth_signature', $signature); - } - - /** - * @param SignatureMethod $signatureMethod - * @param Consumer $consumer - * @param Token $token - * - * @return string - */ - public function buildSignature( - SignatureMethod $signatureMethod, - Consumer $consumer, - Token $token = null - ): string { - return $signatureMethod->buildSignature($this, $consumer, $token); - } - - /** - * @return string - */ - public static function generateNonce(): string - { - return md5(microtime() . mt_rand()); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/src/Response.php b/twitter/vendor/abraham/twitteroauth/src/Response.php deleted file mode 100644 index 1d5af5f0..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/Response.php +++ /dev/null @@ -1,109 +0,0 @@ - - */ -class Response -{ - /** @var string|null API path from the most recent request */ - private $apiPath; - /** @var int HTTP status code from the most recent request */ - private $httpCode = 0; - /** @var array HTTP headers from the most recent request */ - private $headers = []; - /** @var array|object Response body from the most recent request */ - private $body = []; - /** @var array HTTP headers from the most recent request that start with X */ - private $xHeaders = []; - - /** - * @param string $apiPath - */ - public function setApiPath(string $apiPath): void - { - $this->apiPath = $apiPath; - } - - /** - * @return string|null - */ - public function getApiPath(): ?string - { - return $this->apiPath; - } - - /** - * @param array|object $body - */ - public function setBody($body) - { - $this->body = $body; - } - - /** - * @return array|object|string - */ - public function getBody() - { - return $this->body; - } - - /** - * @param int $httpCode - */ - public function setHttpCode(int $httpCode): void - { - $this->httpCode = $httpCode; - } - - /** - * @return int - */ - public function getHttpCode(): int - { - return $this->httpCode; - } - - /** - * @param array $headers - */ - public function setHeaders(array $headers): void - { - foreach ($headers as $key => $value) { - if (substr($key, 0, 1) == 'x') { - $this->xHeaders[$key] = $value; - } - } - $this->headers = $headers; - } - - /** - * @return array - */ - public function getsHeaders(): array - { - return $this->headers; - } - - /** - * @param array $xHeaders - */ - public function setXHeaders(array $xHeaders = []): void - { - $this->xHeaders = $xHeaders; - } - - /** - * @return array - */ - public function getXHeaders(): array - { - return $this->xHeaders; - } -} diff --git a/twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php b/twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php deleted file mode 100644 index 9d726e8b..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php +++ /dev/null @@ -1,78 +0,0 @@ -buildSignature($request, $consumer, $token); - - // Check for zero length, although unlikely here - if (strlen($built) == 0 || strlen($signature) == 0) { - return false; - } - - if (strlen($built) != strlen($signature)) { - return false; - } - - // Avoid a timing leak with a (hopefully) time insensitive compare - $result = 0; - for ($i = 0; $i < strlen($signature); $i++) { - $result |= ord($built[$i]) ^ ord($signature[$i]); - } - - return $result == 0; - } -} diff --git a/twitter/vendor/abraham/twitteroauth/src/Token.php b/twitter/vendor/abraham/twitteroauth/src/Token.php deleted file mode 100644 index 2e87aad7..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/Token.php +++ /dev/null @@ -1,43 +0,0 @@ -key = $key; - $this->secret = $secret; - } - - /** - * Generates the basic string serialization of a token that a server - * would respond to request_token and access_token calls with - * - * @return string - */ - public function __toString(): string - { - return sprintf( - 'oauth_token=%s&oauth_token_secret=%s', - Util::urlencodeRfc3986($this->key), - Util::urlencodeRfc3986($this->secret) - ); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php deleted file mode 100644 index 9303d3da..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php +++ /dev/null @@ -1,727 +0,0 @@ - - */ -class TwitterOAuth extends Config -{ - private const API_VERSION = '1.1'; - private const API_HOST = 'https://api.twitter.com'; - private const UPLOAD_HOST = 'https://upload.twitter.com'; - - /** @var Response details about the result of the last request */ - private $response; - /** @var string|null Application bearer token */ - private $bearer; - /** @var Consumer Twitter application details */ - private $consumer; - /** @var Token|null User access token details */ - private $token; - /** @var HmacSha1 OAuth 1 signature type used by Twitter */ - private $signatureMethod; - /** @var int Number of attempts we made for the request */ - private $attempts = 0; - - /** - * Constructor - * - * @param string $consumerKey The Application Consumer Key - * @param string $consumerSecret The Application Consumer Secret - * @param string|null $oauthToken The Client Token (optional) - * @param string|null $oauthTokenSecret The Client Token Secret (optional) - */ - public function __construct( - string $consumerKey, - string $consumerSecret, - ?string $oauthToken = null, - ?string $oauthTokenSecret = null - ) { - $this->resetLastResponse(); - $this->signatureMethod = new HmacSha1(); - $this->consumer = new Consumer($consumerKey, $consumerSecret); - if (!empty($oauthToken) && !empty($oauthTokenSecret)) { - $this->setOauthToken($oauthToken, $oauthTokenSecret); - } - if (empty($oauthToken) && !empty($oauthTokenSecret)) { - $this->setBearer($oauthTokenSecret); - } - } - - /** - * @param string $oauthToken - * @param string $oauthTokenSecret - */ - public function setOauthToken( - string $oauthToken, - string $oauthTokenSecret - ): void { - $this->token = new Token($oauthToken, $oauthTokenSecret); - $this->bearer = null; - } - - /** - * @param string $oauthTokenSecret - */ - public function setBearer(string $oauthTokenSecret): void - { - $this->bearer = $oauthTokenSecret; - $this->token = null; - } - - /** - * @return string|null - */ - public function getLastApiPath(): ?string - { - return $this->response->getApiPath(); - } - - /** - * @return int - */ - public function getLastHttpCode(): int - { - return $this->response->getHttpCode(); - } - - /** - * @return array - */ - public function getLastXHeaders(): array - { - return $this->response->getXHeaders(); - } - - /** - * @return array|object|null - */ - public function getLastBody() - { - return $this->response->getBody(); - } - - /** - * Resets the last response cache. - */ - public function resetLastResponse(): void - { - $this->response = new Response(); - } - - /** - * Resets the attempts number. - */ - private function resetAttemptsNumber(): void - { - $this->attempts = 0; - } - - /** - * Delays the retries when they're activated. - */ - private function sleepIfNeeded(): void - { - if ($this->maxRetries && $this->attempts) { - sleep($this->retriesDelay); - } - } - - /** - * Make URLs for user browser navigation. - * - * @param string $path - * @param array $parameters - * - * @return string - */ - public function url(string $path, array $parameters): string - { - $this->resetLastResponse(); - $this->response->setApiPath($path); - $query = http_build_query($parameters); - return sprintf('%s/%s?%s', self::API_HOST, $path, $query); - } - - /** - * Make /oauth/* requests to the API. - * - * @param string $path - * @param array $parameters - * - * @return array - * @throws TwitterOAuthException - */ - public function oauth(string $path, array $parameters = []): array - { - $response = []; - $this->resetLastResponse(); - $this->response->setApiPath($path); - $url = sprintf('%s/%s', self::API_HOST, $path); - $result = $this->oAuthRequest($url, 'POST', $parameters); - - if ($this->getLastHttpCode() != 200) { - throw new TwitterOAuthException($result); - } - - parse_str($result, $response); - $this->response->setBody($response); - - return $response; - } - - /** - * Make /oauth2/* requests to the API. - * - * @param string $path - * @param array $parameters - * - * @return array|object - */ - public function oauth2(string $path, array $parameters = []) - { - $method = 'POST'; - $this->resetLastResponse(); - $this->response->setApiPath($path); - $url = sprintf('%s/%s', self::API_HOST, $path); - $request = Request::fromConsumerAndToken( - $this->consumer, - $this->token, - $method, - $url, - $parameters - ); - $authorization = - 'Authorization: Basic ' . - $this->encodeAppAuthorization($this->consumer); - $result = $this->request( - $request->getNormalizedHttpUrl(), - $method, - $authorization, - $parameters - ); - $response = JsonDecoder::decode($result, $this->decodeJsonAsArray); - $this->response->setBody($response); - return $response; - } - - /** - * Make GET requests to the API. - * - * @param string $path - * @param array $parameters - * - * @return array|object - */ - public function get(string $path, array $parameters = []) - { - return $this->http('GET', self::API_HOST, $path, $parameters, false); - } - - /** - * Make POST requests to the API. - * - * @param string $path - * @param array $parameters - * @param bool $json - * - * @return array|object - */ - public function post( - string $path, - array $parameters = [], - bool $json = false - ) { - return $this->http('POST', self::API_HOST, $path, $parameters, $json); - } - - /** - * Make DELETE requests to the API. - * - * @param string $path - * @param array $parameters - * - * @return array|object - */ - public function delete(string $path, array $parameters = []) - { - return $this->http('DELETE', self::API_HOST, $path, $parameters, false); - } - - /** - * Make PUT requests to the API. - * - * @param string $path - * @param array $parameters - * - * @return array|object - */ - public function put(string $path, array $parameters = []) - { - return $this->http('PUT', self::API_HOST, $path, $parameters, false); - } - - /** - * Upload media to upload.twitter.com. - * - * @param string $path - * @param array $parameters - * @param boolean $chunked - * - * @return array|object - */ - public function upload( - string $path, - array $parameters = [], - bool $chunked = false - ) { - if ($chunked) { - return $this->uploadMediaChunked($path, $parameters); - } else { - return $this->uploadMediaNotChunked($path, $parameters); - } - } - - /** - * Progression of media upload - * - * @param string $media_id - * - * @return array|object - */ - public function mediaStatus(string $media_id) - { - return $this->http( - 'GET', - self::UPLOAD_HOST, - 'media/upload', - [ - 'command' => 'STATUS', - 'media_id' => $media_id, - ], - false - ); - } - - /** - * Private method to upload media (not chunked) to upload.twitter.com. - * - * @param string $path - * @param array $parameters - * - * @return array|object - */ - private function uploadMediaNotChunked(string $path, array $parameters) - { - if ( - !is_readable($parameters['media']) || - ($file = file_get_contents($parameters['media'])) === false - ) { - throw new \InvalidArgumentException( - 'You must supply a readable file' - ); - } - $parameters['media'] = base64_encode($file); - return $this->http( - 'POST', - self::UPLOAD_HOST, - $path, - $parameters, - false - ); - } - - /** - * Private method to upload media (chunked) to upload.twitter.com. - * - * @param string $path - * @param array $parameters - * - * @return array|object - */ - private function uploadMediaChunked(string $path, array $parameters) - { - $init = $this->http( - 'POST', - self::UPLOAD_HOST, - $path, - $this->mediaInitParameters($parameters), - false - ); - // Append - $segmentIndex = 0; - $media = fopen($parameters['media'], 'rb'); - while (!feof($media)) { - $this->http( - 'POST', - self::UPLOAD_HOST, - 'media/upload', - [ - 'command' => 'APPEND', - 'media_id' => $init->media_id_string, - 'segment_index' => $segmentIndex++, - 'media_data' => base64_encode( - fread($media, $this->chunkSize) - ), - ], - false - ); - } - fclose($media); - // Finalize - $finalize = $this->http( - 'POST', - self::UPLOAD_HOST, - 'media/upload', - [ - 'command' => 'FINALIZE', - 'media_id' => $init->media_id_string, - ], - false - ); - return $finalize; - } - - /** - * Private method to get params for upload media chunked init. - * Twitter docs: https://dev.twitter.com/rest/reference/post/media/upload-init.html - * - * @param array $parameters - * - * @return array - */ - private function mediaInitParameters(array $parameters): array - { - $allowed_keys = [ - 'media_type', - 'additional_owners', - 'media_category', - 'shared', - ]; - $base = [ - 'command' => 'INIT', - 'total_bytes' => filesize($parameters['media']), - ]; - $allowed_parameters = array_intersect_key( - $parameters, - array_flip($allowed_keys) - ); - return array_merge($base, $allowed_parameters); - } - - /** - * Cleanup any parameters that are known not to work. - * - * @param array $parameters - * - * @return array - */ - private function cleanUpParameters(array $parameters) - { - foreach ($parameters as $key => $value) { - // PHP coerces `true` to `"1"` which some Twitter APIs don't like. - if (is_bool($value)) { - $parameters[$key] = var_export($value, true); - } - } - return $parameters; - } - - /** - * @param string $method - * @param string $host - * @param string $path - * @param array $parameters - * @param bool $json - * - * @return array|object - */ - private function http( - string $method, - string $host, - string $path, - array $parameters, - bool $json - ) { - $this->resetLastResponse(); - $this->resetAttemptsNumber(); - $url = sprintf('%s/%s/%s.json', $host, self::API_VERSION, $path); - $this->response->setApiPath($path); - if (!$json) { - $parameters = $this->cleanUpParameters($parameters); - } - return $this->makeRequests($url, $method, $parameters, $json); - } - - /** - * - * Make requests and retry them (if enabled) in case of Twitter's problems. - * - * @param string $method - * @param string $url - * @param string $method - * @param array $parameters - * @param bool $json - * - * @return array|object - */ - private function makeRequests( - string $url, - string $method, - array $parameters, - bool $json - ) { - do { - $this->sleepIfNeeded(); - $result = $this->oAuthRequest($url, $method, $parameters, $json); - $response = JsonDecoder::decode($result, $this->decodeJsonAsArray); - $this->response->setBody($response); - $this->attempts++; - // Retry up to our $maxRetries number if we get errors greater than 500 (over capacity etc) - } while ($this->requestsAvailable()); - - return $response; - } - - /** - * Checks if we have to retry request if API is down. - * - * @return bool - */ - private function requestsAvailable(): bool - { - return $this->maxRetries && - $this->attempts <= $this->maxRetries && - $this->getLastHttpCode() >= 500; - } - - /** - * Format and sign an OAuth / API request - * - * @param string $url - * @param string $method - * @param array $parameters - * @param bool $json - * - * @return string - * @throws TwitterOAuthException - */ - private function oAuthRequest( - string $url, - string $method, - array $parameters, - bool $json = false - ) { - $request = Request::fromConsumerAndToken( - $this->consumer, - $this->token, - $method, - $url, - $parameters, - $json - ); - if (array_key_exists('oauth_callback', $parameters)) { - // Twitter doesn't like oauth_callback as a parameter. - unset($parameters['oauth_callback']); - } - if ($this->bearer === null) { - $request->signRequest( - $this->signatureMethod, - $this->consumer, - $this->token - ); - $authorization = $request->toHeader(); - if (array_key_exists('oauth_verifier', $parameters)) { - // Twitter doesn't always work with oauth in the body and in the header - // and it's already included in the $authorization header - unset($parameters['oauth_verifier']); - } - } else { - $authorization = 'Authorization: Bearer ' . $this->bearer; - } - return $this->request( - $request->getNormalizedHttpUrl(), - $method, - $authorization, - $parameters, - $json - ); - } - - /** - * Set Curl options. - * - * @return array - */ - private function curlOptions(): array - { - $bundlePath = CaBundle::getSystemCaRootBundlePath(); - $options = [ - // CURLOPT_VERBOSE => true, - CURLOPT_CONNECTTIMEOUT => $this->connectionTimeout, - CURLOPT_HEADER => true, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_SSL_VERIFYHOST => 2, - CURLOPT_SSL_VERIFYPEER => true, - CURLOPT_TIMEOUT => $this->timeout, - CURLOPT_USERAGENT => $this->userAgent, - $this->curlCaOpt($bundlePath) => $bundlePath, - ]; - - if ($this->gzipEncoding) { - $options[CURLOPT_ENCODING] = 'gzip'; - } - - if (!empty($this->proxy)) { - $options[CURLOPT_PROXY] = $this->proxy['CURLOPT_PROXY']; - $options[CURLOPT_PROXYUSERPWD] = - $this->proxy['CURLOPT_PROXYUSERPWD']; - $options[CURLOPT_PROXYPORT] = $this->proxy['CURLOPT_PROXYPORT']; - $options[CURLOPT_PROXYAUTH] = CURLAUTH_BASIC; - $options[CURLOPT_PROXYTYPE] = CURLPROXY_HTTP; - } - - return $options; - } - - /** - * Make an HTTP request - * - * @param string $url - * @param string $method - * @param string $authorization - * @param array $postfields - * @param bool $json - * - * @return string - * @throws TwitterOAuthException - */ - private function request( - string $url, - string $method, - string $authorization, - array $postfields, - bool $json = false - ): string { - $options = $this->curlOptions(); - $options[CURLOPT_URL] = $url; - $options[CURLOPT_HTTPHEADER] = [ - 'Accept: application/json', - $authorization, - 'Expect:', - ]; - - switch ($method) { - case 'GET': - break; - case 'POST': - $options[CURLOPT_POST] = true; - if ($json) { - $options[CURLOPT_HTTPHEADER][] = - 'Content-type: application/json'; - $options[CURLOPT_POSTFIELDS] = json_encode($postfields); - } else { - $options[CURLOPT_POSTFIELDS] = Util::buildHttpQuery( - $postfields - ); - } - break; - case 'DELETE': - $options[CURLOPT_CUSTOMREQUEST] = 'DELETE'; - break; - case 'PUT': - $options[CURLOPT_CUSTOMREQUEST] = 'PUT'; - break; - } - - if ( - in_array($method, ['GET', 'PUT', 'DELETE']) && - !empty($postfields) - ) { - $options[CURLOPT_URL] .= '?' . Util::buildHttpQuery($postfields); - } - - $curlHandle = curl_init(); - curl_setopt_array($curlHandle, $options); - $response = curl_exec($curlHandle); - - // Throw exceptions on cURL errors. - if (curl_errno($curlHandle) > 0) { - $error = curl_error($curlHandle); - $errorNo = curl_errno($curlHandle); - curl_close($curlHandle); - throw new TwitterOAuthException($error, $errorNo); - } - - $this->response->setHttpCode( - curl_getinfo($curlHandle, CURLINFO_HTTP_CODE) - ); - $parts = explode("\r\n\r\n", $response); - $responseBody = array_pop($parts); - $responseHeader = array_pop($parts); - $this->response->setHeaders($this->parseHeaders($responseHeader)); - - curl_close($curlHandle); - - return $responseBody; - } - - /** - * Get the header info to store. - * - * @param string $header - * - * @return array - */ - private function parseHeaders(string $header): array - { - $headers = []; - foreach (explode("\r\n", $header) as $line) { - if (strpos($line, ':') !== false) { - [$key, $value] = explode(': ', $line); - $key = str_replace('-', '_', strtolower($key)); - $headers[$key] = trim($value); - } - } - return $headers; - } - - /** - * Encode application authorization header with base64. - * - * @param Consumer $consumer - * - * @return string - */ - private function encodeAppAuthorization(Consumer $consumer): string - { - $key = rawurlencode($consumer->key); - $secret = rawurlencode($consumer->secret); - return base64_encode($key . ':' . $secret); - } - - /** - * Get Curl CA option based on whether the given path is a directory or file. - * - * @param string $path - * @return int - */ - private function curlCaOpt(string $path): int - { - return is_dir($path) ? CURLOPT_CAPATH : CURLOPT_CAINFO; - } -} diff --git a/twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php deleted file mode 100644 index 03b8e3e9..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php +++ /dev/null @@ -1,12 +0,0 @@ - - */ -class TwitterOAuthException extends \Exception -{ -} diff --git a/twitter/vendor/abraham/twitteroauth/src/Util.php b/twitter/vendor/abraham/twitteroauth/src/Util.php deleted file mode 100644 index b1c09a95..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/Util.php +++ /dev/null @@ -1,122 +0,0 @@ - array('b','c'), 'd' => 'e') - * - * @param string $input - * - * @return array - */ - public static function parseParameters($input): array - { - if (!is_string($input)) { - return []; - } - - $pairs = explode('&', $input); - - $parameters = []; - foreach ($pairs as $pair) { - $split = explode('=', $pair, 2); - $parameter = Util::urldecodeRfc3986($split[0]); - $value = isset($split[1]) ? Util::urldecodeRfc3986($split[1]) : ''; - - if (isset($parameters[$parameter])) { - // We have already recieved parameter(s) with this name, so add to the list - // of parameters with this name - - if (is_scalar($parameters[$parameter])) { - // This is the first duplicate, so transform scalar (string) into an array - // so we can add the duplicates - $parameters[$parameter] = [$parameters[$parameter]]; - } - - $parameters[$parameter][] = $value; - } else { - $parameters[$parameter] = $value; - } - } - return $parameters; - } - - /** - * @param array $params - * - * @return string - */ - public static function buildHttpQuery(array $params): string - { - if (empty($params)) { - return ''; - } - - // Urlencode both keys and values - $keys = Util::urlencodeRfc3986(array_keys($params)); - $values = Util::urlencodeRfc3986(array_values($params)); - $params = array_combine($keys, $values); - - // Parameters are sorted by name, using lexicographical byte value ordering. - // Ref: Spec: 9.1.1 (1) - uksort($params, 'strcmp'); - - $pairs = []; - foreach ($params as $parameter => $value) { - if (is_array($value)) { - // If two or more parameters share the same name, they are sorted by their value - // Ref: Spec: 9.1.1 (1) - // June 12th, 2010 - changed to sort because of issue 164 by hidetaka - sort($value, SORT_STRING); - foreach ($value as $duplicateValue) { - $pairs[] = $parameter . '=' . $duplicateValue; - } - } else { - $pairs[] = $parameter . '=' . $value; - } - } - // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) - // Each name-value pair is separated by an '&' character (ASCII code 38) - return implode('&', $pairs); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php b/twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php deleted file mode 100644 index 989f3406..00000000 --- a/twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php +++ /dev/null @@ -1,29 +0,0 @@ - - */ -class JsonDecoder -{ - /** - * Decodes a JSON string to stdObject or associative array - * - * @param string $string - * @param bool $asArray - * - * @return array|object - */ - public static function decode(string $string, bool $asArray) - { - if ( - version_compare(PHP_VERSION, '5.4.0', '>=') && - !(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4) - ) { - return json_decode($string, $asArray, 512, JSON_BIGINT_AS_STRING); - } - - return json_decode($string, $asArray); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php b/twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php deleted file mode 100644 index b390620e..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php +++ /dev/null @@ -1,60 +0,0 @@ -assertEquals($this->name, $this->getClass()->getName()); - } - - /** - * @dataProvider signatureDataProvider - */ - public function testBuildSignature($expected, $request, $consumer, $token) - { - $this->assertEquals( - $expected, - $this->getClass()->buildSignature($request, $consumer, $token) - ); - } - - protected function getRequest() - { - return $this->getMockBuilder('Abraham\TwitterOAuth\Request') - ->disableOriginalConstructor() - ->getMock(); - } - - protected function getConsumer( - $key = null, - $secret = null, - $callbackUrl = null - ) { - return $this->getMockBuilder('Abraham\TwitterOAuth\Consumer') - ->setConstructorArgs([$key, $secret, $callbackUrl]) - ->getMock(); - } - - protected function getToken($key = null, $secret = null) - { - return $this->getMockBuilder('Abraham\TwitterOAuth\Token') - ->setConstructorArgs([$key, $secret]) - ->getMock(); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php b/twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php deleted file mode 100644 index 18a1de01..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php +++ /dev/null @@ -1,23 +0,0 @@ -assertEquals( - "Consumer[key=$key,secret=$secret]", - $consumer->__toString() - ); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php b/twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php deleted file mode 100644 index cd7887ed..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php +++ /dev/null @@ -1,47 +0,0 @@ -getRequest(), - $this->getConsumer(), - $this->getToken(), - ], - [ - 'EBw0gHngam3BTx8kfPfNNSyKem4=', - $this->getRequest(), - $this->getConsumer('key', 'secret'), - $this->getToken(), - ], - [ - 'kDsHFZzws2a5M6cAQjfpdNBo+v8=', - $this->getRequest(), - $this->getConsumer('key', 'secret'), - $this->getToken('key', 'secret'), - ], - [ - 'EBw0gHngam3BTx8kfPfNNSyKem4=', - $this->getRequest(), - $this->getConsumer('key', 'secret'), - null, - ], - ]; - } -} diff --git a/twitter/vendor/abraham/twitteroauth/tests/TokenTest.php b/twitter/vendor/abraham/twitteroauth/tests/TokenTest.php deleted file mode 100644 index 1863676e..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/TokenTest.php +++ /dev/null @@ -1,38 +0,0 @@ -assertEquals($expected, $token->__toString()); - } - - public function tokenProvider() - { - return [ - ['oauth_token=key&oauth_token_secret=secret', 'key', 'secret'], - [ - 'oauth_token=key%2Bkey&oauth_token_secret=secret', - 'key+key', - 'secret', - ], - [ - 'oauth_token=key~key&oauth_token_secret=secret', - 'key~key', - 'secret', - ], - ]; - } -} diff --git a/twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php b/twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php deleted file mode 100644 index 00244e1f..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php +++ /dev/null @@ -1,397 +0,0 @@ -twitter = new TwitterOAuth( - CONSUMER_KEY, - CONSUMER_SECRET, - ACCESS_TOKEN, - ACCESS_TOKEN_SECRET - ); - $this->userId = explode('-', ACCESS_TOKEN)[0]; - } - - public function testBuildClient() - { - $this->assertObjectHasAttribute('consumer', $this->twitter); - $this->assertObjectHasAttribute('token', $this->twitter); - } - - /** - * @vcr testSetOauthToken.json - */ - public function testSetOauthToken() - { - $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); - $twitter->setOauthToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET); - $this->assertObjectHasAttribute('consumer', $twitter); - $this->assertObjectHasAttribute('token', $twitter); - $twitter->get('friendships/show', [ - 'target_screen_name' => 'twitterapi', - ]); - $this->assertEquals(200, $twitter->getLastHttpCode()); - } - - /** - * @vcr testOauth2Token.json - */ - public function testOauth2Token() - { - $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); - $result = $twitter->oauth2('oauth2/token', [ - 'grant_type' => 'client_credentials', - ]); - $this->assertEquals(200, $twitter->getLastHttpCode()); - $this->assertObjectHasAttribute('token_type', $result); - $this->assertObjectHasAttribute('access_token', $result); - $this->assertEquals('bearer', $result->token_type); - return $result; - } - - /** - * @depends testOauth2Token - * @vcr testOauth2BearerToken.json - */ - public function testOauth2BearerToken($accessToken) - { - $twitter = new TwitterOAuth( - CONSUMER_KEY, - CONSUMER_SECRET, - null, - $accessToken->access_token - ); - $result = $twitter->get('statuses/user_timeline', [ - 'screen_name' => 'twitterapi', - ]); - $this->assertEquals(200, $twitter->getLastHttpCode()); - return $accessToken; - } - - /** - * @depends testOauth2BearerToken - * @vcr testOauth2TokenInvalidate.json - */ - public function testOauth2TokenInvalidate($accessToken) - { - $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); - // HACK: access_token is already urlencoded but gets urlencoded again breaking the invalidate request. - $result = $twitter->oauth2('oauth2/invalidate_token', [ - 'access_token' => urldecode($accessToken->access_token), - ]); - $this->assertEquals(200, $twitter->getLastHttpCode()); - $this->assertObjectHasAttribute('access_token', $result); - } - - /** - * @vcr testOauthRequestToken.json - */ - public function testOauthRequestToken() - { - $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); - $result = $twitter->oauth('oauth/request_token', [ - 'oauth_callback' => OAUTH_CALLBACK, - ]); - $this->assertEquals(200, $twitter->getLastHttpCode()); - $this->assertArrayHasKey('oauth_token', $result); - $this->assertArrayHasKey('oauth_token_secret', $result); - $this->assertArrayHasKey('oauth_callback_confirmed', $result); - $this->assertEquals('true', $result['oauth_callback_confirmed']); - return $result; - } - - /** - * @vcr testOauthRequestTokenException.json - */ - public function testOauthRequestTokenException() - { - $this->expectException( - \Abraham\TwitterOAuth\TwitterOAuthException::class - ); - $this->expectErrorMessage('Could not authenticate you'); - $twitter = new TwitterOAuth('CONSUMER_KEY', 'CONSUMER_SECRET'); - $result = $twitter->oauth('oauth/request_token', [ - 'oauth_callback' => OAUTH_CALLBACK, - ]); - } - - /** - * @depends testOauthRequestToken - * @vcr testOauthAccessTokenTokenException.json - */ - public function testOauthAccessTokenTokenException(array $requestToken) - { - // Can't test this without a browser logging into Twitter so check for the correct error instead. - $this->expectException( - \Abraham\TwitterOAuth\TwitterOAuthException::class - ); - $this->expectErrorMessage('Invalid oauth_verifier parameter'); - $twitter = new TwitterOAuth( - CONSUMER_KEY, - CONSUMER_SECRET, - $requestToken['oauth_token'], - $requestToken['oauth_token_secret'] - ); - $twitter->oauth('oauth/access_token', [ - 'oauth_verifier' => 'fake_oauth_verifier', - ]); - } - - public function testUrl() - { - $url = $this->twitter->url('oauth/authorize', [ - 'foo' => 'bar', - 'baz' => 'qux', - ]); - $this->assertEquals( - 'https://api.twitter.com/oauth/authorize?foo=bar&baz=qux', - $url - ); - } - - /** - * @vcr testGetAccountVerifyCredentials.json - */ - public function testGetAccountVerifyCredentials() - { - $user = $this->twitter->get('account/verify_credentials', [ - 'include_entities' => false, - 'include_email' => true, - ]); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - $this->assertObjectHasAttribute('email', $user); - } - - /** - * @vcr testSetProxy.json - */ - public function testSetProxy() - { - $this->twitter->setProxy([ - 'CURLOPT_PROXY' => PROXY, - 'CURLOPT_PROXYUSERPWD' => PROXYUSERPWD, - 'CURLOPT_PROXYPORT' => PROXYPORT, - ]); - $this->twitter->setTimeouts(60, 60); - $result = $this->twitter->get('account/verify_credentials'); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - $this->assertObjectHasAttribute('id', $result); - } - - /** - * @vcr testGetStatusesMentionsTimeline.json - */ - public function testGetStatusesMentionsTimeline() - { - $this->twitter->get('statuses/mentions_timeline'); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - } - - /** - * @vcr testGetSearchTweets.json - */ - public function testGetSearchTweets() - { - $result = $this->twitter->get('search/tweets', ['q' => 'twitter']); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - return $result->statuses; - } - - /** - * @depends testGetSearchTweets - * @vcr testGetSearchTweetsWithMaxId.json - */ - public function testGetSearchTweetsWithMaxId($statuses) - { - $maxId = array_pop($statuses)->id_str; - $this->twitter->get('search/tweets', [ - 'q' => 'twitter', - 'max_id' => $maxId, - ]); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - } - - /** - * @vcr testPostFavoritesCreate.json - */ - public function testPostFavoritesCreate() - { - $result = $this->twitter->post('favorites/create', [ - 'id' => '6242973112', - ]); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - } - - /** - * @depends testPostFavoritesCreate - * @vcr testPostFavoritesDestroy.json - */ - public function testPostFavoritesDestroy() - { - $this->twitter->post('favorites/destroy', ['id' => '6242973112']); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - } - - /** - * @vcr testPostDirectMessagesEventsNew.json - */ - public function testPostDirectMessagesEventsNew() - { - $data = [ - 'event' => [ - 'type' => 'message_create', - 'message_create' => [ - 'target' => [ - 'recipient_id' => $this->userId, - ], - 'message_data' => [ - 'text' => 'Hello World!', - ], - ], - ], - ]; - $result = $this->twitter->post( - 'direct_messages/events/new', - $data, - true - ); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - return $result; - } - - /** - * @depends testPostDirectMessagesEventsNew - * @vcr testDeleteDirectMessagesEventsDestroy.json - */ - public function testDeleteDirectMessagesEventsDestroy($message) - { - $this->twitter->delete('direct_messages/events/destroy', [ - 'id' => $message->event->id, - ]); - $this->assertEquals(204, $this->twitter->getLastHttpCode()); - } - - /** - * @vcr testPostStatusesUpdateWithMedia.json - */ - public function testPostStatusesUpdateWithMedia() - { - $this->twitter->setTimeouts(60, 60); - // Image source https://www.flickr.com/photos/titrans/8548825587/ - $file_path = __DIR__ . '/kitten.jpg'; - $result = $this->twitter->upload('media/upload', [ - 'media' => $file_path, - ]); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - $this->assertObjectHasAttribute('media_id_string', $result); - $parameters = [ - 'status' => 'Hello World ' . MOCK_TIME, - 'media_ids' => $result->media_id_string, - ]; - $result = $this->twitter->post('statuses/update', $parameters); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - $result = $this->twitter->post('statuses/destroy/' . $result->id_str); - return $result; - } - - /** - * @vcr testPostStatusUpdateWithInvalidMediaThrowsException.json - */ - public function testPostStatusUpdateWithInvalidMediaThrowsException() - { - $this->expectException(\InvalidArgumentException::class); - $file_path = __DIR__ . '/12345678900987654321.jpg'; - $this->assertFalse(\is_readable($file_path)); - $result = $this->twitter->upload('media/upload', [ - 'media' => $file_path, - ]); - } - - /** - * @vcr testPostStatusesUpdateWithMediaChunked.json - */ - public function testPostStatusesUpdateWithMediaChunked() - { - $this->twitter->setTimeouts(60, 30); - // Video source http://www.sample-videos.com/ - $file_path = __DIR__ . '/video.mp4'; - $result = $this->twitter->upload( - 'media/upload', - ['media' => $file_path, 'media_type' => 'video/mp4'], - true - ); - $this->assertEquals(201, $this->twitter->getLastHttpCode()); - $this->assertObjectHasAttribute('media_id_string', $result); - $parameters = [ - 'status' => 'Hello World ' . MOCK_TIME, - 'media_ids' => $result->media_id_string, - ]; - $result = $this->twitter->post('statuses/update', $parameters); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - $result = $this->twitter->post('statuses/destroy/' . $result->id_str); - return $result; - } - - /** - * @vcr testPostStatusesUpdateUtf8.json - */ - public function testPostStatusesUpdateUtf8() - { - $result = $this->twitter->post('statuses/update', [ - 'status' => 'xこんにちは世界 ' . MOCK_TIME, - ]); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - return $result; - } - - /** - * @depends testPostStatusesUpdateUtf8 - * @vcr testPostStatusesDestroy.json - */ - public function testPostStatusesDestroy($status) - { - $this->twitter->post('statuses/destroy/' . $status->id_str); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - } - - /** - * @vcr testLastResult.json - */ - public function testLastResult() - { - $this->twitter->get('search/tweets', ['q' => 'twitter']); - $this->assertEquals('search/tweets', $this->twitter->getLastApiPath()); - $this->assertEquals(200, $this->twitter->getLastHttpCode()); - $this->assertObjectHasAttribute( - 'statuses', - $this->twitter->getLastBody() - ); - } - - /** - * @depends testLastResult - * @vcr testResetLastResponse.json - */ - public function testResetLastResponse() - { - $this->twitter->resetLastResponse(); - $this->assertEquals('', $this->twitter->getLastApiPath()); - $this->assertEquals(0, $this->twitter->getLastHttpCode()); - $this->assertEquals([], $this->twitter->getLastBody()); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php b/twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php deleted file mode 100644 index dc6fa970..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php +++ /dev/null @@ -1,54 +0,0 @@ -assertEquals($expected, JsonDecoder::decode($input, $asArray)); - } - - public function jsonProvider() - { - return [ - ['[]', true, []], - ['[1,2,3]', true, [1, 2, 3]], - [ - '[{"id": 556179961825226750}]', - true, - [['id' => 556179961825226750]], - ], - ['[]', false, []], - ['[1,2,3]', false, [1, 2, 3]], - [ - '[{"id": 556179961825226750}]', - false, - [ - $this->getClass(function ($object) { - $object->id = 556179961825226750; - return $object; - }), - ], - ], - ]; - } - - /** - * @param callable $callable - * - * @return stdClass - */ - private function getClass(\Closure $callable) - { - $object = new \stdClass(); - - return $callable($object); - } -} diff --git a/twitter/vendor/abraham/twitteroauth/tests/bootstrap.php b/twitter/vendor/abraham/twitteroauth/tests/bootstrap.php deleted file mode 100644 index 23653e04..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/bootstrap.php +++ /dev/null @@ -1,10 +0,0 @@ -setStorage('json'); -\VCR\VCR::turnOn(); diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testDeleteDirectMessagesEventsDestroy.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testDeleteDirectMessagesEventsDestroy.json deleted file mode 100644 index b592bc87..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testDeleteDirectMessagesEventsDestroy.json +++ /dev/null @@ -1,40 +0,0 @@ -[{ - "request": { - "method": "DELETE", - "url": "https:\/\/api.twitter.com\/1.1\/direct_messages\/events\/destroy.json?id=1254206523385032714", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"dY4KEaTg5Y6Bv4JlofNCjoArx%2F4%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=NVQWGYLXFVSG2%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:52 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:52 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_asAbLVWtv6V2+ARemo0VNA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:52 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111220677678; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:52 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "5cbff6bc4105c0040c4738daac7adcf4", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "37", - "x-transaction": "00f02f6c00e12e76", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - } - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetAccountVerifyCredentials.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetAccountVerifyCredentials.json deleted file mode 100644 index f18db6b3..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetAccountVerifyCredentials.json +++ /dev/null @@ -1,46 +0,0 @@ -[{ - "request": { - "method": "GET", - "url": "https:\/\/api.twitter.com\/1.1\/account\/verify_credentials.json?include_email=true&include_entities=false", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"k8h8edFh9R2W3DCNJy5Nb07tWo0%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "773", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:11 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:11 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_PPOKPD3f\/ek9QM3+ySQxjw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786107181888587; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "7509696bc24b6d9d09d283b844a3c232", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-rate-limit-limit": "75", - "x-rate-limit-remaining": "73", - "x-rate-limit-reset": "1587861613", - "x-response-time": "46", - "x-transaction": "00cd4f6300163d67", - "x-twitter-response-tags": "BouncerExempt, BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":5,\"lang\":null,\"status\":{\"created_at\":\"Tue Dec 01 18:38:07 +0000 2009\",\"id\":6242973112,\"id_str\":\"6242973112\",\"text\":\"Test!\",\"truncated\":false,\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":2258,\"favorite_count\":75,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\",\"suspended\":false,\"needs_phone_verification\":false,\"email\":\"4braham+oauthlibtest@gmail.com\"}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetSearchTweets.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetSearchTweets.json deleted file mode 100644 index ba77e882..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetSearchTweets.json +++ /dev/null @@ -1,46 +0,0 @@ -[{ - "request": { - "method": "GET", - "url": "https:\/\/api.twitter.com\/1.1\/search\/tweets.json?q=twitter", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"qWYQHV5qw8biySQjoR59V9%2BDvOQ%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "14711", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:50 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:50 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_vWXo\/ERa4hzA0P4KdPAVsQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:50 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111008359713; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:50 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "79ad7f269cccf2e20522870f41e8f396", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-rate-limit-limit": "180", - "x-rate-limit-remaining": "176", - "x-rate-limit-reset": "1587861623", - "x-response-time": "150", - "x-transaction": "0030f8b1004d314d", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"statuses\":[{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206512068734977,\"id_str\":\"1254206512068734977\",\"text\":\"RT @a_albander: \\u0635\\u0648\\u0631\\u0629 \\u062a\\u062d\\u0643\\u064a \\u0627\\u0644\\u0643\\u062b\\u064a\\u0631 .. \\u0641\\u0645\\u0627 \\u0647\\u0648 \\u0627\\u0644\\u062a\\u0639\\u0644\\u064a\\u0642 \\u0627\\u0644\\u0623\\u062c\\u0645\\u0644\\u061f https:\\\/\\\/t.co\\\/GC8VzmAhVs\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"a_albander\",\"name\":\"\\u0639\\u0628\\u062f\\u0627\\u0644\\u0644\\u0647 \\u0627\\u0644\\u0628\\u0646\\u062f\\u0631\",\"id\":248141082,\"id_str\":\"248141082\",\"indices\":[3,14]}],\"urls\":[],\"media\":[{\"id\":1253870173766983690,\"id_str\":\"1253870173766983690\",\"indices\":[59,82],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWakR53WoAo9cdq.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWakR53WoAo9cdq.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/GC8VzmAhVs\",\"display_url\":\"pic.twitter.com\\\/GC8VzmAhVs\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/a_albander\\\/status\\\/1253870189361364994\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":1127,\"h\":750,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1127,\"h\":750,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"}},\"source_status_id\":1253870189361364994,\"source_status_id_str\":\"1253870189361364994\",\"source_user_id\":248141082,\"source_user_id_str\":\"248141082\"}]},\"extended_entities\":{\"media\":[{\"id\":1253870173766983690,\"id_str\":\"1253870173766983690\",\"indices\":[59,82],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWakR53WoAo9cdq.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWakR53WoAo9cdq.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/GC8VzmAhVs\",\"display_url\":\"pic.twitter.com\\\/GC8VzmAhVs\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/a_albander\\\/status\\\/1253870189361364994\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":1127,\"h\":750,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1127,\"h\":750,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"}},\"source_status_id\":1253870189361364994,\"source_status_id_str\":\"1253870189361364994\",\"source_user_id\":248141082,\"source_user_id_str\":\"248141082\"}]},\"metadata\":{\"iso_language_code\":\"ar\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2918893818,\"id_str\":\"2918893818\",\"name\":\"Nawaf\",\"screen_name\":\"ff3h1\",\"location\":\"\\u0627\\u0644\\u0645\\u0645\\u0644\\u0643\\u0629 \\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629 \\u0627\\u0644\\u0633\\u0639\\u0648\\u062f\\u064a\\u0629\",\"description\":\"\\u0641\\u064a \\u0642\\u0627\\u0646\\u0648\\u0646 \\u0643\\u0628\\u0631\\u064a\\u0627\\u0626\\u064a \\u0644\\u0627 \\u0627\\u062d\\u0628 \\u0623\\u0645\\u062a\\u0644\\u0627\\u0643 \\u0627\\u0644\\u0627\\u0634\\u064a\\u0627\\u0621 \\u0627\\u0644\\u0645\\u062a\\u0627\\u062d\\u0629 \\u0644\\u0644\\u062c\\u0645\\u064a\\u0639\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":139,\"friends_count\":483,\"listed_count\":0,\"created_at\":\"Thu Dec 04 19:03:08 +0000 2014\",\"favourites_count\":164,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":3875,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1136978136598552576\\\/j2Xkn-ZI_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1136978136598552576\\\/j2Xkn-ZI_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2918893818\\\/1575300039\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 02:15:23 +0000 2020\",\"id\":1253870189361364994,\"id_str\":\"1253870189361364994\",\"text\":\"\\u0635\\u0648\\u0631\\u0629 \\u062a\\u062d\\u0643\\u064a \\u0627\\u0644\\u0643\\u062b\\u064a\\u0631 .. \\u0641\\u0645\\u0627 \\u0647\\u0648 \\u0627\\u0644\\u062a\\u0639\\u0644\\u064a\\u0642 \\u0627\\u0644\\u0623\\u062c\\u0645\\u0644\\u061f https:\\\/\\\/t.co\\\/GC8VzmAhVs\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1253870173766983690,\"id_str\":\"1253870173766983690\",\"indices\":[43,66],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWakR53WoAo9cdq.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWakR53WoAo9cdq.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/GC8VzmAhVs\",\"display_url\":\"pic.twitter.com\\\/GC8VzmAhVs\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/a_albander\\\/status\\\/1253870189361364994\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":1127,\"h\":750,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1127,\"h\":750,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1253870173766983690,\"id_str\":\"1253870173766983690\",\"indices\":[43,66],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWakR53WoAo9cdq.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWakR53WoAo9cdq.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/GC8VzmAhVs\",\"display_url\":\"pic.twitter.com\\\/GC8VzmAhVs\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/a_albander\\\/status\\\/1253870189361364994\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":1127,\"h\":750,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1127,\"h\":750,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"ar\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":248141082,\"id_str\":\"248141082\",\"name\":\"\\u0639\\u0628\\u062f\\u0627\\u0644\\u0644\\u0647 \\u0627\\u0644\\u0628\\u0646\\u062f\\u0631\",\"screen_name\":\"a_albander\",\"location\":\"\",\"description\":\"\\u0645\\u0642\\u062f\\u0645 \\u0633\\u0639\\u0648\\u062f\\u064a \\u0648\\u0635\\u0627\\u0646\\u0639 \\u0645\\u062d\\u062a\\u0648\\u0649 \\u0641\\u064a @SkyNewsArabia\",\"url\":\"https:\\\/\\\/t.co\\\/7oZvCGmDJ8\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/7oZvCGmDJ8\",\"expanded_url\":\"https:\\\/\\\/www.snapchat.com\\\/add\\\/a_albander\",\"display_url\":\"snapchat.com\\\/add\\\/a_albander\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":233052,\"friends_count\":785,\"listed_count\":439,\"created_at\":\"Sun Feb 06 10:17:43 +0000 2011\",\"favourites_count\":472,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":8246,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"709397\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme6\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme6\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252038061355143168\\\/vxQX5Uzc_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252038061355143168\\\/vxQX5Uzc_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/248141082\\\/1587760417\",\"profile_link_color\":\"FF3300\",\"profile_sidebar_border_color\":\"86A4A6\",\"profile_sidebar_fill_color\":\"A0C5C7\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":1801,\"favorite_count\":3914,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ar\"},\"is_quote_status\":false,\"retweet_count\":1801,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ar\"},{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206512018440200,\"id_str\":\"1254206512018440200\",\"text\":\"RT @czarnepazury: szczere o\\u015bwiadczyny z mi\\u0142o\\u015bci?\\nnieeeeeeeee\\nchallenge 200k na ig i o\\u015bwiadczyny z tego powodu?\\ntaaaaaaaaak https:\\\/\\\/t.co\\\/3LN\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"czarnepazury\",\"name\":\"charlie\",\"id\":1170717318160293888,\"id_str\":\"1170717318160293888\",\"indices\":[3,16]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"pl\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":765089605087535104,\"id_str\":\"765089605087535104\",\"name\":\"golden rose\",\"screen_name\":\"goldenrosexoxo\",\"location\":\"Los Angeles, CA\",\"description\":\"better to be disliked for who you are than to be loved for who you are not\\ud83d\\ude42\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1391,\"friends_count\":801,\"listed_count\":9,\"created_at\":\"Mon Aug 15 07:35:51 +0000 2016\",\"favourites_count\":18227,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":24443,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1231352110639390722\\\/iua73CVa_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1231352110639390722\\\/iua73CVa_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/765089605087535104\\\/1582412196\",\"profile_link_color\":\"ABB8C2\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 17:46:20 +0000 2020\",\"id\":1254104469421375488,\"id_str\":\"1254104469421375488\",\"text\":\"szczere o\\u015bwiadczyny z mi\\u0142o\\u015bci?\\nnieeeeeeeee\\nchallenge 200k na ig i o\\u015bwiadczyny z tego powodu?\\ntaaaaaaaaak https:\\\/\\\/t.co\\\/3LNPi3Hjm1\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254103953920360449,\"id_str\":\"1254103953920360449\",\"indices\":[105,128],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254103953920360449\\\/pu\\\/img\\\/qDPP9qENdCSMX8Lv.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254103953920360449\\\/pu\\\/img\\\/qDPP9qENdCSMX8Lv.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3LNPi3Hjm1\",\"display_url\":\"pic.twitter.com\\\/3LNPi3Hjm1\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/czarnepazury\\\/status\\\/1254104469421375488\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254103953920360449,\"id_str\":\"1254103953920360449\",\"indices\":[105,128],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254103953920360449\\\/pu\\\/img\\\/qDPP9qENdCSMX8Lv.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254103953920360449\\\/pu\\\/img\\\/qDPP9qENdCSMX8Lv.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3LNPi3Hjm1\",\"display_url\":\"pic.twitter.com\\\/3LNPi3Hjm1\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/czarnepazury\\\/status\\\/1254104469421375488\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[9,16],\"duration_millis\":22633,\"variants\":[{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254103953920360449\\\/pu\\\/vid\\\/360x640\\\/ktAHBz-gKCvmq_hU.mp4?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254103953920360449\\\/pu\\\/vid\\\/540x960\\\/wRH0cIrDyP0vCII8.mp4?tag=10\"},{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254103953920360449\\\/pu\\\/pl\\\/_VqskdApBVQQMRhB.m3u8?tag=10\"},{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254103953920360449\\\/pu\\\/vid\\\/320x568\\\/9DGpCwh-deks4BME.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"metadata\":{\"iso_language_code\":\"pl\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1170717318160293888,\"id_str\":\"1170717318160293888\",\"name\":\"charlie\",\"screen_name\":\"czarnepazury\",\"location\":\"\",\"description\":\"she wears a chain and destroyed my heart\\ndon't know how to tell my mom that it's you\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":4401,\"friends_count\":4087,\"listed_count\":43,\"created_at\":\"Sun Sep 08 15:15:47 +0000 2019\",\"favourites_count\":20946,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":9757,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1245471451303510033\\\/aZ06Lbpc_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1245471451303510033\\\/aZ06Lbpc_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1170717318160293888\\\/1574942236\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":49,\"favorite_count\":378,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"pl\"},\"is_quote_status\":false,\"retweet_count\":49,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"pl\"},{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206511880056837,\"id_str\":\"1254206511880056837\",\"text\":\"RT @NazareAmarga: *25 de abril*\\n\\neu: https:\\\/\\\/t.co\\\/g5WrhWuyLU\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"NazareAmarga\",\"name\":\"Nazar\\u00e9 Amarga\",\"id\":1072573028,\"id_str\":\"1072573028\",\"indices\":[3,16]}],\"urls\":[],\"media\":[{\"id\":1254098292553777152,\"id_str\":\"1254098292553777152\",\"indices\":[37,60],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdzwKkXgAAhCMx.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdzwKkXgAAhCMx.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/g5WrhWuyLU\",\"display_url\":\"pic.twitter.com\\\/g5WrhWuyLU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/NazareAmarga\\\/status\\\/1254098297557602304\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1080,\"h\":810,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":810,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"}},\"source_status_id\":1254098297557602304,\"source_status_id_str\":\"1254098297557602304\",\"source_user_id\":1072573028,\"source_user_id_str\":\"1072573028\"}]},\"extended_entities\":{\"media\":[{\"id\":1254098292553777152,\"id_str\":\"1254098292553777152\",\"indices\":[37,60],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdzwKkXgAAhCMx.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdzwKkXgAAhCMx.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/g5WrhWuyLU\",\"display_url\":\"pic.twitter.com\\\/g5WrhWuyLU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/NazareAmarga\\\/status\\\/1254098297557602304\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1080,\"h\":810,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":810,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"}},\"source_status_id\":1254098297557602304,\"source_status_id_str\":\"1254098297557602304\",\"source_user_id\":1072573028,\"source_user_id_str\":\"1072573028\"}]},\"metadata\":{\"iso_language_code\":\"pt\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1245833334984527875,\"id_str\":\"1245833334984527875\",\"name\":\"Elis\\ud83d\\udc3e\\u2661\",\"screen_name\":\"elis_fferri\",\"location\":\"\",\"description\":\"Metamorfose... borbolete-se!\\ud83c\\udf37\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":15,\"friends_count\":187,\"listed_count\":0,\"created_at\":\"Thu Apr 02 21:59:57 +0000 2020\",\"favourites_count\":214,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":102,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1245833483966177286\\\/Z__Ipnaf_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1245833483966177286\\\/Z__Ipnaf_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1245833334984527875\\\/1585875170\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 17:21:48 +0000 2020\",\"id\":1254098297557602304,\"id_str\":\"1254098297557602304\",\"text\":\"*25 de abril*\\n\\neu: https:\\\/\\\/t.co\\\/g5WrhWuyLU\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254098292553777152,\"id_str\":\"1254098292553777152\",\"indices\":[19,42],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdzwKkXgAAhCMx.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdzwKkXgAAhCMx.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/g5WrhWuyLU\",\"display_url\":\"pic.twitter.com\\\/g5WrhWuyLU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/NazareAmarga\\\/status\\\/1254098297557602304\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1080,\"h\":810,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":810,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254098292553777152,\"id_str\":\"1254098292553777152\",\"indices\":[19,42],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdzwKkXgAAhCMx.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdzwKkXgAAhCMx.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/g5WrhWuyLU\",\"display_url\":\"pic.twitter.com\\\/g5WrhWuyLU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/NazareAmarga\\\/status\\\/1254098297557602304\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1080,\"h\":810,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":810,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"pt\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1072573028,\"id_str\":\"1072573028\",\"name\":\"Nazar\\u00e9 Amarga\",\"screen_name\":\"NazareAmarga\",\"location\":\"\",\"description\":\"loirona gostosa do twitter nazare.amarga@mynd8.com.br\",\"url\":\"https:\\\/\\\/t.co\\\/J2ScZ6Orzt\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/J2ScZ6Orzt\",\"expanded_url\":\"http:\\\/\\\/instagram.com\\\/NazareAmarga\",\"display_url\":\"instagram.com\\\/NazareAmarga\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":751542,\"friends_count\":311,\"listed_count\":128,\"created_at\":\"Wed Jan 09 01:59:48 +0000 2013\",\"favourites_count\":575,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":5823,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/580446627695038464\\\/iV5737Qs_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/580446627695038464\\\/iV5737Qs_normal.jpg\",\"profile_link_color\":\"DD2E44\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":879,\"favorite_count\":3433,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"pt\"},\"is_quote_status\":false,\"retweet_count\":879,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"pt\"},{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206511749816321,\"id_str\":\"1254206511749816321\",\"text\":\"RT @tbEsnlhUJDDaIG9: \\u0e44\\u0e21\\u0e48\\u0e21\\u0e35\\u0e2d\\u0e35\\u0e01\\u0e41\\u0e25\\u0e49\\u0e27\\u0e21\\u0e31\\u0e19\\u0e08\\u0e1a\\u0e44\\u0e1b\\u0e15\\u0e31\\u0e49\\u0e07\\u0e41\\u0e15\\u0e48\\u0e40\\u0e21\\u0e37\\u0e48\\u0e2d\\u0e27\\u0e32\\u0e19\\u0e41\\u0e25\\u0e49\\u0e27 \\u0e22\\u0e31\\u0e07\\u0e44\\u0e07\\u0e01\\u0e47\\u0e23\\u0e31\\u0e01\\u0e41\\u0e25\\u0e30\\u0e04\\u0e34\\u0e14\\u0e16\\u0e36\\u0e07\\u0e40\\u0e2b\\u0e21\\u0e37\\u0e2d\\u0e19\\u0e40\\u0e14\\u0e34\\u0e21 \\u0e21\\u0e31\\u0e19\\u0e04\\u0e37\\u0e2d\\u0e04\\u0e27\\u0e32\\u0e21\\u0e17\\u0e23\\u0e07\\u0e08\\u0e33\\u0e17\\u0e35\\u0e48\\u0e14\\u0e35\\u0e17\\u0e35\\u0e48\\u0e2a\\u0e38\\u0e14\\u0e02\\u0e2d\\u0e07\\u0e2b\\u0e19\\u0e39\\u0e19\\u0e30\\u0e04\\u0e30300363\\ud83d\\ude2d\\n.\\n.\\n.\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"tbEsnlhUJDDaIG9\",\"name\":\"\\u0e04\\u0e27\\u0e32\\u0e21\\u0e17\\u0e23\\u0e07\\u0e08\\u0e33 |\\u0e25\\u0e34\\u0e21\\u0e34\\u0e15\\u0e1f\\u0e2d\\u0e25\",\"id\":1243314857253859328,\"id_str\":\"1243314857253859328\",\"indices\":[3,19]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"th\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1253687691935281152,\"id_str\":\"1253687691935281152\",\"name\":\"\\u0e17\\u0e48\\u0e32\\u0e40\\u0e23\\u0e37\\u0e2d\",\"screen_name\":\"Thareux90\",\"location\":\"\\ud83d\\udd87\\ufe0f\",\"description\":\"\\u0e1c\\u0e21\\u0e21\\u0e32\\u0e15\\u0e32\\u0e21\\u0e2b\\u0e32\\u0e1c\\u0e39\\u0e49\\u0e2b\\u0e0d\\u0e34\\u0e07\\u200b\\u0e04\\u0e19\\u0e19\\u0e36\\u0e07\\u200b\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":122,\"friends_count\":45,\"listed_count\":2,\"created_at\":\"Fri Apr 24 14:10:25 +0000 2020\",\"favourites_count\":58,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":693,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253860559633563648\\\/6LMU_KUb_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253860559633563648\\\/6LMU_KUb_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1253687691935281152\\\/1587778627\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 23:39:19 +0000 2020\",\"id\":1254193301424467968,\"id_str\":\"1254193301424467968\",\"text\":\"\\u0e44\\u0e21\\u0e48\\u0e21\\u0e35\\u0e2d\\u0e35\\u0e01\\u0e41\\u0e25\\u0e49\\u0e27\\u0e21\\u0e31\\u0e19\\u0e08\\u0e1a\\u0e44\\u0e1b\\u0e15\\u0e31\\u0e49\\u0e07\\u0e41\\u0e15\\u0e48\\u0e40\\u0e21\\u0e37\\u0e48\\u0e2d\\u0e27\\u0e32\\u0e19\\u0e41\\u0e25\\u0e49\\u0e27 \\u0e22\\u0e31\\u0e07\\u0e44\\u0e07\\u0e01\\u0e47\\u0e23\\u0e31\\u0e01\\u0e41\\u0e25\\u0e30\\u0e04\\u0e34\\u0e14\\u0e16\\u0e36\\u0e07\\u0e40\\u0e2b\\u0e21\\u0e37\\u0e2d\\u0e19\\u0e40\\u0e14\\u0e34\\u0e21 \\u0e21\\u0e31\\u0e19\\u0e04\\u0e37\\u0e2d\\u0e04\\u0e27\\u0e32\\u0e21\\u0e17\\u0e23\\u0e07\\u0e08\\u0e33\\u0e17\\u0e35\\u0e48\\u0e14\\u0e35\\u0e17\\u0e35\\u0e48\\u0e2a\\u0e38\\u0e14\\u0e02\\u0e2d\\u0e07\\u0e2b\\u0e19\\u0e39\\u0e19\\u0e30\\u0e04\\u0e30300363\\ud83d\\ude2d\\n.\\u2026 https:\\\/\\\/t.co\\\/tDN8lxtvs2\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/tDN8lxtvs2\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254193301424467968\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[116,139]}]},\"metadata\":{\"iso_language_code\":\"th\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1243314857253859328,\"id_str\":\"1243314857253859328\",\"name\":\"\\u0e04\\u0e27\\u0e32\\u0e21\\u0e17\\u0e23\\u0e07\\u0e08\\u0e33 |\\u0e25\\u0e34\\u0e21\\u0e34\\u0e15\\u0e1f\\u0e2d\\u0e25\",\"screen_name\":\"tbEsnlhUJDDaIG9\",\"location\":\"\",\"description\":\"30.03.63\\u2764\\ufe0f \\u0e41\\u0e04\\u0e48\\u0e04\\u0e27\\u0e32\\u0e21\\u0e17\\u0e23\\u0e07\\u0e08\\u0e33\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":28,\"friends_count\":1196,\"listed_count\":0,\"created_at\":\"Thu Mar 26 23:12:32 +0000 2020\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":22,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243315119410393088\\\/uYlCNC8s_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243315119410393088\\\/uYlCNC8s_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1243314857253859328\\\/1585264521\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":15,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"th\"},\"is_quote_status\":false,\"retweet_count\":15,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"th\"},{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206511649357824,\"id_str\":\"1254206511649357824\",\"text\":\"RT @escritosrame: https:\\\/\\\/t.co\\\/WNNMRHf2G0\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"escritosrame\",\"name\":\"\\ud835\\udc93\\ud835\\udc82\\ud835\\udc8e\\ud835\\udc86\",\"id\":1032743790761705472,\"id_str\":\"1032743790761705472\",\"indices\":[3,16]}],\"urls\":[],\"media\":[{\"id\":1254140985191301121,\"id_str\":\"1254140985191301121\",\"indices\":[18,41],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWealNCWAAEVQIV.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWealNCWAAEVQIV.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/WNNMRHf2G0\",\"display_url\":\"pic.twitter.com\\\/WNNMRHf2G0\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/escritosrame\\\/status\\\/1254140992330096640\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":382,\"resize\":\"fit\"},\"large\":{\"w\":1125,\"h\":632,\"resize\":\"fit\"},\"medium\":{\"w\":1125,\"h\":632,\"resize\":\"fit\"}},\"source_status_id\":1254140992330096640,\"source_status_id_str\":\"1254140992330096640\",\"source_user_id\":1032743790761705472,\"source_user_id_str\":\"1032743790761705472\"}]},\"extended_entities\":{\"media\":[{\"id\":1254140985191301121,\"id_str\":\"1254140985191301121\",\"indices\":[18,41],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWealNCWAAEVQIV.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWealNCWAAEVQIV.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/WNNMRHf2G0\",\"display_url\":\"pic.twitter.com\\\/WNNMRHf2G0\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/escritosrame\\\/status\\\/1254140992330096640\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":382,\"resize\":\"fit\"},\"large\":{\"w\":1125,\"h\":632,\"resize\":\"fit\"},\"medium\":{\"w\":1125,\"h\":632,\"resize\":\"fit\"}},\"source_status_id\":1254140992330096640,\"source_status_id_str\":\"1254140992330096640\",\"source_user_id\":1032743790761705472,\"source_user_id_str\":\"1032743790761705472\"}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":4097079975,\"id_str\":\"4097079975\",\"name\":\"Alma Pino\",\"screen_name\":\"apinof95\",\"location\":\"Merida,Espa\\u00f1a.\",\"description\":\"where there is love, there is life \\u00a9\\u2764\\ufe0f\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":188,\"friends_count\":182,\"listed_count\":0,\"created_at\":\"Mon Nov 02 12:17:07 +0000 2015\",\"favourites_count\":517,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":1587,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253844466949070858\\\/mRZ1N0IU_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253844466949070858\\\/mRZ1N0IU_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/4097079975\\\/1585421884\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 20:11:28 +0000 2020\",\"id\":1254140992330096640,\"id_str\":\"1254140992330096640\",\"text\":\"https:\\\/\\\/t.co\\\/WNNMRHf2G0\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254140985191301121,\"id_str\":\"1254140985191301121\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWealNCWAAEVQIV.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWealNCWAAEVQIV.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/WNNMRHf2G0\",\"display_url\":\"pic.twitter.com\\\/WNNMRHf2G0\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/escritosrame\\\/status\\\/1254140992330096640\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":382,\"resize\":\"fit\"},\"large\":{\"w\":1125,\"h\":632,\"resize\":\"fit\"},\"medium\":{\"w\":1125,\"h\":632,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254140985191301121,\"id_str\":\"1254140985191301121\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWealNCWAAEVQIV.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWealNCWAAEVQIV.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/WNNMRHf2G0\",\"display_url\":\"pic.twitter.com\\\/WNNMRHf2G0\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/escritosrame\\\/status\\\/1254140992330096640\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":382,\"resize\":\"fit\"},\"large\":{\"w\":1125,\"h\":632,\"resize\":\"fit\"},\"medium\":{\"w\":1125,\"h\":632,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1032743790761705472,\"id_str\":\"1032743790761705472\",\"name\":\"\\ud835\\udc93\\ud835\\udc82\\ud835\\udc8e\\ud835\\udc86\",\"screen_name\":\"escritosrame\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":316811,\"friends_count\":3,\"listed_count\":158,\"created_at\":\"Thu Aug 23 21:38:01 +0000 2018\",\"favourites_count\":105,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":206,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1150110888596299778\\\/37fGmlV1_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1150110888596299778\\\/37fGmlV1_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1032743790761705472\\\/1586981394\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":3518,\"favorite_count\":9656,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},\"is_quote_status\":false,\"retweet_count\":3518,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206511536054275,\"id_str\":\"1254206511536054275\",\"text\":\"RT @NessaAdlerXO: I only use Twitter for viewing and screenshotting funny tweets, but since I\\u2019m here, I\\u2019d like to expose a racist \\ud83d\\ude0c He said\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"NessaAdlerXO\",\"name\":\"ness\",\"id\":1219156139339853824,\"id_str\":\"1219156139339853824\",\"indices\":[3,16]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2997792061,\"id_str\":\"2997792061\",\"name\":\"karrington airelle\\u2019 \\ud83c\\udf3b\",\"screen_name\":\"__beautyfordays\",\"location\":\"Atlanta, GA\",\"description\":\"Psalms 46:5\\u2728Alabama State University 21\\u2019 \\ud83d\\udc1d HA2 C8 \\u2764\\ufe0f\\ud83d\\udc9b\\ud83d\\udd25\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1769,\"friends_count\":1139,\"listed_count\":3,\"created_at\":\"Tue Jan 27 03:43:24 +0000 2015\",\"favourites_count\":36312,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":18287,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"94D487\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme18\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme18\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1246586001042149376\\\/dML0aB5m_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1246586001042149376\\\/dML0aB5m_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2997792061\\\/1579990609\",\"profile_link_color\":\"3B94D9\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 01:46:58 +0000 2020\",\"id\":1253863037561421828,\"id_str\":\"1253863037561421828\",\"text\":\"I only use Twitter for viewing and screenshotting funny tweets, but since I\\u2019m here, I\\u2019d like to expose a racist \\ud83d\\ude0c H\\u2026 https:\\\/\\\/t.co\\\/WkHG544YUe\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/WkHG544YUe\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1253863037561421828\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1219156139339853824,\"id_str\":\"1219156139339853824\",\"name\":\"ness\",\"screen_name\":\"NessaAdlerXO\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":25,\"friends_count\":24,\"listed_count\":0,\"created_at\":\"Mon Jan 20 07:14:16 +0000 2020\",\"favourites_count\":44,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":14,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1254137661280915457\\\/c7jK6SWr_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1254137661280915457\\\/c7jK6SWr_normal.jpg\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":2777,\"favorite_count\":4529,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":2777,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206511473061891,\"id_str\":\"1254206511473061891\",\"text\":\"RT @sakata_77: GW\\u3082\\u5bb6\\u3067\\u3084\\u308b\\u3053\\u3068\\u306a\\u304f\\u306a\\u3063\\u3066\\u304d\\u305f\\u304b\\u3089\\u5199\\u771f\\u30d5\\u30a9\\u30eb\\u30c0\\u3042\\u3055\\u3063\\u3066\\u305f\\u3089\\u5b8c\\u74a7\\u306a\\u62f3\\u6cd5\\u306e\\u69cb\\u3048\\u304b\\u3089\\u8e8d\\u52d5\\u3059\\u308b\\u732b\\u306e\\u5199\\u771f\\u3042\\u3063\\u305f\\u304b\\u3089\\u898b\\u3066 https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"sakata_77\",\"name\":\"\\u4e45\\u65b9 \\u5e83\\u4e4b\\u300c\\u306e\\u3089\\u732b\\u62f3\\u300d\",\"id\":3306955640,\"id_str\":\"3306955640\",\"indices\":[3,13]}],\"urls\":[],\"media\":[{\"id\":1254204964605325314,\"id_str\":\"1254204964605325314\",\"indices\":[71,94],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUxS7U8AIFCk1.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUxS7U8AIFCk1.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"large\":{\"w\":2048,\"h\":1366,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":800,\"resize\":\"fit\"}},\"source_status_id\":1254205590668062720,\"source_status_id_str\":\"1254205590668062720\",\"source_user_id\":3306955640,\"source_user_id_str\":\"3306955640\"}]},\"extended_entities\":{\"media\":[{\"id\":1254204964605325314,\"id_str\":\"1254204964605325314\",\"indices\":[71,94],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUxS7U8AIFCk1.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUxS7U8AIFCk1.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"large\":{\"w\":2048,\"h\":1366,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":800,\"resize\":\"fit\"}},\"source_status_id\":1254205590668062720,\"source_status_id_str\":\"1254205590668062720\",\"source_user_id\":3306955640,\"source_user_id_str\":\"3306955640\"},{\"id\":1254204976353521664,\"id_str\":\"1254204976353521664\",\"indices\":[71,94],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUx-sUMAAi1h5.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUx-sUMAAi1h5.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":510,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":900,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":1536,\"h\":2048,\"resize\":\"fit\"}},\"source_status_id\":1254205590668062720,\"source_status_id_str\":\"1254205590668062720\",\"source_user_id\":3306955640,\"source_user_id_str\":\"3306955640\"},{\"id\":1254204986143043586,\"id_str\":\"1254204986143043586\",\"indices\":[71,94],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUyjKUcAIAao-.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUyjKUcAIAao-.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1536,\"h\":2048,\"resize\":\"fit\"},\"medium\":{\"w\":900,\"h\":1200,\"resize\":\"fit\"},\"small\":{\"w\":510,\"h\":680,\"resize\":\"fit\"}},\"source_status_id\":1254205590668062720,\"source_status_id_str\":\"1254205590668062720\",\"source_user_id\":3306955640,\"source_user_id_str\":\"3306955640\"},{\"id\":1254204997614465024,\"id_str\":\"1254204997614465024\",\"indices\":[71,94],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUzN5UcAAQ6Li.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUzN5UcAAQ6Li.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"large\":{\"w\":2048,\"h\":1366,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":800,\"resize\":\"fit\"}},\"source_status_id\":1254205590668062720,\"source_status_id_str\":\"1254205590668062720\",\"source_user_id\":3306955640,\"source_user_id_str\":\"3306955640\"}]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":900746954463784961,\"id_str\":\"900746954463784961\",\"name\":\"\\u30b5\\u30de\\u30f3\\u30b5\",\"screen_name\":\"samantha_globe3\",\"location\":\"HIROSHIMA\\u2764\\ufe0f\\u2194HIGASHIHIROSHIMA\\u2764\\ufe0f\",\"description\":\"\\u30d7\\u30e9\\u30b9\\u30b5\\u30a4\\u30ba\\u30e2\\u30c7\\u30eb\\u306b\\u61a7\\u308c\\u308b\\u73fe\\u5f79\\u307d\\u3061\\u3083\\u30cd\\u30b3\\u30ca\\u30fc\\u30b9\\ud83d\\ude3d\\ud83d\\udc95\\n5\\u6b73\\u306e\\u606f\\u5b50\\ud83d\\ude83#QAJF \\u5f8c\\u65b9\\u652f\\u63f4\\u3061\\u3085\\ud83d\\ude18\\u7686\\u69d8\\u3082\\u3046\\u3001\\u6d41\\u77f3\\u306b\\u899a\\u9192\\u3057\\u7948\\u308a\\u307e\\u3057\\u3087\\ud83d\\ude4f\\u2728\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":375,\"friends_count\":2326,\"listed_count\":2,\"created_at\":\"Thu Aug 24 15:49:43 +0000 2017\",\"favourites_count\":71089,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":30712,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/958228394243575808\\\/cVcNKl_I_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/958228394243575808\\\/cVcNKl_I_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/900746954463784961\\\/1503591735\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sun Apr 26 00:28:09 +0000 2020\",\"id\":1254205590668062720,\"id_str\":\"1254205590668062720\",\"text\":\"GW\\u3082\\u5bb6\\u3067\\u3084\\u308b\\u3053\\u3068\\u306a\\u304f\\u306a\\u3063\\u3066\\u304d\\u305f\\u304b\\u3089\\u5199\\u771f\\u30d5\\u30a9\\u30eb\\u30c0\\u3042\\u3055\\u3063\\u3066\\u305f\\u3089\\u5b8c\\u74a7\\u306a\\u62f3\\u6cd5\\u306e\\u69cb\\u3048\\u304b\\u3089\\u8e8d\\u52d5\\u3059\\u308b\\u732b\\u306e\\u5199\\u771f\\u3042\\u3063\\u305f\\u304b\\u3089\\u898b\\u3066 https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254204964605325314,\"id_str\":\"1254204964605325314\",\"indices\":[56,79],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUxS7U8AIFCk1.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUxS7U8AIFCk1.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"large\":{\"w\":2048,\"h\":1366,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":800,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254204964605325314,\"id_str\":\"1254204964605325314\",\"indices\":[56,79],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUxS7U8AIFCk1.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUxS7U8AIFCk1.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"large\":{\"w\":2048,\"h\":1366,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":800,\"resize\":\"fit\"}}},{\"id\":1254204976353521664,\"id_str\":\"1254204976353521664\",\"indices\":[56,79],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUx-sUMAAi1h5.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUx-sUMAAi1h5.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":510,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":900,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":1536,\"h\":2048,\"resize\":\"fit\"}}},{\"id\":1254204986143043586,\"id_str\":\"1254204986143043586\",\"indices\":[56,79],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUyjKUcAIAao-.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUyjKUcAIAao-.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1536,\"h\":2048,\"resize\":\"fit\"},\"medium\":{\"w\":900,\"h\":1200,\"resize\":\"fit\"},\"small\":{\"w\":510,\"h\":680,\"resize\":\"fit\"}}},{\"id\":1254204997614465024,\"id_str\":\"1254204997614465024\",\"indices\":[56,79],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUzN5UcAAQ6Li.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUzN5UcAAQ6Li.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/YuXzj43xwf\",\"display_url\":\"pic.twitter.com\\\/YuXzj43xwf\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sakata_77\\\/status\\\/1254205590668062720\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"large\":{\"w\":2048,\"h\":1366,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":800,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":3306955640,\"id_str\":\"3306955640\",\"name\":\"\\u4e45\\u65b9 \\u5e83\\u4e4b\\u300c\\u306e\\u3089\\u732b\\u62f3\\u300d\",\"screen_name\":\"sakata_77\",\"location\":\"\",\"description\":\"hisakata hiroyuki cat photographer \\u65e7\\u540d\\u30a2\\u30af\\u30bb\\u30f3\\u30c8 \\u5199\\u771f\\u96c6\\u300c\\u306e\\u3089\\u732b\\u62f3\\u300d\\u30d5\\u30a9\\u30ed\\u30fc\\u304a\\u6c17\\u8efd\\u306b \\u4e5d\\u5dde\\u5728\\u4f4f\\u3001\\u732b\\u3058\\u3083\\u3089\\u3057\\u3092\\u4f7f\\u3063\\u305f\\u64ae\\u5f71\\u304c\\u5f97\\u610f\\u3067\\u3059 \\u5199\\u771f\\u306e\\u7121\\u65ad\\u8ee2\\u8f09\\u53ca\\u3073\\u4f7f\\u7528\\u306f\\u7981\\u6b62 \\u8b1b\\u6f14\\u4f9d\\u983c\\u3042\\u308c\\u3070\\u3054\\u76f8\\u8ac7\\u304f\\u3060\\u3055\\u3044 \\u4f7f\\u7528\\u6a5f\\u7a2e\\uff1aOlympus E-M1Mk2 \\u9023\\u7d61\\u5148 sakata_77@hotmail.com\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":80561,\"friends_count\":708,\"listed_count\":1180,\"created_at\":\"Wed Aug 05 13:21:20 +0000 2015\",\"favourites_count\":2835,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":2385,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1117280420414943232\\\/y6ZDhbQm_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1117280420414943232\\\/y6ZDhbQm_normal.png\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/3306955640\\\/1539213231\",\"profile_link_color\":\"FF691F\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":48,\"favorite_count\":121,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ja\"},\"is_quote_status\":false,\"retweet_count\":48,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ja\"},{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206511460618240,\"id_str\":\"1254206511460618240\",\"text\":\"RT @oubrisado: pessoal do meu wpp esperando eu responder \\\/ eu de boa no twitter https:\\\/\\\/t.co\\\/HHEIJZwrMm\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oubrisado\",\"name\":\"brisado\",\"id\":1224850562123997185,\"id_str\":\"1224850562123997185\",\"indices\":[3,13]}],\"urls\":[],\"media\":[{\"id\":1210301618455023616,\"id_str\":\"1210301618455023616\",\"indices\":[80,103],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6NcXkAAAKa9.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6NcXkAAAKa9.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/HHEIJZwrMm\",\"display_url\":\"pic.twitter.com\\\/HHEIJZwrMm\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sincerojesuis\\\/status\\\/1210301628651364352\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":530,\"h\":680,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":798,\"h\":1024,\"resize\":\"fit\"},\"medium\":{\"w\":798,\"h\":1024,\"resize\":\"fit\"}},\"source_status_id\":1210301628651364352,\"source_status_id_str\":\"1210301628651364352\",\"source_user_id\":927680014627241984,\"source_user_id_str\":\"927680014627241984\"}]},\"extended_entities\":{\"media\":[{\"id\":1210301618455023616,\"id_str\":\"1210301618455023616\",\"indices\":[80,103],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6NcXkAAAKa9.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6NcXkAAAKa9.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/HHEIJZwrMm\",\"display_url\":\"pic.twitter.com\\\/HHEIJZwrMm\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sincerojesuis\\\/status\\\/1210301628651364352\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":530,\"h\":680,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":798,\"h\":1024,\"resize\":\"fit\"},\"medium\":{\"w\":798,\"h\":1024,\"resize\":\"fit\"}},\"source_status_id\":1210301628651364352,\"source_status_id_str\":\"1210301628651364352\",\"source_user_id\":927680014627241984,\"source_user_id_str\":\"927680014627241984\"},{\"id\":1210301623312044032,\"id_str\":\"1210301623312044032\",\"indices\":[80,103],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6fiX0AAmnHI.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6fiX0AAmnHI.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/HHEIJZwrMm\",\"display_url\":\"pic.twitter.com\\\/HHEIJZwrMm\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sincerojesuis\\\/status\\\/1210301628651364352\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":669,\"resize\":\"fit\"},\"large\":{\"w\":952,\"h\":937,\"resize\":\"fit\"},\"medium\":{\"w\":952,\"h\":937,\"resize\":\"fit\"}},\"source_status_id\":1210301628651364352,\"source_status_id_str\":\"1210301628651364352\",\"source_user_id\":927680014627241984,\"source_user_id_str\":\"927680014627241984\"}]},\"metadata\":{\"iso_language_code\":\"pt\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1104425682640228353,\"id_str\":\"1104425682640228353\",\"name\":\"pav\\u00e3o :)\",\"screen_name\":\"leeonexx\",\"location\":\"\",\"description\":\"ig: ___.its.leonor.__\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":160,\"friends_count\":363,\"listed_count\":0,\"created_at\":\"Sat Mar 09 16:56:16 +0000 2019\",\"favourites_count\":4884,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":14316,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1251952533280612353\\\/DYZ4Yx5-_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1251952533280612353\\\/DYZ4Yx5-_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1104425682640228353\\\/1587327294\",\"profile_link_color\":\"1B95E0\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 15:01:11 +0000 2020\",\"id\":1254062910847975424,\"id_str\":\"1254062910847975424\",\"text\":\"pessoal do meu wpp esperando eu responder \\\/ eu de boa no twitter https:\\\/\\\/t.co\\\/HHEIJZwrMm\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1210301618455023616,\"id_str\":\"1210301618455023616\",\"indices\":[65,88],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6NcXkAAAKa9.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6NcXkAAAKa9.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/HHEIJZwrMm\",\"display_url\":\"pic.twitter.com\\\/HHEIJZwrMm\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sincerojesuis\\\/status\\\/1210301628651364352\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":530,\"h\":680,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":798,\"h\":1024,\"resize\":\"fit\"},\"medium\":{\"w\":798,\"h\":1024,\"resize\":\"fit\"}},\"source_status_id\":1210301628651364352,\"source_status_id_str\":\"1210301628651364352\",\"source_user_id\":927680014627241984,\"source_user_id_str\":\"927680014627241984\"}]},\"extended_entities\":{\"media\":[{\"id\":1210301618455023616,\"id_str\":\"1210301618455023616\",\"indices\":[65,88],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6NcXkAAAKa9.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6NcXkAAAKa9.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/HHEIJZwrMm\",\"display_url\":\"pic.twitter.com\\\/HHEIJZwrMm\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sincerojesuis\\\/status\\\/1210301628651364352\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":530,\"h\":680,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":798,\"h\":1024,\"resize\":\"fit\"},\"medium\":{\"w\":798,\"h\":1024,\"resize\":\"fit\"}},\"source_status_id\":1210301628651364352,\"source_status_id_str\":\"1210301628651364352\",\"source_user_id\":927680014627241984,\"source_user_id_str\":\"927680014627241984\"},{\"id\":1210301623312044032,\"id_str\":\"1210301623312044032\",\"indices\":[65,88],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6fiX0AAmnHI.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EMva6fiX0AAmnHI.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/HHEIJZwrMm\",\"display_url\":\"pic.twitter.com\\\/HHEIJZwrMm\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sincerojesuis\\\/status\\\/1210301628651364352\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":669,\"resize\":\"fit\"},\"large\":{\"w\":952,\"h\":937,\"resize\":\"fit\"},\"medium\":{\"w\":952,\"h\":937,\"resize\":\"fit\"}},\"source_status_id\":1210301628651364352,\"source_status_id_str\":\"1210301628651364352\",\"source_user_id\":927680014627241984,\"source_user_id_str\":\"927680014627241984\"}]},\"metadata\":{\"iso_language_code\":\"pt\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1224850562123997185,\"id_str\":\"1224850562123997185\",\"name\":\"brisado\",\"screen_name\":\"oubrisado\",\"location\":\"\",\"description\":\"o mais brisado desse site\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":37347,\"friends_count\":2,\"listed_count\":12,\"created_at\":\"Wed Feb 05 00:21:59 +0000 2020\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":293,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1247598226791858184\\\/DHOMTvrj_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1247598226791858184\\\/DHOMTvrj_normal.jpg\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":2309,\"favorite_count\":4939,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"pt\"},\"is_quote_status\":false,\"retweet_count\":2309,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"pt\"},{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206511431196678,\"id_str\":\"1254206511431196678\",\"text\":\"RT @DistinCray_: I\\u2019m crying he said yall gon see this WAIST \\ud83d\\ude2d\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"DistinCray_\",\"name\":\"AK\",\"id\":180398421,\"id_str\":\"180398421\",\"indices\":[3,15]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":303139504,\"id_str\":\"303139504\",\"name\":\"koshie\",\"screen_name\":\"bethellana_\",\"location\":\"london\",\"description\":\"\\ud83c\\uddec\\ud83c\\udded\\ud83d\\udc78\\ud83c\\udffe\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":208,\"friends_count\":93,\"listed_count\":0,\"created_at\":\"Sun May 22 10:59:13 +0000 2011\",\"favourites_count\":5392,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":19373,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FCEBB6\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme4\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme4\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1215383177281310720\\\/uESNsmy0_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1215383177281310720\\\/uESNsmy0_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/303139504\\\/1578604905\",\"profile_link_color\":\"CE7834\",\"profile_sidebar_border_color\":\"F0A830\",\"profile_sidebar_fill_color\":\"78C0A8\",\"profile_text_color\":\"5E412F\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 21:07:31 +0000 2020\",\"id\":1254155098160279553,\"id_str\":\"1254155098160279553\",\"text\":\"I\\u2019m crying he said yall gon see this WAIST \\ud83d\\ude2d https:\\\/\\\/t.co\\\/4RAOYyntaH\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/4RAOYyntaH\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/gloriaolembo\\\/status\\\/1254136568417259521\",\"display_url\":\"twitter.com\\\/gloriaolembo\\\/s\\u2026\",\"indices\":[45,68]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":180398421,\"id_str\":\"180398421\",\"name\":\"AK\",\"screen_name\":\"DistinCray_\",\"location\":\"\",\"description\":\"patterner | R2R\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2850,\"friends_count\":459,\"listed_count\":53,\"created_at\":\"Thu Aug 19 14:56:56 +0000 2010\",\"favourites_count\":19893,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":217009,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"642D8B\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1254168218601652233\\\/dq4evs0i_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1254168218601652233\\\/dq4evs0i_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/180398421\\\/1579979760\",\"profile_link_color\":\"FF0000\",\"profile_sidebar_border_color\":\"65B0DA\",\"profile_sidebar_fill_color\":\"7AC3EE\",\"profile_text_color\":\"3D1957\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254136568417259521,\"quoted_status_id_str\":\"1254136568417259521\",\"quoted_status\":{\"created_at\":\"Sat Apr 25 19:53:53 +0000 2020\",\"id\":1254136568417259521,\"id_str\":\"1254136568417259521\",\"text\":\"Il n\\u2019a pas comprit le concept \\ud83d\\ude05\\n#confinement https:\\\/\\\/t.co\\\/j0pvvaXqF2\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"confinement\",\"indices\":[32,44]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254136503258808321,\"id_str\":\"1254136503258808321\",\"indices\":[45,68],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254136503258808321\\\/pu\\\/img\\\/F6zOsn8Id0qYrRNO.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254136503258808321\\\/pu\\\/img\\\/F6zOsn8Id0qYrRNO.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/j0pvvaXqF2\",\"display_url\":\"pic.twitter.com\\\/j0pvvaXqF2\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/GloriaOlembo\\\/status\\\/1254136568417259521\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254136503258808321,\"id_str\":\"1254136503258808321\",\"indices\":[45,68],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254136503258808321\\\/pu\\\/img\\\/F6zOsn8Id0qYrRNO.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254136503258808321\\\/pu\\\/img\\\/F6zOsn8Id0qYrRNO.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/j0pvvaXqF2\",\"display_url\":\"pic.twitter.com\\\/j0pvvaXqF2\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/GloriaOlembo\\\/status\\\/1254136568417259521\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[9,16],\"duration_millis\":13078,\"variants\":[{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254136503258808321\\\/pu\\\/vid\\\/320x568\\\/AVnszQa6W9q7c04O.mp4?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254136503258808321\\\/pu\\\/vid\\\/360x640\\\/Xy2jSsmTHBHeOUUi.mp4?tag=10\"},{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254136503258808321\\\/pu\\\/pl\\\/OKaz96Nq0Hw-jSDL.m3u8?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254136503258808321\\\/pu\\\/vid\\\/540x960\\\/2pgtZuZG3AfQD02w.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1164591021008834563,\"id_str\":\"1164591021008834563\",\"name\":\"ITS MY BDAY\\ud83e\\udd73\",\"screen_name\":\"GloriaOlembo\",\"location\":\"Bruxelles, Belgique\",\"description\":\"1m66 de douceur insta: gloriaolembo\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":381,\"friends_count\":87,\"listed_count\":0,\"created_at\":\"Thu Aug 22 17:32:01 +0000 2019\",\"favourites_count\":611,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":588,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1251225268817137670\\\/E5x_QB1R_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1251225268817137670\\\/E5x_QB1R_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1164591021008834563\\\/1584457034\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":17716,\"favorite_count\":38440,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":true,\"lang\":\"fr\"},\"retweet_count\":8577,\"favorite_count\":30825,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":true,\"quoted_status_id\":1254136568417259521,\"quoted_status_id_str\":\"1254136568417259521\",\"retweet_count\":8577,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:31:49 +0000 2020\",\"id\":1254206511397531648,\"id_str\":\"1254206511397531648\",\"text\":\"RT @TomoccoryShow: #tmcckor\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"tmcckor\",\"indices\":[19,27]}],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TomoccoryShow\",\"name\":\"TomoccoryShow\",\"id\":1230575068989681664,\"id_str\":\"1230575068989681664\",\"indices\":[3,17]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":720932439892238337,\"id_str\":\"720932439892238337\",\"name\":\"\\u3080\\u304e\\u306e\\u3053\\u3080\\u304e\",\"screen_name\":\"hironet1215\",\"location\":\"\\u65e5\\u672c\",\"description\":\"\\u3080\\u304e\\u306e\\u306f\\u6c38\\u9060\\u306e\\u76f8\\u65b9\\u3002\\u30d3\\u30fc10\\u30ea\\u30b9\\u30ca\\u30fc\\u3053\\u3068\\u30c6\\u30f3\\u30c0\\u30fc\\u3002\\u97f3\\u697d\\u306f\\u52ff\\u8ad6\\u3001\\u6620\\u753b\\u3001\\u672c\\u3001\\u30a2\\u30cb\\u30e1\\u3001\\u5b50\\u3069\\u3082\\u305f\\u3061\\u3068\\u793e\\u4f1a\\u306e\\u3053\\u3068\\u306a\\u3069\\u3001\\u6c17\\u7d1b\\u308c\\u306b\\u545f\\u304d\\u307e\\u3059\\u3002\\u57fa\\u672c\\u306f\\u30ce\\u30ea\\u30c4\\u30c3\\u30b3\\u30df\\u62c5\\u5f53\\u3067\\u3059\\u3002\\u3088\\u308d\\u3057\\u304f\\u304a\\u9858\\u3044\\u3057\\u307e\\u3059\\u3002\\u3053\\u3080\\u304e\\u3068\\u304a\\u547c\\u3073\\u4e0b\\u3055\\u3044\\u3002\\u30df\\u30e5\\u30fc\\u30c8\\u3001\\u30ea\\u30e0\\u3001\\u30d6\\u30ed\\u306f\\u3054\\u81ea\\u7531\\u306b\\u9858\\u3044\\u307e\\u3059\\u3002\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":113,\"friends_count\":149,\"listed_count\":5,\"created_at\":\"Fri Apr 15 11:11:02 +0000 2016\",\"favourites_count\":20307,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":13310,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1247744690700476417\\\/_u3TUqxg_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1247744690700476417\\\/_u3TUqxg_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/720932439892238337\\\/1587232671\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sun Apr 26 00:25:57 +0000 2020\",\"id\":1254205036227203072,\"id_str\":\"1254205036227203072\",\"text\":\"#tmcckor https:\\\/\\\/t.co\\\/qc2mjHqTar\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"tmcckor\",\"indices\":[0,8]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/qc2mjHqTar\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/t_moco2\\\/status\\\/1254204582508429312\",\"display_url\":\"twitter.com\\\/t_moco2\\\/status\\u2026\",\"indices\":[9,32]}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1230575068989681664,\"id_str\":\"1230575068989681664\",\"name\":\"TomoccoryShow\",\"screen_name\":\"TomoccoryShow\",\"location\":\"\",\"description\":\"@t_moco2\\u304c\\u61d0\\u304b\\u3057\\u3044\\u3068\\u601d\\u3046\\u66f2\\u3060\\u3051\\u304b\\u3051\\u7d9a\\u3051\\u308b\\u300c\\u30c8\\u30e2\\u30c3\\u30b3\\u30ea\\u30fc\\u30fb\\u30b7\\u30e7\\u30fc\\u300d\\u3002\\u653e\\u9001\\u5c40\\u7d9a\\u3005\\u8ffd\\u52a0\\u4e2d\\u3002\\u653e\\u9001\\u30b9\\u30b1\\u30b8\\u30e5\\u30fc\\u30eb\\u306fhttps:\\\/\\\/t.co\\\/AgT1KK4Y2H \\u3067\\u30c1\\u30a7\\u30c3\\u30af\\u3002#tmcckor\",\"url\":null,\"entities\":{\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/AgT1KK4Y2H\",\"expanded_url\":\"http:\\\/\\\/radiomagazine.amebaownd.com\",\"display_url\":\"radiomagazine.amebaownd.com\",\"indices\":[55,78]}]}},\"protected\":false,\"followers_count\":252,\"friends_count\":543,\"listed_count\":1,\"created_at\":\"Thu Feb 20 19:29:10 +0000 2020\",\"favourites_count\":219,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":634,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1240274193385533440\\\/KyD_wuBz_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1240274193385533440\\\/KyD_wuBz_normal.png\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1230575068989681664\\\/1582364243\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254204582508429312,\"quoted_status_id_str\":\"1254204582508429312\",\"quoted_status\":{\"created_at\":\"Sun Apr 26 00:24:09 +0000 2020\",\"id\":1254204582508429312,\"id_str\":\"1254204582508429312\",\"text\":\"\\u3053\\u306e\\u5f8c10\\u6642\\u304b\\u3089\\u301c\\uff01#tmcckor https:\\\/\\\/t.co\\\/J4G9Drx4eU\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"tmcckor\",\"indices\":[10,18]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/J4G9Drx4eU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/mikeintokyo2004\\\/status\\\/1254204363582521347\",\"display_url\":\"twitter.com\\\/mikeintokyo200\\u2026\",\"indices\":[19,42]}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":29117715,\"id_str\":\"29117715\",\"name\":\"\\ud835\\ude9d\\ud835\\ude8a\\ud835\\ude90\\ud835\\ude9e\\ud835\\ude8c\\ud835\\ude91\\ud835\\ude92 \\ud835\\udd65\\ud835\\udd60\\ud835\\udd5e\\ud835\\udd60\\ud835\\udd5c\\ud835\\udd60\",\"screen_name\":\"t_moco2\",\"location\":\"\\u30d5\\u30a1\\u30f3\\u30bf\\u30b8\\u30fc\\u306e\\u753a\\u3001\\u5ddd\\u5d0e\",\"description\":\"\\u7530\\u53e3\\u667a\\u5b50\\u3002\\u5ddd\\u5d0e\\u5e02\\u6c11\\u3002\\u30e9\\u30b8\\u30aa\\u756a\\u7d44\\u5236\\u4f5c\\u3092\\u4e2d\\u5fc3\\u3068\\u3057\\u305f\\u81ea\\u55b6\\u696d\\u3002\\u597d\\u304d\\u306a\\u306e\\u306f\\u6cf3\\u3050\\u4e8b\\u3001\\u30c9\\u30e9\\u30a4\\u30d6\\u3001\\u5c0f\\u7b20\\u539f\\u9053\\u5927\\u3001\\u6d77\\u5916\\u30c9\\u30e9\\u30de\\u3001\\u30d1\\u30f3\\u3001\\u5bd2\\u5929\\u3001\\u300c\\u30ab\\u30c3\\u30b3\\u3044\\u3044\\u300d\\u7269\\u3002\\u300c\\u304b\\u308f\\u3044\\u3044\\u300d\\u4eba\\u3002tomoko\\u306e\\u8cea\\u554f\\u7bb1\\u2192 https:\\\/\\\/t.co\\\/cCAlxTN9Yi\",\"url\":\"https:\\\/\\\/t.co\\\/LkqhNiLYNt\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/LkqhNiLYNt\",\"expanded_url\":\"https:\\\/\\\/radiomagazine.amebaownd.com\\\/\",\"display_url\":\"radiomagazine.amebaownd.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/cCAlxTN9Yi\",\"expanded_url\":\"https:\\\/\\\/peing.net\\\/t_moco2\",\"display_url\":\"peing.net\\\/t_moco2\",\"indices\":[88,111]}]}},\"protected\":false,\"followers_count\":798,\"friends_count\":452,\"listed_count\":29,\"created_at\":\"Mon Apr 06 01:46:48 +0000 2009\",\"favourites_count\":4098,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":27121,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"E80743\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme3\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme3\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/770680258982928384\\\/t9gkXR9j_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/770680258982928384\\\/t9gkXR9j_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/29117715\\\/1409324949\",\"profile_link_color\":\"B50164\",\"profile_sidebar_border_color\":\"B7195B\",\"profile_sidebar_fill_color\":\"AA0645\",\"profile_text_color\":\"F21365\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254204363582521347,\"quoted_status_id_str\":\"1254204363582521347\",\"retweet_count\":3,\"favorite_count\":4,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ja\"},\"retweet_count\":1,\"favorite_count\":1,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},\"is_quote_status\":true,\"quoted_status_id\":1254204582508429312,\"quoted_status_id_str\":\"1254204582508429312\",\"retweet_count\":1,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511355592704,\"id_str\":\"1254206511355592704\",\"text\":\"RT @kantanlife2019: \\ud83d\\udce2\\u304a\\u3046\\u3061\\u3067\\u98df\\u3079\\u308b\\u30ad\\u30e3\\u30f3\\u30da\\u30fc\\u30f3\\uff01\\uff01\\n #\\u81ea\\u7c9b\\n\\ud83d\\udc9c\\u5bb6\\u306b\\u3044\\u308b\\u6a5f\\u4f1a\\u304c\\u5897\\u3048\\u308b\\u3068 \\u30b9\\u30c8\\u30ec\\u30b9\\u6e9c\\u307e\\u3063\\u3066\\u7518\\u3044\\u3082\\u306e\\u6b32\\u3057\\u304f\\u306a\\u308a\\u307e\\u305b\\u3093\\uff1f\\n#\\u30b3\\u30ed\\u30ca\\u306b\\u8ca0\\u3051\\u308b\\u306a \\n\\ud83c\\udf69\\u62bd\\u9078\\u30673\\u540d\\u69d8\\u306b\\u30d7\\u30ec\\u30bc\\u30f3\\u30c8 \\u2b07\\ufe0f\\n\\u30d6\\u30eb\\u30dc\\u30f3 35\\u888b\\u5165\\n#\\u304a\\u304b\\u3057\\u3064\\u306a\\u304e \\u306b\\u53c2\\u52a0\\u3055\\u305b\\u3066\\u3044\\u305f\\u3060\\u304d\\u307e\\u3059\\uff01\\n\\u2728\\u5fdc\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"\\u81ea\\u7c9b\",\"indices\":[38,41]},{\"text\":\"\\u30b3\\u30ed\\u30ca\\u306b\\u8ca0\\u3051\\u308b\\u306a\",\"indices\":[77,86]},{\"text\":\"\\u304a\\u304b\\u3057\\u3064\\u306a\\u304e\",\"indices\":[115,122]}],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"kantanlife2019\",\"name\":\"Kantanlife\",\"id\":1163377400081612800,\"id_str\":\"1163377400081612800\",\"indices\":[3,18]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":752359744111714304,\"id_str\":\"752359744111714304\",\"name\":\"\\u3072\\u308d\\u307d\\u307d\\u3061\\u301c\\u305f\\u3093\",\"screen_name\":\"jbfzfSGmzd2WTsL\",\"location\":\"\\u65e5\\u672c\\u3001\\u795e\\u5948\\u5ddd\\u770c\\u6a2a\\u6d5c\",\"description\":\"2017\\u5e741\\u6708\\u304b\\u3089\\u7bc0\\u7d04\\u3092\\u517c\\u306d\\u61f8\\u8cde\\u5fdc\\u52df\\u3092\\u59cb\\u3081\\u3066\\u307f\\u307e\\u3057\\u305f\\u2728\\u3068\\u3053\\u308d\\u304c\\u3001Twitter\\u61f8\\u8cde\\u2026\\u4e2d\\u3005\\u5f53\\u305f\\u3089\\u306a\\u3044\\u3067\\u3059\\u306d\\ud83d\\ude22\\u6804\\u990a\\u58eb\\u306e\\u52c9\\u5f37\\u3002\\u6bcd\\u306e\\u30ea\\u30cf\\u30d3\\u30ea\\u30fb\\u5728\\u5b85\\u4ecb\\u8b77\\u306b\\u65e5\\u3005\\u596e\\u95d8\\u3057\\u3066\\u307e\\u3059\\u3002\\u75db\\u307f\\u3092\\u62b1\\u3048\\u306a\\u304c\\u3089\\u3082\\u5171\\u306b\\u524d\\u5411\\u304d\\u306b\\u6b69\\u3093\\u3067\\u304f\\u308c\\u308b\\u6bcd\\u3068\\u4e00\\u7dd2\\u306b\\u3044\\u3064\\u307e\\u3067\\u904e\\u3054\\u305b\\u308b\\u304b\\u2026 \\u3002\\u611b\\u732bPua\\u541b\\u3001\\u611b\\u72acJAZZ\\u541b\\u306e\\u6210\\u9577\\u8a18\\u9332\\u3068\\u3057\\u3066\\u3082\\u5229\\u7528\\u3092\\u3055\\u305b\\u3066\\u9802\\u3044\\u3066\\u304a\\u308a\\u307e\\u3059\\u3002\",\"url\":\"https:\\\/\\\/t.co\\\/4DKgjYvApe\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/4DKgjYvApe\",\"expanded_url\":\"https:\\\/\\\/www.instagram.com\\\/ikumihiropopo\",\"display_url\":\"instagram.com\\\/ikumihiropopo\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":134,\"friends_count\":2103,\"listed_count\":1,\"created_at\":\"Mon Jul 11 04:31:55 +0000 2016\",\"favourites_count\":3093,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":10958,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/940231026038661120\\\/wBNpUy9N_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/940231026038661120\\\/wBNpUy9N_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/752359744111714304\\\/1509239794\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Fri Apr 24 09:23:10 +0000 2020\",\"id\":1253615456675495936,\"id_str\":\"1253615456675495936\",\"text\":\"\\ud83d\\udce2\\u304a\\u3046\\u3061\\u3067\\u98df\\u3079\\u308b\\u30ad\\u30e3\\u30f3\\u30da\\u30fc\\u30f3\\uff01\\uff01\\n #\\u81ea\\u7c9b\\n\\ud83d\\udc9c\\u5bb6\\u306b\\u3044\\u308b\\u6a5f\\u4f1a\\u304c\\u5897\\u3048\\u308b\\u3068 \\u30b9\\u30c8\\u30ec\\u30b9\\u6e9c\\u307e\\u3063\\u3066\\u7518\\u3044\\u3082\\u306e\\u6b32\\u3057\\u304f\\u306a\\u308a\\u307e\\u305b\\u3093\\uff1f\\n#\\u30b3\\u30ed\\u30ca\\u306b\\u8ca0\\u3051\\u308b\\u306a \\n\\ud83c\\udf69\\u62bd\\u9078\\u30673\\u540d\\u69d8\\u306b\\u30d7\\u30ec\\u30bc\\u30f3\\u30c8 \\u2b07\\ufe0f\\n\\u30d6\\u30eb\\u30dc\\u30f3 35\\u888b\\u5165\\n#\\u304a\\u304b\\u3057\\u3064\\u306a\\u304e \\u306b\\u53c2\\u52a0\\u3055\\u305b\\u3066\\u3044\\u305f\\u3060\\u304d\\u307e\\u3059\\u2026 https:\\\/\\\/t.co\\\/Ce2yCK3tj1\",\"truncated\":true,\"entities\":{\"hashtags\":[{\"text\":\"\\u81ea\\u7c9b\",\"indices\":[18,21]},{\"text\":\"\\u30b3\\u30ed\\u30ca\\u306b\\u8ca0\\u3051\\u308b\\u306a\",\"indices\":[57,66]},{\"text\":\"\\u304a\\u304b\\u3057\\u3064\\u306a\\u304e\",\"indices\":[95,102]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/Ce2yCK3tj1\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1253615456675495936\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1163377400081612800,\"id_str\":\"1163377400081612800\",\"name\":\"Kantanlife\",\"screen_name\":\"kantanlife2019\",\"location\":\"\",\"description\":\"\\ud83c\\udf81\\u30d7\\u30ec\\u30bc\\u30f3\\u30c8\\u4f01\\u753b\\u958b\\u50ac\\u4e2d~ \\ud83d\\udde3\\u30c4\\u30a4\\u30bf\\u3067\\u8272\\u3093\\u306a\\u30ad\\u30e3\\u30f3\\u30da\\u30f3\\u30fc\\u3084\\u62bd\\u9078\\u3092\\u884c\\u3063\\u3066\\u3044\\u307e\\u3059\\u3001\\u305c\\u3072\\u30d5\\u30a9\\u30ed\\u30fc\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044\\ud83e\\uddd8\\u200d\\u2640\\ufe0f \\ud83d\\udc9d\\u7121\\u6599\\u8a66\\u4f9b\\u54c1\\u63d0\\u4f9b\\u4e2d \\u203b\\u571f\\u66dc\\u30fb\\u65e5\\u66dc\\u30fb\\u795d\\u796d\\u65e5\\u306f\\u304a\\u4f11\\u307f\\u3092\\u3044\\u305f\\u3060\\u3044\\u3066\\u304a\\u308a\\u307e\\u3059\\u3002 \\u30e1\\u30fc\\u30eb\\u3001\\u304a\\u554f\\u3044\\u5408\\u308f\\u305b\\u306e\\u304a\\u8fd4\\u4e8b\\u306f\\u7fcc\\u55b6\\u696d\\u65e5\\u3068\\u306a\\u308a\\u307e\\u3059\\u3002 \\u2764\\u30b3\\u30e9\\u30dc\\u306f\\u5927\\u6b53\\u8fce!\\uff01 #8000\\u30d5\\u30a9\\u30ed\\u30fc\\u30ef\\u306e\\u304a\\u9858\\u3044 #\\u62e1\\u6563\\u5e0c\\u671b\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6691,\"friends_count\":30,\"listed_count\":13,\"created_at\":\"Mon Aug 19 09:09:28 +0000 2019\",\"favourites_count\":527,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":209,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1236235021934977025\\\/aYI9CgxV_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1236235021934977025\\\/aYI9CgxV_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1163377400081612800\\\/1583576667\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":2224,\"favorite_count\":550,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ja\"},\"is_quote_status\":false,\"retweet_count\":2224,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"ja\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511288590338,\"id_str\":\"1254206511288590338\",\"text\":\"RT @RiZzyUTD: There are still some Chelsea fans who say \\\"Lampard > Ole\\\". Let me remind you, Lampard faced Ole 3 times (2x at home) this sea\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"RiZzyUTD\",\"name\":\"RiZzy\\ud83d\\udd34\",\"id\":1113785724975890435,\"id_str\":\"1113785724975890435\",\"indices\":[3,12]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":942008384,\"id_str\":\"942008384\",\"name\":\"NwabuKing Alfonso\",\"screen_name\":\"AlfonsoNwab\",\"location\":\"Lagos\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":514,\"friends_count\":2063,\"listed_count\":1,\"created_at\":\"Sun Nov 11 19:15:25 +0000 2012\",\"favourites_count\":26641,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":27703,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1178184591544336384\\\/jXp8EFVQ_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1178184591544336384\\\/jXp8EFVQ_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/942008384\\\/1442338235\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 15:51:27 +0000 2020\",\"id\":1254075557697986562,\"id_str\":\"1254075557697986562\",\"text\":\"There are still some Chelsea fans who say \\\"Lampard > Ole\\\". Let me remind you, Lampard faced Ole 3 times (2x at home\\u2026 https:\\\/\\\/t.co\\\/OZZHocU4ZE\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/OZZHocU4ZE\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254075557697986562\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[120,143]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1113785724975890435,\"id_str\":\"1113785724975890435\",\"name\":\"RiZzy\\ud83d\\udd34\",\"screen_name\":\"RiZzyUTD\",\"location\":\"\",\"description\":\"@ManUtd Fan account | Private acc:@PrivRiz | \\ud83c\\uddf8\\ud83c\\uddf4\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":42282,\"friends_count\":2589,\"listed_count\":228,\"created_at\":\"Thu Apr 04 12:49:44 +0000 2019\",\"favourites_count\":121877,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":41101,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253155559098003456\\\/FAM_cCLX_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253155559098003456\\\/FAM_cCLX_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1113785724975890435\\\/1586841143\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":281,\"favorite_count\":2766,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":281,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511217143811,\"id_str\":\"1254206511217143811\",\"text\":\"RT @qootaro7: \\u5b54\\u660e\\u306f\\u7d46\\u30ec\\u30d9\\u30eb\\u4e0a\\u304c\\u308b\\u306e\\u3081\\u3063\\u3061\\u3083\\u9045\\u3044\\u3067\\u3059\\u304c\\u3001\\u5f7c\\u3092\\u77e5\\u308c\\u3070\\u77e5\\u308b\\u307b\\u3069\\u300e\\u3082\\u3063\\u3068\\u2026\\u9045\\u304f\\u3066\\u3044\\u3044\\u306e\\u3088\\u2026\\uff01\\uff01\\uff01\\u305d\\u308c\\u3067\\u3053\\u305d\\u2026\\u541b\\u3060\\u2026\\uff01\\u30a2\\u30e9\\u30e9\\u30a4\\u2026\\uff01\\u300f\\u3063\\u3066\\u306a\\u308a\\u307e\\u3059\\u3002\\n\\u3067\\u3082\\u4eca\\u56de\\u306f\\u7d46\\u30ec\\u30d9\\u30eb\\u4e0a\\u3052\\u306b\\u6642\\u9593\\u5236\\u9650\\u304c\\u3042\\u308b\\u306e\\u3067\\u3001\\u305d\\u306e\\u8fba\\u308a\\u6c17\\u3092\\u3064\\u3051\\u3066\\u30fc\\u3002 https:\\\/\\\/t.co\\\/Q8f71XG\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"qootaro7\",\"name\":\"Fake6\\u5dfb\\u3092\\u8aad\\u3093\\u3060Qoo\\u305f\\u308d\\u30fc\",\"id\":726817725419397120,\"id_str\":\"726817725419397120\",\"indices\":[3,12]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":195312634,\"id_str\":\"195312634\",\"name\":\"\\u306a\\u3080\\u306a\\u3080\",\"screen_name\":\"namunohi\",\"location\":\"\\u5343\\u8449\\u770c\",\"description\":\"\\u6210\\u4eba\\u6e08\\u8150\\u5973\\u5b50 \\u7dcf\\u4e00 \\u7dd1\\u9ad8 \\u5d50\\u8fc5 \\u30b6\\u30d7\\u30ec\\u30aa \\u30de\\u30fc\\u30ed\\u30de \\u5973\\u4f53\\u5316\\u611b\\u3057\\u3066\\u308b \\u767e\\u5408\\u3082\\u30d8\\u30c6\\u30ed\\u3082\\u5927\\u597d\\u7269 \\u81ea\\u5df1\\u5b8c\\u7d50\\u3059\\u308b\\u6027\\u8cea\\u306e\\u305f\\u3081\\u4f1a\\u8a71\\u304c\\u82e6\\u624b RT\\u9b54 \\u8003\\u5bdf\\u5927\\u597d\\u304d\\u3060\\u304c\\u81ea\\u5206\\u3067\\u3067\\u304d\\u308b\\u3068\\u306f\\u8a00\\u3063\\u3066\\u3044\\u306a\\u3044 \\u5357\\u7121\\u306e\\u65e5\\u751f\\u307e\\u308c\",\"url\":\"https:\\\/\\\/t.co\\\/zyXOarl5eN\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/zyXOarl5eN\",\"expanded_url\":\"https:\\\/\\\/fusetter.com\\\/u\\\/namunohi\",\"display_url\":\"fusetter.com\\\/u\\\/namunohi\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":294,\"friends_count\":565,\"listed_count\":50,\"created_at\":\"Sun Sep 26 11:10:51 +0000 2010\",\"favourites_count\":156962,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":538977,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"9AE4E8\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme16\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme16\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/495384537585573889\\\/RjXK-joV_normal.jpeg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/495384537585573889\\\/RjXK-joV_normal.jpeg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/195312634\\\/1470121689\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"BDDCAD\",\"profile_sidebar_fill_color\":\"DDFFCC\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 13:03:54 +0000 2020\",\"id\":1254033393991335937,\"id_str\":\"1254033393991335937\",\"text\":\"\\u5b54\\u660e\\u306f\\u7d46\\u30ec\\u30d9\\u30eb\\u4e0a\\u304c\\u308b\\u306e\\u3081\\u3063\\u3061\\u3083\\u9045\\u3044\\u3067\\u3059\\u304c\\u3001\\u5f7c\\u3092\\u77e5\\u308c\\u3070\\u77e5\\u308b\\u307b\\u3069\\u300e\\u3082\\u3063\\u3068\\u2026\\u9045\\u304f\\u3066\\u3044\\u3044\\u306e\\u3088\\u2026\\uff01\\uff01\\uff01\\u305d\\u308c\\u3067\\u3053\\u305d\\u2026\\u541b\\u3060\\u2026\\uff01\\u30a2\\u30e9\\u30e9\\u30a4\\u2026\\uff01\\u300f\\u3063\\u3066\\u306a\\u308a\\u307e\\u3059\\u3002\\n\\u3067\\u3082\\u4eca\\u56de\\u306f\\u7d46\\u30ec\\u30d9\\u30eb\\u4e0a\\u3052\\u306b\\u6642\\u9593\\u5236\\u9650\\u304c\\u3042\\u308b\\u306e\\u3067\\u3001\\u305d\\u306e\\u8fba\\u308a\\u6c17\\u3092\\u3064\\u3051\\u3066\\u30fc\\u3002 https:\\\/\\\/t.co\\\/Q8f71XGiNe\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254033375712571395,\"id_str\":\"1254033375712571395\",\"indices\":[105,128],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWc4tgfU8AMtVte.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWc4tgfU8AMtVte.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Q8f71XGiNe\",\"display_url\":\"pic.twitter.com\\\/Q8f71XGiNe\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/qootaro7\\\/status\\\/1254033393991335937\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":382,\"resize\":\"fit\"},\"large\":{\"w\":1334,\"h\":750,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":675,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254033375712571395,\"id_str\":\"1254033375712571395\",\"indices\":[105,128],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWc4tgfU8AMtVte.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWc4tgfU8AMtVte.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Q8f71XGiNe\",\"display_url\":\"pic.twitter.com\\\/Q8f71XGiNe\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/qootaro7\\\/status\\\/1254033393991335937\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":382,\"resize\":\"fit\"},\"large\":{\"w\":1334,\"h\":750,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":675,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":1254029743504031744,\"in_reply_to_status_id_str\":\"1254029743504031744\",\"in_reply_to_user_id\":726817725419397120,\"in_reply_to_user_id_str\":\"726817725419397120\",\"in_reply_to_screen_name\":\"qootaro7\",\"user\":{\"id\":726817725419397120,\"id_str\":\"726817725419397120\",\"name\":\"Fake6\\u5dfb\\u3092\\u8aad\\u3093\\u3060Qoo\\u305f\\u308d\\u30fc\",\"screen_name\":\"qootaro7\",\"location\":\"\",\"description\":\"\\u304f\\u30fc\\u305f\\u308d\\u30fc\\u3067\\u3059\\u3002\\u30a4\\u30b9\\u30ab\\u30f3\\u30c0\\u30eb\\uff08\\u5927\\u5c0f\\uff09\\u00d7\\u30a6\\u30a7\\u30a4\\u30d0\\u30fc\\uff08\\u5927\\u5c0f\\uff09 \\u30d5\\u30e9\\u2161\\u3068\\u30e1\\u30eb\\u2161\\u3082\\u3082\\u3050\\u3082\\u3050\\u3002\\u30b5\\u30ea\\u30a8\\u30ea\\u5148\\u751f\\u30fc\\uff01\\u30a8\\u30ed\\u3044\\u30fc\\uff01\\u30ea\\u30d0\\u306f\\u97f3\\u697d\\u6027\\u306e\\u9055\\u3044\\u3067\\u305d\\u3063\\u3068\\u96e2\\u308c\\u308b\\u3002\\u7121\\u8a00\\u30d5\\u30a9\\u30ed\\u30fc\\u5931\\u793c\\u81f4\\u3057\\u307e\\u3059 \\u6210\\u4eba\\u6e08\\u3067\\u3059\\u308f\\u3088\\u3002\\u3074\\u304f\\u3057\\u3076\\uff1ahttps:\\\/\\\/t.co\\\/lCgu9WQyrN\",\"url\":null,\"entities\":{\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/lCgu9WQyrN\",\"expanded_url\":\"https:\\\/\\\/pixiv.me\\\/ku2222\",\"display_url\":\"pixiv.me\\\/ku2222\",\"indices\":[98,121]}]}},\"protected\":false,\"followers_count\":787,\"friends_count\":135,\"listed_count\":18,\"created_at\":\"Sun May 01 16:57:04 +0000 2016\",\"favourites_count\":17309,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":19510,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/891533014697562112\\\/j6zQ2wH8_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/891533014697562112\\\/j6zQ2wH8_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/726817725419397120\\\/1501392666\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":7,\"favorite_count\":11,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ja\"},\"is_quote_status\":false,\"retweet_count\":7,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"ja\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511204700160,\"id_str\":\"1254206511204700160\",\"text\":\"RT @SharqiyaOyun: \\u2733\\ufe0f \\u0627\\u0644\\u0633\\u0624\\u0627\\u0644 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a :\\n\\u0622\\u064a\\u0629 \\u0641\\u064a #\\u0627\\u0644\\u0642\\u0631\\u0622\\u0646 \\u062c\\u0645\\u0639\\u062a \\u0623\\u0631\\u0628\\u0639\\u0629 \\u0623\\u0633\\u0628\\u0627\\u0628 \\u062a\\u062f\\u0631\\u0643 \\u0628\\u0647\\u0627 #\\u0645\\u063a\\u0641\\u0631\\u0629 \\u0627\\u0644\\u0644\\u0647 \\u0644\\u0644\\u0639\\u0628\\u062f \\u0623\\u0630\\u0643\\u0631\\u0647\\u0627 \\u061f \\n\\u0646\\u0633\\u062a\\u0642\\u0628\\u0644 \\u0627\\u0644\\u0625\\u062c\\u0627\\u0628\\u0627\\u062a \\u062d\\u062a\\u0649 \\u063a\\u062f\\u0627\\u064b \\u0627\\u0644\\u0640 10\\u0645\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"\\u0627\\u0644\\u0642\\u0631\\u0622\\u0646\",\"indices\":[44,51]},{\"text\":\"\\u0645\\u063a\\u0641\\u0631\\u0629\",\"indices\":[78,84]}],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"SharqiyaOyun\",\"name\":\"\\u0639\\u064a\\u0648\\u0646 \\u0627\\u0644\\u0634\\u0631\\u0642\\u064a\\u0629 \\ud83c\\uddf8\\ud83c\\udde6\",\"id\":3327219576,\"id_str\":\"3327219576\",\"indices\":[3,16]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"ar\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1237722641483681792,\"id_str\":\"1237722641483681792\",\"name\":\"\\u0627\\u0645 \\u0633\\u0644\\u0637\\u0627\\u0646 #\",\"screen_name\":\"HVrw0HcoBkavAo5\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":72,\"friends_count\":728,\"listed_count\":0,\"created_at\":\"Wed Mar 11 12:51:07 +0000 2020\",\"favourites_count\":2591,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":3335,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1246136541015146496\\\/JZifYs9r_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1246136541015146496\\\/JZifYs9r_normal.jpg\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 19:35:17 +0000 2020\",\"id\":1254131886697431045,\"id_str\":\"1254131886697431045\",\"text\":\"\\u2733\\ufe0f \\u0627\\u0644\\u0633\\u0624\\u0627\\u0644 \\u0627\\u0644\\u062b\\u0627\\u0646\\u064a :\\n\\u0622\\u064a\\u0629 \\u0641\\u064a #\\u0627\\u0644\\u0642\\u0631\\u0622\\u0646 \\u062c\\u0645\\u0639\\u062a \\u0623\\u0631\\u0628\\u0639\\u0629 \\u0623\\u0633\\u0628\\u0627\\u0628 \\u062a\\u062f\\u0631\\u0643 \\u0628\\u0647\\u0627 #\\u0645\\u063a\\u0641\\u0631\\u0629 \\u0627\\u0644\\u0644\\u0647 \\u0644\\u0644\\u0639\\u0628\\u062f \\u0623\\u0630\\u0643\\u0631\\u0647\\u0627 \\u061f \\n\\u0646\\u0633\\u062a\\u0642\\u0628\\u0644 \\u0627\\u0644\\u0625\\u062c\\u0627\\u0628\\u0627\\u062a \\u062d\\u062a\\u0649 \\u063a\\u062f\\u0627\\u064b \\u0627\\u0644\\u2026 https:\\\/\\\/t.co\\\/KYsIapnzTI\",\"truncated\":true,\"entities\":{\"hashtags\":[{\"text\":\"\\u0627\\u0644\\u0642\\u0631\\u0622\\u0646\",\"indices\":[26,33]},{\"text\":\"\\u0645\\u063a\\u0641\\u0631\\u0629\",\"indices\":[60,66]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/KYsIapnzTI\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254131886697431045\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"iso_language_code\":\"ar\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":3327219576,\"id_str\":\"3327219576\",\"name\":\"\\u0639\\u064a\\u0648\\u0646 \\u0627\\u0644\\u0634\\u0631\\u0642\\u064a\\u0629 \\ud83c\\uddf8\\ud83c\\udde6\",\"screen_name\":\"SharqiyaOyun\",\"location\":\"\",\"description\":\"| \\u0645\\u0646\\u0635\\u0629 #\\u0625\\u0639\\u0644\\u0627\\u0645\\u064a\\u0629 \\u0644\\u0646\\u0634\\u0631 #\\u0623\\u062d\\u062f\\u0627\\u062b \\u0648 #\\u0641\\u0639\\u0627\\u0644\\u064a\\u0627\\u062a \\u0648 #\\u0625\\u0639\\u0644\\u0627\\u0646\\u0627\\u062a #\\u0627\\u0644\\u0645\\u0646\\u0637\\u0642\\u0629_\\u0627\\u0644\\u0634\\u0631\\u0642\\u064a\\u0629 #\\u062a\\u0647\\u062f\\u0641 \\u0644\\u0625\\u064a\\u062c\\u0627\\u062f \\u0625\\u0639\\u0644\\u0627\\u0645 #\\u0646\\u0627\\u062c\\u062d #\\u0645\\u0633\\u0624\\u0648\\u0644 \\u062a\\u062c\\u0627\\u0647 #\\u0648\\u0637\\u0646\\u0647 \\u0648\\u0645\\u062c\\u062a\\u0645\\u0639\\u0647 \\u0648\\u0641\\u0642\\u0627\\u064b #\\u0644\\u0631\\u0624\\u064a\\u0629 2030 \\u0628\\u0640 #\\u0625\\u0634\\u0631\\u0627\\u0641 \\u0641\\u0631\\u064a\\u0642 #\\u0625\\u0639\\u0644\\u0627\\u0645\\u064a\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":56770,\"friends_count\":202,\"listed_count\":97,\"created_at\":\"Sun Aug 23 21:50:25 +0000 2015\",\"favourites_count\":3920,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":39511,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1179520814296784896\\\/Dj5_aP9F_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1179520814296784896\\\/Dj5_aP9F_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/3327219576\\\/1587401418\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":1660,\"favorite_count\":638,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ar\"},\"is_quote_status\":false,\"retweet_count\":1660,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"ar\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511171031041,\"id_str\":\"1254206511171031041\",\"text\":\"@PeterSchiff Peter they\\u2019ve got an old pic of you. Get them to update with your Twitter pic. You look older and wise\\u2026 https:\\\/\\\/t.co\\\/IUo7JDo2u9\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"PeterSchiff\",\"name\":\"Peter Schiff\",\"id\":56562803,\"id_str\":\"56562803\",\"indices\":[0,12]}],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/IUo7JDo2u9\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254206511171031041\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":1253764294421987329,\"in_reply_to_status_id_str\":\"1253764294421987329\",\"in_reply_to_user_id\":56562803,\"in_reply_to_user_id_str\":\"56562803\",\"in_reply_to_screen_name\":\"PeterSchiff\",\"user\":{\"id\":39978586,\"id_str\":\"39978586\",\"name\":\"Steve JB\",\"screen_name\":\"rhcp_steve\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":8,\"friends_count\":34,\"listed_count\":0,\"created_at\":\"Thu May 14 11:59:30 +0000 2009\",\"favourites_count\":136,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":151,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"}],\"search_metadata\":{\"completed_in\":0.104,\"max_id\":1254206512068734977,\"max_id_str\":\"1254206512068734977\",\"next_results\":\"?max_id=1254206511171031040&q=twitter&include_entities=1\",\"query\":\"twitter\",\"refresh_url\":\"?since_id=1254206512068734977&q=twitter&include_entities=1\",\"count\":15,\"since_id\":0,\"since_id_str\":\"0\"}}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetSearchTweetsWithMaxId.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetSearchTweetsWithMaxId.json deleted file mode 100644 index 0a6471cd..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetSearchTweetsWithMaxId.json +++ /dev/null @@ -1,46 +0,0 @@ -[{ - "request": { - "method": "GET", - "url": "https:\/\/api.twitter.com\/1.1\/search\/tweets.json?max_id=1254206511171031041&q=twitter", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"OPWXmWD4p%2FgCquqMxYnispg%2BJnI%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "13698", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:50 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:50 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_xE9B4fzDXgzvJ7jG6MLNsw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:50 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111059256410; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:50 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "dfeb32ee81ac07fc5a2c05cd515a12eb", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-rate-limit-limit": "180", - "x-rate-limit-remaining": "175", - "x-rate-limit-reset": "1587861623", - "x-response-time": "199", - "x-transaction": "000aa9600062bd1e", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"statuses\":[{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511171031041,\"id_str\":\"1254206511171031041\",\"text\":\"@PeterSchiff Peter they\\u2019ve got an old pic of you. Get them to update with your Twitter pic. You look older and wise\\u2026 https:\\\/\\\/t.co\\\/IUo7JDo2u9\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"PeterSchiff\",\"name\":\"Peter Schiff\",\"id\":56562803,\"id_str\":\"56562803\",\"indices\":[0,12]}],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/IUo7JDo2u9\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254206511171031041\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":1253764294421987329,\"in_reply_to_status_id_str\":\"1253764294421987329\",\"in_reply_to_user_id\":56562803,\"in_reply_to_user_id_str\":\"56562803\",\"in_reply_to_screen_name\":\"PeterSchiff\",\"user\":{\"id\":39978586,\"id_str\":\"39978586\",\"name\":\"Steve JB\",\"screen_name\":\"rhcp_steve\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":8,\"friends_count\":34,\"listed_count\":0,\"created_at\":\"Thu May 14 11:59:30 +0000 2009\",\"favourites_count\":136,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":151,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511166836736,\"id_str\":\"1254206511166836736\",\"text\":\"RT @raffine_svtww: \\ud30c\\ud2b8 \\uc801\\uc740 4\\uba85 \\uc911\\uc5d0 \\uadf8\\ub798\\ub3c4 \\uadf8\\ub098\\ub9c8 \\uc138\\uba85\\uc740 \\ud37c\\ud3ec\\ud300\\uc774\\ub77c \\ubb34\\ub300 \\uc704\\uc5d0\\uc11c \\uc548\\ubb34\\ud558\\ub294 \\uac74 \\ubcf4\\uc774\\ub294\\ub370 \\uc6d0\\uc6b0\\ub294 \\ud30c\\ud2b8\\ub3c4 \\uc801\\uc740\\ub370 \\ub3d9\\uc120\\ub3c4 \\ub9e8\\ub0a0 \\ub4b7\\ub4b7\\uc904,\\ub4b7\\ub4b7\\ub4b7\\uc904\\uc774\\ub77c \\ubb34\\ub300 \\uc704\\uc5d0\\uc11c \\uba64\\ubc84 \\uc548 \\uac78\\ub9b0 \\uc0c1\\ud0dc\\ub85c \\uc560\\ub97c \\ubcf4\\uae30\\ub294 \\uc815\\ub9d0 \\ud558\\ub298\\uc758 \\ubcc4\\ub530\\uae30.. 2\\ub144\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"raffine_svtww\",\"name\":\"\\uc6d0\\uc6b0\\ud83e\\uddda\\ud83c\\udffb\\u200d\\u2642\\ufe0fRaffine\",\"id\":826694346116194304,\"id_str\":\"826694346116194304\",\"indices\":[3,17]}],\"urls\":[]},\"metadata\":{\"result_type\":\"recent\",\"iso_language_code\":\"ko\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":735107767,\"id_str\":\"735107767\",\"name\":\"\\ubc31\\ud558\",\"screen_name\":\"dkwye17\",\"location\":\"\",\"description\":\"4\\uae30 \\uce90\\ub7ff!! \\ub2a6\\ub355\\uc785\\ub2c8\\ub2e4\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":26,\"friends_count\":186,\"listed_count\":0,\"created_at\":\"Fri Aug 03 15:57:33 +0000 2012\",\"favourites_count\":2924,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":45344,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"0099B9\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1229159898379767808\\\/ujP9hUZw_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1229159898379767808\\\/ujP9hUZw_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/735107767\\\/1581889530\",\"profile_link_color\":\"0099B9\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 19:29:57 +0000 2020\",\"id\":1254130547049164800,\"id_str\":\"1254130547049164800\",\"text\":\"\\ud30c\\ud2b8 \\uc801\\uc740 4\\uba85 \\uc911\\uc5d0 \\uadf8\\ub798\\ub3c4 \\uadf8\\ub098\\ub9c8 \\uc138\\uba85\\uc740 \\ud37c\\ud3ec\\ud300\\uc774\\ub77c \\ubb34\\ub300 \\uc704\\uc5d0\\uc11c \\uc548\\ubb34\\ud558\\ub294 \\uac74 \\ubcf4\\uc774\\ub294\\ub370 \\uc6d0\\uc6b0\\ub294 \\ud30c\\ud2b8\\ub3c4 \\uc801\\uc740\\ub370 \\ub3d9\\uc120\\ub3c4 \\ub9e8\\ub0a0 \\ub4b7\\ub4b7\\uc904,\\ub4b7\\ub4b7\\ub4b7\\uc904\\uc774\\ub77c \\ubb34\\ub300 \\uc704\\uc5d0\\uc11c \\uba64\\ubc84 \\uc548 \\uac78\\ub9b0 \\uc0c1\\ud0dc\\ub85c \\uc560\\ub97c \\ubcf4\\uae30\\ub294 \\uc815\\ub9d0 \\ud558\\ub298\\uc758 \\ubcc4\\ub530\\uae30\\u2026 https:\\\/\\\/t.co\\\/o45JXOl0oS\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/o45JXOl0oS\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254130547049164800\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"result_type\":\"recent\",\"iso_language_code\":\"ko\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":826694346116194304,\"id_str\":\"826694346116194304\",\"name\":\"\\uc6d0\\uc6b0\\ud83e\\uddda\\ud83c\\udffb\\u200d\\u2642\\ufe0fRaffine\",\"screen_name\":\"raffine_svtww\",\"location\":\"raffineww@gmail.com\",\"description\":\"Seventeen Wonwoo\\u2764\\ufe0finstagram\\u27a1\\ufe0fraffineww HQ\\u27a1\\ufe0f\\ud83d\\udc9c #\\uc6d0\\uc6b0 #WONWOO #\\u30a6\\u30a9\\u30cc #\\uc138\\ube10\\ud2f4 #SEVENTEEN\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":90302,\"friends_count\":9,\"listed_count\":3142,\"created_at\":\"Wed Feb 01 07:31:06 +0000 2017\",\"favourites_count\":3527,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":6624,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1247560030708105222\\\/jVe19ms0_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1247560030708105222\\\/jVe19ms0_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/826694346116194304\\\/1543312038\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":45,\"favorite_count\":80,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ko\"},\"is_quote_status\":false,\"retweet_count\":45,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"ko\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511162802178,\"id_str\":\"1254206511162802178\",\"text\":\"RT @vivianagrondona: Acabo de terminar mi obra de arte en cuarentena, no puedo creer que hayan quedado tan hermosos!\\ud83d\\udc96\\ud83d\\ude4c\\ud83c\\udffc\\ud83c\\udf08\\u2728 retweet si te los\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"vivianagrondona\",\"name\":\"Viviana Grondona.\",\"id\":1009407560,\"id_str\":\"1009407560\",\"indices\":[3,19]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"es\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":135680613,\"id_str\":\"135680613\",\"name\":\"Rexy Jane\",\"screen_name\":\"miss_minicherry\",\"location\":\"\\ud83c\\uddf2\\ud83c\\uddfd\",\"description\":\"We can live like Jack and Sally if you want...\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":393,\"friends_count\":3223,\"listed_count\":1,\"created_at\":\"Thu Apr 22 00:29:25 +0000 2010\",\"favourites_count\":21415,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":4431,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"642D8B\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1250301277260529669\\\/2o5ggA34_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1250301277260529669\\\/2o5ggA34_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/135680613\\\/1578468508\",\"profile_link_color\":\"AA18C7\",\"profile_sidebar_border_color\":\"6300D4\",\"profile_sidebar_fill_color\":\"7AC3EE\",\"profile_text_color\":\"3D1957\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 22:46:55 +0000 2020\",\"id\":1254180113819852801,\"id_str\":\"1254180113819852801\",\"text\":\"Acabo de terminar mi obra de arte en cuarentena, no puedo creer que hayan quedado tan hermosos!\\ud83d\\udc96\\ud83d\\ude4c\\ud83c\\udffc\\ud83c\\udf08\\u2728 retweet si te\\u2026 https:\\\/\\\/t.co\\\/pg3PNy92hH\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/pg3PNy92hH\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254180113819852801\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[116,139]}]},\"metadata\":{\"iso_language_code\":\"es\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1009407560,\"id_str\":\"1009407560\",\"name\":\"Viviana Grondona.\",\"screen_name\":\"vivianagrondona\",\"location\":\"Bogot\\u00e1, D.C., Colombia\",\"description\":\"Dibujo. dibujo en todas partes\",\"url\":\"https:\\\/\\\/t.co\\\/JpZMAnWlLi\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/JpZMAnWlLi\",\"expanded_url\":\"https:\\\/\\\/www.instagram.com\\\/vivianagrondona\\\/?hl=es\",\"display_url\":\"instagram.com\\\/vivianagrondon\\u2026\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":24119,\"friends_count\":215,\"listed_count\":23,\"created_at\":\"Thu Dec 13 18:13:09 +0000 2012\",\"favourites_count\":3439,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":464,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFB499\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/916134587532791809\\\/HgWSoc5Z_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/916134587532791809\\\/HgWSoc5Z_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1009407560\\\/1508186831\",\"profile_link_color\":\"FA9696\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":150,\"favorite_count\":973,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"es\"},\"is_quote_status\":false,\"retweet_count\":150,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"es\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511162613761,\"id_str\":\"1254206511162613761\",\"text\":\"RT @HKR20_official: \\u672c\\u65e5\\u3082\\u3054\\u8996\\u8074\\u3042\\u308a\\u304c\\u3068\\u3046\\u3054\\u3056\\u3044\\u307e\\u3057\\u305f\\u3002\\u653e\\u9001\\u5f8c\\u306f\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u30b7\\u30ea\\u30fc\\u30ba\\u306e\\u6700\\u65b0\\u60c5\\u5831\\u3092\\u516c\\u5f0f\\u30b5\\u30a4\\u30c8\\u3067\\u662f\\u975e\\u2728\\n\\nhttps:\\\/\\\/t.co\\\/3IQWuav2Zn\\n\\n#\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u30bc\\u30ed\\u30ef\\u30f3 #nitiasa https:\\\/\\\/t.co\\\/2m9j5p55DU\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u30bc\\u30ed\\u30ef\\u30f3\",\"indices\":[94,105]},{\"text\":\"nitiasa\",\"indices\":[106,114]}],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"HKR20_official\",\"name\":\"\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u516c\\u5f0f\",\"id\":1023878417899372545,\"id_str\":\"1023878417899372545\",\"indices\":[3,18]}],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3IQWuav2Zn\",\"expanded_url\":\"https:\\\/\\\/kamen-rider-official.com\\\/weekly_topics\\\/40\",\"display_url\":\"kamen-rider-official.com\\\/weekly_topics\\\/\\u2026\",\"indices\":[69,92]}],\"media\":[{\"id\":1254205319468552192,\"id_str\":\"1254205319468552192\",\"indices\":[115,138],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVF85UEAA8I3D.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVF85UEAA8I3D.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2m9j5p55DU\",\"display_url\":\"pic.twitter.com\\\/2m9j5p55DU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/HKR20_official\\\/status\\\/1254205326095642625\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1000,\"h\":750,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":750,\"resize\":\"fit\"}},\"source_status_id\":1254205326095642625,\"source_status_id_str\":\"1254205326095642625\",\"source_user_id\":1023878417899372545,\"source_user_id_str\":\"1023878417899372545\"}]},\"extended_entities\":{\"media\":[{\"id\":1254205319468552192,\"id_str\":\"1254205319468552192\",\"indices\":[115,138],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVF85UEAA8I3D.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVF85UEAA8I3D.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2m9j5p55DU\",\"display_url\":\"pic.twitter.com\\\/2m9j5p55DU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/HKR20_official\\\/status\\\/1254205326095642625\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1000,\"h\":750,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":750,\"resize\":\"fit\"}},\"source_status_id\":1254205326095642625,\"source_status_id_str\":\"1254205326095642625\",\"source_user_id\":1023878417899372545,\"source_user_id_str\":\"1023878417899372545\"},{\"id\":1254205323314749440,\"id_str\":\"1254205323314749440\",\"indices\":[115,138],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVGLOUYAALANf.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVGLOUYAALANf.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2m9j5p55DU\",\"display_url\":\"pic.twitter.com\\\/2m9j5p55DU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/HKR20_official\\\/status\\\/1254205326095642625\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":680,\"h\":356,\"resize\":\"fit\"},\"large\":{\"w\":1280,\"h\":670,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1200,\"h\":628,\"resize\":\"fit\"}},\"source_status_id\":1254205326095642625,\"source_status_id_str\":\"1254205326095642625\",\"source_user_id\":1023878417899372545,\"source_user_id_str\":\"1023878417899372545\"}]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":843724376180576257,\"id_str\":\"843724376180576257\",\"name\":\"\\ud83c\\uddfa\\ud83c\\uddf8YOSHIHISA\\ud83c\\uddfa\\ud83c\\uddf8\",\"screen_name\":\"yosshii1002\",\"location\":\"\\u798f\\u5ca1 \\u798f\\u5ca1\\u5e02 \\u4e2d\\u592e\\u533a\",\"description\":\"WE ARE X\\uff01\\uff01\\uff01\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":231,\"friends_count\":753,\"listed_count\":0,\"created_at\":\"Mon Mar 20 07:22:21 +0000 2017\",\"favourites_count\":299491,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":7654,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1171661771616268290\\\/JHyfbwxV_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1171661771616268290\\\/JHyfbwxV_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/843724376180576257\\\/1536253021\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sun Apr 26 00:27:06 +0000 2020\",\"id\":1254205326095642625,\"id_str\":\"1254205326095642625\",\"text\":\"\\u672c\\u65e5\\u3082\\u3054\\u8996\\u8074\\u3042\\u308a\\u304c\\u3068\\u3046\\u3054\\u3056\\u3044\\u307e\\u3057\\u305f\\u3002\\u653e\\u9001\\u5f8c\\u306f\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u30b7\\u30ea\\u30fc\\u30ba\\u306e\\u6700\\u65b0\\u60c5\\u5831\\u3092\\u516c\\u5f0f\\u30b5\\u30a4\\u30c8\\u3067\\u662f\\u975e\\u2728\\n\\nhttps:\\\/\\\/t.co\\\/3IQWuav2Zn\\n\\n#\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u30bc\\u30ed\\u30ef\\u30f3 #nitiasa https:\\\/\\\/t.co\\\/2m9j5p55DU\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u30bc\\u30ed\\u30ef\\u30f3\",\"indices\":[74,85]},{\"text\":\"nitiasa\",\"indices\":[86,94]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3IQWuav2Zn\",\"expanded_url\":\"https:\\\/\\\/kamen-rider-official.com\\\/weekly_topics\\\/40\",\"display_url\":\"kamen-rider-official.com\\\/weekly_topics\\\/\\u2026\",\"indices\":[49,72]}],\"media\":[{\"id\":1254205319468552192,\"id_str\":\"1254205319468552192\",\"indices\":[95,118],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVF85UEAA8I3D.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVF85UEAA8I3D.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2m9j5p55DU\",\"display_url\":\"pic.twitter.com\\\/2m9j5p55DU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/HKR20_official\\\/status\\\/1254205326095642625\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1000,\"h\":750,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":750,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254205319468552192,\"id_str\":\"1254205319468552192\",\"indices\":[95,118],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVF85UEAA8I3D.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVF85UEAA8I3D.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2m9j5p55DU\",\"display_url\":\"pic.twitter.com\\\/2m9j5p55DU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/HKR20_official\\\/status\\\/1254205326095642625\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1000,\"h\":750,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":750,\"resize\":\"fit\"}}},{\"id\":1254205323314749440,\"id_str\":\"1254205323314749440\",\"indices\":[95,118],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVGLOUYAALANf.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfVGLOUYAALANf.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2m9j5p55DU\",\"display_url\":\"pic.twitter.com\\\/2m9j5p55DU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/HKR20_official\\\/status\\\/1254205326095642625\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":680,\"h\":356,\"resize\":\"fit\"},\"large\":{\"w\":1280,\"h\":670,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1200,\"h\":628,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/social.userlocal.jp\\\/\\\" rel=\\\"nofollow\\\"\\u003eSocial Insight Post\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1023878417899372545,\"id_str\":\"1023878417899372545\",\"name\":\"\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u516c\\u5f0f\",\"screen_name\":\"HKR20_official\",\"location\":\"\",\"description\":\"\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u30b7\\u30ea\\u30fc\\u30ba\\u306e\\u516c\\u5f0fTwitter\\u3067\\u3059\\u3002\\u5e73\\u6210\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc20\\u4f5c\\u54c1\\u8a18\\u5ff5\\u516c\\u5f0fTwitter\\u304c\\u30ea\\u30cb\\u30e5\\u30fc\\u30a2\\u30eb\\u3057\\u307e\\u3057\\u305f\\u3002\\u3042\\u308f\\u305b\\u306620\\u4f5c\\u54c1\\u8a18\\u5ff5\\u516c\\u5f0f\\u30b5\\u30a4\\u30c8\\u3082\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fc\\u516c\\u5f0f\\u30dd\\u30fc\\u30bf\\u30eb\\u30b5\\u30a4\\u30c8\\u300c\\u4eee\\u9762\\u30e9\\u30a4\\u30c0\\u30fcWEB\\u300d\\u306b\\u306a\\u3063\\u3066\\u304a\\u308a\\u307e\\u3059\\u3002\\u3053\\u308c\\u307e\\u3067\\u3088\\u308a\\u4e00\\u5c64\\u3001\\u30d5\\u30a1\\u30f3\\u306e\\u7686\\u69d8\\u306b\\u697d\\u3057\\u3093\\u3067\\u9802\\u3051\\u308b\\u3088\\u3046\\u306b\\u52aa\\u3081\\u3066\\u307e\\u3044\\u308a\\u307e\\u3059\\u306e\\u3067\\u3001\\u5b9c\\u3057\\u304f\\u304a\\u9858\\u3044\\u81f4\\u3057\\u307e\\u3059\\u3002\",\"url\":\"https:\\\/\\\/t.co\\\/lWszSeoFqn\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/lWszSeoFqn\",\"expanded_url\":\"https:\\\/\\\/www.kamen-rider-official.com\\\/\",\"display_url\":\"kamen-rider-official.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":183400,\"friends_count\":45,\"listed_count\":1160,\"created_at\":\"Mon Jul 30 10:30:12 +0000 2018\",\"favourites_count\":3507,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":3191,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1170508535613906945\\\/OwSy1M2q_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1170508535613906945\\\/OwSy1M2q_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1023878417899372545\\\/1567041258\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":723,\"favorite_count\":947,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ja\"},\"is_quote_status\":false,\"retweet_count\":723,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":true,\"lang\":\"ja\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511158566912,\"id_str\":\"1254206511158566912\",\"text\":\"RT @b_alone0: https:\\\/\\\/t.co\\\/2IPUASJd99\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"b_alone0\",\"name\":\"\\u0628\\u0627\\u0644\\u0648\\u0646\",\"id\":1059742467053047809,\"id_str\":\"1059742467053047809\",\"indices\":[3,12]}],\"urls\":[],\"media\":[{\"id\":1253778566283657222,\"id_str\":\"1253778566283657222\",\"indices\":[14,37],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZQ9pZWAAYLkUu.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZQ9pZWAAYLkUu.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2IPUASJd99\",\"display_url\":\"pic.twitter.com\\\/2IPUASJd99\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/b_alone0\\\/status\\\/1253778573636382721\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":700,\"h\":834,\"resize\":\"fit\"},\"small\":{\"w\":571,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":700,\"h\":834,\"resize\":\"fit\"}},\"source_status_id\":1253778573636382721,\"source_status_id_str\":\"1253778573636382721\",\"source_user_id\":1059742467053047809,\"source_user_id_str\":\"1059742467053047809\"}]},\"extended_entities\":{\"media\":[{\"id\":1253778566283657222,\"id_str\":\"1253778566283657222\",\"indices\":[14,37],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZQ9pZWAAYLkUu.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZQ9pZWAAYLkUu.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2IPUASJd99\",\"display_url\":\"pic.twitter.com\\\/2IPUASJd99\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/b_alone0\\\/status\\\/1253778573636382721\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":700,\"h\":834,\"resize\":\"fit\"},\"small\":{\"w\":571,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":700,\"h\":834,\"resize\":\"fit\"}},\"source_status_id\":1253778573636382721,\"source_status_id_str\":\"1253778573636382721\",\"source_user_id\":1059742467053047809,\"source_user_id_str\":\"1059742467053047809\"}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":843538687,\"id_str\":\"843538687\",\"name\":\"hussam\",\"screen_name\":\"legendhussam\",\"location\":\"\",\"description\":\"yeah my shit is crooked, look how far I done got without it...\\numst\",\"url\":\"https:\\\/\\\/t.co\\\/L1sw6f1r4P\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/L1sw6f1r4P\",\"expanded_url\":\"https:\\\/\\\/curiouscat.me\\\/legendhussam?t=1551488678\",\"display_url\":\"curiouscat.me\\\/legendhussam?t\\u2026\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":217,\"friends_count\":203,\"listed_count\":1,\"created_at\":\"Mon Sep 24 12:50:16 +0000 2012\",\"favourites_count\":2592,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":2998,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1216076037114691584\\\/CGxbC2tm_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1216076037114691584\\\/CGxbC2tm_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/843538687\\\/1538738245\",\"profile_link_color\":\"ABB8C2\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Fri Apr 24 20:11:20 +0000 2020\",\"id\":1253778573636382721,\"id_str\":\"1253778573636382721\",\"text\":\"https:\\\/\\\/t.co\\\/2IPUASJd99\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1253778566283657222,\"id_str\":\"1253778566283657222\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZQ9pZWAAYLkUu.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZQ9pZWAAYLkUu.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2IPUASJd99\",\"display_url\":\"pic.twitter.com\\\/2IPUASJd99\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/b_alone0\\\/status\\\/1253778573636382721\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":700,\"h\":834,\"resize\":\"fit\"},\"small\":{\"w\":571,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":700,\"h\":834,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1253778566283657222,\"id_str\":\"1253778566283657222\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZQ9pZWAAYLkUu.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZQ9pZWAAYLkUu.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/2IPUASJd99\",\"display_url\":\"pic.twitter.com\\\/2IPUASJd99\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/b_alone0\\\/status\\\/1253778573636382721\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":700,\"h\":834,\"resize\":\"fit\"},\"small\":{\"w\":571,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":700,\"h\":834,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1059742467053047809,\"id_str\":\"1059742467053047809\",\"name\":\"\\u0628\\u0627\\u0644\\u0648\\u0646\",\"screen_name\":\"b_alone0\",\"location\":\"\",\"description\":\"\\u0627\\u0630\\u0627 \\u0643\\u0628\\u0631\\u062a\\u0647\\u0627 \\u062a\\u0643\\u0628\\u0631, \\u0648\\u0627\\u0630\\u0627 \\u0635\\u063a\\u0631\\u062a\\u0647\\u0627 \\u062a\\u0635\\u063a\\u0631\",\"url\":\"https:\\\/\\\/t.co\\\/qE4KJRbCQp\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/qE4KJRbCQp\",\"expanded_url\":\"https:\\\/\\\/curiouscat.me\\\/balloon\",\"display_url\":\"curiouscat.me\\\/balloon\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":20337,\"friends_count\":417,\"listed_count\":54,\"created_at\":\"Tue Nov 06 09:41:08 +0000 2018\",\"favourites_count\":14,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":21154,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1232421419633565697\\\/71ascTCD_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1232421419633565697\\\/71ascTCD_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1059742467053047809\\\/1545703535\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":1615,\"favorite_count\":4306,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},\"is_quote_status\":false,\"retweet_count\":1615,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511154368519,\"id_str\":\"1254206511154368519\",\"text\":\"RT @thechef71: @mitchellvii https:\\\/\\\/t.co\\\/8Q55DFd6BY\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"thechef71\",\"name\":\"The Chef\",\"id\":10574352,\"id_str\":\"10574352\",\"indices\":[3,13]},{\"screen_name\":\"mitchellvii\",\"name\":\"Bill Mitchell\",\"id\":17980523,\"id_str\":\"17980523\",\"indices\":[15,27]}],\"urls\":[],\"media\":[{\"id\":1254076867830853633,\"id_str\":\"1254076867830853633\",\"indices\":[28,51],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdgRFQXsAEikEc.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdgRFQXsAEikEc.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/8Q55DFd6BY\",\"display_url\":\"pic.twitter.com\\\/8Q55DFd6BY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/thechef71\\\/status\\\/1254076871911800833\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":865,\"h\":960,\"resize\":\"fit\"},\"medium\":{\"w\":865,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":613,\"h\":680,\"resize\":\"fit\"}},\"source_status_id\":1254076871911800833,\"source_status_id_str\":\"1254076871911800833\",\"source_user_id\":10574352,\"source_user_id_str\":\"10574352\"}]},\"extended_entities\":{\"media\":[{\"id\":1254076867830853633,\"id_str\":\"1254076867830853633\",\"indices\":[28,51],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdgRFQXsAEikEc.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdgRFQXsAEikEc.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/8Q55DFd6BY\",\"display_url\":\"pic.twitter.com\\\/8Q55DFd6BY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/thechef71\\\/status\\\/1254076871911800833\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":865,\"h\":960,\"resize\":\"fit\"},\"medium\":{\"w\":865,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":613,\"h\":680,\"resize\":\"fit\"}},\"source_status_id\":1254076871911800833,\"source_status_id_str\":\"1254076871911800833\",\"source_user_id\":10574352,\"source_user_id_str\":\"10574352\"}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2660095619,\"id_str\":\"2660095619\",\"name\":\"Michelle Steines Make America Great Again\\ud83c\\uddfa\\ud83c\\uddf8\",\"screen_name\":\"Scapmichelle\",\"location\":\"New Jersey, USA\",\"description\":\"\\u274c TRUMP America First\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":5914,\"friends_count\":5074,\"listed_count\":163,\"created_at\":\"Tue Jul 01 13:23:23 +0000 2014\",\"favourites_count\":112126,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":122548,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252339771453722625\\\/TP6yXi5j_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252339771453722625\\\/TP6yXi5j_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2660095619\\\/1585362478\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 15:56:40 +0000 2020\",\"id\":1254076871911800833,\"id_str\":\"1254076871911800833\",\"text\":\"@mitchellvii https:\\\/\\\/t.co\\\/8Q55DFd6BY\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"mitchellvii\",\"name\":\"Bill Mitchell\",\"id\":17980523,\"id_str\":\"17980523\",\"indices\":[0,12]}],\"urls\":[],\"media\":[{\"id\":1254076867830853633,\"id_str\":\"1254076867830853633\",\"indices\":[13,36],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdgRFQXsAEikEc.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdgRFQXsAEikEc.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/8Q55DFd6BY\",\"display_url\":\"pic.twitter.com\\\/8Q55DFd6BY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/thechef71\\\/status\\\/1254076871911800833\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":865,\"h\":960,\"resize\":\"fit\"},\"medium\":{\"w\":865,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":613,\"h\":680,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254076867830853633,\"id_str\":\"1254076867830853633\",\"indices\":[13,36],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdgRFQXsAEikEc.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdgRFQXsAEikEc.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/8Q55DFd6BY\",\"display_url\":\"pic.twitter.com\\\/8Q55DFd6BY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/thechef71\\\/status\\\/1254076871911800833\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":865,\"h\":960,\"resize\":\"fit\"},\"medium\":{\"w\":865,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":613,\"h\":680,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":1254072710919000065,\"in_reply_to_status_id_str\":\"1254072710919000065\",\"in_reply_to_user_id\":17980523,\"in_reply_to_user_id_str\":\"17980523\",\"in_reply_to_screen_name\":\"mitchellvii\",\"user\":{\"id\":10574352,\"id_str\":\"10574352\",\"name\":\"The Chef\",\"screen_name\":\"thechef71\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":159,\"friends_count\":594,\"listed_count\":1,\"created_at\":\"Sun Nov 25 23:33:59 +0000 2007\",\"favourites_count\":5541,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":2767,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1241817920151355402\\\/nJhrKSzj_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1241817920151355402\\\/nJhrKSzj_normal.jpg\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":208,\"favorite_count\":432,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},\"is_quote_status\":false,\"retweet_count\":208,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511154204673,\"id_str\":\"1254206511154204673\",\"text\":\"RT @Feb_sounds: \\u3010\\ud83d\\udca5\\u3050\\u3089\\u3059\\u307d\\u30e9\\u30b8\\u30aa#\\uff19\\u516c\\u958b\\ud83d\\udca5\\u3011\\n\\n\\u6628\\u65e5\\u306b\\u5f15\\u304d\\u7d9a\\u304d\\u300c\\u30ea\\u30cb\\u30e5\\u30fc\\u30a2\\u30eb\\u4e00\\u767a\\u76ee\\u7de8\\u2461\\u300d\\u3092\\u516c\\u958b\\u3057\\u307e\\u3057\\u305f\\ud83d\\udcfb\\ud83e\\udd73\\n\\n\\uff12\\u6708\\u306e\\u300c\\u307f\\u305a\\u3057\\u3043\\u611b\\u300d\\u304c\\u66f4\\u306b\\u70b8\\u88c2\\u2665\\ufe0f\\n\\u65b0\\u66f2\\u300eKURA KURA HAIR\\u300f\\u306e\\u6b4c\\u8a5e\\u3092\\u5206\\u6790\\u3057\\u305f\\u7d50\\u679c\\u3001\\u3068\\u3093\\u3067\\u3082\\u306a\\u3044\\u4f5c\\u54c1\\u3067\\u3042\\u3063\\u305f\\u3053\\u3068\\u3092\\u8a3c\\u660e\\u3057\\u307e\\u3059\\u203c\\ufe0f\\ud83e\\uddda\\n\\n\\u6b4c\\u8a5e\\u3063\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"Feb_sounds\",\"name\":\"\\uff12\\u6708\\u3002(DTMer)\",\"id\":954549079953965057,\"id_str\":\"954549079953965057\",\"indices\":[3,14]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":954549079953965057,\"id_str\":\"954549079953965057\",\"name\":\"\\uff12\\u6708\\u3002(DTMer)\",\"screen_name\":\"Feb_sounds\",\"location\":\"\\ud83d\\udc47\\u30db\\u30fc\\u30e0\\u30da\\u30fc\\u30b8\\u306b\\u5404\\u7a2e\\u30ea\\u30f3\\u30af\\u3042\\u308a\\ud83d\\udc47\",\"description\":\"\\uff62\\u306b\\u304c\\u3064\\uff63\\u3068\\u7533\\u3057\\u307e\\u3059\\u3002YouTube\\u306b\\u3066\\u97f3\\u697d\\u6d3b\\u52d5\\u3092\\u3057\\u3066\\u3044\\u307e\\u3059\\ud83c\\udf90\\u4f5c\\u8a5e\\u4f5c\\u66f2\\u7de8\\u66f2\\uff0f\\u30d0\\u30f3\\u30c9\\u30b5\\u30a6\\u30f3\\u30c9\\u304c\\u5f97\\u610f\\uff0f\\u5272\\u7530\\u30c1\\u30eb\\u30c9\\u30ec\\u30f3\\ud83d\\ude80\\u4e43\\u6728\\u5742\\u25e2\\u2074\\u2076\\u9ad8\\u5c71\\u4e00\\u5b9f\\u3055\\u3093\\u63a8\\u3057\\ud83c\\udf3a\\u3010TheGrasspopper's\\u3011\\u5275\\u8a2d\\u8005\\uff0fhttps:\\\/\\\/t.co\\\/i2Bn4XFS6v\",\"url\":\"https:\\\/\\\/t.co\\\/LkGFPuhBI0\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/LkGFPuhBI0\",\"expanded_url\":\"http:\\\/\\\/site-1631148-4039-1706february2.strikingly.com\\\/\",\"display_url\":\"\\u2026148-4039-1706february2.strikingly.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/i2Bn4XFS6v\",\"expanded_url\":\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCrGnlGdJZ8pn2Fl5G19Hj4A\",\"display_url\":\"youtube.com\\\/channel\\\/UCrGnl\\u2026\",\"indices\":[94,117]}]}},\"protected\":false,\"followers_count\":1955,\"friends_count\":1933,\"listed_count\":18,\"created_at\":\"Sat Jan 20 03:00:10 +0000 2018\",\"favourites_count\":16589,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":10375,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1212310636744462337\\\/FGx8YAuU_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1212310636744462337\\\/FGx8YAuU_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/954549079953965057\\\/1578799295\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 10:37:54 +0000 2020\",\"id\":1253996651410124800,\"id_str\":\"1253996651410124800\",\"text\":\"\\u3010\\ud83d\\udca5\\u3050\\u3089\\u3059\\u307d\\u30e9\\u30b8\\u30aa#\\uff19\\u516c\\u958b\\ud83d\\udca5\\u3011\\n\\n\\u6628\\u65e5\\u306b\\u5f15\\u304d\\u7d9a\\u304d\\u300c\\u30ea\\u30cb\\u30e5\\u30fc\\u30a2\\u30eb\\u4e00\\u767a\\u76ee\\u7de8\\u2461\\u300d\\u3092\\u516c\\u958b\\u3057\\u307e\\u3057\\u305f\\ud83d\\udcfb\\ud83e\\udd73\\n\\n\\uff12\\u6708\\u306e\\u300c\\u307f\\u305a\\u3057\\u3043\\u611b\\u300d\\u304c\\u66f4\\u306b\\u70b8\\u88c2\\u2665\\ufe0f\\n\\u65b0\\u66f2\\u300eKURA KURA HAIR\\u300f\\u306e\\u6b4c\\u8a5e\\u3092\\u5206\\u6790\\u3057\\u305f\\u7d50\\u679c\\u3001\\u3068\\u3093\\u3067\\u3082\\u306a\\u3044\\u4f5c\\u54c1\\u3067\\u3042\\u3063\\u305f\\u3053\\u3068\\u3092\\u8a3c\\u660e\\u3057\\u307e\\u3059\\u2026 https:\\\/\\\/t.co\\\/CSCMuyX2Os\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/CSCMuyX2Os\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1253996651410124800\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"iso_language_code\":\"ja\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":954549079953965057,\"id_str\":\"954549079953965057\",\"name\":\"\\uff12\\u6708\\u3002(DTMer)\",\"screen_name\":\"Feb_sounds\",\"location\":\"\\ud83d\\udc47\\u30db\\u30fc\\u30e0\\u30da\\u30fc\\u30b8\\u306b\\u5404\\u7a2e\\u30ea\\u30f3\\u30af\\u3042\\u308a\\ud83d\\udc47\",\"description\":\"\\uff62\\u306b\\u304c\\u3064\\uff63\\u3068\\u7533\\u3057\\u307e\\u3059\\u3002YouTube\\u306b\\u3066\\u97f3\\u697d\\u6d3b\\u52d5\\u3092\\u3057\\u3066\\u3044\\u307e\\u3059\\ud83c\\udf90\\u4f5c\\u8a5e\\u4f5c\\u66f2\\u7de8\\u66f2\\uff0f\\u30d0\\u30f3\\u30c9\\u30b5\\u30a6\\u30f3\\u30c9\\u304c\\u5f97\\u610f\\uff0f\\u5272\\u7530\\u30c1\\u30eb\\u30c9\\u30ec\\u30f3\\ud83d\\ude80\\u4e43\\u6728\\u5742\\u25e2\\u2074\\u2076\\u9ad8\\u5c71\\u4e00\\u5b9f\\u3055\\u3093\\u63a8\\u3057\\ud83c\\udf3a\\u3010TheGrasspopper's\\u3011\\u5275\\u8a2d\\u8005\\uff0fhttps:\\\/\\\/t.co\\\/i2Bn4XFS6v\",\"url\":\"https:\\\/\\\/t.co\\\/LkGFPuhBI0\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/LkGFPuhBI0\",\"expanded_url\":\"http:\\\/\\\/site-1631148-4039-1706february2.strikingly.com\\\/\",\"display_url\":\"\\u2026148-4039-1706february2.strikingly.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/i2Bn4XFS6v\",\"expanded_url\":\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCrGnlGdJZ8pn2Fl5G19Hj4A\",\"display_url\":\"youtube.com\\\/channel\\\/UCrGnl\\u2026\",\"indices\":[94,117]}]}},\"protected\":false,\"followers_count\":1955,\"friends_count\":1933,\"listed_count\":18,\"created_at\":\"Sat Jan 20 03:00:10 +0000 2018\",\"favourites_count\":16589,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":10375,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1212310636744462337\\\/FGx8YAuU_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1212310636744462337\\\/FGx8YAuU_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/954549079953965057\\\/1578799295\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":1,\"favorite_count\":6,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ja\"},\"is_quote_status\":false,\"retweet_count\":1,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"ja\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511146061824,\"id_str\":\"1254206511146061824\",\"text\":\"RT @Tik_Tokers_: Error de calculo https:\\\/\\\/t.co\\\/ew3lt96L2Y\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"Tik_Tokers_\",\"name\":\"Tik Tokers\",\"id\":976340242881015814,\"id_str\":\"976340242881015814\",\"indices\":[3,15]}],\"urls\":[],\"media\":[{\"id\":1254198030456229889,\"id_str\":\"1254198030456229889\",\"indices\":[34,57],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198030456229889\\\/pu\\\/img\\\/5GCvS6_dUfUtRbcy.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198030456229889\\\/pu\\\/img\\\/5GCvS6_dUfUtRbcy.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ew3lt96L2Y\",\"display_url\":\"pic.twitter.com\\\/ew3lt96L2Y\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/Tik_Tokers_\\\/status\\\/1254198133313191936\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":576,\"h\":1024,\"resize\":\"fit\"},\"medium\":{\"w\":576,\"h\":1024,\"resize\":\"fit\"}},\"source_status_id\":1254198133313191936,\"source_status_id_str\":\"1254198133313191936\",\"source_user_id\":976340242881015814,\"source_user_id_str\":\"976340242881015814\"}]},\"extended_entities\":{\"media\":[{\"id\":1254198030456229889,\"id_str\":\"1254198030456229889\",\"indices\":[34,57],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198030456229889\\\/pu\\\/img\\\/5GCvS6_dUfUtRbcy.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198030456229889\\\/pu\\\/img\\\/5GCvS6_dUfUtRbcy.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ew3lt96L2Y\",\"display_url\":\"pic.twitter.com\\\/ew3lt96L2Y\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/Tik_Tokers_\\\/status\\\/1254198133313191936\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":576,\"h\":1024,\"resize\":\"fit\"},\"medium\":{\"w\":576,\"h\":1024,\"resize\":\"fit\"}},\"source_status_id\":1254198133313191936,\"source_status_id_str\":\"1254198133313191936\",\"source_user_id\":976340242881015814,\"source_user_id_str\":\"976340242881015814\",\"video_info\":{\"aspect_ratio\":[9,16],\"duration_millis\":35351,\"variants\":[{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198030456229889\\\/pu\\\/vid\\\/360x640\\\/30eP9ptknO3qLid-.mp4?tag=10\"},{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198030456229889\\\/pu\\\/pl\\\/NXuY-zobKc-6axzl.m3u8?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198030456229889\\\/pu\\\/vid\\\/576x1024\\\/Ck76pIe6yXKpNyVZ.mp4?tag=10\"},{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198030456229889\\\/pu\\\/vid\\\/320x568\\\/RCXAMh3Ovls7yeiM.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false,\"source_user\":{\"id\":976340242881015814,\"id_str\":\"976340242881015814\",\"name\":\"Tik Tokers\",\"screen_name\":\"Tik_Tokers_\",\"location\":\"Latam\",\"description\":\"Recopilaci\\u00f3n de los mejores videos de Tik Tok\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":33814,\"friends_count\":1,\"listed_count\":53,\"created_at\":\"Wed Mar 21 06:10:28 +0000 2018\",\"favourites_count\":1567,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":126,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253161914299023360\\\/V7mPCvbI_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253161914299023360\\\/V7mPCvbI_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/976340242881015814\\\/1587612082\",\"profile_link_color\":\"981CEB\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"}}}]},\"metadata\":{\"iso_language_code\":\"es\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":163290335,\"id_str\":\"163290335\",\"name\":\"Maynor Cruz\",\"screen_name\":\"Maynor317\",\"location\":\"Tegucigalpa, Honduras\",\"description\":\"Es muy dif\\u00edcil describirse a si mismo cuando ni uno mismo se conoce lo suficientemente bien.\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":176,\"friends_count\":955,\"listed_count\":2,\"created_at\":\"Tue Jul 06 01:34:16 +0000 2010\",\"favourites_count\":920,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":2627,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"ACDED6\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1216440733860802560\\\/tGqc_vLm_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1216440733860802560\\\/tGqc_vLm_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/163290335\\\/1517883559\",\"profile_link_color\":\"1B95E0\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 23:58:31 +0000 2020\",\"id\":1254198133313191936,\"id_str\":\"1254198133313191936\",\"text\":\"Error de calculo https:\\\/\\\/t.co\\\/ew3lt96L2Y\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254198030456229889,\"id_str\":\"1254198030456229889\",\"indices\":[17,40],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198030456229889\\\/pu\\\/img\\\/5GCvS6_dUfUtRbcy.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198030456229889\\\/pu\\\/img\\\/5GCvS6_dUfUtRbcy.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ew3lt96L2Y\",\"display_url\":\"pic.twitter.com\\\/ew3lt96L2Y\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/Tik_Tokers_\\\/status\\\/1254198133313191936\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":576,\"h\":1024,\"resize\":\"fit\"},\"medium\":{\"w\":576,\"h\":1024,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254198030456229889,\"id_str\":\"1254198030456229889\",\"indices\":[17,40],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198030456229889\\\/pu\\\/img\\\/5GCvS6_dUfUtRbcy.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198030456229889\\\/pu\\\/img\\\/5GCvS6_dUfUtRbcy.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ew3lt96L2Y\",\"display_url\":\"pic.twitter.com\\\/ew3lt96L2Y\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/Tik_Tokers_\\\/status\\\/1254198133313191936\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":576,\"h\":1024,\"resize\":\"fit\"},\"medium\":{\"w\":576,\"h\":1024,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[9,16],\"duration_millis\":35351,\"variants\":[{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198030456229889\\\/pu\\\/vid\\\/360x640\\\/30eP9ptknO3qLid-.mp4?tag=10\"},{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198030456229889\\\/pu\\\/pl\\\/NXuY-zobKc-6axzl.m3u8?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198030456229889\\\/pu\\\/vid\\\/576x1024\\\/Ck76pIe6yXKpNyVZ.mp4?tag=10\"},{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198030456229889\\\/pu\\\/vid\\\/320x568\\\/RCXAMh3Ovls7yeiM.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"metadata\":{\"iso_language_code\":\"es\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":976340242881015814,\"id_str\":\"976340242881015814\",\"name\":\"Tik Tokers\",\"screen_name\":\"Tik_Tokers_\",\"location\":\"Latam\",\"description\":\"Recopilaci\\u00f3n de los mejores videos de Tik Tok\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":33814,\"friends_count\":1,\"listed_count\":53,\"created_at\":\"Wed Mar 21 06:10:28 +0000 2018\",\"favourites_count\":1567,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":126,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253161914299023360\\\/V7mPCvbI_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253161914299023360\\\/V7mPCvbI_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/976340242881015814\\\/1587612082\",\"profile_link_color\":\"981CEB\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":86,\"favorite_count\":211,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"es\"},\"is_quote_status\":false,\"retweet_count\":86,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"es\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511145943040,\"id_str\":\"1254206511145943040\",\"text\":\"RT @d_rab1a: Les anglais qui apprennent le fran\\u00e7ais\\ud83d\\ude2d\\ud83d\\ude2d\\ud83d\\ude2d\\ud83d\\ude2d https:\\\/\\\/t.co\\\/R4VW9TQDr1\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"d_rab1a\",\"name\":\"DOH REMI\",\"id\":1005126366545801216,\"id_str\":\"1005126366545801216\",\"indices\":[3,11]}],\"urls\":[],\"media\":[{\"id\":1254111657976004610,\"id_str\":\"1254111657976004610\",\"indices\":[56,79],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254111657976004610\\\/pu\\\/img\\\/ZQIGAKuujcABTL4A.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254111657976004610\\\/pu\\\/img\\\/ZQIGAKuujcABTL4A.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/R4VW9TQDr1\",\"display_url\":\"pic.twitter.com\\\/R4VW9TQDr1\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/d_rab1a\\\/status\\\/1254111706856468481\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}},\"source_status_id\":1254111706856468481,\"source_status_id_str\":\"1254111706856468481\",\"source_user_id\":1005126366545801216,\"source_user_id_str\":\"1005126366545801216\"}]},\"extended_entities\":{\"media\":[{\"id\":1254111657976004610,\"id_str\":\"1254111657976004610\",\"indices\":[56,79],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254111657976004610\\\/pu\\\/img\\\/ZQIGAKuujcABTL4A.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254111657976004610\\\/pu\\\/img\\\/ZQIGAKuujcABTL4A.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/R4VW9TQDr1\",\"display_url\":\"pic.twitter.com\\\/R4VW9TQDr1\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/d_rab1a\\\/status\\\/1254111706856468481\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}},\"source_status_id\":1254111706856468481,\"source_status_id_str\":\"1254111706856468481\",\"source_user_id\":1005126366545801216,\"source_user_id_str\":\"1005126366545801216\",\"video_info\":{\"aspect_ratio\":[9,16],\"duration_millis\":21193,\"variants\":[{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254111657976004610\\\/pu\\\/vid\\\/540x960\\\/shzeE1tFoliZQnH-.mp4?tag=10\"},{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254111657976004610\\\/pu\\\/vid\\\/320x568\\\/nM57kk80PS3gnzFf.mp4?tag=10\"},{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254111657976004610\\\/pu\\\/pl\\\/xVxIakbjQjoYHkYo.m3u8?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254111657976004610\\\/pu\\\/vid\\\/360x640\\\/rvozbdj9dBEBGr4k.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false,\"source_user\":{\"id\":1005126366545801216,\"id_str\":\"1005126366545801216\",\"name\":\"DOH REMI\",\"screen_name\":\"d_rab1a\",\"location\":\"Bruxelles, Belgique\",\"description\":\"\\u0636\\u062d\\u0649\\ud83c\\uddf5\\ud83c\\uddf8\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1580,\"friends_count\":1447,\"listed_count\":0,\"created_at\":\"Fri Jun 08 16:36:14 +0000 2018\",\"favourites_count\":4522,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":3226,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243947972867604480\\\/yoc3pSRx_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243947972867604480\\\/yoc3pSRx_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1005126366545801216\\\/1587318525\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"}}}]},\"metadata\":{\"iso_language_code\":\"fr\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":746068949436141568,\"id_str\":\"746068949436141568\",\"name\":\"dan\",\"screen_name\":\"dan_uds\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":66,\"friends_count\":239,\"listed_count\":1,\"created_at\":\"Thu Jun 23 19:54:33 +0000 2016\",\"favourites_count\":22552,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":3985,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1215954895657979904\\\/5vAunFWw_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1215954895657979904\\\/5vAunFWw_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/746068949436141568\\\/1586795961\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 18:15:05 +0000 2020\",\"id\":1254111706856468481,\"id_str\":\"1254111706856468481\",\"text\":\"Les anglais qui apprennent le fran\\u00e7ais\\ud83d\\ude2d\\ud83d\\ude2d\\ud83d\\ude2d\\ud83d\\ude2d https:\\\/\\\/t.co\\\/R4VW9TQDr1\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254111657976004610,\"id_str\":\"1254111657976004610\",\"indices\":[43,66],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254111657976004610\\\/pu\\\/img\\\/ZQIGAKuujcABTL4A.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254111657976004610\\\/pu\\\/img\\\/ZQIGAKuujcABTL4A.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/R4VW9TQDr1\",\"display_url\":\"pic.twitter.com\\\/R4VW9TQDr1\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/d_rab1a\\\/status\\\/1254111706856468481\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254111657976004610,\"id_str\":\"1254111657976004610\",\"indices\":[43,66],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254111657976004610\\\/pu\\\/img\\\/ZQIGAKuujcABTL4A.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254111657976004610\\\/pu\\\/img\\\/ZQIGAKuujcABTL4A.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/R4VW9TQDr1\",\"display_url\":\"pic.twitter.com\\\/R4VW9TQDr1\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/d_rab1a\\\/status\\\/1254111706856468481\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[9,16],\"duration_millis\":21193,\"variants\":[{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254111657976004610\\\/pu\\\/vid\\\/540x960\\\/shzeE1tFoliZQnH-.mp4?tag=10\"},{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254111657976004610\\\/pu\\\/vid\\\/320x568\\\/nM57kk80PS3gnzFf.mp4?tag=10\"},{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254111657976004610\\\/pu\\\/pl\\\/xVxIakbjQjoYHkYo.m3u8?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254111657976004610\\\/pu\\\/vid\\\/360x640\\\/rvozbdj9dBEBGr4k.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"metadata\":{\"iso_language_code\":\"fr\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1005126366545801216,\"id_str\":\"1005126366545801216\",\"name\":\"DOH REMI\",\"screen_name\":\"d_rab1a\",\"location\":\"Bruxelles, Belgique\",\"description\":\"\\u0636\\u062d\\u0649\\ud83c\\uddf5\\ud83c\\uddf8\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1580,\"friends_count\":1447,\"listed_count\":0,\"created_at\":\"Fri Jun 08 16:36:14 +0000 2018\",\"favourites_count\":4522,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":3226,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243947972867604480\\\/yoc3pSRx_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243947972867604480\\\/yoc3pSRx_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1005126366545801216\\\/1587318525\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":14439,\"favorite_count\":27410,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"fr\"},\"is_quote_status\":false,\"retweet_count\":14439,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"fr\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511145865216,\"id_str\":\"1254206511145865216\",\"text\":\"RT @clmazin: Vichnaya pamyat. https:\\\/\\\/t.co\\\/PJhpWbTdtD\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"clmazin\",\"name\":\"Craig Mazin\",\"id\":22720093,\"id_str\":\"22720093\",\"indices\":[3,11]}],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/PJhpWbTdtD\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/atomicanalyst\\\/status\\\/1254174281656926208\",\"display_url\":\"twitter.com\\\/atomicanalyst\\\/\\u2026\",\"indices\":[30,53]}]},\"metadata\":{\"iso_language_code\":\"tl\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":3265558424,\"id_str\":\"3265558424\",\"name\":\"Kevin Fox\",\"screen_name\":\"Michigrimk\",\"location\":\"Los Angeles\\\/Santa Barbara\",\"description\":\"Writer, director, actor, now podcaster also have a variety of odd side hustles including secret corporate contract work. Screencraft Semi-Finalist.\",\"url\":\"https:\\\/\\\/t.co\\\/ORCNvzV9Vo\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/ORCNvzV9Vo\",\"expanded_url\":\"http:\\\/\\\/theywontletmeleavethisblank.ca\",\"display_url\":\"theywontletmeleavethisblank.ca\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1262,\"friends_count\":2177,\"listed_count\":14,\"created_at\":\"Thu Jul 02 01:03:17 +0000 2015\",\"favourites_count\":51124,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":15618,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1244701555674079234\\\/BQ7SHxPl_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1244701555674079234\\\/BQ7SHxPl_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/3265558424\\\/1576372151\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sun Apr 26 00:30:53 +0000 2020\",\"id\":1254206276520693762,\"id_str\":\"1254206276520693762\",\"text\":\"Vichnaya pamyat. https:\\\/\\\/t.co\\\/PJhpWbTdtD\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/PJhpWbTdtD\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/atomicanalyst\\\/status\\\/1254174281656926208\",\"display_url\":\"twitter.com\\\/atomicanalyst\\\/\\u2026\",\"indices\":[17,40]}]},\"metadata\":{\"iso_language_code\":\"tl\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/#!\\\/download\\\/ipad\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPad\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":22720093,\"id_str\":\"22720093\",\"name\":\"Craig Mazin\",\"screen_name\":\"clmazin\",\"location\":\"La Ca\\u00f1ada Flintridge\",\"description\":\"Writer-Producer of the upcoming @HBO series The Last of Us with @neil_druckmann\\n\\nWriter-Producer of #CHERNOBYL on @HBO and @SkyAtlantic.\",\"url\":\"https:\\\/\\\/t.co\\\/VcpdGm3NDF\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/VcpdGm3NDF\",\"expanded_url\":\"https:\\\/\\\/www.hbo.com\\\/chernobyl\",\"display_url\":\"hbo.com\\\/chernobyl\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":208886,\"friends_count\":825,\"listed_count\":1362,\"created_at\":\"Wed Mar 04 02:24:54 +0000 2009\",\"favourites_count\":35834,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":13790,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1235619341795655680\\\/4bY4EBJO_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1235619341795655680\\\/4bY4EBJO_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/22720093\\\/1583429585\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254174281656926208,\"quoted_status_id_str\":\"1254174281656926208\",\"quoted_status\":{\"created_at\":\"Sat Apr 25 22:23:44 +0000 2020\",\"id\":1254174281656926208,\"id_str\":\"1254174281656926208\",\"text\":\"Right now in 1986 (1:23:45am local time, Sat. April 26), the badly-designed Chernobyl Unit 4 nuclear reactor in Pri\\u2026 https:\\\/\\\/t.co\\\/zhoO4T7n9m\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/zhoO4T7n9m\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254174281656926208\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"iso_language_code\":\"tl\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1413698887,\"id_str\":\"1413698887\",\"name\":\"Stephen Schwartz\",\"screen_name\":\"AtomicAnalyst\",\"location\":\"Chicago, IL\",\"description\":\"Nonresident Senior Fellow @BulletinAtomic \\u2022 Fellow @NSquareCollab \\u2022 Editor\\\/Co-author, Atomic Audit: The Costs and Consequences of US Nuclear Weapons Since 1940\",\"url\":\"https:\\\/\\\/t.co\\\/MPTzW7OgrR\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/MPTzW7OgrR\",\"expanded_url\":\"https:\\\/\\\/www.brookings.edu\\\/book\\\/atomic-audit\\\/\",\"display_url\":\"brookings.edu\\\/book\\\/atomic-au\\u2026\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":31974,\"friends_count\":1296,\"listed_count\":551,\"created_at\":\"Wed May 08 19:46:38 +0000 2013\",\"favourites_count\":2014,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":26480,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"DBE9ED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme17\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme17\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/940479981636988928\\\/uWWAxh4y_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/940479981636988928\\\/uWWAxh4y_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1413698887\\\/1436508483\",\"profile_link_color\":\"7A17A4\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":48,\"favorite_count\":46,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"retweet_count\":2,\"favorite_count\":15,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"tl\"},\"is_quote_status\":true,\"quoted_status_id\":1254174281656926208,\"quoted_status_id_str\":\"1254174281656926208\",\"retweet_count\":2,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"tl\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511141830659,\"id_str\":\"1254206511141830659\",\"text\":\"I came https:\\\/\\\/t.co\\\/EHWIyO9BZc\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/EHWIyO9BZc\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/mauriliobarbosa\\\/status\\\/1254204175950524427\",\"display_url\":\"twitter.com\\\/mauriliobarbos\\u2026\",\"indices\":[7,30]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":161871073,\"id_str\":\"161871073\",\"name\":\"dordoris \\ud83e\\udd91 \\ud83d\\udea9\",\"screen_name\":\"Dordoris\",\"location\":\"Brazil\",\"description\":\"There yet are two things in my destiny: a world to roam through, and a home with thee.\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":623,\"friends_count\":668,\"listed_count\":15,\"created_at\":\"Fri Jul 02 00:45:32 +0000 2010\",\"favourites_count\":51198,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":67019,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"DADFE8\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1183182356393447425\\\/FMddfmxw_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1183182356393447425\\\/FMddfmxw_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/161871073\\\/1554476656\",\"profile_link_color\":\"1F2DA6\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DEDEDE\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254204175950524427,\"quoted_status_id_str\":\"1254204175950524427\",\"quoted_status\":{\"created_at\":\"Sun Apr 26 00:22:32 +0000 2020\",\"id\":1254204175950524427,\"id_str\":\"1254204175950524427\",\"text\":\"A legenda \\u00e9 de voc\\u00eas https:\\\/\\\/t.co\\\/3HTwUY9OZc\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254204170313359362,\"id_str\":\"1254204170313359362\",\"indices\":[21,44],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUDD9XYAILHtR.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUDD9XYAILHtR.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3HTwUY9OZc\",\"display_url\":\"pic.twitter.com\\\/3HTwUY9OZc\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/MaurilioBarbosa\\\/status\\\/1254204175950524427\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":1086,\"h\":652,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1086,\"h\":652,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":408,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254204170313359362,\"id_str\":\"1254204170313359362\",\"indices\":[21,44],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUDD9XYAILHtR.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfUDD9XYAILHtR.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3HTwUY9OZc\",\"display_url\":\"pic.twitter.com\\\/3HTwUY9OZc\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/MaurilioBarbosa\\\/status\\\/1254204175950524427\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":1086,\"h\":652,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1086,\"h\":652,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":408,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":63296611,\"id_str\":\"63296611\",\"name\":\"maumau\",\"screen_name\":\"MaurilioBarbosa\",\"location\":\"Campo Grande, Brasil\",\"description\":\"Neste perfil n\\u00e3o damos palco para malucos. Mestre pela UFMS e doutorando pela UNICAMP\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":49584,\"friends_count\":35365,\"listed_count\":218,\"created_at\":\"Wed Aug 05 23:35:34 +0000 2009\",\"favourites_count\":35847,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":71454,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"1A1B1F\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme9\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme9\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1249046386231914498\\\/1PBZdGA4_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1249046386231914498\\\/1PBZdGA4_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/63296611\\\/1575659825\",\"profile_link_color\":\"ABB8C2\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"252429\",\"profile_text_color\":\"666666\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":3,\"favorite_count\":53,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"pt\"},\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511141683200,\"id_str\":\"1254206511141683200\",\"text\":\"RT @JDak_7: man onna a mission #TRUZZ that\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"TRUZZ\",\"indices\":[31,37]}],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"JDak_7\",\"name\":\"John Daka\",\"id\":117885335,\"id_str\":\"117885335\",\"indices\":[3,10]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":3302055140,\"id_str\":\"3302055140\",\"name\":\"Silky Johnson 51\\\/50\",\"screen_name\":\"FluFlamSam\",\"location\":\"North Orange County California\",\"description\":\"Email: bandokizzlemusic@gmail.com #RAVENFLOCK OR DONT TALK \\ud83e\\udd2b\",\"url\":\"https:\\\/\\\/t.co\\\/cusngmsWfC\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/cusngmsWfC\",\"expanded_url\":\"https:\\\/\\\/soundcloud.com\\\/bandokizzle\\\/digits-bando-kizzle-ft-dom-the-kidprod-big-head\",\"display_url\":\"soundcloud.com\\\/bandokizzle\\\/di\\u2026\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":411,\"friends_count\":567,\"listed_count\":7,\"created_at\":\"Fri Jul 31 03:45:40 +0000 2015\",\"favourites_count\":68955,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":42116,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1205338096717271040\\\/xYN8R9jF_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1205338096717271040\\\/xYN8R9jF_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/3302055140\\\/1507655714\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 23:10:20 +0000 2020\",\"id\":1254186008909930496,\"id_str\":\"1254186008909930496\",\"text\":\"man onna a mission #TRUZZ that https:\\\/\\\/t.co\\\/IVGew8CgF3\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"TRUZZ\",\"indices\":[19,25]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/IVGew8CgF3\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/madia_dnrsports\\\/status\\\/1254184166503190535\",\"display_url\":\"twitter.com\\\/madia_dnrsport\\u2026\",\"indices\":[31,54]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":117885335,\"id_str\":\"117885335\",\"name\":\"John Daka\",\"screen_name\":\"JDak_7\",\"location\":\"301\\u27a1\\ufe0f540\",\"description\":\"\\ud83c\\uddff\\ud83c\\uddf2 #CEO\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1225,\"friends_count\":501,\"listed_count\":8,\"created_at\":\"Fri Feb 26 23:09:30 +0000 2010\",\"favourites_count\":4364,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":24098,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"131516\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1219794881574580224\\\/BuvqE1J0_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1219794881574580224\\\/BuvqE1J0_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/117885335\\\/1574298518\",\"profile_link_color\":\"009999\",\"profile_sidebar_border_color\":\"EEEEEE\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254184166503190535,\"quoted_status_id_str\":\"1254184166503190535\",\"quoted_status\":{\"created_at\":\"Sat Apr 25 23:03:01 +0000 2020\",\"id\":1254184166503190535,\"id_str\":\"1254184166503190535\",\"text\":\"That was quick. JMU defensive end John Daka, the 2019 FCS leader in sacks and tackles for loss, tells me he's signe\\u2026 https:\\\/\\\/t.co\\\/hQSoxHFl58\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/hQSoxHFl58\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254184166503190535\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/about.twitter.com\\\/products\\\/tweetdeck\\\" rel=\\\"nofollow\\\"\\u003eTweetDeck\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":156844983,\"id_str\":\"156844983\",\"name\":\"Greg Madia\",\"screen_name\":\"Madia_DNRSports\",\"location\":\"Harrisonburg, VA\",\"description\":\"JMU football beat writer at the Daily News-Record. Some local college baseball, too. FWAA member. Jersey native. Loyal Mets fan.\",\"url\":\"https:\\\/\\\/t.co\\\/1wGAAi4HQg\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/1wGAAi4HQg\",\"expanded_url\":\"https:\\\/\\\/www.dnronline.com\\\/users\\\/profile\\\/football\\\/\",\"display_url\":\"dnronline.com\\\/users\\\/profile\\\/\\u2026\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":3827,\"friends_count\":886,\"listed_count\":70,\"created_at\":\"Fri Jun 18 02:58:08 +0000 2010\",\"favourites_count\":1815,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":25097,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1028971098547908610\\\/trORIIsG_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1028971098547908610\\\/trORIIsG_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/156844983\\\/1492867256\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":246,\"favorite_count\":647,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"retweet_count\":87,\"favorite_count\":345,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":true,\"quoted_status_id\":1254184166503190535,\"quoted_status_id_str\":\"1254184166503190535\",\"retweet_count\":87,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511137488902,\"id_str\":\"1254206511137488902\",\"text\":\"RT @vonetop: \\ub208\\ubb3c\\ucb50\\ucb50 https:\\\/\\\/t.co\\\/Dej8eb7r93\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"vonetop\",\"name\":\"\\ud83d\\ude2e\\ud83d\\ude2f\\ud83d\\ude32\",\"id\":1213824878865862656,\"id_str\":\"1213824878865862656\",\"indices\":[3,11]}],\"urls\":[],\"media\":[{\"id\":1254129066136887296,\"id_str\":\"1254129066136887296\",\"indices\":[18,41],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254129066136887296\\\/pu\\\/img\\\/SpR_1MxnofjjrzOF.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254129066136887296\\\/pu\\\/img\\\/SpR_1MxnofjjrzOF.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Dej8eb7r93\",\"display_url\":\"pic.twitter.com\\\/Dej8eb7r93\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/vonetop\\\/status\\\/1254129086844112896\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":1080,\"resize\":\"fit\"},\"medium\":{\"w\":1080,\"h\":1080,\"resize\":\"fit\"}},\"source_status_id\":1254129086844112896,\"source_status_id_str\":\"1254129086844112896\",\"source_user_id\":1213824878865862656,\"source_user_id_str\":\"1213824878865862656\"}]},\"extended_entities\":{\"media\":[{\"id\":1254129066136887296,\"id_str\":\"1254129066136887296\",\"indices\":[18,41],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254129066136887296\\\/pu\\\/img\\\/SpR_1MxnofjjrzOF.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254129066136887296\\\/pu\\\/img\\\/SpR_1MxnofjjrzOF.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Dej8eb7r93\",\"display_url\":\"pic.twitter.com\\\/Dej8eb7r93\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/vonetop\\\/status\\\/1254129086844112896\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":1080,\"resize\":\"fit\"},\"medium\":{\"w\":1080,\"h\":1080,\"resize\":\"fit\"}},\"source_status_id\":1254129086844112896,\"source_status_id_str\":\"1254129086844112896\",\"source_user_id\":1213824878865862656,\"source_user_id_str\":\"1213824878865862656\",\"video_info\":{\"aspect_ratio\":[1,1],\"duration_millis\":1900,\"variants\":[{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254129066136887296\\\/pu\\\/pl\\\/ZbfkGtSG2pyrOmb2.m3u8?tag=10\"},{\"bitrate\":432000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254129066136887296\\\/pu\\\/vid\\\/320x320\\\/dHHcq68LQmtbXzKr.mp4?tag=10\"},{\"bitrate\":1280000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254129066136887296\\\/pu\\\/vid\\\/720x720\\\/Ee2Cs_hIlk6vXppu.mp4?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254129066136887296\\\/pu\\\/vid\\\/480x480\\\/FkbEy_pfyBpCg_og.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false,\"source_user\":{\"id\":1213824878865862656,\"id_str\":\"1213824878865862656\",\"name\":\"\\ud83d\\ude2e\\ud83d\\ude2f\\ud83d\\ude32\",\"screen_name\":\"vonetop\",\"location\":\"\",\"description\":\"(\\uc77d\\uc74c)\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2243,\"friends_count\":35,\"listed_count\":32,\"created_at\":\"Sun Jan 05 14:09:46 +0000 2020\",\"favourites_count\":899,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":3746,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253738871088537606\\\/5-qrPmca_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253738871088537606\\\/5-qrPmca_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1213824878865862656\\\/1584029278\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"}}}]},\"metadata\":{\"result_type\":\"recent\",\"iso_language_code\":\"ko\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":946774125384679424,\"id_str\":\"946774125384679424\",\"name\":\"\\u25e1\\u0308 forever_V_BTS\",\"screen_name\":\"michellejiji7\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":74,\"friends_count\":123,\"listed_count\":1,\"created_at\":\"Fri Dec 29 16:05:16 +0000 2017\",\"favourites_count\":133937,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":92065,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1223987207733514242\\\/x16VrS6u_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1223987207733514242\\\/x16VrS6u_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/946774125384679424\\\/1580656267\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 19:24:09 +0000 2020\",\"id\":1254129086844112896,\"id_str\":\"1254129086844112896\",\"text\":\"\\ub208\\ubb3c\\ucb50\\ucb50 https:\\\/\\\/t.co\\\/Dej8eb7r93\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254129066136887296,\"id_str\":\"1254129066136887296\",\"indices\":[5,28],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254129066136887296\\\/pu\\\/img\\\/SpR_1MxnofjjrzOF.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254129066136887296\\\/pu\\\/img\\\/SpR_1MxnofjjrzOF.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Dej8eb7r93\",\"display_url\":\"pic.twitter.com\\\/Dej8eb7r93\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/vonetop\\\/status\\\/1254129086844112896\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":1080,\"resize\":\"fit\"},\"medium\":{\"w\":1080,\"h\":1080,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254129066136887296,\"id_str\":\"1254129066136887296\",\"indices\":[5,28],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254129066136887296\\\/pu\\\/img\\\/SpR_1MxnofjjrzOF.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254129066136887296\\\/pu\\\/img\\\/SpR_1MxnofjjrzOF.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Dej8eb7r93\",\"display_url\":\"pic.twitter.com\\\/Dej8eb7r93\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/vonetop\\\/status\\\/1254129086844112896\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":680,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":1080,\"resize\":\"fit\"},\"medium\":{\"w\":1080,\"h\":1080,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[1,1],\"duration_millis\":1900,\"variants\":[{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254129066136887296\\\/pu\\\/pl\\\/ZbfkGtSG2pyrOmb2.m3u8?tag=10\"},{\"bitrate\":432000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254129066136887296\\\/pu\\\/vid\\\/320x320\\\/dHHcq68LQmtbXzKr.mp4?tag=10\"},{\"bitrate\":1280000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254129066136887296\\\/pu\\\/vid\\\/720x720\\\/Ee2Cs_hIlk6vXppu.mp4?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254129066136887296\\\/pu\\\/vid\\\/480x480\\\/FkbEy_pfyBpCg_og.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"metadata\":{\"result_type\":\"recent\",\"iso_language_code\":\"ko\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1213824878865862656,\"id_str\":\"1213824878865862656\",\"name\":\"\\ud83d\\ude2e\\ud83d\\ude2f\\ud83d\\ude32\",\"screen_name\":\"vonetop\",\"location\":\"\",\"description\":\"(\\uc77d\\uc74c)\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2243,\"friends_count\":35,\"listed_count\":32,\"created_at\":\"Sun Jan 05 14:09:46 +0000 2020\",\"favourites_count\":899,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":3746,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253738871088537606\\\/5-qrPmca_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253738871088537606\\\/5-qrPmca_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1213824878865862656\\\/1584029278\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":24,\"favorite_count\":42,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"ko\"},\"is_quote_status\":false,\"retweet_count\":24,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":true,\"lang\":\"ko\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511129284608,\"id_str\":\"1254206511129284608\",\"text\":\"RT @PARlSHITME: https:\\\/\\\/t.co\\\/3f5ATJ01qY\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"PARlSHITME\",\"name\":\"SUPERFICIAL\",\"id\":1069728005893836805,\"id_str\":\"1069728005893836805\",\"indices\":[3,14]}],\"urls\":[],\"media\":[{\"id\":1254047769230262275,\"id_str\":\"1254047769230262275\",\"indices\":[16,39],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUhXQAMTNb1.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUhXQAMTNb1.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3f5ATJ01qY\",\"display_url\":\"pic.twitter.com\\\/3f5ATJ01qY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/PARlSHITME\\\/status\\\/1254047772585721862\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":416,\"h\":305,\"resize\":\"fit\"},\"large\":{\"w\":416,\"h\":305,\"resize\":\"fit\"},\"small\":{\"w\":416,\"h\":305,\"resize\":\"fit\"}},\"source_status_id\":1254047772585721862,\"source_status_id_str\":\"1254047772585721862\",\"source_user_id\":1069728005893836805,\"source_user_id_str\":\"1069728005893836805\"}]},\"extended_entities\":{\"media\":[{\"id\":1254047769230262275,\"id_str\":\"1254047769230262275\",\"indices\":[16,39],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUhXQAMTNb1.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUhXQAMTNb1.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3f5ATJ01qY\",\"display_url\":\"pic.twitter.com\\\/3f5ATJ01qY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/PARlSHITME\\\/status\\\/1254047772585721862\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":416,\"h\":305,\"resize\":\"fit\"},\"large\":{\"w\":416,\"h\":305,\"resize\":\"fit\"},\"small\":{\"w\":416,\"h\":305,\"resize\":\"fit\"}},\"source_status_id\":1254047772585721862,\"source_status_id_str\":\"1254047772585721862\",\"source_user_id\":1069728005893836805,\"source_user_id_str\":\"1069728005893836805\"},{\"id\":1254047769234477056,\"id_str\":\"1254047769234477056\",\"indices\":[16,39],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUiXkAARNzL.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUiXkAARNzL.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3f5ATJ01qY\",\"display_url\":\"pic.twitter.com\\\/3f5ATJ01qY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/PARlSHITME\\\/status\\\/1254047772585721862\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":416,\"h\":314,\"resize\":\"fit\"},\"medium\":{\"w\":416,\"h\":314,\"resize\":\"fit\"},\"small\":{\"w\":416,\"h\":314,\"resize\":\"fit\"}},\"source_status_id\":1254047772585721862,\"source_status_id_str\":\"1254047772585721862\",\"source_user_id\":1069728005893836805,\"source_user_id_str\":\"1069728005893836805\"}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":3313634721,\"id_str\":\"3313634721\",\"name\":\"\\ud83d\\udc96\",\"screen_name\":\"Rosykeenex\",\"location\":\"Islington, London\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":484,\"friends_count\":232,\"listed_count\":4,\"created_at\":\"Mon Jun 08 18:34:35 +0000 2015\",\"favourites_count\":40405,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":44137,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252638826658516992\\\/Lz9wdrUf_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252638826658516992\\\/Lz9wdrUf_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/3313634721\\\/1564454636\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 14:01:02 +0000 2020\",\"id\":1254047772585721862,\"id_str\":\"1254047772585721862\",\"text\":\"https:\\\/\\\/t.co\\\/3f5ATJ01qY\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254047769230262275,\"id_str\":\"1254047769230262275\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUhXQAMTNb1.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUhXQAMTNb1.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3f5ATJ01qY\",\"display_url\":\"pic.twitter.com\\\/3f5ATJ01qY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/PARlSHITME\\\/status\\\/1254047772585721862\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":416,\"h\":305,\"resize\":\"fit\"},\"large\":{\"w\":416,\"h\":305,\"resize\":\"fit\"},\"small\":{\"w\":416,\"h\":305,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254047769230262275,\"id_str\":\"1254047769230262275\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUhXQAMTNb1.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUhXQAMTNb1.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3f5ATJ01qY\",\"display_url\":\"pic.twitter.com\\\/3f5ATJ01qY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/PARlSHITME\\\/status\\\/1254047772585721862\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":416,\"h\":305,\"resize\":\"fit\"},\"large\":{\"w\":416,\"h\":305,\"resize\":\"fit\"},\"small\":{\"w\":416,\"h\":305,\"resize\":\"fit\"}}},{\"id\":1254047769234477056,\"id_str\":\"1254047769234477056\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUiXkAARNzL.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdFzUiXkAARNzL.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/3f5ATJ01qY\",\"display_url\":\"pic.twitter.com\\\/3f5ATJ01qY\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/PARlSHITME\\\/status\\\/1254047772585721862\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":416,\"h\":314,\"resize\":\"fit\"},\"medium\":{\"w\":416,\"h\":314,\"resize\":\"fit\"},\"small\":{\"w\":416,\"h\":314,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1069728005893836805,\"id_str\":\"1069728005893836805\",\"name\":\"SUPERFICIAL\",\"screen_name\":\"PARlSHITME\",\"location\":\"The Mirror\",\"description\":\"Sex. Clothes. Popularity. Whatever.\",\"url\":\"https:\\\/\\\/t.co\\\/4L7mYwzcYM\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/4L7mYwzcYM\",\"expanded_url\":\"http:\\\/\\\/instagram.com\\\/tonyistrouble\",\"display_url\":\"instagram.com\\\/tonyistrouble\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":947,\"friends_count\":3,\"listed_count\":4,\"created_at\":\"Mon Dec 03 23:00:05 +0000 2018\",\"favourites_count\":3219,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":8249,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1078546663017463809\\\/Ef1LCu3m_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1078546663017463809\\\/Ef1LCu3m_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1069728005893836805\\\/1547437240\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":17,\"favorite_count\":27,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},\"is_quote_status\":false,\"retweet_count\":17,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:31:48 +0000 2020\",\"id\":1254206511129059329,\"id_str\":\"1254206511129059329\",\"text\":\"RT @jnxnvr: First Reese\\u2019s Pieces now this. I cannot believe I have to cancel Elle.\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"jnxnvr\",\"name\":\"\\ud83c\\udf28\",\"id\":828789651641098240,\"id_str\":\"828789651641098240\",\"indices\":[3,10]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1600218031,\"id_str\":\"1600218031\",\"name\":\"\\ud835\\udc86 \\ud835\\udd29 \\ud835\\udd29 \\ud835\\udc1e\",\"screen_name\":\"ElleGenerico\",\"location\":\"the boneyard \",\"description\":\"NOT Karl's actual wife\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":3766,\"friends_count\":593,\"listed_count\":99,\"created_at\":\"Wed Jul 17 05:58:52 +0000 2013\",\"favourites_count\":74770,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":56577,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"91D2FA\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252278118854754307\\\/Ajy8xaYr_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252278118854754307\\\/Ajy8xaYr_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1600218031\\\/1573116819\",\"profile_link_color\":\"E81C4F\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sun Apr 26 00:29:43 +0000 2020\",\"id\":1254205984538537985,\"id_str\":\"1254205984538537985\",\"text\":\"First Reese\\u2019s Pieces now this. I cannot believe I have to cancel Elle. https:\\\/\\\/t.co\\\/79ssXrvgTD\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/79ssXrvgTD\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/ellegenerico\\\/status\\\/1254205718858629120\",\"display_url\":\"twitter.com\\\/ellegenerico\\\/s\\u2026\",\"indices\":[71,94]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":828789651641098240,\"id_str\":\"828789651641098240\",\"name\":\"\\ud83c\\udf28\",\"screen_name\":\"jnxnvr\",\"location\":\"NYPD Special Victims Unit\",\"description\":\"meteorologist - writer - she\\\/her\",\"url\":\"https:\\\/\\\/t.co\\\/2ttaVeIxa8\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/2ttaVeIxa8\",\"expanded_url\":\"https:\\\/\\\/jsnaillon.journoportfolio.com\\\/\",\"display_url\":\"jsnaillon.journoportfolio.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":246,\"friends_count\":237,\"listed_count\":2,\"created_at\":\"Tue Feb 07 02:17:05 +0000 2017\",\"favourites_count\":4039,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":19326,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1228571629166436352\\\/M5guYTkx_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1228571629166436352\\\/M5guYTkx_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/828789651641098240\\\/1565039785\",\"profile_link_color\":\"1122BB\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254205718858629120,\"quoted_status_id_str\":\"1254205718858629120\",\"quoted_status\":{\"created_at\":\"Sun Apr 26 00:28:40 +0000 2020\",\"id\":1254205718858629120,\"id_str\":\"1254205718858629120\",\"text\":\"YES https:\\\/\\\/t.co\\\/dqzHMOIp1s\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/dqzHMOIp1s\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/jnxnvr\\\/status\\\/1254205620934381569\",\"display_url\":\"twitter.com\\\/jnxnvr\\\/status\\\/\\u2026\",\"indices\":[4,27]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1600218031,\"id_str\":\"1600218031\",\"name\":\"\\ud835\\udc86 \\ud835\\udd29 \\ud835\\udd29 \\ud835\\udc1e\",\"screen_name\":\"ElleGenerico\",\"location\":\"the boneyard \",\"description\":\"NOT Karl's actual wife\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":3766,\"friends_count\":593,\"listed_count\":99,\"created_at\":\"Wed Jul 17 05:58:52 +0000 2013\",\"favourites_count\":74770,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":56577,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"91D2FA\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252278118854754307\\\/Ajy8xaYr_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1252278118854754307\\\/Ajy8xaYr_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1600218031\\\/1573116819\",\"profile_link_color\":\"E81C4F\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254205620934381569,\"quoted_status_id_str\":\"1254205620934381569\",\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},\"retweet_count\":1,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":true,\"quoted_status_id\":1254205718858629120,\"quoted_status_id_str\":\"1254205718858629120\",\"retweet_count\":1,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"}],\"search_metadata\":{\"completed_in\":0.122,\"max_id\":1254206511171031041,\"max_id_str\":\"1254206511171031041\",\"next_results\":\"?max_id=1254206511129059328&q=twitter&include_entities=1\",\"query\":\"twitter\",\"refresh_url\":\"?since_id=1254206511171031041&q=twitter&include_entities=1\",\"count\":15,\"since_id\":0,\"since_id_str\":\"0\"}}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetStatusesMentionsTimeline.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetStatusesMentionsTimeline.json deleted file mode 100644 index 3e9c9680..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testGetStatusesMentionsTimeline.json +++ /dev/null @@ -1,49 +0,0 @@ -[{ - "request": { - "method": "GET", - "url": "https:\/\/api.twitter.com\/1.1\/statuses\/mentions_timeline.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"XBG94YLieQDRW%2FSohCUWyw7cCjs%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "6295", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:49 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:49 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_R2D1tzBO5vr\/p0hAkM5zpQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:49 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786110971872163; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:49 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-app-rate-limit-limit": "100000", - "x-app-rate-limit-remaining": "99989", - "x-app-rate-limit-reset": "1587934976", - "x-connection-hash": "fe1724a702fbcac93da2de2b62ba3fe9", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-rate-limit-limit": "75", - "x-rate-limit-remaining": "73", - "x-rate-limit-reset": "1587861623", - "x-response-time": "72", - "x-transaction": "0050abfc0028f502", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "[{\"created_at\":\"Tue Oct 09 09:16:34 +0000 2018\",\"id\":1049589427318743040,\"id_str\":\"1049589427318743040\",\"text\":\"@oauthlibtest wawa\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":385051447,\"id_str\":\"385051447\",\"name\":\"\\u041d\\u0438\\u043a\\u043e\\u043b\\u0430 \\u041d\\u0438\\u043a\\u043e\\u043b\\u043e\\u0432\\u0441\\u043a\\u0438\",\"screen_name\":\"AmigoNiko\",\"location\":\"Teh internets\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2,\"friends_count\":3,\"listed_count\":0,\"created_at\":\"Tue Oct 04 19:50:08 +0000 2011\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":10,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"tl\"},{\"created_at\":\"Mon Oct 10 21:11:07 +0000 2016\",\"id\":785588495129739264,\"id_str\":\"785588495129739264\",\"text\":\"@oauthlibtest lol\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":107232049,\"id_str\":\"107232049\",\"name\":\"\\ud83c\\udf10 Mao \\u2192 \\ud83c\\udf0d\",\"screen_name\":\"De_Li_Yang\",\"location\":\"My Twitter account's profile location is the longest ever because it's very cool, ok? I don't really know how I wrote all of this... but I like it :)!\",\"description\":\"\\u00b0+\\u00b0 https:\\\/\\\/t.co\\\/rZwgF3TQar\",\"url\":\"https:\\\/\\\/t.co\\\/d65WAlDNlH\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/d65WAlDNlH\",\"expanded_url\":\"http:\\\/\\\/this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.never.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.is.probably.the.longest.loopy.fake.website.url.on.a.twitter.profile.of.all.time.because.you.can.possibly.never.ever.ever.ever.ever.ever.ever.ever.ever.ever.ever.write.something.longer.than.this.link.i.assume.so.i.am.just.gonna.finish.this.okbye.com\",\"display_url\":\"\\u2026i.am.just.gonna.finish.this.okbye.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/rZwgF3TQar\",\"expanded_url\":\"http:\\\/\\\/paypal.me\\\/DeLi\",\"display_url\":\"paypal.me\\\/DeLi\",\"indices\":[4,27]}]}},\"protected\":false,\"followers_count\":2212,\"friends_count\":21,\"listed_count\":4,\"created_at\":\"Thu Jan 21 22:49:03 +0000 2010\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":385791,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":true,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/2456970211\\\/xngkt99c24et9k7pco13_normal.gif\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/2456970211\\\/xngkt99c24et9k7pco13_normal.gif\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/107232049\\\/1375640549\",\"profile_link_color\":\"05BFF2\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"moderator\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"und\"},{\"created_at\":\"Mon Jul 29 10:33:20 +0000 2013\",\"id\":361796578241028097,\"id_str\":\"361796578241028097\",\"text\":\"@lakotadlustig @oauthlibtest @twittyapp DM\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"lakotadlustig\",\"name\":\"Lakota Lustig \\ud83c\\udf31\",\"id\":868067922,\"id_str\":\"868067922\",\"indices\":[0,14]},{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[15,28]},{\"screen_name\":\"twittyapp\",\"name\":\"Twitty\",\"id\":1465708922,\"id_str\":\"1465708922\",\"indices\":[29,39]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":361795965159608321,\"in_reply_to_status_id_str\":\"361795965159608321\",\"in_reply_to_user_id\":868067922,\"in_reply_to_user_id_str\":\"868067922\",\"in_reply_to_screen_name\":\"lakotadlustig\",\"user\":{\"id\":421392342,\"id_str\":\"421392342\",\"name\":\"Evert De Spiegeleer\",\"screen_name\":\"eds1999\",\"location\":\"Belgium\",\"description\":\"20. European. Engineer. Developer. Here for everything space-related.\",\"url\":\"https:\\\/\\\/t.co\\\/m19HQXRy3P\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/m19HQXRy3P\",\"expanded_url\":\"http:\\\/\\\/github.com\\\/evertdespiegeleer\",\"display_url\":\"github.com\\\/evertdespiegel\\u2026\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":433,\"friends_count\":1175,\"listed_count\":14,\"created_at\":\"Fri Nov 25 21:58:06 +0000 2011\",\"favourites_count\":1765,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":5209,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1226456092378529793\\\/eoJ-xOeW_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1226456092378529793\\\/eoJ-xOeW_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/421392342\\\/1424992018\",\"profile_link_color\":\"009999\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"und\"},{\"created_at\":\"Mon Apr 29 07:12:03 +0000 2013\",\"id\":328768625957814272,\"id_str\":\"328768625957814272\",\"text\":\"@oauthlibtest 1\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":1331868230,\"id_str\":\"1331868230\",\"name\":\"Den TSVETOK\",\"screen_name\":\"denTsvetok\",\"location\":\"Teh internets\",\"description\":\"\",\"url\":\"http:\\\/\\\/t.co\\\/jvqJ6VIgn7\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"http:\\\/\\\/t.co\\\/jvqJ6VIgn7\",\"expanded_url\":\"http:\\\/\\\/123.ru\",\"display_url\":\"123.ru\",\"indices\":[0,22]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":4,\"friends_count\":419,\"listed_count\":0,\"created_at\":\"Sat Apr 06 15:34:15 +0000 2013\",\"favourites_count\":1,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":27,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/3576594159\\\/63b3f9afe2d0643356ee3951c66f11a8_normal.jpeg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/3576594159\\\/63b3f9afe2d0643356ee3951c66f11a8_normal.jpeg\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"und\"},{\"created_at\":\"Mon Apr 01 11:10:53 +0000 2013\",\"id\":318681871691157504,\"id_str\":\"318681871691157504\",\"text\":\"@oauthlibtest test\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":532290601,\"id_str\":\"532290601\",\"name\":\"TestVakoms\",\"screen_name\":\"TestVakoms\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1,\"friends_count\":5,\"listed_count\":0,\"created_at\":\"Wed Mar 21 14:56:15 +0000 2012\",\"favourites_count\":20,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":560,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/3662702134\\\/f87a2bcff8ec621239ef03662cae9a0a_normal.jpeg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/3662702134\\\/f87a2bcff8ec621239ef03662cae9a0a_normal.jpeg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/532290601\\\/1365162944\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Sep 09 06:11:54 +0000 2012\",\"id\":244679505170550785,\"id_str\":\"244679505170550785\",\"text\":\"@oauthlibtest - -\\\"\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":14567940,\"id_str\":\"14567940\",\"name\":\"Ming Sangkeettrakarn\",\"screen_name\":\"javakung\",\"location\":\"\",\"description\":\"chatbot,question answering,\\nsocial web technology, researcher,human-computer interaction,data\\\/opinion mining,semantic,ontology, animation,investor\",\"url\":\"http:\\\/\\\/t.co\\\/EfcUdKPzIb\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"http:\\\/\\\/t.co\\\/EfcUdKPzIb\",\"expanded_url\":\"http:\\\/\\\/facebook.com\\\/imconan\",\"display_url\":\"facebook.com\\\/imconan\",\"indices\":[0,22]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":367,\"friends_count\":338,\"listed_count\":23,\"created_at\":\"Mon Apr 28 11:15:13 +0000 2008\",\"favourites_count\":93,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":22657,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C6E2EE\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme2\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme2\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/378800000067935959\\\/8097c4b4c3ba876bf839ee4ee11ba9ea_normal.jpeg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/378800000067935959\\\/8097c4b4c3ba876bf839ee4ee11ba9ea_normal.jpeg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/14567940\\\/1372598045\",\"profile_link_color\":\"1F98C7\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"DAECF4\",\"profile_text_color\":\"663B12\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Jul 15 08:35:03 +0000 2012\",\"id\":224421809980833794,\"id_str\":\"224421809980833794\",\"text\":\"@oauthlibtest lol\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":127961215,\"id_str\":\"127961215\",\"name\":\"DEZCO\",\"screen_name\":\"iDezco\",\"location\":\"En una Lemniscata de Bernoulli\",\"description\":\"#Caster en @ULeagueMX | @Skill3Sports | Contacto: dezco23@gmail.com | Los h\\u00e9roes se desvanecen con el tiempo pero las leyendas nunca mueren.\",\"url\":\"https:\\\/\\\/t.co\\\/U6DDuMTtgy\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/U6DDuMTtgy\",\"expanded_url\":\"https:\\\/\\\/www.youtube.com\\\/user\\\/iDezco\",\"display_url\":\"youtube.com\\\/user\\\/iDezco\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":5492,\"friends_count\":565,\"listed_count\":22,\"created_at\":\"Tue Mar 30 18:37:12 +0000 2010\",\"favourites_count\":892,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":11765,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"131516\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/843228055237607426\\\/cBs7UmZX_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/843228055237607426\\\/cBs7UmZX_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/127961215\\\/1489875781\",\"profile_link_color\":\"009999\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"und\"},{\"created_at\":\"Tue Apr 03 21:15:40 +0000 2012\",\"id\":187287275426689024,\"id_str\":\"187287275426689024\",\"text\":\"@oauthlibtest YES!\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":140710184,\"id_str\":\"140710184\",\"name\":\"Roberto Soler\",\"screen_name\":\"robertolsoler\",\"location\":\"Barceloneta, PR\",\"description\":\"Cantautor, Singer-Songwriter, Music Producer\",\"url\":\"http:\\\/\\\/t.co\\\/CNhfpdtLFK\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"http:\\\/\\\/t.co\\\/CNhfpdtLFK\",\"expanded_url\":\"http:\\\/\\\/www.facebook.com\\\/roberto.luis.soler\",\"display_url\":\"facebook.com\\\/roberto.luis.s\\u2026\",\"indices\":[0,22]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":106,\"friends_count\":265,\"listed_count\":3,\"created_at\":\"Thu May 06 06:09:49 +0000 2010\",\"favourites_count\":67,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":1105,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"131516\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/630823843922219008\\\/8JxXrkMm_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/630823843922219008\\\/8JxXrkMm_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/140710184\\\/1439235059\",\"profile_link_color\":\"009999\",\"profile_sidebar_border_color\":\"EEEEEE\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"und\"},{\"created_at\":\"Tue Apr 03 20:57:44 +0000 2012\",\"id\":187282759394410498,\"id_str\":\"187282759394410498\",\"text\":\"@_IODreams @oauthlibtest hehe\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[11,24]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":187278576037535744,\"in_reply_to_status_id_str\":\"187278576037535744\",\"in_reply_to_user_id\":140528703,\"in_reply_to_user_id_str\":\"140528703\",\"in_reply_to_screen_name\":\"lightsonjoy\",\"user\":{\"id\":140710184,\"id_str\":\"140710184\",\"name\":\"Roberto Soler\",\"screen_name\":\"robertolsoler\",\"location\":\"Barceloneta, PR\",\"description\":\"Cantautor, Singer-Songwriter, Music Producer\",\"url\":\"http:\\\/\\\/t.co\\\/CNhfpdtLFK\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"http:\\\/\\\/t.co\\\/CNhfpdtLFK\",\"expanded_url\":\"http:\\\/\\\/www.facebook.com\\\/roberto.luis.soler\",\"display_url\":\"facebook.com\\\/roberto.luis.s\\u2026\",\"indices\":[0,22]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":106,\"friends_count\":265,\"listed_count\":3,\"created_at\":\"Thu May 06 06:09:49 +0000 2010\",\"favourites_count\":67,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":1105,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"131516\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/630823843922219008\\\/8JxXrkMm_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/630823843922219008\\\/8JxXrkMm_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/140710184\\\/1439235059\",\"profile_link_color\":\"009999\",\"profile_sidebar_border_color\":\"EEEEEE\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"tl\"},{\"created_at\":\"Tue Apr 03 20:41:06 +0000 2012\",\"id\":187278576037535744,\"id_str\":\"187278576037535744\",\"text\":\"@oauthlibtest @robertolsoler ya estoy postiando y retweeting por el api :)\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]},{\"screen_name\":\"robertolsoler\",\"name\":\"Roberto Soler\",\"id\":140710184,\"id_str\":\"140710184\",\"indices\":[14,28]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":140528703,\"id_str\":\"140528703\",\"name\":\"Eduardo Joy\",\"screen_name\":\"lightsonjoy\",\"location\":\"Puerto Rico\",\"description\":\"Family adds Fuel.\\u26fd\\ufe0f \\ud83d\\udd25 Convirtiendo a @1justonce en el lider \\ud83c\\udf0e\\ud83e\\udde2. Documentando mi camino. \\ud83d\\udc47\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":618,\"friends_count\":77,\"listed_count\":6,\"created_at\":\"Wed May 05 18:41:52 +0000 2010\",\"favourites_count\":6,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":3242,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"050505\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme9\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme9\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/989203086487924736\\\/5oRBhZrF_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/989203086487924736\\\/5oRBhZrF_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/140528703\\\/1524688600\",\"profile_link_color\":\"2FC2EF\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"252429\",\"profile_text_color\":\"666666\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":1,\"favorited\":false,\"retweeted\":false,\"lang\":\"es\"},{\"created_at\":\"Mon Jan 30 17:41:20 +0000 2012\",\"id\":164040511240404993,\"id_str\":\"164040511240404993\",\"text\":\"@oauthlibtest hey\\u2755\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":17953020,\"id_str\":\"17953020\",\"name\":\"Chris\\ud83c\\udf10\",\"screen_name\":\"ChrisTiv7_\",\"location\":\"Canada\",\"description\":\"You got to sacrifice the small useless things to get the best things\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":666,\"friends_count\":970,\"listed_count\":7,\"created_at\":\"Mon Dec 08 01:56:29 +0000 2008\",\"favourites_count\":1604,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":38608,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"1A1B1F\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme9\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme9\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1183222943951790080\\\/aiMiOqUs_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1183222943951790080\\\/aiMiOqUs_normal.jpg\",\"profile_link_color\":\"000000\",\"profile_sidebar_border_color\":\"181A1E\",\"profile_sidebar_fill_color\":\"252429\",\"profile_text_color\":\"666666\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"und\"},{\"created_at\":\"Tue Oct 11 07:08:39 +0000 2011\",\"id\":123656239707197440,\"id_str\":\"123656239707197440\",\"text\":\"@oauthlibtest what is this?\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":386959632,\"id_str\":\"386959632\",\"name\":\"Abhinav Pathak\",\"screen_name\":\"abhinavoctal\",\"location\":\"Jaipur\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1,\"friends_count\":5,\"listed_count\":0,\"created_at\":\"Sat Oct 08 06:44:15 +0000 2011\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":43,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1584709272\\\/012_Wharton_1024x768_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1584709272\\\/012_Wharton_1024x768_normal.jpg\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Fri Aug 12 05:46:40 +0000 2011\",\"id\":101892336094691329,\"id_str\":\"101892336094691329\",\"text\":\"test 02~~RT @oauthlibtest: Test!\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[12,25]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/seesmic.com\\\/\\\" rel=\\\"nofollow\\\"\\u003eSeesmic\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":168561998,\"id_str\":\"168561998\",\"name\":\"\\ubd09\\ucc3d\\ub6ab\\uae30\",\"screen_name\":\"younla91\",\"location\":\"seoul\",\"description\":\"Job: ITA\\\/EA,IT Governing, web Developing Planner. Bio: lonesome single\\\/ Dreamer\\\/World of Warcraft\\\/\\uc2ec\\uc2ec\\ud558\\ub2e4.\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":225,\"friends_count\":254,\"listed_count\":4,\"created_at\":\"Tue Jul 20 06:56:33 +0000 2010\",\"favourites_count\":19,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":2442,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"B2DFDA\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme13\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme13\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/711560733566218241\\\/M5T2XsoE_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/711560733566218241\\\/M5T2XsoE_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/168561998\\\/1458484272\",\"profile_link_color\":\"93A644\",\"profile_sidebar_border_color\":\"EEEEEE\",\"profile_sidebar_fill_color\":\"FFFFFF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"et\"},{\"created_at\":\"Fri Jun 03 02:29:59 +0000 2011\",\"id\":76475688735092736,\"id_str\":\"76475688735092736\",\"text\":\"@oauthlibtest Hello ! I'm Dong\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":267474806,\"id_str\":\"267474806\",\"name\":\"Beautiful Life\",\"screen_name\":\"dongta712\",\"location\":\"Ha Noi, Viet Nam\",\"description\":\"think different, think smart , always intelligent solutions , php expert\",\"url\":\"https:\\\/\\\/t.co\\\/PEIWG6SgQY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/PEIWG6SgQY\",\"expanded_url\":\"https:\\\/\\\/www.facebook.com\\\/BeautifulLifeImage\",\"display_url\":\"facebook.com\\\/BeautifulLifeI\\u2026\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":80,\"friends_count\":56,\"listed_count\":0,\"created_at\":\"Thu Mar 17 00:50:28 +0000 2011\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":15136,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"ACDED6\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme18\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme18\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/750356464275890177\\\/wmVESyfU_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/750356464275890177\\\/wmVESyfU_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/267474806\\\/1467734084\",\"profile_link_color\":\"038543\",\"profile_sidebar_border_color\":\"EEEEEE\",\"profile_sidebar_fill_color\":\"F6F6F6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Tue May 03 11:45:07 +0000 2011\",\"id\":65381365901828096,\"id_str\":\"65381365901828096\",\"text\":\"@oauthlibtest \\ub098\\ub3c4test..\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":249113612,\"id_str\":\"249113612\",\"name\":\"GgongNa\",\"screen_name\":\"ggonna04\",\"location\":\"\\uc9c0\\uad6c.\\ud55c\\uad6d.\\uadf8\\uc5b4\\ub518\\uac00...\",\"description\":\"\\ud56d\\uc0c1..\\ub204\\uad70\\uac00\\uc5d0\\uac8c\\ub530\\ub73b\\ubbf8\\uc18c\\ub97c\\uc9c0\\uc744\\uc218\\uc788\\ub294...\\ub9d8\\ub113\\uc740\\uc774\",\"url\":\"http:\\\/\\\/t.co\\\/sI6dCHB2gr\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"http:\\\/\\\/t.co\\\/sI6dCHB2gr\",\"expanded_url\":\"http:\\\/\\\/koreantweeters.com\\\/ggonna04\",\"display_url\":\"koreantweeters.com\\\/ggonna04\",\"indices\":[0,22]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":16,\"friends_count\":19,\"listed_count\":1,\"created_at\":\"Tue Feb 08 11:48:27 +0000 2011\",\"favourites_count\":2,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":227,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1384141054\\\/VfKWV12o_normal\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1384141054\\\/VfKWV12o_normal\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"ko\"},{\"created_at\":\"Tue Mar 22 05:24:01 +0000 2011\",\"id\":50065170642370560,\"id_str\":\"50065170642370560\",\"text\":\"@oauthlibtest latest\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":267737297,\"id_str\":\"267737297\",\"name\":\"Developer Artworld\",\"screen_name\":\"dev786art\",\"location\":\"Teh internets\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2,\"friends_count\":1,\"listed_count\":0,\"created_at\":\"Thu Mar 17 13:05:59 +0000 2011\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":48,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Tue Mar 22 05:23:49 +0000 2011\",\"id\":50065118918213632,\"id_str\":\"50065118918213632\",\"text\":\"@oauthlibtest : this is new retweet\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":267737297,\"id_str\":\"267737297\",\"name\":\"Developer Artworld\",\"screen_name\":\"dev786art\",\"location\":\"Teh internets\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2,\"friends_count\":1,\"listed_count\":0,\"created_at\":\"Thu Mar 17 13:05:59 +0000 2011\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":48,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Mar 20 15:24:28 +0000 2011\",\"id\":49491502925225985,\"id_str\":\"49491502925225985\",\"text\":\"Now tracking stats for @oauthlibtest at http:\\\/\\\/twittercounter.com\\\/oauthlibtest?t=t (52 followers)\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[23,36]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/twittercounter.com\\\" rel=\\\"nofollow\\\"\\u003eThe Counter\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":39328213,\"id_str\":\"39328213\",\"name\":\"OurStatus\",\"screen_name\":\"OurStatus\",\"location\":\"TwitterWorld\",\"description\":\"We welcome EVERY new member here so following us might be annoying for you. :-)\",\"url\":\"http:\\\/\\\/t.co\\\/MJn4MTUuC0\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"http:\\\/\\\/t.co\\\/MJn4MTUuC0\",\"expanded_url\":\"http:\\\/\\\/twittercounter.com\\\/\",\"display_url\":\"twittercounter.com\",\"indices\":[0,22]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2481,\"friends_count\":8,\"listed_count\":51,\"created_at\":\"Mon May 11 20:03:28 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":1190192,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"EDECE9\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1087614264\\\/twc_logo_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1087614264\\\/twc_logo_normal.png\",\"profile_link_color\":\"088253\",\"profile_sidebar_border_color\":\"D3D2CF\",\"profile_sidebar_fill_color\":\"E3E2DE\",\"profile_text_color\":\"634047\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Tue Mar 08 16:54:24 +0000 2011\",\"id\":45165480461352960,\"id_str\":\"45165480461352960\",\"text\":\"@oauthlibtest http:\\\/\\\/www.facebook.com\\\/event.php?eid=147409505321037 invita i tuoi amici\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":9885752,\"id_str\":\"9885752\",\"name\":\"tor100\",\"screen_name\":\"tor100\",\"location\":\"italia\",\"description\":\"Cot vade a fe la 'n mes, piciu?\\r\\niononsonodisinistramaCOMUNISTA\",\"url\":\"http:\\\/\\\/t.co\\\/BXBfxnpxqN\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"http:\\\/\\\/t.co\\\/BXBfxnpxqN\",\"expanded_url\":\"http:\\\/\\\/tor100.wordpress.com\\\/\",\"display_url\":\"tor100.wordpress.com\",\"indices\":[0,22]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":241,\"friends_count\":363,\"listed_count\":12,\"created_at\":\"Fri Nov 02 14:16:38 +0000 2007\",\"favourites_count\":20,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":13788,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"9AE4E8\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1224654764\\\/pat_normal.gif\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1224654764\\\/pat_normal.gif\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/9885752\\\/1398770471\",\"profile_link_color\":\"0000FF\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"E0FF92\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"it\"},{\"created_at\":\"Tue Mar 08 16:53:35 +0000 2011\",\"id\":45165273631817728,\"id_str\":\"45165273631817728\",\"text\":\"@oauthlibtest works\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"oauthlibtest\",\"name\":\"OAuth Library Test\",\"id\":93915746,\"id_str\":\"93915746\",\"indices\":[0,13]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":6242973112,\"in_reply_to_status_id_str\":\"6242973112\",\"in_reply_to_user_id\":93915746,\"in_reply_to_user_id_str\":\"93915746\",\"in_reply_to_screen_name\":\"oauthlibtest\",\"user\":{\"id\":52199567,\"id_str\":\"52199567\",\"name\":\"miche fax\",\"screen_name\":\"MicheFax\",\"location\":\"Milano-Verona\",\"description\":\"Trying to improve the good energy inside and outside of me\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":168,\"friends_count\":329,\"listed_count\":4,\"created_at\":\"Mon Jun 29 21:42:18 +0000 2009\",\"favourites_count\":101,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":2619,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1291516151\\\/WeeMee_21507e3d6969f72f670be2f6f4645e9e_for_mi.fac_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1291516151\\\/WeeMee_21507e3d6969f72f670be2f6f4645e9e_for_mi.fac_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/52199567\\\/1453128465\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"}]" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testLastResult.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testLastResult.json deleted file mode 100644 index 6ca9d38b..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testLastResult.json +++ /dev/null @@ -1,46 +0,0 @@ -[{ - "request": { - "method": "GET", - "url": "https:\/\/api.twitter.com\/1.1\/search\/tweets.json?q=twitter", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"qWYQHV5qw8biySQjoR59V9%2BDvOQ%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "12973", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:24 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:24 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_j\/D8MbYgZO9NrZX0j4Doog==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:24 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786114467858900; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:24 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "7dc369267b3c7dbeb719dcad15017787", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-rate-limit-limit": "180", - "x-rate-limit-remaining": "174", - "x-rate-limit-reset": "1587861623", - "x-response-time": "190", - "x-transaction": "00f1001400e3fb3b", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"statuses\":[{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206657657257984,\"id_str\":\"1254206657657257984\",\"text\":\"RT @TheUntamedLati2: Ya perd\\u00ed la cuenta de cuantas veces he visto esa escena, ya se que va a pasar despu\\u00e9s..... y a\\u00fan as\\u00ed todav\\u00eda lloro con\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TheUntamedLati2\",\"name\":\"The Untamed Latinoam\\u00e9rica\",\"id\":1234358495631364096,\"id_str\":\"1234358495631364096\",\"indices\":[3,19]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"es\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":950450150211768320,\"id_str\":\"950450150211768320\",\"name\":\"\\u22b1\\u22b9\\u2133\\u2134\\ud835\\udcb8\\ud835\\udcbd\\ud835\\udcbe \\ud835\\udcc8\\ud835\\udcca\\ud835\\udcb8\\ud835\\udcc7\\ud835\\udcee\\u00b0\\u22b9\\u22b0\",\"screen_name\":\"Mochi_pxxrk\",\"location\":\"\",\"description\":\"\\u2022\\u2022 .\\u00b8\\u00b8.\\u2022\\u00b4\\u00af`\\u2022.\\u2022N\\u1d07\\u1d04\\u1d07s\\u026a\\u1d1b\\u1d0f \\u01eb\\u1d1c\\u1d07 \\u1d0d\\u1d07 \\u0274\\u1d07\\u1d04\\u1d07s\\u026a\\u1d1b\\u1d07s `\\u2022.\\u00b8\\u00b8.\\u2022\\u00b4\\u00b4\\u00af`\\u2022\\u2022\\n\\u06e9\\u25aa\\ufe0e\\ud835\\udc40\\ud835\\udc5c \\ud835\\udc51\\ud835\\udc4e\\ud835\\udc5c \\ud835\\udc67\\ud835\\udc62 \\ud835\\udc60\\u210e\\ud835\\udc56 \\ud835\\udc5a\\ud835\\udc52 \\ud835\\udc51\\ud835\\udc52\\ud835\\udc57\\u00f3 \\ud835\\udc60\\ud835\\udc52\\ud835\\udc5b\\ud835\\udc60\\ud835\\udc56\\ud835\\udc4f\\ud835\\udc59\\ud835\\udc52\\u25aa\\ufe0e\\u06e9\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":68,\"friends_count\":112,\"listed_count\":0,\"created_at\":\"Mon Jan 08 19:32:29 +0000 2018\",\"favourites_count\":32407,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":4806,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243366985817370626\\\/exDXU85Q_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243366985817370626\\\/exDXU85Q_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/950450150211768320\\\/1585967564\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 20:53:48 +0000 2020\",\"id\":1254151647485472770,\"id_str\":\"1254151647485472770\",\"text\":\"Ya perd\\u00ed la cuenta de cuantas veces he visto esa escena, ya se que va a pasar despu\\u00e9s..... y a\\u00fan as\\u00ed todav\\u00eda lloro\\u2026 https:\\\/\\\/t.co\\\/ypYYG5Gmgw\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/ypYYG5Gmgw\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254151647485472770\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[116,139]}]},\"metadata\":{\"iso_language_code\":\"es\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1234358495631364096,\"id_str\":\"1234358495631364096\",\"name\":\"The Untamed Latinoam\\u00e9rica\",\"screen_name\":\"TheUntamedLati2\",\"location\":\"\",\"description\":\"\\ud83d\\udc95Espacio dedicado a las fans de The Untamed\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1263,\"friends_count\":6,\"listed_count\":0,\"created_at\":\"Mon Mar 02 06:03:15 +0000 2020\",\"favourites_count\":1353,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":690,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253900779892740106\\\/C-F7iXpT_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253900779892740106\\\/C-F7iXpT_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1234358495631364096\\\/1583129151\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":11,\"favorite_count\":54,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"es\"},\"is_quote_status\":false,\"retweet_count\":11,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"es\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206657497911297,\"id_str\":\"1254206657497911297\",\"text\":\"RT @muieresnanet: https:\\\/\\\/t.co\\\/Zi7xHqWCDQ\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"muieresnanet\",\"name\":\"mulheres que passaram vergonha\",\"id\":1218213021010616320,\"id_str\":\"1218213021010616320\",\"indices\":[3,16]}],\"urls\":[],\"media\":[{\"id\":1253829607280779264,\"id_str\":\"1253829607280779264\",\"indices\":[18,41],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn7WoAAPtv8.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn7WoAAPtv8.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Zi7xHqWCDQ\",\"display_url\":\"pic.twitter.com\\\/Zi7xHqWCDQ\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/muieresnanet\\\/status\\\/1253829613031165961\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":653,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":1125,\"resize\":\"fit\"},\"medium\":{\"w\":1080,\"h\":1125,\"resize\":\"fit\"}},\"source_status_id\":1253829613031165961,\"source_status_id_str\":\"1253829613031165961\",\"source_user_id\":1218213021010616320,\"source_user_id_str\":\"1218213021010616320\"}]},\"extended_entities\":{\"media\":[{\"id\":1253829607280779264,\"id_str\":\"1253829607280779264\",\"indices\":[18,41],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn7WoAAPtv8.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn7WoAAPtv8.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Zi7xHqWCDQ\",\"display_url\":\"pic.twitter.com\\\/Zi7xHqWCDQ\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/muieresnanet\\\/status\\\/1253829613031165961\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":653,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":1125,\"resize\":\"fit\"},\"medium\":{\"w\":1080,\"h\":1125,\"resize\":\"fit\"}},\"source_status_id\":1253829613031165961,\"source_status_id_str\":\"1253829613031165961\",\"source_user_id\":1218213021010616320,\"source_user_id_str\":\"1218213021010616320\"},{\"id\":1253829607268155395,\"id_str\":\"1253829607268155395\",\"indices\":[18,41],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn4WAAMDUWM.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn4WAAMDUWM.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Zi7xHqWCDQ\",\"display_url\":\"pic.twitter.com\\\/Zi7xHqWCDQ\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/muieresnanet\\\/status\\\/1253829613031165961\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":696,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":742,\"h\":1280,\"resize\":\"fit\"},\"small\":{\"w\":394,\"h\":680,\"resize\":\"fit\"}},\"source_status_id\":1253829613031165961,\"source_status_id_str\":\"1253829613031165961\",\"source_user_id\":1218213021010616320,\"source_user_id_str\":\"1218213021010616320\"}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1241507949392138240,\"id_str\":\"1241507949392138240\",\"name\":\"Gigi7772\",\"screen_name\":\"Gigi77721\",\"location\":\"\",\"description\":\"profissional em procrastinar e ficar desenhando o dia todo, pessoa que gosta de ver o circo pegar o fogo mas que n\\u00e3o colocar\\u00e1 a lenha na fogueira pra isso\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":3,\"friends_count\":25,\"listed_count\":0,\"created_at\":\"Sat Mar 21 23:32:26 +0000 2020\",\"favourites_count\":258,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":123,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1242484034191495178\\\/RvuepMjq_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1242484034191495178\\\/RvuepMjq_normal.jpg\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Fri Apr 24 23:34:09 +0000 2020\",\"id\":1253829613031165961,\"id_str\":\"1253829613031165961\",\"text\":\"https:\\\/\\\/t.co\\\/Zi7xHqWCDQ\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1253829607280779264,\"id_str\":\"1253829607280779264\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn7WoAAPtv8.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn7WoAAPtv8.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Zi7xHqWCDQ\",\"display_url\":\"pic.twitter.com\\\/Zi7xHqWCDQ\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/muieresnanet\\\/status\\\/1253829613031165961\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":653,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":1125,\"resize\":\"fit\"},\"medium\":{\"w\":1080,\"h\":1125,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1253829607280779264,\"id_str\":\"1253829607280779264\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn7WoAAPtv8.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn7WoAAPtv8.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Zi7xHqWCDQ\",\"display_url\":\"pic.twitter.com\\\/Zi7xHqWCDQ\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/muieresnanet\\\/status\\\/1253829613031165961\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":653,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1080,\"h\":1125,\"resize\":\"fit\"},\"medium\":{\"w\":1080,\"h\":1125,\"resize\":\"fit\"}}},{\"id\":1253829607268155395,\"id_str\":\"1253829607268155395\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn4WAAMDUWM.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWZ_Yn4WAAMDUWM.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/Zi7xHqWCDQ\",\"display_url\":\"pic.twitter.com\\\/Zi7xHqWCDQ\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/muieresnanet\\\/status\\\/1253829613031165961\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":696,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":742,\"h\":1280,\"resize\":\"fit\"},\"small\":{\"w\":394,\"h\":680,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1218213021010616320,\"id_str\":\"1218213021010616320\",\"name\":\"mulheres que passaram vergonha\",\"screen_name\":\"muieresnanet\",\"location\":\"\",\"description\":\"este perfil tem como objetivo o entretenimento \\\/ se quer que remova SUA imagem DM \\ud83d\\udce9\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":164214,\"friends_count\":0,\"listed_count\":55,\"created_at\":\"Fri Jan 17 16:46:42 +0000 2020\",\"favourites_count\":1816,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":205,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1218719772629786624\\\/Nza3ahvj_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1218719772629786624\\\/Nza3ahvj_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1218213021010616320\\\/1580247905\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":436,\"favorite_count\":3472,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},\"is_quote_status\":false,\"retweet_count\":436,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206657334251523,\"id_str\":\"1254206657334251523\",\"text\":\"@Tmac_thagod https:\\\/\\\/t.co\\\/5FKo9V38wm\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"Tmac_thagod\",\"name\":\"Tmac\",\"id\":439592686,\"id_str\":\"439592686\",\"indices\":[0,12]}],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/5FKo9V38wm\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/gloriaolembo\\\/status\\\/1254136568417259521\",\"display_url\":\"twitter.com\\\/gloriaolembo\\\/s\\u2026\",\"indices\":[13,36]}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":439592686,\"in_reply_to_user_id_str\":\"439592686\",\"in_reply_to_screen_name\":\"Tmac_thagod\",\"user\":{\"id\":2615539497,\"id_str\":\"2615539497\",\"name\":\"BBY.SATURN\",\"screen_name\":\"manny_srz\",\"location\":\"\",\"description\":\"\\u26a0\\ufe0f\\u203c\\ufe0fDon\\u2019t wanna debate w you, stupid\\u203c\\ufe0f\\u26a0\\ufe0f\\ud83d\\ude43\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":260,\"friends_count\":235,\"listed_count\":0,\"created_at\":\"Mon Jun 16 23:13:39 +0000 2014\",\"favourites_count\":24117,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":19284,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1245924964726964224\\\/bHjuSoVJ_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1245924964726964224\\\/bHjuSoVJ_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2615539497\\\/1587097445\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254136568417259521,\"quoted_status_id_str\":\"1254136568417259521\",\"quoted_status\":{\"created_at\":\"Sat Apr 25 19:53:53 +0000 2020\",\"id\":1254136568417259521,\"id_str\":\"1254136568417259521\",\"text\":\"Il n\\u2019a pas comprit le concept \\ud83d\\ude05\\n#confinement https:\\\/\\\/t.co\\\/j0pvvaXqF2\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"confinement\",\"indices\":[32,44]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254136503258808321,\"id_str\":\"1254136503258808321\",\"indices\":[45,68],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254136503258808321\\\/pu\\\/img\\\/F6zOsn8Id0qYrRNO.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254136503258808321\\\/pu\\\/img\\\/F6zOsn8Id0qYrRNO.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/j0pvvaXqF2\",\"display_url\":\"pic.twitter.com\\\/j0pvvaXqF2\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/GloriaOlembo\\\/status\\\/1254136568417259521\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254136503258808321,\"id_str\":\"1254136503258808321\",\"indices\":[45,68],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254136503258808321\\\/pu\\\/img\\\/F6zOsn8Id0qYrRNO.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254136503258808321\\\/pu\\\/img\\\/F6zOsn8Id0qYrRNO.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/j0pvvaXqF2\",\"display_url\":\"pic.twitter.com\\\/j0pvvaXqF2\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/GloriaOlembo\\\/status\\\/1254136568417259521\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":540,\"h\":960,\"resize\":\"fit\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":540,\"h\":960,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[9,16],\"duration_millis\":13078,\"variants\":[{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254136503258808321\\\/pu\\\/vid\\\/320x568\\\/AVnszQa6W9q7c04O.mp4?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254136503258808321\\\/pu\\\/vid\\\/360x640\\\/Xy2jSsmTHBHeOUUi.mp4?tag=10\"},{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254136503258808321\\\/pu\\\/pl\\\/OKaz96Nq0Hw-jSDL.m3u8?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254136503258808321\\\/pu\\\/vid\\\/540x960\\\/2pgtZuZG3AfQD02w.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1164591021008834563,\"id_str\":\"1164591021008834563\",\"name\":\"ITS MY BDAY\\ud83e\\udd73\",\"screen_name\":\"GloriaOlembo\",\"location\":\"Bruxelles, Belgique\",\"description\":\"1m66 de douceur insta: gloriaolembo\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":381,\"friends_count\":87,\"listed_count\":0,\"created_at\":\"Thu Aug 22 17:32:01 +0000 2019\",\"favourites_count\":611,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":588,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1251225268817137670\\\/E5x_QB1R_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1251225268817137670\\\/E5x_QB1R_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1164591021008834563\\\/1584457034\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":17767,\"favorite_count\":38583,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":true,\"lang\":\"fr\"},\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206657296506880,\"id_str\":\"1254206657296506880\",\"text\":\"RT @49ers: For the memories.\\nFor the laughs.\\nFor the advice.\\nFor always having our back.\\n\\n@gkittle46 shares a heartfelt message for @jstale\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"49ers\",\"name\":\"San Francisco 49ers\",\"id\":43403778,\"id_str\":\"43403778\",\"indices\":[3,9]},{\"screen_name\":\"gkittle46\",\"name\":\"George Kittle\",\"id\":725897344357519360,\"id_str\":\"725897344357519360\",\"indices\":[90,100]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":998424527204945920,\"id_str\":\"998424527204945920\",\"name\":\"\\ud83e\\uddb9\\ud83c\\udffc\\u200d\\u2642\\ufe0f\",\"screen_name\":\"_CursedVillain\",\"location\":\"\",\"description\":\"Sports \\u2022 Music \\u2022 Wrestling \\u2022 Gaming\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":763,\"friends_count\":1204,\"listed_count\":4,\"created_at\":\"Mon May 21 04:45:31 +0000 2018\",\"favourites_count\":65370,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":49379,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1249294890820829184\\\/6paZpZ2h_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1249294890820829184\\\/6paZpZ2h_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/998424527204945920\\\/1586690271\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 22:32:34 +0000 2020\",\"id\":1254176502628757504,\"id_str\":\"1254176502628757504\",\"text\":\"For the memories.\\nFor the laughs.\\nFor the advice.\\nFor always having our back.\\n\\n@gkittle46 shares a heartfelt messag\\u2026 https:\\\/\\\/t.co\\\/IKiHkI3yHw\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"gkittle46\",\"name\":\"George Kittle\",\"id\":725897344357519360,\"id_str\":\"725897344357519360\",\"indices\":[79,89]}],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/IKiHkI3yHw\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1254176502628757504\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/studio.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Media Studio\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":43403778,\"id_str\":\"43403778\",\"name\":\"San Francisco 49ers\",\"screen_name\":\"49ers\",\"location\":\"\",\"description\":\"Official Twitter account of the 5-time Super Bowl Champion San Francisco 49ers. \\ud83d\\udccd@LevisStadium \\ud83e\\udd1d@49ersCommunity\",\"url\":\"https:\\\/\\\/t.co\\\/i5n2B6Tchl\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/i5n2B6Tchl\",\"expanded_url\":\"https:\\\/\\\/www.49ers.com\\\/IGYB\",\"display_url\":\"49ers.com\\\/IGYB\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2195579,\"friends_count\":370,\"listed_count\":10319,\"created_at\":\"Fri May 29 20:34:37 +0000 2009\",\"favourites_count\":11387,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":46755,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1254124273326686208\\\/xhKFSbQQ_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1254124273326686208\\\/xhKFSbQQ_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/43403778\\\/1587841477\",\"profile_link_color\":\"AA0000\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"CCCCCC\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":1869,\"favorite_count\":8177,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":1869,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206657112027137,\"id_str\":\"1254206657112027137\",\"text\":\"She owes an apology to everyone for being on twitter. https:\\\/\\\/t.co\\\/CaXY7b1PKl\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/CaXY7b1PKl\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/carolinecstark\\\/status\\\/1254200440729763841\",\"display_url\":\"twitter.com\\\/carolinecstark\\u2026\",\"indices\":[54,77]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/#!\\\/download\\\/ipad\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPad\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":733283255550509056,\"id_str\":\"733283255550509056\",\"name\":\"comrade 48\",\"screen_name\":\"48kiloss\",\"location\":\"\",\"description\":\"recovering\\\/ 2003\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2359,\"friends_count\":1725,\"listed_count\":10,\"created_at\":\"Thu May 19 13:08:46 +0000 2016\",\"favourites_count\":43789,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":38037,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1244744839431946240\\\/3XCD7qEK_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1244744839431946240\\\/3XCD7qEK_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/733283255550509056\\\/1585917169\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254200440729763841,\"quoted_status_id_str\":\"1254200440729763841\",\"quoted_status\":{\"created_at\":\"Sun Apr 26 00:07:41 +0000 2020\",\"id\":1254200440729763841,\"id_str\":\"1254200440729763841\",\"text\":\"Amber Tamblyn owes me an apology for being god damned annoying\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":194071815,\"id_str\":\"194071815\",\"name\":\"\\ud83d\\ude37 Stimulus Chick\\ud83d\\ude37\",\"screen_name\":\"carolinecstark\",\"location\":\"Liberate Virginia\",\"description\":\"Views are my cat's. she\\\/her. avi by @sup_im_sammy\\n\\nVote shamers will be disinfected and put under a UV lamp\\nDon't DM unless we're friendly on here.\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":7447,\"friends_count\":6808,\"listed_count\":18,\"created_at\":\"Thu Sep 23 11:01:35 +0000 2010\",\"favourites_count\":133530,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":38023,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"0099B9\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme4\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme4\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1206722622802800640\\\/Tp_bK1nV_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1206722622802800640\\\/Tp_bK1nV_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/194071815\\\/1406605005\",\"profile_link_color\":\"FF691F\",\"profile_sidebar_border_color\":\"5ED4DC\",\"profile_sidebar_fill_color\":\"95E8EC\",\"profile_text_color\":\"3C3940\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":3,\"favorite_count\":37,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206657111916545,\"id_str\":\"1254206657111916545\",\"text\":\"RT @LJJAY7: Take notes babygirl \\ud83e\\udd17 IG: ljaaaayyyy https:\\\/\\\/t.co\\\/ooeYap03FH\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"LJJAY7\",\"name\":\"L.\",\"id\":1220050781593899010,\"id_str\":\"1220050781593899010\",\"indices\":[3,10]}],\"urls\":[],\"media\":[{\"id\":1252762554796998658,\"id_str\":\"1252762554796998658\",\"indices\":[49,72],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1252762554796998658\\\/pu\\\/img\\\/Fsdpn0mFYGzTjn8H.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1252762554796998658\\\/pu\\\/img\\\/Fsdpn0mFYGzTjn8H.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ooeYap03FH\",\"display_url\":\"pic.twitter.com\\\/ooeYap03FH\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/LJJAY7\\\/status\\\/1252762680496177152\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":720,\"h\":1280,\"resize\":\"fit\"},\"medium\":{\"w\":675,\"h\":1200,\"resize\":\"fit\"}},\"source_status_id\":1252762680496177152,\"source_status_id_str\":\"1252762680496177152\",\"source_user_id\":1220050781593899010,\"source_user_id_str\":\"1220050781593899010\"}]},\"extended_entities\":{\"media\":[{\"id\":1252762554796998658,\"id_str\":\"1252762554796998658\",\"indices\":[49,72],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1252762554796998658\\\/pu\\\/img\\\/Fsdpn0mFYGzTjn8H.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1252762554796998658\\\/pu\\\/img\\\/Fsdpn0mFYGzTjn8H.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ooeYap03FH\",\"display_url\":\"pic.twitter.com\\\/ooeYap03FH\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/LJJAY7\\\/status\\\/1252762680496177152\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":720,\"h\":1280,\"resize\":\"fit\"},\"medium\":{\"w\":675,\"h\":1200,\"resize\":\"fit\"}},\"source_status_id\":1252762680496177152,\"source_status_id_str\":\"1252762680496177152\",\"source_user_id\":1220050781593899010,\"source_user_id_str\":\"1220050781593899010\",\"video_info\":{\"aspect_ratio\":[9,16],\"duration_millis\":7183,\"variants\":[{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1252762554796998658\\\/pu\\\/pl\\\/PS4qcmG94wzmoBj7.m3u8?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1252762554796998658\\\/pu\\\/vid\\\/360x640\\\/eI-depY-BwgeWs80.mp4?tag=10\"},{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1252762554796998658\\\/pu\\\/vid\\\/320x568\\\/zYaQDzFbR1zzEuCK.mp4?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1252762554796998658\\\/pu\\\/vid\\\/720x1280\\\/nw1mTLie45M_C6JU.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false,\"source_user\":{\"id\":1220050781593899010,\"id_str\":\"1220050781593899010\",\"name\":\"L.\",\"screen_name\":\"LJJAY7\",\"location\":\"\",\"description\":\"Accomplish the unbelievable \\ud83e\\udd2b IG | @ljaaaayyyy Snap | @ljjaayyyy\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":44,\"friends_count\":50,\"listed_count\":0,\"created_at\":\"Wed Jan 22 18:29:17 +0000 2020\",\"favourites_count\":644,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":493,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1250909737622831104\\\/WnwKXHJ5_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1250909737622831104\\\/WnwKXHJ5_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1220050781593899010\\\/1587857554\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"}}}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1220050781593899010,\"id_str\":\"1220050781593899010\",\"name\":\"L.\",\"screen_name\":\"LJJAY7\",\"location\":\"\",\"description\":\"Accomplish the unbelievable \\ud83e\\udd2b IG | @ljaaaayyyy Snap | @ljjaayyyy\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":44,\"friends_count\":50,\"listed_count\":0,\"created_at\":\"Wed Jan 22 18:29:17 +0000 2020\",\"favourites_count\":644,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":493,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1250909737622831104\\\/WnwKXHJ5_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1250909737622831104\\\/WnwKXHJ5_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1220050781593899010\\\/1587857554\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Apr 22 00:54:32 +0000 2020\",\"id\":1252762680496177152,\"id_str\":\"1252762680496177152\",\"text\":\"Take notes babygirl \\ud83e\\udd17 IG: ljaaaayyyy https:\\\/\\\/t.co\\\/ooeYap03FH\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1252762554796998658,\"id_str\":\"1252762554796998658\",\"indices\":[37,60],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1252762554796998658\\\/pu\\\/img\\\/Fsdpn0mFYGzTjn8H.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1252762554796998658\\\/pu\\\/img\\\/Fsdpn0mFYGzTjn8H.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ooeYap03FH\",\"display_url\":\"pic.twitter.com\\\/ooeYap03FH\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/LJJAY7\\\/status\\\/1252762680496177152\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":720,\"h\":1280,\"resize\":\"fit\"},\"medium\":{\"w\":675,\"h\":1200,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1252762554796998658,\"id_str\":\"1252762554796998658\",\"indices\":[37,60],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1252762554796998658\\\/pu\\\/img\\\/Fsdpn0mFYGzTjn8H.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1252762554796998658\\\/pu\\\/img\\\/Fsdpn0mFYGzTjn8H.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ooeYap03FH\",\"display_url\":\"pic.twitter.com\\\/ooeYap03FH\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/LJJAY7\\\/status\\\/1252762680496177152\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":383,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":720,\"h\":1280,\"resize\":\"fit\"},\"medium\":{\"w\":675,\"h\":1200,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[9,16],\"duration_millis\":7183,\"variants\":[{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1252762554796998658\\\/pu\\\/pl\\\/PS4qcmG94wzmoBj7.m3u8?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1252762554796998658\\\/pu\\\/vid\\\/360x640\\\/eI-depY-BwgeWs80.mp4?tag=10\"},{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1252762554796998658\\\/pu\\\/vid\\\/320x568\\\/zYaQDzFbR1zzEuCK.mp4?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1252762554796998658\\\/pu\\\/vid\\\/720x1280\\\/nw1mTLie45M_C6JU.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1220050781593899010,\"id_str\":\"1220050781593899010\",\"name\":\"L.\",\"screen_name\":\"LJJAY7\",\"location\":\"\",\"description\":\"Accomplish the unbelievable \\ud83e\\udd2b IG | @ljaaaayyyy Snap | @ljjaayyyy\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":44,\"friends_count\":50,\"listed_count\":0,\"created_at\":\"Wed Jan 22 18:29:17 +0000 2020\",\"favourites_count\":644,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":493,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1250909737622831104\\\/WnwKXHJ5_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1250909737622831104\\\/WnwKXHJ5_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1220050781593899010\\\/1587857554\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":1,\"favorite_count\":4,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":true,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":1,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":true,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206657002954753,\"id_str\":\"1254206657002954753\",\"text\":\"RT @LoudLuxury: THIS IS THE CRAZIEST SHOUTOUT WE\\u2019VE EVER HAD https:\\\/\\\/t.co\\\/S2M6rWuIv9\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"LoudLuxury\",\"name\":\"LOUD LUXURY\",\"id\":636798983,\"id_str\":\"636798983\",\"indices\":[3,14]}],\"urls\":[],\"media\":[{\"id\":1254177914548973568,\"id_str\":\"1254177914548973568\",\"indices\":[61,84],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254177914548973568\\\/pu\\\/img\\\/kJERctvXDVMIEf6V.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254177914548973568\\\/pu\\\/img\\\/kJERctvXDVMIEf6V.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/S2M6rWuIv9\",\"display_url\":\"pic.twitter.com\\\/S2M6rWuIv9\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/LoudLuxury\\\/status\\\/1254177942160109568\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":315,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":555,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":592,\"h\":1280,\"resize\":\"fit\"}},\"source_status_id\":1254177942160109568,\"source_status_id_str\":\"1254177942160109568\",\"source_user_id\":636798983,\"source_user_id_str\":\"636798983\"}]},\"extended_entities\":{\"media\":[{\"id\":1254177914548973568,\"id_str\":\"1254177914548973568\",\"indices\":[61,84],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254177914548973568\\\/pu\\\/img\\\/kJERctvXDVMIEf6V.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254177914548973568\\\/pu\\\/img\\\/kJERctvXDVMIEf6V.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/S2M6rWuIv9\",\"display_url\":\"pic.twitter.com\\\/S2M6rWuIv9\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/LoudLuxury\\\/status\\\/1254177942160109568\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":315,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":555,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":592,\"h\":1280,\"resize\":\"fit\"}},\"source_status_id\":1254177942160109568,\"source_status_id_str\":\"1254177942160109568\",\"source_user_id\":636798983,\"source_user_id_str\":\"636798983\",\"video_info\":{\"aspect_ratio\":[37,80],\"duration_millis\":4468,\"variants\":[{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254177914548973568\\\/pu\\\/pl\\\/x-8n3sLVOeldDD2B.m3u8?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254177914548973568\\\/pu\\\/vid\\\/592x1280\\\/BAC3g6bTrFhYAT2A.mp4?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254177914548973568\\\/pu\\\/vid\\\/360x778\\\/CZqGFrt5E9hWIBuF.mp4?tag=10\"},{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254177914548973568\\\/pu\\\/vid\\\/320x690\\\/Fl4K3_fQtPmrOutK.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false,\"source_user\":{\"id\":636798983,\"id_str\":\"636798983\",\"name\":\"LOUD LUXURY\",\"screen_name\":\"LoudLuxury\",\"location\":\"\",\"description\":\"nights like this \\ud83c\\udf19\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":16239,\"friends_count\":310,\"listed_count\":79,\"created_at\":\"Mon Jul 16 08:12:40 +0000 2012\",\"favourites_count\":24502,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3860,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243387286156226561\\\/tSBhr6o3_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243387286156226561\\\/tSBhr6o3_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/636798983\\\/1551346510\",\"profile_link_color\":\"ABB8C2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"}}}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":3222873008,\"id_str\":\"3222873008\",\"name\":\"Breauxs In The City\",\"screen_name\":\"braudsinthecity\",\"location\":\"New Orleans, LA\",\"description\":\"follow us through all our adventures \\ud83d\\ude0e\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":207,\"friends_count\":690,\"listed_count\":2,\"created_at\":\"Fri May 22 02:38:37 +0000 2015\",\"favourites_count\":10409,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":515,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1167663215091900418\\\/8riZRvQq_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1167663215091900418\\\/8riZRvQq_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/3222873008\\\/1502922748\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 22:38:17 +0000 2020\",\"id\":1254177942160109568,\"id_str\":\"1254177942160109568\",\"text\":\"THIS IS THE CRAZIEST SHOUTOUT WE\\u2019VE EVER HAD https:\\\/\\\/t.co\\\/S2M6rWuIv9\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254177914548973568,\"id_str\":\"1254177914548973568\",\"indices\":[45,68],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254177914548973568\\\/pu\\\/img\\\/kJERctvXDVMIEf6V.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254177914548973568\\\/pu\\\/img\\\/kJERctvXDVMIEf6V.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/S2M6rWuIv9\",\"display_url\":\"pic.twitter.com\\\/S2M6rWuIv9\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/LoudLuxury\\\/status\\\/1254177942160109568\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":315,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":555,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":592,\"h\":1280,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254177914548973568,\"id_str\":\"1254177914548973568\",\"indices\":[45,68],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254177914548973568\\\/pu\\\/img\\\/kJERctvXDVMIEf6V.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254177914548973568\\\/pu\\\/img\\\/kJERctvXDVMIEf6V.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/S2M6rWuIv9\",\"display_url\":\"pic.twitter.com\\\/S2M6rWuIv9\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/LoudLuxury\\\/status\\\/1254177942160109568\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":315,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":555,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":592,\"h\":1280,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[37,80],\"duration_millis\":4468,\"variants\":[{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254177914548973568\\\/pu\\\/pl\\\/x-8n3sLVOeldDD2B.m3u8?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254177914548973568\\\/pu\\\/vid\\\/592x1280\\\/BAC3g6bTrFhYAT2A.mp4?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254177914548973568\\\/pu\\\/vid\\\/360x778\\\/CZqGFrt5E9hWIBuF.mp4?tag=10\"},{\"bitrate\":632000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254177914548973568\\\/pu\\\/vid\\\/320x690\\\/Fl4K3_fQtPmrOutK.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":636798983,\"id_str\":\"636798983\",\"name\":\"LOUD LUXURY\",\"screen_name\":\"LoudLuxury\",\"location\":\"\",\"description\":\"nights like this \\ud83c\\udf19\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":16239,\"friends_count\":310,\"listed_count\":79,\"created_at\":\"Mon Jul 16 08:12:40 +0000 2012\",\"favourites_count\":24502,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3860,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243387286156226561\\\/tSBhr6o3_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1243387286156226561\\\/tSBhr6o3_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/636798983\\\/1551346510\",\"profile_link_color\":\"ABB8C2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":26,\"favorite_count\":251,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":26,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206656977661953,\"id_str\":\"1254206656977661953\",\"text\":\"https:\\\/\\\/t.co\\\/xQVrNV3BXO #\\u30d8\\u30ca\\u30bf\\u30c8\\u30a5\\u30fc\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"\\u30d8\\u30ca\\u30bf\\u30c8\\u30a5\\u30fc\",\"indices\":[24,31]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/xQVrNV3BXO\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/AntiXxx666\\\/status\\\/678051776164003841\",\"display_url\":\"twitter.com\\\/AntiXxx666\\\/sta\\u2026\",\"indices\":[0,23]}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twittbot.net\\\/\\\" rel=\\\"nofollow\\\"\\u003etwittbot.net\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":4599261734,\"id_str\":\"4599261734\",\"name\":\"\\u30d8\\u30ca\\u30bf\\u30c8\\u30a5\\u30fc\\u753b\\u50cfbot\",\"screen_name\":\"AntiXxx666\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":86,\"friends_count\":30,\"listed_count\":0,\"created_at\":\"Sat Dec 19 02:52:38 +0000 2015\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":28303,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/678047609819295744\\\/-11QfG8W_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/678047609819295744\\\/-11QfG8W_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/4599261734\\\/1450493874\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":678051776164003841,\"quoted_status_id_str\":\"678051776164003841\",\"quoted_status\":{\"created_at\":\"Sat Dec 19 03:18:35 +0000 2015\",\"id\":678051776164003841,\"id_str\":\"678051776164003841\",\"text\":\"https:\\\/\\\/t.co\\\/BF2Jkyd6qW\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":678051775409090561,\"id_str\":\"678051775409090561\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/CWjsf0yU8AEDk6b.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/CWjsf0yU8AEDk6b.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/BF2Jkyd6qW\",\"display_url\":\"pic.twitter.com\\\/BF2Jkyd6qW\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/AntiXxx666\\\/status\\\/678051776164003841\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1024,\"h\":768,\"resize\":\"fit\"},\"medium\":{\"w\":1024,\"h\":768,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":678051775409090561,\"id_str\":\"678051775409090561\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/CWjsf0yU8AEDk6b.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/CWjsf0yU8AEDk6b.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/BF2Jkyd6qW\",\"display_url\":\"pic.twitter.com\\\/BF2Jkyd6qW\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/AntiXxx666\\\/status\\\/678051776164003841\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1024,\"h\":768,\"resize\":\"fit\"},\"medium\":{\"w\":1024,\"h\":768,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":510,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":4599261734,\"id_str\":\"4599261734\",\"name\":\"\\u30d8\\u30ca\\u30bf\\u30c8\\u30a5\\u30fc\\u753b\\u50cfbot\",\"screen_name\":\"AntiXxx666\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":86,\"friends_count\":30,\"listed_count\":0,\"created_at\":\"Sat Dec 19 02:52:38 +0000 2015\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":28303,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/678047609819295744\\\/-11QfG8W_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/678047609819295744\\\/-11QfG8W_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/4599261734\\\/1450493874\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":3,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206656885514247,\"id_str\":\"1254206656885514247\",\"text\":\"RT @joseurbinasv: Despu\\u00e9s de una larga jornada de trabajo en el hospital, Paty ya va para su casa pero deja este mensaje. https:\\\/\\\/t.co\\\/5FNc\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"joseurbinasv\",\"name\":\"Jos\\u00e9 Urbina\",\"id\":1861130508,\"id_str\":\"1861130508\",\"indices\":[3,16]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"es\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/#!\\\/download\\\/ipad\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPad\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1214634599789289476,\"id_str\":\"1214634599789289476\",\"name\":\"JOSE A RAMIREZ\",\"screen_name\":\"JOSEARA67680956\",\"location\":\"\",\"description\":\"APOYO AL 100% AL PRESIDENTE BUKELE Y SOY GRAN ADMIRADOR DE WALTER ARAUJO, SI LO OFENDEN A EL ME OFENDEN A MI Y FIEL DEFENSOR DE LOS INDEFENSOS ANIMALITOS\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":22,\"friends_count\":41,\"listed_count\":0,\"created_at\":\"Tue Jan 07 19:47:33 +0000 2020\",\"favourites_count\":2971,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":1184,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1227436246579978242\\\/XBDTkyeU_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1227436246579978242\\\/XBDTkyeU_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1214634599789289476\\\/1585688240\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sun Apr 26 00:01:01 +0000 2020\",\"id\":1254198763679289344,\"id_str\":\"1254198763679289344\",\"text\":\"Despu\\u00e9s de una larga jornada de trabajo en el hospital, Paty ya va para su casa pero deja este mensaje. https:\\\/\\\/t.co\\\/5FNcy2j3O8\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254198673417830403,\"id_str\":\"1254198673417830403\",\"indices\":[104,127],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198673417830403\\\/pu\\\/img\\\/QiEh9MSgM-XZZrf7.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198673417830403\\\/pu\\\/img\\\/QiEh9MSgM-XZZrf7.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/5FNcy2j3O8\",\"display_url\":\"pic.twitter.com\\\/5FNcy2j3O8\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/joseurbinasv\\\/status\\\/1254198763679289344\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1200,\"h\":675,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":383,\"resize\":\"fit\"},\"large\":{\"w\":1280,\"h\":720,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254198673417830403,\"id_str\":\"1254198673417830403\",\"indices\":[104,127],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198673417830403\\\/pu\\\/img\\\/QiEh9MSgM-XZZrf7.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254198673417830403\\\/pu\\\/img\\\/QiEh9MSgM-XZZrf7.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/5FNcy2j3O8\",\"display_url\":\"pic.twitter.com\\\/5FNcy2j3O8\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/joseurbinasv\\\/status\\\/1254198763679289344\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1200,\"h\":675,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":383,\"resize\":\"fit\"},\"large\":{\"w\":1280,\"h\":720,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[16,9],\"duration_millis\":27561,\"variants\":[{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198673417830403\\\/pu\\\/pl\\\/I11us3PqI_bgan9c.m3u8?tag=10\"},{\"bitrate\":2176000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198673417830403\\\/pu\\\/vid\\\/1280x720\\\/CbaIxgXze-LxTV3O.mp4?tag=10\"},{\"bitrate\":832000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198673417830403\\\/pu\\\/vid\\\/640x360\\\/22fmow7vJ4LsuHtZ.mp4?tag=10\"},{\"bitrate\":256000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254198673417830403\\\/pu\\\/vid\\\/480x270\\\/gOkZOrWpiC1O2bra.mp4?tag=10\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"metadata\":{\"iso_language_code\":\"es\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1861130508,\"id_str\":\"1861130508\",\"name\":\"Jos\\u00e9 Urbina\",\"screen_name\":\"joseurbinasv\",\"location\":\"\",\"description\":\"Maestr\\u00eda en Comunicaci\\u00f3n y Postgrado en Comunicaci\\u00f3n Estrat\\u00e9gica UCA . El mundo cambia cuando los j\\u00f3venes se involucran.\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":4107,\"friends_count\":301,\"listed_count\":35,\"created_at\":\"Fri Sep 13 17:03:21 +0000 2013\",\"favourites_count\":17658,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":46439,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1236740297385705472\\\/IwgSDMrz_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1236740297385705472\\\/IwgSDMrz_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1861130508\\\/1583696141\",\"profile_link_color\":\"001EB3\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":13,\"favorite_count\":52,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"es\"},\"is_quote_status\":false,\"retweet_count\":13,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"es\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206656877133830,\"id_str\":\"1254206656877133830\",\"text\":\"RT @StrikeVixen: https:\\\/\\\/t.co\\\/ZaggN9dKcP\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"StrikeVixen\",\"name\":\"S T A R W I N D\",\"id\":192912527,\"id_str\":\"192912527\",\"indices\":[3,15]}],\"urls\":[],\"media\":[{\"id\":1254045904706965509,\"id_str\":\"1254045904706965509\",\"indices\":[17,40],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdEGyoXkAU6GZJ.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdEGyoXkAU6GZJ.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ZaggN9dKcP\",\"display_url\":\"pic.twitter.com\\\/ZaggN9dKcP\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/StrikeVixen\\\/status\\\/1254045914391552000\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":678,\"h\":1280,\"resize\":\"fit\"},\"small\":{\"w\":360,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":636,\"h\":1200,\"resize\":\"fit\"}},\"source_status_id\":1254045914391552000,\"source_status_id_str\":\"1254045914391552000\",\"source_user_id\":192912527,\"source_user_id_str\":\"192912527\"}]},\"extended_entities\":{\"media\":[{\"id\":1254045904706965509,\"id_str\":\"1254045904706965509\",\"indices\":[17,40],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdEGyoXkAU6GZJ.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdEGyoXkAU6GZJ.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ZaggN9dKcP\",\"display_url\":\"pic.twitter.com\\\/ZaggN9dKcP\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/StrikeVixen\\\/status\\\/1254045914391552000\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":678,\"h\":1280,\"resize\":\"fit\"},\"small\":{\"w\":360,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":636,\"h\":1200,\"resize\":\"fit\"}},\"source_status_id\":1254045914391552000,\"source_status_id_str\":\"1254045914391552000\",\"source_user_id\":192912527,\"source_user_id_str\":\"192912527\"}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":3165116835,\"id_str\":\"3165116835\",\"name\":\"Assassin's Creed: New Horizons\",\"screen_name\":\"drivebykissu\",\"location\":\"South Carolina, USA\",\"description\":\"\\ud83d\\udd1e ENFP-A \\ud83c\\udf15 Not so secretly a werecat and many hyenas \\ud83c\\udf16 Video games\\\/Art\\\/Memes \\ud83c\\udf17 i: @Poodlepoofs \\ud83c\\udf18 b: @094px \\ud83c\\udf11 @excaliburnina \\ud83d\\udc9c\",\"url\":\"https:\\\/\\\/t.co\\\/5VmnLtpyin\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/5VmnLtpyin\",\"expanded_url\":\"https:\\\/\\\/www.furaffinity.net\\\/user\\\/kejah\\\/\",\"display_url\":\"furaffinity.net\\\/user\\\/kejah\\\/\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":353,\"friends_count\":2893,\"listed_count\":0,\"created_at\":\"Mon Apr 13 18:55:51 +0000 2015\",\"favourites_count\":31707,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":12111,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"131516\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1247058931773562882\\\/G7D5sJmV_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1247058931773562882\\\/G7D5sJmV_normal.png\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/3165116835\\\/1573281071\",\"profile_link_color\":\"1B95E0\",\"profile_sidebar_border_color\":\"EEEEEE\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 13:53:39 +0000 2020\",\"id\":1254045914391552000,\"id_str\":\"1254045914391552000\",\"text\":\"https:\\\/\\\/t.co\\\/ZaggN9dKcP\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254045904706965509,\"id_str\":\"1254045904706965509\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdEGyoXkAU6GZJ.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdEGyoXkAU6GZJ.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ZaggN9dKcP\",\"display_url\":\"pic.twitter.com\\\/ZaggN9dKcP\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/StrikeVixen\\\/status\\\/1254045914391552000\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":678,\"h\":1280,\"resize\":\"fit\"},\"small\":{\"w\":360,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":636,\"h\":1200,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254045904706965509,\"id_str\":\"1254045904706965509\",\"indices\":[0,23],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdEGyoXkAU6GZJ.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWdEGyoXkAU6GZJ.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/ZaggN9dKcP\",\"display_url\":\"pic.twitter.com\\\/ZaggN9dKcP\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/StrikeVixen\\\/status\\\/1254045914391552000\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":678,\"h\":1280,\"resize\":\"fit\"},\"small\":{\"w\":360,\"h\":680,\"resize\":\"fit\"},\"medium\":{\"w\":636,\"h\":1200,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/about.twitter.com\\\/products\\\/tweetdeck\\\" rel=\\\"nofollow\\\"\\u003eTweetDeck\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":192912527,\"id_str\":\"192912527\",\"name\":\"S T A R W I N D\",\"screen_name\":\"StrikeVixen\",\"location\":\"\",\"description\":\"Designer, writer, creator and destroyer. She\\\/Her, aspergers, HFA, ADHD, Trans MtF Untransitioned, I block minors and so should you. Occasionally NSFW.\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":3775,\"friends_count\":1116,\"listed_count\":53,\"created_at\":\"Mon Sep 20 14:05:22 +0000 2010\",\"favourites_count\":109305,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":337243,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"304FCC\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme14\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1181727163562811395\\\/UdfatoLk_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1181727163562811395\\\/UdfatoLk_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/192912527\\\/1570580687\",\"profile_link_color\":\"19CF86\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":144,\"favorite_count\":421,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},\"is_quote_status\":false,\"retweet_count\":144,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206656868528128,\"id_str\":\"1254206656868528128\",\"text\":\"RT @GituSharma16: #MustListan_Satsang \\n@SaintRampalJiM \\nMust watch sadna tv 7.30 to 8.30pmIST\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"MustListan_Satsang\",\"indices\":[18,37]}],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"GituSharma16\",\"name\":\"\\u2618\\ufe0fGitu sharma \\u2764\\u2618\\ufe0f\\ud83c\\uddee\\ud83c\\uddf3\\ud83d\\udcaf\",\"id\":1198984160951451648,\"id_str\":\"1198984160951451648\",\"indices\":[3,16]},{\"screen_name\":\"SaintRampalJiM\",\"name\":\"Saint Rampal Ji Maharaj\",\"id\":91851084,\"id_str\":\"91851084\",\"indices\":[39,54]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1229250035784699904,\"id_str\":\"1229250035784699904\",\"name\":\"Bhojram Sidar(\\ud83d\\udcafFB)\",\"screen_name\":\"Bhojram88825907\",\"location\":\"\",\"description\":\"\\ud83d\\udea9\\u0930\\u093e\\u092e \\u0930\\u093e\\u092e \\u0938\\u092c \\u091c\\u0917\\u0924 \\u092c\\u0916\\u093e\\u0928\\u0947 \\u0906\\u0926\\u093f \\u0930\\u093e\\u092e \\u0915\\u094b\\u0908 \\u092c\\u093f\\u0930\\u0932\\u093e \\u091c\\u093e\\u0928\\u0947\\u0964 must watch Sadhna tv channel night 7:30pm\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":507,\"friends_count\":470,\"listed_count\":0,\"created_at\":\"Mon Feb 17 03:44:14 +0000 2020\",\"favourites_count\":857,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":590,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1237321566867918848\\\/S3t1WwBW_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1237321566867918848\\\/S3t1WwBW_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1229250035784699904\\\/1585820547\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sun Apr 26 00:30:03 +0000 2020\",\"id\":1254206069217337344,\"id_str\":\"1254206069217337344\",\"text\":\"#MustListan_Satsang \\n@SaintRampalJiM \\nMust watch sadna tv 7.30 to 8.30pmIST https:\\\/\\\/t.co\\\/p69xnX78bI\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"MustListan_Satsang\",\"indices\":[0,19]}],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"SaintRampalJiM\",\"name\":\"Saint Rampal Ji Maharaj\",\"id\":91851084,\"id_str\":\"91851084\",\"indices\":[21,36]}],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/p69xnX78bI\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/SaintRampalJiM\\\/status\\\/1254204588133019648\",\"display_url\":\"twitter.com\\\/SaintRampalJiM\\u2026\",\"indices\":[77,100]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1198984160951451648,\"id_str\":\"1198984160951451648\",\"name\":\"\\u2618\\ufe0fGitu sharma \\u2764\\u2618\\ufe0f\\ud83c\\uddee\\ud83c\\uddf3\\ud83d\\udcaf\",\"screen_name\":\"GituSharma16\",\"location\":\"Assam, India\",\"description\":\"\\ud83c\\uddee\\ud83c\\uddf3\\u092e\\u0928\\u0941\\u0937\\u094d\\u092f\\u0964 \\u091c\\u0928\\u094d\\u092e \\u0926\\u0941\\u0930\\u094d\\u0932\\u092d \\u0939\\u0948 \\u092e\\u093f\\u0932\\u0947 \\u0928\\u093e \\u092c\\u0930\\u093e\\u092e \\u092c\\u093e\\u0930\\ud83d\\ude4fonly sewa \\ud83d\\ude4f\\ud83d\\ude4f\",\"url\":\"https:\\\/\\\/t.co\\\/rwdohULLw5\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/rwdohULLw5\",\"expanded_url\":\"http:\\\/\\\/www.jagatgururampalji.org.com\",\"display_url\":\"jagatgururampalji.org.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2747,\"friends_count\":2306,\"listed_count\":0,\"created_at\":\"Mon Nov 25 15:18:49 +0000 2019\",\"favourites_count\":2463,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":3474,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253690240029638656\\\/3aVMFiPH_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253690240029638656\\\/3aVMFiPH_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1198984160951451648\\\/1587714561\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254204588133019648,\"quoted_status_id_str\":\"1254204588133019648\",\"quoted_status\":{\"created_at\":\"Sun Apr 26 00:24:10 +0000 2020\",\"id\":1254204588133019648,\"id_str\":\"1254204588133019648\",\"text\":\"#MustListen_Satsang || Nepal 1 TV 26-04-2020 | Episode - 105 | Sant Rampal Ji Maharaj Satsang https:\\\/\\\/t.co\\\/xYaTSQ4vet\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"MustListen_Satsang\",\"indices\":[0,19]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/xYaTSQ4vet\",\"expanded_url\":\"https:\\\/\\\/www.pscp.tv\\\/w\\\/cXN6qjFwempNT1ZNcVpnUWR8MXZBeFJCcW1hZ0R4bD0OtZn8wclVZYmhDcmdSZkaTnB5cGWNjXxZ7o4ejlPd\",\"display_url\":\"pscp.tv\\\/w\\\/cXN6qjFwempN\\u2026\",\"indices\":[94,117]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/periscope.tv\\\" rel=\\\"nofollow\\\"\\u003ePeriscope\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":91851084,\"id_str\":\"91851084\",\"name\":\"Saint Rampal Ji Maharaj\",\"screen_name\":\"SaintRampalJiM\",\"location\":\"Barwala, Hisar, India\",\"description\":\"\\u0905\\u092e\\u0930 \\u0915\\u0930\\u0942\\u0902 \\u0938\\u0924\\u0932\\u094b\\u0915 \\u092a\\u0920\\u093e\\u0901\\u090a, \\u0924\\u093e\\u0924\\u0948\\u0902 \\u092c\\u0928\\u094d\\u0926\\u0940 \\u091b\\u094b\\u0921\\u093c \\u0915\\u0939\\u093e\\u090a\\u0901\",\"url\":\"http:\\\/\\\/t.co\\\/q48PTmNW9Y\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"http:\\\/\\\/t.co\\\/q48PTmNW9Y\",\"expanded_url\":\"http:\\\/\\\/www.jagatgururampalji.org\",\"display_url\":\"jagatgururampalji.org\",\"indices\":[0,22]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":50282,\"friends_count\":3,\"listed_count\":93,\"created_at\":\"Sun Nov 22 19:27:42 +0000 2009\",\"favourites_count\":634,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":2405,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFF04D\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme19\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme19\\\/bg.gif\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1191924069840502784\\\/aA1V1BV__normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1191924069840502784\\\/aA1V1BV__normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/91851084\\\/1539069376\",\"profile_link_color\":\"0099CC\",\"profile_sidebar_border_color\":\"FFF8AD\",\"profile_sidebar_fill_color\":\"F6FFD1\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":47,\"favorite_count\":87,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"hi\"},\"retweet_count\":1,\"favorite_count\":1,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":true,\"quoted_status_id\":1254204588133019648,\"quoted_status_id_str\":\"1254204588133019648\",\"retweet_count\":1,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206656809926656,\"id_str\":\"1254206656809926656\",\"text\":\"CC: @ABC @CBSNews @NBCNews @MSNBC @CNN https:\\\/\\\/t.co\\\/Y6BpPdxQpa\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"ABC\",\"name\":\"ABC News\",\"id\":28785486,\"id_str\":\"28785486\",\"indices\":[4,8]},{\"screen_name\":\"CBSNews\",\"name\":\"CBS News\",\"id\":15012486,\"id_str\":\"15012486\",\"indices\":[9,17]},{\"screen_name\":\"NBCNews\",\"name\":\"NBC News\",\"id\":14173315,\"id_str\":\"14173315\",\"indices\":[18,26]},{\"screen_name\":\"MSNBC\",\"name\":\"MSNBC\",\"id\":2836421,\"id_str\":\"2836421\",\"indices\":[27,33]},{\"screen_name\":\"CNN\",\"name\":\"CNN\",\"id\":759251,\"id_str\":\"759251\",\"indices\":[34,38]}],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/Y6BpPdxQpa\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/RepAdamSchiff\\\/status\\\/1253481322141679619\",\"display_url\":\"twitter.com\\\/RepAdamSchiff\\\/\\u2026\",\"indices\":[39,62]}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1181369330690342912,\"id_str\":\"1181369330690342912\",\"name\":\"Citizen, Interrupted (again)\",\"screen_name\":\"NYCwonk\",\"location\":\"Manhattan, NY\",\"description\":\"Don't blame me, I voted for the e-mail lady. \\nSame old me. New account. Who dis?\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":116,\"friends_count\":263,\"listed_count\":1,\"created_at\":\"Tue Oct 08 00:43:02 +0000 2019\",\"favourites_count\":1556,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":6591,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1229976132918939648\\\/KCJjWNUW_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1229976132918939648\\\/KCJjWNUW_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1181369330690342912\\\/1579923707\",\"profile_link_color\":\"1B95E0\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1253481322141679619,\"quoted_status_id_str\":\"1253481322141679619\",\"quoted_status\":{\"created_at\":\"Fri Apr 24 00:30:10 +0000 2020\",\"id\":1253481322141679619,\"id_str\":\"1253481322141679619\",\"text\":\"A week ago I asked whether it was responsible to carry Trump\\u2019s nightly stream of consciousness on live TV.\\n\\nToday,\\u2026 https:\\\/\\\/t.co\\\/sXD3mko7y8\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/sXD3mko7y8\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1253481322141679619\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[116,139]}]},\"metadata\":{\"iso_language_code\":\"und\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":29501253,\"id_str\":\"29501253\",\"name\":\"Adam Schiff\",\"screen_name\":\"RepAdamSchiff\",\"location\":\"Burbank, CA\",\"description\":\"Representing California's 28th Congressional District. Chairman of the House Intelligence Committee (@HouseIntel).\",\"url\":\"https:\\\/\\\/t.co\\\/uxaSLX8uQ7\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/uxaSLX8uQ7\",\"expanded_url\":\"http:\\\/\\\/schiff.house.gov\\\/\",\"display_url\":\"schiff.house.gov\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":2205582,\"friends_count\":776,\"listed_count\":9698,\"created_at\":\"Tue Apr 07 17:54:35 +0000 2009\",\"favourites_count\":153,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":5683,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"2578B8\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/816361054699667458\\\/0DVL6HrY_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/816361054699667458\\\/0DVL6HrY_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/29501253\\\/1547736718\",\"profile_link_color\":\"2578B8\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1253451487415619586,\"quoted_status_id_str\":\"1253451487415619586\",\"retweet_count\":28471,\"favorite_count\":92742,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"und\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206656759468032,\"id_str\":\"1254206656759468032\",\"text\":\"RT @bighitzip: taehyung - profile https:\\\/\\\/t.co\\\/s2sJ2XLhX3\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"bighitzip\",\"name\":\"ARMY.ZIP\",\"id\":1253937691898478596,\"id_str\":\"1253937691898478596\",\"indices\":[3,13]}],\"urls\":[],\"media\":[{\"id\":1253966623028854784,\"id_str\":\"1253966623028854784\",\"indices\":[34,57],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XUwAAoi52.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XUwAAoi52.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/s2sJ2XLhX3\",\"display_url\":\"pic.twitter.com\\\/s2sJ2XLhX3\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/bighitzip\\\/status\\\/1253966635460726789\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":800,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":1500,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":453,\"h\":680,\"resize\":\"fit\"}},\"source_status_id\":1253966635460726789,\"source_status_id_str\":\"1253966635460726789\",\"source_user_id\":1253937691898478596,\"source_user_id_str\":\"1253937691898478596\"}]},\"extended_entities\":{\"media\":[{\"id\":1253966623028854784,\"id_str\":\"1253966623028854784\",\"indices\":[34,57],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XUwAAoi52.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XUwAAoi52.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/s2sJ2XLhX3\",\"display_url\":\"pic.twitter.com\\\/s2sJ2XLhX3\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/bighitzip\\\/status\\\/1253966635460726789\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":800,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":1500,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":453,\"h\":680,\"resize\":\"fit\"}},\"source_status_id\":1253966635460726789,\"source_status_id_str\":\"1253966635460726789\",\"source_user_id\":1253937691898478596,\"source_user_id_str\":\"1253937691898478596\"},{\"id\":1253966623028899841,\"id_str\":\"1253966623028899841\",\"indices\":[34,57],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XVcAEufDY.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XVcAEufDY.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/s2sJ2XLhX3\",\"display_url\":\"pic.twitter.com\\\/s2sJ2XLhX3\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/bighitzip\\\/status\\\/1253966635460726789\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":799,\"h\":1200,\"resize\":\"fit\"},\"small\":{\"w\":453,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":1501,\"resize\":\"fit\"}},\"source_status_id\":1253966635460726789,\"source_status_id_str\":\"1253966635460726789\",\"source_user_id\":1253937691898478596,\"source_user_id_str\":\"1253937691898478596\"}]},\"metadata\":{\"iso_language_code\":\"tl\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":1108896926,\"id_str\":\"1108896926\",\"name\":\"Mustiallati\",\"screen_name\":\"mustialati\",\"location\":\"Pekanbaru,indonesia\",\"description\":\"ig : mustialati\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":354,\"friends_count\":142,\"listed_count\":0,\"created_at\":\"Mon Jan 21 12:23:57 +0000 2013\",\"favourites_count\":1542,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":10558,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"A49AAB\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1251522363465728001\\\/lLcE3j-6_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1251522363465728001\\\/lLcE3j-6_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/1108896926\\\/1529771720\",\"profile_link_color\":\"9944DD\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Sat Apr 25 08:38:38 +0000 2020\",\"id\":1253966635460726789,\"id_str\":\"1253966635460726789\",\"text\":\"taehyung - profile https:\\\/\\\/t.co\\\/s2sJ2XLhX3\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1253966623028854784,\"id_str\":\"1253966623028854784\",\"indices\":[19,42],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XUwAAoi52.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XUwAAoi52.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/s2sJ2XLhX3\",\"display_url\":\"pic.twitter.com\\\/s2sJ2XLhX3\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/bighitzip\\\/status\\\/1253966635460726789\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":800,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":1500,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":453,\"h\":680,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1253966623028854784,\"id_str\":\"1253966623028854784\",\"indices\":[19,42],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XUwAAoi52.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XUwAAoi52.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/s2sJ2XLhX3\",\"display_url\":\"pic.twitter.com\\\/s2sJ2XLhX3\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/bighitzip\\\/status\\\/1253966635460726789\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"medium\":{\"w\":800,\"h\":1200,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":1500,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":453,\"h\":680,\"resize\":\"fit\"}}},{\"id\":1253966623028899841,\"id_str\":\"1253966623028899841\",\"indices\":[19,42],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XVcAEufDY.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWb7__XVcAEufDY.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/s2sJ2XLhX3\",\"display_url\":\"pic.twitter.com\\\/s2sJ2XLhX3\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/bighitzip\\\/status\\\/1253966635460726789\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":799,\"h\":1200,\"resize\":\"fit\"},\"small\":{\"w\":453,\"h\":680,\"resize\":\"fit\"},\"large\":{\"w\":1000,\"h\":1501,\"resize\":\"fit\"}}}]},\"metadata\":{\"iso_language_code\":\"tl\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":1253966632663150592,\"in_reply_to_status_id_str\":\"1253966632663150592\",\"in_reply_to_user_id\":1253937691898478596,\"in_reply_to_user_id_str\":\"1253937691898478596\",\"in_reply_to_screen_name\":\"bighitzip\",\"user\":{\"id\":1253937691898478596,\"id_str\":\"1253937691898478596\",\"name\":\"ARMY.ZIP\",\"screen_name\":\"bighitzip\",\"location\":\"\",\"description\":\"https:\\\/\\\/t.co\\\/V6KgbWseoc\",\"url\":null,\"entities\":{\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/V6KgbWseoc\",\"expanded_url\":\"http:\\\/\\\/bts-armyzip.weverse.io\",\"display_url\":\"bts-armyzip.weverse.io\",\"indices\":[0,23]}]}},\"protected\":false,\"followers_count\":14175,\"friends_count\":0,\"listed_count\":83,\"created_at\":\"Sat Apr 25 06:43:44 +0000 2020\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":15,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"F5F8FA\",\"profile_background_image_url\":null,\"profile_background_image_url_https\":null,\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253939404940423169\\\/1zJGW8Gm_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1253939404940423169\\\/1zJGW8Gm_normal.jpg\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":2064,\"favorite_count\":7227,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"tl\"},\"is_quote_status\":false,\"retweet_count\":2064,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"tl\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206656755482628,\"id_str\":\"1254206656755482628\",\"text\":\"@bealadriel77 Voy, voy, es que se me peta Twitter con tanta petici\\u00f3n y respuesta, jaja. Ahora mismo te env\\u00edo MD \\ud83d\\ude0a\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"bealadriel77\",\"name\":\"Beatriz Jimenez Sanz\",\"id\":611069726,\"id_str\":\"611069726\",\"indices\":[0,13]}],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"es\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":1254205823057829890,\"in_reply_to_status_id_str\":\"1254205823057829890\",\"in_reply_to_user_id\":611069726,\"in_reply_to_user_id_str\":\"611069726\",\"in_reply_to_screen_name\":\"bealadriel77\",\"user\":{\"id\":95011355,\"id_str\":\"95011355\",\"name\":\"Ylenia\",\"screen_name\":\"Ylenia_07\",\"location\":\"\",\"description\":\"\\ud83d\\udeaf\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":557,\"friends_count\":297,\"listed_count\":16,\"created_at\":\"Sun Dec 06 14:51:57 +0000 2009\",\"favourites_count\":11709,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":92707,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"709397\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme9\\\/bg.gif\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme9\\\/bg.gif\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1237899870779965440\\\/D8lv3mv8_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1237899870779965440\\\/D8lv3mv8_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/95011355\\\/1583450679\",\"profile_link_color\":\"8C8284\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"252429\",\"profile_text_color\":\"666666\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"es\"},{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206656684195842,\"id_str\":\"1254206656684195842\",\"text\":\"So any woman will do? Even an evil murdering one? https:\\\/\\\/t.co\\\/cRcsbmXw9O\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/cRcsbmXw9O\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/sethabramson\\\/status\\\/1254180308989235201\",\"display_url\":\"twitter.com\\\/sethabramson\\\/s\\u2026\",\"indices\":[50,73]}]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/iphone\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":728469625,\"id_str\":\"728469625\",\"name\":\"commonsense\",\"screen_name\":\"commonsense258\",\"location\":\"\",\"description\":\"I love sports and current events. Oh and my Yorkie thinks he's human and I'm okay with that.\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":1449,\"friends_count\":438,\"listed_count\":51,\"created_at\":\"Tue Jul 31 14:08:02 +0000 2012\",\"favourites_count\":503592,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":false,\"statuses_count\":256669,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/799401203872518144\\\/Pz99ggy5_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/799401203872518144\\\/Pz99ggy5_normal.jpg\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1254180308989235201,\"quoted_status_id_str\":\"1254180308989235201\",\"quoted_status\":{\"created_at\":\"Sat Apr 25 22:47:41 +0000 2020\",\"id\":1254180308989235201,\"id_str\":\"1254180308989235201\",\"text\":\"Still processing the possibility that North Korea will have its first woman leader before the United States\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[]},\"metadata\":{\"iso_language_code\":\"en\",\"result_type\":\"recent\"},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\/download\\\/android\\\" rel=\\\"nofollow\\\"\\u003eTwitter for Android\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":3223426134,\"id_str\":\"3223426134\",\"name\":\"Seth Abramson (@\\ud83c\\udfe0)\",\"screen_name\":\"SethAbramson\",\"location\":\"All views mine.\",\"description\":\"Attorney. @Newsweek columnist. Professor. Author of New York Times bestsellers Proof of Conspiracy (https:\\\/\\\/t.co\\\/jPbI2P5OQ0) & Proof of Collusion (https:\\\/\\\/t.co\\\/YUd8v4GoNp).\",\"url\":\"https:\\\/\\\/t.co\\\/BgxDeUKKGK\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/BgxDeUKKGK\",\"expanded_url\":\"http:\\\/\\\/www.sethabramson.net\\\/bio\",\"display_url\":\"sethabramson.net\\\/bio\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/jPbI2P5OQ0\",\"expanded_url\":\"http:\\\/\\\/amzn.to\\\/2sQBWYL\",\"display_url\":\"amzn.to\\\/2sQBWYL\",\"indices\":[100,123]},{\"url\":\"https:\\\/\\\/t.co\\\/YUd8v4GoNp\",\"expanded_url\":\"http:\\\/\\\/amzn.to\\\/39WyLz5\",\"display_url\":\"amzn.to\\\/39WyLz5\",\"indices\":[147,170]}]}},\"protected\":false,\"followers_count\":800707,\"friends_count\":25,\"listed_count\":7598,\"created_at\":\"Fri May 22 16:19:26 +0000 2015\",\"favourites_count\":3,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":74721,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1188673360231833601\\\/8lwhEkl9_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/1188673360231833601\\\/8lwhEkl9_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/3223426134\\\/1583422472\",\"profile_link_color\":\"F01405\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"000000\",\"profile_text_color\":\"000000\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":915,\"favorite_count\":4887,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"}],\"search_metadata\":{\"completed_in\":0.141,\"max_id\":1254206657657257984,\"max_id_str\":\"1254206657657257984\",\"next_results\":\"?max_id=1254206656684195841&q=twitter&include_entities=1\",\"query\":\"twitter\",\"refresh_url\":\"?since_id=1254206657657257984&q=twitter&include_entities=1\",\"count\":15,\"since_id\":0,\"since_id_str\":\"0\"}}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauth2BearerToken.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauth2BearerToken.json deleted file mode 100644 index 67c47775..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauth2BearerToken.json +++ /dev/null @@ -1,49 +0,0 @@ -[{ - "request": { - "method": "GET", - "url": "https:\/\/api.twitter.com\/1.1\/statuses\/user_timeline.json?screen_name=twitterapi", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "Bearer AAAAAAAAAAAAAAAAAAAAAFobAAAAAAAAjPes3FlPiFKh9HaIg%2Fw80waE0s8%3DQqxjhHDgZyjihGIK7olugzbpS0R1Gg8KNhzmer58a6oVbsSGc0", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "5813", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:10 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:10 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_KEOd+4RSJKhY\/zL1nJqQjA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:10 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, guest_id=v1%3A158786107019843003; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:10 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read", - "x-app-rate-limit-limit": "100000", - "x-app-rate-limit-remaining": "99993", - "x-app-rate-limit-reset": "1587934974", - "x-connection-hash": "ed574879e196a7f193fd49c8b71c2056", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-rate-limit-limit": "1500", - "x-rate-limit-remaining": "1497", - "x-rate-limit-reset": "1587861581", - "x-response-time": "62", - "x-transaction": "00c660e200263b3e", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "[{\"created_at\":\"Mon Mar 23 22:14:35 +0000 2020\",\"id\":1242213180060758016,\"id_str\":\"1242213180060758016\",\"text\":\"RT @TwitterDev: As we work to keep our employees safe during COVID-19, you are likely to experience longer than usual review times for deve\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Mon Mar 23 22:01:13 +0000 2020\",\"id\":1242209814706438144,\"id_str\":\"1242209814706438144\",\"text\":\"As we work to keep our employees safe during COVID-19, you are likely to experience longer than usual review times\\u2026 https:\\\/\\\/t.co\\\/Oo1t07UH4Z\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/Oo1t07UH4Z\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1242209814706438144\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[116,139]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":40,\"favorite_count\":113,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":40,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Mon Mar 23 16:28:09 +0000 2020\",\"id\":1242125997081673728,\"id_str\":\"1242125997081673728\",\"text\":\"RT @TwitterDev: A few months ago, we added Tweet annotations to the Labs\\u2019 streaming endpoints. These annotations help uncover details about\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Mon Mar 23 16:26:08 +0000 2020\",\"id\":1242125486844604425,\"id_str\":\"1242125486844604425\",\"text\":\"A few months ago, we added Tweet annotations to the Labs\\u2019 streaming endpoints. These annotations help uncover detai\\u2026 https:\\\/\\\/t.co\\\/ViHyvQ4Y8S\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/ViHyvQ4Y8S\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1242125486844604425\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1204497856679202816,\"quoted_status_id_str\":\"1204497856679202816\",\"quoted_status\":{\"created_at\":\"Tue Dec 10 20:27:22 +0000 2019\",\"id\":1204497856679202816,\"id_str\":\"1204497856679202816\",\"text\":\"You may have seen the recent announcement about following Topics on Twitter. Today, we\\u2019re excited to provide API su\\u2026 https:\\\/\\\/t.co\\\/ZlJUjmHIBe\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/ZlJUjmHIBe\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1204497856679202816\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":91,\"favorite_count\":245,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"retweet_count\":32,\"favorite_count\":75,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":true,\"quoted_status_id\":1204497856679202816,\"quoted_status_id_str\":\"1204497856679202816\",\"retweet_count\":32,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Tue Mar 10 17:57:58 +0000 2020\",\"id\":1237437557337513984,\"id_str\":\"1237437557337513984\",\"text\":\"RT @TwitterDev: We \\u2764\\ufe0f the incredible research people do using Twitter data to study topics like spam, abuse, and other areas related to the\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Tue Mar 10 17:47:53 +0000 2020\",\"id\":1237435017883762689,\"id_str\":\"1237435017883762689\",\"text\":\"We \\u2764\\ufe0f the incredible research people do using Twitter data to study topics like spam, abuse, and other areas relate\\u2026 https:\\\/\\\/t.co\\\/NpF4h9DaSq\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/NpF4h9DaSq\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1237435017883762689\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":1237435016134656006,\"in_reply_to_status_id_str\":\"1237435016134656006\",\"in_reply_to_user_id\":2244994945,\"in_reply_to_user_id_str\":\"2244994945\",\"in_reply_to_screen_name\":\"TwitterDev\",\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":25,\"favorite_count\":72,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":25,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Wed Feb 26 17:33:41 +0000 2020\",\"id\":1232720402700521474,\"id_str\":\"1232720402700521474\",\"text\":\"RT @TwitterDev: In November, we gave people the ability to hide replies to their Tweets. Starting today, we\\u2019re opening this feature up to d\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Feb 26 17:32:51 +0000 2020\",\"id\":1232720193182412800,\"id_str\":\"1232720193182412800\",\"text\":\"In November, we gave people the ability to hide replies to their Tweets. Starting today, we\\u2019re opening this feature\\u2026 https:\\\/\\\/t.co\\\/aN8kan0Lsw\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/aN8kan0Lsw\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1232720193182412800\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":147,\"favorite_count\":388,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":147,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Mon Jan 06 20:23:49 +0000 2020\",\"id\":1214281438092238855,\"id_str\":\"1214281438092238855\",\"text\":\"RT @TwitterDev: Hello\\u2026 is it me you\\u2019re searching for? \\ud83d\\udd0e\\n\\nSearch the conversation as it unfolds with this new addition to Labs. We're making\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Mon Jan 06 20:22:05 +0000 2020\",\"id\":1214281000932593667,\"id_str\":\"1214281000932593667\",\"text\":\"Hello\\u2026 is it me you\\u2019re searching for? \\ud83d\\udd0e\\n\\nSearch the conversation as it unfolds with this new addition to Labs. We'r\\u2026 https:\\\/\\\/t.co\\\/XaqD1JJ5kF\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/XaqD1JJ5kF\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1214281000932593667\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":64,\"favorite_count\":165,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":64,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Fri Jan 03 17:21:34 +0000 2020\",\"id\":1213148410145992704,\"id_str\":\"1213148410145992704\",\"text\":\"RT @TwitterDev: Today, we\\u2019re sharing a few small improvements to make it easier for academic researchers to get started with the Twitter AP\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Fri Jan 03 17:17:23 +0000 2020\",\"id\":1213147357551816704,\"id_str\":\"1213147357551816704\",\"text\":\"Today, we\\u2019re sharing a few small improvements to make it easier for academic researchers to get started with the Tw\\u2026 https:\\\/\\\/t.co\\\/WhV7rP54GM\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/WhV7rP54GM\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1213147357551816704\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":214,\"favorite_count\":448,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":214,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Tue Dec 10 20:34:57 +0000 2019\",\"id\":1204499768459661312,\"id_str\":\"1204499768459661312\",\"text\":\"RT @TwitterDev: You may have seen the recent announcement about following Topics on Twitter. Today, we\\u2019re excited to provide API support fo\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Tue Dec 10 20:27:22 +0000 2019\",\"id\":1204497856679202816,\"id_str\":\"1204497856679202816\",\"text\":\"You may have seen the recent announcement about following Topics on Twitter. Today, we\\u2019re excited to provide API su\\u2026 https:\\\/\\\/t.co\\\/ZlJUjmHIBe\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/ZlJUjmHIBe\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1204497856679202816\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":91,\"favorite_count\":245,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":91,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Tue Oct 29 19:39:40 +0000 2019\",\"id\":1189265562821640193,\"id_str\":\"1189265562821640193\",\"text\":\"RT @TwitterDev: Study a sample of timely, relevant Tweets as they happen, with the newest release in Twitter Developer Labs. https:\\\/\\\/t.co\\\/m\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Tue Oct 29 19:37:15 +0000 2019\",\"id\":1189264953368338432,\"id_str\":\"1189264953368338432\",\"text\":\"Study a sample of timely, relevant Tweets as they happen, with the newest release in Twitter Developer Labs.\\u2026 https:\\\/\\\/t.co\\\/Y5QMh8rNoh\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/Y5QMh8rNoh\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1189264953368338432\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[110,133]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":45,\"favorite_count\":139,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":45,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Wed Sep 18 16:41:39 +0000 2019\",\"id\":1174362863118372867,\"id_str\":\"1174362863118372867\",\"text\":\"RT @TwitterDev: Today in Twitter Developer Labs we\\u2019re releasing a new way to filter Tweets in real-time. This is one of the most popular fe\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Sep 18 16:36:10 +0000 2019\",\"id\":1174361480734466048,\"id_str\":\"1174361480734466048\",\"text\":\"Today in Twitter Developer Labs we\\u2019re releasing a new way to filter Tweets in real-time. This is one of the most po\\u2026 https:\\\/\\\/t.co\\\/RElmBW5XxM\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/RElmBW5XxM\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1174361480734466048\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":107,\"favorite_count\":231,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":107,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Tue Aug 27 17:30:39 +0000 2019\",\"id\":1166402661282746368,\"id_str\":\"1166402661282746368\",\"text\":\"RT @TwitterDev: Our latest Twitter Developer Labs release helps you quickly assess the impact of your Tweets. Today, we\\u2019re releasing \\n\\n\\u2728a n\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Tue Aug 27 17:25:06 +0000 2019\",\"id\":1166401263170281472,\"id_str\":\"1166401263170281472\",\"text\":\"Our latest Twitter Developer Labs release helps you quickly assess the impact of your Tweets. Today, we\\u2019re releasin\\u2026 https:\\\/\\\/t.co\\\/a8PaA1wg5A\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/a8PaA1wg5A\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1166401263170281472\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":56,\"favorite_count\":165,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":56,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Fri Aug 16 17:25:53 +0000 2019\",\"id\":1162415194749882368,\"id_str\":\"1162415194749882368\",\"text\":\"RT @TwitterDev: As of today, we\\u2019re simplifying permissions for third-party apps. Most developers won't be impacted, but if your app uses th\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Fri Aug 16 17:07:22 +0000 2019\",\"id\":1162410535121387525,\"id_str\":\"1162410535121387525\",\"text\":\"As of today, we\\u2019re simplifying permissions for third-party apps. Most developers won't be impacted, but if your app\\u2026 https:\\\/\\\/t.co\\\/VemT1Licd9\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/VemT1Licd9\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1162410535121387525\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":33,\"favorite_count\":95,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":33,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Thu Aug 15 16:24:23 +0000 2019\",\"id\":1162037328442875904,\"id_str\":\"1162037328442875904\",\"text\":\"RT @TwitterDev: #iterating: We recently released a long-requested feature in Twitter Developer Labs: \\n\\n\\ud83d\\udcccDeveloper\\u2019s can now request a user\\u2019\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"iterating\",\"indices\":[16,26]}],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Thu Aug 15 16:20:05 +0000 2019\",\"id\":1162036247314833408,\"id_str\":\"1162036247314833408\",\"text\":\"#iterating: We recently released a long-requested feature in Twitter Developer Labs: \\n\\n\\ud83d\\udcccDeveloper\\u2019s can now request\\u2026 https:\\\/\\\/t.co\\\/rRlVHaBTs2\",\"truncated\":true,\"entities\":{\"hashtags\":[{\"text\":\"iterating\",\"indices\":[0,10]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/rRlVHaBTs2\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1162036247314833408\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":27,\"favorite_count\":95,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":27,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Wed Jul 31 19:23:15 +0000 2019\",\"id\":1156646525121916928,\"id_str\":\"1156646525121916928\",\"text\":\"RT @TwitterDev: #iterating: Today we are releasing an update to Twitter Developer Labs, with a few new features we think you\\u2019ll find useful\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[{\"text\":\"iterating\",\"indices\":[16,26]}],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Jul 31 19:20:25 +0000 2019\",\"id\":1156645810156650496,\"id_str\":\"1156645810156650496\",\"text\":\"#iterating: Today we are releasing an update to Twitter Developer Labs, with a few new features we think you\\u2019ll fin\\u2026 https:\\\/\\\/t.co\\\/VVp7rv6FIM\",\"truncated\":true,\"entities\":{\"hashtags\":[{\"text\":\"iterating\",\"indices\":[0,10]}],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/VVp7rv6FIM\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1156645810156650496\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":40,\"favorite_count\":105,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":40,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Wed Jul 24 15:56:09 +0000 2019\",\"id\":1154057692723519494,\"id_str\":\"1154057692723519494\",\"text\":\"TLS 1.2 reminder: this change will be enacted as of tomorrow, July 25, 2019. Please reference our developer forum p\\u2026 https:\\\/\\\/t.co\\\/8YgCwYoE3q\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8YgCwYoE3q\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1154057692723519494\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1138569964032385025,\"quoted_status_id_str\":\"1138569964032385025\",\"quoted_status\":{\"created_at\":\"Tue Jun 11 22:13:27 +0000 2019\",\"id\":1138569964032385025,\"id_str\":\"1138569964032385025\",\"text\":\"Starting July 15, 2019, all connections to the Twitter API (and all other Twitter domains) will require TLS 1.2. Re\\u2026 https:\\\/\\\/t.co\\\/qMtoumuG1e\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/qMtoumuG1e\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1138569964032385025\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":93,\"favorite_count\":114,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"retweet_count\":113,\"favorite_count\":122,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},{\"created_at\":\"Wed Jul 17 15:54:45 +0000 2019\",\"id\":1151520624315174912,\"id_str\":\"1151520624315174912\",\"text\":\"RT @TwitterDev: Academic research is some of the most impactful work that happens with the Twitter API. As we plan for the future of our de\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/about.twitter.com\\\/products\\\/tweetdeck\\\" rel=\\\"nofollow\\\"\\u003eTweetDeck\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Jul 17 15:53:43 +0000 2019\",\"id\":1151520361529430016,\"id_str\":\"1151520361529430016\",\"text\":\"Academic research is some of the most impactful work that happens with the Twitter API. As we plan for the future o\\u2026 https:\\\/\\\/t.co\\\/dG3PmGWAJ4\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/dG3PmGWAJ4\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1151520361529430016\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/mobile.twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web App\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":423,\"favorite_count\":674,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":423,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},{\"created_at\":\"Mon Jun 24 17:50:46 +0000 2019\",\"id\":1143214899109277697,\"id_str\":\"1143214899109277697\",\"text\":\"We\\u2019ve spoken with all developers who\\u2019ve contacted us to discuss these new rate limits and elevations, and as of tod\\u2026 https:\\\/\\\/t.co\\\/w8WoepBjeU\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/w8WoepBjeU\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1143214899109277697\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":1141392777600806912,\"in_reply_to_status_id_str\":\"1141392777600806912\",\"in_reply_to_user_id\":6253282,\"in_reply_to_user_id_str\":\"6253282\",\"in_reply_to_screen_name\":\"TwitterAPI\",\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":37,\"favorite_count\":85,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},{\"created_at\":\"Wed Jun 19 17:10:18 +0000 2019\",\"id\":1141392777600806912,\"id_str\":\"1141392777600806912\",\"text\":\"Request limit change: today, we're implementing a change to two commonly used Twitter standard API endpoints - user\\u2026 https:\\\/\\\/t.co\\\/ymDvv7r8lB\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/ymDvv7r8lB\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1141392777600806912\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1141390793657266176,\"quoted_status_id_str\":\"1141390793657266176\",\"quoted_status\":{\"created_at\":\"Wed Jun 19 17:02:25 +0000 2019\",\"id\":1141390793657266176,\"id_str\":\"1141390793657266176\",\"text\":\"\\u2757\\ufe0fToday, user and mentions timeline request limits go into effect. If you want to learn more about this change, tak\\u2026 https:\\\/\\\/t.co\\\/kFzCKybdkD\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/kFzCKybdkD\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1141390793657266176\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":true,\"quoted_status_id\":1108050885639168000,\"quoted_status_id_str\":\"1108050885639168000\",\"retweet_count\":19,\"favorite_count\":48,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"retweet_count\":82,\"favorite_count\":89,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},{\"created_at\":\"Wed Jun 12 17:36:26 +0000 2019\",\"id\":1138862637394137093,\"id_str\":\"1138862637394137093\",\"text\":\"Reminder: only 1\\u20e3 week until the rate limit change to user and mentions timeline endpoints will go into effect. If\\u2026 https:\\\/\\\/t.co\\\/JAUtpAZotb\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/JAUtpAZotb\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1138862637394137093\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[116,139]}]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":38,\"favorite_count\":62,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},{\"created_at\":\"Tue Jun 11 22:13:27 +0000 2019\",\"id\":1138569964032385025,\"id_str\":\"1138569964032385025\",\"text\":\"Starting July 15, 2019, all connections to the Twitter API (and all other Twitter domains) will require TLS 1.2. Re\\u2026 https:\\\/\\\/t.co\\\/qMtoumuG1e\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/qMtoumuG1e\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1138569964032385025\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":93,\"favorite_count\":114,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},{\"created_at\":\"Tue Jun 11 18:00:27 +0000 2019\",\"id\":1138506294485168129,\"id_str\":\"1138506294485168129\",\"text\":\"RT @TwitterDev: \\ud83c\\udfba da-dada-DAH! We\\u2019re introducing the first Twitter Developer Labs endpoints: \\n\\n\\u2728GET\\\/users and GET\\\/tweets \\u2728\\n\\nLabs is now ope\\u2026\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[{\"screen_name\":\"TwitterDev\",\"name\":\"Twitter Dev\",\"id\":2244994945,\"id_str\":\"2244994945\",\"indices\":[3,14]}],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"TwitterAPI\",\"location\":\"San Francisco, CA\",\"description\":\"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.\",\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/8IkCzCDr19\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\",\"display_url\":\"developer.twitter.com\",\"indices\":[0,23]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":6084394,\"friends_count\":12,\"listed_count\":12763,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":30,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":true,\"statuses_count\":3680,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/942858479592554497\\\/BbazLO9L_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/6253282\\\/1497491515\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Tue Jun 11 17:59:13 +0000 2019\",\"id\":1138505981460193280,\"id_str\":\"1138505981460193280\",\"text\":\"\\ud83c\\udfba da-dada-DAH! We\\u2019re introducing the first Twitter Developer Labs endpoints: \\n\\n\\u2728GET\\\/users and GET\\\/tweets \\u2728\\n\\nLabs is\\u2026 https:\\\/\\\/t.co\\\/HTpnpwCRMl\",\"truncated\":true,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/HTpnpwCRMl\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/i\\\/web\\\/status\\\/1138505981460193280\",\"display_url\":\"twitter.com\\\/i\\\/web\\\/status\\\/1\\u2026\",\"indices\":[117,140]}]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2244994945,\"id_str\":\"2244994945\",\"name\":\"Twitter Dev\",\"screen_name\":\"TwitterDev\",\"location\":\"127.0.0.1\",\"description\":\"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\\n\\nNeed help? Visit https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/3ZX3TNiZCY\",\"expanded_url\":\"https:\\\/\\\/developer.twitter.com\\\/en\\\/community\",\"display_url\":\"developer.twitter.com\\\/en\\\/community\",\"indices\":[0,23]}]},\"description\":{\"urls\":[{\"url\":\"https:\\\/\\\/t.co\\\/DVDf7qKyS9\",\"expanded_url\":\"http:\\\/\\\/twittercommunity.com\",\"display_url\":\"twittercommunity.com\",\"indices\":[129,152]}]}},\"protected\":false,\"followers_count\":507649,\"friends_count\":1808,\"listed_count\":1672,\"created_at\":\"Sat Dec 14 04:35:55 +0000 2013\",\"favourites_count\":2182,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3540,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_image_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_images\\\/880136122604507136\\\/xHrnqf1T_normal.jpg\",\"profile_banner_url\":\"https:\\\/\\\/pbs.twimg.com\\\/profile_banners\\\/2244994945\\\/1498675817\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":false,\"has_extended_profile\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null,\"translator_type\":\"regular\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":105,\"favorite_count\":255,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"is_quote_status\":false,\"retweet_count\":105,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"}]" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauth2Token.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauth2Token.json deleted file mode 100644 index 82331b59..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauth2Token.json +++ /dev/null @@ -1,46 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/oauth2\/token", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "Basic YXdKZk5ENHpGR2FwR09GS2Zkamc6TGZrbU5TUlBJWHdrUWtaVUI5RE5XU3p4NUxJYWl2U2tuVjRyeG5nb2pKYw==", - "Expect": null - }, - "body": "grant_type=client_credentials" - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "152", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:09 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:09 GMT", - "ml": "A", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_NF00blSG9GZe8w8KpZvUDA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:09 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, guest_id=v1%3A158786106988547101; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:09 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-connection-hash": "34e2373c53e7f9e0e80fe6af071dd6b8", - "x-content-type-options": "nosniff", - "x-frame-options": "DENY", - "x-response-time": "20", - "x-transaction": "007d4d19009f7a59", - "x-tsa-request-body-time": "0", - "x-twitter-response-tags": "BouncerCompliant", - "x-ua-compatible": "IE=edge,chrome=1", - "x-xss-protection": "0" - }, - "body": "{\"token_type\":\"bearer\",\"access_token\":\"AAAAAAAAAAAAAAAAAAAAAFobAAAAAAAAjPes3FlPiFKh9HaIg%2Fw80waE0s8%3DQqxjhHDgZyjihGIK7olugzbpS0R1Gg8KNhzmer58a6oVbsSGc0\"}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauth2TokenInvalidate.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauth2TokenInvalidate.json deleted file mode 100644 index f112d7a5..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauth2TokenInvalidate.json +++ /dev/null @@ -1,46 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/oauth2\/invalidate_token", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "Basic YXdKZk5ENHpGR2FwR09GS2Zkamc6TGZrbU5TUlBJWHdrUWtaVUI5RE5XU3p4NUxJYWl2U2tuVjRyeG5nb2pKYw==", - "Expect": null - }, - "body": "access_token=AAAAAAAAAAAAAAAAAAAAAFobAAAAAAAAjPes3FlPiFKh9HaIg%2Fw80waE0s8%3DQqxjhHDgZyjihGIK7olugzbpS0R1Gg8KNhzmer58a6oVbsSGc0" - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "135", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:10 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:10 GMT", - "ml": "A", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_8Iv+DqoXk8DVAVDoUVltSA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:10 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, guest_id=v1%3A158786107054950627; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:10 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-connection-hash": "18b7327592f746230c1c016c344dd14d", - "x-content-type-options": "nosniff", - "x-frame-options": "DENY", - "x-response-time": "19", - "x-transaction": "00c5257f00b7d371", - "x-tsa-request-body-time": "0", - "x-twitter-response-tags": "BouncerCompliant", - "x-ua-compatible": "IE=edge,chrome=1", - "x-xss-protection": "0" - }, - "body": "{\"access_token\":\"AAAAAAAAAAAAAAAAAAAAAFobAAAAAAAAjPes3FlPiFKh9HaIg%2Fw80waE0s8%3DQqxjhHDgZyjihGIK7olugzbpS0R1Gg8KNhzmer58a6oVbsSGc0\"}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauthAccessTokenTokenException.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauthAccessTokenTokenException.json deleted file mode 100644 index 791d8387..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauthAccessTokenTokenException.json +++ /dev/null @@ -1,45 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/oauth\/access_token", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"CE545gAAAAAAABtaAAABcbPlJBQ\", oauth_verifier=\"fake_oauth_verifier\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"0bcdtKs3nffzbE5abwaVjCI1HPw%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "401", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-encoding": "gzip", - "content-length": "93", - "content-security-policy": "default-src 'none'; connect-src 'self'; font-src https:\/\/abs.twimg.com https:\/\/abs-0.twimg.com data:; frame-src 'self' twitter:; img-src https:\/\/abs.twimg.com https:\/\/*.twimg.com https:\/\/pbs.twimg.com data:; media-src 'none'; object-src 'none'; script-src https:\/\/abs.twimg.com https:\/\/abs-0.twimg.com https:\/\/twitter.com https:\/\/mobile.twitter.com; style-src https:\/\/abs.twimg.com https:\/\/abs-0.twimg.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=NVQWGYLXFVWG6Z3JNY%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:11 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:11 GMT", - "ml": "A", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_n0ZAgT2oLIc0HI23qMIGCA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, guest_id=v1%3A158786107147893563; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "401 Unauthorized", - "strict-transport-security": "max-age=631138519", - "www-authenticate": "OAuth realm=\"https:\/\/api.twitter.com\"", - "x-connection-hash": "90157d4bdfce3a9b90fd408819c767bc", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "41", - "x-transaction": "0080cead006a758d", - "x-twitter-response-tags": "BouncerCompliant", - "x-ua-compatible": "IE=edge,chrome=1", - "x-xss-protection": "0" - }, - "body": "Error processing your OAuth request: Invalid oauth_verifier parameter" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauthRequestToken.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauthRequestToken.json deleted file mode 100644 index 47969285..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauthRequestToken.json +++ /dev/null @@ -1,44 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/oauth\/request_token", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_callback=\"https%3A%2F%2Ftwitteroauth.com%2Fcallback.php\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"LR7ZVqY%2Fcdisw1w3zssKI6Yjbls%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-encoding": "gzip", - "content-length": "127", - "content-security-policy": "default-src 'none'; connect-src 'self'; font-src https:\/\/abs.twimg.com https:\/\/abs-0.twimg.com data:; frame-src 'self' twitter:; img-src https:\/\/abs.twimg.com https:\/\/*.twimg.com https:\/\/pbs.twimg.com data:; media-src 'none'; object-src 'none'; script-src https:\/\/abs.twimg.com https:\/\/abs-0.twimg.com https:\/\/twitter.com https:\/\/mobile.twitter.com; style-src https:\/\/abs.twimg.com https:\/\/abs-0.twimg.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=NVQWGYLXFVWG6Z3JNY%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:10 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:10 GMT", - "ml": "A", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_mrnWVDThJvkLcAe4hmX0ng==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:10 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, guest_id=v1%3A158786107085601318; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:10 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-connection-hash": "bf00d267c647790cd34d8cd4a28f9895", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "24", - "x-transaction": "0095391f006dd965", - "x-twitter-response-tags": "BouncerCompliant", - "x-ua-compatible": "IE=edge,chrome=1", - "x-xss-protection": "0" - }, - "body": "oauth_token=CE545gAAAAAAABtaAAABcbPlJBQ&oauth_token_secret=tTVYBva8AlQu0JxVudzbf9oHXAbIARg5&oauth_callback_confirmed=true" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauthRequestTokenException.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauthRequestTokenException.json deleted file mode 100644 index 1b91f186..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testOauthRequestTokenException.json +++ /dev/null @@ -1,43 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/oauth\/request_token", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"CONSUMER_KEY\", oauth_callback=\"https%3A%2F%2Ftwitteroauth.com%2Fcallback.php\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"wOUt6ZyVGpWnQhsHNWqcr%2BpOWAw%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "401", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "89", - "content-type": "application\/json; charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:11 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:11 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_Vz8Os736+fzUwkQGIeIKuw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, guest_id=v1%3A158786107116335546; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "401 Unauthorized", - "strict-transport-security": "max-age=631138519", - "www-authenticate": "OAuth realm=\"https:\/\/api.twitter.com\", api_error_code=32", - "x-connection-hash": "d620dbb5b35e124662532c3ef8e89c88", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "6", - "x-transaction": "00bf1248004cdafa", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"errors\":[{\"code\":32,\"message\":\"Could not authenticate you.\"}]}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostDirectMessagesEventsNew.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostDirectMessagesEventsNew.json deleted file mode 100644 index eb71ec87..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostDirectMessagesEventsNew.json +++ /dev/null @@ -1,46 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/1.1\/direct_messages\/events\/new.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"3457NqeumGmcalZLF091L9lt7F8%3D\"", - "Expect": null, - "Content-type": "application\/json" - }, - "body": "{\"event\":{\"type\":\"message_create\",\"message_create\":{\"target\":{\"recipient_id\":\"93915746\"},\"message_data\":{\"text\":\"Hello World!\"}}}}" - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "206", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:51 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:51 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_Tfqxs0gur2QR4FFIZ3Wq6w==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:51 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111185015666; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:51 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "bb4f30d1c6406b2cd5d25f20fccfdc1a", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "70", - "x-transaction": "0057fa4c00fb95a1", - "x-tsa-request-body-time": "0", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"event\":{\"type\":\"message_create\",\"id\":\"1254206523385032714\",\"created_timestamp\":\"1587861111862\",\"message_create\":{\"target\":{\"recipient_id\":\"93915746\"},\"sender_id\":\"93915746\",\"message_data\":{\"text\":\"Hello World!\",\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[]}}}}}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostFavoritesCreate.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostFavoritesCreate.json deleted file mode 100644 index a303a6d6..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostFavoritesCreate.json +++ /dev/null @@ -1,45 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/1.1\/favorites\/create.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"EA30eIQPgat0Aw%2F59GyltEiE4Xg%3D\"", - "Expect": null - }, - "body": "id=6242973112" - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "755", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:51 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:51 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_Jz87HIDSEIpDevFMBlDD7g==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:51 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111115490266; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:51 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "7368af4d238e5c36df5379afb1bed3af", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "72", - "x-transaction": "0012beac0086638b", - "x-tsa-request-body-time": "0", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"created_at\":\"Tue Dec 01 18:38:07 +0000 2009\",\"id\":6242973112,\"id_str\":\"6242973112\",\"text\":\"Test!\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":1,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":5,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":2258,\"favorite_count\":76,\"favorited\":true,\"retweeted\":false,\"lang\":\"en\"}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostFavoritesDestroy.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostFavoritesDestroy.json deleted file mode 100644 index 0d0c8785..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostFavoritesDestroy.json +++ /dev/null @@ -1,45 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/1.1\/favorites\/destroy.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"w3Nti04O5BMi8bySXjmO8%2BW5Pus%3D\"", - "Expect": null - }, - "body": "id=6242973112" - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "753", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:51 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:51 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_s1J1pMUNrQO4\/v371oE9AQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:51 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111151392082; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:51 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "a0dc865f09447e41b0d77e9eed981519", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "44", - "x-transaction": "005d9083009bd4c9", - "x-tsa-request-body-time": "0", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"created_at\":\"Tue Dec 01 18:38:07 +0000 2009\",\"id\":6242973112,\"id_str\":\"6242973112\",\"text\":\"Test!\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":5,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":2258,\"favorite_count\":75,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusUpdateWithInvalidMediaThrowsException.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusUpdateWithInvalidMediaThrowsException.json deleted file mode 100644 index 0637a088..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusUpdateWithInvalidMediaThrowsException.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesDestroy.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesDestroy.json deleted file mode 100644 index 577c6d51..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesDestroy.json +++ /dev/null @@ -1,43 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/1.1\/statuses\/destroy\/1254206657548226561.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"kyOKi3x9Ar3foSG5%2BN9XzBbnIOw%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "804", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:24 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:24 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_juPKvfSeQeQoZAVeLglnhA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:24 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786114418847477; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:24 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "f4375157b19d6cd139b9917a6d76d0b0", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "198", - "x-transaction": "00f3e731001ccb87", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206657548226561,\"id_str\":\"1254206657548226561\",\"text\":\"x\\u3053\\u3093\\u306b\\u3061\\u306f\\u4e16\\u754c 1587861062\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/twitteroauth.com\\\" rel=\\\"nofollow\\\"\\u003eTwitterOAuth dev\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":6,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"ja\"}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesUpdateUtf8.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesUpdateUtf8.json deleted file mode 100644 index 156e1ba0..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesUpdateUtf8.json +++ /dev/null @@ -1,45 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/1.1\/statuses\/update.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"zIzkM9jxroYElpL1fPTyYnYE%2Bys%3D\"", - "Expect": null - }, - "body": "status=x%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E4%B8%96%E7%95%8C%201587861062" - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "804", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:23 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:23 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_8nFfK\/V8KyJDl1aminWCQw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:23 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786114384224672; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:23 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "54c0be65e0c80b57d5b7c895e58061c8", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "55", - "x-transaction": "00eb7dbc0057ef33", - "x-tsa-request-body-time": "0", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"created_at\":\"Sun Apr 26 00:32:23 +0000 2020\",\"id\":1254206657548226561,\"id_str\":\"1254206657548226561\",\"text\":\"x\\u3053\\u3093\\u306b\\u3061\\u306f\\u4e16\\u754c 1587861062\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/twitteroauth.com\\\" rel=\\\"nofollow\\\"\\u003eTwitterOAuth dev\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":6,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"lang\":\"ja\"}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesUpdateWithMedia.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesUpdateWithMedia.json deleted file mode 100644 index 97867ada..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesUpdateWithMedia.json +++ /dev/null @@ -1,134 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"AyX%2FVakyYmVj6PbE3aVfoOnMPAY%3D\"", - "Expect": null - }, - "body": "media=%2F9j%2F4AAQSkZJRgABAQEASABIAAD%2F4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD%2BAAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA%2BEAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk%2FgAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx%2FnbWVhcwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA%2BAD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB%2FgICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI%2BwkQCSUJOglPCWQJeQmPCaQJugnPCeUJ%2BwoRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N%2BA4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg%2BzD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR%2BUH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h%2ByInIlUigiKvIt0jCiM4I2YjlCPCI%2FAkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg%2FKHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi%2BRL8cv%2FjA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN%2FM7gz8TQrNGU0njTYNRM1TTWHNcI1%2FTY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA%2BoD7gPyE%2FYT%2BiP%2BJAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS%2BJMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0%2FdUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW%2BVcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg%2FGFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg%2FaJZo7GlDaZpp8WpIap9q92tPa6dr%2F2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF%2BYn7CfyN%2FhH%2FlgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ%2FopkisqLMIuWi%2FyMY4zKjTGNmI3%2FjmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ%2FJpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ%2BLn%2FqgaaDYoUehtqImopajBqN2o%2BakVqTHpTilqaYapoum%2Fadup%2BCoUqjEqTepqaocqo%2BrAqt1q%2BmsXKzQrUStuK4trqGvFq%2BLsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq%2BhL7%2Fv3q%2F9cBwwOzBZ8Hjwl%2FC28NYw9TEUcTOxUvFyMZGxsPHQce%2FyD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI%2F0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba%2B9uA3AXcit0Q3ZbeHN6i3ynfr%2BA24L3hROHM4lPi2%2BNj4%2Bvkc%2BT85YTmDeaW5x%2Fnqegy6LzpRunQ6lvq5etw6%2Fvshu0R7ZzuKO6070DvzPBY8OXxcvH%2F8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio%2BTj5x%2FpX%2Buf7d%2FwH%2FJj9Kf26%2Fkv%2B3P9t%2F%2F%2F%2F2wBDAAEBAQEBAQEBAQEBAQECAgMCAgICAgQDAwIDBQQFBQUEBAQFBgcGBQUHBgQEBgkGBwgICAgIBQYJCgkICgcICAj%2F2wBDAQEBAQICAgQCAgQIBQQFCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj%2FwAARCAKqBAADAREAAhEBAxEB%2F8QAHgAAAQQDAQEBAAAAAAAAAAAABQMEBgcCCAkBAAr%2FxABKEAABAwIFAgUBBQYFBAECAgsBAgMRAAQFBhIhMUFRBxMiYXGBCBQykaEjQrHB0fAVUmLh8QkWM3IkF0NTJWOCCnOSsjREGGSi%2F8QAHAEAAgMBAQEBAAAAAAAAAAAAAgMAAQQFBgcI%2F8QANBEAAgICAgICAgEDAwMEAwEBAAECEQMhEjEEQRNRImEyBRRxQoGhUpHBBiOx8BUz4UPx%2F9oADAMBAAIRAxEAPwD9WNu6lCSCgkkjedqd8iMuXFbsLsOiRAMczPAqvkRUoapD9LpHqKZ25IjajFCqnAONgNh81CGJd4iQY2moQSW%2BADCoETG1Qgkt%2BUhXqmetQgzccJGkGT%2FGoQZqeAMglSuJqEMUvlZAI1fHb4qEHKHBweRvJqEHrb4AHpO9QgYtngSFk7c0UOy4ummGrd5Ko0yoTJHanBTmn0SC1dmNRXt0jioV8bDdu%2BUJSFJJVMiDzRJvoGWL2yQNuKkAL268Vco0gHFLYXZWCBIgDqd6kWKb%2Bgo07ISNRVtxxNHwRcWvYTaeIUBBM7UKkloKS9oetqggp3PtRrJ6QA8Q5sDyO4q6T%2FyQUBB3G%2B%2FNXxZD4qB9IVPQCakU2Q%2BB9pgcVfFkPdQJOxJqlFkQkVwCOp2olB9mhtCK1KETE8Cqv6Ac1Q2WsHVzPWlT6FIHurJP%2BnpBmlpW6GJ12MnnATtCeBxTor0EpWDHSlRUkAzP50vIyOSQGdUZWlSimDyaAOEeXYPcdSsKSlRnqO9WxkoKqiMnHDJSVbnmKFuhbi0YeYlKRwT7%2FwB80qTt2UYTqggRPG9XCSXZDwFUkgHtzTFIqxZKyNjPczV0XY6bfKQTGodARxUDjkpaF1PJ22IVPbY1CpU9sXB1EGSn3qB%2FH%2BxdClyAmQn2%2FjUFtU6HrV0CYXJk89qqSbKHjbolSkuED4q0tEUpLoes3IWEpUozUC5t9hBLxSUJkwasCWP2P2nU6QU6o99qjYlxoepXMkbdNzzTIv0ULhckKEAijGwml2Khe8lIB7g71CSyfQqn1FJAKt9ugqMmNNsdtAwTAqEyMdI4Bgg9D9aVJ%2BhQsmNW5mOI6mq3RDMkjcpEjfuKogmoiY0jn9471CCMaTISVAxVBuWqEHNikjieetXHsOLGbpI1kQRz70c17HYwO4SVRBBI7UsCS2xB6EJhPQczxUoclrYJuClRUQTHFJdFRhTsEXKgEhJPTihE8d0R%2B6KRrklI7VCIAXCjKwAZ5qyRSu2R29cO%2FBHas77NsWiMXK9SlmEg1QdkdvXEgbpKwDyeaXk6GwlfZH7koEJSqJ3E0pug2DXHk7gBMe44rOWotjFbgUSZPPbarNDBz7nJBMDp3qn0UDXVmSVTPX3%2BDSAsa2M3ASqTERUHCbiwgEhBKQRSptMtKxuVaUlRCinqPelTWh4gpYIJMiBB%2BtKpkPAvSI9QE9qogoCITuSmN4qEMvUrkDuDNWnRB60VEJmSnpFNhkfQvIgiw6AoEhRPB3oi47iGELCkiN6goKsrSBuJA6TR%2FGw4P6CbCwEJAPsRNVHsW%2FoO2rq0iNJ08GegpxXBBtl0SnkGahFGugy04kiSNKesnmoDcvoK26twJ%2FnNOukR2wkh1O43PtVKaK4McpXPq3AJ2oynGj5S9lAmD%2FCh5FMYvq2I346nirTLirYEuVgDV04HtUY5AC5M7AxzM1YLgRm%2B31agUnjmhataAVIit6kKPp57d6qK0MUr2Rq8CiCFbx%2BtDIZKSaRE7psQdoj2mgAIzdIOsbaY3qEGIT6tRGqTyT7UE3eiC6QNXqIn2%2FpQxiyBm0XCQYkbc9PimkJDZqA0lSAZjT7VAJxsltpAQmUkfTinKVin0SJsiEEpPt80cOzMgsykg6wkqH5bVoclVIsMpR6QEye9PM4oAJ6AcbbxRw7IKGCCFTE9BxTSMwASrUAN5Ik9qhmzrQg4iCICQT0qGeKpDRaABJSomO1HF0HGVGCgADMHpJq4F4hEJI7EA89qYNG5HBMpPMEUMlZUlaoarQlROrb5NJYgYup2V6Ve%2B1QgzcYCtRKSoioQYPNpCdwRzMVCKr2DHQgBSdBMDnrSnBjeaBrwkRBP0oGHYKuFEhXqSRHHeqbogJegBZEg%2FEf80ljYRrYBvFiVAwD3%2FWKoMFuKPq3SOvHNA5olg953SpUqKeuw2H1%2FKlRdOyG37KiQmYidttproJgTlsJsrPvp3M9B%2Fe9UpKxTHodJmNxxzWiLXoQo1%2FIWS6SAFap4G9WE8d9CanydgQk8RUJGKWpCCn4ASFAnqJ4oXNIpRt%2FoQW%2BkEgKOxP1pamxvwjVb4JIBgE9uKcKnGnQ083qlQCu9QE8CjqTqWCZJ%2BtQg4ac4UVQY%2FKoQfNPd%2FwA%2B1SiBhlaZ%2FEDzVphQ%2Fkg2w6JGlenpApsW%2FY%2FkH7V4gEEyT%2BZohPyNdh1hew07Hrt1q0wXkvokFo4okErUqfaiTvTEyl6DbDkgjWQqhfYNBJpQgRHemxkUFG3QYAWsGKqUH2Hy1Q%2BS5J%2FEZHagirIsbHSXCUgaxPTpRK0U4tGfmKImTvxR%2FICZhREbgGfyqRyEMpA2mDROdvRDzWkcbn4qcmQTU4ONUAVTbolia3FcAk%2FWlcmRDVa1aoBB%2BtU5Nh0hk4ohKvwgdaKEfZGrBbqgAPUlInirk1RUVsFXDygqEqEfFKGOKBVwpZB%2FakGDVjFir2DXEp2OsH26VQXxasaLUlIUEGT%2FABpTti%2F8IbKcUCTqgzvRKKGRgqPA9pgc79O9XwQXBCjLskyo%2FETVqKK%2BRLQsHARCOZ7VYLmntjkLQYBSJjmoUnEzU4gqEdu3FQp16FmnVCEyQf41AvlY5S7sk6jNJabAbt2OW3dWwOodp3qcWQesvuJnkyeCaNRVECQUCJB2%2FLelvsg%2BbuUk6SUwI3mnpjYStbHKVjYklQO%2FPSrBnH66CLTkkKjfqBUTMslQQbWkggwT2H9KbFhrj7F0qEGNNEXKnpDhDh3445B3qF44tdj1rZMkg8b1AZtDhIP%2BYgfNJl2LQulQBkECaolGRKjtIjnc1eiGJUSZnao9EEVq4gJNUWv2NVkIOpcFUwOtElqx0arQwdUUpJmCOBPNU5MetK2DS5oMp3B5FCLWT3QwfeEmVKB%2BaknSDjOwQ85zv7mDSGwpSpaA924BsVADnjmpYm3dkeunNleob7b1RQDuXIEaie%2B9XoKMG9kbv3NJUNR9qzyVGuCrsity6TsDIB4FVYYBvHk6VJ1QZkgilXbphw7I1cvlJVpIIidzS5V0NAS7slagtwhRPE8VnCUpf%2FUILfASRqBT0NRBJyehg46FEhJBPYVYxJ%2BxOJCZWTsY6RSH2HjGazEiRJ49jVIaNiozOnUeIis8n9hwYg%2BdJWdSoOx2qDbGpUsrKUkaQTB%2BlQh6lwKBJEjjjr89qTJUyGcyZI2ImJoSCoUQdiUiNhUIOG1jVBO%2F5UUOymrCLSyYhW3z1pxSpBBh5SFgEyOfioX2GWlwASowaLmywmw9vKVeqQBQp10A4ph1i40gSQR12oubBqL0g4wsHSoK4%2FuKYr9gBu3XEJ1emiIFGlqBA1bd5ouTIEWySArUNQ425o09EHIJAAKtuNqByZDMuKPfsSaJSZGM31CSCYTv1o0yAd8E7K9R6%2B1WQC3ZATpkjnaaCbohGbs6yVkjWAJ3qktaBUERm9jVKikRsYMxUx9FXuiM3ISFKHJmTNXNBkZuwCpRO%2B8ilEI7cNgymVJ9Q561CAlxrdUa4%2FPrVWQzaJ1Eqgke3H0qpX0iBa32MJEQdgaJJrshIrWZClEH55qEJRYzpBEFM8kbGmwQmSXolDOo6d%2Bm5o46ZncH6DLI2RCykA89Ip9ewWgwhUpSuSPmtIHBCwhXO08QKtOuhbW9C2kg8ncGT3o4ybZR8U6dpgcUwy5nY3WmEkkQI4qGdS3QyVqE7gke1QIbqlQPAPST%2BlEnRabXQkvRHr2EzttTYuw1k1sQWqSPWT81dBxlYitKuxI9jwaRLsS%2Bxovg8z7CqKGbo2UCoTztUIMnW0gH17DfioRAl4EAmT%2BXH5VCAp9My2lRA6UMooOMn0BbhJG4IUmeI4pDVjQQ%2Fqg6laenNIfYXNkduUErjfuJ3PxVONjYytAS6KtUgwBuYpMoUHFWB31q0LJJSrmJ5qhyRua0rYEA81rxaVGXih62vZtUjZXFMSBlH6HCHo2MJFEm10Lo9Lv4kzAnmatzYSlQ2LvqOwSQI7VfNhcU%2BxEr1GRExvvQEqhNawrcaj33q49k%2BRsSLoAKiNPua0Myym5CKl6dp25qgT1KzpT6gAf0qEF21wCkAaeeetQg%2FYUqR6UjeY9qKLLTpNBZhYmPfYDpQlBxhxQBWlJIn4q4umWnTsN27hkbxG8jtTwp0SS2eUQSQkcb1BDjsMMO6QNykdN5g1Ycseg00sL0lIJ9%2BtUStBhp3bcA%2B4oovYmt0EGXYOrTJ%2BacV6seoWFgA6QPf%2BVKaoOMqHCFEAgBHfniqbYanehwlwQVFH68VSYDx6Fkr2OqRP1iiSQLRl5gmBMmjtFGGskAFEHehlL6IJqWlIgwB%2FChbZdbobl1ZCtOyR2qrDdIRUtKSQQCaJQBbsYOLAI%2FzdhTR1JA51RIJ0FRPNZyk0CXidW%2Fp3g9zUCSvQLuVHUSADG9QZlfoYK1DVqTG351C4xpUxmtUq2ERt8VGHY0W4DKfLUE8SN%2BtQS8hilSgVA%2Bkjf4qA8n9i2r0%2BkEEn5iKhcnEXQSlSSFEHuBINQGPEcIUDxEfTeoNWNCgO6gQOT7QKhXxo9SsApiQrrFXQahQ4S4PSIKiOOkVApJdMVQqYWCQTzvNCsiRnmqdIfNup3MK1AdqVF0XDtD1NwTA%2FD36U5faI4%2FQ8bc1Ef5uZioDQ%2FZe8shKz1qDI%2FxoKtvl2ZIkfrViuKu2EWXlbGT0n2qCpV6CKSJ702LskJUxdAVIIhXxRDPkQRaWVDSADHWqbAckxxqWRBIPvFTiTS2eoKogEERuKGVEtXs98wyQUgjvNTiU4r7EVvBGoqP5VOCIoMSD4hM8mfao4E4MTde1CUiRM1SgHFNdgh5zWowTp4iqn2HKTY3dWlKff3oLHQWgHcOAFQTBnkxzUoOl0DXXIBJMf0pMqMzSvQAvHkoE7R%2Fe1CQi1zeJOr1QQOZ%2FSoSgFdX6Ep1GFbdKjdbGQTWyH3eIpAWpSk89%2F0pFmjlZG3cQCwdKoV37%2B1LnGxsX9kdxC9SnUAJEbkkbUPxjYyshl5izaVqBX%2BEf5tqVkSH9K0RteLpLhgg77RSLFrL9nr2LpShISpJVsJ4Iqw1lPra%2BbdTqWoH2qDIux8bpGkRCT0ilzXsdGNCPnk6iRPWY4oGy7ES5JlKwoe38qTkhZSd9iS1RBKhIMGRSadj8fQyUr1GRG8zPTtFGGe%2BYqSSDE71KXsh6hwSQAk77E9KVNJPRBcK%2Bu%2FSP50FEF2%2FXBjcHfbirpog%2FaWEnbZJP5mj%2BQr4%2FwBBJtQVAkA8wanyfoLg0E2XgABM%2FIo0yqfsKMOwUxv9aJV7AcfaDLDipAUT7Vf4gtfXZIbZ0CEkwKZJpIFxoNMOARKoH50tSaL5aoMMuat%2F3pn4o4ysEIsrPGkHbfanRlRB4FEcp68UfJEFgqek9o70q3ZBi8qSr0pQePmjjP7ICXiQdt%2B21HyRAPdkFMFJ1RtuJNBkIRm6UVK7Cd460SjSIR69MFQSN56bVUOgK2Rm9VBIIPQGKBSoN9EZuidRMEHfpQsq2BLjaTExvseKGn9lgdwySmCZ2mN6jxPsYsfs9Qj1BISCo7zEzVwg0DKFKwlbSTukT360dNIihZIbVInUQT2mhTLeN%2FZKbMEhMg8dd6emZuLJJbErRACo6id6tdipv1QcaCtCQSdPUk8U9i2qQabPoCimFSNq0gtXodJ1FQ2JERvUFyikLBIB0gfPtT10LZ8UgADY9x0q2c9JCBbhMbSDJqDMfY0cb5OxPNQGMHQ0W2QSkDSNyBFQpDdZUNtIUmmQSYcEmtjRSQR6QY%2FjTBiVGBB4ISKXKPsk3oaqTJA0jYRud6WIGykpIOqVHrvxUIM1pTCoC9PEd6hAW6lOoxpmDwYqEBVwITICSQajImBnhsT6B3BoHCKGKbAFyhMqBSVjYxSJq%2BhiANygAKEBPMe1Kj9hQdEfukOLIVqWBOwA2H%2FNXNWPjJEffbSVGVKkEnbpSZNJ9B%2FIzcZm4A9IMe4p8GgZQQQSuDIImN6ZYEVoUQsTpMR2jmrJxMS5JI1HsIqmweKG63QDOv6RVckFpCPngKJUo%2B221EU2mJKeTvpVvMQDtUKcV6Ei4epjbY0XJiVjX0eqcmRqST7f1o4z%2BypYv9j5Ko0atUdd6YzPyQ6Q5uJ1ajvzVBJj23XCkkqJTtVx7Iu9hhlR2EgfrFFOvQUq9Bu2JMcnfeRQAhhhzVuD7RT437L2yQWzxTsZHeasik10H0LBAOokDpUGZFoM2q9CSAqPrAqzNKX0FWF7J6b95qhYSZcSQmTAo4y%2ByVQ7bdIiSAaKUkQeIfkBJiCJI96ppei06FAtvospI5ih4hqYoFBO4cUPipxJ8h6CQZU4UkiqaK5J9nhO26zyeO1UTkl0ea0JUQDMgdatE5sRW9AgK0imRgC3Y2W4YgAk8VfF32MjD2MlOK3SqBvHO9DJteySX2xB5xKSSTG%2B1LfYG70ClqB1yTv71DVjW7A7hOvXpnckb1Bd%2Bxqok7QlIA%2Bag6MrWwc5rk7AH5q0yThyQ0XJSnSogdYqGWON2YhJJMAT16VQ3ixZtKkyDA%2BDUJ8Vi8hQKZAE%2FnUCWH9iqVEK%2FEo7SPmoNSSWjNKtGqVHTNQiMQ6PUZg%2B4NJaaM1P2ZpdhQKYPcxVWEpNdMWadKgACrjb2NUUPEu9QZqJEHrdwlMBR1fSmWy1JrodoWCroBTCh82%2FyBAHSoQKMPKC9Klb%2FNQJflphVDitQIUlQ6TzUBlCtBNhxZKdR9PeeaOLFSiE21xBJnvNNTBUb6HzbkfvATyKGSfoJY2Kl3bcfmaKguFexQHiSY96rsq09DB68bC9AWB89KskENn71sIWUuJEdOajl6GAc4rCk%2BpAHaglJoh89i0IgLSDwZNBzZBiq%2BDi1ftB%2BdU3fYz4xk%2FetpUoeZJ4MniqGJaoCv4gI9K079KXMCcqegc5foAMkJMbyaByYpKyG4zjLTesF5Ox78mqIiurnMjafMBeQkgnYdKrkhuOFaTIdfZtYUhyLiUDseKGTVGpQdFd4lnNtTgQHgd%2FmlFxSXsTazOkoSS4kah%2B9tHvVS60MUN7INj2dmGWntL6iSd5pX5eg2q%2FiVd%2F3ul5bqfPRBHeg4odCHR6vNbSLdTheVPSD0oJY7GLE6BaM5odWEedpk9TVPH%2By1jf2SmwzEw4n0uIme9LYStB1nHm1oAC9J%2BeajRTyfYRt8W8wg6wJgf70Dh9FRduwk3d6oBJj55oXEcKOPBQO4ieppEosbj6ECoqEqVqFA9dhmIMyd%2BaX8iIKpUoQAoKMz229qlxfZBYKmPUBzE0tNkF21hJkKIJPXirtkHSFAqG%2FwDtVB82PWnEg7bCJHSpbAe%2BwihYJ1H0xtt%2FGmqSS2UkFmHjqKdXsJHNGWF2Hdh6kTPTeoQPMuSlCkmDM81CmrJBbOKXCpAG3WapKhUlT0G2HBqAMBPeiUmugQihZWFer8qcnZTaQ9bd2HqST79fmmRSrZZn5kH8R223%2FpQsg2WokFWoT89KogPfUClQCt471dPsqV%2BgLcGSqVkdZ3qN%2FYFyI5dFIBlZA496vmxiRGruCTue%2B1WrrRKIvfrA2KvSeKAlv0BX4KVKI1KM%2FWhn1o0NIBOklRnUOeelLt%2BgOCGSgFLSZSUzO1U02XyR62FH0mSJniJqqAnL0h6ykegHbf8AKijdkhIPWyZWnaekxTipTfolFsggSSdqKLpmdTJFatylIMgHp2FOUipOySWyE6UJnaDsTUv6EzUfQSaBHBj57VtjfsAfNpB9IJ368UYqdjoJPqAG55NNhfsyZ5tdGBbUOlMZmTXoTU0BOyk9d6ojVjVbR5kSegqwoSUdUNFoMkagSBwDVBS4ehk42ASklMmrToBOuhq5pnUHNJjiYmmxb9joNvsQUBJJB0%2Fxogv8jJxJUTySNxtyaRJbENUNHCDA4I6%2B9UUxo7q3KnJ%2BtO0NqANeIKtiR0BpVClbBrsqB9W4nptVEoCvggzqHbiRS5vdDYx1vsCPiVKggn2pY2NXsBXidKTpEL9zFUkl0McEAHxCFAnc7R0NVPomkwDctrC1LHM8CkOCZdfs2tadIkBCUmJ2E7VdM0Wh4249BGgT0M0SlQD4jjzST6ht04Iq3kfomhop1U6gVzPBHNVyYaSERcKXrCyOOZqqYqaQk47JTwTsSYpy6EuAmp08wCO8b1YUVRiHCZE781C5OjJKudwonb4qMDsdIUTCQN%2BOOPenRlZXxIcNlPpBTJidqITkxtbXQRaUR0gAdKlilt0F2CrnaKKSp0FKNBm3VMhQG%2B%2F0oQQywVJIGwSTuR0pykgozoNW0kpSoyBtFE2gSRsrmNUHtFC5ByyJqgkw4QCkJSkg8g0QvNFIKtPRBMEk7CKglJsetvpBUnSEjrG8VYfAftvpXJghMVGDKNDpKtJkRHsKiYIsFjiRHYmm80Qz85Q%2FyH2oZUgk9noePKk%2BoHaIobX0MaXs8Dyz1KD24mpa%2BgG19CZc3nVFS19EtfRipYHA296OM77AE1K3JO2%2B1U5l2xFxQTtIE9hsaWWk2MH3QUkJBCie3FWFGNdjDdWsnbjeqHwkktg53beIB2G9QGUadDOCnaFHpECoXF0xBwHY6U9uZqD7Gi0GSUEzG4AqCpS3owGpIIlRI3kioXzRkkBQMyodieKgZmdgr0mek8CoQzSSJHpkck1CGJkhXqAqEElKI2BVPWlSlYlzswLm%2FGk9SDQAizbpOkpMpjvxUIPGnd5MjeKhB8hSVCIAPuKLkyBBDgWYUJ96imyDlC1JJEAT%2Fc0yL0QKtrSsbJIcniiBkwmy6qAHBHQGOKg6E1VBdl0pH4eDtUEOFhNpXmImRPxFMhL0Uvx2Pkq07Rud6YEpWZuu7CDBjrUC%2FwAibt0G2VqWYgHjrULX6KqxXNTdrcrCnAJ2oeSBSSBVznBhLIUpwAH3ihlLdlkXczoyCFB1AOoxBBmqlKxsFqxre59YDik%2BakxCaAZYuc7WrLAX5qSY2GrioXxYF%2F77ZefCQ%2BgFXHqpcpMS22%2BKHruZWwlBC5E778UDk32R4ZohWNZ8YtlL%2FboA454qg4Qa2ylcweJaFl7Q%2BkgciagEZJuyocV8RwjzdNwkA7D1c1DT8TeyC3via2EKT50kgqPEE0Eq6odwfsrQ%2BJKXLhZU4g6Vbgn9aXwkX8Zlc%2BKqUNa0up0gH%2B%2FrtU4v6HKGrKfzh4qq%2B7Oj7wkubCNQ2p%2BOK9gkKyz4hKxC6dStYgCdzyKTkjH0OxNtklu89esthz9nEfi477CkxijS7B9nnFSnnCHwtMEkmrcEKkmiZ4LnRSCUKWkjeCOBtQ%2FGVZOrLNi1gqDpSkGOOaX8VeiJk6wfM6XVJCnDq%2FKKXONMvluyd2eMhw6gtJEcTS3XsPmE03wXqUFFHP4h%2BdA6odjmuh%2Bi6OhB3EcmsuWIy0EG3CqFbk8d5pEo0ixUrCSNQSAeT1pdhKLMg4d9wY4qyOLXYshyeZ6%2F2KgIul0pCQQk7ztUIO2XNSdtwZ2%2FrUIFWVg6SQIFQgQZXJBTpCjE0%2BPQfDVhhlcEeoAjrPFWDT%2Bg3auwUKIBJ2J71CiQWjqgeRoj8qgLx%2Bw9brhXSKJV7FJ0FmnQZB9In86ZzSDSTHaVkK2naeRVfIBJUZeZAjcD5q%2BaBsTW50j8zRJ30RAu4eEEbGiUtUWCLl4JKydyek70DRCO3KgSSCImNxxVltkevYJJSAB8VG3RRFMSWS4kEQZ4oFyLjGwW6oDYpM%2FwoZt9DUmvYFdMq33UOtDF0ENdCVEHpxFE8rK4oySkCU6E%2FrVRm0A4fQSt0JJCtSe4IFF8jKcA7asRpiNHIP8AfWmIXJkjtBAQSACdqNJMFxSJPZoO6CkqP8aYlQqRIGQQkzqJmZA5o4qzOEmwYJHYT1rT8hB%2BhuSk6Cnbf3o4ytWKm%2FQ%2F0ggTB9z0rTHoRkk0fBG3qlJ4PvtVsyN2JLZA6AE781ChopColSTFQg2dZmfTJjf2qEGDrMSVAHrIqEGjjQVsYHsDTFMNTGa2wBK9UR2q1OwlPdDJ5IAWI9AAj2%2F2oZg5Owa6AZA5M0AA0dE6gCeJIHNQgHdIHUEx1qETfoGPObKSkiB77VGEpL2gZcFMwZn%2B96VJNjo76BD3UwBuNqHiwlF2BrkBUyUp2mOlUNsAPI3VyR0J7VTQuSXYEumySqEzJ46cUlrYcWzZZtyDBVqI5p5odIdNvKSIKjz3mKCULYDaa0OfOQJ%2Fdnnp%2BVLkqAEFvk6QUyobD3FXw9suxuVnfcgdelM5oobKUE%2BoFXPHel229EEVPKmdyJimOJDxDqQANSR36Cooi3j%2FAGOErhXJ4ogE6HiCNAPJMUS09Bc2O2TpgEwCZI96ahcsz6CVuZ3gGOnerEBa2OqCConv2qMjYbttoEE9fpUIGmVJ5MgdqhAw07BA9RBp3FMObVaDVu7KQPMJ5G4FS%2FtC6%2BgmhQIJBG8bVFJDcjTHjbp4UN%2Fc0dCwk0vUB6t%2B5FQjytKh6l4oKdOlInffmqBi3LseJfQEhWvc7c81BfFmZfgbmB%2BpqBRj9nouEaUnZSjvA4q7JwFvOQdgZHzUBkjEugGQARO1UCfFwCQTHx3qFpCC7lKFHdKj09qgfxiSrrYFIM%2B5qE4DVbilk%2F5e3aoMoRKzB2UepkxULUbMVysQfWOxjaoX8bGRAJUANMe3FQGWuxqtEEKCiEnaO1QFS%2BhsswSTsekdKg%2BM77Ei2CYUd9%2Bn86gVJiZBSIExzt1qASh9H2kkEHUI3ioXijXZ5POpRVHQxtUCSowkg7kxH5VCxMqIEr2HNU2kVyXsbrUlBIO3WTSBCG6ngVECQofp8VCCiVhRBEpneoQdtuEySY7gGoQfsulMg7%2FHFQgRac3AJ3HbvUIEm1ApGqZ5J7VabJ7of2q1FSoUDHQ9RTwMgTS6UKSTunn6VAooLoUlSdUmdjzzUCk9hO2eSlOnfT170SYmV9iwvEJcCJAP8qNSbK4sQv8AFGWEIKlFInvxVOYawv2Q%2FGsysNYdcu6xASevWhsbCPFmn2b8%2BBeNqYZcJbSAr5NC2CV9j%2FiX92ZcT54CUpMQZiqTQ1yiVkvxlYCFu%2FekrIkKBP4asYov0RK%2B8abdKws3iTAC4SqajQXxsYYn492zdqAborVAEHb60EYy9sJY01sVyr4yM394gfegVzsOJHf4qpoqOKi1MV8WmbRjUu6CFBBMatp70Few%2BTa2jW%2FOXjdKiGrtRVEkhexFUt9C1jt2imXfGH72lYVd%2BszCSrdR4q6YSxr0Vzj3iU6h1tsXJDhSSCVRPtUTSexsFb0VxjPiY8kuMm7V5gG4G4%2FvahlJN6RshjK3f8XmLe5XbM3YN0pWkJUqYHXjiglJskor2xRXiW6LVx526cCUmEjp3pSnZElWin8yeJa7vzm03JUHOY6VpWWKXQrg7r0Hcr50etGgVvoSVp1EahKR71nypS%2FRoUqLEwzOv%2BIOlpbyUxG5MaQTzUjCloZCZLFXrrS3G0rWREyf3v7moFKVdh3B8RfbQlalKcEbmf13qCpJFmYXjWhhBU4ErI3jp81TkkUkydYfjbjR0l0FcyT2ikSabKLIwXHfMbQQ6TPAnms08fsZSZYdpiYlClQkkSJ6UtwL4Egsr5TjiDrOk8QJg0qa0HCF6JUw%2BNElRUBP5VkcWzUo%2Bj5TqyTqcjvttFVxY1KtC7S42Kt%2BhH86FoqfQ582AEzqPMnvUEiqHBySByPrUSvsg%2BZdMeqSCdux71bjXRdBJDgSRuQP41RGE2nNIBUQJ434qNstSoJsPAFMrO9XGbC5hu2d9QJKiCeKanYtIP27%2BkQR6uh6URbi62HLe4BiSkDqZqCJRoJtP%2Bo%2BqJ61Ckx8h6AAFmTvUGqnsWDvRR%2FM7VEXSMX30pBAXtxMVb10DOugO%2B6CZBjoPmmRYoE3C9UwSZ2iibS7GY17YHeUgHYhU7UHyFOABulp9RJJHeKvl7opRIhduSsEkd%2FignmYcY07AN1ewTBH0AoFK9hgV26khKFao5ParIZta1D1FXSoJlJ9DtKYOoaZM8%2F37VA4Bi3Sk6VnSDzHJNXHsufQetW5AUQrmR1mtCFuK%2BySWiCVoE6RwY%2BKZGNCZTJPbBWvWSSrmO1GC2qDKEkwk77UcDKEm0qA2EUxkCrQMJBkTxWlK%2BhM1seJa6Kkp6AdfitBnzp%2BhYNcgK0%2FG81DKYqZKRATJ6fFFGvYUWr2Nl26Z3BM7%2FFW4%2FRbjbtDNxmCfSsmPoaFoFquxi63PcTFUUMbhkkKKFrIiRttTU0W6pDMpVsFCB7HmpKSrRQweZ6pE%2FyqoyXsKKbdgl9oQRuCdz%2FtQyVMpprsGvCQTJHWKEoCOgeqDojp0qEBDpI1Akkzx14oJXehkXH2CnlkbaieaHmxsZL0gW6uACkqFByYfyAe4dJJSSJ6cVSdgydgZ1adRMkCKstSSQJuQF7QoEb7GkS7GRyI2GQkAEhWkEdetLhk2aWhRK1mTKSPmtHMCSVCxdKYHqIjtImpzQtJsZKuFavSrft1NA7fQ1RVbE%2FMVuQUDvJqcJfROKEi6pRJUEwdxO9Go0BNUIKcHCVAVUpNApGTbvq2hSifmq%2BRkHaHJPpgD9P%2BaZF6BaQ%2FbXJP4SaJOiwiwRIJgj86ZGVujJlW7CbZjSZB7HvRsSmmFrQpSPxSqNhULDTJIBCiopPO1QgXZJUB9ahAwwR6TyB7bVdkCrC0CEyNjPHWo2QKNLICZiOQaog%2BQqQJEjpNXbIOkQdyZ6iaJZGRWO0umAET1%2BtT5H7CU2vYslYIT6vfir%2BQF23bFgsGSCJ%2Bear5GQ%2B1EDYz7Daj5Ih9qWRMpA%2BdqnNEMm3lSsFW89OtEn9ATYn94WCYMH%2BFSwqR8FmCVQkGPrVWi0t0eBYJI2T9eRVhqFtr6PFLTzE9eeKhfBezArSiBPf6VA3JJCTiwpKiDqEjpFQFZF9Dcr07pCYPWagmhu4sqMFU7TFQiQiQFSkkmfeahZ9p1AgcfH61B0P4o88uCI0jqIqBGBSUygahPc8ioQxWkSqFJJnrUINlbEwQD3jaoQarJhWogn5%2FSgmtWJyfyGq1KVq3A3ncUoGxqpUKMxERP1q%2BL7CUG1Z8hxPIUYG24qgRw26YkkARwKhB%2B08qCDEn2qECbb8kAgTERPNFFWyD9p1UjTpA4MbTRuKRS07CbLpCgtKoM7%2B1HyT6JJWFWnyolJI3jftUC4tIWN993keYmAJjmoA6EWcwtpK0a0zxM0VjIwddWB7zNLSLpQ89IA4giPrVqYMlK1orDxA8TbXDrVrVcthWqDBpbf0NyxajRrPnXx2s2sMumU3aZAVI1f71XL7CxtRVs0cxnx6tUYlduuXSZKTEq3iicb9l48Um9IqLM%2FjQb%2ByuHE3cKA3AVHt%2BVL1E1x8STe%2BzXnE%2FGZ6xQUvXTKE9T5m8bdqvmg%2F7dp0iDX3jS7cXOpVyQyU7Aqn6%2B1Klnp0Ph4za0CXfFUveTovAt9Qn1LgnpRRy2HPxaVksyT4tu4Xeh9%2B6W2mdpVM1eWaS0BCNrssHNvji%2B5ahxq4Tp2BPmbR2pSnFrYLxtlLYp4jv3gKnn0FtRJMKOw6dfegedRVJhQwO6QFdz6xY2iHnnwq53CRPUfx2msk%2FJkumaY%2BN9ldZg8UEPOJAughaiU7GQlIHIoVkkv5AvDFfxK3x7xQLCW2xcErLZSoD%2Bv1pkfJS6Isb9Fe5PzIrGMfN1du%2BQC56lGQCkHtR4%2FITkKyeO07Zei75p1GJoU5pQjZsE8J7wf41qyvWkRLVFLKxcrxW7K0rSkToVx87GkFj61zGtTiUtuaFEckkAjtVN12WkXXk%2FFHnlMwUwCFq5%2FKaqOVVoL45JmyFjiDd1bpc1pOkATG5%2BtI%2FuN0NtEmwW4S6hWso0glM7RHSmRy2VZLrH0KUAQ2BE%2B9FKNiFk92SdF8UBsBwpSTE8TSXGpDoytWWDgN%2BpRt5VI5VB4%2BlVPoInzGNpDo0nTHyf%2BaT3ojZNsExZLzqla088g%2FyrLlfEdiV9FksXiS3pK%2F1PFZeTXfQy66HLNylxRgyme%2FFE5ojjJsf%2FeEjVqIA6DiaVJp7DSrs%2BbeCiQkJSeknpVWXyQ9acBgSCneRztUAlGgi0TpG5kdhztUsAJNOfugjTO2%2B351A4xseIeAIG3PQ71AvjQSZeSVACINQr4w9bOhQTwkdfaqWglBrsM2zwEJA6SREz%2FtToOwgwh0EJIWDG%2FejFyh9D5u%2BKVaZCiOnb%2B96gt4n2EEXaSAdRT79qgPGRmu%2FATsoKPtUFOLvoZLviYCQB0O9QtQvsaKeWoSo%2B%2FtVp1sYo1tDV55ImCOdgOtMmtEk09J7A9xctoCllwJ6880otKiD4tmBi3DpK0Ij%2FVuap5KVEWN3yK9dx5q4ccc1kpJMDUBNDyTLQDF8q4d2CkJO46dP4Uuy6YStCpa4CJVEewFMjKyg20CYCietGQcpbnoASZg7EfBqEClpqmISDM7fzoo92KnK9EltUwBIiOZ5FPVAElswAUq2VBjmmxdipQaJFbglSYiQf50TTBokTLIURJEz1O1NjClYpwSVhFpKNypM7yOsU%2BEb2LCbTRHq0wrtTGLyBNpsJTsEADiTvT10KkL%2BVqO0R2G81ZjyvZ6beQNwkz8VALG67cGAQdXv%2FCjjIOM2tDNxjeRKpn3pr2Pe%2FQwdZCeRz%2BlBwQpxSXQMcQPUdA0%2B55olGgVNL0MnGgrUnZEddPFWHSktA91lQUpJAInbfmoiJJdg19pW5CZ24mkydlSknqIDum1pPpTI96KMLQpprsAXaVer0gDaBVSjQcoJAW4Qd4jegApsD3Q3ABCTxxsahSVAd6B%2BEzOwjmhljXdjoyb0CLhOxBgDn4pfH9hgp8jY6d%2Feo467ID3AoyIBKv0FKcPZC8UrWdxKgJ60jkjoGfm7jWnVOw3496GW1ohmXkgqCdIkQPmiiqQri0JKdBUIKlbVbYO0N1uIKvw79ievxVhKTEfNhQ5UZ232ouT%2BySv2NlOkH1gkR16VTdieH0ZNvBR0khJJg9RUj2Guh%2Bh3cAQn3p6QEk2EmlqgbyZ2moC41tBRhRCgk6Zj34ooxb6KlIMW%2FEAq9qezKFLeEkqhUdKogaZ3A9EHvtUIF2FkAatUdKhAnbkEAa%2BffcVCBVpUCRCqhAihfpA43BqEHiHh%2BGTI4qEHSXRumRJFQg5CwTtJBioQU84fhOnbpHFQh8p3YAqO08VCGfngkCVJPSahDMXA3CufaoQ8S%2FuSNiR0ooyaAmj4OwpRSY9u9W5sJHynVAJ0lST1k1cGl2WIFSjqk80fJEoz8xROogxxV2iUYyqYUSkE8jpVckQy1KIglcdjRLZBIwswoGepjmqIYckzISDFQh8BqIAkmoQwMxtpB96hEeA7wokngVAnL9nsAHv03qDV0JrTP4tPcVGyxqsgDYEK6iq5ID5EDlSNQIAHMxS5PYEpWxotQSJkke9XGSLjNJUNFrQZO4RuNqvloJ5F0JhYhMHtShQr5sRJkVCDhu5AkKmfc1aVuiDpvEEoIBOo9KviSgq3fJISZng1TRBdWKNsiVKHv6qKF3otK9H3%2BPWyASXgB1kxHxR2y1FkHzHnq2tEKShaUK%2F9qH5EP90UY74yMWz76XLlpELgyqP40SmgZSp0yuMxeONuzcOH722D3Cpq1JMvimafeMf2imFWLwRfgFJmSraQKXlkDkT6OfuZvtI3GI%2BdZs3q3VQQVBW5rPzf2PxQo1qxfxjvl4iU%2BaqVDSNSjNKlkrTZ0FBB1jxAeu8JcZW%2BWXFiIUvaKp5V7ZfxP0VFnvHLphpq5U4pafxyFSNxE0mXlaNUMLorlzNl3cNWaQtaUGTq5jrvSMUnJ2aEmSTCsb829YLtzLIRqII3%2BKfilJMmWKcRfE86DDyolagZPlwST%2Fe1am72cyainZE8Q8U1qQGU3S3UyJkmDNLyfxH4ZJOgkrxGbDTDYeAGrTEmJjrNc9OzTJ1NEfxrxGQq0vbu6vfMCNmU6og9%2B3YUC0wsjtUVBcZvv726cftn1uoLcKX%2FAJBxtVf3PLoqGBDSwzALy6U248XdKdKQsyfcntSs05RjcTRGKWiX4RjCre6Q804yGvMKEkEb0WBye5ElBUXpZ4%2BzfYW0224POUClQ4VzHNdiLT2jkyjJOiFXgdN8tlpSVEEFSp2idxNEWlZC8TxpbLt0lpRUtCRpInnrWTNjk2NhKvRtj4XqCcpKxC6blwoCEpjmeDVY16GRnI2Ay3dG3wxvzFJJ0k7GP%2Baa8bYcZO6ZNcrO6nVILpKAJTJmJofGirpg54Oi00pLTDbvnJUFCCQPwnit3OP0c3iz23uG%2FK0anFlJ323A96ROavQ2ESc5dvg4ggBXMcdazp7o0vHQSvMaDFxoBkjkE0M1SLjjb3ZN8u44haUuBRT3E7isWRX0aMarRaFnmG3GhK1gCJ4mTWJwdjeCJHa4007p9QgHqIn86FqiU70GGcSClEfumN5qFyr2FbV%2FXBUpRO1BKNuynBLsMNrQFAaSmduaba%2BiShYYtFoTCFEBJMHfg0ItxoclzylEEnY%2FmKtprsoVbuAITxv%2BtUNUkEGbghQ3M9iagyg2xeIhIkA%2FPT86HX0SwrbXidkmSAKtFBRGItoEqWAnoOKqV%2Bi6XsHvZktLfWpdwnbfc1VysqqGn%2FfNolWzrQ37807kwXJDRWdGHlBPnzv342q1kFtex6zmezSCovoEdZ5ouRSjYhc5yskklL6FTAJ1cVHIaopEXvfEXDLcEruWTE7zyarm%2FouiqMz%2BNOFWqVTdsiQdI1daS8nJAtfRr9iPjlaYndLtre5UtonkGszybpDIYrW9kqwTMv8AibklZ8pI2Oqo8g%2BWFUWVhq13S29O3vFOi2zP8bXsn1o2hOkIJ08k0wXkCiB6gs6lfzp8ehY5YUCuRzvII5%2FvtVkCdsEhRUTBMbUiDpgT6JLaDYepW2%2FM71tg7F0SSxI2OwHaK1JAuVEps0ATtuOverXYmWw4yykpTKQmOp6U4XLH9BtlqAITH02prmmgHF9ha2bCjABA34o072JyMJtJ2EpUDP509O%2BhTX2OA2PYH55ojOkk7oyLSlCYj5FQrNKLX4mHkkmQCduZiKuPYkZuW07FS%2BdhPFPHuCGD9oEkq9R94naoC1X%2BAQ4yklelsTG3PNQpSige5ark6YUD9DRKLYMZK7Gb7J0GU7ngg9qpoZzQHeaI2UlRT70PFClcmCrhlMqASdPcjihcfoKWOtoAXNsCJ0kbxz196W2BbI7cMbkQQT14qigK80OentULA9y0ZUEpOngmKjRAO%2BySFAgnbfbmgnBehkH6BLrBGoFAUQd46e1KHxW9g9xsFQ%2Fcj2O%2FzULkrLgQ6FBJgEdAea5x0JwSVo%2BU4XIlYFMjKkLPfMhMApJjptFU5q0LyPobqWkzsgK55pza9MFSY3UUpMkgpG%2B5qE5MTUsHVGjc%2B8VOD7KbfsbqdAUYMJ4G%2FHxVpWUZIcEjUoAzUaZB20uTE6FTJ7dP61XKiBRp0lQkCBxWgU2%2Bgxbq3B9I43Booya6BcXQZYcSqdJBprkkJ4P2F2lEEkE1FJFODqwyysGDqCv5%2B9XQIWZd2EmB2NQgRQ5z60n9KhAlbvBJ0zKdvkVCBNDnChEEd6hB0l6QkkyZkVCC6XTyJO229QgqLgiASdPzUIZl5SiFagOwqEPvvCt%2FUN%2FfioQ8FwZBChI71CGZuVgwQFfBqEPUXJgTsN6hBQXG0FUJ1flUIZpfncqg%2FwAqhDNL2rgyTNQhnrVAAVNQh75g36k9zz8VCGQO8D0zx7Vak0Q8UlCYIE%2FwpkZtkEyTvvzRkMgpQgkmJ6VCGJncnV3qEE1DcqkARUIZpG4jYfxqGhCS4BCTPtQya9guSWmMXFEJ2JJmNxVJRYt8fQPcVAMqGodOKUCD3V6lkhQXvPFSiDRa5JO5HSoQb6iDsrr1qEMgvSRx0Jg1CGS3SEyFEK5mrTogFub9DRIUtOobwalkWxo1mFLaFErAA6VCsn46fYMxnN7duwXfMSEgck1FKtj8OK%2Byl8Y8WGrW3e8y6GxO88dqJzYyOOXpmr2fvH9i1auVpvGyE6h%2BLg9xS1OlbRcsUqtmgniD9pcWzzzzF%2BhYKoIBEgk%2Fxpazpg44Of8AIo3MP2n7iWCu7WlKkaSQvj9aY58TTDxnHRrxnHxhusaYeSbnWVgpMbdfY%2B9LyZU%2BzXj8dt0UW5jlxbPLvjcF0AhQBMHjg1llnivdj14svREMYzd5mN4biGtHlvEKI4A3j61lyTT7GwxtPonC82Ofe7KyJKfMcKfQJ%2BnuKyZ5SW0aFjleyw884d95tMP%2FAG4Qh1CD7tpjjtNZZZZV2NSS2ylM0MKwdlYZUp1tKUpSQJ39z%2BdaPHzt6Ycsqn0RfJ%2BKXVzi%2FwB3S8spglZUfw%2B1dbx8ojPFuNIH%2BIGPW4LLbNwolCt4MGf607JlUdswfA5LRWqMfBZKH1uJuEjzU8cTuDWPJnsNYn1QAZzdeOG4bY1EJPoVHUnj3rJkzKKtj4%2BNJ9ja5xd9djbIN04VuLUdIOxI%2FlXMz%2BQ3%2FFkXi%2FsLsY01a4KlSgW7gwlYB3VvtHtSo2umOcXf4skNghtlNo6tJ%2FaQs%2BxNascm9tlzi%2FbGV9ijmFNuP7oTqIQVHSCQe1dCOWNGZ4J9xZb%2FAIb5qauGkXFyQ6EngRCj1P8AKnYZuTtF%2FwBu0rkWnfvB5tF3aNBKnjsP3QJ5rS81EhisqsWby8beFy3DbjmhajulA35NJyZ29GxLVG6WQWmf8JsrNoifK0pkEARxtz9aLHMqTiS6yzC3ZYkxYrDRUJkE7T12PWm5MtLQCkif5LxtL1zduNvENoeIKQOg4irw5HJ0xfkTVUXNY4wi9KmyuEJgg9z7e9HzRifeh2HHApXqcII45PfekTnsYiSYJfaVuNl3ZRB0hUkCkOe9EPcdvUechawBEAEHn9aXLKGpPpGVhmUYcpsOPkAp22mDSuaC5SXZOMNzY4tQDzgCTxvwaFzXo1ptk8sM1oUUILwKvwyDMf33rPJN7YxR%2By0MHxNVzpAWY6e9IlOifGWFaPhCAErBTuDFV8hFjDSLlPoEwP4UPNh0xx9%2BQz%2BIjzAdt%2BaJZBchZzFGy0y6haCQdJPeo8zYCil0NxjTbQCi4kKJ5PX6VPkGqCaPRmBAXpDpG%2FO1T5CpRpaCSMxMtJAcuGgO5P8AOq%2BT9FJL7GF94l4XhqCF3jKTzBVED86nyr2NjhT6ZTubftIZewltZdxG2QoAmAoSf1oJ5V%2FgZDCltmo2avtpYOh%2B7Rb4g36VAJPT55pLyS9GfLlSdIiSPtei6WFM3qktgzrJ9JFT5p%2FQj5P0Kn7YdpaO7XK3GwTq0q5gUyGWQXyxS2gbe%2Fbfs2WVOpulaAdISDyfzpnySfZPnx1aIHi%2F27LVrZV0pw7nSFHYxxtQvI%2BrI%2FKj0a5Z7%2F6hz1s6bdq5WhZBGlJJ%2BpM1XNrtgZPIg%2F4vZRdx9rnNecrkJN5cW1pOoqBO4BrNz%2FG0x2JV1s2u8GM5XuYjaBtDi0KUEhSzJVuP03rLj8q3xN2OS4nT%2FwAO8MeWy0p5SpHTk7962pb2U06dmyeGpaYQhIAUscdYrVGXoyTfokbLpKBMTJFNFSQRRCgdlaeNqtLYkIs6APSkgkCiutIgUZAmJ%2FpVwS9AT62H7ZRJQkTz0%2FhTE6EqFbsk9gr1fi1HaduK2xf2DNErsyDuDyRTF2KJIwJAAJAPP%2B9PIG2QCkCTvz89qpp%2BimrCrLYB1Qf4U6EWlsy5EEm0cAxTsfYoeob2ABATMj39qaKyukLBkk8wO8VaZkS9nimSTEg%2B8UcHY2MVViK7eXN5nYR%2FOmBjF2zJkQUmfrULcHQJetSIUUkSahnlFoHuNEz6VDf8qNTaKBbzZI0huI9Ug1ObKbBTzRKfVJMztQBOTfYHfZWEkAcnpULUmlSAdwwSVBQiTO1DwQcPsA3FsZVEc8cGo4oN9ANdukaiBAPWlUzMCn2NQO5O0bVKC4vsDP26xqSgCI4jaqaKTp6BDtooKPpM78Dk9qU8bfQ5TtWwe5bLTuCduJoXFrstSRN0vgjlWsH8z71zjo0YLuCmTpCoPXkfNQh4q7BCpIG9G8YLin2NnnwYAV6RzxvVwjRFBDdbxIESpBA5pgRn5iVJGyhv0Gw%2FWijJ9UIl2JKXqJVAjgd6LjFFHnmEBEJUrqapyIOm3UcEyOgmquL7QMpUEmV7ggED3qoui5TDbDoESDo256GmqaAcw3bOARKSCOd6tNegZMM27wIA2iOKsELWzqUjYz9ee1VRAq08FSJ5MbimqaFuDCbbvCTpnir%2BRFfGx%2B24AIgzMCTRoAIsvpGkkHt9KhB8h5IMzt13qEFA8CduY4qFWfC4gq3mI%2BtQsxVcbTIqEPFXIUoyogbGoQxFzyRBPBqFWZC5IJEe%2B%2FSoWKC4AMHSreahBVLwVJjUn2OwqEFUvCB0qEFkPJJIEiOYH8ahBZLxmNIB4qEFEuglJ%2FFvzPFQg5bcO0SOgJ4NQhmFJCjIBHbtUIZ%2BkknRB2mDzV2yCgPIEwDG5o4zIJOKP4RPPM7UxMgluVEGf4zUDgt2eKUQJSSJ6dqpqxklaoauKKgZMJ996W4MU4UrGLhIPA36zuKriCMXV7HifbrUUQ8Sd2C3lQZPHapN2wXK3YyU8kkj3I54oSjDUmNkwPaoQavOhCdRSB12qEYHucYQ0hWrYR32qFxjfRVWYs1t261K81EgSBNJk7ZshBIqDGPFO0YKiu40ax34Paqllot4%2BT6KozR4yss2LiHLoeXBKVFXTqKr5m9In9rT9mhXiL9oNmydxG2GIFxJBIIUYB7UEpevZocVBbNE88%2BP67xxy3F06ptS1HZU7%2FNDDLSpsVGDfRp3mvxGv7rEC2u4UUFQA9RB55PtRRmmHDE2%2FwBkfxvHrq6CNdypCU6VA8AdjSp5404o6GDxprbIhdZ3eRitpZ616CqT2MVjrZqfkU6Y8zDm919gsoIaUUwSkmKCUb7DXkJ9JlCDPN4MwssO3Di2WoE8aSVc1iy4UvyWzSoe0bK5VxBD%2BJ4Bduul13ziNzsokc%2FrQS8uTVNAJl55ozQ0i3QxcOBPlugFIVG0dPb4pXPWw3BVsi1xctY3qbuAEMPhJbnedjEH6GphyOLEpcTXq1zIzgGa7t3ZbaS4EoUrlSQR0rrYc7M2bJviVHjGOXONY0hC33PU6VOcwR0ietMlP2LcfZ9cYzbtYqWLhetCnRb%2FAItgCmgl1bHY8qjtjm2tnMMN75zSgFNqW0J5TGxArH5DuJsU1JWg3ibNt%2FgmEKsEpTcoY1OEfi1Hgn6zXPbS7KI3ZO3t3d2hdYcUwCEyBstXX8qJSjVUYpeRK6So2QvMuP2%2BG4fjKYas9ICSREmNtu1C1ro2qKav2U%2FnX75iT%2BF4U06EWrZCU6UiXFqM79xWzxnBGf4p3pkxwNy0w64s8Hw%2B4dcukDylkHrxNa55I%2FY5RpU2bz24w6%2ByBht6lhH%2BIJa0uNpTB1DafaqnOo6QpqinmsIucTzAcPsnHEpcSlZJT%2BM6unxxXO5O9MOLRsDlF64tL1%2B1W4pxxhMmen5Gung8ivexcY7qxG5xIPY0u70aV%2BeUxGwA5g9DIrQ8jk7YTiTPL%2BKqwvGHkMvB1l5GoQBpAjt3qmIlJN0i%2B8CxAuoSyj0upAO25J7j8xR42zTHEkqLPa1vJaWlEEA6j3Hv7c05V9C%2FhSAWG4qtnGyhSlFrUQAoQCe5rNka%2Bhul2Z5lxVTA1%2BZug7iNo%2FpWea0WoRS0QVWYS460UKAI39v79qSVwRMLTMaQUrUsBQE77fnUBXP6JrheaghbOtQUewG6Qfao4JqxiTWmbE5TzEhaGU%2BYIVxvFY8kGt0aF0XRYYsjykmQDyZPIpYuLrsdjG0I31o1RAPaqbHRTe0R3Fc7W9shZNw2YE87D6VYrhsjaPEWyQzdsrfaLmnUFatgQaptJWy%2BFukQi78XbOABcAwdJE9ayvyF6NaxJLojd74%2BYHhrZcdv20IEklSgJ%2BPepHyLGLE%2Fo18z39tDBMOQ4hGIMttpn%2F7m%2FHWKH5Mj9GfyYqCs0VzZ9uPMmYb121yup59BUoakmYO%2FSKbjxN7m9nGn%2FVXHSRGMOuvFPxLdSu7cvmGyZGx2323%2BIrVHwknaM%2F8Ae5Mmixct%2FZmzjjd395ulXamQSohRifpWqHjmbm4vZdn%2FAPjNjrtpbtBx1ttO4hMgd0z1pvwIv5pfQQb%2ByhiF6ylm1LqnArdZQAB9KYvEg9guUnsY4j9jt5i3U88X3RulZGxn2E7VF4ML0DKM1uzXvNf2UcxrdWxh7L5SskDSJmT1%2FrTP7aK00LlnmtESsPsBY0%2Fcf4hiyX1QoqATEn5J6UjL40P9KDwN3sbY59mu4yo6lhVopLKDt02rm5YNdHf8LLo21%2Bz5l1rDFIaUCjQpJSI3BrnTwVLkmdnC1JdHUjJz7aLVk6SCQE%2FFaYJtGfPoubDS4soOlUAbCtMTG5Nk1tWFKSC5KfpM04ByphZIKQARpHYGrEscNEDYJJE7e1QoItEEJMgD2q49lNWHrVadoB5EVsa0KSRJLNwp0%2BnmNp6U%2Fj7Av7JfYrEwAAJ3J5o4P2Jk9kpt1EDkFXB9q0Rdqyg4wRqAHt8VZAu0QrZJH8aen7MeXsLNbmAAYp6lYthBCPTHqCuZHWiMeaP5WOQkblWodTFQUeBO8iQO9HBhwlTMHElACtinjimjZSoZrQtWogEjjaoLeR%2Bhk82oHYKT8VCubB71qNUEFRPUdqtKxEpu%2Bga7agSQCk8H3qNbDhmr0B3bJQE7RxHaolZSkgTcMhAhRG%2FEDio40OjOlQCuGdOr06U9PmqKnKyP3DJ31I4HbrUBoBO2%2BpRhJKTtNWT%2FACDHWUkiBvx70qSZGDn7ULAICtX8fahdEBTtqSdJiAOfaaEgPXaCQANfczzQzjYUZUIedKUmSDNchs69CnmzJkFIO47ipaKMPMSoncR3olkIY6ykmCRHXar5sgmSmdU87TFTkyCSnFpIKUlaI2Pb9KcsmuxbgJh9RJ9Gsjn2mpysnBfYohSypMylO0TxVMn4jppwHSSR3k1VP7AlAItOKKEpMiep4iiFqAXtnCkpE9evf6VGwuIaZcBIAXEbnfijxoB4%2FoMsuSUbwPimguNBVDk8hJM1AQsw9KkpCjEjjpUIFGXCkFJXqiJqrLSHyHoATqAB6xTFNgyxodpeCyIUon2FX8gPxoch7upZ77VOT%2BiuCFg%2BSEyoFMTNU5sNRVHheTM6lA1FkZKRip9QTsqT3jYVfyAPF9GCn1JJEjjar%2BRA8GeF7YgkgRRU%2FsnyGX3lI3n27UE20%2BwopPYql%2FZKknaOlXCTb2FxXoWS8NvUEjpRiEOkvjYqUJneO1QscB5IkawT88VCDlLwTEKBA6e1QguhcwAQDUIOUOwJSqNu9Qg4S6ogwQD81CCocTP7sxImoQU1iInV02qEPNKZAJBHv0o4yZF2eKIPqATz06UzkhypdCClQmOYpbkwHJ3oZvLGlQJUOlVzYLk%2BmDXnNO44A23oQWDHXUSqVfFNnLQ6ctUgY64NR1HVtO9KFAh65CTIVJ6%2B9Qgmb5EEKVJHeqlKgoxT7YLvcUbCANQjjel%2FKHwS2yp8y5jRapdOtKQAY3oZzfaY%2BMV2aX%2BJXicMPTdlNwdG4J%2Fy79KWp2alji%2Bmc9c8faBbtnrm1N8pYB9KiYBM9d6RkyqxmOUYurNfM2faTbvsGWpVzcJcQogeox2jnis6zXqzVKcJdvZzz8RfGbELp7EHnMSJWSuAlRKT1%2Bnagjl5AxS9lE4d4jjEsRDTjzy1wNj16n%2BzQ870FGcF9EyxkNquvOQ8C3pS6ZP6UaX7HR8mHSGGJ4hpsmrpDy4WICT0%2FwCKGTrZIzc3t6K8Vi7CMZbS4tbiwhOnalPOkuT7NbwwapDrMOY2be31NIQteolM7E7jmua%2FLlKW%2BhfGUf4lKYbdt4hjl4HFlTpAUTxpJPSOlNh5UkqaNCzujdLLQbv8r4Td274S5ZAKKY9Q7z%2BXWsjybsbiUWrkS3Dre4zuFvNPhFoh4NKKv3RG%2B3WapTAyLdpGeZZwpeFlt1TiGUTrSYCYMQQOsfxpsVsxZJtPZQOOYe01jtu9Dri3i4SdzpSJJn6V0cWRONNhwhibtsrJ0hTGJYowrQl1RbbgEQRzt%2BlOqw3lxx0ho3btqOD3124ll5xzUT1CQP8AapnlUGkJcFJ3ZaOAlvF8Ot5cBcGpknY6RO0n4rjfLJ6bGQioukHsGy%2B9idpmK4UmUWDa3HUgRsJP5daDgO430YZPZD1vhDAbcX51wdAKd4J6D5NFFUZ3KMpdmxGerheGYNeYC6q3dcttAMAy332NOlkdUanj1o1sTdN32Or9akNMtKcKyQAI33%2FpSF%2BTE6RHMo5gt3fEK281wNFx1CUSfSBPNaFhcXcmLflQujoZaY4hjCVWbJQGjDvo3ngR7iTXQl5kHHizXSaujaDBfDO0usPcu7N2wOIYewhb2jlaTuY68n9KzKEWtMVLDr6KlxFjE8uNY9jzDSkgK0rUUTqjjfpVSSX5WLrfErmyxNu7y3cYooKW4Lj0k7STuf480%2FBn9tmqEOOiyLF22Td4birKwbQpASkbhKo3mtlrsKkXDgOZG2blCkOkkgBKQJneeaJN%2BhGWa9GweWMXw7ELhi1W6vzH2w2iTuT2ipJyXRgc39gHNDasDvGrxQgIfCFE7yJ4%2FLrWWcmdHHh59DrE1WmIWv3lohTSxBk7kHj6UpSbNC8Wl2a7OY4jBcWdYcMJUVJB5H%2B1Z5TdmZ6fEXxTOlnaeSTcJQFTPXbpNDLIaMML0xFjxGtFXluGrxBYCgFEGSTFCso%2BWGl2bPZG8SLPym13D7aVggCSBFKy5WBCq2XknxUw%2B0YSo3jYhPUiZPakqbZWOF9lc5q%2B0DheGtraRehT0GDP%2B9U50vyY1yjE1ezt9qO1sm3VNXTalqT%2B%2Br%2BH5VcZWriSKg1yZrcPtdKvscVbM3qhb6HEbKMqJTtt1FU5%2BmZlkSdopDHPtb3tkhwMYgqASRK95B6Ulx9oavK3s1kzv9q3M2LPLtrG7uXLl70ITrJSJ%2BO9SMGtsx%2BV5zkuI5yzlLxG8RHLFr%2F5iy8QXST33gH4IrYmcmcMmTrZ0%2B8Afsn26Puyr%2B0SVAgOE7lXciaJZKVGnB%2FT5Vc%2BzqLkPwUwPC2mGWGGg2mNSimJPatOKdKxzwV0bG4dkvCrRtDaGkJgifT%2FADrXHKmDpKmgi9l%2FDnFBCAhDSYABiitCZcfSDNlhGHD0NNNJbEzsN%2Fk1aYhpj64wHDrpOgNNkHsnmi5pdAOC%2BgfZeF2GXl35htAk8CQNzRrNbA%2BNL0S678K8KZs1xYoVG86aZ2Tkk%2BjRXx68NLdm0vnW2Jc5ECI9qy%2BThXGx%2BDPGM7NUPDzBcUtcX%2FaeYhsKJSDyme5rhvHez0kPJgujoNkdAUzbpdUSqU9YKtqmNNaJlqSs2OwhpCWkKUIrRCKezI4r0TJhQCVJE9pFNFtfYpskAbJMHpx8moDzSMwuR0JkbTUFyd9D9lwiCI54AqANBu1XEKKiEztA61p52CoEks1QptSSCJ2NaozTFTpvZK7NzSqNRk%2F3zVp7oVS46JXauAhJUSVe5p8H6FSlQdtyCSVQn6c0yylMOWq0q24TtFOh0Z8gbtyDBmPmnQ7FBRszBJ2%2BaaZszd16HSeQDMRxH8qtmZVZmEiSYWDz8UUEOhFNWeraBAKjtJpoclaEDaAgn97fimKAmhuu22nUr2qpQaKGTlulXpJUIPJFDtFOvYLdYWFqHIHtzUYNRBTzaoUANUHpxVA8V9gt%2B2mUqAMdDxTUr2xiI9eWwOsSojY%2FXtS2gk2ugLcM6StKtW%2B096oJTbewHc2oBCgZnoBwahUkvQJctAowZA6mpYIxXaqBVpKlJMcnc%2FFLaV7Lj3sHvWpCidJjvQyouaroYOWqTBGsjoKqgSAecYBkhRPXauBJ3s7km36PC%2BolJJAVxtUUSlBnvnqJJEap2HSjiqL%2BM8VchCeEg9SKMpwEhcBSpSApI3A%2Fv5q5KgDI3GwMencSOaJQtAOe6PQsEkJ0lP8ALvUvjoGXZ8LluQmJPUTP%2FFNspRPUqhSVpBVvz7VBqWqCjT8aTun54qCuDCbDvqBhIO3WIolVUV0GGHymCSCCd6NP0igwxcAwf3txUlJpAyhYYt3yVDb5qndWD8YTZeJ0qgHiijIW0FGbiCJGx5nk0qad2QINvzA56c9etFGe6IPUPQABsOaZaILIdiIKQR7c0MmyGYdc3lKTP97VFJ%2FRKPPOVuJg%2FFEmEoifnf6p68VGWoM%2BD24lRj3oaf2RwZ7556kn6bUy2DZ4HiVTvER8VL%2BwZKxRL4Tskaj196oiVKhZDxUQPSEzuKJSZbSY5Q8DsFA78cUzmhXxsdJcIMwDBFTkiuDHaXlEAgGY71ad9AtDxt3VvAPQH3qyDtDiZG%2B3QVCDhDgJ3k88VCDgOkiII6VCC6HI1KgCoQ%2BDpMHTHTmKhDEulSpIBHEA1CCalQSqD8g9KhAe%2B5Bgkaup7VCAq4cB2JB7GKhAI%2B%2BJKQCd6hAa9dAbKCQPniqcki1GyOXN8hIUCQOxmlubYxQXsiF3jRakIKTHvQBJJEBxvNvkJKlrJHAP%2B1Jn2PjFPTRq54i%2BKDFky6C8gkpiCrj6VMjXHbNGLFv9HMbxt8amVIvmBdtkySE6gNMda5fkTcVaNsMcaOVPiF4j3V3eXCmrgluSkeqdp3%2FnWGeZPZn%2BBWUvmvONyxll8pWUunqDG%2FetGGCas0QwpdGqGOZuvLvDG4chaXFJO%2B5%2Ba0SqPQOeEWN8p4s8i%2BauHFkydJ33BPWKVGuWzGnHpovbEMaufuYMkpUj09Cfb%2BdaeNmuGCK2gYnE7rFmWsNsGXbm9K9LbTYKlqIEmI52BP0pE8Fu29DpFZY9jC8OvgVy1cqSE8%2Fhjofesnkxh1FmrFip2BFY87dqH3srLYPqJnjvtWSPjTb0MnkSItguOrtcwsqYACXXNMzPp1RPztNC8TXYn%2B6X0br%2BB2YWrnHsTwvElOCxdt320SPQDp2%2FjQ8daHYvKT0Wl4L36VXd1gjagUB50EExvuZn6VIRsd8jeokRzTjw%2FwAOvrT7w06%2BLtSk6TJJ1Cd%2FgUxya2hE8al%2FLskDmXnMYyq3moICGW1KZccSoAkcQOu80cYt9iH430Q3FcjoOTHblhlaALpRlZEIb6JHvPWgtrpjVgjRr3n21ThN7g4%2B8FaF6Ux%2F%2BGqeBFUssn2y%2BCj0XR4OYc3fWxfuWm1sff0suMTC1ogQe%2B89Pihc1dmjFj5O2XndYNcYTnbOmTrOwQm4xDCCtoNxDKdiskEwTG0e9GnZGqGfhtYWthmSzw55lF%2FdpZ1tqG6krSrUT77A1aFRwq7K5z3n%2B8v%2FABZvGn%2FKNk%2FarQG5GlSie3Q7VG7Zc8lSqys8yPP5TxS%2FtrpsSsKbAJmUkSQI555pUf0DLIl2BMuYUt3GMo4jbW612Fy75Egb%2BYFAQT05olfsOEYtpm7SC8hrEMMs7sG6YuUNgEjUDJn3gQaZo2SpLRvp4BY1b36Mx2%2BM3aS6yli0cUlc6iokCCfxARRRyNGWTvoZZxabfyjmXL1ut68vXnCu1dS2CAEKOv5EbH3ok7TsJYrdrsgeUfDz%2FGcIyAbRlLeXbp%2B6axJzSVaHjITI6biBRQgSaaIJfOu4HgzuCoIVdtXikIB%2FEkhREe3xXQxxk1%2BRWKd6YrlnMLdr54uHFJuELnfmOY%2BZJqZbiFkinpl55VzjaN5yyctu5dTClOlJ4UNMSaQs8noz%2FDGPo2Hznd2OY23mLZVumfWlU%2FiJFSbdL9kWSnoid7ha8uYTYF58uocPMzH9KBxcdWNU32aveJAessRd8p4uAmQI4k8ismVsuEd6Ncsw5mxFBbYuXHgjhOoSeYrO2%2FZojC%2ByucS8RnsJJIuNC%2BgkbfTpVJtC55IpUiY5d%2B0A7Z%2BW0%2FdkCdYB2BMRAo077G4ssUrFMyfasvLNgMm78noklUx%2FQVUsb9M0rzoR7Na83%2Fadxa7uF6b9RckkKBG07bUp4mZcnn8uiisY8XsaxYPpXduLKp0mYBNU24LZmlNvsDZYzPeJxu3Up5airUVCdyNJmgir2VYPtMPxrNeKOWVil1Q1kIIEk71ag70Lnkikbx%2BAf2N73HMVYxXG216QUwlafrJ%2FLmtCRml4Usv6Ox3hr4H4PlS2tWmcPQXNktggek%2B35Uqbm3%2BOjqYMXBUbi5bwO0we2SGkhtwn1RG5PMGmQTrZWWb6LDtMfRZlLKCCriR02p3NiuSoOf8AerbSNOx2j%2FeijkaFyUWZozYbtPlNKCiY1Ann5pscj%2BxFIlWGXzr6mx6VNA89KNTl1YE4PtE%2BwtxJJ1SpQO%2FtTgEy1svMJltRSFcTtTsUd2DOd6LAurMO2jiQkAKTBrUnTsxN3s1N8W8s%2FwCIsvNBoqSeZEyKOcPxpCoK6Ro6rLr1njSmGmghAWUjpFedywcZNHpsU04%2Fs2NySxbsNtIhaiAN5mfig5DXNrS9mwGGoUttJKAByBToMqKVWyUthIb3IPUz0pgqTs%2BJ3MmBzMxUFuBmg8HSj4qFfGPWFE6Dpke3eoA0GrVeyU7gSCQOabj6KJJauJT5ZSJEzWjFvQnIk9EotFlUEAiaeoUKcdUSuzUDoKYJNMSEyjZIbffgkeqSDwf506KpUCoUw7ZkFxUCI326U3H2LkkHmCn0yTTl2Z2GGT6UiBE%2Fl8U8CTY%2BQBABievt81DDJtvY4SkgEbjgA02K9jodCwbkAKiaMIbKQWzCREdatOhM%2B2ewJlQCe0CmKf2Cxs4xOoAc89xVuF7A%2BNt7YOdYKVKhG8fQ0pqgXFIFPM6SStMHvVBcV6BDtuDqCo1TtAq7ZNpAq4tTskArB7mrWwHJgR%2B0B4QVDiI2q3EbB32AXrNUklIM%2FmKAsGqtEidgrpBFWEuNbGTtulHpCSes7fpQtWXcfSBL1ukhUNkc89atJEjK3voYrtVR%2BAlXv0qq%2BgvxvWihUuFJEmen9ivOt2tHds9%2B8FHCitPT5oHFsCU0YecpCd5ImaZGKQCk2%2BjIOFcgghMdOtEuwuF%2BxNyUlSUlQHXpT6FyjR8m4WIKZHeBuasBJDkOpCj6YI33oXGyzNtRJSslIESTP8qGSdaAlL6F%2FMaWoJKlADgxEe1FG%2FZE5Dhp5IcKQsFM7yOKt9BhRlRPqTqJ4O1BGarYMkgmw9%2BAbageDvFGpJ9CpxDDLyRI1QZ6daugUgvbvbAkiQdvipyosIsvlG0nmZmqX6BlBBVp0FMpWD2oZ5JXVgOLCDVwNX4iP51ItMFy9D1NyAAkwZ57mjooXTdBEIBJTx9anKtlpivnjYhR4jfvRLI%2By%2BTMFXABMKGrvNTk30TbG63zqJ1E9Z4qNSBaMvvMclQ7e9TZDH7wTxxVqTIKIeTvKjP%2B1VyIKouUqKUoUFCOI6VFKiC6LhKTuoR2FEpkHCHwR%2BMpHxRp2QeIfTsAvV2qyD1t8TKVFO3TrTMbKktDtDp1KJ4jvvTDPEeNvgqlSlflQua9sNQY9D4kyAOnNWminFjhLsjqSON%2BasoUS%2BOZmRv81CGSn0gTqKdpmOahBP72kKKdQ4kCOKhBA3YAJKgkdh1M1TaXZaTfQMurlIUTMq6%2B9WUBrm6glSlAD5qFNkSvMWSlZHmAEHvQTdBwVkXvcZQNWpyfaaXJbG8a6IhiGOJKHQl0nTvtS00tDo42%2BypMzZsTaoeUl88f5omo8iHwhro1szx4o27No%2BhV60hW%2FJE8VlyzfsZDHb0c7vFTxnZdYugbpDb6VFJ9Z9UjY1z82etNm3g6pLZy28UfEO6u7%2B6YVeLWCFT1AFYJ5w4Yahu7NSc0ZlZY16nSW1bTqMnbmlcnJFuEIrbdmK3bfH8qPoQ%2B2h5LZKN5Uk%2B461q8WckIcn6NZcQsVW7DqdZJDxCtuP8AmuhbfYDmn26JVb21u3b4RcFQSXUpUDPJ4PzWTLlyJ7IpJ9FrXy27rArUIcH3hlIKgD6ljfeKGXlzoNTJ09jdj4Q5HdwhhTL%2FAIk47bk3bsBRwaxUJDKDyl1wQpZH7p00vJnmu2C4qb36NRscv3XnbNDig67q0T1rLxtm35oR1EIWrYuEXGo%2BW2Wyk6eZ6UxKXVGbJNyKxYun0YpbNOeY0okLJn8RBgilU7KWOTVpG0OUsfRllGGYusqbS3ct%2BYtU%2BsKPH5bRWqfjyjGwVa2ix0ZotbLF8w32DXa7WxRcrdYBVykidz%2BgrM3SHYbb7ore4zOxeYphQVdlYevElDYiQgncx%2FCg%2BRGleMk7dnRR3AlYX4M5NsXrlTrV3iLqE%2BXbyrTBIPdXI3rQpLjo2wpB7x6yrg2WMIwfK%2BEoecStgOFzUFanA2CUQPc1UoaIsdu2cncZxG6xLEbxi%2FQtN0w%2BSCOih0%2FhSElYhSV0bD%2BD95ctpvLeWX7hxSsST6iEtBpJMzzzvFU0m9B%2BJ8iuzZDMGL2L2ZMRxJd8y5iZywbguA%2F%2BRS9OsSNgSRMdhVNtDZ43%2FgCZPxP%2FAATJ%2BD5ocCFYm%2Bu%2Bsm0FIB0wAFJPU7q32piyaGxw0qZpfnLEncNzFYY2Qu4Um4GsEx6J3ge29UpWzmT8ZfI9ll%2BMuGJbwTLuaEXKPU226luJKgrkA9o60zGoqX5dBZcKfYw8J8wodtG7ZvSHU6bpgAypDg5H1ihy1yfHoKCS0jZa%2FwAYuLbE8Cx0k2bjx9a9P41fvT32MUu%2FRscIuOyxcv8AiRdYYm9tsOuHGV3Kdba4JIcCpn9Jp8KrYEIwj0bBeAGems45ibtM0XeqzW8uwYKYQStZlQHuRNFhnXZf4p0bKt4QvLuTXsoYfcu2t8xidwthmQFNlLhda1DqCkR8k09RUpWi3xfo0l8a8WTg2bmri3H3Zp5Kbx4ODdK17xEdFTVZsjWkZZY16Ipn%2B8tcMuG8awi6P%2BGX9oxeMwrhSk%2BtJ99QNIk23sKEVEYZczSLu4w%2FEkPut4hbtJTKjtM0EMgcpp9G6%2BDZqtsWwXCnF3Kfv8pBKTPStTz3oXwXZLMwZwtm8vstXi29TRHXkT%2FGqll%2Bw4QcnS6Nf8%2FYkxjmM4CLRtKmn9KOdjKtiTWec2%2BjVCMoukUr455NubJbbNsEq1N6glO8e1LTdGnBBzX5GgWe03jT1q08l0OAGTJAA4E0mmnTM8sKRTtzmm9sr1NoXnQjZI3iKZ70ZZzkvxIhm7Hr13zD5ylMgSNzJ%2Bfyqm2KlFNbIA9iKX4laydImdue1L5X0KhihHQ9ZullCG0hbi54CZNHC2i55VHst%2Fwuylf47i9w6ptxLbTCzBTEkiPzo%2BL7spzU0%2BJ0y%2BzR4GWib9h69YLqgQ5uZ3rNm82MXxW2aPC8B3zls7C%2BH2WcJwa3ZaQ02NgD6RwOlJ8aTlO2dDKqX4lwly2ZumHYSlKVAjcHbfeum5I57T7Q8u8c8p19DSkrUdxtsB71HJARk%2FYwZu3LiB5rkndRA49qsuabF0feH7lCfM1IT0%2FWoLcHRYOFFu3SAv1CeDyaqkKpInuH4m00YStsK%2FhPemQbXRfNJFg4NigcWgbCNtuRWiMnYqML2Xzlm4bUG4UVR79q3Y40KcC3WUsrtCCocbzzT1H6M8kul2UB4mu21vbXKk6dUESTTJzaVdCsTSe%2BzQ3FXm3cXUG9nSo7DrvXA8ptyZ2vHeqLryRhq9KXFpJXxHEVhVuR0FD8bL6w1nQlJCVJPA%2BK2RekkLnVBYqTA3nod%2BPzq%2BT%2BhEoIbOKQkGCkxt3o0VxZ4FpO3B9xE1YLbQ8aWeQqPgcVcVsANW7kQnUoDmKOEWQkdo7IBlXUCdq0xXH2Jm03ok1m5PClTMimc72J57psldk4SkDQQO8801NegJOyR26hpEc9TPFPjL0Kal6D1uQkp2OkHiaNMBprskdqsJI5mPmtEfRmYdtyn06NjPzWgGTrbCiN1AzO9QxZJXIdtjaBPb5p8VaGw6F1NzOgAdI%2FnVlTbrQiWPSRvIMcc1BTZ6GkQorlMGNutQFv6EnGWiNiZ6yaKLouNt0NHWkjVKSD7CmWinC2DnmUqBOs%2FUUPAqMWuwW5awV7nSTVOKXsMGPMD1FMT%2BoqmgXjXpgd5kSToJPftUUilFoFvWiVTAIIiDH8aNUwwO%2FZJBVIJQeoFBwZV%2Bga5ZEiRCpMCRQhJN9Ap60B1EQD1FQoGvWekQQoDj5qENUw%2BQoyCJHA4ry8bR6AyS8owSqVGNu9FzZdnwdgKCzydxPBooyspsyCyjTwY2iOaYJeR%2BjInWSFKhROwJ2qWxE5SMiSk6hBj3pmOVlIcNORCSoRuQk96YXxs9C1LVKeRydoNQLSFx6SSohQPXtV0wXJvoWS60gn0LVCjxvA6fxNC0XUgi0%2BhekBaVEncTSGq0A4SCTbiQUAbQY3%2FeNRSaIscgi3cfh%2FCgHn2orbRVBVp4aQJMe28VayfZAizckiIAE%2FSmJkoKMvqRHqlPtQtJsugg3c6yCsTz0iaFwroBw%2Bggl8njSExA9qHm1oW4tDgPEwYR33603mikvs%2BDqoM6vpRrKvQ5NL2eeceDEniav5QtGHnGEmCO%2FtQrPsRNPs%2B82CZMfBP50yOVMkYNmHnACTJgzR80TkxTzzMAIPuDQ80U3YsHSJBAP8qJpNFCyXVahz323pLiQcofVAMBMbVHKkQeMvEFSZ2HMGjjkTIgk26QNlCOu%2FFMYbVDtt31BJg79KJSdUBXsdoe06SFTBigaIO0uqRGokjmKJOtgyVoUTdgAiR7dIpimgPjYv95HOnv1ok0%2BgXGuxNd0dwkHaOtWUC3bspUoqVpI5npULSt0CLjFi1IERzJNLk0%2BxkU10DP8AuBta9JVB6b81fNLoH42Mr7FEOtlaFAe9RTD%2BBlU4%2Fjn3fWVKCQDQzkiQxuynsw52FkolVwUtjtvP%2B1ZZyfo244%2FZXVz4o2jpWkXaVqg7cf3xSHlrRojBXRSHiD4ktKt3VMLaDqQSN%2BR1FRZl7HwhfRzd8WPGRVndPsIfKUnZIKhuT27Vlz%2BQmqRI4WnaOcni54ququVrsluIVGlwA7KP99a50ci5Wwpy9I1QxLNwxtxSHVBt8SlRmZPvUnkXoC2QfN9kpeHBxKipcEJgjmP4VnavsjZFcm4u8HG7fzBq1EKnt23p%2BLNxeyJ0SK5y4HLooX5%2F3V8kKjcJBG3671qXnR6olr2NzhjyE4FhV2lxtxkaFQf9X9KXPy7%2FAIokYf8ASidZdwxDOcX724bL2XcPYVdXYJ9K0JEpH1Xp9%2BaFeU2qYcsU6soK9xbF8y5tzFjF7cruXHlLeRJ39hv0isMpuy140uyKYleKW4l9aFFz07hOyR2ijXeynBrTWwfh2YD590G3QptSiAmfxEHr7VtxTl1AJOS6BV9cebjNm7bjU2FJ1g8oPUT2rRkxKW2PjmklRsPmm8au8g26LJCdSUpU4I3Ck7isvl5F0jHKDvsguQ82jGRi2DrkL%2B4LddUraCkgbe%2B%2B1YozTCnjlFKQ8fuMOdzNZOWbZSzbNoSQJ%2FEEzO%2Fc0EkbcU7WzsbkrMdraeA%2BSs24mhhbVm1cXIceSSmUpISgDp0k0y9GqEvZnmPPmH5hscm5xefZu8QWpX3lQSlWt4o9IKeAAng1JtvY6MG9o5PXi1jFcbsk26ncSevn3HFJVIaaKyQKTRnotXJF%2FbZVx3CFX106pq5s3bdbQgHWoERuDtwSatSrY3HkceiY3ON%2BZjLFup1BbVYhojn1atwn22iKFzQ35k9IuTGlovfDrLzTbCLdu1YUnYDzCpROtRO3QCm9gOd9miGeXE3FtcLd3Z8lXkk7aVH%2FAIoE92Jad7Lq8TPR4a%2BDmHvguou8LbUE9wQYE%2FNMky3FoqvwvexHK%2BJYe7eWZZX9%2FUylROziZEyfk80CkwG6N%2BPtNJZwTL%2FhP%2Fh7ls%2F94YU4kpBKnJUjZXuASfrTaLbbWyn14t9wvcEOHld1ZG7IQoGCY2VPwehqAqDX%2BCWeGGP3%2BF5%2Bw65w37w6BiScRZSjcICfxGPYTQ27odHj2zqpjGcP8b8VMNet7%2B2aYxq0UhRjV5brSQpB26lMin48jTpGic4taKu%2B0nkHDsTy3lS9bw9lvEjb67hxAJFw7JOkjpxxWiba2ZI%2Fk9GklnjdrmXwzyZYXDKE4lh%2BOPYeQVepxpatSQR7Vh5I0Lx99k2zLgOHZad%2FxK1Qq2s1vJIQQfwjr%2BdD%2Fg0Sw8VoJ5RzwvD7y0dTcJTbLfgJG8Cepok6Yv4m6tkm8UPEW0Xh2DpYcSW3Lgs3An8IJ%2FjxV5sgz4qdRHmHY7YqwWwxBTgectXErBG%2FpBETVehmHBK9ltX%2BM4Xm7FcMccYt3GXnUqOsg6UQNoP1oFN9DskH6NU%2FFrIeXby%2BuXrO3i8bdWShCeUD2%2FpWefkAVq%2FZzhzxlZxnHH3rZKghBnSkH0matZL2jlzlyekVhmjCLtWGKe0Cffk0Lk2BxZBbTAL11ptbjbqtXXmPam4kq7MeWEm9F5eH%2Fh4L5TTt42VFO0EbjrNBkyuK%2FHZp8b%2BnzlK5G9fhfkmywewvb1xu2SVqQ0hIgcbkn3is8szkvyOpDwkuzfLwfvRatuusKbbEET3G1Z3jh3exkZKCNsst5hKSBrgkFUTMf3tWjDxi7RnzZIpE9RjybqEKWQon1Cdk%2FFbYytmOeSTJhc6bluwvEHdbULnuDFdHiqBt%2Bxeyu22ZQEhS%2BJ6UideinY7%2FAMSLCgT6RzsZ60DZcv0O2cxJP4AkI9j1qJWKk2tWGLXHTLaVSFSIEz%2BlVVMFNeyz8vZi9SEpUZEcDpPNaML3sJySRs3kvEVvJYIUlaBEiPeuknTM2XIujYCzKlWiVcQN5Fao2lZz5wd2jXrxRbW43cI1J9Q9W34R3o8i%2FCy4Q%2FI1PwrAfMxVa0o1KUqSqP4V57LN2drHGkbEZdw0MtNwJjpEVnrex%2FOkT5pIQkNzttz0FGnTsFysyUUjaTM8HrR82TixFZPqGokneQanMp19Hgc1qjfeiixbx%2FQ5ZWREypMbjtRp7FtBa2XpA9Kp9zR%2FIyqD9u7ukxInitMp%2BjOSWzcJKDJO%2B54%2BlSEvRUtKyV2bqgUAKMe9aMYpu0Su1dOlJEGdtqbHsVOVaDVqtMSQVewpwCkSm1UCAob7TWmNaM8lRIrVQISYkkDmJrQmJzfxYYanY8p3JHWrTMir2EmxIB0deKLl9FzmmOFEJEgCeTtxTYuypSsUbbkFRSZ6T%2FKnRSoo90Kk7A9RV0hctdCK2gZBGmaHgCpMRcZ1z1A4j%2BdVwKTB62gZhMqO8daYPB7jIAUIEDbcUMo2wZX2Dn7RKwQE6filuNC%2BTBbtmZMpTPtVUVyYMXanokmdj7VGygc4xA2QY96YpIbGlsEP2kKWd0nkACglXoNP6BjtqDqPlhJmDtyKoNO3QOetFJKSBqTuZqgniNHUqUE7FRE7%2B1eXO5Jr0fFWyTMAbTNQFM%2B1gkECE7nczULqzNDgBJUCUxHPvRqLsGUdaF0rClqgzv8Al%2FcU0W4P2LggkayZ%2BakXQtRS2LelRAOw9q0IrmfBYAO0JiN%2B%2FwDKpZTV7R4pRgFWoHnei5sOK0OWVoEaydMjgcE96BBJL7HjbrUrKTA4BIg%2FSKCUWyteh6y%2BkhIBV8Hr8UtpoS5MfpfTEBRHvJ4qRey8dewlb3AAOoak9xUb3ZU1uwqzcARER%2FlJ4qAhFl9QKSQUH9DUpeyJBJl8EiFFKoo1k%2By7HzbxGkH9etVKaZVjkXTYCdwOtDxb6LeO%2BzJFyFEJCid%2BO9XwYLxUKl4HYaTBMDrV8GUooTL6QFAKUU9aixv2FR994QFGSIjaetF8ZFFGPm%2FvAgkGOtMA%2BNCoegxKjvFA4W7KeNmaXoJG4MRBNMi6FscB5IVJJI%2BtGshEOm3gepUIncc0S%2FLsKL3sdtPAJ0gGZj5pT0yn2Pm7gApTqIBEx0o4MpsfNup3kQe1MIOUPREk6egqEHSnU8lWojcTVxe9kPPvKQmSok9hUl3ohl97BSIKlDkQaik0VKNiKrtO4CjET%2FtRLIwVjVgLEMQSnWFGR3Hej%2BVfRXx7sg%2BJ4whAcQXRM7b70mT9mhJMpXHc9nCXluLd%2FZgkSTz7UHNDPiBbPizZOshYuBpWN%2FWOe9T5EMUfsrfM3idhyy%2BlT5bcg9ZANBlkkVKH0ao588T2Wk3LfnEoMidXH1pakmrHwezRjNvjorB8Ru7dvE0C4SdTagswRPFczPmuWmNUd2VRif2jm8VWtp%2B8bbuT6TqVzH1rI8t6bNOKLZo74z%2BITuIqcuGHtLaTMpO8z1pMmu7GZZqEWjSbNWdLt9oOKdW%2BnhUq6Uccal0zC5ordrMaBiQKQpJWdwFczwfmiXj26TCLFtLtWMWVyylanPLE6o5HBmlTjxdFtMiOCYVdu4xiC7VQb8pHnc%2FiAMbTQN%2FYaxSatIvews7m%2FwAMvPPbeW%2FbIDspMam%2BsxULwunUkN8babdxu1DTUXLDKQCSJPpG6u9DJm%2BOJRPX7hFv4d43dOhtq5xO%2B%2B4r4BS22kqP0JP6UWOuLTK5bo1Nub0WeMuNWp0I8v8AETsO5%2BYpcIW0hWXyK6Ipd4g4C82lQ0uNk7cAzsRNb34dNNvQptyI9gDqnr8yoBJ1TpH73%2FNKUvjeheQdXN4bHFnVKUhSHCCZJ9Jnt3pfzTYHFl55dxm0xVrEsOU44lSEaiiN1AjcxVzxzUdkkumI%2BC2F2g8RkWl5bsvN3iH7ZAcEBG0gz32rNGNO2a3JzpR6FsVAscZxC8daFrrfdaSnTwASKp7NVG7mWc03V99jLMiLl8OO4S6%2B3bgOK1KDnB5367dqO6VIfil%2FpZn4SX11mTwGaZxJp9WKW12gNqIPqQ4n8RPtpqRlqmXm6pFP5jwjDMGfwTMeHBNyjEmLpCUtwTqbVClr7bg0uc0mVhxKS2Q3NOYmr69yTiNulpL5bSw75XCVBXPNEopoe8EUrssbB7VteZbS6e8t5oqbWhtInVG%2FPzVfH%2BjNJv0bbZxTg3%2FaGdP8Pv02jT6G7q3t1oJ8uREBfT1E7doo5P6KXjyuzn9n7AncK8PWH7lCW8Ru3nXUDUSVNoVpgE8zuaA0ZYRX5PsAX2Zn8WyP4fm%2BxBT9zbMqtWhH%2FjS2siIPzUM0pt69E7s7gh7DcGeW2EgPPtuK2UVmCB89atdgv9l25vxq%2FwA35H8Kbu7edGIWqVtkkyNQOkbdJAn6Gm8kFHWyrsGxNxV%2BMPedUjzLvXbuufhRPpUPgmKVKT9AzSZbWWbzGfDTxGTev2627vCXS4pJBU082oAc8FJBI%2BtVC3LY14qVm62Ysyoy34neFWI4K%2B2nB8RYTiFuVglB1A7AdQB6YHanO0y%2FGxLi02bL5jxc5y%2BzxgmN4wlxi8RjNzbBSRGhxKlFJnkgpXEGtiaeLYEEo5LvRx%2FtrtrAs13GGqceatmcSK1u7AJVzI6SYArFGCRvhGnbZbeffEKyxzL%2BHWzV6p67YCvOQRyCZmfyqpOtrsfljGS%2FEi2UMTZcwpVzrbbdKipCFLMwBz%2BlL0ZXCl2J4hiz91hGIu3biS0t0OMqAmFDtNVJ0rM0XPokORs5lNkq1UXAyWlpeC%2FwkjgCihJvZshOSQRyV4gvM4lcvXTitNuSlkLP4dzFSW%2BjRKSpL2bY5Wy5h2NX7t1evIdceY1CRPpPJI4pHBPtbG48V9moucfDi1t8fx%2B2MhKbpSUAxskcRQylWq%2F5Mz8bGpFT5z8Jm14XY29u02t5ZOudj80v5NjMmP1FFaYvkBjAre0bLLZCxuqRRZXW4mX46kHsntoscTW2EtKQEwRq%2FCayRzN6ZuxSpbNjLK%2FFjZ2VoAXS5%2B0PsVGB%2BlNa0G5J9GymVMwpw3CLdptxv7064BpgnYddqz%2FFJvRilFmwWXMwKYtmnHnXAlROnUDJ9vb5rXjwSr8jNPDyZb%2BH4p5iEnzSoJQDM7d4roY8aQpQRYycwleWgppWos3ASsz%2BFJFbVcoaFuUVLYGsMxpdcUVqKh%2B6FGTPekU%2Fok2kObrMCGlL815IGqdzR8Jf4M7nvQBez2i2CvLWpW5g9KnFl02J22flKeCg6plJV6vVufagld7LWM2ByBjL9%2B%2FbKKpUSJ9h7U7Dh9oVlhWzfLw%2BBSzb6iSdtoit6T6MmR6sv1zEG7OyUpxRKdM6e9aVVCfkRrJ4g5hTcvOsIUoAgbDmJpPkZK7CwPkyJ5WwsKIdKQSTJVHWuTkmm%2BqOyoa0XLaIShIEaY996uCQyEWh%2BFlZHITEcTSym0fKcTvA3nZJ5qAWNFLVqV6j%2FfSabFRYbaox1QQSdx7zHzRUl0LtjllaVFITJB6zFWA42wuwsDcASN9tqplcK7DFu6AqZJMfrRxexTqiR2Tu4JJk7jitEexU6JRYvwNKlGYI%2BK0uX0LSSJVYvSdOpSj2pqexU0iTWzqARM6SaejPOFEnsnQEplR5gH%2FanQa6FTRJbR2ZBMR%2FGtMOhGRWqQcYWdtwR2mKIx8H1QYYVMGOu9Oj0NjGlseJAJ9Uq2q466LeNL0OUqBJG%2Bkc%2B9Oi7JzS0ZlKF7%2Bk0TdFNJ9Ca0AeoiR0qxEsQipKdinUDNQW8bEHGgpJ3AMxxvUGKIPeYCep25PvVpL2W0roHutwCVDado2mhaAeNMYONahyreluALi0DXWABISOtC0SMUwW42JI0rHTer4MnxsHvswD6dR6UIUFQPetwoLCh154mrSGKaS%2FYMctilJUgqUByYqMCOWmc8A5EJ1AbH%2B4ryx6lqxRLhOyoIPHq4qAcDGZCyY0fqTUBuujLzCZI5MdaNTfQDdHrSyVqkFJmRvz7UwFzTVBBpw6RqUCZ68j6VKFNDgLOkkQTsZ70yMt0JkqMyqdIDYPzyKY3RLtUehUSSEp2jmaDk30Sk%2BmeattylUj5kd6YHwR6lRTwAO1QipOhVt9YMpMgcfFDLoMKtPhyBqBVtFIDcfxsJIuIJBIk81YqUbCrVyNIIASeu9QH4n7CTb%2BokCdMSBO5qEnBJWEm3VSNxH8TFQWEEXBKIIggdOvxUIOQtCiJImeRRKTQXNmZVp9OrbtNSORspbPdauZlXMxuKcE2fBSpBJM1CnIykmd4qAnutYG8RMmoQVLiifxBRNQtIUDhKhO0DnrUFyx%2FQulyDBO3E81CoTrQ6bWqB6oolKg5JMctuGNiJ7nrTY9C5RSQ6Q6dt9J4mhdgDtFzGnUTsRsKq5FpC4uE9CNU8xU%2FIvgzwYmEqCHCnVvHY%2F0pgJi7frEgKTPPNQgIdxJxsLuGVBf%2BZNBGTbIJIxoOJK29JjlJ2ijIAcUxu3cS4C6lK%2B00MnQyMLKJznmheHIU6SkJ6EGTVL7GRxtOzUnOniS04m5aVcJO50yYg9jWbLP3ZoUbNNsx%2BNV9l%2FEH2vvLgtTKgQOPiufPypLo0w8a%2FZXuOfaItnWAl68LLyknQSvckb%2FAMKCXlya2g%2FiUdGt%2BbfH5m8DjTlw6tIEFM%2FP5g1nc5P2OWKMumaT%2BJPiGi9ui9bvqGiW5C4MESJpE%2BxscUFpmu95np9FwtaX1KJkherikW30GpRXTK9x7xHcVb3DNy7qaWfUAf3toNXUnoRlywlpo18xLMarwKSSGQpekq4AFa4%2BPKr%2FAPJicIAW7v3LZ9Kg75iEqEADoeoNFxknyhX%2FAHHRSa0X34UYihvMwwy8KXMPvGCAqICVKG1InblsqPJdFlZw%2B4ZQvncNtG7Zq%2BNmG7hSZPmTvBnttS5rdGz5ZqNvsM5FzA47esOturQPKLSwTAWkjce4q00Kn5EpQ5NDjFbVN9jWJvWiilQUE7bQkif7FHcH2Hj8hKOyJ%2BKCkYfl7Kli3craWu1XckTKVLUoj84Aq8lUlFCYSi%2BTkzUdjEhbu3JcbUrU4QNXzV4sEm%2FyFpclaY0urhD62dDTTe2kbxv%2FAHFbp421URkX6YCw5RauCW1IS6lwJUkHcb%2FPBrK8T%2F1CJKTdUYYw247iaGwk%2BolYKhz7VoilDT2PRPsovlOOYXfIUFhSS06lBEq%2BevFaZRXHkwcibWuycXVwm1xLC7iyWEXCbt1CkR6QkQdWr864%2BWKbtMmLLKJIL90YsbxzyUoabheuZCj1j2pEo7o6dWi%2B8Edvn8PYytiGHiyy7f4eX0%2BVslwpTP4ep5E1OLDUqRuQMuDA%2FBa%2FtLazYF5d4Zb3VsUQEJLaZ0qA5VBO3xRcNbAUkzUoYAvE8pi7eLNswxZOuMkGCkqB9Mck1SSLUGa%2B429b2HlYN5YDrKfMUOCTAJ%2BKFMN5ZVRcWGt3NpeZFxNtAOG3LjGtIXJWiJIP5c0XNjcfkJdm%2BPiLlDELvwhztimVsMRdiyxFt91fmpUbC1VsnUqQFAE9B1G1FOLatBZPL5T4NnK7xHx53FcPwTA7RJmxZ0uEiQFySoDtJpELrZkkvRXWFuJtGrFm6d1t6llKVH%2FNyB9f4UREbQZLw1zH7XB8dRbm6atHHLFbg3Bcj0CZ5Mc0UYu0W4M248UMg4BheT8rZxy4%2Bq5w24wlDq7VCFqdTdpGl1KlfhTBJHvTiXqjUfCXLV28yu0tCipq8S%2BW4JUu3JEkRyJEVnZFFs32Yytb52ybeY2iwWyp63fZuX1S4r0g%2BWERwdQGxp0Itpsc8sU6kVb4cZyxa5Y8OsHzRh9tds4bcP8A%2BGXTqIhCz%2BEE9AsE%2B1VG%2BxU5Jv8AHRvRcZwbvfA%2FHMsqbTa3TN2i7bZQrT%2F8pDxbXI7QUnbpTOT48Rax0%2Bzk74lY%2BxYtYfhb2GvJxF%2FE7m8u7gj0lAhKEA9SIJPzSpyo1eLKDbT9Hi8btjk9yyt2mkYi9oeK4lXlGe%2FvH5Urnav2aMbfbH%2BV3ziVzdYQH1N3Vo2C0CdlJABO3Qnf60tNp7CyQfbJ1bec9li7sV2yypq9GlwpEhs0yTpAwSQytbNwMNWloC35jigiREjv9atPRJX6IhiPm4a8q3tVrDgdAd1HqP4jelS0ZoQm3cjbjwyztdodsra4uy235CkoIVuIH%2B1VKovs68PLpdA1eKDFsVxfFLh1UBR3H7w680t4XJ6ZHki3YMLzS8WYS8nW2UnSoiY%2BlHLx5R2Px5daKo8Q%2FKeQotsp1BcIBHAnp71lzTfQMp7tkWyHk68xXGG1MhRacUEKO8hMyevSlRT9EeZNdl15hs2rfFivDkJ8tACEz%2FpEA%2B1Pc09GOTp7dkvyZia7%2FHrWxW6hTaRxMJ9%2F4U%2BGF9meTfZsP%2Fjja79FpahKktbAJ4BrVHHIKc3FW0TD%2FvpvDmFtKflYG5J69RTFGhCmWVk3NTuJ5XzalTp0jyX%2FAMXHq9t6fCdKjHl3ITYzMxZNlbiisHYyQNJii%2BRLoPjZC8U8SUOvOtNvJWgc6VnYd%2F8AageVsjg2RC5zo66oBD4WSCAD1%2Bf0oLYlNJ1ZN8pXb9%2B80VOFZKgCQZg%2F7Ve5aHNq9HQXwkwdTzlouFattx89a34INKjNnk0to6LZHwz7vaMqCZOxn%2B%2FitcYezBLN6CebMQW3bOJRGwIKiaYAsiNabppzEsUWN1JJ3JFcvK72dDBiSLQwWyTasISI0niep%2BayXuzdF7okqFEwCoDrFOcl7GV9DkOCANQSZ4FIr6EuLMVL43JMcdvei4MnBiKlkwdIUO8wYq1FoBpifmKPGx5jiKtyaLQohajpKSSo7HqRVRm7ph8NaCLbxB3IIJ3HammaSa7DVs6oARAB9%2BKgDV6JBaPTpOkEgn6VohK%2BuxU1RJra5gJPO8metaYJPTEyVslVo%2BpZSRIUCKeC5%2BiX26ztunmYpsGLmrVkjs3jqSQSZO8D9Kfj9ipqiUWixKSfSY61ph0ZiRsLkCAnV0npRic2loLMqI5j86bBiVBNWx6ok%2FhJ0xTF9Azil0P7cHSIIJJOxPFMUfYUJPoeJG4MyfpVTGCakiJIBPaelXCexMpWYKa0kgq0mP1pzmCJKTB336%2FSgINCJ1agNzAoWmBN09DF5rfUO%2FUVIplwlfYNcbAJ2KuvPFEMtDBxrUQJCZ3mqpAgl9EKACQTxvVSddBqWge%2ByvYnY9R2pSV9CufoYLaWNxvuQKtxZHFPYwdAVJKTyP7NFBFcEcz9YIChAKjHzXhoTktI9NBnyXNlphSlEcCtUF7GsWCjI0jtPtRipmUkAmFK%2BNvpUAFEKlREBW3zRY1sg4Z0j0n0jv7f3NOBcV2EgQRulU7xIqGacE3o%2BJJIUQoSe1Si%2BCMdZEySQfrVUTgjFxckklSQODUoqEaPlLHAH1BmoMeF30ZIcPKiT6vyqC54mhdt0jSdjJgipSLvYURchUJCSlR4%2FwBqsIKMvjTOogVCBW3fSsjnbbk1CBJp1KpglM8CBtUKasJNOhSQQozxxUK4Idoc0zsQRxPFUD8YoH9RSR7TFFw0XaSqhz5pWomZTJEA8Cqi66FtfoUSSYIkk%2FWaOMneyjILBPpkkdO1NIZkztG3FQh4FHgid%2BewqFO%2FQolZkc1C1fsVSqCDqG24qATXsWC0ASSAPY0PL9FJtigeVElX9au9BcU%2BxUPhMS4DQqTvojivo8F06kFwBCyB0JE01TYDnQkcXakpcKmHh0Vx%2BdEpsJNvoEXmNMaiFrSF8T2pbA4Mj7%2BaTbLU0txaQRtKtlfB%2FkaJTHQjqgTc5yZYDn7ZIHY81UnZbVETvvEKzsybhm5StoepadW6aoohONeKmDXlu%2BpN02y6gTqCxvtwfaoFGCNYM9%2BMmGuMEC8aUUqKVJKh6Z9uRQSb9Gj46RpV4i%2BIuHX7N1d4bcpavG5GkLEqFYJ%2BRZcFs5%2B%2BIXikpRvGnXfMfCSlPqnjpWCeU34sclt9GsWJ%2BJ6b5DmHOvFq4SoKSoK%2FEAd96VF0Oz4lWiscwZ1Nu45cNXXmzsAs7qqnNmXLjknsorMecnb0OgvpInoeP60KFzg49laXuMPvMB4OhA6alxNQBOyusfxZa3fQsBK9iSrjpS5djIQshrt%2BLllxpDiUrjbedJrf4rlLT2gZ44%2F9IUwpp%2B%2Btbi1eWFPBICITuozT5vGlTCjjin%2BKNpMhWDYcw5q6ZUh9CmwN9yCQDJ781y5OKla6N2OFLRaXjJgDGJqazBhY%2FwDkN%2F8Ax7lsnmBCV%2FltVT%2BysGNx0yrsFxtzD02TwQWrhLeg78xsaWXPIk6aJh%2F3KiyfxC5deDlq75QSdQ9MAyP16U66oy%2BRL8qXRGvFfE2sXXlxRHlMsWDaUhCYCpEgn%2BtaJYpxXKPsmLHCWmatYjdMIxEOMuJU3%2B8DyDPNV48Z8uTsdkxxjqIQzPZ%2F4W9aXCElLCUIcTv%2BKew610MmSL37E36I%2BxcsKuHb0t6UGAsTsDMzHbrQvxufbssIYoz9%2BvbG8D6PILa0twD6TG249qJYUuikqRFcu4ov%2FHWLdK1gJcAIEbQdzQyi0qbByZUtUXC%2Fd3CrpxKVQlKiqJ5nad%2BprmZ8aStML5JUtlkZUZvMXwu%2BTZMK81po%2BbBBCUg87dYNIRqg5e1Zv1beG18%2F4M5cznbPqedsVuAKWsn%2FAOMv%2FKNiPUB%2BdP8AXIXLLLlRaGd8zt4%2F4I3L%2BEP%2BVmPBEJcdaQkQ6gthBSQeg5pU5WqHYm1k2V54UZSevLQsYrbpVhycvpvFKCZSXiSAmTtwJ%2BaBLQ%2FJOpvic33sQXmLxJzc%2BkKce8x5wIWNwBtpj2ihv8gTY7Id9bYxh2V7q%2FcQy5hts5bKTuQFidJj%2B%2BKappLsSoST7NzMKt8SvsOx7LuJOIbsb9ablsT6XR5JKdI7SKqUrHXJM5m50CLbGW1lppHnam3UpMevcUL2MyW3yKfxZS0XWFWiknShRChvqTSZwa2mLNs%2FCfMdjb5XxzJ1wXCHgLtlxpRC0OpOxIFMjlrsfiyJaN338xv45lHCLa3tmr%2FDLnD1WJRbrCfuuIlsqCjtulWkkg7mtClqysc4qdmj2Xbu6tcx2uL3FoRf4DcIVc2a07OW5XJTI%2FdI1fnSPldnVllhWjuf9mWyy%2FcYDi2A4laN4dhOL4iLqwSRqDSHED9n3O6RHsTW3Atcfs4XnybkpI0I%2B1Rke5yh4iYNk%2FBXFowLLqEoWEgpK1uqW4sq34BUEj4FLn%2BLpoLFFcLZJb3GXbnLuR80YU%2BbRNxmBFvidu6koU4pSEyQDwlQGqe9U5V6NGPGmak%2FaJw7TnHBbG3CUsJcubgECU%2Btcwr4FZs7tjcc0t0a7v5pfuby7UhSwq3t0NwTAAQYgUHJrQyXmOrSLHypmCxS%2Fa4kVJt791KkL0rKYOnY1Tmxcs05%2Fo2m8KMVw7HLDHcOvFJ8xmwcugowNS0g%2Bnf9Pk1XJ%2FYWOSu2h7hQwKwssJaumXE4pqefeW4olIRyEgdN6O2lt2PTi%2B0VYLO1v7x7EWkXD7C3lrHmbAkngfkaXDJGW%2FZMmFx2DHcx3jF%2By1Yny0tLKDv0J5pf9w5Oisbp2y5snNJv8u3N3cPqCfOIKp3H9zVuddDHDk7QliGKtsXYEpKAdM89I27cVJ%2BTJ9jlC6RWeaHy9fWzDSjvClTWbNJt2x0scX2i1PCd5NnhuJ4iq21OgKYthMkuL2kd4FaIq4IzSxRi7RPbjDJtS5BQ4EyskSZjih6YE3aoLZAys%2FauXGJgqU8sSgwITtzP161peVv%2BJgny5cS47TAzb2bl6pxa3j7bq57U%2BPKrkwJWu0VpjFvev3SFNIWsFUr0kyNzxVyTYucdFu5EvLrDcrZ3cuEqCVWzKNRB9J1yD%2Bla8bVbMTgnt9lK5p8S3A6uwtFuCEDefzikTkv9J0MUbX%2BCEjNLjYCm3kkKPq3Mil2ykovQ%2FtMy3L10A0SkEiJMwOeKrjqwZYYNaNp%2FCBt1%2B5ZUtZJLm6SZTG8wBTYxvQUYxidevBTCApFr%2Bz7bdenJrqYHoweRM3%2BwHDwzZpSEqUqIFbYvdnOWk2yJZyZBQv8ADwRv%2FCqborHFXaKsw%2FDAl%2FUlBCiSRFcjJvo7ONaomDDQbCZIEcQPak%2FGx6VMclaB7iCOedqjjRJM%2B8xKp3AB7dqFFqaEyZJIG8Hc%2B9H8jDMVLg%2BoDfeaFzYtzZgHJ0kAJ778UDyfZXM%2B1aVEBSPM5jeqU0Bf6CDa9oIMdu%2FtT4y9AyVhO2dB0qSoz1NMFNNEhYcAUkbz%2BVHilUrYElaJDZuiUqMntHatfyISS2wdCSBq1TH0p8UgXKiZWb2gAbqPeeabDsyym0yU2TxlIMH68VpximyVWqtcbaqahBJLZWyYMEc1oQjJlrSDbBT7AUcHsRBu9hVpQBHYUfJXQ4eMqSZCRp%2FQU2MqJfoep0lOwBnYxVuSaAnG9mSgNMAlXt2obXaFHpKCODG3Tmr5MWlK7GxaBUAVH8qYsljBusaDz6au7LlCtMZOo1I2TqG4O3FQBRp2DnUp3Chwe%2FFU5boIGrSRIKdQ545qyA19sq3gx260qcfZAWsATEpV1oCmho8EqKhBBnaKsVKFbGTqQZVGlXtUCxnK1t5UJ1ETsRH8q8gsZ6ygg2NQURCJO5HaaNJgynT2LhKklR1kEgARvFErFzlZmNShJ23jnrVpAikEFJ9M8kEc%2FwC9NhH2QcpEeo%2BZHAoymvscJJJ9YJEQBNQTKvRko6fcnmP5VRcFb2fFxJAClzJ%2FKrYDG4XtE79ienxUH8Y3oQW6SrSSAqPy%2FwB6oFzdmSHexSrqfcVYf%2BGO0PHkKSAeIHFQCUNWPW3gNJB0g8TvFQWEGX%2FTuZVOwnj6VCBe3uBsSRM8TzS3PZAvbPKIGoA8%2FWiU0QKsu%2BkEnfrvREHzTkxCpM9RFQrkhyCABMTETUUtUSxfVI3UJjtxVURwsWQdMgwNuR1q7rYqUGhckmSSABxRc2CKQdIJkH5q4ydksyAmNz%2BdNIYmQY5%2FnUKlJJWKJVtHpSO4JmoTswOsBWiFp5O9Qs98xTcklenqeYqFsSLjTiSUqRHUgwajkWosjuIYs5h6lrU7LEx6uKXJJk%2BNkNx7NLTVs5cKWvQBq1pMgD3qJqJag%2FRqZnv7QWA5cuXNeYLa2ebMlKl7GTtI5TQOTfaKmt0UPm37YNjZ2bl8xjVhcWvllZAWVJVHSRx80uebgujRjxXpGqGZv%2Bo7ly0u3bK6fXh9yhfpcU6ShR7FXv0pa82NWwJwSdMpjNX%2FAFGMNuituwvLlF4JAUeFpI4I%2Fe%2FlS5eb%2FwBLLjCPo1Uxv%2FqGZosMXuLRTfnFJKYC9lpjY8bUmX9SyfbNeOK6ILmH7WmYc3tru27py3uloAUoLOojpPcVnn50n2w8nhzl2a%2Fr%2B0nmhrGV2N7euBMnfUSB9DSXmsH4JR12Q3HvFK8xC9Nwl5aySTClTI6%2FnQcbGRyz6ogGJYpc3DyrpSHUIXJCgPwn%2BlEpV0M%2BbI%2BkR7FMTW7h5OtS3CNJXEaFe9U3fYjJDJfKZRWLY5ctXK7Zx3QsHWn3PX6Glt10Wvy2wLcY0%2Byyi71emIKehB9quE90y%2BKI7it4F%2Ba2FJWFpCk7cH2NPcoJX7LjFdAnA%2FOOKW0qi0chCwQTE7UmeS%2BmD0i7hg7%2BBXSy64lBTGlQ%2FencUKj7JHIr2bOZOetcWxvKdzbnzA55SbhKgRChySexj8qjgdfHmjWiW35Ti2MZgw957QgPOhOkwSJ9MieJA%2BlC0Onli0U3idg8rBrjGrBJWzarLdynktKBIM9uhqIySa7KxxfGH8QabtrZYKFArR%2FqUBvRW7owZYx7snmc3EXFrhbDjqS67hrS0kqkJ9PHtvNdJ8pRSixeNR%2BzWzH1p12qko8pYMK0xv0%2FWgxfJF8ZBV3smWNtXeJZTYduA6UpRDSiBMDb9BTZ4N3RlcZuVIgDaUqsltW5dKnWtJjnUB1PTms6lKDuyvinfYtlR97EsKt7UrcVdW7imSmZMcj%2BlaZfktPY6nEilu%2B7hubGWnEhsF7SdQG0msMsc1tsJzb2XALhq9zHaW7jrhbcISsgRpA%2FsVnk3ewY5Y9I2B8ObtrDLtvC8QccssHxFx2ycuUESlZHoJ9pHNEkjVgyTk%2Bjph4O2F7i32fMw2z7C763wdLuDuKLnq8zzNbbpE7J309Zp6rjRMilzK6yPl%2FGMEwq%2Bv79pF7bYzfPYfcMkghCVJAEE7CD1pXFGik3%2By0mcHxrCcjY9lPCX0XOIJtkrZRcIJ1aNStCSKjSoKMPfs454qi%2BwHO2L4nZ2xbLDq1XMJIAJ5Tv0O9Z5Jdhpejcz7OWFYVne3vsKwu7trbGlr%2B8uWzwCi6wZkpntvsNxtRYcfIvJHirZbt%2Fnu0ytZWmGLacusRtLdy1SpRKFAoUSkxzGkkfSpJ09gNXs50%2BIuOPKxVxtBd0%2BfrIVwJ3n9aR82wuXoi9%2Bp56b5LZfudClJjqY70U5a0UXL4LYkxa5nU7cpRboZZS4raRB0ggzzyaVjbbplpP0bJu4ze5Us8VwRrEHU2SL4YiVjZeoAwEx3Sog1onNrSIvHk9sg2VsTwnGM3YjcWr5bYcYNvcIWYVctEyCRx6SY%2BtKtJ7NUIqqZ%2Bgf7KVg234f4fel%2BzvbawQ0%2FbvKREpQNRhJ5UkykjpFdbx5Jq0ZvLxW1XRqH9ppiyzJn7xQzNdtMN3BdYuG0Ef%2FwBXYrSkKdH%2FAO7PPNTK3L%2FJSlSaRHfEnIV%2Fh%2BL4tlVS0OWQw20xSxeb2StuAQoTsSEpcE87is%2BWDaGePkbjtbNA%2FHN9V5mBrGrRYKNLVwEaf%2FDqTBTHXoT81lyBznx%2FFGluIY1b4Xb4na3Drn3y7uVwQJhsdZPcn%2BNJlkS7Er7H2F4s%2B%2Fh1ioPOLeQgr2%2FcI4356VLN%2BCTbSaLr8Ps9u2V7LrqkF1YaWrVtojqB0mjSa2b83jKUdG0jOKtZnbtL%2B3KkBvUwtaR%2F5FKEkR9aampasyrxpJdiNq3h1hcWrLbji2bdhQKSBJXB5%2FOkT8aNWmaoN1RGrfKmIDB1484RDylrTI2Q2Cdye3O9YHCSViM2HlpEkyVjbFhlXE2H9UKUVon9CO3Wm4ptbGQxUt9g7FMSbdw%2BxUhQR%2B1g%2BkEj5rR5GSMkqGY27B%2Ba8OccSwq2M3KWwkqAnUOazfG2E8ldly5LwxzC7DC8OXqcKAlxw6Yh1W5EdwCBPtWh42orYuWRN7LdVhq1EtKUT5pJ9U%2BkUPH7ZHwfRauBZec8i1btnPSpsGeYPFa4RXaMuSLuy3WMug26ElkjQACNO453rXjdqmYM%2B2Rm6y3aIU7DIJPf934%2BKvgzLklvZHsxssYJ4e5guVrSh24u22Gx3CQVHr8UbjUbEqX56OemYMSK8WuXElwIkgbbpPx9ayKezS5UMrTFXVk2zcqHXuqrcw4Qcixsq277921pDg1HrsCOu1Vb6HTwpezfnwWsli5s0BpJlY0kSYPX%2FmneNfLoXNKjsp4KWXlW9uogJBIPv9K66nJOqOZN2bwYWgNWKQVSNPXanxkqM8SDZmCXFuKVCunzS8%2BSkM8eNPRBGwEk9I4ArivKdNNWKh1K1JTIB%2FhQrM%2FYckqMC5Ct1GfbtUeSxbPPMIRJ9Q52FVzRKR4lapI81KY9uDU5ovkYrJJAKtjB6d%2BtVyCSRgHNiUmAe%2FU0MnZTowDxBUZGocGZmqTDhHVj1Ds7lW0gDbimLIMoKWygkoUVFJMjnin%2FACCpv0g8w%2BTuVJjtPFRZDM1QftHSQlUx7zsK1QlfYiceqJdZPkHdQJBHHStmKTfYnJHeiZ4e96RqOroacKcb7JLZvQSQdgeJrRCRnaJfY3BiFkJB4M8fNaBcoUSi1WoQSSSKfHpGOeNt2iQWy%2BNMHoNuKJdi%2FjYXaOocgdNuPpTqV2M%2F3HrSktRCiJ9t6spJBBrcHcd6tA5L6XsXmAQkASQNjVC3CS7PCggDdJ9u1QoSWolJ3g8DfijgguDGTiCd9Q1e1Nokm%2FY2WnR1Me3Shk6FqdugU7uVxAHxz%2BVL5MIauLPEEDg7U30QFPnZSiU6vilOT9kBjpknSEieRFCU1YwcWQTJHaf96hXBDNxRVuVBNQtKjlEhSdlAAEdBXjVKz1%2BWFOx%2FbrUeSlKdhHc%2B1HbEvYQQperSUztA9%2FmmY7YuUPodJgFMREQdq0xVANPo9DY1albD9RRFDhIQlJMEnjY1AZdC8q1g6DB%2FpUEmCpUNEIPEnv8A71C0m3oScWdRKhB%2FQVA1j%2BxEkISlRSAensaonxDZa%2BQAB1nvQudAcXYmFkyoSBwd%2BKHmMxqhdtwQNwd99uTV%2FIMHTTyttWkHr0%2BlFyRUkmFGVqI3M9ASIpbmIcWE2HlECT779KDY2LDjD4WEwVJ32MzR8WBKSYWadBAISQCOetNXQAUZXqTHJ6HrUoHgh%2BklSZSkJVx8VQtJp9CqFDc6lJ7%2B9HTDlKh0g7HSYT8cVTTKc%2F0LpSiQnSCn5qJWA3bFukgAinRjRRlPYQaKyHkA9jt3qrLPCTIATG8bGrKMFu6N1Nr7bVCDVy7aRKpGniaBzRGn6IvimLWNsguh8I99QmfalzdvRUFJs1%2Bz341ZfwSyu7W7xJLiY0gKiZnor6dqRkzRj2zoRwtrizlB43fbqt8kKxHC0X1%2BEwQy8yUuoA6hSYkHY0p5U%2BmVDBki9I4qePf2xsw5zub5%2FCsSwu8YVyULAdEdxMx%2FOayOeR9DpJNbRrjlbxE8Q8yOuNDFbm0sHjpLgcSUcdUat%2BKpYsr7M85Uvx7N0cs%2FYG8dfFLD7LM2X8xZYx%2BzfSF%2BUsuW7424UCFJ7bg01eFF9syN5L2izcr%2FAPTbzrd3tzlLNz1zkrNwldkm8cQq3xJI3IYdTwv%2FAEqFNl4eNKrs0Ynkkq4kjxr%2FAKS%2Fie7hV1d5axNi4zMhpSjbXAIbuQOiVAbL6R1pU%2FESVoZHFkuqKCtfsZeKNpdFlrA7ll1DLjdw24khTD6QZQR9Njwawy8d%2Bzfim46loonGfs8eJC75No%2FlXEbfGEupbUhTRBKFfhInkUn%2B33QX9yl2Cs2eBedsr3ykY9l66w%2B5YbCnAUEazEyNt9qqeOUR8MiktCQyiXcEL7Q0NoTrKFD8P%2B1BcgzXHNivuF675ICm4Mjp7%2FWiTdWT47VMpfGGk3zH35gBLyJ32Kv9oq45%2FtFY0o%2BiFXy3Cm3DmpKFfj3kA075tUkZ887fQVw%2FDQsM212hLmsw0vvSbEqLfQUsMLYtn3WX2hrQo6UyQAfeglNr0Px4V7LCvL97GMNVbBtCylkJjqFCmQy2gZ%2BMq0WX4R3bysz5d8951ltOlEgRPqFOx%2Fk6M8Mcg3nu8u8r59x51L48hxbognSCCdoNBmjUqR0YZG48Srmcy4jhtzf%2BUtTmHPIP3lk7hxE7k%2B%2FvSk6I1aohAR5l4HLS4SthLhU2DEgEcGqjO2ZJ%2BMyxs14deu5Pytjj7kFtJtXCB%2FlJjb6121FcYyj2ZEuMnZR90v7%2FAIh5QaK2h6gVJ5ofilKXKx5Y7rrT2XRaBtCAhkkpnqB2rRPByVOya9lI%2FwCLJGIWDiG20MBJCxp437VzcvjpOkZJ%2BRTpHuBFVljWK3RKm7dUOtRsQZnatmCEEtBSlJroY42ld3jFtiKko8zzZVpAkzEH9KV5DlbSEqM7olTWOeRiTbqlKCvLVBB%2FAo9Z%2Blcu7tm2GOJetnji8VyAy7bWxaurZ3yluAQhwxsZ70N3Z0YLibwfZ%2F8AEd9rw7vsN1NhGI2Kre7CD%2BNxJgrIJ%2FEOJ%2BtNhIpxsuDwhxqzzJlm7w6%2FtlXeJYdizIaKACt5rb1bmCBCZqc60Wpb0XQ3f3tpn4W2N%2BYMHXfMPrUVaPKZIKFx%2FmEESKCTb6NWGW9GhXi%2FkmwuM354wHLhaukX14tq0dWn%2FwA4SdoI9qU3IqeGTdo10y9d5p8LvEnDF4dcP2WJWly2kpnSAnbUD7ETUhk47AyRl1I2fzC%2FhmZPErH8UauV4bgdxZ%2BchtRCtC%2BCmeZmT7gijyy5T5GOLajxNRvFDL9%2FhWZLizvHWX0ONpKFgSVAnb8hWeULdIcpXsjDKk2jqEW4W84xof1AEbDkR8Vd1%2BJaL4wf%2Fttu%2BtcSw25Atrq8SXEKVOhJAChPsaJKyW10Wpmq2tcLfvcPuMXYDymVHUDttxEbdeaqmOxOT6KS8PcTZy3nPBrp103CF3CUupXu2trUJk9IiiT3RoXiTa5I%2FTX4WYLg2YPClvEsvYs5hF7iVwpA0PjymUra9aWUbAJJIV32O9daH8PxOZncuaUuls05%2B1Vc3v8A9APBnxpsMIJxDD8Qu8JxoMO8lJ0LQsRuhaEmJ61cov4%2BSWzoQwKOeUX01Z74t3DGO%2BFGR%2FFHC8RGK27eAvWzgXchP3ZtCklpJSNz6SUR3pGZOjNB1JpnNXMbtxnHEvKSz93D4a0BKgpJ1CVfBFc%2BUrZUu9mkGcsDxDE%2FEK3wKy1vlvUyIEgJCjqUfgAmaKaVbLjOgVZX8OqaZd0spSpvn8Qk%2FwBKzO10aMXkJP8AIk2D3b2GOIUFBJKZ4kwf51eKLTtm2PkWjbLIONXdpbW3mPO%2BX5ZeAURGrTEmevFNhKnYmWWTegzli6x%2FHs1NsNhTiHVlKxo2bSTEn86GTbDT%2BzeDH8CwvBMvYtlx0B%2B4asUNl0JBSBpkIkdTMmluN%2Fiwq3o1muMGOF5ow%2FLl4p21LjCXFoUmFJTttHc0i2nxNMYJ7XYAzk5bNpthZqIaXdqAB22BjiZ4ociS2V8qT2TzLVzZXjN3ij6Um3tUFxZIkEgQlI7yYrZi8mKj0LedSdLZYWAXxLCLl9sNk6XD2Jnf%2BNDPNy6GuOqLryq41j1%2BlpAKgBAKRMpPO9RZV7M%2BRUbOZawgNNpaQVq2I9X6j24FNx5m3VGaU6ZbwwVCGEKKdymZPPxXSxRXsyTeyDYxgSipT4ICiIE%2Fxp%2FxiZqPbRQnjmpeHZKwGzKAXXEu3awACqCoAfoDSs0Wo0DCKWznC7ZPXWIPXTiVKSpZKjG6D%2FxWJQl7D230GMLwsm6ENhSiI3HHWpJUbsVVpUbFZIy1LjB0qLigB3ET%2FGri6Kl%2BWkdFPBjK6iuzQbZbbaVDf45jvWvHJKjL5GJxR1e8IsILDFuspgJAIEdOK3wbqznv7NrmRotSVA8HpWiEfYifZWGYrkJWpJKe0TWPyOzRhh7IMXJUAASD1J%2FnWDR0I412eB4pTulUdINKlEPhu0fB0GE%2Bkj2IFSMfsk1Z4Xkgp5M%2FTer4IDgzPz1fiAJj60XFF%2FEYqd0K%2FCII7VZHES8yCSkKTB5FJk7JBJ9mJdjbjpJoRiVdCzb2khIIgmd%2B9RFsK29xGkkq1cxzTk1VCXCkHWHgFAAwDzvWhMXJWSKzfAjcBJ26b0yLaM8op9kssXT%2FAJhzWzG2IomGHvEaRud%2BZiKfzQqfZLbZ8pKFJKZmm45GaSpkrw24UkITuffvWqLpWKmiYWrkpEQK0Y52Zck2vQft3CQJBngTTBMsrYat3Of1HFFGNgRjYR1cKjUOk05IYnWh%2BwuQkEbztvFQKx1rGwJJBMGi46suz1ShBBB6wKtQsuxFRkqMCNqYlQLdCLhG4EpO1Fetipu2D3FblO4IO9ImxEo%2BwdcSCoJCQCN9%2BapdkjKkD3VAkzO1Obov5GCH9lEyZ9%2B1JY2CsGOrkQJB9%2B9URJg11yQQPrP981CNMaqXBIAk8jeoUclWHlAwSoqG4k814aKo9dPImGWlyI1DY7ma0ITYUZcEwfSuen8TTk1oXxYQaIUNR%2FEPcU2MrZKkvY7bTqBJ9Ct9h1MU1OxE5NdCqUAxGkwIP%2FFQXyb9ma0QZJ36HpIqyU%2FQkoATqJjneoNhHX7Gy1Ea0jeB0qrBk2uhBajCQEx0PvVS6J8g2XHIWpP60l%2FspyGpUJ9KwpUTuRVWWppCwdJghRV8AUnkw219izbxJkrJSRsDRxnvZXEJNOK9JC5MTTCwm2rYHWSKtWmJ2wvZvBEA%2BkE%2FMR3o4y%2Bymg9bq4II9gKBvZA1brUQNQV7UcWyBRog7GAnp3NGwZt1SHaEAlKY2FWpMS2%2FY5bATtpCZ32qWw4Rt7HCRBkkHaN%2BlV%2FgB96FABM9afGSIZSI3V1pUk76LaPFKSABINVFVtlJiLj7bM%2BYdAPB6UV%2Fspga8xe0abUldwy2oD%2F8VImj%2BRDFBsqDG864Aw46wjMGHNXaQSW33Bv8bUieRLYzvo55eP32ncJ8P3L5o4ylepJ9Vo4lW8H8MmhjkX2OhlV7OCH2i%2Ft23F3cYgvBcZdtiFKSPvBUtLx7lIBArn5sXOf%2FAJND89p1Do5t%2FwD1Z8W%2FErMiLbD7bym7tzSh24X5VtcHgJSpff2rVi8J1dsXk86b7N1%2FDj7GmN5jxTD7jxPyH4VZQdcCQj745fL%2B8zzpuLQJLSusqkfNGsii6v8A4Oc4ZpO0v%2BTvN4F%2F9PTwkwDL1niHhYLXKuOqaSLxAdGKWV6qN0uN3CQqD%2FmlJFaf7hI0Q8WVW3s2%2FwDDPwky94W4yt21scKy0Xjovbe1QpFs6sbEoQZ0fH51hy5N2dDFh1rss3xDy1l7FrJi0xzCLXEEW6vveH3TQOqIP4VJ3CgetYckzVjhWgv4e5nwDH8GU5huIuXmJWQDdwiYcnuse%2B9Ij5PoOXjx9jPMeWMsYzjKMTThtgm5u2yh5aEgFUzvtyRRvK%2FsGWGL7KbzJ4Y5Zet7e1xfC7G6ukrDbV0WhqSOm9VHLTBWCPoqjxC8C8s5pw25tMUsrZ65bSW0PBsFS0jiT7U2UlPTDjjUdnNzxM%2By7hVphuKtYK0gLaC1LbA20%2F3NJy44robijyOJPip4W4jh2J4i80hYbaUtZSf3kjmPbak2%2BjDndT%2FE1Qurd9kX9ukguplcHomd%2FwCNLePYS8prVEeXaB8NoKvMgwoHqDuDUehkZRl2SS3WGbRuwUEeWh3WhJAlJI3353pOScqpDkl6Bzlz5OIKuXlKgSlQJ2Pv81IydbGtKgxhV8y%2FfNhpakpVzPeOvzRRm12L7LKy1fi1xSwdYe0OIukKAB43Ez%2BVOw5E58QMnT2SXxcxO5uscuBiDDbqNKhAMwFdffpWjyYcHsz%2BLK4XdmuKMSuWbp%2B2dSpNsUlCjP4R0J71lbHNyvoM5Ztw7dYi048lBLZW26VQEOASNu1Mwcb%2FACGSzXpFxM3zOM%2BGN3dqK7hLV4WH0EwGiU7K%2BSZFd3G4qP47OdllFS32UKw7cM36l60oUUcf5e0Vhhnak01otKiw02qLjA3r9CW1FTKm1oiShY%2Fe%2BN63qcX%2FAB2Ck3I1mvHFs4g5JUsnZBP7x%2FKubmxPlpAya9BK1vTc%2FdW1KQXJKJ41fnSMUeL%2FACGqbFcVJt8Vs2Hijy%2FLlKR1iujJfjasTky%2FQMur9Dlw1KySJGkGP1rDkwRUbRXPWy6%2FCPGwbrEcFuEeZbvsL0BStkKG8gcdKyKNaNeLI37L38BvEK2yzm9pq7fDmFN3QSttSQQUnY7HrE%2FlVxtGnI2lo2J8Ps5M5N8UmXbG9uF4Y5duOISEGA04qBsOYB9%2BKpyf%2BCQ632b647cJzJiGI5kViLOIO4eu2AakHSws6QfoefeqWX1Q6caf6IRjWU8Pf8WfC1h6xQ80yu9dvFHb1x6fkdPmmRVsUov43s5weO16g%2BNuc8S8s4fZC8LQbXCVIgQDApWbEnthvJKqewflnNBVirtk5caC8lLZcmQRI39hAFV8ZG77CnjLYBGI2t6btu6DTKFJCuSmOf1iqf4spIq9%2FEcOtG7TEUNpdUy2kvgDYhY3EDcxQrJGXZCF4HiSkXbwsitLP3kKBJgaZ3ooyj6ZTZJsy54ubzHHAnEHylJCAFA%2Fh4j52q5ZF0macOdRWgxkS%2BF7jGHtPuecylYPokGD%2FwA1cWbcH9RXTO8v2Z843hwrCsr3KmU4WlDa2gHj%2BydJgg%2FKZ%2FKm%2BNkabUujFkzcm%2BJsZ47Zcy1l37LHis1dpubjLbmMINwttsOeU6tEhUK3AMDccQa2xTeNivHyTnn33Xs57YzjFrgX2Y3cnLu1F3EHbdaVFQ0NNpMhSSdxPpJ71jnBex%2FkeNc79GmfhTmGzwvONmjMa27yxa80PBSdadOgp1ADkyaTCKe0xOSLXZr68E2t%2FnfNdshpH3WxfsmFkbF506ExBnVpKjRyXoUmukUNhzL1uywpKIQRp1H948E70hxa7CaD1hfJcxJCQ4qUGCI6iOtXFlpM3I8LmLC%2Bw3GbvEVIbtbS2W4fVBcXGw%2FOKZ%2BJtxtcdlqeG1lrv8KUtQtDeuJuVvDYIaSequnWs%2FwtvRqUuqNx%2FDlWHYld5pxK%2BbdxOwtXTiCW1nZbCEnTM9VECjjhrsNxt7IFZYLZZtzhfZxxRv8A%2BakKCEBQlLhGwHsKGUYt9bAkkno1szVl%2FEDmAWSXQpltap3kJ33NMWGLW0WoxLSucEew%2FK%2BG4BYqDS7gi6vlACYAOhG3sSfk1JYYqNJgQxIlTabRFg2y0%2BdQajfvWXHF3sdJ0qTNkPDa0t8Hwmyv2G1T5HqUr949%2FwA5pGR7M05Ns2ayItT5acfUgKeUZTPv%2BlbvDdvZnlFuVGyf3dtuxZBCVriK7EMXsyShK6RXGZbc%2BSWkt6rl1QbSkGYBMD%2BNPsxztaZrZ43YaziuLXlkUKRa2Vs3aJCTO6UgbHiSZ%2FOs2aW6NGCFq2aJY5Y2eGeckJJUdxP7orLK17NmOKsY4M2hx9IH7VMkjeNp4oI9jmvRt14a4E4v7ncLkKUrYT05FaIYkySSirX%2FACdNPBXLinE2qlJWUACD0%2BlPWKjDl8ly7Ol%2BQ8KLFs0tKVpA2gjrW3E20YJ9lkYjeC3tlBJiE%2FlRsW0u2Upjl%2BFPOJBPUGTzXNzy3s24EqtkeLx0kgFII6fxrFbNfNGIe1SZE%2B9SweaXRn5hVMkjf86uLouM7PfMTsAskdD0pilYXIyCyo7LUmTtvV8kROzFToHqie9BKX0XYmpauJPPU8ClkPNW5kjnvEVTdK2RI9Dq0nUrieT3ofkQXEJMXUDdeozBM70YuXQet3tkgKI%2BT0puOWxJIbJ8%2BkFQ0zFbVsTJbJhYPAQQrc%2B1asM3Qlw3SJZYvevcqIO23etMWZ5RJlaOg6pKRtsD3pkXsRkWrJJZvgFIKlA7fStcKapiiY2DylafUSJ5707HSEZIRaJNaLKiZ%2FD1pxjyY2noOsORpkgz70UWLTphhpaY9RBVO21OsfaocpUEEySSTUWwFKCFkXCJgmT8VdhfJEXDgWJB9uKbDoB5PowWoQoSO3sKPiC5saOOQQAVe%2B29BJtPQuUtaGC3dGo7JgwB3pQu2wa86lOoayD8fwoo1RXFgl98SAFDY9apsKMbBrr%2BoqP4TA370Joxvj2wVcPgAlClA8n3qF%2FIMXrgKJnYnrHFQtO9UD3HUgKcKgFdOm%2FeoXwRyUYWqDsraAd9q8LGVnr%2FAI0GLd4wASU7QD2rRFtipYPaYZYWSUkEdo7D2pnBiJRrsNNAwFEGDBPc%2FNNhH0Lc0PWyYKwFkK2IJ4p6jSM2RaseBOkkLhSd%2BmwNEKSo%2B0iCElMVTDjOhJRVIAAA6D2qxsXasbPSFHkjiQOKjLGS5iSnSAOsiKghqnQ0WkQSoaDuOKVN7KGzqAohIBg7A9aVKFlqNiAaWOFiR7%2FpSqCcGPGXEoTqlalGKlIOEH6HrLikFJBBTv15pkH6HuOgzbrSDAHqj9KalYiToLMKSJPvx0qpKiRdrZIrZRASY357VQuVJ9Bu3J9IKRIEzJ3pkJegQywTIAXKus0wg%2BbACgCJB4JqEoeoSCSk88c1QqUnYqAZAISUzVASdmUbgAGep4oov7LUWfSCSJ3FG5r0RoF3jy2ol0pQOdt%2Fzqm3LoiIzjuMWeFYa7iFwU3LQHp1K5V2%2BanEOGO3s0J8YvHvFMIscVu8KssvptG0KJRcI1HbmCKy5cjXs6ePBBujgL9qj7XiPvzzFxnJvLWIo1K0WTjqvLn%2FAEbJBIjrXMnllJ0huTx4Q30cgM8%2Fa2zpiOJOW3%2FdmI4hh5VAfeSCtHO%2Bkd5rRDHF6ldmB5n%2FAKRjlH7NHi945YnhWYMIvn7nKN2f2t82uGrZU%2Fvqgx8c11%2FH8Vf6ujPOTbO6f2V%2FsA%2BIGUMKsl22B5E8RkpSkIcx26ZujbGZ9DcSg7yNyaLNLjpOkBgxRcv%2FAHY2dl%2FDvAc%2FZSw1jAPE7wnwrFcslIabdsLVC%2Fuw7SVE6Z7QPauZKCj0bMeJXUIv%2FuXnhmSsv3YF3ky7uMpYwgDSpEoA9lo%2FCodKW8bmrb2ab%2BN8THMJ8TsOadsM22OHZhtyQpq4bbjUJ6x1Helyx5KovHmttogDGZ7hlTWA49d%2BQzJVbM%2BYCtpYP7iydgexqYcaX8hryWqoij2H4bY47f5py6%2Fd5ZzChpaLlK0jRcN9lhJhUTsRxNFPw01aDhli2lXRDsV8VcwZdxnBkYiwpTWtK0voSVNOCdoUDt8Vhy%2BPNdmx7V0TDP8AnhIw%2B5xVpDyGilKigCQFjc%2FTeq%2BN1YmE1dMptPjAi8wq6uE3Kj5SoUTvB%2FPjnaqcmldDHJI1Q8RfH3CLPGU3Cb23Sl1st3CY2BPt3rNlySfQcslL8UcqvGLNGFKzDiDOi3atnNS2SBCChXI%2BZ6UuLkuxLinto5tZvTbWmbXXmwg2Sl6QkwQkdpoJZHZdIimN2NvhjzyVQlpwJLa%2BCn59qizNFOF9EPcvX213CShClCAoneIG29SOR8ugpY1VNgi7uFXgKbdxJfEbcAmPetCn6EZPGaVpjXB8ZGE4kj76FESEqT235FMcbEY5uDqRaP35NvfsYjbOIW0dKlievO9LceLTRsjKLssPxJxJpWMLcK0u%2FeLRt5CQehSDFP8AIk5NWY%2FHdJ0a%2BYtiTaL5CkElh5vQvp6huIPes%2FxjV5K9oywvGSkg%2BYtCwCCAdnEzwaOOlQLnFu0y2vC7Fxe2%2Bc8uoc0s3LIfZTH7w5%2FjXW%2FprbbRi8tW1Iij7F09cPBhlxbjaIWpKfUkDvQeY3JtV0OS1ZIMjPOKGYsKU6S%2BoDShzjcUPjZ4Qj1sknoqzGMLtbPGlMLWpy2WtREHdtXYHpT%2FAJOW0Znjldogrtu%2Fhd3LRXp1agYkxP8AHegUl%2FrE%2FNLqR7mC7fQ%2Fh1yr1Q1sTsR706EINa6H4XGqIviN0WwFIb3O8dt%2F96V5GClaDaS2TzJOYlYff4VfoLaVNr3B7cGubLsHHkvRIMPxY4djdxdtJWAp4upIMhW8%2FwA6G92aVJroubLXiQ8jErDF13IQEEocET5cHcgfFVLYa8p2dKvAfE7XMGM4XbOXzTtvjuF3bCUh0IIUk60au5JTt70mPJO0dNZJOJtw%2Fc2WL4vhGLWvlJuWw20pTigkLnSlUfrv705OTewODapmpH2gfs9pzdmbxmzThtm%2BwzaXlusJTB8sqa5HTT703gMhFS0zmviSncqJw%2B7DpXcL1JdSofgAMQRWWUmn2DLC0XJjqLi%2Fylll27fYN7fIDSPUDqSqImg5bEvTpmu2a2H8LL7aHlwAUKSTuSO1BGD2HGKYrkFm4ulYg4UBZRblwSqQJ%2FmOaPHj%2FZMhX2PXLmG5kuFOuF21MLUSTuY6fNPUEYZ%2BS0yzvDnHzc4pbt2BSlx0BoKTICZ43HG9BJSQ7E4zdUdyfsbrucewHMV1jVxbIxvBrmxQppRgvtLXpC9X5iiwybls6j8ONrj7Or1nguE5wwbxQ8OMcwW%2BvcCW04LizS4Sp1wNkgwN%2BCDI5rtKKkqOTmlOLU06bdHDL7Rjqsr4OjKdpLeGIwhvyQURqAVpM8CREbVyc02nSN8blSmaP4PjNq2PKWC4%2BW9XpVpjfaTB7VnUvofnwwX8RfGsvXV7hmWWgp22wvFcaQ06sbNtuKQqNXwJpsXZz5NJ0UJmJty2vlWzbemwtXVWbRPEIPP15oMl%2By1KzLL2Cqdt7jF5CW1PhsIUqJPJPvtU4asaofZsjkDXf5dxxu30hxkqSpITvp0jc9xJ%2FSlkeN%2BkXzk%2B0xbGmsFw7DB94vQGkQ0fUhrdI24Emdjv1ocvJ%2FwY%2FB4uS7ZtLkrHbhkZjwtpKGCppFoqIjuCo9RzHvQrI3pnQcGlpkquGsNwLDMKDKlLeTqdcIX15iehNN4atCl2VdbZeVit4rEb1plKFuqvLh7VAQzMpQPkiPrSVkf%2BBkoUNXPPZs7u4vXUl9alhKAIIjgD%2BFC5t9jccLY3ZurCxw%2B0e83%2FAOYv1PaxsjsBTcUWwpYPyNoMoYoq6ssObabUlpyHQkiAlA6Ee%2B9BHA%2BX5Ijjw9FyeHmKXN3mpi1tpVbNI1Ob7bq2FascYJ1Ey5Mke2jch19tryEaIWR%2B6PwzxtXUi2onPlOndAa1ZbexFzEnglxu3BdlQ4Kep%2BtXDJN9GSbT2aY%2BKuJPKfubdBLt26tSySByVT%2BgpOWV%2FwCTTgnFo0dzfh167cuAA%2BUDuNOxPzWXJy%2F0m%2FFiTJt4a5XcWtFxehJKVDaTv7D3rLGLcrYUsSWjoH4UZQubh%2B1cW16ZEf2d67GGOjm%2BRkV8UdQfCnK7dmwwoICpCRsNuK28bSObnbjo3NwVn7vbI0xtt2pqlSoQ5MBZjxINNuIVsNyaRkyUhsUm9lN3V15jxUFTO5%2BK5WRW7s6ahoaLeJUSYI7zFJdIpwPg%2FII30zyOlBz2ClZ6LnZe4jjiaMJxa6FvPkRIMREUa6Df0xbzT6oAA9tyR80BIxowU6lQBIAncyeKgRitzkbd%2BahBLzVEbkb8Hk1CnYoh7c7K3PJE%2FlV0XKDSsdtvACZAEztvVEDVq%2BFKGpPNHGVbFSi7tEotHj6EqTtwTNbYT9i54%2FZMLJ3UEyRIE7bVpxSdJGdS9EtsnJIkyo771phZmfRL7F0gCdyKaJkrVEntXCkk7gTwk0%2BLESjTJZYXGrSVao%2BeDNaUzPLsllo9wvbf%2BNOhKxcrokFu6DpJ3I7mjMKC7TkgDUZ54mmKV6GKWqHyVBcBRSk9TRxVE%2BNmUyNQkn4q7AdLQqlxQ2KZPIg0cci6IfOPASCCU%2B9X8n0U0MXblStgdMe9A3ZSiMlvhR%2FaKnerjJLsugPcPKKiOkmKpsvsFuOFuSrf2qg0kv5Ae4udlAKJTwDNQqbtgd99IJCyAI6HmrCWMHuPkpP4USfz%2BaoKMaGi7jUmJCiAINQI5QsvCADO26fb%2B5rw1HsAsy7Cl%2FuokJ%2F4puKTTFT7Dds6OUwT2J%2FlT1NmQOsKCgCFAgdANqfFiGqDDZJKUxyeTTgJ9McTJ2kDkiOd6gkzhPCQFGdyDUIJFMhIKiSeOkVC7Y2Xqkk6lbSBFQZFP2M3STqCgACY2I%2BlVJWE0hmtMSAkkfO09ZpbixCGjgIgRA6%2BwoGh6QkPUd1ahyd%2BtLnFUWKdjBImCO9LSsu2PEbEEphPWriyWwrbqAKQoyogVoj2C2vYZZWdwCqPpvTXFMQnXRILValJ2I%2Bdj7VXBFtsP23CBwatRooN2%2B52OnbvvRECrRUEpAEnnaoRj9I68CetRGbtGcge%2FehdlUeH0pM7frROVvQVgu9uQwsOBQSOKpIONVsG4jf267J1bywCidgfUe0Crb9BOaXRpn4058Xb2dwhONWOXAykuhb6zB7EpMA0rO%2BKsZhmz8%2Fn2w%2FtGYU7h2J4Vi2YScdKCLW%2BsUBaHkiepV6fgzWHI24crNcJL%2FS9n51fFjPuYsw4jdMt3bWMIcMAvJSCk9wqs%2FitKQGSM5P7Hngz4W4vnjFk2uMW9vdWD58sP29xp8lR29WgEx8CuzhnUlZhzco6Wmd%2FPsp%2FZB8TvCdzB77IviDhOC5WuIfvbN5oXLT4Unl9l9wKWCAYKQI3ineR5GH%2FAHBwePmm9%2F8Ag7aZFGHYBaj%2FALfuMqYhigSNVv5BZa1RuAPUa4UvJtNI60cHFU0XRlzxDzim2Xa3GEZMsrv8KW7e41oj3CtwaXzfVj5xivQTdzZjSHWrXEraxw9bnqF1bqQ6wT2U2TKfmtGKUloXHjeyR2mcL42rmE46wLe3A%2FZ3LS9bSk9%2B6f4U9t1YMkk7RQvipl6zx%2FDnQy60LpJUW1kASPkR%2BdJyQ5dBwyL2jVrD8f8AEXC03OWcVYvsx4SkKNtiGtvz7Af%2FAIbgBClCNgog%2FNRxklVhvNFbWihcy32dcm2GJ32EYrimPZdUFufdrlqTbOblWkzwd%2Fj2ms2SLrsmPNJ9jJv7TDZy9bYJj63k%2FeGgu3U5%2BJBA3SsHoRwaBz1TDcH2ls1qzj4rX%2BX3b8YDiDL2HXKm7kAr%2FB%2Fp3%2BtByb6HY7%2F1Gh3iR4oOM5nl51btotZXCv3TO4niKTK%2FRom9aZr%2FAOJma%2FMuLdDdyt62XCkrVMhKhxVSiZ%2Bkap4vev3eNG0SFvap3BPqj561lyY%2FZcZp%2BhxjNw%2FeYG4y6Q1dtp277UWNxr8gJ3WiB4VeW9829Y3zvl3GkhDnOrrFPSiZpOUXs9scLu7t11y2dcWhmA4AR6ROyjROkSEZSdNkdx9a7J1KnIK9W0HkfFMxuxXkY2nsOYHjqFNssOlTjSvQocaex%2FWhd3TJGRamcHvvOH5TxIhTmq18lUwd0mI%2FSm5Mf4phRddFF319ovLppYCm1HYkboV22oYw0JlNjWzeJcCtakqBlJMwauS0SC2WP4eX%2FwBzzRa3A1NtrWGlwSI1bGad4uTjIrLG4tGwdrhjuW88uKdRZ3eF3tq6yCo%2BnWU7KPwYrfl8rj6uxcZNwr2RDLloxdJucSQppF%2BwV27mkDUYMiT80GOUJehmRukkVHmFi7usWubhtYaW6dk9UOe1OeGLFfJLp6Ipiy3TYuOPIDd2hX7Ub%2Bk96COG%2B3ZSwSfQJxhXnWGHXSIcSWiCR%2FCi%2Ft4V0A8W%2BiGPvl2zSUtrW6DJnqOkVlSSe%2BgowbH2Wrws3AU5qUjXukcCelBlhjatBLHRLnLxpd0kBS2kEEGIMRWTiuhnJj2yWgNJSi5%2FY%2BpWjoTS5X0aMUIPbZvLkzNK7LK%2BQscwV1bFxaXAQ4pCoITvt%2BVAsLvZt%2FvIr8fR0m8PMQuM4YI1jrKnrS0s2k6k6tSlKnqY239qck0MWe1%2BKNzcQwXA38l4zmLEnGFs4nZKCkwAAkCJV3Ox5rQ2lExOORyo4P8A2qcn4Vl7D8s4hYrQV3LjpXoRpHQj8hWLJFejfwa7IHgYcdy3lzFXVKesWFp0oUd0wOf1pShJqn0A5b0R7xAwR29uvOgJZSnU4B%2BEK%2FuKiTimki1JoCYTh68Ow%2FEX0vFt8pDSBqHrETRY4NJtguTZSWa7ly8S4hT5deaJSSDtHIA79qdjddmHyFvRYXgHjdvhmbsNbv7Q3jBUQU6ZMx2ocv6D8SW6Z2c%2BxZnSxez%2FAIzYYhb37djeWyGLhSladBSTBBPckbUeGaTtnajPjDTO3uR27nLucV5ncfu2LR2wcaum9Y0PEJlMzvIAO%2B1dPHNN30c7JPn%2BLrs4L%2FbozRh2N41ijmEIcs2kvuoaYWg%2FtElWoKHYSTXL8iNO0zROLpJrZz2w60efesWEXLVqpwBCugSo96z8m10VGT7L%2BcubvHfDTLOWLC5Z%2FwC5bfMQJgAhCEtEeYevU70xTpIG1JvlorXOOXWL7w8yNi9rbfdWrzDLnEnCpI9bpuFN%2FiHOzcjimzdozxjUn9FOhasNsbHDg4pwSp9adXJVG%2Fttt%2FSs7yPpIc5M2j8GLFJwrHrpxUC5tHm20k7ayjYzzyKuEXdmnBkZsN9n%2FFDlrKniBnu6ZDTNth3lWylNlfmOwUAz03UQPrVStP8AE6fOUlSFvCfH8VxdxTz7Ljl048ytTQHpWobAr9h%2BVOi6RfOLLsxLLmMYi9ZYFZMXCry78y5eu%2FMhu2aH4lHpAAO9A8zZOUSaYbga8Wsza4Wv%2FwDL2R57roSYDCEwgwdzJ3B4Mis8o3sdBw%2FyBbrCLC3sXccxIFVszOlDm2kHgn3MTSOa6HZIQfSKnvFN3gcumrVSLdTggkbRwAP40zaEOjZLKl2o5cSLaVXcpTtyBHHxHWh8iUuP4%2BwfybNgfCL7vh915l0qVOE8fup7UXhyjFXLs5fkxlFmwuFYq%2Fit0tYcWi230KCt9NdXFk5dGfJO0WBfNNWWWXVKDvmXYJQOD5YHPvv%2BldGKSVGaUORpNnDB3ri8u7p4AeYCBxxWWcF3ZphjjFUa85nwQoegMJYEyRP97Uik%2B9m7G6%2FiW94WZYF24y48xrSIUUx%2Bk1WPFFbkgLk9M6KeGOAsspYQEjUIGo8Ca34Wn%2FEw5ZKL2dCMhYSi2trXYekcnp8VthLVM52Sdu2XE46Le3CpKYT0pjSFuaKdzJia3VKAcKRyQTwa5nmT9GvBFPaIN5qVqgKIJ965Uspuj0J%2BZ60%2BpX9KttD1Cuz4OqSoHeACNutUpRKcE9nvmwBJJ6QTU5oHjXbFkuwEpMETG9SVvoVKH0OA8N%2FVEHoakU%2FbB4yPC6AdRiRttwaCWZJ0x8Y2eFxKiU7p3k7fzqnOxigY%2BbuAFafeeD71akqpgOLs9DxQB%2BIk%2Fp9akuNaYUE%2FYu06CRudjEHrRYnoqcdtroN2zxIAJKQPpRr9gNEotFlSUSVEgflWvHJVSM8r6ZMbF9XpSSSO%2FfatGNuzPJK9ErsXdICZPPet8MlmaSpbJhZPzoQNt%2FrThDRK7V5MBBCSobjfmrTAbXsklm6pRgkRPeI%2BK2QeqEUSyydAJBABnf3p0JUKnFklYeJKYme1MTvo50oqIXZeCSJkJ2o09gw7TCTa0KAEk9KZzRpUr0hcPFJEE6Ttx1q6TM8qT0YruVCBqke3Wq4oqxqt5Sjv%2BLeKKi1vobrcSSStUiig9luNdg555ACwgqUffpUl3oXFOwa65MxG%2B8zQj4RfsG3LwjaVxvvUDaI9cvIbiComeJqAySW%2FYIceUSZ1GN%2FioL5Ng514SsBShtFU3SL4vu%2F%2FAJGbryZlWsiOSaH5P0CpXpHLFKgkkKCQQZ2rxHNHuApbueqVbf5Z4q4v2gZvQbtXvUCoHSOBWtv8UZskfaJFbOBRSJTPcHinIySv2G0K9SCSDO%2B%2FSnRlYEnphBBUQIiOZBifmiECpAVG0QeoqEE1k87%2FAJVCf5GbpA7atuKgx5V9DNwE6k%2FiERxUC5X%2FABGikFUAk7dulKk3YMYDRadCAIgjfjY0uhggsEmNt9u9WU0YpQtLgOoKTv14NInVg8P2EWTwDpieFHirgrYYTZ3PKTP0pyKtBe30%2BkQEnrvR8m%2BhVokNkRp%2FCmDv2NXyfsnH6JDbCICePjmmAhy3B2UZjiKhAo1O0L2jtUZTCCZhMwNhtHFUZ7Pjr3kkAnaBRxinsa4qro%2BUFFJACSYjfaat4mhVEMx1%2FwC6By4UhxVqBDgAkt%2B9BVdjodFRZkx%2B4w%2B2Xc2jq1taSpl9r1EDsR2qhiVpnNv7Qf2xsj%2BHuH3OHeJmCvX2GupWE3VsyhwAj90gmWydvas2XIzV4%2BKHHk3R%2BbP7YXit4ReJDF%2Fjnh9fN4FZypSmbttDS3FRyjSfVM9BWVzlJ8UtAccXL8X%2FAMHDXN%2BOXjl%2B8kuAgqJkHYjv%2BlacWHguhGbI06TNxfskeIWe8h5wwK%2FwLF32LYrSrQ4o%2BU9vJQ4gynSe%2FSryz4xtBwwvI1yP1yeAnjoMcwmyfuMtXVk6pA83ym27hFseoGv1aT0UCRXGy%2F1FXTWzs4%2FBSW2bcWXi%2FkQpeTiGHMKujI8w2AlJHQ6YM%2FFYn5kU7pj14rW7IZmXxew9di9dYPhFhiLiJHklfkkp%2FwAwJkn4HFA%2FKT7RfxP%2FACU1efaBsXAU2WKPZdxActP%2FALRBA5TPUUzF5jsGS9NBLBvtJXTblum7dsL63HpWpt0ehP8AqSCDB710cXmSeuzJOMV2HcQ%2B0O5bNXF7guFYdmKzKCVsC83TsZBQQT9fpWiOeT2kLxvH%2FqNVs6fanwZ28Q%2FaYFe4DfaPLUFSfKP%2BUHqOtKlmk%2BzRHFDurNX1%2Falx3CcfxZDtz52DXaFtusOrGkL%2FAMyZOxIpTm2MXBaRrh4o%2BJWG%2BIAt77A742mJWmoKbCglQj26ikO2yc6RqVivi1jSmzZ3Fy4422Skwfwj2o1j%2FZz5%2BTJlKZ7zdfYwlCEvEOI2n27%2FABVNUDjzNsZWt1iOOYM3aPtl68ZQShUGVDmqUW0aP7mKdFfXFy27e2V2y06i6ZWNe2ySNiD%2BVK%2BMesiYDzvfXNkXPKX%2BzUdaVRHPQircBWTNx6Kgw3FfPv0ICSh1KpnmPem8EkZ5eW5viyWt4xiuCYutdupTaXG9K0gwHUk8EdaBxv8ARMedxdJWfZhWh8uKebbcbW2Fp0%2Fun5osUaL8mbdEVw5x1i8bGpKrQp21GBP9aZKJk51IvbDbuzxzJV4yHSt%2B0WVgDlKT7fNMjjco0A%2FIfLZQGKOOW2JaVHWjWNRO1LV9MYpJ7JPgDjdxcICFNizUqFo%2Feb9xQzfodDok9jh7lriFxd2D6nSlWqE%2FvQeSPpQXQTp6Nn8Zv28w5ZwbErYhq9ZZBcAV%2B9tMD5Fa82TlFGdyqRQ2VsUewzH8WU6pJS8oKUCP3p3NIjNxemOlBPsa5vTZKxdxFncLT5qdQP8ArP8ACtEfLkn9lPFH9FXY1iJUsKdbZbui2GngNkqI4VvxT15kuqLWSlSMFWr1vhlrfPLt12LqS2EB0ajB3OnkDfmtc8mvydMzSybIq%2ByW3lOIVDKhKN%2FasTtutMF5H6GbIXahN0HJkzIVz8inPFEdypbHRxFVw5r9CCeCrr7EVmliV2nZSkn0G8JxRu1uW03UKZEyCdwehpORN9hp0zZHwszBfPMvYC1eMtsrWtbaXD%2B%2Fzt2kUjfQ9T4o6i%2FZE8XMPeznZ%2BGuL3K2bC8wxxp3zI9NykykJ9zBq7p0a4eR%2BFJG0mI57FnkrNmW7lakqsXDbKYekLhZMqn%2BVKxylTkx7nFtS6Zop9o%2FBXM45eyhhpShKmVFUtpghMBSuPaB3onGxk58kacKx1i0w1zCW22ihT6W20KEqQjt%2BlJcdWLpLsI5lxll7ALm4tWyhaiAogfiUkAgTQyk%2FwDSGsiRWOE3Tn%2BHuG%2B0v%2BoAJKtxqHSmQhJ%2FyMuTMvRHsTwN6yuB5KUutqCioKGw2mJpjVIyK5SEPC93ErTOWH3thoS8l9EQJmTH4apyvo1eP43B3Jnab7EOFJzn4su4Y6wy35TJuXQ0qNQSTJ9jJBiqx4m2dPPOKhZ1jd8Y7DL%2BbMPytjd%2BbOxuUoYdWuChle6YUTsBxt0rU8nF8TPCCceSWzgd9ofHXMRxHPLS3heN2OIKZt1I29KlEz8QKz5Jt7o1OMslNI1QRixYw5LrS4WggkK%2FEvfgf1rF8jMvwTT2i6cuLxBuwvbmxYZaubi2Q6yXFemQd47nf9K0QVq2HlSS2F04fi2bcr5KyhZOOsps3H2UpZb1fsG2xBJ7FRcVWhxtaM0mkkaxYmFM47iaFFbyUOKaaITBIH8BWfjTKfWjZLw5xpTeAsKHl25Q%2FKtKhqI7RVz0Pw2tvRZF1mfELfLJytYuuCzWwElCl6UpQCVGAOsnmlylKtG7FKPsm3g1jmK3Fva4DZtpaecuGjdPoH%2Fjt0yoif5dZ96HHOa72aHLHdI26usyXGMi4t7tKsNy4pstOqnSpTSOQuOZ4A7miSb2gnGPXsK4H4hu2mX824Vh7Vth1rcFtpTiT%2B0daSR%2BzCuQNht2FLll5LiyljV3ZVd3m1rHH7q1v3FKsdZdU0kyVIG3Pv8AwrDHBK9M6WOMX7FrNxvMb1la%2BT93sUQ4LdkDSlMwB87fNbJR4oOUYw26Lnwa9whF0nBMNKFXKzs3rngRPseaxLJNPRj5O2yzG7a7wW9Q3aOeZcrAQlZJAAO0RTYzcWC%2Fy2zbHwmwZ%2B7U3Z3rikyAp1YB%2FZtjk77Diu%2F4cNWcryuP%2BkNeIuZVC78q3ARbHS0ylX%2F22wYFPyZnF0YXir2VPe4eH7Vx14oUhIIJJ5V7UuU4tUiJPooTHsJcvb7yg3oAnp%2BEe1IlJro6Pj4pFx%2BH%2BEPlVhaWjQSoJAJHQT261cW32zS0lFs6C%2BF%2BFarllKUrLSIjauh48FHo895km9m8OV7dNswlbxStcTv%2FAErUYHtD7HsXS0y5tKQOJjepOXstQKKxjEC%2FcLjSJIrkZ5typnZ8XCqBqXwlJWDqMgxMfWuca1FNiK3fMMqISY78Ut2xqSQslyECVkHbrzU4tIJ09o9TcHfaNpkb1Iv7BnH6Fkr6qVE7xz%2BVMWVJUBwZki5lRhRG8CZqfJ%2Byvi%2FQt5pSSSkJMEHbf86uUr7AUaZh5kQQoRt1onkbVBpNnhuCCTpClRAJrNPuglBmJcVPUzz1mhIoMcMvAFIHHudqJTaBnH0GLN4H1zqJ6RWrHJtbFSjolNm%2BUkCQU8kfwp0TPMltk8dEiUrB5rfikjPkW7JVY3JlIE7dT1rTCddGbJBvol1i%2FATBgVqhJsVJaJdY3BIQNQ3%2BlPjGzLOLbtEstXCVJkgJ3iDzWiHYrdkksXzEkp22kzNMYE5eiT276ikbgk70UZtIU1YaZemBsZMGnoy5YpMJodKVGSQknaoKHaHwSSQAZ6GmKfoYp%2FZlrAGxBPXfmi5ovnEZOulGtSRpT7daImRaGDrklYKoA33qlLV0KGK3wkD46HmqUrYeN9gZ%2B5cSDKyY43iioaCn7id9cKHHtULpgS5fCwdxPT%2FaqckC5LpgW4dCVEBZIIAAHNC5%2FQpyS%2FiD3LnaSpCt%2BIqvkJzfsHqeM7HYdT0qcy3PVUcyCSkggaT0EiBXgpRVntRyy5uFELknfamwkukQO2ytyQkgkb1phOtATSa2SG2XvoUoDfanwj7MLjxJAypUg6j9TT42%2FYD2FUHZPJHO5phllFr0L%2BkekgpMb7%2Fzqy4Trs8O0kmTIO%2FeoXKaapDZSZUr0pA9j71QWN6Ga0gBSgBomQaprRIJpUxmdH4jqPXbnmlOLLbrY0WAYSAImSaoS8l9GBEKJCjq6xUDjMwQngeoI6dKhU1ex6gAj0mekRVoOLCDBIgaQk0zT2Vk6CzRAUmCSPfrvVJpCiR2gIR6hKuYHWqbtkDtuogpQCTHIAppA8wDKVESJNQgYYnYdJJPtVMqX8aCACY24%2FjUQlLdMy1QqIBIqpBSx0rZgpKQNQAH14pyyKqBsieOPANuJTCHCklKuhPY0n%2FBFOjSTxcxXFsFssRxbL7T9w02Su6sQqEqjnSP3TtxQZG%2B0aoQTV2fn0%2B23nHKWdcJv8RYuE2lxul9h1JSW3OqVDp89YrnLIublIOWaLTSPzV%2BK9y61jV1runn7YEhEGUJH%2Bk9q2wnCXTFvLFRpGuxZcxO6NsEKD5PpKdxPvWhPRkOqP2S8h4w5ltIxTAVXzjSyppZj9qNtgeRXF8%2FJ6R0%2FEhcjs34KZxtcGXYiyw7GMuvMJDYWw%2BpBST%2B6tG6VJ%2BOlcWDt9bPTwSSLT8SvFHMFoXG7rLLKwAP%2Fn26ygrB6mNppU%2FFyN2tBQzQ9mj2dPGbHsPvXHg5iKrYr2Sl1REf6jNaPG8NV%2BS2c3yvO4vSKYxTxuxhCvMtccfdt9UqadXqIG%2FXpWqHjq9IxZf6pP8AwB0faALbjq04lc2F5B9aVmSD0Nao%2BPP0jLk%2FqEn2TPJ%2F2jcfssRReWeN6LhQCCojZ2O4O00%2F4pxVtEhmctrstbMviVl7OliRdr%2B64i8CVeQqElfcDiKWknK5F3J9mrGdr9nDXVs%2FeFqH4ku7z2%2FKtEfHg1YDka749jt1Y3KMStbhxLm%2BspMa%2B8is39vJ9oZHNKqRA7nM6F4qxdEnQ9%2BzWlUwO5q147b7I4DDGcPuU3Ljra9SEq8xI%2F0nt7UGTxZoikl6Lcy6gN4a1cqtm3HWAHNWwK2zuYFA40hi%2BOTuS2U%2FnK2FnmB%2FEbQLaw%2B4JWlsGQlR9qxuL5GqajxoiedGmLrCMNuAErZUgoUUxIWDyevFOpLozyzclRQbbTmH4ml3TLUGCjpT%2FwDJhVlwurssx5cUtJFvmK0GoLH%2FAPcs8fEiluKTs3xy1H8eysHr9xpYsnirzEjhXVJ9qOJk%2FwAmLb4bYdASXW51xxp%2BB9aOOPkQnHh3i9raZpt7a9LicMuk%2BS7vsZ4J771r8dVLihWVa0Cc4YCjD8wX1m8ryihSikdYnbeq8jx6dKIeLoCYQ27ZYiUtjU0oyRxEVgktDIdlu4b5ZaRiDGhKgChW%2B6x2NKHJFl5fxk2mXr1wL1MNP6yiJ0g8n86OKbToVPbK3zrptsUbxCyCUNOhJB1fiBG5Md6KEfTJ8nFWQzE3XCLe6fWrzEEdZMd624fFjdsiyx7T2Q%2FMa%2Fvi%2FvJWNagElQ4Vt27iteOPEVPLfRipQLaLRpM6mvTJ4NGldp9ib0RZi8cTdi2egtE8H9w1ijKUVx9lYpq9hJq0c8l9DhU56yQRvA61JpzWjVkwKQMWUNlCvLUmNiY7dzSfhkJh4zT7E%2FvLaHwotqPae%2FP5UyGNxXZocV9ljZRzAMNvbJ5DhlK0qMk7b8UrJ47X5PYUWbFZcz1fZdzjbZpwu9uLV5pxDpcCxvvMA1nbvQ7G6Z05xbMjufsk2eeFIS05cpbRcOheourn8Rk9o%2FhVZOgo5XyBORWVZixrFE3KDfllJtLdpZPqUoRPsrjfsIpfxt7CyZeL0c2%2FEfDbzAvFXE8AYbFq23f6C2J2M7ikuk6NSdxtomOYcq39vgdw%2B84tdqQVJCV7IUOQafxS2hEHbpohTNubTLeG4k6hBC7vSZB3Cd%2F5VLKnjh7GmZsdtsWxYs24aaa%2FGUJ2HA7%2FADS5JsODiumRLAA3hePuXVuS26ka0g7gEHaD3oXFf7jnlVHW77AOMXuB%2BLN7i1y%2B4yteEXakEkwomCJI%2Bp3pscVex2OEZQ%2FI3b%2B0%2Fc6vD1zMeHNusC6xNzYQoBRAMj6incZUNx8YxuzjXm%2FMTr6cdwzECU3rqm31qkySmY6e9Z3F%2BmD%2FAHjj0iprxpLyIkpKkjrt%2FfFLeGvQqWeT7ZtJ4U4ejMmHYLgrNu4cQdU4w05q%2FFA1ekdNgabBUqKi70bZeE2WLLDMk%2BOniItxTNng%2BEu2%2BHFaAB5y21ICUA7zKpn5in412TNhemzlZmRD7%2BZbZbTKwlSPMdK06RsPxRwJPHes9pugceStoszAH%2F8ADsqXmIuBtbpukIRtuTpnYUUsXsd%2FcS9loIsXn8QwbDjcMoxBduHnWmzqLKVAnSqf3oEmlzS%2BhTnfZfHgbmXCLDFMSvlMsu2zDbnp0Al90iASOdKQCfcxROpaGYpJfpF%2F4nhjt54V45mG5eDF5dlK2GUc2rCVhKEmf31qkn2FP%2BOo6NuLUrvRUGI4t92trDDbh97DnVto85pIJdWs7hCUxPG9YMkm48ZdmqMk%2BhC%2BtXMNtHMQumH2bVUt23q0lyDBVq6wZHaaH45fQy3H2WxltpeGYA5dhSm7h46mWQndaQOp%2Bpquclo1Qk5KmW59mDw5usfxnFcz42t5sLdIYaO8pG53PERzQrJxdoRnlGPRsQrDGXs4hppZf8pyBG%2B42ge%2FWrnn5aSM3z0q9m5GH27OW8vqZUsM4m%2BhLl0U8tJ6Nk9%2BprZCcYoy%2FEr5FI3Tb%2BYsabuC36ApQR2G9HDyeWmDPGkjLHGE4c0i2KkvBIMiJG9PklZnhBvaK4cwsuLSEoUp9ayEpHUTx%2FKluLNcYOuy7sqYejAmGUPIKr58BKDwUJ6kfwp2PWjPlxS7s3V8Okowy2ZS96H9iqTz7fSujHIoI5%2BXGbFYfmNhtglDhJ3HMyO3vTFlVWZXNxAOMYu7ea1alJbHTgj9aDLkVBRtsgD6xrlQGqNyTvXFzvR2cMXxGq7hMKVJmsTyIfGLs%2BFykEQCvfmdxtVTzEjFrsbt3atR1KUEzx2%2BlKeRPYwcpeV%2BIJkQPzok2%2Bim6F0XYgahpJ3I6Uel2Eoi6XwQ4TJBHfn6UJRkl5O25JPUzTVJEMw8I3Ch3mrtEo%2BDoKiSEk9hSpPZDLzNUrjbfpFCQzbdE7J3nvVpgyVhS2dSpSVSQPbn%2FinRkmzPk1oktncJToICk7c1pM8pIltncHXAI1cc1sxvQlrRK7J4pKVdJ3jinwXYmSolljcgkEiSTPxvW7HIzTluyXWLyVpIJI6cRTkzO3eyWWT4IlZ3P6U7muzMiT2lxsPUSOfitMFSKZJLe4BCUypKZ2ohAdZe0HbUr%2BdOh0Imr%2F3CaLjaZOnj5ojMO0vpEAFSelQhkX0lRBKie8xUINnngneZqEBj9yElUFc%2B3NMhYcW%2FQGduzqVCvjfimNotTfsE3F2dwCdPzSZdluaA1xdCTIk8fFVYoB3F0JUCVDgbdaogKeup4MdyahaapoHruRIgHtFQoYqfAMSQqeOahDnJcgohOkJEbGZAE14qUV2e4MWFKKipX4QR02%2BhoYVZVB61cBUoJnY7wZ2p6lQE4tLYftnCoiVAk8gDmnRmjNkZIrV0lIkpnj%2FmtMJPsTwfoNsq0pI9AMSRE1oQDu6Y9TBTpKvge9RMyt32eLCQNR1H37VZBBcBSikwqIiZioWptDNaSCmSqNgN6hoaGixMJUPeSetBPoobrEqmeO%2B%2F8KUDxRgUkweIMbVAZRVGIQCFwqBP5VAYRvsdMsq2haTxNUnoYoNBVrUV7GFTtFMjBVZU%2BrCrZTqGsgwdu5NG0qorHFNWG7UpGkJPTrzVcELTD1v6lJ1ERPAPNGQNM86kqMzINQgVZWnV%2BfHSrXRAoghSZkD3NB7E%2FwCsUISU6gUhXJq2NatUxu%2BSWyjeD71BEHsqzNrr1g2pb51W%2B8Kncf0qDJNt0af%2BI7wum3b60ugi4QkpJ1fjA6H%2B%2BlLcwnidHCP7bXhZhPiHZYniWXE2GH5jYK1XAYJSXknf1gdf0rnOcL%2FM2Q8d%2FHbPy%2B%2BMWAYrgWO3dhdNupSFkGRt2pq8eL3BmHJicSo8s2GIox2xetW%2FNUlwEpj8QnoKyZJSg3bFU7P0HfZhyvb3OGYde4TiDWF%2BYylSm3knSo6d0ieNxXM8rM0qXZ3fAiuLkb0pwy0wi3Wu%2Bw82dypO621EB7pqB69KwRlN6R1I3J6KT8Ss4OXeHPWTONvupa9OkuwfqOvxXQwxlW2L8hxWjQLN2O3LK3kJuLh1hRUPWZSJ7b%2FNdnB497kzj5GUJj16sqWq3dWCDsev1Fb%2BKrRgyJX2Vre3xSsldylLm0ydzSsmTiuy20loEW%2BP31k62ti7eCUnUQDv%2BU1kxZMrdrZI5JLomzfiLeeSl1i%2BWyoSrUFH0n4%2FKmynkbqVr%2FsMjmkwrceKDuKstsYsoG5CY8wb6xHboaTKE2XHI29kUvMdbxBstNrCYgiTFKlHJW2aIpJ7IPfMPJfUUqSQYUmN9Se9XjzuMaVBylT0bK5CsrbOeXbJNqEKxS09C0r3UpMb7daz5cspPbNWGUZdIWv1KwZxTAT5fknRpPCkHn%2BHEUHNfZeTFydplZ5sZDtst1gtvNhRcQYnSk96GeRAR8X22VncNsXWH3No%2B2pTY%2Fao8swQobR8VP8AAuSSdMhGMYK4LJrErZBW2nZZTuAD39qZGQiUUuiNWOJu2VwlgQSBqaJ%2FUUUlYKk%2BkA8eWu4vTeABpf4lQNvrVooCuXSkqKSQFQSPeRvWjAmS62wtgeJS8G3AZCtTaoHpV0%2BlaVjqV2Gmn0X9mW3%2FAO48tWOavJZTdM%2F%2FABLxCE%2BpKh%2BFf171o8iLybsGGNKbXorjDm5WQ%2BkAj8LsR%2FzXL8jBx6djVBImuB4ihlvEsMelWpIca2mFD4rJwk1oNTaCeA4sgXzuH3KkpYeBaXPzyBRLkgJvVnuN29onDncOvEJ0gS0ojkdCDRrLJF5EqVsra1vnUG5t3S282JSAuOP5VuwZHLS7Mzwp9AvF8LDuGqeZdCttSSlXII4PxWyK%2Bxk%2FFa%2FjsZ2Vo%2Fc2%2FClONtyQEyQO9FJGdwmu0RDEkgrYuAoFWrSqRyQetZs07qkA2kWNg%2BFf4phqrq1TqcQuVgGQRzEUUWvejapxrsHXmCXD7S2A35KtMyqBO20UrJmxPVhckQG5ZcQ2tl1YQ8gxBmFGjxRi1tAynFdmGH3C7fStwKUkKEz80byRknFMWs6ekWlYYt94LTZfBZ2mTvt0rlZcTj2HGe6bN%2F8Awaz6zeeHmJYNc3qX2bN1KUNyY0n1BX5iKTKLkbuXFW9mzngjdXNzi7OYsPvULsW3hcL3EeYlXBNTHBrroHJmgnTRq540WlrceJWZ85B23eS6tV0kj1EK1EwPrWXOqlaNEXor6xzU1iWC4lh7ri2rggmFqGw%2BD80qc7RbHuYbayRlPCLRLYUpCgtawB6SJ3%2F3rTGT6FZlao1wxO8Q2yMRDpced1gjVuNwN%2FbimoxuNdHtq8%2FbWn33UVqIBAPUE9BVUrs24FS2dQPsZ4ri1kM14qhDtw6uybYbcMq8pG8pjpI2o1Jth5ZPhcS8vE%2FxEzE7lLC7a%2FI%2Fwti%2FuH3WlggvMgQEzHfg1cptOhmOP%2FUcvcw3lzimZcRvUJLVs6VKCnFzoT0Enk0EnZE43Q6aYGJ4vZ2tmXrlbyAdA3UIHIFInkd0W4rimuzdH7PuVcwXOP4bjliwbTDMESXH1LQdTjrvoAQN9wk8niKdjhbLyY3E288brZvA%2FAFeT8mOXTovLtDt3DZJfhSiCZ30pGkD3o530FguTpnMvx4y0rBbnw%2FsbW7YKHsPRcPutp0h1zUAQSeQnj5NIap0ieVCLehxhlsLXKFmXVo0G8cdSoiTqCRvT%2BTqjPFUNrbG0%2Fd3XLBdwLhxZQ9cKMqcJEGOwj680pxss2R8Bv8ADr7FLmxslFy4baHnakDQFlQjc8gAEn3irjCS6G44rtmz%2BPZ%2BwzDMGwvAX2ra9fdvyWEpVq1%2BX6Q4pI6aidIPOkmlTlKqZ0cUV2uigEYw63myxvrts3uJ4hcOftHAXFpQZEgf5okewpDyuP8AIfCcf9JPcTt8RzG0ysMvItg%2Bli1ZcQQGWhwAPeST80fyDOXItzKmH2zVy0i8U7iF2gaNBATqUeg9gKRmlW0aFjaVs2Xy%2FjqspYG%2FdI0W10%2FCG0pgBtPYD560iU21ZleFt6J74apVZXS8zYkUfenVebZNcqE7F9fsOE7bnfitHiwT%2FKRkztRdMtjEcwXF60thL%2BpazwDvvyT3n3p2aSfTDxNrbD%2BT7QOPKcKdJQiTGwPtNF4sajZWT7GmccL%2FAAuBSi84oCJg1qUfoVKbS0JZewK2wlm9x3EmvNRbgNpSSZcVEwPfinwjW2Ic2w3lh1y8v3cfxUhKtcMII2kcQOwHX2FMxptjVyLownNyA4hlLySOwVvMcx%2FfNOg9icsElsvrK905fsoX5iyrknoP96fNqPZzNSbJw%2B15VtKzCANR9%2FpWXLLVmqCSdIgN%2Fc%2FtVISomd%2FYn%2BtcnNkidPGtWDy8Skgfi6idqxzTfQ2j4XKBAS5oTMjY1fNDG4fZmbhGlSdaSTtsdzUlkTVE4J9MUUsELKVcjvsKDnWkU8f0eodVG2kkbccULk%2FsrixRNwuCCtJgbR196nJgCn3v8QUJgkpM87VfyMhmbsaZUgAfPNT5GWeN3hGyiV77SRtzVW%2BymKpuCqdRUqImRNXzY6UVQ5bdDhKUKGkbb8j6zTIO%2BxQStlAkL8xA9u1PgtCsjvRIbO4UTKlykcmtSerMsocf9yV2lyE%2BoKkyAZ71oxydASeiV2dxKIBSkbGK0Qk6M2QllpcAwlSt471shNUJklRL7G4UIGojaBPStUXoyyXsl1i%2BTABBgET3p0doQsaJNavwTunYcVoxSSFSRJrV%2FiCNPTemiJJBti4UBuf47imQfoz5nSVBVD2tOoEUxt%2FQjGkxdD3EwD7mKvX2XKCSszW%2BoSdUGKoWNHbrkbexqEBlxdyVGVEcyOlWmNgtAN%2B4jao2xVtgZ663jUe81RAK7eDUtJUT3HeoQEP3IJUdQAjbfihc0EoNqwQ%2FciSdQ%2Bap5F6L%2BMHLuh6vWmTNT5EX8YzXdSVHV6uwqPIifGaIXwPrkkp67V4%2FJK%2Bz2SkmDUApOkxIjVPX2pKf6L36QSYWQegHA9vrTVLW0BJP2iRWqkpAUFJBkEyQI25%2BKbHMuhbi6JNbDcBe87gg8CtEJezO1ug2wtZRq0AjmOs%2FNaYzFtWwghXmQABHIBo%2FkAqhSDGxn2O1RSsqzBSQRpB%2FrRUBKF9DZxBKSSZJ6nkGrJGP3%2FwM1JJG5A368ULlQbG34yExEbE8VnbotxowM8JG%2B20frQtt6ooXSiAkoSo7SY3psVZBwhuTpMHfgcxTOKWym62EWwmdkhPzU5oQPmx6o9IgnoSanMPgw5bAhPXcSOkD2q1JABxlRSQkJ535quaIGLdR%2Femf4iiTsgVbmdkHVEVKIwm0oEe%2FUbbVGZ2qMlADoBPNFCVdkUmYLeRBB3%2FnQpBY0RbH7e3xKzet3E%2FjTpA6f81TVodJUtdnK77SeF4%2Fki3u8Wwp25%2B7oVqISTCOfxAdPesubofin7as%2FPV9qbxTvr66vcXw%2FEncHxwIIcWhZCHDP4SO1cqTSdGnJKGSNwfRw38V87YlmPFLz%2FFEJfuCd1p6%2FFdDx25Ls5k27oK%2BA%2BAJxvHWFrs1XCmlBK0%2FvAHqKX5mNJJsuOO2jvL4OZVZwfLts7KzZEACESGzHB6g1w88m2j0Hj4XCOi8cXxDCrSxTZ3Yeu2OULLkLbPSO%2F8AtRQbbobNtKzUPxOv8JKHHVLcUUAp23UPnvxNb8EW3pHI8qb%2FAMmmeacfYDjqksFbQURCtyfy%2FOutLHNrjdHOlkb0UJmDFVKWtYCEJM6RINMkkSEfZT2M4rKlK1nzDtPvQ2xpB3cYdbUSXFAdQTud%2B1WRs8Zxp1KylDhSsgjmaoKEqdhX%2FuB7QG3wlRIgK4NKyxT7NbyJ7R7h2YNN3%2B0cCkT3kDpxWHPL1Er5N0yxMPu%2F27cAOtH1yBz8e3tWOnWw5dF8ZKfvsoY5aYg2lTVq%2BlLgISYWk9fpxV8dF4JbLI8RUMOBjF2LbWzcJBKkiAknv9azSxujp9O2ULdvIa8y0fktKQShXM%2B1LjjV7AlKnZVzOMrsHMQQyllaXE%2BWtJG%2BknlJPWtsWkqMUsjbtj3Ld5brev8AAnyF2t%2BghCjESJMfNCtBfImvyRUuYsJcsX1pCQh1pWkHqROx%2FrTYv7Mc4K7QNcSbu3QXygOTEkzt2NNtXooj2JYQ626l1mNIG6e%2B3I9q0xyw7dgShbs9ZsrhtoXraIVPbp3%2BaOXlKvxJK16NmvB7E2k3DuG3zRvMGxFnyLpuJ0H91YHcVm%2Fu8l0%2FY3JDkrRlm7LNxlzF3rZ%2B2CLJThCY3BHRQMdqwz5RlT6OjialH9kbetnGrtDIaUQlIU04BwD3iteLyqWkZJ4l1IUvbNKQ3ehKWrhEKURtqPt3puPIptr2Lhjr2fZsfXZWKmLy2Utm4aC2XUiQOxH61rjiktNgZpS7KJ%2B83XnB5pagogpJ%2FwAx96Qs3CXRnx%2BRKL2g7a4oltuLhI8uAle8jjmP5035m48kbIZtBi0uU2OI2lw3Ltsto7f5k1fySX8gZWkNrzKjOIN3uJYc4FWgVqU3HqbPURWLJntmDI23sNeGl07guK3DLg822cBQ6CAdjwaVlyN9s04Y%2BzZfBPDs5pwXGsVZsW%2FNs0qjT0SBMH3jelKLZraqr9le%2BJ3g7bWGWsFzDhw1OXTAe2iSeoP8abCbjor4ds1HubJ60uSy6kp3Mn%2Bla4Qg3yTMS8dqRjaXa2XR5Li0lQ3HWjlJOXFjJ5GnTNl%2FDXFLiwsnXELUF3aPJWiTAjj%2Bf51gyyV6Q6E2%2FwDBvr9lLMxtct55wfEwoar9KGI3JBBkg9N42%2BaFRaVI0qKk7eiNZ%2By68%2Fi%2BazbFKbU%2F%2FFt%2FMVpKlgSYT9eaBwSNai0jTaxW%2Bxme4sm4uX1BbKgBJ2O5IpfxtmfL5kVpEvvcdf8A8GxHCXtaXisEb%2FhHAkUVV0hTzNlSXDyLu7sMIgh4OaNKU8gmjcZJWg1OD%2Fk6LRwzD2Bb3ljert2nkJlKB6jEwN%2BnM%2FSlKO7Zp5p9HV%2F7AeVLO7zBnPAbp4otH8HbdDCdytwKMbnjYmnQe6Hzi5YqX2efaTxV%2FDbDE8DtLLDk2zKC2lflyoqKiee%2B0VJy3RMmDjFN9nLLO67q2etrXz%2FMeSn1RAgnc8c1myq9AY0n2Wv9n1CcQz9gCbyzXceWkgJBCdZiAJPG5oYp%2B0bMEINVFncP7H3ho1Z29hjOOMHDrXGsZukttKAWXg2jS2kbwY9SyPcVswwtWlQPkw4LfoJeIHhXj5zPnvD78PrYsjcJUlzSlsoL6lBWxiQlO%2B%2B8UTi2JxyVKRyx8b8HuM1IwpwpQw1bYg5h1o0SnV5SQkhRjaFbmluAOZ27KrxvGLTBsjYRhVu4q6xFxx5a3lphKUpUUkN99xuaJx1Rj%2BRqVPogWT3XXbLGsRuV%2BdbsMq8tClCPMX7frSrNEKkbWeBTt1k%2FJOZbxhQexPFEqDR5LbSRBVPI3Jo1JJUyOKT0SbBUXrmLZdtbNi5ucSuFC2aIRq1rWY1k9kpJ4oU%2Fs0Ysrbouc2uGZdzxd4owDcqab%2B6YYXADpTuhb0TEk6oJ71OEXujpY4xfZJl3l0lvGLtCwxhFspFuLh0gec7pBVI6BPG3NJza6R0Mc4LfssDw2uWMw4wlWFtOt2PlKcVcOn8LaRKlj56Vlc1XVifI8u9Fh3mJaMHfzFfxdYSwtwWlrEf4i50Tz%2F4wfxHrECk5Zt9mSHkSuqJblLM97iI%2B%2BXdw4t9xCdcJCUgAbJAHQcClQyux2XFF%2Fk0XNgN4l%2B5gJDj0Tzskf1rZgyJO2Kk1VI2Cy7aLbtGXAlQSoTPQxWqE1RnmOkYO5jWIa3Ey2k9eEj%2FMZooZFJ0BK0rB2ZXbAA2KVqt8JtU%2FtFgA6lHsOqj26VpX0SEK%2FL2Vfi%2BZFJCiy2i2YSkNttoOzSeg%2BZ5PzSMuWaa4orNK2kix%2FCrBcTx25RdPNvJZWrYRE%2FP5Vq8aLk7kYcmbnJxZ0Ay%2Fg7eF2TSC2EJA2kASa6soJrZin%2BL%2FABGWPYsnT5bejadif4VyPKyxqkdHxsdbK2fvz5hVIEjt3rjZMyR1IOhJF2NfrIUUngnkUn5hnyGKlk6ikEzyRvFRAvGxZH7IgmFHj2qMkYX2PUvJ5GiI2ioOpUKJe1A6dyYgg1GUfecTuHFfyqgeP7MwsJIJXPVXFWHZkXAlPpBSqdx0NQjZ8h0ABQPHU9qopmWoqIJKt%2BCR%2BlQtOmOGXNMklYETH9aLk%2Fszyi0FbW4CvRBG2%2FenYW7BeyQMPKBSoEAkSQP6VtUkuhDRIrZ4GEkKPU%2Bw96fCZimrdUSyxfMRqVETv%2FWtEZVoW8aRLrJ2NMiSDMTz1rTjM2WH0S6yuFwn1gJI2nkVph0Z3FMl9lcAQrfVPWtMVoROH0Sezuj6VgagriYp8OhFkktbtK1JkDX7dafj6FTWw8zcBREAz8yKNMW%2FoJIuVAwSQI6U%2BMr2LlijXQ6TcogjeTuJo7MmvR4u4A1cT1PaqINHHwZM8nYd6hAVcP7qHqEdQeKhWgPcXJBMkcflVN12ElfRHrq55KTAB3INC8iDWJsAv3kAgEKJ70HNjVhoDPXkglJ1H8qW8mw4xV0C3bsERISnvQ%2FIU4fQOVdeqEqBPzU52VwfsRXcKkbkH2NUor2W4R9moGIMrMp9RQepHXrXmpRPVQqgAswtUEhUT7n%2FAHpLxtewqHNs4JHVZG57VGqCtkgtF6dCkqVztA3NWgJ%2FxdEntQFBCgsJkRsYFaIZDC2GmSEqRMJBiYmtUMqein0E21BQmVFXSR%2BtNoQOUpA1ABPyBx%2FOmRoh4rTHVMdhzR2QSXtp1TM9DxVkGikyAFageTJ2%2FKlT7KfQ2UkaiqDAPHIFL9mhNHqUbApUkgHmN6Yor7FyfoVTBOqCU9hTFFIAeBHqCiSUz1qCnyHaOQATNRKiuLH7GwJClTxMbVVoZFS9hm2WFATpKYEb0plNILMlKkkjb2q1EDv9BVidInYHvTUCwq0szp1SkbGrIEmlgJCiSQP0qAygmZLWFhRBUBEfWqaKWOgc6CrjcgAAdasMEPk6VlWmQeomoTlRQPi9k%2BzzRl%2B%2BYcDZdU0pEKTssR%2BE9aBxXZE03dn5NPt0%2BCr2Tb7MK7axWi2U4pXlq32J%2FED2rnZ8N9aDtpWujgJm1llnGXbFSShRUYCgY5iPap48MiWmhcZvujZb7O%2BWmsSzDYOYaXMJxxCkpBI9Dqfc8Uny3OvyNGB3L6O%2B3hplnFXsKaUbY2OLJTDqEIKkrAHO22%2B81zl4zb5HX%2BdJbGueMLe%2B43CW8PDd6mVbJKY6detaYQon9xF%2BzQ3OF1jLLt5Z3eHJWZMLKfVx%2B9Xa8eCStHAyZ050jU3ObIDjrvlpaISUynaK6PxKhMe9ms2Z79bK3go%2BYBsY78Vgmtjor6Kbv7pbq1at%2BenJmqV%2BiNoBLKz6wTvI9R4NJzSimk2U2n0Jh0JGrWQroCOvzVRbT0io8l0D3sQKVqSVFQ4BB4qeRNKth5U4q2LYa8S%2F56inywYUkb0uWOMqaRcJrkrNncFwVp7C7PEcPLb8on%2F1Mf2I70qcYdSb%2FwCxsco9WXrl3FbbEsCsLZ9oN3KP2Tg3llccj%2FSazJK9AcqdodYhiNwvC7rCrwKU0iQhQJ2V0oci%2BjVDO%2F8AUzX%2FABjECpz7ut4JU0SCJ6zWPKpXpD%2Fkg1tlf4uyErccbdDrajxFXGUrVkhjg32N7C5W0pK1OqQ6FhbagPwkdac%2BjGk1JpnmNupvXvv7xAf38xKOTPWDRQZJR%2ByPXVsG0rFusONKAWjfeeoIq1MXkgo9OyP3Tqi2hlLiisSUbzAHI%2BKYmAF8Pcbu7QsABD%2BrcAfi%2FwB6jZLJplK6uMI0qbddbeQvWk%2BwrLPJWzo%2BPjibUOZiwnxKykhi6swM12SAUFIkXTPx%2FmFbccFkjy9mfKpY5fi9GuVwm%2Bt75btq5cly29BSsbgD90jtWVwa0ySk3%2BTCDeYLDMlsu1WWLa9J0OIG2k77p9qZjm4lJqh49a%2F4rkV%2Bwu1%2BdcYc6UocCpKmzwP411cOZSjYrKrVGtV%2BgMEotlkgGIiPkRUUoydNGeT9HmHuF4G3UlS1HfffpwKOTlxr0EoxfRNcLtFXDreHrUUp8vS2s9DHBFZpybVJi8qaVpgS2zBimUMaeWVNu2jhLb7Svwuo44NBHEquQMcftsvvwvy5Y5hu8SesVsO3TyUlhJ2JPaKyyab6o2rJGKVI3v8ADC0u8tZ%2BxHLuK27TOEYlhqVuiJGuNMpHeCd6pUhuWakqQv46%2BHl%2Fh2Qrhlq0WFWrQurI6ZBbmCCfcAGgyS%2ByYHPl2cr73C05gxW3Za%2FY3BJSUiDvvt7Ghx6G%2BS4t1ZWuK2Aw%2B%2Fft1AhaZBnuDFbce9HLlxTou7weeF5jFph1w6GrTSp09vSDA%2BtDmxRjtFqDXTOmP2VMEtsy5icwvEPJtbRxLjrboEBWidvmaUOxSk19G0Hjx4UYRl3JFl4qNYci4tRev2xt1Ew4UAAkkRMqJ%2FKpwvZazzTqTOVuG3tux4iqTcYOxgFi48UqUkag2CeSTvG9KlKi3gcpbFrrKtniGL5vLN8yS06pTKmxKXI4pMsjZtXiJLsoNVmtOZLVttbSLsSVqKpOo8RR8rQmXjtPVEuaabbKzdvOtvhSvNXGykgdPeaCU6Hww%2Fs6W%2FYq8QLfJeY7rPgul3OGtWybTyCrYrUhQJKesU6DvY%2BcmlSY5%2B2Fj2D2Vzhd7hybhNjcWybm4KVEeYsydifbpRTVPZccspLbOeGGWVxmnFQ3aNvPuvpU603BUqOYHesqlci6OkvhH9ny9y%2FmnKVyrD7hx93BjiLY9SVMvKEoBHMiPenxbcgsOSt0dw8i4Ra4ZkfI%2BYs0s2juIZdtXb26ZXKAnW36VBIjhSUpnrvXUjGoqzNkyuc3wIZ4tM39vkvx78RMaxnDli6wi2w3DrbQWUtvvHeJJlRKgmY%2FzbUrIlxNC1SOJd9mDBv%2B484Wou8PQ3h1vcXDYcMolDIQpYPVW23uaxRmF5E43dmnud8x2AwnK6g4lsrsIZbUqdJUskqJ6gj86c8brkcrKuUhv4fJfu%2FOwtlbdwlaDeXLjqtKUtpTuT8bfnRf2s6totZfjdI2syhmOyuMjYnfMB5bz74w%2B2Sg6T5SYICfnvWd9HQx%2BSi78FeZwWzsb20v7mzv1pS2q70kLaHVDKZkCDEnfk9aQ4Kr6NmPJGStDrHA1b4ja4jhf3zEMRulNM2LdwNkgCJ8sb6idwD80UYtdDKoeZ1vcXVgmBZWw8ffMTWsouNSQhttxR3gAdIkzTG37GKZunkrw1tsr5Vwm0cxYC1u2f24Kgly4aj8KE9EkzKqX8Uewo4%2BTLIdyrheKWjd%2FiF8z90tmks29u0kENpSOAB2rn57l%2FsMjCKdFaYw8rDw6LFzy2h6gTyAOB71zuRonh5FxeCtvcYqtq6fClpUZO8ACnwmpKmIjid0bzYXbsvMoS0r9in0yByewrbjXpFTikYXHl2DF6429otUnQ46RuVTslI6kf8ANPhraM0o8nSKCzQ5dPrDywtDYJ8psKmDHJPVR3k%2B%2FtWXJmbZrh4mtjTJuUr%2FADPijDS0TZzumJ%2FPv81t8NuRg8jjDUXTOi%2Fh3k2zwK1aVpZbUPxFRn%2BxXo8eOuzh5Uou%2FZJsw5gYaS40ypJQNhB3O1K8iXFaNGCKtFHYnmJKVukuAkk8njtXn8%2BTTO5jw60iNHG21lZC9ZA0jfrXLbs1Qw%2FYQtbtayVk%2Bmdp6f7UHECcEvYdZuQQkkzt0qKypKv4jgvaQSpRSdqnNk%2BR1TMvMAglShtsKtSYzDLYol2QkhST3ipzY1zVdmXnpkKKYUknYfn%2FADqubF6%2Bz4XHqWEnQRA%2BPmi5ouCX2e%2BYoJJBnbrRKSY7ijwXBKU6tMJOwnikZG2gvjTHabiSpc%2FSePpTYMD4fodi5QrSNRIJ5Bo6AlH2P2Hg2vkkR0pkJ0ZZKmHrR0K3BC52SZrTCaYqUPokFs%2BUkGdY5k1pg70Z8sdMldncE%2BUSso%2FlWlPRkcWS3D3lKAVBUY2%2Ba3YWvZnlFkss3xEAySNjzWiEvQia2S6xuiCgHnoOlaIy9GWXZKbR5OgDV1kE01SfoRJV0HrZ31BYOgDsZp0JUhdP7JBb3koTvpM96dFqgJoLN3IgHUT3INNjKhX6HIuBHIBq%2FkYDwxPPPG3qnvvNWpv6FSwP7Gzr4UfxA%2FFX8gLj%2BwTcvBMSs9uapyfoJIBXFwTICikcfNA5N9jIxvRHbu6JUUAq5mDUQ5aI5c3IOwUpHUmhAlL6Ab9ysz6tuB1NIAV3Yycul8EiT3FRbHDNbwIjWZ%2BeatopowDnpPr2HSaTKb9A8F6NacTQDqASVSOQdj8dvrXEyNp2elwdEVeahQUoEAJiO9ZZyfY9L0ZsIc9I3SoyOm9SLCcA3bKUoJKjAB3j4o12LkSG2KzpAUNPJ22%2BlaYNezPLHbDVq5snSuVRwDua2RlH0KlFp7DKDuAQCZ2kzRGeTTY7CtgRHaOZqAmc6gFH09DPaijKiHypHrATqiN%2BlGpkGy0SonrxH86MliCh6SBBNDxSLSs87BSTq7mrpFuLQukbAgEkHpVi5SodpSTJAHPA%2FlQylRXyC6ExCSABO%2B9Lc29BRdofspghWgGTzFVVbZYVZRGlYgmOvFF%2FsIl2FGlGYIB55q%2FkKCLBiEwAI69KHmyBVkkwSSTOkU1Ig9SRChAPxwKsgstRCTISQe3WoQYrdGlZEc9t6hCO37wSFhO6htA5NQCUG9ld5iu%2FMtHQ40skSPcVVAxTs40fbl8ObHNGW8TfKFB0NqhWmSCDMVg8jTNsIXBn4%2FfH7w%2FvcBzBflloBaFk7jgg9KZiVR%2FRgTaDH2dvEM2WLWmEY62%2Bw%2B25DbqUkkjsRWPyZJ9GjDNWfpJ8D8xrvct2Dtli6HlaAQgH1I2G3z81kjM9D42JOOzPxKzZdsICMSw5t%2B0IKvvLaSlYE9R1NV8hm8nG6qjSXPDuEvpfuxeC4QZjSIMe%2Ffeur4uV%2BzzkvHqVs0L8UFtJeecslhUgwT%2FOu3BOthGlWZ7l03TyOxJV7Vz8r%2FLRcce%2BVkANwgrKUpTMcEbz3%2BKRLGpdjmNXkpUpRAa08gA70HxcZJt2Sl7ANw6lKnE7EGBEbihksrf49Fwi07iC3BqcKf2iUnrzS8qy%2B0Lycm7kH8Mwp9xRSlCUPcpg%2Fj%2BKPJ5CqkB60XtkDFn8JtFWV5rXaKUdaDyiTz7CufKTb2aMLvsv%2FLluyu7aOsNurGlccrT0V81Zrx43Loyxl9%2BxuFIuk%2FsQqNX%2BccT%2FAAqmTJicXTKHzW8pF%2FqCQmTJVPE9RSpdhR6I7dtKuGEust6ZRoWmZHyBQ2E0BmrcllCSUK0zAKtz32q3O9ArA2rbF7UoxMJtwhpF4JCUERrHajSSVsUlugbe4e82gtPFVrctGEq5Ch2NO%2BSLXQfAjl%2FZqD6Ua1IvUpCkaNgr69eauMk9JAyVGOGPlxxSkhTNylW53E%2B4FGvHbKSs2Dy8m0ftbW2xbDGQsp1qeZJC%2FwAuFCufkjs6OLLSDCn7jK%2BKWuJZexS3UttetEphLqRvoWnnejwvg7iL8mTmqktk6u8usZ5tWc7ZbdYsMU8wi%2Fs0j0oJ%2FERPIO%2B1bckVkXKOmYMXGD4y6Nfs0ZewzC766xVlL%2BGOIWVDSn0KUDvt71jjOV0zbLx4pck%2Bxnl7Fze4gm2S8lDV60ptadXo19NuhrpYpOqj2Yctva6Kkzdh6MNxB8p1NI1GROxM7zWvI5qOlsyzsF4ReBtKUjSh07pUTvHakNzfodgyL2WBZYomwvrB1aRMgxzA96ZxfGkOlT0gziGXrTO7l43hrgZzCApy3bUYF0kCSB01dqCV8aYpWmGPC9%2FEMOxLDUsOP2uINXTRARspJSqYPzXJb2aoV2zsRgWEYdmy6ssTsXG1XaEqEqG%2BjT6jPsZoG2bHGEUmTxTzGY%2FCbF8Mxa4Tc4xhqXWWlcJcbIJQhR5o8bTWzLlfGVR9nLNrwrbVmFN7hrEMl3z9J2KVBXqSferS2LbptNFEeK%2BUWUZnxK6s21NsiXI23333%2FOjWRp0inFVaBWRHWssvjE3WvNuAdKWieUkRPtQzk2XGFnQv7MWf7bDH8vXNw00hLVw8HAPxICp2PcGiT1SCjJI29zH49W%2BO%2BGjGVceTbXWCpvLlZcVBKVFUyOw2A2oozpC505Wc4c0sIxRb2LWLIKH3FuIVsTAVAA7UjJjvo14%2FJhVUVi47i%2BHPYgLVxbKVx6U8QdiTSfia7GZPIUv4grL%2BWMSxbH0FNi484QXi6BCQB3PA%2BppkV9GWWR3sK45lm%2Fw3DcxYhehNs2UqUyFHlOrkA0xwJDI7L08GrjE7jK9vh%2BGJKUvPIS0tGynlbn86XZswybTLo%2B1QXBkLLjqmLi3uLu7LaA6ZICUQUg%2FNHmyclpB4cNWQv7Jnh%2FimZvFTIVrh9o4q5bdIWQJ0oB3Onqd4ik4sLTtDoY5OPJn6asA8F73MubvCO5w%2FLZRhrrtym5dKNAFupqT6kfh9aeDvvXWeN6lH2Jy5YpN2Fc%2F%2BHeYXMV8R%2FwDEDd4Y69hlu6y2hMtaUPltSBB0lIQkH5O80Ofx3ysyeNnShGPtmof25PFHy%2FAbMN7hmHMYZhTuNstWTK0hKr9TbZCFISncEuE7q4Anbas01qjo4o%2FG3KTs%2FNvmPMmM2GDYphaEITiWJsFi4UlRUUAkagCep4qR8d1o52XLybZCfE565tsSsUrSGra1t2LZppPKtDYHHaZ37108cYxjsqFE5wvEsZwTIToVbsYa%2FjDaGlPOqAcVbpVOhsHc6iZPxWTyM79MXJXtG5WXmsMyz4aeG7N0VWq7lly%2Bu3UAFaGyohGgHrCSfmsc%2BTVI1eI4p2tkqy%2FjrmM4lbOM2V3%2FAIO2vy2ELOtRPQqG0nqR3pHBrs3xzSiqOlmQsm5Xbw7EsyOtWreKWdsbO1u7ghZ%2B8LSAtZEQhKAQJAkkGO9dDFji1sVOTbuzWzFjl%2FL1ycw40qMDdW4vBbFXouL8IVBfcjdDalSRPqI2pbjFLZphKVUixvBTFsez3jeK5oxtSbizW0m1w9tfpQ2lKuAnoEis7cfRqxY5Vdm12I2TjGFtWeEplzSolxP4Y3kg1VOmXCMnKzWnGmbtK7lh9algqCfUPf8AieK52VqOmjSszT6Np%2FDu%2FTg2AW9tbNab1wDV3SkDr9KwPNukM5z7NqsrYy5b4PbP3qVWnmJK2kzC1D%2FPHKRHU10%2FHtL8kZp5E2AncfczHiLbDLSLbDWCS02lRA91K9zzNVLJb1objqC12E38HZxAtpKSsj1DYx%2BfFVwtAZPIZZeQsMt8HuEptmkbndRHArq%2BLCMTkeRFt2XViGaWrS38ht1KZACQOp%2FlXVeZVQpxT21spLNfiBbWZcYD6HHuvUJH99q53l54pdjsGO3so%2B9zuq8ulJbKVKKo0zBNeZz5m7o9FgxquJMMIvVENlYC3DBA2gVkWR1TGyx09FhWTmoiCFCBA2malsz5Ir2HmrgphAG%2Fv%2B99K0qYhzrtDsXBUkiZTtFCLk7dmQuIghJg7jV%2BXNWmXCVGCrnSEyU6uNuhFUCervUpJmSZHX9KhDI3evSN%2FjirbC5sU%2B8FRBSoAAj8qoilJLQsh8wgA%2BqYKahayPuQsh4SUKIVPfvRJ0NjJPodNvFPK%2BBPzRKZUs97ofJu4gAfn%2Fe1MFudqgraXRSSFnUn8WkdTRRdMWSy0fkJBTtxt13ro42JkvTJNYPODVJBT0Na49GTLGiX2N1GmQQOSQa0QVbM8uiXWb5MGJV1NakxElaok1ncwUwAOlPTMc40S2zuCEpAI7yK0R6ETfokLD6iBIE%2FNMh2LC1u8pOk7JHzTY09exUpegs3dJCZCjPBNMhd0wB0LjgyP60wh9961CSvSR9aNTpFWhs5cpEK6n33%2BaAsG3NzqJBTBGwE1dvoCULAlw6ZJCtz%2BlIt2XGNEfuriZkerrvV%2FkERu5VJUASTMcVUpWVSAj7hBMg78xQljFbpJ3OkcHtSXplDZTqhKdQ5jfiKtSZFZ55u0J4PHYb1HFt2XsojEEpQtQToKjuN4riZJ30eiw6RFrhIAMeozAjfrWVq0bIRXsZICgoxPUneTSt9Daj9hq3IJT%2BJI23BHP8AcU5sTNe0G7VagEmNQ3PwaOMqFB%2BzcTA1oAJ4Vvv8U2ORrYjMpN6CyHARAO3zWqE2zLOH2Pmlz6iQOoM7GnipJIcatzCioc8cCoCfEGSrUQONxHSpFekQRCVhRVM9KJJliTiYABEkmT81WyqPUJABk%2Bode%2FtTeaBk6djhICAZHYbVOSFSY4BgcFJ395qm0ULIjSCSAeI71UF7G417HrXBlRT0G1FJ0N5JIItqSnSEExIk9hUasy5H7Q%2BbX%2B6AI5HcGlzRAq0v8JlQ%2BaEPjrYTZWAJ3KTPStAF%2Bh22rgCR8GoQVcXsSVGeBJqEBFy4E6ikkdiO1USHWyNX7yEgnWoiSfcVSki4p1tlcY0%2B35biVuggg8n%2BNVKf0HCCfZpX41YLbYrh982ttpxhaSACZAnj4rFlXJ7NUIunxPzI%2FbZ8DBY4i9jNpYoGokrQNyOZIijhDVehU8TUbo5Z5csLjCMyWj1wjWULBK9JBG%2FWs%2BWGNddmPjTs7x%2FZjvHMcy9aqtbpLjgSNK0GCRtsRWB41ujt%2BF5fJcfaNg83feW2nmMUbUtrZKSSSD7%2B1Jlht9mvLm1%2BSNP87YBYJau12La0pPqUkEADvFdfxMjri0cPPwk9Gi3idYMBpwNocSoyOwBrt48aa2YZJrs0NzgTbXb7WkaZ%2Fd6isuaFMKEa2VYblAdUVOaTEkKP6VkzSaSoub9oRuLpP%2F4m%2FI%2Fv9KyZHP8AlYMuS7Aanm3FylRJMTt%2FGtODMpaY3Fkp7JCxa2z6WkIJQdiJH4ac5pGxZOWy7coZaaxrDnXmFNpxJlIOk7FaR%2B8nvwKxZ4XL8UZOClKkSteDFtpnFGkEPj9nctjaD3jrsaT5UXGtUPi1DRO8PdftPIebcK0FALZWeRwQaTEJTXdDzM9%2B3jNi4zrDdwEkoIOw27Gglo2SyQl0UjiLbtwyLVYWq6QJSTuSntQX9gSVOgHaBSWHrckpXBGmNz%2FcVEDb9AbDHUvXL4eMBCgdhEVOTDxYsa3JjTFGi1dJubJxYcmQeoPxTIJ%2BwMritxJwhQx3DAsrb%2FxAAeY2r%2F7o7g96BlIguYLRLDYaWFtuNdQNgKOPQvIBLJYaebfLhft1dCd0%2FBozMoyvsuTKmKs2Z8lbbV5YK2JURrb%2BP6UiTSOh48n0T3G8O%2B%2FYM5c2TbToQrV5SgdWnvq7ieKFJdjM0t17BmScdfy5iTdy05cLsyQm5ZUdJKevtPvTsOXjtdGTycTkqfZN%2FErD2LnBTmPD2GLvCrk6w6oEb9jvAV7VqzeJUVNMTgyJXBs1TesX8OdbxDDVJuLYKC40iW1e9KwzXYUmlqQ2zm23iDVri60aWbhv1gcNuiJmK6y6tGZpeyoWlqs7hJWgqt52gfrRvJfQEWiwH7hs22HPtgLbUAd%2BUwRQXJ6ehvJdoyxW9vMNvGLqxulMXLKhcsrSfwn2%2FPiglFJe2C56Ni%2FC5TOYsXylmmzUFuPPFnEGNH%2FicHUDneJrm5JR6o0RkmrN%2FcnZm%2FwHM%2BAXrTarWzYeLegyUrVJ1JV8idjSXSHxm5aosm3xeMVzPc27ahlHEG1OFsGSw5wB7QaUsqT0blhTSvtEj8KfBI5synnLFrRgPXlg4la1KBGpBI499%2F0p8NqzB5UkpKJz2x3JIzZnHPLqGlN2No4tgrKSdBCiIHzFVy2MUHFUzTzMVym0zX92s3FIt0KLQI422J%2FMVemJbdmw%2FhpmRjCcNUguul5LinBB2JI7UEWk6YUo%2FQWzBm7F3sOtWLcqTahtyAgATqO5Pfmqm3eg8Sgn%2BQMy9j6mTb2pCy0RpIIJTxz80pSkuzbFwekPbgW1%2FmJ1H3q4WVJAQ2kfhA5kCiUraE5MSSbHuCYhjWWcewTEjck4OXlgtASlUnclPWJ61odIROMWtEU8RkYgcRxZal3N7h6yu3aUsbb7iB%2FLpQSlXQMa6LE8GswLwrL2XG23AzilveOKTvsog7SPrQyr0a%2FHL%2F8AtD5%2FtM4ZP8NMORYvm%2FtcWW7duJSNOnSkaU9SfxH8qFyVB4OcW3I6Kf8ATLyNlvFsUxvPLVq8zi1rj3%2BGNshuVNMPslSXB7hSQPgmt%2FiJBeTGXxpH6SvBSxcwnKl1blb2KX%2BFvK0JG4TrglIPTedq6uONL9HNzqMXooL7TSseybmnC02dq%2FiOH4tboaftLdBUtKSvzNIPI6gj3pPk3drY%2FwAeUMip%2Bjh%2F9vlSGMo%2BEeAXrxbxe5xW5vsSYZBi1UtUhv2KG4APSTXL8ierR1MOByTb6%2F8Ak4UY5eWuKeJN0lpTC7Fm%2BcJUFSlphvcpB6gAfi70zxJyl22kcfypcW0iuXL53OOMX%2BYcRaX9yaWXAFE6dOo6U%2B5PFbviTMXN%2FZKMo27ucMyWKsSfJ815LLLPmEqKeyOiUpG%2F0rLm8a9xCx5JVSN1M9D%2FALszHg1hhqGcFyzhllb2TZM%2BWyhCYneJJJKo5M1mlgn9Gzxbjpm6X2ffDfBcexHCn7lm7OEtLCbNsIPmXChy6frJHx7VWHA5PTNefJSs37xTDk2eFWNndMtYXhweW3h1khWp95sfvuCSVqMqUVqre%2FHpXaMmKXF3Rzjz5gWI%2BJviviFwxchGFtqNuwsE%2BW00nkj9d%2BSa5fkLlI62LPSqjdXwV8PrRd3huE4Rdrcatky%2BUiABPHyo%2FpUj41ytGmfmOKo3wxrKOE4JgSnQ02krbCCkRCB1AnqZp7jSMcfLlKdmmVzlW6xTM7riGNdixpWCEw22R%2B8tR2SB061xM%2BNynySOz8z0XNlXA7ayeauGlpv7t1QS1A9Lh7hPJAn6mlY8Tb6ClmktyLMxvEALM4VZPuOXa4Fy%2FwA6lg%2FhmeAfpttTssa%2FirM0WmFMt2VtYWaT5aluGSrV%2FmPv%2BdBBKtDFsnGGrUAXtBQJJI3I4%2FhToSaFZYvocPZmOGqUWHEhSdjB2HtWuGdexHx%2FbKszl4qpw0uIdvgm4UYSJGo7dKd8vsbj8dPpGuGI%2BID%2BI3jiWX1LeXKRqGwBrneZvaNuHAl6JxlNiXUOPLUu4MEkq2iuXFK9HTw4q2X9grhPlpaC1K%2FDqSevvNIyUpbKyy5dFiW7iC2n8RVxPY%2FzqWITaCaLry5KgFnqSYqC3D7Hib1ISZWZidjP50Sm1oW8Ks9Tdo0yCopJiP8AiiUmyfAhNV0gEBWrr9KtN%2FZPiPE3OpK9yZ4kf3FTg32yvhMA%2BlsncKSZIif79qt45L2HHBy%2FQqi5lI5UY%2BNvarhP7YxeP%2BxZF4klOkogkTO081alYxY0EG7hRPnSFJ9yDFWhOdpdIdNP8GdHA4AFFyX0ZHJfSCjbqdQCi4NttvajT0EnGgyy42sJCAkRtvzH9aJfYfFB6zd4AnSDEkzT8U2tmecaWyW2DsFJCiARuTz%2BVbsWXRhzfolllcECFlR945rbjkY5SVEpsLpMhOoyOhNaoSFEqtrhKimNQ3Mz%2FCtUejLkX0SazuAAmFEHvNNgxDSfZJLW4lQEpKR0p0VsD4%2F2GEXUJIUpaSBMjei3HYmSSHrdwpJgLMdppsMtgSqtDlN1q3UpUdO1MU70KkhUP8wfY9hRKBSx2IG4HqJO9R%2Fj2ElQyefGkE%2FFCslg07AzrskkmD81Gq2GB7qFHcwR9KGEt7IAbiSDJJPf3pnFEArywkHeATuDWOTdsgNdWqHPURI%2FEBS27Ik30DHFKC4BIRMTHNaIxXY5xQp5mw3J6H3ogHAqPEBCtMTBkA9TXDnR2sKZD3wQVJ2EKPq61kyXejow6B6tQUhStRTBms9FsKWypITq9IgmTvNE5i5WH7dQIMqCjPXk0cXaADNs5MARpG239K0wp6Bn0F2lzHqAH8K244pLRkydj1tw6gfSQP0%2BKtJ3YlwHKlOEDY%2FU0YpipOoEyYPXirTohmQZkAL55FF8gEpNCDiSpcRJ5ijcbDTtHwSkBEEBXvzQShWyOOhwkK2MIVv8RUjG0DwQsjUCZAM7DsKnAvihUqAJECd%2BlHFFpDtCgSkqTv0NVPolD5slREgwRsSImgUmDKKYQaOk8zvANU3YtSroINnUE7pSJiaJQC5Jqgi0uVQYAInmmgSSvQ6Q6QoEaY7A71ChRbhUF7GCN5PNVv0QHXTZMwQQBtvQzdaIRPFbdxSDpSkjt1oVAYm6pFH5wS%2FatOug6kgEaRvFRwIpSXZo94p5qXhzNwpRecZSkqWB%2B571hyY99jZTdWcUftIY9Z48q%2FaRiWpEKGkgyk77b%2FQfWlPyHH8UMjmUoUcyG8pW2IY4fuptk32sENqI9f51ITi3UvZjWC3dnWf7LWVbK0tWNaF2t0WwDoUdKlQDxx0pOWC5V6Oh4WNQlZv9juWW7jB1pUmxuFaAZUnp3BjY1fCCVnTlK9P2aAeJuF4bhTt8Xm3Q0pRBTIKUz2%2FWixzd%2FiYMuBJ3I0H8SkWlwl8sFJaKVb9QB%2FYrpePkmn%2BRx80k2c8vEi0Ql9%2BCogCAY7CteaUZddhY4t6RrjfhSVLQoCDwY3rKmBlVOiOKvXQ6QZMAg7xIprjYtsWKFupBQVEGBzSuKjLohIcNeuGnW9QDikkKjuKTkzpM0QmorZfWV3cYZbsb6yXMkaVNqGx7VOd7RcU7tFyXKn3Wy68yi3efEO7bT0I7VJZuK32aIre2DvvzjWFrw7ywq5bUXG1iCSByK5mXNyYz42%2BiHO3776tYMlW0Tx3%2BlJbCSXodWqVFdqt0JUtCzyfxpnj8qougPmvDGsMxJF%2FYmbdYko6x3H60T%2FRHF%2FZAkMITfrcbcT5a52B296EGgTdOpbu4WsNwYjkUyN1oG03TDlteKYQm4QQhQJgo3ifag4sLmkGEqsszoasb9LVjdKBbS%2BDAXPE9qbinTpojkiu8WwDFsrX5w69aUWiRoUAdJHRQ9qbKDbtdCX%2BiT5Yuik3DbixoSSVASdXxWXJBm3xJxXZdOWsUu21MseZa3lmdygqk6eu1Li2jRNRntEldyzhjry3GloQ04CdBB0%2FFKyNbVdjFB6%2FRJcJxfDctYVe5dxC3TmHKt6PLuWXJC2HP8yOxHeun43kOEeL6Ob5njpy5ezXnPmT15Nccv8Cu3LvB3yAkrMJIO8BXcDpAroxSkvxM%2FFyVMhwYOO4Vc4clUpIKmZV%2F419j7GmLSExhFSpooK%2Fcesbpdm8nSpsxB4UZo20IytN2g6h9LuDMPNShaFqSRP8APtQpX0C8ikE8SvG7nCMIvXQnz0AtKXPMHr70jLKa%2Fihjm6oO5Bz3iWQ8fw%2B5s1rftRcJfW3yFA81hlc3Q%2FFnd0ztHlV6wxvKtnm2yw5i6wq9bN4lPJaeSIMq7g9KzvG7fujo85QklJUn0Sr7PLrWbsO8Rcv4ghgfietHFnZKgZjfeKTilZty46aSRvt9k%2FAbxOVfEDBcyIYt0u%2F%2FABg8zyonYCevINb%2FABfyuLOX%2FUVxkml0aPZ28C7zBMg59zQ3aXGFtnMSsP1lf%2FlUFqOo%2Fp%2BdBPHpv6GYPJWTJGNfZxQ8T8u3OAYklb%2BvzH3lKSQnYkHmi8aPN0TJBctDrKl6%2BlAKFKQ62ZBI5BHen5PHV%2FQiWZJ0zYbDMNubuzbuXVsNMJspSpQmTxFZc2NKVIm7A1th7Llq2hoLTcpUZid9%2BZrOl9jUpCmDWyznXFLi0U6bdpshIUQD%2BHfn3qWrGSjOSLWzFl55GUbPHXLZy2bt29UJklYO8%2FUiilIOGN1UkRl7HMFzlkVpTKGUY1a3rQWkpIUpsjSCTwapTvRU8LUqQUxTIlxlKxXfuNpRZpcUvWIGlRAIq5R1aKwyafFkt8NMPez1mGywbElJsLNTTtylxSStKShGokD3AgnpSI429mtukfoq%2FwCm54XW2C4TdZpQ4wyMfsFOqK0ylL9s4pIW3HXTJmur4mPjuRk8rK3o7ZeEOCqw1nMyrqHWLy2aeaWHdXmKUIWdPt%2Be9dSD0c7JOT02VlnHArTHvGPDry4au3FW%2BHXCWWwiWkjZCVJJ2KiU8cgTQTW6NHjfjBv2flV%2B30jMiUZowJ9OIf8AcOHYgr7uypRXcXarh1ZW6SNyTKQEjgACuNlxx5fkbH5EvjVs43MOYfZ4bcN21hdW92tH3Zbq1yp9ZVLij0Aj0gV1McEujn5Mm%2Bhk0i7xFIwezZUza6wpwAwHCOJ7x0qsmSvQHyfpf9jYLwgytb4ZiP8Aj16y8vEH1Gww9JTq0piXXgOyUwn3Kvam4re2hsMjZs3lzJ2JZkxezvsYZucTF1dpbssNZ2dvlBQAQkD8DYEanFbDpvRSrZJ5ZelZ0ryrj5yFdHI%2BEHDMczqtCEXirBBUjDdtrW3X0Cd9S%2Bu4rmxXF8Uw1yaqRs9nPLmOf9rvYfh91Y4FeXFqF4nizhCl2zAG7aJ2bSJMkSVEkdK25cUeP5MuDZqGzheVrfF7HBsqWbt6ytRWu6gl7EI4Uofutg%2FE9a5c6uoo34832zdHwRwz%2FDrppnDGn3rdRAcXMlx795SlcAJ4iix2mHNuTLu8SMTtlltv7ygYe0ny1gqhDrg5kjcn4pjkk7ZeLBJbRrjjRxLF1WydHlYaXIatGU6Q6U8EpT%2B7vEmSroaz5J8uujq4ZuKJ3g1nieXmvKUpFzmJ9ISpxKPTZIP7qBxPxsPzrnytS6BTcpfl0WFhWF2%2BGWrTl8tpTgTq9XPP8aPHDWySl9Dy0eXil1ptEhFu2RJPWD%2BtIlDdoLG2nslOLYpY4PYoQmFOGBsYpU50qGuW7KEzRncMN3CGH0h3USNREAxRwjasNQb9GnuZcy3T2JuuJeU9J5KpCPf5pspNIfhwtS%2FQjgOLOG4ClpUNR2Xtt8CsWVs2zaT0jZXJOIh5xpkhQEAFSjO9YG1fRFJy%2FRs5gLSVMoWop2AOx5%2FrSnjUnaKyKibsLKYUQQB3M0yOFozmarvQJJIVx7f80HOIUYNmTV2VJCoWTPMzvxVPIgnjaHIuCROkBPueDRWqFiC7ohJGobHaB%2BdVyRDEXSZBJgE7T1NTmiJWeffCDGwAncmfpU5IONIzRdApBSrURO8mrVehtDhm6JIkI9iTV0C5UPmrghMJcQNjImKqxUpJhhhchtwLAkcHkVDNN06CTN0kJAUrUR1j8VaI7SFTi29Bi2fEApSlRJ5EVpjGTXQSn9kjs3txqnfmDsN9qdBemBlaqyT2b60DaSK0JUYckqJVZvkaSXBHMdK1YXezNkiiT2NxsmCNjMmdx3rXGbszSVEotblUj1aR3O89a3wnoyzv0SazuCAiJBgSKdCaFcXZI7a6KoAIB702Mn2VJUGG7ggJlQ3HJ6UTbuxE%2BV0hZLy%2BpgdT2ooy2A79jhL6gQITp9iZptlDlF4VQFARztRKTQuUaPF3JGpSYBG3sfrRx31oAbOvFYIkxRU0QHOuxMAiPaku%2FZaQJuXSAVSmZ%2BtFJUWogd9ST%2BBQII61alJggl9Kkk8AkxsOaRkjtskX7GDmuQnZYneT%2FClMasgNdSoFRKiAd5HWnQdotSsRUlACiABvAMUYRWGJagJ0kpI0yOAZrzs%2BjvQivRDXwA4SSpQ2iem9Ic%2FRoWtDKQFpbIBM7RwKVKaY1yTQ9aUkqABKljk7zP8AOhEzVhS3IJSAQTPSmw6FtBu3VpAUACewPJo4yaKr7Dls8lwgcQOvQ06Mr2Y8kKex%2BkhIGx%2FKteOT6ZmnK9Cw0gLmZmfam8kLbMwsg6hynrMT80aZdjmQqCSIPfk0aminFWYRAHEgd%2BBVSlaBcF6Mm%2FLKtQiZnftS2Th%2BxwghSdlKPXfaPirJw%2FYpIInb33qBIzQpKiCAY3%2BDVey6Yu3IBMieN6ZBF0PtadIkbbkUxpFPoet6jAEjg0gzx30PWlGCCspPseaKLotqh%2BhyBEyZkyeKL5C%2BDHaFzGobE7EmaimU4sX1JIIUd9tzRc0UJOnYQrbfntSW7Ik30RvEiAlWj8UREUcGw5VZTWbikWz86T6TsRS80qabCjKznT45t3q7e8RbsFCVhSQQBt%2FWlZv42HGa6Zw1%2B0XgmLtu3bqLUwoEa0n8REnc1zW7ewvJpRSgjmPimNYjheNNvJ8xl9BmRO3x%2Bta8WKC3JgYuT2dVPsheMLt25huGYg2hCiNKnQYIiOlZMjbdro2Ys1aOtdzibeI4GhdpoYdKIlP9aXz0bI36NIfGDCGLpu5N1bpLiyoBQP8Av%2FGrhJgZsfJbOZ%2FidhIti%2BLckNyZCdx71vj5iS2jj5cST0aHZ8sVqfdDjczwkyelD%2FeaqhsMMTWfGcMf8xbjSFynr3HxRx8iEtSYvLiXVkMctFMuFWkgnnUODRzjJK10ZsmJx3YUsbUukAqJRHA%2FhQxgq5NFxx2rZNW8Chpu5ZQCsbkBX4xFZnOMn%2BTGPCia5YxF7CnErgLsyf2jRJ2P%2B1XHPGO0Nx4mvejYPD8WbvcGDhbTdrE6dgSUdz70nJllN36NUJxj62R%2FEXGrxti8aSUlHKeJHx1iszVvRrck1aVEaQ41b3jlu4ylTSt%2BIIP%2BYdI3pU81OkAsUZbbHimUtPNtrUshQ%2FdiFDkGl86ey346e0xnjITf27Vk84lm8TKWHBweTCv4VquzM40yp1Mu218hCytCwTqT%2Bm3em0mtCGq0B7gLVfqaKylzTttGr4qRX2Rx9ju2EW6ilKlLTII42oyjKxbYWksOO%2BjfSYI0kfFDJ%2By4vZdeXsbwTGcMtMHzclV2hKPLbuEq1LbTOx3322NasPlKuM%2Binh3cXQNzFkY4TdWWL4RdAsK3SpBlDgHSfyqvIxX%2BUQ4t%2FwCoiDWK3FjiCX3VuWxSSCpsT9PisT7GNlh4Vn9nC7y3axRIvMLWvdxM%2BkHqQTUvewafaZb2M5KwHHsLbxTAMzot31KC20un0mffoPmjcFWuyuUl2R21s1Ybh7mGZtbcxfCViHmmQlaVJ3laZiFRMU7DlcP5PQmUb6NdM7ZMsMDW7mjw7xu%2FucESsq8h1spfth%2FlWJMj3rpYckZLRnyST0uyncyNNZgZYxa3t0tXChofSNoX1I9jTca0KklVEXw8uNWt%2Fh7iVlxA1wesc1JaEPDuxRu7Fxhb9hIBSrzUp7QN6pOhypaowwjFfuhbQ635uidJPP8ASs%2BRU6QyOto3o%2Bzb4%2Fqywze5UxC5RdYPcpU6yy6okM3EQdI6Ag8e1cvPhknaOn4vk8tSNx%2FD%2B6xXA8KxPErd0tNOXBfMbEJI2HsKyJ72dd5nR0U8BcwYq7b3l%2Bl554v3DSG2wTCtKElStup3rTjl9GTLLmrZe%2FilgmHZ%2B8DkYbgaHUXV1j67h8oUdTKkJIXI9yP4d62JN49GWDcMij9nEb7YngcnJ7fho44hbd3crUl5KYlDilEwR7AfrS1JxKyyV2uzRHEbS7sry%2Ft29aliV9tt4oJZr6M88MZO0bk%2BGuV8RxHK2GPX4KG3GwW9Te5jn6CluVq32bMXjxcewZj2GqtXybRpptK3TtHJG00Kr2alGlVDfD8MVeYlgybJhSF3OpLy9IglJkifjvUfETymvX%2FJ0p8PfDHKOcvBfMq3m31XtpZOMPlQJAdCCUFJOwH8aDmgk5p00cs8q5NvMoZkwrFcZw4py3e3BtlNOgAEhUHk88UMGrNLha2bd55w7DsU8L884Rb2zKb%2FAPxe1WytHqLbKknmNhPP0rQ2mjPHx08q4vRPPDPKLWCWnh%2Ffvhi2cebxJoFLUuLT5JTqO28kRQYk12dHJ4j5Uno%2FRP8AY2y%2FfYSjw%2BwtdqLrDsPbRbLeSAApC0pUoaenX866OFOzj54RjFp9nU7G8CtsGQ6zY2wYUpotMqQY8tKlSmQeu8V15OPpHIx5Cqc6WarNq1zf9xuVpYtEI8sz6jJ5Ij8JVJ996zeQ1GNo0RaacH7ej8gX28sMz8x4sZpxjELu9syF3lqq5ZXoDzMzKCNwIKUzM871zcMIzk7Op5WOLaUTlJf5VxZu1w24umf8Ps3En7s0o6XFJmCvQdwnsoxNbliSVGDL4ntsn2T8pPXryLa2QyyzAl10QGx1V8CCT8UMscYq1Yl4F9myeRsPQn71mRGnC8JbQcHwRTiBqWkbuvhPVZk7%2FwCv2pnj5OSGY8SXRa2HvXhNmMIxm3wRCdLIdLig%2FcKKogESokmNhsKmXCpKmy8mRRao6r%2BCvhrgXgTkhGeMw4ViedPEa7HkYZhbDf7a9ulgFXpVMJQCBJ2TKid9qPHhUFpbJl8m5bWiF5hw3NecG38K8UcfvmFXTpfxK3sXA3Y4a0PwslyYIGwjclU7Vhzzt0WoqS3oGYBmDIHh1aXV7a2lziulBYD5Soh7aEoSTBV7%2FhApaaSNnj%2BPGK0Hct%2BO2Y3sYtMJy9hTbThEItLdAKlk9AkbADqfzJpDy%2BjXFR6bL9y9ljG7%2B%2BscezrfLxjFCSGLNpWq3sFEfug%2Fjc33VwOlUkn3s0KTRPM0WltkO3TjF6FP3LkJG4UqI4R%2FWhnFJaQ%2FDmi9Mg%2BVszf4hcOP3LRtGymAgHUopJ3PzWXJJGqctVEuG7Q1fWtubcvvSAEpAnT8d6ufGuzNRLsEwBeF2UONBp1RlSTuPr3pDb9F0U54iXK2W9LSw5cEaQB%2B7QYoxb2PXF9s1lzBb4m%2Bw5qacjc6iZ%2FOtXxqK%2FFGyEkuijMaS%2FbKU2lJAIIKxzO3WsmTs3Y5aItaYx93ugQtxegxpOw%2FU1mzp1%2BJeTHyNpvDvMtuQwoqVoBGkpPB9q5zg%2BVsrGktPs29ytjIuLdBI0JH4YNFNJK0FPET3%2FEQQnSlQAPJVEUrJn0Z%2FjPlXjZSEpQAQN5n0%2FSaVz%2FYTT%2BzxF2g7wtKpgdZkR9KrkibHKLtA9JSUL5AI%2Fn9aJ3RTgn2YKuwkJWkgoJmOYPeqLnCL6ETfla9SkLAAJAO%2FwClVyRcMaMRcawFKESJE1OSNCxJKxZN4oFJWJ5npQPI09A5I62PGLtKhI1QRJ35pilaszLGwm07qBIUDtEj%2BMU9dFPEx%2Bw%2Bfw6oI2g1Yma0HGLhAA%2FKmRyUKaCtvcpSvSlYg8f6a24cgmck%2BiTWtyUpCNUSIA7%2FANKfYDZJLO5OlCiue3WiU2JnTJXYXPpAWSeRvW%2FHJejLkS9EptXQkxE8CJ2p60zHOPslNncglJEaeh6frWrHvYtokTNwAUgLVE%2FH5VtxdCp%2FokLFzCUCVlPvRqVCp9Bdq4GoCSaYnZklJp%2Foetvk7oUSP51bQua5djpFyAnSSpQ9hVrWylBLZk3cIiCrUeOP50zk%2FQMkxT7ymBAKhwOYFMBUGJOXAAMHcDrvUrVkcRq64kpgfBBPNNi10CDFrElKkq9jExS5uyA11QBIE78bUKyaqguLBDxc1KISSDxBigU%2FsYor6GTiVaSDCjE8c0Da9C5NehqWwYCgkgDeBvVIpOjHyUdNfzRfIwvkKmxIjSoFUzvI2rj%2BSq0j0PjOyF3iwFn1DWBMVzskfo6nwoZhSSrUk7jgH%2FesOSMl2ThQ6adkp1SVbiO9acT9ESQUYUNIEkbzxx8U5SaKm%2FYZtnFEJUYJ%2FmaajDLsJMOlIhKyFTPPWrTFzSoKtvJ4VsepIp0ZoxyVOhwFKGkAiPnmtEJIBxTM%2FM33AO%2FeK0Rdg%2FGKpcE7Qkdf6%2FFEU4MzKgSFAExsYO9QFquxVKtgDuOo6VChZCk7KnUD7bVCDhOoCD5ahUF3I9UoghRUO3xVpoOPWxUSgg7E%2FwC9H8iLHbTwMaiSoHmOKpzIO23JJSdz3n2oAXGx82sbDeBUKeND5LojWkiY55%2FKrVFylQsi4IgFatz33%2FKrUWA52OU3APqCjEcRzRRlWmUuIm7cDSkKg9qk2DCasAYhdAoWRG8yeZoYuhqUXsqTMjgdadStSTpkEHaqnsOCSZpt4rYfZvW76lLfUmNhGxrL5CfRqjG%2Bkcj%2FAB3y%2Fgl0zeJN%2BUpEwlTR9%2Bn86wSXofxaVNHJfxF8O7B%2B4ubi0Whad1EyARJPSrk%2FRn47dUv9yd%2BBmD3ODYjZOMXHlqkKS4PxAjn8tqTknxVs0ePhd1p2de8oZnxM4Bat3rg8wJgKmR9TWJeZHs6EvHaZWWfcUeuGH27pAWgH0rnp89eaZDy4%2BiSxNnP7xFZt3XbtOsajOlIgpOw3p8suznPAkqNJs74a0p15QX6kjoAOepNMUjNLC47RrhiWHqLiivSpA796KckukU6q0QHFcIJJWhJSvkAde8Vox52tPoyRy7ImhLlg8V%2BpQGy0ngimyzObpGeWTei18AdtsUZaasXQzeHcNrVt%2BtZckHF7NEcM5LTCT2G3Fq8tSkKAJhYjilylF9IbHHJew%2FgeMvYOspDo%2B7qOnc8pPQ0nZoXRIQ6v7wFlaFWjoJAQdhPSlXxN6To%2BxSzKW1Bi4ClI3CSmSR2%2BKvn%2BjPDBqrAN5jDYtWw6AhbW0cc9PigyttWgoYadchK4m7w%2B3vbd7UoKhY%2FyjmfpUhlVUwH47vWwC807elD6W3FvoEPKTvqH%2BYfzp8Z%2FTFSwSu2iJYgytl9DoBUgGQo7GnJ6szuDUtg03aUXJ0DRqkwUxq%2BDVopjVq7fZdcV5RS2ATP%2B1WVRKsHvmxoK1BG8HVHpnrNKyL2hkWSvC804nhFy5ZFKcUwtZKlW7h2PSUnoa1YM7j29FTmTZzArTMtg%2Fd4C42m5AKl2y0%2BtBHt2rXk8eOT8osCMp3T3%2ByrSu9WTY3tgxcBOyhEED271jz4YxV3sfsnWXsRfwFlIt1vLtCQFsPEp0dZSdxS8cJS2gZJstO8xJu7wG1v2HnUNiUqUUpX16%2F7GtMfGd%2Fl0UouyqscaTepbfwS4w62xCCDrBAufbkgyPitEZY1pMp4YvZROMMJtb26SUosLjUQu0O6V%2FwDqR19v1pqmvsw5IcWQW9KWsVQ%2BjZh30H3BG80XK9iZuuiPXDb1jiStJOkKM7ciii6GQi32MLklD%2Btsp08jbkVWVpIYlSJ7khdy7e27zJ0OIUHAdX4RO%2F1rnvIpRd%2Bi8bXI7S%2BC2ZbfE8FvsJzIi0CrnDSltYSJSoAgEex25rlvJXZ3cMlVG0f2d%2FE5rKuC5IwzErR1N6ceNs88UbFncfXpTMU%2Fs0TjCuzoJb4NcZeyZ4lY3hBTdtu%2BZd4dalfqVcncI52nat%2BOSo52VNz6Of8A9vHL2Xzlzwlx3EHlXGZm1D7yxbnUhh5xsLBUep5FB5ElQrFhTdnI%2B8y25jeYLi0TZut6UuOOOz%2B70kdqzxbZaxOEOTOl2B5HVhOR8p4tbISbBu0Q24FjYJKQZ%2BtKnj3ZuxLS4o1xzXgl7ilniuZsHs7dtiwuy26EK1TO%2BqPilq1%2BzdGM0tomn2f8t2uYsKx7HXVvOtWVybRTZI0%2BY4nkfSmQVq2Ys7nF%2FkjZLIGPvZMZ8Y8nXWJPKsbjCrZ62QBKW1wRwOeQKHgjd8KdSRSHiP4OYtifgVlXNV4881iacXWGUuAJQpYUZCT1kQaHLFRhyGwx3lcPVAHITl5iltmGzumWxbXKbVHlJEgLRqSPyk0rDlVWKl41U07s63%2BBngfhGO4tZ3Nxb26jbZZ81hh8yS7wr2BIgbd624cUpOrKy5ZQjaZ1i8G8EfwNWBtOXLNrc32GWoSgHdu5bSBG3Jgb12MOLj2zheTlnzqrN8MVxG6zEVLsF%2BY%2B2ywogEmQFiRJ5JE10OaOaoDfxduXcP8ADfGl2lizeXbVsssMuL0IdWR6QY6atorP5K5LQ7A1yXJ9H57ftr5Dyxgl3lQYvbWjl9ieD4ipVy8hBDNxpH%2FjTEaUmTv7Vgvi1R1smWLXJPaPzv4ple8%2F7lzCjElTdW37MOK9SnFE9zvxFbHTWxbmpRQat8HvWDb5bwq3adxfEkaHiN%2FJtUwSCegMAqPWIFEnoZDAqsv2wtLUu4SzaWLJbtbbyWFTJbaPKwngEnfvFRuuhPwtezoh9mHwSyTc5my9m3NOF4ldXFkoXNqi7UhDfnAAghuPUdp9o4p8YJq2Z8rhFU%2BzpDmPBcJTfHFPPFtilyhSEXBBdVbskT5baeEg7kwJJO81c2oqzKoOXRqBnfIuPZszNaYDYYlieHYC3%2B0YtWEJ%2B94gdtSlzshMkAJA2rj5pSm9HU8bAkrkOcU8Pw3aow%2FMeDN4XgeHgrdtELD11cuATLjg9KIEzHApUm12h34%2FZYPgzkvCEYa7i2D4DZYa9drUpDhZl1xE7DUfUoDvsOwooQsvkl0bjWeQrDLODozViLrDtxoClhYhS44B6Aewp7hW2U4SlqzXPxOzD%2F3Yh1zB8OVcoT6FXDrUIR%2F%2B7HXtWLNt2jT42Jxa5MpGwtMbw9i4xJ5hy2swTBUN179Pas%2FBnQ4P0X14U5hF9pbIN06FSdpjfpSpPHF0Ly3F17Nl2cFvMTYL7o%2B72vJ9qZJpqiSUiucZyexcXRlZUoSCBEmrWOo6Fxyb2Vhm%2FLmFWNi595tmHP8ASEjeqat6NmJttGiefrZ0uvLZtkMW%2BowOB8%2B%2B%2FSlTx3LRpl5E4vTNcnbK9uL1wJLiUgmBHFXNpKmaceScpbZsR4eYRfWamQs%2BrYmZM715vzvJfL9G%2BGKUnZublBD7DDaXHTr%2FAMomJ23rmS8q9IZki12We06tsJA0iBCvV%2BZpbyMW1fYoLuVAKcARuNQHHvRfIRYUOE3CCDpO3KiD096B5KZc8CRn99SZIUFJgRA6maNZ1LViZQ%2Bjz72nSBBCYNFzRSg7EF3SxJ1gnjmDVfIhkcdbEhdKBBBJPXrO1V8gzi%2FQu1eaoB1FROxnn%2FaijKxUsLCLN2pCZKkkDY9ht%2Fe9NTpC0nHQSbulnSANiCOeJolkJyf2FLe90qCSQTG%2B3IimxzWA4X0F7e40kaT0gT0%2BtNi0%2Bhc8b6YZYuVqKRICjxJ5%2FOtcEzM8Kew%2FbXS06RqUqdgeYpsZSXsTPG0SqxuFFOgiFCODNPi7QBLrK51ggKnsZ4Fa8TM%2BWKXZK7S7BSlaSEn2j8q3RMOSmSi1uVQkKUNP8K24ujKSO2eUAka9JPQmZrTjYDguw%2Fa3KilKBoBO0j3ozPk6DLVwIkqPA2IolIzyjY8Q8VJBJB7yOtNFcWOUXHQqAEz9asumKB0wPWEp3mOtHB7ooVDpHqBMkwN6tZPshgDJkklU%2FwB70TkgWmJKdVsVBJB7H%2BNEsn0CsYydXqJKk6B7K5ooq1ZHCvY0cMiPxidhNC19lc2MHGnNUFYI54pcuJfPQho1atZBnf6dqULG7jJJEFW3BHSrGRj7MUocJPqBTzvyavQdIpjEwUpAIIj34rh5pHoseyE3qm9tRERM%2B9ZW76OrEYo%2FEQptXHXasGVNMtyoeNL5KypYAESNxVKf2Z5TV9BJpQmUwZTB3mtsVoGTtaCdsuAkDywmTxtvTILZlnBphFDhKgooAPSBz8U3QDQ%2BbdKSglClDoQatxjVsVLDF9jxu4lMHUU9jQqT6Ms4VpDhKwqdUwDyOBWvm%2FsXGNCweQIEST0jp2pkW7oMcJWFnVAmOB1Ht2p6v2IlGjPUmSJSDx2oihQcpKTpPQTUIOErIUDJnmTUIKeYkEDUAfj%2BlQhml1KjJHU9ef73qEFkKiDEjkGdpqEHbbifSdwY3npUIPW3RAAIBGw2mfaoQeh2QAQUpHUdagLjYslxOgSDIiKhXBCpdSSQmVGoLnjQg6pWjUDBNXy%2FRfBkdxFaVJIEJVvO%2FO3Sqe%2Bwox3sqfMji0oWUFIVzEc0M9dGvh%2BOmap%2BItxdO2r5ZaS8TuUq3%2BaQ83ob4yadWcoPHzD7t1d663ZrBUD6dRUE771z8ybZozSt16OTHiRZ3bVw%2FwCWn7tcJVtCuQDv81DnZklKkRXJea8cwS%2FYcC%2FOb1BKpPSenahlFPsLFmnGS4nTHwv8Q045hiG%2FvIZeEQ24dvzmRvXL8rGo7o9BHK5R%2FYXzpiFwbV9VyBISSSkkjfpWbxpoZjm12aHeIr7TXnqUShUkxq4NdKe3oy50r0ae5jxAOLdb8xCuSArj%2BNLrdiZJdMpbFXQVuhLaQpMkjpT4SbM%2BXHHuJB3btonyVAD5G0%2Fyp8YtOzBPY2QjDLsFi6YStIEhQifaDRbu12FCK%2BhmMLRZXDdzZuqQ2OI2INOnNtbQucXekWfh%2BMl62S3fJQ4sjSFn97brWPV6HroQcw9q5Z128pSOQTx8d6hH0SLLVk%2B25%2Fh16Atlz8Ci5uk%2B1C5UOxxn6JVc5eu2nmWFrWu6bnTJguDt71klNp0aMeNrbItjeU04sxdqaQbe4CPwExJ%2FvpRY87iwcsL2ytMtP3%2BGYm5hdw%2B2bVUo0rO2rsZrRPDy2hcPKp8WGbxTmAXynmWfKvWioKbSqA6k8pHSOtLjiknsdkzx497HNw1g2MWQvbFNwtJA%2FZuGC2rqkjnbetEXXRz5ZIvtlcYpai3uHg2hTZA3T296ZBihexbbXbOJU1949MmTCgI6Grct0FWrBn3RTSlOMu6mY2Qd1JM8GiYNmdnirZdSEJcYdQSUjVsDUTBc6JWcfuWUW141cIt75k%2Bh5lelU9j3q1mkpaCc%2BXZLsIzbguan2GsaTb5exgJAbvEohp5f%2BsD8J966OLKpqpbBTkn%2BjbvIGRsLzRb2mF4hhjKb3SS1csaVB769Z3rQoekqJHK5JjzMHgBh1unEXcsjHMIu9Gl%2B3RK231DkiAYJ4ir4fZKyJGuOJ%2BHf%2FbF9YYo4MwsBKlF1p1ALal9gdorFkhwfKCFSzTRrLnLDH3by6KXFMsE6glagCmTxT4Ri9tCpLVlSXHnNulu4d848av51oT%2FQukOsSQLq0tr5tCojy3N90qA5%2FLrVTego0iPKBWhJk8dKW1ehikmTXIzl4xjLLbCS%2Byr0KQVcg81zs%2BBxVorHNKVnUTJDF7ceGt%2Fc2NqWsaw1lbzSgTrW0DuD3A2rBOX6O1hxXuzdH7PGB4pmrwjazDidm%2B3f2t%2BrELdYIEkJAUkTuY5j3qoP3RonjdqjorhOL%2F8AcXh3l5wYku2etsTZceSkbOpAAUD3G%2B9bIq0KaalbKD%2B1BgDeO%2BM1plnEGB%2Fh91htveWYIhCgkbucDbpR5qbTJhjWNtms2b%2FA62wjIb3iSFNMfeb5rDiwEEqLaVELWf04rK9dA%2BM%2FkyfGuy9so4ZZ4jlHOmTcxuuMIt7FpTDqfRoaKCQoA7xSJpt3Z01BY%2BOt2a%2FeBWUteIeL%2BTGrXEr61XZB8OBGpMAEbn8qXDK%2FezoebT4ykia%2BCvhXfZVypjFrg9hd3t5il5b60kylC9ZQkkc9fpFE8qSpIy%2BW4yW30SrNeR38oZ5VaYxYKtcVvbJdhcAmEendCp42gfnFIllkH4yU4%2Fj0bHZhysjOn2XG8Fesb1Iw3GkXiHUo%2FGtQCSCY4Goj4rWnzxbRhUOGb8WUn4a%2BEzdhmlOAiyXZr%2B8htyET%2BL8LgB7K2k1MMFSjFUb80JJOTOyX2bfDW8whGXsbxGxctMVtEO4bieggoWnzI1ISdhJPNdjx%2FHrs4HkeZy%2FFl8N49hmHZ0t7O2Shp3D8XQ0WkqBKUqbJAJ6STvT%2Be6RI401rZtd4ZY%2Fbu3rN49ceU62A0%2BxP7mpRB53MmKfilRiztOCil0GM7Fu6cyv92Ulth%2B5VrS5JS4kqIClAyTpO8DcyKZ5C1QvAttnIv7aXhijO2arBzHcCxHCMLy5hl7i1080r9iHV%2Blu3C5JUVKCCQBtxWSOJcqkrHzjKS%2FE4IeLWEYmnAsKzdfWbdjfOuKauEIYSl1yDDcJSISkgHc7mK2y8d1aY7x4KLILh1irDk%2Ffrpavvt5pQpRiUoifKSBwO9IljaHz8mNUkbP8Agh4a5mz9jYvMJWy3aJdHn3N4tLbDQAkkd4gQBx1qRV6M39x%2Bds7n%2BEn2fxgFhZY%2FmBqzzI6bYJYKkkeW3zqAMEBRjeN%2FjnT8S%2BzDkwy5WWNi%2Fhu%2F5xXeNHAMOdGlu1t1AX10D1QBKkDfkmT0ApU22qsNScVtEetfC7BclP3Nnk2z%2B8Z2u2S06XF%2BarCLXkJUofgUo7kTJrOsaj0jXDJSBNl4Q25wpeH4iEXyrh0uPqcWAvEHp%2FADOyEnpxtvQyin2DKTbtE28OsmW1revOvXFs9dtqKHfIbKm2UA7IQeIqliSCZcVzky5zFb3Axa2W5aoJ8poiNufw%2FlRShYDyKPTplF%2BJeUjh2DEjC02wCvQlsR0596yZMDTs14PJycjUt3LGaMzXKrINFmyKtI1EiBOx2pLwN9I6SzSaNmPD3wk%2FwVi0UhpbLUeqRueJj8qz5PDvbRWTLvRdWLh9iyTZ2TaUqAjiQNquOPdFvMpLZDGcKQwErunNb6yVED%2BdOliaQGio864Sm%2BSovOJSgbRE6hPA7UPxsPHkUU0jUvO2VWFOOQ24AdgNPIoHiokfIa12Vvh3hy199DgaBTMq2k%2FkK5vkrhbR3PCek06L2ytk4WwZUloFAgQem1efzdNP2dWL4%2F7ltW1sLRktBpPmD2gn865TjT0DKR996SklJOkew46cVRRim5WlKVp1kGSocz2oTQpculR8m52UsQWxzvz%2Fc0RTi1piibqFy5C5Ej2qNL2HHEvoRVf6YgDTynsetVb9FtREDeEhRUsgH90n%2B9qpugbj9GIvStKpM7bwYA%2FKre0M%2BNfQ7bvguBrU5qJ52PttQqCROMV2EWbyEDWQAZTOrjb9KdGXoU4IJtXRQpIJB29pIq2osVOKHzF1CtKTGpMgjtT45F6QuL9xQctbsqWhJKhyffuf0p8JtvQvIHra4C1aQVkAAjfgU%2BM60ZGiSWb6wE6iCAOu0Vri2IaolNm8Vn90kGOf51qw92LyPRK7O4USkBagNxJ%2BOlaYqjPkiqsl1lcgBKSNQ4G%2BxrbBmDLFJkns3yVJQFE9AfamxWzLKKq0Sa2uFekEKIJ6mtuKToyPsPMP6VJVJmd%2FitKdlUn2GWLjVA9SVc8irFTSXSCCHwNyFT7mfyrQU3Y4S%2BmCZn%2BP8AfFQytbM1XBSEqCQo9SN6KMU%2ByHyLgmdSl78bcVbx%2FRBU3YSnSkFRHJPWhUN0yCZdTpOoz1IrQlStAyf0YKcTvuQfmrcmwNjdakJKeVSZPf8AKgktUT42YLUFAwSRHUVnfdEUVdCKkAxUDUaMNAHqTMz%2BdWEfAoBSAlcjcTtVpWQonFJJUAqVjcTwa8%2FN2enwZSCXYUFq%2FCpPWKQ4nQTsZoSoJnVK5n8qyZmn0VKNjlorKpKlJHWOtZ2Kni1Y%2FQoEgBcmYFbMb%2FGrFxx%2FYQacAJIUQo78x%2BfvT4RJHSYQQ7CtKFT3JPvTU7Mb3schZRpiYEk96JSYEopqmPWn9SEyR0I34%2F3pyFf26FkvJCdPmajEDg%2Fp70cFsueFeh02smSlQidx1NaPlSRmcWh60oBIOs6iO1B80r0UOG3FegqUSnoe1aQZLQsPVwem88VBJnrVudhtG1QhkFSqVKIJ352qEPgtQUDqUkdd%2BKhBVKzHp1RtO%2FA9hUIPWXNcyCFT1NVZBw04pJkGBxvtVkH6HiU8Eg7c%2FwBioQcpdJTqkGd%2Fmjil7IOEqSpKgHI1R7b0L70VKjAoXsnUCSORuB0qJoSpNgS9aUrUNUjcTRNqqRVuysMzWQ8l1WrV09PIpKju2bIS9Go3iI0WGnj5imgZTxJ%2Bf1rNmjG7RpxutnN7xaxG2bNw1cq1pkjc8dCNuaxt72MjmSls5X%2BMrWHXH3tdq4hZEnVP4fmlRnZWfjJNpGpFji%2F3HEUM%2Bcl5lJ3BIIB%2FjTNHPjkcXZuN4W5os7pq3SXjbvgiYBJTO%2F8AKsflU00zueF5MZbNpL%2B8ZucJUoPLdIb%2FABK447VwZSSZujn2aP8AilZsXLlw4XAwFSAlJ610MXkRT%2FHYvPi%2BRWaM5yw562de8twqQokjc7V0lmT7OSvHldWU%2FeOvNIU24pTiokH%2FADD5o00xWTHKJD7oB1KlNKXrPIHM1ohBt6ZlhGwgxhK02rTqrhCREhHWo%2FIknxsOmhy040kpEhpQMmPj%2FakznKXbstToMMOJAUpGuCPUI5oFXQSJdhDzbyUeU6lDpnk7KHes%2Ba10bMK%2FEmTrFniOGrYuGPJukiUOtg7H%2BVZ3JjU6McOxfErdbVrfOO3SwP2TpJ3HT%2BFKtSHQzcVUQ27i9jiStKU%2FdsRSmFaiR5o56daK%2FTFyduyt864AG7FnFjapetXVEJdRuAqN0qj%2BdNhma0mB8Sk7aI6q5au8NtBcBtV4j0rKROtHc%2B4rTFti88IrVEYRfXGFYyWmw0LVYC0kkhKgP502jn9MmuKYDh2Z8HGJ4YQ3eITDzZ3KQOSBzFMVIKMEyBs29xa%2BWlG6dJ2TsRU0yTxtaBi0XLVysqSFNq5ChGoT8UVoyzhJkevwhq6cU0VNqVzHeq5Fxi16Brrj6gvzVqWQr0jvXQw5ItVWw%2Ba6SFbBL4uG4UooUfSmeP6RToWnTGpV2zbjws8SsxZUbtkPB7ErBogptnIIHPEeoH4NL%2FvIp0xUscJdOmbwYBmzDc%2B2X%2BJ%2BH2L2OU88ts6vuV4lTIc0n9xZBSSSdh7Vqx5oz6EcJR%2Fl0Ux4jJ8ZHV3Ded8mvlxKCLh4W0lbZ4cSsEpV3pjd6GvHjrTNUs2YFhd5alTOHX13cAR5zqVJSBPUJ4I4rNK1pFfBKjXvF8vusuOF1KEoOwCZIA96em%2FQD8d9kew25Zw15%2Byv0edhzydK%2BpQeih7irT3sVKFAe5s22rlJCz5RPpVGyqjJicfbClrYPi6aeYKm3kq1gpMGR%2FxS%2BcZKrHY8EX7OmXgxmjFrDIF2HGk3t0tlxLKlmSQR6kkdoivO%2BXJxm6O348Y8ds6v%2FZWxLC8Y8NcG%2B7MxZthbzySZ0LIhwCOmwpmJfiBmytPRaztpdYZa4Vg%2BE4g81h12263CiAUyTpVP8auVpUgsedSVSQW8QcDvPEnDso5oDzQzhgNocLcWDpLzZTsB%2BRrQpco8ROPJGMqqkQHKGIN578JM%2B5Wfw9ansMxBtpDizPlrVIISeh2pbkrNs%2FFePK5Jk5zdlGzw%2FBM454wtbNwwrBLOwftwICXW52n6kE1my4005Jl4JPkoyLJ%2BxrljDr%2B38QsyuYSy06t63aKFNpALJnVBPI3O9V4EVTZp%2Fq03pJkuxLALfLeYTh1s8%2Bmyt7tbrKmoMIS4FCY6bnY0zI6YcMPLDbeyW%2BO2R8KzhjeUcQw3DmnkaxcLX5clEiR9D2pMscZoy%2BDPi2ma143n1eS%2FA3xBt7%2B4KcDYuzd2yEIICSVaFJnk%2BoVIz4waRp%2BCOTKtki8OsyNZ3e8Jc5WbCU3mII%2B63jSQB5itQj1d%2BOaZjm21JBZ4ONxT0dmPDS%2Fw%2FELRnCXyLa9UbnD3krGzhU3LZEckKQZI%2FnXo8GaLW0eX8qEou7%2F4NbssWGYV3WasavkWxw%2F%2FABltl24WdK2AlRQAOu5G9Z4qXK6NsskVD8ezdzIqVYfnbMmHruWXWLqxt3mT%2BFLZAM79yTzWqOnowZP%2FANd%2Byd4qh9zK2GY9c2gVe2t86EFBnSeY9uPqaKW3bBgmn%2BjWf7R3hUvxA8LFYthq7HBTjdq5imP3Fy8UtqU03paZXplQTJn0jv8ANU427Zo8XIoNxZ%2Bdfxs8MsRw%2FDM432GOHGRaXNum4c8xsMWhCICjKpQIJCUn1R0FHkcK0zoqSUkmas4JaXGFquP%2B5GrK2IQgNqvEkABXVLZgiZkEjf61n%2BVImaEZKjrz9k%2Fwny%2Fiycp3%2BIYMvMeJtoFxa4e83ot7c76XHUCErABSqFGPY80MZps5%2BTx4rdnWzD7z%2FArVFh51nj2OOqUrzlgt6B0CUwAUpj8XGwimObXQqwyhzGHLd68t3bPBloGm4xm60hS%2BpDSeSYmDvT8fFq32Lk3dELRjOVMuizVhTOI3D124pDbIE3OJuHlXMn%2F2Ow%2FSo4vpBpWtsMYP4c3OZMQZxO8YctPKGny06ha4ej%2FKCI8xZnc96r%2B3K5xXbNjMr5Ft2W7ZiydRb2TI1OLLenzVdYB4HuaKOD0R5U1ZO14VbWLbj7ToaWsaVL8vUpf%2FAKyPan%2FHXRTp9mnvjVa3Vy8pV5eMWrCNiFK9UdoH0rJmi6bNeG30VLkSywdalvOOt3KwZE%2F0rmTzcTp41Ktl%2Fpu2k2SAwhKGyISqORNLcrWwXbBF0x5jC1NqKnCd9o%2FWlOl0CymsXbxRN8tDYcbtSYJ1bke%2FWtcYtrQpTZDMwlbTS9LRXA1Sf4gU6EPsnJsoPEMPN68p24Uor1cmQEj3q8mJAY8cuQlheFIafBQAkKKjMbn5rg%2Bekej8Vy0TuxbSw0mNaex0xqrznkTUUd7HtfkeXL0yCCptQ2n56%2B9cOTt2xv8Abt9Ax18JQCCEEHfaOtBJv0DjxvlTE%2FPU4iQ4qZP4T096nyI2Kl0IG6GpSPNUkmN%2Bm%2FtVfIi2t3Qkq%2BSFpBWrSD7QN6JTRaE1XZOn9olSSIkb%2FSgcxclH2N3LwqAIcAEmdxH0oXL7ATX0ZM3WsIBWkAnYcig5Fqfqh0zeKlKlFCj%2BISIo4yAm72E2Lsq2LoKdwB%2FtRqZn2Pm7hCdJLqREgidyPjtRhLGx81e%2BsDUAmfcxRQexc4hy2vCl0K1gA8CZB94G9asc6egJQSRKLJxBTq1SoHT7n%2Fat2JJ7M%2BQlVq%2BmUhSlAdBPJituGr2JklVkmtbkqLcrBIVPcCtlxekZsnRLLG4UVzrA6npNaU4dGeT0SyyeJIKQFDiTTov6M2WKaJZauqhJS6NW5g09OujE46okdq%2BSkFRMjknvWrHIzTxbD9q8IAIhXua0QyaEz12Gbd%2BCTqUE9KdFoXN2go24NWyhHxRy30Kkn6HCXQJVq3O%2Fx9KigxfBiwcVIIWeO9FTFylXZiF7aVfmDTeTLRnrAAAUAT9aptshmFiADGx2MVVshj5iSVCZHcn%2B4q7IYLV6SQog9PaopuyNnwUrb8KY26wTTOC7BSV2YwoFKTpWORB5oJqiSlRnIKttIPzQsFzZ55SEqlIVqn8XUntTJS1oH5CisTbJLmyjyY7bV5yetnpsSIVctalmRq34O1YM02m0joRuKoHKbElJSdIO5BnasjbC5s9B0nUdJPQ7%2FnzRcW0TkxdLkCUpMdTI3qkq6BHSH0qCV6U%2B8CnYpu6YE7eqHzT5HqIUodJG%2FP8AtW6CFNPocpe9YKSSmeT%2FAAp0WvYhqhRD4BBUAd4jvROX0UPW3hqEEEE7UyE0DJ6HLNwE8oTHEEEUxv6RknJ9BFDraghI6kcGSBVxbfYA6bc0kAGP3faKfGT6IO1KJEq0g7Abb%2FlTCCinEg%2BoKiI2oU7FcGZeYDGkFR9qInxswDoSIJCiZme%2FaoHx1Rkl3TIAQDxIqFfGh0l4q0mVROxJ%2FSqUUuhUo%2Bh4m4SSkQAekb1ZUVQ6CyCCANtpFVe6LHjalmSQsAGQYmrorY6Q5rUQUgfB5NQGUbCLSuClGw5McVBcXQncaTv5QA7RyKgXyEOx3B7W4aWnSUiJ5iqcbGmoPinlUqtboou9IAkSnf8AjSZ4l2NjK0cevtGOrwpvEEFprSkEKPUCDv8ANYcm9D8aVWzin4q5tuGH7s22yfUAmSRzH86yvFJN1sP5FX4mpi84%2BVifnOL%2B7qJAOncU6GGXowSyR9m3vhBmhFwGQxcpcUqCAYkbf71nz437Rt8WcX0b34TdfesMaK3isgbxBBgVz1FXtHdhik46Nb%2FEzC3lLWtsrQVSoz25pWFKLoXnjJdmmuZ7C7Q642oqW0OnSulKvZhRQeYbR1DqxpKEhUHSOlHjS7MmfPJaRBFeh8qUkKV0J2FaUn0ujA210H2btC20NrKZOwH9KGWCXZoi77PXWbYqStQSlxJkkjnbigUvTLjGK7SYTs763bUbe5QpCiPxgzHyO1BHHbsN5oPSiS7BLFh5wG2QybkEFIPDn9TVThvQ3HlS1RPbRxJS20htbTx9LzDuxTHVPce1YJ2maQFe39uy89hj6tJErb6aSOoNQtRsXtrZnH7dyzgW2MoAU0tKwCs%2B0czRwcfZbjQlg99d%2BXi2W8UW39yeHrJGnQ4Npjod%2BlUqbpEUmU5ij7WAYtdYfdKUpltWzradlJnmO1b4R0c3Lk3cj7GG2MVw9F1Zus3TaTqSoEhSfYijTa1QuTvobZdxO7wa6QuSG5BUk8qHUUTimgU2TxrCWsYuFXWEuMBxYKvKWQNXUxvSmqH7bHt1l5D9r5dxbLs7kek6hP1J6%2FNUDKL6KkxvL93h9wpi5KXkT6XG9xH9KYpmPJJp0NmMv3ryWlIaYWhX4fUN%2FwDemxSq%2FZMeS2T%2ByyHiIsVYg9hq3rZEBakp9ST7jmPehU6dpmpNPRZ2WbnBFIYRd3LVjiCYQkvwgLHT1xE%2FNao%2BSk7SsFxUejdPwlzN%2Fgqba0v8BuMVZWnSzcFxjU1vwYSSR2igj5ElLkhM8bk9HSrBR4aoy%2Fg9xmjGsQW%2FpKGGHkG5Y0EcLUga2%2BsTG%2FSuxjypK%2FZneCS7Ro741%2BFHhBjGJ3GLYXdqwWxIV5zuHtlflqAJHmMKMj5H5Uc58g4zmuzmP4leE13ai5xfA8Ww%2FMOEBYAurReoKSeNSPxIV7EVjzRyV%2BIU%2BfZq9jeDv2qVpUltRHJAk1nwZXy%2FLszdkFcCwpBEkcAf3xW7JJKrKLAyfcW1tfWjV8G%2FJcUEFZE6ZrB5K%2F6RmJXLZvdk%2B9dw3BrN3DbkBlm5FutlyJRqEzHY1zpwT%2Fkjr4270zrX9n7Kl9hOCiwy8qzuXWvLvyhBlAYc%2FESrpzR16RpyZYxjckWdmbD8SxNy7l13Dr%2FD8NdeaXpIDqishMdztAqL9hqbpOtEPwLNeI4FgVni9%2FcLadu221uhK59aDukVdFZI3KiG5CxrErXMfiY3asNHCsWJvUJB0pbUkyCfcTWecJPodk8qPHi%2ByyvBjxcxXPP%2FANRPD6xGHWtldXCWP%2FCFFO37RQmSSNMz70mHO3AKcoyqRdXgJn21yth%2BecNvcVxDEFOLuEs%2FsoS0hs7cd4o8DcPxY7KnJJssZGaWMbzphmG2160iyx0i4CNpQYBKSegVxHvS82RSkkmaoxgoN%2By1cxYhjeXcwowhu3YYZcs0ONo5CFtkgJHtFZs3yR6FY%2FFjP8vZrrmfwLxvxt8J814XhGJIstXmvoYaSdJcC9RQr2J4rR4MZy2wnmhhknIQ%2Bw%2Fk9Vv4aWFhjaLiwv8AC8duLW7DiJLTyFQDJ4JkHaur48E30Y%2FPyxck4vs6dYNi2XMCu7XEMSexCzctlJuWlFPpSASFEn3HWuhGKTpHNyxlJVRZeE4Xhbl3naxasm8QwK4Q1fh1KjpR5pJkn%2FNMEVrilRjyyrT0Ect3uLKznYONtLYSmxdS46r1EobRIg8AH9aXBDuUeJsDhOY2H8hFl%2F8Aas37hcQ23KiVBfXoPn3p0ukZJY3aaIfnC1%2B4eC2JYZhL6rhy3eFoyq61OFLilqUogcKgKMT6QBvUUfbGyVyTZwS%2B1d4aeJ99fZcyrkPI9zg%2Fhelxy9vbzzWbdzFb1wgqu7h19aIGrgmREADYVi8uDluOjfLJjXvZpt4S%2BDWKZjz%2FAGacaxDRiTOJOJRe3DYubUOpI9Y1z5igeCZCjwK5mKFumOT1o7t%2BCWWn%2FDPAhiGJ2r%2BL318sNqxfE3yu%2BviCTpaSYQ20NvSgEflFdnHia9GPysqekbFreds7D%2FFi9ZWKnhoXdukLWkdBqUR%2F%2FDx3rZDHfo5%2BTW2D28rY94hXSzbN4jf2aAW1P3VxpbCSN9IT6UjuEyY5rV8aWxabl%2FElljhuQvDBZxl7Db3EcbcCWl4jcMKDWgHZtorglA7JEH3o1C1oKEoPrb%2FwMmPGbO2ZcxosMoZBF1gyFR99vGygL76ETwO%2B1Z3CSdIGc69G4OWsOzZcmzu8fftwsJ9NnZW2wPdaz0pkMM7toU81%2FwAgbm%2FFL3DlXFwza3d3dJSQFFJ0I9gOAKb8T9lLLukc6vGPEcVxRy7ublL7zxUYQURpO%2FFczzHTOrgtfkVHkS2xf783cKddShMHSVQJ7fNcuWNPs6OHL9m1FtmZCMPFqlZU8kQYjb61bivQ2WWjz%2FuUEpYSorXO4iQBUx4k0BKaqxULtLlzzXWNSuRt3rVDGktCHONWQzMmHW77SwlASIiZA2okmmLWX6Nb8w2Qty8lEpAPEemJoMz9GvxZ3LZHbRSmwZSTM7BQkV53z4Omei8ZKyQ27ydBbSolfYngV5ny8bZ1%2Bhq%2BUEKUnSVTPMx81x8iaGRzSQHccK0KS4ohAMQOCf7FLUi4SraGSnizulZAJ%2FCY4mhcWN4%2FlTGnmHc6p3Mb9P50tx3Zp5taG7twEmC4kAHb8vb5onJLsGLSG5ugUrCgl1uOAoc%2FE7Ch5oBw5PQkq40y43pSdthvtUlFvoOGNXUjFu9SSlYUFqmIjcfNKtrYM4q6CDNz6y1pc0AmTHTrVxzNumgVjQ%2FauQ3ATKY3nkn60290LeP2Pm71UJAlST%2B6d495o02DLFSseM3WopSpKdI6dN6LmxMo0SOyfB%2FZpSlJPGlXPeii32C0iUWd04NKUI1Hv1FdHHN%2BhE4LomNo4QEGBECfVJro4pezm5W7pEotFkK1cK5M8n%2Bta45HQl45NExtHgogo0%2FUSK04ku2KlCiWWSyVIMKEDfkRW5diJS9Ets1qISSBMyR%2FtWiKsxy7JNbrgc6uwHanJCpv0GWHF7bQr5p%2BPejLNr0GmHFQAonmBJ24rSkZ5MINvaVbAKBPM1abLirX%2BB0l5alAwI6jsacmwpRQ5C%2BFAACdp60QhwTPSuCSZCOdzsKgkTFyAUiFTMcRNWlZLFBcEbJ352mpxZLPPvASoJ9JBEd9%2FepTIZoUJAJK0iD9anN%2BkDJWhVtYVJTCeYFWpP7KjGjNKhuDHsAN5psUw3%2BhdsgjWpEGYiOD3oZRb0Km%2FQulO5On0zAJP8qZCK9gFN4iyApZIUfpwK81PG6PT4Mv0Qy8tlSVJBO3fcVinBejocl2CHGCFEghQI36VjljknosYOMkQJ0z25P0pvOaWyCKmyhMJkxAkmJpcpOXohkFkQIJAo8eNrsDmh404BI2ASen8q1pWRyTQt5wUkqV6fg7UcY0IcUK%2BZHVOroDyOwoxT7HKXhvuIjr0%2BtXHsXPoeN3IMCQBp%2BK0RuzPKdaCTTkqEncDiRTxXK2P218bqBjtEVcXRB82oJO8dh701Sfog4CpISTB6bg1Iwa2U2l2fDXukqAAP0oixPUdJUFDfYDqaputkMUqPAIMHvz3oPkIxZt%2FSP3hvHH8akcgqUGO0uwRCwCe%2FWmXYCix8h0ahDio9%2BhqqIP0OHSPUQI7c1ZLY7QohXpWsKMGRUBldaH7DixuRqnfeoJscqKjunQpUfp7VAopN7I5ibT5QtTX4uSO351TdIcau%2BKDN65a3aQHEiIkjihgm9MKckujjJ9qDArm6t7xxll14JkrkdIrBnx8ZUaceWGTTOCPjVZXVpiF8lLbqRvoEEAUKxyi7ehHktQdJml%2BKKC7jSoJbWDH%2Bo1ohBN6MLSezYvwUdbTcsvpdU3BBjVBP8AcUjycXHdGzxINPZ0pyjiq2bMJ%2B8PKXt6SBBB3n3rhSk3KqPV%2BPOCjsDZ3YdvUGQFAggkKkgc88Vbwzi7aKzZouOzT3OuFXDDr7rZLiATqSTwK0SnrrZzdVo12x5poOrU4hSVkRp6zRY8l6MWWG7K9xJu0bS55rLaZAAIHWtWLPKPTOXNTi7QDbW0hSQN0T%2BLoa0tSyex2PJfYQecbdZCpkRtHWs7g4PY3I6E2WNTR8pYUoSIkGinO9lQjZKcHv8AyFtx5ls6kzESAO%2FzSJtdjYR5PijYGysrLMOEm5VibKrxKE6HWhKmSO42n6Uibh7Zo%2BOa1ZUWdMMuWIeeWly6SuA4gehcdz0olKMuiPJkiCsCuV3YbYNyG7xB8xBEgpP%2BnqaqWPdoZHPa%2FJk0xO0cu7c3TykPXITKi2Qok95G9LjF3thLNFLsra8w5OYmbhgLCb9obRGpSfrz8Vpi30YckVJ2iJWmHX%2BBvuONKavGVJIW04NSVDrsDsfenxyWqYiUNDhCnEqS45ZNC3J4H7ncc7UebGkvxYS4pWxw3aF95AtnXmzq9KCSIPSDSG9bB%2BRN6LUwleM2IT59svErUJhxl0QpI7g8n6UKr2MyL6BePYXa4nDrL79olQJSFetI9p7fwrXjljXaM08ko6omWUPD0PsW16GRiLQUQtAglCeqkjvWuVzX4gx8hey9mMq32VnsPssRfTiFncIT91v0NfibPLTqQIEd6y%2F2012aILn0Dcy5BwTAsX8jEcLQWVoLzTwRDboIG4A2PNLyYuNWGk06bosjLw8LrdVgi%2Fzg3kh0NhKC1hxWhknhepPqI9qBY13Zpg8npE4vsrOYPcNY3gHiljN046AResIU4lfUeahCiUSPYRVql7Fz8l9SRPbPPVzfkpzpieG5mQyyUKcvWfuz%2BiNtDwA1ewc1Vqj5s46eznZcCk%2BUdGnPibgGFuP4vdZXON4bbuAqLS2U%2BUD1CXRsT9TPSifmN9lSyyWmzSfM2FGHyXVSifMSpMfUDvvVvLJb4gfI%2B0im8TwtxSQ%2B0lZQd9uPzrRhzOf8hTb7MsOSW4K3VIQdoPQUeSEX2RM3l8A8OdzAh3Drm7cumFOMhYQqCElJBJnsIrmeRBRlo34VKUXSO8vgFbYPl7CIQFIZuEN4a4ouai222Nt%2BIgCg4pM1LJKUami%2BczYHhWKWeL4vaXARdu2QsUNgiSDqCSO0Eia0PHHjYPzyX%2BDmvgS8fwTJ9zlu6R595YXTiWkFWrQrUQuf75rJtPZrXkxe32E8Ex9WK5ft3X2bjDMWZulNqZ4LiDAA54kVbbaJkmk9si32PsbeR9onOGEPeXaWiVXlwHFE%2BgaNMg996VGKbv2PjNPaN0fCe3dwXLXi5dXF5aqbDT7jOv1qcISoKUPed6F42m%2BI2SlOUYmfhTle9fyP4ZeKFzixVi9nibTbqXFEJSyDAO2w6H8658%2FHmnyTN84TtwZu74n4HiuJ5RyjmOyK3Xm7gJeVM%2BcjUU%2Bkjpvx7VtyRm6%2F8AYZqD7I39mjMGI5bz1mnImJoX5wtVKYLiDDh1avUPcHmn%2BFKp%2FoH%2BrLniU0ybM2j%2BXvFC6ust2CGMExpFzfutg6dV0nTJCeAdhtWuUZqeujCkniqX8kbRZQRhuc8p5fxHEnUP3Dwcwy7bJlSEEkSI%2F9ga3Y%2BLWzHlm4y0Xhl7B7vB8Hxa0Swi2YabRZI1p1KuEJSpKVnsZA2rbCDrRy801J72Z5AwXGMXwnH2nnrVvFbaxCWi60ZKnZTJSP8oA%2FOhxY%2FwAd9lzaUvxEspt5iytlTD8rYvdN4piDdyqSgkBLa1n1CN4kd9ppkY62NdN2WJirD%2Bfci4hk9Tr%2BEYqi4S4l1J8s6QfUABKgYn1UTh6YEsijs5Ofar%2BztlC8xOyzNm3PWO2iW1ItbC0tMOTe3D5CgtR8x11IbSAUyVerfYVly8I3ytnR8bJlyKoUkHfAHwjyngmJWGM22Duv3qHFqbZxlpC3X1qIIfcSiG2Gh%2B6grUpUb1mhi4vlH%2FkrO5r8Zf8ABug8zb4k5%2FiWZL7CcSvWj5aXEOpT5iRsEI0zoSQANKBJ71qhK%2BznOD7ssqxxHCEpsb3E7m2wMCG2WEsJ8tsAdFKBIPzW7GlQM8jWrEsfvcXxO3fYs843tng6jqL1gVKceP8AlLhjQNugp%2FCNGWU5PVkPyzk%2ByRiyH1i%2Fx66cUIXcLXdTHUlZO%2FwIpqwvsNyk1tm0uUMDvmr5D5wtlhSTCFotC2ltPwdj8xTPjfYr55P1%2FwAGymDOXeFNKurm5eujEwppI29hUbkKeV3xuymfE%2FxhYw2yu0YhhZZsET620AhUd%2BKB6Vhxlb2c1vETO2DZvuPvGFt21yhKiVKMoSBHQfzri%2BS3Jtnb8eUUvsheEYxYPWz7LCWkXUkFCdyD2JrDRq%2BTHfTC1oxi6nC64HUoUqRKoBHxTFiSBnlRPsItC482t4qKwNxPFMgqA53EsC0ZYWUhYEwIjp7VqxoW5UBMw2TarZ0IUniTvsB9KZwRUZqzWnNzbf7ZuVJKekEA1l8iCRt8dtSpIry0QXH0axG8dCdv5VwvMV6Z38M9hdR0pQgEad5g8kfHWvOZezrYMlrYPcWohRMqdk8GCR%2FZrn5%2FHTjoeB7pUbBRQrmDwD%2FWuLng4u1sdHoDPulITqJQQBBVvv7UmUjTWxou41oCUwCDKTPNByYfJjF%2B5EqJlQkCZ999uKqUvsEHruEqHCVBHQGNM%2B1Uw1FpmP3tZ9XoUkxBjgVazS6Gcd2YIf3WlSyZ5CVcHpvQJu7ZTimPW79WnSFrJIlSgZg%2B9E5pbYt4b7H6L5PlBSi5v6eCPzqlljVoJY4ofM32lZGtSUlIA3gfpWmGRexWWQRYvEiEoUZjpxz%2FAFrXHHB%2BzNOBJLG8IOpQISZ1AzzWjH48G%2BxTJbaXJ1QAkHXAHYfzrTDHTtCsi9kzsbnWlKQkoJOwnmPb861Qbe%2BjnZMSu2TCzWSpAlYnqDzT4%2FRlnV6Jthzh8psEqG28mtmFvqhcpJ6JfYqJCRq3PTt%2FtXSXZlyQfZLLJYSRJCjvtTjM0SqzWFALCUhR327U5S0Zs7oNNrAMgnncgzWnDifZlcUFGkqlG4CtiK0iGt6CTS5SEkAniZ4ooqy0x6FBKCrk%2B0TNNojl9iYeJVwAORqNWov2Z%2BT%2BzIuqAMKIUBz0onGtsozLy5MkauI5n39qpOIUZVoScdCTAEJB2IHPyKZFr0XKViZfCSVFIIPSRtRgCqHVDfURHudveqaT7IPWn%2BSokjvH8KU4q6sgTbVqGsGEz15NVKNC5OtIcoQkpiYHb371Iv7AbscIAMACfrzWrG0UQC%2BszCyAEEbmRz%2FOvPzZ6SD%2BiIXNj6klIn2jmsjjWh6n6AbtnAI0BCgJoZRs0xyJgZ%2B0VJSEgifoKFQXsaqoDOsiSSkBM%2FNVOr0UMAkoUSpJ7kmTH5Vm%2BfdULeP9i6dXpI1ADrHP9xTI5LeifGLoc1LSQeI5%2FrTYPYucHWz5SynrAif96aIaPUXBWDOqBsYPNSL9i53QQYfUI3EzwTTVbf6FNfYSt3FSlJAJO4kSPimLJXYv4wyy5MFIXttJpsZJi7H6FHYkpSeRtFMjKiD1Cl7wpJgTM%2Fxq1NgShZ6SoyVKAntv%2FWjcq0GhJYBSkAJA6COPmlylZBL1Tq1KEfkaFkM0qdJMqSOsdRVJUqIO21lRBMExp3p0ZegJNoIJUmFQB8nkUZnaYQQuUjckxuJqAcqY7aI4kARzNQcmFWAogEoTE8nmoVxQTSmSBp3iSJioC3XSPnLJp4GQkjgT0qFOS%2Byvc1ZRaxG2eR5YUVJG%2FNHFeyWurOcvjr4BXmKsXYslOtAgwAnYnekTgpbIpU6RwT%2B1F9mrMOGpvnEWD77p1qUoJ4jpxSZxpqNJlZJLts4sZ9yRi%2BD3763rG5bVMfgIMitEIpaSMWPyYt0I5CxHELF8jXcNwd0yd4%2FhzVySa2aY5H2mdA%2FD3NYesWFXC%2F2iSD6iRtEb%2FlXBz4lGVo63i55TVWWbiWNW9xbqGgFxQ2PRUdKyZZy5a6NvJvs10zriqA%2B6FNEHgjclX1pqTb%2FQGRtKkav5muWHXXYkOJ9IB%2FjTHFdGJuT7Kov3dQWkad9jJmfpTYJdszzasjqzcNK1J9SIkFPQdo61qWO1cAUl6CNu6LhKG1rU3J6f07Utya%2FkrLX7DLeB3aVBy1ukJXI0gnmkyyX6GLHbLIwjDcMxJosXjqMNxppMLJVLb49j0NJb3RrhBJWnsMf4TmjKLybhmxKsJcTLT4EocSfcVHBMJZZr%2BRLcMzBZ3lqbbG8tqQqSFBYJQ6O496z7XoeqaIJmfJ%2BDXDrV%2Flm5dtFIXqCFK1KaPYRvFEvJa0IniT2gd5eJ3KW2wUKukcFKCkPdwR0PvV2k7FTjL2RrELfEbK%2FRePW9zbLbSSlYRBB7HvToyTFSTSuh0xjWF4itL2ltGIBQDggpK%2FiqkpehuLg%2B%2Bx0tk3fmlltduo%2BoL8vc%2FQUxSKnhcukOsKsmrt82y2m0OpELDi9God0ngGrSbdMzvCovaDTrOb8Iu2HsJunMw4e3uLVSvNUnrpj9Kd8Kr8WKyTgu0Xdg2XsHzzhbD9vheJZZzOrUpduppSW3V9thtQSx%2FYEZJrsJ5Y8NfEi5xG8w%2FArLHcLxZqJtnW1p88bwppWw6cb%2FADRRcl%2FHRSio9qy38p%2BLXiRkHF15a8RWMCugAEC3xHDyCkcbrKQdwK24MudbasOUIT6bX%2B50T8NsIyJ4qZTFpmjw0wDHsvEJLD1o8tNzhoiTI3JTJG4rT%2FeOTqUQJeNLHuM9kuV9jj7Oec37qweaztgGJ6AWXrVxhc9obVBVx0kntNPl4%2BCS%2FKJcfK8lbajX%2BP8AyRuy%2Bxd4PZaxdy6y85lnPj6EkOWt9iTuEYlr3%2FZp1eXCzG3IqR8fxo9RKWTNldSSX%2BFZBvFCxyVgNra2eZfBDMuXcFbSlLdyjM1viHlqBI%2FbFsFZ45XM1mz5IQ%2F0mnHga053%2Fsa%2F2OZ8uXT97Y5WwXLKLZStC7e6Upxt4kbBSYAn6CseTOpaihGfB7TNVfHrwbbdtTdYdgbGF3a5UsNJJanrB%2Fl7UeCSj%2FIvx6SaOa2L4Nf4NfOW1wHioE6QUyFb%2FlW2WSlrQMny0hEMWduhpNxhSwlwR5qFkx9OJpEnmfVC%2FwC3l9HSz7LfgBjuZsGVmrAFNXFopCm7tIfALbYB9SkzII5rLmx5JdjvGnHFL89G%2B3hTiOI5ZuUZJxLE1oV94bUkFJKlerSAOu8issYNPZ0Jx%2BTcWbp3F8cQw%2FAv8Ms7uyU06pN8lTckOJVIG3xP1rUr6QiWKltmkviSHsC8Q8bs3LcW9y8w88WW51FR9RUrtAjakzl9myGNJEIw%2B0ufKxlpHmrfYb84SneFAGPmqj%2FEz%2BTD%2FURzw5tzl%2FNWNZvb0snECllSkykRqlY%2FQUtKm2zZ%2FBKjcDJOaGLFhi6Z8i7w0h1vEGSofs23FGdvYEneopWbPlnKJfmUbfC3cLzXg9g%2BhvKqnEIsdCiVa0QoHT2MfrQShSGRyt1b2dKMNwxvGPD7IDYYtU2iC06pCUDSsKVvuPaa1fDKl9MxZZuLZEs6eDH%2BFeK%2FiTnLL9vci1OW7e9YKR6QUTq0qH7x%2FlTY4eJa8jlhjB%2FY4wbAzcZJylmi2uG7lxN%2BHLttQklpaSlSkkbCCRt13rVj%2FJUVlk45nFoleQMupybmFvB3rh63wROJIL4KSPMC923Af3QdhPtWjCknsy55c03FbRuVmi1vsJw2%2BsMMQhu6U43eIUVawpG4Un%2BH510stKNo42JcpUMLNnEV3%2BM42yEWQvcOt3W0oB3MBK0noCCn9aTB%2FYfH%2FuHswZaTdXmAYzh92t1ScMC1ICI217T9Tv1pnGP2HjnWpIl2EYB5GZ8r3jyli4usMuba6QlyEOveZMmB0SNPPWjcWxbkt2jXjxf8H8irsWsz4nd%2FdcSs23VWrNy0H2UrklS0hQhEcJnnrtSc%2Fj4%2B5aC8ecrqPRyV8Wvtn5VyLavsv2uD2uEW6ytll66m6v17gOvlsDSn07JEGB0FcP5LnxXRuyRpXLZydx3%2FAKv2J5WzNe3OW8qYfi942Shoof8AIt21Cd0NIBIE91EnmaKUM1%2Fiyl8KVzQOuv8ArmeOD6VJXkfB3r9AUGH0vqQGSYEhuCD9aasXkPSZXzeOnXH%2FAJJt4d%2F9bf7TGE3Td9id9gwsiufKucMaU0oHkLUlIUfbeanHyovsjnia9f8Ac6b%2BHH%2FV88Kc44Xhl7mDDl5VzN5YW8%2B1e62PMPUtBGsDrIpv%2FwCWnH8Zozx8bm70kda%2FAP7V%2Fh94i4fhd43n%2FK61LSFIKLzU0R13JkH2Na8H9Qi%2F5MvL%2FTp1fo6TYFmLCMcwa3dZxPC7xtwQ2%2Bw8FpJ7SDFdOHkwfTMMvGd6Kc8V8vZbxDB7q3uLsqdKCQChMK26TtTHKL0ZljfKv%2FBxC8f8zNeHWIXFnh1k4yyqYcWkHUPpzWHyvHvpG7xcrbqWir%2FDbxZskXCLh5xpxaoUsrBAHfnisKxSj6OlGbX8TbzCvEWwxVhpI8t07InX0p84L0ioq%2Bic2uLYehQcLrUxAgyTQRxewnBh1nHbUn0uJcX0hWyZ%2BtPTroXKNmeI4jbG0U4p5B24BouTeio49mv%2BaXWXbl5IhwEaT7e9Zc8GdDFOnZXaUoacXDckEHqK5WfFa2dfD5GjFTqnHfTCBJA23rzXk4mjpYszYi8oz6ExHWN%2F1rDKDaaN8Z2A7tSNHrHM%2Bknoea5uTx7ZogwI%2BrSr1aVek7EESRt9elct4Ysd8sgC8soWFgFfQjcigfjxDlJ3TG%2FnSdSiQVA788VIxiug6GTrqVrKknSsA7TAHegkoscm1sYKeCQpKinWeZOx26d6zzxRbpPZc8zfZi5dolR0kkgFRT89aVKEogxlZkm7BUlKQAIB32mhjlp7QTF%2Fv5CkhJISCNU9ZFOiuUrS0A4bH6bxEqKViEjb5p04X6Mzdug3a3rYSHIKUyQImRWjHCuhcl6JTZvr1pBU4T%2BLfb862QmLcSYWN6owDAAjYj%2BFdPFNozttE2w5wlaSFISsbiD%2Bk%2FWt8JpmedeywcMWVadYBVvEgyR%2FKtEYLow5kT3D0K0QBp424rQkZckvomGGpXqhBHSQNt60YmzLJv2TC0aJiANJ27x3rXxYiT2SayQpBnkxxVxtGfLkXQbZQUkhJ1djXRxPRiboLsBJA3GrgDuaNKhIQbSUJ07DnenxjRBdI2%2FAFcRFEVLo9KDqV6dRPETCaL5GhfF%2FR4NQOwKu07RTWgDAyZUVlQ33mqUUQ%2BWgr3SSFDkVail0MePQhBBhRE9jvVixw222oLAUpM9tjVBRin7FGyG3BBS71HMD2qpJvQLVMMMupXqATAmZPWhWL7ZT%2FwABNpSiSr06Tx2oVFfYhrY8QkJEDcjbmInvWrF9EAd7Z%2FiKtbah7b1wOCPQWRi4sU6lnYCJ770ueNDYtEfuLEJWQJ1RvA4pDjvQaf0Abi1PqCxtM%2FJoGasbpbI1d2cHgaIkR%2FOlNMZzQBdSpKykkQePp%2FzWd4U9k5r7EhOtWkCfc7mjhBRJzX2fGNRJOpQMRHtR2DKSaEwSSVJUpIHTuKZBmaZgXNyTJg%2F3NFSYqVvodsLCQAd0jjfk0VgqKYYt3CIMBQiNhv8AFEosLgg204DoAJT0A7itWOujPOFdBJtRWAkmEkc96dS%2BxI%2Fb9MA6560fGK3ZBfYEAz2JjYUMtvRDzSCZk7nieKrgyCOgAAagFQeapxa7IfIEmIBPxUSsg4aTBBJEmTE8UyEWmQfIKgTM6fmaMyuNhJshQAiTG8mSKgqUK2O0QSJntNQKM%2FsM25jSfVBP5VCc2E2SFHbSRHfpUBbd2Emi2VgCCf1psaKH4tWX4QvdJ6HrRJEI5jWRsOxdopW2JI3BTxQyj9BRa9mlnjL9lnCMz2t2n7ogAhR%2FDMz%2FACoY0uy1iTl0cMPtGf8ATzLhxG9w9giQSJbHpAH9azZ%2Bd%2FiJl4KjJys46Z8%2BzPjORMTudVupICiSvTGoz7cdKwzc1qQp0tC%2BWbNwFNu8lTbyfxETBpbH%2BP3osZxq6at1pcUpxKvwgpH6VlyQS6O5hcq%2FJFR5x%2B7uMOpWkhY6kfpSafsbZqfmtLjLiwl3Ye427VcFbpE5JbZUF9evOqW2v0qG8%2B9bIxrRy8uZyd0Mbe9cYcDa9a2zG8T%2BtOSkujPzb%2FiTXD7O3xJSHmB5TpBIg7UE8svbNEI2S9uwu7Zo6vM1xwQIUPbtWexjhStjdp9L1wShxetPAkAj86Cd3aCx4%2BX%2BC28u4%2B8iyODvXKiyrYtLHtyD%2FSlNx%2F1I3RjxWywE27bFqgXISbFQnzEb%2BWPf2q0%2BOkyNEEx3L9qt8v4c8LZ4H0OMkjUPcHYml5JJjI0kV5iT2LYY%2FBekp31Ec%2FPekthWmGU46i9YTaYhhzSgraQowfrRRnTFygRfE8tW6QL2zQTbkT5aSFKT7dK2RyIyZMEVtGFs8u0caU5cOqAHDfKvmrntaAxtLsLO3bt20t20tLxt4fjS4zye6SP4UMMb7o0rLjrZZHh%2FeMOKZdxJhmzvW1fsX9ex%2FwD1TT00kZZeNGbtG0eRvE%2FKmB3x%2FwC5cGw7M9ms6XV2bSLa5a%2F1JV%2BFyD8TUWRCZf079m0OC%2BJzT95ZO%2BHGcsn4vh1w95Bs8UKrO%2Bw5fQBawW1CODIFPhlQP9tKMd9G2OTcBxDM1jcXvizh%2BF4na28IF7ibbDptZky26kkKA95HSulgzxXZkyKP%2BhlyZZ8P8tZZDmP5Iwrw%2BzG0AF%2Fe8LIS%2BFET%2FwCJpQQDA3PvWrG4t6RcVKOpKrJd%2FwDVTL6LizTmvJ%2BP29iEI%2F8AmWAQpxkz%2BIsuCFj4VO4p7mrtAzhJatP%2FACTrOed7DFspt3uF5cytn%2FAAgJR%2F3NhBTbshP77i0BLiFDsFD2mim5V%2BKQeCKk6lJx%2FwzTnOPizYs2DlhjH2b8qtYb5eoYjlx44iyASYK2VqLqR8nYVz8uWVVKFv9UbV42NPWWT%2FAMnODxNx7MmI4g%2FeYAvL9jYBR0MN2qbVxsTyQpAO3G5rlPlYOTxndLf%2FAHKTbxzPeY7%2FAPwd61zff3y1eSU2zZcYWn%2FUTCRx3FXwm9AO496B2bfs5YBcpS%2FdYvaM4%2BU6nLNjS4lKuylzpCu4BNafl%2BNVJp%2F8gYssm9Ir3K%2FgVgtznKyy9mq2vsHwdZGu7W2Qkb9B1%2BlJl5Db1pGiSl3Rul4a5dsfAjN%2BIYj%2FAI%2Fj1tk1TTiXV2DYUXUqTATuRzsZI702GV8t9Cp4JZI0ts2stMp3j2b7rMFm%2B8bW5w5i7sMRCAVaVAc9QREH3oc0eUrj0Tx3xX5dovTLV3iFvmu%2BwO%2B%2B%2FXLd%2FbJxJIB%2FC4j0md594pUJNM2zhGUea7Na%2FtB29zmDO9tjGB2ryHvLK798iJQEaYjpxQZVYzHj4q7IA3frFmzjbDn7H9k2soEB1KU6RNUMpNEJzvbowd5LmBJdRhR0XAbidKl8pP1mgnG1oH5It7DPhfit%2Fe4DiWLtoSWrg3KtOn8TSfQYHfmlqLRpx5Iqzajwexi5dy5a2t64tVo3buvJS6QFhKVfiV1PAHxWXyMzXQ1Ots7LeAWYsHe8OcCwbEbhNxeqtVLZCk7NFR4nggT9K6nj%2BQuFSRm8qH5KSNs8Oy%2BzdO2hfKhaXWHG0WAZ8wwQT8Vvirjs5uXJUvxNEs13eNeHKM0ZLwjD3nMvpsk3DakolKBrghPuASY6RWflx0jq4o%2FN%2Bbe1ouU4hYY34XFNspCnMSwQuWdwkyVlsBQHsQQRW%2FHJcaOZK4Zd6NocCcXiuXsrOYmh03S7NpPmFGkq1ASOd961KdKmZZxj8lxLPyjl1ONYdjuE3zTYcs7ssphcSCRPv25p0Wn2jNknTtE5scoXOFWVm3ZIF1b27btu7HqVBVIIH5U1RSB%2BS22wjhWVwtrBsSlbdywbptRURqClOykhPEmR3imRg7Qq2cpP%2Bq39oDC%2Fs7%2BEaG2FtqxJ%2B3Wh5a1klomCQSeSrdPxPFZvPi3pG3w1G7n0fhD8YPFrOfipjuK4rmDE7h1p10rLLZ0NJAJgaRQ%2BL%2FS%2F9VGTzf6jDlrX%2FwB%2FRrzN4255Vmy2jrq0yRzxXTx%2F0530cXP%2FAFOT6stfwX8Fs7%2BNXiHljIeWrW%2BxLMGLXbdmwhpBWdSjBVA7Df4HtXovA%2Fo%2BOckpdHD%2FAKp%2FWJ4MXJt29L%2F6j9a2Y%2F8A9nr8MPCr7O7Oc8y%2BIOacRzSmzQ8sOuJAQ6UglCGx0KiQN69Vj%2FpH9Pn%2FAO18bb%2B7OJDzfMxY%2FwC4z5KX0u%2F%2Bf%2F8ApzZzV%2F0x%2FFPw2yg5m7FUXmE2qyn7mp5G60HcAkdYjmuJ5X%2FoqE5PhT%2FR3sH%2FAKviox%2BSDjfTfv8A2RHvBDDsWyfn7Dss5rwnEU3DzoaaesXFIKjOxUE7K%2BtfPv6l%2FwClZY5%2FimfQfC%2Fr%2BOWOns%2FTP9nrwzzllK1sHsNx3ELXCrlHmG1fdUW1kwSSkGAqeoilYf6fJJWKlNN3HRZvjD%2F3VkDBrrHr3HsXu7QpJ%2B7LcUtLcDpJ3BrZHxLaoV8vDbZxM8X%2FALQWGZpvbvDrrC1NupKih9AV6iJAlJO3yK6PxUqZnfmxk6qjXbCM7Cyui6VXZJ9Wnc89AB0pb8dPphqTrs2eyD4pXdyi2YZVcIVPBO5%2BvSsObHXY%2FBnkno20wLNrjjDZfUptQQfSD%2BL2nrWRRadvo6cG72WLguNpdSpSValTPwD7UxINyXTJG9iztw2Gm1lI467CP%2BKZGKStmVKVkPxRxS%2FNKnC4oRtx%2BtSatGjHd2Q%2B%2FWqCUhUjfbrHSuTmp2dLDliuxixdQEpCVL4AKjXEz4F0djDO9jlaISVlPqKjzO3auRng0bseb0DbppJQVSZ6kiQB1rl5030P%2BRkYuwNEkAq3JAEk79COPrXMyYXHs1Y9gG5WfLIIlJ3J6x3rNOEZLY6ORrQJcchLiAPKMbHbcR%2BlZJY6X4mmGS%2BwO84SAmSVKPpncTWFKadtDUMw8AZccUpyNpkkHvTcUHy5Mqxmu8bUhRCtIgbg%2FpWyUwVGnZkHAgp8xXmFQAKp6fwFJaV9DHIyS%2FGhKSfMJ2JEiKbyS6Bewgy64R%2F4ylQJEwdj%2FSmRpiJQokVm6vQFKWSsbKE06Sp6ZnpkwwpSXVQlalJ3PE%2FX4p2HLUrQEm0T7Cx5qkg6iDIPt9fy6V1o5FPpmLNk2WJhzayohMyANvetkMf0ZZtljYYwFKbOyNpIMTWzFF1bMs96LFsG4bb1JIJAJ24M1ojFGZxrZM7BgwPTJMSRyK14oozZnbJZasqUAiZ79a3RfqjHNWSW0ZATp9X581SyL6Mc4qwy0hcABKgehma1Y2q0Ldewo2yEASCdhTBL7HiW5UZSkGtBQ4Q1AAUSAeoNQg4SlRSVbhXBPb4q497IKxtGyk9p3NHyiC2ho4lJ2SeJBAEUaFyqxosKUNSiFR6oJiroGzCSSUDgngn%2B%2FaoQ%2BAJ3BIMbzzUJQqyAPxbGNo6iqbrsjYdaSlH4UiOJpaVlKSfQ%2BbdBkQU7mrlidWiOgkyCZlQUZA3H6UwVJbHt3ZpOswCYG8cfWuPJe09HbhKyOP2JjVA46dKBJPYywFcWUQnSlQHbvVTX0NpIBXNiEkwAT2HeskotBKZFLyy0lUiEg8zxQNJhfKRO8sTKykAHqAeKUx6ywoDuMmeCoR%2BInk1FFsjdjZbREkEpHPPSo0yhN1JCVFKiewiopULyDWFKVq2THPxRq0KFW5QSlR1EEnk9%2B9WmyRjQZYcKTBG5j6VpjfsGc6DFtqGggq1RHNO0lyMs8iYcaVH70GN9p%2FWrhKxKluh82mRq2K5HTimLsJsfpBhJjXHPST3pvHdi1ksVUZAUCJPSiGiJb1SSd47AzVSjZT6PFMg6QAB9eP8AaqUaE8mKgGQCmUnbmiLU2P0tkKIlHPbeoA79D1Cd5iO20bVBUm3odtJVM6k7jieahODCTBMb8CIJE0WgQm0VakQT9elTlXRAmyeJIgb%2B4q%2BbIF2lKME6AqImaYiBRCtzMgcc1ZBpessvoW2tKSDtxVcUEpNFG588O8Hxi2fU7asLUpKv3ZkdooWvoOM09SOSP2lfs4ZbxZF2lOCsIUNUkJ2PYcVly%2BO56EZYJvicTPE%2FwiTk3FLxdvbRbz6YH4d%2BJisOXBKJpjjaRr5i2MKtELZW0oQN%2FwC%2FpWSWKzfDyk%2F5aNdc8ZpbWi4QkpSpIJGrlRpbx72MnmjX4s1NzHi5duHNbilJPKe1OxpHPz5Givnr1K1kBMknrsB81s8fE5bFwixa0ux5iFqAO5MA7flWhY2nQSu6LFy65aFaUpPkiIgHmsPl4pJ7GXxei6cNcsLlhq3xNC1MQNC0QVJ%2BaxqUY9m2MbRHsyeHy1lWKYHeBQIJCVfiSofxFHHNG%2FQqfjOtMr9nMV%2FhbotcWaWmBoMg%2Br69KvJjT3AqOeS%2FGSLRyr4mWSUDDr1ZubFRKQlyQpH161mnhvtGmOeDdFsN4UzdsIubVdqthQ1olZ2HUH61mfjtO%2BjZyhVRZF8Yy9iB1X9oqyumjMt60qgdiKlJPYPxyW6IaLK1WPJaBsrkEp8tagpAPcDkc1JyT7Bc5J9DsIuLJlCAxb3qY1KaKhuOsHmnXURcly7HOGv4e%2FcEWdhhaWOPu94ogpPYKG6hToST6YHxx%2Bg%2FYW9q5fKS24hngFlt0Bv4GozFN4t9MDJjglbRN7DIFziAW7at2CmtJ1NJUHF6t%2Fw7j8qYoLsxSzuqRJcFyKVXItf8CubPV6VJLKfLcP8ArSQSPnar4oX8s%2FsuJjw3cwBi2uXLjMark%2BtDVhgzryG0kTCko1ykd9h8VbxJ%2Bh2PJL7LF8Pbrx6yfi61ZCx%2FPWIWq%2F2htr%2B1dVYNb7ytQDTe37pNXihT0FknN6%2F8Gzj%2FANp7PuVLVrD86%2BGPg5iLgE3V1huLW6bhqeui0UTq9j%2Btb8fmzXaKjhhVu7%2Fev%2FksvIP2xPCzNwGCYlljxPxW6QAolqzddTI%2F%2FSK8yInY6U966mLzoSVOIjJ4M5PlBqi9keIvhFaYQ3jtli%2FjQHGoCEC7Ytmm1mdkvLRDp%2F8AVJO1Ojlx97M3xZrptf8AY1hzz9qXOtniN1ZZR8E%2FtDYth7jgS0sKcWcSI2Cy43bhRO0zMVn5OXSOhjx44rllmkRbFMcwW1wF3NPjflbxFyXaP%2Ftl2Lii7cOjkBQWklImZ%2Bat4pL8p9C4%2FwBQhkfHC7NH%2FFr7WuSMQwd3A%2FDeyvsv4G4ooeS2ynznBuBqIET3k9q4%2FkeVkb4w6NkfFxL8sm2alHHrNNsq9s7tyxbWSslxYLiVHsJ%2FM1z3j3dE%2FuV%2FEnuQfGtLOLM4JnVLWIWKgUW94B6kJ7K9vcb1Sy26JLHKe7OouS28sZqybiNvcow24ufuYS0tPrLiOiVdx2rasi7Yp%2BPL7Lq8JcQw6%2Fypg%2BXrxwOWVpcC1beLY9JklKSqdknim%2FNaFZccl9BDFr7ErXHv%2B42vLQbZD9qWeSUpVIVI6bUpp32OwzdUQ3P6Td4NiC7Rtb2q0bLqNMBOqTIPMyaU3sdiW2aeXd4MByxd2lwtxFy1eNNaVpghKjPFA3XYc0ncWPMBsv8AGcdusOvXkqt2dL7gkR5cgCO5mrhTZz4Q1aJ3kl%2FD8uX9lhzq29BRdMNJCZCAtXERBJmqk3dI2xg6RsH4fYbYMZ5Xgt%2B0sru8LdbCQdOlGsGR7gClvG5aNSTcTqD4a3CGMJy7ZW2GzZKuy2kk8IMD%2BU9qLfQuTdHRrwwsxeNqwt8oectXkqQrVBS0okCPYc11PEbfZyvNXFWV14ueHVoM15bS60m6srl56xuG0qKS4FJOkk9uf0rVkxphf0%2FyXHaexjkPKWD4Dl%2FB8uYVhSHkYddKtlsLggMKJ7ngVeKD6L8mbyT5S7J25gOKO2N%2FbF8WTbD6BaFlcpaUggglM8EU142xUUkbiZbtLbFcUfubZwNs39pb3DqwIh8elQjncit2Km6MEy5rfL5Xg19c2KR94SlZXCNStt4j3inLuhfLewQ7hwRhJu3yhbinm1toEhU6ZAmmUm0iz8WH%2FwC0E%2BIF9m7xxyD4N4cp9DWHWK8RxADZLlw6qEn4CRA%2BTW7%2BneBznbXRl8%2FNOMUr7Pzy5xyjaZbwVKloSp5Q%2FeHG3Su1%2FaqLOL8kf9yqcHskPuoQlhJeWdIkbzx%2FOrk3RUsno%2FVv%2FwBKv7KeXvs2fZuxf%2FqNZpTheK5gwhdwvDsNfcSQ5boELSgHh1XQke1ek%2FpXiwyf%2Byv5PdniP6tmzY4S8%2BdcYaUerf8Ano6%2B%2BBv2hsA%2F6oWSfEXOLeKXPh7mHL7iVYblxd0Ib0JC0PPJGywVJjqBEV1sUn4mX4Miu%2FZyMil%2FWsWTPGXHLBXGC6T%2FAG97%2FwAUUv8AbM%2F6g32Xbn7MuH5SGesk4n4ueaiyfwO2uUruG30KKXAU76QCFTNP8aMfH8l%2FLVNfY3zP6svN8TFDHJvNHTpWtdnOn7KGK4B4i%2BImJYrd4FhikLtVFhoAHy1BJVIP06Vyv6vO4Nw6Z6v%2BjN8kpM70fZfvLHH8s4ai9V5zzNwWTqHACthXzHM6k0fRFL8U0bleLHg1g%2BbcputO2TT6C2dKNBVNTFJxaaMnkSTX5Kz8wP2mvsk43l%2FOWKX%2BGYUpq2LpIB1CZJj011HkT20cuGTdpV%2BmUha%2FZwzcxhiHncPCV6OAghQHyRvWfI0dOGZtVRIct%2BHWYsA%2FaqsFNkKlCtzqjqaxZIcuzfhm0XJhl3dtoQh5jygPUdR6z2rHnxKuNnQ%2BZtFtZavSFBJeSW50noOOo61jhjktDU9UWQxcHykFC1RxM7VrjFVTIkwVePBpRQ2fMAMEH%2BtC0OiqWyFXlytTioCCOhCth7zXKzx0MWWvYjYBMt6gArk%2B471y8kLdnXwZW0HwnWgBY1JMjkg%2BxNczPitaNUcjQzuGTGohEkgKE7xx0rl5cRrwZbIveMrSVqKQDIA22iax5MF9nUhk9EZuyVncNIHskcfNY5ePFPaHRkr6I9cuAfjTq357biss%2FGaVo1QcW9sCPiVK0r0J3I%2FKd%2FasLQXJJ9At9wpUU64AH%2BX8XttQtIYhgVkK%2FBsCBMcf3NDONEM5cAbQkIkHYhXHzQEHFvrjSonmSBBmrSKk6VhdhhKySNQgcA%2FhPz1rRjw5K2tGac2%2BiUYc2twFKEKcJ6lPPv8ANbcfiP2Z8k3V2WFg9qkaG4CVEAE8D42706XjRXvZhk%2Fb7LCwyz0KSVSpMAEAz8VvwYuKoU8jemWbhVppSlUT2nc11IQVmbLJpFhYVaaSFBQJI3HatMIroxZZaJ%2FhzCVlCjJI23NaVAyyytqibWLOwCUIE9%2F4U6K2Z%2BbJTaWwSRPlmRFPV%2BwG6DzLBSBEJTsNq3RxrsyZIt7Qbt2CClRSkjrvxTEJasKNoB%2FdCQeoMGoLlGhy3bqiQNvczNaAB0GNRAERHOreoVJ6M%2FKSCDJjg71BXJimhIMQkEe9Wostxk30N3rcSDOkzAPUntTLkVxf0YLa1CDr0g7bCqcmimn7GLrakqhKXBEdKNPVlHwYUoq2JE7n2quSIO22lBXqSVH53q3tFOS6HjYckwNKSdj2qoxoDiguykhJST%2B0HM05OlYp%2FofNpUNB2KeoNLlsrZM7iyTuAAPoa5ssaXZ2eUiO3NigFQKQE8A9xS2lWgov2wDdWadKlQQeoPFZ537HKSfRHrqyEEkc7880A6MvRFb%2ByVJUlHtxVSVjEmRK7tE6iVNgj24%2BDSL3RERx%2B00lYUEnrsD%2FAH3oJrZqgrQMXbKiUepXA6yP60PEqWOnY0WytKUggkav0pqQhxGxZ0gDcGD9asAyQ3p3HJ%2BZP5VCD5hMKP74AOx%2FjNNgqBmgxbIWIgfInamR7FNpIMstgBKk61DYQTM08zydsMsNFQgBYE9DT1jTBbS7CCGpSOVH8qJQFuX0KBmUwUwe0HYfWiUURT%2BzMtdQFAxHHvR8EA%2BzEMTqOlSgON%2BKGUESjINEFPpKTS1GiDhsCdWkzHTipQLjY7ShISSCrUOp6VAXj%2Bh22qCAoBO0g%2B9QNIIoTISDuR1nioA8YQbTAmT8ioKSoINlKkpEEjke1QZKSaCbLijAURJ24pnPQp36CbZJACSf5UKbCPFKEFLmqTzvxTkQA4naec2rylxt8AmqZaSNXfE%2FJIxG3fdW0hZIJJI2pKbTG8L1Hs44%2FaX8P8OatcQKrNCxpVOob8dOsbVlzZ2tFrxZPbOIHiOxh1rdXAjyHCVA7xpFc%2BVfRcVvjZpJ4hJYIcdZeJWJIGrgUhumaZYuOkaqY3eLZuXQF6lwZ3g%2FWtmFLuRkyZK2yJqeUtxaiQgnbbrW5eRB6iBLyE1VBvDHHGSkKR5jZHB4oZ50trsLEtWWHYM2zobUDocKhpUOI9hWPP5EpaRpUrLlyqu4tGw06l27sVHZxtIcLXyBWGUU9sdCUl0WlY2DK1t%2FebpNlbubNuaTonpI6GpGCW0aPkXszx7wwvX2kXb7bdzbuJJS62kEEdjG4oJTf%2BkksSfZVz3h1l999u3bxR7Dr0EpUXGDKT%2BW9B%2Fct9gPx4euyRYVkvOOXXEOJxTDcZwtYltxp7dJ6ApUAQeZqp5bVpDMUHHdkuTjjCmHmsSwJFviqU6fOt24LnbUAYPzSeMPrZuh5dKmiI49gGI37CL1BdtyU9RpWAOvqooqtmfNkUutMpa8usZwh1K2Lt%2B5cSohWtcwPcb1pSUv0c%2FJCS9hOy8Qm7ZKU3aWVXYGyVesgnsoGP51X9rb0Fj8lLT2Pf8A6o34UltBYbaHJSIMT9a2PxZLSQvJl5aSos%2FKXjbmfDHm04E63c7AFpSEFSlT01cfSqeCf0VB8Vo2CwzxQ8aMYXZXDeR8FttY%2FwDHiTZbbeH%2BZZUUgj4qoprTKlP7N7PB7H%2FFLMFnZWePeE%2BXLpp1JaZadxK4OG3MDnSp1Bn%2FAENiPeun4%2FJqhE4prTo2PxfwOxPEsFZthkTwLwN1xgKuW1Xlxa2bazIJUkrKusFRWTvsK0rxm%2F5JAYM84vjGTE%2FD3wc8H8gX1ucxN%2BCVxdqSNScAwZN04tA2IOvz7lYkfiUWxxApsYKHdIX5GHM5W0%2F9y3MQ8VvAbIa7ljC8t49dYkWvMRhtzgrrBdH%2Bc26UhSU%2F63FITHFMl%2FUMa1v%2FALBR8TK1dGhfil9qPGGsfv37HEsFy2%2BhOliywNpplTAj%2FwDuHyXlzB%2FChxPuBSnJv8rKywjH1s0czf8AbYRgd29ib2M3%2BZMaCdEffnR5J6Sskk%2FArXHKkqiY3ji3%2BS0c%2FvEfx%2Bzd4lYpe3%2BL5hxdFu6snyjeOuCO3qPas8sE5vkzUsqguOPSKuOd8bYZ8i3xa%2FWyPwtrcKkgeyeKVLwmzO5NvY0OdcwOrQu5v3XVpPpCgBHtWSf9PS6sYsjRLsO8RLpxxj7y24paVp8twEyP61hn4S99m3D5bqjpV9lvxyXiF5a5aVcssX4QdSXFR5yd5A7UuSUdNm%2FxJuT2zq%2F4Y31omzvsARo%2B7XAXcNwfUhYI1IB6kbkVcMjY%2FNXotNTl1dP4JelhryU2lyi5QpO6lpVpk%2B5kUXK%2BxEdq0fYHllOKtYg0%2B0bu3LDQQmZ1KmdKt%2BBTEk1YGRfZpF40jBVIzCtVqApeJKLWgRIRA2%2FOsUlXY6ONLpFYeGn3y%2FzDc3biFttu2CSoLVuDq2%2FQVWKVDnD2y0cvYHiGPZuctbZt2xfsmXL1sGfVpJOrb2NFytg0k02i9si4bmBWL5KzE3es%2FerppdsVFUqWFqgnf3q%2BSWjQpxb6OyPgPgNwcq4Exf2gvsYtk%2BR5xX6lkSJ%2FWtEItlZUls3%2ByFlHEbLFmXdTjQuLdIiAd0DvXRwYqOV5UlJaJN4n2GH4rh95aL823xEttXNrA3C217lJ6E1ulK1TMuL8ZbSIDlny7G8x1txKbe7RcIebKm9XmtrEnj%2FVqFKi0h%2BXGpO1ok2EvWGdWMXXg96ixeDoStHl6VJXEb%2FPFNeRPSEzxyhtvRfvhY1eJw9lSmnBidutbTqUjUmSJ06j7j9a0eNNmTycdK10bZ5XXrtkuOMNstPKDPBmSnr8GQa3p%2FZjnjl6IdmGydsFXNqw2FBKg4Fk%2FhHED4qJ1sYm6%2FZ%2BLv8A6s%2FhPi1%2F9qPNPizjNkbbJq22Ldq7vH0N%2FeHggJS1bIUQp0gAqIbB0jckV3f6S9NL2cz%2BoSc0r9H55PtJvP2Nkj7uwfJDkBRPIiu950PxUq6OTignLRRXhjmPBra7Q9jZhpuFpETJG9c%2BE09sZlxSS6Ok32b%2FAPqC2Xgvi1rgOeBmXxU8Hra4duzldNyU2S31AQ4W1HSVAjt3r0H9O83gvr9nmv6h%2FScWXJHJkx%2FIl6l%2FFlWZz%2B3n4qJ8TvEHxC8DMcxTwCw7HUrt3LDArgtabVR2aKgP1EbkxW7yP6rKa41yX7MeP%2BiylKTkuN9KOkl9GmKczYjdY4zdO3lzdXTrpdW8twqW4omVEkmSSSTJ3NcvLHk%2BUnZ2%2FF%2Fp%2BPFj%2BOFpf5P0I%2F8ATyzrdYPjeEPXDZuS7bPKII4Sloz%2BVJ8vI44eT0a%2FC8Ssqkj9EP2K8wvY3la4v16LVDuKLdQg8%2Fi2I9q%2Bf5cznkake8cIcFrZ2ysb%2B3Xl1CFLSpXlD1KHt2o1M57i0%2F0a2eIPhvkvOC3vKwti%2Buf33FNiB7UyOV3sTLDi5c3HZptnvwHabffSGPJswfSgJnUO1DPI%2FQzx47v0a94j4ZWFsVNpsR92T%2B6pvZJn3rJ8jfZuUEat%2BIOVWrS7H3JltpMxCU8ADk1byxitmrFBPohGGW91bn0JlQEaiePkUCmmtEmpomNvizqSlp1LaEiB%2BLYn4q0HBz9ju4vPMZSFIQUH%2FLtJpOdyXRsx409sjRaU88CAueR7b1hy7RojjSCFpa6SkjeDwUkAbx3rO8Sa2bMU4rQST6kQS5Mnk7%2B8yayzwJo2%2FImhqohBT5qSo%2FGxNc7L4i9obGaSAl22AsEJUhaZOmYM%2B5rmZvE49GjHkku2Ry7ZOkhSthMkn8XxWLJiN2KVuyJXjJ1pUSpMflB42rFKH6OhjkgBcNoGpIlAHKjv%2BYrn5cLfo1x6Ar6CVqIKNSUmRM%2FFZnjiv5IJOxqq3WpBIUptBAKSBt%2FzQ1B9ItsVbYkErBVzEkjV3pUofRV%2FQVtbLUUQA2SYAnaZ79Kdh8aT2%2BjPl%2FZJrKwKllCobXqA79ee1dLFBxVGV5eJMMMwknyypK07yPbncD%2B%2Ba1wg%2BjPLMyd4bhyQpIQ2ogkDcbfNPxx3swZfLfRYuE2Cl%2BWoN6RMmDxW6OJIyvI2WXhVmE6YSoqJgya0whRln5EuiwMNs0JSE6Ua5PXmtcehE8lk3sbYwgnpzKf403H2BJOuiZ2NukqQAkgRtvuK1md6JNbsRpJPB3AG%2FwCdFBWzLPK7oP27WpPBUPitvYqc2GkMD0DSPzp3BC5vQQaZAAITq2%2FKhcVYhyrseNskqOncHfbr2o%2BQS%2Bxz93mUwE9NupnvRAz6MvuwUpadzvvFU%2BhIkbcBRBQoDklJ5%2BadySIeeQklX7OAOsTFSUvRKMPJ0kEc%2FnSUQwcbBSdgocRRR7INW2ShUqQQOv8AtWr42DJWPUskggCdu42qcGL4MctskEE%2FoaC16LUGFENAgwZ%2Fl%2FvVqr2LbrY8DZMAKMRv70f4i5Sssy5tFQREEnciuZR3QBcWhP8ApETtG9UyAG4siraQTzvSuDJdAC4sjCjqSoxttsfahlB0aERm8sUqKhtPO4%2FlS%2BAXN%2FZErzD%2FAElQCoMGhnjtFW%2ByOXFgQCPSv0yNxB9vms%2FwtDY5WgNcWICQkAI7A%2Fzq1jL%2BeuwYuyBKwSkKmf7FXwQHzR%2BxBdgqVfhBHbpTviRPlR4mx0pAXOxgex6VXxP0BLOloVRZk6E%2BmTO4FMjFgZJv0FWrbSQkkEdoo2nQkKN2ywNSoHXmrjBkDFu0kKCYGnkgqppncrH7TUAaQEiJJnk0STZKHQZhMSN%2BOs0cYtMSm2ehkgA7IPB7VJSoJxl9n3lKIAMR3oebB%2BM%2BDcwCrfnbYCiUwla1YolG3STtz0oZSsNX7FUoMgmVE7j4mqVeyx%2BhP4CUwo9COaJRT6Yubd6HrQUG4CtJ5ntQMHm%2FQ8QkqgSI6TzUIoMetpTAVI2PWoEofYRaE%2BkcTxFGoASVMINkCYICv1olCihV0EogRJ%2FOjRCM4g86yCBJEcA1CUUXnnHSxbPKOoTz%2FfFDItSfRyD%2B1RibOIWN%2BlTXlnSr1T7HeQaw5ZIvhk%2Bz81vj9id7Z4heOJcKEJUpMBX1%2FpWHLikuxWOdGgeYs1XBcdKl%2BqSAOdquGO9Lf%2FA9%2BV6opvEsUL7zitQdUrkk81u%2FtFVPRmnK9gL70pBRsYAmRvS14W9SARIsNxR1AQkhLvcKpeXEorbsLHkSZYGFYm2tDYSE6ojnj3q4%2BOmt6N8JrsnuC4rilhdNvWNw9bnZRKVAH5jrWTJi4e7FvPK%2FxNlcseJacUYZwbNrVhe2ZT6VqagEnuRwfek8U9j4%2BRP%2FAFIszD8yWuCJKLZBesAmAwtWtpwTxO%2B3vQfF9GyHkp%2FydDq9xrw%2Fx1Ck3OC%2F4PiigNJA8xpRI32KgaH4n9GhST2iMrwF1Qdaw6xt8QYBIC7dUlXy2o6h9KFwXTAlP6RBMw5Px9TIctr9%2FCbkjZpTZAV7TzNHHFFdC3Kb6VFVYnkLMeJqS3eYgtD5Eh0qOgD%2FAFE8UyIp4JN7Bjnh%2B7YtgP5gscSWBOoXCG0gfBOo%2FlTaXRnlGnUgBfYXh9my4DcIuxA3tmCuD9fVQcnZJRS2Q1%2BzKHPPTctMW52CVBSFEn2NaMeTdNszzypfskWA43Y4a%2Byu6Q%2B8%2Bn8DzBQFt%2B4MzW3l9vQKcntdFuYB4kZjTcBGCX2OqtY1K%2F8AgecVf%2BzhUoj8xWfJHH6ZpjFPs2u8LPFDxMduvviMSuLVwoLKW7TDWl3LieCEgGECOVKIilKdfxdgqMb72bwZDzJhOE4Na3d3cXd%2Bq%2FWpCLbDGbZpLi5hTlxelCgY40tgmRyOa1w8qKX5uw%2BOXtMN5z%2B0Rljw8ZYw3B7u7s8VcZ0mVKuGUKkagj1a3l9IbASNpcHFNj5bf8EJzYJN3JnNDxj%2B1NimJ4ld2uEW6bRxRhKnQgrb3Pq0pltKupVuvpNaoSlLQMcnDTRoJm%2FPuZsTfdaYxS6bWsEuupWQVknffrTl4zfehGXNZSV5bqdJSXi67EyTWrH40fWzn5fKS%2FiZWmE4g%2BoIaJ0kTv0rXHxJMxPzZp2SlrK900ltT7qQOSQdxt2NMj4M26J%2F%2BSfQcvsi5gawZzFGcOvX8ICgldybdRaSrsXAIB9ia0P%2Bj5nFvi6%2FwOw%2F1HG3xk9lei5VZPC3dCkgbiR0riZ%2FCrRvjNPplt%2BGWYb7B8esL6yuHm30upMgxIneuJ5ngJLZs8fyeD0d2fs%2F%2BKZBsWnnfvD1x5SmQogaVjeuRCPHSOzHNGXZ0HwfEncTxt3D3Jt0OsXLjKNpWshKtI%2FL61pgnIOaUI6JdhqXdbWFWak26lFLrykABSNMkjnbkU6MWtGRZk3s0ozXki%2Bxdd2Lhp5a1XVwUN6ZKElXJ%2FSsT2dRKMldlW2uXzY5hxrB32fuVw1btott484%2B2%2B38qvGqYtY7e2WTYYqljE8RvUuhGKWNl9z0gQS0fSo9J4NXLsb%2FAGxara8Yy9d5Qat%2FL029uyhmEaQla1D1EHeY2oMnC%2F2bvGwKStHTnwm8Q713E2rXD0XLjdnjNoHUpWBqa0nXEdCSKb4uWXKkrMPnYL02dqsIxG2%2B72F15ei4S3qCSOhHT%2BFeggvZ52T4umOGbVrFsObYu2UXN406ssLI9R31aZ6%2FFMSbFznFlaLtjZZpQw3qLLrC0KTo5bJ23PUE0KtMOm4WRDB8Mcy%2Fmm2xO3UtWH4jcXVk8Ep%2FZpdRCkH52561KNSeqN2%2FCRNuq%2Bx%2ByufLW2%2FbNvpI%2FwDxO595EVuwLZzsrbX6NjcNbcQ1c4W96GlpDjC0cpPXf5%2FjWszSlaINm1K7pxhDLot9TLjeqNlqir9UX%2FGLkflE%2FwCr3lHDcOx208Sc4Xq3sNw9w4bguH%2BYSq6fWBKlEH07gqI%2FypArf%2FS55FJQguzF%2FUF%2BHI%2FL%2FwDaEwv%2FALgwB11IbduUnzdLfMEc%2FwAeK9Z5Kbx1Ls87gcuVvo52pdNs55Q1oVGk%2FwDtXMSOk7aHVreKQlQKlEE7iYmnYclOjFlxc1RIrNxy%2BeZZt9ZcO0d63ryVdGJwnD%2BKL8yJkW3Xd2d1iKipCTKpMaR81fzr7NWO3%2FI7ffZSxzKWCZYzBfW18wvMz3l4JhFmRJXrB813vpSIE%2B9c7%2Bq%2Bavi4yPQ%2F0rxoylbP0r%2FY%2FwDDlbGG5Xy%2Bm5CXWEIdd0q3WruQJrx0WpfmvZ2M87VM7KrtLTCsGQ3dlxy7KANIMk%2FSrUaMNrplSMYr9yunfvrabW3CipKAZUfmrf6CcL0VhnHO2C4neOW1s625dcBABJHzSZZKewsat0ipsxYdga8OfS662q9WmQgAGPntSHlZqirdHPvxSw%2B3ZurxpnywoGAE8x%2FYpUm3CzbgxSRrtdIVaWjhZChqVBBOxIp2J6HPK7pkasjqeIXuZJOx2poNr6D%2Bp9WlpIDp5BA%2FCKpqy4Qb6CNrZ%2BhAUkKUY3XsSe3tWWWFttvo0wT9voOM2pWzqUFKBMDjjtzzWNwdlRbsyNpKRK4BBIEzvNBLHfs0wm0Mbu10pUFpSDvx17Vmn419s0w8m9NEefYiQ4CF9v8ALWLLia1I245bAd2iCFatSInZW89Nq5ObxmujTHI10Rq7tTqlC0qciSOw7T2rnZcRph5m6ZG72xUkqmEkiQAZM9v0NYpYzo4vJtaAqrRQAUQhKtoB%2Fe9hWaWGL7NTzJr9nzbHqIQhSOZkkb9JmlLxIXoXJNbH6LFLiAZIUdoiYp0MSiqF%2FwB0o6DtjhocC1BO%2BiIT%2B6abBekDPykyW2GGIStKAhR2BAP8%2FanQw2ZMmS%2Byb4dhmtSEJCVq4iOK2RwiJTJxYYaEqT6RoO5MRA7bU%2BOKjPKUe6JvheHkpRpBgcmIMe1aI4mInJPosDDbQlLczzII69q2Qh7M%2BR%2FZPLC3PJTBJk06D9GaU16JrZW0mVH57mtEZIQ8jJRaMEbJmePmnRjydITNuiS2bIChoHG3xWpYVFmWaXYeYaTI2ASOe9MQsNMMlQ%2FAkbbdabGViphFpkiAQI4IoqAlTWx6hpXCdB3mJgUSr2JlGuxUWzhKZWPbeaPmq0CZBiCfLPyD%2FKrhK%2ByCgbXuEwN%2BAdvio4pkEBbKUYJ0777dKMg2LQBJClGSOgopxpWiGKmSZUVkk87b0agijBNtq2Abmem1GWLpblSToSUgHmgeRJ0SwgwwQNRCE7zv0%2BtAoX0Lmgkhg6TuTP8AfeiUDPNDpu39I4mf7ij4oWW9c2UgpCd%2Bw%2FjXLbaPQAG5s0n8TZJABNT1Zak6pAK5s4JUUGO%2FNV2ArAdxaAxDYV1pUo2HHsj13ZJUD6Ig896H42PI4%2FYeYkjywN5gwaHiyEcusOACiEEq3g%2FWiUG1ZABc2B1CSACTEHj60ucG1Qt43YOcsRJAQkk7EgGrji%2FyBJDc2KZVKUSeAf6U%2BSSKEzhoBUpJhM7dI%2FOg%2BRfQ2Mo11sUaw9IEJbSpRG5n3o4ysDJNDluzWFkKSmTweIq%2F8inNBNi1UrTqBE%2FG9Wk3r0A5NhJq0On8MJ4mnARVDxFpsRACRHXirLoV%2B7JUJ0CCY7T8VC3%2BzxLEq1JB0zyagNo9LYidOpMn6b1CuaEyykKJCIjc8fxpbgypSXdGXlkExAM6e1C4MH5GLotzwEuKO0x1NVTL%2BQfNsTMpPbn3qgJSseIYghBTI60Tmymh2lpQP%2BVQ5TA2FXCNrZabXQ7QyVD1AKB7ED9KLggZz1seoQZMQSOYPJokgOY%2FbRJEgARFWHF2L6SAARAP1qFgfErNLgWqIMRCRzUIa1eJdjctW9x%2BwU42EkmBJpU17DhBvo46faav8MatbsOBDaoUCDsUqjt1Fc%2FO67NcPMWPTR%2BbD7SD1ivF7xtvylallQIJhQ26fSsc5swZpW6iqOdWYmh96eVoAAJgA7CrhJpiZIr11I1CUaTHXrT35OTp9FDZpCS4A4htaJ3rRHPqkglKkGWbZhzSptBSeRBEfxqoyhJOUuwoRT7JTbNrs0BxMKUPeP7NY5%2Fl0PxNdExwvHmrchdwwCnnUkQqlSi32aIyos%2FDMTtsStgbcBtWyUrSICe0iltDEyT268cwNRcdS4q2UIKSqUuc8dOtXGVEni1ZJ7PN%2BGKS2nErVsSACob6B8d6ty1QzBSZa%2BEY9lttjVa4la3yCBKVpKVoHbY71lcWbeQtiWJZcxFKWGGg88qTCmF6EfUGalMtIqDMVjfWLrjK3mGGY1JbgyU9SJJpkIsTmnx0UZfYQm7ulOIYfQ%2FMa4Jg%2B6oimRdMxPemLDELXLrak4qwzfkiUstGF%2FJWdwapbI2orZA8dv8ADbxZfw9hdg1BJDzhWof%2FAKx5rVimopp9mHJKL6QBtcWt8OLbobNw%2BkEjXuknptRYp8VsXDK0%2BiQ4Lnm8vLxtOJ3Lz1qVelguKSlZ90pI2%2FKgnXpGzHmvs2%2FyNm7L9%2Bi2wzHLlLOW2UEvsWw8hgoHOpSfUsntQKWx2k7ZL81ePeYcYQuzyTht1hGWUMizTchABDaRAQ0IhtAHYSe9b8Hjrt7GTyyr8NGuGZvFq9whNwDbONXdwgoU8kK1vJHAKzuU%2FwCniut4%2BP1RzsrlatlQ2uK3OYrp111AQgjfeSd66mPxL%2Bkcny87i%2BMV2AczluwQWWkIDkxtVPBK6o50FOUt2Qi0bbU4CogkCDI4rbjxceypY5R7RPsJtysrbWyEpmQJA1VquEXdiJNN2bH%2BBPg8x4teJmUcr41iKMv5du8RtbK%2BxFbZWixbddQ2XlJ6pQF6oHMdOa6njThJq1aMvmylDFKWJXJf9v8Ac%2FV%2F%2FwBS%2By8EvsB%2FZGyX9ln7G%2BTU%2BMmTsZSvBc2Xj%2BCjFLHE7vy9a7pN2EqCrvVKoZJDQAEiIr0T5zxuME6XqziYsmLDOMJSvLLbk%2Bl%2Bkz8UPiJlVWFYg%2Bpdm5amdWhSSlSR02%2FlXz3zfHlCTlI9n%2FTpt97IZlzFFW922hSyHBuI2rzvkQaTO3ijHls6S%2FZ9zNf3d3h9izfIVcFTa0Cdh6h1rzuWLTO5DHGrO6GVrhsO4DjNzLOJ2lotpYCpA9I3HTerxqwkzYjI9i1a4DhL94287iF08S8TCnBvxPTat%2BHFGtia5PRCcv5aZK7jEMU1lT9%2FdlxRgBLAJP0EAD6UiOPRtm3yo5r5pOJ3OeLi4aQ4lh29WhohZICNUgD6Vgm2paHvx3drRc9zlWwTg1jiSrzTev8AouCgg6BuYJ%2BKZ%2B2XFNOmPsMzVid2vFb28cWtyxsw5blySXEo2SAPoKx5Ytb%2BjdiaX4%2FZ0O%2Bxm7iuZ8g4RmjErZDOJ4jiDrygpeym0u6Uz22SqtniXFq%2FZi%2FqWZNqP0d6cBxJt826Etp0NMJSpI4G%2FNekT0eazL8m%2Fss3Mli5YWNlidm07bIbfbUpQPpAVsZ%2FMVqpisWO3SIVmRxOE4hhziLVm7V5qk%2BYDAAWnff5CaVkTsdCLdpdAO6s7i8aetrS0VbIL33psKUNLbw2O3vNVKVrRcVxNicguXOHXlpeISEvOWiAlE6gSDuJ4nn86PHNr0LyPVSRtNZPoxPB7O6QQ1cslQSOPoTW2ORUYJxp6KCzPi72GnErR54NArW8wpQ2aEQqPaakstbNCprZ%2BP3%2FAK5%2BN43hviNkzBb2%2FwBOSsMszdqtw6Jub51Wzj%2FRA0CEoTK17mAkTXc%2Foapt3TMH9SkpJV6OCmHYhaZsacZ8xDiliCFJgafjpXq8OSLdNnCnS%2FialeKXhBi%2BBYw5es2rqcMeXqC9MJSeong1zPKw0x2Pya7KztMvJZUU3IKgIkfXes0sqSKk0TTDXrDCVIcQ2hK0zuVbKpMfLb6iL4pl8%2BFGEZj8ScTuLXBrd0YRath29uwT5duiYknifbrTZ%2BRx%2FkasHj83VHd37Eng%2FwD%2FAJvh%2BLW7Kb1qwKXLW3uVAaxO53iSf5V4%2FwA%2FzZzzcX0eu8bDjx4z9Wn2WsuPpYt8TdsLRi8iVaT6UAxABHMUzDk5ddGGeSLdm4GaMdbtkONsItnHkf8AkWVnb6CtNqhMuL3RqvnHPiLd%2B7XbhJIR61Rwax5cr9D8Mffo10d8SLdq8CH2rq9vVGdDadMe5%2BK5zm72jowxt%2FxRUGbvE7FUXt5dLdZwyzQmNIIXH9aROdu0zRj8ZvbNUMdzRcZiuLq4euCzayVlSzCnepkDpRw8hrQ5Jp2yDYjjaXw2zZMFTYE8wAI%2FSteKW9dickrYNtkutOpWVBbx9RA6JnkGt0F7YsnOF2Dj60uKSvUSAYMatqkp2XGTRKl4elIALaiDufjmlyVjVOx2xbelIbbKU8wKS1emE3XY%2FTbkApKCtwiAqdpnes7wb0U1YHvWQStKklMDeDxvSMmJj8ZD8QahSlBCSiY3B%2Fs1iyRs24s8UqI7cNIUsjTKuQYjYVglFKWzbDLrQFdYGpzVBnYb7FXv3rB5WNdpDVcgBd2pWpC0gmNyP8u3FczJCNW0bMcW19DP7kSgAtp0AwJ5npWWSTHRzJPY6bw4agXGyCNhI5HP6UuOA0LMpaQRbslhQSpOkyAoc6h8UbhXaEyd7ZIrXDUJSVKbSjcBG3JjvRRigaXslljhqtUrSsExA56VrxxX2FKUWibWFopBQVIOsHSSRxTotr0Y8sqRMrSxJU2oIUEgdO9PhfZznJ0TTD7IaQYGof6prVjXsV8leiZ4fZSrVAmfypqFynZM7K00AQ2pI5iaeLbol1jaqgagdpI%2BaZFq9CJP2Se0blSep6%2B9aIWZySWrOkftUgKkc8mtMb9lS6JBZ2x1FaUEfJozNPoOMW%2BlKFAGeN6OC9inK9hJFtKQRBSQfamlNWqHrdqpO4SUn4qCJRocJtjMKSI%2BTsahR6poJ4QZ7k0cYu7IJqQlcDTCuDtTYpIoxWxydGr3jmmKKaLQ2VZpWSQDPMRUeNeinKjEWgTPoIERE0txoU5MzQwBwhIPU8GihBC22vQ5TbIUgJKAeYM0zggotjxtgyYQACe%2B1W272XKY%2BaYQBMSBsSRRU%2BxbSY6RbyDEEnkmqBaouq5tZ3QB77bGuW4M6tAO5tNcqAj6USjqh0FoBP2o34iPzqmq6CAdzYyCBExA6UviyXQFuLNCgsLTv8UXBh%2FJ%2BgG%2FhwOsTBBoGAyP3GHqkiDzuaXOWwZSSAlxhupSglCpiJmqinZSmgS7hu%2BpYnjgxNHT%2By9MbmyASnYntA60SCMf8NKgCG4japZTkj3%2FAAwH1ABJPY8%2FSoDJoWRYSZEgg8kc0aigWkPGrIpgkyY29qNJdoFD5NmQdo1EzHah2IcmORaaiJMK%2Fn71ai%2FsptvbM12Y9kgcR39qtJlV6EVWsRMpPuKlEowVbKPB42mKG2iCItgVAbQBMcR9Kvk%2FoifoUTbD1SFaon4qrZONexdu3JUnTO5mR0phB4i1gwNld4%2BKhB%2Bm3Gw2JBEk7VC22%2BxdLBBCvwz6fioUOG7bSAoqKTPeoU1Y9ZYUOgnr3qlZnHjbGk6tIJjqP1FFwYSsW8lBBKiFbztV%2FGwlMb3FmpaFAR8HpVNV2Epr2VpmzLT97ZvhKWzKTUdBwy09HIj7XXgjeYthGJv2VkldwUL%2FAHSNRjaP1rLm8fmZ8%2BSa21Z%2BTH7U2QszZdx2%2FTf2N5bIQ4QCpJ3ExzWVeEmuSYvB5PqWmc4cbdU266lSHNUmZnmKtwpXIdL7IU40twSCSgcj%2BJ%2BKevIhWgRpKQ6EmNu1Nhl%2FFsgRtwEqJSpUxEatia5%2BXyX%2FABUaIF23nAkStLnUhR%2FTmk4cqiFGbXQ%2FtkPKc%2F8ANqa7byn4p7yweqG%2FLuydZbxJWE3KXFrbuBGkJdJAKttzvWPMldIdHKmy0LTMLhQCLlwGPwg%2BmkGluwgxmPDEJIxKwXcKjYo9NRL6JT%2Bxu1iOBrUVMEW6lcAqJKTPzvVsJRXdj5GPXdutDyMddbIOzSkQFduOaotza9jp3xTzSxbO26bq2uGlEgg2qSlW0DpM0Sb6ZneZXSZX%2BNZ5z1j4ZtF4ghqzRKW29m0t78kACT80aignORB8SYt7fQby%2FGIXxOpbbYKlKPWVcCih9NCm17Io5ct3DyluWTTDCTpBVPp%2F3rZHCvsCXBeyLYviDDLqlWqVAERG3PcirXjNv8ujPq9Mj1ni1z96UtBUd99onetGTBFqg6Z0P%2BzP4bq8SFsIxK6ThbSDrbLxSpC09f2cgnaetZcvjRjtMXU5OkdCl%2FZzsFYKpVriuDYnbBJCUMsKQEDiVISpcfJ3FaPFyP8AiaceKUXUkc3vtLeF%2BJZeasrn7r5bTLikqU3K0gd%2FYbfrXofFx2J861DlDs11y6RbONSQQYmOK6sYs8rm8ibptgzNWHvPvvvN%2BlPO0fSglF%2BwsPk%2F%2FbIGww%2FbuyXBoG3qMzUhGh052FWcWXb3SFqUlSAP3ep70dGfgbH2Hi9geG5TXhb9ri1u%2B6ptfmWq9HmLT0UoEEJ2G1dLB5CW%2For43LSZtpkz%2FrAfao8JPB3MPgf4NYhl%2FJOAXzsNYo%2BwrEMTwhgo0uMWTz5Ui2Q4ZUotpBJJ3roZf6rzVdAQ8BdS6%2F2%2F%2Bo57ZqxrEMzsKxXGb5%2FEcRfl11x0ypxZMkq95k1wvNqezpeG3B8I9FFurLF6ClZEnmK4XkQijrJNM2U8Es%2BP4LmC3QH1NFRSAuZKVAzt7bV57z8a4cjt%2BDkUnwZ3cwTxNuH8DwzNaFebhLyG7ZxGoSHAmTIHU1y4zTVo73%2F46P2dSPDe%2BscWssNxMOt6m7Vt0ogkNKWgCB8H610MRxs8FGVI8zqXbbIyRl9TDeKuBdilS4JBJ9Rgbzsaqb1ofjnLlbOcWe8mO5ezXbOJLrn7HUtH7wXxqj3rmSg7s6i8mTXQVxPDMWt8vWOCWocXcuPNJQlI1KWsxqSfoaYk3ozwUm2yYuZduLDH8Iw%2B0s0vXT7rdrcIWJKWBClg9%2B1FONBRi3%2BX0b%2B%2BAuK2DGE2WA2gVh2IoxIIatkSmEIXJ9I6RMnvTIOMnTZk8jDL%2BdHW%2FwAFc4sY3mDNGApaWtNl5YcdcHoExsK6mBu6Zl8jxPx5vs6GXtphOJYMjCndLbTyEp1dUmNlfoK7Sdxo89FyjK%2FaKmxbDWnXbK0lRcZK0EBP%2FlI3EnrtWdtI2Y9%2FkyPpsXH1vNWS027kB95CtlJj%2BRAFWmPotTC8Ss7XDsFf0eXbuPFCFfh0Hk7e21C8liUq9lt5cxsWj15aOXCnrQklB0nSlStyB7c02LVdgSXLpFZeNrjacPRilo6hS1FSQhB9RRHCR3JA%2FWmTV%2FxAWN3xPzj%2FAPU%2F%2ByBmr7SuT0518Oc%2BZazPmS1cWi9yzetW7N66QBCbFazrUoAfgH4q6%2F8ATvJxpcZOpGHzvCyJ36PyW4jl3O%2FhbjuJ4M%2FlXGcIxO1dIebvmFIuWFD%2FAPRn8In5%2Ba6%2F9zGL26OHkwt%2Bi0cvZ%2FxS%2Bw0u4pbX9wF%2F%2FbdZK21eykqEEbda1ryItU2Z1hcXshDngbiPjBjj9tkjB8PwXGnAXZLibazPcq1kJb%2FOKDLixvTY2VrpWTbLv2Bb6yuG7jxD8T8v3tqjSpdjgKzdOrPVAdA8sbcnVt71z8mLDjVxds1YPDnPctI3t8Kfs%2B5YbzBh%2BF5es7jK2UluJbZsnbhS1PrAG7q4GpZO%2FECdqweZ5jao7vheJFTq6R30%2ByB9l3MGAXNtj2KWlkxh%2FwD9tDzZWFonvG9cKOCKnd7Ot5OeCXCOztpll04Nl9CMOtmbZhKdKlBsICRHNbkktHJlptNmu%2BdM9KZvH2rXFLjEbgKlTSDoQj2UobfnScs0ui4bdLZp74p538TUqeusGs8AwzA7eFuvXRCyuOYTIrk582rNeOGXkuNJf8mlOYvtMqcfceXjL72I6fLL6gGmG4%2FyoRufmuLk8iXLR38WJqO9s1lxrxtbusS85%2FMNxi%2BIqVAt2yfLbJ7Jq4Zy4wCOGZzxPGHmm%2FNecvFGAn%2FInpPTetuC2wmkkXrg%2BFviyDiglT6kgmJ57T25ru48VKzjZ2nL9BW3w4MvoLqFADgpGx3rXGEqFWmWHaONpQzpRsOZ2PFIqhixhxjVdOSNW52B4%2BlA5otproN29oWU6tIIJiY6e3ah5JdDFj5K2xV1oJQXJSiR7mB1iqVvTC5NEKxRwJWolSAmeRz8xS54l7NOKaIncnzSpfp1DYc8Vly4q7HqUfsj9w0VJc1fijc8xWLJBtaNmPKkqAygEEqDhV7Hp71hnivUjVGS7Q2VbhSUqc1EAneNye%2FxXPy%2BJFmhZtULN2aCr0a4I4I3Mdj9K5%2BXx3EW42%2Bwg3h5WrT6myesxA%2BKSsb9jMWSUewpb2iUeXpSFTtxJFE4Id89bkSOysyFEJCpSNMcSB2NWsdkeaMkSuxw4Et6CpfqlW3NPhGhU8qRLrOx1aVEQOO2%2Fb9KfHGI%2BRsl%2BH4cSpMJBSeCO%2FWtEI0VTZNrGxBUkbaTIMdaalYjJFU2SuzsgCCnZR9qdHEzMvZLbWxI0zMEzvyffanRx%2FYmTJPa2p21AHoog02GNGeciQ2lqVFOpPB9961Y4KhMoW7JDbMAkFWopHMUyqK%2BMktozo0nYJO%2FPIqCMmN2Hre3PUwnnijinYoJNs6tgRI6UwBzp0OksEH1BPvO01aQEpWKhpIg6SrmDHNF8bYJ75CCZKIPWOKvjL7Izw2qB6gqe1NirLlV6ETbAAAEEnk9qbTvRRgLdSJUEEg1En7BlG0ZeUCQmY7zQpW9iZRaZkLcAEAAz1O1MSrogslhM8kd4qwXY7RbDdRG%2FTbaaKLoXOLY7RblII%2FEP505NNCHCQulkgpkhQ42FWBL9l63FqreEye4GwrjM9FHsEv2pKZCNh1IqDJWA7i0IC9QUB1k81KFOTBD9ioH0pnfiqYcZ62BHrQfvJgk7kDpV79B39Al%2BwUQApIIPSaGkS37AlxhsagU%2BntFDKN%2BgZK9gx3DVatXlwZ6CaHgxQKdw0knSExwf%2BKF2goyoZOYdEAhOkb1AvkMBYSZCTHSoA3bPFYeEiC2NjyRVpWVQomwk7N7CeKtQYDmOEWBHKQI3g0yKpFfIO0WaSQPLTPv1okLFUWZSTpRM7bCalEPlWhBIKCgzuKumQRetkgGG9hUpkEjZaQYQIP5iqIIG1IIPPuahDwWrh2OkRvB6VAYyscJtthO4O%2FzUCHgYCSJbjf%2BNWo2QctsqJT%2BzG%2FJ6R70z40U5JDxFqQQTI77ARVOP6A5iqLYAKJSQNietXwROY%2FRbLiQnSBxtNTilsWOm7JU%2BqZPG1B8yIOk2rZIlIKu8RV8ZPaIZm1Sdy2rpU%2BKXZANiFmnylApGk96FLdFpmvPiXlexxOwuw9bMvJUCdhufaqSt0Hj8l3T2cNPtc%2FZZyxmq0xZ44YyEFK1iGxIPb23rJnbhpDf7WGWVdH5iPtI%2FZgeyXiN65h5D9sFkdARyYI%2FpQY89vaDz%2BFLE%2BHo59YlhT%2BHPOMPNFCkmD7fWs3kR3dNGRpoAm2YJJ0Ekx8%2FlR4Vmf8AEOONvoVTatggI0hXc80%2F8v8A%2FQv4J%2FQq4w8AlQ8wxsd%2BKVlxxl0T4J%2FQVw83TcHT5jZ4HQUjJhr%2BJSiSE3KkpCSwgOjYkVnSadhLHboM2F66wkIVuiNk0eSSa0jQ4puwpcYghbf7JC0OGJJMg0pQpjXOwQjEEoeIdYS6AdhPJo2rACKMRceB1GEn91JEjvQyxP0FOVqhrdWjwBeYxQoSd9wdc9iP51pxYE9SMvx0rALt05aaUv3Ote8lR9Sv6U5%2BJH0OjdWwPd4raWxVrlS%2BXAFfoCetKXh7FykqtkHxTMK3lueW2i2QfUEoUe%2Fc1rjhSdoQo3sBh1T5JWlaR32NNoOMNk3yVgSMYxa3YtrK5xV5RGhlthSitU8AJnepZSls7q%2FZDyxjVg3YtW3hn%2Fht7CUrdecQ2hKf8x1hUwOREmsmaTcuKRsxtxjbO0%2BSfCXLmKhLlxlPLmLrbE3F49YJSpGxMhSUtnbokVswYVFJFSk5bRzV%2B2r4KXN%2FZZgs4t7lxbJcZDS0GUjYKVo3A4gK5rueJl3QnNB8Gmfn7dw97AMUubO%2BYcZdbdKD3kGurFpbPH%2BRh4toKY7jNreWQYLGl1PKtIk%2Bxin2krZnxwcSmcdXLgLTflIKRtG6fpWY2YotghkOlRcUSE9Ad5qGqeNpaQ6VdlbZSSsaVbGYk%2FFUzMhFvznnGhqUoHeI4%2BtQZDckia3ja2LEMuOALA%2FDqHMdaTlyNdHVxQivoq%2B5Qty6WZOw2rl5babNCDeXsVewnFrG7TKQlxJUO4ncVycsHJOJqw5HHImjtx4OZracydbYGhbj2FPOM3BbUnUdYE6h9K8%2BoSUmj0b8mTpo7I%2BDedrdzDE4VY4cVrccYQ7PLbaOVHsTNdHDNVTESxt7Zar7NnZtNXF22p1plt65ShSdSnCZI299qk4aoGEjUTMmAv5nzXc5qvLe5t0oRrCFkzpkGSJ57bdKxtWzfhVxoneWsITY4baXt8oP4g487coGifSFemD02FNSZaxflVk68Oco3mac8NZ8xy2TZ2GHLdWwhat3VCNKjHSTVStuzTPLGEHjW7Nq8r4HiVhjl%2Fd2uD4fb5juFBVqrSCq1aJ1EkzsT%2BtNhGXaQlRhxqRvX4F27uV7G7u8eWHcZxO%2BVcPuJVMgH%2BQEfStmGLT2c7ypuTXD0dCsn57ssct7NCk8tLSrXsogGNSfjauxgleji%2BThafInqzh98ym2cLTlwDrC0gAzGx%2FlWjJBVQjHd2yrsWYdwm%2B%2FxxNmt3Wn7moE7OJVtBI4I5rBK4s6EUmgdajEbuxwSxsnE6bd5a%2FWqSpuCCI%2BtBFNippp0Sy%2BzvY5ewHDUMOrLt415aQnltwEDc89aapJLZaTbqisfELxMwhvDWLe4UpYKFoU4G1LKUIPqVCZO5296qOWPJKQawSlpH5p%2FtUfaKsM4faBw5Ph74aXWO5ryjiDN2xiVmspacWoiW0oXp8vaUlemTxBrj%2Bf5i%2BVfGujr%2BL%2FAE6Lg%2FllR1xyp9iLD%2FtoZOazX4%2BeHuXrW9dZDtvZ4asW%2BL4ZKQAoXR2d23IKUg9q9F4WWbSm316OD50oQvHjf%2B%2F%2FANRzt8ev%2BjpmnwrbxS%2FyDiLmZsnLUBbNXDYViDcndTpASlKRxCZUevetHlSb3BGPDNaWR2aY4b9jjxctcxJw13L%2BF4VhLDcPqGkuGBOoMn1KiJrH%2FdzqmboeNjk7XRtDkT7FN85ggZxDxAwhbziypIcbNq%2B23PGlUg%2FIG1DPyG12FPx4RelZvb4KfZY8I8pstP4hhjNziwKVOO3D33lBUOFCeD8VUcj9sbBtKkjfzJGH5QwW0BslYs1bokwEkNCJ4SCYH0o1KnbMM4bsqjxG8cbjBBdW%2BALTizgnS09cKabPzME%2FFDkzv0OxxtHO3M%2Fip425kvL%2FABa9zBl7Llkh0lizbu4adSOqkjcj61x82XJJWb8OJRaZo74tfah8R7bEk4LjmcLPE8HW4hKrXDrXUQRyANXxzNc95pVTZ2YYsdOTNe8ax1nFrxd0LLFGFPhK0%2FeTBA90p2HwKFq0aYqLVIc2WAXWGu%2F4viJt7RgjUgEadQPEAmaJa2MjFdF9%2BGCXcQ865s20qZSdSlncrNdHxLk9nN81KMbZv1kXKl%2Ff2TdxcsoDRiExt3k%2FnXp4SjFUzzbXLYbxbAdNybdlhS3I2EbRWiLvoXJU6Blth16twIcbcLRBKiDEe36UrLBVYyGStE9w%2FDywhHoWVFRII2%2FOsDizVjfIkamB5epQCQCDv1HarjH7LIjjF8EEMNITHsnrQ5H6QSg6sr%2FEXJSAVKEq2Ebq26%2FWlLl7CgmgC9I1La2TO2%2Feo2mrZp1yB7jWlOkhY2kjtWWbXo1LsFOIUFrSFAgyeJEe9ZnjRrxOzFKEFKdKUwRIIHI4%2FKsGSKTHDllgoUQgJ0SeOneltB4%2Bw7aWwV%2BzB0o7%2B%2F8ASsuTxkC5Oww1hjYUCFKbJJOkjcH57Vl%2Ft9i%2Fk9kms7HStsrlaTwOTTl46RatqyX2lhpIHljVPChA%2FwCajxJBf5JZZ2RA9IGoHVPEUx4wJSSJpZWZkEJA52J4ooxfQn5iW2FkQlClAqJ3mtUYCMmR9kvs7MEBQSEkGZB6e9OZmnNkptbXUUhQChtPaiUWxMpWSG2skkhUae0U%2BKBsOMWpISUA6REx0rRD8Q01Qet7YAAgTt33FW3YiUnbQetrcEnSDBPBG1FGS%2BhE5U6D9uyqEAoUT26U0WEmmJiQkiYBHSiVeyml2x590SpOwSkHmIonNehUqvR6bPSkAiAOx5o0CfJtkyZZAEyZqw4zro%2BNqADpQpKZEx0qopizD7o4AZ9MmBO5pjlIs8%2B6rmdadI%2FMGpcgHMyNmUxASf771a5AN2zFFpEEwoc8UwEXSwEmdAA5HSoCpocoY9KSQlSehooxsGUvoXDIGwSAJpsVSMs8jukKpaJOxAPaasDvs2CdY2ICVLV%2FGuOehA79tqMKUUdh%2FtUaLtgl62%2FFCONqhcY2CnrUSopVsPqaotxSBjtkFmYSrtxRJtdEU2ugY9ZSSOB7Gqeyc2wY%2FYpUkg7E7ExSqdg8r6BjlgANMK0z0ppVg13D0QoKRPsKqiuaGRw5IIUUnT2iq4osQVh42SDsPbihcCCRsjO59PFXCNdkaQqizSOoB52FGBKKpmYtQIIJUmY%2FDVpWKFhacaUKPwOtWopltKjL7qtRkoQT0o04rTYp91Z4qzI1auI3TNMjKDGJCf3VsEJUjjk0MoX0xcrEPuSd4KtR3G%2FSi%2BErmxBdkdR1LOnrQuH2i3LR4bQGAYqKKXQCdHos2k6Dp9XcVGm9INTHaLdCldz0moo7%2FJkc2O0WqjIgo60apCx2i2goJ%2BajkqolDhu3AjggzQWQdIYmAAQQKcoqiDhLECQJAHM1TUUQcptlaNhJ43quf0RsV%2B6kiNhxtPSr%2BQW8i9A2%2FsVraWW1AqMgj2qKV%2Bg4ZEtsorOmGXLjTpQCp4AjtI7f70DhvSJDIk9nM%2F7QmFYjaW128i3caG4USCQR7xzWOeNzX5BZ8qVfH%2FI%2FOL9rDDErcxB1oqRqKisDcH6dBWCfh1NtdHQXl5JY1GS2cVfEjB22rt9aQQ4d0knmnrjFGRtdFCvt%2BU4pJM8E%2FwBaKE0%2BmJ2nYm05qlIT6yeTwfirySpbHx8iXsJNal6ZXA5MjissppbHxya2wvZutIUlSjB6mY2%2FuKTHPJ7di3lfbdji51aNKXlJBEyng06OTG%2FWxkMsKB%2F%2BIFlQa8w6oG%2BqrfjRbtFynBhJnEVlBKXVKM8jb6UqXjxXYl5o2IO3T5GtaUQD05o4Ycfp7Gqd9DtjEVIBZbSQ8eO8ntTZLjvsGc%2BOxy64rDEKfuC1cXsApEgpbP8Aq33P6CkTz29CZ%2BRJ%2ByvMUxVdw6VvOLU4d5%2FvatuOar7Fyk32yH3D7zgCULMb7SJ%2FWrGPJS2NG7a4unkoCVqWduJiqK%2BRMn2EZaF9cWlkytKlkjVHU9gZpWTLWl2Lk7OhXgF4D4Y9d2eIu2VywpEFTpAUE%2FSQaySnN%2Bw8c6O2Hg%2FlN7Lr%2BFXb9ljmZcvlCWWmLy%2BVb25PdLyfw9djQY6UjZxk%2Fejqz4f5XtsZwy1fsbtxAbSErw9WLKuUNHtr1K0n6%2FSurCbfRUJcHRSfj34NYgnAsUxIZFStndahYpDpe%2F1bgKVxuYUabHLNPQ%2FHkhPT7Pzu%2Fam%2By1eXpv8APeVbH7qoDVc24SQrVud0xzA%2FhXX8XzOT4s4v9R%2Fo7b5Re%2Fo5q3mFXTa7iyubdTNyjdQUd4G3FdJvWzzuXG46ZVmN2yw4QpC0kemINQf42VQf5KwbbWrzi0tBl0n3HI71TRul50fSDjGVXVJS866lKZ2SNtIq7OZkyOUrQds8OtsPhaG2lrE6VxJJ%2BtVYaw5ZLSI5jVy6rzQFhRJI36isueN7sH43D%2BSIUi2U6UKOpC5Ik1iejt%2BLK4pCi2y28lolSYIkpEyPasmVx6RoT%2FZ1A%2Bzlm22%2FwzL9m5fLU8hADiYEJHAjrtXGz4FbkdfxszcaOyn2ZMw2N%2FfPYLdL%2B7tuPa3HSuFLAkxM1hh2dN8mbHPZ7axPGvIU6GVwtvy1bFpCJ5%2FIVJ%2BQvYXw%2B%2FRSuG4re5sxZ9m2U3cq%2B%2BIt3koMBCEGVbjmkc4t2jZHHxdWbPYFgFo7iVph1%2Bn9kppShtGkFJjb5rTDK%2Bh8sUXTZauA4MjCrJqzVhrt%2B0%2BsJSWzpSptJBiem%2B80yOZ30VLH%2FwBJsrkvCLdeLOYs5auOrcSVFS1EqWZ9%2BAABWyP5GfImv5M2Ow7L%2Bbr68YvcMy08LNCAhP7QBITyTHWZrRDC29GRzxK1KT%2F7G%2B3hLlK9zNbfe3WsPafZY8hbSESEDiPY7V1fFS6o4PmNQf4t0y1HstY1hrJS3hdo25slKlvhBSAPgyfat8opOqsy4pxemyO3mBX2INhN7bO2q1rBeSRs6eih0H5Vzs8DZjf0yucYsrjB7iwFsyW1IU8grCY9J2IJ71j4tIeo1s1V8Sc4oy6vLqFP31zaMX4CiPxJQ4oRPxB%2BBWPPm4tKzZ4%2BCUra6NF%2FHH7SOGYQnMeGP4rdXWKoQ7bs2VjcpQp5cn0FelWgQdyATzWOfmJSdHSw%2BFr9nC%2B6wZOJeODTqsLOVkl374ljCsdcSWjP4lvqQFLcJ6kGPaszldsGNrIoyP1ffZDzZeWWXcvvrx26XaKaQmAlm5bKwBsXUwpRjknrXW8PyrXE5f8AUcLjLo6k4Vf4DmDD0t3xdcW4n1eYiUq%2BAZrrYs%2BtnDyY%2FvZS2d%2FArImKOXF7aYLZ%2BfBP7NhKFfIVG3xRckXDJo1izn9nLCMbZUhtOI4fdBOlDv3ZGpo9NxvScihJVJDFJ9plP2nh7jHh2EW7t9YY7aoOkuPQhwfQCktJP8TXCVdkB8SMSbuLJ%2FD8Oztb4K64hQLLErLhjhRB2ApeTJS7Cji5ujm1nm9ThWLOHFswovLpCS22pi2cKUxyVLUoDV8%2FrXIzeRTd2dGHiRx9lB4vnt68Qq3GSb3GrBCFpL7zIaWT3BTsBz13rJ%2FcqWkjXjxxWzTPHGje5xt3cHwxvCFFySkO%2BYUmd5%2FoKF6HxxK7Q%2BzDiqsuuM3%2BYMVtDeEk21ukhTiiOyORz1ooz%2BjSs3FDDJGC558YsxtOLu3LXD21pT5er1KRPU9NqZBtyOXl8i9t0dc%2FBPwXXbpsUXiW0WCAkKQmdMz17mvReLgSRgyz5R0dEcLyva2OGJbtmGyAj8QH4RH61snXsxcaIt%2F2606%2BtXll0neVe1OhNpaFSx27sZP5ZYaBWUoCum3NRzb7ZfxkbvLNVrrBQEpG5MgUpyY2F%2BmRx67Ci4nUrQffmqUx8k16IXiRQVqgrCuQY5oG7JGbuiIXTrRCiSqY1EqH4QDQt0PXJ%2BgMVtlegkgECdqRKXo0xar9jO6KEBWpQSf3Z6UiTS7BWWuwapK1KClBIH7u36%2B1JVv2acefWhRCfUAB6oJ5%2FvfrScmE0xz%2FAGFW2QogAEiQFT19x3pE8LXQ5T%2Bg3atpUpKYUJ5Mb0ri%2BgrJJb253WrUfYwSfrVrEn2DxRKLKzCA2rSBtPxVTxIuvRMsPti55aid0q22ifmlfGgW6JjZ2p9KFalDjmijH0Y5X7JjY2xSPUkhfeegpjx1pC%2BVMl2H2qdadX4pmDvRQTTAlIldpboEJ2CT7U%2BCM8nslVnbJIBWAT0k%2FrFOUG%2BgQ9b24VJAITPJ2pyhQucX6DDNsJB236iruypvdIMW9sQtII27xzUA7D9uwCUpTANHGvYpwDTbSfSBtxt1imgBVpvSAhMrHJ9qNQsTP%2BTHaWVESsn6cH2oowRIwvYuLcDUT6u3tVt10FxSe2YeU3pJ0pBntRJJ9gyl9Gf3UqSSkyB1JFaAEe%2FdiJHIB2g8GoC4sTDExBUe21QW4tHoYMt87jr1qAs8UymeBt3qFNaMksQOpSOaOCtiXr%2BRmhnVwFRHTrTUhk5KPYqllOoTuevSN%2F8AepYiePViwbnrPx2qCjYdbUp2kDmuOegGDjKtROnUmdz70aVkBrtnqUZATPXvVSjRaYMcs5KvRI7mhKoHu2u6joSAO45qEBrloT%2B4Pzok29EGTtnCyI5EzHFX8ZSVA9y0kLGkd44illOVOmMXcPQoKkA%2B9WU3F9jNVh6eEpPx71AuV9bGSrFQUohIgcbVCXL6ERaDeUjYbmNh81FFsHk6ZibUmVeXKe1GouwHJ9GaLQn8LSRPMii4fYIqbZ0RAJHt0%2FOrjj2Q8QwUyAAB1FP4JaYEl7PjaHgpgc%2FFVUQObMVWICYWge1XUSObEjakSCmBHzQfGwRu5ZyYUkKHHMVFBhKVCP8AhyxGkgGrcWEsiMk2KtwY1cgdIquDI8n0PGrFKdwnUo7ielWopdgOVjxNoTwmCegqXEocC0WJ2JHBgUS6%2FEpscJs1BQnTA96iUvZE0LotBJgASIMCrcWWLotikRoSR2NVKFg8kOEsqn0%2Bo9oqmorsFzFfJUdgCR125quf0VyXsbvNCFajKY3PQUXLVhKvRBMwWuHvoUlwNzBEnmh5sYkapeKHh5h2O4deNEIea0mBEmPio5p9gPxvy72fnQ%2B219lnEkIxTEsARcFuFKUkj52EfH60uXi8twGZPOy4%2FwAJK0fmw8Y8pYzguJXNteWlzbrQpQIMkCOd65eXBupFQ8rHPvs1OxG3JV6yoK6zQSwqtKjTxhLvQKSgplRCVAcCetB8Nqm2LlCPpjn7wlqAnYxyD07UD8anoXONCXmkOahK07nc78itThJKgWZqvynzEpc0kiINIfiN7sNJUNy55ohSAFdSOvvQVkhoBs90uoQXEuAHkQY%2BtXDIupbJZmjEHWY1LDiTzKuDWlRtXFBxyNaQ7N8hwSLU%2BZwFoUQR%2FI0t4sjf5V%2FsW5OXYOXD%2Bptlx1a5khY2I%2FOtEIpCmvoZos1tlJdbbcZn1J0mR8VUYXK7Ld%2Bg7h2VsLxEBxm5dSCCooW2oKPxGxq3y%2FwPim%2FZamU%2FCzMOark4dlzBAtSUBbjp9KG0Hq4tXE%2F8TWLyJyTqwn47atM2z8M%2FA7K1nmCxtMXtXnnWwkOXSBDQI5UlJTJAP1PasPNDsPi3s6yZA8G8uXmFNnK%2BfbnF2tHlqZbsvu%2BkkclLuhXTnSR70aX7Llh4%2FwAi78t5A8YcMStNleXqcuNkIQ4MSZKGZI5HrCd%2FYHsac8cm7RpxOEVTRsdkK9zfgqgvHMAwy%2BAKl%2FebZbzrp3EFQQBJmTPtTYp9jpfG1pmzmUTljOzKvv2Glp4T5rl1b3IW2D1JWRA%2FQVuxpNX9GDMpQaplbeNn2bsKxDAze5bvMGfuHHwst27jZIOngsAkSfc%2Fyp3j0pbegYZJP8ZHGHxk%2Bw9g2a14pjuFXT%2BXs4W5OvDzahKn5OxMfh45PcV6bA4cd9HK8vxlki67OTHib4KeIHh7fvJxTLD74CjKi0VCRMiY7Vc7XSs4U8DizX28ceVdONPYRdMXCUyU6DApcfLkvxqgvjl0kO7GxcdCC%2BhTTfIK1BG3tO5%2BgNXzs1YfGyQfK6PMQsWH3EMYc7eXQJ3UU6UoPWOpHvAoIZYxe3ZqxSl1J%2F8AAljuXMHw4J%2B6qvcZdcaTK3rcsoQvaQhGolUcSSJ5gVm8jy1Ho2wjapoh7%2BCXTrRe%2B7rS1qhKQIST7T81x8mZt2EsH0Jow02rLzK7YKUv94J3B6ie29JVs0xwJ9l6%2BEWL32A41h7luq3YZbXqUXiAmdtjq%2Bay%2BTCVUjd42JJnXzw08VENWIYu27PBL91pLrF22SpK1BUhJ4EHiRXLS2dtcVGic3%2FicrQcQWpVriiMRWm4GrVraVAlJO8c%2FmaRlutGvDFtJWXf4B3iWihdstAsri%2BcuFr07oQdyqex4pOF26aOhPBzTb9G%2FeWw3cY%2Fj1yy7b3l3bWiXUuA6iyCOg77c1vxxdnPnyiro2Cy1gir%2FCk3K3LdhQSG2kKISoJ5n5JrdHHS2KWRt0i%2B8lI%2B6NoaftMJecRCktuuBalgdugNWs%2FHoqeBy9m1%2FhtiS37915zDlWoSISr8SSqOCOlOj5XLpGLyPFVdm93hFiDdulRRbJtX3FeqB6XexFdbxJSfZwfL8fj3s2JxHK4xJLV22iVKRqUU7afeui8cmznRyqPZXN5lwYUbi5uUKuAneUDeCdgY5pMotPZqhNS6ZWGYrNm7VcsNtW7fLiPMSB5ZOxrDmNmGLXeznj9pHKLOWsEvMbtGfv1244thsxtJ2ExERPNcPzIO7O9%2FTpvlXo%2FJp9sPPuYsh5jxVi3ct3Mb%2B%2BeU4%2B2rqQSVAjkj69KwvG%2F5s6fmeTSqJqX4eeJbeMZww%2FFMf%2B%2BlSDCn799bjK1CN1SAfeP0q4R5aOXiyPlybP0efYX8VsDsFYfh2H3XlAgDy%2FvxuEvyR60gzp52BpkMLg7iMzZ451b7R39ylmd26tLRfn3bDKkBXnNqQFD5H1rrYs7o89kxpPZOcVzxfYVbKbs8Xw%2FEDAj7w%2BGynr0G%2FwBaOXkOMbsB%2BPb0au%2BJXivmVNm8lvH8CwhKPWtSJdVsfnissvOdWaI%2BBJmiOYvGfNGMYw7hmDeKvh7eISublLdmpZbHEAhQE%2B5PPNc6fnybqzUvCXtmvObMFzxjpvWbzMeG4uhxwqFuwtRU6gjoEJVHeN6U8zl27OjhhGKuiuGfD3PliBa3mVcJtsP8%2BWnX1%2Ba5EcJSrZA3mYp0U6I5qSKj8TsIwyyN4jFM14Rb%2BQn%2FAOS01cBZG240jcHsAKjSDWTitnNnOGcMVxTEbtvw6trtm3aWplp5LPlqcJ6id4pclvQuck9oxyr4d4hhYOac0l7F8YdMQ%2BdUHsPzptNK2BHHe2dCfs%2F5TwrD7f8Ax%2FHrcWQfEhCTulMgiAN63%2BFBLbMfkb0tHSbwvWMVuE3CHBaYcCEsNEQpQ5mK62KftGV4Wl3ZtaMUwq0w5NmwtLjhHq0nYH3nitCXsTJvojTd1b3D3kshg7xM887g1TTb0CKXOG62VKhJTxH99aNKXshWeO2oaDiVlCdoCRtJqpKy4yknplY4m62y24ljTJTAI60qSp0MWW%2BytMRunC44kmY2JSeeNj%2BdDezXGOrojN4%2BCspKkjaDHHNLm0x6QxD2pZBKSpMQZ4NAWMru5A1pWNSANyTxv0pU8aYGSNoGrukrWRAUOABx%2BVLjiaHYcdIJM6igiSlR333oJIfG7uOw9bK0lEmZiQDJO8UHFjP7md1RJbJj1BQASvhW8E9qR8TuximyUW7ULSQDJP1Bii%2BNlubJJYtSQlMJ2GqQT9aGeJ0Bknom9i0SNYnciN4BrPKKXbBlKkS%2BxtyFbCVdZ61eNXszy6JlYMEaRtJ5PYf2aaJJfZtcJAGrqRtIooxsCbJNZtAKSQJjptvTUqQoldqzqUCEpSD32rRjdIhILVj0CQnUNzzVlypBm3ZChCkifmoIk7YYZaVI9MD%2FAEn896tOhc02tBthpMJSkgfXmnIS0wyy0JkSD7f3xVkCLbIO%2BojaKdDoFwTY7S2ESQnrAjvVuwG%2BPQqhnWVSSPmjUGwJSb2zM2pCxp0qRHWieIBS%2FQ58gRAAjrApgH5GaWQRp0iesdKKLXsF%2Fs%2BDMAJiRP1pjhGtEZ55MyACCOYoMkOJD5LOgg6U0EU2Qx8lAJ2gzvRqMkVSZ55BkwIAA700DJFNUepbn0piJPHSoIy5E9HyWydXAA7dagCg30bFKQkiCIjtXKpPo79CDrAk8kR1E1XBlA9xlIB2gT1prVkGTrCVA6YjvSnjI2DnGkmD079PpV8AecRmq1JE6Y2oeVMimhiqy0ys6lL9%2BKbGVhjBdqQqBJMbzUcUIcGuxk7apMgoKCOoquCBGarWNQlJVPXgVfBEjJJUM12x17tKUr24qvjQUZ0hD7q2IHlkA%2FxoZQ%2BiSm32Zm1ATqUkDtqPNUoNgngZJmUjnodqJ4l9lWeG1STKkAyJpvwqgW36Pk2rPKQSJ224oo400AosyLCfV6FEHbrV%2FEiNNHirdKdIKTPT3qfGgXIbLtm5ICEg%2FwAKHgyuSG6rMQqNvrUUmtFmX3IyDO3vTk9EoUTaJB6GoQci0QP3QPc81VAuSHCLZIQAJI%2FvipSBlkHCLZJ20781dC2xdFpBIUPpFGoNguSWmK%2FcyoyJ08GRVOLROaM%2FukbkCf4UIQui1KAJTVNWXR6bckEFOk9v9qvgBaBGJWivKVoKkmKqUXVIvkigs83GI2Dbi2xukTI%2FpSXhb7GRl9mkmevG1GBPPN37v3YEmVkQk%2FNRR0Oj5aT2aY%2BKvi9lPM1o6h%2B5sHgpGlICwQonuKW5%2FRp%2BZT6OJf2pck5UxEX%2BIW9jZPFxJCiACoH6cVjyeWk9mx%2F03BKH0ziD4h5GsE3l25ZNoZUkEQBE78RQvIns5L8N433o1vxHDXbJw6wSPbiaid9FcdjFol1OhakAxsOI%2FrWLLklFvbCpPs%2BdaSmSlQUkbbjj2qvmyVysY8aatDRahIB59%2BK0RhOStiX2NkuLaClaHHBwDyDTJ44V%2BRZ6bwFIlKmzEHYxRQwQSuIjJPInpCaUOSAh1xYVyQJBp%2FJUMhJvsN4W1d27gdtXWtttKgCD9Kzy8mC7GX9EvtsOduyXnrRTDqgf3hoV8GgklNfQaiqDVngL3mBdqgP7bjUCUK%2BO1Iebh%2BL2HCSXZZuXsu5ZU4hrM6brD4SSF2rZUtRjYQDtP%2BY8UH986oZDFy2y4rXFSba1wnLn3rCcLZhxKXWvOMdSVAgT1kg9qyynydsao0bd%2BGVrgwZYv82fc7W3cZCGntBtxcnoSkStZM%2FuiKz5JLs6uHUejeXI2Z8x5VDDGWsesbvCliFtsv6i0meCy4FKO3AgdqOM6CThLtF1ZWy%2FmS6x6%2BxTDfFbKdw08jzXMKQkWV20Z%2FeCHSuB%2FpT%2BVaYRv2W8rquJsrlTN%2BTMrttWuZ895VwxrTqfUcbfefUsTJTKD%2BUztWvHkUdSZz8mCcn%2BMbLhRnDKPiCwl7L3i3lVeHtDZd7a2qy6mNoS8pKwPkSaY2pbi0SOJruDLHyde4xZhV80vJOYwoaG3WU%2FdnFp44QlaI%2BFCafiaivyQjLBN1VFY588OLLNGK3V3eheX5CglzWs%2FelKIJSGmkyqI%2FeNPxeS4u4sB4oJa2avZ58JjiwXl2%2FwPCcz2hYV5iBhylPNnhIKh%2BA7zpmSea34f6iYsngxT5HM7xW%2Byfgts7iS2%2FDDFsrBLqmmxdkquLhQiXCmAIHsI3imZfK%2BRVEKONvo1Ud%2By424G3rLL2Ku3KlqgqtVgrA7SP0rC5S9mmPjL2QjF%2FBa%2BwOxvLtnKN4nyyEp1oPpVMARO%2FSglka7ZcsEUiG4T4C5lxx22vsx4ZieDWZc8tKXmikqPPpQd%2BI3rn586QEMYningdc4e86jynnsNRqDZKCE6pjnqZ27bGsM%2FLl6Zsx%2BLe0kVRnHw6ucsWiLy6tre3Kjsgk%2BYB3IPE1F5bb7DyYWl0Ul%2FiNlY4mw8u3Lnq9KCdWke5rTPM3Gl2Kg30bNWWcsTfwbD0M4rcvWrTfpt1KBDQjfTtt8Vz8lR3Vj8E23Ui6cmeIxzFhLWEYw%2BtrFULDeojZ1I%2FDP99Kzyd6R2vFkujor9ni7x7DctuIe1PJW7LaVpkmOAOtJlNxdI7vjQ4xbkdDfB1jF7i8xbFX7yysheFQVrVMICdoA35rTgnX5N0Xk4OKTVm42RMBx27w5F5c45heYsQUoltLqtBQgH8KEde01p%2BV1VmCeTHF%2FxZsblxOI271jhl3asNqUQUzb7j21daCEnyVgNxmnKJut4aZbt3XWXHmbhplZ0rE7A%2Bx%2Bleh8Xxk%2Bzg%2BXmro3EyphyLP7utakraSdA22A966GPxlE40ptmyuXr4BpFqpfmBSZTJ6fFdHGqWzBlhrQnieFsXCbkpSopUQQCdjFDPHF%2BgYO%2Bigc7YBd2Fwp9i3ZU0oTqSkkj2%2BnauX5OKkdbxsn2a7%2BJmRxjeU0qvkIfuFqKSlbYkatpA6c1zZQtbN%2FzpSuJ%2BSD%2FqTfZ5t8Dzjj2araxeh29FrbonUhJCQNfYSBEVx8r3xOxkfPFGSOPo8OM0YbjCLm5wLHLi4t3fLtLFhlTiXV6Z2RxpSIUSaZgjTujlyyu6R0K%2BzB4kIyKq2w69w%2FEsQunFB6%2BvlDyWLBA4Sl1I2kwCRydhMVuyYZNWtCIZ2nfo78fZ18X7XNGFW9ji2G3uKWylarVTa1IU0kdFkOb%2B0gH2rL%2Fbyhtj3l5G2ubbq5Vb21zgllZ4OZT5q37ZVypxMdklIB6eqaOUXL0Uor2asZi8O8y5pxTEMQvcfuWcOICklm8NvBPQQPSPaTWWXhyfTo6GPOoxpIjmG%2BCV9lUjEsSxLDsqYYtK1LV6rtxc%2Fv6ypIMjpFBLw4Y3ti15fJ%2Fkgcvx28PMmtKwXIdli2ZcQTC375NsyEKIO5U8tekDsBNThBfwGwi5rka%2B%2BLXjN4o4u1dt2F3gGWsJW35jz5ly5cQRulCth2%2FCNqpWOwRo0j%2FwAAfz1ZYg5lvJxbbacUt%2FE7tAQbtz%2FMZ9R%2Bdh7U2OK9orNKF%2FkV%2FhXhrh%2BUrt%2B%2Fx7FbbEsUcSXFMsKCG2%2B45B%2FIUfBI502%2FSDIdwYpZxR02y2knS2iTp1THpn8RopdWy4OT0zYvwsGK5rFq0hpNlYatDaEJ9b2%2F4iR09qfjaZNJbN%2F8HtLXJuD27bt4W3tPrJ%2FF2gRxWuOTiqRhWSUn%2BK0QTFPFkW9yjBsNu0pddcCdk6lATyfetMct9jXKK1JbL%2ByM7cos2rzE1IU4UpIDhgpHetcEZck1J%2FRNMXzUhprQ0RIHJ%2FpRiyocYxQPqWsugmR9DUIk2VFjWLIQpwgwkE9zIisc5Ux6hfRAbnEJKilJCTuSRJP0pc8mtmiE30Dl3P4BJKQkyD2pTimOdPsaOLASlWnQIn4P1pllPJFAi6WrStesHcp9J5qALPbqhoy55jgMhaDsY%2Fdih510h6yJEmtVFCwgqVqPtv7UWSS7YxZKJNaR5iFBJIO8lMbf80gPHkbZMbBMAqWhJVwQOQTzSuK9mjkiU2yQsoVELidzVwSexeRkjsmVBSFEQOP7npRSSuwCX2LZT5YHqA2G%2B%2F8AvWecU90KnFE3w9knSBq1e%2FJqcYr0BZNrJABB9SiRx70FRfQLbJPatghsCZo1GhTbZLrFoEJ9Jng7URRKLRHA3C9z7CmtfjRA7bNyAVSQdz1ooqkJlFrbDrKEqOkDfrt7UTIsd7C7SCdiJHMxzUSsr462E2mlqKCEiJ69K0RdWLckGkNoEEDcbCgjKxT6CTKeARqEbjimctUA9LY%2BDaFDdMDuJqRv0Z5ukKogbJCifmtMHKrKgmLoTqkkQeg%2Fs0zlIMWQ2CQTt%2FfWrLFktpVyCrmqsCUV2LBhMgFSuOgp8XoUfFhMbnfn61dEE1W8kekz0Mx9KuhOSbRgW91Qmfkc1BazswLMEnc%2FG81CpZE0eFtPBAFQUYeUABAVB3gVBkMjWjYZbJ07fiJ561x02jrSg12NShwaiVQOd9q0AqTEFbA6oBjbTUDU372NChPqgHeoXzGi2kq%2FEkk71RVx%2BhmbdBgo1I3gwDUI1EbKZMyN42k7VL9CxL7soknSfyFC0%2FRdDdy1bURACe%2B3NDxkQaOWYB2JUY4PSjjbYPFDBdl6gobbxvzFE0ENlWGohISNQP0o8ZBJVmJASBtye9G46IYG12JASSOvagWNkMk26jso6jyTRqNFM9%2B6oSZAE8CaITyZ8WBIO367VCm2JKtwRBBMb96gNMSNrIMwD7VCuCMDazOoiKql2EkZJtCBuCrnYUSi30RujL7qAORt7VfBguX0Li1kmAkjapwYti7dqSoaQCe9WsbBk6VjpFmojSQD7mi%2BNC%2FkY6RaCAmAoDrRoBu3Y4TZEBRKR89aha7M02SZjQBI9Uig4IeLptRAEJT7USikJm3dC%2F3SQNp2orBGV3hupKtISe1Syf5KlzllpN1avJWlAJB3jmqsZ8hy%2B%2B0X4WC5w%2FEnRbNklJO6YidtjQZYKcdIix3vR%2BbP7SjebfD%2FABK%2BFq7f26ElaknlP07GvOeV4s039GqCpHMTO%2FjtmRS37K9dedBkKOokn9a5jZojH2mak5pzc1iVyp1Q0Ejnc%2FnNFLJKhvK4u3sqTEX2bgiFJbUBuqefrWzHNuNBNx4kSubdCHNlpE7mI%2BBRLDfbBjgTVoScCilI2JAG54V%2FSs0kk9yFLA%2FsZAJ1GUyqSJ%2FOmf3L6TFOLXYqlhSgHChAAEQI3FEuE%2FYSivsRNsXPVpBHYnmo8Li9MZHC6sxFslAhSCmD2iD809ym9CnBj5hZQjYkImArqKXHxUttj8eNabJNYYk6plLbjqXt9J2E0Tg%2BompxhPaZK8NxNFr5ZBJMbqnr8Vkyxd1WxMsCsnuCZxtGLpp69ZTcsIUFFABQHB%2FlUOo9%2BazfDLtobFqOkXvZ5uyYlLGIZNwnC8LxzTrcSt1YcaPTSpR0nvA3pLg27NUckYrXYEUrO2L3CMaxe%2FuQlSpbUm1KVKTHHmTCvneKsPjOStMubJ%2BbcwZUT56mrk25XBRd3KUI8wjY7QYjqfzpc8g7FDj2zYvJH2t8u4fi1kzmXBMpYS8yPJVdWeIKbQgz%2BJRQCtXX8KifY0WPLZqcuXs3py54vM5wwa4cy%2FnzDTZPaTOItuv2xT08t6%2BYbUO8QQOhrbCbS7%2F5M88kV%2FJByyxvPOTwXV2%2BQsMWtpTi8QsMStnVrA41IIGmegAg96vl%2FgW%2FKfUb%2FwDks3Kn2pckst2aM2%2BKWWLbEUSi5tzjDLV2uBsAQdj%2FAKREU%2F5FVWJfKTtr%2FgsjBfHPHMxXP3vJ2X8bxPLgQpaLqzvB6k9At5wq%2FNKZNAszb0rG8MdfTLDy94g4jmRC75Vpi2G3zTag264%2BtTNkd%2FWVJbA1f6iSaZ8km%2FoTLDAiWO5cwbGLhjE8yLx3HMZKPMS45cOH7y2IO5WSoN8HgA%2B9NeZr2SOD%2FpK7ZwOxxzMAt28AcxPE2EAWanVH7theobuG3Qd520he5mTFK%2FuZPS2G%2FHa2yPO%2BEFhhmPXDuOWLLoQ7rLYd1LuXT3j0oAMSAJHFA8k%2FaI%2FHi9osHCfAqyxlTeE32BW7lytJu7u8IH%2FxWTEDXEqcV%2BFKAYG5M0UIt9oVkwRS0yvvEfwAyfhqcSxgYcbZDTYQ1rI8plPCdUwZ23PvWbyKXaG%2BJ47l0zhD9rPJN1hDrruGO3GPNuqUrz2gNE9kAH8IiJ4MVixJt2bPNahDemczrvCr9eIKQtDqCkT6gRBrq48TS5dnAnJ6cWWVlXEl4fcsYdfh1gKEJUpW8nuOopuXA5rqjRDLyVLs2d8N8qC8zfYfdr5D63UFbQRGl2AdoPWZFcrLjcY7Oh4U%2FwD3FbOzHgWbrD8v2aby2Djyi4C1AJQAOZ%2FKuTLJL%2BT6Pa2pxVaNkcHzxbYS%2FY2K7du1t1qAelsq9BO8kdOtLeZPTNeLwZcbtHQfwutcMvbVi6bxNLKgoLbc0nUkdxPSK6niYoT2mcvzJPHo3wyfZYRiDVgLltL9wkApdKRIIPOoV6LB46dWedy3Ftm2uWLq0bt27ZtxMphSY2Art43x0jj548nbL9y2269beWF7lIVq1cma1wv0ZpcVposjL11fNPsh1RKkGAZmR2NXGLTFyUX0WU3eLu3G9UpQdlJ6%2FNGZnBXoFYjh1jiK3bZ5Os%2FhSSBt80mcI1RcG1tFWY9kl8m6b0o%2B7pEpC0D1bcViy%2BG%2Fs0RzpaONv2vPAfB%2FER3HrS1wlGLXj100ryi3KWCkafNBPCQCdu9cvL%2FTl%2FI7%2Fi%2BSlD8ujj94p%2FZItcW8SbtnCLrG8Ly2ygIxK9tSkOfd9PrZt0lQJdXB1OGUoA68Vm%2BJRdroPLjTg2n30URmf7M9xnbMbN54fWWP5by%2FaIAw6wRfpPnJjSlZb8oqBO5Lri9SuUoSBNaVN9Iy4vHeOP5ezavwb8FvHDBL3CMJy%2Fi1y7ZW6y463cPB9m2UQPSp9wdeSkaj2imKDauwZyikdUskZYz%2FAIdbtt41f4deAkKcbtVL8sRzKtQRM9EmlN2IjN9h7M2CZkumrduzzccKU4ony0WwQ%2B0oAQAslYQPkUE42aIy1sqnEfBjHMyXzOIYwvBfEIsDzHkYriX4COIQgoSsiSd6W%2FGcu2V83B00MMbt8PyjhK14lkDIKbjSQyWk6FAb%2FhklIHuZNDk8d1UUHjyq66NPw9mDOWNu2Fr4V4HieKFzSXbVakshIO3mEEqVHYwO1Z4YZXSOmpxSu7LOzZly%2BytlZGErwOwfx25SYw%2FD8JTpSn%2FWtWwj%2FMo1uhF1swvyouf5I5%2F%2BKbd7hFxZ2WF5Nw3EceUr0qkLaaUeNRGyiOwkUueGb6RWXPzdwRVeDeEeP3uPW%2BLeIeItO3pOpDGrdsTsltCdgOmwA70uPiSu5MHDObdM6FZUxTJ3hVgdtc4k5Y4atxEtMpAU%2Bsd4HT2p9RjsPK4y7Gi854rn6%2FKMDwa9YtDslx9XqWOQqBskfNA5ubqKCjkqPGKokeWsjWmW7teKYk4m%2FwAaUokFQBCesT0FdDFhaVSZjyuK2%2By1bfFsTu1DVJbEDmY%2BK6EIMwTyRT0Fni%2Bq3C7hawRJKQdjRygl7CjvogmLX60pDUyI2g7f80iUkPhhXbZUuO3sLc9YUr36f0rHNq9GuLitJkIXiDilJmAkfh09%2B4oGvsYpRs%2B%2B%2FOrBBhQO4iATUUUgqQoq6iFndXRM7k%2Fz%2FwBqtoW8KfbAd5fqUFNEATvI2j5qqBjDi9GVk%2F5i0JAUIgAz%2FSpK%2FQybfaRMre5VpQiAlG8nmfr9KWsfskYfZJrAqKwsEpCQJ9REfIp6wpxsY4KrJthm%2B4MJjbjmf1pM4IEmVrvpSQCQOnalpUMhJIlWHAkBAEGdt%2Baqd1okp%2FRMMPa1KC9jG89qXzfsBuyaYY3u2YgDb5%2FOgKJth6QCNW87xUjiBlLRLbNHqT0%2BlPUKMryfRJrVMFIJjgemror5GSm1Chp41Ht0qwlyfYdtx6gBO4ncVCZekGbeAQkEjrUE0guyZCU7p9qOHZdBW1ggRt7E02xD7CraQooGogDcJO9WmUEGIBE7fSpLsDIPURpkkz7DipF70IbQ6QZ6DY8960wbuhlqhYqCxACCOx2pwI6REAEj44qFSdIcAAwOR79%2Fc1VbFObYslGwng8QdqfCNAiyUBUz%2BtEKlF3owU1pEad6gqeRqWzAs77gaeagco8ltiakHVtpI6xyKgiWNR6EVIEEplRneBzUBElJOqTB6b71CGxOlTg9KdJ99oFcr4ztTduxBaCoAKQQRwd6OMaBGzjGoTpXqohcVQ0VbL1FKUqEd6gyhFTJO50EUShZTY3UySTISd9pHt2q3jZYkq2k7pKge%2F8AfxU%2BNkEvu6j%2BLWD7cVPjZE6PCxM6kgJHG%2FP0piWinkrsRXa77J53qyWhs5ad0CB33%2BtSyxsu1RMKQD9KpxT7IMnLGOFad99pFVxS6Ac0mJOWwAOgQr%2BFTZOaEBbGJhII2PtQ8mKYp92CkiQqRG3U0UW%2FZBNTEEggAydX%2FNEW1qxBNuFQJSO0moUYi20gkJJnrTfjRDJFoVEp2PQ70LxgT6FfuvrJ2KfajgqMs3ZkbNIkg7c8zRC2hZFqkHUBIqBKTXQ5TbCQQlP51AnkvTHabVIMQJ9%2B1QCl6HCLZO3oCahB0i1BiEgK7TvUILJtBo3SnVO%2B%2FFQqhZNqnaEnntULM02v%2Bkx8%2FrUIZG1B2KCTzvvNQgCxLBG7pK0qRuf73qENZfErwzZxC3uAppKkmfxCfrRKLZceX%2Bk4bfbE%2By4xj1hiF0m0Uh1KSoBIB3jr7%2FFZ8%2BBPtFyi632flk%2B0X4G3OXsdvkJt1IUFqOydO4rkeT4sYPo34m1Gmc7M15XurB506XCkSeOa52PJHpRNMJbplXXbaiDvsBumYmnY2%2FSo1qVewQ5stCdJaBMwNpFVkyJ6RFS2eOvIWl0bq3%2FKsPDi9mf5ECXXEpSob6iNtpq3TZlySuVidtdq80hIUUkyd4n2re%2FEjxtMAmOFO2twfLdtkBfEg9P760K3C2a8UnWiTvYKltkrQULQRtBn86zY86bpoOMm9SI4%2FhiPNWpsICh24J%2BK2Ti5rUtFZMTdA5y20FW4S4ZCVAbSKyrKoMRcY9IwQu7ZSClBUlEgqB%2FUVsWRNWOx5H9WHcNdt3nm21MP%2BaYnqfcis2Rziu7NDTst%2FA3Upb%2B7s2irpBJUVad0EddYHPxXLbbY%2FhBaTLIwjOWL5Ofw67s8zYi1aIMi0NwH2z3Bb3M%2FlRQbsL5FHrZNE%2BPmVF3aL3MOWcuYjcfgKL22ISox1Qkgj5Jq3FMn9yAkeJ1nid09cs5Oy9huG6ypq4aZ0Ntp7BW5gdpNZsmLdpDVniWfkfMP%2Fc1%2BrEWcSZw%2FDGkhLiW8T%2B6ByOiSsz%2Bk0XOS70NjO%2Bi%2BbDPeX8FbZu8T8QG8NBbCVC0xI3q9IP4Any1KUr5NWsv2w42%2FRdeWM34bmC8ZXkfD2c04mhSS2rFTa2pX1lxLm3O07U%2BE41oVPHem6DmN4t4x4i7bWzmB22XkJdJdTbYm04wkc6UlvY%2FA%2FOj5MqGGjbbwbv8AxNxe%2BascRx3xEzTbMoDNvh7Fq1%2Fh7Ln%2BpxxxBSR1ICjRRyPpoDJrtG5ln4Q4ZjtzbX%2BbnVqft3Ul21w1guF89laFRpSOVLUBztWv41dsyLymv4FjW2W8m2AdRkW8y7haEqBufJfS2yyf3it0wlS4ifxGicY1rQ%2BMpy7QXwH%2FALPw2%2BXb4Nhl7mTEUlTirw2ZNshZHIUr1umf8oCarnFdq2LlindhTE71yxt7%2B8uG3VXbhSXHr99DSWU8Q2w2fT9ZNLz5uMRsMTbqjnV9snx5wXKuUrjDLi%2FsXMSU2p1jC7f1uvngLdCvwpB7xtXC8jypz0ukej%2FpuB4nbR%2BYzxY8bM7Y7mm4vb7FQ4Vej7syIat0zwmu34M2o9Hnv6nP5Mrv0EcojAM3WXmOlLGKAEKWhOuT7oP8RXfxKEl1s4WWNPZHcdyfimGYq0h21%2B82alS3dJSIB7EDiKVmxNbR0PFypKjZ%2FwAKsIucAxDBcVZuZdQsKKSPSDHPwZ4rznm5pybidXxYuM00defDx5d%2FhOH3OC26Hb5VuS4mZKV%2Bw%2BtcRePObbTPUxmpLbNk8NyHmS7xPLeYywq1Wpny32QNlEAAAztJpq8CR0cXkRUXGzf7wiy4jDk279xb3VrfLGnQskp2%2FQCu74PicNnD87yW1R0AyLfWySw25bJaiIKDAn%2Bdei8eFnn8sXdl5YDbKTfPBwqShfqbKeJ9q2ODFNaNi8oYiuzH3Z8KeWVCFRuUk03Frs52WDe0WzZKQ242vVp1KjatJmf7J4yXg6zdIUhKjAknkT1qAWuqDqkl5lTyG0FfXbb5piSYukJqs2cQsnk3SPOeUCknoBVSgvoFxadro068W%2FDC2cssUetbN1eIXB8przXT5ZTwVqQABsOk80jJiTVUMU239Uah4f4EYpf3V4tWXLa4losIWtvSPL59U7CTv27zXIyYWjoY%2FJt1Y5yZ9mvA8GduW8St7i5SpfmHD7Ul1C1nklJASsmN1r1bDYChx4t20TyPKdUtfv2XzgvhChtCrK1wVqww0mfIbR5aFT0WsgKIHtA9jT3D6Mccq%2F1OyS2XhFl2ztXlYjh1u9pXslWpwA%2BylEnbvt8Umfiw9jPmk%2BtIrq%2F8NcmYai7RZFnDXFalFTTShJJkkAGT8nvWeWCK2jRjyzb7srjGfCqyvQ07aPqdSJV5fkr0ODsQSPnc1mfj8npmt5dbRVr3hrlxFwprFMAwV7y5X5z96tZ3nmfSgf6QZp0MWqkZ3NN21QNdwnBsHYvWcuNYaAr1uqw1KWwg9lqPJ%2FM0ccPpaLnkTVLo0x8S824bjmM3GXsMxDFMPs0em7KLJTmtQ%2FdW4VcewHzVTjsHEoK7Ts1i8QbjG7xyzy9kPCc0YziLkIU9h9ohvRO2yyIA9xG1Zp5ZLo6OGMauTKRzArDPC9axd3txmnxDKQo2nnpuG7JZjd5SfxrG3pBjbelSzJbathLnlvVL7D%2FhpljMfiFjSMbzMld3cqg6LgQPaEjgdhSYpzf5Dv4rZvnl%2FIrzNu0A2q2YSmD5aAgHaOldLHSVGHPk2SX%2FALXS2G2ra0StZ21FWomt%2BOa9nOyKyU4fkt5lo3F2EpX0REbfP0rVCK7QvhoiuZii2K7VrSBMEp3oZ62VjaT%2FAGU1jdw0yw4JEiSVHaszmno6GFy9vRR%2BI34fu1FYLrYJghJ3PSK52eT6RofjruwGp1olSFLQgk9TE%2B9BinXbIvHX%2BRe3YWVBSUhxIJnbn2rXYxOMR%2BoKSlPqCF8mf0kVaMzzSYBubV11aXEpJE9B%2BdVY7DmS0wnaMBpLZlRSYSYBkCPejSse5Xsk1ohSlFtJgjklXO%2FNCyiaYchLIC1BO%2BxPNJ5N6Fu2TPDVtL07A%2BqUgiI96JwaFZZyVEzsWULQg6ZM7b7zQWE8r42yaYdbwUlQAgRtA%2FKiir0A8pO8OtDttAJ6GglBN7CT9k0srRZKdiVRsO1FoKWaiX2NtoASUGes0agmJeZsmFk16BpSRv1%2FviqlH6Fkjs2UkDZUyevFAQPW6SNknT2EcfNQLmw1bcRCgCZ4qA0GGjpKOe81CBFtWpR5mDJI5qULyLQUYXBSmR%2BlPXQsLtqKgJPsBRw7IP21EAAkj5pklaKa0PEqEJKgI7GlSTQiehylZSSQncwKNS1sg4kCRsNuKPsg7aUVp3j6mYp8ZWSx2mIIEc%2FnRCZp3Y4TEgHeD16VcXQKY4EBKfSRttT0wZRtUKBIO5ClL6bxUM%2BTEl%2FET07FUAienNQTXoTVKiSd9%2B3FQJQbElNiSoFYPGxqDViktobuNjgE%2FU8VCssNfs2QLKB6R3may8EbuY3VbrEFKlFNA4P0T5EJqZcEAq3%2BJirjj%2BxizWNFpcSrcpjrIoXD6ZfyP7MHGlHlLff4o4Qd2Ryb7MPI1SqQPpRlWvYipgbiZjtUKeRejzyDyR%2BtQtMTLKtQ5SahTS9mJtSJHpgVAJRVCSrYmZSZ6GIE1ClOhotgzqVBHf2qF%2FIMl2pAJEpI3qFNpjVTRBBhX1FQFITU1%2BGQVdahQmWhqBiJHXmoQQU2AQNh81aBc0kYhmCAdOnptzV8K7B%2BRCot1GNjPxR3ICWUULJJCiBpPO1XTAWZp2hRFudR%2FdB4q1YuUrdijdqsmCASNuasEVRaqJPOmNjNQg4RbSAD6Y496hB03bg%2BmBJ7VCDlLCug0jjbpUKbHCbcCSomY5qJEtCyGE6dlJHtR%2FGwqF%2Fuxj06fbrFXwL4fsVRbrggJIiq4ojTX7FTbKJMgGPeo0q0U3%2BjFdnqSBKQevX86AoiGYcJbeZd1pSr07z1onJvQXKRpB4z5FwrFrO9Q8y0sKTHG1COxtS%2FGR%2Bbj7cX2fsBUjE8RZaQ06lJOmAJ7xFYPNhKaNOLA1LT0fmb8YMu2uG3l8wElGgn0gTI377156fjTj0zpPInKmagYza24C1JTqVABKTt%2BVL%2FALmS1ZTf0QS9RpJHpCQQYFMx5r7M%2BaTQHcCwZ9Bn847USyY7uSszbYwdbUtxX4gOIArTjWPtMNRj9j%2FCmmWrxhdw2AynkKEinfNF%2FwAWDFL2Wc1hdhcWScRQ40XUqGlDQ0BQ6%2B8%2FFL5I1wk1oKtIw95YTb3LuHSAPLc1KSD%2FAO0b0mcI9rsJOcdULP5eu0oC7lxlpBEpUtYT5g%2F0%2FwBxQylXsp517ERlJsAO3WL4fh6vxJQlYcVB%2FwBKf5xROEHFiXxa0gU9aWGGvpW%2B3e4o0eshsK%2FQ0KjGvx7CSaVxQrc5qYYYLOH5YwzDgE6VuKK3XFieqiY%2BgEUiePdN2R5GvYKGYMZvEhLmIP8A3dMpSyowgewSNhS54uDrsiS7TF7e6eW422VhtQkykxv%2FAC4NCGu%2Bxy6JdbdD9q6Z5UoEn5FQNsl2D3Ng9oF%2FiN0HU8IKNbY7R2HxS5uxkGWJl9WGWV394dvpaX6VAoKE7nvJ2%2Bk0qUdGrC9my%2BQ8q5YxRpy%2BsMVydg%2BIs%2BtP33EnGGVbfi1qQY%2BtZ4xRti2tk4yzl62Q5cF%2FNuRLTElylX%2BH4o%2B6tc8AOstj8yetHaXs04fMje0bUZX8TM%2F5eRh%2BDs43lbNF4lohtN4tF3csJHA6LIHYzSZZpv8AiaZfFPb0XphH2h7Sybsms3YXmJhKAAy3hWCqCy6IMrU4ot6eekzRRzyT2Xk8XHLaLqH2k8NxHLZcxDAvEf8AwpYISyhbVn96IJG7aURB7wfanSySyoyT8WDddENxHxw8TsSw9uzyP4TZ4wLAgoABqxdWlwwfWHllHq4khMdjWeUZ1xs04%2FHwxX5Sv%2FsL232gfERnDBg9%2FcrtXvUlxi6uv2gI2hRQ4mT%2FAPrfNYcssi1f%2FIvJixRfKkUnmr7TWbsq333VzHsuPWRB0t%2FfSkJ%2FKYVP%2Bugh4c5rcn%2F3OhDPDjyRzh8dfHDO2fF3S7lWEXKSYRb26lAKQOq1T7zuTNdbxfFjjicbzvOb6ZoJfZFzDj109e%2BShThMlSFAISOyd9673j40opxONlm%2F5N7JxlHw9xGwuG7zQ6i7ahRSlzQtPuO9aVOd7MM23tm1%2BR8BTmBa8OvWUN3q0Hy3Hj%2F5z1Dk7E%2B9Dk81PTH4Z1os6wyZi2E36cNTauFsgpKVCUp22INc7OoSncTr%2BLmdbOrv2ffDXELLLWA4rdONIcWpAStK5ChtMEdPelrw1GWmdTDm1xZ0oscD%2B9KZeLCm1gBSW5kEgCBHSt6g%2FaDSX2XVlSS6kKuFs3KEdVCU78Voiq7DrRs5lC7wxf3dYuWlkKhYmCk9960QnRzs8WukXzh12tm5ZUh9CmVDVCen04rQpGNbdUWjl%2FG3LW6ae%2B9yWz%2BEnkdvajxydhSwqS2XxhuNi%2Ft9ZdUh%2FYgz%2BE%2B%2FtXQ%2BR0YXhjHRYGAYi%2FcWLhuH0KAXCY%2FEBVc2Zpxron1pd%2FsypkcEbdxWiD2KnAPJfZKlkJDKikCO9HKS9maWNgbFLBq9uEqIS4ngJ5A37VTpgSj9CjGTcOfbcC2UK1%2BpQ3hR%2FwBW%2B%2FxQvEnsVzpjj%2Fspq2%2FaNpSANw2NpPv3HtxQrGvRTy32RvG8svMsrfLbiHyTLi1AkT7Db6VWTFYDyU9FI5mwkWbZu1X1rbWyAS4t57SCOZJmE79N6xZfH%2F6TXDN6KUv7jVdJQ%2Fi7LSCVBCfLIJJ4O4mPyrm5INabN%2BNtIFusYXcoW5c3AxtJToIcQoj6JG0fNAo10OjMrTOuTsRxW0Yw%2FDbd3B8OUBpCLIqKwNyREJHyqtEI%2FszZM6bpFV4r4Sqs0wzeXDCHAEuBwEuK7kkKgD4pnKMQHCXqRXOJfZ%2Fy0u0Uytu5vXiorCQnyiTzIAJJ55JpLWNvego8o%2B7KSz14V5iYw9WA5bRd4HaOoLbjdosl98cQt3oPZNZM%2BO9R6NuJqMlKXZrhZfZaucKxVt19VixckFSkugLUgnqSYrKvFrZrj5KWkzb7w58O7PL9gtdhlh3HL8J3ecb8tlJ7zEmtMF9i5%2BRyX4q%2F86J7h%2BSMy4zdTiKrTDLJJ%2FZsMnp%2Fq61uxxjRhbf2WQxkSwwxlJBS87E%2BhHJ%2BaapV0ilC%2ByJ5hy9fLbcU5cNWTGxKVEI%2FXmmxkmBLEa75mw%2FCLXzVXWYMPZSncpaQ48r9AAfzqOvboqEN2UZmB7JbwLKMxY8UkkEtYWAFH2KnBWbPw6TN2OE0roqy8a8PWlK1YxnFZJKSpFgwN%2Fq7xSpcK2a18t%2BhpZWXh9clJZxjOrZBkBzDGFye3%2FmpbwRYUoz9V%2FyS5GA5GW2Qc1Y7buBZMuYPIT8hDp70%2BOKP2LnzXoyOUMBuVqVaZ3wY9YuLS5Zn2nQpP60%2F4YrT2Y3KXtGX%2FwBNcYuUupw28y7ir6RITa4k0tSp%2FwBJIVP0oljXQUMkVtgrEMl5lwlRViWC4pYoSPxuMq0K%2Bu4NZpwcWa4ZYPSYla2pG4CSr8Psn4pLY1P2iTWjCk6Y1FJHE7bD%2B%2BKF5YR1WwOaJNYIUkpIXPvMCKKORdsCUk%2BywcNCwEwW1JJ6nc1cnFkdSVMsHDWFaUBxJ1SNu%2B1DxSVmecUuixsMtP2gSAdWxHtUcUy4yfRPcPsVamwNJEE8b%2FU1fBCZdEttbNZ9Wj1Ebg0SVCiR2lqSQSExO2%2FNWnRak0SG3tjKFD36UEohKT9hFDUAgiD2jeaSSU%2FoJsNwAAqTvHcVdMYmEG%2FSAZBUKlEsfpUQobieDtx7VLoVKQ%2BacgJ3AJ69qKO%2BwQmy8SSSrUnoOtMSogSbWO5G29EpMg8aUQY9J6RNHGX2RsItqGlMfqaU1szvsUK91GSDHWnqWif7DpD2kKPIMUcJb0QeauCNAA708g7QsEAhWonpVNip0O0EFI9QI32705TQFikwBtyOKK0DI8JBIkxPFWKji3ZgPTvINQdR4ZiSBMVTZKGroI3TsOtRNC8raWjaN21PVI9qQNu9jBbEHgg%2FwqFp0JFrfcJJHvUI2YKbSOQfrUKMfKQSTpAMdKhdsTLMfgCfnrUCUxM2%2FYBVQv5DH7srVIQAP74q0yPIefd44Sk9ZipoXJtnn3WZBAUe9W1Eu2YqtYkaB7VVbpFWM3bXY7bxt7UyMPsg0XbmYgCr4oi2M1sJkyk88DvVfGim0hutgAHUN%2BSO1X8aM8c7bGSrdJ3KUg1FFD4v7EfJMSUq42okhOWq0epZMkETvPwKhnFkMKO0dZ7VCC6GdhMJFQgsG07%2BkHbvUIKItxsAkR%2BdQgulgkbCP76VCCwZG6TyN%2Fmi4sgsGhJ9JJmNqJY9EHzTCYTttHcVONdEadWORbpH4hP0q7fROTM0NKVIS0IFXxC4P6FQw%2Bok6NInbbmooInBsUFouR6lA9RFEOXQt9107FRG30qPfZUlaoRXau6SQsrHaqpAfH%2ByM4xbPuNOnTqTHXpVUkFLJTo1O8VMv3NzbXKmNTatJgd%2BaXKvQqUt2cQvtdZCzDiOFYm2izNySDA6%2FT23pGVN6SH4c0kz8o%2F2mcgYnhmKYgq5tFtuBSgFFO6oJ2muB5sckf4o6PjyU3ZzLzLhr1q46kBYPUERFclPe1s1Sil0VzclxuQkGRtIG1OwxUpbESt%2BhmLd14EmSSJI22rS8FvSozrBJsPWmWnrtJ8sFW0enpU4Qi9oZwjF1JBy2yVcOqbSAuBsNW0%2F7VlnMjhB9Ms3CvDLEXWUrbSNxCUjrS%2Fll6Dxw32GbbIV82%2BWrmxe0hWmdPX%2BdU5S79muUkfX%2FhriyG3H7UXCm9JOgbmfYUUMrRj%2BJtv2QG8y1iaFuQy806nYtuJggd6Y%2FIdU0FDHJaSQi3iS8PSli4ZS4B%2BIJBIPzPSlrE5dMcm4%2FwAgPiV1h%2BIK8tm2LKoEmDpPzWqGGUY8mwXK9NA5OHW7KkoCSEk7qTseKzzlydlJJdD77qwkJSl1pY66hx9aEsDXFqGdTg2VzI4PtUEZJjdF88hBSp1bKpMhJj4qCvkfoXtMZeaUsLcu1M7EkQYqqChlkWblrxlcyt5LWE2LQ0KlX3lDbwdP%2BpK0EVnfj%2BzqY%2FPaVMtfDfE3MmKXKcbdbw6yuyNDKLSwZaJkROgJAA94pTxVtI0xzxfRKMAz7iuHYoypzN%2F3y%2FdWS7ZWeKC0cePYupEdeB8bUWPArugZ%2BRx6LtwXxn8ULzFbaxy9lfO2GuFGlC1X6n9Y45WQT8zRtX2aMefasu7K6PFS7TijGbLi%2FXibiQ6j73C1KUOiVa1dDU40tMdLO6%2FETs7vOOG3L1xjmWEY%2BgSlLdy06ttoqHUpKBB223ml%2FH%2FkZjy2qZPBlzMuaLNi2VhOAYfoBdbYwbCW2PKR1l4ElX1NT4k1tFvGo7X%2FACQTFPBvCW3bi9Xl52%2FfRy5eOqWlo8fhTyfrUUePQuc51RBM0ZCwS5eawxeEWd0FIBdSlBbSONgZ3pkcq%2BjBl8Vz6AWGZLwbLLihhGA5OedJhXnoUFJT21Kn9IrZh8mmYJ%2BHJFs5T8DsDz%2B0GWP8NwLGHVBLambhtaHD%2FwC5UI%2BCBWuXlctIGMKJtafZzzVk3H7fDccsXLm3%2FcukIka%2BhCkkpM1hlGV2dDF48Z%2BjaTK3g9mZ67w9k2rGJ4I4QhToJ822VHJBG4puKO7rRuxY4xN5cg5bewnL7WEYgq2N6wpJQdQTxxA7bV0OKbs0qFvkjaXA8VC8PYxREPrCShYB9SCB1%2FKjNWPFemEsJxEPY6m5UthJQkE78g77d6h0YYNUkbR5TxO2W0l5%2BzhscOAdOBP5U2HRy%2FKwNddl7YLcJYDVzbvodaVwFGRPanQsx8ZPTRZuGXCHQpx5IafmI7itOPoFxa0WZheJXTAS226U6gIjrWqL0IcI3ZcWS8wtBQtLwLaV0VyFVLf0YPJw%2B0Xba3zaQFCFjmQf1NOxsw5Mcm7oOou9QkobWDtNOlKxU06FUvNuuI0KAgiRETUtCGnRZGEeWWUrSkpPWk%2BQ2Y1%2FKx%2FdFKWlq0gnvSsSdjJ120QPFAbxS2lM7CInkVu46A4IqXM%2BTWMTYcXcXYs4OpOwVoPQgHaev9KXPGumFCo7NVM3eG9zhdwbvCsPxnMF2VelxaFOqCjyoJBSB23394rJk8ddpDlm5Oiq7fM2C5cv0YTj1yGcYMktB8feV7fusoJ36QN9qzyxtao0QbLZwVVpjtsG0tYjYLdSCW3VA3Laf9Zk6T7bRVL8XTRFL6I%2Fj2T7BDi3LbLH35KRqLrl0pS1L%2F8AXrRZHqqJLka8Y1l7Md5eONN4RmI2euSgMjQo9idUx9awtSvo0waa0gxhOVMy2xTcO4daWVvPpQFaSB7z1qKN9lt66DdrkS0xG6W%2FdYL51weVNokj6gVfxA8v0Ol5PwrDG1KuF3FukDdLq9h9KNRdWgLT7I45f4Th5UiyetBB20iVbUPyN9jIxSWiLYzmtxphTrj6GLaT6pgUUZWEa05y8QW3C8m2Wp4QRM7fnToToOMvRq5mjMlxcHUpYR6hpAIgyaRlu7GlP4viDj69JXMp06iNp6UiVgxtvREnMPeunFL06U6jJHt0j896Uu9m%2BEGlskuH2TDKEBoIKukb%2FSK0BkzsrFS0BtwFIM8pjb3psVoTkyJBpjDYSC6hRAB9ROwMU2HL2Z5Pl0ZuYekCQlCkRMq5HuPinFtNJMTtsUxTBHlDCcSv8PbUACGnVJCudomI37UuWSPsH4nL0g6xmrEX4%2FxTD8GxtAEE3VqkLA7BxGlX61mlHltD14%2F2wml7KWIH9vg%2BKYI8IJNpcpeb%2BiXACB7AzQxwL2XHHJdMkWGZdsLhKnsLzJhr61cN3KVW6z7eqUk%2FWieJehOVfZYNnl3F7RtDj2HO%2BSSJW2A4n%2F8AiTI%2FWqj4ye2A%2FIXSJjg1rqKStBAB5niqeOug3bVloYTaBKUK0EdRO1TixbZP8PslnQVthYO08%2FpTOKFSlZMLWxgylsFXbahnH6FNSvQetrPRMAkg7R0paK%2FIMtWZIO2k%2FwCocVaK%2FJ6HgYAJOkE%2FFDKKY1dUOm7ZQAKUcHYURaQuWdAEp0k8kdPmoMUBUJ2SQACDME8UtwBlFIXSRwBt%2BdDF0wXGux6w5BiST0k04oJtPAAJURzBqEHzboBjmoQfoc%2FCCUwDzVCpxSVodIWFEbJ5miUb6KjFtWLiUkGJ9gORR42U4tdjpt8jkD6VohJJbBHKHdWkGQJ33q3kS6Jw%2FQ5bd1KUCDI7npVc70LlAdJUogx6U8zNHQB4Vg7yD7zRcmRHynEiSVCD0BqWyrMC6n1GRx9frUtlia1pJmAodRVFG362ATKfitFCo5o%2Bhi4xuTAJAjc8ULimVky06QzcYHTYz16UKx7GQmmuxupk7H6%2Bwq%2BCDEy3IGwJ7VfBEMC2DsDEczvQfGyrRiWx%2FmB%2BRU4MiaPCiBMg%2FAq1D7Kcj4N7ekg%2FFFwQPyK6PSgxJ3HEVfFEWWP2fFB56R3oXDdh8kIKRzykUSQibl6GzjESQDv%2Bgqwfmkuwc6yACSFfNQCc%2BQzcZ%2FF1Hv2qCoyXobLbB1AKBB%2FSoHyf2N%2FJG%2FpgcxUI2%2FbMg17Bfv3qFCnlDhIgdfmoQUDUmd461CCyWuwO%2Fp5NWotkp%2BhwhkDYkJPT3olBlqLHSWVEqCZUY2NW6RbSXez1Ns2RCiofSj%2FIEcttBI0pbUs94qU%2FstRY5TbFexhA%2FPeokwlBvsept0AQTJiPerDUUhVLY2SkJJ%2BtQD5BRLc8xyfpUKc36ZmWkmAlaiO3AqMCMpez4tK21CB3qBcn9ni0KIBBK449qhOT%2BwHiQOkqAIEAGrlsP%2BRRuc7Vp1t2QIgzPWkuDK4O9I53%2BOGXrW9tLxK7VCwQRsJ%2FvpQPojlJJ7PzVfbf8H7JwXtyzbLaKtSlQkT14%2FSuX5Umm2zof0xO0pH57PEbIzNniV4hslcAiYia87mmm7SOnlyR5cTXvE8mPtuec0lRbSJFJc0WsMm9ARGFrtlnUyE7dBUjNdoGeCcdsk%2BFOJtVStjWBE7QSO1aP7vjsQ8PLZcGBYVb4mEqb%2FYE7L1dD7GkZMrn2DPxWlbLlwCxt8NSlp1xDiZ7T%2BVFYn4pLosC3Vh7ogmyWZjSscDvFRjcTrskLOWsOu22i3bMqBgpUFBQVv1HQ1Ww5NeyNYz4c4dirq0qt7dlySkKgJJPaetWyY5UrIe79mW7uk%2BdbFtbZkbICh7CRUWN9rQ3myJXn2YMWtbsvnDnl2uoalMngVqj42SSpvQOTyIrTI9e%2FZ6bStYdusTtNyQjytYCegJ2pc%2FHmuuhXzRIbivgZiVnKrB8vpTAlY0AjvzSKdk%2BSLKkzHlC5w7zGH9abvaQg6gfmanJBfAntMrS7wG6aWpYdbWpI6gg%2FlVpivh%2BjywubyyQGQpl8TJCmgv%2FAPmpkYwl26%2F2Knhkl2HbS4w%2FEbxk3lipkDZfkpS2T2jcgU24pOnY7Fj1tGx%2BB42L6xtcDsLDNV6z6QG3sR1gbRslKRHxWBo6GGUVHZe2Ssos2oSR4eYoq5CYcXb4ei4cKf8A2dVCfmkNO6NMUn0bMeHuYThLf3a%2FssZw6316RYspabDiZ66wqPhPX5rLPymmafHhGrkXSrEcBxnHEYjhWGWAxVKkuOpxK6Lam0dNKG0%2BqYiPTT8WVSdh5XjrQYzrlnMFqsYtZ5mcwxh%2B21thm3QptsQZ2UTsOIM1sm6MsPIjdVsjfhpmTOF3mJOHvYknEGEHyi41cN2yVq6SNAbgduaVjtjZZW10XjjeSMLxS%2BWcbxR1N60sDUzdJKSed1mECB2pk4KgsWRV0B8X8KMt2qBfZlVdYgBKk%2Fev2iQk8bJnUIHelxjEJXf4kyyf4EeF%2BcQwi4YwDDWn0hKGmXVMEe417cdqfjwxYGSMu2mX419kTwnyvYo%2B6LvAoN%2BZCHPNUtQ6hQBI46U14K2jLPPK9IJDw2sxhyUYNiN7dWLJ0hNyVIUjpCZ68%2FnV%2FEx2LO2S%2FKWEqsw2nDnHW4MKStcqHcHuK0Y9OkaJZNF6YDhaE3zd6ptt5go0uIPCfgGtcWSEnxXEHourrDMVxVhtxAw1TgUUBU6dt%2Fikznv9HoPHinBV2PLbHLa%2FxEpYfW2WwFapMCB34pEs3pHVxYJLs2uyVmNTeHMffbhxbagkSlII%2Btb8EvxtnOzeO%2BV0bK5ScadYQywtxEnU3J4%2BK1Y5WzlZpU9lu4Om6uHQlxwtLQJBnY1phZjnkiWZaXbjDTCnFLUrUY2rTCX2ZmovotvLj7dwtlbakhOxgfu0yzNmkorZdWH3ZSG1FMp6gGjgcybVknZvREIWQk8daaLePdg84r93fbDzqUL1DcfNLlkcZBSjy0XTl3E2XWUAvaSRvttNXl2tHNywaZIXXLcJIU4p1ZB2HH%2B1BCMhbojqksJK9ISmT6hJJP1raugIv7IviBtlqUkIWpSZ3A2H1qmkXFyfRWuZMKcv7VdtbvvYepRMut7qV7SQSB8fpVvoGK%2FLaNdW%2FCC3ssSfvrq8uUuuHUtSEBqR0ISkEz7qUo%2FFInBXbG8q6CFtgGXMooct7Ry2wRtxZLr7rhLrqyZ3UokknsNhWfJBN7QcMrQ2uC%2B2957b7z9sT6XEA%2Bod%2BN6x5cSu0aI5fQGfx0JujbMWd46hKt1PMmD7xxWdzrQ%2BPH2ObhOH3LDb1xbuWnEBLYO9Vz%2FQFb0NEO21sHAL0NNdShJB9ulR5A4322RfF7vLWlSH7x28cP7jkkGfinY52tgJQ9WUhmdNinzVYezZtQDGhtKT9Sd6S4e2x0ejVjOSMcVcOalvqbH4RqkD53p8MaAg37Ne8w%2Fe0h5bzyGx2ChvVuUUNXZTGOXSlKJQHVqSnadtR%2FlWeWSx1lf3z5C1aQNMjeJM1kz5JJaH4%2Bfpgdt9ZcSC%2BXFJ2J6H396WoOW5GiKfsnuBJbcOgLGocgDYVvwQv2SW9FmWVukhKU6UCCIHH1rZVGOcG30Gm7RI0oBCuRufxflV8rAWbj2hrdtpQ0UgI1EGRETQyWgpZrIm%2BlCHZOknqJkn3rNOD9aDU5PoUZUdKikJmInk%2FwBKCOGvY1PYUYZRuRCV8wP5f31pteg3JPsmuGWwISVtqIJkDVvv370ucX6Yv%2FBbeXG7u3WkWr1zbAc%2BWop%2FMD%2BdMVpVZmk7f5F2YPdXL7baL23s8Qk7F1oTH%2FsmDVkr%2FYsrC7TCLlKUqtX8NMbeWrWgH4O9QVJk7scF0pSWnmbhPtsR9DQNPtAOSfRILew0GFpKSOZNClIXG7DVtaglAQ1MmJjY0fBDOSDDNqqCSmenWgfHoiafQsbUpCQW9z0qqX2We%2BSvt1iigovshktkCdzzA4pclTCtjdQBPE7b96gXJJbPAkAggQJgzS24lSkmKJUU7BRnn4ouRcY%2FYqy4UqjUrTyYq0HxQTZdB%2FCdUf3FRyQlquwih4QkBQ2O9RNMqxyl0BR3JB6jrRWyBBl4rmVCR%2Bv0qnGixTkykJHcCjUxcobF%2FNUmCSdUTG9GpWRqX2LpdKoKQkA70SYtqX0OUrckAaSI4maP5GTi%2FoyLi5AlIX%2FKo8jL4MxSs8qJKeYNDLIynFnyjq4WYG%2FNCpsGSaEvMUoepSpO2xiKLkwo0%2B3RvKu3UQNisd5ro8Gchwf0M3GQJ9IMiT3qmqKcWuxkpkHdQgd%2BtUSMqGq2uiUiek7VByzu9oQU0BGpACv96gSzxEi3BGxT9OagiU2zwtpgwkCoVCrpn3kEqE7fnFQY5JPSPQx%2B8EgQagu92fFnvJnpUB6MPIBiCqiS%2FQbae6Rgq3PdM1dfSJFvuKGq2SkyAU1XFjHK1TGbjSSo%2BnUPaqoXKNf%2FANGLjI20gdjtvVxWyJJuqGbjR3JSJ%2FOpKNEcH6EiwQAYSB80JUk12Y%2BSDHpSodY6VdP0UhUMxsDA%2FhUoJwl9GQZBCSdMe9RKyKDF0NxslIgbzTYxobGFDlDW5JAB70MpegJZF0LpgQIj3Aq477KTXvYuhqQV%2BpMfQ0Y4eIZSnYISNuh3qAuSXYslsqkiEgdeKiBtPpmXlkEpUoQOd5qC%2BT%2BxVLZEkgK%2BeKhQuEg7hIJ6xUIKBtUaiEioQWQ22ZKiZ9%2BtQhhcMEDXrQpI3gbbVCEbxEw2YAgg7n4qpSofGNIofOLiQlwqJGxSfah5%2FoBzaZpD4orDjF2ElKtIP4ulL6FqLbs4YfbDVb%2F4diQWUiUKAkbA9%2F0rk%2F1KXFWOx5pRaPzZ%2BLGHIuMZv9LKEDUoE%2B815ecq0eh8bCprkUBc4Ap0CFLnoDG%2B%2Fek%2FIvZpfjtdAB7KOp10OJQATyKnyR9F%2FE6pmIysAEBLVtrB5jn60di1hn0iRsYcbFtKEFsAJ%2FEiaZGhc8M2P7LEbuxWtsueegTGvYj%2FAGphmHdxmqxZQA%2FhzrTgJHmNnfjmglaNeLK0qEcP8RtBKmMdu7Uj0gKTpI%2BCP50HJjXOJObLxHXdNhu5xxi%2FCSCCHIX9Z5ok32LcsX1smeGeMeZsIdTb2%2BJYaq2J%2FwDG%2BkiQe8HmiUmujPJwb%2FiW7gXjusoabxHLjNypwai8zdp3I6xMx7GtGPzJRHQ8RS6FcX8acDtELdvrVUGQhoBJnk%2FWtEf6hq2jDm8KSeysb%2FxR8MMbQQu3NnebpLjydKUnsEjpVPy8T7Rn%2Ft8qZWmP4RlrMDTr%2BDow28BOkeWQTPYgdeajw45%2FxYCzTg%2FyRQOZfCfEnm1PWzBt21KIkdfgmly8NxVpmjH5il3orC6yBe4a24H2nAgbqUo6Qr%2FisjUl2jS5OaoSw3BWba5aKm1FtQ5mEhP8aCWShmLxXe0XVlnCMVSpm7wjDXmEoE%2BY2s%2FmAIk78b1llN3o6awRXSN7%2FDPJv2grrDcMvcLwLBMOwm5WQ1d5guf8PZcP%2BlKwFun%2FANEqqY4zu2gJzjHUjeHK%2FgTnvMi3l43nnDcRzEy0kFvDsLu7RoDaU%2Fe0pcUU9N207CtChyf%2FAPBsskXuKYExTwU8QcCxVpu3zU3hds7%2FAOa3sb5twIMkDzCqHVz%2FAHvVzhTsfjhBrSNi%2FDW1yRbvPZT8VUZixjEXFSypjDbdFulMfg8zdfvJk871swSxpfkrMPk%2BFJfljaRKsy%2BBX2esyNJs2rF5l%2FSVErvyVspnohStCI%2FzEUGWMJP8dEwyzR7Y%2Bb8Dcp4Fgf3awzPe5ksUehxq3KH9KOQFJO0dCRIpD8VNdjV5eR6kg3beBuK3rWGnKzDli0EBIaDIOsTwUhRSR9Nqn9llf8WaoeZjWpOmW3hvgwrCha2OZsqZQumVKSVtvtgGe6CODWuPiTX8qZiy%2BWm%2FxZfuDeGuHWjSU2Nk5Y2UaUoaXqS17AGdt6248FbSRzcnlvoh%2BdPD115BU6hN02PSlbSihwbduvFBmimqaN%2Fg%2BdTIfg2Xf8HLBfdbea1yrzkmR7SKRBq7OvDIpLRYwubNuzUGG2wkj1Abz8U2ir9FJeIWP4fhyWnS80rWCkhCxqAP%2BbuKR5E6R6H%2Bmxk9VRW%2BWMz2zWKuW9ishKlGeoH1NY7O%2FJyWjb3IWd7VvDmcLWoXWr1L3kfnXS8XLapnN8rxm9o2lyRnWyauGkPXLTbSD6UlW%2FA61vhPZwfJ8OUt0bPZWzlhz9w4p1xtbRSNKh1%2BK3wmujk5%2FHlFaRazuOYYLBp7z2Qop2SVb8U2tWY8UZXRJMoZwtWZbbW2uSCPVQY8yug8%2FjSaplq4dm95zdt5DaT0KiYp8sldGZeNFdk3wzNaChYdUCk7EztzVLIKn4vuJGr3Fl4ljluxZOl1kKEkHcq96rlbNC8dRg3JGxGAYh5DDYWpQWQBurmtcOjz%2BTbbJSnE1kkIWhts7x%2FvRGe1dUNDi7hWB%2BGeARE%2B%2FNFyZTg%2FQs42q9BCypKvY7GijIqqYgbcteghZT13gUwW%2ByC5hcZZZdaZDyHCCVBIKykdwI5%2BopUnbGRTZTN5kTAMbuVXWIW%2BJuOfjaW6SIPcIEfqTWecX2MVkcxHCFZbv03Djir2zSnZlxIUsT2O0D4FYPIUlsdhnF6Z6zjDr4Uq3w9uzbPdJJV771iSNcX2kIXNiu5HmPAHqNth9KJKy7ZAseRjFo4pNquyabI9Mt8%2FrRrGXyZUuMZzurEuW%2BI2bKkpBlWiNp96uLBc5fRSecc32V2y45ZllnYkqAA3pix2hM5tbZqLmzML6ri5W3dPhPUhXHvtTL4oLE3JlNYpmDEwFeXcLbG8lUGQfmsryXZvxqPTKtxbNF22HC661q3P4Bv9aU2vZrhCJUmK5xdSsFtxK1kavwCsufMqqLLlH6EcPxa5xBzWQEJJnSlOkx25peN5H0wUpl2ZcSQ23%2BzSJAidwN%2Bf1rp4ZSSqy9r2W%2Fh9upKEomETq1EjjtWiNv2Z55EuwwtQa0BBSpBMyB770cY0Y3%2BT2Rm%2FvCr0KWklJgz%2FAH70MmPjj9pEXddl0a5Tt6hEKrLOTNcIhK00EJBKoIHPO3vS8csjewWqJNh1s48tvSE6R32NagJSSLZwTCSpDUAE95%2FSlSm06FubZb2B4KvU2kJSAAIBFNAotrCcLWjyxoQB132%2BlRUKmywsMw0r8txQClCIqJWDf2WHY2ZGg7pM7bTNM%2BMr5P2Sxi1Kk%2BrSsCfxdRQyjQO2EWLRexQ2NA7dfpQP6LktaQVbslADUAT%2FACoHDZIRo9WxtAAUP1NHxQQ3UySPU2lKu5pcopbIN3mQEkRO3IPNCpUWvoGq29J0qHQTx8UU0khnBCRkRER%2BUVncfaLUEj6eJiaHiwqMkQFJOyvaabHog9QslaY1J9oqyuwi2owCTG%2F50m%2FZOKHKVQZUAY6USm0ShdtemdwU9afKVlvY7bdUpRKiiT0oRUo%2FQ5DqhuQgiYNQGhcOA8kQf0qIodJeJG2rT0Ao%2FkZDxTxBEq1DpvVfKQ8DpgAFRR7TU%2BW%2BiHxfJVAVPTmr5kaMFOIBgCD3HWq5spxR0EeZ9OofX2ruKWzjp3tDBTSeSIP99qKi%2FwDIxcbAUQQkGglD6AljXobON8yIJ5mgcWKkmuxBbck77e4qqJbEfIGolUhMdKoh593HSd%2B3SrpkMgyAJ3Hx0qUy1Fs9LCBAMzUpl8GZ%2BUjoAB0pkY%2FYUYNdmHko5lQoxtia2UwSZI4MGoS2NVsSQAQocmoSmMnGIIBHSoRqxg41EgeoT02IoeItwrbGam0LKiAQRzVpEi1Qh5JGxIAjmKpyRfNHgYED8Rneq5onyo9Le0zMgEQJiqlk%2BgJyvoyCAFJlRAieakZNgxyOxZLYBGwIPt%2BlMs0N2OUtgKgD8xxVNFNJ9i4QkbkBRmanFA8ELBAmVAk9R71ZbdbFQkSNI3qCpyt2LpaSZmVEfrUBFUpAG5npv0qEFkgKUkbRNWlfRB1Ab0lUaidoPNNpJbBcfdiwCYB0gDvNC6Ft%2FTPVKb4VpP0mKF0RNjS58sJKgkd%2BeaEOKfsiGMOgN%2BqRuf4VGaIpp7NeM7XGlt7%2BzQtFSUb2zQ3xYxJDNte76dj12j2pc532MhKNpnBX7X2Nec1iCApZSUkFKtu9cbzHcXYGOSc2%2FRwHz9dIfxbEJKG5USE9AZrzeVJ9Hp%2FDf4kHasEupTqDbiI7wRWWeJG3Y2vMKYc1hRIUOgO359KUoIoBOYE8CkocUhmIJVTOeqIkMbrCVBuU3AB6K3Gk9qJZK7Blj5EOxG9urEuNKbS4OZjffaZ%2BlP5s5%2Fx09lf4jmJKA4lxxBUY2JMdv96q2y20tEfcxKzdckrDZKphBnpVNV2Jy44zWxS0vig62lazHMyR%2FSrafsLDCMVSJjgzuJ3jramVIdQOCsgAe0mqSHxlRYysLffZSleJmzcCQAlklcn3ipxT7HRlN%2Bj1eWXp8y%2BexQNQNKwry0qP1okrE5YOL%2ByKX2WSEuOrxFvfZKTqJA%2BSBH61Uo0JWTdEQSrF8IuC7hV1iKnhv%2BxlIn4FCpVsa4tokWFeK2ecMdSzfsm%2FszspLoJP0kVph5kv%2Boy5PETdNbLjwLN2Rs0K8nH8Pdwm6VpguW5Wke%2B0xTF5EJ6loOH9PnHaLrtfAjKuMYO7j1i3hz2HtkanW3C4d%2BBpGwPH86p%2BDauLsfDzODUZxZJ8ITdZIaYRknBRh2KFwITdlpTj7g6hPJn3ArK8LWn2diGWD9G12WMQ8VcHssJzfjubnMmtrbCUlWIuNuvK%2FwBQIKyfYT7VFyXbI4ctRVjprGPtOG6uMau%2FFvDrPLS0%2BYhC3BdPuJHdLqwpM8T%2BgqNv7JBY4L%2BP%2FAtlnxazBYX7t1i3iFlS%2FwAQSmWmbPBGri7QqeD69APQlZO1T%2FPYueVtUkWHiHjnijzKrnE8JTc3ASA7e3yLdD6Tvp0oSgx8JJovkFLxeS26MP8A6iWmZcAu8xMNtOX7RT99ZU6jyVKABClITBIPxtToR5JsS3HG%2BNgDBPtVh3GGcsIey7k62SQHXba20oWCeySSSfcU7xpJyqReXCu1bOjHhTi2P4hYtLxDNOSMZwR1aXUv3YNoSOoC1ET%2BVemw%2BLFJOzk5%2FIjHtNHQbLWWMFfscMvbu0c%2B7kALQi7%2B8MKEcpO%2B3Wjl4cbOdPyJplnu5VwhFs07h2hDZSYCQNqXLAktIbjcpbKhzHlG0duVl%2B%2BUkiQkEA1gy40%2Bzs4p8F0Vzi2Urm3Cyi6t7m2kelSQYHtWeOJL2bsHkxWqI%2FdYAo2Trluht0JBAQTpHx3q9D4%2BVHkqWzlF9qjMOZfDfELjGGkvloE6ylJKUkniuX5sX2fRv6LOGSHH2aiYZ9q3C7a2axC5xF1N3r%2FaAiFI7jmuXDKr%2FJm%2FOlF01s3E8I%2FtO4JnBkW%2BBYipd6BpUSdhM7RWqOaugcUYTdPRJfFD7Ul34XWrWILuHHVqTOgAkp9pFXl%2FqMse0dLx%2FFg09aI5k3%2FqrNWyG7ZTFwVJMAFRg80zD%2FXEltmHN%2F6fxZNp6LLP%2FUmzzjtxbrt0N21jISkayDHf%2BFKy%2FwDqFLR1PB%2F9E%2BLxtK2bc%2BCn%2FUIbXe29jmkXKVKI%2FaJMiT9d6njf%2BoYye7MX9S%2F9CP8AljOwuVvFzCcSwGzxwX7YtnUJWkhW526Cu%2FDybXKz57k%2FpUlPg1TJ9h%2FiM9jLX3W0beaZUSkuK2JrVCbboV5XgRw7fZe%2Fh0x96KkLDZk6krUZ%2Blb8dezz%2FwDUMlLZsOkOWzMofRbgEEekyK2KaWjgJh2yuHnkftVuq66lCP0ok7FSSsKf%2FHPl6lalSTuSP4VYptkgYVatNkpQ3rUBJ9qOLXsXJ2YKYQ%2B4pS1oUk8p7fSjUkBJWRrFsNs1ftXnXoRuICkAflsfrV0mLSaZAMYfNmxc3LJuU6EgBb5CG0HvKRJ%2Bm9KnFo1Re9lD4phOK3T6r9%2FErfElfiJALQbHQCRJ%2Bprn%2BTFyQ%2BDj67MWXrhsJDjD7iuDpGoD61z%2BP0a%2BkPnL1ppuQJc5KVHf%2B%2FamJCnl2VbnXFr1VutTdohbSU%2Fi1EEfIFM4X2U5tmoGdc0KtkvNLuWmlKJ9JkEj681PhoV89do1fzLnCz%2FbIC3QsEjYyn9DRRddj1kT9FD5gx4IWpSUlW%2B28R%2BtSfFrbH4rT0ikMy5svk60sAlUxriRz0rm5csYo0cbRQeYsdu%2FNfbu7wMlWxCl%2FwAunxXOyZEVjTINZYrarcAS66%2B5qhJ3IpEmvRrhS7Lwykl64Whx1tsbA6diQa2%2BM3Y3mr0zYfBLdSUtSqJO8bR7H2rpwhuwZvRZFrcIbQpIJ2gTM1qgc%2FNC2DLi%2FguFTyQnoDyfjtWqPCtgu06oit9iLYV5bS5Ow3AI%2BNqzZa9GrDB9sDh8vPHSoqMEApSfTWFs1NpEpw1pSijUpJP707SabCaaozyyp6ot3LuELWpCz6htI5NOi17M%2BSuqL7wDBEgNQgJPBHNSdPoBTLmwbBVJCQG9%2B8cVHFkckyw8Nw5CCQQoEEDjrQiVJPonuH2CAU7HcjbvUstomVnYo0ohKtO3PWtBnQcYtIEKQYG29C5roumgkyykEAFSx2pc2vRcZtdD0NBXI08Hjn9aAtZH7PXEiVEhQ6Gq5LoYnfQwcCQo%2Fu8QeapxssGPABSt06SeKSQEOAeomOZ5mjVVsdFmChPI2paWgjzYR6v9qVyZDNIMyTHSriyD1kCCEnbj4NNY9xXsfJ6wVbe1IAm11QugpIPM9TUFiiSmRBBMbyaKF2QdJVv%2B8QacQyChuJSKhGhUL1QkKA3HPX6VCnBGYuFSmEx1qA8EKF8kSFFJ4kdqWoK7B4GPm7bkzRdDFhvdiSn9KklJUI7datgcT1b0gjmfeokX8aOkKxA1RP12rtrs87jfoZOjdRiCB%2BdOoaM3Ez%2FDioQaKSmSFDg96poqUbEy2dgme%2FNA4sV8bE%2FKgiE79DU4E4SPQ0RsQNz%2BVHFUNhGkehvaAoJ7VZZ8G%2Bf6VCUZBox6p9qP42DyR592VBKSQINEsYEpv0xNTGvYk7AcbTVqKRFb7MTbJSBp3E95q%2BN6AB9zbEnSlBjpS5QooHLZVIAAigL5VsauMRsAEmeoiahoGq2zGwBE7xQOH0BOH0IqTA1CY4IoeDA4MxCFKAmU7ztVygT45GYbBPqKVD3FFBaGRVIXQ2dgNQ%2FnRBC6GwBEgH%2BFQgomRunSBwagEpU6FN1AQEyNvmoBKVi6W4kkJn2P86gIvsABA%2FmKhD1IkyIPyahGLJBCtRWkD2FEnQHJ%2FQohUEghBHQkVHKwke60kkFaoPShIo0fKDYH%2FkQD71C7B1y8CClOlMcniahai30QXHboIQ4ZQFQY3qDzWbPuIhDb5SoJIB3ng1CHPLxjxxTFu%2Bvz0tohUTzselC1XQvKtHAv7XOYGim%2BR5iBOrafaf51xfPpJk8ZnCzxAuXl4ldKbUJKjyfbia85NKzs4vJyJFds4%2B%2FalKCV9iNyR9aCSXZoWef2P3cxrWCCsRzyRvWd476NCztdjE5qcS06lC0hIBHq%2FhSpY5JUaFljVoCXecmEJ1uTMepCTufciijB%2ByvliQTGM14deA6kFoRAnc00x5s8HLTK4vbq2unP2bpPTf8AnVp0Kkl3Y2Tg6dCXGlb7HUkg1blYmco12FLTC3JBbukKc7BJCopicaoXjzNeiSsWFyyQVXVwlXRJSSB8dPpRShCtPZoxeQ26NgvDrEvuoSp7D%2FvrSD6niQAjfk9JpFP0bY%2BSq%2FI2dw%2FxF8PX0psr%2FCMGfvdOhLi2kkI99R%2FOrUZAR8loPq8MsiY6ym9ezVgmHB8Shm3b8110zwNzHXmKjixizRfZkn7K9jijQdRjz621JGm3bZK3D1lRCdKdu5oHiZpUm1oi2IfZTtrZxCWcIxLEUkEBx1JkfkYFIWAqkNMK%2Bze9a37LYsTeOxswkys78bAmmxxNbobjm47osyw8Fcx2F1bX%2BZsdcy3bsR93sMOSfMA6CTCRPJJ96ODlF3dDHlUl%2BUbN3fDXHsBwDDWbbNDOF4FZuJKVXTN2hdy4nb8bSYnr0rT8l%2FyejL%2FatLlDsnGOYB4fZusNGQcOyjjr4BX51224q4UZ39BPp6dIpjwxk6gBh8jLjdz0v0aw568Pr60W069lLJbbxMrjA3CtKQOkQAY3%2FjWfL4tfyRoj5amtS%2F5C%2BWWvC7CGPNxMYst9bWtb102q2ZTHIZQ2g6%2FkkkRSHfpGfJ8remn%2FAPBX%2BesZ8IGzfnJ%2BH2ODWM63b99ep1wx6jpCZSJPpBJ56VS32PjglVyas0Gz74w5r8NMXtMwZew9zGsJcUVNOvalMvpndKkREH3rTikou6MXkQk9Fl5S8TfC7xWuW7vGLNORcQU2kqZUw64wpR3OlxvUpI6QU7V6Dxs2Ga%2FJbOTN%2BVjf4bRvt9nfEkeFmO2%2BIeH%2BP3ea8u3bn%2Fy8MubtV423tuQ0uFBO%2FIFdKM4KqF5fMzzVSVUduvCe5w7EhhuI5SazJhTDgCnbZFxpYCo3CUlI0iRxFPeNLaBU31I3ktXGXsMQ2cIe%2B8tpCilW0%2B4VG9F6oPcemUbmnG8BavXrU2rpdIMqJgfEnmudmxxb2jo44SlHTIXpu75XpftmWgYCUJ1E%2FXpQfHH6DWnYwu7rDklNk%2B1eNvTBLexP1q%2BEfo0xUq5I1b%2B0H4Ss5%2BwO%2BsFWjCG3EyVOpClg95rN5eLlCkd7%2Bl%2F1GWOaaZ%2BcXx2%2By5iGWMYxK3sU3CEoUf2gSQSJ%2FX5rw%2FkeLKMnXR9X%2Fp2eGZKc0ay4Nf8Air4RXZey5eeYoT6Vokfn2FZoylA7X%2F43DPdEe8RftUeJWY27fD8221gUIPKBCj80yc8mQ5%2FmeLHHFpOjPw9zFYZhumgVBpxwjZR4%2FWs%2BXC4K5GbwEpSULN3Mr4uzYNJYecQ40I0nVz%2FcCuHl2%2BSPo%2Fg4%2BMeHs24yBYM3wt8RZuWWwkoJESAT1%2FWm%2BFjk5JIb5eZwjpWd%2BfDLDseyhlbLYvLpjFrddq24yQuUyRO%2FuK%2Bhy8WWGCUz5dm83D5eRxiuMl6Zub4a5kTjpdw63ZSb5aAslxYSFE7FKd5rq%2BPlUqrs%2Bf8A9Yg8c%2BT%2FAIm8%2Fh3YLwVplxfn%2BapA1pUsEDboZrrYsNbZ4z%2Bo5vkmXmc1O2lv5hhraApSSTM9q03WzjfF%2BVJg1rPaHnQ0%2Fd6ekhBSCfaOtRZq9jF44btsfeuCpK9bzJ3StMAj86ZGTYM8aS7JrZ3L620aVakBO5Vz9Y2o%2BaWmZ5QRKLB4OgAqIMmJPNNjQmca6HN2taUKT5SFGRzIH50di%2BDuyCY1cWifLauPu4eUSEylUcHmP9qCT0VK%2Feym8z3FmEOM3dmUtIMpcZ3Sn6HmsebY3Epdoq1WKYZbOK0XywszBPprDjxW7R0HkbVEcxnMd22lwMJ%2B8pAJnQle3uJmtigjDklLtFEZrz7gyFKZxJd3YPTsWitrf6naqk4rsZjwyl7NZs9ZnyM6lxOL3md0BUxcW1uy8AO5JUD%2BlNajXZPhldrZrPij3h%2FdOhGFeKhtlnYIxK0Taq%2BqlJ0%2B3NIeKLHLK4fy1%2FsV%2FjuRMexdpTuX8YxXH7cokuYYu3ukjYxs0uZ%2BaW%2FCi%2B2bYeRPjcIp%2FwC5qjn%2FAC1cYYpbGOYtmfBnwTJv8MuEJTJO%2B0gj61g8r%2BnU7sW%2FOldSjx%2Fya1XuA4JitypFtnjAnXOSlT5QQeIOqDWKXgp75G%2FG5NWo2ixcseHF0tbTlte2N2QZlDyVCPz5qR8FJ3ZHP7RtBljJ1zZNth3SqBMgbfNaYxS6Is8UWnbWwQlIUXEgiNxzvWuFIr5d2z66vC0lKQoohJGx60VX0GmmRTE8T9JlUmSiSBB95p6erZccKW2yHOYmVuOEAoEyABuOkVknmvoY8iDFh5rwnzCCYBEnmksuOSJaeWrBT7jepAJOwPf%2BlMxwS2KnkjWjZbKmEavLBZgyIPMUyzDkmns2Ly5ggWhlJbA%2BeeaZAW3q0XBhWEDSkBtOoH52q8kqF2n2S60wxskaEoUBvSwuS%2F0kot7ANKT%2BEq2MjpUZXyfZJrRopExqVvtG1VRUZJdILtMlUkpSmN6NQb2VKdjtDIQqTCR8%2FwAavjXYJkpErJSEaTMHtS5yS6LirdDV5zSHIhQO0nihjH2NjGgU46BKSoAT06UtybCBzhkbb%2B%2FbehLS2DVkqkAbAyRVST9DkhKSpIAk7%2Fypbv2WZ6fwjdO%2B470JBcIVp9MTNQmxw2FgnUNPeCTR82E8yQ4TOo6vxd%2B9AC5XsXQqBuOOvtUILIJjlO28cCrUqILoEidgSOlGp%2FZBQk7EFQnpV80Q9KoWd0%2FBqc0WkeJUo7ApJiKvkhrxnus90q%2BtLk12C8f0YlRBTuPcClqSatFrF9ialnc7E0MJtvZUopIwLgkbEUwWdMXVxHG%2FvXo49nmYtJ7Gq9twD%2FtThzGSlDfaSD%2BtSgPkQ3JJOySd94qi1NPRj5e8biBvtUCPNAC4%2BvHFQh8kA8AzPaoDOTW0fISSev12qC3JtUx0EaQCAkdNjzRKbQJ8G1DcKTB5jepzZD4JUeVk%2B0c0SyEPiiZBSk%2Fzq1NsqUqEVNgRIK%2B9XbA%2BQautlKhCY%2BtEmGrfsYuMyTLYKupJqP8AQUotAx5pUqSZMUmV%2Byhk4gJJChO%2B9UMhJJUxuW0iRv7QZqhhiW%2BQSqahDNKABJBgfwqEFQhI0nZJqEf2ekAAkdetQXKaaM0jcA7ioLHCBIAkpqEHrSExpLalDkb9O1Eq9kPj%2ByIgGfY7VHXohilIkHlHSetUkBORkVpAKtRSfaowYNmHn9dRUPc1fJjRMLBSdiD1g1HJsgi48IISDqPtQkAd%2FehAXMFI5M81A4TSRVmZcUSG3CFExO%2FMVBpqb4hY6UNvlax3iahTkkcw%2FHfNqWbe8BdUEwVDfYCkZp60VKPLSPz7%2Fafzcm8ubxJutSZUNIMbd6835fktOiYMdOjlRmO8YeuXV6tQWT6ZnV%2Bdcqbvs6OHI%2F4%2BiJFVsttYUpIOrYgb6e1Ujcsi%2BjNtq0KFBbYdMSSRx9aCUbDjkg3uIi7gNjeiW0gkgwlJAI%2F3qKH2MyS1UFsiWJ5PQtLi1eeCBuT0qJRFKMn2iB32TbspK20rcIH7xE0rkV%2FZkNXlW%2FS4Qll0Kj1ACdqZGehWTw5ByxyxijZbWm2vCmARCfxb9qqUrGQw16Lqytkp7EWkpvdbZVBlaACB7VQOXGn6Lxwvwgt7hplL2I%2BeSISgaRHaVVTyRIvDdWO8Q8GM026VG3ubp6ybSFJYYCUiP502MkNfjOtC%2BAYLiWC3LRxLw2usdYbAKkXClae0kIAP61baEcJfRtJknxCbskWibbwmy9l1TeyHU27jrk9wXJI5qWh2LI09wN38k32I5otWnP8AtEupUUrJuEpSFcbIE%2FPSsbj%2BV1Zrxyg0%2FRZl94XLvnUXD%2BG3VqkiUqFqLgtiPwoSSEp%2F%2FhNaOUn2qG4ctL7I7b%2FZ7wxIuW3sWzM2X5U5K%2FuylbzEoA0gb7E1Lr0M%2FuZL0H8O8A8qZbtGnE2lxZW6xsptwFb%2B%2FwCIuL1LWd5oowgtvTJ%2FcyZKrPwUs8RbRfpTidsw4sNpSvEkoU6e4WQjSPcSR0mmxjG%2BxUvMrss4fZyynaWn368ucfxG70HXZ2CmltSdx51zcLlUe5APY0XwwW0Ij5Mpy30V9nVHiXlS5bbw7DWbvDkNy1YMYazeq7aS4k6Rt7AVM%2BacemNx%2BJ42Tf8A5KnxfPmamWkf4p4c5LXfaClSMUw9DrjY%2FwAqUIUBM9OKVH%2BozvaTD%2F8AxvjepS%2F2ZrBnvxW8WL0vqRk3wFwHC2QpVtbryyl9%2B8Vv61hStCUjfpz0rRHz2t0gpf0vxpRauX%2B0inMq%2BGviR4w4oy%2FmXC7DEmnnQUYdhmBIbacO%2FqAaSEhI9zQzyyyvdV%2Fg5%2BTxcOKPHFJ3%2B2boYN%2F0%2FwDBFhl%2FMN9a%2BH1spKXClu0SC2f9RSFR%2BZp2PDXToyybj9v%2FAHNz%2FDH7G3hxg9xheO4ZjGCZpxxoAC6adU2em5QkifkiupghfsL%2B7tVxOi%2BSfDrDbK0Ddtcfd7sgAsjTE90nmurijSM8sn%2FUi%2BsLwl5dsuyv3btxO4kf5feKNzQicl2kVxmrw0t7u4KrPDytc7BUfw69Kz5FbtGzFmjW2Qt3KeI4Rbrcu7QJaSTCAQOnU0lwo1Y5RkytLpF8cSdFvh1s48QIClFQSPf3rLlk7NiwQq2CMew968t3Pvag04OUoEJSPekynrY7DgS3A038avCVGY7K6DeDW93fLEJuQB%2BHfb25rl593SPWf0vz3jq3Ryd8UPs6v4c06u4silKiQAER6up%2BK5s%2FE%2B0e78H%2Bpqa0cjftN%2BFVxl9r73ZMONthZCxo2k%2FwqYIRi6oX%2FXPJk4Wim%2FB22urK8Yurp2VA%2Bkf1FI8%2FGpQ4pHP%2FAKN5LUueR6NvDmd1m2M3Ckkfvdto2rz%2Bbw5euj6B4n9Qd3B6NrvCzxXssMwy2tC82%2BtRGxVt%2FwA1kw45xkqR2s3mRnjpn6JPsmZ%2Bx%2FxZyfZZfvHQ%2FYMIShlSNnBsAAV19T8WTy4qZ8m8rj42R54%2FyZ1g8Ncms4W7bKTYqQ%2BlISXFgEj5P6%2FWtODAk9Hg%2FwCqee8t2zdbCbC7YtGktOodVpCoKBpO1dqCPHyyKToxxXCcevEpNhjV3hkGFJSEKSv5CgYq5LQ3DkjHuNmeG4VdqKWLwtOEGC4n0LUfntUiqQrNki%2F46JvZWCbdSNSbtC0ndQVP1JmrM6nrZaOC3qC0EupU97Tur4FNh0Y5496CjN4kvFAYeaSTAnn%2FAGpsZUKarQZcCXbc%2BYsrbIHpVvNN0xcY0yE4jg7TwdQy9dsgiPKQ6QjnmOR%2BdKmvTDNe864M7ZXCnEJRIBKdSidIntXPz4r6H450a8Y7ihQ4sLd3BPAiKXCPoPnsp%2FM2bX7Vl0B5SyOCrkUxqmRu3o1wzR4xYth63mnH27tgyPLfbS8kj4WDA%2BKF5Wg148ZdopXE%2FGbJl8PuuPZWsmm1%2BkuYfcLtVgdSEK1tq%2BIFA8ykaIePKPTKdzE34T5iQ4vCc8XOWLtUw3jVoosj2L7GpI%2BqRQfj9jX8nuNoorG%2FBHxDdbuMXyWxa5ubQCtN1lXEmrpxBE8oaWHU8cFNLn8i62BkWBL840UPjH2hvtNeG2IP4Pd5ux9y2bOlzC80WQvEjf8ADFygqA9ge1KflTw7aCXhykrxS%2F8AP%2FD7FsL%2B0B4eZ7dbtPGD7P2VF3a1AKv8t3CrJzfk%2BSvUgx%2FpUKCf9VhL%2BcRmPDkx%2FlSb%2B1a%2F46Nh8mZB8A80FCMieIGM5VxA%2Fhs8wM%2BTz%2B75qSpB5%2FzCnYliybi6KlmnL%2F8AZr%2FP%2FwDC%2FVeF3iTk22buVNDFcM20v26w826nmQQSCI96d%2FbVtOy1XT%2F4Ev8AGEgrTilj5G2k6UkGfg1fJrTDlCK%2FiwRf%2FcrvUbd1Sp2AIAPPWmWi5Phtlf4lYXOtwtpUlIEhPYfH51nzfoGOW9IDt4Y%2BFFxTajIjfgD3Hes9hx4p%2Fol2EYe4SjS04RyRtP51LJJb%2FRfuUMKX%2ByJQsk7yOntzTodCG5eja7KeF7IUEExHP9KYlZHNmweAYZo8tREq20kdNquLp7EuHstSwsUhAGgpjoelH8iAcN0SVm0SNPpjtS5U3sFxoOWzCUzpbIJ6HrVNL0MhNJUw1bMobUCQIjrxRQkkLHE6QJCvajeTWiNsylKxpMxxueKTKf2FCCexFxxCUwDO%2FU0py%2BhijXQHuHQSQCr3k1ObHRkkgU876lQUgUBai2M1unTGrT7AdasLg4sSgckH84qgr1RikEmZJHB3pbgUxYaAZAI9pquJcWk7HAAUQCIHUT0oWkHOSqhVIAOokj3FB8gsWTtE6lJmTPP0okyC5E6laSOnNWQzSCQCQonpI61CUxcEyZBTUIZ6jETI22qEPVGUncKnkT0qn0HHj7EyqJKYIjaO9WU9dMSLpBid47cVU1YKk7PlLBSVHbbeNqTJVodGVjYvQSQP1q4umBKLsRU5vyBvNHzRXBnUJekiFAH5r0y7PLQ29g9xZKjBSOOtNDnN2NFApidPPU1BZgepInftUInTQpqB3Ij4NQZ8h8VJMjb3jmoX8iPtR4GxqASlYqEIBgnce1G1oFCgQqSRHz3oCCvlRABWJ32PNQHkvs9LRO0K5qWTmhMtKA4Vqq0yc0eFsgEqAPxV8r0y%2BS6Yg4gEmNzPbpVqT9EQ1eb2KtO3xRxYTlfYxW2lweqAf72NW0n2VQGeZ9ZPB96S0RoYlG433FUWpNHnBJURsORUGfIjwFIASknnmrK5%2Fs8WqdwSY61GVKd6R6J4IEfO9UALNoK9wQKOMGyCyIBBkd%2FmgZByXQB6TAPUHn5qEEXF7%2FiBHXeoQSLm8Eqme%2B1QpoxDhJIJgE7mahZ4VqMcjp81CrMCtSd9Qq2g4xvoZ3VzoSohQUeTvxVBLGQPGcSS0lY1J471ZPj%2FAGUJm%2FMKUIfJcIAnk7k0HH9grG%2FZpV4pZuSzb3BLqe4E9PepGVStlSVOji99p3xURZM36EXydQQf3pB9q5flZG22Mw9nAnxxz3cYpc3M3qFlZgqHavNZ53I6WPxado0wxDE3DcLStYM%2FvH%2BMVnk62jXGAOXfoWn0JWrbSYPFByYx41WglaXzYKQp0AgACR196OMl0wJRqJNMOeQtaYUFL32Jjtx%2BtBNy9GrxWqv2HEYY7crBbh5s%2BodRB4mlpSTNVhJvJty8kf8Awg4NyApJB%2BJqpzT6DUGO7fJ1jbOpViGHJZIA1%2BqJG2%2FelBxxy7onFllPJt62geWEJ2kSQU%2B8c1al9DOC9lnZc8NcjOLadcu7xKjIUgLUI7HmmNLjbIsUbsurDfDTItu0k2t5idy8DB9UgnvSJZEuthPDFlqYTlnAWrdhCSsrSIClCSR2k1XzyKlHj0S7DsEwmC2jDmblKgPURBP84oH5bi6YUoxXsmOEZLwdu5Zu3WEMFJ1ABZWkfrTY%2BbD2zM6L%2FwArYrl%2FBmwmzt13F3JSD%2BIj3EHao%2FMj32ZM0JSL4y87Y4uk%2FwCIpvGWyDpCRp1D3UVc1twZFPsDHy9EmusAy1aoD1ngzCbmNIUp4uOEfMkD5inSiltD%2Bcis8SyHgmL3yw4xcXt36VOti9WlDQ5hTgOocfhEUurIpu6otHCckYLcPW3n4nZPXEah5jyw0320JA4A9%2Fk0ajH7DlKl0ELzw%2B8PWblp%2FGccxDMGJgFxDFrbkMMKP%2BXUdBV7kEir%2FH2wsfmZ1qqX2BsatLPDWX3LXAtVuGiEhRSkqPvpgnsSYrNkySj6L5ycqZz18TcTFrfuLur%2FACvaB5Rat7Gyt1IWtZP%2BYEqUkVy8zyP8maFFJW1ZQ7eF4JZXrl9mDNeDYk00SpdsX0M26SeAuAVqPSCUiqxzfsVLyJPSVF4ZWzT%2FAIELJy68YMOynZvNJU1hWGBTKS2OAdA%2FD0k10%2FFzJLsz%2FFbtQtls2niSy9jSDc%2BLWHs2xhCUIVc3CQDzqKk6fpWyElLtly8WVXw%2F%2BDbjw%2BxTC8Ns2LhrxFXjDDxOgMNpaSs%2F5fVua6vjqEEt2YJSd04%2F8mxuWcduX%2FIfFtfW1pqMfeFbqg%2FiBjiujG%2B0Z8ifReeG%2BIbrTaLdlp1wAEaysaYp20rYC8ZMn1tjRuGE3V2422mCSpRG1D8iFR8dt0RjHXsLxa3W4q4dXYjbbbURzFKbb7NOPHJdFR5jzXlbArVabJli2AGlJWsanT7Dmk5JR69m7H4859so3MeYrrEsMevAm3w%2BxUSsOPrjV%2F8AqjeuXmk3%2FhHY8XCk%2BK2V9hOM4dmhxyw8y5vW2oS6tIhA7gAcT71nxZU2dDyPHa2RXOPhjg2MpWRZqcKwUla0k%2BWnuB%2BX5U2cVLod43mTxdHKj7U32QcQzPgeNIwWydu1KQryiUkRt9Z7fpWbJ47Ss9T4Xn%2FNDhI4QX2SMbyBjl9hOK2T1neNLUkp0EHYx1%2BlY3S7Dnj4qkFri7uTZtoV5kHcSaS0mN8ec10Xj4EZRzFnLNuEYJglr94un1hMIPMe9Lw4W3o9N4iyKPKb0ftI%2BxF4OWfhjkDBGH32XcRW0FXWqJ1QDEex%2FOvbeFiccaPnX%2FqT%2BpyyZeMVo6QZex%2BxafWi0V60SCOYPuJrbwSejw2XHKXZaGG%2BIqbcIZLabhYO6ULOr8qJTowS8J9k3czWi8YFwhbATAKpVCkj3FMc9GScNpID22a7c3gH3xl1qfUEEEj8qD5S5YdWyeIxNh5lt21vn0AwT6eR2macmBUvol2B4lbuaAi7ccWeWlH1A%2B1Mg%2FQrInZZVo4xcpAU4p4CPSvYpPzToqzLJP2GLd1poFBfBUeitjH86tyfQE210RzH3xYNOXjTetsckbEj%2BtDJ%2FYSWrZQebM2YXijT9ihlvEjBBY1hD6Y%2FyH96kydiY5bezUrNWFpvxeXGXr1y8LQJcYUIeZ%2F9kc%2FWKBr2HjnJyr0ahZ1xS5s0vs3CiHE%2FurO9Kzx7NcJJTSNRM8Y0hbTilFGvcqgzFcmU5dHVwxt7NQ874%2B2jz1NPgiI2IJHwKzZfIl7Q7H3ZrFjWcb6zfeDN7chkkygmQf6GsL8iTdpmmMZPa6IYPE1xl4P3gVbPAgpuLdakuA%2FTcdeDVx8mSe9miM6LIwz7UXi01bJwoZ%2Fu834GgAfccwWzGLMRP4dF0lZHH7pFaof1XPBUuvox%2BRgxzdtV%2FjRYeAZz8Oc0OIOdfAvK9rdqXqXd5UvncKWmf3vu6y6x1mAE%2FSr%2FAL9ZP%2F2RRmh48k6hM2Byx4ceFuMtMv5N8QLjA7yd7PNFr93mZhKbpkraJnqoJrXhWH%2FQ6JKOZdx5IvbBcH8WfC9hF7aLxSxwdaioP2zqbmxuJ%2F1JKmyD9DWtRnHp2I5R7vZO054ynm1o2ee8uIsb0jT%2FAIhh6I9XdTU%2FwNMU%2FTM2Vzk7I9jfhC9c25xrJ2LWmY8KAkeUTqb9ldQfYxQfFbtMOGaaVNWVsxh%2BJ290pm%2Bt3kOTpUlSYUBSJRS2aYzTJIzg7DoSSypKjBIA2PSaqLVUOi6DmHZZ0XLZSgKTMGDA%2BtXxktoueXlovjKuCKYWyUtkogGT%2FOix5LMkpu0bO5dw5TQalMrI47%2B1MTYE5fReWB2RQArQNJ2idqoib%2BiybS0PpCFAERz1qwJyfQbQxpT6R6u8VApRSjofsAAbzqmZNQWP2yNQCtj%2B6agUVb2ONlSSpJ6cTUHLWhsvUmRvpHBHWkSdsqTeqBNy5q2%2FDVFgp5ZIAJM1CDJRURBVr9oqqGRY1Oon07%2B0VOhgs3b6khEqkncdqloXydi%2FlaDA9KfbeanY2MW0eaVJKSBuNz7GkMjjXZmCCopO209vmluT42OvVioIkGQTFBGdegGkxVB4A9J%2FSmLJYDiOUIBkDT%2FMVMkmlokUm9ixQRAgAzI3olfsfJ6M0GfXwDxvR8foV8rFdJCT0Hf2quLBc7MFJIKiDI44qgbQkpUJIJkzuKpphxkl6GilBIJJJ7AcfxoOfplNNuxJSysFAII5NBKVhw12NCvZU7RzFRK9B8kJ6kagpR%2Bk7UXxv7B5o6freSlIiCYr1p5f5RopaiedvcVBcnbsw9IMqEj5qFKvZ4lST%2BE9eoqBOS6QsUACB6d9jM1ARJSSnY8VCGSTBEiahBUbiJjpV2QdJBJB01foByQ7QZ20wY7zSpaBSTMimIIHHG1AWoo9I1GTB6Va0TgIrRCeaJSBjG3QyXuU6Umf5U2L%2Bxzil0N3UqJ9I9XE77UxyoU5sYvJ0SkBPuZqRZan9gq4QFEkhU9qCcfZfMGqbgSYI%2FhQBJ2NyiAUxB9hULPEAAEBJkde9QODrZ4lG8kyOeKhXFttmXpB06TPc9ahJQ1ZkFLQdtQHxzUBMwviQY6bUdohmpYJBSlI7yKF1egWjAlK4CUpSruCaiVkihLUJ5iD8VbVDIwbMdaeJIPvUtDPjEHX20bx6jVFNJege%2FeqhROwn%2BxUYHNkevcS0h1KjEDvvQy6CjJt0VFmjHA2HNSgSN5mqh1sYasZ8zSGk3CtfpgmpTF%2Fl62c2fHLxETaWd%2Bty5BISdgfms%2BVq6fZE2ts%2FPn9p3xOuL93EP8A5ai2CdRCpjftxXF8rya0jdhx8tyRyfzXmFV5cuBa9agZBn8Q%2BtcCUl7Nqj6RV9%2B55plJgah13ilt2PiqRH13LzSlK8xwgDfeqoVmxt7iOrbEXNahr24M7VGVjhL%2FAFFg4HeBSkandCeZKv5U2MkXKNF5ZbfbCULUtsbbHoDVTQcH%2By37C9sl2qFeZbc%2FvHf6CsM%2BSWjr4XTHNzY22IKSFFtAA0iIiKy%2FPJaOhGRnh2VcGS8l24fbSuPiT2FU8smSUvssnC3GMNSkWaAowN%2BSR7UxSnQqGRPRY2D3tzcFq4HlIJVpGtABNNUk1TGcGS0Y8hl7yXFNPPAbhJ2Aq5RVaATT0w%2FY5kQw2kqdKZOmEEqKZ9qzZI2hjxpxpIPox951wGzcxFsgj06Cfbp061ilhlQtwcVtIuXKGacRUWfLw6wddB2W%2B3H6961eJjkt0Y5Y1ZtXlK4GIpZVeWlpeukSQ0PLbRt25NdvDOL6EPGy%2BMKZwq1t%2FwBpg1qhxQHKdZUff2rXqxcscntkgasGnGWUa28OsiPUkISyp5U7%2B%2FaiivoXwaJKqxwtH3a3urjD2mj%2BBJG6vlKYn61JRjVAvkv8BNvCrNlHmhvDGGUjVIalR95OwpDUbLjv2UVn%2B2usVt37a2Fnb4UmVLTI1ujstfKZ7Csea6HYNdHKzxkyhcu3V8m1escDbbKhNoSFFPbzlGR7xzXCyeVJS4pHZxSfHZq7Y%2BFuTcKXZvYziF3f4WgffLhN3Ck3SyZHp6pniexpuOMntqiss21%2BJJ7PIFz4g3V1jOWsJYxDDbdYFwH7hSkNAcHSBxsISBXWx%2BMu2ZY5oxe3bLMwLwQxK%2BvbNVpmphvF3lDy0G0BFudtkNkAAieTWiMN6Ll5TW2v%2BDf3wp%2Bzl9oO4zXg%2BOYr4oZjwDw%2FswNFmh1Kl3YCdpQQYBV17V2%2FD8PJ3J6MHkf1TAv9Cs6A2nh%2Fi1xZJZfx%2B7v3VEapWNUTxtwPaunX2%2BjBHyYd8aLbwTJmEM21qy%2FepduGky4lKxyOhNM5L0Knmm%2BkMMxYJfY1cNWlq9cptWx6W2VGTH%2BY8RSMkJPpGzxfIUP5D3D8m4xeWy2rx1xhkJ0oEzA6mrjGXtEyeTFPq2QzG%2FDBq4u1uffW1tp2SSkfi7z%2FACrPlh%2BRrw%2F1DitogGYPDTBbWwuLa7uF37xELccWJ%2BB0AFZckE1TNuH%2BoSbtEMwfBcDy%2B2pDLdui3J9WlAhZ%2BetBiwxh0bMmbJkWxwu7eQu7unEWqrbcMAAwPmnaChiTQjaYPhuOYVdMO%2BW4pTZJJSJCj2HSijjUtC5ucJJxORP2uPse5YzTieM4xgloWsUILinEJAQtfXUY5rn5v6fa5I9h%2FTfOSxtTVs4A%2BLuW7zLWb8NyyUvtXTI0uISdjBiPmvM%2BW3F8Wj3%2FAP6f%2Fpvy4XNRs69f9PXw4sbBxGYbi0Q7euKCWFqTsnvua6%2F9Lkjo%2BfhePBT0fpN8NHrhq1tWChbKVJCk6Fkpn5%2FWvXeLkjWj5F%2FVcEUrNo8EaLa0OLStpazJVMgj%2BdalJM8fmzJ6Ja5Z4U24bhdy7b3JHITB%2FMUTivYiOab1WhdNwsJUhvHMTeSBCkLEEjqAdpFJcqRTn9xHOFYo7bXQQhDZQDsQdB%2Fv5pMZNO0JzxuJdGX8XBSS64t0E%2FgURPwDt%2BtaITXZzOL9lpYPcpulITapLbwEepMOJ%2BOhpwrLGKVstLCHnwUF5S1rSIBKQkn6VoMk2mtEnfWVNpWAhyDtKTIo5SsRz3TKzzbndrB7dwXLaVIjSUaoJBH8aCw%2FZppn69bukqxezS7iGFajqdaJRdWK%2BmqOm0A9e9Im%2FZSx27KxexdjGQ398vbh%2FEmkw3idn%2ByvmB%2F%2Bkbn9qn4k0KyP0MliT77Kw8Qb3D2cOQvxFwtGLYGv0M5hwtoKSO3ntj8JHWBNE4NlSlW5%2FwDc0i8T%2FBrE73DLnMvh1i9lnDL5OqbdzUpA7Hqk7cGKx%2BRhpG3w8k29fkjmD4hXGJYTdO2mKWFxY3oKvS4Ckk%2F31rl5bSpqzfh82GT%2BBq3mHES6p0hYCgdwT19t65LS7SNLUkruitX7p56QFqKzzB4nrP0oXXoiyckHcAwp991t5tRTvMgnY0LGwxtm3mQcNeWLdN0ySpX4lA8e1bMWOL7FZ24ukjbnLeBo%2B7NqUn0khXaDHWtuKKi3QHyvpl5ZXv8AGsuOB%2FAMTvsIUR6kMLhDqeykbpI%2BQa2wy8U2BkcZfyRYTWMYBj%2FozhlG1ZuVzqxHBYtXvlTJ%2FZL%2BRpNGvIUtNGOeFx3AkWBeGV8h%2FwDxXw%2BzOMTcjUWQTb3aRz6mFbL4%2FdJopQb%2FAIsWpLqaomduljFy9h%2BdcAbTepPruWWvLWDMSpJ61OH2Pc0%2BjC48MrZ0G4wa5bvLcwQmfUPkcilzj9BOf0MLTKd3ZvDz7MgEn%2B5pXCV7YLk2W5lrCIS2VNaZ6neNqalXRV0X%2Fl3DgFNqKASI53JNESUItWi38MYSlIUG9pqFJ2iY2qQVBRBkGBtxUI47sJNjcJVpIPFU3QrI3Y9S2pJnUD%2F%2BrzS1kt0CKoUlBSIBJJiKYy4utma1yPTAPBJoXJoP5EJKlQ4A2ie9KbsNO1YKfBKxMA8QTVNlg5aCo7d%2BSOtA5hKFiPkgrlRBT13qfIUk%2Fox8hAOpIAMwd%2BRUcxqTa6HCEJSSqATwd6WB8Ml2jFyCdIn%2B%2B9QdCXFUJLSCSdweKpq0S37Gy1BMFJT%2FAF3qR0ihJoEqKSoE%2B44q7IFG0kBKZj561CqHjYUIUJI9u1QJQ5aFogiJHUjvQLJfQzIrV%2FR62QTAg70YodJkpAI29qcqLTXs%2BXqB3BG%2FaqUEwk4%2B0M3YjqJ9qW1RUmn0gYuUjYnbsKFJk%2FH2IqBM7Ez7f0qFNJ9IbqJBI3JnaiSZFB%2FQ2WAAmRwajjRGmjpslxapkEj3616jizywoNxO0%2FPFWoMhmQNII1fJq3CuiHpRPCge81agQxTts4Y%2BKCmWlvZ8VbFMhQ6E1RR8FFJMCoQVSdQIgA9qhBwlzcJI2qULlF%2BmO2iJTIUSe9LnYDv7FpSQCNNDf2XG7Pgd5kfnRMceKGpJBO29UwOKEVNpBBgn5ootsCTGbuxMHvxT0gQc8DqVvA4irh0Mgl7Bj4CQVAhQH61J9BShrQJdUNOx3%2BaWSMRoU7wTA5%2BaoZCN9mBUEJO8GO8ioNUUujHzBsQsnfioW5fZgX0gAKUkCrj3oFtCgeJP4hHzxTGpEqJl5w4UTHT2q%2BL9gVH7MVOo5Cdo%2BKHhZaklpCSnhO31irUaI5%2FSEHXxGkr0DvO9XormxoXUap1rG%2FOoUudXoC7Gi7lISZUT70JcdtWBsQvglMFQCuB1qN0NUU%2BivMWxhLSXFBYJ32nc1XJEtLoonN%2BPoS3cS4FTwSeKXN7Ky21Zo94rZvFsxdFT4KQCTB5q%2FlVGnHaVHHb7RXiSsDEG03pDABkhQG8HiuJ5mZ9oOGJPbODXjrmxd9f3iUvgiSoFJ6%2FIrgzT7Y6ndI0mxLEPMedLi%2Bv%2BYk1la%2BzdFAR68Z9ZK0kTAChED%2BdRIME3N2laW0oWQjsCZFUV0YNvpBCVDadyR2%2BatItMk2FXWtw6XHAnTIHG%2FShl1oKK3TLKwO7uUtI13Dix2n8qdCzNLsuPBhdLbZWi6cKlGRG9BkRs8akqbLiwexv3iyXbllaCI2TH%2FFY%2FjTdm1TcUS52wdC%2FM1NKTwYj60xRaf2Vcu2N1v3tssaWNakp2AGw%2Bv86yeRjk9oqPeh1h97nvEXzb2anGmIOyUmY6dKzJzQ5QkXXljIGZ7h1D1x5iioCNtz7%2B4pyzT9sJY3f5IvfAsqZjt1tttMLcUhO3n28aQT3%2FAJ02GRN2w5paLxy5kvGnSo3tknygICmyEgfQ0Lyyv8WZ5uieWWTcGYWF3buNsJQon9nctAE9o08UcIx%2F1sfGcmtFq5YYwlh4IsXcx3Lw4BKTp%2BsjatUIxT%2FEz5OSNhcHtGn0IuNd826CBKdJKZ%2BetbMUWZnOS7LJw7B7GC64hDTn7y3FBS1dpUd5%2BIrdETKV9Mkdtg2D26U3EMoRuElKBqd4n1Heq%2BOPYpqwbiqrEFShhNq9zp8xer%2F%2FAJq3BPsijRVuM4Bc5oS%2BhptFvboEuuOnSy0I9xE%2B1ZMuByV9GnDm4PZpd4r5QsrRC7TLLWGNuEKD%2BKXzClJA%2FwD9dgkAn%2FWv5jpXJlgxw9HU8fLzZTbX2eMq4DlZ3PXi3j9xhmW7t8KSkJ1X%2BOqE6WLdI%2FCk8lUwJ34AG3D4sa5yejF5Pm3k%2BPx43fv0gFa4%2FiD%2BIYLh2TsAGAZZaX%2F8DCrQOBLKCOVqBlx0%2FwD4ihtvFPir%2FiipY1FcZy39m93g7lXGcIsXs15o8P8ALOCMgj7oXG1%2FeHuJOo76f9RiTXZ8bBrk0jl%2BXmhahGTsvjCfEfE8wYi5avWSrZpqAlFsQEFPuVDf6GtHP7RX9vFbuy6sEvwGFOfcLnW5I2XJO%2FccUyMk%2Bi%2BKXQ7RmJlvFGcHw%2FBbVLs6nXFL1KT%2FAO39KBJt7GrC3HldFh2t9iKkgsW4baA6wEmeeu9MqgGoiBzS1Zum2uHQXIICeAfeB0onJv2VHAvREMw5jcSw6q1hlvqtMEaiOB3peRLs14PFUv5M13vrPFcxYs9d4v533DlKCSSpPsOgrLxtnchKMFxj2QnHsVukThuBYM%2BlyNKQ2n8A%2FwDY9figkmjZhxf6pMK4Jg604c8t5tYfabkref1FSz037VIr7DlkjZLssZeDOG3N07evXQVq0wNlK557dKfiQrNmXSAGOZXTieFYmjEWEJtQhQSCNCZid61N1sdDNTTR%2BZ77SWX%2FAA0sPH%2FFv%2B4cVw60uQsFKEqHpBMAnfn2rwP9U8WU81n6G%2F8ASn9SxQ8Lj0zpZ9ltvKjWBYajALm3VbpCdOkhQKhzuODTv6fSfH2cX%2BvZr36Ou%2BQ755pmwf0pLbaQHN%2F1r1OFtI%2BUf1WEWqTNpcLxZu7trdk3Dts%2FH7JemUjrsa248irZ4vJip%2FomVjjFy40LW6NupwAgrUdiOm5%2BlPeRGdxp2mMbzGbVi4TaXzIt7idTa0zpUnuOk%2B01nlNWXTfY6ZxNTzhXZv218wNtbaiFD2UOZqckMotPLrhuA08iG7pB0uIUI1p%2BnWnwSOZmbL%2Fy620thAJIcCfQZgz2rVFUjm5p6osmzuFpACtSoEkTBSK0mdx1YpieLJZtwRdBDxEJWTA%2BD2qCJr8jWvPGNqzRaXtg6jy8bYBCmjt5yP8AMmeTsNqg2jTe7zHi2Xr9V5h915hEodYcGpLiD%2BJCknp%2FCky03RrwKPTK5z%2FZMYhhC885PU81ZtEG%2Bsgf2mFudD3KCeFfzrPmxtq0SGRqVS6NfUfaOzLlB24axJqyzRgbqQ3c2l5sXm%2BoKgPUYnmaxY%2FKnGWzR%2FaRk7jLiQj7hlHxMxF3HPsw%2BIV14a%2BKoHmvZTxG4S19%2FjkWrhPlvjn0ncA8VtnkWVV0c%2Bfj5YSvtfadM1jzz4t21zev5I%2B1h4N4jlnF0LUj%2FG8OtSjQZjW5b7ah1KmzG%2FFXDL8cuGXo14pvNG0uS%2B00pL%2Fw%2FwDsa754%2Bx9aZtsLrN%2FgrnTDc7ZeUkuBplzzFMzvpWPxtn2UNqzeR%2FT45HeMfJ5W6hLl%2BupL%2FK%2F89M1Au%2FC3MuW70WmP4LfWD0n8SDp25hXBrz%2Bfw543Ul%2FuP8TNibpv8votTKmUChxkPtJAAkjkR80hR9nZ5xiuzaPJ2XhbobLrKYPEAz7Vox0zPPMn0bF4FZIQhCToDR2MdafCW6M8kqssXDrVEhKpU4DB%2FPanxVujJKyyMEwxBKAsJM9jJq5KtBRSotbB8AT%2BycCDMykjYpM8g9K0YY1tATqWi4sNcdvGUWeYbIY%2FapENrcOl9of6HeT8KkVti%2F8AcyuKT0OHsipc1X2Wbpd2keosE6H2%2FlPUe4qSSbJ89aZ9h7FwSlGIWwd07KUoALn3oJR%2Bh0Zpk3sMEsnS35LhSeYKYINB%2FkNosbCsO%2B7BpBlIn09vrUkleikifWzYaQEgGf41QE5fQbbc0ABBknc7wKhUZMeN3aAQdcE8yKGSbRapvbCbS9SQdR68UnoWPGm1r3CUjrsOD9afZag2LKtJj1b9iKjYbx17M%2FuxKRs4pU70uRItLVg561lKilQ%2FnQBxkmwc4wsEJ3V%2Bu9Dr2PTQklgkLJQPnvU4II88qE9B9KFwXopqzFbSQASSR%2FOqlD6JQl5cEE6pmYiqSZYg6lMkkE7dKogKdGmSJ9xFL51ogpbtKUQSQTU5N9FNMMtoVI4G1GU5BBDREzIAHA5Joopey45fo9CTv1gbiIopQ2FydUZJZ0rMEQf74q3XsodpRAIPPaaBu%2BgXI8ea0pB9R43ooMpTQMdTyEhIA696k6DGKkCSTM9B1FLIYlCgQdtUflVpjINLsSLRmSY6j3onMJz1aYg8g6SCOvBHNC5C%2Bb%2Bzo6hadKSnf3Fewf6PKiwcAIJUD13qiC4dgGQon5NQhmFwdztPbmoSjMjVGkkiOlVJWQxUkBQEqJPsKpQRDFS0pkBISDtUpIJRsxDoOypHvETVSqiOLQo26mQkq1dAJpQDHIWkjSnnqJiKglxaHaXYAgx80LgUK%2BYqd%2BPYULiFF0eF0CTVOLLbsQLomVBYHc0xRonBjV11Sh%2B7HSnxjRIwsHurSQdXX35q4xoKMKdgi6cH4AFfMTQTl6DAziyD%2Fpnk0suMbGb9wEHhJPB3qBSdOloHrdUVEBRSBxJ4qA8n9ifmTGtSj2g1Cm3%2FAJG3npSoACVfrUIZC7CfwiJ%2FI1dshkm%2BJJ2QaK5EsxXerEAjR8Vf5EEXLtcSpQj5qpX7IxBVwuSAUn2HSgDUGxuXjAIUCevvUL%2BMbu3AAVuAe5qFqCRCcbxJbYISQnbc1A7fRSmZcdKUrIURufrSm1YMkq2a051zWltt%2FU6EjeRVWiQlbo5w%2BOniG2wzepcfVICjsPwisuadLRoUH0jiN48eIoujiCFPuFWlQO8AT1G%2FNee81Te0Xii4%2FizlF4kYwb26u9SgdRgGa5cm6O1gxRa2atYrdeW6UggmN%2B9LdsKcIJ0iLu35XqhUCOBx%2BdOx44v%2BQrluhYXalJKFq9PEmdh80cnBaSA8hSeojti4BCVRuAPVqpby%2FQOPFKPbJHYYhpdQ2lCdQiSTEUttvsenTstjL7rjqUqLe5I5ElQ%2BKbBiWm3ovjKqShSSXDpB3kgfpS8mRVo0YcMk7ZeuGXTDdsHEBpYGwk7cb%2FlWd62b%2BEnImFliTZa3Rbg8EqImPY0cMqfeg9wJ9l7DMNxN0PXdzbyI%2FCYH9D8VU8lL8RsMl%2Bi9MGsss2QS4fuy07TJgk8SOvWkZsr4XHs2Y2%2FXZbGGZlwu2bQnDmPPIASZOxFc6cpR7AlLeyYox28xBCdTzjSAN0p9MfWijJsTzTdBpjGmbRsB25QVTtKtUb%2FM1phjkvRJ4t9CLeYbS8ukMsrecBPqIERvuZq5QlXTKljcVZZmGhpLZW2Sy2IKion1COlFCD9GRtk%2By%2Fj1jZvoaLt1cuEwUhPvtua6HjycewZx1svrCsxpWlldxLQ29KufmK6Ky30YnGmWRhr7WJvIcZD77sQgAmPpTopsBypWwy8LHDnSi4Wby9A2tWPUQf8A9IocfHNXJUTE3J16IhijOZcYWGoQm2kBDSUgBG%2B2lKeT7nes7jkn0dCKxwVsZ4rknLGUrJeNZtsmcXxYpCrexU3qn3cO%2B3tyap44Yfz%2FANRn%2BZ5vxjpfZo14l4PnnP2bFYoEXl6D%2Bzb1AJTbtjYNMN%2FupA22j3rFknPLK0djFCGKP49Fg5RyjfeFODoxDHb%2B4v8AMt1uxYtpQA2OgWoCY6murhisUbk9nD8jyH5E6gqivZRmc%2FEvxozXj7%2F%2BD37KcNY%2FZIdSpSm0ngkJOxAkjfr0pWXyckumHHxcUNtWbNeGOD%2BIVlg9pcY3jv3vEH%2FUW%2FLSPLHRShEajz7VowTye2JnKDbaNt8tv4o9Zqt7h4uaD%2B0cB4n93bk%2B1dKMmwG4WHG7B9dwUWwZs3XV%2Bo%2FiUR3Iooyd9DY5aX2iXYvhrotmbe2ulM%2BWnSdJgqMbn2FX7BhJp2xthGXMHw%2B2Nzev3OIXTnqgKkgR1%2F3pcYUNn5U5OkQzMuLBaVW%2BGYOL1zUEpT5ulDXuojr7ChyptGzx8S7lICIukWeHujE3LcPlXqbt0yfgn%2FesuzVxTlUCOXlx94bcFim2tWTuoNDUsQP3lHYfAq7NMIJPb2AsPtHLxy4d1FFoCErWvYK9h7VRoc4k4XmTD7C2asnFWVpaW7YU5qIknj6UfOkIUG%2BjTX7Qf2hsPwLL%2BL4fgj4N26lxIdVwwI%2FEB1NIzeWoxo7P9H%2FpzyZEfl38VsrteJGf8SzTfC6fu3Hj%2FwCRWskAmPjpXAyzi3ykfYvE8GWOCii%2Bvs%2B5jzp4TZkw%2B3wW5vjhzhSHGi4VBsf5kpJiayQ8lLJcRnk%2BLePjNn6G%2FDDxqxBjAbG9xFdjcOusoSnfd1J5XE8DrXovE8jWz5L52CXyvRupkjxMscUwa2F423Z3aT5a0AkJCSNj7GuhjmmrPK%2BXhcW7Latc0sBhDbwUG1GAZkkdwe9aHkRz1H2iQN3Tl4jW0n7w2mCpIP4h7e9A6excp%2BiS4Xh1rdueeElBOwcSIWj2WOvzVxg2I%2BUtfLH3mxuEM3S0LnZLoHI9%2FetWFbMOeReeEXjqUgqShI%2Fe32PuK2HKzOiYOZhRb2xuELbcWhMOJKufetAEHopvNOd8Vt7lb9mkOW%2BynGXQSlQ9vf4qFyVkIxfFMJzUu3YYxNeC47AXaLcXBCh%2B7q4UOm%2B9QUm7sorPmBvZrZxAsW4sM8WKdd5ZxpF0j%2F8AEa7nqQKXNW9GhNtckaYP%2BI2O5IxBeI2CkOLSS0%2FbXKNTdwgn1NOJ6pM%2Fma57zuMqZsjilONlK%2BNGVsPzHla68U%2FC4LVldKvLxjDFK1XGX3%2BYUncqZPKV8dKvNhUvygFjycXwmc4cffuU3H3m2u7myu23PMZcZcKXG1DcKCgZBHMisduOjZOEWtm1%2Fh19sO3xvCmPDz7TOCs%2BIOWAAxb5hVapevrBO0eej%2F77Y7iHAO9afH8xr8Wjnz8TjLkv%2BAvm77O2EZd%2B6%2BJvgpnK%2FwApYJdy7Z41hd0t%2FDXSSPQ6tI8y3V0KXkkDqa0Swr%2BWN0Iy45yheR2v%2BUeKz5jtm3bYF4%2BeHFnjtm9CmMbw5tEupj8R0y273JBBNLWacf5rRrxRlONRfJL70%2F8Av9fqh7a%2BCmSczWq8U8M8etblBVrVakaXED%2FKWlbj6bVlz4MeR3FD%2FHlk%2FjJ%2F9zFvI%2BNYCot31koJTMqTv16gdayf2SXo08WuyVYY2oJQ2AVK3gRv8e1Pxw1Q35FXRLbJtyAtK0laeZ4%2FsUSTbEzl9Fu5YeQWmUq%2F8sjpx7UqcHZmc0jYbLVjIS4oLJMQANh71pSpETr8i1sOwouDZs6TsSRM0%2BEWLc2yTt5fKVNvtamXE8KSSCn4rRGH2BX2SpnDLTEFJTidokP%2FALt00kBX%2FwCuP3vmicbFyUh0rKbtnpuEIQ9bTs63uD7e1Z8kPY3Fk9MM2Nq62UED0gjkb0g0Emt2k%2FiWhQPUzUFcGOFM%2Bo6VI%2BtUTgzwNuSBpQB7HioRY2GLQqCtJO2red6CULdl%2FGSe2QkhMKAHv%2FSjQyTrsf8AkkRCTJP0NQW8gu3YuLhSm1Ec7moAq9nr%2BHGFQiDPxVNaodFrpAJ6zUkk6IIMfNVwRY3NtpJHlgAnvzSnCS9l2IrZBGlSUn5NKbaL5MQXbgydCNvfmoplxmxqWDJA0gHcxyaO7WhyQNebIKVT6uZpVFJMFOIlUcCaXzRfF1YSYZ1pSAJFEt9FJvoLsW%2FJLaQeOOKKkVJD4sgyAAJ%2FWqAhp2kYtsK1RsB0jr%2BdGtjEOxalRkjSefmi%2BPRTaFzbQgbx%2FfFEkqoUqvY0dbJBEJUY4qmvYS4g5bKjuEakxzQ817DtAtSNK4ACj%2FGgZZiUyZ0hZP0qiGWkwIKZmKhBBxpSldeeJgmoQ39ZcWCY3ETEV6uN2eXHiHQqBpIPuOaZaIOUqJJVMcCJomhkGLpVBO8%2B3ehCbTVIyCwCQVQn8qjdAxh9mBeEAEp9t4mpyQDQ1cWEpKhBIM80MqZak0NBdKJICpJ6z%2FCl2X8jMk3ZGxKD1nrUIsjH7b4kHWT9eKcoplTpseC4TBBM%2FG350EsbWhbxKtCqXwYhY379KpquxTjQp55BSCpMT06ULaKEnXgJkifmrTRAc4%2Boz6oHfvTqHukM3X0oBJVEfnQykC79Ax24QTsdQ7DpSuylGQLeWlRUkKCR1jpTFC%2Bxqi4%2BwM442gkrWSdWw5pQMrYwduNSz5Z9Mce9RfskN6GarpLZMqk9IFQbF8exsu%2Bb1E89duRUL5Luhsq9KySFAIG%2F%2B1QFx5dGP39QggokfSrtjOKMFYgv%2FwDFA%2BDV8mA4b0YKxBI0nWnp15qm2MUV2IqxMbGZBnrH1qiuaWhM4inY60p6VCwbc4gnQoa9wOvWoQrXMOKlCFkKMRtvvS5S%2Bimm9I1vznj2kPhLukRMjrQLYEsTWu2aR%2BJ%2BdRasXQ82IBBOqZoMkl0uxmNemci%2FtCeJ6ls3QTcBOy%2BT%2BI%2FNcLyvKadGqLd0jj94m5rVeOXAJXBCjqUSTzXNn5Dnr0b1F10aQ5uvS688hLmmQYE1kmFGCKKxVZS4tKlBB295270MItvQyV1ohq7gpUoyFJmZJifitHxy%2BhHGhyzdoUVDUSoxtG29W8cvotutsk9hZOurSU6gmAI4rPPsL549WTfCsGHmpU4FuEkyByPpQBPKkXdl%2B1SEMpTKQB3E0yS1ovxdPZZuGtOzCVqWYEpGxJHas82q0dJMsfDW8Q8lCNKyNzqAkg0ibpaDx5XZYuB4DiVypvzWHFqgH1JgH3rHLBN7Y143J7LkwjLZtvKPkLWdOobxvPWmRXFUaowguiy8Iw4hOpxClpTASIEc0Y5ShHosVq9w3DWUobaWpcAkzuT7ChyRTMuScPYTts42%2BksspbtyRJ1LAg%2Fn7UEIcO0Z3OMdoaOYjavuhKrySf3Ukn9elao5U0GvKZZ2U0YTati4cYcuwE7JkhPMj9adjRU8s5FgW2Ou3q021tbMNtEiJBURvuCSaL5YXV7EcKLjyyHWWUBLOq5WNtKJmB0rVBNaLktFv4ThT5KLjGr9VoCqUMJALjg9wPw%2FWtMU6%2FI582m9Fm4fiiksC1w8KsLSIXpPrX%2F7K%2FkKPn6EuGyYZdwnEbshFqw1a2w%2FG4dgB9f51ox423aBeVLRNVYvZ4Q391wlTT98dlXZTKW%2F%2FQfzpmo6QhfJJ8noiycrXeYblwm9uluuHU48rdR%2Bh2FSWGMu0a15cYRG%2BNYJgmWGyxh1uziGNQT5i9w1t1P60nLCMF%2BKCjllmq3%2BJQ2asn3V1hS3rm8uHMRuApbj5VBDfYdgf4Vgnb3I2RaX4rog2UfDLBLVX%2BLXFim8trRQclU6S70gddv%2BK2eMkzNmyt%2Fi2XVlxnELm88hlq3YYUvUlbqytaiequ3SBWyLbejNLHwVWXNc4pbYCw3Y2NqMSuEqJUonSnURupUflFaHNLozrHKTt6Qeya7dv%2FfsZxNlCEo9DW0Jn2PWjjF9miSS0uwpcYTimJOrLQ8m3J9a1zKtv0FGFDOovY0xGzcZUy065psUJHmRsAB0270Lkl2acck9RIZiCnMQuCq1Bw%2FAWZJCB6rkxwVUjJl9I04opKpdgNVtaKJt%2FMbVqla1lUBA7CkB2RPMWbcMw1k4W3oZtZ0gIISXFRO%2F9ag7FFzemVTmHxMtMOwgPtQWgIZaSR61cAfTk1Dbg8OUpbNU89eLT9rZX7Tz%2FwB6xC4dAQEqKgg8jb2HSseTLTaPSeH%2FAEqN2aWeJjOM5tawtlblz96ui466ltJjTzKv79qyzZ6bweONXEri08Erq%2Fwv79Z4e46tbZSpSW4VrA5I%2FKs%2BTx7R3V%2FVEmuT2Wdk%2FwCz42%2FY2mIvWoTibRJDYEFzsDJ2kikQ8Sn%2BJlzf1tdJl6YVkLO1y3Z4jcYe82w2ny2Cw7CG08KR7H5FaYYZ9s5efzPH%2FwBza%2Fw6axvLiGmHcTuHrEoENvIWkJP%2BUqOxrbjbSuzy%2FwDUPjlbSNsMo4li7t0%2Fbu3RuEOaVtJIlKDxE9vitWOfLs83ljH1o2ayvh97bui5bUW2HUj9mTsg9a047uzheRkadF24LhK1KNwj9isnieD7VujCzDPK0WphVkyUJXcJIWPUUzx7itEMdGGeRJ3ZI28QbYbU206kkJOkg9YmK0RdKjPLMpLZUWO51u2rnXarbWB6HmSR%2B0T1AonO%2BhDnrWgBiuaPu7Vu4%2B6h%2FC3QQC5v6e09CP5UKt9Dcb5forjO13g4sLZAujag%2FwDjWs7cyN%2BKL8h6m30CcHzzcYo1Z4Hib1m5mBg6sIxBwx5ihwwpxO4ngEyN4oeddismNt9UUD4sZLY8VrXHsYyTbvYJ4g4erTjOXnlAOBX%2FAOI0dgpJ6GAKmTxoTV%2BxsM9UrOdNl4j528HM3uYtYMC2vUlVviGG3rX7DEGDstl9BG6Dx3B3FcyWWeJ8To%2F2sc0ewZ4t%2BGWWc75ZufG3wUbuHMolYTjuBKOu6ytcqkwrqq3Vvpc6cH2qcFPa7KwNwlwa0ax2OAB0BGlJ6jbc%2FMVy5%2BR%2F0nTWNekX%2FwCEOfc6eD%2BJLvsqYmU2FynTf4ZcJ82xxAcaXmiYO0jUIUO9Xi83ImkZc3hJvmls3PykfD7xVtX2sgIssm5xcSpy9yZibmvDsTV1VZOKP7NRknSIUOxivQwz89HOyQkn%2BRXmIeHCMJxpyzwW0v8AKmZ2zK8KujpdSodWHNg4n22VHSs2THUrQT8lzVT2SbCvEDF7VH%2BGZoslYilHoUXU6HW49%2Bu3Q1byxHY7q4dEhZw7AcbSb3BXkecZKm%2BFpP8A6zQJwfQSc2gQ%2FaXVo4ElDhb3STp4AqNxXSL%2BOX2WHkxp9TjSlJmSDJGwqNp6oVkxG3mUMLUdKkBa0nTt7x3q%2FHX%2FAFC4SfRsHg2DDym1aQTG4itOOIt5K7J5ZYGFpAUgmeY4NNLc7QbYwBB4RCh9atMC2FE4a7akLZUpIiFJjYiOtURPdibuH2KwpRbFm5uZSJT%2BXSs3FGiOVjb7m4z%2BJIUjY60mQaRQ5M9DPqSAk%2FE81LI5IzTb61KP4YM1T0XYSt2CFykEnj61E7ISC2RGiN4nirF5FSJFbskAKJJHPExQ6uhaDNvb6gCtIHx2qcUShZdmnSuR6R%2BlXxVk36Ad5h0hagFEnsBQq0w6mA1WccgKAM0DdexowdYKiDGknmN6lp9kEls6dUlRnvQOMaLi6GbzSSkg7AiY70PAYsmyMXKQoqnaN%2Fmk5X9DVN3VjJsa1pQdpImkDiRW7OqFEq0maetaQvIgywyNhuSO3Wjj2Kbo9dbQlQBAPcgfpTaRLMEAEgExuDxVKiSj9MMtNIAkkq%2BNookJkvs9dSCCUhSjsBvxUKoEOjZQIJ6VAlFiRSYmFJB4MUqaYfxoF3DIK1KEgHfYCooBJDTyoHMfSo4Ms%2BCCPTvA5oGiHpZ06hse09ahDeO3cIHtwa9VGVHmvjYWQpKoOoKPQ01b2C01pih2M7fSislnhe0HUU6iDEjp9KCcqJfsQU%2BCFEEkHoRzSm7C%2BRjZbhkjknkVQDY3L%2BmYDage%2FSrLUqMDchUAwmBt0qWMSUkJeepJmRE1QuSp0ZouFJIIM9dxVp0DaHTeIFJAUBHftR8y7HCb9G0lX06USkWhf75AHrETt3FW5IRKDswVdJMnXJ%2BarmicWNV3Y%2FzJHaTQOREmDXH1SSST7npUjBvY2P1QPcuSQQIA%2BeaNRSCbXrsF3F2ndIClfBoHP6K7BLzxJhxQT1jrQB8a%2FkD3LoJQSjSRyQe9QZFKtAxx%2FSoiSfrUB4LtjF29LaSQpM889KGUqLlPj0DHMS3JBB7TQ%2FIC8smMl4mvZQc37UXNAfI%2FsbOYo5BV5u496rminNjf%2FEeZXq4Hx2qPJ9F%2Fl7MTiUlRkGZ3O9VzL5%2FowVigEJBSnqPepzC%2BRgnEMXKG1nUD161cZ3aZFNtlR5lxvZ4hfp5AB3pcduh8Y3uzVfP2YSw08svAKHv%2FADoZy4ugHB8rs5peNmeUW9rerVcEqKTvH4iAff2rnZZtO0FB8f2cVPG3P7uIX9w2bkFqDKQJj%2FeuF5GZSlaNfjJXZohm%2FF13C3VFyQBCd4k%2FFZao3zzTfs1uzGtbjjqlAEgSSDxS5lY1LtlO4sgla3Z0A7fO3WpCVBuVKyE3TIOvQkkgcTMe%2FNaHml7Yhyk%2FZiy6Lb1OJTPJJnmixqcn2KeKUu2S7D8fQyhCUtxGraTv%2FOk5sLiwZYHF2ic4dmcIQZDSdolP980qvRUcz5VJ6J5g%2BbWkKASFatuORRKX2bOOriy18v5nUpxlQdXomZ4n2mrcU0OxzlfZszkzGbdTaFuoQHyNgTqJ%2BlIirdm5tx9myuXb21dSwhBQSUhRKREbUxr7ET870myf2GH3l0oJZKVSNpPEcc%2FyoFjTdsbDM37LIwnJWJ3TQUtbbKiJnUN59qb8SGNN%2B6JG34aPueaLx8lsEH0q3P8AKaJYl9EVIaX3hzZWjK1NoWsH8QiSB3ockFW0RpPVC%2BHZRsmR5xZVCQZB336f8UqLikXHBWkHbdnFri5bt7S3WwiANKB%2BW%2FzQuMn0jTLFJL%2F%2Bmx%2BT%2FD5%2B0baxHH328NtVALhYKnVnYwlH05o4eNBdmHJnjy4rb%2F4Lpw%2B9ZYUhvC7U2jYGnzl7uqHcHhP0rTFpOogrFbtvZO8vYNc4o%2Blttt5xSt1E7gnjf8q1QxuRmzTit2XhheXcKwRgO4w4VPgDS0n8RH04FbeKh32Zfkck0ha9xfEMUX91tmkWdmIAbbOyh%2Fq7mo5y9BKCjthnB8tqWUPXSUoZ5AJ5qkrdsVl8nVRD2J4mm0t1WGEpQ2tUBx1Ig%2FApjl6QvBh5O2Q9OFC6K374lVu0dSgJ9Z7HvNBRqllcXxQMu8uJzHci1ftFuBagkNJkDmQD7UDxpjJTaVozzFg2G2Ldtg1glu1w%2B22V5f7zp5Ij6CTVySSroQpXsNZYyYnDbFzHHiXHNWm1QQY1ERqPxTcMOO2KeSV6DNjgpdW2Hg04dWwG43P%2FADzTErloas1ItB%2Byt8MtbCySUlCQFrEdf7NbHjcVsRLI%2BVsCv3N5d%2Fsy8Le21glDSuY4CjSJSaY6WRVrshWY3XtTgU6vyBMpJjzPY%2B1DN7NeOaor3Hb9NpZ2pffQywAAhMgDUewpDjqx%2BObfRU%2BYs0ptUhVu6U24V5aSOXT%2FAEmlt0b8WK%2BzWRvEs2Zsx%2FFLcJNthbKI85excUeQnf3pMMzb2juLHDHBSj2Re%2FsL3FceQxa2t8cuYe0lPngSu6u1CdLaOpAmTxQScnL9HQg0kpXsiWL5HevcUwNOE4U03h7Wtb7i3PMeuFkeqVDaeBPHahlCzfi8rjFykyR2%2Fhyu3zYtb1tZrdZS22hGkeWyDHA6xP1Ioop9C35acdBzAfCrEMNxHMthcr821fcWGUtymdpGxiBtxVTg7pkl5kWr9k6yX4buW%2Bi%2BxC2U8kPEOIIgLQRtI7A1ePAlujF5Xn6paNhMH8PLS8sV4jgv3i2uElIdt1GA52McHbr1p0sSZxMnmepFqZcycXbdCLptpxBUJC2xMR1A5q1hVmTLmrSLZwLw6s7VxDlpbICCJ52BmfpT4Y16RysnkNOi88v4FoS2gtpSRsfTINaceP7ObmzOy0cPw9Nk2XkjSYETXQxpVZzcuZ9mOI37jS0eWvQe460Zmc2%2ByGXeJXlveJfSoltKpWO470yMbGQuvorHNdyhF%2B6Er8oLSHUEHgHtSZKwrSeyHO4tcX2WsdsHVBarcpfRtOkTBP12o4QZMlQ69lU5nzI3iuXRZKeSL%2B3bKgmT6xS5SoZqLs0zx%2FxIv8IcULLEnbB5ESlCjPzHFKlNXs0Rbl6Le8PfHjEfFJ1FtZ%2F9vI8ecKaWvDHrgFpvNFqkeq2dKTu6EgxMyN4kGn4c6egM%2Fj0tMG%2BILnh94w5UVnHE8p4pbMW7pssa8hY%2FxHK10CQpLqCJdtyRO%2FTii8iEZKp%2BzPj8uSd4d12ax4DaP%2BAucbLM2W8SxK6wu6aKErU0i5w7HrRX4mnQCApJG0ESk781zHBY3cTuYcizxqSSf%2BSdZv8ACLIea8BvfFvwhu3LbKwcH%2BMYS40Vv5euFCfUkSosE%2FhXx02irzYIZPyghGHyZY8nx5Gym7fLVnp0tY3hrggEJhaCfcyn%2BdYqS1o2vLqgzY5Xuw6pyzubJ5QUFJLLwKkxwQZkfNDQl5YvT2bF4N4g4riuH2uXvFrB7jMuEN7W%2BKgf%2FmGHxxpd5cSNtjuOhroYfMUVTMfkYk3%2BPRLscy0r%2FDrXFLt1Oc8rPbW%2BMWkfemB%2FleH7xA6Hf5rTNQmrQEFwdxdla3eVMTwXRi2CXZv8IKpTcMSCg9lpG6TA61iklHo6cPKjLUlROsBxBd4hDOMtqU9%2BHzkiSfnv1p0JJFySXRfeVMvW115D1upC0RBKDEb9RRKSejNkXZtPk%2FCltMtJGroJIpiSRhhLZsRgWGQhpJSCf0p0Y0VK3uicWtjoOjTsD0ogSS2%2BH6gCAYjaoQfrwoKb%2FCQTG8z%2BdQhHL%2FD%2FAC5ASBvz3pDVBK0R9TbrDssmJ%2Fd6GkqCDi2%2Bx2y3YrGq5S%2By7%2FnaMifdNVKMfaDpeh8jCHbhAVYv292Z2QVaVz%2F6mglCPoZzb6E02twyspeYdZWP8wiqSpBOaXYYtEJIEASN4NLSa7KhHVklYRqSZGkdTNMiFLGqsMshsJCYTPc1aTEuND5KErEemBwJqwoL2NXrfV0BUevaoNAVzZHchO%2FWBS%2FjIBXrUjYDrvtzQuBAQ8wQTAMTMdRVNNdkB7qDCuZ%2BKFlpEZv21JnhvrWbLvZpgxhapUpWyZBO3WkjUiU2zag22JJV15p0JWJk7CSQEzqUEifmK0RehfD7EnlBWw3TO3c1TlQSVDdEhYM%2BwoYvZYaDh0j1SekU0CUfZ4FEpUFHf3qChqQVahM9fkdqpD0JrSUhQgjeB7D%2BVRqyxoWitUgAE9utL4Mgm5awIMRM8TVW0LnOhuphSVBcE9xFXy%2Bylk%2Bxu5H4j6R79au0aIwb6NxGbgEABSk7816Q81JNqkFLa5KZG5Jjmii97EtV2P8A70iNiDFM5ogkt9reVESZImlydsJRi%2B%2Bxq4%2BmZb1FPvvVJATdOkNlvK43Cj%2BlUFGLatDVbokHUZ3monfQyMPsS%2B8pV6oj2irot0tiSrtU%2Fh1I5mo0V8i%2Bj5V6RpOjT87VRPlr0fJvDvqSCKvQLknujJN8kADSQfmqKtPvQqm9bCSoklU8H%2BVQuo%2FZiq6BO6lH2FQjURuu9MKSlQT%2FABoqXoW6Q2duweVkDYzPNW5sFSYLdviStKFJSO%2FFBXsOMLYNevvSQjnqR1NQir7Bjr5IIUomJ3qN0Mk%2F%2BoHOvjfSoAE9TzQSnvRanGgTcXpBMLM%2FO9SM%2FsK12Bbi9jUSVRxH9mpKSoCU01SAjmIBJJCwkgdaUDHj7BL2KwfxAxyNVQNziDXsY0kjVM99qgDnu0Nf8YG8L2955qFynaMF4wCoy4kj46fnUAEjjUAy7122q6LpkexPH0%2BU7Kidt%2Fegc6Dx422UnmrMyUodlxKRyIPAoJy1ZsSro0q8U85oQzdjzkJbAI53pDlewXjUtHIP7QXiI4n735d0oJTKUKH9BFc3LmSf5F40os5HeJGZF3V2%2BtLillSj6yTHP%2FNcnKo3aN0ZJ9GvmMYl5nmblSzvEc%2FT60puw%2BSWqKjx4hSnIXCY69%2B00uYD8mnVFY4k0vUWwkq7KJmPapFR9s0RkpLsiVwm4QpQKUKHBE%2Fh5rSoQelICUFQLUyVDTEEn07xV5Eo%2BymmJhh0KRLjkzMk1b8pVTiKnmldMNWBWFJBU5I9XPWs06e0SKjJ7JxhjpABUs6Y6yI%2BtKNWukWlglw6PJIWUCJ%2FEdqZBiJKSLwy1iztuUaFq1biaNUApTNkMtZjuCloea4PT0USJHb2oJaDjJvs2cyjj1ytCB5i2VKSE88T%2FOol%2BhywSas2BwXM5b8on1K2neRttRp2WpSj6smKcw39yoBkBnXIgflVmzDl%2ByV2mH3%2BIJSlx0BZO5Bg1ai%2FQayIsnA8g3N0guXZbtLAQXH1GEgz07n4q148X2DLMkias22EYOfLwJhCnSY%2B9ugFZ76RwOu%2FNOhhh9AwkpfyC2D22IYncgJCn3tRQVqMqMdZmsksKlKqLlxjov8AyzkcJQi5xIhgbEJPJPwK34%2FESMuXyF%2FpWy3rFbeHMpt8Gt1WyePNP4jWra0jEoW7Y5Yw128c1Oea6tROonk%2FWh4SexvNRJvhuDM2KUu3AJI3AIkj2puOCWxcst7HVwt5adgQCCAAOBTWtB%2FHH0NbbB1XDpSn1LP7x4%2F2oVD7AySaWux1c2jcptGpLDfWN3FdVVHBC4yrbC9rZDCbNy8Kf%2FnuohoEf%2BNJ5VHft9aZwpA5J8noA2GWVYniDaHEKQ2SFKUew60qOK3se5xUKQVzLiUXiMMsUluyYAbB79z9abk06XoTiS%2FkxXDWiynDjcHS48rVAH7s7TRwdNFOSdhK8vBcYs80pZ0oTJIG%2FHv1pk5tsbj%2FAI6Ig7mBlLy2LGFJCT6indZ%2FvrSZO2F8S9kDxS%2FurtYceUDbgkkH94Ut5BsVRRmcU4lj%2BO2bSUlrC2rfUSFEHXq2AHQRQN2dDBKMY37K3zJaXF1iKLO0Q640kEMgI%2FEs%2FiWe0ClTi2dLxmlH9hLAsp4w2yhFukoUpKgoKEpUY2J94BNBwa6HSzoUxnJGIGztMOskli2bYV5wZEKcUoEEA8yZ56UMsc30zRg8hex%2Fb5GYtBZ2LKUM3ttbNoLbKQW2UqIkf%2Bx0%2FwATUhjGPyO9loWXhwlD91j9yy69dKSV6SNnCPwiOIHenpUZp%2Bbf4oLYPlbErvErR26t2GGw95pWE7woDngUSSbEy8qlRc9rkiydtUsMWbba0kkp07r7gmi4HOn5slKwpheS1YYW221KLYEbnkT19xUUUvRnyeY5FjYdgTaikFtJMCTB4plWZpTfZZ2C4GEISgMqSDvJ%2FvinY4MyTyaJ5aWjVuAkpSdPbpXRiqVHKnkdjtS0KacQlwgHbmiB%2BR%2FZE8Qbc8twRqPQ701QL4IiOIqcXbqUn0voMEjtVuK7DjBFW5xDV5htg8lYRdBK0dgYO0e9U4%2BkRrorHB7h55OPIuEOJSbVaVq4mN9%2B9CosPJdKjTjMucn8OzCVNlUNiCnkKTMEH9aRmacg4x%2BzWXxUQGcRXcWi0GyuGw6kjgyeP5VhzQdnS8WcKqikLZ%2FEcOxG3xTCbq5s8SYdTcW7zKilbLiSClQI4I5ml45NO0OnGFaZ0GyfnTEc92l14u5Rs7dHinhtui2zngYSBb5qw%2BN7lKP84Eg9QZ711sOV5GcLPGUZWkY4%2Fl%2FBcKwdOccpWj%2BY%2FBfFzrvcJWs%2BZgtySNQSOW1gnbgECl%2BVCSfYEYye06ZF8voxnwgzDYZxyNf2%2BK5bumy3ocAWziFsr8VvcJ7bmR0O4rBNcHp2jp4o84fn2S7N3hjlvGrA%2BJ3hyzcf9qvuAX%2BFqJU%2Fl%2B5PLSu7RJJSuhzePyXOAePO1L45ECt8qleoBlBIEiU7k81hjha%2Fka8sIp0w1YYVe2aFeU7cNIjYaiI9qL40BcV6JxlrMWOZcdWbdDN3aOJAuLd1HoeR1BA6%2B9aceXiqQvI4PpEmvMOS0oZpyUt62bWIu7NZCi2eqVA7KSelP5Rl0Fiyap7%2FAPBMMs2WDZnkMMt4Xi4O7J2bd%2F8AU9D7GmpJ99gTyTh3tF35Vy%2B%2Fh1wULYLStQBHEUzhQiebkja%2FJljqaZKoWO8c0yCEF%2FYPYaUtpCd5njmmFUSxFkguDVqB5qFhu3txMJGw5qm36IFvKSGSUiTHNLc37IRfErYLQuQdW5mglvsLmyHPWwSVH9JpLgxqM0WYWAomBJM0AcYXszDDaQFbk9DHFDO6DjCmKm5fSgJL7qm5%2FCo6hVRmw2h3autEjS3pV196C2B8aD7DqCTJJTzEyQaonxofJfbQIJUAKuMqIoIeN3YCtjJ3G5o%2FkC4r0PWlhad9ldIqfIixRy3WoboTTEQFvYeFJWOg470Ep0QjV5ZKZBUE6Rwdv1pbbICPLSfxDYDYChbD%2BNdsB4rbDSv0bQR3pWVaHRa7AVm0PMSASADq4%2FSsoc2SJlAJCiJI23MzTYqhSY5WkpI0pAT3piLGzyCAeY6T1qmkQSQYUk7x2qyBdoHeUq56UcZa2Q8IhUGiUkVRgrgng9SO1EWNndgpYIP8RSpvZBFslaxxP6f80KjZB6UoKY37yelNdIjQNeCiVAbmOppTeyqQHuXJXoCRAA533pU5uxkYJ9m0tvfBAQAn08mN4r1XK%2Bjy3Nhdq8SYOtJ6TRL9ktPsfi4TCfWJPXvRyjSJxT6PC%2BiVHWnVPehonDfYkq5AmNM1Q5aGTl0J2BUf0qFtjZy8nYc%2B5oJQK4v0MjeKnUIjuelDKqEud6MF3jp9OvjmOlHwRXF%2FR797XuCtPaRRsL42Il9RJlZjnniqK4P7MDcqASkuDjaTUIoMUF2rgOIVttMb1C1B%2BxFy%2BC53SE9gBUK4r7Gv3wK1Cd%2B3YVLRf4iC7tYUI8sCOnSoFcf%2FAKgW7eBJGpUE9jxVoFxXdg96%2FBBSkkGORUoP5EMXbxySQoJHzNC6YpybGDt0qF6lk1VKi4xT7A9zeAAkSTO4IpTZUu6%2BiPXV7AI1T7dqi%2FYziqsi91iChrK3I2gVUpJAcb%2FiR%2B5xQggByI%2FhQfINeHQBfxaVEakp9%2B9R5EAsf2MF42QkgKT2qnkGxxRGi8cUJKndW0RMRSnnsL4Y%2BkD7jMqEBSvM3nmq5otYyB41m7S0vUpPfY7miQ2GOjW%2FO2eEtsPBTySACYKulLjl1TGrE5bOePjX4nptLe6S2pts6ZMnk%2B5%2F4rK5u6Ql5vjls45%2BNviSq9ffAc1yDsTsB7VxPJm3KmbLjNWjQjMGYEvvuKUpGpSjq3kz%2FKs4wr2%2BxALCylQGmBMwSapsuKdkFvrlDid43G5NKszZYvkRa8UCTqCQRxvsPiqLxZkqTRHlsplwuHR0EirT2HPyU3SGX3VAluEhXbp81cpN9gvKpaSo9FolJkkqI3561HKy%2Fgk%2FYXtsOQoKWsEmQoSRNDZF40r2yR2tkptIUAVJOxANWW%2FHmumTnB0oISlxZkyDJ4NHAFLInTLfwNMJSlRQfadqYh712Xtlu%2Bt7dLP7RoqieeDH9%2FnVIZNRSTi9l5YDmFv0No%2FaApgaSOfao9lx8mUf8GwWWMVaulNKCdMadid%2FyNUovoYvIk9UX9gD7b7yFJb8xUSmB194okr0NnKui6sMfs8BYTcYiWHb1adbdnq3A5lfUT2960wxOjFLJsNIzbfYvcoQ%2BoBoR5bTY0pQOwH86un0Wpp9lm5ey8%2FjbjSwgBJ3lXTvTccNDPlpF%2BYHh2E5daS0ny3Lsx6jB0nvNPUV9iZZZS9E3sLpV055rhSRsNjtFGogRu3ZOLFbayAFDbqKKMCpyomVq%2Fa2jeolIVtJ7UwQ8lsXcvkKhxbgM7pBP4jVl2ZtXLa1j1FZKeg3NQgTN8zasqYQ40p9UazO4H%2BURULHmHeUQq8uVEWre5H%2BY9qKC2DJCN3iQurmSpK1SAIj09v41U7bAprZIW%2FLwuydJAFypMqkg6R29uaasbS2DGduiGs4cq%2Bv2%2BUBZ1KHPpG5pMY2a%2FkSWw9bttXOKG5EkgnQJ2CRsIprxvtCGvaBbVgpeJvOSF6woHoeOtA27G4pa2Q3%2FDfLuPMCEkBUFUQIneaE0Kj5eEIDj5UkAICtiAeeKt4%2FonJkTucvpSttKGkqWfxKM7f70mUC07YwZyihd2XltJccIhMj8I9hQWaY5GlQfGWg0UOtoa0pTpKSnYD4FQL5QRiGVXLsh5x0t6VFZSkwdhtJ5jrFQfDMHcs5QQQ5d3CZWoyuQI2HFRA5%2FK0WIrCS%2BQ0pEM7QAeKbKNil5K7H1tg7bTilqSJBAjoBNXGKFy8mye4bh%2F7VOxDclQ35o%2BEn0ZpzRJrfDG3l6m2vUNpG4oo4pP2KeaK7JPY4MtBQSUpIIiN%2F1psMErtiZ%2BRGqRP7PDvKaQCOffrW%2BEHRglNt6MnmglKlFzeY3%2BKPi1sXxa2AnCUkbAHsIpkXYcJN9jK5dUpJ0r36yeaIvZCMRcQlSpSlAOyvelcwJTaKkzGlSsPeQZK0vEccAj%2BNNCk17KxxHEmcFy9jBdcBecbKdOnj4qMZGaZzozbeOqvrh0LC1FRned57fWuZkg1LY4hC0HMGDX%2BFKCXby3QXmBwdM7j86N7VBY5NOyAWWAuLuNKmlatRSQTH98Vli%2BzZFxe0XL4fO5hyRj2FZny88tjErZ2Rq4cRMKQtPCkKGxB2j4pkMnHZJ4%2BWjcltFhgaF%2BJGVcMN34e42oMY%2FghMpsLnhQA%2FdPKkntW75LVowuDT0RLHsqMZOWm%2BwtxGMeG2KDW1G%2FlTzt%2B6tPHvWCeK1%2BKNOJ3sVye7iOQ8dGL4M8jEcFuGy3cW53Zvbc8tuJ46%2FINVhfHroe4KcafaLJxzINhbm3x3LMv5ZvRrtyYKrdX7zS%2FdJkD2qs2FS%2FJvspS%2F0kFvcBVbpIU16SNiU0l%2BOvssCvWPlL2Cgr900mWNog7wi4u8NvTcMhOkwFIPCh1n2qYclMpx%2BixrHCmXHUYlhqW0NLXqdbndBnrXR5qhMsb9s2hyNcIvLS3YxCVuCAHTMp9ietOxNNUKljpWbNZUsiwllqFEcpI4NNSoVyT6LzwhEBIMQON6ssPmJMwTUsgUbGkIPII4oJyaLUbHx%2F8AGIG8QaW3ZXuiL4k8UBXpKh1mgm6Q340RV0BSoGhSuZjYmheTQSEkLhW5A7TSYtehkH6MXFp0plQBFW43oaNHHkiQVJI6xS2lHZBNt%2Fy1ApKUjnak80QJt3xSYC0mf40SZaQ%2FF2oQoESOKGUhkYfYs1dqCySokHfnmh%2BQNRT0SGyuQQn1fpzRxkBwRKm1JUkFKp7jtWlCjF1MhRn1fFC4pkAGIM6kEpk8xJoZRotKyHuICSZBJGxM80sbdaYHv0pWCnmaVklqgkBmrdDao081njTI2Em1BKwOANwfetEVZVbscqUDPpUFfNE4FtiCQTMAQaXJNAuaGwQtCgdvzoFBrsILtnYHVBP6USILFslMnb6URBm4DISJ5296iZBq%2Bk6JVM9qjdkEg2oRpIB%2FjVEFivSkpK5B2NW2yDFSp9WoD371RGBbtQSFwST70Lgh0nS0X7b4hsmdHSvSRdHk4unYYZvY3SoEzsQacnY1U9hFF8FRJBTPPX6VCJJdCv3xDggxHcbRULe9Ca7pIKiNhHFQkddA9y7BO2w454%2FWhnIHI32MlXYk%2BopA7UvkxKbEPvYJ3Khv0NVbYVt6PDdgmCZNSmA1R4m9RMhR%2FwB6NwYz49mP3wQBEn5o4qkNbE13g3EgifyqyUntjdy7STq1R0gGoDwQkbkQo%2BkjuTNQpwQku74IIBNSwkl9A929WSTO3zFQv%2FAxcuBKlKKlCOnSqbop77GS7lMakkz0kmgcrKcEhk5dGFEmd%2B0VJSTAnOxg7dSVeveYg9aWAB7q6SkHWozEd6hKIxd3YSlRUpUnY1CmRK%2BvJSSCT80mfZrxxS6IXiOJ%2BWI1aid9jJFI%2BRj0rIpcYsSk%2BsoHXvU5sqUPsCXONeUVnzCRE7GCKX81gqKI9cZkAKtDpEGDvue%2F8KnymhRRFMTzYEB1KbhQI7nj60p5aLUE%2BinMzZ5Uht1BuNeknYkdu9DPJZTTNOPEzxOLDL83Gr8QEHTBjbegn5KQcMlOmcrPGvxaWsXjCHipBJUqF7p9p61zs%2BZt2gJx5SpnMLxCzsLq9uJWtWoE%2B09qxyn9mjHhS6KDxLGVPOKU0tKVGN%2B5pTnY9QRHXcSUlJKiO8Tx7RQDGB3L9KlKEwUj8hVoz5oprYJNwfOIcIKCN4Jg%2FwC9NqNHNlJegc7q8wlKNkjYKmCPejcY8bDk4pcr2Ygba0JJREp7T89KCUoVoCOatoettArTOtKgJ5%2FSlUPXmSoMWr3lwoIJBGoHrURsx5G1vsMNvLKUpKUzII9x2ir0OJHY3LmlIS2joOZiaLlekKlDiTvC724JQkBKD%2BHbrRq%2FYBaWXnnDpL6iFcCDVkL6y9fstNty6hJBkDmonsppPsv%2FACbi91iD9tYYfbvXVwtYCdPJPsKcpWXFLpm1OFZgtsototWHGb3H4HmOJIItT%2FlB4K%2FfgUQzl6DlhjbeIkXFy6VaiDK9ySOZPehTb9EtUXzk1tu4dYKWwllInWRwnmm4o29oTK2qRe1tmyzw62bs8NOpwJ0qdAH6flWlySRccMpfyDWH4%2BXFhallSlCTJmfrSVKxsMaXRY%2BFYqt4I0mBp4PSnQsVlmkTRnMjdmC1qQXCAZnn5rRpCLsdW%2BYy8pd0p1fkJA1SdyZ4FTmiSwpLY6TmJdypISsIQfSOsCiTsqOuiTJxlWHokuA3yhIA%2FwDtT%2FOiHfIOsLuXLtxTrjpbt0ypxZP4R896gMp2hziGZkrSkNEItwNLKJ57qVQOaKjG9hrLzjVtbPY1fKVCT%2BzBMgn2703AqVic63SHeIZiRKG7lYLhh1zeTJ2ANXPIFjxfQsnGzZYZcXYTDryiyxP%2BUfiV%2FKpCTWw3C3Q6wXFLdxxxPmAueWTt8VUJtdgzx9BDDLtL900tRCAp0IE1FN2RC79k2hb6VAzr78fNF8iGRnQq%2FhrardtSGtRcMqJ6fWgk2wKGRwdC9BCCZ6jkUpxfYSlQ7ThDbQVCIXPp3qKH2FLMIuWOhK1rQUoJ67zVuKBWZWMWcH80uqW2dRBCNtgPjvQ8GaFksk%2BHYeEoQ2lkokyRH6UUY0VYbTZqBT6QNwqf5TRlD9qyBWCUEE7md6oD5SVWFsl0oQhCUpEb1ox42Jy5kt0T7D7BvyE%2BkmeJFbljSOZlyOTskNpaJSEwk7bf801RvoFQvoOIQENhJKhHvImrivVFcX0AbxSEBQBSF%2B%2FWi%2F2BeiGYheeQVSTq49qpyronyMiV5j7YJkhJB2%2FrUSadsNY2yH4njHmoUpolXAif4UTmhsYtEZxXFbGwwO%2FxC%2BdSliUlWriRt%2BdEiNXo0pzz4jW2It4upgkW6UFDYJAAHG9DKO7NLxwq2aQ49mJLt8paVKMgqOlUx%2Fc1izSTdstySGmWsSbZx20uyhWlSkoX1lJ5n86x8kpXEizJviW%2B3gdqziT7TKD5alaklO4g8fpVcXdo3x6VFn4Tg6QgEwSduNwJ4q1BLY%2Flqy3MiZgs8qXl5hmMW6rnKeIti1xFkb6UTAdT2UiZmm4ZKLtox%2BRj9oWv32PDrHMVyHmpaMQyTfEOsvgykIWfQ%2B2fgifinZJcejNGUfRFEW91kzMScJu1C%2By%2FcwplwbocQRIWkjrSJ4m%2Bh%2FzUr7NmMg26EWl3g7q1O4HeBKkH91t391Y7HoadijqmKlKT2hpi%2BV3WVXNvcsnzEEiANh%2Fe1Cse2HKbrZWWJYI2zpS2CVADcntQTwlRlYwawxCfLKkw2RSViSZrJ9gTX3N5twAqZUAFJPFGC20tF%2B5ctm2XWVoTLauADt8bUyMX2hPPezZvJV4AUsLPmtqiJO4NaFNiXiV2i67RYaP%2BgxBB53oI6dg0wobhOnUZMGOaZyV2SmFbW4kNqAPv7UueVoOC2FVPJ0EKOn4mg%2BT7GEUxR0AEpUCZiD0pctuy4unZEipSlfujfoaByotxfdCy2wEyDqJofk%2FQUIO7YGuLgJBSrn4mkPK%2FoYDHr0CQOTzPSkyl9hKNiCbtWqAoE9NqD5KH%2FwBuh6xeeoJ%2FCe%2FFT5WU8CQVTc%2BkbpI%2BZqPJ9FC6Lkzz89RFVzY2E6QcsrsJWlQMHj5qubBk7dkutr%2BQdW220HmtUZIXJWFDcIUmQR7z8UyxbiyPYpizNutKFArUpWnnj3NROi467I%2Bt1LiiobJJk%2B9KkMQNukACYHbilSSLBBCCozqHb5qowXZB222lek%2BkxsfmmqF7INXXA2tSSAYMGiUq0yBC3WhxJUQSCNh0q2rRDx1AkGAVcR1pbjRByyAQQNun1qiBZtCA3BVq45p0WQHvtBClgAKH8KVLsgzWAkpSo6kk8zVFxpHjulKvLglUTz%2BlXZcmm9Au9dKW1FIOwMd6GUkgEge86UNNgA%2B8f1pcp6CSt0Abt9KkLCFqnr1%2FWlpWOSotRnESCIWII7V6k8gFWMU0hJBO3aijIKM60EWsUBhJUZAPIpraHJp9DtvExq3WCBvAqNlOSQqvEkKjSrn%2BFDzQHyIbOX2oz5iY6b8VHGy2mxqq8SCSV7Hudqpw0C4UhJdylJJCpG1DtExrY3N4pX74B9qextL2J%2Fe3AZJCjzO1UL%2FI%2BVeLnZwDfqeajZVyMVXUylSwentQc2Vt9jVdymZ8xR6CavkVVbG6r1adkqE8Deo5oZGa9iKr1MEFwzRBjdV6PxagKXKX0LnJpjRd3EkqgA0Dk2A5N6YwcvDBlQJ%2BaqgVEZO3YKpkT81C6YPdvdwqSDzvRUqJr2wRcXkJVKp2n5oSteiMXl5qBlWwESDVMNX0RW9u5KxqVx%2BlInLZsUaWiv8AFrw%2FtFhX0BpMsoceyvsXxRLKVFUBQ4M8VnnNt7H%2FAB3sr3Esf0nZ0CEwPVwTSHJ2U8JX2JZrUgLCnYIPY1TypDYYWVbmDO4ZSpKHyFbwPrWeeZDVA1pzx4mLYbfKnfNAlJExG3vzS5%2BQqLeJ1ZoL4o%2BKDq03DX3xO2%2BjVwPkd6ySytgUjm34mZvuLxy6UV8zJB%2FDJ7dqF37JSNO8zXq3bh71lSQDHv8A70iT2OhVFTXuILDpha%2Bo%2FD%2FKhBnka6Vgt7EyrUDqSZ23mNquhCzTbutA84gZUC6dcnrtHuafBqP8kNeSLWxBzEFjS6VIUJM78dtqeoQkD8cJfxFUX61x61JVIOw5%2Bak%2FFS3Znngiuwmh4JbC9ajCZ5Hq%2BlZskYrp%2FwDyZ3BD5l6VHUCBMSRMGlyr0SKSdoeNLBKCDvx9aE6OBtq2SCzdaDiVzoIEyeR0%2FrUH80iSW1yy0UD8Z9hyTUTKmm%2FYct8aSHEBAAA3n9Io4ydilBkuwrGH9aVBxc8HSqmWUXbk5d3it%2Fb2dkh26uXFBCEp3M%2FFWim6NvbHNmFZAtDgmD3bdzmNTRF3eIPpYnltpXtuCrrwKtOg4Y1LsdYRm4qDbouFOAgSSfx%2B9SL2aZ8FC12Xzki7XiLzX3hYat4lSlduf5U%2BzM8n42i%2BlZ6bt7dNhhj5DCISVJJBcj%2BFVKX7Ajk%2ByQ4PmZTyEpdeTqV77AxUw2wlMt7AMaW8WHBITwVf7Vqxx3oDJmalRY6s4tWKUs2yw6%2BRzNOckkJlFyZnhuP3eKXCbdLgccKjqUTshI3JPYAUCyIF4GlZIXM1tOKRa2Vw4q0RsFDlxXVR%2BaNSvoZCL7snmGYszg9o3eXKgrEVo1stq4SOiiPrt%2FtRJ0VJphTDLt%2FE7hRU6THrcWT%2BEdd6vHJvsJuPok68aQ40thlxTeFMKhU7F5X9f4UyTAsxwo3GN4o0nWUtkyQOEpHagj2X2qLBvsRAWW9YTh1onWqOHFTCRRTlXRMWJEItXcQx3GbW3StZdfdGokRCf7%2FhQJ26LbpsI5ox8O4uu1s1H7lbgtNQBuAefqZocr9IikuwplS7eViLcuk621gA%2FHFMjBIqeQkqLp62QlaVBBD4UBPajsqOS9MneIXjqX7Zxta0svIS4COsjemSSq0KTY%2BRfpKgwSBA2E9RS0yubHCL0AiYO8men1qUWo3sdC8bVKSpCARHM0bbfZHifoXgONgBS44%2BadHHH%2FcFqjxLKW06JUZ67TRuKXYSyMfNXRSgkOGZ45pbivoi8h2PLe5M6Q8lJ6Ep2oljQfzsL2pbUfMWskjseB8UccaQLytbRMbB5pIQlKh353rVBpI5%2BWLe0SmzvGwgJCgDHemxSKjHewwxiKEFKlqCQdtt5piiltFqk7Hrl%2B2BrK1AdZn86sJZEQ7FcUQSqSmASKgPK2Vji%2BZGWwppbo8roeqaqkFwRTWZMzi1WpCXNRVuCFSCKktoqWlaIpdZ1Ywi1Xe3t62zbJBLhUeBHA96VBK9gKcm6RrL40eML2J5BfusNeVb4b%2FiGllKeVICd1H5Jg05hzlKK2jQ7HPE5ZwC8ccuT5jrmmTO9Inl060Z4OV2ij2s0v3d0mXQpAMACd9u9cqbbY1qc3RaGWL119aV%2BYEKB3KjsmgWts3%2BP4tG3KLptbODXanAXFsoKlA7GKH5JXo0206JfhuOJbaQ2y4kT%2B7EA%2FWnJug1KVD65xIOsqlcyCJGw7bGglGfoJzkHRc3HiJ4eYhgBPm5my6hV3ZLnUbixUYW17lBMj2rdgh8i%2FJ7OXng09Anw5xa7zAj%2FszG0rV5J14Y%2BTJQefLJ7HpUUZLTJJyNzfDiyura2Njco9IVp0n909xNCm2xkJXovPFMFF7bC4KZcCNC9uT0JrStINxfs1%2FzNgKGn1mAkbR7b1XaEynvRAv8PUXEt%2FtUiZHx7VnnjNMH7RMLGwcLLah5hPAgb0ql7NXPVMt3J7q1JSw6pPpV6dz%2BVW6qrM7g%2BzYDLKvKU0Y0zt7VIpeyKy6bHEClGlxWpB4HY0SyIseffgAka9XWiUkyBewxAgITrSoE%2FnSZzd16IHlXKdCt%2FUOBQ8kREVvnlrbSSYg7gGiDWNgJtxfmhJcPxVWgoN9MLag4yoknXxv0pMq9BkRxZen1BUR1rLkdBwjshrl2SVEb79TxSXJvs1RgZIuevJ5maqxlMyRfrB0lY26E1TZKdBe1xMgJIXAParsGSXsIpvlnWCQs%2FPFQFwQcs3luJSoKA378GoVwJDbX0HRqAPtxVp0XSCSsXSgKlYgbHf2o4z%2BwJJXor%2FGsVcuLi3bRJBXq23pzkvQDVkisF%2Ba0HFmABsJ4oaLELx9UFPmFCY3FBN6ImBXHFtt6hBk7nmpFog4w%2B6XocKgEDpNNjOiAy3W47eXqXFajrBEmo1eyEiYQUoSEEhUxxNMj0Q%2BdUs3DiSohCUgfJ70udlx2LhQTCvwjiktsN4%2FoIB9IZLkmQJHt7VcZgqDsZqc8xBc1JK9z8UZfBjAOk3KZKtIgETQ80AetrU48%2BoqJIEA1adkBeKkttqEiVED4qTSoiQNxBYat1KCiklMDfk0hDklZDn3tKvJlMTHFGp0ug6LGN0UgAAk8969KeOFm71aYGrYR1qEHbeJbKAUesdahBz%2FiUEBK9%2BsnioXF07M04l0Cj252pnyMZ8z%2BjL%2FEAYghQiCZo1JBckKC6B31HnvUtAxpezxVzAOlSdU7VUmqLc1Qmu5URsqenNXyTB%2BT9CirgEQFAHr7Gq5ILnESNwdXBEHgGh57YPyIam5UCFEkEe%2B1BJ27BlOxE3gMyR8DaqAobru4B9QVtULGqruN5I6CTxUGKYzdu9wAr08c8VAZOxsu9Mjkk9agIydvNQ2KT05ooui4uhi7eBEq1EntQggt2%2BmQCE9x2qnJIJRb2gLc35gglMxuAaU830Nhj%2B0R66vtUkKBJE7UiU2zVFL6IhfX6kKWgkqVG%2B9DyY1JMgmK3qghcmO8GkSnZFAqPMOKpSp4ORHuaTOQ%2BEvRS%2BP48WAvyyD054rO8m9hv9FE5lzp5JKVLlUnr%2BE%2F2aTKQ%2BGWu0a65t8QlNBxC1oUopg%2Brf8AjWbIpIKWVekal578QnXEXClPBeoFJPEfFIu2Kc2zSvPeaH7hTyw%2FMqgTt%2FCgctlRhZqVmq%2BceU%2Fq1PI696tTthSxNKygMdnzHUoCUq4HShl2UoWrKwvUrQohw6lmTAOxirgilPktEZvFQhUpAKgSBTYVdsG67AK3neFTyQDzzRZGpS5Iwye7Ril%2FdKSpw%2FwNMjnktINZmhxb3QQZSkAdh1ockpS7RTyNuwzbvFRQ4DJmRJgER%2FzWQFu2SS1uCJKgVK3OwqhU01sLsJSFlSTAVuB2PzVm7D5FR2gm0VBxGqR6TIkb1QWaUZLQ6%2B8qbCQndB4BMfrUZePJxjsWZv4WjduQSOpIqyf3KJfhF%2BXHmmm93FwnSJ3J7UULukJnmV2bM%2F8Ac9r4X4IrBrUoczpctg3TwVBw5sj%2FAMQI%2FfIIk8jcVrlNRVNGeUm3%2BgDgmcHLl5txT6go%2FwCZUg%2F1NZ1tGuGZVRsZkW4cxS5QVOxbghSldABzFFHtB80X474js2DIwnCbhSGBGtzbUo8R8U5yRILQcwXNzj6mgVEgiCBsD14pTV9BF6ZVxK4uUt3K3CkTuT12p%2BKLWzN8km9Fr%2F8AfTOFNBkPMtuxqSonmmyml7HqP%2FUYYdnW6vrlptsrdfWvQgAEqk%2F5R1pceUn9hW0izbzNpwGyOXLV5t7FHfVfOtEENxv5ST1A5Mcn4p8VxVCuTl2WBle9GFWTWYMbBUtcizt1mC8QPxR0QCfrRY8nHbA4tuo9kswjFcQzBiAX56nSo6lKI2THc8ACmKdsZLC12WfYYq0%2F%2FwDlOFOhNshIU%2FcTsY5JPbbamuSYqONof%2F4ww8GmLZKk2iQdKSYK%2B6j70FBql32WVlVxNtbXN6ACtQ8tszJk9qfhhexOTIktHuNXxYLWGIUlSworeI3CnO0%2BwoZ%2FSCxT3bClg6nL%2BHW92pSU4ve7ND95pqd1fWNqNJKP7Kk%2BUt9EQdcDt26pKgo6yd45n%2Fes9jKSdImmW1FF9Z%2BpM6okGKZyvQUsd6RLcRaWkNNkaVSVfWf6UcoehUY1pkwtXBd4TarC9TtuooVHIT0%2FjTErVA1xBwuih4uJWBueooGHJWg6l5DnlvEJAUIUOgNXF0CvxQ7bdb8wkqSk8bU8rmGmbpMK3ARAg1P2LErq%2BCQfKKQeQfarbtlOVAR3GktbLWEAiBuI%2FwBqoU6GIzM0kqCXYE9SOlRETfoN4fm1BUBrSJHfmnQlbokpOiS2%2BbmmFoStxMRFN4L7Fcn9EkbzawBrTdI6QOvzTIULld2P0ZxZKTLjao%2F1b09NJFpx9jq4zakskpckGE7GQTV8ipV6KzzNnpu3acBuEI2JJnpVxdouLfSNYM4%2BLCLZx1v76AmDB1xPtUJyf2UheeL9ky46rE8RbRbHdKlK%2FAfaqlJIFZZN62aYeL32n%2F8AFcUewa1uBa4YwsoQkObrP%2BY%2FNY5ZVejTjpK32BMX8ULd1tnw%2BuLta3WcG%2B9XKVCPKunCFxHsFJFMjmUtNiskp3aNec4OqD9th7SxoSAskHgnaKw58lPTKx4L2zPBsOelJKStA6xye4rFLKo9nT8fxV77LswC2VahKiADAO6ZEd6XDy8b7N3xJLs2AYxZK8u4G95wQuFDee%2B89R8U7%2B4r0Y5ZOL67C2DYmzdLQ0lxSiQCCYo1nv0MjlTLgwfC3byySpoAgJgCeaanoaqLH8OsDu8EzXhuJLQpVuT5T6E9W17LT8QZrR46cZcjH5b5RqJbln4PowzNN0ba30MofU4wuBJSTKf0NOcmjKlNr6Nt8u5XKrVi5UyU3AADkiZPeijJMkcdO7LGODL%2B5ut6CfTMRv8A3vRNDW2yjs5YC4VKU22VAiaGKpGdxfIqZrBXlPoPl%2BtJ2APSlPs1w7J3heEkJS0tsJUN%2BKyoetk9wfBW2H217bHYdBVhRik%2By4MGbQ2EoVKhzJG1QKUEywWXdSUSSlR6jtSLpiZWhU3KYKVrmevUUfP9Acn9BC0vNCkhSjzzRckNxPbDyr%2FSw4QRqquQzgrsGuvKcSgKAMxFGECnnA3daQEjgUiS2WgkHR5R07z8UDeguLRD8dcjWYSTBH696zZOtDItt0V%2B7cKDqgFQPY1jU2aowdCvnfh4iCBTwnaGr92POWlCfwiPk0qbGRbqwtZPjSJWUCdp5q4PRU69kiZdlJAEzt%2FzTBNWw3h146wtKFGUEQSTUKyQfoNpfABWgSqDI5%2FKjTj9GdMFXN%2Bn1gL1K6jbmrik9l%2F4AFsFXN2g26St0mEpnnen8NFNktwx9zUtl1ISQSFA9IoGWkB8WvFMP6EEr3%2FDPFJyxp2FChG1ukLu2WFqCmo1GSIB7UcFTLlGtkl%2B6lu3beQQGlCTB4mjr2AA8OQtWL3KTJTG%2B%2FJooPYDluiZoOktpUlIiSYpwLbQwQSVOuJSDKydW9BNasvmIurUt1lqdZKhz1FLQcJutC1%2BFeQUBZBJjaNxU0HyZgJQhS4JTwI6UqdlcmMACt1W%2BnfczH5UEVZRk0tDTTyy7K1LkSZ2pkVRS%2BgXiL2tDC9SYmdyKPQabXQCxK9LzSWiEjfYfFLlFdjY09kaISlRcWkgEiJM7%2B1LDjKifqdUASADzXreB5L40Ni%2FCE%2F5tjsatRQXBHn3pRBlShvVPiDJRPReKkQqP6VX4g1EyN5yCoA8HrNVUSqj9jhN6lMytREcVOJVC6byCQVgjqKriy3BoWbvoJlQT81HFlOLXZkL0KMhwE8VVMqz03UkHUSIgxvVIpMSVdEfiX14mi4MLi%2FobG70qhSgRxzU4lqP3oQXebJA1Jj3qOJKj9jZd2RACinaTvQk0v2NHLqCoBUDioCMXLtAB3MVCWMl34nVr23%2BlDN0FBJ9jJ3EkiR5iZifp7UvkxnFAt3EEhSpVAAmRU5sYo2Cbi%2FBBhX5nihbDjCgLdYiknSVweoHWlSVBrXRGLvEVkr8t4pHY8ChTCte0Rm7xRAWvUr1fpMUmd%2Bi1Fsr%2FGsVSlDiQv18iO1K5IcpMpHMGMBPmr8wkmRudh8%2B1JyP6Dx7ds1vzXmHSh0qcQEyZExArNJm6GFM1WzbnFtlT0LJMHn93fjpWWU3Yz%2B2j3Rq5m3ObLheK1lMermB%2BdJk%2FbE5cSS5KzWTM%2BY2brzwp4CCrgjahTSVEhOHs17zJiqblSmw6lRImFfxP0oYxscs0IlH482VIUUGfYCaJRoTnycuuin8atEFLoOpQmBO8UM17Bx7RWGIWyxJCNUcADkfNFGmVkbrRDb%2B3d1JGvSjlR7%2B1SUktGSUdbRGXGwhRUVEpIO1FF%2BkZmvQyL7YIBWEpiUgK%2FjT1gk9l8H7FWlygKAVB3B%2F5pag3KicQpaXBDYWp4oP%2Frx7k0WRKLrjb%2FyMi10SaxdSVtRpWnf1HaNt6rLhpcmqKyvVslrGlIQAdQidj%2FSsq6sDDOTWh75iQVeoSRJBn%2B4qjbHKkqSGjylJKpcGnvOw9qjf2LzZtUgS9iqR6USVEGTPH98VaRkTLqyZct5Iys74lY6y2q7W4pjBbZwbPOjl4j%2FKj9VVq8dxTd7BnCWqKyczneYhiL17c3arp55anXFEn1KMTO%2FuaZngpLkw1FpbLUyZeXmLXtpasqc1KUFKUnhKaRDFL0R62zaN%2FPDOXcORg2FvJD5SA64TCt%2Bm3PzVy0yY4uQhg%2BbnFuJUt5RkGTz%2FAH1od%2BzRGDi%2F0bDZKvXbpy1dW4pLE7EJ4%2FOiiiTzKJer%2FiLaYPZm1Q7%2B1iE6FA8dOZqRk0ysU9kYt8%2FLun1uO3UA7FM7H6UKXI0uUV2bEYBmtvJOXGMeuFtKzFfsqThjC1bstnm4InYncJHyaeoUtMSp8pVElmQ7%2B3uLI5vzA681hDKiEtk%2Bu%2Bdn8Cf4k9B80eFU7YUoW6LQwrNF%2FnTF0vKcaWVelKEkhDKBsAB0A%2F3pkv8A3Gq0PtYlst6wxha7hvK%2BXC084pJF1cFWlKU%2FvGeEoEbn%2BtPxJx0jLJb5Ev8A%2B6LO1S3guEvuG1bjznoANy5G5%2F8AXsPrUk66GwnL2SjCsSZWoHzVKG56wTQ8mXJRfZsXhV23gGV2sSdWlTyiRbhXHmEbn3AH6108bUY2c947lSBWXUs4jdvYribp%2FwANtgXX19V9hv1JrPCLbbGZpK%2BHsG3WPu47mFm7cUhDQOhpsEw2kD8PPSKCWRthxx8VtmTLkvOlKyElROxqmyQg0ya4LcBu5t1kgwpJHvvRQWxr1%2FksLHCU3zcqBASlRg%2B3NOk7ehY5y3fo8y8Yfc0odToEmQVdKkHTF5E%2FQ2uHw045qUUKCusRNCiOLHNpiQCCytyErVuT0NUtgb9jxOKaVeWpSgR1B%2FKaPkyh03i6dPpd0%2F5gRtVqb9hximB77MDrRUkLRxG3WjcolyivZB8UzCtKVr81CSOhI4pfyJMFKJCbjNZYeUVvayR0FH866SKbXoEjPjtqs%2FtdJ0yJMUxdWgJxbWjJzxRWEp1XELH%2Br9au2KakvSHVj4yMp1IcuAhKUg7qg02ORCeXIwc8b2WFKUu9SADJOrp%2FOnLPD2C41oOYZ45Wd5rtziDRSoSDqkg%2FnTIyT0hST9lZeKXiqqxs3bxl8OIBhQ1nkxTUpLsbSStN2aBeIPjaytu6unb5DQSCCSvYDmZmlz8mMezPK5dGlWdvtBYlfN3KG7p1q2IhsayZJHP8K5ebyrbo0YIOPRBcg4tcZgxa9zbmNxa8vYU2Lu4OqPNWDDbIPVS1bR2k1m5SezUkm7fZYfh7jjmN5izXmfFHVm8eYdWQASnUo7AewAA%2BlZ%2F7maZojjfXRO8K1YtdC5uf%2FwBUx%2BAdBP8AWh%2FuJM0LHGPZeWC4O35bTaRrJEyTA44mn%2FJ%2F1DlmRKhautpDYK1pKTsP4VHxkVLLfslyG3FZWaShSwpFwUcTO001YF2irt9j%2FLDb7F4255ilgGTp4BoOdaQWSqN0%2FDpn76whsaiSNUd%2FrW3BFNdbMsp10bc5CyWX32lOtFRmZjgVvhD7E5pv7NuMNyW08LK5WyouBtKTx0EUppp2FCSXZYVjl1u1CQEEyI3of2VJr0Gf8ECm1pCNoO1Oi7QEnSsrfHspBwLhuR1EdKGb2KU2%2BitTkhVs4p1LYgmfiljloUay6EuKlC526bUqaro0BqwwxKHyklSzO0DmgLi6ZNLS3A0p2SNutKm9jtMkCVqBAJSFdQKG%2FstjV9zUvdcGYAFRy1QuUHegs3cKUhBCoggGaqn2XCNdhRKnHWwIJB3APUVN9Bj3yToaBSSBsD3psL9gqcfsB3W12VidJI3pU2EkEw4ry9JkHmlxl9jokQx9wguFSwffiPal5arQ2EX2VhdPKC1blI1AzHFc9mxSXoytLoQpZchQO096lv7LGqnFfe%2FLKkqJ2Jmh7fZT0ia4dbKX5YSFKHftWuGF%2BzNObJEGi2Bzq5B5opQoD5GepuA2DoKgrpIHNAOhMe216rS%2BFqGoAiPemQQnJV6BzpWhlTvlLknbY%2FnTFH6AVegxgAAxOwWo6QpaQCOm9MimDNBd5tbWL3YBlSnSAD1qTWy10RvHFkXS2kaRP4lDge1LnAtMjtuoOXbbKFQP3pMbe9BFNMJ37LLw%2B9F4wUhTRtm0%2BWj3PU%2FFNnJA0McIWXLu9cUgJ9UJ2Mc1Ix3YCi07DCn1p89aiePT7inBhS3Zb%2B7NkuFXp1fWquxbhvQEaS4q%2BbKSREmkyVMJUtDjE1oQ0gqXKgYkdTVBJP0IMsuutJOuUztI%2FEapogOJU00QlWtW%2Bo8SaXKD9Fxq9gy6e%2B72rTZXoVqkgn%2BNA4v2Ni16Ad9cLUq3Q2Uk7KJ6D5qJ%2FQ2UU0DcQ1tsFYdQs9SRuJq237F2kC0Fa1hxxWtI4EEVGmDkmq%2FEnJWo%2FiJJ435r10nR5tIQKzMcRxHBpTlYl5Gxu4soPQCe9DQtIQU6QTCvVE89KhZ55yoJJMfPFQhmm4EBUwOh71CWKi4KVE6lcfnVpktin3ogHSUxyd6tSYSmzMXe%2Bywe29XzZfySPRfHcAjngHkVObJ8j9CKroqIhQAHvQ8mDyf2N3LkyJPpHG9Sym2xuu8RJAIG%2FBJqi4q3Q1VeRJkkDcb1ApY36B7t%2FMiQB3oeaJwYNev0gHStJPBJ7zQyn9FrH9g53ElBUhUD9KzzsYDX8SICiFhW8GN96DkxscYKuMVIBJERyeZqcmOjioEXGJTq0qg7T7fFTl%2BynFgK7xIkkKckD3pbzV%2By1CyMX2KQklK9B0zE%2FwAaVLJZfxkGxPHCkL%2FaggQdz1oOSCSpaKzxzHdGohwJI22MAUmcvZqjgsoXNuZEaXCq4QlfEAzvFZ5SQxYq0au51zMhaXUFwEDUPSSAZ6fnWaU2acb9Gn%2Bc8xuvB4rUkncKUCdo7VnlfY6CtmsWZcRW46suXAUFJJ%2FFq27fNVzKztONPspPGrp4ElSQDEbCSKDtnPn4rasqXF7pa1kq1KE7A9Y7USVdAwxNaK%2FxO41pdUoACRAncUWx848VTZX%2BJpStKykJUoncbxQ5FqilUZ0V7ilsooWohOqOkbUDCRBMQtF6ZSkJVyd4mrjvsw5sj5caIRfaQFz6SN%2BeRxBrRjxSbtIS8Le2RO4WtkhJkImACqK1rx1L2XKCrRiLhSCk7kkif9P60mHit20KYRt7ouNepZgnYkdfeghLi97Li6JXhzxToIUnzZM9APmnTyOekF2rZN7RaVoSpG6o3I2HzFY2mnTBQ4XcDy1KSQDyJIpknKWjX%2F7aWwPevkNKSVJVzIkT8wKSotu0AoY3qFhzImTzmzH3U3T4wzLdk0q8xO9KoTbW6eT7qP4QOpNOxwbf5CM0XFfjtkV8TvEhzOGOlds39xwK2aFrh1oDCGLdOyRH%2BYjcnqZrqLFFdIqKcVb9kQwFy5xDEGbVmXnFKACQDzTP0Gsi9m1FlfsZHwhltKgcXcTueqAaT5ElWwVJN36ANpmm6u33PMfccKlAzM%2F8VxZ3Zug8cVovXIrb%2BKPtKeK1Mj6gd%2F4VrwYOW2Z8mTdR6L%2Bu88WeXrFu2YdQl1KdJE7x0rpOSiqRm9kCcz9dXTpeXcArJJAJ6dorn5ct9o2xxIunwsxPDrv%2FABDNeZnlIydhely5BVBvnyT5ds3HKlbE9kyaTFPstQSdJFh5czlf%2BKeb8RzFjN2zh%2BDW6POu30elqyt0iAhI6bQlKRyaZjdsvJKtIss%2BJ15nnG8Lw3ArNVvgVvFvh9ogmEJ%2FzHus%2FiJ9%2Fan8eWogY4cVf2bLZbzGu3LeTcrvN3GLuIKb66CtLbKI9QKuAkcknajjhlFCnDJyt9ExX4gYfhlqvLeWbpN%2FbKSE3uIRBv1gzA7NA8JJ3iT0o8mRVSLV3skGD5lUuVqcSuQCJO0z1FCOUn7RsN4bNuZjxZlvzi1YNpLly6T6WGxzP8AKdgxuUiZHrReOYcypxy%2BYw2xSpq2SUsW7SB%2BBPAMe8TNaZxldehcE47YlmzMrWG2dvlLDn0Opbhd0tKv%2FACOgcbcxScmT0hcINyc2iO4JjWvFGipwFJI3Inkb0EWl7GylZKLG%2FC3FmVhY9vmKvkgUvosHC7paS0pSog9Ovx70cJInCRaONX4faauB6lFoAnrPY01ulYSh9keZvV2yUQsJWF6pE89NqidlSVOiRXdybppq7TBcUAF%2Bx6mo0UC03SkgwFFM7HVE1SVIpq1Qp98NylTQWC6kSmTyKsU40MUYotC3Ur1J6RxVoKMl0CcSxErDyWioLSdSZPPtQtsOSsrLFMXKy42pbh7gHcUpvZXBFfYnihQSUqlQMqg8VRcVRBr7FHQtxPp0hJUDPHxTY5WuhjlcSrMczPdWbK9LitYJKUdPeaVLyJC54n6KZxnxJv7YrIWsEEgknpParhmTVsS8bfZWWKeM162lzTcrOx31Ec96tZ4i5%2BOquiINeP8Af2V%2FbOi4KkCITqgrMx%2BVOw%2BVb%2FEzT8eKLLxz7Qduu%2BbscYfQcDu20oDvRpUCJ%2BDW9eTfbGrDBqkaZeNt7jVviT9oFrTZRrbUkkpdBGx9way58ifQ%2FD4rv8TXO1%2FxPG7%2BzsbZJffcIbQJjciBNYptR7JK09lxvY0zaYfZ5LwxSXsOtXNdw62I%2B93MQVE9Up3SB%2FWrUn0jViaW%2FZZ%2BTUOMpcQ2SgOpCSAZ%2FSkZcskzRJ8u0bI5SsyCwj0nYBO0AK%2Bv8aXHK2KjjitmwWDNNpS2ohLhjcDaD%2FWhnodGNqyVG0aWhPkthCweu3Wrx2tlqNhW3S5bYNetpLf%2FAJAvSUwO0jt%2FvW%2FH5HpisuJvocYM%2Blbza1sLSdQ9Q455%2BKbkr0Z5wkjefwbskXLlsXEBRMAR1pvjTSYiclGfFnSvw5y8kN2xW0J4Fb%2FkQj4Fdo2Ys8JQ0yiEoHWKt7Q9BFuy1rRpTPTj9KWov2QOKsUpaUkthO1MiqRAQ%2FgzdwowhIRHEcUuVsFR2BrjLISlwBoD6TFC0w2yH3%2BXUBag2jSZ3pU2%2FY8F%2FwCCJbWVkAK6nTQEMF2i7dQ1bpn2pM%2BxmN%2BhR1ICQEgg9dqEOTpWCnFqLgJSSZmoiRdqyRWgCkysgp%2BKjl6Km2lokbFqtyxLyXFQ2ooKT77j6U7HGwY5N7C6UB%2B0ZKiTAmOxo%2BLL%2FG7Ar7KFQdJO2%2B0Utq1YY2UopUQRJ4FZJdkv0RLHkkvOIJKhG5oGrNMW0htieCst5VaeaaQp83G7qRuZGwntRPx%2FZWLIr2V2zZqbeSZGhA1GTO9YVjfs3c16MsOtC%2FfqXMjUetHihcqBnOlst3C7DQwlRSkT7cCtzWqRmnK0hC9WELKQlEjbbrSJt0SMH2AH1LK2EjqQSPrQKDGNBgEjEAWUyzo80hXWtUYJCp9i6bn73dC11wogAjt8CmCuWzNkvm6ZQhBHlLG4MCZqBksvm30XnmrCdJM6upnrS59kaIFimp198NjWguRI4I9oqpkjG9Ay1tXXbtNqhSUKUYMnjvSo43djMj9EyeAskt2rBCUoA3HWmcbE27FLAuNpeUg6gVGSKjVBWOFLX5zVuVANqgKAExvR45fZCXJUhNuttKIJPpV1A7R%2FOiEv9Am2BNw8sCdyAT1oJRZcY%2BwBjl05rQFQIPpSfmlmnH2Ov8QSxbfeX1LS0gaQe3vUAfYHfv0W7SHGtThjVE81NeyiL4riIU3brcacWVeoJjeaKTVBw7Gdu4paS44lSSTKp%2FdNZXJN6H3oc3rzd3CGlJDKQmZP4jUBasb36W0OtoaAUNInemSmmDwQd80ESVE%2Fzr0rZ5K2ILekwPjnr2qihBRmTKkjnczUINlrKolU79elQg1W5pCp4iZn3qEMBcJCUpGtZGwKjzUIZJugOYUQdt6hDI3QUN9hvv7VCHi7pAkEgRvv1qEG4vN9lSKhDBV7sSFKUZqBRg2IOX5lI1d59qpug1hoZLvwZGojeq5oJcuvQwdxHSnQVAUE8iCdg1%2FEYMajp5jmKTLIUgW5fwN1Eqjaeu%2FalSl9jPjBTuJahAVBHSd6umU4A5%2FE16FytAjcEmglKtDUCnr5KdytazJgGg5sZCQEucTgqhaQniR3pcpjCNXeLpTKkqAk8kTFKlKy6ZB8Wx5DZI1HURtvzSpZEil%2BivMVx%2FSlag6UxAImkSzv0aI4kyls0ZtbQl0h4KSD%2BEk7n5pc%2FIfs0wSXbNaM2Z2SoOpDiEr0ykk%2FiB52pLy36NNRW2a05wzelwhKLgtu%2Fverp%2FSllRx%2B0jXXMGNpLjiioLIGwCtjSpvY2KpFMYxdFxZVqBMRuYpE5FuK%2Bir8aebCSEpbWNxMTNXCKexM8jj0iq8XSFylJAVM%2BkRtWhKjFJyk7IBiTTmlZW2VEbAz%2FGpyRHhn20QS8aV%2BEqUDpO0cn3qpK%2BgGmuyIX1qVLOpMEjb54pZc3Jv8SI3tqsrdRoVA5260yEq2MxrdyILiWGpRqV6QZ6Vth5rporJLZAb9pDKj6yqf9O3%2B1DiTm7swSx2RpawJkbgbjtFOhGPKm%2F8AkT0EbR0KSY0lQjiaHJ48o%2Fx2iExsHEazBKupANKxRnF6dDccWya21y22ygpVpTvInYH2pWblN32Z5wldnq71CtipxSFDUJ4%2FOkNNA8WMLe2vMYvbfDrC3eu7t5XltIQncqJ7VqwxbXZrxul2TnxCx3Dco5aR4Z5ddbffUpL2N3rapF2%2F0ZSeraN%2FkkmmuGVehTm27NbtCH3SpyVEwNp4jpvV455E%2ByW3o2S8Oct2WWMEfzljBQleki2QRvq710saX%2Bsy%2BTLm1CJXuNZiuMcxO4u1OOaSo6ZJMfFJnFNNPRqhCo0WJkTC3cVeb8xJDCYlUxPesUvHamndopRS6Nm%2F8dtMqYYQ3pYfCJlKjz70Usrj%2Bgl%2Byn8UzjcX9wq5eeKpJI3ml%2F3MpdI0ReL62GMlsYpnfMGG5cwpwG%2BuF6ApX4GUDdTiz0QkAkn2rLUk9lqTm6Wi38wZmGZMbwLwr8OVvXOWbB1TDCzCTfPn%2FwAl06rj1GYJ4SKZHJ%2FpfReTx%2BPsmGI51DCrbwqyK%2B5d4c06FX9%2B3t%2FiN2NiRH%2F2kmAnvM1ojhT0pCYwauTZe%2BSMXubBx7KeUnWX8eSyXMWxR1em3wtrbWXHuEJEkE9TsN6ZHBKPT0Y5ynJ9k4uPGLBsNw%2B5ydkS4cVhC4GIYotOl7F1z%2BaGB0R15NKnm3SZt8eTSpsM5dzsNLDCXDBA9RVsY6UKafRotGwmScwO4zd2uH2aHLi6dcDaUIMqUT%2FGnQtuipSrbN1svZltsHeayThL6Xn2f22KXIVst4bhsEH8KZj3NbsUXHVi%2Fm5FoJzG3ljB38wXoUq%2BfWWrMHlM8r%2BB0NaJJxVtkT5viVY3mdV1cF515RUv1Kk77nv%2FADrk5G1L9Gxx46ZN8vYrqv7VSSQFLSmCd%2BelPxq9mbLGPotW1dLVytvWdYURE9D%2FABpnESo07J%2FYXUDYkkkGT1olBDXkbVFirvFPYUDrSFI2PYD3p6riLsAt3f7QeuDJkTSk6ZCT4ViA80tLUFMObbj8J6H4o%2BIE7HT7IaUUQnYdDz70F0xVsD3ClN6VNrkjcdN6NNehihF%2BxreLN0w5cBAFwmNfQn3o12GopAK5eCm%2FMKlIe51KPWm6Bkn6K5xxhxSVOshWgncDkKnikzS%2BiQT9lXYqtQCtYUkgTI%2FkKzJpvQZXuJXpMqM6QIgk8R1qp6QUFspbNeJNKFwlK4MwkA8%2B5PaksfZrDnHGW2w6tLm4EneCf6VljyfsODjWzWzM2ZFKW4lDnl%2BqfxcHihk5R%2FEXNXoqi7zD5brbinFKQlQ3T0E7mqjlknaEPx17CDeZ%2FwDuC2xDD1vaijUpieSK6sMnJbKeBJWglgua3cfsRlXHbguXzH7K0W6oS4n%2FACT7dKbetBxjL0eM2H%2BEN3SbFamsTXLYIEKZTwYPM%2B%2FSl%2FCr2DLHOx9guFuICRoUog7wKDJJR2uyPGvZdmV2HW3kH1JbjYjY1gyZ3ZtxYG1vo2gymyltphS1BSidz0jsI%2BtEny6LnBIvHB37dLbRhSnI22605YZS7FxYddvvurKYC3QZgjkmetMxeI09MvmEsExe2vWnrZ0epW5nj4rUsa%2F1ATzpdlkYDgSnlMlAngwDsU%2Bw%2FWtMYov5EzerwPwZ1D7KimBA5GxoY46dozZvFh%2FI6h%2BH9qENW%2BoDaI23rbBt9inBUXkfLSjTpSDzFPrVCJOlYTsLYKUg7D3qGaWV%2Bg1c2qW2QVBU7fWoB8kvsbsWpU4QSVJ6VA8T%2FIyxG3Si3WUgahtNU39mmV%2BiEKt0Kc1FKio7isLf2al1YneYS2loq0pK52g1RaS6SILiNmWgoFIBBpU0x0YV2CXW06JG%2B8UAQNDKi8JSInf3qV7BcESW1sylCRrOjrvtV8S4xSeiRWDSlIebSVAqhcE7Einxil0ZpJ2F2GlBkltRgK0nfjr%2FADq2mW6QNvLctrdjShPQUL10MxOwDcNKHMjaeazSgmxyZHcRYR95WQpLhgbjvS3EdGVoLOpL2ULplY2buEK1dTNaW9Uhb7II1hxct1rPpKzHyKRKCaHJ0xzh2FJbegIEkxQxwpbLlK2WI4U2tlKoCdNNbAogTl60%2B6oIIVuPis730MjPVexpcOAOgK4G8USX0TjILtgotkPpU6QhJOw2joKe1QtvdDWwWUrUsBYdJnjgntSpPZbh%2FqJBZaUNOqfUQNcnfk%2FPWpB7KcvQcxjEFOobNunUhSRqV%2FlpjQuMvshbiksPPJkLcSgrAjYUpqmNS1aPcBsUtXD1%2B%2BVLWQfKCjEe9GtbZU5WqQ7U8A68tagVHYSdkilTklsuMXQ%2BsHkNtqaA1pBkkVFvotx9hSxBcuErcSCCCU77imRhRMjtaJKW3Qwt8yGQSIO31%2BKYJi17AwvEoISyU9tXc96ByoNMiN%2BTdYkW3FlTLQkk9VfFIm23odBWgZjGJtvt%2FwCHMuJbBI1EdPaqm%2FQDiu0NLxDlpaoudSw2pBkGi4OiXZHBdOXSlXVwQtCQQkRFJsjQRYStxsqWFIBkwN%2BntRQgntkYm%2B8y4yw02AkJ3IA3VV%2Fj0XbWxk%2BQtYXrhW201TTQUYt7DweQRMjV27GvUcGeV4MxVcHUI2SRv7%2F71ax%2FYXx%2FY3XcapUeYmr4It40hHzJJJIPSgdC216Gzih6%2BYIihKGnmepO8x3PPxUboZjSYkp48JUFD2pUcgccabERc7JCjvPM7Cm3RcscV0JruwdpIjfvFLlkXoHgN1XYIICgepngmq%2BUnxp7SG5ulDVqUCDxHQ1PkDjCSGbl5voURE7SelBOf2FjQxcvtMgr%2BI6VSkmNQOfxASfVsAODQTTBlC%2BgG%2FiakpUQtITxzxS2qKjjd7BD%2BKpJnX6vel%2FMO4fYLuMVSCT5gChI370Lm2Th9AV%2FFzBk%2B535pLmycGCncbbVIDxKieADNLeVBxgrAl7iKlKKvN0JHvvSnNjvjIzf4mkFUOQRtJM0LbY6EPsrvGcY0JKpSkhJmVRS8i1YccG7KOzTmkteb5S9WxJgmeKxvIw2lHs1rzbnZtSHQq4QDJg87%2Fy4qSlYXBONo1NznnolxahcKKwIEH8IHaKGyo5aVNmu%2BNZ1U%2B5CXEqAMzP5j43oJz4j8eZ9SK6xXNaXC4FrRqjYhW1Jdvo0LZErzGEvyfNkEQY7%2B1Bxa7RKIpf4mgpWPNaG8EmNh3qOfpFP9shuIPtOKOl1pyNgZmjgn7FPJHpdkFxBSlFOtSNJOwP7x70foyyyZL7ITfKCysCADJI%2FSRTY9A5MrkqkRS7bklJImJ%2FWlyjQOMid7ag6ioerrB3%2FAL3oRiIZibEhaFkFe0wJmrMvkRk%2BitMTYJKttRj8qOPRibrohV4g%2BYpQCQB2%2BO1dbxZKrF5JNK0rMLdxKFpUNOmJkzWqfRWLIpdkntLkHSlStE%2FkDWWWOV8oD4TcXaJNb3aVhCZXr5G%2FPt7Vjeacbiw4Zq9D0rW8NKBCdM8fh%2BaZHHGO50DGKTtlrMPDwyyqnFHElvO%2BJsqTaifVh1qr98jo4vp2BnrVSjW4Azgm7XRrxcrU%2B6sur1OKEqIH73c0PGb2UovtdFkeHmRXMZu27%2B71M4e1ClLUImOlavFxvl%2BfRG0tN0yQeIeaGsQcawqxLaLG3SUICf34PNaMklJtLoPx%2FFW5EJwLDFXd42RqGrnaCK5E3Uqm9AzVM2OwlVvgNkpZcbDoEz79N61wywivxRK%2Biusw5pexO5JSsqbUYEk7j5rDnbb2RwYBbcWrSVOaQOo3AH9iqx55RehcZu6NiV3S%2FCnw6bw1ClMeIeaGgXER%2B0w3CyZSk9Qt4wSP8oA61s%2BNtXM045tdIJ4TZYnkfAxl3BUlXiJjTKfvrgEOYXZq%2FwDsydg4sQVH91O200z%2ByTjrQ3HJydslOW7W0wHDL422K2%2BD4c3CMWzC6jUhpcGbe0Ty8%2BY4TxO5Ak0eLxlBWD5E27Inj3jML%2FCxk3J1u%2FlvIzTnmqZWrVcYk7%2F%2BNduD8S%2ByB6UcDfes%2BXzF0jNDHfXY4wLN5RClvSDEGaycrfQ74JJ0XxlnOTiilCHdQJ6kSTPEUadF4rT2b8ZLzAz4WZWssauSlrPGJNAWDKyAqytlTL5%2F1GIT9TRRyNDE1OXZtV9mhBx%2B4xnGLx0Ks20lbzio4O%2B5PJrpf05OUm5dFf1JqEUoi3iN4iPY3j76mXGmsPZ%2FZMNJV%2BAD2435oPKyNsPxIpRtg7CcbD5aT5qAoyCon9PzrJRqmuT2XLlm6S6bZa1FZERPpg%2F2Kdicl2xM8cfs2Gsni8Le70oCXEbkb6YH%2B1aVJe2ZnV6JhaOcL8xUzt6Yq1K%2BgoQsnVjeeZZvNlZgjTEz8UyMmkVKk6A3nrauFJJJSPf6UAuV%2BiRWrp8xClAKA3AnYe9MUmyk77J3aPN3lopKVJD6I26qTTA4w%2BgXdNr1KSpSDAMxAj5qFuEvQFWpTOp1tQ1DbbqPipZQHxBfloU81ukieJCT7VcY2HCKZC3rpFypz8AuOFAwAsc%2FnRvEhnwfsqvNOHu24XcsqStkkyT%2B7t1AqnFJaKlipWULjmIpt1FwhKlfhBiIrn5HsPHJVs12zdjLel1uUIEcSSVDnpQMqWRLRqTm3GkvKeK3RpERGwG9CuSj0Q1wzLizXmuNpeT1jT0P9f61ikpdtEetlUYpiDqnUkqUQQRsYgVIZK7RmlmT0NMIxt%2BzxNh1PmHSsGBysHkflXRx5Y0NxKK7J1irDi328Wt0ww6A6ggzE7j6inRywXsufkqPWy48p4oxmSyt7bEj92xtGzb%2FAP8AjCNgr396z5sq6TLWZSLNwOxCnC282GlpggpmFT396Q26phxk07RcGA4W8UhIRCAmBtsfigUVY2WeTVMtzAbB1pKCqIEQAJiiMOXLv8S6sv2LzymgG1eYAF8be25rXgf2BFZH7J3c5WxB5kBppRJBJiee1b416NWOEq2NMHyhiNtiLC%2FKfS2CCr0yPberULszfBJtm12S8EU620HEqbEjaNiaYkaHFxjZvN4WYIm2FusIWggjYj%2B9qjZl4vs33ygoNMNEqQDxtWroGUaLTtnA7p3P9aNTdg%2FsmuHoKUNr3VvNOizJKMrtBe6Hm6dIOwk%2B1Mm6KbfsStmQlOrUSJkikjMWNp3YwxdX7NaSAP76UE3o0UQu2cSFlZUVR3Gw9qzYw%2BTWmGHgHGZSNJ9xTavQ6LrZBswWpSFKAI9uZ3rJli10Ni7RFVNoUCmPT0AFJL5IY%2BUS6lASYKuDtVEf2mTa3wsi2CjqCo4mtsY3FCXJvslOXcNS66PNTJgp3PQ7zTIR2Km6Y%2FuLA2y3kwQ0pW2%2B9O4IFysC4m0l599DQShKACZ3IFZppj8WiMXjSUhSSfQTEg0hfsfxFHrO2Ys8Wf8AKbEMoUgnoaCUUgIxdkdw1S7zLGZUKJOh1lSdud6FTAkpCFk0EtBCoDkAqJH4R2HvVGhtmNu2U3XmKCEDeJNRjI9DLMl2%2Bi0LaFaXVDYE8fNIy3QVWyDYYha7kkSUzB7%2FADSsSG6QbcQpdylCFAq4M8CtKVAyy0Hbt5LNii3U6CRBJiJ9quc2ZrbdjK1S0WXHnSULIlAB%2FEZ%2FlS6bGuUnoctvrKHLVkJUpWxIP4R3q4LYUotbYWfbebYZQ44FtBGoK%2FlTJAckyNYVZO31zd3Tq1JtwSDP7w7Vncd2FKSSpBG9u2WAEMKQpYTG%2FwC5vRXqgIpdojNw8%2FdSLZ3SgH1riBHtSG2xqlRIbB4MsIt2m3HHVQBq6d59qdD8SOb6DzLxQ%2BVFSFFAAJBgAUfNghMY0XG1s%2BbDJGlSlcEe1FzRCOO4oyyt15IAZRsiFTq%2BlVy%2Bi0%2Foi9ziMs3NwQC4oxuYMdNqTKaCi9%2FRFLS4S9dSQsL1azOwNJWRNj82O49k%2FwAeKVYVhJC2jq1JITvIra9oykJvGy2WykaRPHSssoUrLbbPba4dWpaApSY%2FeB3NSD9DHFJdGd4pWnzVklUhBM7VU1WhcY2LBYcbW4W0HSPSRUc70HwZ4t4pJBkjnbpXqebPLfIz0O9CnbmBzQyl7DjyasTJ5O4STQKaZJYWlaGy1lP%2Bo8TNEhLGzjw4BIB5qDIY1LsZOvSfxEq5j3qNmiOJLoZrfSJ7cDfeh%2BUJyobl%2BFEFQO397Ul5LdEtPQ1euFBKlapI355qicF9A1y8IEAlO%2Bw70mUaYT%2FQ2N%2BJUdQjed5qtv0UrrYPevyCVJ9PvMxRcfssEv34lMmR7UDk0tEBlxiKVJVpWU87%2B1L%2BVloit%2Fi%2FlqMKGkCSDxQylex0Ir2Re5x5IJJWRG4jiaVKSaocpJdAW5zEAQCsIVPGqlpr2KA68eS6VBC1JQB1PX%2BlJnmrSII%2F4zpVpK0kDY%2Bqs0s9dDNLoZP4sDq1KBTEQP5Up5mw09EXxDFmUhSnHEkgGN%2BaF5Gxiiyn8y444A8lLqQSDEkifk9qt5HRtgtUzWTO2YilLiEqUtMySk%2Fp8VnlJ%2FQTRpjn%2FNzzYuCtQJAI0j8R9zWZc%2Fk5PoGebRp9mvObiluKLkNpJ%2FegK%2BK0cjJL8u2UpieeVeYtCVNiUwNRHftVRhsuM%2BK0Qq4ze556v2wRIM77Rz1pqBlml9ibWaNYCtYVJMyetXRUYyltHisVKkBMyhI9cCeeKl0DkxTa0gc8%2BtyfL9RAB%2FDECkB48Mq2gVfPSk%2BY2NBMzMxQ8LZrUklUloh995ZLiRuSOBtTmnRjk7eyMXSwgaRvA78A96Gi8YAviHUpWDqBMx7%2B9CMIZftGXCUhQHQq%2FhRJL2JzcqpFc4wkpCnNSlDoCOfan4cd%2BjAoS9or%2B%2BSkqWEgNnrtBHvXQ8fDTtgtU6GHqTKRKieTO1bXFdiHi3aCtm4Un1JUpJ3Eq5NJkr0OsO21wkHVqSYHQ7j4rnZopOvZGi6PDbCbJ929zTjrSRl3DGw68hZP%2FwAlyfQ3HXUefarhl4%2BglKiB5pzFiOZsav8AF8QuFuPvOlRB4QOgSOgAgADiryuMnck0WoGGAZfdxjEWmkNjTIClRwKZgju4NhxVbRfuaMbw7LWXGcu4Qkt3ZRodWk7KPyKfmyOK2KUE3bKB8jzHi8skuE%2Fi5P8AfNc2Wbl2P5EpwV8WLqnAAsxyOlHDx4z6YtwbdsL4hmC4vkqt0ykfi3229qrJijH%2BIMlTtEcOtxv9qkIIGxH8aTe9BTztpRLc8JsvYZe4td5ozHbqucq4OhN5dtHb70qf2bHytUT%2FAKQa142v9Whk2tNF2ZWy7j%2BOY1c%2BJma7BzEs1Yk4peD2DiSpLCJhL7qejaNghHUxsYpuTya1Fi5TXQ%2Bzpc5X8MLa5bzliNziGabgl93CWHR99vCoE6rlwT91ZJIOn%2FyKHRO1VDPcugIJ9I1Hzl4i49nO9YuL1dvY4awnyrOwtm%2FKt7Jv%2FK2gGB3KvxK6k1pnJNbQ74qIxb4zctSlIU4CPxKn1b1hnhg3%2BOhco%2Fon2EY8pCk7lQAkRvA7n60E8NKkxcm%2BkbqeB9nhtnar8Ss82r68rWDiRbWp9JxS8glLKZ5SNlLO8J9yKkYJfyBeSV8Vplr2%2Be8Tz3mO4xbE1h%2FErh2NKRCEp4ShAGyUjgDsKXxuXFG7DjUVZ09ypjzfhl4V2eBWbk45foD94ondtPIQR07mu9ixRx43%2BzDmlznsod3Mzl%2FiC31rKlauSNpNcm77OndpV0WZl3FQpSNNwoCQPY%2B9KmndlOSXbNhcp30r%2FaqbWYAO06v72rVidEcrVI2iyhet3LC7JxOoq9TZ446VqSQgnKIYIlMxMCefmo1RAxh96lLi2oUkKiN4E9zUBc0gm%2B4p1BeASHB%2BIyYqFc0PrK7QtQIIAjvAq2hsWk9kntMR%2B7qQ4yVSkbbcjtRYpbsNzXoL3qg8yLthR0qHH%2BU9RW0T8zvZHnnzDiXBJA26xWWbJ816Iu%2FijYU5bqJKDETtBoY5Giyt8w3P3R1xWlTZT171Fkd2XGbj0VniOcFMF9lxSXEhJ1lQ4T296kszemFKSaoofN%2BI4RizLirG4Yt7udXlKMJUfY9%2FY1SxXthQdLZprnnGLm2Fw24HG9yCoqII%2FPil5IpbezLNmqObcYAS4UKWoAEwDvM9ayf3UUuMUTHJ2UDjGJoX5v49zsB09qzvO3o2O3plfXN4Cpzy1qJJI52ApfZmywoQauj5qT5hSOUySfr81ExLLby7dN3lm7hj6kFQBU0N59wP40XNhwSemWllSxUm5bglKgQBBPqM7VUpNvRpi4pUjc%2FImWVXy2XrloLKgmdt%2Ff8AlTLkXjhK9s2Vw7I6HGU6GVNq2OnTsT0pqk2OePdpluZd8NlO3CbdVuZkQRPJroRx3EzSUbs2myt4Q%2BY02Rbq9IkK0kz7x9adjwpF4%2FstWy8LS42UhlepI08bRTXGJfyscteGX3ZOs26CnggVaS9FrMyfZdyqLVTIQ1MKEmI96S%2Byubbp9G1WQbFDSGU6NEbRFaeacaFR26ZsXht4m3DDSQobDccc1IrY3I%2FRbOArU84lRnkwQa0UInGy3LVCW2NUEkJ2HenRerM80%2FR6tX7GCPVyf6VZjbb7E23QnSkp1E7fSoOxIZX6PNSpCifpwKGSs0kRU193eUJJB3A7UpqhvNDzWfKCVcg6piqJ8iB2K2%2FmWwWU%2BomQfagnG%2Bi1K%2BiF3Fm5bOrK0hKp1AcRWd4q7CHmHYULl9DhQZkbdO9HjxlNk5ZtW1KSzpAHG29boxoSm0SK0DdutakohIHQdYqlNF82Ari4U8t5xfmNLSokJP7worRUnbsDWbL1%2FizDLYUoOGF7cJ6%2FpSuN9FptKxPELK3H%2BMi1bJSySE6t1JE80qcXZohltWRS9fWjBr8o1raKUpUI5PakTdIrbYOy%2BAjAcfaW4lLywgoE8kGaHG0n2MyK1oxtGVItvXKniSpXWpFLiMYqhlS%2FMeUk%2Fd0GFE9%2BlJX0HGXohmY1AtrdiJ2T%2FvQ5FaGpr2C8HZLdq6%2FCigHdRP4jSseOrGSnTo%2BtXTc3%2BpAlsH1HtTlkbdCa0FrtZuyLZptxZUYmfw1JRZECn31NuJbQRCdhHU0tpphUGMKQ6G1vqRqCv1o1MCUqFsbxBV0xbYW0VtuFZKggcDtNDJ2BD7FtZwYNtvaXXPLGluPwnuauKQ6EFLsBhpN2p9a29CpPX8RqTiRwUdIchKLazM6QOYPE0sDluhK1uNPmOF1K1x6ek1YTdOmeM40tCHEXK0JQslJBGxqWXPEnsIhC7tRZbKZCdpo3voDm%2B0DsXdRh9gu39DqioSodPiqyzpFwm3LZXzZWVF11Ky0T6RO6vjtWNNt2aTBDiPvGgJPmHmeAJokU%2BicOBsYbYOh0LIXBSa1RdCLAeKrlDZQCmJ%2BtD5EqQeJW9CeHgm3LgCgoiOOlZ19hZIpPZ8FN3E2zgVJO23BqIpxrYftLbU0i3SpIWpQSPenRiuyllYALoSTun616I8xKKivyES6SklOyZjmoAm10Yeef3iBt%2BVQL5pL9jdb0kk6VJ%2BYqDOfL%2BSGbj2kxqgkQKg1SSBjj8H1GAOPekPsOxg9cRMqA3680D0C42wc5dpTuFAAdZik39lxjQ2eviQmDE%2FWpQQGuL5KtXr1DrtFMlkSC4MHLv4klQIAPXakvM5dBKH2DrjEUaCoqEQdzvQSm%2FbLcV7I9cYoUGA4FTEbdPelN1snxoBXGLLAJC5UO%2FP1oXMbHGRLEcUhC4WANwrf%2B9qVLNQfxorrEcaOrUh0JcmZPA%2FWkvJZPhfaIw9mNSHFGVkzEk%2Fz%2BtZpZUuxbjWht%2Fj2pIS44kdIJ3oPkT6HRxo9Vj5JlDmpAUdhvSvmi%2FY6Kg%2BxovMZQVjz9bg3oXJVodGEa0RDFsxtBtfmPAz06fSlyyMfw%2Bik815lSULCLkHTA3gx%2Fe%2F51HkVbDWuzVrOmax5j%2FwC3j0mJ69uKVHLbpF5Ko0rz7mVDhuAp8pI3JiNRPxWnRmyZodSNP83YzqeebbuPTJUQDwOwq6MrjH0yksXxoIU4svwgbCNjUsFJkIvMbOpILoTG2ocn%2B5FKcmGofZ5bY24hIWlWoEQoiNv72qOTLUadolNhjwcQgLUFGdzO%2FwCVBkx8ls0xzu9khaxRt0CVpUkqA9opbxyUfs1QnGStM9urkrTp1IRtGw6UGObvaJPGpKkyM3Po8w6xAO0bjjbf3p3yI5s4U6ZGrvzAtRUQU7yAOauKfskUvQCeIUo6laSDwOFVbLpkYvEytyNJJmTzUIrIJi7RWFJOgAjjtToTaXYrLKiur9lsLdWiSSIMdafHNNdGCbT22R16YJ9IVO2%2FNdHxZykvyAPbR4KlKlgLkkEdKbL7IH7LW6oNIUhxw7JETJrLLKl0iJl55zfGV8EwXILTyBdtoF3iRBnXcqH4T%2F6iB%2BdKzW9pBWyCYNhi8VummELWCTAAnn2pMcc5bQTjIvhjCmspYZ5hGvEHBBkQRTorJFfSCxwk3RXdwly%2BfL7oWdR3nnmsE5NvbDfiyvsbnDQg6EFRn249qBlfA%2FtCwsjsSSBBhEda1483FaRUk12Ji3CdSQoLJGxO29Ly%2BQ2ZpTbFksu%2BapBMqOwA3P096TsKEZt9aOmPhv8AZ7tMv%2BGOCZn8RMQwzLGUEgYpdKv%2FAEIvXlCUSB6nEITHpAJUowI5ro4PEVXMbObrhHs158WPtKMtOXmE%2BEbeIYWwtei4zBdAC%2FvDEQ0kbW7cAQB6gOooc2eK%2FGKFcVdyNKrq4ubh565uX3nnXHCtbi1Falknck8k%2B55rJPLqkXS%2BxooaiSpWlsdKCM5LoKEmuhFKVeYClxKFTBIHTpvQvI7snLey6PCnJj%2BcsaLLz6MOwK1T95xC9d%2FBasJ3Uo9z2HUn3pkVKWwcrSRdWavEZrMuI22GYHbuYbkrDE%2FdsKtVTKUSJcX%2FAPpFn1E%2B8cAVc8lqiRnvkuzar7M2Bi%2BxJ%2FNGKp1YNhyA8oLMJccB9KfeTTcMknbKy5JpUjafOWa7q6S47cOlZOo6Uq%2FSKfl8nkvx6M%2BCEkvz7K4wvHCuAoEEzueg7VlTaNalXRdOUsWUCkhzUOREQe9U03tgGzmT8UU0plWtRnTzv%2BVbMfRswtUbT5ZxJw%2BSVKCCIUAkbnmtGLI%2FZJzTLeRdK8oXRUndUOJSZ3jpWicrEqSEDiY82UqiDE0tFOK7DzeLAobfQ4gmQSP61CuKCtu%2B28hTluQNpWgDdPx%2FWoHYZtLyBq1GY7zNWWG7PF0NHQ%2B4FW6jCgroeh%2BaZjyV2KlFIG4u4thRU2vUyR%2BIfvA9Z7UM2Lboq7FrxaSspUqBG8yR8ihD5srzMuKuO24BcK4SAfegTk%2BkXFtlD5hxlOh5AdWCmQraR%2BXWhywl7NCirpmt2bsXcabeLbpQqZIHWBWPJN1QjLFJ6Nas4Zovbu1XbXLpfQmdOoypv68kfNDDM4gU%2FRqfmm7fUuFOJCI2EQT7GieaFdbDUJJ7RTGIreKzKynn3A%2BlJeVteh8cv2Rlx9Sl6FSsRMzQqddBya9mTJX5pgjUeBzVqTuzPkgi1cq2zq3mXG5S6CCACd%2BlRysGEUvZtRkfDlXD9opctjWCTHO3%2B1THFvs1w4ro6HeFOEIWGWngFtrAUD2UOBFasWLl2xuTMvSNzsGywF27UtqcIHX90GuhHFXaFQm%2BzZvIeUGb1iyccSPOBAIjeK6GNIyN09m4GVMostWzIbZHc7R9a1LCmrGRdaRP7bKDGlQDS1A9%2BtL40QG4jlZKGnDoCT0kCglFPsCbroi1vghbfISQZMkAb%2FlWWUA0y48vWYtmmVAQYkGKpSUSlp2TOzfUbptKComY70UJBN2bJ5KskuNoRcqKXCn9mTv6q1Rla2LlKizQ4UABaSmNgO%2FvWiKpUZpZUtsQeKkpDaklJIKgZiR3qzJJW9DVCyHQUxAB%2FOoNg3HsXeEo1QI4qDo5Ewbc2KnmVuD8Q39qpwvYwDvJW2hlaUkg7TEQaU4NFqvYTZs0XGHXF0t3QpspSAf3j2q4KwVk2RfF7ULUlSYUTt7UM9djvkQRw20U1bpUjRMR%2FYpmNprQEpBO2HlysglermjBCdw8tlkKQn1BBPFJyRpNkATboVctXR1OtoTqVPCqEkotBjD2UM3dzfslsN%2BUoj2UeBWiKSQPJ%2FxIG0u7exh2zeWpKloUgEj8Rj9ayTuzbHULJTl3BsKcwvEr3FjqYaJUpKtkmBxRwxR%2F1AeRm6USt7Fm3vzjj7LXktpRrQgdEk1knBXotcuNg5xwSAlQ0fh%2BKXydGhnt15lra29skwtf7RRjpUrQNEVxezXiK7ezShYIIUTHA7mkyi%2FQ7FKhpjTlvh%2BHtWzS0uoCYgDlXWaJvj0XJpu2R%2FDkuMpkJBWscf5aXGVO0XyRPMOwkoavMQxBwC1Q1rOlUH2T8mnxTkrFSyq6QIZsrYW67p9YDij%2Bzk9PcUuVVY1yrTFlXjbDQGoBkbzPP0oVXsDkmMbS7Qp1dyhAQudpPA%2BaJxXofGFjK6fefuDrd1KUocnf85q1RJpJ6F2Ltu21hZJUNoAED%2BtDJoptNfsQuMQWpp1KQkg%2FhnoKVKVClB3YGL61pUywCtw8mYj60Lkno0KLu2eWqGtTYBU6pJ9aiJHvFHFJdBvaph44m4yq4QggJOwIPFWsy%2BhPBkZxVwu6EFaigbkA8mlzyWMx60CVXBbUFehaUj8J3rM5apDfiZ8z5fnLuAhLbp7Hp%2BdHF2gJaCgu1rtnWFKOkK1JANOhJ3TBm6QNxC5U4U24BkgSewpeeXovHra9hKzWWbZaSmEbQT3%2FAK0SlxRU7bR4yoi5Km3NIO%2B%2FegsLi%2FZJ8MtvMdbcDiUuJMgd6bjYMppEKcemPQD29XSvSHk3NvTES76SIgD33qFxjCtvYitcbAgHnnarJJRXTGi3REggA80hqmHF%2FSGTj0jVEECdjS5Og0rBjzx2kKKY6UpSYax%2FsCu3JVOnfeOk0emrYcY0CnbgJMFR7%2FFC5JdFjBy%2BQkAApSgzvzvS5SsJQYLurwxJUIIg9opEpMfGNkZvMS8vUZQocbb0PLWwJQlYEucZ32XCudjEfSruxfBsjV3ikqgqQV8gk0De7NPxsAXWL%2BqFulYgajqpOSSQxEMxLGdlFI1ng9ZrCNhjbZW%2BKYwQomEqM%2FhBNDKaSNCxKtkHvswkQA6ARIgdaxSnF9grDb0BHsyup0DUidxueBRxlEdHAvYyczcPMSVujmDB%2Fvbeq4xC%2BCIEvs6jT5aHGyQop1KP5U1RfVFxwpOyvMY8QEp1pU%2BEkCCJkA9waTOe6Y3SKJzTnpLibpCyoyBCZjUOpmlzja6JNp9GsmdM6AC4Ae1KgzB4%2BOlXFKCtIGKpGqmbsyrdacSSlYKZ1dqvEm%2F5CM0a9GtuYcZ8xCtlFcH1dQf5itKjZz5ZXXEpvFLxalqWsgL4ieOtLUd7C%2BZJEJv8QKVAgxI4PT2oZRFS8tdUNbfEfw9VAyek1TiwMWVuW%2BiVYdipcZBWpSlaid%2BYqjapL0SexxBUJUlS45A5qElmcdIPm%2FVoKVKHMbxv8VevonzSejBV2k6iPUBsfaf50uUEyY5NMGXC23gkIUFK3P06A%2B9OjOioqiP3LKlJPpCh0ExHxS2%2FQVkbeQ75jinUpCTv80%2BbhxSXZTaa0yH4tZKWfNAKdM7DeaWkc6Sp02VziNm7%2B1UlCwOsiJrpeK0gHXoi71stBKQgxtzvXQUxc4KXYxSy62AmEBQ7ipaYKxL7Zanhphza8bGL3qEmxsGzevAjYlP4E%2FVRH5UqeO1odFISxJ%2B5xrGLzELhxbl0%2B6pwkmdRJ43rHN5V30W1XRsV4ZZSbsGU4zfNj0JK0hZHqPbtS8PktLZPkfseZhcVi944S2oNat44HtTPm5qkNjma%2FiDrfLykkFDbs9J4q1Uo2g5eU2tj9GXiooStDhUN999utYcidmVAp%2FAg26tlCXEn2EkVbjPjvoOmE8KyJjOZL1rDcEw96%2BvlAmGx6Up6qUTslIG5UYpbiyLG2bqfZx8APD6xxsZ28Q%2Fu%2BasMw1wvKbWoixW42CopB2L4BA1RCZ23rRgwSf5UMcaXFdlHfaa8b80eMucL1bjzjOXbZakWNskaGm29gIbHpAAAAAGwAosnlyviy3Div2aqvYUpajDZXvJ%2BfmsZn4SuwPdYeoKJDUbzGmQmoHUkroHLwx0LWNKfYAbRTYSj0X8iq%2FYTy7k7GcwYzh%2BFYXZruL19YbbSD1PExx%2FKtWPFB6iguUeL%2BzYvN2IYdlnArbwqyU81dWqXPNxvEGzviNyP%2FtpP%2FwCCggx%2FmMmmZMUIR2ZMcW3bZE8u4TdvXDVu20tx1ZCQnTzPSsMY8mOaOnOAWSMo5Iy9k%2B1U2u6dAv7xSSN1EbJJ7iTtXXXjpY%2BJgeXexti12u5X5ZUpSAFfTaudKDN0Z6PMLbdTpOkhPEdh8996XQcpJrouDKLDrbqDGwO8mZHb54ooyoX%2FAINo8nOFQaCgdKQDB2jitULqw5Js2ZyveaEhO8pGxJ2A9zTYqycW%2By1rPE1pZLZhSiPRB2mnk%2BMbrxA%2Ber8eokyJiP60uS3YLi0P8NxhS7gW6lFKFfvcAGilkTVFEgTirts%2Bhad1JO%2FQEe%2FeiCgiXs39vdoU4hX3d3qgcH3FWpMcZeeShUdBt1io3fYMkn2ELO9Spv7ndOJNoTsSN257CmQVqhbcURbHsHWyFrZQVtTIA3HTr1FF8Hpkjli3VFT4vYPKQ8hTawkpmOhNOWNLSNK8hLVFDZnwF2LhSkO7E9IG52%2BaRPJQEvI30a45wwZ4ocV5CyYg6dx2FcjOuTtCpzbZq1mvC3GlPFxClklUbwY5pfxSGY1J%2Fo16zNg7zggJWUncJI%2FSg4ly5J0yn8QwZ8LcCkqSd09IIqIelSIo5g7qFFISsAbmNuvTvTFla3SLcqCeE4A8%2FcSpLjYmd%2Bn9xVzzOWqAnK4uzY%2FJOUXVrQvy3HANwJnnv3pSTboXCEfZuz4c5BL6rZ11CwgQpJBncdxWiMX0aI4Ub75Cya6ybG4QgthMagRyJ3%2FlWrBB9oXOSa%2FE3Iy7l9LiELUyrSQCJHNdGCbjUgYtrVGzXh%2Fl8sKUSDqJmeZPzWjCnHozTfRtFgNqlDLUgCQNo5rVDoP5EWTh9gFMzpEfE0boW5W9DLFLBOhyW4MbbUqcER37IEMN8p8ulJB1TIrLlgqGp2TC1bCWQEJVq6GkdBp07JRlXDHX7tTqtXlJI1E7QaqF2UbMZas1rZQVKUEdIEEfFbcUHdisktUTV0BQABV5oTB2rVRhyNN0zG9SLm2ti4mAJRtsagKyNdDGwSptSi6khtIgKP73%2B9Qt5WxUKJXp4TPfioT5JLrYRaUHLchJlJ67xUHLKRlSEruiwUkgL5idjUDXIO3FohrDVIUISXgodJH9zUKinewC9aeehYCYSDMCqasYEba1Qmx2QEuAAc7VEq6Bd2Mra1W7cakyWEqlW8ChjFouU%2FsxxW8SfNYZT5gKdMxsJ96ufRaG%2BH%2F%2BB9hSQ2FI2pcIItu2PVt6MHKm%2FS86qRv260c1oUtyIut0m7s7sk623QoAifYie1Z330a31RLcUbZfw64wy0Cgl1XmOaeYP7ta%2BK4maMalyKr%2B8tWLmK2ljLzq2lNqWn8KPaua003Zta5IjdhZKuFtMrBkrAkHYe9KhF%2Bw3NIN3bLLuKKQXPMSmGwdvSkdh3pnG2UsiYAxV5iyTdG1LhKiZX2TQyaXQUZX0VtcPuXzqVupV5KZIA4msz2zXKNBrDkqcure1UPLQfUTHIimJIW3RN8YubeywawYbVrXculazH4UDYDemXS2IcG3ZBbm6StaSP2oTxvt80uC0aaa0wc%2FcB4hIKAepq2iC1u0t5XlgiYJ9opcdslCYQpKgUgK30j5q3Ah8yi1tvVcFTqt4SeJpSgol23oEXt0dCktgaesdBSpNeg5Y%2FoGF98gJbSUA7q96EZYaw1JZaU4sqbM%2Fh6n61cGkJyqxu9c%2Ba64mBBn%2BNOpd0H8i%2BgbdXQRuoo1xsO9IytItNt6QE85bj6kISEJJkGefzrKnase06HOtKVsoCwUjrRJgJfY5Q6W%2FVpEzAM8UfyMnFexVv8AbPJUoRxseKFd2U0vQXeWjyUs6YUkTIPWmOdei4xsGMXCkPGJJSO8VFO9UFNtLokVnePW7aXlLI1nad42p0ZUZWmRRKiTvMHnnb616U8qNnCqDCjM%2FwBioQbLdPclMAn2oZ3Wi4tXsbKdRqgkTHU0hxNcHoHvOwFEEAx3iaGa0HSewM%2B4QoqClJHUClpMHmBX3wCQF%2BrkjtUm0mWrYDuLrZRWv0AertWWUvsY4tbAj962JMoUQdp70PNDXJr%2BJH7vECkriSJ3JMfpVOaDSaIrd4irTPmJBnaaWx%2B%2F9iKXeLFKvxkAngTuP51XJASlRGr7GyBqnVAAG38qW5%2BxsERO5xqZHmlJ4kHmkzafsakiJ4jjifIWQ8NRmNW078%2FNZZy%2Bi0v2VtieLrQNWudJI3PT%2BzWPNt3Y6DitWQHEMVRo0B1WsmQAdx7T2rnzVj1JPog95jmkqShSiYkmePYEik%2FJxdhcbIfiWazbh0F%2FWN9UVuh5PIOMV2ys8Uz393Qpb11qcmAOke%2FvRPPK9AZotdFF5q8UnrZL6k3CU6huSv8AAP8AitMHa2ZMrpGv2YPFpxwKAxDWmNyV7kd6tpejK5NrbKax%2FwAQEXOtaLkKcIIokrRFOS6KhxnNIK3Nb5KlEyNXFEIyZ5vsrDFcXbc85DikLJExNU2ktPYccakrIHfuoUowUhJExOwntTFmi%2F5EfjIh16jU6EKHmAcAfxq4ODdsXLx0ttiDduvWkK9G25n8VTM4PaEvJSpBlla0ogOKQNiSP5VkYzFDlskds%2FpCEhQ3kcyBv%2FGob0F2lndbakhJVJE9OtQgsh9RUVDzCR06D%2B9qhGjBSnluDUQkyeeh79qgE5NGRR5ilIXKUwBz1jmr%2FQuOVpaQMdsvNUshKTCZ1E8H4q4t%2BjE7u2BbvCydZSmQdgOk0awSJ8LIviOXFq1KIUkEdBso%2FwAq14ouOmrBviyK3WV3zuWipIgGBzXQXQj548uNApWWrhCtJQ4FdjyRUNbgvosjCsEewvJ18Wm1ebevhskjfQgSf1qnKhMcaT2PMq5VS7fMl5B0JOr1cfNLz5FBbHtr2X26h1xhuzYSrykgRp61z6b0LhBsN4ZlVbymiULlW4BSSUmn4cfFWXKFeywLDIK3mkKaYWtO8yYoU3F%2FjSFWF%2F8A6brmWmlBatwCSPy%2FrWmE1N9%2F8BqqJLg3gc5iFovMWPuIwDKrR9d44kk3Cgf%2FABsp5cWfoB1NFOdL7BJPlnIpzviTuWMDs7jJ%2FhpbgXGJuNbP3SAdvOd5UtRGkJEATMbUzHkU%2BiSnXbJD4g4sHMMxfAcv2zVjg1kyLJlhn%2FxoQP3EjrG%2B%2FJJJp3IbjV7o01ucmvOvOLdQSVSqSOK5%2FkeK5PkgZR3YEeya%2BhRAaUU7Djr8Vz5Y6dNlWCrrJDxWSGzpB57VajErkwcvIz7lz93tbdxxcekEbqq3GNhQZfn%2FAGarwjyoizQhSPEDFGP260H14ZaK30j%2FAPSLHJ5A%2Ba04ZRS0VBOTKgscq3DVw2pduVAQniin48WuVlzhqvZtT4I%2BHDd1i7mO3jGqzsmy6pZ4J6J996Z4%2FjJO2HOf48UbNYVlu9xFy7xW4StS3nCoE9toiujoxyg7sUGUri5u3F%2BVqIO%2B3Pwe1BPHaGoPYfk51haFvJdRO4MfiNc9%2BK%2FSstFsZfy1%2B0aW23pI2lQ%2FX2oYeJO9ksvfAMGWC0ozx8x2rVHlHsP5JfZdeDWTyG2tRIVpiQef6dd6uV9xRPlb7JzbqfCkq9cpIJk7QPimLG2NhJtnj6HlL80oKfcdP77VEr0BlnHoHh5wlvfSqQZHX8qXLH9GdzX2S63dF4y05w6Ex6Twfz7VSk06YzrokNg8ttbUqkd%2BhFNUXdBfIyZWqC5CiSn96I2pscV%2BwJzTWwum2LpCQdKjuafDEkZISthzD7FXkLYuEKdt1dZko9wKdwY146doE41krzGi6yPNATAPfeqUWFUvsqnGskh1CwpCmgDEKB3323rJPxpS9hxT6NcM5ZDVoeISkoJlQCf72pa8Pd2PWL2alZw8P1KLjpSvTP4YiBWOaljdI0RbqmUTiXhpfXj7nl2ql6h%2BGJFZmr7DopvMXhpf2rhS%2FaaSonbTGkRzNC8EktIVNyXS0Qpvw2vLt5pphha5VuEp394ol402rQhZ5FwZZ8CsSVdNJNm6tQgnb93uB%2BdMXjyrS2SWRvs3A8PvBJVqy2q5sloJAUdSOB2%2BKdHw5V1spJvo2syRkIWDzRNuPKUd09x7U34muzRGcorZthlLL0qQkIKAAAEjeadjmhSy7ujaPKuCDyGU%2BTOnYkHmtsJX0M%2BZNGwGWcIDTbRCEpMmR7TxWrErWzJOTLdsGAhtGpM8cHpTUq6E5YOXRY2GoHkJBiOTAq7MnGmK3dqX2yAE6j1PAqmrHY5O%2BwInBHbpDiGxpcSJ6b%2B1IaZ0LS0PbHCXlJcSUaXEDTsJg0DjegrrssvLGX1OqaQB6JC3AD%2BJXaBRQxpdC8mSi98MtPuzSGSUgpGrad60JUZXnTF7Zhy4ubjQrUkKgTvwKOMbYrjyemO12K2mXQZVuCJpyx62E4I8btQm1X%2BKDI%2FhvS5oHIl6I%2FeuBlKvWrzFbAzyKW3XY3CtCwuw3YtlMwQEgDlX9KgUscWYYSjVcPOFIUomQBxUszPFJEhxRTirBCwEpJJPqPG9W9IZGDfZD1OXesaXGUJj%2FKTVGocs3DxZUgvJIB3IQd6hS7HllsXDc61AgFKANh81aRnySk3%2BIOxBxbrpWlsIQn0pHbelSluh8b9j5u1SbZsuNKacUNE9xM0wIH4o%2Bwi5btW3CWm0hEcQeppc3qgVGnYFSzLzgWUJQrieAaWO5poJum6asXFB2HVbFQO4%2BKtN9AxVsi9jg5N24%2BpXlW%2Bk6ipXShcadsZLLSpETVcWr16%2B3bveRbo1SontNZpz3objhrYPt8QtmDdPrUPSkx7mhhNJ2W8drRX19evYg8pouBKJJ0jjnv2pGTbs0QjGK2j5y1bYZSPMKlKkRH61aikE5tsI4X93HnuXLq0AAaatqypjXFb43bnlsJAZSNKe1XYFtAshTaQHTqjcjpUoZF2YtKbcVCd%2FruT8UMpUEIqeeN0EN629J6TBpSb9DIQtOxy7ci3KEp2WVc8iaKeVIpY21aAWLXqEBQDvmOxuAeDWXJkTCipAdL63GUgkp6z3Halxn9jLHLb5bUhIVqVEnaajmiNtiyr1yFyQnear5BfF%2FY0bfWVbqBEyR3qPK32XwQxu3A66VIPAiY%2FQUpqx2N1o%2B81DTZgjzlDY%2FwCWolRJTd6BjlzDmmNEnrVjJJ1odMu6ynSpMjvUENBlp8NhOokkjY1AowbEbq9BCUpWQZPO0VLG8aM7QghTqlSk7TG5NWnRUlaoJKuNCQ6CSkDcE8UXNgfGCgtKhIJ%2FPr7V608WJKWrSSDBB5qEjHYweKhJKUxuIHBpTlL6Njqga4sao2UNzA3mkO7AYwcfGo6iADtzvRW%2FobDoDuK%2FESkTFW%2BggFdqV6gQATwkcfWszSYakRi9u5C99567%2FrWWUWx8ZrtIjF3dL1Ajmd4FLaHEav70oSSNSVHbbmqbojIRiOKDSd3CkHtxP%2FFB8gp5KVkJxDEFysqBHUkdBWd5KdGhURm5v1bjWpW5M80pqT2Nir0iJ3V06fxKKD39%2FilST9hcGRTELkgAFOiJgaeTHf8ArS5rRUlWmQDF79YQoeaYMmJnYmuZPx5ethQxtlaYnip1KAUTsoGVHcRWb45LvRohicdsrTHMdQlvSCtCOEjgEUqeCb6NMIvopbMeblBLgQlRMmAD6h%2FWtODE6oZNcVsojNOcvLDinHypIBJkxEH9a3wxUhObMmjWXN2d1OKfDbqldlSdJ%2BK0RjowZM%2Bqia941mlxC1SVFZnfVMb8Vb0ZHbdle3eZbkqUSudRP720R7fNBy9IueRJUgFc48644slaBqHpPINSKtaMDk2Bn8U1BIEhX4edx8UPZFJroGi68xRTChIMkHb8qZwVbY1eRL7E1gqAAUjTEGTuB2JodoRKUm97HrDBJTqABgwCeaAKKsdC2W4ApKVGOpIj4qD8fOIQYC21NojRvxMzvUNWObauQebSIAJKQQTP8BVok48o6HzVuTunUlRA%2FCOR8VBK8atNjxnDFPLkIEzydtv5USgOUq6DLWCkuCEEEzCT12ouKAbHCMvKKVISmFEQTOw%2BlWku0U3tCreV1r%2FZKaE%2FhHQfNbl5b6fRWXO10Om8kLeIQbcKWofh5%2FWm%2FIpfx7M0srZ6vw4ccUQLbSgjb%2FVTOaS2IlBuXIFL8NHkOKWu3CZA0gK4oX5MFqynGV2m0ginI9wq1Yty3pSj8PvNNSTMufHJv2%2F9wjhmRHmVjS0RAkKk0E%2BL0zTixtLZamD5JccCELZXA9RXpEj60j4kOUq6Lmy%2Fkn1pQpkqb%2FEPTzV48E3%2BkMWaVUXZgXh09cm2atbRxbqh%2BBIkmryeK0UsLLesvCbCcBbtr3M7aLq%2FjzG8OZVJJ%2F8A0qv3R%2FpG%2FwAVMHjtPYOSHEjeP5UxTNVzbh1sBkJDVvbNp0tspmAlCBsBvHv%2BtPfjRYuTpWWRe%2BHqsmZGucJsWW0XjhBfdAjU%2BRBE9kDYe9Gsaxw5JWVGVmvaPDC4fw%2B%2FHlLKtYJkfineaz5eTVpDvmkQ268J3h5eqzBUNiSJj%2Feg4yjHk3QDk32DT4TOOlZ%2B6HT%2FAJwOPasMabtlAK78JXUJhVuopKjqMQT7VpwYHKV%2BiFi5G8HLLL9nceIOP2Sbhq3Pl4ZbOgabm63IJB%2FcR%2BI9yAK6DwQv%2BKLTor7F%2FDvEscxO8xbEVXGIX77hddWo7qUdzv27dqXk8SL6SGPL9IUt%2FCZQLafuxK1J%2FCBzvSv7Rp2v%2Fv8AyLTbZtHlfwzXgGV7LB7e1Lb91DjxCRtzA%2FX9KbLBNqipRZsjhHhe6qwsrQWyApLaVJSn%2B4g11MfhyaM8Vz7JHb%2BDup1c22okSCRAJoJ4GtexsIKKpCr3hv5S20Jtkoj6yYgj4pMoMOiQWGQfu5QA0Ek%2Fl%2BXWqUWQsTC8oKb0BLe4GxI%2BgpsYMDnsnmH5bUgpT5OpXQHfbr9aasQTkS60y64tIb0BBEbQYP8AWj4InyV2Lqym86kQwkNzBSdxP9eateOqszuab2A7jKbzThWGlap2HQ0LwJgyURFnA7luXG0SrfcE89opfwNdotTfp2HsOsH0QXGwFDjV%2Bs0TixkZy%2BixMLsHHC2Y0iZHt7VOLClLRYGHYaAEjRAO56T7UccbFxpEttMGQrTKQSZExtTeDC%2BZBn%2FB0JBKEJWmPw%2F0ovyC%2BREZxfLFtcJWUJIdP7p71T%2FaLUreig81ZNSnznS2hIIj1fvVmkv0b8bNY825IS4i4PkpcR7Cs08CeypZESzw%2FwDAFnHcEOILttTq08aZgzztRYPBjVtA1F9MBZo%2BysL15Ta7Vs6gY23TvzPetX9tGtCp66ZB8q%2FZUdtcUIuMOUlYcKtQTtyPalRwSTsRbs3Fy59mXDot1pwxkrSIKtA39q1yxphJ%2Biev%2BBzdoktGyQ2IIACYIoPhGKTQ3PhWrD%2FKU0wWjqJG0QDSZYUM5X2yXYHlh63eZ02gSoKgx%2FfFKeNUC5pGwGV8NU04ElsgbEU3FrQuT%2BkXbhtspptJ0kAb%2FFa4RoEk1iVPKlCZE779KMTlk0WRhzOi3R0A5NFGNiEmwqlhTnqIUG%2BDPX4qnrQyOFmNpBxawCUEaXQoJHUDpSZK3SNMddk5w%2BwQi4dddZDiFOKWExyZn9KFqg5yT6Jjl9aHLp9xlCWrZK4Urpq6gUUFsVKLosxLzFvh5ebQVqUTv1rSmkujLS%2F3Pcva7hZbWEpM6lEVWPstrjtBZSkhbyUEOIG89afKVhxtga%2BuvLaUhIBGkqmKTkKkrdEZuWUOLQ7JASkDfgmkyjY%2FHDiqMgoFCtI3HpAA4q0i%2FYTwNCVPBsIRoI2Kj17mjirYOV26CeKONOtG1lTam0kzHG9HNroRzaeyvrt9TZDDH7Rcxz071nc6NULaskdow1bYag61l0kc8k%2B1GBbvQqy%2BUJuUlsklJ3qBV7Gt21AS0uRq0uR2qmgkORdwz5ikF1Akgk8dKsVOXpEDxC98%2B5Ib0FM6lGeD29qRLs0QxutirguPuIukFDa1HQNW8jv7UEnSsOldCq79C2Q22VqBQARHBFSE%2FZbVOiO4jiqltJtEnytX4lRvHalzmHjxrtkCYaCbxxJlxkg%2Fh4HzSPjG5JV0CcZWplXlpSEtqJJB7UMlsvC77I6hCfPW4UhCPxK35%2BKoY5%2Bj26eLpKirSTsPiqZUGYtJIQlKvUenvUVsbZk475YI0pPWrYCdsGOPm6XtKgDBNA5UGo%2FQ0u7ptv8AZNJAj94daCUrGY20O7Y6EpcJJJ3M1cQpcfYJu7pCytYkEz13rJmlToqF9%2BgAAtT37QAt87%2FvUhr6Hc9DsrSSriBwBxVUwBo68405OowRPzUr7IIOXS0aSdxMx2q9EEEXTgSoRtB%2BtUP0%2BjNNyGmwVaULO6UgVCnjbGCny6snUFK45H6VClAZuPHWQRAEn4qDoxFmHdKkbHfiTzUBnjCj16EAJ1BS43PaoDGDGKHVuKCYAQDJM81A5Kgwl5SEiCAk%2Fh2596qStAmL2IpLaUqO56EVSRdMxauAgiZGwkE17I8MOZRvBPq356VCDN4gaj6lD371C%2BT6BLyjpG8KnjvSJXex6WgPcKEq9Sp4qgogx50IVuTH8fmlzkgoPYEuF6jJI3PTiKTN6DaIhiCilSgJT2HtSEx8MbZErxwqKpWTMxvxSpPZoiqI4%2BpSxEzJ%2FsUJJX6IxiLCnSpMrUeelBOP0Kp9EJvLA7wSF7k1kpjYYnLsj7lkXEJCUxIJ70Li%2B6NfFxXRHL2wcA2kzG9JkpewllrsheI2amwsJTpWe24oGnQ6DUnfZU%2BOMpQXQPSNUhM8n%2BzSJKtmhOmUxjr60KdcSsJG8np2g1gyQU%2F5aHlD5kxdQS7JCXlIKeYn%2BlFgwP8AwMg0lbNesxY3Pn6lrPIntWmuP4oyZZ276Nc8z44%2B8XvXsJPFPgn7M%2BVRa2a%2B5ixN1SnQBpjeCdz701vRzHStoqLFrxxKngV6kcd4pMpWZlld2QS6ug2Fai5p6c70ePE5OkXkUX%2FF7A7926kA6FDqQTyPcCteDCvbAUb6Gbd2C42VFR0CYiRVZMTi%2FwAS%2Fhb6HKbklaXdQAkdd%2BdgI6Vnn48u2C8fph1pSnUq1gKJ54pW%2BgcadtBqzCQII2Jggjke1SgnaYVZZRAlAMncTwKEZHO12EWbZKkJJbOo7Anp7%2FNXTNC8mPTQRaZKFQApUEAnsJqJDYyjWiWWmHKcXAIjuegpsVoF0TXC8C1lttZ1kkHj671dgLROGMqOumQypQA4Jnc1EjPktsNW2TyXE60L0mSYHtxVkhaeyUYZkgPQVMawRG4%2FKaJQb6CzEzsMgwqFtp0pn0xMJjn3NMjGS90ZyY2fhwHi35dqoI4G2xrQstLbLscXHhW4EAfcndYTuVJFVB43IpsHr8NSjSp61C4J2KZAHzWv4F2myWZs%2BHoWfTajUDIGmY3qpYYLtkJrhGQtLqZYUhvkkp4%2Bk8VmjihF1F7IXbl3I%2BFJ0KufOKon0o5j3mDWuDd%2FkQvDCsLbtmg1gtomwSvSPMUJcWI3JV0%2BBRuaRIr6JIxlND5T5jYcKiSpSwZP1oYS5Mtp9slmXcgNW92MXXZNOtWqfNQDuCs%2Fh%2Bd961fGVVnuYsoquW7G1daccWlsuLJEhaiST%2FE%2FlQcXVAqKXRFrLIDAU%2BwppMODtAJqmq7CBb%2Fhm2HQ35K1CTE9Pn%2BtBKKktkMB4YIc1J8lBVPUciKT%2FZ42aYYE%2FY7w3wWaxfEWmBb%2BXaTqdKk8IHJmmYfHcdIqWFJdiuZvDpGLPs29pbJawe2R5Vs2EbATuYP7xma0PFJehDVA618HUFCUKtwRO223H7xolhkyg%2FgHgpbrxEOuWhLCDqJG0DsKJYPslFn4d4Z%2FesUKw2ttokJgDbSKuGKnYDV6Rshl3w4QllgG2gQmdug4n3rYm%2FTF42lpEncyEhpCgGfVMbcH2q%2Fj9vsH5q0yGXGR0uXLj3keWoTBjikzxl%2FO%2FQTtMknUkrtiTzKht%2FtVxwk%2Bde0Sy2yWlCZSz6BABimfGRzh6DFvk%2FToISv8UykVTxsW2rJhh%2BT2nFNQlcbEdSKuOJgyrtEwZyH5jX%2FgMnnuafHH9gjS88OXlJIDKSngiP4UXxohB7rILlq6qWVhHTrFFkg6KUl6ERlNJ9IQEn43pHxoK2E7TLq7bSQAAffrS5Y2HjWyYYfhqkkyACkVcXSpkkpXolNth59P4hpIjfkUYtkkas0FsjQB3FEot9BcX2Dr7CgtPpBPuBU4jcdrsrHMGBl4FK2ySPYGkSxM0fKo7KHzBkdx55xtKHEBSoAAnc1nlB30Z8uXl0bheE3h6bTA2bb7srSG0zBMTW7DjVUVhyey2FeGdlf27hVZhLraSBArTxaVFyyxb2ivbXw%2Ft7fGWmvu6kI3BnqZ59qFxsxxzSc99GxWAZEtgwharQISRqBPX3oVjR0nOmqHGLZFt3kLWGUgkzAoZY%2FonyMrzGcmMNoKFNBS0mJ00mUELeZEUwvJyVOOq0KSQd%2F9jSlhX2Csre0T%2FDcBSw80hLSlGRuKasUV0H8n2Wfb4C462tGkggTHejSvoGfGrWx%2FaYGq3Skr23%2FOpVCG37JpZMKKJAkdTUuuiJtdB9FqCyPLSVSJnoKoOE3a2eYFgLr%2BN2bwVrS25q3P4hQKG7NGSaWmWfitoLS0vHGlBEgJA7SYNTIBinbo9srW0tbRi0YdIgCd5k9SfeiTXomTK46H%2BJ4iSzasNEolYQDx8xVuSsVipuyZZeKg06%2B2SAEmPypkGMnFJ7C7QV93lYEr2IAphFoAYuG23FAkgRv%2BVLmyQVuwYlCFNpUIUNPfmkzv0aBO91MMoLYbQTxFKba7LitiuGFds2X1qg7mKdB2rQjP%2Bhnil%2F5gdWP2alIjY8UM2yYYW%2FyAtm1qumgtQ1ncfSlrbNU9dEicdQghtxIhPbenixtdPqR5aEiDGpRjpQyk0QHYrijYZSpJBeUnSZ7Up5QoxbegCvGdNotgOFR07x%2FCq%2BUL4op2RFp9a3pC0nfiaU8jDqw7ieJu3qmbdC9LaExCep7VTyemFwo%2BYeKWnkAoDhSSArkxVfIumU0%2ByE3F7%2B2KFKC3Tz7Gs2R%2FQ6CpDFu7ZaU9qWkvRB%2F5qcmDN30RPE7oPPPrJ9PAqWHDoEocRoCUgyeZ7%2FNQszQykrCytSoPaKhEh5cXLKW0I9GuPwg7D61LI4oAXV1CvKbUFHYknpQSmHGL9DeClPpgEkbz%2FKlyl7HNNDdlKC8StaVJBjnn5oe9jVksfXNy0yBqWAkHf2q7oqcN9EXuLtLi1lgmPcb1izU2MS2DXbolW%2BkHgTQxYUmvQi5c6UepUxvT7BSsY%2FfCpSdJJjoaRJjox9GaHEiVEkyN%2B5qi3ChPzkgKKlEI5JJ%2FSqbrYUKQwNyHSqQYnb2FVyQbkhdDo0lMqB6mf4UQoT1JUZJMHeewoXJDcb0LhYQTB9uNqD5GGZPPl0J%2FDA%2FuSaCWV9EPGHA1%2FmmYA7UKyspq%2BzO6uyQAFwOT0ollKSRgFFaQdStj2o%2BbCFkPpSkKBJB3B617P5EeGlg%2FYQYugQYMnbnrV8kKcGZuLBKgQe%2FxVpotQlegLdOwTECD%2BtIk7NKUn2BbhxQ6EneaCTorgyP3T2gACEhRge9JY%2BC9AJ68QoKKyrbbY80mUvQxtJkdu3isrjVHSgsuMk%2BiN3IO5SSV8bdaTLsLYMU3KzB3G89zVDY2%2BxmqzKyVqBKdpq7DBV1hWtJA1Hqnb9aovmwMvBDpACdKgJJ7iguX0EpkevMDOhRASogcARQStklJMgeMYDAcGgITuRO%2F980DS%2Bg4v6KSzLgjqg6PLSF8aU8fSs%2BWKQ5ZpLo1xzVYLQbj1nyxsAnpMb1keNM0LPKrNbcz4cs%2BetSCVDee0TBM0LVMt%2BVXcjWrM9tcF11CUqbTOqIJMnoe1HxV2Ycme%2BjXvMGC3SHlyhwidyOOOlEZUrdlTY3l99wqBbSNt0Rz7VfG9CJZfRU%2BLYJdrKyWXEFWw9JrQsKUW0xCIBiOG3FutWttSiBIniaySiuweCuyMvWLroUkNpJI422rZ4%2BKVW%2F%2FAJGRcvYi3g948oAlxQ5MCnZXr6YclJKw03gLqSFQ7Ch6ieo%2BKwPl6ZI5ZLbCbeFvCEoClmOJpuPp82NcoSfIJW1k4k%2FhUYEEE0mbitJCJJ3Ybs7RxZbhtQAJ3NIopIkNnhbzqmk6DI6A8%2B9N46odjpdkrscHuFKSVIIiZBHB9qvjQ5TRO8OwfVpASTPzpP1FEnspyfotLLeXVBxJDQSCY09Ke8vIqOWXsv3BMqF9KT5SW2jABA5%2BlA%2FHa7GK%2FZM2MgLIKwwYEAbbCgUGvRG2iVYbkDyVJ8xsek6tk7TRcn0Y8mZy7LFw%2FJw1NPFoJGncg7H6fpVpSQssHDsnpWITbkTAjY%2FWKdCN9jsdB9GSmvwqYUSE7yIn%2BdM4N%2FxGzhy3EVT4bBalvi2SQQdiJAneIpvx5EuzI1sYK8OVIKii2ShCt4APNDkwzl2QcWuRFylWhSZE7jZNXjxOvy7ISzB8mFkltSFEiZ2O30%2FhToKV0y7LLwjLYZbS2pIV6okj8IPFa1j1tFNk4scBSIKUBICYEjpVxgolckix7XBz%2Fh1haJQhCnV%2BYsFO%2Bnpt2pgqeRpXQliOVW1OF0NwoRuBxtVuLGOa9AVzK34EKbKnDzHWgr7E5MroN2%2BUC4w35jCS4O4Bn2rR8SStDcbtbFxkhXmBZY9YOwSOargE8iWrJOMpN4bZG0Q2rz34U9MmB29qJJLoJZDFnIbToQoMo0QIBSJ%2F2ou%2BhcsgQayC15WptlMzEHfejeNinnD1jkgMtLKWFB1RjjihcWD87JDheRk%2BelRaOoGOJn2oowTWwZ5pPou7BMqILTZ07QNX5Vq4IJQSCN7ldIYXpQkT1jdNFoqfRD3MrDWSpkgcEzJoVBCaDFnk9tyP2S%2Be1WkkMUE1ZIGcm61EadMERtxV0ifGx81k8EhCQopnjt9KiSFO0yWYPlNtotJCCkat6tIFyldUW3hmU23G0gtBJ6yOKekg1Fd2FnslNlEJbXE7bb1AXKmQjF8hpV5iwzvwqRVOLfRUF7K3vskBpatLYR3Imd6VKLTpjVJrQNXlnyxC0qJA%2BKFkcmfDB0soBDZHuNpoHAKKvQ%2Faw8gEABRiSeanBBfGgtb4asjdJVPf%2Fait%2Bg0gpZZfduy4ggJSATvwat2WkMbjJaVqVqbieu9U06EOd6ZGLXw%2FbdxhkKYVoK4%2BtCsdg5GktG8WQPDdhrDWl%2BWkK0ARGwrS9OiYYL47ol4yOLd1wIbKlEGYG1ExvFLRW%2BO%2BHV03iDS0NpDeqSQnc0PFMTLA27LB%2FwANSjDsMsQhTam0QQf3R70k0Rk0qaHFxhaVMwG07DoOahZXeMZfadJgHUTzEfSqaTBcUwBh%2BWFJu1NhIkzVcEWlXRI7XKq2HmleWSUntxU4IjVkpYwzynnFFv0xsTUUaJGNaGF22VOttNgAARA%2BakmgcjXoOWmG3KrVOkkmYKY6UplQx32SRu0FnbftVoCvmABVATVOoj7BHWvviC0SQlSVakzz2qDIRbauw9it264hKFtRqWdj196VOXo2J10hrZvJbUpaiACqOKqMq7BaTEn7hhV9atKdR6JKhvM1HJN2WoatIsfBrjSw6DLYUkQCNzT4TM2Z%2B7D5SrQ1ClA7QR0FH8gt5GyNY6tTYUUetRUAd6TOex2BWDW3gk6XB6gPSJ5pJoaFVOtulPmKSuN96hQzvni3bQ0YIkAe%2FwA0y9WRV7I9brevFaVmRPq%2F01nU23TGSikSC1tkNvqePqSE7E9KfJUC5WDxdf8AyHSZEHmetC3YUYrsTvX1BpbqjCgnj2oW0uy5R%2BiCYrii%2FIDgcCFDYJHMUmU1ZePTI%2BH3FpBTIVuSkH%2BNV837GuN%2BxW3Ck6lB0SdpPP5VTYPTC6NFs2HHFpUojjimUltlTk2wJc4orzkrLiW1cJSk7RSJ5begoRT%2FAMkWfuAHnFBSion1b8b0PNj6BL10fNUpJ3PJPX6UuTpFWBLl%2BVkfhV7CqjOw%2BOrE21BKQte6j0HWjAMlXSiqEwlI2FU2QZuPEqUhIUXD9KrkhkYOxmpSUpJJmDO6uKU%2BxsexNd0IUhKQXe%2FalzehsoXsXtyhttTioSkdCeaPH0V8a7ZFcQvXLh7YEbmKy5uVhxVaQOcvC2ConXvtuaSv2N4IYfeNRLipk7pnpRtKrI3Whq68pUFKQgzA36UtsrmYpcWU6dQQnr0qq3YUZ2x0BEJnp2%2FWnKBazbpg%2B6uFFXlhaQB79Kzzk%2Bg4xtWJNuEkaVGTMxJIq1BF8VQ7SCEkaivoqeauUqAFZDQJOlPahyOhsY0NDcqWfSrUO4H86ySbDPi6tK2zOrbf2PvSeTTIZh8GZ9UdBvFEp3og2U8VOQjiSd%2BtMTIPg6VJSNQHyeadGauyCCXTsmTCZPNexPEJWOkPpSCQTxI3qF8GLpuFKTKu3QnaoRxYxun0kgnfbpU%2FwFza7I7dvgwOQPfilvrYUZJ9AC7uhpJI1nckUputhojD9wCYSEkGazsOMPsFOvpISI3JkzvQuSRqUEtjVagogKGx70psIbFhMhQJnjnn4qJF6PtAJJ1BKdhHxRqALaWj3yEKBUo7jrGxoo417Ja%2BxByyQRrTx9KcsKqickM3rBlTRKkjeJ3%2FAFpOTHXROSIjimGNOJWlaNQBMdgO1KlibQHyFPZkyyF%2BY4lolJPA70iWBDYZG0aw52yk8t19SGlJc1GQJ2H%2FADWaWJLYcroo3G8guP2rulpxIAlW3Pekyx%2FQtopTFfDIrKh93U1IIV6T6RPJFW8DXsRLLxdMrDGPCFRebcYtFhokgCJFWsetjIST6K4x3wecU6sLtJQdgdEEnmKnxoJxTKUzB4SPIUtpbSigD%2FJsT7Ut60jFKOyicweGvlOKQi2ClHfYkmigr7YJDx4bPh0hy3UAOCRECjx%2BPB%2FxIF7Xw0deY88MLUk7DSmf1o1ik5cV0EpCh8NH1gkMuAjYQk0bhKDpbIpuzBXh66w0R93KlD1GUn85p%2BSba%2FNDZZ2%2BxJGRlgKecaKDEQBz7zXOyQjf4gTlF9Ie2eSbha5DT7pHUIkH%2BlA4oCyw8M8O7gFKfK0AckjeOwNRd0iieW%2Fh2stNBLOp8mCCBFa4%2BI2rLsk2FZAcYcbSttzRq6iRVS8VpWx%2BCNPZbuX8lOLdR%2BxBbG46A%2FNBHGkP4J7ZsXlfJaPICkMhxentsJ7U9O1RZc2F5DKGUlaEgyDBE7xsacnCtoFpeySMZCBUlzylp4Inkmlygn0LywT%2FAIh6yyehC5DalEdNO9SOJ%2FRnlCuyYYbl1pHlBttSSEwQRNaMeCyiXW%2BWgpGmAlRO4janR8fdpktkjaymjQEoSArTv0k1pjFr2UfKyapeolpSXY5j%2B96KkZkp2MEZLDGlS2HUJmAAOKlIuMpr0E2crguNrSwd9oHJA7%2B1WFLM12g3aZbX5aR5R0kkc7881bi0Lc2%2FRKsLyz5i7ZpSXHFFQA9MVcdO2BNJd9k3awdty6B8olKSAFHsOKcnYNhlzAg6pcJVpJPA%2FjVtP2O5IS%2F7aTq06FKAIiKr466K5oleGZZS6UoDQUk8DTTYJoGck1olNtlMNk3CmiNJhKVdDRoVQNucsnzFOLbME6lEjc0HxosXtcC8stnRKQZkp6UxRYXxt7JPaYGh0hspSkkAb%2B9Eot9k4MkbeWQ4hvQ2lGnid5o%2BCocg5h%2BVlIWlxxCNAmBEQe1ThH6Iyb2mFpZZTqRCfYbiakVSII3lm3pWNEgdR1oinJLQMaw5lSwEpJBnkcVBMZNEqw7BElKSlsGajCc2yT2%2BAtqSPTB67VBdBNrLSJKtJB%2BOKgSi30F7HAWkOBW6lUagyV2WNg%2BGtpUgQkpiKJRZn4flaLDYwJp1pJAV8xxWhRVEapgXFMrNqSoFsGTvtzUlD6C%2BRlc4hk5AdIU1q6%2FhpTxt7YLlZF8QyckkjyykbHiglD6Ci%2FshF9lxTKVlaQRMjb2pbVDbYFGFrQvTLaCZgkTVDIzVFh4Flpu5ZUS0V7TvtFFFWxb7LKwfJbSdg0Ugp681phFPsu2NMby21bIUFNk8kmOauUKRTYyyvlYXV4wpVuQNcg9QKU2kDx5dG3uBYc3h1ihJCUwkAbcmjpFwTiqQ4%2FZeZ6kiTuT2qm%2FoNSYNxZdr5b5JUoNiCT3pE5BRn9kNbZaumk3EaAJ22k0tzQDe7Q3vG2WrUkvaXSSdB6RVfIFzZFHbdp9SNWtKegHT3oxq2JLaZsSHzAVOlPXVNVZdEmRY6bVtbikF5W6gNgPgVOSKdDHE3mLS18x5SUqUSlKZ%2FF9JqnNFJp9EXs1LWLm9dDaWAqEkzz7dzWfmgsWEmOGgrYdefcWZAMf6feiQcpqPZHcVxh3E7g2aCu1s2yVKAHO200mbsJJdj3Abz7vdMMhKlFW8EwRvVJ0ETTGrl1TbICFQDO3vQyb9DIICOOBssk%2FhTCiB2oeaDpCmEp%2B9YwHHBqSTInr2oLuVoKT%2FAALdtE%2Ft0tq5J3g8Vui9HOeKm5BtxanLgMAEJCSSR0qAcI1yZE8ROq6bYJUUlRJPb5pU%2BzRjil0MQ%2B2q5fWQFIJ9JI4FAHdiRdQHlQmUA8moVY3ubnzU6EAEkwKK9UWOrG0HlqB2JIO1CokM75xdvbLIUdJ2iajTXZa7Iu7dtjZaVCRt3NQarBd3fFNsW1IISraTwB3pEk0FGDZCHgq4WpSj%2BzBgUibTHrSPQpCIG8UXFMS3szUsoSXHJ0g9KZ8aq5AjNd4p0kuOEgcCqYcceiPXV1pUZEqmIJ6UqUk%2Bi%2FjYMdeSrU4sQANyTQoNQSArtyCvmB7bA1VoOho4pJWSNZJ4I3%2FOpaLrR8HShQWr1n3qnNESMH71vkNkKjjtQud6Da2MDcpGtSZO21A1QxJvoFquCUqE%2BnsKFuuw%2FjPmXBq1OKAHX3oeUS%2FjXsTur0u%2BhCYSAevSrWRBKKQGfchsQZT1kxSWWgG66lEAhU7%2FAAaXOLfQxTY2QVLJKp08fSg4MGTd7MXAQCVkQenEH%2BlWoMLGK2qQUqUSooAn2oo497AfZ5dXiEJUQrc1blRePG27AiVhbgWo7k8R0rFyZtQ%2BaGklRHqPzJqcmC79Dxkp1JSlRKog9jVcmK3Z9dPIUPLSCT7UMshohqhuklIKZUlPek80QycXo1pQpUxvFWDFa2NNXqJJMHfv%2FYqWEKJKlGZJE7VCDsKCSCJ1DaDxRQkiCBUUkc8RNe2emeL41tnodBECNhHbrQc%2FsjlvR796Skq%2FabkEkTVqSIm2xm7cjhKoE8VaaGpAO6fIIVIInaaXNlURy8fOsEykEE89Kyyk%2BiEaullJTpUVQYj3oG6NFMHqdG%2B5B7j92ktqx6s8S6j1BKwSNpP9ahHKK7PApJIOpIEdDTVBIqcqMw4ABCiogf5uB%2FOjF03sz8wkpB0kc7HaoU0%2FZjqRpgErnbp%2FCrV9FGKloKtGlBjsaYotdC3MZXNsh1KyEICtj7UbBVshOJ2KNayAEtzIEbfH%2B9Z8mNt6GJSRVWO5XbvNSROrfpsOtIlhYyGSSeytHcno1utKbbCCNH4Z%2BopUYb2PyZdEZxfw2YcbLrLCdP4iY3T3p0cUWrsSsqrZBnfDpl1otltJAMDUD6k9IpcsS9MXHJXojOIeGDYWoBlClnmeQBRLAkrezVHfopnMngshxTpXbAJUTJEE%2FO31pnxR%2BhLwK%2BzXjHvBVYuVqbt0kaiAooBMTyazZ4cdoXLCr7AZ8GEKUhCrZSlgGVFMme0fFYowfLQuWNoM4X4G%2BY0vVbJCCmYAid%2Bprq440t9gC114CqA8xSQodtHb%2BlG2vZCNYj4MKS0WxbIW2NlKAIkVVJohB7rwgdUvQi1KiJAlHJ9x05oFhX0QL2HhMUICXLdISf3tEgEUXxRfohaOA%2BEyi20p1n0kmIH8ewoXgjdkLOsPCZDtqSLFbiREKNOjH0iDq38I1N3TYFnoEz2mT1FDkhfZLJrY%2BGRtVNoKAnTIBUmZEf3xWX%2B0ZoWZ%2FRdWWcmFLbbSGglUifTGmRx%2FOjXitKxcsjbstqzya2EMlTRdP4ST0%2BadDxvsuM%2F%2BoMHKWnSqEoTvGwEfX9KesUV6GfNFHjGWklJKkoUr3Gw%2BZo0q6ETypsO2%2BXAnShLaQrjSABO23WpJX2ASbD8AWt0JWwkdSOnFXGP0K%2BR%2BkS63y6tHSEneE79Jn5olBguc%2FocKwJSdkpI3gGeaL4wecxs5gLmoShRKe4ECh4Mb8jHDGBH0gwdJ6Abn%2BzRrC2FzTWwq3gQjU2PVO%2FFPeJrsqclRIcKwQNvF0oSITsOYNVLG6oyQkg6xgpQ4lWkkTwB%2FKaFYmtDeaDreBKUFLUjmYk1oTYkVawJtT6UFoqVIE1LZCa4VgMLQCVAHc8SaOD3sKKtkndwlLidKUkN9AOTTKX0G4Khg5gSSJGx7k8VBQNTgxQtRLRWBI3FR9ECtlYIaW2sNhOkyZ2oYtlqbXRPsPw0PBJSEpQrcqHWiDc6ZK7TDG0jUloGPb9KhfyIev2QQBCDPtUDojOJWzpT6QgIAg9z7UPuhM%2Bwdas61BIkSdyU9KIEm%2BHtJBSEhJE7CIio0SvRMbVhISkkoJ9qhcoNdkktbVBb2QkpO01C8b3oIt2KoEpPM7Gj5sKUPoPWTPkrSlQPtJ3maNPViZJrZYmGPehCFbAbEUxSYqTthS4YbeVKSJinFAe5wdtwzoSD71CAu7y%2B0tBkyqOorOQrjGsspJWkJMHuOaFxsPmyDLyqVuJKEkDrtU4ILmiycAwcNshBA1f3xVpjMeyzcOsQ2kAQFaZJijk72CkDccwxl1k6tPmKJAHf6UIMloeZewdi0SXVgJUkhMd6XMKH47RNHMVbSpNuhZ1Aer%2Far5osbuYgGQVrXpSN0ztNDLLRaT9EBxDHb2%2FK7VhKVNKAK1RBjtFZpTscscfY8tXS1YtJZWlSgN570Ilq3UQVizzuplQaGlQ1LcVwPirG%2FFSsjysZsEqdbDzan9wpRPpH1oOaAjhm%2FQAuL55V2lanQUtRoBGy1xsEgbnvVPIjRDGq6HbuPKbbbS5dr80mSnUJ%2BvakyzaHrCq0iP4tiD98tPlOmSYGmTpFA8ocMCXZ61e3N0tLSngGmiEoSg7T71IybdDpwSVosR66Uzhbgt0S7EnuT70%2Fk0YU97IuGHm2LVolWpa9bukiVj3NL9mhx%2Bglh7imMxWiliUaNk0PJ3QUsf42TbEMSaWlUhB0pkSf6UMsyRUegKwpdwhK1ER196Wg%2BLCmCOJ%2B%2FrJ1AIhQMc%2B1FDsk4vjRZGBXi724dechCQuB24rXCTMzjS2SNVwbdD76Va1qMAkUxsU8cWuNkMdcW%2B84pxSedtuaRKVj8UUlQ0DraFhJWFK3PO9UNUaBmI3QbZcCVajMAdZqnJLsFxGuHKKiFLWUqkxJqlJPQTx6tkzsVK0EmE9qbj7M76GuIJhpQUUgK2FXkJFkMuyGNJSrp13jekybXQ3mRi5uV3PoSFqSDvvNIlNvQcMn0NAFRpOrUT0I4pbxt%2Bw3NtUMnyhA0yQZkxuavg12DGLYOevSlOhJ1Eexprk3oL42BLi8KtQCkzO8CKSnLsNNp0yO3F2tKyNZG8b9fekTY2MbdA83CjIK9M%2FwpdkcGhkXtSyEmSDyOlQvgKKWlkGFavfioBwdjdVwkg6ilR6T1qGrHBDJbwIVCwN%2BZpbyfQbgvQzcfVoIS5pk9B0oZSbKUWuhkpwJmCrvQttjBo5cEAiSVaoCRVqVEG7l0WglUkqO0A8mqk2yDJx912FKUSPcUqXLogwdCtI1JAHTeq4MtM%2B81DQIBM8gahA6U2K0U7bG7jinFwpRUeRJ4%2BaGbaGwi12ZqfShKG0kAfHPvUvVkcECnyXHCQoqAEDaBNZpJP2MjF%2Bj5I0kCfV3pY8fMypRJMgdJ61CC6iG29iiSOJ35qUDwQ1SYJWoqk7cc0mUH6GRjaPQr07qJ2mlKH2VS9sTKyoAqUVDjY9KNr6K%2FwIpcHYgSABPSoQUTcK1BA%2FOo0QchwaApSh8VSVEGZd0SCVExz817BHi2m2NzcpCApJAO38auw3L9CC7k%2BgBQKgNqKLSLB7zwVKUlWobkk0KGR6Bb9wsSlJ1pjcDeAKCSj7K5ID3C1LC1AjTHpE7R70r%2FAANivQGuP2ilAgn0iAOlQN42DbhsJnyyVDnfqKRLsaDi7oWSdOncHv8ANHBgOFuxZDvGsp0iIPemCU0fBfqAVv0oXFE7F4KoCYmrSroJxpWYEp9RJVPEAwPimKf2RIVLhlO0CI7VfyIzP6PC5KdCkgnqUriBTEWtDK6t21AqIUREEkj1e1XQfL6ANzhTKwqEnVzPE1HFeyLI%2FRB7nBAXFBKCvqY2ilSxoZHKvZj%2FAIN6VAhUe9DJplylFkWusutof1KTI4mKuONdj8UVXYIu8CZUopLKgIgQN6Y2q7LlxsA32Vmrq3UlTCSuNOyd%2FwAvzrI%2B7FPJ9FU414e27iHdVq0V8z2MVUslAPlIhjWQm0uMtOsw5MbHgdxT1C1ZHil7ZYmF5GYDXlhhBSUgAATMVTxPtFLHHtscX3h6yhsLFunkD3O1F8afYzjD2Qm%2B8O2bkuJDJKvxekcDsKpwrozzjH0Rn%2F6YsqeOq3V5gHMdPcdaGKsBQb6JDbeF7BYWRbNhUySEgT%2BdH8YxYZBfDcgMsFCU2xQVbEaefrVPG%2FQEsUkyc2OUEtsaFMpkAko%2FyijjCi1S7DzORbe4AJt0j96QmSaIbGWP2hyjJLbbqUhkggTJFWIeyS4flVDbo8tCk8SYjftUBcU1TJja4DIgoSlI3jkn3E1Bbxtfx0GGcCSRDsj26H3ooxsr4vtii8vAOBKJSmJM9TR8EUsaXTFmsvqQtPpWUzvp3mpGNMH4l2TGwy6ChKk%2BhIPAimqRaVEiRgqAjgkAzMc0cZ%2Foqa0NnsIBUfTBjgCrcxfxjReGoIIKdSvg0lDk9iYsQn1JSoK5EJolJouWQfMWqVup9Ck9Nz%2FCmfIZaJjheGJOoFEDf92KJOyEoZwpBA0trKY2moQe%2FcEpTsJO0e1FwZaVuj1nDlEiQhRPGnrTFCuyNUSy0sFISAkQCQCQefarUUir9EiTZAtBITrMbyasgocNQtCiG0HpUICnsLCSToJ%2Bm4quKGRyUqGjdsW1aVpUTM%2FAqJV0X8iJnhCU6UpKQAOJFVONi2TWzZbIETqoih%2Fc26A2AlHpjffeagX4fRC8Qt1JU4AgKBJ4E1Tin2C3btgW3tlqUtKkhIExS6T6LirJbh1ur9moJ3Aj5quLsjj6JtY26VKBWI2P1pkVQx0o0yVWdsTpSlJCv4UQEUrolltYpCAmBIE7ioOozXaiQUAEg9elWmBKLYVsVKa9K5kjvtV82IyQZImnm1gAqhXTuaZGSYaSQ%2FEKkqHHJpilQKjQsW0LSqNyeBUcrKavVEYxHD0vKKhsQNp60IuqYJRg6DBAAJ9qhfNfQbtMPbaUhMaidhtUJGNsk9rbJaSpayAkbfAq71Q6tWwHd%2BULpSy4PKG4JHI9qVKROKktDrC0ouMTs0rEtagdtge%2F6UsbKLapEVx7GLe0v3XGtRCnClsI3Kt%2BlDLK1pC8cG1bB1xdXF6i3fKISJCEapB9zSmVOP5UM23ja2zqnpefVIUT0oJSo2cU6%2FRJ8Pt0pstayklbes9I3okgZzraIVm119tYtmXENWKEDdZJJPWKHJEPHJPsgVjhy7%2B5U4yQG4KgojZMHk%2F0pI1T9M8ubctNqbXcONuFXqWBBUOoHak5MlOg0l2Rq3Qzbu3D0q0CShCjJ3P61lbd2PUE0Lh51t9lrSGlKiIP4R81E2RwSWkHMOKbZ5YLeqVA7Hk%2FNbMb9CaJrZ3afJeTcbuHaNWw3pgqS2OXWyhSVqGowCB%2FKoCu0CBcKexu38psjT6YT1rLN3KzYv4kuxZ%2B3ZatwkEOGAsx17U%2BT%2FEFRsShFqygFZJjVE0mboqLp2EMMcaAcU4sgnfY7mqg7Km1dlg2BNjbsJCTrV6ua0roRVvQfdcU9bbCR096cnaF86ZHlILTavMUZg%2FFJcqGXuwCh5gKLilq6wTyDWeWbbHO2Qu8vlXV6Y%2FBJjtVc7Ir9hqwcW5cIJ1BIIAAPIpkI%2ByprRO7d1sJVvv0Na%2FkVUJI3f3bqnnFQoNjiT0pVB3GyK3zwdK4gTwZ4qmg1FDRKw2DpQAY4HBqJFqNDRxxOoqhCE%2B44qSetg8tkfv7hEqDe3czP99azScasKiNXN0Nxq9AG1VzS6Gwj7AF1e6VKTplJ4pU8qGqF7Brz0%2BtQn%2BVJcmxyikMlLLiyoBUcUISyKPZ8o%2BXGoEKjaBUKb9jR19CSZ%2FFzueaCU%2FQMIvoHuuqcmdvYcUpuzRBUNytMkbc8zUSt0Eeg6hIBSPio1XZBo64QdASo7%2FU1CDRx5KCQhKSo9TuBUIN2wFEgySe39atxdWyH1x5bTRWs87R0oXKiAF661LVMCeT3%2BKCWRF0xBL5JgJBPzS1P9hxgZB1CZUAoEiAO81Uso1IxLhXO65O5iKS3fZaiz5AQEmTtG%2B%2B%2Ffc1QUVQ1cuUlaUpBIjngioOcJfQ7bWQAIBBqA79jpCFLCUmCf8A2qUU3QjcgpUkdDsO9BKRBNQACExJH60DkyxB5ZQnSIO%2B%2B3BoSCJICSQFKJ4AO81CrMAopJgxHTqKq0EkxfWdCgkHbvQvIicWN1OE6ipYSP4f7V7WUmzxw1eKwV6VBKekb%2FxoWg1VA9TioUSUj%2FKBuKGV%2BgXXoH3LqkjVrcbSDwDEH4oW5DIDBxwCUFepIM%2F70uvsJxQMdWRqMknbeIqEUUgc84RJMHfg8%2FTtUCTa6GziidSgUHpztSZdjIy%2BwbpCitSSQRUV%2BguSMFpLcqSrQIgRuKNRQmz2XFEBHA%2FOooIvkxVBcTqKpVBI7TRRirBYqWXHQAVFAHUSafwQLl7QmUKhSYXsI7QKVONPQliJZdO8kwR9I7j8qcuhqmhRLaVKGpQ1TMR%2BKqk36BlN%2Bj59CFpXJB08mdzUTfsCrYHet0aihQI%2BDxRE4iCrZAPpV0333%2BaXOTXQTTBlxaocUdSFSeu29A5NqmMg6RGbm0S2XVApAiAOaz2WknbGKWEIARKSoJAkH%2BVXF07CTAWI4cPUEoQpBJn09O%2FvWiPGXovmyOHBGC624EqLnWdt%2FampoXlTZLcJwZCHQYE%2FhMnv1FWZo4vZJn8BQtspSUpXGx96g1P2Qp%2FBAh1aFIASJkEfw7VCJWK2uWrd0JW01G0aev1qv8lO0GW8sJUoI06EnYx0pfyqw%2FkYs%2FlptASpJUFEgiDwKYmmX8zRi3giCdaQSQZO3IqxbYescLSEKSpuQTO%2FIqFUGk4MytaCofAIqAqKHSsHQ3sIBiJ5moT%2FAHCLNiknUUhMiBO9U2RzQWtsO16kkSkxJFHGRUo3sL%2F4XJhKQk9wmacJlBmZwzSNPKuw3pqmhbhL2w7Y2YGlBSnUN%2FrRKSYFUG02CREgCYJEdaJOuiqGr%2BH61LWVARsCOtU0n2WDbjDig7p0nnfqPmh4oLmwY7aGAAFp%2FwAx5IpUlsZGQ5s7FZWCY1DiBQ2E%2FwBk%2BsLZISlEJER8%2FnT4LQiVXokSGgEpJKh%2FP6URRmplK94ntMVa0GmvXYqywNglIKB0H8abF62VJO9kusrcGBCQQeRUm6BoOt2qiqCQoxyBUi9EDDNkUt%2F5D0oiA28sJVKyCD1moQEKsZJGlAB2EUL72QL2Fq6CFK4mIoW16ZCX2DavMA1KgHoKYkSww%2BzCVoH5ioQjd5ZagoFMiealhxkkqaBIsE6lFAUmI371XCy3G%2FZKMKs1H1EieN%2BP%2BatR%2BiK1pMlTLYbc2AJKd%2FeromRkpw1sqcbKSDPMcRVC13olobQ2hJ1AT%2FGoPv7M2Ea3IbjcdBuKhUpa0e3iDbSSSDE%2FNQVK%2B2CVYmgaSD6hzv8AwoVJBVH7D9livnslsqSFpA37irUrAcVeg4tS2bdp1agQoakgc05KlZEDDcFx0ISEqWTETyavkIbsXeT5DqmVqhYEEdqGUyjy2eSu4CiUITMCrU0HAKZkvk2WD26m1lLzyiUgc7UVmhRtAy8XpwqxfWlCF%2BRobMTzuVUGRasGKadJgTBcbaS5evJ1izt2FhLhH%2FkXHI%2BKTjd9jEnfZUgxtnErt9SFeTbtuFKlEfh71lllNL8YkGEYiL54qbKk26VQlSj%2BIDqB0G1XjlfYucOIQt7tnFL1WnUGGzpmPxCiaTKeGSVomTRDjTzjCVOaUadJPG9WJlGbeyC5gl199TzSjoaElWwCjVNL2MgndCeEXrWCYReP3dsyoKRKfmlyjxVsbuTpFe4liruJpS2y0yha3JJPKUdaycrNsMLXsG3TQZdcXJKkIgd1GgmFyVDVNuu%2BvG31OrATyE9%2F6UCsLmiW4cGWAt5QcJ1jQCYmtEFsSg7apauHEkFKhO8neabaL9UFr24YQndYCQJnsYqpulYhXZEcHugrGg9rLqUK3HQVli7kbZKok4u1t3q9ZSgAKnrArU6aoUm0N7hZUCQqSQI9t6yzlZcErH1g7pU2CnUsEEyPfrVY6TLnFdFkWN6m7dbCtggbwa1Ra9CXjaegu9iQCC2lekA%2FpTEwHFkZvL5TilpQYgbAGayZJOw4QSIvcXOhsJUuDvUixq2wUyjUCogmT04ol2XkjXRMrBlDLKHCShXQHpWgQ9un0OvvaAvy0LCl8bVC6iBsbuEtoUgakr61J5X7AjG3ZFUrDhJMFMzIpcZNsezO4uEpTzCR3o5Sooj99iCSNCCCCRJnikyyETIjf3xOpOyQOJ3pM5eh8XojbtyvkK2jeelZskvsbGFgK4uCpSlKXqgD8W1ZpO2NWKmYruJhCSQTAJPSmQokmrpDxpaUpJVBWOB1p6SFSg2NH3FAFR3UdwCeKk0khuONPQJUpRJJ9ZrG2PEwFKUnZQMb7TV0wXJH0RqKpC%2B4%2FpTVFJ2RTXQ1dVqWgAlI%2FWKPsJMRedQEKDR2kSRwaztOyUDVkKWCdJ3iJ%2FWmQKlKuzxK1ObgpCd%2FepJqtlcrWhhe3bcFEKK4IAnYUjLJUNjBgFTgkEkkbxtzWG2%2Bx1iJdgiFp1du1Qo881JVqK9ZEmahOTQ6Q8FbAkcTUGRmNLi8AWG0qVxvQS%2FRpcdWkJNlaig6ieskb1I37ETk%2FsO27a1pQqDuYmfxCP4U1QbE8%2F2E9IYAUYkAxPI9qpxrstNvsEvulxalRCon5oJMeqR4FpSFKUqNulC5ksZFetS4UUxHxQMhgVjUBJBjcxQS6GY4%2B2eahrUv0knYkGsLb5djD114wpIUTO4356VC6ElFwwFBHzIr6DJ2eIlGjFYCknYdOv4RNUCMvKgqQUxv16ioQZvM%2BYC2pHpOxj938%2FmqbLQNftCyCAIn%2B%2F6UqTb9B%2FIC37ZWhRVuknYgiZqqZcZWDXWNIJUhRg9do9veqYYxdbcVCuvUzBNLlH2BNtIboZEqiREz%2FWjSKSZkLfWqSEgCrGDhq33QNGkq31EQKhVuxy3b6yYSCAdR9%2FiigrZY5FtpMhCjtEkfpTjONXmAQToQngERyJ5%2BKgvjL7El26iCrgGd5PqqDBBbaghOkI%2FDJEcn2qEG6wVlQlIJ%2FEB%2B8PakvLXZaYJuGSgSk8jiYH1ooT5dBcl9CDepKVHUeOu9Vk%2FYSpjRaUwrdCgRwBvSHMKULWiL4krQtRDalAiJB4NLBWNoChQaBUUkKJA36VB0V9oUZU2%2Bo%2Fs0JERv1q1JroPghdVilStYZSED92Njv2q%2Fkb2JcWGGGm0EEsoB5AnitUcl9i%2FjfsLtgqCkqSncTtzTCnChnc2iFLJCQN9uNzQKduhd%2FQ5tLbQQlI1Cd9qMu37H6WwkqQW0me4pboh4plLnIBKRE%2B%2FaiiU2kN%2FuxA%2FAY237URE0FLazBERAnt1qFh1mz06FKTt7dBVJi%2FjHZtUCISSOQAKPgwGmhVu3QVggbz%2BY70LVdlB%2BxswTKUgpnYnptToxQcZUHG7bZUBMRyOhogZOz77qATwFdD3%2FADqtlDphhKASUAucEjmoipRsJBlREn8MTWiPQqSSPfIhaUlBk%2F3vVgmD9u2QtJbTA2mNqjdKyJAhzDgpwgJ7kf8ANLeRjVjphaxwtOlOlEHbc9aXbfYbJazZpSAUg6e20TWgztehVLS0rGr0gDmoQQWRrOxCht8VCBC0SFEEEpPckCKgcZ0qJdYIIbjSkKnoaamnotyvRJrS2K1JIUFA8jrTVVAOJI02xSgSQBHEcUILdDVy21b6eNt%2BKgKnYw%2B4AjYEKq7DCTVkpIQAlI6nag4Igbw%2B00BRiCevejSaFzCSmUFMcmO%2FNXaB5sbrw9KkCRp37TtRJJ%2BhsNjNWFhS0wJBMbVHElkvw%2FB1NJTpb1iO1Gtei6Mbpjy1qHlpSocbUtu2QkuG2j7JaKkhBI1CTvBoBkIvsNrCWnAlUaJg781ExjimPrBsBwhIJXB252oVHdim4roeYohBtVFZKuh%2F2ogp5bVUVBiFx5V0pCQSdWwnms7F8WSnLil3NwoobLxZ5gSAek1IP2VJUrLDdQp7BbW4XGtDi2yDzM9q2qNqiRaa2RuzQ85f25CSG%2FMTx13qov0VxQ6v7lxeKXqgCoBRAHPWjkrJxQ8t7ZPmWzCnQpxIlSZ%2FCfek9Me4KtCObbhLxabQQUIbS00E8g8T880c3suKoB5oxJanbDD21aLS2t0hSCfW8qKVNtoD4yK5ixl%2FBco3bjdugXr2lpG3%2FjBPNBllwVh4Em9op%2FClOPON4a2FoaiXFjmeu%2F1rnRi3s6WTIuJN0Nfc7BTVsSpw7JIMfWtiic95eTt6JBlxryrEtrCw4RBI6k1aRWScpSuPROcDvAz95ZXPaabGHsuMZVbA%2BOrNy4bZLaStavUAelDOKChHdlf5sceYuMOwlKVhs7rT1HzWPyLeka8EkrAVvaJ%2B%2BKAQpKQI3HSkqDQ1ZBvesKvLxPl7pEQJ2FWoMW3okGGWjFq0%2BHmwsngT1p8Y%2FQt5DO6ZWVI9IaSPqBQNWglO3QvZoLaCQpZ9W0bfWgeP9hWI4s4Wbdxxwkdpqs71RapugBkdxV07iTgUAgLO5ismOO7NXlVUa9FkpdT5LgkBR237U6UkjKDGH13NwG0wUoPwFUk0ySW0StkaQkhIHQR196fGNCJO2SKxeKElUjVtq9qZGVAj%2FwA9ISudhxuatzBcbdgO6UhOpxMAidp4%2BKVPoIirlypTgSqN6StD06iFLAhTgko0pjc1qwu0KlKw24%2BQ2f2oKRxvBpu7AYzafIUpwFKTPWrFuLI%2FiLq33FIWo%2BqN5oZRsYtPQjo8tJSmSO1WlSKlN%2BwNduJCVBWpRmJnilTdhxrtkavnUoBJ3PvSJS9DlBdkSvLglK1HbbielZ5P0MhRH37n1FKhpHeeKyZVbNGOr0Dlq8xayiSeu%2FNUklpDRdr0EKUNjzJ%2FhTYR9sVOPsXW%2BUILkiY2B3j5o%2BVADJa9UuSSeTvxVcZS6HxjWhit4lelMEmd9XFX8NLYSMm9jpkExvBkxVmZHrzyGQYUCo8z8VC0m9IEOPFZ4TA7bVcXQ6Ca0xEmZUQOu8UEpULSTZgUHUISIgUqUrDUENHXfLSUNKJVB9RPFLm2MjG0AVOKJUkFI25HNZZTbGRlYzXyAnc%2Bx4oCRbY1UdJ1ISpIA3PQ1DRGOtiDayCIKTGxkbGoXpC67oMMqBILp2G86R3qFxxWwdbrLq%2FMCtSZ68GoOnkrSJHZM%2BYtCQEkEz7f7U%2FFj%2Bznyy2SRghJWRoKE8yRv2NaGopCbQweuFqcUlJGgc%2B%2F51mckaUmxgpWohSTvMUmbXo0OFJDFxS1LAUZTwRFJbsODb0Ni6EEKKZO4ECglJIYnvo8QSo%2Bkpg7bGT%2FAMUuWR%2Bh0V%2BhUu%2BUFKHIGxms7lfZdDNb2pAOomBJpcv0BJtaH4S5pgdCN%2FavoJ4VPexJsPKUoK1n5TztULdVoVDfrMQU8SDUAoXTbqWVALj6%2FWoVSG1zZBwKOnX%2FABJ%2BahYNdsCtpWkBSpmKvi%2FoODA71gtCVBafSd4pcoXsaC12ifTqJI34P6Upopsai1UFagopE7%2B9UV8iXs9S1AVIAPMDp%2FXeipl8kfBlwqARMEckcjrTIx0VyQSt7QakglS%2BumiSSFJiy7cJBCiD0EdasoGPsthetRlUiQP72qBUzMMl5mfSpXcVCmgfcsONpWUoAJiBFVyRErBUOakrXMj8qz0HSQ1uWytrVqUO%2FwDtUUULYHcAShSisrPHuRUcyr9A9S1EFwFYSEjkbzQ6ZojaRG8VeDZ9S%2FSepHFKsZGf2Qu4xBJQoBYITEnilubLnNPofYdcLVCtW8GByKZDYHJkh%2B87I9O8flRxivZbmwk3cIOjUsK33P8AtRaQmTbY%2BQ6lSQlIAJA3%2FOr%2BSumSF3sUWUqBIUCdoA%2FrVLJsJxRklwBJWVA7wB1%2BtNWVFcD5N5KgAQUDkneaU8myLEOW3plcEDg9Iq4TfoCeEIMoStUlXoJk%2FwAq0RnYn499hy0YC9JClKEyZMU6GOxscaDaWgFAakx%2FGreNLoHgoixbJPI1R2Oxpbv2LeXdIVYa9QSoq7EdvarjCwCU2bAQmYSBEEHfamrSIGkMjmYAG4FHj2wZS0YlgKJmSOCes06kK5Mds25jWCo79uPaqpE5MKJt9TYBTI6irKPvuwTKQSN99uahBNVkDO5USD7b1CHicPGoaiUjk7VXFFuT%2Bw5b2gQlI3CuhHWpxRLY9DYCSqZSBAM%2FpVlNiS20hsqB0xBj361dESvoCPOJDpTBJmZNIcn9jlFBGwVK0gE6P0pkHasjUfZOsPT6UhRCjM88U5NJAS41omlghLfuPn2q1MLG9UGVEJHpXvTCpY%2FoZLUtbgSlaSO3NUK40HLKyQsJKZ0zJ2q1JIFzCIsQANIB2iIiKLl9AvILtsJaBVBEDr1%2BlU5MFyb7EltlSwB%2BI7bVcf8ABQaYtdSATuBtPv3o5foggbQpuLfUoKSD1G9LSYxK%2BicWqWw2ofh25p1DVKkRnEAhx9c7p454qmi0vskTLxVY2LhJICS3v1g0MV3ZHJhNm2Rc2l7dKWpCmgDEfiJMVGkDJ%2FQbwq2KlApQvURA260tRsGH7GuZlNWIetlrWlxKZJ7z0q3GhqSKOxUuKdU%2BnUZIS0N5UayZIv0MinWy6ch4A7hWH3rdyVi9dCVKPRv2PvWjDjrYqe2H0YateHvah5hF4U7K2GwmmtOykgQlLDV2lHnain1HSOAKFRdluDWwWVtrZVcW8heokA%2FvdqPi%2FsEVwZpWpx597S4Va1RvP1pb7DlLqmAMTDlxfuvqdUWkmRCuo6VdN7QakvsAXj5F6%2FduqUvUZJUZoS2gDmPXilsw0VqFsCVlJPNBmTkgoaEMGwhti11BPlLcMqjgJ70EMNFzlZ5iCm2YQ0YQOFRyakuxUYLp7JRgIW0wlxyY3IFCLhV0wzZOLKnFE6ApWqI4ouTGqa6sbIuB%2FiTy1gFI2jiqbb7HSdR2Q3HXBdYy5dBWpKeByCazZW7G44qhgW3AlalJVKjuY4q2Un9BnC8NS80HVoUROncUUY%2FYvJlpBi8t220pbCB5g31RMU0z48jT2RS8uSlDaVCSpUbdaRla6N0PsPYdbobtmipZWOT3%2BKLFDWypdkMzksMtlpOqHOB2FZvJVMd47VjjJli3a4ap0JUlxa5WTWWNV%2Bx3kS3TDjjyocCFLStW0zUqy4pNGdg35S5Kgok71AmStDqZS3JJHtU5MztVpj9LyQNKVEJJHJ5rQWkZqeC5RrKSTyN6oPgvbBV68TqQCnj8qCd%2BifGCkCCVKJBJ4J7UPD2A%2FoWbcW2VHWUyeh5o8cvoqh4h51w6QshI7ma0x6IeuLW3KSSAd9j%2FABoiA1xRC0nconiZj%2BtApJe7KFXnShjSJUtWw9hFU5WrKp3sjdzqICzBSBBg9KVIe42lRC8TuhrMkgcT3rNJjMeP6Ile3aIUAYVHBHArNPI7NMcX2R5dyVLAAKyeTOwpPK2MUaPQ6gb6lSKOM2i4uxRChyolInb4q3Nipps9W8IJBB%2FvrQuV9hLH9gxboKikuJI%2BZ1fSjgnY2mYIWSsqBhW4jb%2BP1rS0geaTMlPFI216onnrQSjSM912D3XlrJClH3naaEnIQK5BIMmeDULe%2BzEuJ9QCzp61KTBg3Qku6BCkJ2I256Uqcfo0w6A10%2BBICwVcAf71iyz%2Bh70tAoukj1EzxyaSFS9GAdKDK1ap%2FSoWqj0NfvDZJ3Kgd%2FioG5N7PtSGgpwnaNgetQFNvQDffVdPSlZTvHpMUN0bY6jQVtdKRBj5Jo4KzLkbfoP276QkJSoFP6VuVemY2FF3ASytJVtzA6mk5pKq9hY%2BwQt9Y1JSJ3%2FKsxuhJpCS3AkHYqA%2Fe%2F4oG0G8l9iBOoEyk7mIpGSa9MNJehu7JgysoG%2FP50hv7DUl9HyVQrUhKiOPiluX0Gsh464dGoEhP0EnvS26CjK3SBy35K0rJER7%2FlVc4%2FYfBkhbeKjMESa9%2B8iXR8%2F4jiDI4UY55mrhLkymhVpEkj1D44q73RQ%2BQ0U7GBv3qyrR6tvSChUap234NRquyWhEMJWoAISCNj7%2B9FGTRaaMnbEafwSeu1NkkwpuwLc4UDBATMSDuBFJaXSAYGdw1XmDy5giZiYqcWEt6MW8NWFElKgOeKvgy2l9maLFSBpgSDAnr70Sh9iHN3ocCwKCDpGnkd4%2FpRpIuMmZrsyAfSdQM7CBUavQWwU9YhUgNpSZnqJ%2BRSpRaDTaEGLNKSvZQE%2FhA4%2BaqmA8mxN60KpUpBAmBOwFLeOlRUSP3lsUrJkxJmOaU1XYYOdaIbOxHHO8Cql0QBXTKUhQGmQqIpUe9lcbdgFaRJJBAPHSP60zijSiO40B93Vq0GPr%2BlBOP0QrJtLnmLUpop3iSNjSEm5bKJEy28EpKIUonb2p6iyMMJeJAS7r2AG46%2B1AaGrHrLji5CCdokAxUFyjSCaXAnTJ53JneoVxdCqnCVJRC5UOegqE4sau3RaKkqGlUb6ulQEHs3RL4iVDeP8ASKhA%2FaKUdMKVI%2FMU2AUZV6JTaMh30qABgzJ3psX6AaRJrcaUpUoNJ%2FDHuKYsiEvsc%2BbpVBKZ2EdatSsjY%2FTDiQRGwmR1qwKQ6tUFTgKQpA4IjmmRn9gSS9EwsmzAEnV89adFJgN0rJAltQA9MHg%2FFOM7Z6m3kyEkq45%2FjUIEGLQAiEz1%2BPmoQIJt9Cp0pPc9quiHrTKFrIH4uIjapTIOBZCfSnUfiqIKotUo3g6uAQOahBRSYnSEzPWoQHrdKTpJ2BkSNxQTl6GQj7EXn%2FSUk%2BkGk0PcdWAFFSnCQkAAzJqwA%2Fho08n36UcZ0WrJXa3WlaIPWIoozsVPHSsljN6lCQEqVM9%2BKYmBGVD8XBXBJUT80XNkthC0AUQrYfwFFGfojT7JthSQpsEhM8bDimIztMOizKlAhIWjpT0kglD7EbpoNpnSkq4qnFMGSpjG2YW6%2FKElfQVUVRRNLXDFpt0kgFMbyefij0MVVsRatCpwnQkpBjmoEpRDLlqptCUhAJ5BFUXyRFrxlZcXoQSCAapuickWDlzBBfYLaqdT%2BxbdcW4QoTpjpUxxvZUpJKz1i2SMJxBag5bWi3gAT1ANRMGU%2FokGAFgpLhJDaEyD%2FmI4%2Basicu%2FQHxhSblt1p5CSFEmSNz8UEotjYt90A8Jy6lV2b11tJZYRqaBAPrPU%2FwAapQDnZYVmprDMIeBCnFlXnKWtX4z%2FABpkdGeaYPvrx9zAbd5xLbJcWtxKUiBue1W6Lil6K0GIO2rqikQpQKSZ2E80qUqZqbtbFHb1HlpKSCo%2BkVXNgpwHtvcraZKW0bce%2FwDxTQHVg67uw02SoJUVLkg7R8VT6IopuiJqZN2p8I2CjBKuR8UgbKVKxs%2BA8%2Fb2bcfd0kFRHJ%2BahIu9hVGhZfVAQnYDaAPioSLtWCnrfzn0JIBQDJB4maCUfZHq2SBkJHloSUhIj4pRnRg5ceUToKTA2k1Cwep9SipRAKiJ261A1kaVA3y9ZM6SDwO9BKFmxPQ9VYqdSlsNCSREbUaE5MqomNhZNIslJVoQpCe3NOpNC0nKJGbtwm4KNQKEmVE9KSDjg2wALMXl4FIjSDM9qRLG27NsZUiUOMBhtrTqIHv706K0DKX%2FAElc5jV%2FiGJ26GknykbGsGeTkzThdbZJcMYU0yQQnygNh1Jip%2BKWwnb7BjzrguFNgS2OSOtZsjvobCLQq2%2BUuAAAnag5htMlNkpQR5i0pHajQifexYLd84aACJ4J4FPUr0CP9EAqOkDsOKsJybGa2lrcISoBPeasupDBwp8wtg7xBHeo4toF%2FsTUCFpbJ477zVRxtFBayZXp3SkT70%2BOkBKdMxuW1gqABUTP02oiQlY3attOpwgapgSOKgdCzrMIK3AggHbbmrLbtkSxEISl1IjfpWadehsHpFe4qEhJUSkHfYHisc36HYtECu3j5hbM69yCaU0n2alNMZKJCtIUmNwAkVXBFPIj0BXpkCOp1bn4oPj%2FAGW5qhJy40%2BiUgRsedqtYyRbe6GbtyXCAFkDoOKLggr%2BxslRJ6GjbMyQt5ygNtlAHk8fSomWNnXSSJMR7zVt2Sm%2BhLWSJCSSTtPb5oQqV7PFpITBgnud4%2BtQnFfYMu7stp0yT8Ck5p0hqxqwEbp11Sla1pGwAHWsDySZrjjjWxuXXCZKyqCetA0%2FZTwr0IvOpIkCYO29QmOFoF3t2tA0I57iqSNeHEkrYnarWhPq1AkaufzqwcmSPoUvHg4jQVKKQNzJ56VAMeZRe0C23EpXrAB6RNDx3Y2eVNj1F6FaWZAmDIHB%2BtEnXQMoOtbDdm84kpIUQobGDxRqbMzTQ5cu1GST5m360vJP2w4RMUuHTr5PJINVy%2Bg2xsp8qWBK4mNjBpUkMUGZpWZK9UpI6mgfH9DIqj555CQEpSJ9ztFIyuPoK0NC8Q2JB3MiszVl2hi9enRq%2FLqfypblT2NxQfLQPFyVAyEhJ3JVzRxkn0bXjJMxvcQdxqH8K93R86pBtjlHzP60F09CpdjtP4wOmkn61rKQQZA32H9ppsEKyGdyAHVwAKNixkndJJ3OoClZFoZjH6ePoP4UxdDBJQBW2CAR5nH1qNabFZXpA55KfMQNIjSenvVhy6MSBA2G%2BmfyFQGYyc5P%2FwC8iqvdCzNvcOzvB29qlEHCN0id%2FWasKPYPuQJZECCkk%2B%2B9QcIOJSEohIEqM7VAWtAYblU78%2F8A8ppWRsXB7Ad7uhQO43P8aWxwCX%2F4XD1HB%2BtHlWiAC6AhJjeTv%2BdYoIdBaf8A99gO4A8sGN4NLk%2FyY5JcSOYpvbEnc1LYsgN0BrGw%2FwDIkVRA7b%2F%2BJw9ZI%2FU1ckQYrJhW5%2FCKopPYaw0ny2jJnf8AgatjobWww9shRGxkD9KXN6HQR4en%2FusfpRLoGXYwu%2F8AzOjppNWZn2xK0A0MGN9%2F4UubNWGKcHZJbMDzWRAjTWjGZv8ASiWsAQgxvCP4UwoNW%2B7Sp32H86giXYk2SXNyTv8A1ocbYLC7JOjk8K%2FgK0plSWmSLDANa9u1WJJrYAamtv3R%2FGtWFaKl%2FFh1Oydtt%2F604QPLfdS539QqECjG6STuYVVrsgsyAUJkA07Jrogo0B57mw%2FATSbZAnA4gRP8qoggrbYcaqhAaonyRufxH%2F8Amon0i17Bj34x%2FwCxH6Vnn2OxdAy42CgONv4UIVg9sDW3tzz771Aodh%2B2J%2B7ub9f50qT%2FACQ5IKWZPmq3P4T%2FABrRDsQ9vZJ8P30k7nQf4CmmNdsOW%2F4mj1k1Ag7acCnxWgsT2yc4J%2F4lnrB3psESS2yZo%2FEP77UwEHYgB5ydhx%2FSoDk6M8KA84GBO1DB6Ek64s3o2gbe1FQzGtg23A0sGBMqqFZOwldkhsQSNqgMeyNI%2FCr4oJ9DJfyLRysB%2FwBucfvKo8AvINs0EjALVIJANzuO%2Bxpk1phPpC2DbYSqNoO1Z4PZoj%2FFgrFNnWI23P8AGj9hw6D%2BGgf4Y%2BYEyf4GrE2IXHqwy%2BCvUNufk0T6QubIzii1%2FdrMa1RpIiekUC%2FkNj%2FAg1z%2B4Ohc3%2FOkDo9IaAkzJJ5%2FjUKzJLokI%2FA2OmoCnx6EjO%2FA8tkRtJ%2FnS5suP8gayBLWw5IoCsr2DGEpN%2B9IB%2F5qDsAncbJAGw1cfWoG0Z22533g7TUKDCtgqO4qqQTirYJufwg9ZNKl2IS%2FOv2fHZK422%2FlVLsF9s9QBDGw%2FEkfqKXJ7Hy%2F%2FVZI2APvDew4P8a0LsvFFOKsJ3mzRjaZn3oZuui2ldEBvfxCgGPS0OcO2DUbbpNQwyf5BC8J0p3%2FAHKrIP8AHeyv0JSXrgkAmVfwFczJ%2FI6uRdBdn%2F8ApXD1hImhm9hx6ArxIbQQSCVb%2B%2B9LibK%2FBC1tvdpJ3Mdfmo0qL8hJR0TVAAaSAIEJ%2FjV4Gc2fYtZE%2BcNzWkEKL6fA%2FiKhcexukkJWQSDv%2FOoPGIA1JMCdJ%2FjT49CZ9s85LpO53%2FhVlR6YXAATsAN%2BlDexE%2BzB0mUb8g%2FwogsZ9A8xoQIkfxqBS6EsYJDLcGOf50E3orBuWyvMU3aBO5kfwFJl0bGitsT%2FAPIr3rHPsdHoi9xu%2B8TuaAsFtE6SZM7%2FAMqhAkoCOB1%2FjULXYCcJLrgJJG9QeNjuvfeoIk9s8k77n%2BxUKE3OFf8ApNQggrcb7wpMfmmoaeuhFJIKQDAqCsnYq8SG5BgxUJiVtkdxImHTJmRv9BWHI%2FyHw7GTf730%2FjQ0XN7G7f4SeskTQT6Gpja5%2Fd%2BlKHwSpgy8ADsAADWar2LjJ0ho0Tqe3Ow2%2FKrJ%2FpM77iOnm%2FyqEgD7fj%2F9UmoMPP8A7rnyP4UqT2Oxt8Q9bKVCvUr8KTz1irhsHN0P3d3FT3FXJIDCtnqyQmAYGgn61nh2Xj%2Fmxn%2F9xQ6UE%2Bxwszu43O%2B5oKRDJwmUmTOkfxNJfZBnc%2Bl1ATsJPHzVDElxbBdzu84DuJrPPtm7D%2FFgZKlBDgBIEfyoMe3s1y%2Fif%2F%2FZ" - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "147", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:53 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:53 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_8CrJQZ4GEo5C37k3DTxSgw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:53 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111297984366; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:53 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "85581b6c6d277fa738d021d37568bbb0", - "x-frame-options": "SAMEORIGIN", - "x-rate-limit-limit": "415", - "x-rate-limit-remaining": "411", - "x-rate-limit-reset": "1587864355", - "x-response-time": "364", - "x-transaction": "00d00e5d0063da2c", - "x-tsa-request-body-time": "413", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - }, - "body": "{\"media_id\":1254206528162324480,\"media_id_string\":\"1254206528162324480\",\"size\":207808,\"expires_after_secs\":86400,\"image\":{\"image_type\":\"image\\\/jpeg\",\"w\":1024,\"h\":682}}" - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/1.1\/statuses\/update.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"RetzJJ6LP2PkP3o6gDmdImSAqXo%3D\"", - "Expect": null - }, - "body": "media_ids=1254206528162324480&status=Hello%20World%201587861062" - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "1033", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:53 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:53 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_O75F2NbA9zJ103fgjkZXfA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:53 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111368767384; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:53 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "4beafab368e62bfadb87721f32433465", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "168", - "x-transaction": "00b2574000ab3b9b", - "x-tsa-request-body-time": "0", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"created_at\":\"Sun Apr 26 00:31:53 +0000 2020\",\"id\":1254206531073126405,\"id_str\":\"1254206531073126405\",\"text\":\"Hello World 1587861062 https:\\\/\\\/t.co\\\/k34Vy1Gru6\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254206528162324480,\"id_str\":\"1254206528162324480\",\"indices\":[23,46],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfWMToXYAAK1Mx.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfWMToXYAAK1Mx.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/k34Vy1Gru6\",\"display_url\":\"pic.twitter.com\\\/k34Vy1Gru6\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/oauthlibtest\\\/status\\\/1254206531073126405\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"},\"large\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254206528162324480,\"id_str\":\"1254206528162324480\",\"indices\":[23,46],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfWMToXYAAK1Mx.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfWMToXYAAK1Mx.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/k34Vy1Gru6\",\"display_url\":\"pic.twitter.com\\\/k34Vy1Gru6\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/oauthlibtest\\\/status\\\/1254206531073126405\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"medium\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"},\"large\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"}}}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/twitteroauth.com\\\" rel=\\\"nofollow\\\"\\u003eTwitterOAuth dev\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":5,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"}" - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/1.1\/statuses\/destroy\/1254206531073126405.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"PSh1t4hehkC7u%2BSavz%2F1XjDqNsQ%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "1032", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:54 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:54 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_3oUt7yEiIkrIdZm93KffgQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:54 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111425865025; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:54 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "d611a34cdef1b62e60997f8804b13121", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "32", - "x-transaction": "0095262200cd1570", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"created_at\":\"Sun Apr 26 00:31:53 +0000 2020\",\"id\":1254206531073126405,\"id_str\":\"1254206531073126405\",\"text\":\"Hello World 1587861062 https:\\\/\\\/t.co\\\/k34Vy1Gru6\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254206528162324480,\"id_str\":\"1254206528162324480\",\"indices\":[23,46],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfWMToXYAAK1Mx.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfWMToXYAAK1Mx.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/k34Vy1Gru6\",\"display_url\":\"pic.twitter.com\\\/k34Vy1Gru6\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/oauthlibtest\\\/status\\\/1254206531073126405\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"},\"medium\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254206528162324480,\"id_str\":\"1254206528162324480\",\"indices\":[23,46],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfWMToXYAAK1Mx.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/media\\\/EWfWMToXYAAK1Mx.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/k34Vy1Gru6\",\"display_url\":\"pic.twitter.com\\\/k34Vy1Gru6\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/oauthlibtest\\\/status\\\/1254206531073126405\\\/photo\\\/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"},\"medium\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"}}}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/twitteroauth.com\\\" rel=\\\"nofollow\\\"\\u003eTwitterOAuth dev\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":6,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesUpdateWithMediaChunked.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesUpdateWithMediaChunked.json deleted file mode 100644 index ce538a2d..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testPostStatusesUpdateWithMediaChunked.json +++ /dev/null @@ -1,2392 +0,0 @@ -[{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"cOKZmxZ5f3bxiwWU%2B1cJ9hWpUL4%3D\"", - "Expect": null - }, - "body": "command=INIT&media_type=video%2Fmp4&total_bytes=383631" - }, - "response": { - "status": { - "http_version": "2", - "code": "202", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "101", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:54 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:54 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_0CYjFmw6Rjdl\/xKmqvzf4g==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:54 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111466374311; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:54 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "202 Accepted", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "448b96791c0d13223e24f9c1edc4a7fa", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "200", - "x-rate-limit-remaining": "198", - "x-rate-limit-reset": "1587864355", - "x-response-time": "28", - "x-transaction": "009da55c002c6fca", - "x-tsa-request-body-time": "1", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - }, - "body": "{\"media_id\":1254206535166763008,\"media_id_string\":\"1254206535166763008\",\"expires_after_secs\":86399}" - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"oyitDhdsPZg4%2Forbkwz9l5Wa5qk%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=AAAAHGZ0eXBtcDQyAAAAAG1wNDJpc29tYXZjMQAAAIRmcmVlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFy%2BhtZGF0AAACCQYF%2F%2F8F3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDc5IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAwOSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTAgcmVmPTIgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT11bWggc3VibWU9NiBwc3k9MSBwc3lfcmQ9MS4wOjAuMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTAgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTYgbnI9MCBkZWNpbWF0ZT0xIG1iYWZmPTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTAgd3ByZWRwPTAga2V5aW50PTMwMCBrZXlpbnRfbWluPTMwIHNjZW5lY3V0PTQwIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0xMCBxcG1heD01MSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAABUFmWIgBAACuIiwOmAAIm7IcAAQEY4AAgIReaj%2Bj8XjXl%2BufIQUSkL2DI81%2FF5iCMp%2B3nyEGKffKfxT%2FKfOQYp9A8xPuRZeIEgn7z4rafHWN%2F%2F%2F5D4eBkq89D4h73iBofHeq8Q8%2BKNKhmBrHJX9Z8V%2F%2Fz%2F82%2F1X1EYGs5Lk%2BE90aVHwooPxeX1%2Bli8vX%2B2fLmefFB3mwHTwFJ0%2BzFpk5InjESSuTI%2BKZVJ1tF6rzV8%2Bvp8RoVI1a9vz%2BUWuv28%2BK%2BtY1S4v9sMuABEfqvdP%2F%2FgBXbvFptAw8AMI%2FEjYcAZtvUD3r%2BHBUPIvxbE6AwUZTVwsk4DOOBOkFTPeHQFnlYyBCilbNAZlDoLhf%2F8GKl%2FHgFVT554BPvr%2BgXkKMH%2F3GuD3oNuWYSji3I7CvKeMVnniZU%2F%2F%2F6KqsOk4Cg4l%2FDWADKo3IS3N%2BLwZUToUZgiYfPrhABHawIAERi8MvgKMYAavHAL2gBZx%2FMUAAEWAnwCrywtHbx4sx9HMZUO0C4zamgTyv%2B96z%2Ftzw6M3Fp7Inb4GEBhQPAQwXCeQsBLcBLXg%2FesJ3AosDQSQZL6Avb6wJbxzHS8UGCR%2FKzyQsVAXZKQvF5TtP%2Fl%2BJd2hu%2BPhgAFWUxIQiRwiN0DUQtYZb6AO44GRmDJhfDsfwMdYRWYSyr0WtO%2FvidN0TuxG4rwYPRcT%2FxOlORJNiJ7RLvEFMZgs0JnTt%2FPhxldEYDo6JIMUOY3E1C%2F1Fuor1Nr8%2BJ8zRa2P28%2BqZHxJyNOqX51tErvFq7en58V9OrtOSKOU%2BK5FPiCAS%2FPJ8AkBdBcEAdran579L0A%2Fq0YJMAOvbJ%2FrDVJbhQSvQOAAfMpY5CAii4BAJAJ4IvNM65Bw6sPvfBgGlEIZipkBOXvAYRMNxZkjTWV9m35ANLMFLNR5j%2FAxFSbmUA5IOZobPwbq6nYbI%2B4Sf756D%2BjDpCfQ7arsGAgZA4AIAqTLajig47kxnlsrlodJOMlhIh%2BesaFtU8eRw%2BGTcPmEEOxqAsaEhWHGAQicBPNxlR6ff5D6ZgLlAwoWEm6ZPu5vQZU%2BkW0vhAK3hAUxpYg9tKg4KiIaUttEtQV2yQFRjpQ%2FQ8SMUkIPwAG1rBvwAxrYctgRef38UYffeX%2BVv%2Biypmyr9vKlQBvfTKIBjTfXOb%2BuZ%2B4HBji8CyoahAXEsMBQVpZ2MAgj%2BmAYImcZaTLZTAYlk4CYM1wQ8biFyu32oZRPdxNVrRcp7Q64BRZTmAI5NHf5avYUJn3L5oI%2F%2FAtJfPmQYDGFTowVshiz6RXCuLhdLxBAAmZwgCOnh7l3MLBXh7KmVj1CSMniZAVEKYXgS39xvXG2rvEIYmpACdY4ba2QUQPtMu7N%2BC1zhp1g62UoaZ8z3d2G4GWZt95KUNLMOgebcNCLH5SrqfyoHjQMAAoxkEAAXejnHDPRSriM%2BTyZy2ugdBNghBtzH1i%2BfhZLRtqqF2jVxN3yYarkbnVm1MXVX5WvM22lSE8NHzAwmjYcSqI%2FP%2Fuz03P9Ofs0FH70y%2F%2F%2BbLTmc8Y%2F8NKlAN0z7Hfg%2B%2FaxnrKmUFV6WPnb74DbVSxekaPcTj%2FM6%2F3Dg8uiOYQIlJDCdFW%2FgBCCxIGD38ghre8u3OAbAjA4vFQYMYdFgGPga2PkQmUQ%2FKJUVx4lRD2jSRXr786l7f%2F%2FwR75yifvF4UUC0%2Fz6fRpLbD14nZkaIwOjGZRkbrzLX58XadRf8%2FkiOou06q0%2BvKz4nhVk62JVjd5dn8u41RW9F%2FErc6a4f6HXAcdTT2fvAxWcPjLPvCABEa4IAnMKGJyQhOYAIqfy%2FHEQBsxQAMgef9%2FG%2BHQLBWsDnIDAMc9Rya7WdFijXFoiQlI6Vyw%2Fcv4nVxauMoRarJmX44%2FDrfGSwxMttPBWlcB5lplzIWLA1%2FgzMM9H8yqdr5sIxbZD2fGroV1vbWSrlUulBvXeqpU6z3rFfDUeGC7ARyB6aJVo5y%2FITlmTKbOPc1VAFTCTb12jIw7JjGzk8F3WnH5tVSapxX5Q7%2FP%2FjzbIrvEYlSrWa6MOADHAmAAgymfEzoSAAEcPymDwJ1FewlAApG1xJwzNjCph4n5hWA1HHLn631n8IiOXYH31Qy%2Fvb1W%2F54YeNDHHQdpJqjxSIs31egAEniOTSjjkxOXR7sjAACAD%2FP9P6z3%2Bu%2BVGlVoqmwu4lRXq1CionnSVYkmMUvGUAkl2B8uMTYDo6NIWaJyZ6dTZ0b1p%2FidTzRuvtP8Ti%2FTrYvU%2F6dbRO90%2BKypErYi913%2BJU%2FadVeVXKor%2BX%2F2LFS%2BnHUFag94epF5SqJgbtPIR76PRVmAAIAE%2BbbBpJ1tpl31WBQABAOBIABESBEy7PwlGw9YhZ18%2Bg1KqV2VL%2Fe4QCDJMCAg%2FHiVMwT7CAARpXzWg22KgELWH6ch6x6BWRdJwgJSFCATFJGC4FFNs79NAErH2c84ay%2FS8u4nfolRRxROK8olS4VcvK6iVp0NV4%2F7eJxD86IwHTwKT0TiZBLonXpVU6i7E6qmTUUzqscnJXp1sWTKsT5XuJV%2FS86%2BiSS%2FUpLByc8A4DunABpD7k%2BEpfemgXfciYdIbEnIPP6ZFSvml7ePEmZJg8ShMzSi%2FT84c8dD6RuQHzVROQpQH3cBiEwxDsCoxxCqXYtGlALnKEEzLxrFS4ACOGAERe4A79xR5e%2FeO5Im9QyCUhtwM3%2FnMdyfadqZRnVEJKG8wUZuMAAQB%2BAE0X9Jz2jkb%2B9FZxNUgYAAhyhgOSuzBHeLj4dwc3QRY%2BE7O%2BJ0806iAe86iB7k%2BX9KrlUVjcV1a%2FjVftP8b5v6xPAZRq19vicKK54nFcadQoq8RgdMAmXG4lRT9aqdQuFk86q0Sop9E4vNKqn1efyn3aJxXFPrmJ1xy1EOBVFOM%2F%2F8F6HXj%2FM%2FYdEYCCNFDXe%2BAcgrYoKZjU92zLAKv8Uy%2F7clWOmkrcvHvlFS%2FjzsfsIC7T8xb03xnfrBvaf%2BJRrn%2FlRcXWZlalxFFHfAAjEtWGGZxQnMzAsADjhwEnLDLwKCYq7fY9HWGxzXRfTACaOECOW4zBb%2F37tfZgvsoiuJI%2BvsIoikZFIHcHEAimL6dTgFY2NtKsWAB2uFUB5WAAS8VKXOmXsWKZ6gt2Qy6ZGAM3bIaF%2FvGFZmJJ7eDI42oN7HCfDnKiccUWzIpJ8E%2Fo3dun8u5cVlWUkQ8Tu8uKxKitiN3Lv9kJ3%2BBO9yKwHTwCkHd2XxOL%2FIvNy3ovErKk6i%2FXimJVfSqp%2F05NIj79KsWpsXT%2BXL%2BOfs1zFBDwSPYhI%2FrAKLCY%2FANyWQqAue%2BAN9qADOAxeOXM0srcAwEZXyRg3NKCAANgCCioQEKsiNGgAZjGOmN%2BB7KBBqQ3YC2M4AXc3s9SFlYDRoD8JjANRg5JES1wBILFu%2FASc6SmzvyyAHYL8GM2plfiQECHTD1jD8M3RogBt2LdicXYxqDFwoB0ndpqLNEPq0zYXUTVgggKJ8EkKANPwxn%2FzHs%2F0Z3GDrvDFbeXz8C0dwd94jLSqBmPvMMZOUo0xfUd3NejPUBRgdKd0Slj0Rf4jDHCTrdAzK00Od%2FoYfIIuFqw7EAqHH0UaQhb%2F3hY5mBVo9gGIY2QYBfIxht76KLBItubfsQY%2BQfGxvrAPCcQFLXMqfChBagkV2nD2%2Fg6YdoXOPXLjIFrU6EKk84CoA4fgGETe78G5JbDfq7z9XIwzVaPZY5kf77mC2B4hZ5xDR7L8wfe6iKsUI4SW23dcI01GQYjc%2BDUVHAFgrNAWC4EYkjZLWAzG2aReD68RxFuwtaYz%2FBaORn%2Fxieh9fVE25qAXx6mQ3110MsMV877uEpAYB6ZCTlivPWnEYSH94VBnGJp2VSA6OBqaKK8AK%2F0NUMpARwNASXqBbOEJtsBOEHTpvCuflmmPcBfMJYIg1ROuBKAaS%2BCcPzN1iH7eTEARBPs9AHa%2F4ueBg5dAeOBu42mKQDkMEA4BIAcIjeMOEIyy1UniUcEesCMZCsF8gVxDpuDIweiAlaX4OMDwWI%2FJEgfsFLsDYPRwFypuvAD%2FlGSsAAn8meGYS6v0e%2FBInzzUBsC3bbYAsPd4GA6A4KsBR7zHhb4ygLV7sQEgvZ6ZB9M%2BonShRLlx0TisjwJ85KSKxP6VXKSKxJLulVxO7EaohxfXicV3RKlzlQjAdHQknon9EraJVXlxcSq9eKZ8X61cT8J5z5MeP%2Bmrwgav2eAD6zOBCPSrdDtOZgAQCYhwMu4AhUgZwZCPjgWm6P9LuLiSkCHGy%2FC%2Fp7QAcmOwjFdJ42NBl66%2FvyWfGlKOfmzvsHKdiLcqQIYVhSD13levdhIPZUxwY8P%2F4JAAEAJgMDAA9iQTIIbcqYUTfBGBFHdZskZEwEQHWuTLgQ%2FH0%2BCb5qe%2Fu96qE0knwqqp6H8BfNQHvKIHZvVRGbCQYG0eKQdzo3kB%2FvlXG2ckt5SviFPKdZADCMjaDS3xYMUyDt5DETWJX9eCCD5IYAgCgAdFzDMgChkMAlsdAhLDKxiVKfABJt2CEG9V2ChuDOcB8nOrjoIvnwIe2AB9Bg%2FXSD4ogMhp9EYSp0ocpCZ%2FHqKUTPmHBABoQYSyeVSanjdbt77aRU2OE2VXisIEwAAgCgcEBcAYeywrHkN8TG7pHwABWpKEXek%2BN2OHIImNvMgMb6mRigHioBR%2B4owqgFX3zUQD6ml%2FXioIngFMuLkZ6K6AMwMTNPSeM1JnsOt2GFKhi%2FTRkXOZdA7dEByh2j4QAA0PDAIOYXp6KgAYYHBocLk97TuUahSQ5MmgEmAhXSgDniDG1J0qAw0gl9VEa1hAmUJ8gE%2FaYEnfPwDfqwPolT1Bva4jfzMzl%2FhVFbSjSwHFeQbkfl%2BjCEJgABATAqh27qDogkKWoNZCz0ZwUnm5oquWJG9e3lotu9RFVGceskoBrn50bWchoo%2B6zRGDYdIv8ZA2zx9bOeAz1D78Wnfm%2F%2FeFHnGRKKQ3k8ZvDFhPzj9bqeYB0GY%2BpACrNe6j4ocJwSocWU7lngnUr6JvQCCWTr%2BmaoMWD1YNQ2p5%2FtM8aEF9tfiwWL6Umf%2FT6MKVHFufwFixoNbrdC4DRTGePwgAERxoQBFCHxnCLvTAs8FeMSkOX%2BdY2bSw5hKkMQXbBEi53vtYxu6iNV%2FVCOJhHwWtfhruAwCSDiLqJcMAy3OGnC1BMT2AAikgdl%2FRRO6j6Lg6UN%2FsUGMCf3P7xN6fhTsrOJdMlOIZC5oCAGCQGIM9cNTnqKcwQJsxcQACudKULbETJ891Mh7B8AHe6kpk47i6rR0PY4KorLqxT6Uf47nHXmh8e%2F%2FHgtW2b4AIUeEsiG88pLzwBLpDtz4qufkRr1YSsatz79kISD4t4BTnLIPLV%2FkUKmnAgAQiCwgWFZxBUxIHuJrYKJKQAGg66EAJrWtgVA6yXRW2KBQXnH1xZXdl5DheZwI2K3O8ST0%2FMkV3MEE1CgPhY%2FmYB7LjvwnPPcFJtYMGGHy%2FA7IUpRUQy8RCkBsW0uAN8qYBuzBAAGADiTQgABAApFnoOHRy%2FFn3gORRb8M5eOAq0S4A4AxUBK2B%2F6IjHBtvYg0A9K8exxO7vgBx4WVdsAxb%2FVdvhDZeYQGCoiSXnpj6BFuNwpl%2B9Wub8AJAcQmXUNewmhexfAMUrDzzu%2BwNh0LP3Hshw1GwMsuXqggFgNZCLFuAuUB2nBpGggQrijaAbo%2B%2BaoLCz124mGncaBxZ3ioZifZF1vit8mROEQ%2FZgo98L7unKXZticGxyWRQGM8u%2F%2BaYDtPgQ24oajDMKey8TU9SLHxtIONZgoUcDYqQ9RFcXusVtzTMDnv3i1GF6Bn9093H7h5nX1f%2B%2F%2Bv69fPrUa6Xaf4nEOdGq69H5XLgneUrisTitwJUUaZDd5dP41xD2v%2FEYDo6EkGKSkieDdflP%2BFdgv%2F%2BmWnUImoaF8Sf%2F%2F2%2B9vz6lrUXj%2F4QLCp9U6UD41%2FArw3vCBOMq5NJFTh4UVJFSk1AkBcRDD89su4Ej02cCOvbbg5wezgKohOXG4qAwGAkes3uQA%2FmwElZgArR23PsW%2FM88AtyWGoiGvaArvUCEijdP%2F3qcfzGz%2FZLSwIbs5WOs1GYdSfI9oTCs7QQAgAQCA2BgACpxmYAViXwpQDKO4aC0MIKQXD60oJI%2FYFG3huJC8y8ZcXc1capFwNE4SY%2FiCC8qb%2FBR5NhovciiW8i7fjypbHjNREPfnBWfZkTPvW%2FaiCYZQP%2FxHmyB1N7y1kO2W4WuFAvRSTby46N7LRuIWgczJLBHwLPyBosqiQmubK0DTiY9AHAAEBEBTwgkOAQMqSgQhyFek0A40AsAVRiqkoV17R4BGHvw1H5xu0HUtOm2Rn7GTTjXrIGdgNaLN05ohwrbbJOgrwei1gFMA0sQdHSQ%2B9h%2BQE3I4%2BGlCWcSOIhz7z1i7EuH9Z8N2PQ0x%2BI3%2BOb98xVlLZ5KeQ1NgUce4BD3XeMjKv%2F%2F9EieHaEX5Gl1iJ%2Fv%2FTfWggAQGfwQB6C1nPrNV%2BkyuANQpdfQa4N8psyCEpZ%2FNpn%2FJV93CiEVeRfIlkL9bHV7qiglCSobJ88DrLNgaPWfLrgN7BoeKW%2F%2BnSZjh%2FzaaPDronHlTXdpzNGQRbzxcP8LLZ4GRTEAQ%2FSv6Qh3oLBYQ61uv%2BYtDlkdX5at%2FbYCxbvwMgPMIAlHVK%2BK3qAMq8%2FBHkC%2BevdA6dMJDqXvH5w8l%2FZzpAHsnB8DNT%2FP05a%2Fzacnwy0fr6bELvmig9QJOEsxHTKNC9q3SNCiAP6SMeW81VWUOItlN0PZLOtYsev1NUVGL0aUk%2FLwoGahAIAgp0UqrBzcSElbgr5DjwW9sD%2Bb7CkAMulIxysKOYTPB3DFgwJ1uvCw5PgPHwfP%2F3jlTL5P5zhBezj%2BYsnuqUDtE%2BQ3AH7EFVf8%2FgXufVpGlLgAcOsBF9A4YVdq3zPAFaq3gDkojWeslUxyAT4I%2BcJHNbuFYDQA34YOcRx6AOCXLwMXgqjxAWUx2zW%2F2yzUNRAYBsckT2oCXABhgcAAZYJA%2Fruw8CoSywBH%2BhauywHY3ADjqyYBmADYQmtDlfPbPBQCf3ApVH%2B1cVVdQURNnIDSBtbR0azvgZBZcZgSHfe5eboKcGoe2tOTeAmR34PCVllsVAMqYL388Mz8Nnv5lF9GnnlnK%2FBVCsUX%2FwGcdwA%2FzdWpb2grjX%2B0EAEBKCBDIOfcQAZq%2B0NIeKLD%2FHxlLz6fcWjhSNXfA2xuYwrAjVT74xriqIQMOTzNMRLk4A7h63cxoFmdwHRJ4RMsCKtyNltXjHLHNbHj3uxhgBCsQQACMULShHiwDxqYXwwgf3wxjIQl7OcFyA1AtRgAf6JPNh91AEMmg0YL9CmX%2F7Jya8aBvQvl%2FWDbRSAJqBe85N4DwQkRKPL8oHb688ICDtOCBGxoIPAcFNDVQ4JRsFG0uPgG%2F7IkXGTYQJZWedzJVfj%2Ftz9ohwzRWx0%2F%2Bttbpon8wK2Q90B%2Br%2FrxBDWDXzwKUVgF1i%2F2CglOBwHgn4DpObAAEAciWCL8CA9Tz8ytBDN%2F%2BTnLi6CK11UVM1LoQRChDl1sz4OxujJOntKIwDda5sMxja4vc55VCbixqidu0cOZGxGq%2F2QQgBUUGAEipba78dcwjccH7mDDQOYAyyhxl39bAM4mZZMy8xUJAoP9dxmphmco2smvL483JJ%2FzAUY2tn43qYksuBf1dlyDBaf7oYAGdpnYbNm9ZPB7hAAgGhwGAARhL4AWKZUOwjwADNs4JHYMJcUUueHwHMMOHUgnG9XBw59XdjiiCaWyTcA9zD09Y%2BQTJjv%2FKPiaC0ggCUOwMw8QAnWIxiii7YCAe4wyAq6QWOIoCXOcleGAGQTivolX1ErKkT8nieVJVcTijylxRicUfRGAdzwKsaJlJnRPjPgMqpNAnWX3LhIq3lI11vUbHYadf9s3zXaRIqc5UuNwmVG0PqnYkeKRqcyJHYUajBIsdsVY6r8TTUmf%2FM%2FQQELW3C5U%2FOWiQMpA9rt6ptGAUbrioj%2F%2FQ%2Fqqqlrrtt%2FvwvMrxFxbpRA8QOEgKnDyHueqgYBFHmgIYlN7oAF%2FmQs4W%2Bmtt1XsiH%2F5QDEHq0cqAAD4Va5UYOthRk0RdWgQgACoBDBIQBFWhsJHtqAKkaw4xRjaEARoZ3hMdNAA7WQztsPTzw6K5szoaOFFnA8kFiZmAgswMDuRWIAqgIBMBY%2F4Yow0eJcpcszPUXr2bZhi33t5y5AudZB%2FIpqVZNp6dPEgmTCGmz6pGxBT7OmiYEE2RsBeuBAAFAfYCSDYCFiaMDn2m0ACdtO1YisXt52uNCDO2FrscTsHdqMifJ1m5uy%2FZEcnPRVznkPkQqbnifhJXwCtgGoziMtTWmKSTuB7kvuF%2FiCDHftN92hdhmGYZzYd57T9n4yTmsyCAX7hWFEmQSZEZfD7P8bWCH97Rftop1hkmahKTIyor3GrvWXhgmMUTpNgI3mdCjQcH%2Bmk7dutNSDrP79nGZEA9V1MeKL%2F%2F63fJpvtVVvsCMdN%2FEL3lCT%2FUnkoxav3nnQqckke8i4K82zizMkiyT8Ah4IieDi3rb3auvgIgL5m%2FgKMoQKCggVEOGXpjKByH%2B9Hr0ykx1pYwW0%2BjpPPJJryHLJh279CXPE0qaGc%2Fkgdhd53diZMk%2B34Wf%2BzBl%2BdpW0rm1DVV%2F82eMQpSq2v%2F36N4rM3VijX3l2AV5v4gs1pNJ%2FNRoWs5QlG11Rm9CguayJqYADOaqLkUcha%2BaCuYwKVW%2BloFin96y8F%2FuajX%2F61dusdDG%2FBEAwOICeMdfySD6b0gB%2BeOGWMouI%2FnrodjbhEr%2FhfhFNUrqPsSwTKPeMahqfd90oTAgIlYYzIDFOQ1%2FeKZ%2BtBlC64vlkJlLdy4VF9XZSIBqCbshdx3%2FSNB0MbfqX%2B5EhcIno9j4KP9gIjyCo7OfNwwABASYAHhgFpYrwGUINs8TwvAAmgtGzCCNCOdBTcDo2l2RjEQAWug9hqNTlAoYon%2B99gd3OP8Q7tACmiu0bBSpAuqCTq8q2uHRk%2FUDaw144ojvU6ELgZhtYGzx5%2FynMelK0EARNPCAa3fZ2V77ZVwHtXgNmAU94%2FIW9Ug%2BA%2FBy4PHjsEDuhkiOiNlZvgczUc9Ku70TS2Bk26q7ivEIDQq2IAAiINFxtRdvHsHyz7N1S0wDkIGEicjgGrjNvLbPOYLeiCX2fGNsc%2FIMsyKKqWXGrOtgfvEQOARsOqVQBPNUwjIueOYGIAIFQcAAwMqxNMm%2B3xafCgHiRZHiojMmEbbzEG%2FsjMPfi7wd3SmVTJg7suEzcKrwrxTLxEuIgABABkiByVNb6TwZPZ2x6nTXjdnl%2FOEgbGAwAVAAECKeLAe506K0C%2F5HX94xjFoqGYHguvqtgL5rrTKBX5CFY6RZJqwH%2F%2Bebscg5uGd9pj%2BeVxn%2B0nHVqYd3N%2FVsh27jZCCPi5R6eQ0Pkt%2FH9YWC8sRoEUJlC%2BnZXEEVR6IorClGwBxeBm7bK1Xjp4QIZY88wn4sNEvDIpnWA5NeQP8h7Oaxq0%2Brnk%2FM0HAM%2FiWMggQ3lBABAdwSyfMJZzRoYlzzTXX7CJUYpJ45I4wABAAOQPMJQ6ZBggQM9XcaLeyD5O2YeYHFZmCi%2F5O%2BeBfbBngWMOyZAJLzyH9LFKnqmKYauQ6f8gKjp7H4tUiNthJB9YJETQKbj958EARXCQgFis9HLMvsiiPFVgS9eug1NhDQ5QrkG4MuERADAElDHQlyHCcbuolBSVf3TQAkRQ0GgDYo2Y9XImWzGIj%2FW%2FzEkb%2BYC%2BxFkjYFhKcuOBXPwofWTTta7QfdI7gM4cD8w1WCVg1eJjQYQAJAChgYAECgVV6ACFlmkhjV9OONY6iFxAIOt8QxMBrOMU5lkwVVQXFXJ%2BscQrQd0p%2B8PQplVRH4aMK94cReK0f7xB4cUkVlitngnlSI6rIYk0ArG%2FzJHuAd1cRTb36SKqd%2BEEpDhABBWHm5xy4KgfKHRPWuwNm%2B3Mt0Nq%2FkHRIUQh7Oh%2BuncsvILNR8AxQ22gcT%2FZUO%2F2LzhEOTx35gDMFSYDI8zz4MWDjyp9Ms7Abe9cfCABxxAgFFSUfuBwGw%3D&media_id=1254206535166763008&segment_index=0" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:55 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:55 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_nf5FTSJ6nKSAgJW1o\/tyHw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:55 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111509343626; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:55 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "66751beaca35821b237cd01221b29bb3", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19952", - "x-rate-limit-reset": "1587864356", - "x-response-time": "30", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00709e2d0087a955", - "x-tsa-request-body-time": "96", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"4%2FSmelybPMeReVEoi9MliJPncq8%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=HhT3ZoZ0Mo0%2FAFKQ1y%2F5V7TSNZ0%2Fxj7%2Fn2N83rrgkGEmCNhQZO3MQmiMxZ7yAjFXMSvMSrGrIn9YncwJVFZSRWJxWkASorqJ4tpSUzYLCBQl0ThcsulVR6gId5V532%2F%2Fqq1HH%2BhxHnP4c9arVSLOn2%2F%2F%2F6HSYVOfZ7j8Lb6W%2BoOUjpMR3Ptf%2F%2F9BYQ7u1d9Ov%2F%2Fobve72uvt%2BzBFRPQ1iqiyRkecbHSmjBwOVn3wliZBfKkixOonrXmlitnhaqK7aXrUYxlKIl%2Fn2xG6eyhBDA2nCS3cr4K%2FHb%2Fe2EVL0Z4jrhSICAICNoejFHieb%2Fh3cAIcehc1F7UYIs3rAgAaACiwwgRQ0wASev5mLIhnSeDGAaMTFcaZ8Qoq84Fg2yqTLQrPAYmWaThszgB5OmiaJYpoqqTvJMZrxPo3%2FvH2XB6sxSU4JzKi8mbC%2B2s8xIPqXjW7qM73PB0BEWRlYGT8S5e8I39aWZAzURsPEyypqgw9wIifzwwPczcFIBeH%2FnQMIBCBXwgH2Xc9oCL3AN7TUR0bXerFqdBScBgytd0dgj4MOwySL7Jq%2Fsh8XW7baYaR1iNivPVoKnJZXSi4TUiIM3cjLt8fumJfDqo2hMm%2Ba7lhtHURX4OwcigmT%2F4Za2AD%2F4EIF41O5qaNOt%2FjZwD2EttwsKItvyDjWPKlu9PBBK7AYSydQgtTwZdIgAN77hT8vRZTlGCLTAo5fxy%2BCFXkPktTMLcv3%2B7seRiaT%2FBWL6bWa%2Bo7qwidN%2F7hpIogxMU3tYAMc4Hj9PURMS%2B8h6UP1vi23cVNyICjQ46c8Q5JBwABAQcCAA9XjovB9P%2FdEGREJAOdimTAYQcvBDJnaVdEhDgX3gjR205Gfl89RMlvthGSpuAphJdIO9%2BnH%2BkbUzUbs05dA%2BAYHAAJVzoUOuCtD0UanC05nKpYSJMbfYTXk2zFEXn0SegG%2Bagjw1wQfQtzzmvwv7aLKAWVjOJywwATzI8C5jgIAt64g6%2BEABDluDOJGqJF%2FgAu8kTMmABnAtU7UiAlAagpoCVDk4B0TxlPDKbWvktYDZzXcmuWsGACgV8Nhw%2Bj8rjYKKqcGKPTIqSD08AARHaWGAC%2BhITKMgyA8MXfkYnWvDsABAuzM45mY%2FfHBnf%2FOHmmvmmNNEHtKOd0SgOnIF9WdgaFuFzm2J%2BrLgYeN7%2FLT%2B90JgRD5mhB7LW0IWKpvW6HDmGjXn7LaADYstpa%2BorrY1Q8bN%2BJxBMkd4rFIDqOJY3vPcsdUUVCoecVKTivPwo1LMboBgZ0BgexDibb%2Fe4VIctCby06QDkwbnb8i1RJydUoy8IAQACIB4QABMA3jjpMYJmxtkAw2o%2BHAAHDHUCX4wie7QggwTX49q9TbguoG5oOkfl6lVXvjCI7UP6FVSEDzB5o9MEyKwZTMtYIEdDggAHhIlAl4tI4KghW2DR%2BV4IT4xXZrckJGtY7zhXPw7TO7gug7FGeQaPBvfK9DN%2FMpTli3WZBsVZQoAAgBqAgWfFEOyuMYew%2FmdzZrND%2F5wAFA8OgLKATb4ldSEPXVP0nNQdLHeubhEsmJ%2BAMZODuI8K37qzjzSodYgegwAYb4XIcwGNYvAbnQAwBtTwMQXYiiaP3%2Fw8Vp8rD6PUNZ33SwCzizhWGqB7hA5P%2Bv8QEgDxuG4%2BG94vUel8BI%2FTr4O0uDFO4k9gFUo6ABF7LGdEGSVQG7VI8e0Ql99OnRChe4mIM6VvblwGzaQPiHQQBDkmBAAHQAYMF5KpbngJGMY%2BBD%2BYXkYB0SFKVyMDwOTHHrEwEV38lECiQY8iOyd1hELcHwIWnMGcfgu042HABgEdw4HL6OWdUGdjh3RmCWe8XmJxpBCMQoIACMBoyGcqeQHFL43awmzwOooM6mYUOmQ1C38gJSfAOFjrVaw9f4KxtYj1fibEoXpT%2Bt8IRD23x5Vif0TukQnfpeXLxO5UlxWJ%2FRPM7%2F8v1VVrrWq%2F0uonb5EVZVhFHDyq%2F%2F6f%2FciHvk67rgbnwXoNQ8%2FJAHksgHSOLFPQAd2y1453SDB3d31NWB81iHBlDkDyBqZEOkwQaywx0Jzaywx0JzDXXD2FBqIEixbYMdSr9rFH3ieJsLvq6JwNw%2BfsuO1ewQNRjCwRyFt54b5mejAL8BzU4ZP993Vg9xmZ39l9rl4PeQciOLe8hTj4LW3B6tNNR6enq2IPgIAALODANDKxhHJU9Gld1%2FdOsFyewKZRwo78AxdPF%2BT8eOD3YOCip%2BRAGvfUcXWKUC60y3cRB5SB%2BMPXejx6g3G6ZkHx4SKDVf365ow%2B7hq%2FfKyDlAhbxzA9nd9q5mFJ5H5pgRW7zA%2F84MeG4autKdjWs25kFaEci50PNGOwg4wc%2BHo%2B53zvHr8IAAwHJHBgAECgYtxT2YajSK9pooFmGH82QMyruZt%2Bxu5VFf%2BpP82xTE%2FM2QyHp236DXRE8H97UvLvlEz4bDNapgl4VArabz9tfffCAE4RAa0z%2FIIiZXA8W8dOCUwiZXN4P4BFTYvPP4dE%2Bk9DzAE6fitTPvvAwnUOa1SOzqDOmCvnE%2BQK9NV4B4aS%2FXEJ9D%2B7XWu%2FcfFTHcybsIAAoKHhIIFAIEg41IddhB9v0bNYGNHhjCxHhD%2BW52tk0x5KTAieCaeEKn%2BS%2FNM3Xax%2FpmsRf%2BvcEvW6v1QgETbi%2F%2FUAA9wtOVWkAaPh0SoPI8EU%2BdPARAhSwOAARYEXAsP2toBiO5BRekLAL884a7hp%2BBHdsZOzAmL80NzcXIvydMAEMYimNWM6rYxUAKAFd8CgLWC2vkOnRogDdFml3EGTBTH%2BDFI%2F9WDg%2Fv8IBOMCwwAJhYAYk6AmXp6LrgQ9D5Ldtj6Q7EgC0gFs2U%2FaCsCSeLgxe4tvEhkv9fKGg8MFQyjdEEhZ%2BEHZiplOFIyF%2FLci0C5VCXZj6jwWUeLkIApwgYA8FQ04dBfRwVDL%2BsiAW6yGn%2BqaU%2FYn%2FF0IYcclDpWi2vAi4wU40lbLlbF0mrYmUXDz5eFyDrqMY8ngqYGjhATqRfEljT6BCJoTsjhxwAKedwQxr09UzvLuOtaY2Ys5wtkag9GfYnsgNWG5B4zZWqOlGFyBhAA5BBxAwIrh6EJgYytwUSgOYId8CYpLQfBIG1AWo%2Fx3gMaMlcS2%2F9QlBRyg0zDN%2BIAwBF80QDkFJlX%2BCQy05L7n7PY%2BzweVwe7Kd7sfDDJFgBgqHqL4LBmcHyxt6ULCpOCgnWJMCiYsswchwVzM%2BKh6nClvMwBYi%2FkDucyEEzA22TTMUJcj33OQ2XqA6kK1UEh1LAumKlCJAACAiIBoACBZgI00%2Bdsx28vyMArEAEWPzTedzGbSKYbXcJtIpDD9IV9RUl45%2BFhZiuIkj3pEaRjmGtih1LYmK%2BSecffgXQpT8iTYNxF0EevpBPjXMkyIPXzaXVWKTOV3JJtjevIfMgtVjGPI%2FgGqYkAylLbtyRpntsbR07f1sNKfM%2F2M9OYF%2F9JyoCZ7OwGgAgi%2BBMHWRrBrugDKG3j%2BG4CBAyEhAgpwSSDORyuQbgp%2FnhNf%2FKMAN9A1F9KcCg4RhM4cpjsVFtPhEsgCRqTChg7vu0mO2I%2F4l4B1%2BEQFS4tofMMUTCjZitNr2ye%2BeLoGUE2G43F93AqGN5kKJMSgXzrwZFWDrh4pi5OgMAASDIImADBjZY9YlI4FWKpLQ%2FPx5bu60TyT5g86YByx7XgfpgCkqK4qSyVdJDOEmyDx6IfgYMQ0GjyvnAigvOFQsXEQ2oks2CKAIlq916MAhsh%2FsozLWBCbV%2BAx%2FNumlh9l6j8H%2BOOLWr7wgAPShEDvabxK6U%2BqEcI6Eyb4bah9egSj4uTluTv6sm1QF7K%2BmVUpmdbqpv2yyzSyk6EG99QH3HDIUzL%2BC2K7rVLuhNQtpiPmFt5vIClOb4ASTkekfnhqwT1JxD8zwGO8LBDhrdpRRVRgGf2CA0sCAANhGC5d1hFBvnrVTPfQ5p%2BAlHZkvYRoTVQ7YQuYedDPT5MMWC%2FSfwAeAZT%2FzMVWlQmuvJhwq3syY%2Fz8VNRoGPQu7XmglxsnVeEIWHCAANABzQAhIjZV%2BI8dnrjBdl9gJQcpdgZwuQGw6hVIliwGSHN9tKScwSnIHv%2FU87kr69QFieTGuCeb8%2F9R2EAlY2Wn5RiBjkV7ykOLiZPSq4lXqVYnEOVEuK%2BifFEveIlAdHxpOlVRv6n%2FCM4AER%2BVe0n%2F%2FpguHD7%2F3cXviOvLkDd8CLFnU44WegK0HRLAOegsIfpwx1Cj6AfefhIA%2FDguYfFyJ33d%2BSbAvjUL7UHvA5g1ThiqnMasEDUsgfI2tq77XNwMJ4HDqm479f6o%2B8OLvf%2F6G6QQdCczVOZrric2rN5a59%2BEi5ArQYO%2FX9FED7s%2F%2F%2F4rHiS%2FnbrwKPLpTLKvBSoDrf04%2B3%2BjP4XVBAng7i8VF3V3tgMddZ63cQ3Ge7m6UMRXA8WYGROB5lB%2FQ0dupjLCuxXyOh4mz%2B0SiURFqhi8GO1JsBdlp3xL7o%2FOUTpjCErsS8h%2F222VhTTSEtx7N2plB4AWw2tkOE1bvvxQyAFaZTGZUVyO9mv%2B%2FCFpshKrcEAAIA5wAEgMAKgXI3Gg4ox3Th8sJ%2BQInbBY8gKCBzX7YTeLklxoEVR6INpzWJ%2BDyAySABSlnfR%2FRERUJYAf5xEDe3jaYfIuq1eh1CD%2F36TB7viwLHvzB6lcJRCLgOq%2Bpr9ATdez0dA7F1ReTnrs15LaFaNGjMZ4Ub7AvloYC6sRQt1oAXuja3q9sF5FJ%2BPvgb1LKz8gxMI2pcv7h3Kg7V24apXgqaw0Y08UrCEGg0tjtOx7699uLAgEGi25b0y%2Fhf8HGyzML8n9txGwMIAgNhoGNDEjEAwgLU8eAV0yZDyOc8wy0YCR6b%2FkP6a4BH3%2F%2BA2IzwAHgVt6WIfhv%2FxwIVYFAeZVrGmIC0qohJwQABMAOwBQQE3Af%2FBysmM3GWcYMofgJy4NqJkdf5VU80aEMFG%2BSz%2BKcstOJ5aAAabJZQ3T%2BNI%2FKz9rEPTGukfq0jLwGBmDP%2FjFLH7jt%2BtushxxjzzFzb3F%2FcAMY6FFKwD0Ddp0bM6WzHEuRM7lEHYABEJIAm24YP2bDoEGlCMnYjWr%2Bl0CYgGJNgiVQvLr6uMS4RiwNdkAg7rzx1%2Bae%2FX%2F6Od8TKkgHGwq8t2AvlUYHjZe%2BA4ABAIAsIAAQASgACAcBAEfcE198OnQ%2BGqDRXHiDvBTFCbACspiEn7saqHtkDBBjnkYgO4%2BB3qEtAA156jnsSohFlf1dpXCfUHa2MEEqRzg4tng1YEpT9FZ6fKcSJHu%2FtIyAVEb97yF6gAAARCAAPAgA%2FQYhtlkYxvWVGBwznPT4jWA4rYuRwa00AMld1zNIDTCBPrCAAYC4%2F%2F%2BxoiardOtnJwSwfEf%2FJNz%2F1%2BO97uFb1x6kw1E7GMbdzQWl4azzzAyDIEwJ8tcKblndYxoESbbOXLXt81DMhARvUJrW%2F4ARts3Cj1%2F%2BkxWYynBr13ABTH2J2GHnRgt%2BC2QLSDtOoClhcIAA2AYHC4QEOaIFWBMGYBjEH84AU%2FkLKXkJJiKIbEMY%2F0KsuFeUwBK6FFeEfd7fte5HYpMTSfLAP%2BQqBPfk%2B0oFyxnt6Sm7RKZLlk2EAAZA5oSFQXiKhMZO0CMOv2Q3TuTIaUdNGisyxL1aZSzPRSAOD1DZC%2FbCjJroQPsLfHIpj4UHWjK3X6RvCk6wYtrOnSBqd23e8HZfnNCbw2%2BthAEodgYZ%2BDYra0ZD5hY0SBYU0fBd0Nuk0tbyMwfQsB1naKkQqBsDfkEJ%2BJ8sh7QAnimB0IYX%2FgDNISmvRFoVh3T1mecFbvgi5%2F6i4NSsoUs%2BAMtfZz6NoBdVlnhjb9ia%2FvAlWBiZI6CUaCLNeMdOh%2BbA5ZvcDBUJ9DT3gRW%2BXTCbW30mVxhoJiuarIzQWTqKrJJhyC3tW1f2L1mpsuS1wO2KM836p1FVh1vcNZBnPyVn7c41gAX4SxWWapsbwo7xUKU5sPU92bAW8oWAu%2FXfihWK%2BAxCvKpj397roQABEXzQqENOV4mVC%2Fm%2BJ4WrqmyiY4FXvzdOgQSj6IivSaoQvotj7WI0AR%2FU%2FkfJuZdcbhhVCgcBlU1GfrwxulPQnioMKLEjAVmKC0rUUymsjaSQhDGIt%2FA7QYsbON6ZGJnOK7%2Fd0gSlBBl%2B8%2F7q61RCfAfwCO1zBsvIwD1rh6erNe93rJnoEnSyzN98vjjitp3zw746T2nno9%2B8Uo0g9%2B4pED81O5JXK37B4GafEmrwaAwACTJCgACAqAAIA7o7%2B75mpeCYO41TACWaVFIikkoA5pZhQd2EljrJCA7wABADz3NcZzXM2PJ8wCzUej%2FAmbjel7XA3wgADYBRRDuq%2B1IOLzUC4FKn4Mqmh52H4TqVJcViXFfS4rE4h%2BeJ5UlyYJ6VipQHcwKEl0%2Fidronai7QGwC%2By74G0fTQGTyGAWChJIQesNyB6UIhiAKvXUVVKyEkyC9wMWx44I8gveTv1r8khxYp6E%2BNXID7i4jnHyo0oo3mYGMwS8ROwSQoOLgMBwgOAioXBlGbhWKnsgHHJgofGUT%2BZw7H%2F%2Fx4dKsl%2B%2BoLoSa8hK9nzYbD%2FmPmeuq4BuH0oAPxlCKnEDAErF5WshzvAUfZ8gZIwYQsDok6GW7kDzfQ1l8793quFVg0iFvqG4JAapwLw%2By1BqdNBYAgZgJDx7skggK3z1kXFBj6eFAa5uFw4UhDqsMJgAsQEBKA0xIy1Q%2FYGyFJsKv4qilqN4JBfhrXFQr9DTLiB0geeLqY2y4olk7BfHlU0cY2PUDgfgMNpEa49xoZYZRx0gGbGxroWlUH%2BFP4YhFZ5u%2FzwwFROSAaRV2RiRE8AZ3QwjZwKbtDj73%2Fd0QSLfWWJBO5nmdnaQ3f%2B5Hhdb7WQjYgxBC4z9Mr2%2BB9oI5RLz3g7r6Gzgh35%2FM0ef0Ss428zI21JYCtDRM0HKzHyIndsOuNgQD30x%2BA4TmBp9I6RkElfSjtHJYGJ%2FbhF8N7raPjRcP%2FEYj3uiUtaYhX6fR7hxSFOGqtAQYQAKFAUYOKNkgNKAi1%2F5DHpvmfIyDz05%2FZMiQwPtNEyzNQoyDo9fkyp46ICaWG%2FAKYppPRv%2FuQk65I2%2BrbLNu3fgImqYMx8zCAXBGBCYkGHJxhdQjQY5BShvPYri8bfHzC3%2BfNRRVVKTigkkfo0mg3NPF7s8yCQ0RQ72uxSGNWg%2BISvQXcdr%2BM%2FS0PIdkMACtljNgKI7xfVIb%2BsAMMCMJYPUL9GjBD%2FbOAmJTCj2C6WGJPJoy6jvy2Cvyfa76MxO44lc7IbkL%2BmqvQhypmOfLjCb48t6PzCiop1O%2FiKQCACfu7Ji%2FrnKygpDSCPF5NfTrFYKxTAygnctP59iBIARe5ksUoTc4qxhWOsR8LxQ1MG0fAWABFDgZBQCUhD3TvfG5REdFEz0ColYPPOagpB7VQaau7NI1Eb1ZAsbNRiSVx9sAyhwMvPOYWxfwAvSYR8e%2FPsDcRzQtHJapsBSAQ4yY%2FreMeIYDPyZ%2FYbIMQABAFA0KMAKDiASluEhDvDxxOt%2Fnh5B0OtO43AydMCUihx%2BjsvQeRAbAAXNQZ%2BGB%2F%2FZGRpUNkrP7hJWan7lyPF1lpoL%2F%2FJ4T%2Fnzu2lb0uCm89%2F2dMuBN3B6O4KbCSCUIJmhcwSaZsgtYv%2BR6QIKPXuraMSf8c7n%2B2IkIq93XJjmUxMQFuGjpaTpydgAfN0BsuLH0ug9MgYcHAIJSmw3Ygvg0yxhl4ho5wF3z7NCirWdnt%2BASLYsqaAGF%2Fu1Y1wB8xdkY2AAEBdl0CTXXBzo%2F9fxxqQAZ7NfnXRAamt%2BAlBykaXwGnxjTRBP9uGRYUaBz7WrsIQklxTR%2F1Ju4JE4rfXPnZofRizIGCnfRvde3ggQAoBRAKAEAeQDCPLgIObt%2Br9eGhlVxhMNaoUGOKBugEvXAYpIgEBqC65V4XqCVvmYfnSJzJpSLZjjiAXS2DqVEGJuex37tdrCzBNr%2FuAJ6319eHR0gMQdBnRGwAgYDMAxBg%2F8j55ouMSfMBgABAFAArwMAASBIq85kAWBBS%2FkGGAC%2F5iNNQoaP6NrH3LHAzDAIB8xDfbTIVdTJ6IZD8bzCoHVKKZBoOHOjXPzABllveAkdvwKsRQM8I%2Fr2scjFg7Vh%2FZYCnY2rWh%2Fnd%2BDOr4VawEWe6c5bxA7hhVEtUg2s7QEoCHAUAMYNbEXJ8cuGvtGmdr96OlyAAEAdjXyUEELTGSQ03JuUdYAlBqpkzAwMDqDr4RTYwXaZGVfgKP4rI2kl2%2BoSX3PXEQEmAlTAF%2FFpMu2LMBesW5OUKIp9p6CaIBYx0%2BxY1vZD6MbBZT8LkMAw6Mt3J7UgbKg0vqD4EQYHFBCFgrkh1GvOHgjsC2sACre5B2B7sRXQ6AnJIHL8wCR8IUFZaJjqTh2uC9s%2B%2FwXI1uQBHX%2BffbQyiBStwLK58%2FyR5Sc8C%2B4SD%2Fnaq%2BeQfIcqvGdLwI9mN5tIaug3vw7ai6X%2FHwVQ%2BsCZgN97M0Cdn%2FzPGFkfb%2FYOiQkjm7s4tSfW%2F7T0UiuvftDKEXBCSiS712KeAInZshZSoqS7MNXMMufHhVOhyk82pnnsum%2BoCJQdS%2FfYXLB2OiQCBQBlhhHoiU5roieJzxY0Rc9AAkz%2BpCDcPD6COwGmpPAcwVmViYAYQWgBEBS3eY1FoVxWO2mYa9gZh8dViIK%2FDDMwFftc8GGs4GoQ3Br3AW4tf0Bf9cKXduZZuRKcoQEKhAJE35EnwRLUsflixC75BC5Tyyy6uuBSYVYWrf6Qor%2Fk%2FAekgasdMQa6koSHeJgGJngSXlDCNNhwn%2BaezVgqCTVD3%2F5mUw8R%2BcM%2FjwEQl%2Bg6nwJmYBbY46x7rhNpvgQABAdywgARlqPTQCcByIhwILvjYaDUvMHgxYN%2FVFroro1W8yPHXoETPoZOXPqJbUaq2h2GkIHcGbw2L6FazucySTZgk%2BoL0szGRFbiX%2BXgF8QF0EAAdBhaw6BXdhFjtfoWXy6xEtmBHqf0pXDEt5V0XnGHQ%2BqYTQ66U9RTVCS4v1jU%2BGyF%2FRb5a2Hg2Oxh3O4G6f5iUMsvcMXruOfWCpFIjn%2F9Rp8EhOfS8qxOKy0u5XLxO5by%2F%2F0VV6%2BqrrNK6YnfUblDAYz1%2F4r4%2FSr%2Fh%2BSr1X1zf1X%2FqQMUwsCCCwTnIeNPOwP0oKDMCwv5wkXQDMxbjFADcPYjAsjlHnVYK9fyDyZFBwsB7L3Iw6oXEU2CQjJgaTF8g5NgZUK8fXWO%2BFmHxl2SvCsKiquFV%2FXA1jouxDpqgqHkxAQ%2BHyX21UsNoDOLhQ6wHMdfWpMDHx%2BH2A3Xrqq4f8K0HLGYFccf1Ff7Cw3iCpg5ZL58CEIFKGLhiwMw%2FDiMu%2F1XXWFePrKh%2FvAlmhl4%2B3iRIHcFUXxvwcHS31%2BCow%2FJtEVagNlwQs4Me3tHsQlkpSuSoqZtGIDrbAy%2BtM1lAb%2FECSKFhSe8SxAkp3u0AzMdIGg%2FvKJ5bLSDr%2FCnEIBeu6a1TPyNAAgPn8%2Fh0QaTnDcjBkGCABCCgmEBOJwOz%2BhFHOO%2FT17IgMFh9fobQOUI%2FjImaxsbRrD6R2jEoZyD44JfKsJF92Wch0R3Q1V072RIX1G%2FwMgXipgXVv0j%2BloIr3dTy6E%2BOPmE66HSyRzD3TJFs1KlW8DUSKvi3GNTwlCoN%2BmMw5AgVEGC6YBPE8rJYoLK8%2Buo77MqQ5pi9%2F2CCFaOCNBPeFI5%2BzTbCXBaMBcdGYDe%2BDaL4B3HwXivzfobsjZUeRdf6MKygZOh0o4rd1ieQqly4xvEZZBuNbjjhnhPqBXv3IW0wfqehRAAGzp%2BddQgWQDCHN3sD%2FhWC9tL6m2HVFbd%2F7wxI74JbvWR7VSbnhAsBRQGBFEeMApA4INbsDlpk2YHQ0lWAyj5MLdDUtGMPeHzWQj8LO1aAgL75VBT1eru%2FJyvyPuh%2FFPnwH%2FssKWri6KQNKADrPvRI3gAYa8%2F9HZuthhf2lV07O1%2FSgMV4NMAMCACAKtTT4jQ9JQSsF%2BAhf9iwGeE%2BVsEHnwQxKV9OPmHyzSj%2BAv5k7u%2Bjvwkw34C8Q%2BsmUQfHeTyDs8C27z86xpsbKH%2BLX61lDhwIAh7wMAA6ABsQdBQwoS8cqDZF4PqBtApQH9P8FaeBj1fcF6ABbCaQCJyygCmw0Q6v%2FUMvWiqVFj78yLPRpgG66mQyze8MwoyCEG9yE1Gtdpemct41SSptjgb1m0hy%2B8Ztkc%2FOlpWFVeX384KXkAAIAAKDjZwSEvCgBgACAUH5Mhg7SAblchLkewNgaD8BkARzQ8ImjhQ9T7UnKCxuBQizraChiYCRqidBy5CzJhiUGrkrb%2BGEKsoeKA1gJIZwQcNJKw4vHYu2O5q%2Fmc1yofSANTA4LkCACAWQcbAx22ZpU0nsAVAST11zJowBUGG%2F%2BV6gKOMCOOHj3H3NTXWQmfPiJkt9OO4DUuQMu3gKKsMmLd6DLD0KLx54FTmJ%2FARYBmCLMBCtVwBkF6cn529ZnHp5OKgDIL%2FFitHgL%2FBcVT5QbDQKkiGrzjRvtJXIDPQ2%2F1laPSMxWRjgnERL101MQ6hX6BkRFuKpK8pRATgFU%2FRrliA4EDGcdT6yXl%2F0RXXvcGEHcggdjKaWMmJbbSw33bcEoAM4xHeMdAabLkDTiI9fYFw8qomxgNfa5N5ELIypjK4RS95%2FtJWcNySTBx4M%2FyLcHKOEO6GVaHW6VCMkc8IELIQDgBhWLHbEmTwD2BOrwFnndWprVjU5ZJ8zLhNVGC8bENrXvfyb926Qfifyjyl0nMoMNSBgEn3Gu9dWS%2BvijDbRKhKiAzseFyDvFilmR2eoHGNdBtKXd6COy33JKwP5WJ03aCeh05b9G1CvHLDG1HCLgMLs8PjoswVv%2FokWBGcOMG8E2gr2fImYAcwDPL1vNKYrXlgj%2FJauQpRSAIu%2BQLKVzPD83nM42oUnTF8W%2FfDwcApsF5HVD5sfqQN2QLTq41j%2FwSh2aPGJSKNsltN7wsk%3D&media_id=1254206535166763008&segment_index=1" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:55 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:55 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_Z3hFEsqm1\/ZZt8JdhNbQBw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:55 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111552419044; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:55 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "57f08b9e5acd38f1913056871cbaa928", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19951", - "x-rate-limit-reset": "1587864356", - "x-response-time": "35", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00cd0d7300ac94a5", - "x-tsa-request-body-time": "98", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"nLcH8ZfnQD1ew8r9o8aBL3Ot9b4%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=cZis%2FifBlNa7A0NoHhJGn8G6eEq8WBcfz7W2aYVDKVFw0V3ij%2FvbOgM7QDLsufz%2Bshig7Lzag4%2F668kA8c1AjLBTrfYSd3vDMJMswY3hyhyqgfuaM0Qvj9nMnYoXYCTWJ0tjs9luPdqPDDABrQwAwPBFxAzEBWCTUxYWXWQFiiETwaagBSjIZ1FaiAKrigKGTtJ5otpVFOS0s4nT%2FWuHWBiZPOcMGnVzJHSpyjUZhh7zXTnmlXcZIOCr%2F%2BAtrmDUMBwGJmBxS%2BCYRywDsHh8Vixygf1RniqhOCHn60UJLINJeF1iz29M54tpn4HABSHnM%2FA4DHbGPJ2Lg8xabN%2FYexA1iKWMdYjH4N0S4gmZeWQqZoEQBOyI6LDuWR339A35ESNkDQwutHPgQrkcetCsqRgfNw0BvQdnf1%2FnZmjXNDFdyDYmOom2i6UCCAeasDXg%2FFjci7kIUzCJX55KCQN5DjX%2BiAZFazqGI54kVSy6Q3P2%2BwcABABIEABAHAtYMnhK3MTjQercS%2BJMM9s5B4ms%2FnVd9eqGwwAAtaFV5ndB6SIBlcI%2FP8dN4YiX%2B7UltIA6HyKIrVA7EtqBgY4SFWFQYME6BzYdvUeagWRXY9f15%2BtYjjgT3PA4IqFzyk%2BMdDEOdwj8F8Znsbv3%2BErXPz4UHnA5yMzXMB24W2eYvgZAN2XzFTFP%2Fj%2B61EcZBtVMEWjAThn5fyLIHHCYAOnEovueuo%2FrD7Yih4JBdsC4hy44IyvYHhVa%2F1cI1sO6YXcxzQT2AZQvp%2FhiIMVFkGbcCZFWRHXb1un19VFqkp0e12tQYfSuEXEgw6MRe5k07ucW4ROuqyUUQL9peNKD6m5pflkGkOUv%2F82q1r6vEyhqj9CqhPzft9umnp9oRUFJS1P%2F%2FCuEGup9v%2B398X4%2F639a6qq5SqGcM%2FfkXlRv1LQxgGE4raN5XvPnW2qipqv%2B6mCk7Ed1G%2F4MvIHRv5fbzfSSfyC8IMy9glE94E1kZGB8m%2Fzr%2FlqEi6GYFZeBQDTHhI%2Bzk6Z%2FBVP66q4%2FBq6vCeaqfcMlnG0jcGBdRheFJxPud%2BCPqINqPrv%2F4Maayc3%2BdyG%2FX1L%2F6wYuCaMfh9MCBhWeFGWv68EQarRU%2F7osNAdI85Rx94FB4xA4r0Uf38DKtflekpu59B0Uo2WBqJ%2F%2FyA34WeXIFtXe8EO4g97nr2ErXU9Sd7vn%2B%2FAGEAAwGDQRfGHlsJFOAT21UPQMAKMKqQrrigyP0x9spDKASUR03sIcxA1k9Vf7jMSjU5bnDCrfXO9XnMxp2rO7wGVQuVKJ%2F8%2BOXqNwBBm6fT5AG%2FAhKTsdT%2F%2F7AhkDn5kggACAMSkIgbgaT88mICnfF3FbVirA9qehtsNEBkGt%2BFHRQ8%2FM2vO3EEK4VKY4nS6I8h%2BxG8Z%2BVsGV3%2FgcEQAxMN0BCT7czBa7DF2kD390fXXACB6FyFEhpeMHGdoJyfnE4plnEaLFqhDyHlCIB8AwGAAECIAYBYxj2zMvNoBjoGPYACaUMOYg1r30MfbkeiRsAShjbM6BsxKAGpquJogDYMWv2q%2FrtE4crYSMgfC6PGGLqw0sDtnEC415vT7mXeTROgE1WbY0oS%2FCD4Q1JmQtgTagCi%2FyaVQYKBBWTkNVMOaA5QwggKsK4eG%2BUzAcN%2BuCuN3O1vO%2FHtvAoNSqQSAdt8tzYm7NnHVBUKUBZch3XCyUSJeHav6j8sgMqwNbec8WTOA6rkN4qjJBgOzCAAPEBfznnukyl51EN0MwYO8kZAqTqU8mYL45yiJdFaYxuvdOGIa43Hz00GjSM4a%2FynbZdsKK1DbcyVVsgN%2FlMVEVC0AlWqQfcgkgGECBDC4Gg30DbqhswZy48EVVlhJzB0ayMHgPo0Mxmo62iCnc0kdvebHYYEqN0Ij0%2BMEcVXodJYc1G%2FTx9Zt3eEQmMGBGQR1vnmv%2B1o%2BVZ5ZAoJxi8y5mK9Cn119d124DEedyuChh3snLYtHVhZwW3mzngYcQSLlKN29SvVKOOZAF%2FxddlMg5ycApXk1Td7isKqiVmvW7CXI8Wbuv8W5CAcATLTA8pMLwIpwrUCy0IH9iHGvOjSDc4QgLOEAAIBAAAgChxeECkdyU4vH4BqjzO4anxdg91KYlijJJUKfsgcAHZ2GWbGGUuyMB4LxtVTzqY5FmhrXUIIF8PgODmIiBX5LdanBh70EeQOG9zodK8MDWdDK2Y%2BWAsQw2XgThPf5UQ5KEACABjAaEEwUSgSAYEvAcvhsUOBxvHhVF%2FjdGXPF5B44D2oTkupG3Q4FYD4F6mAYq9c%2F95yzbHbFAuPfgM2mxUL4r%2Bcv%2FCVO224NV%2FMJyL6%2BKDcOWwGBogfB%2FkQGxRBFbAcKxFo0jFZ9iNdYAY0ep4MyZeBkfmaQc3eZOKimJdw%2Fe6RySbe1IpTh6UVDL%2F32mSt2Cg%2Fy9JTeFBh3Kys%2FCCEwyBYRY0DAnXlOujN0nrKti4i7%2B97XXUJSJPjtHyt8n9o3lcgWVfY%2BX%2FnHEZo6goD2XWw48oNoamoHO3I3AQtd%2FnDf5EvnScfWsmKv9NGPP%2FMGhZBwfWYucUSimNxEtWJ9B62HUR0eLyQu7uzvk5E%2F1siC6gmTplFUnVSQHoqwVNSspB3s4YR%2FQiqpfHO5yjqhlXsKvPd%2FnOYOHw0wuQ0spHop8a6jcKr6ocmw7Yrgd8mRMxXG%2BtSREsRJI7iAaIYR6r99G2QD4yYAnKCMcPc3lSrfqbsRJmFh93uAk38OA6TU25QBxIsf2937HmBP7YBiPDIsTuZwxQMwxyAbBff6BgyBYNvo1sVAs3ngBM2CNaI8TnqwBpi7xceo4qr6NC9k88toEO1BCViv1A7%2FTCHRY0zG%2Bs8373s45C57GKOwcYcDJKfggRULizJxVNkUsg7AkHA4UUyzZ8SjYfofKiU8Kn0qtNRwV3reFPjijD0YGgdf4MpoKltfv96%2BOEWLMbqZguk85YT0Tf8DAxRBBQrvAp1%2B4Yl31Id3%2BGpH0rND%2FDYcljD%2BCvmWzxhyNh0Tzjgw0GQe9d4GvdesD2IYAAR5zQFYrh%2FAwlbD1uPjPpQ6IbkG0ntbHFJ834IUI4XmzDWKmHQKxGD8WOiUcAiAr83f4SFzBRx5Td8ToO3zeVYwFS7Y%2F1X3x5MayXeEDHAJgWKMUNJ7q3ebH%2BaWOCkP5X57bAKh8e5B5OQQvFhr%2Bww2QM2iBupYssWHhxxc9OSzSWWdS1rUFavCC6lzgdSYZA41DOAWtLoDi8ChA78MySA%2BIBvwFomj1OhNnbhwUQ3xX5UkulhcKPg4yINE66ERWWcKnpDE3YoTXSJ2Cag2ExP9rPEGEYFVVbOb08O5FA00zg7YBdCuOQq2kXeYQ0O3a4Ej%2Bt%2FQsjZMgmkELMDDoRhKH%2F%2BvB3mwNEaigp9Y%2Fm7Js9UTqAXRxayxRMmt9fwuGw%2BklnWGchUUvUe8Pd%2BBbvLpw1seJwBLCxukaufeqP1B%2B%2Fj3xhVUWyM%2BakUy2ZjcW4FEYRRcISm7Qb8bLCidK2mNQ03rBOJEAAICv4IbWg7P8IAI7yggEZT5zIC9Zh7Oh0wQsg9ggPKX%2F4vXqvqV4llvCOJ0%2F%2F05XFMaonRe14VwO8v%2F%2Bnwhlxr3%2Fpp6adaf%2B0Zr%2BI4Xr3Nj56E1BGmCSP%2F%2Fb5ItesXEx2JSf1ZWZAlJ4hAL7qI6ytvqNgPeh%2BOl8Wg39kUXt%2Fiq1XVm9SNktPe5NAGS4Rneje4Zy5D7PdhbUAz8Ku%2FdZp67fz3cBXrglJ%2FgSOsgfUx%2Bd9hhUSCwiQFLxQBtHfdZwV9GU873HkaSdQVb1GsAMjhFQgKN3vqktYM8U2NCwHwbtGEL8cAB06O0Ie2J50NZGEX83FK9PUWUo6GkhQKEOTjUPA4IlTD4T%2FgSH%2BEAAUagAGRmRM81kCbYoaepzcGEa%2Fn9cSoGUAOWXjYGM%2FEdgAvsZdGq%2BSKqnhL9bu3ozAFEoDgealXa%2FaQV0HD7ImWLMQQVpLqeKK8x%2FCF3wDOQOKBq4n3SbIDhyATCf9J53WWcnYAycS4bvfDEKPYKGFAMOGLnNv4rj4OWdPp6VsW901B4gFXznQ51W4KB%2B4F2eUGYNoqozOnLHhM0n1dzYRw5KK%2F5VZKfv0XeEF3ZIKjoZX436twZ52BWCTyDmkfYKUgkDKOj5qXFAHaxhTL9af3EHDjFN4AbAHQbo44v2Gz2t5mFrBSCGgs6U9OmI4i4UzORbrHIK9vA5bcM4IO1lmU0SwHTMJGQUa6f7gDxov1gcJcEEonsWVpPQzMI%2FoaVksuBB%2ByFkKOyEOUivU0SllQB0iTB5smxLCQKtlBHOMknH6yHrJrNOzw74eDlARJSCHVPH0N%2BgwKLDAgXZoqOk1ZJKLgKupGxQgKP4VhHMcwAwDxUxtWcHTSBMLhnValKF5BCo2qcYH8IuG7wmcOidhiyScVT9zhJ5TgVAgJGEAICeEiw3iBr0vOJrYBWE8OBuybAQlESuhQkuMAEbKNoVmAvmqB1AoO9vZvSSKcRez1ZOfjE1t4s%2BuqhR6EUJFQCveYq%2F6BcKg0BemEvoX3TbAgnUMEAAdAMcBIxpKedUjfA0wMu8CHEsuDDPdnIGozAsGEkA1tACCl%2FZEzynpoz5PNb2OEvRo1GkLNlhCZsSrH8VS4EXQkFt%2BW0zo99s%2BEAQwvgQgACAq4AAgKYj2NxKMAwjupiypxibu994AygJJeFOufBA8xkphwnOeu%2F61x6CiCGG5Z%2BWuQorgaWCN57SLOUOHF4FRkDPXfL3ADIUGemCFkCTAAEAgChOODUAU71hljAMuG9OYsTlwPRQBDcM8hBFuBV9kE6k%2FfEIItyEkNwC7OROT%2FcBaxGVyCR7ENFcpyyI5sqwH1sD8AhQ9Nh%2BdEuBW2ZlEOSB0NXhmRMH1XyCtveIyraTU20wHfToodomIeACwkAsAoGABUEEUzSeepkkOMzGsXPmJcBevLPRjMwTkloPPtM3dxy%2FoaaqGmmBNcM9uGIJXChSrHebtz%2BZKNp9HEhad5%2B9RbkQWb0A%2Bwf8KOHByJLthZ916Vug8L9v63e2w6DUPQvsFwl%2BHARL5tx%2BD%2B7QgssBw9TpbJsoMnz88JJoDM7DQZAbRX62onD%2FYev%2FQ7OOKIGfK%2FA4hdqCoN%2FxeRmkwh%2FKf7IoD8TO8fYy3A%2FQjp5RA%2BN0%2F6yul%2FqoqAOOH%2FPJ0YJ2YjeiwGh5dhiDG620yxPOAcBzCtxL8%2FbXbn4RC3vwFItdJtnYhXPvDTiqes46jdbhXFcmA3nAseeFaMfI8HtmPhHtkHJ7JGB301Ax7x0QhL7ANDxefAE0ywihdUv%2FPuCPxTIwKOq0D3BHS%2B9%2BAsgKEgY4r44HWaYkK51yk1cVYdMMFX310HHFGwE4R%2BDcwB1xn5mEkYGoS%2FAvGnUwfYDgkIouLfghQuH4l43wd7ItPwQRwNvEzHI%2BoiOLfgcNEDkaHJZ5qw5kKA2n21XD%2Feq4iNVxw7JRENrJg4KZgJwj8ZjYRSdTFzQSYB1wmANIuF1zx32FNkB6PKD%2FCyHOYk2GgOP68A4LoO1bUstZArXUcYFaHUmfbZtAfzEJqpkXwITRdC68YgHFVQQ9%2BvKMwJRn5HYeU1wtsFgWO4F8yOnBIo4GBrfj0SZgZzwY8s8HZ9QrqvHOwutID7xExkH1J%2FN2j0sE%2B6%2Bsv%2F2n%2FrGQ06Z46Wy0C7Hgj0PAtGPeC5S2Hn%2BLY1fLdb%2F50aC%2BsR7g1qJGTPWzKAAVC2ox8qx0ewPmFh1Km16fwpBCggR%2BQXH6DWh28oIxtLahpUmT1B1yYR6yAbymYDCmQri%2B1B9BJLCsyG8a57eDIpZRK51iXf%2F%2BWi61r11%2FSuon7RLqZonLR58PhRGv%2F%2BegVleutlXzKbcpVhmQCzqj%2F%2FuYvX9pSFStw9c3T9ffjEAWVX%2B0BHhhOvv77%2B1GQX0%2F68fCqcaVr%2F%2FrFeG5QEG1fGU%2FLf3H8OhxNKLKlpsbK13%2FtdCQIc3nzzn%2B5UDpf%2FfYEP%2Frf%2FQ0gcRKiD4%2F%2FBoA8NWEvz%2FMwAlQNj78M1isvBZUsUUnz8%2FvEIQJyfiexN9hohA12I%2BOK8qwgo6zuO557ZuohQjhcbMC0JZmHx487RRjUWAKIK%2FA4u0CHwe9%2Fr6vehAIbzPm8HFvhAoAP%2FDrqulUNbj%2F6K%2FF0CtlWy7p5d5JAHm3E2rYX80iOKQ7K%2FG4CofGvznw6TkEdAo8HFsCyHfn8jpCAEQhcTJYm4ZPsx%2Br%2BxCTsI32eS1ZVyXW84SDVaE1N%2BhdRJCjKaRjRC9PcqflrE9Q1oxxX4X8iJiwGh3goMEVDzAP8IAIFjpLYVUpetttZN8iIylNjjMF75CwcK69jDWoONZqK1aPW1gAZU6EFXLQXzKs%2BGDxHSbr%2B0f7jgFECzDYh1MUMDbtnhW1LdMIQJzBAAHgAHKJrje1LIH9Zsfg1osaBybBJO9BwiAspj%2BFaNsVA8D9VCa7C0mN7d94jt9hK2XtSnYO2CeMNgJszEE2%2FsYAkgMoDT0lFXUEYTC8anQZOAQAAiEAIGBCbUzIEwnu5KDdVaLgyDhaoaSLz%2BENSJbDHigEJ%2FrBnZEUxd3e%2Bc5%2Bg5uML6obh9cnbTGaMABXlNNdgeYUdynNWKDVIhj7w%2BGoQAuABwoIAAio4WKaE2fartcOhSykHDvC%2F4ckElwmK4S%2FBMxjAa3vN3M%2FYsbFprBonoN5ckbfZGgyU4hkjpxBmvHYe764PU8EHs3%2BuGcBAeK8m7K%2F%2F23mN5P%2F%2Fmjf%2Bt%2FT3wdK79YlQIlVOLERhPVLcCcPhkRZpjpx1HDnt1i%2FeZ%2Bl%2F7j6ek9DSNTVP9DgkIVuNfn9haXCUCoPHQXDkgE9R4Hf98BZ1kMl7PbXqarOtaehxCQr3gBgGodVt%2BX5KIF2DvwMfQh7YDv0vCQXMFDxTnadhQB1H5GXWCjL%2FU%2Bqj1%2F%2BralqvCVRafnwIlMEohvyJuB4rx%2FY7aQNBX4GS8VF0hfT%2BGECRWCCVHlN7PdUFZU6XR43%2F%2Fr11WSpBckxqRhEkP5f4swBuGxgZMPjUfGCDpphqlHiV6erEBccyZ0PC42AIQmYwk4DIGiDQXQNXLGIcHlkTCvYCmWUDVXKeKWq1Ff9VWEPGZQ73tqlz8GYGkGwV1mNbMJxH4UKB1wkzvzcOwuARMEgtL%2FC01TiXkIQZEQRFdcguBkwcMS4AZasyGD9DNNg2GqtTWMV4%2FqKathVmoXrKy7lrTUAyH1DYCRMKFfmhG0YsGWxYVwo9wOhxeV%2FkQHH8YGCr%2Bh%2FfUblqhHMROSYgIJRMWB1GjAK4Bsa0wIHMwM655sC4ZMOsKjLNOB3JCvEuF7JpViWVStE4YZMJlBYaEsxPIEqK8Oic2PLm%2BxbNaReQMaq78UxuKRQERrc34bqv%2FybPKXGx1cXF6pr%2BCHr%2BYJIhnzngqNL3vjUVJH%2Fk%2BLy6ac788PbH88AgqiqLH9LzliWRfgt9eNv7907WrjBPwV%2F3mYCgPl3Hf%2F%2FxQ7g9KunqeVkDHpMyLB4V%2BX%2FfRpOvriqueJ6feLuJxxCyHYiXW6DXz3frls1R0fQy3T0Mhx511q%2BSjRnbN%2F1xgDh%2F2cuO%2BdnWjbsa7wJYGAkls5gKzmHzWQ8f%2Ffbv3pv6qGxWv%2F%2BUx%2F6JXrrXtew01CP7HW19fUf7L7zyCqaJwo86JUtSIqLuWUuic3yjVCzy%2By%2F4itR4%2BFr84vfO%2BLvjmipnoLeG0fuKEhCtxdeHLAeHo78y%2Fj8Vpog0YWy5SU5p0%2FDtyEdgo6JXBMHfm%2FsBSs0Ky8PoXH%2BuuoTA%2Bh06KCYPRGI60PEKQyx5jq2bzOnA0CwQQGUia98fA4awUOOz5EyXse8yLDYeAAACxxBmgCALBX4lC069XMZi8WM7H11WL%2F9cvrFXVzxPpUq7%2Bt%2F%2F8d7V%2FCPjlrz%2F%2F9XxGFFAur8Nfq2X%2F%2F6v9YsZk6Rfil83jvq7zeFvBEr%2BGFT%2BIx3a9rF5vELroQCPhxmihMScxJBBh7Ur2QEdJAbgADevIWBbMbsv8VXRZY7Fb11tqO1rHLfFKl65cFdXrHK8mdXPr2M0uxCkyI%2FE1mV31fHZciov3wjnpHLt%2Fl9%2FTVI0X%2FvG2Ybi4agJnqrZu%2Fkrw%2Ba%2FvuPFbej8d56bCBHs3WZnpLp8P0Yia4XPKXN2S%2BMHifauCYgAYHu6d%2F9f%2FZtjw4tx6sx2PsvPSxeKx0rbYSX32%2BxRPBvVvrX1d%2F6pqFf1r66xymxvFK8mEfrrxP1aqglzMaN57i%2BhUV9F76KkFcEMcLP711fFZyMVuXrVYR8I%2F%2BrMctroyv5cYt8Z3Pq1Yle8dQh8Vy8TdhvhpTP39Gc%2Bj1YpRW1hX2OV5c66octOubzq5itNCl8d9arrX11il%2Bteb6v9ZVwnMAAIdwo%2B0jdOX7eqBTu1BCbReTo2Qho2mvqSocorMD614lWPrX1Y1witdVehWlxKy7FK99Xx391WNfX%2Fm%2BqbFfja6uX0Xtuos2ODEUvraRCFpp%2BhNfRq1eFOVexCKmFI2QDv6vuV2FFvinQObBjT2F3ehlfSmnUzTr%2BKe6%2BZjzLX1r61jt5YpRW8X4muqdRRPi1TPpeocvtzanBXWvN%2FGOkVMZ3xT4xYxSR24co3UTwqZtp%2FqFOXOMNO%2B1ZXZx2I9Zf23TClwhTp%2FiQWRkZEcRgUoKLcvgMf01HuHmIkfUvKB9BsZf%2FUIUoyXUwt8i2FmwJW9sv%2BnYI%2B3JLL%2BT4U45lUUeSZFNHGCdUNC5IZuoC%2FhAO5IgTdPVsuJE1RqWE6pPx%2FDLHBR%2FV3lR2kZvrWOX0nWvMr%2BJ8Sr475VH%2BF9il6XtexS0X5%2F7zK%2Fda34uXNof8cmnxYMHywJW%2F9N%2BLzxg1%2BX%2FbwnRq2uM1rHx1CkS0aREv2jCuLPvpji7bQUWy6BLH5FyCmgnX22m1w8e01iJuPcxVoxaYKrDlpFeIJC8KWQamkP%2BPUW1kDfsLXhmgZ8zFeZ30xE1b3enXxkdr2I7m%2FKhLnAj0zTgOwhf6BUOicFFOJ6gr3c2XhPr%2F8%2FpWPKyNz4RgmP3PFefUzKu6RX7WxCB%2Bla3JE%2Bhi2ircP1b7yOsGXuhrH46%2BMC7yI3ylolRHNNePr9erHifrXi8VpRW%2BxH16h3M3CX6t5qyeleuvV0XveX53dSkhWYn2K8VYRi6SghDAgNX1D2gHGCfyhiMLJ9TlJmWCNEqz6TYQPLOzkNCvGoE6boFsi6wbamED%2FjeEt%2FsEnyspJUFmZ%2F8YD%2BPmYVpjF6yatmagyNEKScfuX4I%2BbOTDpAhvewl%2F1cIy6zIRM6k%2BztQjnlOKJsPR5oaSBhHcRSw%2FCz4O6b3oPxIZyl9aXqCV6xAlBveQ%2FXQT8QHWtbN9uSCiHZUQEyrLJ3p3%2FoUrCcHJBR2MGvTXNCwt3fCVX4zHdU%2FkxLUfoLJZ3%2FDTNEO79QVSL4tNx7EVPsjLTTPIvGD%2B%2Fi1i4U%2FxSuuuGKVYolr1wl2rumuvL5Smd%2FvX7ugwcVjscNA5REQ7KOHXhzTmNriXDc4hd%2F4%2FjOSjw4rUtRk%2ByoUfpPEFW5whZnXn67Gc1R2Hrh1ADmKhlIjlZM1S4EvplWDduv19Jft2lGktsMQgbZUEzWpcO9mM6D8rzklYkCKNffjqCoQwP6gn5vNV9W%2BCIpP2y%2F7dgnJ8dOFy5uzt8RD2dKPfDQZb%2FghomggexoDTqtQVQQvNc8f8lTp6m00daddjdswdseRzZi8De%2BShrd42anpt8uoEzTp6CsKGN8o8tvFPicHYOyp1uIr6bHJWvBLeMr0cZaBSj65dwS5bGallDUZipx1v60Xq7zK1CusyufXKowLcP1fhky5VFVqtq1T7L%2F1jeB79wR%2Bu7cICLlTr4KggAlIiCYDHkU3hTnWxd5lUsuAMhz%2FCFfE4I%2BV9%2Bg%2F9fh2IGkGo%2FxtIgIAyWmEbeBYr6VrPnxCNN87R9vlQg4mmOEP%2Frw7xFykhffdbe%2FxuBjPjWv1clIYkBDLkz1%2BbDszDHqGp8v9PhLn9kDZ9NLJd4IBsOlwQ3isVxtvYJPHC%2FZsqIi98yEvBHyYHYaIRmSReHIPs3i%2FsMYyrsTyYZjHvet4nxfnqFP1fHZclyVv5sUtDltbUnTJiuqqv4%2FezOJeQYMDPyjB90OX%2FvDsETWCfdAW8cnZsKm%2BGX3uSX46q5V7C%2Fyx7L6L9pdgoJWbMVgm7NTM9jp%2FYxIiA01UcTNhpiGkEJ%2FrLEampF9Vu2wSSZvj%2BCYu2nu6VeCUghJAR%2FUqG5tl%2FYvKvFFsh3wn%2BPjqwpLH9i1x05PtcaJaq3dKlpZ7xfYR9arvccSpTHYyAy7vgD5Z5f97BRppjI5VXxZf%2FUJQlXJdOPtXkv4vYG5LAx2J0pCBAbvIrCekCDS%2Bv4b9R78%2BW4%2Bevz7P4Ez26f6HK76eey%2F%2F%2FWr61WltVQUee3fxnwSGu%2FMVyCXfXMaU2UycjPlKDcS5UVsmi%2F%2FmuKz1%2FCVz7tV6SL27woRpVs58KCsfN3pESGLfZZ3EEGBbRdgnJPpHpuQzHuy%2F3pdQufGmTCEUcTo2cdH%2Bvl5xdmwV8I0cJ2DxB9ZrrmXAEfdwVa6ZSMv3fQKDQ%2BPMIWEjyO2lsvr%2BCc4d8s98IvPJ6Y%2BFbMISR5IawfwK5J5ff9E6NWonSvm%2Bor1%2BvBFNxJp4clyGl6ysF3dwxqIt3%2BI0lD49mLov6%2BaTDU0%2F34SK0mIjDLm393hihkI62OyqJ%2BBQcitiMCic7vCEGp87HguI4ZMZZnDgsxjz7L9eozgxvLdzRUTnxLAgfI%2Bv9vmAvF4ZNyBYlOuBKva4Ucy%2FdN4LCzhQyRwYvGZW%2FPTz4glkuU8YWdUhen4iYiWhKjBx1kV%2FtC3R4JcSS%2Fz0TR8fjh5x4Jp4c0ef98EZWBUEKryuid9eqEPPror0K%2Fr9XkVfwpQ5UKmNvhMz%2BqwxzJYAARjetIAdh4fj4wWD%2BYfBW%2BYPS1NjAjhzVUIiuv5f%2FLBbGwcEjbHeJleMTYMTpre4drWXDQWcxLAMC902le6jNQpM%3D&media_id=1254206535166763008&segment_index=2" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:55 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:55 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_88U7rKO142Yu9lpXA3dvDQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:55 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111596910130; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:55 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "2d61f65deb660b6f9e5e929bca5f938b", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19950", - "x-rate-limit-reset": "1587864356", - "x-response-time": "29", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00f384e80016b72d", - "x-tsa-request-body-time": "97", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"bwZdhRo4krHJwyv9210UsR9Fb4c%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=%2Ft2vhfWOerfIY22EHX5DMlPC1hyWaPi4szL5nWUqN%2B%2F8EmjuQWX%2BTUZuVRn%2F0ypMS%2B52a3rrB8XwMbC3QFsw5M%2FiSEVRgQHNcLX9W1xXd8NweikwF4JC1YJ%2Bp5LI0Tr5PJX4vUElmtkxtx8FBU2E%2Bgc%2BC5xJdWrq%2Fil65a1XRL0X%2FXF8kua%2Fl4d3hQPxECF6NCbv%2BOOP5S2SREDL%2FvYIY%2Bz4qSpBfQR8uGIVX6fbf5fJV%2FfmMXJ8%2BCITDvuzv9ShZf3ckImrZAPblwv9yr%2B9z%2F%2BQlT46qmNcJ3qb6p6glK8YjAQveQSiA%2BtvglJezOyj965OWm%2FNSLg%2F5WZdgpPtPbv7LRx619Yqiv1b0rVFVrpVurS7fIQhkGObPL%2Buognx%2F1zwtS%2F6k63EnPn0EjIaXXU3NZDcjL3BEZkCzGn22aT1V8v7q5o2yfnyQRRpp54frlmyjRrorVyz3%2FBJdx%2FtzX0KfFSrxKtl9i%2BEfja9l%2Fa%2F6tXWDxFtVy%2BSv5fXXZnN%2Br7W4bPtKrU%2F%2FbqrlXWqjq13W9cERI21%2FnfL7r5ST53qrilUEXU46%2FVYuSCTxpjF9CfYrDuN9K%2BK19e2%2BvfW9dWvr1rB14sNLkgKIEdSY377ut3CyZeTyUVK91H2%2BkTMY5za1ya2tcM1i%2BuX1ar4AAAFuEGaAQBKBX%2Bhd6L%2F%2FQj6lYv1ixH9Kx86kT%2F9cupavwRXfftX%2FVljMV5fCKv9f%2F%2Fq%2F%2FambJ9f%2FeEMvz%2FvmHfnf1q%2BL6SrXVDte7q9Pgk50hrMlF%2F8unXoj%2BpeGZ0vfeKldX8YsGOfF3phDr1ZhLr69etz9ep3rh3%2BtSdr3Rv0rJPUoYVhrMIXqWdZ6vk9%2F6Nul2evtGGSxWAsfibhtWvojZsNw1qK80omXykyOerXEq1ULZPn%2F%2BbHZcOiKOW9erB3%2BuUlSuxymILBetXfat8TXE%2FrlKT3LXoL0t93UNOL2%2Ft3BFJEbl%2FZ2qUFRPxPfy47Fffq%2Fur%2Frnx2j9jt5V6t2ssV1SLL9SJ3VMvzvqWviFZVq5jFfr4lYv1iu0SLvFd1y%2Bix%2B%2FnVmEuv1ZdMrv1i%2FXq9WMJLc2v3636b9aq%2B15viVYq8V1YJI9%2BhsDNAePJ6deSBIPzx%2F9%2FrF3Ta1b5u8corg3Rv%2Bt3eOy5J6gnV%2B1i7V74quZdVffQiveFd89WiP2hOXeT4r84hbpv9v1devfJEf7f9XPS361SjCKVhb%2BTy%2FwTTT5qeXYZKwGU3McFrLIhoZ0H77C88DU2AisIE2Y%2FNTGav2tapovvvtSA6aYd2%2FWsct64tT10yt%2BtVf6vQzdONXopwjZMFC99izBPyjr0nHdIfrqz19VRmMfq2T7fd3Ecr32f2RWt%2FTvsWKVxs%2Fb5x0xop%2BA9herPtXw%2BpCFhXsN546t58%2Fen8cuKS%2B1SivXqqq1Y%2B0V30sx197%2BuS2Prrvvd4g3GHZTVq7fCegnadiKk7fKW0eOrNzWPmUnpl%2BF6VKuqjZrEwm8h%2BTx%2Fwt0DDcJbavdiUk97Hf275PHky8n3756s0Q1K%2F2sGvoEXH335x9Tp%2BvXBD38RLTrqhWf%2FWXpAku88MvJQjKl9dfZiy17vyfH%2Fk9dd1cbDJSHtVNsqpl%2By06f6v9AusONmzdEGnB%2FTrdP3BDHYzkYXGyefrWnsEfH5WVuUPWDYcmO61bVtY%2BqDZl2r8%2FatXrX6y6foju7V%2Bm7%2FXr%2F29P%2BCN9slgccCh2Jt0rdM4Q1eTgdtapPfV%2FsEgm2iK%2FXf5TFwpBZbW%2B%2BYQFdrbJ5XpUr7a6J9f%2FaxX61J6u%2FWv1tXqySmva%2BlhHp6fdBwn%2FWVP17BKQ%2F2BUBsZMY2%2F3%2BixzJ8u6qCWHMtZ0YLMaVpB8snn%2F%2B%2B7%2B8nz%2B5t5B67zRsdHYYrsEmTfv16X1SonrrtWr1f391z%2Fonwojr1l3XotavBHbzSfU%2BCQ9E7p8nv%2Fs3L%2FhrapOkJq%2F3aJjbvZVrdhIhI6ATTZL17K7OVn6wfEyLEYlYq3Wplq71S4jVhX3pL1w8sEvG91nIcfGZPbz8NY2KtPUOKd9v%2Fk8vdn0d%2B3JuT%2B%2F%2FwoUjN2cabm9u23NRnVl%2B9DMaK2tJ8FpC06Hfl2E46QnnGpeHtUGu4qfRMvy7nzr6BGdrVx8hG39gh5csTXN5j7uvXD9X968EYjdp%2FX9cK8IFtVKK3vo5f%2FVZVqErWlnxfqz8936Z%2FRNvQXsEDlSTKVJ%2FDPK%2F%2FBgJGVv7okr%2BaiajtmIeH%2BGiNWqQWlf6XWWk7X612CgrakI6oe9ZaNl7qw7%2Fouvf9Yqur5JX9UWv11%2BsavIInxFq5bBEdhyVar8EekL8ZXhUir6Sqipnl9b4cx43eL5dpV4ZLNu7%2BW2pPX9VYInz%2FijWzggCvDel2q1cEM9Hfnlk%2FS%2FXfrb%2F%2FBEdSfSBs0tPtW%2FRNwkwjVbovfq%2Fv0R%2BpwfSy6rL%2F7s3M9eCQtKnKvXP%2BtSeCOm1YNjeuzY3K1v6%2B66%2F%2FViVfo%2FrHav4S45UN%2BWvRZef3PKhDfr36t%2BXnh%2Bsv0fWvZrL%2F%2BvYSUvznb%2FHZvD9V79Eu%2FEE58xDTf%2B9%2F9ykHafo9dFq9itP6v31K36vXouJ81dLl%2BiQ%2F16Yv0Sv%2BiwjJ7da%2FMjP3JLWqOy%2FBEKvLLfAAABd5BmgGAagV%2FoW36sVa5qvEa%2Bbv77Wv6opa%2BPu%2B1Y7%2BJqi%2Fk7WsRiurpa6JWv%2FdX8IpayeP%2Fk8%2F%2F%2FtctfS1drVetfrVetdH9q%2FRvxWOxWLbHeO7Wu1u91IoKiVtsqYOY74ZH%2BiStl%2FPM0KnwUeuFRzdA27GT9J9sLdNIEjQFzPaiYyNIlRGthX%2FCikTCSpv9U9u4rrV8d26%2Bl5a1Wv1SJDOmUVkzR0t0MWlW1ahCp21gitICIS4Pw1GQAGjYl6%2BRQQ19QjjZdJY60Np3F2fogM6YcGpVggTfTlSt6YFvh52DS37tYMnrt9B24FzRZHhqjRHQaadJiIhWpgwlp6FboUtKrWsJLXo%2F1%2FJJqtKt9qmBhIl%2FU%2F%2B1%2Bfq0t91WqRfVn6FVS71irrXaYJhbpaK97uwzH3l7TfJpldLat817rLvFKb77q1TnyKRPVY7tSLVVhLr97fVW%2FWvmVv1sdN3ilq1y6VW%2FWNiPtW6qX2iN2rPurVu5fVuutPHSzPMn7%2F991Tfq17q0l8xHf6lxjNMzrsE0e09GqHTrsN8z3UhuNxf1eOV3Mdu%2Faufr1Dsv9%2Buu%2B7HdjJ5%2F1Uqv8q565u1qr5Vd3%2BtYz9%2BrF2CTn3V2ci3Tf9rhc8w7yr1a4TiRC0IV1dX332CEo4DwVw%2Fvw77BHzCoZZpzOw%2FbMhfZjY5sqHVODdNG0rq%2F9cP1ilwh%2FRGr1afmvmVu%2B6ut%2B9vrB%2BsX6pVs5VGMf%2FOCbeWd0sHfYT4pxgx59oF7dAh0o8BUPgj2cbJGuUM42X48kv3Fj%2BEJhuQhFVewUykp7ayUzkNKKvWLv9axX8qsTX%2BrfrXKrHNq3xPa12rXYYuyahnVPraGYf%2FY6Y2giGmmo5mVnQWPt7Tu%2BzkUNpr%2F%2FwVFppdtdp0y%2BuHYZu%2BrZUUyv9hjd2CjBGkilc18cH1sHWOnwR3MaC7d6v3LuYfYX7N%2B5ulxVa19V6vVq1epxSqfCVK0zttBPn4e%2B%2BxdEgN0sM38qpPX%2FDtiKcuPwtbMcSZxkeUA19LGJq58EcySqxfu7XtayfvfhfOo7uh7%2FK62cQOxF2%2Bhxt9vSp7DMo7Ugwu%2FHini2FcInv%2BVF1ZSFglxKYTznS%2Fp3Bfb0xyzQe2o9C%2Bn9Pgq3jEpzEmVzx9dlnuu%2FiP1f9W756vtamHafpLqwSExz1BpB32bYpvsROY1cjkn6oSx2jW7rwRavM3YIt2r6l9X%2Fq1E9r1SBJfSru%2FVMDuJ9bY79RPz%2F9wSXe%2BCd9gisRkC8F%2BYj5Mk%2BdXwS0rRMF2HoHl2777Ld%2F6Kxu8TKLkhd799ouXZSThAMeN1X5Pn%2FNaS9rXZ7btt%2B%2FVq%2F9a7WdXrl33J6xrJ4k%2Fq5%2BTK%2BVhE%2Ber3vZrzSfr0Vu0Tb9dXcifKSQvc3zdIrfrV%2BSk%2F9a0%2BCLu3P%2BC24r2b8Cj1%2FNH0L%2Fz1QY7r%2FVmJmYv0Jw%2FDdrfVs8W2pP%2BiSyff%2BKjWjBg06TryeWn4TmxgcLG6tKT7%2F9N4Lp%2FGDbvpsLvDnlxXpr%2FwWdzNGhk3r2bwwHfsElEc%2BgP0i%2BaUMF%2Fa2sVyQrfosX0utfrB3l%2FX5PYjNQ2fRW%2FLY6%2Fm8sF5Nq%2B1wQfgo2MmeaeD8mtU%2FslBMaCf6PX54pcjJv4TNoeENr%2BjMfk3kD78EZabNOatf0Iqk%2Fp8FAnNHx0YmvCghcxx6JF032i2r1avVvCOvRmr1d%2B8n35S8v%2BbRoGeH1yRS%2Fv%2F4Ic27fomW98svd%2F0fDL7r4JZQQFBXZbuKtT19W3%2FIZ5BdAP6xfsrvm9FqvBGaRRY5dorbxXWxVq43UjLC%2FL5MyrO8mRe4I7ZUXO%2FLoa%2Fr3Yq99jYb7XLL%2B14JMyVnAqsv1%2BiOVurn5CZs3vzeIKzOY7T6sF2tS07fmyU9rXiqK1UUr9d3u3ye%2F0I%2FgjpLte5q195fRouyHjH%2F92Zpp6Nr3eO0sMduZOe%2FQivf396WPCIqhLyjs5Grv4hEhfovfopAfo2qvv9Fue6sUvNVv1aq%2Bk6bu%2Ba9V1%2FcN4EAABsaWJmYWFjIDEuMjgAAAI8KSCUKDcLDQLIQzBQjCQZhIIjMLKzi98uMnN5NZXGSi1Xu9yWhOhy%2F9I%2B34P0PmLx8u%2FZm%2FP%2Bj6u8ZbOXlDvo37N%2BvD49lQez69XyroN%2FKe%2BeOyRnnzo%2FHkfz%2BlpfrNZ7pUP%2FM%2FlH3%2FUN37J0TSH7bQH9vpGCgIPf1JCKQkt8wly%2FbdT%2BJqH%2F%2Fj1UdSpTLfyDAge%2FD6zE%2F%2FwAHo8GIKN8qCm3xeMsoMTlVQUp%2BzTUEcX%2FObv%2B2lI6YDNXfaHgtp%2F%2FYARt13exP8NV1kN%2BMO5JuoYG3f%2BbRpKQpzht5wcxn1fxkAcBJBSULDQbEQLIQLCQLBQ7BcKhIIlUU1zkrLyJUkSoy6lZchI6D4Fp4HoT85xrmWqH2L3Y%2BPC79c%2F5%2FL567dnuzr%2FXPpfy8vaMmoabLu4ZcKOFAUYSWFwVPw3xBQyxpO4w5bCUKRJOhNch7sApcsBHmwraTORr7d2LoNQltf7R0C0toXv%2Bf3UeluE4tTrrflXtwwm2FwCf16RDNj57e7LYcvQ5XgEge%2FjTASmExmaF8MZ8PqFlkvsaIT11FXHbZzuc2hDYlgqtGEo5%2FNStxWLfnr%2BbA%2FZ1ZskIg4ABJhSMSEYKBYKBgLHQbBQqjQTBcKhEShEY1tnN3zJVReWvJFBktYmh%2Fj%2Fi%2FntGfn%2BF5r%2F466f42Dwn4eqeXIPRVXoysocf966eztTqjmKTf3VJb833nlfKvxvMPwvHecowjEnQfkz0vnVAJ%2Fo4V1ooz8Ga7HokH%2FilfsDdnmGv4oH7Y30pjacOW%2BV%2B3vrk6nPtEVRwVwtHN3D9Ckxqutrn6JZy3bte%2F44dPaIO95hjQ5c0BEW3wJid%2Fk5eUXUh8kVK5VNHwLSZLa5118GctUQYqZK5LWlBjT3Urt%2BIt%2BmOoOABJBSQzCQLEgLBgKBYSBYaBYKDYKDYKBUJEETfG7pulQy4qWVdKlUkRI0P%2B%2FXGpfhug%2BbX7uy%2F%2Fz3fmft48R42yV0%2BGk2gwo5J4%2FovVHQ%2Fea5n%2B%2FeAXjy8W4N%2B54c4EhapT37KHBmWlE3UHWyfQPJuv9xmo1CJgw6%2B1cUKztdde%2Bkq87X4byBNW%2ByaoHziRXVGYDodC4tZnZun5TxP3FexcX3v3gbr3YfhuC9nw35KBmIqzS89gFRFu1zy%2B5zFdt3auqy1cKp87d%2BqIAFVMGVwumAcqUPyqSO3SlZBioVRrVXh3yA4ASYUkOzUEwnCwUCoUCwXCoWEoUCQhG8%2BpHd5eVMgtNVzwqVV7ksrVcDi%2Fc6R1jrr0%2F%2BteGtr%2F1d940dlnGrTo4X8ccZVwz8aNdFyn1azp6116uU1a95dOhWEKLjX%2F7l%2Bzf4DSjBzX0eXPSwV5jwmnR4vPpQvbRWTo%2B0DBxbqhGwYR%2FONdCZXflhMxgct5dL%2FwsjOcAJRuCyeTRFuzT01UPX1Ma0a5d8%2FLVxfhxGPKYADQMiWL%2FoiTzKhECNOvO%2BgQchs%2BequMV%2BM0KPF7ZWVYWL7VmZKs%2Bw61sRen15Ytil99ZVWkwZYg4ABJhSMKBYKBUKCYUCQLBgLBQLBgLCQLDQLCQKhYShQKiEphSpVZLzetgmqKl1SVS7VKvgf4t03Fx18vlH49%2B7SqepzZSBf4LaMd3iBbecQ1Pk7v%2BR9r7Z8ghRzH74wuWnDcPQa4bQuk2QaZnbisWF71OYpsfbPgcEVnD7Ena%2BjsqJyYbXRB0HaJuBhQ6qLXgzoukfQ79cFSs580GFDSiCK1OqYkpOdAZIB1pQJ8OmnZw5Rrr2c3o6HDnBCggH4P%2FZBKeWu77eHYBn35gX2C4qtgte0pSherZJS8v%2BPi7cWw7rJ2sU%2B4rAcASQUmCgjEgWIgmDAWOg2CgWCgVCwUCwlCQjCIzC%2Bvy1ylbvXeqqXuaVk1OZeyXV1J0C6fw%2FkH8H83%2F6Nu3U%2B95ez%2BF%2FWOq%2F3z147Va18HLtzTRTLzjhL0Ojqlsp6TTD%2FC6tNcwVreiPqt5Xpb9L%2BatMfApfmH1v5N%2FaKavSF7UjC%2FP%2FWvigNDAOkVGyHX18w%2FApeKVgEjwr%2BOolg%2BPZZCBJhY0LvV2cMFcjX3HNvm%2FOlJ5QKiZxCk7NBXJyZ3AA5lQiJ%2BqmSn3Pg8ZRN4%2B1%2FgZeSqgbzcH66pfjLWccf91ruXf4P8VVfK%2Fld1Z%2F0mkBwAAAFvUGaAgCKBXRfr9CYvn%2FV%2FjK5v%2B%2B4mir9eu1udFZPz7%2F179W9vvv9YuSRa%2BLWLlr%2BjPie8UT8%2FfT3xvffaIb9rL1BJ47hx9c%2FRP4JMaQrDmta4IuWgZZ05l%2FrW%2FV8JLX66tc0lCM3JeqxX6t2vfE%2Ffd%2BCUtAJo7FK1VUQN8Zf5K%2FXOnuaPFz3fLDOttE7tYP3Pfl9X9XdyUX8J%2FE9E9q4VqzHLb4mX1Y6Why%2B%2FVvkr167VpL707QIa7Jx9e%2FV%2B173Xsct8VuT16ifXX1fdXjuVK9SpXqVMQv6v%2F9K%2Fa92tU7%2B1y7VyrLe9a9qW7xS4onv9SpUhNjsV9fr3axXaxV6uxi3r179f9EZPP%2F9CV6hyz8q17J9f5%2Bo7Odtf8lBRq5vi8d%2FH69XSnT9X7U9%2BpU77XsU7xSuhyl%2Fu1l6Lvl%2B8Uqr179WVuv2IWTUEnjvhSnqilTFenxZLDbaj6Hh%2FdZGb9exSu%2FV5LvQn5bL%2F%2FyxISWqf%2BtXBRy4y3Y2C3H09IaZLvONKWQ1o62j9B%2FdYv8q4Zf38N5s%2FvjzfFp%2FBJYHJL1%2BrD66m3Xqte7r65e1er7V5PV6euG8sGC1bbNKgvVkpJX%2BCOh35Zf%2FcExRxC%2BlOMG34JZyQcJr0GrjugLh%2BzGbPn5c8tealKY%2Fks2dr7s9Vh8TJd30q1it%2F1B3forv1Z3VrLb4LeEzDNWgh4NLXL8RQSSdBSIW%2FjyZUYYdhJ60R4m1QZe73tU%2ForheG92VfcgyUxq%2BEYzl8n8dMFZf%2FrL8xHfy%2FgiOckZyUufmIte%2F179a%2FV69a7Uwq9XY7u6MWM77WXdetSrXBRjQQEYNwJgQBXYXe4b3sa%2Bydml8UUZbIAuyX%2BGKBs2Ry%2B4QPj1NLG0H%2FKS7ofwQyigZbkQEAfL8tta%2FRX%2FRJSeKsyGMyVb15NlPly5I1KcJdzyWtd165V9Cll9DKvw%2BN561rHTxWiAr%2Baqy%2Bv4KbNuQojCdT%2FQHNHc7BEeVimO35DXp%2FDNMtPKZS7f15MoYDSeqsfl6q7BDxgICizARuvdr1WvK9q9ClLm1qbwnonxmv7XXY4zKWEzGt5Tq8JUExvDA3Z9%2BGz5DLS%2BcYURkbzfwzKbPbB01Gz6ZX16LN%2BKIQVk%2FkxeGtiHLmsvLH9etdrVXXrl32r%2Bxay%2FWKr%2BbFLRPfXevQp9%2FaGsV4LCFywm1aSJ%2BXNV5IRcL4ePmPgj5wgCyTVZj7lQ7BIRu2wE42G5pYaAl%2BNO5hjuzEG8vq0eDvT5jY7pr2XGy%2Fzt%2BSiq1JVa1%2Br%2FrnvX8K42Di69i4g8AKGvoEHUXI0F8Xjowvy5v6BHIIKZQQGc7sPWnoLkgNrqhebj7U1uwqUqmf4cQ0vUMuo30K37u3eAAbR9X5CB9Wv%2FBdbGKEN9EX5RfsmbEasNn1SWs0PXhKhHAAClCN%2F8J7RBRSKhYMg0H92%2FxtgrRxAbTZov1pdtqLD7rP0ZBrarh5gwMYnGb9avEZKJRKqQvqkL6mvgu7TohvzxV%2F2r6v77NXGBkXq9E9r%2BjXJLk%2Fe%2BqVXqr1a%2FmPjQ8GpezPGQpPYXgoLQjUppx0U%2F1xPujd%2BXLT%2BU7UZhf6kb9SLL9X%2B637r7J5f4JyBq123Vwzi6E78T4%2BCEZKg8H%2FPX%2BP7%2Bcq%2Fu1snlvvd5Ns4xeYyfq%2FkItLf4Tu%2FmMt7BCe9WC3V%2FwXmxqLDtPnfdk%2BvX8hcl79bf9E8%2FXKVp%2BX0%2FcRTOS8r%2FwQmZXag77rVFYP1w9zdWdPruM6tfhg0ue01h9gJI3x9iyzbemkUhl%2F11rurvybqVeT%2Bv8Oat19ttasQQbZVctEkDPfXn5e5vBCW3Kt%2FuIu%2FBDu969Fl5KJF6%2Buv68I6VrcuMbtyL4ZIletDTJnk3Qmx%2BCTu7mqtcPhPuTJBGIMWfYS%2BpOX6luje7QlpKltXrXCat%2Bjfr0dq8End3PC%2F9Spwvk8Vv7v9T8%2B1KDklaYV2X%2F%2Bn%2FgAAAEM0GaAoCqBXPVjImRK9WP16T175LtXJfVu17J%2Bf%2F65zte%2FV%2BdY10V0NotfrcktE6XlV3cnLV9qyvWKrUhfqxXF47L2C9aqXFeK66Vj4pXcH9etVL8TVrWMVfmO5U77r1pa4tcu%2FwRlZ39RPb9QQxZmwpBaQYO%2FwQT6j6BsMZqaZ7r80a%2FRNnYZ2kq%2BjRFxSPkg536rW%2F6vzq9DiXdileEu%2F%2B2%2BWrV5bk9Xq6f3fgj5LSZr1VhuhStfWu8nz%2F45RXXKr1d%2Br%2Fq7FZc9L3dClv1lVE0M7q4vf658QtXXknECc1mFfRMvF%2FrLHeXRP61%2BuVerHdXVq5V9q430v6uSeCLu%2BX6yov%2F9Cvv5VqQdlz%2F6v38SrrTP%2FJ%2Brfq%2FeKX9X6v1OitWvY5bEwr7V%2B1gv1rFLc%2FWuqHLeJ9er1eamwl19vlerq%2F5vJn1ZXrlVyUq1%2BrOfFE0KJrlqWvVqHdv1f9X%2Bbunuqu7PWPamGYv%2BsX4I7e7fqxfrl3V9q42r9rlXS9EdK8nq9WbqsZmp3Wi9k%2Bf4k3c50qfC05DT1aMIKhJ6%2Fe%2F%2FBRdtrcl7%2FgkqnYbvzE2a7%2FPVYyNH%2F6t%2BLLUqTejon3%2FonVfcvr36%2Bfq6qle7%2FWK%2FQzvzjV%2BToqH89Tik0Skf%2BCEvNsH5LEtteHY5nwFYCYM89SZlTKjGyD%2Bien1YJ9aUV%2FV56%2BNoVOll%2F7w1QGc0goSlPjpCb%2F%2BYnGhpL6uPq5dE9q%2FPq%2BrivBDsOVQ3Zua2A%2Fk7RRivOdfMrLlkXzmXzWcIA%2Fy5dyWCTyU1Y7lT9ev1iq%2FYu5a9feha9WWrV69l%2F7wR3fyq685FWQqYYP%2FXEFchPX%2FYk1OvORfNbaFVhnnNP0tzTQX7DNGNr3%2FwzYl6v3WEKxV6y76q1V5%2FVyUvk%2Fr%2FtU2Tz%2Fyldf6I5%2BsF%2BESSiApI2jlgWH1f5zqsdEHS%2BnxJt3prEDv1WvUX%2F9FevXL8la5ff9fdqdP1PSeuq89TjhIony%2FZ7Ql3z%2F6s5SFKxdD93fmNkakrX0novcXXoneK1yf%2FotSk9l%2FRGCW%2F7hOkn7vs0YlNJf6%2Bq5rr0JYfC%2BblDBzLzo7sppHf%2FOZftxkufns%2BjdRN%2FzUB2CGAfl4ISnsggNHvUSQzWkR65T0mRUXoEfSSwr1evV%2BperCle%2Bb8klpbb9%2BH7oualx%2FFKOqSoSf%2FFZWNcaRPi%2FjkUtf%2BCbRsamFtN4v0TL9dbvXDJ%2B%2F%2F6K4%2BCS3kGmFa4Ib5RXv2YggN%2FwlIPSZd%2F6L4H1MVbVeiN3Uv69Vq93Ivcuhlp77r30IYZS%2F39erkvokvdWa3UEXGW7gcN1clyWj9jlEDldF1pVn6l16vXtpf%2BjOq5PR9dqx%2BCTR1l3%2BCHqvVavXgize%2Fd1vy1P%2BvJ3wR2qte61rvtXu%2F1lqkhHb6%2FSF9f1Y%2FV5LWOViM3q%2FuCLLDfb6N1QAAAQDQZoDAMoFf6Ex%2F1yxni%2FWK%2BW7V%2FlkgQf%2F%2F1f6%2F%2F%2F%2B%2F1f6%2FVj7VId7avvJ%2B1%2F%2BvjtFY61bnVogQtc0t8CHk9P%2FVFfyeXwIWiP2rHcmFderVdWrviq5V6uKXX69Xr2IJSfr1dL3d%2BuH7KkVtNYdZ5imWRz%2F156%2BOonQypKfDdHDqElSf8bmhjTk%2Bif9v%2FJIKRHe2vYSV19v%2BLu1eJ5ataibBdfPHI3t3YbWK7m6XKp%2FCdcu%2B5uLxC%2Fr6S1r9e%2FX1esV%2Bevuyf89Uzb%2Bv%2FXpoM7wU69Wd16kT4mT17uh3y%2FWYb7VirWVXVnr8YM2W%2F7rpXurT%2FdSyeu%2Fcly%2BuX6uVp%2Fqd4dnr9RV9%2Fr365f9rLu75Ve7qiFe7XUvS9a4nq%2B6L9P4W6NUn9ke8qK7Y0NGNbQLXqxXrF%2BtXX2rF6r3Wr1XW1Ejv6r%2FWD9eqzeHUhv1c%2FPco7v%2FwRXptuZPP%2F%2FWu3lgwP2qdbPcZkgYifP32TjdXgQlBHWaEpda9CfoteteYjcZBU%2FhK%2BwCRq5gwHYI7Es4YD1erd9rFXn6%2FmoUl8FtJBv0GOhAvfouFWial3XvtWrVWVtr3yd9VerO5PVgvRTlXlIm1%2FJ0Mv%2BEtDe8qT8EZc%2F1%2BCckiixyr%2BpLBDzXKvXv1yqtWrkuVRfc8vLfq0nicvod7P5Z3NsD%2FFcYLj7cogO%2Fwsd9ktakExxuKioL16NBfn5UORhP%2FgkpMHNXv1g%3D&media_id=1254206535166763008&segment_index=3" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:56 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:56 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_ym+XMOREfW7lUyL9cNn5Lw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:56 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111637858926; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:56 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "52661200a02716e08b016e8b92bbd104", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19949", - "x-rate-limit-reset": "1587864356", - "x-response-time": "33", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00774e2e006bde3f", - "x-tsa-request-body-time": "61", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"fHQi2UNYdgEsY5rA%2F7OeMFPv0II%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=L8MbIiX2k1ohoWDf7r67WKrx3LeEc2mr3dXXrh3IX1%2FcajIHeXy%2FdUy287%2F5a1vz%2BxyBmU%2FrzWEOkPr1avmL%2F%2FN6L0nrPXs1Nfzd1Lfd%2BeqRwwYxG%2Fuyff%2B7Gg46Y%2BisXTS3J61Xqz9ar1cfDGsmapqkXf0X%2FXZOZuyWbHbfgiKlav%2BKy7Gjhcx7%2FWCrDfjpjpw8wNV8vgvIZSlvQ6%2BMFB6a8FtUXqh5VCT%2BJyV169J6Ky%2FRur16vOVfQEkmcX%2Bvfr36t%2BFb2t7NUAySaspnJ156oJI6bof9X7JWv5o%2Fj%2B2c4Tf%2BC2um2dmzOn6M5%2Bu%2F5ZqEg%2BvFlzpXq33MmT%2FRsq9F6rv16vZJae%2B6s2an9Fb82616wcqmSnf2jQfkE1S%2FVx8Eld6r0Rju%2FRGdrlXoXGK85lmkrxr936sI6Vn1euHrVrvJYJKOat2T79c248ISB%2FBGRdOq9e%2FP69pv%2FhquvpxhODISol%2Brr1YLwRW26xbdSc9Nvn%2FP25Mbf%2FWXaxdrX4ZzpJUj%2FN85pDv36K%2FL3eJCFeuv1yr1qnejVfm2bTtOT32iveXt%2F6Ra%2FRsu6J9%2Bubs3q%2BtVw81ampUV%2B%2F1l2pgddK6VvpYuiVTyS68u%2FVxoVW%2F4Ie7vccTjvVeuVa%2B7MfH%2FqzAAAAOyQZoDgOoFfdcV%2FQhcRFq7Vz9cq9a%2BNkvuVvCVE8f%2B6iXf%2BrKtX%2FVzvtek9XehC9J6snteuUEfcsWq%2F1hjat9fS9cwnjifVeEv3%2B6tdl2r9zeuXf69fr2O1l%2BCTdO5fgkmtPcqwnVLKNMNfwQyDFLa4fXv16%2FVv1bHLjFYJv6sV698R1L3a98tevS%2BvVatjucH6uv0O1RfJ%2F%2FBCPGX1tI3FHasdr1DufXa9Vq8l%2Fq9eteqyltdd36soUuKW%2BJmu7XqtY1cV3%2Bu9XdqxXq9esXcwS%2FWX8lE%2FhO%2BzQMtv%2FBJeyz9q%2F6uXfLJa276VdWX4R%2F%2FWv1M2nl7VpuVX%2FRMu5N%2F0fPI7ia4lE7FcVcnrFXrh%2Btd36xV6vXrKvHSjBHwoTQ7etpfwzGhp%2BvvjT4%2FN1WrwjJnlz3Pn1d%2BsFcvMXJa9Vq%2FCPc%2Fq%2Fzd%2Fq1Utt8EXLnVW9K%2F17fqJKeyEvbGiFsmeylHjMv%2FqQyNgnkv5KvxVeluM9F6vBfs7ysa%2Fbn1eCchsYDRTpD55fiY4hfPCwO%2FBEUhBDMM5%2BXYamy%2FsukK%2F%2FBbyyYeUSI3vzEVbPqCPsb12FTktALQR81GSghMZat%2B%2B0SprVl2td%2BEMl5Pb%2B7x39XC9F1XmIlGwLt%2BisUX9bxE0yFpCCme%2F8Et9vRUBHS1iDs7ZHSlDD3PXw8ntcaBb3Lnr5TEucny%2Fqr%2Fq%2Fasdr1XV%2FrUZ4c2j7r4%2BPXyIvklDAW%2F64frVeaxr7p70rHf4JJ%2F7mT598t7uX16%2FXKrXMl9alFLJaJF33%2BXTnSF85V%2FSJ5PffyWmkD9UTX4JBKW7F%2BEiSGpbtUvi5IfLiA99rBd36tfE%2Fq1k%2BP%2BS%2Fz1%2BZluyerVdeCLIvsCWCSSNly7v1c%2FWuw35dX3tkQHFZc%2BrlXVnrGff6ve7zeew9DV234IaTHb%2Bfrl%2BCEqZGeLsEPNL36J34JJE9KKvRHK851Lmn6vJ7f4i5A2gFj4RDS8B%2F3JX9%2FrF%2Bid4jEXLat3Vvx8FiriPR31eYj2X58rEbjRCgf%2FCetJjkINeizdlM969avyn2n%2BrF%2Bsddr361k%2FP%2B%2FQjr9F6%2FCxTx90VfOGAsEPlx9qZqu%2FVj8t7lIP1b8pocQvr77k8tprVZBMnS%2Fl3uulbuX1hVqspPDIiOkHQxSb9oyccv%2FvfnK9Y4aPyXl%2B%2FxPna3ug1aI5Gei%2Fib7q%2F1gonvv5CaN3aspfaPKT1r9f1as7rzCI9p%2Fr0to7S%2BrdXd%2Bit30l6rXderD65fqYsnj7%2F1Lc8AEkVIwoNgoFhoFioGAsJBsFBMFBMFAsNQoEwoEhiE1jM68ZcUVdS6lVcqlC4hwPzn5znH%2BUuWsi356vS%2F9PazbyfiuFG8v1t8Ks%2FJfg31Lh434lkL%2BLrrBpTddvblmg%2BWt0P%2BBxrSlf5f86qmqGijionVYn%2B59U7M3qcetoLJNoGtVXle0veAttUd3s%2F806wSfOVKzUIo5mD%2BYg1vTQbX018apAs87GMtsEXOqR%2BdwQMk6nWVywtV6UsAFrOe5r15dWsz8nTXe4CyIfxzJg9Wwrf5G%2FZOPTZI4rZ1qtzMYKa9E1cYiEEZiSYZqjs8%2F%2F4A4BFpn%2BDSbOSJlykiqmtBh19iUSimJl9cSY74Azb%2FNcgAnukhknObdoPKmYxhyVU0TIkLHuOX0fGm81%2F8rmu%2B3t8tXTwp0%2BWmLmOj8l1sw4e6fupmGcGoonhUtRIlgZvKu9P9Vc24t3soNQFl9M1dzANV0i07rqfJZBzle0WktISvVS1BDJE9SzZ24bnamxpxIjhapCmC2WX8FRkYaBTG5uY0%2BmZeZqtMmNBVXl5IuJaOzrZ14tyM8JiY2UTnhvuHBy1kuedcr1EQX04UUWowvZx9S7MfSbHCuamgyLs9HtKFqH9WOogR7h0PGa43eA4AEi1JCslBsJQoIgoMhIJQoJRCEgiEwiEwtZzU8Vn39ccxaquVdZcoVU4o04Hi7V%2Fp5roJNqfCr%2Bf47OvLAfM%2F0CZqF3%2F9v8o0f%2FD5T%2FZ%2F%2FP%2B395xxek6JoXDubnw9HQcz9ZMlqst5XVN%2BGuQJuW%2Fb9HeL429hHMerw%2BB0T03uT8CE2L%2F3%2Byx%2Bs3QqqCsxk1W66ygC0s5xmuble%2B5R6fX9U15tfWdB917A31vOBi7vIuzXL7s%2Ft3KIwDSfwnYjbNlWWuhomZEQGmLso79h9tqJXZV9lVzF6UBwEgFJQoJgoJmIFQsVBKFBMFQsFQkEQkEwkEROa45nN7te11Kq6nHaXFVRqVdTQdmp%2F0nFdQfLLumvXu1L2yT8NM3aKCPb%2FEmntfKb6Dhqa2L30zWTPzv0L%2BP%2Br79f%2FJm0evvmMN7T0C9w%2BgiO4Bx3%2FUCG6UtLaMSlZcHHpaAX%2B4kDNF9g7GTGiKtc538a86SQrnd6jrgtwoX1J04oL9dbkZgKH9Z6Ei99H7kV9%2Fdz8Rrq2sAXTQrMyAB54dnTPHWzyTQduVc6z%2Bn5Ya9GkU0xFvOkWjCSXi7FLAsn2Zlp5GOctEPADgASIUkEwUIw0CzkGQXCgWGgSEIVCImarJmJkUiYXN2tmuZM4pdV0O71U2797r3SP9Go5c6G2ci%2FqmGq9dffwXTrer7zyrvmaiirkkJdJvEpsU4rJ3d3FDQ%2FGXOsxoo%2F4A1zSHJ%2BAIGuk9t9B4pzaqK7PnNepFOHf93%2Fuby%2BaV6e751Mwdv8QO096drUmnUa8JxZx6%2BE79tQghrDrn9f7X73%2FVAGmpiYO%2FDJyhbvJkBla3IbmqnCEaOWoL681CVggQzaxwpbIFU6DUQqT0t0ot53DqVWJfv6N9XbiNrvVo6rS4zT%2B%2BX1A4ASQUjCgVCg2CgWGgoCwYCxkCwkIoUCwlCQTCQRCQRE2tWceLq8BKXS0qpkVqUjofnfqb4%2FlNm%2F0J1f0vXO3n91%2FxP7tzD6Z80h1cw%2FuOiXpJnQim7Sh%2Bx5MYl8BlpH76sVBLy83pZtap1Tk3ia72qgc4ccQNrVMTa3uMbA5zxXLQ0B69voFXoLx6LsNzV%2Fl59nM0O1r9xxWPlvHyz6sqjCeHC3pv13sBagBWtcEtBmS06k%2BQGT1OY08lvqDf1dMI7%2Fdh3aEIbelbXEuOjZHE%2BqzsWaOcGvDJ9sUgY8g2ciiU9360t%2Fb8wOABJBSQbCQTCQLCQMBYSBYSBYSBYKFYKBYKhQJBQIhIZhTaYpffVYqwlXUmJSpcqpfA5Boj55yTYf8D%2BX4zd5fqfZL0lku4l9u%2BuSPEwbe2Mn0mny1RrUdvhLVjZGOuk%2FtP1G8l%2B7lK5XW7a5wbRH8GiBcbQmC0ZZyETdfz0H1J321nvmDZ%2F0yePZPX1zzAEErDrvxhkZon88gBzO2Gp31S1AAPp2kxbc8nieBIgHyAJokJpLmuFxXicev3cHsF2cP28Heh7Lpj%2BD6UX2UVR6MfKSca3YW8igf8phcpYkPbjGxhjskRVo%2Bp7YOAAAAGQUGaBAEKBX%2BhMX6xfq1evYjrk%2F%2F%2BVWKvteq16Uv%2FT1698T9dq5%2F3%2BrZPn%2FWL7%2FXu%2Fpe9%2B1b4ihXV%2Fr0XkyXX45ec%2FVrvuStesUr%2BKk9YtcV9r0wpfyc9EB%2FElGmVA9mzmY%2FZBpo%2Fv8nmh9WP1yr1T1cm69jl1jlvVS9Xq6a5aqvvtWBbV2X%2FX77Xq9U8lGd%2FSxWKV%2Fqmm9Xku7Xrte%2FXLuS64j9e5174xcqmf9eu79a%2FViW5hXp%2Fv9dSeCPkY5u8core7%2BL%2Bf9Wq%2Fb%2FUtIKWrv1yr1ZQgnnv1erXENop2rzGiVTQCfrFPatLc19zXV35yrsEG96%2F6kB%2B8p2Pr9Y5%2Br9rU9cR6yxXUK9qT2MV3ta4vVIiGmZlLCDPhiEgwPFth54aIZjVaJgwCFcJf8ElB2BlzL8K83aaoSpV5Q6dFKNvyEzRbfrX4jzTw4hCZMVq%2B66XpelesI79F6%2FXKvNCVy8jAMLNuJPxRGBZQ%2BVQHUQugfl%2FvwTZTdTCUfl%2Bcq%2BmmteCTYcN1IvwSaHeL9SX4IyI5flXgjPtNMb9SkfR%2FBP5%2FP8ov1rylqO%2FaWxdJXambm1f1XUlrUlqRY%2BEZwQUMoqwAAY3cZt%2FjghJPT7yFRsju%2FktPhjPG1ugfzEqOzkKX%2F7WL7EyHQ9uXWv2QqV2Hf4JyYKRRY52HK9XfrOfgizDsng9XnIx74Io8y%2FKq1Sgt65KtZfJ7LN2ry%2BNsdXCRy%2B%2BUDLti2QSoDgkfT9vvAonD0y8qX%2BNmmHoaBI5qSnx1sDdIi10%2F%2F3xCA%2BZip5oEQIMX%2FFXmlYGPickZWpjYvPQMSCAr11hI%2BGCyvnig7ekb%2Bv3qra6BFJjjMylzlBXwoyq7u8cNnTn5b0sqSrL0g6hoyVK9VrV3fNV%2FEz%2BsGvsYTjQIDM%2Bre8fNhp8a65Pj9QSltBFCAdcMH0bC66LLkZOHX2CEweRKHR4PyyJMwIAr2Vp0969LXd7sF8foCj5cO%2F25%2F%2BjkRn8QS%2BL5EKP%2BaePr1CexTXPL%2BDDxmUUVGI7r4dTuOBa9VrcurlUslrrtZVichf%2FLlVqK3jWV9PYSJl76tbBKXHDYwKAdxgFXx%2FYog5c8cGDXGPspeF02XrNxwYuvVz8EcvoeErogpu3b7cJjUBFYhpP4htCBngAByiH4uwZUVDaGGdBX4sxzEkFSGr9q5OvwueNLaGAyr6%2BWIe4%2FziMhjLToIkNV30TrRO7n9FahSv9e1agh1bv6qxr9WHxV381Mnt7%2FYgkNyY3wkxcrl%2F7x%2FlyPDo%2Fbar%2Ff0C7iOUxkZY0qnnr85bHxo1rq%2FJrbXhvV9TYeNn%2B%2FwS7GyIhLQNC%2BL8KXqEDbR5QI%2FPbfvW6%2FL%2FXi%2BTERs%2F5j5gyRjYLCJln%2Bh0Cmtg1sdV5K0Ez%2B%2BgR4fBQcNL69xMgfxoQLud883qeql4X91f%2F3Qh6SsvL%2BCgrUMTMlJqO89fi6CHmhg%2FnGho0fCOCDTVPuQDpLtT%2BCHlxKnHKL6%2Fgw7aucxZUDVNCQz0%2F4I%2BH3GqSB1C%2BVmVmtfaptfL%2FL4nmY1tpfgvyHH6Gqqt2OWF%2FlOWl%2FwYcETSfedId6evnijj5n8ho0JxG739hTlQa4ctxjLpukozpedjbelhjoaoBxzbiCuP%2F%2Fk%2B%2B%2FLzkhpotq99KW9P8FeWN9prd%2B9LJ91rmIrO%2Fql0qE6ul%2BRW6T6V69X1r%2B4ITDfvv%2BLz3loXJB74RjBjdzR3JcJaLrB32l%2FEzMv8sjUi%2BXpv8pWNBEpyffr79b8EXaGWsta5yLjev%2FxcpBfPWVIEDujZzr%2B4c5f1YUOoIr5f34o2lMNNNulJ7vriO4YJM3fk918nfeJlPidJLff9X71uorzeIFifNs6rv9eu%2F179Xkh7k1ITCNl0pfX8hN06%2F1%2BY%2BO%2Bpov695fvq3kl%2FJvMIH4vxrDG3vrIQuWnl%2FvqvEYaT1FMXjNAR88n6v6s2%2B9x%2F3W%2BE%2BHlWW%2BPg%2BZe7V0tSv7XXq97T9HbHdOC9Y0q10VLzoxKt6yfUE0%2BEJb3serJbvJ596gh5JWNe69r%2Bk6nOo29av%2FwQ2DJFv1d%2FKrVurv979WPMk%2BXPw%2Fpvgl8ZaNtJ01%2BWfH%2Bqwv0fuWapXv1i7WWon8K7v39eftFOlL%2F9E6s28vX0iS%2FWLzEr3H1%2BoAAADb0GaBIEqBXd9EoXl%2F0IfN3iN99rF%2BrF%2Bvdz3P6tWG626JVz%2F16r5lMNfH4hZPXpdV7u%2FVyvXyrr16h36hSxHrVerSevr9X%2FWv1r9YRXgh2o5Zb8ENmlIcy%2FfSS%2BuH6xiW197S5VdWrl%2BrdXxf66r1aUR2X479eq1qayeTGO7Vk3aufE%2FG3av38QrfJ%2Bsv11d16uSerpqlcmte%2FWv1btarlv1arVvHav9XP1c%2FVq9XP179XP1csVqh35Hta%2FV1%2BsX6xV6sS3LjK9fr89ZJa9XX658d5mvi%2B63N48hL1c1X9hmbeqJlGe8m1WqxfrF46rPIW8mqlf9eoUr7XMfrVXFeCTH3VoUvwUV7f%2FJNgKJn8N81FYfpHtX2uH6xlerEn8X2rXjter1d2rV6vV%2FrX5vG2r89fH9PR%2FWvz1pE%2F78%2FKZIONRp10%2F%2BC2imH0DZJWPD89clmMmNRucgP4JKkGDv%2BCTbtuPNJe%2Fkr1qmfXq0nr362SX%2BesyQZh%2F16JF33l9%2F7L%2F335zuffr69%2B6JF%2BvvSktTt9L12vdr1E%2Bv%2BT16T1YfPX7REM%2FBeVhZ6ZPwuVx3T9eiaon7156%2BdaG6edvovzsxNk%2B%2B17un7q4J6tdXLd1avXNRPz15fNkbX7vHxQf5vHqfBDIYsex2jsbnyGXfb6uvNRJseX9%2FWXrJ4KK30V3%2FWLqWququ%2BYvh1eq5%2FWKr%2FMR9KX%2F3RYbJ%2B%2F%2BT8%2F5PDm1JnUpas%2FXujd69FctX%2Fo1ZP736u%2FXq9e79r24lP3cl5PL%2FkuT0V5LvXJ7%2F9cljlFcVXd914SpPQDk5AlWk%2FXnrHMZ%2F65V5aHVJXXomW9evdAdJJu%2BQVv5Zr77vf3%2FPWa6fr1qrv1iv0JSg%2FQh6sxcqhJX797frEGXuFGXcriVaS7vuTwrMZa5zLcr7CG0oohgNWeuSi%2BvWC3fXq%2F61%2BtflI6Lq9csn5%2BSCEqa7G75bRWO1S991fi%2F0tXqCLu%2BX6JqvJSHAgn3t9Ey171d%2Biy3V%2FRNOXt7%2Fv69%2B%2F5SEvdXLxNeit2vfrF%2BsX6KVvH7tcq9a7RMPfJ9f9eCOgRo0q17hfoMrE%2BIvpcWVX79ZSeixfq71WuW1v7%2FOIWnLT99qQXwzhKev61jder%2Fq%2FD9%2BS9%2F11Xq%2FKsHS3apwXkLupNURpIIcnt%2FXfiK4dujf2jOd4AAABQ5BmgUBSgV6%2FQvL9cvlxGakR1fxK9jOlW16qL%2F%2F%2FVvk%2F%2F%2FXvtfH1%2F2r%2Fq74v%2F4r9Zfr3X7Xa27Vz%2FtWPl%2BWr%2FV%2B%2FhBa7%2FV3xOK8YqUa%2BI%2Bb5j1%2FDzDe91Z0yu%2BYEfdtnTAjmnOTvjuVK6X%2FdDt7y%2BtfSy%2FUyXT1fa5V6mTtW%2FWqHeVX1UX1%2FV68NeXGH0Y6bWm%2Fq5pXBfxws8dxEoLLXGTOS7Tv%2B17tWdq8grdSqZO%2F6tYuta7vif1rGL67%2FVsnn%2Fzeqf8EPkRpMPgljNj97QukP1l%2FJa67%2B1fvvvotX%2Blersd3Sl%2F%2Fq%2F1qy%2F%2FCK1Xqxfozlo7oVy8%2FdXXSLFXJ3YxcXdX%2Bsv1Ol%2Bru%2Bia9Y5Vq9cTLyL4917uq%2Fu7kouWif1jHcnm6BjLX6K%2FerwiSJVM6kdHRcCA5RCwlTjSeR%2BJkXY%2FB6RYL1yqkVwstcuk65ula%2BdWqX9e7WKT16XwUbIqJbRvXcfBLh5Z2vita%2FBNGAqemWDT%2FlVibUXdfwTY0cLmI5c8z9e%2BLXq9dfJFXVrqvX3dXVEq369Xm2aMehGwUTiA6Q6Nc1fVWCTjxwdJh8FpUd%2BpgQL5f1lwRSEpz8pfghMJc8W9ck1NgviuXLN2etcXKRKNXOMFn%2Fk6Ai4tnl9e7666VuromX0Xv1ZJ66%2FFUbBmGLMMGOGIuwxJ8eREcEA4Rftr8KAoVcy9IpLN%2FYL%2BRl3wnJaopnL%2FxJRjHXevf4Io9Hshoffghh2eQiZuQwDWpjBrXE%2BGYcke6%2FPXgioEPyvF%2BIri5890DNOg9gqm1qg8uoPbyhgYu4nb61ax36bxfVFRhKxC%2FhMmYs%2B2v0eD8EVHL6k6DgMDoesnv%2F%2FhXYQyLh0EJTGgGcvlCAkEBXq85F%2FHrnJ%2FX%2F2CTIoZbH5JL6fqrlE%2FdfJRonIc%2BCrGn5%2FJZaQ%2BD98hElv1t2vXy3wguXTfr12rc2r8XdggtRmIKBcfNmrKPEELhirz4w%2F2E4fgKOAGQIB2thOqGwg5EDQw1v%2FVztHY33mNQj%2F2XGmSW7UUVerl%2BrV56%2BeF6l57vubie6i7vvvb2CU2HEuDvu%2Ffd%2BCQ%2BgjrsNksHaKQV4Iyo6TNj9kybVkhDnsnaJoFsOQ6%2FfU6VY4i%2Fte%2FLxk3b%2BuTwvq1evV76RZS3%2BEDTtIl2AkOHNxHyE69X3Xo9Zf%2FscSWHZz5q3ui%2F%2FN3%2BrD56oE3Dtyv%2BK8dHC%2FaXkz0%2Fq364%2F1rL%2F%2FXq%2F61yrlXqx%2Br1pZPz9Vrv8FBXvXdzfE6uKda8UY2tFQUGVDF%2FJQSsffeX109FhMv%2BtivGkxc2nta7BDGIj7Pz1LDGDHrzEQcZEB%2FhOyo1RF9A9voZmV4Tykras6cv%2BT%2FkzCE%2F0T0vqpLnur7Bd3HWR87m%2FxO7uYlpLvv8k5icYOe%2F17vu7V3ffffffV1aIv9JHmKzVevV79e%2FVuxGzu9%2B5PRGL8ERYzv%2FadV6%2FFmzCqvvvtHYbDU9Etx7MtUHH8EW0jRd%2BCQx9pW7LvdX2rZPj%2FdKXu1VkE3Nnur%2BJr0TpPWCukWXffaEHbtltnfRb7BDlUZb9UwfCW1aen33t7JhFs1r2G4%2FSFvKSeS%2FWvfZCRwYS%2B%2B%2B1ersv%2Fei9tvCZCKSs7v9fhSvR7cJ8hEQl8mPtH%2BQhTHff72N6erhmxoNNvD89Za%2FctP8QU0POkQJ4gP1xEt6d%2B%2B%2FwSCHa9d1V%2Brnqj1IK%2Fll6XLvye%2F1wu8nv%2F36LkqFXV1AAAADIkGaBYFqBX%2BhLzc2I8R4jlwQ%2B%2F%2F%2BBN77%2F7%2F%2F%2F4J%2B%2BDlX%2FXL6%2B17tWPr%2F9avm7k9cr9Xsd4vBBWtcT8dqdtXS5beTz7tT2OW53QS6p%2F36K5jn06%2Bvfa9E%2BiRVavE%2BsX6uF6uVfa1Qrq1f6V6FE45bkl9rKXVe7vnxy%2B7r1dNZMegv9S1%2Brlf1Vd%2FXr367PVcrvtcK9ZiK5aL%2Bt5J1%2FuXF1Yu1i%2FWr9Xu5hCpL1mL9axS%2Fq%2BKWW69Ypr%2FWr9ZY7p2X1armua0WVJ%2BW4m5L%2FRHKv9cpPXKT1l%2BrBetWn1132udJasVP6SuqerVu5bXq9Wr1erV5PV%2F1i%2FVv1r8ORkaFD6uMiRtGD%2FxOej5SL%2F1SH75iSf1btxZ0kl6xSX569dyWrletirWq9Fr3V6V%2F4ITc31%2BsVXk%2FP%2BT1funvrl0X%2BsrvnWuWS7v9Fy37qRLif1Z3XrLsJcbCvAFu68JW6dPdK%2B27irabo46y%2B69RcJKJq5LVLt%2BrqG5m%2Fk9%2F%2Br%2FV%2Fzc0P3tVfuj3L5o8Lge0XwR8ZbMyRNNJ692rdq0to2XYJCuj2fln8oQB7FknhLKyerDV9NfjM0RffoqcH4Jiu%2FmrTfojvwS10sZdtIvrL8uSDCbm%2F179Wm5u5nvrDBPJh1az%2FPX7GZG3d9%2Fq3asdorn6JrtYL8pOOmNspYcnqm7777XrvV9cTdrlXrFRPb%2F3v9vO98lhOm9hzN5PL%2F7WLJ4%2FqHC42ygNfhxLj0Xz3XqVP7tmSr%2FhjHQQH0Z26%2FQCceifl2iAioCZs1d37ndvv9Hiq4iia9Xk8ht0hN997NvsOHW1X5qUt%2Fsy5qbluT0f5J6t4v%2Btbx%2FU1P5yKPnCf%2B%2F1i17otdnqPzcNlf971dE1fgiLDiBueBuPm0hsKf8N6O9ynn%2F%2FIbHwgRT5WyntHr0Z5L%2FYu616td47Zlrnq1l3XhIRKEAUe0%2F9lNugt%2Bt%2Btaf0%2Fk%2Bf8msIvObRsr9ek81qQkjV5P78khWO9eCMjS7fo9QiT99cmtfghk%2F1dz%2BtSeCYjWTN3Ynv9Hb9aktTt3%2BrPyV3Xq8nuNsouLgpWLxXsEVz5tcBJhSQKhQLBQLBQLBQLBgLFQLDQTBUKFUKBYKCIKBIYiY1zMhKqpJUySC63bJWpkX5HEXo%2B4aV%2BJN1%2F8TwL55H8a2sA7VJEzbn1Xcd1Pi2jYfv%2Bkujv0gWV37r9vXYFr6N8sWn73BfrXxD4KHxDxFqjdHfMnRXD3foNwZ7UO%2FS%2Br8exUhWOdr3doX74j9PjPyXSugJ%2BArbWjmVxxz57vnmTu6mB%2Bo%2Fo5LAUygFt3FlVAzS234x2518f30Z78VSf8dd%2F0e5J%2FZ6bixpBDgcsJFqpYjt8n1pD131WZRUwaCPRMGeG9Tngv45TBwBJhSQjBQLBQTEgLFQLCQzBUKBYMBQJCMJDMKd9O64cy6KLzQJSYVpeL0PyfyH%2F4fNfAvqten4z9224%2BfO7GdfcBdVIq71Nta93w4trln6vB5cvoVMm%2BXkMH8R3PxTfnedU22hVYxw%2FHb11fsqD%2Bz0ueqsh%2Fws%2BTE%2B7R5h6VDz5Un9%2BrU4oe1YLvqDI4BVaa%2B1MIShXw6cRBn0dx0Gl02vU%2BeY1EZZr2Vwh5aGB9o0IFkAU4h%2BDTOXvr6%2F5F%2Bm8RuBjSezjIKF%2Fe80JkS60p%2BThzL003MVPgavT2LG4LLUeJaLULwYvYA4ASQUkIwUCYlCwYCgWLAWCgmCgVChVCgmCoSIITCIXNazr1cyuN7hJqskqSqKS5lrscT2%2F9xqT3l4%2F639N8VHn07n2ui9bX6dhdc%3D&media_id=1254206535166763008&segment_index=4" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:56 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:56 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_I9quZtwyjvi7QmIAdNIoZA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:56 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111683115618; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:56 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "1b8ffb9cd61bec2529599abe8a434732", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19948", - "x-rate-limit-reset": "1587864356", - "x-response-time": "40", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00a1c7e7007f92ae", - "x-tsa-request-body-time": "95", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"K0VtQ5SH2exY0WtSVz%2BaZ4zgl%2FU%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=lrH3v0DPfVdMOPMLGsE2%2FCYtZt%2FQjaektMBPKBsGUTHBnVdEz3OyN8xmBgk2tOVJOTbZguTRWbifU0At1%2BhmqVHdekG%2F6tjTfCVfFfr25WU8LgafsM1Ovw46zwu9kfxsvkRuA4mbYAONdlRefAro3NzXHpSXH2omUxhwFxv7ujA670qOljqJDqYyfNXFQ9uWhkdVm6ecHAEiFJQoFhIFgoNhIFkKFhoFgoFgqJBKFwkMQkERM59vXHMvlrMLy5KK4qlKSLpeg7dlXgnL%2Fz1H9G%2Bf%2F9beX%2FU4UGNCa61pn8yy%2Bx67vw2qyaTYU3H1rLmIRd%2BNkvFBqFnmj5197qd1EqmPJaVrp8YWwnR69u%2FalO647v7aLSYyETDmo%2BfEeETTXctywZwJoHCSNld%2FWc%2FomUS90O67VmpxJefIPpW5v0HP32v2%2BsfzQisk%2Bq95F%2FPttpQrb2egudbzDsFWE%2BpfOLuqSlYSldMrvqD7fS%2BJmmGMbYart8fdOKsNnlgDgAEgFJAmFDM1QsFEMFBkMRGFvet68ed7lt1Nbl5xWIRSpIXXQ8T9f903T%2FLor4lpuXbqun8LZeEk618Wsn8k5bOlm%2FhmGnvpizTniKbwlbeXnebqWQ2h%2Btdf81%2B9GdgQ8uBTn80IfZvtvk6zAD2X3j%2BgfbtX2DhYnys7eXEpifwUD3ahkzj3bETfOWz25QL5m%2BdT2PH3WuetQMCVPUBLFb9EpP7njqkbQx%2BCK8Kz%2Bz6FaNK%2FiUl1ytallGlaUdw3Emt7QsqlDBnWS5HpVvyWpKDZVlb%2F64HAASAUkEoUIYUCxEDAWIgWCgWEhFOQhCQRE71zKOU1jKScbtVS6vFSSkTgdG37oaa0f%2Fl%2FTfw%2F693ifVRX3A%2FEuzjN%2B4%2FteItEvP390sHq%2Fdafs9uLS0Udbw6bl66hh7t%2B8%2B0sFyraoaeutxWRIxH9f16Em7dGAWfmlMsv8PAikK7ng5AkkNkJVHUt5RhUdisz6YecGoRdDhzc4Oiuc5thx6JX2Pr7%2Bz2o5cmIHdzXPoi85iLa5EV7i5aqbi9WoRrF2k746mbWGE81d7tKEhA5FIa2OWJlT63wA4ABHBSUKHMKBYKBYsBYaBYKMIIhUJCELvnWXk545ilZprdzEupWXktVyuA7th%2FIcPuG4fcf9n6j4NjHSPkOqdxrfNprL1Tca3%2F3Cpt%2FH%2BGCs%2BuCsevS0kpT%2FQEuS%2FyS0V%2F7dJexTOKUnoTsP5nu2%2F9G%2BA%2Bl2q%2FS3%2BTdIridcViV8Hprs9IG9zr6%2BFfLuZe7yp7NiOBtww6yZ7J7jHX6Tjlwuen2m0ezjeB7p7MQyYQ%2Fl2V5Jc9U540ZoKCRfmHa0o9HTvdfLm4NkxmQUYpVZ8JTRh8sVEKeu4OAAAAC5UGaBgGKBXXoTF%2BrlcRQj7WrEbMT6sT1LFk9f%2Bp6tXmHL6uLkuulioVuf1b9Wfrr9WXa1Xqwjv17r1X%2Buv1lL61JavXE9Snbtel9SC%2FPXJjfmFfz86t%2Buu1T2KWtrqXL1Vq9esYvKauT0Z5fOJX2ipWsl30rFerF39K3XVr36yv1gr11CHS9Xq5V1atd47kq9ekHLwktWKFL2uFXIOWx%2BuYr1buKxea1ik9XktXJPWvwR9jDSElD%2FXXay7v1il9dS2rq9X%2FWKrV%2FG5%2FWv1e7rwRyHDwQKg3O79S36w79fVa9d9oj1%2FcI26677iLvFZMIb5qu%2FRakvvsNd0S2Y9tEk%2F8nrLuvV%2FykSMQffaPn%2FOR7Q3Nf%2Fr1Xf169dyWtd%2BqvJauNqw%2Bi4V7ItldorC78n79b0l%2FDMoZZRqOX0IQhAO%2FCMd72COPI6aRB7JdeiV%2FLIXLly2rHZ%2FWz4g2I%2F%2BWcef%2BErovme%2FXq9WP1PfrlJ6s%2FPVumMd69ev%2F1dfE%2Fr13Jk16lB%2BiMPsraX9e7MS5W5%2FNe%2BX%2F3Ql%2FzkXzeiqwzRXqhrHCH%2F3PjDsFsEm967Vjteq69a%2FUwPfvFL%2BtfrV3NZuWvfYJL7VfhrneWkv491JeeqVTqf%2BpgXf6sF56vq1%2FzkX5LYoi%2FJ8nE%2FN2Qr6S9FYqykd%2BpXrxGcxa%2FMuS%2F2UdBV%2BvRO%2FWDtWV57jLpxr9%2Fgipvy%2FE5Blet%2Fnr5rD%2BDWC%2BrD6KdPF0SX69fcnEzeblpfmo0Zg%2Fr1MV%2BaaVBnIrz1VNGvkv8k2fYIbKjPXLRe5cuhK2WVOyPIREcTKu8xmtfk44Ze0WXZda166%2FXDv8l7nx%2BrBerFeGo1n7548DR7LD%2FgipJeEnlI9H3frh3EPw77Ymr1d3332iGT8tgdxqLtEq7rydhCHNxV%2BEdYmj9EF%2F31c%2FXq17v0TpL%2BLk9HRQbu717ROm9WxX%2BrXRNevVdZkisV6J36KKr9Sgov%2F64T%2BiQSL9GwwAAA3dBmgaBqgV%2FoTGon1%2Fx3F%2F%2F9%2FJ%2F%2BuX6s%2BO%2Fq1v2rF%2BrH6KdL9E6X1r4tekvELJ698UXg7EvIK%2BKV%2F%2Fm6ZXdgjjLy%2Byr%2BJq8ct69WO%2B1rJ7f%2BO%2BXdl%2F%2BrtYpPV69Xv1Y%2FZS18vl%2B3%2BDDCB5uNEkTdycaGis%2Fr1Y%2FBTDSKl607vN4RmNKvoQ%2BT6%2F8UiiuKJ%2BJ%2BO7vpdX6tJzfq0Rdevfqyb18F6npC%2Fv9evc%2BKV%2Fr79ev1lV1xK9d0X5v69XT%2BhDIir9CWP1yv16S5LXr9YpLXoj1wmnn42vXcv1yiN1aX1xbeJ77BPpqnBXpFSJtj9x9M%2F8qykvnXv1I0nr3ff6t2tV69XN%2BvTX%2Br34I9bbj6sfghnhoFAqXqx%2BG8rBRu18cu%2F3%2BrKr8jXvdalFd8v65SetX6v%2BsUnmsrbrwS3vJXt%2BpFjdeuVeuUg7NQzTWtl3NUrn69%2BuX61frLJ%2Ff%2F4XyexES3qdOYMjxK%2BX%2BvG%2BOokv5nt1h%2BH5RECX7Eab7v8J3mDOx1u%2BvBJ4ZwK%2F4aK5MslIEGPDxch%2F4ISNJeWX%2FWVbTerdyWvX69NYvSe9kjk%2Fv8EdyU67kX0Ln996ezFl%2FshLFMu%2FXD8m9JP%2Frr9YT8EUPzHgKmktWq5PWPFe9gKJsW%2BWYAG%2F4TmIWuGuK7%2FPWRluL5f%2BsNHhrdnVgihea%2FXsyp%2Frv8Xe%2B2%2F58X2o2lf1Y%2FPX8M6jVk7lNfX6a%2FdWP179e7v1c%2FV7teuzEb32i4VfcnukUxYH%2FdA23a3%2BiufolX5uyJvwR%2BN4YfVysTu5rn8%2FX7c9Pl2Cn%2Fz4P3kfv9S78%2FXTHCV%2F0VivEkTnSVoqpekkL%2Ff9%2FuS%2BW1a%2FXpfNSXITw%2FeS7u239rl25YPr1Yb7LMxHkx%2Fc5jf8l5lNWcq0x5Ogf7lub1b3n9E7tWNT%2F65V6mb8l9P6JB%2BhaZ7RHfl4%2BPg0OTz6%2Brr0TKI9HavV69eu5F11YJuwjzHIaqLPTv7DVp2Ph89IyCDolaIwdkLoa%2Fdl%2F%2BrWT6%2F%2F0aW%2Ff9cOzacs9%2FhwSxvxT2n%2F8NRlp6kNUyVt%2F8whUDvu5KT0eD9Zdr37JPn9k0mj%2BCE%2Byfu0SVX29kbdt%2FfuajYMtMT6K83ouWvCPs9W21%2B7Vy77MIdHr17uJtCYpLu%2BE5sI%2B%2B7tTNV%2Fq4%2Bsv1gu%2B1rv9dfrB2jPKK%2B%2F0X3673AAAA0ZBmgcBygV9oW0b61%2Bt%2F1Ylwj77V%2F%2F1cf7%2F7%2F%2F6L777v1qbpWS%2B%2BqxSpLz1xyLH5fVxdhCe3w23drnJY2q%2F1bHE3r1rtcJfWKI9cv1i%2FXu%2FpXP1ahRP57%2Fluq8OVX18ypabuifXr6v%2BLVzi1LYSUuL9v%2Br36v3d%2FrFJdDFLjl8TXrNXq1esU19q7u%2Blfv4lXOi6vFb7WLo2rV1XV%2Fq9WrlctO4nuL%2F5Lr7rCnv4tXl9Eikf8notX63r1evVz8IbBS0yr2jEGi2Sc%2BnT%2Bsr%2BuL6KV2OUVvit%2FS12rJLricdvEyQpZvXMfq5fr1WimFRPH%2FMIt330t9z0TXJXG%2F9NV93xMlrV3XhMo43fxsuH%2BiONy%2FPd2i92r%2FN89WrV6vVEq36vdk7MpeT7%2F%2F1v%2BL06bHbZ%2FPVBqRDV78J2CntykKTB9idI4WvmMTJPi7DLQoICwQEoLa2fwjMSYM08wvpMGwimkbCewhaxgsh4v9T73RU%2BrO1Tr66l%2BvV77VpL5ZPF92fJDd%2Br0X%2FX7coIFWF%2B%2BqbvsEukclmzYWvz1DelS%2FvOruu5r%2FWv1SJF%2Bv68EO604q68J%2BMvthJNfrX4me%2ByuO3Unz1Romjy9er%2FhqzdopF5e1pDT6%2F2TlzbKYkjZHHqlwvecxYVJ6%2B2OPX%2FIRHJG%2B%2B5LV6ridur7kta%2B5fRYrsM6h%2FAiEvlNR4st%2Fvf6a1%2FW6u%2FRHpS9eivfqy7c4ICYQmDBVxVfZjTGK79au%2B%2F0Vn56n1gq%2F9Zfq5Ype1et1y8Rr67ivBJscroqv9cFB2s5dy3XnrHyLco%2B%2FVXr1qT%2B%2FmV5vRa%2FPi8eMftkfdF%2F1yWb6a9Yrv9Fiu0bKvCfNjBp27u%2FfNk29c36LKW0Rn6xR3oS7urv1i7lwgIBJy%2FYcIJE132rJvV68hN0f3y5%2BrL9FK36xn6xVfe%2FVk0ZafFzmi13oruvVu0WDvvlRtV6Ewfq%2F6vLclzeXKkR%2Fw1ZFX18rLnNe%2BxN9j0kvq78OYwMJLVqkcYP%2FRsp9e%2FVdoq0erteiPBCSWn35N3%2FUxV69l%2F3y1zZ9F7W%2BTIK2ierzWjOF6vfSO6tL1VwrXq9ZV61Vq6vWC%2FV693v3dzXVq3KCKYju%2F6NX5OfDnYAAADZ0GaB4HqBXfoSwfE4hYm4u%2B1m7q5aNk9WYon9arjcQtCOwkTX6L%2Bt%2F1v%2BsV2r92O6LluxxODvta%2BNV6tX7WOUOW%2BO%2FfrVesq9axS9990KWr%2FOVUGN6%2BNo0Vas9j7Ub6iVh%2BPRv6Ml5n3r7GhmRKDZsXlYYfjrTq0TLtX7rBFvjb9X%2FVjp%2FVXlEL8R3dyWrgnnIvkjf9FbtYu%2B8d3Kq8FesEv2rHZcYP1l%2BtdV%2BuVXfq%2FasV65QhvL6s%2FV6roUt%2BuX6uVavd1a1frF%2Br7uJV7ojv9X%2FVndTCXLLhHQpauvWCxC9yWrH6w%2F0WHV9zWiRX0r1tSWvRPLJa3qwQ85BY4PwSZB5%2B5%2BuHasVdbEr9NavNf0spLWKrXD9Wqq7WX693%2BE5aXobod%2BI2qeYmULS%2B%2F76r8%2FLjrGP%2Fr1e%2FPm6vy7tU71rlV9E1cl%2Fr369%2Bi9Xohxdmp1%2FJ0xgAZ8tb9rr9dd93at2CEsOQ0uzG7%2FZMl%2Fr0nq8nN3Lc3hmqRR2ga%2FMxPVX%2Bsu%2B6T9X%2BsL8ENb8KW%2BvSXFcv6tXojSeXJD33V%2FouHd%2Bsrurr16a1%2BXa93fq0l%2FrqvBLMIDsnQG1MD9a7r2TQjUV3faE8i%2BQhx69X3%2Brj67hXVybr0TZ7Ef%2F%2F%2FrK7RMK9Fc7RXK8TtWwhcnPgJpJ4lDO7%2FQmKvBJUrHl3%2BevjJj%2Fw5e9nynibf4JOWHXute3frV3J4IqruFaK52HJ8fr8u0tyXS9oO6GUQHtt2V6htNPq%2FVeQkNXTWsfBCVjLPvfo0VeTtkCAuwnsDVO8rO69XHVHSoX6u7q0IYr1ZXmLxwIP8IUOPm%2BJ7FHodb%2FN2RLfrF%2BsVF%2B68J8rGxmprznX6nIv%2FwYUCm9KeLsfKMEMyGU3D0vr7ijJbVjXsEMbSfK1knuNhuh0BfrV%2BCTNe7vur%2FRcX6tJa9JZjSsb9Fy77Xv3HGv95Ph%2FwS73rK7lu%2BvXE%2FXv178FpNkcXYYqt5Pct%2FdWQ89Pa9pfJuk79a%2BFZO1bJ%2B%2F%2F66ktGfu%2FRXd%2FnuVtr%2B6X2L0Ru7FFtJNPvfvxRMrF2P%2B5abJXN78zH0VpX%2Ft%2BX1eb1sNj9070Bst0jei1%2BuXxKur0av0R5dV19IT30rKq%2FVhtcv1fFfCdevX6v2r%2Fr1%2BTNt1f692uVeiN%2BuEl16K%2F6tcABLBSQbBQrDQMBYbhYaBIKDIShQSiQKhIIjMTrbd1rxddb2vdrzVVK1U3CrJHA4lpfTOtNGb58m0v8ot19dJ5G%2FJuNjL3SUnyJv4aOi0f%2F1ns4P4kULnRmNMfbgoFVa%2FWcULPw%2Fyv6eztvt3riBvU0OjPtBkKnrMdn9Zl52Hj6uXczvpO2ze%2FTunbAy1T4xbz3zPUqstRkDSf0s%2BUfH20jtdvTfdanHUu%2Ft1Lienoy9K3nNK6uv2fLDguGJQvDpJTsKi5QxnZ%2FCbavglScpeWxufAnh0LEZ6%2FswcABIhSULBQJhQKhYSCYcBYKBYSBYiEYKCULCQJCQJCMStrZx73E3Wt2vJCrm4Ui6t0HmO34b%2Bg3b1E3X6%2F1X8p4RNJHHnf82nop61cM81HLRnw3d8bSpu%2FlOTas%2B5fWfBZQe2rERHgyVzoPBRZUc07gzpiAvSOvPc2%2FQLOvj6Vkl1GfCIafYUEQ2az8OZvAEV90ORWbBzt6i%2F2aX1UPiXAHLoqInl0c%2FQYMarUqEe7wCgjpFrHwKCALvAQ7q3nfH8th4eGrxqwPWofo%2FQkRSVXfbncSvUFtuYFKER44rI7TJOe%2Fe2htfmNUDgEeFJBsFCMFAsFAsNAsJAsJDKFgoFQoJgoEhIFQkEwuZuVNermucSU1VQlXhkayLrgcS4p8y6JzHRX5XV3fR%2FWNci24%2F%2FWWrgVnYGrvxTD6p%2Bt%2F0uTYF1q8n3v6h9J8airIa02WG37Up%2ByBPifLwLD%2BFsBDaaxLHU5vjOrSo3zn9Gib%2FNsXN6x3Ru6mOA4ekUobTkzVqDJQj1sO2UV18WqlZlFZecN9nqvICV%2B1%2BF8sz2P5lHqzit%2BKHh7hRmr1oByCB%2B1qmGJSn6OHlTJikZpNQS1CnC7CluGIbZXyt7E1WeihaqQH1QigGwb7xgcBGhSULBQKiQbMQbBQjCQLBQShQJEEL11723qhKqrqRV1UmJWSuJUVwHhJz6C9jw%2FR%2FMdaL63%2B%2FyHKbIbd3QK5NWwXztLjfr1ZL4kLy4AXfrmGxpN1qikJedeHqHuPstmhv7XuUbaVOAReevjYHlyUrsO1P%2FkZkfy85%2B8S1WNJ8UtzISAATMPLB9sVFC8EvAKkWgQHx0%2F3%2Fs1ypnZ8e%2F%2FkQC317CSiSJznX6z8uAzHTafj5t8eEewrLt%2BvmnX2%2F04IqW6aa1ovNm1tPe9YT8xWWHaYpk4saSDuSkmlF2ZMxBniyagcASgUkGwTCgjCw0Cx0EwVChmCgWGoSC4RIbvOua13xhiayVJSVMmUk4pGh4fzz6%2FoH81qv8n%2FiHSmte6KUX8JmHy5K3h11ZB2yzLcpatRT21tUte0l0CF8mAtCdZtsQ3pY3Vxd%2BdglG%2B%2FndOqDth6Tpx89aIwhCuKDCXE9CwW%2B2bmhcDfT%2FblUf2qapGNFpMKwC7dzazdB72yiv6VyqA5K2n6GdVjt2ZCS23IZEXZKo%2Bb5BvuYx2ByyKtpwnj8%2FMsz4hToTrB7O%2F08TVF2u4m74HSOpWl9uiJDHH9EIHw8G4HASgUkCoUQwUCxECwkCwUQoUEwlCIXCQRCQTCvtKVrvitkuqmtyEqqqrzUvJOh2%2Fe1d%2BN01q78r%2B2%2FF%2FJOS5hz35fRhbtk1%2BZPRqlCj34n%2F%2BMgSlfCbTZZTxjtPq3hHXuAR7mrt3Fjtzl2wAX4LuIsoNBe9Fu%2F6Xub1JBiSqYCaXqqTnImtCQ9LjuttTPeexffBzO47%2BuqLJ%2F5T77W3HR1AC4L65rr7D8qnnCriU4CQb9Uxzd75d9QRIj3ArUA9Pf9CYK%2BdbiUejXN04euZmMb7rGSLQmNw1aeV66s66fBIROtkvc2AcBJBSMKhYSDYSDYMBYKBYaCYKhRDBQLBUIhUJBERhbTJVb87UpLySVSRhiXYeR%2Bd%2BQt58eb66%2FdJ4b5Plf3L7tuH2pn33Z0cw9tO6j4DpeNc6RIpbVXYO9i%2BQIfHk2nk2XUpgKHaOzi72pg7X1RP4H5YOjLeiFs93YWU%2Fk9RrJBULDKUfBfgbp9DULGN7agxBB%2Fx791z5X8JvPnBRr%2FlAgkcoWTtRgrJw%2BkfzOkMuLfUNO9H1ho0EWWITQVEAE%2FVfwsi6dfJSODrdo0vdmVr3GlXvcKoJkIJ9llRW3Bhi%2FJG89byAOAAACskGaCAIKBX2hb1eX%2F%2B%2Baub%2F9e%2Fr1%2BCcis%2FXv1b%2BvVvi%2F1Yf5%2B%2F1c7%2BRWP%2F0UsUvWrjquzu%2FRsO6pa%2Fv55b7%2BX5Vb%2FpVYfXq0I%2BM5V7qVuRFl0QvVapnHLZV%2FGVeOX1%2Buv1y7%2FXt%2F9r13Jalqu17rLvqVjn5EqVW%2FX3atd9qkWibGLqhy2r1yrmi7yfn7dju0lqxIK%2B%2Br9W%2FVktq1CFkvFL3QhYmWa67VvruJnq16%2FV69eu178JSz9jOxl%2FFL3L6sl4j4mS5MFWS%2B%2B4rpXqe9Vl5P6uFzfPNzTWa8cJH9cPz%2B%2BOl3Qq78XSSYact6uae7Xr5Kv9av1yq8Q9%2BrUT5%2F%2B%2Fz4qO7%2F8m6161Xq9XfqWutaiH8T%2BrV69JxNeuX5ZhQcGXa9ZTeGt7qzN%2F%2Fr34c6sb80ikH%2FnK8mDRqwZVEn9oh1S2vdS9%2BvdJ2r%2FL8nSTYrd%2FnuPVun9YJL%2FRWr1w%2FEZWED2Oja%2BiPfkq%2BX17%2F9e6118QrR%2FvMMZ7%2Bc6x7DF%2BW%2F0I6W5N16J9e7v0Wr8pt3%2BiuD3%2BTRufF4JComnZ1V3cly3XonXaLqvKIXSXosq89UBOiHD1%2B1avWCrl8EhA9Fq%2F12iyr1ir1SL61%2Bs3eKxXyau%2FV5b%2FRUr%2BCLpNd2Um7lu%2FRc2%2FovVpX3d1deiMfgjLuNnE7S7%2BXLdWjVVzerl3JaEpV9UofOZVpmGD4xc%2Br%2For99q1etUTzX%2Bew3Qk2SbU0COZfn%2FWLsE8YiIB6N9ct%2FYIt6cEtqw2CO%2B1l3dguoziA9aRnRV9q9Dtn1V%2Fq%2B3urRIq8%2FCkOGaD%2F33V1Z6%2FlNGpd673f5Js0E%2FCXRFILMZb%2F9%2BMBBlPJ61Jjc2J%2Fr12j1Vo0V3%2BpQV7K975u%2B1bon9ek8EZue2C8uyu7R2WX%2FX74J%2BqaqpVPV6tLfdXJ6JlV93AAAA0hBmgiCKgVyiOvQlpLu5Kp%2FWr3Vu1znfV%2FydXXrFVzM%2BhHJdeuXderherB2vdyersc9u6tFY6pBHfokXS1eIJr1rFK%2Fycmv85V88rJJeez7MesL77DeZKVDANz8ZgLBFv4bjenQriS36jrFHYRbqddcBEDEnS6ibl9ar0Sv1YDMKbtYqFYr7qyrVz6XX6lq9fkK2vXBPXrlL6t9q03r1%2BuUT61%2BrV6xT8%2FxNDsV93k%2Bv%2BvXKf1ZXEy%2BtSeLk3yq7%2FVi%2FWpL7%2FXrur%2FWpeLl6V%2F1q%2FWVeCeXKPLfYr1y%2FBNrJ0cG%2Bp7XKTVbHxclrt3Lawd%2FNV15ctGva5fkqu%2FcYLr%2Fydt9rBvfBDsnxdmluv5MenWFS%2BevjPfJPFDsuDFK9eu1q%2FJ3aVgntJ44zaIPl%2BCHz%2BX6yrzdmX%2FBDVnmCKdqbzsU7nr%2BHKV9gtKfDz6h66%2F%2F%2BiS7BFY8PWLpCfH%2F2rR%2Fm3Tv11%2BWQxJhJ%2F3NhkSC99ouH5CXvtcv1qvUhTeuu7n%2FXozwYSsB2qegOEbFR%2BGojCv%2FuXWBj59rxFgJgZxAbLT2X%2Bnz6lXbS%2BS69Yr9cO1qSEe1f9a%2FWv1quaqea1l%2BYiHNteUuNHnXmJKy1H8O9EaCLNcbPrLp0%2F35Cyv%2FkjMWevRWdmNYZJ%2B%2B32b%2FVyvWYH9ZXd3W%2FvXq5FWQydN%2FhIs0So1M5wi4W4t37FnmlzyY4ApPF%2FycZANcAB%2BUymRMv4JDw8ku7j4I8OcxQNibEZ%2FVh9Wr1i%2FCe793XiCS99uVir7F4cXSfHMx%2BYre%2FwQ93rv8EOmjd6spNJd%2FnqmOjQOE6H%2Fy0S8v%2F3%2BbQ7%2FJlzVxPoupSeu%2B9X%2BiOlur%2FXC3d1aO5XgkMUZTb9J7yfJ4KCrJOlSsiPV5vITL%2Fzc1KJ5%2F9ej9t92G217%2FgiI9%2Bvz1boRKeief%2FzghKP%2F%2FX69%2BEjSTGZXLT3%2BivIX%2B%2FMR3y%2Bjv2vWO%2FXfdXfnqjTSb%2F7u%2FL910ELa7Vu9EX7EWTGR%2FkX%2FDXZmNL7DGH8UQYXy0BzQI5PrBVd%2Fm%2FGDx1SiBGPRdE%2BJ8hX0ietS4R8J3dsyiKu7p%2B6u%2B7v9FevXpPBGISPnK%2FVpfQlmEtNX%2F%2Blfqnl7Vrub1gly%2B5oAAAAJ2QZoJAkoFc9zehL%2Fr0%2FE%2FS1%2F%2Busnp%2F%2F%2F%2Fq%2FQh98Gvapl6%2F%2F%2BJ7%2BWT1qvXrHfp7WKqZa7WztXX61XrrFdXXKrPeT1rL%2F%2FLRPdXJ6wdgiKMF88OeB6J8%2F5I6y40Pf5o830%2F9WC%2BrRIrFcl%2FrKN9ZSXL66vWqK7uBVm4ntXXfxNjuRp8I4j%2B6om76pOXue64ntXIv16Xa%2FVlRc9zerFerna980lrMS%2BsHy1d7rXdYZzXKKWW%2Bif171X1erD69V9z%2BsVVK3X3dUX6v2vT%2Bvfnr6BDFf2rblzS3y8T2upKJ1cV2vSer1a13J6LL3WKS%2F17ff%2BCamwSd9Yv0RyvVn6x36t3VrftYJN1q6STiYq%2F11V991ct3LXrFN6vEYT356sx0rLxj69HhpLku7%2BWS%2B6l7r0Z4wv9%2BEiPlyPD75fKXdkr7r33KwvN1MIDuIuvWKV783l8tNkInt7OVfw6m4h%2FVivLzqJbWK%2FIRvMV%2FOdgfW%2F%2Fonyb1qubxuX1yq4i%2B%2B5PLo3rzXv%2Bryej9folfr94rdrFLa9XqmPwzdFdTkI01%2Fk9au%2B79EZ%2BhbH4bod6Q%2BmWix7ktYJfRk74uiy1qvp36vUtPyVYmvJ7%2F5smX2uXZ7I0ROP%2Fz1JQ6igX7ov6%2FVrg4fcogKfuvRPEvgh3S7ivpFn%2FV7usTVv1cCvBHkOU5a%2FPVNEPPX%2F4J73u94P1Z%2BeqESD%2F%2FNzUVetS3ev5RRbkI2%2Fffko%2Fr9FYp%2BqvJDx1X%2BvV6sfvJe7k9TJ%2BuOrd39%2Fq%2FdF%2F%2FZEkt%2BG9J6%2BXE6XwR8uIJyvDlaRBAfFZd%2BS6vus2nvosv1apC167XvJk9aq%2F0R5PWv1qT16oAAACw0GaCYJqBX%2BhMbV8Xc3q%2F6vJc11yV6p0TQm%2FXu4%3D&media_id=1254206535166763008&segment_index=5" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:57 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:57 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_tSNJ2BX9jZT8jZQB84ROfA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:57 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111730493788; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:57 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "2845491e1c0bad46dde60b8f2ad21e38", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19947", - "x-rate-limit-reset": "1587864356", - "x-response-time": "38", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00df20bd0058afe5", - "x-tsa-request-body-time": "103", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"9zgT%2Bx3Lr2il7LK6kPQJLklIRAY%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=rn9ffrVXV63X9WRN%2Fq6rVyhS369JVQjrlu9W7K%2B785F%2BPf69aq6vtTJPfav1K5XrX69Xq92tSevRF%2FnqYYu%2FxHSt0TdrnVWsU3q8nrSrurRHaEP%2BjyltaiZ0VkVauS%2BrV6mT5v1Y%2FN0Rkvy7Tf6t%2BuUTasVxU9rcq8QveO8Ut9l82PyEYmKZFJeIv1lXq9jvFfLFcvzd479%2Bvfm3Ip17KMlL0la9%2BrD6wSYZ3Ldr0nq8nrFfq9DHcqd914J9JrSaTIn4IaCN9%2FzaZwwGF9SIoPwl4yJBm973w1SndWsu%2B%2FPUf%2F%2Fz32sXNRPrVXXlsE9D%2BDCY41kSx02wLvoBpDrg3debDLv7krf5SZvy%2Fotfhmyrf58Zt%2FhzJ%2BroBk39Xfq9wj%2BsUg79dq5L5CS5rycMWT7q%2F0d%2B%2B3JiNgaRbl3RMq4u4urifLh2JQsI%2FCFAKX0OYMCUEAmQ4P82Y%2FDcmFeX6%2F7%2Bu5vPX7A4dp79U9CurWu5L%2FVqzYjwmTl54d2XJDPYqwpPTp%2FnFs%2Bwo6%2B2H%2FlEUG6ZPXu16P1LqXdeiua6yEjhslt3V%2FlPVZi%2Fv7I7Xv9YvxBONGOJRE9%2BvpfBEWr%2Bm8RPiC7yr77qxW8dQWse7feItsrjFvPZsTgb78mecYP935bCNP3491fKuVWsvEe5bJbd79WK8mwOMxfgjlNaxdm0Zr3fd33%2BCQqyqXuPlI85lP4JuWuRIz6qzea99lh87xu%2F6lB%2BidV99xHoXcmsQYo1j1NvvwRlu934IY9p%2BLtEqrJz0q78JeR8cHn5PP%2FegE6mv9Hufq52hGpLivRdV64d9%2FrK%2FZMnnuIv9H6x2KMiSX3RPX%2Fr0Sqv9XG68hYe1r7r11frl%2BtS%2BjMV61Lk16LUlrWTx%2F6tFa%2FXL6Vr9R2kuS%2B6v9Ea4AEiFJgoVgoJkopQoJgoFQoEhCR4q7y850Mkpl2UhUxWkhOAW%2FUHxTWug%2BEPX%2FF%2BI1aqg23V8Dgx%2FVNX%2Fxey9dpppt9crWSfLSMpf7fjGqPgv3kdB8P2jUtvyYLCfvRxQam%2Bd%2BTV5os%2FB9sLVfCAOwrgdvbmksh7k%2FNnHajt1mndK%2FY9%2FCarI8XDf8pf9gvXx3caVLbwsL3VrXtpvvosRPHg%2F7gO38i6NN%2BZ%2F3Ywn2r%2BMO2D5v6lMQcQ6lgNsswPUrxBhW21PmjhSrqR%2FxPOuhzbY0Qj7IcAcAEiFJBKFAmFQmFBMdAsJDGFDMJAiEgiEgiJfvJfPWbqVV1KrUyF0qZSSIcDk3RfS3j%2FC7fz35vwH6qz%2FlLdS0hdj2VavhNqlS3NNUcD%2FT8Pv5XlC%2FI7OxQTrezsOfFPugZt1bmcnGroFV7dXkVtRCsfH%2F5h838PA4OENV6J6%2FzRIZFdW3%2B6PYUmvpB%2FHYBj8Y%2BVc0vOoITgyXbf%2BsOT%2Fmv7wmzxeqGpIaYw1vLfYkJYy0FLpmFwPERD2kcBA2L1KVjPjXJd1KuwJVv7zeD2eogRCkgSo7hTvmn8tIOAARwUkCoUIoWCgWCgWFA2IgVCg2CgSCgVCgmCgSGYRG7rLxMmRuwuVUlUlTF2q6mhpfwbbpL9L%2BPfF9%2F7Z9W9fXo4ViXc5Ha4CxDFqW%2B%2Bp9uNndjd6gZEnZflLrvnNA5YFLb%2BR2878obV3XR98N%2Ft9xxSuZRjRAmvWY95IHnCOuwQ565sVb%2BGFbaU%2Bk%2Fnm0YbvEOPYfVXXSzKSpPHp7jnvfhfu8%2FIFRUd%2FoPhfbQYQ4leti%2FUVf2rCC0L%2Be9B1oy21JgVesiXWH7FoN51ZKew4tPXepVCW5sGvB4PCDgBKFSIKhQjCQLBQLBQMBYSBYSDUKCUKHUQlMLjvXO7mJU5laVcKqVMlKmpS5ofrk4PbOS8ZPnvfk6eXmnQaxLbJ8peleuPKC893Z9TPfuyu25qV0B2CP85PgqL4t1HXiqGHNSO%2Fi0SC3gbo6Ult8Ya8Oe1L7perAi9M5mxPT7iSBBy2fsQvnJbkO92MwaGNGn%2FIIPf7wYA%2B2uQ%2FZfOer%2F2uHb24IYAuMeOg%2B%2Bba7%2BvlLXTRTfj%2BiGd0sN0hKneqm505UVpC0nROxP1zqnf6CF9vnE4g4ABHJn9jEaOSJlvJdMTXQKYdx126n78bVmvmZPSQdvS8L0JUNCml%2Bs6b5hBdXnpIymlVdtPiBK7cVKGYWylGEgTcJuMYZ0EwuCDvozpd5CcZ5Sd0aUIkklbtqYfjhhwznmfxyqlcZGtWax3YLZak2R6sJnYpYmYUs6Lbr%2F3ggUFhEzAkAfLvn11yzdmfAJlSWLcpqIOTAlgKWxZpisnqbGtELwXPLCe6q%2FA7vb24XbearVtzKTgHIxxYY6k7R4XA0FPVaOvgei2cpMv3L81KpuWtKDFzv7IaC69GQXwHL9wYjYwkBvsRuBgxHABHNSUJBUKEULBULGQLBQahYKFYKCgLCUIme9OM13JzN5xzo1RkKlErSI4D4%2Fl2%2BPyzaeJepzq4h3FcIjuaX13454aSo4lTS%2Fd937Ws%2BJpT%2BHt%2BBUPus5yt%2FhmvXxdCw0ITz2wDfpvtuxyowIb%2FT4h3Afkurm%2BZJdLKb4Qz3feNLap6IEASiUDM8O7TLw26Ud8dLx%2F%2BmgvK%2FbufRE0WJySXCRMNGbC5YDZtAHLcTBeAy400btWbUgxNqG0VEAxH1%2BqLmSIKwtaFKN2TbvuRjemdCNhsiauJTspJLdcHAEkFIgoZQoFhIGAsZEMFCKFguEgiVlXKzmtUzNVdOt0EZFGpUTgbNg4fX3hcBr75vxccuVQTdfturgLW%2F%2Fk7PC7oTL9JE4o2d3WAgxUnoq7Dd6Fbj%2Fufs0YV6d3%2Ft3UjdHG%2FJQPw17Q4LvUSLQd8%2FdhL2%2B%2F%2FKJQQkQk4naWvLf%2Fqyhk3TNZ%2B5%2FVlFOC5kunMM6ANZv%2BY9biWqOm5L4PBx9qZnqceeV4vqpsEB8kgEMCYV5taRIHHgHvQYlFCydFKSgj2spHyIUxo41kS2TVcHAAAAIqQZoKAooFfdehLAvSvJ6vXrU1r1evX6uV65TbE%2FMrH6ufEV0vTerp%2FWu5fV3d2rV69iu4FGtVg7%2FWLvHLOl%2BvS%2BvpBy%2BrwSFG2d%2FX7JyYS69WumocT6uJXr9ZdE9X6%2Bq6u7jxX7VLjf5qnvirg45fXu16vXX693FXL69JD8l9r1evT%2Bvaojn9ZjvuvV%2F1qJ354mi79Wv1YxXL6LFXghMtu5FUTdz%2BtRVrqXyTkjU1f6sriJe4%2B5PXC7r3zW79aiN7558J%2FdFqvXq9cq8ENxucwDqvRJfspd69cvzZUSNyVXXq%2F6y%2FRHm57nnJ8hT9xFz%2BvT81%2FVKtRHrFCLyN%2Fy7Op5ll9Wn85V0y75PDWVjUeQf9XT3Vkev61a%2Bwnmg1rQ79crvuvV6%2F575MVyej6%2FRJU%2FWvXVXXq9%2BCTjqDdN5NbLcnrqSlV4n1vN6wTXT61ym89fDKWFBa7JZ6v1r3Wu%2F1iqCH9aiPPWW7X7WCXyx8IN9OvLbtsi7hk5VF6%2Fj%2BVfz%2FAwxQ3OJf9Gc%2FXpPXKSr6%2FRXr1q7JVd3%2BCS79TWev4ZT2v56p4YTsP%2BrNX99okvz36GX%2BrRYTsvRvslM4wf5jD78%2BvRcL9Gguzi2l3T%2Ff5BGaFrrR3odtd3e3L7yV359fkq8NX%2BCQ0cnfKrn8sl%2F6I1%2Bz7vfvJdwzfo7RXmMtf1wr1Yq69HbtE1W4Ip8OY%2Ffo2pfVz4lCasVitWuu8d6v179XBrjfXLy1eSAAAAMSQZoKgqoFd3XoW5Xr3cl%2FEdE%2Fq0nrXf6xX6u7q%2F1avVz3Vz9T1erndesXevif1Z%2BtfrUnrFXE3avXrFfq78N81EM9x0fFUTP7V13V1xN%2Bvd99LVqx7r1euFeuVevRPrlfq4VEzev3BLfrVeuX61%2BvRvrHTeSwiU%2FrDK5Vyea1y%2FXom%2B1b9X7Xojln6XomiV7qV7tWV61VMsX6xVRNBLqn%2FfSsfoj1d3fEy4Z%2BlJzS5P6K0nq3Vd2O5BN%2BvVd%2BCaxR9M%2FJRHjP1Z%2BsFUt%2Bu0%2Fq6b0Rp%2FXoiwR92nCy%2F1aM9Wk9cpBHfmLpFor%2FVqtcu3K08t%2B95bJ65Xst0quk4qf167%2FWqv8STj9Bkbd93L6LKX1ir1b9eu69EqL9ly%2F8EnIYj0dqvV1%2BbMvLF3%2BiOO%2F5NVl9Ypuaa1eI8h44Djv5iI1Mx%2FNQ5WK8lOkqGrLQGb1l%2F9b8uQxsf1Yk9Yr4u%2FV5PWp%2FBDTpoE78vL%2F0R68sxi%2BXwnRs3pzKf0Jf8Saily999kjJs%2F82wY2ZuBAXzRhPb41ZPRTSp%2BJjoAA7yCYJh9Fgo08PScMrw3yQRLhxPJ%2Fl%2BGd8u8v%2BtfiCZWL3rei%2Bv2CrdNKXDweEAgopxmxBwrwmVuhpoch%2F8tgjIZBL4k1uZgrLhCgOH8NHQWaK%2BHdhz2iVHWpE%2FR2S3%2BcjPvGyHk8mPGnr112KjBto9Ew3f9y87evCRCR9aXzFoCnY%2BQg0mPkL9foSmW5r%2FWUnrlEeiP%2Brn61Xgj5ZMosv7%2Brn4I8n%2B%2FMQn69CX77rwR8eKpSZVXsxuw1ovr6%2FmzZq9X1aO1bq1YRdern69J4IzVrqWznyjIvqCrYL1ff6EOPgiEx0FXpvwUSw%2B6Hl%2BrfkNYpaL0UoJb%2FFF2iKnyoPzTMe2%2B%2FVq1WpLWUR6J1%2Bia%2FMW3b2EicbHRJ%2F%2BSOkSrr3z0q%2B%2FwXct2d7WX%2Fb61J03%2B8zH9F67Vq4n9FPelz16uCejd%2Brh26Tf8295fv8ExT%2Fulxd%2Fq36xSevT%2BhHd1aEt8VV9r3d2vd169frFJ6KYEVdejPv1RqqAAACIkGaCwLKBXKjr5unnv4v%2F5P0JftW%2F7%2FUwP%2B%2F%2F%2Fv6%2B%2Fk7Vzv%2F5f1qr77Vy6axS9yCl6Ze75m%2BZW%2F6b5lc6ZWX69YSWu%2F369Ypbvvvp1aQV9KtWO%2BY%2FWq9FmKd56%2FSNT2QlqQb%2BsF8ZLtLf9WSWr1dE%2B%2F%2F4jpfCeSnr11Jfl36JL3p30K79HYEHbnSvWL9XiLr1r9XjZ1ahSuIu7q1i%2BI6bTx98XIEvL0%2FN7mYS3L32su5fV0nq365fqxNc3r3fd%2BvfmI2n%2FVu%2B5P%2BRFeuMifWL9fdES%2BpUr0Ryrk9Zd361WGM3y3OIXuvXquS%2FyFLCwPua5pl7u5vXqGZby7WqtXPwRdX6%2FU9L6JVWit2CK9%2B1%2BiSnmWqoq5vR8K88xfOMI2h8l%2FnIsptqfJ61%2BveWuVYQ10vQj56s6lRf9kfdXfosVeTqOBYd1696r3KvRIriPVleQnGgXxFzwvN6L36%2B%2FXv16T11J4IsZHb5d%2FrF%2BiQforfqx2jsF6NF3frqb1lP69N6nTu%2FWCrdtcnr0tzWfFG%2FTv%2F1y%2FRS1ejd%2BvRNyeuEt9z%2Bi%2Bk9er0SKW6j79HetV7wj7iPJvTEesYk92Bk33L4I%2FL3qNIatfo7%2FrVyyXXkJPd14IpRBtWTetS2TmGKZPV03reqLV7n7RXrJWCgl3DX9X%2BvXaIw3%2BScQFKzdrBk%2BK%2Fq9mGslxHrWOZU3d8KStXq8RQur%2Fq%2F6y7kuvUzfrBEbrFJAAAAntBmguC6gV%2FSExfHq5%2BrDwp%2FII0i3%2Bvd1f61%2BrVdesUnq9%2BqYq0Xu%2B5B0mb9Xd36sv1qKv8u0t%2BrSivtWY7du1Yr1iu6Hfq9Yprr1fT81yWrHnqz9W91sT%2Br%2FrXasTetX612r16ululbct%2B61d1RfavXq8vqZ8R65frl%2Bt5PWV2tfrXhqtVtS9LXfa1%2BsXKqUdrXfauVcnrFNuspPLVUB16ue6udySqy%2Bftaqfvvg%2F%2FV%2BnXrvELKKJq6fxKLB3NaJFV9rLvxVeviOmXsd2P1rp6vFcghb9a7V69Zfgh8tY4%2BaWnSX179WLn%2FV69X8J%2B%2FiLtakuIFLXq1%2BWui%2Br15Lo9XJ5OZt%2BuH61WsvJivL%2FJ69XrKS1yonn%2F361L65fidgY%2FOb%2F97fLInN%2F1YL1ftYv1bv9cq9f1Cn2reXL69NYSvpXYbfwRd22BPfHwgTEevfnqzW%2Fv1fgh%2Fkn7v1btWiPPXyjBQCbbErJ1wnFLXNdyer3a9Fecike9Lyeisk92pjH8EVVvKvPU8L%2FJi6tLderER69d369Xmlz7ibXu7%2B8ft%2FxXvR1%2BWwKel%2BrEtxF18vq%2Fqu0tkulcvhve6sCD6L4f%2FwzbjIHXl%2BcEAYyCCf1a%2FJR5qfUpS%2Btfl81CXPa651aW2Xd161L5DS%2FJaO6t0SCW1i%2FRXteWP1blOJ70v0aUnghO2TP8t1692vX77ub1l2K5fOk0XwzY9Vxo%2F7caIOxd2%2B2%2F4Yk%2FnYoaxrD%2F7rwW5DGh5aenub2Td1clo8VXUtesXd3J4IjVQ%2Fdnr460dPL9%2Fyeiv%2Br%2FrLuvQiU0tsFfFRae5fPqf3%2B01FK53k8v4n9cJifv%2F3EWie%2FVrgEeVJQoMgoJhIGAoFjohQoNgqMgiV3uS98eKk2NY1l5apVXWRcXU0ObU25bH7640m%2FPhRyhelWDof9Fll8LtmdPu%2Fy2qWZPomphVrZJ%2FpEiDrKTsNI7D9yuAAS1ZxrX3bpoqB8f9ty66udI8o%2Bmo%2FL3a0QsT1Jblf%2BX5o66ZtUJrQqOFXuvwK5in4eDL7thUtn%2BxcDZl7EIStQraqTV%2BIWcLrgrTbu4eUXHf0dXWZ%2BzhtfMV0Qs2gp9fQqKycLWffut3Iwn7p57Pze6cbFMEi8YWlzncHABGpn%2BG3CEy2iKS9AlE2%2BmLAUhZpgHIBrk1zqbF3g%2FRDwnBYJL1LJgRcdZ51SzqLWvl1lwE883Zq8PtTb2R359OHKGfpX3Scj6Y4a96nWVk27grYTl65CBgxhcZiwXn2sHkyoaaqpwJGoQ4ofjqGdMWhyzpx7JUg7q7xksg8mO%2Buuq%2FBXCc711V2jdYRhjSxCjH2jTwRUZdvEqcwy2AKTvKg30S3JlbSvRB80gGgrCmY6CEBDUkO4ASuiVVXBBXhYCPbRWJhlnEuOlEnwaDLA9Lnh10RZ79E1N2Y4xyR7H3TrqnzNTlRM44AEsmf5NGCySKRJli%2BJVVNcDHXcSu2x8e9tnujsllPjbnDKvGNXCciPQkmIQ255fgN9rAQR2SbN%2FTpABVdkhzsFmrXhN%2FsxGMBOxhqB2XEz%2FTs%2BiiwQREz5x3wOZ1MxXpxe8hPjtPt4XiIf7YszSzN3sVFLTNO0iU2sDTxrWs0ImCSHfMckwP52HdcEaNGxurhmMraYhFTmy0jbs2I6VsIgVuEkPVxy55RpwKiN2uF59QICg3Q5tD2NCwyDgASjUiGoSCgWEgVCwYCwkCwkCwlCRRCoRCYRGYhMqbqd%2BvM3hMu6nmZKL2ZIkup0O%2Fhn5PTktfy%2F0t3dxU%2Fm148Gy219%2FX5uuJv0WnX7Vy0Tzje2LUsOEn%2FWNjXg%2Fa2cPUVt1rKL9suDIozVINE0KERxSozDKk%2BxRaK%2B7Tt5ttv8wZqR0J1rC0sWxFlswFMF7Hvoe0SPN9yv1EKSFZ1T3BW5yEE7VCwsj9wHAASYUlCQUCoUCQYEwSCwkCxEDAiEoiEIiCoRCQVCYRMYXetd7evqeKyay5zflFVKMXS5S%2Bg5%2Bm5OHjaTcnlv9B0VvoZ6Nxfy%2FGpLvCPKkSNInZunarHrNFuTM1oarMOUEkzp3Oo7d%2FDCViGSeNS5YMUvkdaDls3OkkebHoOlxWtQdg3cCbi6pDPM3UFzSyKcQ4hmuPEUo%2BjcNkpXtof13KxVQVXupZlh2bgvvV6h2RgDN3AcBJhSIahIKhgRhQLDQLDQLCQJBMJBQJCERBEJBMIob6765n7ffu62LvLnGBRS8kvemh5%2F3K693I14%2FHX%2FxefHyqjRQm3L8qXx%2F4r3TXvRz43J1DH%2BBCVtR%2BRff%2BTA530TaZ43r8PLSzS6zH8vAiuvy%2B2LiYYRKGDOr5d%2F1ku2pvbg9qZJQuVLrRR%2FjJ%2FhbS1Gj9h3YsstZdebxf%2B5lfCv75lkqUSsYFUrp0SUXomgjZCQzyqDgASBUjCgVCg4EgmE4WGgWFATCQUCQlCYSCYRCYUCITCITCJWzc37%2BcTL3opq5klUy6upKWsf4O4dvp8n5%2Bns%2BrB%2BofwF7KmGE1x8XmHy7x3dUkNvNJefHTsWIdSr1aO2himEvyLxzdSW%2FGsv4w1YSNXUVmgl1DJ3USvD9jT%2FPuszMRCEd8%2BwtJGf%2F%2BUfGcfUQNLDD2TruVLuFXF1LaXRNQ96TyU0SgLrZbO5b3RQUAvg1v2kUkMsF1f2lcHAAAAHoQZoMAwoFfaFt3dq18va5f36vVyerHcl30vj7Xv1SL6sVBDxas%2FVu17L%2F%2FVq%2FasSf1fq9%2BuV%2Bt%2Fzc2Nr1evV1eu9Dux2tS4b%2Fr363rBHV%2B7vGcqfrV%2BvV6y%2FVyS%2F1ck9cJh27drKrWt%2BCqryF%2F%2Fq%2B%2B5rkVN0Tz%2Fjon1d9KzopXqiOG5JLtWq5bk9WrmXCr5%2B5Lkn77Vi%2F6lYq%2B1Yq%2F1ir167r11Vr0136JF%2BrVfd4vV91j8RVP65TK%2Brn9cq0v1vL6uS%2BvT3d%2FrldrrvL%2F7hOq%2BXxdxwrq5PZXay%2Bid%2Brl0Rc92teTLcV5OSslyX%2BivPfa1J9esqutV6cv3%2B7HTY172EQfWkResEnsg00fU8Ta9f3fc%2FvnXl9cJHfXrlfqxFVxvuNHD68RbQZAgDQk2pLd14ajQ%2BDF1tplW%2Fd3NPLhWtQ7ffa158nq99IsUvq5Pa1frL9EyrxWgmRD4aRfz78szFjq%2F1i%2FR%2F%2FaJc5Vrj1qS%2F1e%2FRcb9Xm9GlP6sS3%2BvXd%2B%2BjHWT9Hl2Xuq9Xl17VyX0aV%2Bixd1f55G%2BVNZEjuS6uT1b9Wv1a7hH1qN9er1fFP%2Br169XrlXorfrF2sFF%2F%2FkuTz1KKCw%2FyWtd8%2Fask9CuiNULZXS1XqYUvrF3VyetWT7%2F%2F0Z54IKSAAAAHmQZoMgyoFdehLnUqYPOuUtyXVyWvRFr3atXq12i13YhetErJ8f%2FS1yzXQ5b161J6sq1er%2FVv1a7VyrXuiVixz3JbqpWlGK%2FdV%2BvV5yt870cpol%2FojBevfr1Dv36tjv1erXatE8R%2BsUnr1br0%2Fq4fr7vx1Wq1LSX3J6urVeiLiLk6Xtvr1erF3ad176Xqte9V7f%2F6sfrHLohYu16xy6x379WuYiribWdJ69Vr19K3atEXJ63r0XUvolVquVX%2Buov1iv1IlitsX59c5IZ7161drqX1qL9XknrzWpGBiGP5NJ7u%2BJmhGT1r9el9Y36xRvrF3XrlXrF%2BryevfNfqkWWS%2FWb1l%2Bbdf1ZfkzL%2F1evVxv8JUtKlSIKUVluUv%2FWr9xnrB3EeW1WfH%2F19fEdq0bd%2BvX6JLvuYv%2F83N2i12rl%2BvRhf4v69dX6J3aLKvWKT1lJ6tL0vVct%2FrhXrhL65frBEWImS272P80h9BMfffL7r3TSXJavP63%2FPUxWb%2FfrUTZN0q9cae69Xv0VpLXpvRGVdeimF2iVLdeiV3N5xNQ5NX%2F7Wu1erov%2F83rK%2FKIWtej6v1qKtkZapes91dXV1132j9fqw%2BiMCetSesV3%2BsozVFbuqvwR9Vq%2Bl79XHTq4l3HRFrf8EWX73AAAAB8UGaDQNKBX%2BhLH6pE%2FV79enuO9ektF7T%2F6vU6JKvWCX18r179eu%2Fdfdy2rP1a7Xq9WKvFLXq%2BKX9WdrFJ692pbHKm36nSvXviZvRWJbu%2F0Tqy%2B17wh%2FXpLV%2F16Spcrvv9cpatfEyl9%2FftX%2FXquSerXr9e6JV7tXC9axSxfrUlyVdH9Ciud%2B0rJalc7mtYpPWrFLEXFbVerdq3d3ehC1FTrVXfrCKua1gkHdz9a%2BIkvtbEtxfr36wX692rgtydLqtVim6WPd9rlS3z18xsaaP9Wl8lJTy16132aSlb6WV%2BvVxEt%2FrUl936sV6JlJ6LlJasC33fr6TP9qT1yiLmvL%2F3rXf6sPuVI%2BfH5PV1%2BsXcXaLLubykyDBV%2BsMEz%2FHfPrdXm9XV61N67B%2BidJ7Kre%2FRe7Ru7vy9NL4I%2BPvr%2BCbVzr0t%2Fo%2BUnojTetVZ6%2BW2vclqZu5bv16a5C%2Fv6um9YJb7r1qru7t29fgjLzYxEeiSx0sqV6I36tXojklxPr01orn4ISxoFLwS%2BiPXorV67VcX73tr1d333JYI%2FNXN%2Bev2j6%2BW%2B%2FwRQ0hOP6l93v%2Bvd36uXoT4rdrV%2BYQS%2Brn9HwiN57sVuuT1RdfrLFLXrLtZVf6NURd3ZfJ%2FWp%2FWsU7odLq7V8V1ffftRG3EbrX61Xr79WuAAAB50GaDYNqBX3XoTl%2BsV8y93iOa4v16vXpLVhnqiqGfqJ5f9388%2FEV66lub1TNXFWrV6x69WO1lXL%2BsXxMV61UuOW%2FUux9K8tq%2Ffd8T3dE1desruIuhS16vQrFb9aq5JVZ3Pzfq9etRPs1UkiCuf0d7tar1qslcqFf65d3zfN%2BryerH6xd%2FSvXEfrURcb65V6uH69%2BsHfn%2FklZtsf1Too7lqtZdrr3WpKq9erVWq4hf%2BX%2Bsv1KD9cv3bbXX5eNNGrk4jtZpvVqi5xyyqq6EL2td1693Nf5aJgKu7te7UqTSq54%2F71fqsq9Wv1ijbU6d369frL9e%2FV71Xu16W577nuvJjQSdfyW0s86xX692vV691L0Zfd%2BrE3rhfq0vrXa5fr361drFVzesprr1lV14IdaWv3rJBevfqwNff6vLf5rJd3Nf7KluW68L82UDh%2BIM19CLsqH5yKnLT7vu8Rv69XJbV5r%2FWKX3pkJWX0SCS6J5f8v16tGeup%2FWp%2FRWMn5%2FkLl8t99q1WrVa9EecQsfiWvyecq%2FjiDdgk5c9V1ffdeSGF%2FD9e5day35terXLLaLrtWku09gk42v5Xq5Vr0b6I04pFEP31aVu7u5%2FXH%2B5P%2B663%2Bvfr3y%2Fr36IdJNZhSz51k9v%2BJubLq54ABKpn%2BTCZImKoyJE4iszrgR4l4mepvoMvEPmnzWHhkk5727Poo1sxGPNR1gbQKBCZ9IjJNmv8I%2BpC3dhrt2TWjcvsb0UZoVAA8oT1aEqnIu8Hg1De%2BpvmeF7ESx4G46hMeLx1uK8isCYG8uahka9zFUaA%3D&media_id=1254206535166763008&segment_index=6" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:57 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:57 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_ldBTpjgQQFLXxpCDfCzkMg==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:57 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111774319906; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:57 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "48ed625ed57b85182e807dbea12e4adf", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19946", - "x-rate-limit-reset": "1587864356", - "x-response-time": "32", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00f5e18a003a9e26", - "x-tsa-request-body-time": "64", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"UKX0%2Bt4s7ucajEBXS0etQVngOuQ%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=gNiS0WVb9IgxoDmQGpCuuonUVCmrM6%2Bi0TjX8OFuc%2FzjqVrE4ViqmQRASRDy%2Fj9Ebj%2Fzx5eHdHKfh2ku1TFdwvrX24MrS4W37ae6pcs2%2BIuNBW4mfKBkG2J0wnABINSQJBQJCQLBgLBQLEgKDYKhQShQJFEJhEJhIInfPGq7v9vxjNzOsu%2BfJlXKG%2BM1SJ5HibvG%2BWvWXXzwZv27ugL%2BkWKo4Hdt8Lkk7bHviBooD8TiWPYgBNSDa%2FZ9Eobbi1yABovHleqmQTZNQ9W%2Bc%2FcMCFR9hlzKJL6gczffP7VH9Dj5YlLl2zaPH%2F%2BW7Fnf9okJe92FMwXU9eO%2BGVC%2F8CkedJij8bgzEJzI3zhUsrZ04gcBJhSQRBQbBgKEYKBcLBUKCYKEIRhIShQShFDK1WT8%2B1VWGiri6zUyl5dXUq66HIuo6%2FG3PidPuwZ%2FGuO606rUXjDnPp%2FU9T%2Bv6qgbhp75%2BTetlwA631X9VCpBRq7fJ4xmHnlmPl%2FYpoX7JH%2BwyR9Bg1Pm6nhelJHeVWz9qrnWYOHDuK01B3FORcv6jinqW%2BJTLwLorWz3ToC8H3lnV5FcIy1IKfugX4U3JxlIrgCcoiGpS3UDgAEsFJREFQkJQuGAqFBMKAoNguFCEFQiMgmEgqEwidxz1vnfj9e6vmV141rnrIzjLyVlolScB3dDU47uT0v7dfee3%2FNsCLhFDZ6qq%2BaaUpz%2FFfumiA5B0nXKxxR6O2090D%2BSjbGeG%2Fp0Js%2FezludSN1jNmoEOClpWl1ttjjJw48COPLOIWm7gmDj2k9bw%2ByoUJ6zDlR8lCzmB7j28iKa2WVEk5KYB3StBFE5kyl0ZUJrNAOAASgUlCgiCoSCwYCgmCgWGoUG4VCYSCoUCIiCYRCoTCoTCJ05vPbx%2BfvVZVWq6cZFWlTBcpGg7t43rg6eF%2FNPzvleqSfSO5Gbyo62T8LvphXx43%2BhG%2FCulPSeT%2BL9Rsxo6znV29P%2F39dxc9jrXZXYy1PW9WOFuy7WY%2BmKBJMC6CinovNUvfqhhiknAJvZz1cE6w98rJ16LTRiiE2gt7MvaV7IOC8c9zsw5A2E52lG%2FALky6%2BioOABJhSUKBIKCULBgLBQKhQLBQrBQKhQJCQJhIZhUJiEJhExlSp%2BnXW8Iuqrjd3kuqlKvW4uug4%2BRn416XEmtP%2FZcePS9uuTaIZPXGuf%2FTxvN6CJvcfZ5%2Fwg6gVaf%2Bdpoz9UFwSh3a5AXGZHyE3Xlch5tl3XlIOdGHKXWBNUlx1e0pmLD9IJ%2BUq1u1DIJYMJH9P9icmvyenmbVpSuWzZf590rHBK2mipVMTUnq3t4QWWnKKxLhNy2AcBIhSQKhQJBQKhYMCQbBQShQShgKhQhBEJBUJBUIhMIhUIlMLlVXX5%2FHn7TKmtw131laUKSwnkcFxbt7dV2C5Q%2F76Vtxfatm8fWhP9L9R%2FYv%2B%2BXfhhN%2BF9D49W1XP7TRCUsAvsg4tV6IMPwtt8XAAQe0l7sF%2BjvYTr%2BYv9Moy2CWcoR9bqEuKV2ejiEtYXiFN0J5MmPn9zNqcG8rlfb8UoeIup5OCwi6iNkYpUKr1ora1zs3yIa7wIEinUQt7EHAAAAfZBmg4DigV1aE13XFVTYj%2BJrkv1rtXiPV7v9ar1r9X%2FVhut1YU6or1aJqb17tXV0sX61Ypf1ftXRHqx8RXq6r%2BKV69WL9coi%2B5fWpfVh9cJPVyh37n7W%2FeKW7v1YCOa%2FWokn17%2F6sDevd1d%2BrRd9%2Fqx3Ls02I1Rterr2v1qIuvXpZ69ZV6zFLub9e7kuT1OnuvXxCs%2FV7HL9Xr3y%2Fr0ornu%2FU4JvU6q9Zdq36tJ65XcnrlN6t9q4%2Buq9481%2Fy%2BaS8TnlyBAFHr1w%2FXq9anqv1lXrckuhRNcvf61%2Ba21%2FXC%2FV5fXpOIk9a%2BWrkv9T1X2rv1i7jrr1Kl7rFVq%2FDd33FeuVXXlo2drd%2BrTWTmnEevd9qz4nbxva5V6vF%2Bsvz19561f6kuzaqbk81KzSEUQrdrXOrO%2B%2B1i%2FU6RF36JUlxUzT2sVaotT%2BtTetV7z%2FXoRUnoWw%2BC3jRlDsI01bblXkqypCp5PNUs%2FaIyvRY6W5PJYI4rT%2BW1t%2FLfZEuf1qX1ik4iX0aCS79e%2FBIUhizRM9SeiV%2BhbJfBCbVamsupc16K9er%2Bl1q1ar1bETeCMiovKO9ZS%2Biy7k9WP1fv1v1l2vdy3XrVXVokFWiRR3FYrrtCe9i6qnu%2FZNUjE91%2F756J6f9eiNFaxPoT1%2BsV%2BrDf6ylu%2BZe1%2F%2Bt5IAAAB40GaDoOqBXRPL%2FuqqJ7QnuVe%2Bu%2F%2Fv%2Fv5u%2F%2F%2F%2F%2F1rv%2F%2F9Yv%2Ftb%2Fq%2F%2Ff%2Bv0V%2B1d8ardrVeidfN2tdFfa1d4r%2Bauj63m3%2B0tIO%2FpYq2letpd39VrViuvVuta6%2B1rtFdJxEv1yV6Jl%2Bp0xSy2air3f90K%2B1TratLder%2Fq4Xr0hf%2FXELGeuv1bsEe1XCaqb1eKu%2FWUnS9P9CiZ7%2FVq9ffr1evfN3J61N6tJa5d%2FPVr1bXyX0tfSsrpXdr1jv8qVXk9Xr%2F1dXqwfrX64d%2Fr0v3a92uqte7i7Xr%2B7%2FWSgK%2BbmXrpP17yatcpL%2FVrvte5r2u1r9Wq5bv6i69em9e%2Ba%2FXq9WR3onVcsq95hCLrta7WpM9X%2BW%2FXv1yl9TFV%2FrqT1burn9ariO17i%2B%2F1er5e6ue%2B69F6W5PCdmqenMPL0bpRS%2BK8stxllvQ2E7r11J6yivr1y7Vv0XvSirQjCvR5X66lvL9fxOXfq09%2Fr0t5f3%2BvXK%2FWK7KTJk3oT3aI5%2BtV6w1XXrqf0Rpbv0Ut3E3XrlLtIvfS6k1ktam9Ejq9Yr9WI663RWC9XqWT1blp2ktSeevh5dB%2FurV35Mn5Pbv1ghH1axXy3PfS6k8hEj0sG%2FJvc9xfr3F0O7X6%2Bnvy6J%2Bf%2F6O1XVxWWrSQAAAAfhBmg8DygV9oS%2F6pV9e%2FXqtel9exnqrXqteq16vVv17v6Xrur7Xv1avXu179F8%2BK7q7tE9ivq6577VlXfgkotZZPu%2Fy5aaHL7uvXsV9q1T4okVxW79WK4mvU4UvEXzV6uVauPq1WrX692uY%2FXu%2B69W%2BJ%2Bl7269e7%2BWLtfVa1Nc1q0ndCup16%2FVwbiO1a7v1Y%2FVif1aba%2BKv18VVJghr1c33frXaxSX%2Brkvq1XWT9KyrUrfPfF93a5%2F1arsR3fau7XKS6vv9al2p%2FWu1sF61N61%2BrldK%2Fd2rD5tppr6IwL6lsVKQi%2FXpLWDuS79akvuvV%2FiVeTzUn9zery2t7ua1lJd%2BtV0ixRt17MSmid369%2Btfq9XLc3myw%2FouHf5CWmZjF3XnKqEPmrL%2Fd%2BfqdQ2QhcZ8kP%2Fq1XJOrEbdXXlJsnd%2Fr0t16veEMnq6MtZTXL613XvzUXrUTdX%2Bi9Xr1%2BvTX%2BiuPkEUk%2B4n3o3hD0WLu%2FKTkzaxdq53Fr7%2FJHadA6vm6hXi5Lv0V%2F1e7RsJLl8pZn%2F1ckv8lhPcty32YuqkvybbXN6IyX1wiPLpTUP6K3d%2BtS1rBdUnqzvv8EXkeyrNVNAk16J0I1K2OZfT2p79em9E6%2FRe7WFfq95MSK3fqYX6vl%2F11fXpL366r16JtSrH0UqfqVJuaT0bpIAAAAHZQZoPg%2BoFd32heVCPEf63%2FW9VX619Lfur%2FW9XV16183fR%2B7Bv76Ee%2F1rv9SdJ61V5Pqv%2B%2F1qvWsJLXs%2F81%2BtpfRG7u7v6R6yfP91gj9VVK6rsUvdF%2F%2Fu5BX%2BiQUTx%2FL069qw33c%2FL2vdq5Wqviu8CiEeuQUriP6et1eX0TVeiv%2B9pZZ75JLu5r7l9WO%2B5fe6T95KOV6ppvXCvWrlVyvWKrWL9e77r1r9dVuu9erkRT3X9q51S%2BrS2uXf6vcWuXcipuS72rwlXKuWW4m5bWq89aUeJP7%2FJurXz6kg%2F8v%2FvXhmckY17Bt1b9erpf7%2BOV1CuW1i%2FWKYR9164T%2BiRVfckWi19LKbNrDGS7ur%2FXL8EXDUKXTpXfrBXmx4EB0iWuX6xfrK%2FXKoRV%2F1rl%2Bf9ek5sVxFzXVxEjXat0R%2Bvrpv1q%2FXvdEaW%2B5bk9Fc%2FVyK3X3zL3uvX6vG3V9yXFd3uvUX%2F9aq6u7Vpbqw4dJuyuP3NIIfZfr%2Bb0IerRXl9cu79Yo316uWvXruMuXz%2BsMuyR8nq8nq5Noytfy%2Bi1XrOTXfojIv1qa5xXXrhXrKW1lJ6sRfozk%2Fo73JRFxN36KZ4zrXa5RoqRPL33V1f6K0noj%2FouKJwn%2BasfrF%2B5IAAAAHCQZoQBAoFf6FtdyX%2Brfrlfr3fRHa18tVfOr%2F%2FrX69%2Bvd9VRfa13wyvcqsdrX%2F67FepG%2FXu6vunvqyrXLtWk5V79avX5KpPpWq%2F176Xqw57od3dz32uVDuZsR3eO4pq9EYv1fvd9X%2BtSV1ctSKRK4pXmL%2FxH%2BtYxfS2vTeevxEYOX1ZXSxXxCxnUrTerv16%2FXK%2FXpbiYtXoUvP9q1T8TRPr%2FqBHm9Yui%2BkUyd%2FrXd33fq7u%2FXqte7Wpb%2FVixXXq3a1%2Br%2Fr7tXku%2Bf4n9WKtfH6JqJza5qq7k5JMmJ1u5fVwK67x36S%2BWTVW%2FVqur7k9F3q7uS1a7Xu1wlwnXpvV3d3Nc9161JPw%2F8mX%2F%2BEfJrMYm9E6b1yrHe1yl2pbi7q7uvOVT7Ka%2BI%2Bpu77l1Xouz1s3JTyX3EU8lzesolZObkFCv3H71d6ojy3RPP%2F7ryaCGxeZb7RWjpYn1b9Y0RcniZqfYIZTfgh3oqsv%2Bborv0Tv2RbV3XvmYZlj%2B0cqppalVyI9EOnderknsvJD6t%2BrfoQ1XEXWSjuXPRPX%2F%2FWDuW1dL6uRVz3LUvRnrU1%2B8LE%2BP%2BS8nl%2Fop6X1ysv%2F6M3PL65fq8kAAABqkGaEIQqBXfoSx%2BtX0rYjv1b9e6b9W%2Flur%2FV%2Bqrqrr7%2FWvLVzv%2F6X5P6ul9Xr7v9Yr9Xfgk0dWfgk1ZZe6v%2BvyqfHfu17tYqFderfqyamu1Y6pBy%2B7Xv1wu79WCuS1Y7V%2BiV67XCsKav9al5uua1aLvtX77uGqxT%2FrVX%2BtXavyxApf1qJ9Xq69cq%2FyVf9Xx3nfL%2BsV%2BrE%2FJdrXRH624IZLV6v3V4jiO%2B1YbxXL6xfr7uW69Fxkdcf6I12vsnz%2Bt2sU3qyeCSvaV6qq5rWq9W%2FUgJrv1f82zqItdd8T3JRN%2Bpkq%2B7uM9YpPWv1ivFZLXKPu%2FVy7r1lfqzusLe16p%2Fdaq1ik9X%2B1f1RHiPQmXc1%2FojE%2F3iK34zWVWrsc7shDzVvE%2Btfqx%2Brf1hHfr25%2Ba79X%2FVie4r1qW1eS5bJd9X%2B9pZr7iC%2F68QKXlXoj0XKIu7l9X7BJzbb9Gc%2FV1%2Bi6n9XiPWYibXpvRWO4r1btyz996FN%2Bjt2vS2sHcV6udwg%2F5ri%2FRIJl%2F%2BhMvfy79GaIxPyaL%2F8I161J6L0kURfq9euWXwp%2Fn9esVjvbXpIAAAAcRBmhEESgVycvy1eIiVXrG77q64tYv9fCXf9%2BtVauVOr1xPv9f5f%2F0Xv1i9tZSfXol5PVpLxS%2BhVr%2FtZZPnr5LVy%2FWu4j1ykuYUsnq5L6s7k5MVvHK%2Fctevq9YJuWS5BSxXq0t%2Fq52sXyfSu%2BWx3Knc3q1%2BtWI3JdaLL69V3%2F2vXff6sq1%2BHxdc369XEy%2Bvd9q36sV6J3693dovVyrl%2FXr1YNB2K69fgvq36133%2BrTerFesu5PWVetfrKvWr7qCFW%2FUtV%2Fqev16sI%2B1y6ah3OkR69fomUnoteq69lXqmv1ZXJ18QR6r6rmp%2F1miH63cTa1P6tNa%2BQl693JXVq3616HLFr%2BX1ZE3%2BeoZvp9r1d%2BiRVd3L8lF1xd%2BjtE3Xo3R%2F5Pb%2F6SvRfP11%2Buo%2Fy0nxXq52rF%2FJ66ibXu5bVzXVnO%2F5VUaJIu6FdXXJKK3foQ1X3J6xd5PvfuvRYoz16qaFfRMpPJslr0Xu%2B7u9UIykiq6X9C3kx%2BJ9XTXXq8Z6vNc3o1Sk8f%2BJ89fbPdhJes3mEKMrU4Ypf0Pbwjm9a%2FVpbk9TpJ69frFEetfq0trliu7rn11r03nr6tp%2FnKqO2eP%2Bq1iPRKkgAAAAbVBmhGEagV36EuX69XN%2BvdOsWT8%2F6Ed0I9FL3%2Ffav%2F%2F2re32vd9r30p79Zf9%2Fa19dfKiymGSL36s%2B%2B%2B5vWXzK67%2BbplcaZdx5Jb7XLtXq1ZJcuqtQpa6VyvXru%2FNd%2F6xV6tX9r1XJ6viuvVr9e%2FXq9WoQv6vYhXU69F9VyK1R%2Fclr3a9hLv%2FWcZ%2BiB3yiaf9W%2BI%2BapvurujlPV60oH9e7Xq5a9Zfq3dTfa%2Bu6teui%2F1wsct%2BqUv%2F6nBjlf363q%2B%2F1arrpYrv9YL9elvvq77WUk69eSvulu%2F1r9Yv1ab1MlevV5Z2Pv9Z1XfrVUivJWuV3VV%2BpQV69IIJm9EavR3%2FVy7%2FRul%2BedF6rr1eS4z347kTybSkv6Jq%2F%2FRZSy169fE0j4QubutEWr6Xu1f5pPVo%2Fyd2vl6v9eiPWXly2rO%2B5fWoi5%2FRHX6xX6K5XzUkRctqyrRUaod8Rcvrzd%2Fo0U19xlwn69JdevSXGU1Wjt33etXP6Iz9av1cFuMua5i%2F%2Bsl916y%2FWoz1yrzDLx1SXT4%2Bv0EYJL7%2FWpfMRndonq81%2Fq8Rdeit8I16xT0k3qYsv%2FXP0tXzdq8kAEoFJQoFQkFAkFgwFgkFgoFhINhIJgoIhIFQmRRCcKyfnz57ZWqKvjvVUky4SrqVOg7tic%2B3YuandD55cOkS0Kd0HC8S9usC0qn1p83%2FOQhSflRCWrXzj%2BjuL7nK%2BdhaKHtChbxzZLt8zLxjgfZ1rK6Hb7RjnqPLyuTm6o3UCfId3rP3YF3sVc3Jnb3fq4jf5jGddiaQuyg%2Bm6v2qFglWf5AkFWvamtKcKKymnyUIWhOAsnUzRqDgEkFJAqFAqEgqFAwFBsNAwFhIFQoFgqFhKNAmFRIFQiduKz2%2Fr9N1UVKjjmKl5Vrq6gljizl0PkzOnwtTg7blvEeWLRG1qdM2HoAeMfjzJg1c3C9iT9%2F1TEXwH719%2FkOarujqjrk5oSUq2vr9yETXwFraUJtgqU1VmKwb7OER7E4KtV8vO4Kb4c%2FVmb%2BQM9fPe37xTyeUbPf%2BtZZdYvWtCXb7FiyY6oo267XBgfy%2FHbZJYO6czPVbWqH4rz2qwXYInC8JmlDCURknj5WBwBIhSQihIKBgSCYaBcKBYKBUSBYKDMKnE7tdz39%2FqepVSStLqVuXkvL3xCVfA7fYOPbQ7uvmG%2Fm68nyNZ%2Fxjl3dU9vlGXu0U7B%2Bjre8vm%2FD%2B%2BmqJFp%2Fimvf3DEWeNfL%2FLyqkwETtyZXNo09Q4P0hfxov0%2BOtIlSedOb8Ygtw%2BUcea9nGnLjFu7tAvIe2MREV2sNDnz6OAXiRCg%2B2c3AA%2BPGvG%2Bn2kyErQmNisH6RpHWXmgtaX0mKo7dkwEV5p%2BRcHAASgUiCoSCoSCoUCwlCw4CwVCwZCgVE4UCoUCoTEojConCJ3Gbm5%2BnU5yEV%2BO9c5pJuXvjvzSovgdjpyc3g5%2FsJNWmV1Dyxt3Yc6c5vRUjhzFVXPor%2Ftgte%2Bn451xORKr5Hz5gHoatdvpQPAceDUql5pwt%2FLVKtPnrJzRIZLQfVjzGz3%2FKUVLh5iYXqAJj7lB3R%2Fm40ASpofee8G5K5%2BNaV24XFyAEJwuN%2BqacLJCEaEioYE53hIHVMHAASgUiCoSKwkGwkCoWDISCYUGQlCYlCYhCYRQZkp83rdMkZ%2BOeO6J14cZfPASaHZ1t%2Fl47dNm7g%2FKOc8i4j9RluLdJq7V%2Fotfj61A%2FV4fk8wxd3Zl%2F6qggvpAvkGFt22z4t%2BtZj%2BRt0Wyfrzo2wB34a%2BFK%2Fkr4ezYlPcOuDY4vM2rOE%2FWf4qkwftl2Dae5v8X6EKlFV7VKRvAFAjUQyEoXmILa4gTuDgBKBSQRBQJBQKhYShQShQLBUNBkJBQJBUKCUhhELhEKhFDv9%2FW63838d0V1vf0vnczqd3rczUUk6HFery9n0cVfKnRtJ0If7U%2F%2F3T5%2BX%2BT7bgmpI98EDa7nf5Py8QOnTzevljQfttvwAj2W%2Fkrhy97mK9cHVlpp4Q6ABT3EKsYVOe9Tux2o70PSYjFF0CsTfoePtIagZ%2FnYOY89u%2B2UkUhtjTeG7ECpHgthJpC6E0VXNUHmAcBJBSUJBQJBUJCYShYKBYMBYKhkSiIKiQRiUQhQJiFDvXOt79Xx3RevXHV%2BfmleXd3uSVV1dewd%2Bzweji3Z7%2BPUjyHLjR9z7xFv6pWiNBvfA7%2BPSXX3n9G7ybkK7efhoOibyy9zK7c2l11x4RaM8DlH2u%2FXN%2FVWSTXJffhZlWbpbHGoVIVJ8C9OiV3eq%2F6D7rzAuz4BP5wbL2jjFEVsJJYXwRmIhapaYqFLlL3OAjngDgAAAGMQZoSBIoFcvFd9ffwn%2F%2F8mIiXJTfq%2Fa1092rdFrF0IXa903VL6Ky%2FRKqnq1fFLXJ%2BsUvq%2FzrUt9rqh2%2F%2Bi6tWO1%2BFdiiW3cnav%2Bv7%2Fo6p5fXv1furPX8f1yCvuT1y7oct8V%2Fr3JXdCCS5uP9WH1iqqQUv65VclqyNuIs5l8uHnvlm9Hc%2BIXsdpC2%2BJm9cq9Y3axdESXLd3VyT9S1W6kBJOtSDv1%2BrknrF8T%2BrrzVpUJ5oqW8m7VjtYviZfV%2F1cbu%2F16W7vz6J7f92tX6v%2Bvd1cnrUTd3CMvqtTesUV6NUXj%2FujvD9Ss91y7WVerlesq9ehP1Y7Vy%2FLzggFperVXWqu%2B%2B16xS%2Fq8twtzRfouX6I6JtWPzlb%2B5pBS0apfV6urluie9%2Fwv6LhJ6M6S5Ll9C2O6uKuZeJrUVfaJV3La9%2BhDzr6Qkt%2Brwh6ysnl9eT0%2F%2F1c77jLrsw5MG34kQ7A1NX1X6H9d169dr3f6NBV36F1FeQIVeX%2BhvX6vfq%2BK%2F1gr167k9FavRGAjlkv9XuAAABj0GaEoSqBX%2BhLxHrXcvq8%2FrX6v3%2BpKvWv1rtTd3L61J61%2Br1avVq6rWpfWu11%2BuUnrUvq%2Fff6pw2tUOy4lcd07d%2Fqx%2Bt64la7W%2BO%2FfrXa1%2BtX0tfrVer9ye6rrJWvVau1qulrtaxTusXq%2F1e%2BlbuXi%2FVa91qX0MYFvu%2FQ1ixXXq75vpau11P61Xq8tNE%2Brz2r4rX6u%2FVl6rFJ6xdrU%2Frjk0J%2FRqr0evdYpIuvXro%2B7kupCe1yku18TV361frq%2FXpLXv1avWu1ZXS9N6ufq1%2Bsru7r1g%2FVknrFXr3urT3dyXXq%2F6v3Xq83rUT69%2Burwjk6Wq9eu69XV6xQp66vJk9ZS7wvF1uvVa1%2Brd1VWqvFevfomEX6L0tNXq6%2FWv1aW4Su%2BJjLhsv17yXLZvNi8ndy%2BuUnrhHbr3xP61J6yu%2F0V4q0au%2B%2F1q77jLvlR6r179ZV6uRPqzvvuT1y%2FBXvPV6tprqI9ddy4nL6wTeiMu5Ljn0nforT%2BtSX3V%2FolXclx2qK2O3hzE9f%2B%2FWpL9e4ypakgAAAYhBmhMEygV9y8b83%2Ffy2I%2FpCXJOJ%2F%2Bv%2F%2B%2F%2F1Y%2FWL%2F37%2F%2F%2F7Wv1r9FeW%2B%2Bielk9EqTdW%2FWVcyt%2BuXzX%2F62u1m7VgvXoi%2Bi%2Fm%2FXsd26I76Jr1f9eltYJfr1f9WO1yq1r9e7iKImub0ZztGeT0LfuSeSvvFeOl5oj1lV16pF9Xn9ek9CHVveXXJ19o7HxXclyWrV65yXDHuItXK%2F5V6a18l4nFdevTesX65S%2Buoi5IL%2BTu%2FaV%2Fif16S16rn9WCurWL9dSXWn8sSv16IuJuJ7m5Il19XE%2Bevso97EesFfxdcRl%2F%2Fv17lki4%2F1qIpKtWd1krFNcVc%2Frcm9X%2F%2BZZSS91a5RG8I2vWK5aJVvJWVF%2F116T1ZzozV6P6FuTpFauSd7rF%2BsF%2BiZRdfcTcVd2izFp67k99VN0bWWaua0cdqtTpP6N1evVf69fordq35%2FvtptshXk1WXSkuX0bu11H%2Ba7PN5hxolwvLAf0E3ktejL7iLRSpXqcE64%2Fv1bvo6vRLYr%2FXCN9HKkVaN3atcAAAAdZBmhOE6gV2X%2FrktCevjvn%2F%2BEe%2F1jfX%2F6t1r30v%2B%2F17v%2F9dd%2Fr3lr3as5%2B%2F17ta77X79a%2FXL9e%2FXq9avpWVwj0182T1%2FmXvm1%2F6N381jn9%2BuFX39q%2FcmSvX61EX81Vd%2Fr31%2BrV64X6sFa%2BHdex3nonj%2F9rX2veT9q9esV%2BrfrUTWve38n6vGbxA7%2FV6ylFLFcXVEq5L69d%2FEXOspMud8Xq%2F6xdrlJ61Xq92sUt361cvPd3quX6y%2FXsd25a9Yv1f5auW1qvRZRVompu%2FuvWK%2FWoj1f9YpPRK%2FWr9FlLIYtVdUy1Xat8R3N6tV%2FrUIerXfyebQp%2B79altWQl6NLu8v7R4vnrEfi6Sbx3lnpy3N6wfrl%2Brn%2F6u%2BX5e6v4v41ehHydUZy%2F9a1d933emrzckL88lcvr0twrDXJieoP%2Bb1eJ829NWWnT%2FWsn9tfF9o9VTfaEOlFPO%2FeTySMfauV56%2FH76eru0JY7MbbTGz%2For%2Fr1arX61EejZd1fdXXojuyjW9do0XcQ%2B9SCgmL%2F4aOCgdwsqJNGdgwgapG%2FQRerjL7m9e9%2F0XKie8vXXoZqy%2B760th%2FIIJEt%2F0E6q69XKtW6Kv11fq8nrF%2BGcl6%2Bc0e1%2FrURy%2BWuV%2BtSQAEiFJQoEgoEgoFQsJQsRAqGQ0FQoEguFBOEgqFAmEQqIUvE8%2BOPnxqVUqTLudd5eea51PGmkqHQc%2BO%2Fnyfvvzt56Novr09J11svqdU%2BJfXtHY%2FuL1e0vo%2FlXTzMwQ%2BIV6Of6vOrrKCI8umb4%2FQQQx61rQHjnLU4tTq%2BqemgyQcIivcUN2WLzq%2F%2Fzud7AN7bOc7JAD47jqcLxcdcgHpz4jw%2FLJNChT5xHddxuWTUnHD3iEXAzIP1vECRuTp0A4ABIhSQZBQKhYqBYMBYKhkMBURBUKCgJBUKBUJhULBUQnHcrPl7cysnHfxmfXvV55zd3zly4ur0OKcj1t%2FOiuN%2Fn65vJUOiznI3NPsL4%2Fm2DWjBuukd8eVr4no%3D&media_id=1254206535166763008&segment_index=7" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:58 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:58 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_zbsqJTPufqcUeLFfOaptlQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:58 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111821321190; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:58 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "16f94ee08dd5ae5a6fb984f7430bb598", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19945", - "x-rate-limit-reset": "1587864356", - "x-response-time": "35", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "009b24530090c340", - "x-tsa-request-body-time": "96", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"TX0HvAttnyzrHY%2BkF6qYAc5Bxlw%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=h4Q7PBkOg6O71%2FVqOgfRa17vA5vtVaDj31F%2FS9VcYnJCeAPQuxnSglhs7k8L9yKyd%2FFMzx8fjuRUCX43aprLg6IL%2F2%2FVvdxzGC1wYgTBal%2FeIdV8LXwvwlXqPQBxkKJWUkTXgveZqss%2FA6sMSeAKr3cUq22AcAEoFJQoJQoJhoFiuKQqIgqFAqIQkJQuFSCdz52nfz7U5urePrM%2Bu1TrtnnvK1wqR0HLutscOe8Us389HgPLWXlx63OstkmVlHZadm1HjQVr%2F%2F%2F6PobHdw%2BvGPVfLpLJzue%2FxL3N7sVHPGR2L92i8M49We%2FJnsOI8%2BBjg%2B8J4NeztdA4wEuwLlKEgrpF%2FHx8SbrXFzzJyTD%2BOgmN3ycL7yuS%2FiSPOQ4SBCgJYeVIGIdixRkjcjAEGf%2BQDgEoFJRIEwkFBMNAsRQyJwoEguFBKEwqEwqIwqMTueGvD8%2B071tL8eTz3eNK3xnNa4SVOA6%2B9wH6z%2Bdh%2F10%2Bvwk4Hvv1JZl8qB%2BsuuyRjo58XLwaiv0D8yiXEzHrRW5fUX9kPse6rMhQ%2FWL63ajzrWkvhv2P17VyTC%2BIceEcEFdL3sWJXQ4usbdmxQiQ8d7%2F%2F8JV9reZODuLyg7ne5VDlChznr6R3AboxkRwUHJGKEFEZJkkpiE5i0yqzADgASQUkCoiEgoCwUEwUCwlDQZCgVCQVEgSCgVEgTEQUCoXCJnvpWt%2FP6%2B%2BL507%2BLzz3rmr1txnNauVdXocq6zn7%2FTt9Zj7%2FjJt3Nv4fzsN9k%2FGy%2BXZRYXOi%2BzzDxDdq%2F1mrLPWy74OvwnsGN3xx148iO5JxDpir6GHO2nV5B7%2BfHXWhdqOMXNcDha5qyJxuNnpybP2WFydV4MnX91TNEMMSlGeqDGykd9nAy9%2FtFAxV5IAUS64w1DBvSlXLILIzUVd0gVXBwEmFJDMNAsFAsGAsKQ2FRIFgqFAsFAkFAqEQmJRGETPGuuZ373xtVXnXfV%2BffVVXG%2BG6XFROBxDVPj9Ru%2B8J2b8eU%2BsBq9VH1XScpdKD5jTr%2BNFFtnRdm5%2BzcBABChdHrnPX46ksqbIF%2BqVTIfayh8bD%2FAy8OC0hMLaxL37cqvB3jHymxDE9I1erVjONBJR9c3v2qcaqEXhanFsd6WJKD6U5do9cCC8%2FoS3SrUKPy%2B5EVXfdOsyMM6VJJ7lhJChOL9yAz2BwAEgFIwsFAkFBMRAsKAsFwwJQoFQwFQoJgmIREFwqExCZ86vHPq%2BsbrW7ly%2B7pXEusVoE6H5ncX4v59E5MWjl9fdQ%2Bv%2BHtF1Wv8cLreIvbbNf%2BrWek%2BxkaU3SbsgTEJVHu%2BzX8TsnM9fqOULh4GDC4LVf0afjH0z9QA%2FC%2Bv%2FpFENeypbLwJbZE8h5Tx6I7hbS8ttksK87eM4Q%2BACDM%2ByuFUrJbtsl%2BbnBUIHTxHMv%2FOYibwZT1aoJzjVWDtgWuGaELJyv1kG7YvIfUBwAAABvkGaFAUKBX%2BhbyevVcnSv1y%2BsElrFTOl7tYvtS1zq0nrSH6lSrWN333dF%2Fqye6tdXaI9%2BvUT0%2F79Fb9WOiZLWXd0v6uX69JdZdX3J6M0vorja5V6%2FOpYu7uhy4oQuf0Rr0SvRcpBS30r3VXrKhy5TerT%2BrEtq1esUs%2Furkvr1esX69d%2Fr365fr2K%2B69ZXcT69L6tJfat%2Bsu1btai7icuvWLX9Wvfr0vrXd3XqxPdXNcuI2rWXav165e1arr1wjriMRxS99q36tJ6u%2FWv1ijPRultHMD9Yv1yq5bUyfqb3pQj6NlLdXL6P3qrx%2FrKvRqjoIa9FlJxM1w5clorfop0k9E6FPXpifP8TL69l%2FdeJ9eq3Tz%2FaJBGYlnHgpS7NBL9YiK%2Fn9lglS%2F6EeXRP66k9XkuW4%2FIq1MM5eRe0QJ3Z36M%2F2vdq%2FxZqr%2FWOTWjMu5vQlirkf9vWwSDsmKwfaE9rvkx9F6%2FXDz4T1%2F90Ic%2FLNhbkxv%2Bi%2F%2BEwYixBcgdRqG1ADUF1LWPaa3%2FQ%2BpLk9Fcv1aNtcvpSgrdcqd9S97yz9cO4VCku1ZqEsFHbHMd7%2BR4rWr64vqQR1d3clxdyX3UAAAFzEGaFIUqBX3S%2BarmJ9%2F98QhNfrn%2F6Jr1iq6tWv16vXvLueuK8FjRcpPRKq79XVzL1c1d93N%2Forvf3963WCpV1jv0nrnq5fRK%2BatVir1qT%2Bn6vfW9khlpvy%2B%2FZP7JLkmfLZnJTkl4JoQYPtfwh71shtF0twrRa6lrHL7uTYux368n9e%2FXL4iYYt5e%2FzmY%2BY0Xcmv3%2BrjyI8XdVX6y9q%2FWKW4znl%2F17rl7rVcvVcOVeq69X%2Blyq6l7r1r4nvuhT3atXrPl%2F%2Fsv%2Fd165SXXrX61Qr%2FVKiWvdq0vq0m6xSer%2FV%2BKFSLyKYPlM5H2W3ql9C8qxFcx7q%2FOvyT1bx%2Be5vVq8puIWJPuT%2B%2FRzN%2BETEwdqcue0DFsq2rEx2oPWLmJWD5izN%2BWhbpea90T1er4r%2FXruvVr9Wv1b13u17W9vv1crxxM%2BHxmcks9lpF%2BxlKyzb%2BGbK8eLOGk%2FLGX17hivLpHmjtwgO2DX6ZNZtaf5WJIYlKkHG5g3kUbCX0LyrVWK9dRFyy9%2BeixUX73aKMsly%2BdNeeqWOj6%2F4ogdnqUZwDVt6Al%2BXXWX69sg3TOoRf%2B8EgihRwQHqfkRagianmQv7%2FglK2%2FBNXc378nISKP9QyRA4ZaDYNWztmf%2F0JfuvXV8slolXaP6t0KaTaG6qqqqqLokzUkx4zVxvCFvr%2FQISVUn6l7%2FkLqjvTxBXaAjazPNZTyj%2BkC%2By%2FV9iiWKDsvDtM0XoEpzNJTgppbgC5017YJZ7ltHNiUNOr72ZShcMxB65fX7XDWTkvOYlIPLfJYPiXf3R4v1avXv179e%2FWLq%2FXv16XdG6TxRFIlLR4PwR6Hf%2Bh7LbZ9zJwbpZHaA3X7tDe%2FBIbKw8GX%2B1xO9zUp39%2FkuYj1rvuUg%2FvtH76DggmI5bX7cRRez3PmyvLj%2FRXX6y%2FXv17u7XviIjar2YggjI1HF6El6VL0346Ml5Gri1%2F7%2B8vrfiCuWxWe4a46ZIHTJfCZMPsVlDkX%2FBMN0btaXZfrzoEQoZiP%2BZfa9fy3Iv3rYTkzUfLLoZCUvrauGy4y0P6%2FTGs4HL9Ky2f38I7DT4r1aTU3d%2BT6%2Bn%2F%2BUQbJMy%2F6%2F5sv%2Ff4JBZZKBBvGX5%2Fz2vwUEyeb6cUi9P06XqK8dH0E%2BLwasQGgTX7KIGBEBi%2FpcupX4eE582RDt40XnX8Js%2Fr9ZFhWHp6oD6VOv3J6%2FRe4yyFFb9SueubU%2Fq%2Fb5OpMrVxFRe6i%2F28v3%2BzQ4kx5fX9ddiS4c7GSQQm7sNMddfKKxsTsWURKpMf4iRDQr%2B%2FtDFz%2Fd2Rn%2F9dZfrrCRAO8qq7bwQeaV%2Fu7hyw%2FL9O6gs2b4w141tN%2BTJZf%2FUJW518MKWHM6%2B9fX2yNUcnXkzUdV6vbDPFmlvKNf%2F8v3s6KUetQN2N32qRrCtEMnfcu9eiMsv%2FaivDsNGzcwz%2BoIYybY%2BNg4svru0ErgieuddTHVu%2BqLGR83V66v5dnZi3VavCluzsnMFyrGY6ru5WINumCcxmJPHEHRe1pVvbzHxsY%2Bu3p%2FZhWPyoa132xPsTvBGJYvepOnbKJox%2F3X5SrNzU4bCfhTXItd991dl%2F1Uwg1P82Pgq%2FpF9sn6YKSizmX8%2BOba3Py6R8tJ7MU9tO%2BbcMv1H%2FkINRH%2Fgi5MXMJf%2FUEVFSSi3qqIzsgvA7WW%2FhMiksv5c5o3d6dQkbmwJWgUaGCw%2BnxFgmplmBoMUfV2uiTbpZPa3%2Fk%2FUER1rrfoI%2Fq%2F6uV6LWKVmrrb%2FBDq9vX8OCI80evqb9e4KtX5qUktjX4kpMj93J9%2Bpi9fX8hi3sIYLTrl8n2xWfGsmN%2FRCeTLhiCQjdJJk8fEsnJ7fk34uq%2FL%2FgjJiHHdk81979D3O5J69a7rWReqJ2X%2FrDE20mebLnyojjLbSvwQkZXuJf7WiHzQF5f692qpE9Fi%2FV3l01X4S9QTIvFEacS9Yjjwpaq1UTZgcUGvKEoVdnT%2BvRHx3uD%2BvSr9xHPX8nq%2FdZMnS9ty%2B6gAAAHtEGaFQVKBX3%2Bhbn6vjO36uVxv%2FxS18%2Fat8mIz000nrEq3%2Btd169l%2F%2BG174RV%2Bjlj1x6uPr79Uzl%2F%2B1c7Vzv9X%2Fkqrl%2BKVqrkte9iaxPxfX3ub6xLMbbNLCX2WNvNpH9bHT%2BlvFdev03rUtNVffSr2gXE%2BtEvy9hOYYpNgBC69XH%2Fs5L%2BGiaBjRdKkXf7NsEeCT5uE4q0PgjhI09cz1paYNZ7n5nsJSe80j1V1RFLhDsUtevqpavua5BS3aGMEllWrR37P75knLD6PleWr1xHxGK6217u%2FWV0366%2FXphy3v176XV3k8Nf5ec5oJTRoNf%2FR%2BuiO%2BW9hBeqjNXz32sXakSpmWq2qvvu7MK3P%2Boult1n%2F6FvNct161XrXeK65q55NCpCeP68WYnDZC1xaPrvswyNoNB7cjNp16F1d%2Frl13si13%2BrHSTetV6tNdKJKRGODxJCkzYucceGM2d2Heemany8kCPuWjnKLxku7x7jBZr%2FU6iYNZoRQtmqQaJdEPHlaLV%2BrH69XJV0r%2B%2F1rxSifV%2F0WDiLjmC4zly1AQNzNb65iIZQy35Piq%2FnBDUXVT3W4He7%2BxIkKff0ZcSMkFRndM0IkcTJWENkLxZPT3zaOPtc4MJ7NWXXtIIbLJflpa6qUSBrBBOSHi5GhmLK5czkRGx6tfw3PXV2wtdkqDfGQ8u8H5EH5FRmXvM%2F3V%2BX2jxX6tJ6vNdQ%2Frc6BJqoIvJv7hZBJtVUX9coYztxEMbAdUsJe%2Bp8ngt%2BKIXNJBIL%2F9V41aoBwkO1%2BTw%2FsLeAy0zXYUEqE8A6p%2Fu5FMA6OgQiWO9zRJiC3e9Nik8P1DhLAoyJavjt38piUJgwnaGypfJ8y%2BYguhg9DyHvQ08VhiwaRySMNcaxivJW3DLNLjX7BKVshHl%2F3KFYQundB54U8PvzyCoc3bD%2F8VhkhS%2FVIDAsdufnq0eKT179cp8%2Fy0btot3SL%2FNG1qqqLqLhqGkCJg4l6%2BJURIozXPq4Xzk5Uv3Oogiqtft77DBaNRoidAQ8EDWwaTWsyrFGClXsPSkix8xiQEC3lSFEDBJ6NElcr%2BnTBKUE3njItRqyhVbvwZPL7tkWvehKUE%2BchqKIoHeQO9SzcnYdOfA2y1r%2FQH2XLt7GkQXdN7%2F7WW49QyZAeP%2BXymRln7FUK4VZVmrmA5AxcfVGmr7CsYJCeZvgMdfXUGZm43FhHr6sLeTwUrvDXaKXX4I9zO%2BwrwfEhYPGyFuPxAg%2FfZ85zr7xOD0%2F9cprWXxN%2BtXv3d7RRlCYqj23htFufsTAYp4N0sNbw9n0cS%2B5T2HMoYDGcK2UzKr%2FYIyvQIgrMMNgiFwO3OfXKHBDBjXkHrxvvr0jWc%2F1%2F1kituvXuvDnJY0q%2FkITbsNl6Y8M7fwifZznde3kDBOVjG%2FKvZMfksgQCH6PXU9fDiK51x3v%2Fb4Vepyr519kbvvtWLwWDOvml9%2Br3cilN7HitVpzkl4wCpYuFSiMoBqKYnn1H5qgez%2Fk1ZsZBDYtk3hf1%2Fbmosr32Lii8zFjbGEGxGNFoHq4WxOWDKu1p0aIC4wdy2%2FLFEfi1kvl8rXckH9P8XLB9N%2FUEqLFLkx8%2BFUeUGBSTK%2BcZaTHAtKgUa84Y8K2HkVrk%2B%2Fqlb3Woi0XVXeajtxurW03eT%2BJ7cEIQz%2FhznKuNIkA%2F96FKX7MWgxkQSj%2Bjvo6BeI4RKwP42JWvjJ4jX3PpdL%2BQdjFO52XiF0OUgJwjjJCoJUX7wZy4bDlgOgYankRdsPxdH9hAVy%2BPoMzuBrmxc%2Bv4XFhqfJInm%2FADM1udfr7j0YJKhnn7uw7jCTCxXS7o%2FlL3qr6C5tq2D9gbFS1xV7s8%2BfzXCg%2B63yeTL7kFMBwJm8UfRpU7sGFhvU4YLsCqWeG5c%2F196rayfXe4dOwMDfBI%2BLZ3d4vEGvc%2F%2FYZ6IEr5en9fCbl62F97tshijw6WmgewndZ%2FfDZazHsOWB5MMK0wSYWTP5PbS10%2BK%2BZhu%2FqQypB08n3s%2BupMjBFmp5atwTFwMaqvQgTHqOwr7OL7%2BBLqHB8%2BL9XVF%2FsRqbF9OWjUOEeZd1uE97XJCrwlhPYOlsJZ4IL7rMf7%2BkYqzjHJ8fVlyc%2Bf17L91%2BnsUTKxXeT9r9C3MnxvqPI8dz7J8%2FG5bWZPf2qKa5R%2Bl8pA6hZfsIWtOjFPKw3qiR3CT%2BNoOzS5yxEsOCJSeNaSegjKq6VEvRwjp2cwlar1RHv0Xu%2B%2F16fxIpvW2NgDOT513ZRmI%2F8tnPdeiu%2FXCnaZyQYdwHh%2FJ%2BGXlaxcmci4VxXBA%2FR0QXjmV9MrI4X96dkL3LlTShE1xwL5Vy1NgIVcs3vQznp4OvJPwqNLxEsDZFkHikdanr7R96MnieNNrXXXL85s9b77sV1d%2Bhb17EQIt5%2B0V%2BvT12QnCVurTkyEHSyXkL%2BaIq3xh%2Fkjj%2BxWfCUwf0Cr70Eq4VV4ntzE9eGiNGTqq%2Fy1NTv1N0xA58EeXgftW45%2BhrU%2FVW%2FVjhjW9esElrKYv9qrNmo1L%2FeoKKmIO0yrW%2BsIbvPn4LNLa6RdfuGxo9lL61%2BX63vfxCKVKv359KkJs6%2BQg4hBXxW%2FEueYhoae9YyOQKrL%2BPc2nzwEuCoRxzmVAJQ5hF2lvHa1VEy3XrKsn9ek%2FufaRa824AAAAZ2QZoVhWoFfffdWhPVa91L3cvSufOsbte%2FXu%2F%2B1bvvvpV7oxXOk%2F6J7V3at2vdHdCKL3e2ENSqr0TKS1%2Fjibfq1X3V1%2FyVN6tm7VnHojH1%2BiSr0J79Wk9er167Xv1lXq36%2FYxfdq2O%2BH2vYhe5By%2FFxzIj8Wf01lSf8mTS%2FRffEr3P0SvyT1%2BL%2BqubVWoYvv17ter1y9CqtWqrtCOl21bL5XXuCZpio3g3J%2Bf92hPd1hCrVa9%2Bqb9W7WUnr3a9ilkFLVqx8T2rY5b5Pf77wnXrhLrl%2FVrT%2Fawfq1cI3xP6tXrFL69Vr3eK%2B6v4mrXq1YzBjUJvdf0EffPl%2F77tE6rXu%2F1ZV1deuu1f9ZXctrl%2BrLwh3CZvjK9T18v2tKxh1%2Bk%2BhvfNYrq1b5VSJ0TwSfxMbfaK42YVJiDblR7gjJWLwcXIvUpYzQoY%2B%2B0dlcR3Lavdq5ivuQUs2ahpgOuX33k%2BF%2BtnjwozE%2FJhOrIatqVTlQlu9auINmvtp9%2FydykckGIrDgy3NvNTlpzjUBXP%2F5PLVLCVg2gwvOSpmPTCHqqchH34gF56Fdbo%2BV%2BvVavx%2FqtqFKK%2Fq5cvgQtF%2Fz177FmzUooacnsEhDn2frvvvswmnGhMyeGT4TIzWcgz4OtaCqX3u5eNpj%2BL8n3KSrJyFYMJlWTAfLEUs5j%2BtAyUobUEpMdauJUOVghXfz3PyyejwfrF4Srf0%2FJqFukNpCxCpLRx73ldV9kOyKID7CXA1mzKxuDrcmW6iOZthMjSXXKkb2QstOjvvsE%2B7xpBo3QpeSWnT%2FBDYOMvT1RPlfyEWOQMbycEMe8LtAXQTiT4%2FoEt37htmsBxekCHjHmEnd1ujv%2BuXutfqa%2FWtP1a1%2BtSa1ivdWMFFDIyICx3kzjIiNWAruZODIy2uaxMpyBBrfW%2Bma1r6jR1gtLkJlGDNTi7DfDDlavVl%2ByCYdbs9l1k8fS%2FITc973UhMpdqhXF11YMfI60Y2qsMlaa1%2BmXUjPtT2HBFqDG9B%2FQxBaHhvru5xS93dbSElSr6wkM8bI3fopIQUfGFAkrkpiHWBLW50MvWyKREbeit%2Fq5%2BzH0nXginIlv2ZPnfwXEuzL0KMJn13u3BFIwTF3a%2BjSwPnJ79U4IigieWEnAcWXYJI%2BFCjX%2BFI0dedN8l16LVWr8Wj1z6NbTeQZQcXk%2BJfw5jM3FWPqraBDAkP6NsJ2O8gQB07rvRJSu7Ra7%2FDXj8pTpj3q6wOiR5G9b%2Bw3Gxr2HO39gjTMu3HbR0QRxwxv8LicET1wpHYiez5%2BvDs8G%2BMTW%2Byirvk8tf5%2B8dF%2FlZP6v5MmT%2FV6NfJR9dk7iutyfJ29hcVX3uTOuHVK%2F5PHXyeX6ylYFHLnJ8L%2BYxwwFwwIkPrk%2BuTiRRY0NCqMRjSa%2FwmeTw6Lf4WnEGFIkvnhOD6B3EL%2FRH%2FDuOpn1Bx0XoDJUBoYD7tgXiZWZUP33z%2BT8%2FcOEiGGo4RfKo%2B97CnBv9Fw3denZZXX6VH9gxbLLJ%2B%2B22WhgmbyRXh9JX5WR7WTyvJURRzkJgWtTnAdHgm5p2CDMd0PCzso3aDVyP1gn9dV64c%2FPM7oghgsMt2bLZo71XispXtIz5dv1orGq8L7phZaOcaArVEyoTyeEe3x82XgjdXM6qXuMtxuTvvdKq1uegTke8%2F%2BGomxQ3d3ntlc02C41v4RMF6Xd9mpDcQ%2FYkjHzEEOptf3y8nk8CJL%2B%2B%2B9OhHLtrk9DW77q1ivdmxmVAdTKpIeSaP7DfHggTivHnVF%2BwTQ4sn3a2OwUFykR5fKw%2Ffa5atXK7L%2F1fL67%2B7Xe7ehbHFlYtdJUX3Tar17yeH6ixQ8tXBrZfpd%2B9lOGcQ5r7R997C%2FaXm4H3zcykPNST1RXy5PH6iKx2I9H1VWvSBYImppbtNabX4I7KkOMkll%2Fev7BMWld90%2F4JM%2FEObFeEd7Hk%2Fg30k%2FLrwiTkgJftE9A2vUhpqfLon9r%2Bt3p7qivwzs8X1Z5sGvU1W6IpW9wWd3E808C0gBqVACAuRv8wfNe%2BFQDxVBPerv3vHf%2F6q9D3uS6WuEP1i%2FXVZNaRCGobPqItLJTJi%2FDlJLXz9vrSwW3dLauz8EXY3c36%2Fgi0i13MXrJVXoSVNzv32QcfIfl85cnxKDYoL5JBE9bwVSB0PfJih8eu9MAyMJaaFRKVyjPSPTyegm16q93fJJdetbenrdbrlPtSX3pLxQQ%2BBtH0LKaXgAEiFJBqFBwFgoFhoJhUFhOFgoFhIFREEQmFQmITve58e%2B%2Fe%2Bm8Sr581x61h5ko3cF1wNZ%2BLt%2FW2nyOWB6F%2BncJeSpEqdbt393x74z%2F9%2BZhx%2Bmzwunq6e6QZqV%2Bo4THl9r5wI4PJqjDry1NVKPp%2BP%2FY6iN7UmrsJZB3WI4NJqXaxd%2Fi%2FZ3HlfYA8pBXKMKJYgFJi5M6%2BOiS1odp497gCoLv24XuHh85avlnKI5aFOFl4aaJCtDjWE%2FVEElTJiqvCNhLXUHABKBSQpBYMBULBQTFoLCULBQLCQKhQJhEJhEJiE5nHLX9ddbq93W5c1zJTjVXjJAmh2vRNI9nqr%2BtqkaF93Kn6D8d0Lqq6OQj%2Bd1aT77it7dlW%2Fju%2ByiPIGHllW7uCtpuAxoz%2B5DdHwW4Nd2ar%2BZIS5pR3zGturE5iE3k2rVoJzPvanylr65A0HivBbVClPDq9%2FHaJV05JysbOt4yiup7NPqr3C9Zvd7PhNNK1iN7IyRukQmlPvtrUQi1sEl0qpCfDkBwBJhSQKhQShQKhgKCYKBYKBYdhYShYKCYKBMJBUIhMKhMQnZc3U%2FT65lZKZJqcyXmtVKFRDyO1fHUXRHV0J4eK9rX5urZ8tE%2FAbtw56t%2F%2B%2FZ4Gz2%2FChPP9u3k8DgwC2L0tmE8mS%2FXwNeoMh6p7J35uDA%2F0DzRm5dZsyyHamnjDh%2FSstS0zodi3v%2B4spGxjCqHWGIFdcL4oTH7mlS3c0ZKEWseUVdEuCngR0r%2FbNgyTtReZOfCWgKE5pY7WkrUmphhVCc0RO9pg4AEkFJgqJBwJiIFgwFg0JAsFQsVQoFRoFQmETiqy%2F0%2BOdVurqF3uUcawqSpUq%2BgfJ1u3Veo%2BLQcP9G%2FC0fSMb9cpa5P6P%2FQ%2FDHOsgWtfom67iUYHifmnIYaDj%2F5CPvNe9Cpozbn96DDdRvI3LFM4r6%2B2i6S0JZZY7MwABOTCeuApux50VVsnq6Y7eUjctpyrRm3toOvgU7IVS6p1LQirUxeNLTyKNLgf0NEmX8WzO4K7kL1fJpY2W7ZPCvVW%2BSylBTu39oOksZyJp2n7EibjwT6VBwEeFJAqFAqFBMGAsNAsWgoJwsVwqEwqEwqETEERPWqmT9OqTd5bNaZe41aqqXRI6Gm%2Fk8d1a21RP55XT5Ofm35ZXbb%2F8arunm%2FrDfdHZr8k3p2yDZot%2BTLHdoH918W41889RmJRrefdZZbuMI895mNxKNpSUvykOLJjCrvcwI7pI1ic4tA1fr46abnK69u5uJSJzRL3mh%2BRRuhfVEhHhFfk29pkhgNKdUcOJHu%2BMtyyq2Tjdxzal7n0McXedY1nmTsihCN50APG1NKJOEdIx3iDgAEaFJBMFBsGAqFiQFhQGgsJQoGAoGAoNQoIwqEgid73J3Xv5vuYvOu%2BJbe9LSsuQE6G58vHw0%2FxLfOvlJ%2F38xfrRjLNEdWvlX66hZPSW%2Fbz%2B3SvyyZkpvufqgyQjwqA5puGJNSkEHv57p6Mr%2FpQ4dCoKxqJ6U1bzP4yIw0z6qMESf%2Fy00GX4GvGwpd%2BemOJOgXnb5Dl7ORqdGj0VI%2FmFV8L2D39fYnPVt34xZGO4%2BU%2BWU45yTAoyWtozATBNksZKr9lWHnNQpWqkE%2B00rwvWV5MTcZHhBwBJBSQLBQZhYMBYKBYcBYVBsKBcKhQLCULBQShcKiYKBUJBEJhEaVTJ8%2FWZPGqa35MmSY1W7ziEqcD%2FQvLROgdj%2FNer86ne%2BS%2Fu3l%2By09Uvk9WHbhmZRw08OU%2FV%2BqF0SGl7L1YcMTgMc8z8Z572WNp4e8j%2FT%2Bl4k%2Fnc0N7qofU42Bc%2FCua%2F6c3KVoId8gXIiJhyiDXPH%2FTCf1D2vYY%2Bz1r28rrymYFdh3g1c98LnLCMXilvp79eve%2BT4sLit7l9t2m%2FFeo%2BYlBABbRQ1wvaw0AQvDnQWZx1dFLB0Ys6zmP12QnF0Tt9impKKy%2FKepakXLKflsA4AAACaVBmhYFigV1aFsX61XS10Z0%2Fff%2FS9Kuu%2B%2B7qWNl%2F71SInqx%2BrFer%2B6pOjqd%2Fayr1q%2FXr9Wx3Ld16sc%3D&media_id=1254206535166763008&segment_index=8" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:58 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:58 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_FelJyAlU56dp0V7GtBRVeA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:58 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111869441376; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:58 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "cd7c339ccf2dcd883bf193cf30b0dad2", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19944", - "x-rate-limit-reset": "1587864356", - "x-response-time": "30", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "002a6a06000236c5", - "x-tsa-request-body-time": "95", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"IXMSCyGS6DMDMyQmy0M4YAgrNr4%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=axfeT3%2F%2B6icn563VdQqhT8StdrKrueief%2F2hbVayrier9a77Xu%2FpXr1fpe1epHWu1caJpif2cy%2BzJCnifNPg%2BVIHkVQg1%2FpPfFfyffniekvKRpo%2BdlEWz6tCW%2FWsUt3ilFbFbk5bonpe6u6v1fvu1l0hTjuCQ%2BEexb8NfDYIYmSfcfQlrtEa4o%2F9Zd9rX6vNfeIWr6WvVyvV6tWP1lJCDIZLvrRe%2FQt%2B7gxqNV3dWvdX6tXrF3Xr1%2Bpk%2FXKf%2F1YvaGBCckCwrYTBH5cdJB7WmCrSeaMU4jLw%2FVZfQ9jV8lN2vfr2KxWUctpPV5MK%2BiLve%2BYmPELe4RFLBQy70Z39esn9WpPaH5cq9PutSeuHf6ykter1e%2FU3S5Hk9yu%2FBQKrWbMhcRjDh1DOQXfgPPxv%2FLKlVePtTdqdjvcnu1%2BJgIFdGt%2Fvq00qv1YyfPrjMZQpyoWNaD46FlG9xdQrNFBJEJhZaG08ogJs%2FfoX2i6k9ek6kJ9%2F%2B3%2F1eS5PXL9Wonv7uHOejrow3w%2B9yFDBuNeYRLwd4GLbwgcqZ%2B98N354N%2BM%2FfEH9bNqP4IbuKxXrJ%2FfREHr3Uq0740vB1JAfGSH3c%2BstwUnMQQvDPzkkWn5N9vpxEwtnwwIEGr9tN9%2Bx5HjjLHWgO20RCmR8MYa8nlf0CrVegv3%2FDdpPxTNPp8NapAoj5CKdo9u3eFvIiIUQa8q9UeiDMSagPCCdUk%2FqhPV6vVL2rur9fd9X3JhKjxcSCQY4rFYWcq8hQt3cV6FW0OY%2F5ihapqILjIK%2F0Y%2F%2BFYn%2F1C5GKAg8lOIr5aCRQsvFijmrqPfL%2F%2BGJmMM8Hzr2BXTowUJGizqSq%2B0Rx%2FH0JcUrTKfPJ70TuCAiQ4ysg9mclKgNQcZS3h5dAU6W%2Fw9SzUaRI%2BbGbLptwNpqzHl%2FWxwT27RBf03EwRkHRJDPmbZ65IXGSP0Dyj4dTtdw0UbL89H%2FlhlSqcf9wrOOmxhOL8eIikulhm1P%2FZydaBN731Nz1id5MuK1X3UKP31d%2F5PezlGxbBBd3DY1RwqlhHxhrpL0sIGpmMI2qaSj%2F8EJHFZbxV4XOgCGeZoLYCB3GMWQ21iZO1FFQhgORlVcv%2FuCDlBAEoIAmHhsL%2FATRgtNUvKzxBn8MCqir%2FJ69bYajcr6%2FhlFSf%2FQWpj%2BXTfXB3h9SqnViuCU49IoypQGkny8dLrL89RKW7j7P3a5PbvwqIjpkwfmLVxoEpTp5%2F%2FPX5La%2Fhrg1%2FFHZKc0B%2Fy%2FDU%2Fl9hnlwZB9EVH5mnj8yCF2wy2Evp65xL%2FeIDUXN3XojyfNLeL%2BRh4RWupnzkoaSf1x%2FQtU2USh4jKXV9%2FQWvIDSvL45PQJGeqGyUSgZIBfL9bdBrjLWAuttxsWP1%2BGzkhZZWaDArqeIUmT%2B6yfbBJuGhgg%2B9Zf29Qtl%2ByNn1ZxLp1vV9hW9AikctPRxfb9Sm7Q37V7nPX9I9ye%2Fu4cEHzJJMPzkI861L1rfC3LRjqypg8Ee7cfZdp%2FOdP8tzqLvvFfs93NfPw1ErXk8n7X4XFV8a3AbAhs7MG6A5fCLPyI4%2BN4gPcK0K7GGa8aE5%2BCrash%2F%2Fw2JYDgdoHlUKdazQfEF%2FvZW99Kcy8EexvfIMJ7k%2FlopMK9GXkr6o7mo8e2Iv%2F2nFFezbCZ6TUVvYVlWS4361R8M2EKNsL6YgtMr%2FXuDAlbG7lUXqud%2F17%2B5I1p%2FJGu%2F8K%2BXAhw3h%2FhYPtqxJ1NpAw8tDjDIYolx8EDGtlhftpwmV95M%2BkXgdvLEfV3lyVItavIInCU2fDcH%2BQdPAi4Ro5aMiiv%2Fha5f8EnzfqVMlc%2BpPdAv9HIsGuJD%2FXpAjPh%2BLBeG%2Bs0czwa%2FTf59FKJjHvrDQhLT5LEPesgVSmLjIz9tZjl2OkhmtaV03wuES0hAqypJUhPuAXrCZr60GDRWEoYwiT7%2B8UTbSfKS7eT936V8v9eItGCPkLsh6%2FV%2B5uI8%2BTTBEXd8Nfidy5tP6XiPmxnVVXVfSXeT9RPoKmg%2FoWl0DcHKWUe1iVzCkOX4Pl%2FrbCvX6enfBwlct9f9PRMOQQ%2FHKZA%2BPdnBHxIcjCJ%2B8nr%2FR6xq5h%2FJ9yekGhIJWpZ7xqHzf0iFZ8n1W%2BFrB1Ag%2FlygO%2B3Hvbl5Pb9QWmaafYcORaeG%2FzYnDpvFkh6EFdxnSpvXXVk%2FP8cRtJXCf68%2B9demSbP8krDlY%2Fh8r0CeNvj0Dov4j6DbgNynY%2BiBsaXKgXS6d39Bfv7%2FRuk%2F3V7u8iqIuyalv3l9PkwQUaChKxNvHUyNMpL5gXX6hMxKlum5EgJNAYFtui%2FZQ%2Fh1E%2BJFxneIlMuabWXsBsxAJSaDLlvX%2BT2nvoEFCiTW%2FDjHlGwY6WG2TRmNxIvx20UFlaeFrWT8%2FND963eewb%2FLBKf2Y9AVbOPtfituTH4Qjd%2FwR9XVsKN%2FwQ3o5mX%2FDZN31j6ev%2FbQ1tFuzY7J25WC00IaZ2rLft3QgiJ3jpDZxnl7CsiJd%2BlMrKWnKS2XdDyfVGFXbljxGO%2FDPh4jaeQQHPGVXaFX%2FQj4gp3jqvzxEl1Oiv0V2tSLvC4rHROQscFwOBrGBkun%2BX%2F2wQ29PXYZKELDD%2FAuYnRsRWw2iwNpuqwsO4zsN6Qy2aK%2F%2FBC6eI%2BpOuvc6hk5XNtK6%2BPmjanynND%2Fbjk73y%2Bf5fZiZIZPu98guEIods816jOgvmcee6SI3lpRkYsCk9pZfRCDaE8FhsEI0Z7x8PRkfH8LkxtSaiKCWki%2Bgxxl00qBIIPUmpf8aJ3ZOgOECxvT19%2Bo4s26N%2B3SxhnzI74rPmVXqY5e6Nr1gt1OQx7RrX%2F0CWZ59RhiHylHzEHe2pYTGnwQbZluNaaDdnGPN9WPpEz31U6h%2FTQ5ecyieP0dThvLOxfwEHqb2Kvsbp%2B%2BtXfgmLn9u92rSBhonXSdfzLADR%2Fk%2BPozMv%2FdCiybL5ffJC6HraNv3IIwW0694mTy5fEuz0hV5%2FaMQ%2FOVxH%2BpSzYx78Ld4pD3pcYq614aMCiPeL8OA9B4PnOHjQpfQL76xGAHs1Zi40v%2FnQ1qnr19fr1T1urUzS%2BgqQMZZmdV%2B%2BMS4%2F8RaZJJarL%2F7ufLs9z%2FvsTZjLt%2BDC9u03R%2BP%2BMcRDdXr069Yq38Vr0fW8t75WMdLzOUmbMvrEhVhNkJevIw%2F6qq3TA0wYw6xM2g0Pil7cvpzdegi9Xdrl%2BvSeitWWrAnq3dcmTx%2F64m%2Flba%2BWQVC%2Fun4fOKEemE506VmvgAAAKKEGaFoWqBX%2Bhb3zdPJdXV%2FrLuvXr9cu1jK3Xv1y%2FVzvxnq%2FXsnz%2F99fa1k%2B%2F%2F9UtBJXi9P2IJkn7Xu%2B%2B17terF116Fgo5iRjWXLfrF7OvUvCRA4IaOYsMSv%2F%2B%2B1zLH3TJfDxhhMseWldjnhlOOuqD2WDaeFl%2FWFvjo1zq5Ca9XP1K3WvV2vUOVeR7Vqtdd%2FSxVa37%2FV3ffffP3aBQt%2FoEIg9rY7Qq30ZBny2ozLvjWaro%2FkQVxCSj4PRjXd8Nzo%2F76GsFhLoqSU3wXJSaUK8IxeAJQblkQy71YFh%2BsS6Chfidq%2FG4dumrPCHQ8eyNfjpHWZxx%2FXU2PtPfbY7ltyDTQa0ngNSlsGj7CKCAHe0m4fR%2Bqi1yxX%2Bvdr0lrlVq8uq55bV6u6IpVxBzL4P9Ma4SRi4blBN%2F4QUuR8u6YVy%2F1BVqonx5ePL0ZcyI6l8mixgpHAMl8agVSzifDQrj2fhO95O1hcjghukE%2B3mtzXfo%2F9f%2Fr3hffS9XrFPdeuV3d%2FMtX6165flmU3nOIXz63%2Bz2m025dLvd8loWkXde4JVfnkv9X7X5d3613%2BtfS1J9WsX61TyoWYaOAosuiHZP0zIB2wO%2FQdAwd3EjGDgbANRHxKCLvb25sJn7y2kN2qwVN%2BNnGBzAbn1AJAxPBSxnq6HeGiAyBqm2GX%2F5fazkxPNcuPmQApTPWQjjx2T74%2F8np%2B%2B1%2BrklQ3C7k9eiPWK6av7WvoWTaGYu2xssmXzeysUKJtOTvA3I2T1E6zJispL%2BrYhusTDfwbfR83ofMV%2Fat1LGu1ruJ9WSbqw7WXxab1BAKtgXYEsw6HmTmVMF2zPMEvWn%2Fwycwg31ZiO%2F1ZGEI2Nj7BoFLLRlyTx9%2FfqMJe93d2dKVSs80TLQbhFq0z4GvVDNVoSyvUUXTSeuqpO1ldyXIMf0imzFDhnYMaQUJceepkxd18n6v2HPLFLzHhQoHZgVuD3mZfTVcEOK%2BLL%2Ft4XvGhhcymWZwgoPqz1GURrPrXDQmab9Y0bTw%2Frc0RLbRhoGoavuBf2IPe%2FwS%2BTKJGOGSf8nCLBM%2FhoQWbD31GkQ3wymkgZ6ijs6cGa%2BDGZee2e1%2BwggxY3jECEH94mbBsGVzWyF916PV334nfq%2BO%2BX613VasbQIw0JD8dqcmTgafDIIB4q93u7vAWUOWn%2BMK8UYhzdmEiPGkr26%2BvZj7rd4e0BxozpOCA5w3A%2BgUcpbwSqh%2BuPtykHk40gIzzwPyIqVKOETWVNQd%2Bl%2FL9VuH%2B3vnsV7QP2MHXTDM7H%2FU0ihsTP9%2FpxoEC%2FYLyl%2B9xW9%2Fm0rEZGr4JyEoQ1WCB5d%2Bs52%2FkH4fs4WYxhq%2Blwvo8fTQj5Pq7EM%2BNnDlm%2Fe%2B%2BHssVaI%2BCMjGUgio7y35YY4rFeMytcpkZZ%2F8EpT0H2%2FqPEE0OdP7c%2BFaamewkTGUBsIxKYxB23%2Fs5FNo4b6m573RypJ2sV%2BsHBGr%2FrKrRe%2BN9LfxfRPy75A0CMKDr3FGKDFGKOcgot%2Be56YVigxQGJcfgOh5fUPuZlDOfxDhoSwhkFrQNfhuTb61cb5QU7geG0Jw5VY7CIoQ4GfQJ26nrciz9f5Pd31BISifBp8OlSMCghwzI57CFd3r8oQIwb15Pb263akLe8nhqrQKhDvxuZEh60w4e5MptXj73UEInyTO%2FETwG0xaQX%2F%2FiBA%2Bf%2BkjL6B%2FDs9Y%2FZTaDfCQlTc%2FGauPfpD6BD7VozmxT%2FU6MezTvVpBWOsm5DYZz2Pka%2B2P495NO8q%2Fn39CXV6wVBDear%2BX5devV6vuworL9f9L%2BHhkEe9%2BbeZOX8Ej6ftAugNSqGjDVDmulL7%2Fgh4KcuzuKKz1bGTNJEvr%2BvVnHAwFNDB%2FiF7PXgh2yf%2FaE3bx3zc9L11AnqpBAfQpV5f8qxfqx7%2F%2B4vCXB41pPJ6vQS3%2BFuwQ%2FjbOn%2BG7f7VH6K8%2BSuE2hXQh35Ah7EeTva0KLdYb1mYUZfbIf%2B2CMSgDCZgrH27KUMmBrmPQcMBLn1aCarp%2FeyOrm7yeX3%2B6W3p856%2FaQRadw30br%2BTDkGv3e%2FuFyPG0GVdcq9CV5fG4BwiQpJGynSShZPf3wyaYMDaX7MqiPuLmgu2v3DUJ9hDUU1hpxm4H%2Fw5zmLNf7QdiifnKvjBVuM5AadZ8v1xEn6colH7zn%2FQrr2w15usN27%2F13gg5IR02acROoFw0nqX48OSCWCxcar6BR4h0iDAhNzBAl50%2B%2B8N82K%2FDvZf3eYuH1yBXSZ0d%2FwoIqZjzc5iT0UaTGjkxxfhuHFM7r8wudR5UbviCGo3adn%2BPPKdQd%2BKdcIVF1n5P781F78Fx322DLj9fizcF1PcoCpGdC%2FM0v1VklMdi3AmGgX8NCxlsoPac%2Fh1nP8MxCaGwp%2BvoxPWpErW5fVudFjEmTJ6t%2BsVesF%2Brn4Jd2V34uffVgqEWBi4mPxD2edzb7L%2Ffrr8pyqJk2OT98QKsFwhtZQwEVv63re%2FwTljVIe5MVSY%2FfgwOhSQ%2BC2nISI583DSL0V%2FhnhBh7dr6kx%2FeT2%2FohgJ39Ln%2F%2BE4bqJLD9y%2FTtIpKEMZexXISmmpqbKffL9u%2BMI%2F%2B8JzrN1gMiqhUv3Z49XF8m%2FQ%2BORJC%2B8CL8pw9vzAY%2Bml3%2BOmFISrX97a0zMgvc6%2FG86%2BggXbkHXhaJ0YEjZ%2Bc%2Fvr%2FhsaO4blQI3eaIvam3%2FmKq%2Fyyfr0bpvU4VerUTwJ90IjAnQL76PkhrqVR%2FzTQjucy%2F3uCyksSmtJXv7fSiSkloCcIeir5T18DdwGLvj%2FL%2F%2BKyTS3LiI1epvhvmb3NDW0NzX8n9%2Bps3f%2BFt6G3KY5VMx3GCL116UT%2FBJw5icvk9qb7BESCLkz4pGk5k%2FLn6EEQ0wrq6Nk6TVqZ3bvJ%2FRcahEUPu77e6eYzUQXjyvbu7u%2BO%2B5Pcx7lwhdIubu7u27fUdDSe7whq7WY3kr949ej4TW%2FvyzVX%2BXdV5YssdkM3Ocfl%2FVofF0p8LTEOBx6vDQiT0du%2B6h9cr8wgtP8VxoTlDwlxV5Iv1378KePmLQe%2BZd1bqcVHdthL%2F3uPe%2F8EZbSNFkpRftf%2FZaZktF9GY7%2FDFpVoh%2F3WkRI1X68Qe1LmGsGV%2FujQgZpj6U9E7X5DZWGAvk2WfqJHs%2F3vsmWkmfBDJi0u%2FETY0kuq%2FFawN%2FgLyklJ%2FXLyhETVhsnFb3eK6ishAjWoThu7v3FdQTE0OtPiXBDTtlyJeitPdRNeCIx7n6vD5T%2FQ6DhzLTqNeb4%2FC%2BlX2COlu5%2Bew%2Bjjh6SFrb4I%2FPBvzEj5x%2FwTlj4yXsWNRpM%2F%2FHefoT2MiR7H0ryG549XxUGwXyZMZ5%2B9coUICgkL6YqhAPJJ%2BaLV7BF1WX6GxS%2BvdosXclq1eid%2BImkYjnJFRb9XNv7EmwRmvdOfo71at%2Bii5KuX0OirXXPjyLHY%2Fb60T%2BMEBilRuO5D3j6BZQHgukfNM3%2Bh%2FXqrXUrdFTWisFk%2FrKvJSJHLxHzTWiZXNe2QIU7LeAAAAKeEGaFwXKBXLaFsivV%2B1ftYpPV3612r8XwIP6xe133xPX9df6%2Bd169Vq83rV0twf8B9CfyqW6N6YEheAheWM7WDIQGyhgIeNcOAxQVXQO5cF2Kf6V%2FiGvBkYXsG5ktHiXbI%2BS0NerVztWlv9bBy3fgwEq%2F6vLd4kehRQfgqkv4JXi898L%2BKgs0RF%2FnQYznCoKNBUFGhYdGjQHENmjmSRfYX%2Bg%2F4cQvLhxDZoBxHElsHBfNLA4CqElh5MkyjCOS4pEobafrCyZAQESUJupDvpTWDkgO80B1zQHXNALb2NtpvoyUe8T84F0g6Qq2ptFuX7sOsF8MWNkAepacxJvjtAflOJ2fvkq2wZuycf6Xw%2BcAi0FbBagYF4rBn8Yk80QgACYR7AgACAVjfCNULGXCS4NkvrhKBdZ4gCwiBccMJGzA6GvYOJkhh4t2oNi8MvaUMg9c9I%2B%2Fq5Jf69KK69Xk9cpOlbtcq9fFrv%2Bw0ILy9ReJ222238IIRV3aa%2BHEWA%2F%2F6eTUuvbb6ZNrFlCBApnVeVJQvku4epqKemvNOqwbAiY4aUXlVPa9ZknxBf1VIkAQFDg9Ytie2aKtu3gUQQgb2NysmjeR7Cq1kvF1q4HYgNzu9bffAe4qCVW8I9xU3%2BBLRb3uklwzQnuBXwktX%2Fwl8lez%2BWiVerq1dd2K%2F1cv1c4nJ7FoQ4S75pSCt376ql8J5c9CYpRy3r1iviLuq%2BdXJrVysM0d2XwkzyMTCgSAfu4LK%2BZirET6pEbeZTeSLErMKnLBM2BSVwLzFOFIPXBSnRZ%2B3zQiHyQjZMFgu1OJhQ8kwWBiwCXQF1uZIAEOUvPOWSz4xTFdNssf7%2BN39VB38nTVdWgjV9rVVRF%2Fr3uvSX78mjy8lEfL5LSQtgnCBwfimAliVUfMIP8lEOW9cTg7mPfvuxD3v6Hym6Vwr6Trr1gm9ak9XnWJI40RuKuBR0UCgSD6ZfcSBZXcPiXj47T2SqvrbjHfFFYGXEcO8OIbl6CEoLwwjLcNFV4388Eu4Y4MmQipNllZ%2BOYGYf%2BKviTot3qRjCQzo6xk4j2BgkG5n06bzVjHTgZUpbUpNIhN1KaZ%2BO2LYCAvV7e3cJehrJMmua7vkn9EMeZXmNjwID7PXDCJBo5%2B%2BwTysWpvlN4h9H1vyda4KjHpi%2FDSWsir%2BeQVrRRLC6p%2BWT79cR3ET5QZ6bSUHe8pt0SPYYu6MlA4zRxNMG6S%2FsFlg4T8UkUDfcZ8ymgZaG59iZiCwdhqF9GJUJhLPd3ivvtHe9Je3g414CEF0vhbWDAQGwgCgU73c3OYgoKHPs%2F4Ji4rckB0WiIvr6O5ZPL%2BjQHbiGakFT2CIkCslYbdxkED1bOJXzq48hdVZSuK3a%2BCckkLC46mXfjZxkfCFRQVrcgtupZMIKaTh984UMSUJ8dDaSVQyuBfX6nTbmgoJB1WxnCxunh%2BGOHAVCVhPIbxVfxnvnYIizE3hwcoi%2FHyyupIiRls7IgaMdiSxrxnhe%2FR%2BqvuoIi%2F12kh4f1IM%2Fz04qi9QIg%2FFAsFXh5u20SGfNKV5qDAJcEsUGJBxeuUR%2BvqzoiBmT06%2FsUeAYe178v7CduWDQOzGMvYWKiGwOBJTivUKINKhB0jogxz%2Bnfb%2Bq1C5npW6HIu%2BhxxM%2FlBCJCNhS1Htl%2FbvBLPZxiW4bdJA06tywqIhC3d7nxBOfi1y%2Bd9YZljzae3SUHMf9lYiDb0KlsmjOy2D7cr3drLtCfVatxfd137qu%2FVvn08T4EPvWfdJH9hAcfz%2BdgR9gcMw5iuZbCBUcIfMpdx3jwmPLnYvNTQZPAOu4KSrwRlfUeDC3f6Dlg4ccb1JTir%2Fas99WvYJecgvlprbl13su9W0Lw4i8l4aH2ctNYbvdlfGSy1KH7icT90W92tdrVUdxl31AnFVjfYjmllB3vkaOJVibD6WL%2FL6f2U0bufZrpP2I8tOKz5vT4XPdvu6%2FaNSh%2FF8%2BaFKo%2BCmhls%2FJVkYkYkHptA9Er71v8FRBrxi10upu25Cqgx5qQWr%2FWX9WxcWfV4Ktlg737tXDRhmI%2BromGPf%2FKewbLrEcX33QqB%2B%2B%2BWiXX2CSHZqdBlJxj8pcmLd5%2Bv4djxS4en6GKvkq8hN3SpMEXit9fYug8%2F40XUnvL%2BG4cXG%2Bmo1%2BxQwnduTp62bl4YJMewSHd1sZPNf%2B%2BwX52NjoERdfjg%2BRUVPeTw%2FiSBBW%2FtsVCpyxZTYH8RPPHa%2BhsJoRg9jyTf3p8E4tqFn1mNv%2Ft4Lni31hgxyVmAMeuTXX2qkzMQW551anCASIvl%2B%2FJEmfRlkhT44otpm3thcSUaMS49jr5KDEr%2ByXu%2FDYnFcRQzk9P%2Ba%2Bfc3Ya1gQEH3K9fh1OH5PruskxC8aBJp5A2VWGeEJ3ERH8ntu%2F32Ykq1%2Fh46cYplBAUupb1H7EFR%2F1gmsLAy2KFxv93o7IYKvNzOIfhPjC9M39gg0oR8LUD7LGtj3z4XCtyzCVQOFa0y3IaH2XzkVaRgP%2F7BPwEj9zO7QEe9PrTzbttcrTKPi19jyWhT6avk2Q1YtGugHqUoNYD3nLRuXyetcfAdU%2Bezntg78AZp03DfS6%2FCfTdU27%2FKfF6egwWLVECnqdCz4xCs86h6dHDOrk8%2Be8FA06G2zs5cpk1nX4Ra1UqJF%2BrfrKrlVvdKPJu4xKjhJMx%2BK8C2JsM2pjKkcKcdJb7JGqTqt78KlqyWNUsYM0Op9E1Fr990FOdqH4%2FVva8dM84tlfVl%2Fq8Ru%2BVi%2FaHGRLw6FwpGN41RS%2FJL44xEf3HKsaMajdXzpBTS2l%2BX7i2SQRFb%2B760Jwoe7u98If49NqjrfIyhC5MKzGW3B%2BxlxLr1GUoGNiY22OtBMdTjKZnUXwdGgq1T9BPMXNQRw4594dCIuJNBJykJ4PMmYdzoSL1S8U8TwX6Fiyy407Np61y8bk%2FF91notTX%2BQ2TGaVWHM4gMeB%2FW1Gzz9fZc3MrDLfvsEZXtbDf65b7wQlB7p6rUERuc0WiKnJ7iN7av%2BcjnJoRedfc6kFxodf5UEc%2BbWcQcs%2FoEJMtNaZFCJjdDWQghBO6%2BVGy0n4fZJ75JX%2BUgiPRBKrfm6P6iLpLsOzCpXhii%2B%2B8kQhBDzgnkmGw2HcO5fqCri4nmJ4bBHDuffhGkSFRBwU8TxdmS2Sl%2F9HCInPtuJeu7y%2Bi%2FKP9UOIfNiTM%2BmMnyOrNE8esWPVE%2F13ZhEbpncb4IxZxpm18HdP2%2BSRIK1J5ZLNEYyRP5I8kQTdn0CHfS%2F75rg686DGESyYTOnFTQa%2FhUTnUXaTMLLDHmvy332OEFltGObSVqtcFHB1U6RiUVZZCO6f4Uu3J8S2%2BKMQOYUcuvsIdtaijcXF0v0LeWhGb1er%2FVx9EYy%2F%2BoLvNirsKbxdWvSWT4%2F%2Fw%2Fvfd61jK5ahxNLgenohaAcX7Vb3j15X7glMfHwb4hIxXSP%2Fb6LH%2F2YOa61l5M%2FhEkH2aYHOP3G5y3%2BMFDKlzh39iZwMb5%2BamjJ%2BhAYMGConl8RETjAwEBZnNnJnL5sgaHCQEOCgoPLO81LpLr0Nr9a%2FXpPRZV6phN6IwEct3WaQUFHgcPgo%2F5LgqH8XH5PfG8MyGnwb50YAAAyvQZoXheoFf6Ft%2BrVasdq5%2BvyX16uI%2BXvv5Vaulf7WKvXr9XO1Z%2BrlT1d%2BpLteq1yq69al9a%2Blt0q19LXz%2Frl%2Buz21MmEtSoXen%2FCAgxuO44SQ03L8VYmZDjSD8%2Ffr8zjhXskiaxFQaZFW4TGNQtlpNRcEhC0HB3%2Fu%2BEtDXrAg65FYq1r9dYpcV4rfxXa1%2BrF2tScQtfrX0tXf612tbQWwmL8eJDgzBI9MgUXUzN9Imp1340oLN0TLP2DqvcuWNYs%2BCCyjTPy4YjuONRu5Yy%2FkNGry%2Bcao2FyAg1seOsgWI7qC2YkwlkqEBGQ26T9Bg8%2B16SsYP9E0Pfl%2B8OsFKDHwGKtk7OQPCTeM5QfFG1HuT8Y%2BtcpYes7hwaLe8HYkSxhlzv%2BLd4eQJ0c%2BcWQFyrbWmcCi%2FbT%2B1510yPX%2FxP0tVfa3dS2Mc7%2BoJcm%2FrV16sfrF3LdWrWT17y%2F0Kc%2BgQkWdz9XNYVQhAkkwGUR%2BPr4gaUXUUxdXF1Jvi%2B4uLpB0jGUNVk1NONsVfCsKWlFxdnLJnxcXxcvUXUaUMVeJqCaJHHenukPUEN94Oq6W2%2F39yctSoTXdctWpE%2FVupayfn%2FJ%2FfzdX5hi1%2FJP%2FrGCIZZ3f5Wcik0xn%2Br4m%2Blu0LqvW6Tie%2B%2Bnl%2Btn71uU%3D&media_id=1254206535166763008&segment_index=9" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:59 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:59 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_FKN6UNo2azwUZ7xsIpM3Mw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:59 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111917305368; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:59 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "be6cc1c217b6c183817310b2812dbb0a", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19943", - "x-rate-limit-reset": "1587864356", - "x-response-time": "31", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00bf3b38007b18c3", - "x-tsa-request-body-time": "97", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"xZbNPBG2NUIdTAml7fKlcdv1v1I%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=hQZBMkeyRflrfqmQfzKZnF3lgu0GW1SpAMgO3TRLL4VfZAYBTpMWB%2BHebIj2QleGw2PwqepJzLkeWqen324rQsNobXRfy8vVwk89%2FEyjl9%2BtS1drF6qnb83jK2DE%2FjhHe8QsFggpEr9QcHmij0Nm9sOcHv1AudgMeyfX1bEM9qKgmfc3oI5KVtS%2BvR1q4udTCM7xDl45UN7m%2BBKLzebslDeletBV2X87K0t5f0%2FD8eKyLAGjNT6UKepmjXJ%2BFjXJ3drwf0%2FtBjloWmD3g74yGK%2Fie9RpI0QbVLqDtTP6WEI0vhp0nk1rQqI%2Bz5%2FTEy4OsuDVCRjA1utP8KUklMrmC3FdCvFc9oTqrnuvVsJdei9S71aDhklGREkJsgrwJ945y%2BXyd2g53RO%2F0mjDqg4XviOouMLfk93u%2FsExzEQ%2FPr1pFw965fX1Cph3SBdf5f6Pi%2BWr779wprVRDXFkoEOdaLRgv0CH2iWX%2BvBbxLBA7vMYbHlZ%2Bvjnsy%2BwgJ86TlwQcfhl5EaYSZyDNWMNX%2FmOk5PNbvBNFQbBj%2FFQSvD9tS4Nzrk9H67W3uvd161%2BtelWq1cHusG0F4WKTVZfkRoUGwSEEDhcEg8tmRVJ9vsjQL%2B2ceLq6rjhjw2mUBSfRUddByRRYFW3CJi%2FXSLi8ZL3wvXD%2BlaXnRrw4NYYUsRGpPaS%2Bb%2Fz9rocN9ORnxovGxYFyuCgK52g7dQ28DUUpXr6JYRg%2FyVfqwYJxG6k%2BVqvKBDJvdqo3dISeqdq7Ck%2B1rsKl3dJDdDX4zcKZp%2FBISVhGBXY0V2z1CEGciRPFNen%2F4JLx7%2FQGQ0IDJ9ObnhPmJmoQMFIfQd6kRSDgkEd5BcX3DHEowQzPluJlJLgheuahY6idDbglKNsnz6lyQlBtWgra%2Fx8ndgyKg4o49ULS%2F9fsnNgqulFE%2Bv%2F9H3LeC2GR5Kqq1gbAiTrjwePwRicv14DFNvEoWFwoKcV3FGKDcVi8H23dA4sQt36YKooMUbydVemfnEDch9NZxaQcPOLV%2FYeJStkEQ%2BghOnnBI8GfXNG%2FWuLn8n7q6jcGm2gsPz%2FTQYYfeMaChPEBbLrQvVgpJb6bZ7%2FgqKHU88rhnAp%2Fzf0YC%2FQr5GQ7r3P4P0aX4sTe%2B75w0aeigdtMpmjK%2BZf7tsOnCdrvGWnb%2Fvyi2VeXHsTsdiP5rFvGW6O8nx27hXRoyG3hq3HX7DDafP%2FCogJJ9GNc9v6%2FWPxPk%2FFJ7DMVpvHzV6FaJPrYyr1PhrYOemEK7JFC0%2F2GuayEVH2aBnf%2F8K2bNR46Sxks9wP9GyL%2F2cSv8Yv69Xk9eiH%2Br5fX6%2FIMd%2B8SpVTr2hD%2FQ04Ifp0oxd0zQiZlVmGBhvgheXvu3FRJoi39%2Fh0oeafBr5w%2FzWSHWzcv6jIz01QxHC5puYh5Pn%2FDVBSkyB5WGUzjKX%2FTBCUowQWwZ%2F2ZbelkO6v%2BYzSCHUw%2Bn1w7RNd82GzrXHAxiBRx2caa%2BXlDdqaiNfykjbaVpHufwifZmkOzlb%2B2Ge06hwQYxSLe4m2PmsbV6QpjP56%2FqRG7P%2FyFtFSFXEX2iv%2BuX6%2B5BHvn08IeQR9nGMDK2oowJD%2Fh4ofQkqCUjEsatcw7FUfW5vbB6NMZ96f1rZS8ZEL6QOGx8QHU4gJFDA6C%2B7r1Ct41hPd7PdS4ITP92T6gkPbNbkrH5d5aXeFY6FmpWRr5W%2BhSRWlNA%2FNf0qoXJk8OpIQgfbTKtUEPxzJzCIy0i9OEeT3qrt30pPb9ScsMn7%2BoIpCZhi39k%2B8mnD9FYQzJ3FYdQ36g3pCD%2BZynCAyqQkdf%2FDBV4Pca07P8HdF9ns%2FgjbH7XiLqXv4n4r339WvzytmTv0v%2FwUGNkmMCsGaKoLXaug2VBvARCDhlFyDy89NQgeHa09VeidoplDZSh%2BHYuB1wxbX%2F2YuMnj%2BYvL7nwRCGt8FU%2FZBShMRwTyfijlJgnKmJYT4WH495C%2B3oLi2HDK%2FjDCr07PBWwl4SHg0%2FXqCA3GWo6y0k%2FxAhqMShn6xgwKu4UO7341tdtTq%2Fl9O6SDZkvRmLejB%2FX7cZ%2F3yYXEjz67xovn1%2BImvWHprHyFju7l%2BM03%2FYz1Dx08bPTD%2BindwEJqRXkeqhOovvaFfXfdCt3Fc1OXyd3Hau4uL8W%2FcRvSRv1%2BGTZuKM4cIOWCOGGO6pDB79vau1pKUpWL6dsOEDSLg9QCr6qx%2BbuNiP6J%2Fd7kwxI2tERbqFRJE0K%2Ff4K8uRcbedR%2B5r7n%2F9%2BmiHnyfH1gggmHhw0OoJWfuryqede8gYQxl2bBv9hwk0Pqa2nYJtvLfk%2BuuwxH%2FGvGK%2B4Ss0eFNC2UkjL0h5nRWGKYaU8YPyqPXSCPXmcf%2BT97uwuRMvp04TP7e22764W%2F%2F1%2BM1wnlZ6xK8knZEoBiLkDKg43IZvdzbfaWvN7tvFKpKH7EJrovfzqr7cf1MQcSzN8q%2FkzF%2BJvMtO7Y%2BKj1pJh7lWao2dUUhNG25UyGt9nbY8pYc5Vb369oMTppnNUIXp8Zb5DX%2FQKEnDCUv%2ByqLG4UMVF%2B1Lf7u%2B%2B6rkW9q%2B9UkZ%2FL7rzUtqT%2B1tILxhsdmzJvr5gi5ZLCy%2BC7W7BMfHTKDL5FWmCe7goxmSmTKCOv2g3Zvp15Tg08saT4ICyJX90NYZflHlzSjbf%2FUbNroHvOan8AkrrqxWJzxrSxVnNrMgjyfPfm1o%2BkCnDZI441pMX4%2BttNnTzFvtMURiHTMnwevvnBGLPD4lVpKIPM8BLtwFLnjZnX8B%2B9jfkCJnHU1AxXVO4uNlm90x4fPocZjoUthCSqcwUv4itZ28wXfZZ%2FP5f0cvH24XM%2Bd3ZxuU0jezIoQLDbplw3L9bML%2Fdabn2%2FWixIyhxhVz5V9u7ur%2FY7OO3rSMsuI6bsf8JH8Tw9ftDfuCsImnILNVl%2F2JQnT4s620a0ib4u7R24Wlr067V5Lon6X%2BKFPOGA48Cp6aS%2BxpQTl70v5aU0EqeXLNnzjqaJOtcEfPnq3FF0zVejRpLlc%2FP5Pz9%2FUKk5toYrLTXwpBTi0HJ7LVKEeW6V9mk9m4cJnyuMMyI2Nn19BIXQwhuR7itjavKsfTq3kIS43byFg93EyMBdxZHu8Haj30gibZjoaQa1xn0bCF%2By%2Ftdodx4hG%2Bn15o71gsdvW%2FcxGn6EYbOCFvlb%2BwS4NR1RG6t9RMF8BCeM9v8EpFayXqajb%2FNVeX%2B1UI6VohBXTS%2BijDkzt1L45Vu7e%2FphHdd6Grp7%2BLCXL3FbdqtjUwUEVOm3jfuit%2BXsQVPaJb%2Bin102LLd33S%2BWZItOrExXTbu1qfNfet7NuXOTxqnLBETlxvw0WVimuqT2X99qCjxvOCNodI%2FD8QIuGWm8CrHce8RSJ4Kv9yxHplL482uvqEY%2F40tfGCwvGeQkGRlvWYgxAs8mSTNnP2sQbNH%2FPyL4oxSlol3hEpyF4ZZbrrBFV%2Ft7bW%2BkmZov62Jx3cV7viHAf5X7q%2F9D803qdL9e%2BTuQnrq15PX6pmxDbL1v7DFqktMO%2FtfRjaL6%2FBDxW24%2BCYp%2F2l4P3CqZXs%2BK%2FrFef4lgiLDT3LjJ8GhET%2Fr%2BcYqVIm%2FiwtGffw19qfW42ibb9kBEbFVy1jFguIs4GM%2BGsB9onkUleHjCTlp6e6xO%2FQ%2B%2Fav%2Buu6y6tXqVXv179X9SWYjuy%2F%2F%2Bc1b3xF5O4O83VcSQY4hzqNBHcSw9YXOLaNFgBJBSUKBYKDYMBUKBY9BQLCQLBQbBcLBgLBcLBcKhEphcep1zv3%2B%2FNStyTOIzVZFKq84kVJ5D4ca5RqnW%2F5ijYn5r5%2FdB29tvXPRKfo5%2FPybu1E489m3UOclvr4fEgGgDwPqiuA2GVFtAOPOa%2F%2BH%2Bq%2F3aLvIAhrtIfh90CPw3ZAd3fvuXAfud2OevETCBhrbuhy7trwmtKWls0Igv2hUtIJRXqQUJawZfSLO6BdB7CUconVGU4bklB94R8m27PdDs7o5GofgTSgoIGfeD6O%2BotwuV2evBYVWe2iceXsUlVle%2BsYsmJBmlsz0mtOlerty20f1jmKJR72wDgASAUlCYWEgVCwaCyYCwkKoWCgWFAWDAXCoSEIzCwqs9%2FbITJl3UKSqopNQ1XsHs%2FWT7uY7a9824TwuSecwz1ZlowwbZ3%2FL3F1tVVu7KvPhBR2%2FzcKzTrBHOow09ZlLXL0L5Yvv%2Bo8DQvL%2Bx2YkFfBjfFtHc9ofm17Mzq%2FU7Z8AFru9HJiM3p%2Fe%2Bi%2Brzds6VZM77ECUJwv8AtWhL2ykQMCHfqeBE0BocFnWG%2BnXvpGgeSYNWrqEOa8CDn61voOiqIqHOumGJOxX1Gyc%2FG8H0PnAKP84pT3dJVEUhMU54HiK6J4RS2sPZfolPHaMu%2BK9rK9r%2F0ecDgARYUjCwUCwUCwUDAUCwUCykCwUCwUEwYCwYCwYC4iCIUCQRE%2BZL7330CZrdyoRWTcpqaq8vgfreEcrfjzQ9Py%2Fe5vybWf1z5F%2BpqKa8OwuxPSewrJk56fCxsOPhZ4AWaa6qX6bAOstQ17uAXah4tr31R5wCVZm4uM9L0OmaZ3izYiwh%2FG7V1YXHW6YdzPvdKVtP8DooMVw0mo0U5SCgIuIX1Gzvkq2Y1YgExYZd9Ng2tRZiriO5%2F%2Fi0UqUkmCTabsguv3IHfUMrPU5TTJjsS7m8%2FcfN9R4GPvOHhrCgI%2BSqzV7UBmQ562Cj507%2FFGh6FWlO%2FrnUOo4KzrZuLAwvF56g4AR4UkCwkCw4CwUCw0CwoC4WIgWEgWNAXCoSGI05y1%2Fp7VWu5dSl0WmMZKvUVc4H%2BsdY6f2%2FNE57E9YnWXwOerdalFnbNqu839c%2BPnt8kTUdIprQ1X6Oo2usbPxnkjZsWY6i8Gp5vdbuweiQeWfOAf%2FItjCKacSOjugrCgBTWHTPrv1SCxDQBaZZyuFJbX8s98giFxTQBbLWmCLPBJf13Vc75WtEpCFa6%2FdSyzBrnMM9%2FYxfmouA33enKiv%2FPzQTqMVB0oymXO2Vdhld8Oj6Hz4c3pccU1dBfH7kqa%2BewVugwYTBetTZM3o52SjRkOFvY18Jc6Wrl6pP99wOAASAUjCwUCYWCYUDAmJAWFAWDAWKgWCgmK4SCgRCQxC5q9b339%2BcveXKlXV0l4qqVq4NaH8ftL%2F3%2FwJx%2FPfC%2Fgr9GI%2BVdfSbxgJZdmrU1tc0%2BK8vy3%2B7QgWD1h5%2FXYvQ2mQkmwX6M1sAvxfkVSv4Wzkf6C7GiUOcNbNaEvGWgOU1T%2FycUFEGLh8xNXs5ZofzPT8Ob7r0Hq1fMeQ39kiLeiAHP9%2FNla6X716jgBRdSUsIc%2BA3%2BGCyY7wC9OuycLp9NFqUzBui3bA01a0AqjLtqx7Db4NcvsgFqUQo9ZCQz0c%2FnEqye7HbS493%2B2I6UBSjwIIgTNItImx%2F34zBwAR4UkEoUEwUDAWNAnCyVCgWCoUCwlCQRGQRCYXes67r1rW%2BOczhJVa3LilMasidD8t8r9D578T4Lpzxfifc%2F10Rp7aWo%2FG%2Bb5qX31%2FPhz8eghzQIaKvhFv%2F3A1ujqcpPDGu2tCy8g8lbXwpYHu42Kz4jYFFOLYd6She7mXMoPZXxACc5XucC9OHfec39ljP3ksz%2BgJjNRynIQA2ri9fZ3Yjy4JX%2BUziXlQPyPRXr9TwtxW0zSoWkKQawFrZ6hmqA6j3JV8%2BX6I7PmyFzTbabpvIwc%2Bvf9mVPBj8BmT8qBX3YEYTqP3KX%2FF9DvbPMBwEkFJAsFBGFhQFhwKhMGAsNAsQwqFAqFBqFwiIgiRN%2B3jnr8%2FftvTnrdyoElRVVxGWnQ5JyL9z%2BI%2FUa6i%2FSvOq0%2FihO%2Bqcygf29LE3zoiRvcebQ82Fr3L7KffASlPZdFdO3oyhT9B5sHGvS%2FFejzOQBS8vqubgUlw8u%2BhaDSRNvzMwOW9K%2F193pffzweXPluh0cTHpV9npR51yxm4DznftMZG3IfFlXH1HusWfGt3y%2Faq96zcu672tdesF8mep4cOPp9XWFyZJlPOaHRTlog%2BZgsaEGJMzs0pxUrN52xtMe0SvL%2BmgHAAAJiEGaGAYKBXV1V1oS7uvVv1r4nq%2B%2F%2Frv%2Fv%2Fv9X%2F%2F%2F%2F%2FVKvau7%2F9%2F%2FrrWq9FrtUq%2BtSUT8T%2BiO%2BL%2Bqm%2FpXrl6dWc%2FS3hoYFxHL3HjoNyrKJw4qvrBgKlDBAqxhLW2EShJkSW3JlSTz60Xf8BWHFL24l9C4q9aktXkwQbu6I%2BahXVJ0R8nOscoUvN%2BF3wKxpxi%2BzMZL%2BT1sa8TBJGzV3Kl%2BKh%2FmPHwxyoVZFS2TyR83Hn0%2B5NIla6xImQFhF%2FnY6zR8fQMH9B%2FQHVOlYE9GEkLO2ZfPw%2Bw3BRw1dUmrypIjTFmIvn8GKGlFAGfhcVlVEnIj39yj5qsb%2BG8kEQHhwhAVEHDIWup3jaEKpVP61wSFwWvhZMZbXhMgKNxfHqhPapg7oX317r3JdS9VfRmO%2FcP47zleidVzP%2B%2FX%2FyL1qx41Cq1SSDS6rzVVWq5gKGPS3Gf0pzE%2FEdJufWpP3PxU1GDSorfwgYbHi5eIDy8vdguXlNKZnkXpCSQOtZNFv5h6Cvr1Qa66UeBgegHKHhtGKgNHgb4ZsbC8SkgsVmbAdsdAUzvFM7xGYr%2FTRt%2FgVkGWm4Dvd%2B7vfDzOb5%2F%2F%2FBygYiCYWmmyhFcwK5m2VR3MtJY6X6rUjoq75K5v174SXLHYrn%2FXLaaoIhi19vBvlF9tTKaxB1x0eIFu7u7u9R0BUhURJnu6%2B0fejwre7vd18pk%2B%2BA5Ti1EGoN1%2FN37%2Fk9WfS5ScbeqsVfRK9Jy169ilr1cK%2FianXzfODA4UHQJg9%2BMQpsK2xLeGwY0qpZ6XRhlVom%2FUoee5hvLQQG4V4oGBDzTL%2Fw2BFPpN4K%2F9kBgECbBozNVQ96G9V5X2sGj4qxkSNM7%2FjEKQyXlU%2F7rRuC2i%2FL9%2FJQ5DcXhn%2Bve9WvVqsv1a7luq11ZPn8nwtMbPR%2BIlF4bnW6fiIJxkxrFzKF3bxKlEiHKNlIBP4iMBspwMjrKVgcpyiicUT1VaCPq9Y8T69N69%2BrSxKlvSFiuVjlyv1dv1GHkQR3yLI6neQgup095f9cITZgrx4IhTbmgU7vR%2FUYY%2Bbu0ZxfE8MZxxe9RTGEm2L9N2MGNGuhGpNjYaObxERqNpf1LJE%2Bup%2BaALVrckXiRORCe616XtWl9Xx3aIu37izcd9xj6CX1313HddZPp38QZtcn%2Fw%2BNEcMTXWmem79dsxqP%2FnqcKmRaf3O4aNntDYGBUFudJtP%2FUn0iZ1y%2B%2Fuawee79wjpEIYs0m2miXDv6eiSGtl%2BS7urR8pcGw8xbtaQNwgoY3gmMkCgduK3igMMg8IpFXxheL5qExUv1f4XoGUibX4IpbCdgqCVuKg2Ufx%2FwVUF46D3UKBK3ddXmX9yF%2BMP6SreGj%2FR5weo2rMq%2FbaSHhEYYpS9VaZ3hi2QpULps%2FzRyv84gwzFNdaiobWMvy%2BlGRAa3w%2F4SuTnoRFgf8T6abklCJo5bFY4b%2F6mvP%2FxZBqTVIKPL3%2BphfgiLV%2Fb%2FBFyXw9TkUppFLDyaovTcnp90KXw%2BQUWta34bCe8cgsESClXwHlglquq%2Fax5AutYoEYTEApJdWbvAXNu558fiew4KYVigDFAGoP0PoB3Gtdz%2FoonZko5gycl0f71%2BQaYNLjQgHQL4aJkU0up%2B%2FKsQcNL%2B%2FGAgT%2BGixdhDSy%2BG4klga2V9KGTHxvqsfGTmRRT6xV6KZeZd%2F4JTjRH997vyWRY%2FxBoIG8y0G31%2F5MoSjYgMv%2FXEbUvJXo7fq%2Fk%2B5hGqrBJIR38B1Egpu73fe7p11G21D6mLriAhts9%2FxXjQkuqyKE%2Fv0hJUKA81wHAOkd43H8v69GnMTBe%2Fxd3u%2B%2FyC43O%2F6Mw%2BLmsuZccUYrL4bLyTXB%2FhM%2F4I%2FCRhvxb9XPyG3a%2BrA3FfHfGfEV6PVX3XDHguNryfhAQKd93%2Fis5yU2H0SZvSO31unLI%2FXk7T9xBy4K7PggYW%2FP7u%2F8E%2BhysSqN68FWYYJySoeDIPM3xmhPXLL%2Fj2GYY7ojOV91%2FDex%2FwvDUq6B991cwyxMH%2F%2BCvWNxpaPzpvp18OTYwFqegWghW2EP%2FF%2BS9IdCBTcX89%2BivXrUrlpGfu%2FDE0aWQ1bU4myDSXZgmBIzqK0rkDXh9F3It46P314KD2qoalEdz8MlPK1Z%2FhXc%2BHBBWJUlfHBP8kH5BkdaeX8d8KnjuzUv3Y2iMExW%2FR0i%2B985exP%2F%2F9nbYmRAwPxZqIAMm31gCsKy1iovpWVkmZxKX%2FxEMGayAgWlt5N%2F4RobHf%2FkEsZx%2F%2BCKUxlY1p%2BX5L7rW%2FR2P16yfvyYaMWm3rDSItC%2F%2BJ5%2FeY7fhfH4BaxGkrreV%2F%2Fh07M9hhE47U%2BFP6j9%2F%2F%2FDNrUMgG6%2BMmyFyeCsRlzH4z6R8aQcqWQrh41lPKtAli0fVABLPqURnXpsWmSwHZEshWoNAU0LWwpl%2F5fLPR7GbgsXyWPaZwACtrozGXVmEwmvTxRST5%2FsP%2BL%2F%2FbHrvyX%2FED8ZZAO%2F6A7ksm%2BTWo6r%2Fd5awwv4K%2BElPJKSPqqwPX4lwvv%2BCsuPDPpQT%2Baoyw7NUJuXdfHby%2FDYvAsrp5Voiv4Ta8uSi5OLxT36txcvnMrBR8SKiX5fBIVWodlNMPl8s%2Fr34Vyr1P27qwzQPWdMtPozmvaEjSqLe6X5jY%2Fdeo%2BQR2QEr0ldL9bWOIH7n64NrUAprAm9bqWOTIq33oPWcjjMReWy3uM%2Buk1QulVQzZWhOEN3baCzjjbRL384QKhim57LuIWH3G1l%2FJvHY3xA%2Fv5f4awD8n13rhzktJc%2Bl37%2BT6BIJquUtor%2FS92vTeQUdLKk%2FP751Ft%2Fii6b8svgjpc%2BYV6LUvnEaX7U5ofIvwQi0GNGnVX6I9amMrB0fzca9Un5UCWAy3%2BdIGPMX66q0dnAvLWPuIM1rcmTX4T4nhsSXrLUFFWma6puZfVecFh46rx5aFy5d8svr3hGaz1Tu9u44v6H2rpZcSQ766UFBGpdVZ8wfoe36tL6tN4TM2xtpPuvJsb35yuIyY84xLNoh%2BG7Gfp6%2FZ4QbwJ2czn4fQwsFa8sn6399%2FirxhFu%2BRjxpn%2Bt8J7zU58l97JzWDD6eoNDUsTX2Xb%2F2Xu63IQG2p7ml3H3CzphD%2FEn%2B%2BEgQay%2BQrjCDYy8VvadIHvrqdt3gb2P%2BCvvbbMwKMZ3ymyJmcyyoW0Tc3kzETUqXhPu55UkvnIsY1T%2F%2Fdlv9FlZPr9eJtbzI52peWxx6Z7Wv9fvNT6kESpGu5fCRwYDArCQgWSEdr355frBIaDP9BWpLV%2B1y7Xu%2BE4h3y%2Biyievf%2BsE4nAAAAlOQZoYhioFf0hPfr1evfr1iNm7mtcrtTp%2BuVevr9alonl%2BKXuJ76%2F16T17q7Xqte%2BbFE9r369ilv17sOYh8QPOxY%2BJfxfgyMNFbivLUDzLxYMSPHX0nhtfyhVLa%2BAw2CQfGj8GqV1WaTgw6xHu1gSkFAch%2Fq5Z%2BlkJ9h3Af9OzmiW3EBRAwVXB60lODr1ngEsHkNOXctqx%2BvdEKW6K7XvVfV6t1TX1r3eIer7q8n5vgRQ34JwmLHXbJhP9YIwm4KIe1NmcGXoHDS%2B8yKuExOT7LCBQenBeUbFVhoI24bNtlNbNJHgRj7GLge6amWBEWmWo%2Bbus1aw6DgJkBBe7hquXW8fv1NCeCIwpRiTsLykbPt2JTVp2ID3gy8tpEdxWhn4HD0AwOUEl%2FB4PX1wKuu8dC3h%2FCooMFo8ve%2BQMhqG0xUfgzpCvqcMiAUXfu483F1l2cSBeAFwFrYg94EIqMPvdS93W6t%2BtWKWrr1af1yrpa6anV%2BkJGCrkVc8fL%2BEyDnW8FpgFKtdALRgwqq4s9cGZWGs%2BnNXhFBgg3E%2B5eWYpimKcY9x6w7mKoKf0zmj3Zvriv666SX3z5Aw4gPjw04BxtcmA0MMpn5j%2FrQ3L6%2BveHHkGi6Ngl0xHweBM53WcnDLl9SXshYoz6KXy8nUyFfPLi9T0KYsuDhXV5PH%2F7p8UCCCcVWta68hvpCe8B4AmV9ckmT4CH9U7d9S1fx9%2FrXfavV1VvSOUKDAR77ARGUzqjpTDD6%2BGE90EMmqejGPt0wSpkHIV2F4PpDll%2BWQemwpgDMFR42PFBeM%2FVMAONjZ1TbCQUwXvrjUiwKoqTA9nL%2F%2B3otck9SGt0aru16hWK1c3q0tEr1uif0SrXtsgxgoEI7%2BIZdl8bxcYxIoopA5g12pENVCqSZtGlH0f5EE%2Brde7v173Xu192pVeSvfa9Xr3fS45fX693Xr1%2BvSF%2Fdf0hJDwxwLN4xml7DBdGDG9hcj1OxihAWX4UBGGRQg9svaTCIgltzGzK4d4NBvizrGTITeSXCwLG1cZqCgA1iWCrnSM697SSrQmWK3Pdcq9dKvRPq9u%2Fvv8EQw3VKdPwQjXv17ksO2al6481EzveDw%2Bzbnzl9a8L6DOSvGGjQa6Q9O%2F0xkO20PySjfhzEtBmsBPGukMEIv8A8QYvy5smzDC87p1CHadHaPaO%2B69H6b%2Fk%2FVpLr16uJRe3gcgVgUAgOFcVvdJxR%2FAsIEl30qvBaJBEFwUCHiu3bMwlUvhoM4bClAtE5PANF0ARBC2IQOgIA%2BfavLmD5yD72%2BGuVj9GQkUbo0v2iwd9ir4rpWqfBJvbIX6s9wUEmY9z%2Fvy8PrHK5fkKNl0ufn0vghp52E2l5remRnTNjKGtFar%2FXv179ekwJYW1gEJAkAgBiLqLqqkz5gyCUiqqrX3jRWsGocDhATmcV4rFHftYkLhcUFOLi58EuM0L53WJHD3OOvPamAW%2BCswJZYAMHT4xx0G73TQkbJd5AF6%2BQXJXuvKRHjvl4VPjZp7s36Ngg2Q2%2Fr7%2FVuw4SrVfRGYq%2FBLBHaQ%2Bk7%2Bw072H4Uiykwwy8kN7nYp4ZMRWUHh8%2BXEn32%2FDNUXbbpvGFfSQMmVVviJ4ZYbTXwrxloRss7r%2Fa%2BkGF1%2Fr5vDf4jFL6aLF%2BrV1UavVzVfwh50LELVdV4JV485COK3e%2FBiNCk%3D&media_id=1254206535166763008&segment_index=10" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:59 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:59 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_T6e9\/VYEW96rnCdyNbk7YQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:59 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786111962776287; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:59 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "0187010dd5d3df9e9bc03ee15bc465e2", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19942", - "x-rate-limit-reset": "1587864356", - "x-response-time": "31", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "0099143e00f947ca", - "x-tsa-request-body-time": "63", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"IktNHEgIFCryrZKzCbTh4Ol%2BKiE%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=FYo3uK%2Br9xWRf4YgXWycYqms9x3LD4%2Fc%2FvsEZXfI1XXirxRisHvljLy3eEwQ5bu9ez40XJaa83RuvMXjUqtcwjjXtr37KtZb77WCeBN%2BGtdet0KIR37wLg3IYViv%2BE57nJD%2FZTTQRQgDqz18YEg9R%2Fm0AiGKhdlhzh%2F%2By6if%2Br35tpjFHRQyL5OD3j1eP5uq%2FDdVoNfbPzDP8EeMe7%2Fms6br1avRWJZe5V%2FwKj5PP%2F3qI%2BBHBACE72rfoVX6Jh%2Biz936EvXnMrcPqV2HcsGXwQi%2FwqI3Zjr4vVX2j07f%2FFC7jTXVBAjcvl%2F3wQEy%2Bjga2sAduyAxPuagISORyo0MmEo3k%2Fy%2F%2FECxDPgCrOKHx2kvPl%2FfyCZaP%2FEYbZbb0uPXvLc5Pn%2FkuvBDyWk9%2BCLe%2BXdeCI8NoNnpy%2FdwYF%2BvIY2deEc10Aw%2Byxyi5Y4yxXytizbaOxz5k%2FQocwnPDxAZtPDIJ2X3gAE1AoTA81hNlt9g3lfdlWYiI2AWdE0p18VfXqMulaT6q5tZ4VFEegFxhfVV2lD3TLmPKQ%2Fmsuv%2BbKSkqsv0ssowqVqaRlkFPpj6dlVohxn7eonVbuX66RRmWBphBj51TYPsl5PNSXorq%2FgonpoEKnPXDanxPXM%2Bmbi%2BsEY%2FAoJ1OCrqyyhpPv0R79e6WX0R78Nc%2FrQIb%2B9L%2F1lT1zX3L4StDMR93%2Bhbn7M1f8gi0OQryl9mZjksYRyqIBHG4%2BulOpPySaLgtRZapfXef669%2FjLscy3CRVdlgsqIHUkbyPV460%2FGHGEH4zczIxa0rfnNA7kbtEPRaj5L9MJIIzhArZywN4clKvS3wLdxay%2BQppbKMuzWgR1mtcPltBWr06efPmh%2FululFYr1GZcX%2FJgoit3d4lwV5eSGOKxXpB7%2Bv6Zt50UTdNp3XX0CPg1pVXfa9%2BvV691eEcR4SJY72BhZDQZ%2BsX4ZLebV%2ByHL1L5uUxb2sX4kolzm1Jv9Gwy%2B%2F4je9zIvuCXhxgXd2sX4simzyZ%2BCIWgYcajffmJRxh9S%2BuuHrvfjTyiR9PH19s2tR%2BwQGyjrTCmSoi9BvEtfGimqStpy7%2FyTGS0%2FFQisunvvpiq76KYEsC18MhGcwKe74D2p6ReYQZo%2BUYlwV%2BuXfNms9xV68%2BN0ujjD8Q4XKSV%2BXFEuOF9OX4ifUZt8e8u83v7vPt3vWLEWOzvgf67xX50YgnmO5ltD6qH5vIZ0Df9am9WHya215DQtyuPaJnvG%2FeSfXrq8hy8%2BHyslQRnxDlvOhBGj5pAfjnI%2B8qCRh8uFBlafh3zU4PLuxJuy%2FE4SFRAwzu6Tv21Tbd%2B9msXqk2bLP2h8eT1qK8EM9tbBeQh4bkJ5%2F5CzMZuVF1Zfc%2F2M3DeWrdyz19Yi4rnw%2BYP6awVGyGSH2A%2F6AAGSoCYCACwGgVygRlljewss1ThHFh2S%2FSGrgVQVDQd85cy53eOctaorUO7nqpUxX3Lk%2Fq369dq1erhWilvbiXhD1m%2FmDUQ%2FgAAADABBmhkGSgV9oW%2FdX3NavNanSa7uqlaW5Kq9arpar1qX1rq%2FWq4hXGkNl8v4Go4IBXLbiGlmIyiqFWi0wHp5IdA2AlhPrRN6TYVerA1MGpgwQL4Sh9Lp4oz5Zi0KOo493fUR3gfAQBs6ULu8JaQG%2FgdG3eDC%2B%2FoTFXS18SvfStVyjlevCHtYuuW1burk3Xv1Y%2FXsn7T%2BvZP4GMDLGwVg3MIWOygW%2F0uBHDYRNL5eLozzTblHrDgFUBsAQRt%2BHvNyx3ABkktgMVhMXvKovHnOpsDbidzlKC7D59KEB%2BfXY1h7NN8kykwvulEAfij%2BKD%2BAMhNPwyj2oDvQ5fAihsLoCGcEpBvSuLyWWO0H75GaaE%2FSqvFGZAzoHyQuOHX8eut1jHM9UvuNGDyHh3msG3jf%2Fki1bez9lDGXb1hEZQT7TT2YX%2B4IwwG5qbisFhiWn%2BCELAjLe5zFWhdfG936t2tXquf5f1Y7%2FVr9WKEK%2F1eqviaJ63%2BveLCoodW97Z3tnHyXWUjOTe1wGKBEDx13H6U7P3EW3FYrd6f%2FlNDfcQIGmFYlx7fl27viGg86DP8BoAj2iftw%2FrAjyCAQS3WK2wXaqAqa7j7DTnc4CIqLkNtMzQaXS4RUdsBMFpk0LZfxVzV1H%2F0CznBhSB7WullRpeQ0DyNfD5RPFFMnFNnS3u8iP1i1Y2vyQ1e8bAdlgIwWqo5TwJSke0J7HK9Sctesp%2FXpPUqVxVPl%2FX1YyteQ9LAS31AYMTXob1evS647%2FS%2BtTetVcn1MQjnRVWxTjApG%2BGsydLSqD5fwzun%2BWJ4wFUXida4GUvlSjeFMcjyKNTISuuwFnsXMj5cakzJe1HhqYCTMv%2F8Gv6ucV1RtF%2Bv%2F0EdV6vXre7r1l%2BtRG61k9ySdMWKMafekt48ZgmEY0cAkyTgBuKBrYKawtuX2u0EZeX3%2BtX6td93Da5d2%2Fpau7nu7Xv2yR8NDnZuQYpd0cWLZffXCAqc%2FKxHd%2FYwGJxqBj7m%2Brk%2BlJfEzUXRDpqY4B%2FudoCzF2Vfe3GXtCf%2Fa19rWK5yflV9UkR5S7urtnQoVhpllvvbDpNS5qg3PCi1FKGWcdQPDQen1X8rHzT15PTk6BEIDdRFWH4Mh3aHnt%2Fr3qGjJIoxy%2BgQaaX%2BKlp%2FZ89yfT5%2Fk%2Fn9cnx%2F7Nz1GZfX%2FaEtJ61W697r3xCtVrL9a8J%2B79e8DcQKG3fFd33m4vhvGwNRfA3Ccv8EYPwQmGiiarWAkFkTA%2BivieLqBI5BGk2C6CA2sVdC9MxHMo%2BcVBHuiZ%2BXgzH8j4yF9fNr6PV%2FsFfvDZbggGkn3tGw23obYcHZT4rye3%2BEirXJq%2Bw4TgdTpl43j9iyD9Pwy7zTdj4QLsEHbkdyehj9O%2FwRkGbtBlFUmEpj4Lyz1802DWMSiV%2Fsf7BESTsFxSWi1dJwQ9Xyd3S1gIcE3glBOMqLqqqqqqqq0qwWgjBKEgkIPj8mxa6wRh8DQJET4JcP4fwS4JHD%2BVS%2BC1hQaBDCwEUYNI82Lk0BevueJcGuzFchj8H08Tqg0xYf4GIYCpQPMCUK2AAIAFFwfvAqsAUAZxOKFmbZ3%2BUbzf%2F8nz2%2BCUX5fxoPoaVvpMKG%2FJ9qquINbSt0b1LiD47EYeamTmmf9TsoJBGKMuOLlr3FFcHZyZFlJkWZMVZlbuJLQ4trZoWjPHzvPQ5j3v5P7d9mVFe%2FV4M5kn09k5LSregS8xFKVSj8uc4l62TjZ4zr%2Fie1bHd%2B69a%2FV%2Fl671V6wjy%2FgoAhwwEgR%2BG%2B8xAMKCYQiu0uK6w%2BgRCxFa3frcPAiBTHKN4a1nvKYghvLxHgy6bZ8pYB%2Fn0oeg6dHA%2B8TDUBc9dAn3su86u6niCl9lQY1pJ%2Bf4%2BWnPmWTKFERGFTuGdqlLjXfyeJf%2BilDhcP1d5FeGW2Pk%2FaKXobp1BkOhYDHh8sAG5c6IHjwcP5m8qtXqqf0qoQJiR8t969k3frdUevUvJCpVi9%2Bfb6I7lOVfGLmx9YvNRviNaorVKvVAVOT068gjVaisVBD1Xsn5QKhuaINxDkuAfBqHMANfQKr4AOAunoPcPYYSDU62kNcrkF6h0%2BnXkRYaUaxyUR0foP3NjXxt5vPQteFoKYSF4ROH8GqB75RVZQUNi0F93rh%2BFfGcItM6TC2UBL8M9kqZ%2F1EVVSYX%2F8hV1%2BCfe%2FKo17k7M95wuTG6VK0GKLTNT2gOd%2FyfPikCWLO9qlZs5PD90Zz8EHG13fVoPq3SIa%2FqSEDgAmmL2%2BzcP2kmvi32itP1%2Br1n3CqP3DP5hTvpXRhuXPwRCnGQeA1owWEv1%2BECUdSDgequzbHmsv0t0HywgxLKimARIh4EVY1vuqnDBZsn%2BS9wRypIH2Ijl%2BYrTGVjl95JJfwuTTNxxM5XoNP9zUH7n8E3NkaGh0k93TIm%2BhNBsgiZGdm4Kjtk79n7TRBND4wysqQlz7FHT00Ajw6dwwSgwAcm%2FiXj%2F5UUwnR%2BcHESZ7jBHfrLQPZIfyfrXdBgROu2QCt9RsX6kaLUUXrUOScf9hcSTCmeANmtZ%2Bxd9fhNg7N9jqL5xK%2B8v7%2BIlou%2FR2rm7yfn%2FdYTqky7vn3N0KEMDw6IgO%2FPs9feMiT9lKdJPRDovBcSAWNAiFEcYF976bUV4zS1iM0u3BKJFuz8IqBlf7d4muMKM3nPNvo%2Bt7BaYIF6Rbb6t0PYV%2BE7hqJAiTlh7C%2BOlmPiCxLbvAdWh0iMBvCv7CRkx0TPqgibWIGiRQeMZNcDHvFItFR7qEI188ggzhx3DIBe5pd%2BcFkj1kdm0qeyw%2Fg%2Bp1i3%2FUJGMKDu1bzPuvCFV0ynrvn%2FfKW8tJBg5Th%2BqT99xA8ec0S4JkogvxVDyjmTMD9r9QpZ88BD7YUphfdT%2FdEEeHr8XGPOusoq3ZBr2CMfgf3nmJjJN16biOR73kT5BTDY2DKa%2BJ11hCbB95v%2BF5sCXva2XHnxNCJYc7q4Y%2Fe3hYrb6YY64DQKgrWEad26%2F%2BJ3PPu1%2BEbVXP7dVl3uXJ6Xz1rNn3vQKZ2W9s5YOx7aFTC51r8E5B64tGGd%2BI%2Bvsnr%2F9mPcMM%2BxVK5BSICH5GC3u%2BX7gp4MSAtrR5bTpHlNp6IETsiTQO8g59Ilf8WsGp1%2Fy1o5EMI4r9NVnaYpm4zK7kM1FZ7vkINHFejL1yB%2Flt2RBx8SlkLPnRwhiqajr8A79vBcUqjd%2BuScZHbgecHAjuNT6Q0yduK6sVyze%2FnifSSd38s3d%2F61sWLpIj2vX2taf6l79Xv0WpP9fUohJLv8EF6fLNqcIBAJcZZp8aggCsNX4P8v1%2BHfLkv0BS6jMitEyzHEL%2Fbjxz%2F4KClSDuZ7vydhJ%2Fb7%2BpMkf4gpaqTb2RfXnMrtuVP6lz%2B25%2F%2B%2FwRHw6lF9e7IpLH%2FcVaa4IQdMJvWWoRM3GNDE6ECYvNP0h7zi8ZEksPWVtEjrXVh1plfu7sw61d%2BxgjRngVTpvyy5QfXFYJZC17Kogn4pq9liqkfeGI8x8FbLVRRWXC0y1T51wioKJCSWaz39l%2BF0adRl37UcqFUJcRxCu%2BsQLoKCa6kwfY5lerlxparYWNeU%2By%2BJ%2FhG0bAUmtRc%2FPHP3l4RqqrBhGstr6fuKUOixZkll0IgvsHZ3dJLc16GvXr0%2Fgi8NRv9v2wSmQtSWxDJMH4e7m%2FwlsxyTd%2B7cFZZGaWJUUTRbR24ejGT175AvEP9je486t2W1v6glyR23Oz9e%2FBJ5IuF5vBiqfCO8dZEXsZLR7fnvd4gxqB5iOPeYF5JnWkliOaalD4KXVXR%2BKkJAxQxOwgZ2j80EPxfqxvhUXWjB6zlyT%2B5ByJKJzD4022tKIEPbOF%2BSC8O2pbrhE0Zc93TflltNA%2FwfZ6HG0MLVd8%2BPE3P0Cf3c%2BWFvj9Iv0PavV69cpPXr9X%2FRdVuCIxaGvuOsq7feu7XXqYr6616oElXrU98S7%2FhcgilHN4XBd7eJc3NJpoSxqI4KtSDXhYfWLuNjqoa%2Fgb12D7H4Wcmxyy61%2FL4UMFAqG4M4KhCmliB%2FAK2WOZ3paiN2%2FALQWCkaGdKovWCb2F56ryLpIzEkqFtjld7ua%2B%2F1erq3e9X3zX6v9zF%2FfyFxk7%2FUgUl%2FyIRbn8Q0tAhCDDQmbGtMZ835MgAAA29QZoZhmoFf6FtfL%2FJ6vV361%2BtRaeqvta%2BlY%2FWpPV1WtV%2FzfSv8StfG161fq8lFKl3gWmBmYKBVK5cludM2PixADO7L48%2B8tRbFWFZVzDn2dmgzXHtY36BkggPMxAmQGq1wvV0iCxjQ%2FfnJEz9YAUYC1huDG9sJgGK0dqnX1uxn0DRDjmNJnq9EfuWVFscatUEn9%2FX4lUYr61%2BuUuhdUyI1XJ61333wCRDeYPXVdVA44ZfL31ekJQgLfED1WF5iYzFYDFem9uPp1ZuIwA21LOx3VezatUtgdGoGigttslH541rZgsYZxrJ5yCCgCHwfuM8HbEeIcLlg%2FItZKtxTr3L4ehYgLygjYfr3uB8ajMP7aZBok0C%2BT5NNrccvjzBEZJhik0e2e3j3pxFM%2B%2F8eMBhy4jcVTQnjI3n%2F%2BFQoHbvCjS%2BfDy2U7KZ9b%2F4RCwevt3fd3v9Ob0KWqrnsch9%2B6qqk6quvVjuTm78COJ3gjCbMLGW7a1y%2FQ0KukCUrTaeknSqaq3R4fJ0DDS8AxyQwic7CSQwiHyY5wVRTBqN8Fo%2FheGRZBoWEXbisViB7MxahUvGu8PPobRW%2F%2FJumngmjrxHfOZhBYMpCWshkR20fT3Zo%2F%2F6Bb7mRVtD0vKZGZcn8IlHwpBCeYAQkzEYZlciFisNd%2FFgqyk%2Ff%2BEBSyf8n3uwQTXn%2B8N%2Fff%2Bhfvdeq%2FY28TWKT17Hc6q9e%2BWrmuTdWrBNsnqcYGhC0PHFkBxrWYL81wprEufmiGJAa9L52t41IgUwJj9bDP0hUdDitLxpzx1fGj7YJUb6t8sbpgNohjD1Jn%2BC3Juh7zS161%2Br%2Fq3xdXVrV%2BtV6vS8sWK5r2Y81vDQiJKN1srWEO8IyIFI5a65%2FlZW%2B6%2F0Nr4mrv1r9avdaq5vWr9cpOX4ldcJQKB2HB5%2FA5hqSAA6FgDJ1TJ6hTg94DIfrko4zwAcJxUt9aZvGS1%2BMFszpdOz%2BGlTGGEcLIHe%2FmIvRxUH1BXos9sVhC70AN20T4uiJ1FrZ%2FBjUNjbODsNnzjBGSMWLP7Y%2B01kuFBUPJwSZTHrTmwzueHWnAHNbN9U%2B89IE2bKpNvyO6qun%2FQmYiPWr9ak9er0V7v9E7l3ojFBs3CUvzGLbgRNZ2df%2BF4ceCxgeB44%2BDkrEeTisVpS%2FYIBr%2BTyVLwQkdipb8WqsNEE8clEcUJlVHUixb723HDwxPoWe4HwGD8l5iRctXJUC2Wb%2F4ITEnKf34%2FjV6LqStFIOQ5l%2FJdRmo9NKOCEoRB57B57QVXMgxDrchz00MdZW4QHc4cu24%2F9Jtgg5SZ4Po82Vl0iv%2BT%2BMYnwhxl6QHEkjQNg0yD%2FtC3Br7RH7r11La1vA0BsDUXwMwsFAh9pdrtYCYuXtNcC8LJqq3ghH4wqqqqq1XF1CwFUwTZdnIC%2FMPGRWMj6SCAzTi1pjiELTuVi%2B%2B%2B3Kg9OOjIYDTlkh2PXCdPcD6EzEtB7oBao9V4Dfb6g9PcX%2FwuQw8EnCqBkHAZ3gPrSiRHF9df6p4wU4Bp1%2BX%2FDFyI6%2BVewOq4QlLOUoBj4JC8ZIJWPP4ZOVCu0MTicSN6NNynl%2F%2FBEda%2Fa%2BwQGjbLeJcLTLRCRS%2BOX8OMs6tfsnATb1b1zX%2FknrjNj%2BxVF9S7nvSV4VKUiUdp8muQk%2FCksv9vvGoYgy8YPw0S6OpTVsdu%2FxFC3k9Ef3V%2B79ayeX%2FMtBgAgIEgl6i9YZgEOA4gpMKMVtNOfBJw8OKouL9rBOJwSkPcLZ%2FB2x0qmotYPQyPBUCAm4Jv3PEgOB8FhD%2FL%2Bn5iJcux5oTgv4JQ0FShYAA0prAFAiLChn4kamYo%2BSE7ENTu%2F6MXxRbXnQ%2F8NC4VRBXoz37h5JZHdOH8EBIECD4ElnoHHn5QIFt5vcZQwGDcLpvIccH89fwQXRjw%2BLh8dCmHaI3kHVgQCpLKNogau2tGieiC2ZlP%2FBKUpsE9T1oJ34viS%2BfVtPBsOfg1rjDJ0xWq8Q%2BDZ0EA45KACpYDv8gnFf4LDWKB20yf%2BuQaLX5yqP3NOpT%2F6p11IZcZIOcPzdTq3GE0tpnCfE995uhWxozq%2FcFMuGkPEJgwRghDtf89PLsK0qTOzkH2fOlJciPqFebEdMhHX5dGzG5%2FzngYPWJ%2F1xfa1Vq%2BT5%2F%2B6uuauasD2CjfgIsJGJdd4pAdw0QVFd6xoiwXbiebu4r2Zf38P1FZRhg3IFLZrEglgAaTWpTUNotwecOGwoqDxA9v4WOAo3gf9Wb8G5Ojr1Pw6RcVSKHjKJgzRFom66C%2BFM7Hj%2FlYQHNftCDBE2HFUaGlCpSDBYMP3zzDAyVQaQ9Jo%2F8pzwfl2fyfN%2FRjWRQwG7%2FD2W8nAByLAY7a%2FAviC8tYvifHUFF%2FTMf77Idy69fwR3v6n5O577QnG2%2BGBFnfccecI%2Fh6npF0K2%2BfhMak8grWvdo%2Fq3fcaK%2BDQSIPm3rwOgUBCOWqtrAsghUeIB14DvkWqoHM1Dhgqvw9zl8JAg5ilBhLBfAXd%2B6jgPP42k9fnqqMrw1qHHJLHDGHUW4PsDvY6ddqIoLoSZL3wl4Xn69sOcbJCksK5kgeE%2Bn6tMd2Bj4%2BCg%2BP6hVMf6bhYxzDGL3XqzsEE5NJi87C46%2FWSFDiosS%2BSCPDSvewXiAQU1Nn8uZfZh988D6mk%2Fk%2Ff0iTYyg%2BaGUoSbBJCfjM5UP7gNxdqUvGJVCpytXTcTPiPlr3r%2BvZf%2FVCXNRzlQIhFAN3w3eCYyA44LnVe2YT9zh8rkCVPIDHYFdjZWGZ9CBZk4gIyS2KL1SIRvzpawJVl9zCQCb3qXvswbNkqy5EVjV0HBBlrEYNroY9YPCd%2B2ssN2t2H%2BidUmHBhF6FWd87%2FsF7Gnty0UviYIG86Q0PrQbhyT36J5tdY8WisCfHYzKW0KyscEB%2BkCwmHbKTF53MiDTlI4n3r4F7T44RtgVRhyJheMbBM8uLT8y75pPcpV8LiS08CJ%2BA%2F9q9r8IfW3k%2FlraDsxkdCx3QFTXUX3bX0Fu2E8H7En3%2Bvit%2BrRE135%2BX98sER8uINzU9BqOeP06%2FSNvifsNGBLsfDCIq2pLF2NupqgmfWv0XyeS%2Fgl%2BtOeEaTMXN%2Fgwt5QuPg968UupZzTDi%2BT9stNWPWQk3m9lWHThOYOpP0WeHsYzg%2BnYojvzvYDXJ7f0%2BGXg%2Bnq9KXIYOaP7BhLisECQfIICwKNflGcPyG10of3Nji6iUgMCfRyW2syRT5L8tYFdXYoxghCRnZnZD5oaKix73IhrEBMhA8RX6jDxBGPxqTuYLP44QwaCrKFrosXsAVbZk73%2FQ3rJhZA60ApFsbmhY4%2F%2BX7RGWxvPORR6c%2F4au0clE1N9eLrQWMX1e0MD44XRdxt1QkOwxvH%2BtxA8afHWobzWb%2B7IDOrl5M8mlEIAe9Ee6v78qU%2B8n0nYmGAgMsZVIXy9ov%2FVDOmE5laa%2FU8Qrda1%2BSrk91dOwxDGpJcmLqUjHTZxME4d03bhF6L5Uw2Nf7RDX3kXQ7HON3y%2F%2FmFM3vjup8ngiPLYJLMPT1eWiki37N1qqwjhAlPjDvh5rraVfXqFi73GyX%2BL48xt9%2FwrlzdrXw4In15vW28L8Vo6MpMK6uZfgY4gsCAOwR8WqdONd%2BstOoT07n%2Fk8v%2FfpghEk%2FHbsEhshMK6doJaIKDWl6zjjqfMGsTge0MnXUk4P0T%2BukHdZkQd3qDFLWhPpvOLfAHGDwyXPhppK6p%2F%2BHNP5fEh7tx5MaWcsasaoB24SWyu%2FxxYSgH9Y89Xy93JIjnLqsgVYkZxA9%2B4vsZ4CrQ03bew%2F3nCAiOuwAqCiiTsyDWNt8UIBZztmu%2BMmu%2Fx3X5ukAdZJr0Xe3dUR3%2Bh7Vk12tfqQHdWxF7%2FBJj4KqVUJk%2FEt6BRzSL7GQwH7n4VhC%2FQGtq%2FzMZm2PuSphgvCBpfOVf0YXzvl7N3f4JSvEBpbe8J%2BQxZk3RPtb1ejIcu9JoxM8HsSTEC6N9ARi7%2F8e84JCWbQ%2Byy1Xgn1lJT2%2BlXaGGafwiMh2FsxvlXtcWWclegUvtEk4m8YOg8l7ad5aIIgXPUuchyfPl7YqFays9xK48YVfHDTQNYt%2F8ZEGLgtZ8SnuBV9XCKmnwQ0%2BPKLiHC4alRcJharrR44YLq1USeA6RHwWL0mYKdjuQopbz74H1qBwGjK4mN4NbmfuHFSJmFE%2B%2BhIzStY10bjvoNrgPI7k9vL8mWQwsVB596wK8DTNjGCOTSrl%2FQ9u8U7MvosvUgg0o%2F2IrQyo2JbjinzcxmMk9n7bBBJrtY7o%2B3Eh%2Fw74x8aHGjRcL9e2Ed2j5PEbZNIPdL4vdHfTrSv1Ne%2BX9axRd25%2FP%2Fq537q2X6RewiTjRUE%2B9hBvbkkIHE1BGqGsnv7BkIQReHmJ5aXExHaTOnGeSdI15oXVGdy19qmIJve2n6vlxnwrNrJl9mEF4ZjZ6y3BGfB2wDG5bvcQa35PqytZfLH9cGqW4rlNnifC4HryFlEk3TiPOP%2Bo3l7vfFc2CsQ4UbIdtV7p%2B7q79D%2B4%2FL%2F%2F4l937I588%2F5cmf1i7Wt%2B6I%2BT3l%2FIeaVFV92i5d6yydb4IsbLrZQz8godZeleWSGcWzeUcafb%2BrHQWRLhmM2Fz5Ivk%2FCGEGXEzU%2BXty%2BKEBgJ6QgRFokRvH9O2eX8usEIkmDWvc%2FEGPnsyLfoe%2FxOO3eul63nm9y32rq1u7u7rD%2Fxnd69swqXwcDh4WDI9%2FcQOWl3jx4VDJd1wAEWFJBMFBMKAsOAsGhMaAsKAoEwoNgoJQkMwiIwt7VO%2FHUynXrW%2BqRUaYmVWpEq%2BBtHClr6J%2Bm2D4bd%2FOt7%2BUTedcY7sHkU%2Bb0odIY7deuL0wNnmrab9SdVXvuS6N9vGm0K%2FhiMgGC6I8OyUI7hkkWfHiF%2BLkvn%2B%2BRkpFLB7xnKbCNSWjl2eZo710j%2F6f1j1kn7bjydUP7j6jib91%2BVq5z1E70D5TgQsEL47DVzIqimWT1Wa7xwPzqvLcIWdXZ9lw16u6%2FdCAsZSsVWVMyGdgC%2BLG0EHJhZOinvssKy9d6xrVF44340W85iDgEeFJgoRgoFjUJgwFhoGBMFwsFQoEgqFBKIgmEgiRmLrnv68THXv1vVS8JLxNxJdQ4CbtHfttO8mLj9e3dN0%2FNW9D3ifs%2FmXl41GpCA4ftr7KRjz5O7zYqMpS6r8Ou%2B%2BMyoy19xpF9k1Z2LywIHcxUaQpa1LANu%2F6KAX8G3%2FS2Y7GKNAQJRJJ6OxF%2FPDPBeMzBJy7M4r9BnvNki2rTWJhF9R9uUzwjfV3ynzsqnE%2BACPkVGLL%2FFbxYC%2Bzr9dsdHCHr536Yqhpa1FZ1pQ%2B9P2JWjhm80utCwy0pepbQ3bbIz1MOqtIwLfDUDgAEiFJA%3D&media_id=1254206535166763008&segment_index=11" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:00 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:00 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_OlVOT3PpnsDXW8+jRQnJcA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:00 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112011814142; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:00 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "a5803d45371bc562d610913ce19e1c0a", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19941", - "x-rate-limit-reset": "1587864356", - "x-response-time": "35", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00b2df0d0046bd40", - "x-tsa-request-body-time": "103", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"quxPlqWvHj7qmOL4DRwvu6AuXFM%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=TBQRhYsBYNCgTEgLBgLBQiiYJhQJDEhO%2BN5uZeccvPrqoqYuCqXJlyuhyX%2FYnHXesf8dG2r2p5a%2B27v4s4PZ1ctHGqJ6E7L38WYMuiR8XNbBJrAdVWrU0lpdo30fAQgGT3YtOMMYU%2B68%2FiqVwvZ0au80YsziUONFAispeGlbfh%2BltXsMW7TxTz8b%2F6%2B%2BEFT4cEdTN13a9XmViDVPqM9fJdsdtHHfpvHwqWV79RoQvRWkhB%2BhL%2FUPokvjzRT06H%2BKXNyvSlIV0LSg1osrGkdyDHT8qxPwvSmfpn6iVpL13U0fKYOAARwUkGYUGwXCwoCwYDIWDAWQgVCgWCoUEYVCJ3eszJvftnfHi9ZcUvJYmZdolTga1%2FGfsf4n%2B%2F6t8iv4vF7uVGqe40uL%2BMR5CF%2BT5WP4aMMFDw%2BkzvqZvDiyfFn5mmZ81lkQDs%2FKTAN7yTe%2F5esKg2XSYShJIAV7fhPNMRAh275KPd%2FoRbz%2BhdYOjHcK%2FytGJvAhChgKCC7lO7itR3zN3NeXvl34Tse3Y26kALr7eh%2F5FKvjtuHyfhvmJQuZZ%2FeiVxDJPVjItG7xa0kUd46YtAfnCkZWM13N2VRlpxg4ARYUkCoUIx6CwYCxFCwUCwkKoUCoiCIyCInO5rvOZVZ166zjLq6xcBzeoJOBp31tO8w4xsycX9XS7e2L8c93h7PgV%2F6zR3rEr%2FKXNXRO%2FM%2FmLH3p2yJYRtX6N3HimVAHR1eWbo9l15Kfx2j%2FWPz9Y1HypObcPGatgtkCQn0NHynmPt5nEv2%2FhJD3Hn6%2BpU8Ckaev9E0disd0nhPJyzcCjl2r6s8ujMceUT6A%2B5UQPuPM7Fw0ioz7Du1VD5DjqrCDGKIkXLYZ0k%2B8Y9Z9UXwvJSm%2B1KqqVHWGvBFA2ecDgAEeFJAmFBsFAsFBMKA0GBMZBMJRIJQsFwqEgiZtMc5rd749XNTEq8nFZJW9WVJOBwn6bTfQuOc0%2FK7sP53%2BpXy4%2FC7Rv2ArcPwYPeGEzn3C5pLOiT6qr7UDXRynri23xHoteaGZdtpSOdNku2Y9NpfxPRdFfVYPo%2FQq8SlF7L%2F1QIqwmw64ApqkQn7vbqeubwTw3iuXkB8vt%2FonO7tys0LWpKodPUERE8%2BFcffVcRSUZ0CB3OstR7NquS2FZdxFpyqUZ%2BuI3NlhktThrgYzcLTw9c1mPjT3L7spP6Hn7UsLVdosjLvmDgEkFIwqEwoJhQFiQJkoJgoFiIFguEhCEhGJ5973HP7%2FYzKuFhLxUrNRCXwPzD4fpvuX0FuRdyub8OvuMPt0NuH80VoMPJqJnhseXq%2B3Kzv%2FevL0lp7x6NtD9WSXRu7Il4wIn5oTXtZ8Zsdc2PhaVUx1bVyH9t0TTn9W6KP%2FNd8FqmabpDpNPVf%2Byftvqia0mWpK5u6eiQEMmilDobla4WOYtRtFAJSnTWMCcrZGnKYYuCi5DvYznezcx1JzfYl%2FueYEKLuVFqLvnfL1sq2w3VsBJENLnTBybSbC9MLfGGOvsMvXZYYLjPgg068adyF1KavX5vcBwAAAD3BBmhoGigVz8T%2F2hPYj78CAI7xG%2F1y%2BJ%2Bu%2F%2Fv6%2F%2F%2B1rv%2BS%2Bf6r1u%2BLqjV6vX9VdF1wh33VPc%2BT3%2FAsCzGVP4Fo4JCD0pxBknrkjrArFBSYMRtldvadIKTMDjFgwbirriehiPgqWX%2F7Q3f3WCrPSrSCzL2hqXm%2FVXu69X%2FW36t2rzXXN0TV9EyUnt%2BBWnGaKS81fmrq41VfUml3dTWovl8YABABwW5ZY1%2B4osd%2FMy1AZ9A8dLFH1Ltsc%2FFkwT9MDtkNbftxqu2eX5KAIQEQHoHQQcD3eOGwdKAypWvLeMGpygrNHGtZCwFKTFWSnWLa%2BI5fTCgQAnmCsPkW2iTenUfz%2FlwJg9P0jLpdpm1pI9eICQf3MQchEWmaZCxKWSlCLw8s2fabqavkHB4XwYS8UJepD1g9ZL5rNWEc8naYpR5YD1lwesZnHAkZTynuORP4paHRor%2B7raVv1ftX%2BWe%2B1iqZvm77WvA7%2FB6dZZlQBU4%2F5IxKnLSkbK%2Bm%2FAyB4DkFXG1ctmxnU77wDIiAYsERbMPT7eCTCI0jiu54%2Fy23eIbAstevFgZN0sGWgVVMaUnq2qUdUpay%2FLySCMyqzKrCCtxfYTfXyCK61jXeKYWxHoa8nrVeuqFLfrqpibHf3prVrk9Y%2F78CMCcgQFxPBurvBuMEglcVR7aXxX7Q%2BtaBHyZvRMt4pauT1i%2FVkjfv1dXyYMhgwIQJd0CsqkTKVBtvvvPC0xu9yJlp5fIGmQTLGcDdyxl3%2B8CJp276GHXeR5r14w0qo3FwxM3XP6CL16tVSymurWX0r%2Fr1d8BF1fZvADtZ6varaBQIxCfACQFmEwRsstpwADaLMdDo%2BjEsonOcongUJ0x0cUQM3XiKk4cn1BYsF5WCCD3BJlh2VLWNftFIP8tbPBv%2BOiS698taE%2FOr36tdrUvq1WrERauJv%2FJ3dwYdCE0QLlGo%2FZ%2FAToWLZZfbyWeAO7bD%2BbuTuryuiA5cBVCxaCXguXBLLS1d2MYQsSiqXBRJ09apTRgLW%2FWH7uItrLhRdQcEyuDIlBV5h1sLqqqZoKCSFn685jyC0i80WlwwHAfd9xv15By8PCAhYEASnIgENpRtL3YwltJoQ%2FP4DbqhhMpxEEAl38daLuGdN%2B6Y1%2F5f%2FLGDMvsSmJVMKo57FHDFXhDpc80TWtDiWmaDNBRnTNanzXoTqrjPVyJvyeKQMGopcaKIPMWVKONRE1nZ1%2BT3racb2TgbsYUwajz74A5blJXZ7juLgUwtxLllJoYKoBgo1IdLrbyfZSwh4VoOYBs4eTQAPnwHDxw5bxFwIqQbuWXeoZjv9rW9glFEwKuwV9%2BfkHa7cOhEY%2BiT%2Fk5Olm0jxTqXRfkbz2xptNm37hK91P%2FCppT9HPJSwSxWn%2F8KdjhlEjuYywYNB0bO%2Ft6uFu9OgkDx%2F3r8OL5PL%2BS5Ych5PlxFkv0KmOSXnj4RtQK7sTCXDzjTLbbfGwTWqFlkCFIZjMaRUtYu69Hi%2BT9elwjr16vWKsDEE%2FAxBXwKwV1ALgcDoKizVqq0uBigsOtarSqkvt4Obgorri4lI%2B2lIdFMPBAVAUp%2FBhHCXXw2i67gaDVB4TOX8H3eHthuNA6MFaEwIvY4ajLcQHi7T%2F07eHPfHeSEOGdybDl4jAVXh2cJQCynBSO0ZERtXvhRcM6oVukv73%2FRd9TUPN6goRE%2F9NJ%2B3Xhko%2Fl9f3j%2FbMJ3mgRFWvsnv%2BpicKqYl%2FfxsGciUGrBwKHFN2QfcTv7klm4BrLS9DpXgrvpPCDH1ai4YXHp6a%2BaPiI4L8FBGIQ5C4oPJ3fgk6r35yrU2%2F61oKwhPUdxGM8VnIKhzA1pr%2F2jkWPprTI%2FuWeS69CdSZuvBuF9eCdgsHZsNglw%2Bb8qUU3NIXYfOEqvEPEuPOXwMIIQUhtggKHhtenpBMe6wqqS5CUat%2Bb2E493fLZqjxsRcajP%2FlQJYoYWPBTJeNUFKC0Az34aGwwh3HrjPf%2FD5OGYfF6BQ2hu%2BGe3zGnFpLgKHE6bIPpViXT42Mii4DvKFWCCTjf04Y9XoZYdTZ64zjjmMjoIWTy%2FwyUcLcnwsASshQVZHoMHoUVJ%2FO%2FsaSdJEPbUlVy8rdHhHjwqqWqtiVdsLKY3e2WT%2ByE6Me95PapE2wSGUDvIEnqWaXw6VhmAzbWe9zn3dzii76zh0f%2FZI0Er0%2FhU0sd22fUxk2%2Fy%2F%2FYVqchMRiy%2BOAkuyMjXv63UPTh8RI0OmIjEc98l%2BH40%2BfTrTcNbkuJY29aHi%2FlglpQdiIOxGVlfW5eb0fD9eq6ta5Vq%2F4ApYHbwNoIiGaPnWJdGET51sgHwQELGUIFKTIBFCKmcAflNkxQPB%2BHzgTj7Kv85dZufMXC2%2FpZ%2Fqf8h5CCteCAsCSkDAY4eKBf8L5ThQW8iTGhAHWGOgtVo22zU5fX8OFXWX%2FqF0o%2FpBUSifz5df0UBG7aVbmEFs2LfxueFzw4ecFhEoWAZjTqcducHB6kqhpXea%2F8SbF5enye3b4aK8DqsT%2F%2BxJWtXnY%2FWWkJ9XNgQb%2BoITlIpm24PUMCNUN8dir%2FGR4lcy6Z6UfDsSR4wWYWeO0qXBJ6Yeb3gRA8HRwg14rEcS%2Fw7LAMGlKKAZwfqZSAqDEc86i46OdQJD5f%2BsOlgLDl07xeqDvzRL4JDflvkHj9P1pAhIPCc%2F2l77DUk%2BJ0UMxfFpn%2F0wSnCnc7szivl%2B717DZSRzUZV6Gg5JjBs%2BCEj2P34X7EWRWMGnTJerMgnEr%2FyQs9JulHW5dl2hpse9Ehhit%2Fuwvy5WYQEZH8%2B%2FqalNGqp%2BLBZHo9NDBU5Pg2hGO7RgxXubVaD9hjeCmCxwMNuEfso4mQgL3EFyZHYYcn1SzXww4J%2FPpKnMn75ev7z%2F16r4Xv0Xq0L7RayekI%2B%2Fe%2FVit34NgyCIW73%2Fr1DRuXrMeQ3hLn7j%2FCxmHbm4vJYLYWIr1b1A%2BMsNQMSAo0FXqHy8jAY3v4r0BaqQTPcf6bVZRIbhiLSYfwID5cMyV%2F2suCQp0sZOH36Kd5k%2BeqcPCHv580Mq0cTUI6Uc7xpMfDBQ0pmjWEfsXeo%2BbmqGusqzw0FfvqcL6Eb69BUghrGGVM7OwQH5k950mMZ60G44If9iCxnMO%2FPJ9Sa4XPjsZVTOYxsK66jEUyxwjDG%2BpPJdLRO%2BwRiAN9oNWeD2Iqxr41k%2FLrcLiY0y3CJw6h93zC4w9fc2VhqgOba%2Bgnglg04PvXPnr%2FTxIRkgjk2I%2BPR3%2FWVE8a%2FJ1XPt%2FJ7a9aWnBVbF9N%2FHSHtxO%2B3DxqRFgewMBCLuWAbvL1ECTvmiB6wQdpHgi2p79rTnlFsaPeC%2Fq3LhfdDjwPBzdw%2BM8qgSvBE2v1PTJEUVdgp1MrF7loPHAupEs8iDHSUrAoPttFMaE754OHTsRU9hnwDTSCAlK547d%2BczXz3hfk%2BP2jkX0Ny09heMCRixqEjxnDaGA6lqwUbS5bnX%2BHCUjSUi4FTjnh5fJ%2FUXAzQ3Bg%2FB3ZxMgyerz8womNwBlRc5GV%2FTONnXlt%2F8n2gmCsFxg2mNJKaxtSjMmgdeBghWqJdQlHTk8otMHgPCUAVKFysPiwZY7%2FTtPfuMv5x0RWi7TJgF0WMwG0zhfPCLMiG4ep8vNN7vd85t%2FBrrbecTnEXbL%2BnjAiMP4HV4SW%2Bvpxdg%2Bmtxw2G9EyRK3o2T9Jzqw9HGmsSFNvpmGITEPeb3EEwgK6MAO2Inp7k2h6q%2F6eg%2F4wOnB9R5KeaJ0lw1Oc7BA0t%2B%2Fye%2FsuUXyQNmWi%2F%2FrF6rUn%2FrFU2r831e%2Fr7%2BpjFp5Pv7UEFAoyyUD48N077%2BzzxgZHImieQZHpqnS4snj%2FYY0DL9hZIMlSsDj4KpIjjeGH99UC%2FUEzDcVU%2FMZcECKDVAzp4k%2FKVv%2BwtGsu9BhRgXPWH8v7Q6Z9E%2BPrGlu%2BBMJJWPeGhlogfkPal%2BGpwUEXQk91%2FDfMwuyskt1qlJcucp4z%2BHPBH7vv8eK8eGUM52CvL2NeeG77du2Lu6wuR4EdRaHut8I%2FpJCsnpXcuT9fkUxcOoTN%2FCQgIXOCxAHpNoIwPPdPtSQ3uoKSGg%2F67ZRm1WyfeVUlRoCiNMH6j1J8WF75fhGGKxnLcM2fq6uiPjNpMephfpIM2%2BpPqH2EuNGFcMuhxrdZnp82SvN9A6ZL2MvcwnGBDAXYi%2BCt5wdoLpqOSnsJN%2F0g%2FgDqooHaADbrcGbJ%2BokyKe51QeBCudQ%2FNjWpho%2Bsv6wiJxHctNmvHiQUXufN3Y16l56JXs4oTr7kuo39C66NuL1a5Pku9Q4IjpmWG%2BMCQtF%2F02lr2wyUh0gJ3v5ex3qy%2BGcfBM3eo3sizIG7DaSN1%2FRgHfi3rQPLouzFlz6ghqS5%2FmBXiiY6WGhZ4fz1%2BGn7Ugp%2FwXk3ctC51yacn97dDBb7wwmYbR%2FVU37nwmTTDUfyjBGzL0Czoy0ivupGJuXuETcYSNBsRwpzaA3kdmDUby%2BFrckdhiPdM%2FoZ5BTkS93iEjcsWPkFjz5ZXw9yp8739xG9TYzBjpOgOR4OXhqLlxYjzjShQxrZiguWOaNGw5wf5kzpr%2FeLyRmriXVo9NA%2FmOzCQfD%2FM98QhpXdq6CuXQ54qPKJXx%2FKkgPwf6vptLbSeX6uJBwERh6peIPPjxRXEEoyXWeDGCzU2dJxWlCozDnL7yiwhStcKublf9nxLyMWKcDMGOHFNT7SxLYxMqSlumlrQR7VbgiMEXucrmv1v8FVMvdm7jNSgMHqH9Hf9p%2B%2BtLBBtO7vjrJ158f42IEpbK4q%2FD8%2BPyuPJh6HNEE7cOcz%2F0%2FEnJ5%2FqCIsbOKdG52au8ny96hKnKxTb%2FrY37gr8ZUn1ze3FXisqKbxqkiLg667CBK6XrfRnwltlNUvkI6NnX5IiOen4D%2B%2BvyRHZu6qhidIOtV7ioy0w7gb39%2BT9UQTcT0gzGQ3FyeQQJvgk4G2pb7ZgnE%2BYxeBf1KFXlgtKuaT3PhvEh%2FmWuKsQQtivy4Dt%2B%2FAzhMZzM3qpujG7vnEJB9gryUGpuwq0w4wJSYKisQ5UTK%2B1nKSFCCs9y927tuSit4MG8206XJ3dof1Xp%2Fj1i%2FV3ffurD4JSHwpBxDQKPu%2FqCLu7ml%2F8RS1lZX%2BPugkm%2Bq06ecMkLq9fDiY%2BZL8Epz%2F1Q0P3u6uV6Be1e%2Bv0Ut5ay%2FECjjEhLNNL6X4Rniaj5jIWFl3%2F%2Bh1MuXWeIxlgbnSKXEViUHiCDW4xWFgPg%2FAlOcH%2B8WVkbpe%2FO8IGHsRJhUtfGcqDzT%2BEUEaktFapUQrT%2BiuHciy5lbyVaXCPyeVE1V7cOlp4MiAsFECmSHiR%2BAAAQREGaGoaqBXVoS5J6t33fEa%2BN%2BN%2F%2FX3%2F%2F%2FfT9N%2F%2BrVxX3%2BqUP%2F%2F9r4%2BE%2BAkAm%2FV3xv6xX6tVq1X2vd1Uvfr0i1AmBEMCFTJiB8egWkJ%2BuIOzLtP%2BBSCI3Ua9quoIWXrqaIjCJY8R%2BE24r7gtEBzgCV%2BKJfNrYpTiFI3n0id9RyOVum%2FDHlzlwDDwHzwRX2A6I8vHvh5hS%2FhjjTXy8GzyAzoxzJuB7fZr%2BB1LuCQKBwmWkDsgqbxUalXjn5aeL%2FQljolXO641ex3TBFL%2BvqJ%2FV%2FfrFVEK36v%2Br1a9%2BsVX2sVX8UCfTjtJW6W98wLsgjqGCuK62sevtNEzLRQyqGLd1C4fhRFMFcFBhjY7RMJSISxBfhqkiJmHBoFYGOrDRkgQBPBRQyXL%2BoXsZo2x8whg6DXV%2BGo4%2FBjUPbowRRi%2FL%2Bsd8JSAIEqvn5xWht3yfsWEGDgEYDXEgg7CBvitBd8BwN6h2XOlUUE%2FL8zPqUxGYhuOo91UvjiTARxYEcWHybbtqMRFnOYnQHvG4vm1rbk%2BgsEA8CICG8bxdXWhi3iAmgYtZBvaOVX%2BvVKT0wgaMjgU4goPt1n2KrXDFQowGsYCksY%2Fbj%2Fs%2BHz2NZg2B2nhALkIEFndFEAFieEUAcnE%2FoXVX2vcyY56bvuJtYu1qqvnvHhM4gVTpRLO78Lsv8DiGQqZGDN7j1gH0vEKQi0IOg00nPHQY8nvFiQenBVOHDhwHXZarwur3eA6R3lQFkLhoorJgFdzvtpX5IVnj%2B3zXCBOYwQSFKKsbih8PcIWzGhA%2Fl%2BaI%2FCCgYw0AMMwP0YyLWNyg7a%2FX5yhUoJ%2FDDCTnwdzY%2Fk3lpOpHciif3%2FW%2Fz993wl5QlvGwEAMC4SEAPA7tan%2B3eBjC73hT3uBiPBsBTET3jymq10yVleHhpxYREzBCZjB%2BCQfwOh%2FviKkJyvl%2Bv1eT1iu1iqqr%2FWCr7V7%2BlgIgJAfAwFAlAPwq6sZgAI%2FqtyKKDU1HZzUGlOogJxhdX4%2BsGgrGE8bmCtkEH33p6sUkqanv1RZf4Q5fm%2F%2FQV6t175bHcuO5PXf5fl%2BVe%2FVv17uq8Z%2Bny96jBQYGY5qF8O5mmgTKqeSrGu2XfvBKUGUpS3B8nVQGOQ%2Fkq%2Fzwh6iMdTFrEe%2FU0j8jO6tCYp9bHfq5l6Qd8O16xHLeT80jkBCBEDg4KcmUBryIFQP%2FIHp%2Fx%2F027k7i8L8kuAYmFloLoC%2BaiK7a%2BX39QeP1BYmZdoFmnV%2BGxAMwXW45yfLTuFD2KlZxuPD7oLbFLW1LLN76CqUUIPTfWCQuHog7BOQe2nb7AfDpF4gkeKyuJ9f8MpR6sslIZxPf%2BGz60idfz8Ox16ggFJA7UfQGMSuxLALPJdTdr8uTXSW4JtnL41GgxbICVSFE2lKKJrE%2BLrfq74%2B7schNr9a%2FWK%2FDmkbB2ov8Z%2FaUjQXNlw5BpxwZFyWOo%2F0lWCDA7iVTuUS8KfWxoJ7ZuwZrQQR2G%2Bk5CArSjcOSef7Ydk3E8vcqv3rUBUtGPmjuf9LrMDpIPGO40FQViAwEwvHVmYfYEEnJIlYdTTEzQtf9BTfUmKHwZ%2Br37hYaeZMePyziOJHtz047%2F%2BIhufVxHoU8uaO4d%2FiDMv%2BNx3xG%2BixtHTP%2B4T0%2BAkK8nKCAIO%2BM0q%2FlX2CiWZs5iCmKx%2Fko%2FCM12YkqvE7uLSVbuEKUc2CdtIq2R8isbn0rCP817fPW8no8v1r%2B8CwH%2FApB%2FWAqpjI3eAikY%2B7xDgOrFLfKTVOT4LKTwX6Axw3Y%2BF5EnBLe5hHrcvQ%2Fk8f0w5AduLoVqgcmhAVWAv9YNYSbDYbDLVVwlfC5A4hfV9Le4PtvVnDATNwPPwmEycKx%2F%2Fhn94IAhlJktuLiQa0HOBtg8QH%2BGzoOaiTSK9afDcSz2b6ewQWGCdo788DWMNqloupaFN7WOENtegyIwlrfPVXqH7SCM%2BCOTNIcU%2Fw66B%2B8pOO%2Bk3cM5VGk%2FUz0fvyoa7nYugOT990gxoiMwtgUWKv6Yxc%2BCggYSO7lzMTZ4eSL6jdNd5pGT80llHFG2VXISByvlvjBd9bdOrGyzEMdBV24egi9MZy5pxVCHsHd4cU8VyF7GY1leT%2B1auSa6%2BuTeLIB5BGEBSrvq7zZwegrBXVd3zY7uyrJVWCcPgoBYNrXlwEx%2B5gclgSESc%2F8eD3rgW61hvjoFX%2FSERdBcmpQoRuLDKawuNKyCFsWO77D40N4YSwf2HCSjRBo04zkrbRhgTe33PUaRIu4lyfv%2BCDaMMXD8wx3IbZv7OrzIlIlbtxI3qPyfSbXiCjOVITtP%2FUz6lGC%2Fv7DBIV4TKNQ%2FhsPAOHhxx9NM0%2B%2BRdaWF%2BiUx%2FFfSg6vT%2Fq2gsUfVJlQOVSZqEF9bRHf%2F80%2Be%2Fx5o%2Bn33rJk12q23HZk%2FrRir428vMGA69v0r6bDNa0FP9tqyW4KQR6V%2F9nr%2BE31T9M9TGlKR%2F9znTv4ftvH0Lwtr1arqlu%2Fl3%2F8mvAxgiJaVResBDh0Bch4QRqLi9VF5PMaAqi8HwIfxogN0lmYBZL2G45CQYxgQJ2gGZQABAGJoAqycyiPg86gM8H1AlOwsjZ8Wr4WKAT1%2Fp%2Bq%2FHuQl1Szf37QGBcGCGZzFPoYTsSX%2FBPxsuFe%2FNv4snvp%2BHSyjBgVSuV%2FX5UDN1h7DMVPggkxdp5ZrX4eE7vGcd0UVrBSasF%2FwwZ31QMdw3GeEL%2FneGVH6jdmZG4IOPAMvEcNQxdsHsMzJGx9hLv8v3fWzb0672IJ7P9giOFlXxyyhyl%2F%2FZy0a70mg4ZbsGmH7Dgl1b9v7%2FPXxF8j%2Bm8X%2BIkhWqkXq1V5F%2FWAkB%2B7BmCoghJLtrCtT4xJNAGJa754SpqRmsX4gRK1ntRg%2BOj6KrYLTqL1xpSHouVS8LZGhxbI1Xo1%2Blv72Z0toFc72MwVbrwC7%2FF1t2d1gNnPSDdgOAPf7UZQGqO%2FfB%2FzkP9fnM9eJCApQv1Hr%2FHSuwhvTwqWa4aexVSOZZR02e8c%2Fv7dxjyvcE5b3qYnQ4MvrXq2vUEMxGkpy%2FDhDqJ1AVVfZR%2FCEZZYWzHzUye5X7hsiOHmAnCC6kdtm0QQTDM%2FDG84gI6Ijgqo5ggCTfl%2FJTwQQkv%2BsY%2FJw5aQ4BR%2FcRbu62PFhMeEP80LWyfqGOOjEWygj8Chn3DSlxpNa1EX4vhWCr%2BT9XvL%2FAQzl9a%2BIu7vtFa75LmkeXqjPeDgLotanbBEScMDdm%2B8UIvPSlEbk%2FXt7El8nsHRhG4w9CWyn1wzLJ%2F%2FBQXN40JdAZFbHD9a3zlX%2BOYr8FAgVw2ktwb0GNaI62eWvw2UIhImL8PUxKOG1k%2FSeGSDjKLQ9D2Fz8cox5I8bQoell%2FkwQ8sOzcrYeEzsWCjlEBnu5RFacFseVgmKGNz%2BCAnDy7hg8GEuLvyhI1fM%2FXv5lP5PZt6JBGbKdG4whpDnK1%2BCc480IzLfAjbx2Ve3Ensy%2FhbhtnXrsHVN9fAPorecAsMq54lXmwhq6tFqieUiVelyT1PWazb%2B9YOAy4vL%2Fd67wzaXVHHTP%2B0i%2FwqSH3S1IESYkaopB4DtOsNL8ei%2FYaoG1fWEOldOC%2B3ULUA40Lr5vVofqDZ%2F3BJHwVcU7gRy9%2BvcheVjS%2BCcjhpKS5eb29nuFT1goPWff8eB48HcoHd416J%2FW6ghuQP7S83OflJe8n7DFN2EYJKWbzih0h0xlIfBPao7DJMKV1DctB%2BG5fn7qxdQUo9XSq72QZk%2Bf8b2Rl2BbAxACGUZGy5yVkPJ%2Fi1FYVIaBY7yl%2ByLOl2DwJb4ArYoY1tjDp65OUcOXyBNlYRNCgg3%2Fh4JW7SAXnKjECB66TBgatAdj956oJQUA6fzGszKKGXIy29p13bKAoMFt0orDEK5DNfrz%2BhhHNJHsaL%2B2djpZ5B5UUjJDF81WW7HwVEsOT3K7VkH2DQYAhlJMPvk7jpGRAXGK1B4JTtiMN1fc5xIYoxNBySqfgMuVq8oevoEMEST4TVpgjG4cy7cd3wndyUk2%2F5DbpJ%2BkNvvCRxYW0ZjNfhI7kUstMON0rEBfJ6%2FpBn7IZH1Qalw9Aggt%2FbgHXl8mtMEHBrn8sWEuOD4MaX1lmUxrSaGpuv0ELCTq2%2BiYLsN%2Bk%2Fa%2FC5cVu6sgk2zM5FbrS%2F%2B%2FwX7vk%3D&media_id=1254206535166763008&segment_index=12" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:00 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:00 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_gurFzRo3I98bH5Cajp\/tXA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:00 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112063432381; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:00 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "80a14c7b56c780c8df4b9b9f7ee42b45", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19940", - "x-rate-limit-reset": "1587864356", - "x-response-time": "32", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00f5c4d300757685", - "x-tsa-request-body-time": "94", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"Qa0fJiTl%2FtQd%2F9THMPl2%2FuAAAwM%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=OsNU0m5FhTbTMLsyqP56m7L%2BmsFtjrTVcXWFyFDMy7ixysOsosZI19c%2BX9V0LjOoE5mypI%2BBKdxp59db4UihQisL5ESBuLEPW1dFW5fYi9oYQB6uTNLo9rRyILD6cKvoNM45CplTCIo0%2Bf6uvd6M4ye4N8Xn2CO1iJQaVZMebgiv3IIXr2S%2BICpBrEFQwpcHci2W9S43AduMMejXWwz51mOijKugprO%2FW5WeCUeP1st33lVArxmoF%2FMA9tcJox9w4jHscS02uwmaveESqxwVCL6r2f2cWJ4Oq6lzvBaL79X%2BIvu9%2BcRZvvQR8%2BYjV%2Fx%2B9wO2D3vCAIwJx0MgR33dSyBjAGegEGoD3Je%2BvgWeCBs9Z8eQI4Vd4VhK4gf%2BG3K7P8igkeo0oz1wfJJpTMJ3e8nzcKMB0bDSEPA%2FYI6V3SHqC6%2B77uL92VKP3f%2BKMMSjfD8J%2B7%2FBDlrwy%2BvqE5%2Fxxt4i5X5iXEYQfUgvAFI2cuf5P19vCZHGjGuO%2Bdey%2BCTO5%2FfZuETfmGCNBBLBFMa3DBzH0iV9XIWNsJQRFIYUH9wyE107%2FoI2Zs4SYl%2F0hHRnhO7Klny8sLEEEVjEbrZC7fl4nRpKHzQUxPDZEzGp3BdJxHc9RvEnBPM2UcUxE7gv%2FdI2%2FfqMqvzcXE8pNNwmVdRh7Vc%2BFlSStNAxVBSSxECta5L4hXkFj7vmu4WVXEfl9PR5QpVX43Fj%2FEuFys%2BQeVN44pChgQK3ECxpYjBeJpPVSCNX69fdWvev2CUR58YeWkXFr3G7EMyufD5qSww%2BplX0jZmVp1fX4fK%2FHR5zg%2FKfoY9to6Q%2FVN3fWEL3zUDT9TFysd1P%2Bevh1fRtjr3CPljd9a%2FBHnxj2HxRGrN6Fe6J8Ur4I4VUGvpLHtEsERGcx7ehFUWZEHVH9LBUXLVnle7wWSEiGxNhuHJGvM9dzhiPgye5oggnhSWKtxT9VUESg258ru8UQIdmrQ8OQFFRRhJkzCYLKlvhIQLpLtYx7jDAo43U6HVTHOLTKmsQlDVo0NRVtp%2F6YKshc8vaFSrymaxb8yGWge%2FJG39ndMuIdUwmos1lBbwb3McRch4VpDBmUDuSpBVROZvN%2FP%2FvGFwgQE0N0zGaYADfHkCHKYdh1nsDY07l7l%2FQvqlr6j6e%2F6mLu%2Bf2xBs%2Bbvyfn%2BIly58x3TXvJ%2F4fmZpyz0TZcT%2Fj0VseJdd%2FUC3DS4O%2B%2FZPiq89RjT%2FuJ7qPovhU704TJwFJImS56%2FcEFGDtTUhrHfdpL9It1eYJaUxHJEV1ghjSglNisHjpD5GFh0UO6GPYREEU5DcnQ954aB4jVRiZFG6%2F%2Bh3kVZRpKxZJcG%2BG%2FIe8iOkv69BOquh3evvv1%2BW9V7wvrwSxlor6SfB258a%2Bu6h%2FhnkeoXkjeCneoggIsI%2BvKLL%2BBkC3kC20bzLVfXVV4d13S5U8H%2FbzfMGKEvgAABECQZobBsoFdXXoS9XQjZu1a%2BJ9%2F1LZf19FY7%2F%2Bl7%2Fr%2F%2BKV3Ca931qx2iRu%2B%2B%2F%2FBVRX7XtWCv3XojfrVWvV6933VFqmuRvEhDJ99AmFgmGhgQqIT1brLjMAf7td51y0XNQuYAjw4L1qq1HM1x7v%2BFihvxAffLjaxfwRDPtDdeCIKacEgwWMxnSq7npwIgW8Zvl7l9C%2BkvonpZBX3M%2FRQuKUZsKcLCnCwp7jMsLzQryCwpfnWrPk2OzFDUUMsDPDgoGWBjaGCuFSjcUY4qvxpG29c5YZYYoYoYoYoYoYoY4kQNRL55nh4fR%2FiWN81AIXujL%2F%2FimJ4KGWGoOrBQywMaUMFRmrb%2BsaLB2KBATQMIHl4MB%2FhZP4s2cCzJ1iGlfvb%2BvHd%2FL8QHhAEFg5Y3qVfjvmIK9OmrtJLkJFWbb80kyZ9sFkfaPgNqHQH58pmN4ctznC23yjSh2C6RpUMe8xDR30stvbu8DEFK98DVv1X%2BCnu5o%2B7u7Hy%2FE4r6snnVdyQZFd%2FSFxfr0nStEbV%2Br5fYoCCWGIYOIAWATBkpfg1cv8BLjQ0RImYgEiEASoeC0LBneOg9EAmeEFUNIH6AzMd9CgPuHElEDQMl%2FxYeIKcZM65dNQGl4OHCoFaEoACpGduyOybjdFMPrYZqgBJOTC9mZMzY17zfDvYaiTOlu%2FtRk%2FAS48bh6x7iw%2FgY5S3M6o%2BvxDVny%2BAhBMvngWABGEABFhPWyVcWB4QA%2ByssH4UX6Ey9qXia9Wk9e%2FVw%2FVz9eq1lJ6lu1e%2BZXr17WCYCEWPGO9%2B73vMeub%2BHQ7d9QDTWYfn%2FCtBIYijEIy4HcL87CB8P89hHqHOgQOQgPQ76B3l8fYD%2FP85wiSIJZmD8hD%2BHTPvr0dysCKNn9exy7V69V365VS%2Fr1T16xc%2FPe69l%2BULBPDoSCg6UlBkeAFCQm7d54qv1Mqq2jIL8CQ5lwCyGqVUAfTqy%2BwiFwSAtKkMI7nNjHqm8ziLGA0CzuUgAd6GQS5PhxZoq7o6H%2FjtUt%2BgnFJfa97r1WupL7v1fqkHfry%2FBWJBQbLAAOEsa%2Fbplcdm8D%2F83FLyy8FGYp6U7Q1z2hwSlbQStoN83zxvyFf2isVRF5dUt%2BhL3dX1S%2BrV6v%2BvV63txmAQUDcCAwoxRijFHifTAQ2RmZCqApEjMCGrQHrCjCfBzcyAPmapVZGIOSy%2BT9Ajh4FCASgJgJQfD5sGN6tkpSwGlSC2Yjq8CPly9CDl5TV554Yut%2BSNEkyaSvs39kxSD9H%2FyDc1w%2BHwuQFQbrh%2B8xfTbPf3ClM62gPkXfg7%2F3w41P4i5jYzbn6xZPcs1cFhAq3Nvh3ya%2FlC5cBGZ%2F320M43W8bCbDsToamF5ZfgY8MH9jbVLni%2BktfLp%2FnQnpCfn%2FLuvVc9q3ffzVqbxto5UFyZBcxKgoAvOm1FyaBH%2F439oPeWDa0qJHHBnKG9mEGUELQVSIZNaYl%2FZ%2FGzjiMDkWdGs6V2vNC9z3Yetx5O9J9lDwojkrgCvrPqkA8fMABfGDTw9xr2DD%2BfYdSC7vj%2Fl9z1wTDZSmX9KBxnR7L694JSh9gbF1M1XsGdxr1BEI44c5epPqmtE9jsP%2Bn7MRoGkDuScQZhAzGJU45LZf5Q5MRs2aUc1R4ui7QRjPCcF%2FMbBvCBHvX%2BEPDfl8CmFVg4F41DUd%2FRqx2uUvq3a98TXq3ay7rASQfF8Tyu95hwCCCPsR8V%2BXqbO5iYgcHwQHtB3w0hsFmR9n6s8cDfYT0%2BX6DhRGSXzr0hsw8yt8eP%2BOjXw7wiI8IhwbSiO0MOP4T8lT8v6%2BN6IdNgBa%2Fi8wT%2F%2Bqt%2FyH%2Bym5HpN9vT61%2FIvgLLk6%2Bb2gvDbW%2FL%2FlecoDB4kWTAlX2N5xhrxAVHitqC9Y8M%2FnXGJuWqhODaf9LIlEQWz3s4xQ2J7fvLdRL%2BrUdOhLUxqB%2BfBdWdjafZ9HOp%2B%2FM%2BZDL6XagoJVy0xloWiC1l9XvD8MsskZoptLiFdf6i8NIjmhgpBh4asWsJ8A%2F%2BG5liifo2pkVkP3uSCMkCR%2BnVfWGdhvnoNyLww2NZLw8p9Xb4LSoGD2S8bLLi2bYZqm1vwlefShmK9QLa%2F1D1GwYaZYH%2FyqJ9IKZixyl1rM%2F69Ue9332iQd8I1TdrUmCofwVBOYQ6PtwIY8EZHerGX9COYVXe82XgbQjCKJmMvhMJinHMgIDrVDEAcBssg87LSal8X4slCbdvcXaCN1aLLpKuV%2BgVYlGJK75wdBwq1fX4LxpTgdSOaRHeHRUSdFpat56MyjBgf%2FhQjkrDcboIbGXYU0DZM4I2jd7N3EGQ2b9Q%2FzOlCEv7%2BNjRfLC3ePNGWhmgjbjFF5MBbY39VmGfLfOlP%2FOLDpoIrQWc4JqkzCN4PdiJGOIbUrqwOXyfwrYwnz7pMJBcuL084kvj%2FB3qyn%2F0YbfjSifwtXg6u0O8SwycsM75SrK7L%2BuX6fsbT33XGkGk5LS95Ocu5vGjQRQaDNZr8E0NrjsfSkzH6kzBNKOfc4XKMH3FPnXyVIMpfUQIDTvKP3u1spGHVth6cPNR8Hbv5SwsiIS3xF7%2FPvgctye6pF2FrieopOa%2F5DDAP%2Fmw9LiRLeSejZ00Y1R8Vou8Aler%2B%2Bfk9Po0K8DttR3IzrsFqXWIvLLNda7%2B6O4N6weENet%2FiZP8YXwUreNhLvBHA1h%2F5BoqlQgbSqxHXiE6Pg1nAkboDJQCpFUTsO8rIXnuHoxo2dJiX7WsPwBxfUB99voF3SoKF8ohz%2Bo0TEA0veIBnHGZSc3vh4rYeXCCs5pHzB8jhhlNNpUVRpt1v9ZfnF9%2Feob7n4cMpSRgtGqDwgf7f%2BNymLeS1O4tM5XPqbronhUyoS4yen%2FwXGvd7%2B31hoorPy9XRazT%2F2vdmtDTLyfvuIhwr0DSTD%2BD9Ewez1%2FDDNa7ifyI5F%2BjaCXU%2F56Q%2BHWBPgBDqOXE1c7%2F5f0V1Jdaw38Xy%2FHJOv2IFHcdGizzBgSZ1CpwTul%2F%2B6OGZ%2BAGPSGJlSeYv%2B15duo5%2F5Y%2BC9tUEDMv48J1o0X6sK9MKl2Bh%2BG9FRe30wzvrWNm9xlg79MRAtunzFTu%2Ftl2b0yZsyi31E9tLdj%2FCZJb8HZcnoUVCwnLdq3KoKOzbzWHmBECvSccbNkIgsSyr4O2fgg5rysb96txxm9YhpBh6dTfw1OfGBjPTWWaCWF9%2F4fzaQRZuF2sfClQUY7YcaVx1gW1xF3pSb89n7ZUzXheuI8CfRXrpauJ71C%2BQ3Liyr8LnsBztmpd2GlP%2FGf6H8NiDYeGMA8Cps5ZXeGsAjqJTV62HywuoBuEPXB9V4uGnJdhkCRL1OsgIKrVQLlAZ1cBpL5MjBohQth6RwtjIz8%2FrTaFlHReWCN2TReDgN3%2BqvsUWUlaCQb0Yifhvi3d8OFR42JxMXy1%2F4bEakXfyAuEVcqgYUfxRy%2B%2F2Gy4cgkaSjxIfapDNx6GXX%2B0Zm98OCMi9frJDCWFTitRLnlw7GHONFq4Zb%2FOrk%2FF3oRJr997vCIkjLt0rxnDB%2F%2FBBfAnrfeYuEHxhoAcu%2BzZeEjtVhE1vXU%2FZMZhUyeklzrS%2FVWKhgVYdVlMMUnR%2B69LV5f%2FhcSwYMZp8Owed%2BDYdGX5F2f8mQyHa%2F9xtChgTLTnmzg%2FBeB1oJW9RQiMoTGWvNM5mCMqGiOgeIWOq1FVUvcnVa%2FrohcvfY65e9it3032KuvsKmegYlw5wgTHp0yfD4R%2BOj7tnbJq78EPGBCacM2HIOwXmCASBs4wOMs4B27fU%2BT%2B5utTJhf4lUxUVzS%2FrHO%2BHTgjFRZnqGA4dSgHJ1BH0wgo7cOVPEekwHL1dBnpRuQnfKcevHyyuWHzkw8cx8n112CCBTX9pp%2FrNu4mhkQJ6k8UOsJ2LvBaX91KFdSA14qHvfu6fGBD%2FnBQQbZIU%2Fr65D2YQ0w%2BEZgyydbEC%2FgIlZQ%2BgAPESKYfWXv%2BGCtzBFjoXF%2F5WqCIIBDQR%2FGmZ9D7Yqh9pzeN98BrUVxiJPo5zXjbHu0xnr3LGXMlBMxJu%2FVcWXQAdRKaY5gofbuUj5hphIybaewm9l7u13751pAPesPhQuUZulGfozrH0NZmb5lY1qosqfjZcaDE8mkpCvvr3wjP4zK24Ga7pfUvw46X7KCAp85CfN9Ohdh5qgJP0%2Fmlf0ojkrswK%2BnatY0wE%2BJD0sBRsSGznZrjXXGzG8atV%2B%2F9%2BinL9E6vXUgr%2FVqy%2BK%2Fb%2FZN3RPJW%2FC%2FZDsYrT48Ol8ZfjstmtEl1D1BsCaMGGPgq68Q1A%2FCdYJWQSm2Bw0ha%2F39BLAu%2Fi%2BlrIDr0wtIL083w4av6oGgw%2B3P%2BTz%2Fz18blvRfqFyysKhTMpsNTiysY67%2BZZkmtR8LRvHqx8cooIRp2rc%2BOtHhxyf29KCTQ1CFgeCy0W4IL295Xt1m5dN%2B%2FRBpP77tTEMpvty9vCAMC9gESraN%2Br5%2BAm%2Fdfn3UKm3Ml%2BthAqHCsFZdRuF7Rluq8Nmrd6jmMvrdYyb7bdqwJegmsMeyechotXTttbEbrWoOb%2Bv%2F%2FQ4Txmfl%2BcgRmkCmKO%2BHwGOmc4cEOZMOZYMRnelwxx9xb8hwh3bPh4wdxnaYK0tqT7IfjWGAgdOjAm%2FB7BS05fZMCYPGBM1bkjRhKZCI7IQY3bkQ76oQTZgt6%2FlRHBHKuzBCJFxOgnlJRcmHck%2B7wwkcX1F9olOcSilTXiKLFwHsHN9LrnRW9qu16TUQZV2CpFJWuovPmUkeVHJ5h8SjbhfC3DEmJB2P84u6DDB%2BnW4wVdJDbe0HdG1wDNgu4IRD%2BD91HpSqDpg1iC9qobupj%2BNiV76t%2FspmXvsVsdrPik59onqITZ1yczgKD5YrdOyy1B6OVfbjh6WHnuevjpB6andV3lnv9M5F%2BfV%2BpL6BhhMpPMv1FSmO7Mxm%2BUWRWn3JCD2UW0bGOe4LiDg0J%2BzH%2FZdYUva3Z0tvDIvSe0q2CAzYDlRFJ%2BBpDDsoYsY64qrLXlp%2Bo99bVKnOaTk%2B2IpKhHS4QfZU4auTLcvsgJarOYYFjPKU2RROb9QSxA3h%2Fc8bNX1nnBPEMZWWUvwVEanmgp4ngnhzjL%2B87Gc2UmZkx8eacTw2Ur7wpFxfB2w2kyI2SzFPEnHZl910cYdt%2BXJsy5bJKt9fj4zGb8etxej%2BLBR1Uvf16FixWXDMI%2BM5dUE34lWrP%2BSvWKr7WtXZCBrFCmv%2F2wUk8XczHpq2SZeR7TWnVfh7cfMZfeOslvt9F8Z5XZ4pfffGnH2KSSxv%2BqPa%2BREIWJ49GFEiRMRvHWlGmTevUNy6rd1QjMNxvGbTHkF9pe4JrabpvaT1%2BGuaVfkrLDuEL3vdZIGylfdIzZPnb3RZjJ5S6eGJIbUJtAbr51cj8no1rkMeRp8b9vhLBh5MJOP%2B6m3b%2BT35BmzSkQyq3k%2FpJCMIRdY%2B%2FqSnUQmLsGWSPG2Q%2Fp%2FIsWvOxfCR7gdVMDuvdaWXxr3xlppSYFBqs5Y1nwoNS%2FoKXdoHnyZLb5fxRA8KvPvwlGEq6U33FdlwViFktnLPIhkUWooUoI6eHXYsx%2B11J1NmdDcruX0WKptcz4nXupatwSmc8Ny5d3qC672d793k9n9fUNXbI%2BNfMICcanU22%2BT%2BW%2FP18KU%2Bh%2F0CWJcTtTaitve%2FR4v6J86%2BQkPo%2FxkNGZ4TNS6kTf%2BSC732Fqhp5%2BfEJPQKnIYR9QkiiKS6Vd4VKGSgqNuN5%2FFN0fl4VGglEExVnyOPpaizCgfZaxZcEslfDF3HgBoWAZOHI84WAZYBnRErqnQXfFL37Sy%2FXLlpJvdrFRPn%2F29V4axshfD8M7P37nt9RFfvXrUn1hn2iSu94NBAIiAlCBPph72SZUXa419%2FLgAAEF1BmhuG6gVyX8T%2F9%2FJ%2BhdfrF%2F1%2FX3d3clr1X32rJaEVZ1YzL3u%2B%2B1euIr%2B%2BZFiu1er14QC4YFYzV1o1y639aCGU6rWT7B%2FWNCAsEesCUzh%2BG1vJRe8EgjgJAUDAzBOHqFWorEOPwon4IsyCFI9BCg%2BJMOBGCQI4W7ZLsa%2Fuje64mvQ169XJbviVaT17nVz7XKql73MMMy6b9wWQhC%2FX%2BLxcXUXFzIU%2BUUFM1DbmwL0Ma0aw7DYXl7sdheXjpHnpAgmnzYpeLjiuwvL3%2B2ZInHJ5giFggEBUgdKN4s0fDjVpRlsvEnxPRfxhb360hVnUpxS0KkooogPwYN6p4kcK5bYHXXKoh1ram2v5KcROJKNyZ7Vx6cyQ%2Fmk6ob1WencuLTCD2ODZUiNSSI6n5hTL9stfMgu7%2FLrcqqun7ul1DbY5BdFGLgKLFdhtEeFVTYjx9ffxNcRe6E92vdr133JRUvLVr1V%2FDGp%2FL%2BgReGRUXqEAkKQICUhUwWQK59sGQOX4QRIH6GqqBjy%2BPtBzbwksTIGE0rlnCZ58yOkZ5fg%2BKJxQLgvTsTpNW4QAEI5wQACO95QVLr5UnLvzOuwmq1XOpa4qg2vH%2F9%2BkbAOuBCM0pa%2FN%2FgvICYh4Gh3kzfd3gXYL97iGhaYRGihAk6Q8c75OBNO8AzAWHFizB9YjDxLCS5OL8IeD34RuWuJ5V6QctrvnXqonpL31sFmQZA7NfeCMEKYZkyp4DnF4AHwffyf1%2F5PiTA6dj737qxV99yfVSsTUQuUnrl9LUl%2FJd7yoooFQQjZzfHhf5bgb0NimI79TjWbUQUEHyh%2FBZpYCAW1vvxeCg6ujZbQk%2BkXUFckasHxs5qmndvgKxkEX66u5%2B%2B1%2Bdrl%2BrP1fgT5PXCW1Y7ktWonl%2FrFwfftCybhndGB2a1cCUAB1GmpPTwUcvpDXW3N5fnycUKFXIlZzs1yf1ELt91lE8slof3ck6u61r9eq1b9e%2FXquW%2Bfwv8cguIu7cGpYNA89eMd8vg1CgIQsEA2gQjTO7WPKm3SgETwFsJzBE5o2M8IagBqFZ2RyE40QBiQUmzPTtOO0fl93XCg1jkkOoZtloh%2Bw60TLHIz9Tkx15r9qVoKYvkO1TRhBCO%2Bbem4QBNQoxHb9166996WHc34adxfWtBzTafuETNOrzxrFAqM1GvQTL%2BSeSCvTvOQaijPojNhdMt4zV6vklR9fLNzfNE%2Bj9vJcxOEJ3rVqVAgJxpkCPZeohT1cCXCmiVRkJgULYb0w8DFcZ4xsrFJj0GNCr9qDd44O53rf0ZpnRlocF8O2axNg45M0pxfw%2BlD1d80HjAZ4RRp0X4kAAIDme8hgBUbMNhLgQAMDMs%2FiwAhFqAtJbPMmJu5KAwBp4GAwg2GTEQQGlb1uYAfiXYQhRv9BQTuw%2FO85xhL8CHiJoU%2F0kZqcI36glKYPAkOu%2BOCm0yBf2T0dfBCIJPnU4vbbiI%2Fzy%2BTEoEkenx9g6DZcTx%2FzJvVQK7Kw3G2gxuaXCXyo5NDm539gg50phnRg7WgmZdBs%2FpGBX%2FHKCHKSOMVfovbQ1u%2Fm7qmRur16%2BJU90%2BT4%2F%2F1zhYCwCPgIYIr2v%2FAnOng2tCzcLJk4oywYQIaa9o6BT3eUYIJexVPCo5V9A%2BH4MJwQFvIGkOcMBW8Eja88f8Pb4ZqwpKeyN76E2s1mXyIGraAvQ8qcx4Ty4X%2BANQMGpGD8PfoEata3bCmpbl9JOQn6FM6MddLnuDNMRb%2BvjOHziWM5GCaKssU07RsSDVSZ9C5p2u9Uzlx%2FJ10CzggNo4Zl%2BCB%2BejWeSyBb%2BNgvIWzl%2B3XGyHbucQzZus8IsK0%2BTB4HvIfTHN46CdThyODXP7lwnx0uFtEKVj8EZEDWFKY1vyTcGMZMIbPDRxkLCHPsvjGTTb%2FqbwqRfYnOMjHoc1GjOr%2Fk%2FV%2FDNHePdSDM6jXP75%2B%2B%2B0Viq%2F11WLfa136VvwFKP8DyP3kQIaHZYhSGPCoRMR36xEJBIaJWLrFc5BFDDgWEYvYLjMxG1r3xjbO56nj941JjYoywHTLwdeasY2ITWjg072A8htdROn%2Fzi%2Bj9z%2F17jaAwwiyA28NxBVhA1YLHWlw9kA7ceNoQQjVmecRsslQLRGwwaqnOzHRhDPuMelr%2BHSYzE%2FsBEugY0RrQgkC1j24n2i%2Fk%2FCP3BSUhYwxJFUYsI7mJSP7d5%2FwoSkscuVnd%2BZPfspWqeX0%2BnDHTdxqlTZ2LEZ8sv79wtomYaqKxiKVJnbGTN6qRsZ7CG5v%2B%2F1fU2VhUwTdelmIuK2iFXUvoIRI9dpB3BEPB1W27yoHxlaXU0ziAt82INdJQrhWwaBnMqHxGSI4uo99QF7Vx%2FkIR2d%2FmQrjjNc1fSvrbPCvcSHWjcSSl9hB1Oj5lOdfOvg%2BhXq9%2Br91a%2F7r17070mRa71icQhQFm6V9jQj6iSigmmdIqvDmb7XxpQmr9b%2BmyAp7477z4yCixLsDM5VUvnuh7m1Q8ThgOkSnHhxQh0DNFjXv1b6GOG7CkRDC9D%2BN5JOYaCL0Q4BOS%2FjoID2KMfQv%2FS1hupE7kV8f4KwfSiuafRlP%2F7tG9QmW7yoga2gDH7OPOSf13TQRsdZXSlEpuW8g3Ma7vL8jfjb3axyy2i%2BdINjW9Ss076np8JXdA6FYv%2BGPP5zdtcyseaP%2BLh1%2B4DJmkal3Kvd73Iwxqowhlx3moa8GOz2MJjVyvyQt42WZ4NZQOivIrDI8bhvmdf65%2FZ6%2BskKFcRdeis9Ergg693%2FX5xi2cJmL9f0siIHTjwsjLwGffQ2O1oFh%2BZBdV3f%2BKjn%2Baervgs5fREh8MShpE4YkI%2B6wUMS0GcTnVHpBwzVupn35EBYZkr%2BTy%2BylDZXd3FuG0YQXs%2FrjvI505PYpdcO8uWyp1HBDd2Pxs31fuzXoRTQvNJ236ho%2BZmOoFuzf8%2Brw8bKQT4Nx7MexjdLDs0xWqsCMVIppZn1YyUrW8n542iggjqvQ%2BdJaT3y%2FDjCEcO%2B0wWVLt6xvAGPiP1cXwtehv4zfGBimrDe1KiJ5HyJcJW4UMFSmHkYJTkPILZBX9RNEr9IP%2BAdKhfFRl%2BpLCK86RhcNPxsvaw%2FL8bG%2FMxr44h%2F%2Fnpl%2FGX9VlDdc1V%2FDUVq1MTPT9%2FLTcWfx%2Ffkomfaur8nk9dvX8PwxJt2hgJg%2BJ4sUmB8WVnLsEJyROCWZEpLIP9uIm4Uh5ejXqNKX4wMVyAgStD9wIVEtcVqsdjQwGoHTAGrBARoXA9DWPVcmVwl22BdK%2Bsn3L2yhuODR4BiHF4eWZ%2BCucxD6ZswXDiQj2Ps%2BaOX7%2Bhppv8O5Ao3M0cL5wf%2FB%2FwWdwKdMZLsyVZjH9Eqcn0Cnd4jHG6uEgpyIsgw6PXfYXGPUZ1LjdLQqZrPCd8kJISe2L4tho4qyenK5FswyjOnnV9MMx%2FKF1Fv07t%2FupQYCbtoCKDAHqR9%2BEtAoGMiR%2F7BZ8Jdu%2FNcAYxZySdb5RBx3LMunjw%2BwiKRxJvqQevGwkyA0R3wkZd%2F7%2FL%2BTdgqEu7w4nm0PeMh2xu9sbKPBfO5XrI7NOXgiIOgP75%2FbCrXxPqG%2Bf%2FRaQ%2FX0cyZaE4mX7dtdgo7ve8Xn%2BScrtqSnye7X4JOel%2Ff7DRgY4PIR1bKvJEnC2rb4J6TnFUNv96WGsRm0Wv%2FnFBw9%2FF2Bxmqbst7dD8LoOA7tITyoRw7g%3D&media_id=1254206535166763008&segment_index=13" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:01 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:01 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_Y+BRyulOrte\/ZJqLMDHlcA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:01 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112115560834; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:01 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "0a0021663ac5c2251e136bf2d5052f63", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19939", - "x-rate-limit-reset": "1587864356", - "x-response-time": "36", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00dfae45007fa59a", - "x-tsa-request-body-time": "104", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"kOcvIIn%2BXFL2O7DNBFmfoPjiSXc%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=gL%2BJLi7Kd5P7lLaBJg7qcpKvgllWOHNhI0vZ8t%2B4Z8IyVnu3Qiw%2F56tO2lAxF%2B96ah670Qjok%2FLr5QmTgH1SS45O30HCVfbJgnpMSvOH7b2SBhIcZ0PqRPqXFmw2pDKMGuWSeWq%2B98bwbY10MZB4DDD7TFCczIS3yfmhBsAhBQTnNbYhd3zZIxJotF85MvfePU4Bptrr%2Bt0PCIrwJzT1h7EvqKubjEOSvrHD5XAdbW9BSnrAimr%2BDTroM4WB%2FgmnIeVMYxUqAUS0xb4nVCY0%2F%2BDlYY1pzDS%2FQ00FKyvTUPrL8k31Jzb%2F6GcIc9HRtP4osHaoZLMDI5XdaWHy88kMIGQzMyyps%2BlI%2FpthxhWIaKUPGDb7KV7U1y8vl85N7WzZadGpu5cyk6SWwnySaQRqcnuQ13heeI68yn2j6NggQJm8dh%2F5hiMCQWmepFg6zCA1%2FG0Lc0DkUErYEDudQ00unFREr1UXxo2xTByycP2xsQSgrZ%2FBBbAg7lvb6NpHPZYRYQLMepwx31DM9uB4Zlq0jPsv1Tph3qRjHO9ItLaf7%2Bo3GR07QR4L1XmvHUa4StPcuP9wT7YreW%2FD1DdqDK9rh3ff6X4i8rG38bpewjKtDzsXcuWkUzv1BIJtNI0uT59uwubDE3dY%2F%2F7wwwzBwf1jBlL4RsdWCUYvdwu1rfr8guhndSvqz3t2eUwzxoZXcq0gPt6pNXYyIgPQWeShH2Nn%2FhCMUL1t0M8uFx66nujqPeDfQ3cWxn2X%2BUIF4aU%2BEOGpf5wfw1Ip7gr8SCYtNUdpiM3WsA6v519l9FZbxhCWkNnag2ly%2BkMVM%2Fnvp%2BgdaFpf2%2FwxVjw1PXPpd%2BtwQiTi0zxyadv1%2BLKqw41pViUmf2iS6IV6u5eX8Jmd8s%2FJ%2B%2B%2BLvcbJEIrD2Pl%2FbrBH2w4gNsGDFrvGlAmfeaE7v0rYi%2B2POkRHS9GIfqcsVdDCk1%2BNvlw9H3HkIO1i7r1pR%2BiLzMwZ361%2FBIVGu73BEYcZOAA9IPUnLTJ7v6grtPkwJHuvvz1pdxZHLnu924LxdsT9smaurNH%2FYZIB3iwsGN6j5nuoj%2FkgkwKPXJ99aZUETWEes40cGnXmc8ory1rqPPI%2BU3gK5oT86tmbBTiYi6AsEWFlULduDu%2FTvvIymBLWk%2BfiCeUmxLtq%2BXN0X0OnxITxZLCh3Q0fDuF9r8%2FL4deWoTJcXNiRM6%2FFyza2miWw1L%2BShCYKbvy0ep3lpz0h53ixjJnqb2TJNdaPiIO2H8XzfzhPiqVI2Hy%2BNCZRDpJGvuh7eqv2r161XrlJ5KQwGD%2FYVN3eGWWbTsPh33l%2Ft3BZw1%2By0Epiz7Sc%2BZ9fh85yXbGmulFjQO5ctWjoUb6%2F9Aq5fkTLCjfac3t4Wsbpumx3X3ar8%2BXx4Se1R%2BE9oxj8uV3hzN2fk4%2BznKBuai8%2FfHRtmWmMi4E6v9BEmkkT0O7v7X4gg9CQRuO6XhXteGGoW28lIf6loh%2FqNtEKtr5fciKzQjJZNfeSIS1JGWqz5yRMDDn35r%2BovjJEFuerVb%2BbqxpQUdBBf7Xe3MnoCkIoUspKMS52tuPu6RrSnA8Vji3%2B4U2xWDfll1ce%2BTHUJxUsa3F1vwkhZBWD3jlg3ijb7MHcRwV8%2BYo719T0%2FyWhvdr1ei5drFXapwk%2Bf%2BifX%2BiMOp7nz63%2FBERnaeu6Xf%2BN0Rc732N7tVKMMbQp%2F5yqmVKKv%2F4IYQLxr8Xivm91n%2BT65fL3JQiLL4i4m4IJiKWWn3PVZ9SoW0fZP0YYUYPiXLuWnJ8DDAXwRoIDILq9pz3vk8y3BcHASsKCoWV6MARjp55My6I5vqkAxRxH5B0WA6Fgngng4hYUQXpi9oL9IK%2B1bvuXrlkuvBDH2X2Lwnn4nvQoIIIcmZ0y%2BBkDgNiyzsLJ4WHLMSED6qkutdAwF0QCMKrqzAEeFJgqEwoEwsGAsJAsOAstAsVAsJAkFAkMwsSk99a5jd3vjfDKiKTKuuEHAPp73675n%2BfLiHS%2Fr0%2Bbf8wf3S%2BizVzoLCv%2Bi%2FC6RHVRuP4%2BuUdXt0d6cqNU3hhPzq%2Bt%2F8VVUIYlKm%2B1rD%2BlM%2FLdZuGmvWMVxpmffLKsONUi9VNlbc63rkHXCukskJEiz9jlpxGzqSLyp13qJjC31dwEwWFJV7JAFZu%2BwSp4vMCWNQd4PJdozutQ%2Fw%2FKi0%2FyX7Z8SGfbIo%2FJ4uICvgsDRd23ckNhTXUfO8gPBjOsQ7y8loOXSIOt3fbx63EKeGDqeWAaiOvqWs%2BFLDjpQC3%2FGtS4OAEaFJBsSAsNAsGAsOAs6AsFwmFAkMwu2t%2B3zjjOPBqpUk3dRRiTiYq%2BB8B%2F%2F%2F1eTr7Bw2%2BxviF5buU%2B7%2FPTJ%2FQ%2B%2B2Z4SvM%2BC38fDfSHbNY%2Fd6WL0JIW4A7I%2FXzn1UYLVa4NX2dFFrftPVXZz7LVsHlPbTdTNoG%2BC4BJTelOpa56ipaDgNRlVeo2M4%2FK%2B0kGZjemo5LMdV8YStKUp7ABdtcGB4WvdvrLgPv2vhZQvOi1E35xT6zDCa2eySrleNaHdAymm4qEQQB6FN0g7Pm%2F5XOIoHdIPMeKX%2FA1ZKqKa9zOezEKdj23tiPj1I4MEa1P1pGJKZwaZ00pwsEeRuQWfUXrA4ABIhSQzBgLEoLKQTCQTBQLCUKBIIhIQhMLJre%2BPfWu%2FPiVLF1VSMuqL1ll8D%2FR%2F%2B%2Fr36XRn%2Fthya0ejj1nlo7fZ6%2BEnnDdzPZ7vNhPt8MfZnt02bFyq4T8ZL7g8%2F2omvm2uT2onLvN5hitj0WHpC7M%2FeuAF7vybTmpSH0rc9ChRssOKhBp6mqZ6cn9M87H6ew0fv39U19sHFLdT%2FhOss0xIVhiAqu00QqZZ9MCiPzTXnJumO8prL6rdDXzA0zuBvVSWc5xqHJDx9M9l2dkq7%2Bxrwr7Tqviq8IRKylj118mjLU24knoKtPyFggnOee6ykoUt2HtQcABHBSQLBMKBULBQMCQLBoMBYMCYUBYSBYSEYiBYLhIQhIIhMLeXVVzxSpWXmprKJVRN3l8YlXofONUfo%2F6x9q%2Fl8uh7btjfUi%2BOqXWwQQUnXWbo9q6N8i30ljnjZ0Fx%2F9FcteWh%2BTqCIsGawJb7rudrFsH3zRnJvzPXeojJnJbELhqV%2Fb3%2F878i5Pvn8kn%2B0X%2Fuupfvw7r9H%2BVhiW%2Fxfkv1spMgPxqhr5zR69uvzERpzryVRCsgjRhGIlE4WX06Rievhyne15aRQE1%2F3rdY%2FZvtHR%2B3svmsABELpyYPEfR9jNanUaNZmUU1ZN55ioB%2B3V3giyZ0Yaek3a2Uy3zAsa5Ls1k%2F6jLzQcBGhSYSBMKDYMBYUhYcBZiBYKBYhBQRBUJhdmcc4ulVeRJKvF03dXjhKk4G09T%2FHP0fwv4v8P9%2F%2B6883R%2F2zl%2BAxJdGr4ePj4UcvxnLKTzkNr%2BW%2BWb2538%2Bqr%2F2cFXfN0qlsbijTbtMBx0UhyP8YE5pX33IQW1N4PXEx4tpotmrNTy1UFcRgZ1Jqhcuy3jG8aHGKHra2YuU%2FvhWrftHLf66hV5n2h7OJ33KF824Af1%2B37uU23%2ByO5B55h0Z0AA3%2BeQAt8cJSyyn0V61qoo30AAPyVdlji99BfPnQIIyRaQMa4fxGRaNhemu5O1UU1jqnvUmGOJ4KwRGoNRqokOPVf%2B7CDgASQUjCgVCwUCxoCwYCxICykCwYCwyKYXGI8UuqvmNU1lSVraomLkR5H8P5t8R8ufH6N%2Bn0YfcukV7vK3XNgwfJ%2Fl8dzpmkvN7Krun%2BU03PukrfZXRrhL49BHm3rZafp44ThhLu6pX07BTQwbBtoencVTjRTZZsEpFKynfadEoW%2FUZTdYJIIwsbsPOWzpVObwkIA9VFLy2htrspWhTJfF%2FwH4YB%2BdU6k4TjOqDJTNiNLfgpA7hJObHqhjEp5uoFG2cQsqk43d%2F%2BbqA56iULe%2FytMfetv%2Fpwkp%2BkAZGBk5b5ga9Z7TNuDJ3OGMy7ZgDHJlASlmWZTZelyk%2BHXEDgEiFJAsMwsKAuFhQNgwFhoFioFgwFhIKAsFwkEwkERGFSHLGqrJSSFWiqvdXWpdJwPn76j%2FHBv47d26zDoPuVT1U1X%2FjVUkj1SDfk6bSxpEufz0C6VCN1H4Wd2qzHKfXHO7Lho35RxCXqrCWq7DDo73Ft78MTJsLDTYoz15DrcAue4c7e%2BQflOJ5fhZmFEA30p%2BNh5qKWlAYgCnExhVuDg1c1RxfP2Sgl51lhYZ%2B00Aieu9bdoS%2BPIe8%2BpA333r%2BbfwsdVvIEugvucmjeFAIngoFe9Mw5eXXVRPNPy%2Fol1WXCTWMXnESt5akC76a77h7dJQJvvSSroHyx8FUGzb2dfxfX7QOAAADF9BmhwHCgV30hbF3331YjdXdIr%2F%2F75oTWKf1rXWr%2FG%2FIru%2Fv%2F%2F6V3xnclq6hnST2tjuwgoYZYyHeZENLpm2GHHWP%2Ftt7bfYS1Lf6OmiQSeFFcuAxBAMDM5wndzB6fTESjHFXB%2F4nWbzf6iIcSD%2B%2BPNAI946mEFrgoY0we9Bu8V%2FFcoOrQY%2Fncdf4FocGzkhbNQDWwlpc5%2Fif333xUg6fGUO227WOmvvHKm362mqp%2BJDYoZzZWt6PQ%2B2sqDGyTxos0nis2KWcvmRTCTUNuvq0zZ8QHBAcSNY8WDxZ06UkqQyY6mq2NkGYYXXd2RsY6kosEksUCb3FgklhYJJaT7nYRoGMIknPS2blZMh5YO%2BG06gmstNmicYA65z85pWGmWQxv24krqaWPJ9Mq%2BTcqwosoHB6B9G3njrrDEbucdbdQFYFZgI40%2FVFoTJGyzEpH1MBR7hSL%2Fn0H%2BcIFHYIPYsZSaqO6ycq%2BvNX98epPr1eXpbNIKzMJiFGXgW33sAD1rbAVe%2BMgHLweQ3y0G%2FBJkQVN5UBneUDetilu%2BtC%2Bx2cgyKqo2rXL9WJL7u%2B1ylfl%2BRkFKKai8IrxzsL8IIjcXt%2FzsPZlVHQuVgCoOCNxyAF4UWjgc5AYHP5tGMeTzhICThggQG2fujRpJFN6Li64wgCxS6abfHbmE6i8o1jkzdLdRlV9%2FSAygQFI9RPatxDsUvgaQgBpECv4FkYeDook%2F3eP2h7VoQvdzVr7tYv1arVh4teq1Yk9X7q%2B1lUC3k8%2F%2F9e%2FWufQQGhhWT1AfEQTA4TiFhh2v%2BX5Avhv8CYNDNVwoSECQ1KDYCzB8SH4KIDSYa7%2Bf9C4vm79rnmtUvpIjRe66r1y%2BIlJ%2BnGXiQeDR0dixgka2Db6U2SPkYAqoB8YAdAlHmXAuLwCaTx1mAUmcVTzC1R5rTmz5saLL7SXmXuRkE52AIl60M3MVxvhlj1xE5nm2XyoKGfGpqQqF0zwZ1hoFWH2XR32bpfybwjQ%2BX65VeOXFjvjSXdUtq1esX69XMr1dYLJjFxI5J5L5S4bQfg0GogkYMgwVSNjRMHgGBNUyAAifTGsDW9aF%2BYmC5unuP%2FJ5ff1oI9f12vdr7uX1S1dc36v%2BqcfEqxfq06woKcaO437H2j1Bj5RUkCdyPILbrABlPeWYIdamgH3m6Y4k%2FHC5jEUpMoOVw8E9PZvo%2FjN5AdQHQwAxlZsk1WxXy03t9sV385gftY7zs%2FGML%2BGOCXdmGyHLY4S4BnfIxX4nUGfr8QgiYpEtNEc0rMeGm7Bo7qdJJYK4LTmge6eHu9NLFhQ7qY4oGMMdfVd%2BhMr9erk8Je6w1VpYlXqRqHL79Wv1f9WrwSb2bH4XJtDTLwl0NiunLL5f3dQxh5ABSxslPMbeRKz19QO63%2FqCbVeo%2Fjd%2BCoQzd6mSFtM44Dy8YxzpS80Kj5494%2BEBKNOleVUf99YgQ%2BlOgx1k%2Bx3zYcv%2F4e6OGP0VB2y4%2B1Xw5Jo%2FW%2BEI7kHoNb6mDfyYq4WSr8t0G2J0fvs3xFXN%2BaC%2Fnld2DYNR2X7f8QWtUcqV6xV69%2BsX6xSCieiawEUG1rT%2Bn%2Fnzflk3vCBLxXxlXCgrZIK5e39cBGgNMB3DDKpcOcVThwePHacPDsBKHYSnADywAY7aSsr4dKXHHgeBfg9h6NowOkmMO41jvyp0P1RAjaj0nuoTnqn80FnF3bwtmZf%2BsnhDQVYqF%2F8b1dx2G3HdB3j29AmSBCdd6nICA1crBBOgTMdN94QD8LHj1y0qb5%2F%2BqX8%2B6imTJfy%2Be%2FggJy6hx%2BnRzsr7OMDamX9%2BQsMdH728XgN2xhmMfqdhJvXJhvsYbJtLjbfV%2F0XX7JjHtZN3%2Bi1VxDsSDsE8XVcmX7wEyE98kTvDwwDsNy%2FCMSDBSfhQUXnA82njhwADywACsyEHAkLAJT1C7TYjn0JljUyrnCt%2BFZYABeDZB0PQDVv6OYIg%2BVxXe8nwcUW0DxV1QvjhdG%2BPiAooUO%2B42vXqCqwMBSU0YiawOH39B0BjOWX4sjkL9gjbYfwqXLTGYT1GiJATRh%2FrrROy%2F%2FMi7Zf39Wfjpu56t69VnfJ%2F3nGCXe98QaGv3ien8EOZkv5YIFn4JbB2jAgC08SBua9%2FyctL9Hy%2FXqgh4VkXEfhnXq%2B5QXAg3xGYRqqfQdCO8BJwN4b%2FGwUEfVigCcie4XZKwQhmg0u6o5F2Go8kJhCkP6MV%2B%2FoTBHmfJA%2FYSwUOxJr8aVvYHoGHEM60Bz3x2TwWmi0eKfL7XeJuGCTdq2RA3b8J4vo98%2F5rmZsf3GDG42k9w2Xl6ZfiVK30358LMT%2BspqaaCgItUNPqhavHBDe%2BGhUNp%2FiYIdfpxofXxZ29tN%2F4JqAofRIbe%2Fh%2BC4xQwPGAUWVeq8NFdA3dQjwb%2B2mv%2BoKy4%2FeqqH2ev%2F8EhT4ZqsEB78MdVvHUwvutn89Uz%2F%2F5icnzRS6pdQlAd%2F7%2BGeN%2FWL8N0GPo%2BqSYzN%2F%2FC970DkEinJz6WGW7PgjpV7l6%2FPXFv%2B5MJfYmW69H6S8nt1eFd7uUMBc56x3tX3TEGPlSfKUwQDHDZ%2FBIVDHRwYbGT59X%2FRLvw2UqVDq77DYhzqa8g5Dl9N5Du%2BvBQJJEoQDzCUP3dcpvfD88HewmW0TlgF4tFZZTGg7V%2FPfpBlFRuU%2F8LCuPCA4IegwFferFlWqz%2F%2FR3H18BHF1VXo%2Ffr1eLvvu68JUiZcVum68Ehp0t3C89fQHMoKsvRe%2FJ46g%2BCax6N2Njfr8GHGh%2B97r627C%2F1PfhewN21IIDpv5YjwGxiQvfggMOmOASlIrfIiPfDwAXDrZcPKolSrSVWMpmqYoxVjWq2ss7%2FeRnuAJdw3%2BQvg%2B2jOT63VNjOHxoRRqFe4NU3JRHT%2FRrHPDLj3bk1KpxISCgjiH1dRxgRXo4cAI0yM%2FAVCD6c0ype1HUXmd9obaSOiVOe1eam31xlk%2FbsQF0JHl5ReosPcsrmsJUqz1DX5fBRleSY4oJDm7cXfi6HHemKrD5Wmb8EYvCUJwGVNen4ubz1bNf69E6%2FLoN3Xr4vzlZPQ8IakykxjYGvgmpOK5DLkNuIYvwYX2fAS75eeRU%2Fw5Ll%2BFsqKxpr9aNlHCF%2F5yL%2BOXMKrwQi93HbS%2BHjbM7GX5eYZexvy%2B2tco0RVABFn0jDgdfELaAXOEddAaBsr7Vdni8t%2BjDK%2BsecpyX5a2a%2B4wkyKJTk0xybpra8plSzhuoAtcaFEHmhwLnL9urS%2FJN%2F2M7r4DvpTdNLDXS9WLEM2Q63jwjX5fj9brc973o7Y4TBIU%2Bi5tXD9mb3GAeseSH3vTcaQtqBrrotGScr4jvplgXhFyuwgABtoTb32719mbV63cFEVlyfC5fh8y8sN8UYrX9M289Cyqy%2F9a9b%2F8TVv11dotV6sqcgh3sK7f8Lwyi%2FNeyjk72YZksJqxBP%2BaedHfhwtzfSH7IZLCwT%2BPyw57fZ3%2Fcze6X9PfDJIr1%2BVMP0XfmPda8E5HZpLAJSs2JPj1N9CzShlBQX8EJ1IhqilvMOjkUMu8XDBj%2B8JRqn93XQvIIoNPuUt9p2b4q1sv4ggt9X9DttRkZw57ggaPTRzOuEzsF3BMAxKHYQ0z28RGcQ4XD4K25uwtUYanuCGjMdS8twpd7pJO4hxuUx3zhV9XfSUSQeKPLbZQnVLbvWlQ%2BT4jU4ngceZn7Qvwe%2BJ%2Be9Kb%2FVRJQEvX6YhwuNkQRZbtgtagD%2F0EWfMiyHmko8e7hR0%2BhL%2FrLqvI6j1f25PDhpc1bYybQv%2BGy0d9WanVZLdhJ%2FVki%2FUjX4YJk%2BQldUKH1K%2Fp57iCBlncf3A7POtzxHE40n4wkL1ra2%2B4qLjsQuocZb1utS7z1%2FJZddZfik3aH9p24G%2FGWwszxL8vrawhy42c0JhysiUvI5wqvIdPOJhQ0zFbzd1LGFAH2cOCvLXCYoNh6Fyrg%2FO5kO1IETrmICCY0oAjLFhF0iKuTcZnDCFXR%2Bh71ffx%2FaK0nrh2uu%2FwQmaPnF%2B6SS5PPr3y5XktW%2F2Tn%2Fw0eNCLoUvkpTv%2FBV4NdWJ2X91%2FxgqB%2Bl5TLC8GqZWXVQfuXzVE3CXENOFGw7L80FfDfqssOBc4qPl4F8MhQh8N%2BjkODUOMDX7LCA6muctAokCxyjF5zXDAOoKhENolC%2B7Bryr0z%2Bk9BdvVFqpZF5x8pf%2F69XV5CbuWLqy9VfF5PT8En8Rxhr2RKQeX6BIMFBVhkeEG2wefCxgGq2bFnJogcl8DQGMzzC1X4JlgAADC1BmhyHKgV3dehPV69dqZMRzXiFcsq99cV8s9ov3wivfku%2BSfFfc91dYGEXXgkJFcQ8A7N%2FkLYzcV33HWorLmFFYbaYqgMCcGA4SAo3wqDRr1dqjnFQzlCnfNj51QYq6DtRaAWC7obrZWhA0h3phoXgQA5Uo2ocR3LBg%2FPske4CuD3gaAtVzT2OjbGO36uWRvqxV%2Fr1etVa9V7sGf4LwUDEistuwR9lZgKHBeCMFfLqQQv5nbqDvgDS4eBfIjsSnUFwmGILKKx6FWPIQaqexftC1L5WMzIanY1CgI39Q7YSKn3bQZfhmZObJVrI0UdA7UDvNQMeB2YiY8Nn6zG4E0mSRvwcL8dMDTJjjC78RqK92MxkOU1kHeVJmBq6oM721b29agQoRydMnaVla%2BemT2mH5wNawMIVA8kDvG820wFH1cLtS2vU2VBAq7hBZmDilSgAPXXcEbQQxBbtt5PEARCBFgnvBRlks3B9pY42uwCwASAxLETw9%2B4rzQEf1NX5xIS0QVbwlEXbwiI%2B2cdLyv17tZd47lpvV6qV5cFNe8SUSOFFneKs76ar8FWtWj4squYChwP5grqraaxYxHemLWPqWqXwMuMkAI4OC%2FqsB%2BSmvA3wO14M8v8GtL5oHHiGoBQ%2Bnh3L77jPAWrffL3eRgwSGukCEqxfBMvxN5rVVMcAQQ92v2gM8B89xkDVdDfUyB9y5nAYYYLgCGlSG8d%2BX4rUKHcGglUS6MHxjBHRpCOl0NKqKyywRVJy03wkSATtaGbqwkCYaDk3FLYVRNiLZgTUvE1Dd0n%2F0X5PxPxP6F9dq%2Ffasd%2FN%2Bvd3RE9%2FE%2BT4WDHQpWAtgwKCFUNa1qEhBxNaqqquAJ8D7tD8fQkeJSOgZUsky%2FH5a%2BX5J5%2FV3LL69J6xfr13Xr3uvV69l8fPNCcYOgkI4WdFdd8DveC3NO3y8hAVmlNpYNQFYiqpSP6JrDYxVY5DWtpoOmBgNGyx3UBwaeErmrbh405NBhe045KOY47QaCO%2FYVwwm003enV3%2Bh%2Fd1SL3ffRClXEerSer1d2r117rl4cEGNu9e9Gh%2FBDxdRXQwd7WddEHioBIPQ%2F3SU25uacp5kFf3GVU9JszJlhLExzK%2BnRNt4hOCnua5PQR79dfKvcT8vqr4pb9Wv1qTRlf5svhoRr%2FjZgwEInDimfTQDZHpF6Bi4geu8yPryRpFMjD7i%2F40hlGIAkX04EBAcPPD38VVhWexnf%2F18u%2BoZISlqev%2FeXzTpIrGE0isjszwtawHqzWwt%2Fld%2BomOtB8ltw3qwTmndxe0J1JfsT3W3fFrXrXq0lq%2Fd38X2tfnudIaZ%2F9Ec7N52PhefLHJ%2Bs8Dq%2F5fX8NCGMR5vyqPI%2F%2Fw0LYMPZbr9NIdl964LSjA9%2FYW71rXCog3NTLZhiGMSVRmpLodYj2%2F7Y%2FjsckYNQP7Fnw22CDTLKy5fNVMsb4aMPTzsM5dtrEwS31aZZEy3D7fiVS%2FBnsfOLsGbM2GSlLsHvgn6MFuFIt0ttt27xNqP6FozClMm3D2he%2FcuOojfqZO1qfVetYCoCACCHCyO82CjFGO2VTDf7y%2BSTSfSZhRU58Zw9uNw4ec4BhyA%2BPdvpzedV6roh5tcrb7hlWxaFHmpplpb44XiHNAYcLDhICbNV0NvYXoBsxsSHQGwo6CFVA0a89nug2xwXOyWaKQMDJ791hGwGw7OxHzj87Nv4ISm%2FY3rwXzF2vHSJUw%2FYgfdqGX96wmQbZKSJlWIlKRn758LS3EwxhLMrov7Rglzr%2Baidcjgj8K4iLT4go2yfndQOMvaV6VMjSCfM4zL9fMCWPt68uGA4Dtriv6qlL7%2F9otSNwKYY1gPECRAjiyKuov3gFeA9gN4GZCVVbwF6EgEyCXNiyIzeT3SMsf6bvFZcstxuXSAasCdh2L4PeA88aPcIR3Im4oGpH4OvB14usCQdU8%2FDjj%2F4VKOgAHgUEwDWeDvGuBVzZdfxlAd%2F%2Bcpb%2FoXWT7%2F%2FzEfC6MFd95PP%2BgXF6b0jdr062OjhxaMFQmah%2FJe0exnU39N1ZINXT35I7YVlntK2l9v4KYZiwS4YcAdq2RX6OBA4yWH%2BGwrUnG2SlrWthXlbZA7XEo8nOGOoN8tqX%2F7RXqQz5peJWvpa%2FXK70f4EMgsQqquq3kIBXPrBnFRBF3d3euGYgKbisVisViu8Vuov06%2BCuHFbzQBL8yEmB%2FmeA4fv2q7KUi6Cg0%2Fjy2Mpj8dOEFva8jy%2F%2FYvQOH3Jvf8FYm98nvpkL8ERnffJ%2BV7hem4P%2BcDgL%2Bg4AcoywGduPIa92%2F2EjbuK4rf4oqs%2Fy%2F5Oan692LLcuXnx%2B%2FEm7tbMRy0tfE%2BWh89S3%2Bi9iurWvifbXr5e%2Fg68DYFCYlzr3ZtVvAQA%3D&media_id=1254206535166763008&segment_index=14" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:01 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:01 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_cXKictub\/RibUPq7rcfRCA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:01 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112166875292; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:01 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "82f6b441261c0d2d4bdd3c7eb93337e6", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19938", - "x-rate-limit-reset": "1587864356", - "x-response-time": "33", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "0094c20b0055b7f5", - "x-tsa-request-body-time": "96", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"fvbzIXFf4LjACiFxQjNff3sJN1c%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=8QR3xLglz%2BE57nx0H%2FPyHZExAv4I5vobu68JWhuOSw%2FOw%2F8l3%2Fu73%2BGSvOkt9CRn2bvEEupMHfW8lT%2BP0jkqbCd7FQxXVhGrH43ZFpUE7uD%2BXOqrYkhs0%2Fcu%2B7rzeM6O79eknRffqdKv5V6SKvBSEP1YfYhZxSryfv9foS5Vslql9FyrrJ44Q%2BKEPqQxgZgwH29V%2FDgkN%2F3moAzPlni%2BWDEuX13wQeWlAhrrUA13uRGEui4WzVo6WOjX9fQbFQ1eJhgd5fc9f4NY3a8Epy5wid%2FTu%2F6tPJz%2Bisfgi6r1WCK1SwfholiGAQLX23p%2FBRj4mPw0hojC7FF%2FWtWforfiOW8smbGK6wT48aO7s7%2Fgm8%2Bd7wfqUGX76wTxp6JvdJ7f7sJkxoQg4QuFEYP%2BEdnHQmHuD8rpFb5QsBGTwF8FkfPGqBScNMy4ffgs7CwSogNHTFvmUjK4l%2FfTCJPDcpnbbw3KCuAkI0C1io%2FUvtojdjDAdrQ0x1jgYwTm8iyS7E2lbx5QcnK%2BAYbm8d%2FGspPI6JoSIGH2btTjUsyPO2M5b0z5vgeamtoyC9Ph%2FjXhJtzHuPci2GCq4%2BBUSRaQUtjyY%2F%2FF3lAb%2FOgyXH9wH6DYnBVR6tfZRrLI%2Fl49W616T16%2FBFLiX1%2BCGS0vLspHffrFfosf8McYKqAN34b9MdN38EnZGUS%2FBR03tXZrrKR7%2FhoX3dU82%2Ff0PNOvXGMNKwEcxrYuxBgoAzY4yEd1irfu2VKABnjQh6MIVPFQO%2Fws5P2Jfaj%2BgoYkTjg87%2BnJEzlNfUcxfaS7M3PH9AI5k3NV0j7QJ6NB5%2Fm7%2Fm6fYyfuyHOWKsj4DW16YWZbUYP1W0RjDuG3WYSwE%2BK%2FQsGiSu7o32UdiBjo4Fo5tgfWDFXZcfPj9kDslfA2s9nsNAYogVrTIguSkreu26IDAhR1t7MGNw9gtRObf9RnShRp%2F4Tmu965n1%2F7J3foTKTbk9kd%2F5o7ERf4Iu7Hr89caBoL0f%2FPZ%2BSK02%2FcxVZs%2F1Ln6JBv3ebOXy%2Fde3v%2FkOhPIL31BcRJAZaXcpuJIHUf3e7lSQLGO4%2BMQImYcM6b20%2Fn7szBfNVTXX%2BZnSHYipITBL%2FfOAMm0OMfX%2Fi%2FcO0wevTNgVFnxBBDDrUwey5dcnDgP8eRPcrj8J8Bscy8VXwhBBd8S4IGmD3gP8afi%2FtF2%2FcKZYb5elPcFHiAcLt9%2FYUOwYrVr8JxJFTXBt0WCGPq7UUQAgQgEKrHmJDgnhefA6pauUQL7juQnkpsvlEC%2B0aarETFaO01yeQ13rxR8qhskavZL7t%2FRL7%2FCvdEnJ3XZBxOp%2FqY17HfWTMxy%2FX%2FOFbOOFhxqUtLn1aJf93iJS4h2Z854yfjm0uT20mzVg4sT3dzjB5PR%2Fxdo1dzwfwnk%2B%2Byx8X4cftuNyfKyifl%2FXPH93bm6YrRyXfpBElVNxWf57jdctzYnusVUf9Ucpe8rqi2srtTxpi6VdvpzMzXQGa3RHNBYnzbeMW1BZv66wVG5jI7eOubmwBgCBCwyPizPeWYePjx5ecPJ6CbSN%2F9er17teryS0%2FwRERjj7%2BZXiampkvpdYc07TPwy45R0XgbXiJM%2Bf1iv6dS1qINu%2B7vJ74%2BIkibpXUucnmVlkngj8scsnqpLquYyew%2BNRGB9BSMJKPv1CvCj5xzHMne8n4bI3QKhBb2nGh86TKktl2yCb9BWpLr16uJjL9ahImTFfDHxnwpRWPIg0Qlp6qJd%2FrHseHxAQDo%2FVYPeAxvZQNZzWx1goCa6qtftgCCQHY7MP4DYqi%2FAAALPkGaHQdKBXJ6F93KM3f5peliuilevWKWq%2FWL6V6tYuf3%2FWOV64V61Ja19K9dqZr3U6fr14IIJPEPrWB0gXGGBCQrwvV5OHQaSxgvGOKtwbXUzQFFjrARhAbw%2BTMSLYjhfycVhwTzzMBkCgbpiTHUcKjDTr%2BFPRJ4%2BA%2BAMgC4HBs75cICnOECqNFsonrxDUmOvwWOuLr0WKUd04%2FWqFeOXYmv5lftertYrlWK4DmGdIEWCKiOZPcbgjlaDQi96VYt8Ve8C0JA2iQ73LpYAzwAcKv4q7UOPEoOKY10MISOCLXLLpy126TkcFXTGiH6gxmoXmgEdk8JKM0OZfA5nDcG5wWsbyHXQcMFW2%2FNU9wqpjga9KPAkEnLQDOhs1CRSt7pBSaccvgtEBMJBMVh%2Bs1gnl5HpvqDrvFVez%2BKEtsAJUjdKHTNvCYSBhwJP51v%2FaaE8LPL7PUbeCsPAr8Vgz%2B6moG%2B7iWzPgnDwfLiBo%2B8Q957kWA14epWU4ykQ0K5R0Wpmu%2F11%2BuXc11dRKtdWtyRQytYp8v%2Fyq%2FhEweg2vZPdxJO7vmAqxVr%2FBZBUQVit3e3ctq%2FcBiUJvzu%2BUK%2FjXn%2BbGxyzS3IGagfh%2FMDlBgZYWIagxsUjVFr6EUc9IiuCHwIKGW1UUbxUTlwgrgYcgOZ7NEkz1iBMzD4fy0CyqWBnQePj0sq0vGZZTy%2BCcPBe93d3dbB6h5B1wq%2B6EtJ61jl9V1yVd4rfNXq5Ja6q%2FhD4o9YUy%2F8v3f5fLgQsnXWFBCr3QnVVVCkX98HaE97qULgEgHO%2Fl%2BWT16uI9%2Blr1qSiZ%2FV%2B6vvr5cvxAkUQwTgqCEGN6CPIJJOn%2B9j2SrNQjUnPatKfQ9zBLKG1fZfYyQL8Z20CUa%2BoDGc5b52u7vjsS%2BsX5PQRq7l9a4Ie74mW8QtetfESE8%2FyfA5BYojcDtvBv0wiIDuCoex0Ew9h2qMjMFnqy6k%2Bc5vdQQ29fu5fQRs%2FV%2B79e6pdCaHLapV1L61%2Br%2Fq2pXyfxa6e9pwjE6AjGUei5l8DrwUdmPsCF1KZ7EH4khRtEOdL2jI36Zxa4tylw7gqgpfwosXCBoS%2F%2BeCZ7aT%2B4ngTqpvQfkshLjTULC%2FMoa5m4%2B5fU5qm%2Fk9Ca%2BLltXvCu7XUnrFfq9XIX9dvVqCIIQnkkb3KHb0jxw3NXx5o%2BGJ6iZJfUKlBx6l3IuUZYSIdL%2Fycyb%2F1qkCUQqUkq2j5PpaSGixy9x%2FT7REB7vMnak2pET5aprUNHwpPJmjwHYb%2FUY1irxSAtLUNWD46GgUz%2BLkgF5C92Dr8syvcJbTENf2EcQFtfgw6lqqj9opaD4nvXo9dyUStdrl2uV%2BvTYCARiYuJ5eLgdmUj6t8oHYbvBuHQXA3FVVV2wDb6HXT8ExcScMICAkXkCN23H%2BKvCWwiJK9E9vgu5crZS36L78MFS1J8X30kcuy%2Fu6hIxInp8MjLS%2Fl3jYEd7mNTKzfTcArMLRscwGag2g%2FyEpSagQsqR%2FLF9rqOy4UEAqF1JofQ3zpf099FiyQN1hb%2Bfr3L2mrtIceED3S7CTh%2BljQ7PbIQPsF%2FnGfmy%2F3dovVHq%2FBP7q3a%2B6Zel9dcA%2FwKBu70gSYCGA5i4uLrVZcpBKFgM4LAkKeq2q%2BYzOZ7A75NH9eXEuIcHSVu7f6wdhMHoYDsSA4KM%2BZ%2BKZ%2BDAKHcwIkHAQjnsj9YA229B7k%2FbLlFgehgRB0%2BBcsJZ47x4LwUaQ%2F7OLg%2FGh8EdHOB7XX6Jl%2Biwm%2BsOGxA4K1NOZb6WlkPQnDSmW%2F9nqNEuL%2FW3hUkMgJRmBP5NpxL48l09Pq5%2FkXchX0H8RUt5MkfE20dA974KZSC4zEXnwIV0W%2Bwk%2FS%2Fwr3Ei0qW9x4tIvdTord%2FEr3dY3V9r0uGhQJ%2FEPnz7WGiQT6wOgZNIOd%2BuFw5BZiu7u97zAQ%2FC3CAWlkEsAfbPAAJ4CeZpwSeb1lpvdkElg1%2FQszfmMfV628KYruUIdCwBlY1PAHDz5DGjPckvi%2FEmFcsGf2%2F9VPk9d%2FZ9AwzDOe5bu%2F5%2FcMI%2F69681Kpv8M8wxMtL5tn35S8%2FkuuahSzX3qA6B7dV6ktEY3gKoeCwIjyOJHLjoHgkAHD3D3Ce13gpC2IngDl8B6r4%2BY1fff6L3bj0qBa%2FRa%2FFZf6p1eFaHGkHkh1HZyr%2FUtaMa%2Fx1q2WwnfGoF13aEBGsfxm9POde1MlLzZH%2FFzUQD54UF8Tm1e9pWsXjNX3xTSetWnif0ervvtEjDdJ%2Fbrk9y%2Bs0dN3A2LZi3vJ%2Bf0CQQzeQIJG%2FLnzcMhUl7qnrHXXj%2F65fgkEns%2BjYaINq25L8MWmHJnU%2FV4cKhoFmrWuXKlNT%2FgjFeauzb%2F5DpU5fnFeX1%2FMV33as%2FPW2dLH%2F178hnv%2BFSlEBNBzPfFGgcD6ohh6kGGH%2Bwt519gRwe00q8YumtD1f%2Bw5IEE7h4xUo2iedT%2BzU3%2FitOXy%2Bxyf19UFi3sif2%2Burf%2Fghgl%2FihK90DMNRPrfUJECFMlOlblDJUCa4%2B%2BepQ6%2BbKsNokj0L4siCH5Xrxv0vvfioj9rbdbhTGpTDmHatPPbFE2kYKNotUl4O%2BSkvpkTOWHSDNgNfJN2BZ1it8JLuPTp3mdyW8%2BwvdRR6pn%2F8nuJJaeMLw8pwfEHF1qy4k6CglJCxL5HluPpwN34Tfuj2rkGIB79ePl%2FfsMQBb3U8dXKWoOPq4%2F%2F%2F4IxeMxe5XrXjNerxHrPXolfrFZf38FduNLtreUIAsPq63VZiw7lqLF9wUcXwSH%2B21jib0tdfhSh4zQyYx9%2BjLef%2Btz4IiXMxy%2FQth8UZE7xo3dBDtPQJSAicn3DRlR7piZk%2B7rcEZkLnkpKpwP3yAi5%2F92vZAoIDXy9%2Fs84r44t9%2BhQEA%2BxZzretAZ%2BSdzQ2xY3h%2Fq8vrXKoRhMT7HuFhz4GEyPskZYix075fOxgTZJhBS4XGiVTa5v6%2BxXL4oJv4zBgiMOrXSimYDu178FfL7To%2BEMSJDBMLLV38CfXrOc2ZfLPkUt3%2B4vu%2B4r5VL6Gvfr5%2Bv69ev0Ir8VfHxAb1H8E2RjWpxH78GBR82%2FlMbqSwztH%2F5c1y%2F5tX%2FCd92mr1rQVKPyv6bkhKkGGX%2F%2BjOV6xbC1%2FR4yvBB0CDieW7O5HzYO7zakZK0z%2Fxgrd80TMzdb9u4%2F7fgZGWl9Sp1Eam8D5aPJ%2B8mIEWY4sUac5rnsnvKyFCtoDm4V4Byqpnotf4soc8KicsrZ%2FadBtxi1eD%2Feti8eR1DYiauJqLRMBo8o8c%2FJCHNRThoPeWaSQNfxRfpfiMdnF1Vbtl6Q5c7Qwoho3hb3GB3lEsC524Goq3gG2rsHHcZaz5s9lwDFrqQ0u5kq2sWWkoZrJqC8Xd%2BVC6mxJmJm7WColwr0fr8Kmsbud61n6%2BOg8BRb9wL4IS6aGnL8L02y%2Fsc6VnyQI%2F1BCVjuYNUu88Jf7usv%2FWCTP79%2BLqg1y%2Fk9%2FeiGe711f4nk8Yp%2F65a%2BgSw0n0fapXNeRsnG%2FaL9qJiYQK2jksoxvfZ48XwkAUmoYgLT6xs6W9nrtl3%2BpuIaA95L7tl5DHt8uvLFF9p5H95VIEZ44W9rfbJ%2FQy5W8lfj2SVR8X1qok%2BX7co8IAvDprx7KyQBsVPyTqg0QlFyLtLmq%2FLW5%2FQTbtYr9RQP1tfszM1fuIvc%2Bbui%2FX65a9x8mU75oz%2F%2ByO%2F%2BFTn8%2Feb6kmZ7P%2F5ZM7j%2B%2BN1P78bIZ37zVfCUqnLPrUvDjSvt69RRgvse%2BoX%2Bl8JjgQCAIIRDwIRsOWlLr3g2O6fgvzKQ1d1V25K3gmD3x2Ap%2BIH3LrV8qG1W1F3%2Bjp4j%2BCmi%2BESglOYeICogLHzvByeAr%2FqwViRNidPVMyt%2FAAAAwJQZodh2oFf6Evd%2FS9XrV3Rf%2F79W7qBB6O%2BP4P%2Br9a%2Fk3WXP2vd9%2F%2F9ouqlRK%2FWu4u7wMzDhi5cN%2BSqXW%2F5u%2Fxbd0UmXDEsG9q2wqFYe1hfNVDOhdNGBhJAebbHOTH9i2WjYdr%2BAKgBWLLlWyD7fMJRr%2Ff28dxXYrfusXdit1pdrHr1evVyeWhBN7rY%2FXq5Vr5%2BAW4fzB65rqqIQaMvij72sPDhuLUnU9c%2FT8U0QVQ6i8xk7Z78bbwgNmpZ2NqSO5LKPA4uBsxbPUh46eNRVyLGGca04DPDQU%2BAKHsOM%2F4pNT3nDgJe5jP5QT5arHWb16s06IuKQ0hdXeWtKp4M74EFIehaPHnAZvE7qPLAdODShdM25DsRSmxnMvjzFM%2BCjxddVyKTlGBS8Ie6%2F9xDnVbSi6VXsQJDQne%2Bqyfcu%2BGy007zxzMEjuuSS6wtkuvQvKe6uvq80oRr0zkDQq%2BIaPUCQYBR5V1luUyy%2FgagVglzdp22rGau%2Fgg90He%2FAuSD6D7UJJMKPpaD0YuGDSLo6aCg%2FXgtEmEhQ1276tqKp5hjU%2F4YQR4xWRqW7X7WlTwipcfSp%2F1BLVVVa459Fu%2FfD%2BhfS3drLFd%2BtSety7UiSy9r2%2BK%2FEfl3UCSQczNd%2F9oe%2FwqsHwrWYqxS3V4omuJk9ar1il9Zd3xlZdYFoJBQIRaMyNQ2TAh%2FdzwilxApCau%2B1gj2YLIlj%2BzMNAYcCVqW8J6GYCPeo8NNmTK6kh17p6hc3LWvPu%2BBa1QT6X1dfL%2Bt3a1VS5fSuequfrG%2BJiqIrJ8C4ELfkKCwcFwAKYdAUweAAQYOAsQRfkTRDcO%2BABoPCYPDhZg9xVvZMSYfMwH7PRdj%2BDkINXWO0KXnrF%2BJ4mvQTlXLNasS332CQ%2FHfXGLBQFNuCsDaHQSAA6DwfKIZgF7WQWcYOJy5FaUnBUt2fPoe78bMMEhBcA4vim7FkzNQXjQS6jYQ80qTJbSVWeOr6L%2BEKngsIFFoUtBb4nKXQt%2Fbd72eze1gpjWpY7eVgMp8voGrjgOm%2FELVPvUFPdXVE1tIS%2BK%2F1ZLf6xV692i12r%2Bq365PMItQCJRz711ykYIiDKoAEb8OYb7yPBLJwFSwd35rf2yCCR%2FwQj1QJbj4grBmI0loUfPnwRCLCNTcy%2F74JaBLyys1oxbeOZJ3L5OuMsnh24toWbt0hkYQ2xeYsthKGzMu%2FBRMQUXHMdoLt2EUCy56JF1z5aLkTG3EoPx3zrLpFpkDVsknXTrCOJfE99V6FzXWiRfrv8TVFq9zq%2FcrQCAAhA9D1vvEoDQP8DIP1gKYUJmEbvcBpD4EoCKFBKqqi4uLi4uL1FxcSHAVUZHSz34sg9okgAr5g0Ubj6uwhDifZ5gQaCWkRGmY6DmM7BVnEWb0qB12KaTVw%2FkuJc6nGoID3OwTdUDWmoISRl%2B52Eyj5tL4Plx770WkX0bPl%2F6wVZplbTYOjGh4LrhDXqO%2FJzRSvyzkVqWBzX1vm5eFGV8OnH%2FJkfvJIxek%2Ftxg1boM2%2F8QRxbJaWiNmUKxsuEa0fdxdBjUnUpopqZ%2F%2FR6uepVe7Xu75apvzdVqGhUB%2Fg%2BISfYvWLGAXwcjzCjfxJwSHOXKw2xwoEsVz%2BGwmEhMxawahMLgsG1S8BVrnpAakCHtDwJAAcAitsCHAquNF6f1cBoGBCs6mLYCi0thNxtMuljHeCkEVh6KAAegQikAUw0kVc%2FsnopOMI2fYCAomGKAfqcxYWl8nt95BNCum8n3%2B43uEAYZwwGAVE44Ou8ImFIR9NpfOhHU3%2FChBgKUD2aEfTjtBDREiubneSoHg7wcyeD%2FsrtDWJ%2BESbvB%2F6ZwOFssAGIByT5rnUh%2Bb7MSVkzEewQzBgT5t%2Bipgl9fwqZBCSxSk71qzdqf%2FURcfxaa65v8O3ZVAjmI6RqSIgZo89%2Bpc0v%2FD23nLYXSyD02tUdqrQab5%2F3EuCXoWWPjKRDrCVTF%2BixcXxPav0QrXn%2FrV3UwhvwECGDE1WT8iR0BvmxQi6586zwP4IncVtHzuFoPXycvAbLGc6AzgADuBKCRBls4J6FLYsOnYj%2BX6q8IFADjWug%2Fz6P9QG6oF%2FzfcuMLPs9GxoZ3mLdh9lvgmzUy9fYMLjHgJV6c8OH246S%2B%2Fv6NRAxmX9AghZU8cbF2OoHssXNGeLN3nGUCNM9b%2F4kx%2F6prk8f9Hy1fRf4Qy%2BSBaW77s2OqqMSlNfquJr11GCpVpA4ARsw296kgIh0OYyfmAjhuKQUEcKCotiAAeP%2BcAA%2B%2FOrWVsnqGAWVdh6eAMmWyJAAKklcpIWcuj3uresSP%2FsQcdaFO4lEejy3niG5un%2BEN7vnMVHiCzP4d21NQHbAdsZkm2dH8zfYEmS%2F4IbqZtufJvf4Ji3RWEjU1uFbNKSOSnVq%2F6Nd%2F2LkwmItWv5phgjXkyOrN%2BRL%2F1lL1BZYn1rubetWe95Pf%2FEEe%2BgOL%2FBgI1fjL6U4YJ1DL%2FUEioCmyB9zUqbCuUm1lj9OP9F6vIRLJn1gsnmv0ESVjoycsR0x10%2FwuJwIW%2Fo71NlVvsE3lj7GMzP7RfY8JHkv6BB4IWjPrII2XgDuv%2Byx3%2BLzXTmjxMFTfDSJBxm%2FYTFUd8d337gnOM9%2BNA6vudQJajjLkZoqXRal9W7r1euJkWmvqiufr35a65Vw7IQYBUpV7%2FNzZXmn8vQas5V%2BxxwwvV68VAQd%2FaXPsymOf%2FguI0uNgU%2B4e3TVmNZfv3BZ5MHfA2M683ROx854ZKFdpDCFj5DpivNgkgd4XiFjQwQazQsIXqkxEfYl%2FLScE8atywumerNWZTfF0h69uzrWSmNMC2bfsCorRP5p%2BzvoXYq6llKn2%2BJT7yYfUu4Ox1tf1caiF%2BTryfa8qOMPon1Aq1%2F3d0GnYz7yQ6MX%2BPs5Cb%2F%2BTBySe5dXjaGoDZkFgvfIt3UaAyM9RqPPovk6SBRFfMzb5gxzv8v1uoYkjYMbpoT7dGMGfCUUv29j%2BgUNzzaOg2J9cBt%2BX9T2rq1qvWuaVvHa9au1rlORTbt%2BSxWgkDGiIUxo1ex1E545aHFtvOx8JYaZyvLLLX9203Xorn4b8tVHSXsb%2F56%2BNIP%2FDnd19ER6Kjrryem%2FlK1RvbthMl5xAea8vq3qCklHIQX4BVti00BHVEJcZFkm9oYIa1ZHtj2aSMNtatvwezIU0ngs01Am%2FOlKyXxQMq277%2FHxWIc9pL9JJrEG8jOPuD5%2BzBE1isw9xnd3O5s3E2e%2FD59Cxh1JZiDvCVYKc%2FCw0Zuor6E6rcSfhw%2FtApxPssg03tMCzK3w%2BrkAQrJDlrbHyfAmEdYrqqrSw%2BCijkxdWu0ZavqxRELqb1bte5aT6vXiDHz8tFZec0j%2BCjKiGA0CyhzWLqT0WCt%2Bf3BCZ40ZbC58GF73fXQMH1fq8EQmEXd0dztksjTVbXUE%2Fn8Exujtl9VdwiYv1MQsjJQm4DGis6bjWVfxOyu4ye1gCgX3aRRo39bkVv2S9%2FxH4caUvdT%2BOk5x7hqyidmSaQ62R5oJDjl8s3e%2BT9wEaCvx5BPDYPsO5qLyU%2BAggUDOJ4bKRs2YdywZ3BT9YwgpBQpMXF1xJwTwQaFmbGRYYpZ8yeqlJGGHjJNs58vH6dVxGgUVOypFkofCjyEaP7jqm53m8yfckVbj%2Bc0Fea8S4aHykLPj1%2BhLRXktrrzE5n%2FBEWrfVeXdhJ%2FNQ9%2BoLe6Se9Zfr8ObvXyQkSd%2BSOvfIIyMYl%2BT3pPzEVV%2FISHst7yy9%2Bevb9wve2xuF9iLqayQ%2Fl9y3cJX3KRa6W38nzIX5aYz7sHuPJZnzk8V80kV%2FHufuPiXBD8lViHfKtM3rj8ZLhdLGZRp3OcEOLn8Nh7q8v4nmBeCAwRgK9B6NXwHID7VRLI2FtmYuAJ8sEV%2BvQ9pau0UoP1yq5%2FRouwRX3c0VX61%2B5jFf65V6L1E%2FO%2FV7J%2Be%2Fk8C%2FEsJDD4u0%2BpLJ85DPiO7ktLeXxcJDzwsCcbA9pRjAXrygD6n4oQzhzHozOqCRWPfLG%2Fz%2BWH0L6%2FV79ddccT3%2F7%2B6XxG58vjSgvEiZQ2IGIxP9N3rA1jRZAoYCoGnVC8HGB9XIPHVRy9AxwvO9wP3KEvMS987eF3Y3giPUd1jAaToeYEt3eS15mBTfFfAASIUmE4UCYWFAWJAmJAWIgWCoWCgWC4UCw1CgSGIhHM7%2BOStyIqTJqpua5M8qiaA7puXlaC%2FjdZJ9m%2B95e7sn8OGxP9amI0pWZw9RGF%2B%2FVoso3faq%2FX8dVkn799xtpUHi8%2FwypU%2B3vI5vMTY2D%2BSSXXIw7jos50b6%2F%2BH81Ck3rNR8n4vq08jymurtoMUPLtHSVEXt0H7F9n4D5rKhXLqHpQIBNo9hGeMpnyZ8TZJIX%2Bi5H5Bv9Gb4eS0rMsriqjf3mJEV8EzAGvH9Jys9eM4BbP5StuwxLs786%2B38u%2FkiUQcYS9DjzK4IDs7ZO4B%2Bn1JARzKwsP9q1tAcOXK16nk%2FC4OASBUmCgWCYWGgWCoWHAWFAWSgWE4WIoiIIW5fHhurJzWqElXUovcxrVI0LOXyven627l2j0L9Q9Vb626az%2FXuzLRxGTMylC%2FUf5Jrw2veS1xfVPVxfTV%2Bba%2Bz%2FNlNXdPo%2FjTjQsV3c44GdsmcboW1uyrKWkIG9qnOSeyvsn1U8pqSoKsaKh3779L9XQ9GG6Wt9coySgJ4NZnJztRqJkMJfU0rMrW9HytPO2W%2BZ5EkBoi%2BRbZ%2Bw6rSabvS2SGx6SFDURZch14aIvv0dk1%2B5p9SLwPAR7sA9vv9Xn89QkuZQz1E3a5SuYgu9%2B2%2BGsjNNGhkUoJllnkml%2FhQmA%2FP5TBwAEUmf44YwbLky3i5Tc10OPkRHnDhtweqThC8lBqXmmhE4lOqSe%2BsvFspHtCl5Eevy8Vi10%2Bq1Mm7s4%2BNF6FzKvjq6aeLhbq9HxIJVBBQMqfgwQ98w4pZ4Ghvucg80zoUII8Cm4jxCBqgaPHgPptANZcSF8LjKSaO%2Bm1JSXMpOAQ4h%2BS1s8iXtslyteS7nTgISSVLW%2Bc%2BK%2Bap9IiH1VTwItNIDTEqGOETsLYTIrLptkPPBHVNS2CWQuKFlvN8Hsux23M3aI4MBQJBFUAARIAACkuTgAHlR5GAGQh4woIzmNOqICl%2FT2Sp6hLVFVgzZXlSyM1zcl1NVhdwh8Tkcw%2FxcTTkeOcjAccT%2BTE7YfTqn%2F8wYcBwAEYmf4VGLRgoVLmlqqp50J2QukKWDxE3SSBAIE5EmmhPI1mNky6c3DUVaR7BzJWUnY2%2B7QlNRRKQ07s%2FMkE0pPvXqF6Pe4Vxkb%2B9TgnNZhVYVKESdp%2B9qeFtJVJnCZ6JVs%3D&media_id=1254206535166763008&segment_index=15" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:02 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:02 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_AaeYvkDvwlvvfZfANjUU8g==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:02 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112215129411; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:02 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "86971508e6bd5be60bdcbbecbad56a77", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19937", - "x-rate-limit-reset": "1587864356", - "x-response-time": "41", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00f065e400d01c78", - "x-tsa-request-body-time": "64", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"R81NXsBIQwxbgDXkA80UsxmAz4I%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=mr8wMBUNwSGS4uS%2B5%2BGDlQMyc8LE3WNG0Vkgmq8qORFcA61nbecIL1Sx4I01XlFSYhd6ReYbUQNIhJlKcFGFsE2hm%2BCx98QLLDgJJkbjlWnlpK1LCTQpo9bGLQAYpgp0C5DFFMKiCnZR507x%2BOz8AQCsP5by61ZqF416A2DvHihcOKp4C3DUILkH3UjOE53WdX7u%2F45rKj61c9cpZW1cqCXO0rB7QGIA5OQMXIJxYMToF5gG6kHAASLUkCYWCgVCgWPAWMgYCyICwnCQVCIiCIhc53ioqpMvNVEqrzLrLcXUq9DXX6XcfHnX%2BnXpv0VeHilPm1vjXqmv%2BfbKy3Y6X79mrnt26o7%2Ff3nm3Ukbb5%2Fbn8ymOfZPRrr77%2BqpwNgg0D4Hq8FoXYFMUocdSAMwUEM83zufwsc06VlcJGhnghsRDX5Qc34naHPgkp%2BwFTq2jnaBTckJ%2FygBXbp%2BaA28nR2E%2BAyC3xhtBSpuwxAnMafTl2b%2FHhWNkt13Gv%2FxaQAeB7rPeWhwc%2FgcX5faV1%2BJC0xnt46sW%2BnJSk8ERFLsDlgtwrrnWLmSraxJht79PkWX5duAOAEiVJBsEwoFhOFhQFiQFhQFjQFjOEiiEwvHs56zvciZUq8sqyNysl8JUnQ%2FoX6r0NuH5vS5a07o%2B5%2Bi5%2FvcUrSqY29bF3dF3dXh12V%2F6%2FXhiP6We%2F6T7yOXr66PKQ6VqkHzsf6Yjrmr4Net%2FE79VaaVLDNQLuO%2BwgYt%2B6WuJcM6Su9kxKVwjWfOcsYzjaISkxMKUvw%2FGAdYU5XYWblgpHnKGgzv80%2F12QXWAAC0UxTawJ9CSrDr2TdtKBdi9skeQbLI7uV9HCUQuTwrsyV1Whs6n33W6%2FUSQOTEjqBWbAmFylqqG5J1i1SUnoQWUT1E%2B3YH3BGkL4LYPdBwARyZ%2FiMYjpS2rWMqcdAreUQSWPDgmI6qVZMYIdpbpJ1fGzkAixNefZTkYv4vXF9xULPB223DbwkF1y030YlhF1UjhVNhWyU2RqGdrfNhRWfV7ijwjSDIRWyZAzckV3UNpop%2BnSpM1xLKFlTJeM4Y7xKkXMBEW3pD0JOUEvC%2FHiYR4AxEGnOOWZwVDPs%2BHxu6sjpaeglVYVWFnhc1WFuA0itBxCcCiFQGThRc0PEisTn%2FS3dPvsVVv2WJcR8qPyaNOyugQW0jnBhYbIkddzek%2FE9D6Pldx%2Bt%2F7%2F%2BOhl7VafWt3ezLLW5riyAtBUpq5%2FnrhRhg1tK2OOFYM7asLtMySAkDEyBwsGLwD5eiAIsHGgOAAAAPLkGaHgeKBXJ6EsdxV9F%2F9%2FrFJ6vVrXy%2F99S5cqt2pE%2F%2F5f1l%2BtRHq3S9LXrUmBugsEKsN%2BrfnznHA7FD%2FTe2xPcXHnxkswbsUdl3U24l8nvgSIsIUHCAJlOn56mj6j%2BwqMwk0SxACZPrywsyK8JoCpRe1%2F8gbE8uBXoD58DpBy%2BDBKXL%2FyQiG%2BO%2Bs5FKxM3Tz9K43nDBMQ53EDggCZCASrAfB0Y0g4PBcDBiggqf4bPhE678Fm6x6Rxe1yvn6TtWK9cv1dhJz9M%2F23N667%2FV%2F1r9cq9e6pHgdBIdhcYfm7bvN1LwmGwEhfil8UXMo8IYr16%2FV5faXeG1E6wOhVTE%2BDeDAYqZp5sAQU8fjpzYrVZVeJhfR4tBLA%2Fj%2BD71%2BT6iQdBQBCnA7AxBBSNYG%2BlgdmpYD4liRD8%2B4upzB4l0RrwxSYlq%2FJlqOgisi68WaXKdlmQQ4FNTslW4uqTKy0uMeUYDBJBiUdNTWLPcjxNNxQeZfGDBgSAjnLG59EYOSKwVzDwJbkvWGW1lfm3j3zhYPDJRtxJ7k3LCJ0bYsNLTJW2pWbWZ4aDQ2Kvp5fHPRbh7vFG8Xy7bl2DfHu9feKMHIId71PaGpU%2FVpLm9X1fL6yrAQoRU1vCINQKYEsPDj2fMb998UwZFAYEMNCj%2Bt4fl1bfAtjg7J3urPRy2qrIIvB9%2FLX8wn%2Fw3HLTZ612zUZybiFmEImKEE7km1TgPt1yUBQX9iCNrHPKvrAWpPwSG14Kt7obF7Fe6sX6v33XrX6uCUq1E3XLvCOGyGbF%2B5DAFQBTBEKe1IJxtBnhUK3LcmDhb2bCZweyD78d%2F%2BL4FAnurv0EX%2BWrWqp79eu6qv1yq5rrASQWCgSgvPGcNPh1AVW6bVTApYjhq%2BNysA8mFKNY5mSkiaoWy%2BhkwbqO6mNaXAIlc36%2BmI7pPXXop04gnn7r0E%2B9V6%2FVlzq3fTr1Vd8vVL6sX6lpfMfgkeT%2FbwJQoLDhYSNSZxseb%2FFAGLIDGao81NEcXbLgfVKaC40EZ%2BMQIc1ApzwYU8vhiNwOd0hw30LMEQocQ8LMHQhXJgJc5xLXzVqYWNVEhWg24vYcQs9ptQT9dTV%2Fk8gVlwyg9BMKHgmJKAEYk3j8nrSIyv1foIucq%2BrpYpKde7%2FUqTDl%2Bu1LT2c6nhdfm%2F9nJwsIBTpYB3FlUN22cBcAoLiJH28ogDvFfWbdyd88lMH4BiwsWhUoF81X%2FG2y9uS8snq6JEe7GZuqrJAqAHbbC3kSkYrbk%2FgqJ3cKC6oncxCN%2FGqxA9Bvtr2T6NJdCqQrwHDkN2QInvuDXqP7x3ymEe%2B2z6rfnw6IOX%2Bpf9o6KXDpbWg%2BoUNqoOV6YjUNY7iAaMa0heJSyZ4nN0Ly0ElSSuc%2BoOMkISMm%2F7SQBKoyHv%2FnSXWbgbe9b9e%2B0frmrxFWx3dXr1erBUSs%2FL3V99%2FE%2B6vT99yphgiWHVmmGRsYmwPxbBwRPj%2Bx%2FUEBIUVlj5TZG3TiqdfSD%2FkLk%2FmcgSbxpUFmGzheaAakrVvm7aoxDmJ9dmXcKqOhbRrrGjRhyfCCS24VGBrdh4KsD9KjAAJ4PvLTyzBCJRp%2F34ljR%2BDMWnkmX38mDzRqt8GpsMDE6f1OoVKNXyzh3wlY%2BmDaTUM8X1JTvXCojJ9lISCHvWUVQ4af8n7riWM2ESwhHD4btUENF11zUWY%2BqDLf3Gy3AZy21pAh3dzDFZm8389CkdelQ0TDtDJ5%2BkGp8MXkF4aMOrGoLrtMhIeE34GZQvsGgYyMTn0ZapVrTTWjj0Bj2CvjPylBdKGTKNtt4y0XLZLoXMdoncvfa5dy3LgIgMr57esCVG%2FAUwgxsuFysDwGAci0fLWSBtMXiD1%2BC0k1p8aoP5Vs36jO5dMcFU87FdYd8TFi%2FKZXAhalsEEBt6gArf6p5JlrzzfuXtDMmSL%2BA8G6lpVatjeEA%2FZdB%2F7sN6BDA3XRdX0OEbBHHCLka0aM3cNqEC5AxM8L%2FCxW0pocZjGPzo6lx5fCT5Ik7LRU4fBASzkG0ORm3ALamrLhBdzLGasc1oJaScAcv1PzNr1o%2BaT53EcFRAg1qmAwd%2BNDaRoN8KZXMSCPFrGHqcRCPDaSrCAxPr%2FyL5P6%2BhMMYIc63kqme%2BDrx5f6h%2B95R4xdIMYlE4HtqPF%2BvRtzbmEegr%2FhQrBA%2BLvpgkfkd8rwtGeG7O9y34foxuzw2vKK9q7W8hNC%2BeGBf%2B%2FsE5OwZV7HHkwW5ZL%2FRWltXfrK9icvjd45%2FguEPuooaiQPI2uQDOFxZBIOBcV9%2BNCfLA5h9VGteq21cmF7e3yX61ZaLi4lkbOTeKtuT%2BAmhGUEY4EIwaVaQhxU25Yf6pKsHdrxLyz1Qoq1xsc2qfqrBLOPM6pjDY1vpJ5%2FowfWvMmF%2BtvUOie9vHROfOJPlzwX61c25rpyffl4QINxjYbTtM4wHgb%2FoEpbQuTsHnGeUW%2FlChG43B%2F0nOcudi2WNs2OyuynfeT0%2FkFE1VHWpmiFMlfStPHYI9x69o6F2fH7jipGYOSLTET0l1%2FVnzk%2Fd%2FGGYqznFHm898X3efKUnwXdYKpbGP6wZ7XEjUv2BIgwi6Rzduyfu%2FhXacuVy6HH19wRVST%2F4SoLGN3ff4a3KQyzqn99sEnxenxaKiu7%2FUqfFSWtSXyXgIcMeBnBV4CdBACUh8EuZ7g68rWsCGBFCYJWK6rsFZQT4kSQWyFQAmU8UAjdQGSUMhXu0Evv3%2FJ%2BJgBJ9V%2B7zfAa14H39l4xuNtbsedEOi6R6VDgjcS4l4yY9fgppEmG%2Bl1V758w0qEv1BwyRcELGkBHjZn%2FwWQ2AB0FgGLCLAsAzcTo%2BlN0HHpT0xaWlEmxTl6r%2BKLd50tlL%2B2Gb%2FrVVNv8n7%2BvUCMubGCbZ4Ldp%2Bemsnh12Ku%2FpvrDhL3X9MEt0eSeu%2FhnudIvjcXdJnl4iX1rtXlwVaXgRgjk9AKQLAOAIgLgKcVFouNXe9rtgpIe4d8Y3dlq0gwRIZM7kFurDpTm6EGXS0Ywds4Twy7GmrDFr%2F4JtLcOrWfM2y61ebMMU1I%2BN1YduY40sy0s9HU%2Bs5MsD%2F7uEby6r95dmu3ZdwTltu3m1tKauEASkMICHJ62Ul1mtHPoHWS7TUg%2BWwkafY753EmFlMY82IPbDdFD2uCjZeCeATf6Kvv75ZbChrC97zMdW6MdLP9hWypuhjpYdA1LFa%2F5Px98F3eO4DzVFQ%2BOejzVa5X98R8R5aK8u6OVKu135f%2BkjDuSVXiSyeaKA98TEdZzLeePyfv0kCM52c2db6wUcbXb0%2B1eUo6Y6isJfEEGFYys5PsIe8QW9m2LyGOpz9%2FL7f0FxOXJaBlCBxkFwKrkVZvMK3wiY18n9JL4Y00DuNUMhn%2FgULN2U%2B71tv%2F9PhEVd8A3WbGarZ%2FNTjRuT9y%2BgkJTLns3k9K%2FDtgZ4z0BN%2BZv2w%2FP9fXxgt2hyF%2Blel%2Fwj0T3%2BsGX%2F%2Brtar6nr5K50qtFf8mfNP7HmzwLlEbMHrF995Pb%2FNPgo%2F7LRCv8VlZt1rL9f%2FTgiGoPTWf9gmqvk3Hy%2FPdYSgSd%2FWXvaGa0Bob6b%2BwUGmlmM3SYexsuU0MEZI%2FQERoslj24PdAqyr6jsi4a5MDr1gvrIdsPGVZtGAHg%2FTX5xYEUC3OAxLEgHLzsW0TREa4s57ASFAfozjBz%2F%2BT5zsilGyeczfUoCaNzqxNsBzIsBoFTQGOszId9z9F97U%2B4ZWIf5yXoShSnnkfKkl397%2BK2Px7Ne0hmxn2e7bwbvH6La%2F0yvUboytXIMLYwD8zLKYMMtNlPIt8RRAgsdMBZtlvlVpBiHXygUe6D3FWls9461QACuMby%2Bg6QLairwRjWfQi0KzyXV936nCr1j%2BqM9ak3Nn1Nd%2Bvwh1ave77vDkhocNyDoXWx2AlT%2Fq8F07wj4TM15WgdxCwmd3Yz8EFmHRrTnJBOaYKyi1iCeRaZjDa8JPc%2F1r%2FnqF87%2F%2FirO6B7IufC0%2F%2FjgzL73W%2F%2BxehpKuvwRWNCeUX7Epv36QLjW4HutXmWHYtFMWtVBUQdMqnbzlQjVSSEzzdj5BhhCyw%2B3XlilZ6O2QsQrMUukfWIyKwHjjZBbZC4F2NSQbuvk90IMPbcIyA7DvIJPzRIJN1N5nWhXB%2BY40TYg1tN16wI9NLmgOeFsx%2B9GrKq1nrXZ8WT6nLMF3E8IH%2FFWyjnu0QPbknvPvYnGm4sWLtvxP7%2BWCMpI%2BLz8n34hChAsXefc2FpX92rYp%2B5JiVr3yfT%2BCHzmES503mx4x%2FibvOIDDgQcrX8EJWZ8H5%2FU4%2BCB%2Fq%2FwyUbZGDg2Ku35E%2B0pENPYIjDo6%2FsfZOo8RJPsr8tcN7dmJiOGjd0CkW2WXb3dr8o9MFRGjjBymLfRmIKwhdXhE1Q0D23i6IGM1r2SaeqBlrxflSpY6MX01D0EJlXJtKftyy54%2FJVa2%2Bo%2BNM7u%2B8imBLAastHo0vZa%2B11YGLTCLIdWdihR9cx8wKiNSlSg6r1zzg6sdl%2FteBICQK%2BbJTSite8%2FQ2fZfXIZGF2opi7lgJ0jrLiR5QpjO5LVRUnPELFoYeKnLH1vnml61Fo8MH%2BXA15SDrKaUeXNfTHbqbdT73cMeNfDr8rxSPuaKi1S9Mucc7cno%2FVE%2FKr161L4rY1WTmf%2FMQzFv9ddl1vvsxHZ8v9dgiLELHLdeC3wStmWs4nkJueiGAHvVyOzt%2FyeQtv4jiHMuJfLJXLe%2FMg5QMD791%2BO49aRWImpj%2FstlpWEW4Qv2p7fA6Z%2BMgR3N9djewCKEyQQZ8y59Wa4tJfUXr30PtPiRgH7UN%2F32WTOkaEMZ5saLpRntmTc%2FhsWbik9swmgK4IwpirskxWSG0B2NUmYeOCj7MvyuyCgejSY5O9h9hgeQaja1VQdsOeKaBVaMf0wfS9X%2BhrX65fouX6sq%2B%2FI78ERikXfF3zj9x3JuG%2B7v6z1puv%2BwYX0p92PuPGWPaInNPL%2Byhb73f98%2FP3vOc8Mm0xrLCLf%2BTzLHJ3VzS%2BHObKn1tpqbaVd5qSXVZjAgjPouRINNHue17n0u5NapAvBgYg8YmBgPfB10MZV4HDuYUVOHF%2BWs%2FJd636GuTeivfkyZ%2FVOpfrP%2F0Udv0Tqu4MV15KJ3%2Fa5alGdeCMMjzTXs2da0OT3A%2FhcDyPB0NBMLBcMCJ1KKytDHC9RL4myeYDVD4DSAS4JYHYFYU7oy6wRMwfDSMV49ZQw76xtZ7AAAAp3QZoeh6oFf6EtXqx3F3V1fF%2FrF%2F32rfq3jKt3qp%2FVfOf21Yb%2F8E%2F%2Fl%2FXv174mYUr7XY%2Bl6TzeAUWpzOD4LjRGq6qHPIAfkxR4mU1d92AnUUuQjID7xWuFpofTAE2HBzpAXppd4ZR5LToAQTAbIIQ3JegLgCxkAIgNyicj0uC0qhY9ZP33JQn4jpy45pwSBDTgiFBgdhkeq2nXGjQ%2FcdNDNr3LweyIMG9uief7%2FoX3iK97f6%2FP17FeOxX2O9hpFgk9W7Vu6uy%2F8fq5865fq3yr29rC5lLvifHnxcePqO24YhhDT6aFZlILEo4PmD3bLb7%2BL7JHdqBoEgaA1k5WElEJMRgKx5N%2FYsR1Miqe3zCz4j8eg0QvNsS2NkB0rI1wr9vgUPKEi6DXMAxeJbLTIyoavsMzBeDk9cX4a788D7pADOO4hG%2FfrCPptwGiQbDk7pH3U0GF9%2Fye0kWApwLYJRo0mayMnuZ8DzkBdcsOLxZk621qbvkV2huUOdVLCP4Un6D4cNIAhhoH0gQ8MGq8sJMQOAc%2B1Ci6dixxVuEBwUmzhpP9oxf692BrI2nd3zG8iRwp3w9z5LjbJpB78PnfxAwOnPmKxXSnyxWK3F0EOSZdKOqCZm1YvB4Mqmq8UtehPVMSvTctDF4XRf6%2B%2BI%2B1q%2FU9WNGhoVJeJkItAypZSUvx%2BWOnv4CVDIVyXgfpQ%2BJfECyEBdFIjM8Jng6HoXE0%2BYqjcfpA442Kx9pUsW7Tn52KVynpYgjQMRIVDBj%2F4rPGpa4vwLYXBTey3jHuK3Ej%2Bju4WMAvBYF5d31UCQACIQCgAiwXGHLNsFONyx2SyHiMxa2YD7O%2FAd89wNCgUpyiZCLRSpYpVz8quWTsv3xNVoT3d3jnLmrvuRc2vRFNeJNqX3YCGighBky973AbAoAkAMYyNBqjKC5d9S1e9tW1hBFGcBTRhKaHIgoDO8f4WDR%2F9C6pv%2FPd9SxZf%2F79cKojuvVpvWKifX%2FXr3V7E%2FHd0aRkUcPbjoCSiw9uY0zVx8oPmUQpKhbGBobKSIbWobnhycDLj0E9qoh3vEBMMQoSGaxOAPZdaGdCQRe%2Ftv3fwVup8lcmJRvv%2By6Z4Plq%2F0E67muW15EaiZN16T17eDMpkCgVhR0CqmILLTOYsfRbUCzBVTJYcWKxP%2FndLwpBQUaCDMJwm%2BkJcXOFt4VMVDhilmo4mHqPUbU0kdjdX%2BpBPvde7Xqv7W%2FcnE%2Fqdri6v0btXO79erlsn54g5xAYJxzAOlgKgBBUw4APEpMEeOE5dwwAKRx71eBNGB8ZtJjOG651EIpEj8XGbwuqqKzItJn%2B6%2F8KEHDSleM30RJ%2Bmr%2FoJIlH%2FuIpcJIR9v7bfzuoIDPfx%2F%2Bcq%2FlMR0uMvllqWCw0lWXLz2NtWDIFVHTlt3O1BVpXOw1hYoiCu4tVDXorAGR1NP7f4F0H3MMHKKq%2FR3XUvc0r9yClcnN2sHYJO5bY%2FRGMn3iTeCCPKNcIbMPMI5OWhA6at83NZRBtEByVKupEiMEskCpZ6h8l%2BN2aw8DPDwxWuePoYPbJZFgxFHX7wEcZMoxW%2F1Ej73uUYLV7rT8seTaMqYQW2o0PbVJ1pfcE1tqWqCfR7r8VZ5qr88XSSQNA0pSO%2F0LcihX%2F81LwVC1rwIAIUZmuE6FdVrS4Com7vwPHwffzcQ4GQel%2B68b5544GgdKujWMwIDQNftlnD%2BaHERlXO5rtheYmZKv2eZmm%2FZFS%2FhmOvynEQYr82yyvfF0GKZ2CQ0MJIHv8t8CrJvPnKtsfdcC%2F4mdSssH1%2FRNV8lES%2Bvd%2FSLF82%2BcT9E8iFCtJ7SreEBgE0J7wbnAwhsxtTZWC04Ig0CYSqi8HiwHllcDw11j7Q3KGN2%2BcB7VBEhsv%2BuQuEnmt4wa9MNlz%2BvmKkUMr%2BFCIeuLrE%2FU8OHeWAZYH2zUp9N%2FonWX36x8I%2FLjFqlT3%2FEIWHSoST95fJ%2FZO7Jd%2F0d%2B4i%2B1arp%2BMesCaJARoWECBLj761geQmBPo3fh04RhJKhENAhvXR3eEgJGEA1nbskcAAQDFAxJsCZdhF6XpMmEtTkflgi2MhaohW9zjVN2rf%2FMY9C5WT378Et7HFDFDJjMg%2FZlzXnPL5q6%2FLpXXr36LhaZvuS5LV3S%2BXdE8Dj4f%2BCo69rDwIshne94Iwhh4ltZccgd%2FocjJLYE9iwHqOIjhL%2F9lvXt8vk6L%2F6mJaf8kiLa367%2FEHz3Y7qQnt4eQXX4LY5Vfah3%2Fs%2FDkyllr7lITK%2F5aQY0DwHB%2BX%2FXE5dugO0OsvrKvll7v7J4fxHBsQsXd2THxKXt8Eplgweh0Hkh2T9r8xckq9Yq8ol9%2FhoRxwwvjokI6OvROpoW4eutRA8%2F2ZQgDvYeXljZfCdRnG%2FN3f8xxloh48Pj8FGgWBVsbl4ij3fixHAHZ5JuO3DXf0di%2Flu7vyFq6XxF33d6v9e%2FXrs9ffJV%2BbNL%2BCfu97Xq9cpPIIKGkqLlYD6xA9w8QBoOUJ7eD%2BIPFO0Y%2FJAACcsESnAD%2FyLBXFiDKVDTEGT8EhMFFpBKaBKh3ioax9sVfL6K9JDZNM6%2FK4rMJjGCAmccGY5k0wYxkmlHZtpJR59imr%2FMvjTDjRjdoIPld398x3JWUJJ%2F5PXJkix%2F2uDXaIZSZqV%2FGFwiap25cbxl7Fe%2FJVuEPk5CaiHa3j8XLxopKKmyh8qofFsovLQuLLm%2BrXv1fvlMS79vttSfn%2FbvFUQ6Fln2iAuFV4vSY2zUYf%2BtfvUaZcvr8n5pZWd%2Brq84lfVqn8ERoyIV68vUhg740SZdt7fY4kwhJmxeelDrza0rq04VwAwL7Qom3nWMLud%2BdXye%2FOqggg789wIwGHPPj4cSecQrfPxculR%2FXcJhTSaKx3x5WHfDdJ%2B9CQoeZkZUtjfqvkg0qSKaKkud98vcYRIh4mdhZVFE7wY2VjNNLPsJGj47o0dIv5c5TXb84vu%2B77Fnuld%2Fncn1TfoTUTd%2BHCVLTXyiFBKZTf1Zf71r1r83MbMil%2FXaNhQW79wiIw1nXHVi%2BTAbL1bCSiLLYML4VdxUW%2F3ES2cDS0XIt71aEUioF%2F5tfhVqrLfBLhxJLH1L5MeuPIIaCt1Ks2NJJdfhG76TOexVHyhMvuMnx90txW6jsLgUVqOW%2FGFBQ5mr9YSE1Lb9JvH1Z76sJxPrnxEXiR979FBcXVQfaI4FQffeyi6myTMB7YuWGe6xOX0dp%2FfMIC6R1k%2FvvC%2B9HerP40iIZDKfP7%2FUCB6fnvu3nuIFBtqI%2Fw76s8XEdF%2FRJ5HG%2Fkhy%2FuW4SpEGX0n3%2B9zIX4W%2Bz9N%2FiL3pFN74qJaySFR1brj4wfxD87bF2hL5pdIZxPB5fG8Qe0uo7hfVl9awXDwVkrYzZ%2FBjfNn6GvV%2FSvV9osXCa7LtWC0r8gh7SMnln%2Fr6uHel59eENryyEe3pXCVJ8NDIc18vjpomJjpYdlPncTpyIT44vLess8sF6lv1uCMSNIkTbwTPJTctAF93pCHjw8RU%2Fi9v93Jd2h%2BUnr3d%2BsFXL9X333%2B85J7rEx4tiojnL46oOwuBbHgqIXlj8VWIcb7L%2BCAUDkIgoA5hQmWiQDNdHFPi4pwivHZCwAAANC0GaHwfKBX3VoS8nr3gbP%2F%2F%2F%2Fgaf%2Ff1l%2F%2B%2B%2Fv%2F%2FL%2F%2F%2BvcCz%2Bv%2B%2BBf77Jd9XXoqUFavZPX%2Fr1lZf%2F6uoC3r0R6J9e96wMcDwGQwbELHBFNWsF%2FTOc%2Fb%2B8D4GSC9%2FHm5cfASh3gmMYuX%2BCQQGCXSDk0xWXLfgRZoJSeUyKDzGRTrwZCBZmDeeHH6YSY1IC8CF4Kpe8OA%2B%2FEIvfemn6Ee6tXOicUvOr%2Frkvcl9okuiZbWqHLi%2FWtvhcxsZAdVSx0mS2Dm9v%2BTK8sKda47vn%2BsU4k8sMUMsDFDBZjAVxphsLDhuu2qFeYaNyPywxQxQxQywxQxQxQxB2IGMONpUpPheksS%2FlgsgEzXabXfxJwTwsMsMScBqvFhlhjShJqT9JBKLA2DAIYkKGxVPwj9InHx4mOtE141oAsvgWZoIYVY3EOCpP4mfVplEmQ4iwsTx92qUBtGzZHV1%2F8aWOLL%2BdAaRIBGo3URoFmS65da310LlX3NuEABHWwIABGU2nFdlS1mdrqzl%2F520jZ7X460cNQ9RrG1S%2BjNySgdUqRyVmAmvB4EFECSII6pEe92sr9aqifjVecQtXJdv8VVrWq3yQscUEiVgpoaYPBbtg4g94QWB%2BgMMx6WVVL8ugy5fhJS4HygZmWoUVl0KFc0Jyt9dBzTA7rXF%2BmWH3TCDbggdOGWnMgAZss9gOSxM4Vnm9hNXUTVVXCCHCarRszwC%2B3B7IoOhQNQ35ouYaezS02jVLwIpgTGKQvIAjbmK3GtdiaI%2BT7nAbC8K7M%2B04THDCKkwA%2F43kXCr5P76o40So1mrG2Ulcxns9h%2BiP6LVrl9LUtS4dr0z%2BJov%2FG69XEfESDuZqzbxMUMPqRLhGcYTOIfVPrEggOcc%3D&media_id=1254206535166763008&segment_index=16" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:02 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:02 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_DEEMVQS\/UKN7dMPLBztYOg==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:02 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112263731147; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:02 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "271299047b9f313afd5f048c7cdf815a", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19936", - "x-rate-limit-reset": "1587864356", - "x-response-time": "36", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "003cd36700cbfb6b", - "x-tsa-request-body-time": "64", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"SX0iqSmFPKfyN%2BnluOC2ctTe6sQ%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=b33UPy%2B7vMPJv56DRT3P3CQXIFB44LBoysC%2F4KgwYdAcX5P6wTPzwFgE4jviXfaF1VEbPu6tflXdq0mq4V95d33U9Xk%2FUgjEopx46CVinqSXTqngGgLljGGm4ADKjHfJtRRHd7xjyPraBPy68WR%2Fh32Q3%2F2iUyo1LlAfZzim02J5dLnvvS%2FEE%2BP%2F9BFu1Yr1rv439Xk%2Bul1N2tbzyDQwTbADnswPG%2F3sQ0YrZgkFaktxv4N8v5PTxNy8LwMaBRnTxbctAQYXzM98LwnCCCgoX1Gvh6NMZY4vGLloF1I30c9V%2FofY9ZfVj9av5vX5fzrBrLC5OCR7ANRKnQMAMbDoulC4CUglCfZqwyAR%2FNuJOF2EY%2BbBaHWoDHqmHMxKlBhLwzxbsZaJjB%2Bs2dhcENTlb5U8kYSbv1i5nC8M%2B8FDdRoEAQggpcB6Pkyj2dEGwqQKDjKt1nYS%2FT%2BPE9DhNac%2F%2FvZq6NpU9je4QBFsIHQOAUA4YuzGS61rVhFQEvZNpf4WTNajSQbdJWzD%2BMNPnRgPbWdbwZs3WnhnHQxqRj7%2F7KsZjGJmfl9QwcvHWWwk%2BgZo%2BpoZ%2FHQcLT3eT65PbltHquSX1r9Wr%2F19Rf%2BJAkifCdXNZbggJogdsaKIU9Rk8xwRPrKls46lf3DndjSv5xgmqNT1Q5y%2FulQZqtfqvg3T%2FQm0NgbmQxtoQ%2BygABAGs9PySmgcN8E6jDBqEfgld%2BHmr4u3cJx0DSqoC3yWDt7bapAP4S%2FWDSF993%2B4Ksf8wbLrtsIfnKdlvhqckO3kG8m4UPoM2ro7ISYfXwwZ6%2FJ%2BaiZIyWokjVdkNx0d6%2FJZKYTq1vir%2Bo0rU%2B4K%2B7ZKsh7p8FrnTYZZQhergslwuQXOZyU0IKsQYhsf4XSZ5xJEodV4UVVvxGyx%2B3Xwy0Ny68n9%2B9eidfq1d99r3dZ%2FgLwEJRK1S4CgDKEd8K%2BuuOKJFidVXeXw3AswPYYAQ4KhYq93FGbRYdW4RjOKwwCw7%2FAbsNnO3L7fH5Pr9wQYP8Ai7ln8fQGGWJc3YnGhgcPotUuwGDRxIf8LkDjQL1vZjXgvQhvJ%2F3ufHyXx3rwsNafb1vv7G84cTNUV1JhrxEyLqfgs%2Bvn1Z2lMGu%2F%2BAVsWwT6ugTH3LuU2lzna12CjVvVUnPUFZLMogNkTYr89eLTOR8N6yWtXE8claVFwP%2FqXJsZTFS6u12pCoGKs4tFi5PdW%2FEERZfe%2FBjsmEGYCMSl%2F5MRZlBxIHxibcjT93dYaD694CBEm7S37PiEYNA1SYf%2F%2BtVVdakz1pMf005fAkw%2BILKhpdXijTEpBEAHBlCYSvQuq8BO6l9rC1i4l0PxNaYygdtYJgQtjYgB6QABqi%2FfEHBrrnZ9HyKfxolQDqZkySAmX8v79FOYIBjMr6iKwYOn6LPoC2mcmf%2Bf5I3qC4hs%2FPBmt%2BEzZrwMyyP%2BymNjoVBX%2BhhODWoubaqnL1VVublj6gpKB1vbDlD6HWv1VtQ9TMrSC09K8MkPt6%2B0Xe1ywrhNihMGqa%2FBZiYXwl%2By%2F3EQb9Bz5alXo9UEmwO15s6cvraZUHtMZLn8NDPSFlOl5xfbB2W9OHeiT6B2JQO1RH93UuhRQ2v9SKyuaTCFY%2F6v2vVT1dF%2BM%2F8PDEZvEHROzD%2F34VEjzJuVW769rnS3%2FjEOCysWvoaLHT5I2Q25VFnIwBBWD3oJzHqoS6qzPk7N5BqQQGAo0ccYGq1n4fjJt9U%2F5jz1VVmWiUzGKoPX%2B6LiErUNl0ttEYXg9wyMFA8ZcjYIC%2F1wg2KOkCX3PRAykr4tf%2FX2Yt1b9gtnSxLLQtPlXituR0PNa0fwhZ%2BPu929TljPv8nnOVfx2XXfuCgz7eeBcZu8EMV2m8R3UE85Pv%2Fr0d7vgWgi676BKKVVIxZqgLLfeIhaOv2ZUtHs95f78PQ3JjyVL393s%2BwM4zCJn1PhC977vb%2FJLsT8uX%2Bv%2FDInIxi%2BuXV48w61dm0UZJk5mIOzGyysFB3fu9xYZOESDxw%2FiHN3%2B%2ByTpMMpFfUF3dmPhAT6Mgb1TMBXyCpy4frdeYz0Xe3ct7v9FuPnOupZbR6fQoyXz6UpCEl8QwpvPUYR%2F%2F0Y6MMTz0QEY6th3kvgo1d5jWyiNeJxuQZP38UYFAiJkGOHayeyvsv5OX%2BzqTO9VPl9OEvDanJd%2Bi%2Bq%2BX9ev3Pn%2Bt36tRfbqrIbEOdm8%2BJd4TxfSF45MqxR5oy%2BOoN7Pcfnxu%2FneOIGFpc1gvjhn90BSjS1jgkfv8QQd8SshV%2Ffd5PPqsXJgx7sQpqI5XbjSFzgRsRp8J9yiBaKVSNdZlM%2FRGCh2afnBeBD4g%2BWxuT%2FWICaY21DiRRlUVMxhKpB1XC1SB3NKEa3OEjBD4ThUYDM0HY0cbw4uNxIC5zBnkzYfjdSI0AGQwSRiAysoxArFcO0h2O94sJFQwiFa5SqO2KelTw1bdRpKVHAIa0n0uxk2vr%2FawkDZk4FGC%2FVJk68mr%2BPTl9tZwdBIaXiM69kVPTX3IV1%2F4QjeVV5fGzH5f78P8OpmMnE2YMf6gb0nyDy%2BXUuX31sFd9%2Bpom1RlxT%2F7oS1%2Btd14ikuPSv%2FRO%2FWL8naafYTsO0Qgu%2FsJYfUrOieT3f%2BvBOVAZTEcVfjlJBMPqdq9e139s59fk9O%2FIazaZVMkvk%2FGr3IYrI8wTp8WhsfH1SpDMYAZzj%2Bfa6yESkPaVZCzEYTHNwHaZfernwaeAnCAaZBVRoV42%2FTDHdN%2Fu2%2Ftf%2FsgwjcS3x%2BK%2BDYqq0tYGI8o99CQvS%2FGmDfKMLbLenhccNyxAsZlxe%2BLZTUvseMzSbFCaxRkX9x3I9nD6PFGKOX0JriB0XA%2BXisiIVieYFFez2YYjSyQiXxPUvgIQ5hsL%2BNq%2Fjev8vxOW2hffd7XRS6%2FJ3fd%2Bvfku%2B11mES%2F3k%2FP%2F8EhZsrlJ4Z2T9x8izcUv%2FWGuqGvnkMmz%2FokPerq5p8wlq37hMhhLd6VE%2FVy3CJq8k2jBZAIrnAdZ%2FigUMPpfjGOLxGGr09KhfTc%2FiBHBUhfIzmcro62SxFc2xUiVw%2FgrEDkB0HfhqIIXEn2Uf2c0EOVwji7QO%2BYrFfXhEoID0o3mIHC4ex3xKSUfEwDllptH9su8v5cQYNjYHfWkStXxzOVvWfcsG5CTdv%2F1lkjytRbLWa8DvKD1hUKGQ6ZVX9C%2BruG%2FOwZYakXKgUdIzGAPU5rc4wDxx98v6vXovfrUT6JX6sN%2Fq9eCTVA0VVYIsdmfr8I%2BNRyelQjcFY7%2FBEaWD33EhWNyEMYrj%2FPipE3%2BlcRwO16hcG%2F0BfBJGnAul%2BnG%2FKgxaaa32T5dT%2Fk%2Fmq37%2FNzUTl%2FdkkLz0al%2BikPcRWsQsRuZ98KAbQ2M4ubY3z4TJxf61sIlGu%2BqYzuDXU1XxDsanuM3l9PSIcFogLeR098XXXaGxTevfVevVavXr3u7lpl9Gd%2BQ84Qby%2Fl%2BrX6LXm14i93pP7%2FhAZwO67d3Pb8vluIki5qDK9sdFJ%2BpHRpIy2bPnjzfNDsnLnmRCSX14JRIidws8UDB222vQ9rFbr16S5II5Ljd9%2FghFHw8c6a8EoR3gQx5EHiZNSjmbsgIeYQHQBgDEGwC%2Foit%2FLt4AAAArcQZofh%2BoFfdehLfq93J6v7NfrFdq5LdWry2tV613Pa4Xa9%2BvSUy909QO%2BvhsMdJdSQwP47LNTbNiE0ITUnhKAScEIDZHwicqm1P5d0npwCVBJEi4B3g74ATsBsFG5ciB8aOuBkCAKCOgYUIe2Y9kzPMvkk%2FgaAkCM5824r2n0diQcty7v1SY7c4aLEd2r9%2BoaEVo1hpSu%2Fl9fQTC8Ar07%2BV1aR4B8eqQuXml8fPol1cgs29GxpD7ThX5VWdILDYeYmQeNmRfIeaZA%2BGktMsfpLk30NLq1BKeuf3B6BtLCgLSzqF4yNpYKQZKcu9m9Hk1Btt%2FL8hhgsgK40RuWkuEnTDzXg93uoPd5E0VD%2Fq2VIKus2sMW05ncVBxVX1q%2BUDGY1P8Qgpi3lTvsaC%2B8VYzuuS18So39RmiotQGA7gcBXAaP4N6%2BXEBzSquKaW7ZhRRdyVTYBcAcvuUm1IK6eqk8szoec20ZTZ7jzfPcW0ot%2BPP2qCqk6AJMEp4DWknZKnZHa4D%2F%2FYW69CAd8mw4d0wWP2s117jZRUgZh1KBZpjs4ZbYbExIGCqHeOF0A5sCAGB4KgzY4hYBUNJ%2BeR4bKXK9%2FtcWATpXywJK1dcTju9DpXe%2FXL9Xl9Wpdavd%2FN2tSLayGNpc%2FEBWM5S%2B8XFNSYIFEIAugaDGZYrgaGzAsrwghDO5QRTOwnGeEFkX29JL4oYHqiTxzyzw6ALjhE4Kgoo2IgkQqNY7eIBIhAEqA83LR6l4NNLFvUvrBG2Fg%2BVV5ksWsxwdaCsRCSQi11tyb%2FmVYu01rgoLLjc1WjI9cT85uFldcrdCmYgOSBs3hij4wUTeGs%2BHdFYrCkBxgdwLpASn7sV1MnDNdaaTJyxTAaQ%2BNHwIsO1uDnH23279bVwYAI0QAAiFkRZ75yWlAO0CpqkOeOqoj0WCwlu2y%2F6UnrXc3qSx3YkvXEQqYY6j6z5eA8BAEQu35vqkwqZK7pC1cR0RF0Zl8Wx6X5fBQX8%2BdKVL%2BLruf1c136E4fEr1%2Br1LVq5FWuVIDYoMHGigkf1gJzxEA4v%2BbHYpI90OlaK42sVK42AAIBn%2B5ugDdABH5vapZzUKSSA9gIk10uS2KXxV82NFtjYgqTYWXIN5TnkAL72St680xrkB8iLfHQAWwpnH3G2wK3twai5Mw%2FsWI%2BgqDB7TBY48u0N6q1b6XvCmoXv1qrXu%2F1lju3Teq9LeTz%2F%2BiZSffrmIlOSPOX%2F8vHvJ9Mn6m7b3CTuFKxdMHApomYzRLOozWB7UQRhq5pLQ579rQuTvu9KvRfckvdr3axVoR0R0RLdeqdCFrnIv5LLkvhcQGxwYEhQaN7GO6SxN97yV24lUFgptCBkHHtCGDvDm1QEG5bSxRhJ4ITVD3qCoMqkuvsUv6%2BCHTHl6eIfH1B1ohwEo8uLWL7Xm7%2FwwXKQQ4DLZzgH%2BqVfk4ipl9ROjwYGhN%2FStQPNlAJckP7zVBNQssw7LwmapogVbrkpqSPdo9VdUsR6uS3KqL68ME5Y8A323ZYyR7%2FYJr6NgLlyfF2T577JaZLrboPX1TgXUOS1pwJyzgiLCUzKKElPD9SmxACnRwEEeo%2F7d3%2FyHOCA6X2IxWq7cfjxaHPMxS1bTRymKXeTj%2FU8Yt5RqPDB9KlnVhd5fLe%2B0LarRJXRP69KvibFE8AUYGOrDQINXfxYvqq68HBgUF1VxWTlvmU2XGROOQkiuXHc4fE5zhcHj5w8kVOHAsX%2BmY8Mu74cUpfWCm7g8HhKA4d1crCTMwHs3Sd6fL%2F9mnz3Xgn8Mci8ZXfsJsnr30J0DvdDNvs519hRgEDn4LbtUXu9hSuJu%2FyX8IESXY4Pv5fV5ZGenRqCjApxmR0H9Kmx2pbvsENPb4dr3LdovXs656xGrWrwnye%2FBHSDu9CBBWZa7wgajbu%2FBKvv8KYrJznnAPLAAZMCo6DwU1ktKgZm8u3s310pRyF6hXzUuFZYABGDaHR6BrjH5JzDf4661x5q4RREdDQKvFpbPVgh2U6cZl93RJ9HQ4fsWRAZjTVXJH6Kz7EkrW3Kzvs2Zm%2FwyUYT7Hy%2Bo0Sev6fuIJBO5h3rB92D7l%2B3DLi9lsJx0s4D%2BUxenNLYJ356%2B%2FRe91bte7Vu16XD3X4TIqaqfBLnL5UM1l6rwgXfJH6%2BMCZAdfjB1%2BD0ZDHYMJhzfGQQHUYKCgqG3%2B%2B%2Byjd33qrvxBjwyZh%2BfTT2bSp9e%2FzFveT%2BwIwZ8IGuX3bvfT2JitxWfy%2Fd1xNbFyy1zVB33t0I8IiASVr7V6Jl32i1999km%2B%2B68EZdmrPxBECZyW%2BBHJfCe78rIt0ZoYK7tq%2Bizvs59Ka2QgDv%2Ff3q%2Fu7p%2F%2BFMtor%2FHcidfF8Xz34Is5mfK77KRrPdfXdX3av7ZGS%2B%2FzHZnGTiKBLy19C4VSWvCt%2B5shf8WIvAoLJcbNS3vvzawhlvtC3u%2BW%2FVna1yrXffYT3TZXvuief%2Ffhru7WyKLf771eCU0sC57t5bewWQ4OjoGcsG3b9mXIbhq0HXjaZryDxpEROEmWDf%2FwJP27qFR%2FgVIHi3Kkqe%2BWbZ1PDiqxmYOcDV4BwR%2BeOZItsg8Go7SgTZDVNgOosf%2BX3IQriRkqrOmK7bBgMEtPu%2BjcoawOfTJIyukpW5XfWmBqhs5z2WUnyJZcggSEPtM0rjIu4dktUMnI8V%2BkE%2BagSF3VwEXzQ2nyiyhHnugRlO5uZbklyqdlPJyXd3t5Ii9PmLnLvtdfiL2eamW1Z2hMsnp14g1soYDyiqWofQUJVqDvBbrDdwQ%2B8wHTLbtuvZ%2Fcwxw1u4wijHubCTeGgre4gcMrU9Cf6bArMkhxiMVcMdsA1eF%2F8zi72%2FT7p3%2BtC6GeKWMQ4DGGiUXJdgs1c9xKlVVhz8act3q0E8Yd%2BHwttzWlkoyWypXoflHrU1IVYNSJTfLikOEApSAHfzQLvPseyrZZbFg9MOFhSY0wXpdZflIS8cRQVqJjSoZvVSBTD5uZOprveHVR%2FL4bh3roxggFFLd931bnrl1L7EMIxIm93vq7on5G%2F0T%2B%2Bq%2FV%2B0WZW33Jff7NxoQElspxBKCA%2F0aX5OOPqe5LuW%2B58xFq19C27RCJk8VdaBB3DbTSwrUD6MfX8qUePNOWETYO%2Fy3KT8Rjb9fnss%2BVOQg7tGSAxnBNaujBEf4hpqKEJBFxcYxR5cRqPipo%2BRCJUbBbVxjUYUGoe8fh45UrKCUiSR7hKPqlsuRe4zpJO9Qd8JX3OGhzlq9RhAQHlhgz%2BiLFAwf1ThoPeX6Z%2F8v1xJgQjKSraEVO8jEx%2FiT4hwudIYVqPL3LmFH0XSAxyagHI%2BOj95ZhQU5OjeK%2Fd6g0sznW%2FkFEffCQFbOjGsJcvLLd%2BJLbt3t%2FLTczH8290T7Jr%2FwTarJtF7shpd7ytsk2esrUR3NTly4s5wUTx42%2FVTL%2Ffbh2anEwfFtX9zWn8WL8JfhnDQMiPliqV%2BXNcQWPk6r85b2gvqszv6H5v52ODq5PSrnxhdxtSUGq79cNVZMQ0JQ5Oyu8Fht%2BPudirvFZAnqhbyevVa5fosqn0Ujvd%2F1YpwnqwJ6NGOyVr%2Bci%2BHE0%2Ft%2BEUhOFaq%2Fmq9KfEFe9J3pJOCEdyX%2FtBAIJBZH%2FPj4Ue43nJ%2BP5IUwNz7hU4107LfP%2BPeqffjzjuWgNIem2LXNextyRvuH2evFQpyNe1T73596qqtCWu1ldqxG%2Bi1NBZXa4bl2Mh796zuXe4bOESXdO9p22ngBKNSQJhQLBQJhQTJgLEQTBcLGgUhMJCEJBELNVMpr1owk37ZjLvMpR0urT2Grv1vxnk3%2BX%2BH%2Bc%2Fgl7O%2BI26gLqvX3Vug%2Fjhx2%2FCaimOu6zZpV0vrgO%2B3034V08370Ai06wYyOuNJ07NbdR%2Fh%2Bi9C094%2Fiay7aMjh%2FA2DKEel5FTN5a3K4nEASmrZ7OJ67hPhfIIdtKUlxpw3APo1TNT3Zfx8XAXd%2F%2FgAF0o2oZ%2BFiB37manRHbu1V2UbKPvNTNoEiQF5ddeDhAptmjpB0yUXiGCHCKM443%2FScLW9M1cNDG8bvZkzzv%2Fhfyd6lLSMUQ58SraUZhHS1Lgwdta9EDiDjQM1ag4ABIlSMKBUSBYJhQTDQMBYcBYyBYMBYKhgLCgLCQJBEjI12y%2BY67oma56qpdZDcatJXQ%2FiaifF8%2BCPj%2Bj%2BI%2FymrjlZ3W78Jpf7Hx9LnEqPr6btfvDjr988yOoSRDWh4%2B33cM%2Bx9UKHSfZnnLCTFq7KnutpUaadd3gVMuy0JquS%2F%2FDHaAIQU7%2Bc5Ax%2FoRQFGcab1yHDArpQAb9ANi3X569%2Fz7MG%2Fd0Bx7B9YAAQ7QqtOdS2Ewf3GAOI59X6VbsJfCN%2FiCFy%2Fq3rsilLw9qtE2%2BF5PFQbHFGnt0qrmYfKJBDbu2T90ogDgLAcbAutYQwkQC9jjFqsnWvmM1I942apuszaV%2FtpA4ABFpn%2BHSZwXKEy7xLmZPOhOHRRSkI%2BJZSOqCd%2FTl2laeNCLexdtttPvQw2DJMnahSw2%2FH9rsuwmdyTVhFpmckfAKLVzHMcpoKq0FfEzpAUMM3vCaxms6XmDL40VH3ZDLHMUyyVtnyq1Zfy%2BHs00vJ5paXe9V7aZV1ImenGZbIsOz2VVmM1ZbQpm6vpuPG6l4xtna7rHDTWQ1%2FCb06Pt2WrEgyuqRwtZDYVMskupqQ3zT6C3cOVBRBBiWxbShnkofKGSi3Ga63T5eauuw6ocHs%2BKOfifeQdpHVrej5XITh4HJ7%2FE4%2Bl5sjXL3A69ZZcfHOtAJnvJC1ljtCb%2F%2B2qcIpQQPMYz1OBual6nAEg1JBGFCsRAwFkIFgoFgqKAuFQsJxKEQkERGFtx4rjvchVZq96ycYl5UcxfGaqdDmf3P9FzX5%2F8o%2FRf%2FeTx%2BRWXd%2BD6v5b%2Bt%2Fqq%2FHfa58e2nzd%2BvLZC%2BWi%2Fh4TDt58f782Xkcmzypo3Lbnid1l%2FdnGfGteeRvcpaxlmFv66D0ArlU9QkVE1PQGjlONxfT%2BdSHPkhr6Zxy17iGkyVrgFqmBhCpy9fRKr3XG1dbIyJ48%2Fp4ITO99PypnsN6wxa4sNS%2BEUttvJAyiTD7jK%2F27b03ecSgOBl2XA5tXg6XG%2FKxtbLgpm9ZFdKRmotzw6tp7ulzAKE7KMRqoz29KcZtV6kDgAR4UkC4WChGEgWHQYCykCpGI4SEISCIld9bm%2BPn25mVdVqkulTVZKxXVSRwNOux4r%2F7%2FK%2FlHw3h5%2FZh%2B6P%2BM6rPfTRXluEKj5E41DxQl04ZJxo%2FcRul6vXH6k9330XVV77V7sGBaKZNcHQZIARP3MxmrcqKTDK4KqEiNo1dfLybnXu325lH3%2F5vFt6nVUxBvr%2B%2BeHds9s8P2wtHjqV2%2BH0sNVJAHOeZUAxNfdZL6ZcLQOfIqTwNDJy91RqmCH%2BfTfwbw4r3%2B8UiFBbjt6VKrLX0YZS%2BUVLxz%2BaclBtNBgIo5HDqlWdNQCGFIjRmE4Z%2Fb%2FQDgASIUkCoUIYWNQWMgWEoWKoWFAWC4REQRGnOpW8qpKxEqSrqa3raqmeahOBwPrav1buf5X9anZNsr2XUeRdWgo0ZWqIw3gX5%2BvYId03CZ%2FNWEnlz02S9jSXduj2ZjSf3LlXyTuWrv6lKcAn343zL8enx7%2Fd0ga2SDcOJdXmZY7pIZWIiLiXoqpklqQFBBTvNCQjiu5jkA60r86qIPqST5Yiodl%2FRWh%2FWZ45IiQclXlolotSI6XSdKEADc3p1zHnSjqpQneWqiibGITOfuy19OCkzzibleUfmwvLPXx5CuyXzrHKeAdanQ%2FRkk%2BmIwRloox9JP3%2FaAOAEgVJQoVhIFhwJgwFgwFjqFAqJioFQmEhmFWVdX6vEUq1NVFddw2vOoJ0Hz%2FffUP9ulv0V%2B67q%2FqGH0792E0myTMREGgwWelS78L8VZ1PBpCbQGCiPVk7pbB%2Fb8STUeu7Co6drSFfizJboQjDP8Y2zyv4CTmFgbqbjn3Osf13Jc8EXnjXSAuhvjpGIvN%2BkGfZ6XjXjvXZ00upE5ICj5wSAt7Yz1mZ3ZrmgF7EyGzKE0oXCu8sAMUzl6a%2B%2F5elFsqNiUQPyTeSzyucvZ6l8ChO4VlNhcCWEXOXAcZpTaj8nu1LT8ZKELDEUBiEkjxRiicLcZo%2BF3AcAAAAoKQZogCAoFf6EsXd8X%2F8n%2Fff%2BX%2F%2F%2F77%2FViWie19%2F9f%2F%2F8Sr%2Ff6u7%2B%2F11Js3daJfCHfRF%2BvfovcAsQjwF0I8AQ0FPguFG8CA%2BdqsC0IKcMCi8Kg%2B4mkGsA6dgVAfbXgMMdQPR2z0KS%2FNqMqv%2FApCgR177qTj379DUpiuS%2F0TL9WscvVUikZgJ61fq2O%2F1%2Brfr3OvVyZPWgqL0beRthcRB%2FcIJXuhvlQoHXSLvYh6pWpPwhBBChEKkD%2Ffl%2FjR5iTjj8sn%2BLxUzx84xbf4AQoDoKbS6Q0MdxKKYp7QpinRqEn4DEflFA5Q3kwNPNb4GQ6bpKyoeSrLMRolBlJ59VHGj2iUlwKptB35a1JEWy7rAgAVAXlG%2BGCX4A7NVbfbbR6pjlsKCBCQA0PDQhjgV1GzEve%2BYIaUoB4AKPc%2FKurul0ccesQLCqG3aK0ArgERg%2Fcbk8Z45Ttl%2F7MBKQn3%2F1PL9MtM%2BExoK1lqBsO9TxUwVDOvWl%2FwO5QETD%2FGd96miHxqwhpleFCpQhDzAq3eYgONg08TewjN8444lu0gkscG4gN3RLgMGiKbD%2BgzvLaE6r1bo5XP1932rTer916t83fP8isW3f0wWmU%2FrqscwgjD7Vz2%2Bn7BDVeLWPEGCweKs1mQBztinT3Fx%2FKoiUhE0KLFXiSZWRPvcNCBs8sFhlhihlhlmKGKGfGEtAakX8M4oGBj1u8DNUD7pwXXU5nXHqriNa74SMr7416c%2BYX8TMgUfMEizxi2CM17Amges8R5k2wQQDZcVhNqHSu1O8KHSqcmN4oaZZpgqDXf0fb3Lwr9xuXyoPeOsnkhWf%2B6bvSDdJT8KjIWi35Eciu61RIrybojHd1WuvQuXjZqfFLz%2FCl5ignFObwWEun%2Fs1hjiZPHl5fF1l%2BaTtC%2FcA3gweLgoYB%2Fq2f4NeX9IGZLGPcACdA9FUINP4dblr4j%2Frh7dWtVyVasYomq69X5HluI%2FyVy7%2BX5AoIgksrgB1cmG4JDEzLI7aFZt%2Bt70en%2BZ9FoP5tcQJhSLgDCOiZi98Ghoqxdsm%2B4xwqWjo0Mh46kIzKAMoDOilwIYvgONMy%2BQfKm1z6YYH2YdMEqMDr6K%2BT9CarJk9UobVzu7xSvu%2FXK6Jlte2kqLJwSfM9%2BTLJMy1elWb%2BCysQaxB4G7C8DPuTWCEvpAU162Clqu6uuqT9FryFvVak4tXl9al0wSELE0ErbfVggzpCaW2ysgxRlI%2F5bJtEqSEG8fufd4%2FUNGBKGuttJMI%3D&media_id=1254206535166763008&segment_index=17" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:03 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:03 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_KsVcWiAHkZiPvRE5yVrImA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:03 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112316524788; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:03 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "c0120b835ec0cf3d4dae7d40bffdf65e", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19935", - "x-rate-limit-reset": "1587864356", - "x-response-time": "33", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00babfba00c09c44", - "x-tsa-request-body-time": "95", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"37DTxBkueNUIQqQX7PWtEiwwkqE%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=MaeTBok%2F38KSEFphEBezxZRuDvSr4qjOq%2B3v%2Fs%2Fp8t%2FQIy460eWX%2FyxhuPJgpFHqwSssbQXBqoYjV8te7YJsNAxal6qDRfcjzmUsa%2BXf9ejvdFfEUKWofxRNUqyl5bta%2BJvxROOsswBiZ1%2F6%2BXe6alH8dd4o0r7hVW%2Fh7BrDtSYKJOPDRqOzFtb7C9MVxBxkM9C4cQzKg4AmB36QVEMJFxk37cQ0Q6ZQ6wiF%2Fk9q1x8uMIuIfhyRIQYfJ86XQ70Hw1xd6VuFvXM2%2FT4KLv3vr3WVehbHffxcnomVerzaor%2B6xeB%2BF%2B2Umqy%2BBUgZsI4KMvVvcV05rJ%2FAUAgEhwIRgBCwMQLCZcvcG8YzaJcJgPAJt%2FKP4WAnH4Wu4hxWFEhDn6zjpDyVthBzi042Qf4XxVGQYBvlp%2BThsbtX2Gjh5JR8E9rwTOxVA3UXjW%2F%2FX4U2tBkDAS91tOHnT1dAnlyD8FZW8tz%2FKYpbTue4r3Y%2BXyfDT7ggnsov8EPpFLx1EW0X6MAatXo845jq5Se%2BZCU4eIdAcfDcnlU0NX43O6OpgopUSCLK%2F1vieHE%2BhxI3HPP%2FfSlwH67HPWM5eJ9P7KS%2F923X8ERLGbOLll5%2BJ%2FV7lRWSYbHita8Q%2B8UNhvfgUR4LTKtK9%2B8CicRVddK8MICCM8GJgpEPOAHnw8HCwACMUAAjPAcDuNVxjJ9Gem1IhNKdgsRn8KxQACcKDgNTcXTu5YDXhH9qPgGAE6THU%2F%2F8p82%2FjIfSY0DimiQ8NvGyFcQeQIArL%2FvhkioaYPquOic%2F4gqCRGhnmSPPye1vLIyR7a82VlFfxJQMqTIR1fYvVoNeCUkdNHxNiOGbH4IZ58fZ%2BuH5PHS4fgp6BPogPPnu9S%2F%2BteSiv%2Btd1a%2BSP4j2QUbTfVeRrHPASQkERHPnHMvylF%2F%2BOiq0yjFhPY3x9BTNNK%2BT0Pb9G1r8FebM0EmdDvYryVFuZ%2F11XrB6%2FnKv8OsD%2FjDXu93dpq7X8M3vXyDBjIPn9ekuWiLlR3eP%2F%2FC3Qxw6tU9f9iKVLWeqA4YlxP%2Fgwl%2BfopAvUbG3soNJj%2FmziBWJe5qufOT97%2B1dmocG9MH2KrCCBAJa08OPyHkStQ1%2FPgzN%2FBGbG9fpLl%2BW0Wuda774vhmRN9eJJnGC2SeOyvXJd8hBGPUsyT3RuXIUU00pPD%2FcZMWkFWoMaLSks4mOpj%2F6Ky7q57R4O%2FWS5fZqyoPlK7%2FzY0Y%2F1YfXu1ck8wqErbT1kEoWN1E2FzU9gIiY9y8p2pDRbW5qUfPQPDx4HA7b4nd%2FbqSLJ9wb8uiOpQZtFW1rViB2%2BnmCyuoaB8TK6arV%2BgG5LS1wKyJIvcpgCVlq3deihDjXm4uGpPd1IkSGtaXwnw1dSD76VGAkb6Pf8FBQI9RZtCD%2BO%2BKiX%2B3XfloaO1afSxNoVl%2BXu68VnCAKtJNbRAz80ssyQnovfr6S0eJTJ%2Bf%2F0QU%2FAHuaJdSBD2Rp96GkaSlteWT%2Fjq8bnNGn9%2FzcdPhuf1Yw3KQbJsv%2FWmzvLOff1t4ze3DTge88HY%2FAh%2BKX3c4hylQeEgsqiesg2xh32%2BWqJ%2FtmZIUZrSW5RLVPfWQTYUqCTzLHy1ONJbkTYy3pV3U1y1rQKSUoAvNnC0hnJunqoMqLf%2FUn8n36VadUJK3TfLk%2BP%2BvWXff69J6J1er15r37rzlVGTWcXryku%2F6whb9I6rzFctP4REUjF8dhjr4v%2Fbxtl6BTtoWrzXIvUtjKsv1fs6fIInowV3r4lt1kbDrewS4hwTgx4hxIHHoZKvphyR5Kq%2FWbGm5FEt%2FUZ0lzY0%2FLpNyLH%2FS%2BCNvajRN2r3pGoemkr9Kb4RL%2Baye9ZQgRKXb86uXL1lU4QEmYj5u%2BfD5UVv3CPL2lpcHV8v%2F5jU3DY8vR2sU8kGXV%2FkMTO7R4q9XSk87%2F%2FIIlH7%2FJNn%2B%2BfB5ol%2F9zSZ67cXCFnnKkievLhaQfXrT1pe1uqtvVih93tF3tqB%2FL62iwjT3ncepVky9msYdo7UibcPe9XWo8pKpExWqttoKCODtgfq%2F8mTrng%2Bv0Lyr1ahWK36KO36xSk9%2F8%2BX1bT36yXb9aT0uu6wl%2FJcY9%2BWxWNsv3CstyYM9qSJr59S%2FmhxPVd%2FhCPNH%2BN%2B21X6Ixr1FVSszlx2Et5E5M%2BZLQ1o%2B5C%2F%2FxHqzUuQoVZSpu%2F6HdSyzyEpXgAAALZ0GaIIgqBX3XL%2BheXz%2Fr3a9NauVa5TeuV1fr36t9rFd%2Fr3a9drlXrb%2BqI%2BIq1b9bVyV61N69vxw4OEgVSpeA7yx5r%2B%2B14IBnvrwTMtP4UjSYFsfgtPDiMWnTNlPDCs2OwO8p0BnOQ63JhsZSN1Kpxhd8%2BoZjRhwGE2kOvghJ1PbvVcExA2XgV81CoDRQ07vDJcbN4dnLyON6Zd30fqFfUsX6xdE8EO5%2FJ71%2FQS%2Fyn2%2FvtWX%2Fcl3yy4VEmJNKnwmPGkx1rsHG2YPkcWD18tf35BXBndGM7WiU4iaLlV7jRY3h8NqUdv1TVpJ%2BVAeX%2FPDDsqSO%2BQPHWRHNqxbktIeQ8tQlRcWLG5TSb6mNlwLNxLc3SyUWo674O9g1mgVTpodil2IZMy03bVWKPQeIig667IBGXdRC%2FNK1PaMBr7AvjKGiiM6ibT8CwIGm239CYVYlyDc%2BofFEqzyfC2q2aJLEgSuV9rcj7bGUpw4q%2BLaLh0o2PA%2BVE1JwVoReoBprUztsSj7qejCPf%2F53wMDCg4WRv%2FzXCxxaE5a0ofy%2BEy5WNhj%2BW2RY3q8zJQqTnonXF4Ymx4bzPnuOuc0G6LyDov%2FT9er5Pn%2F7r1f9e%2FXr7V%2B79emHaXb6r8MEEcr1WI6W0hVkNF%2BmB3pcw%2Fz%2FoOmS9%2BOek3%2Bb%2F%2F0HSo%2FQPByaBfiXQdPdMFZU9bZiBWqqtVQP59o26K8SQVGkxctl5eXi4vJezGZxFv5TtdRpVFxcXNil4uzC%2FFxekPju2LZtymS7xJRstwIvF2pPFxcXF5k%2BlXx3xduNde2PLlwQts9%2BIaJx67e96WFqU%2Fv9%2FqR8RfO%2Bd9dL3eKUV%2FXv167Xur9Yv1lXq0tr1ernjcn898mXxMR0wsIxzG%2BvV1ovXSE96anvMJRYoz0Sp%2FXKT1e%2B%2FtW%2FV67GCLDgIH8TqeTtSWX980dzV%2FQ7X%2BmFMCT8EB9tKngrZlsQtKTBP1z86gBww0akIJ1mnpy%2B5Lk94pBVXPW1%2BhL1a9FX%2BrSWryc1er1%2BvCAgMeOF%2BO%2BfUdqjvWGf4qtauE0l0aW%2FFIEki8xz3I8xPb%2FqCFHICT1imuW5PVx8FBOFExVcsGYt%2FQSvOXP1qZmtbGYh9j5T9BbwQIWjgMbMrcMdz5Zy%2B7via3RRbAbSVT8Z9NG5PdvSPG5fKw0W1FJhFY39lzDCO5jpSfEa%2FGZRixyZl9esbFQbBxfkXyYKC8Ykx8FQMZt9m68n2v1dyXQ6X0vrqYv%2Fr2ry2YnAY3NXJ%2Bvvhfy7lYThH6GZNydbogrN3Pn%2FD0YlF%2BPXB4y4SHMpjwkuqGVmaMbPDVMuUy%2F%2Bo7H2r68tB6Je9BnGbnTDJ1D6fT5QyvIh%2F5PD9RAiGxHiYTeEW5f23wVXkG8%2BQ6DlUDA30toOLXeC%2FdhAY%2BMHV0slmanpW3SJqYyRNVZCEhuKmv3%2BzArXRWGhDhHhPoOhbH0ugzmtgxiYXhQgnrCWpChjVvsxKg%2BqFv%2BiP4Q1Fq9Cl7V6v9WJPVitVytYSocCjzU1Sgy%2FNmsosj3b3eX7%2FCWY2NnlwgLBB5U8n1%2FTjUpcWHgV1KKuLM6YAZFfSEa8FP7Lv7q1%2B61Q0IPBtlJ6pVyhbbIo3LR6Tyx4BG9W4u41WxEPGH69RAL%2Btug6UqmX331MaTP2nG7eutYvUsVvZ1E4wmG7rW0Xbwef575PlXtw5GUxt9S6Y1S%2BT3vcUgxYwL6L%2FaH%2Bg%2BZjKnGXlQv5JeE48TmXu4%2BFSoGMe5TtAGm63%2Fb8NWZNR%2F5fX3EEF71XWlsFiIyOspfv3BVHYlY%2B30VtHbiDl960doS88938T8tPjgqyVWvCosQZVWqr4kSyKv4lE7XPWXxAXnOIOgUFFMenRhelOEnK4XnThWfGTmYsxBzCApxJ5RhiFL9QIjpFbQcXWKwBxnLHJ%2FSOCFWfqiq3xpEzz%2Bprf7Nz0lNEJYnvim%2FwpNi%2FpkpJ9r%2BJKziLZ%2Ftg9viSPu2m9%2FkPZXr2UNElUTM149%2F9uvT5oupFy26Qg1QmdPVl%2BNu8Qvq42dTLZRaGY2y%2BHG8H9z7Ci2nJ5fliLQQO5XwEckMR9BbDWejCM%2FO%2BFgyk4yaWwdlqUntpnJCQd4d5qDi5S067xjS921SDDs%2FSKla%2FJE%2Biu7%2FuEvX1l8X%2F8sEoguXd3eRf2CUzu93yJ%2BHziifNZHEfxQbYr6Q2FqTokGcm%2F8LQ4iZGI2mspnTM9pZ%2B%2F0jhAJD%2FvHfwXwSl56GHxkur4tPvy59BYW97vrHddD%2F5hAceJEhb9%2BCvRNqc0JX05yYpCH3lVkuX2F8R2wa%2Fsp2iGnW4bmpdG%2F8aaVzOwQisUW73tZPP6cnTe%2BhDBGZ7Iitt%2FqkJ%2FWXRHTfNV91%2FTZPbr9WFFyELXNCiVRc5Rbq%2FwQ%2BT6%2FNjUpLuuh3SFYql2XLfvrJFbvvX%2FQl2pcQR4hYltGQkDyqW%2BImwGN4pmsauNTXC%2FpjDvpbT8d9yx4hkz7YeNfSA%2B%2B%2B76%2BH9Fa0of2W4zOeX6q1BFLh%2B36%2FBX3Z5ppBMsQca8QcyEkZG6mG1iYScWi9J9On%2F168UvCy7usEWHut%2FUy8WQemvC2KWfp%2BWW8vdehLdsRd5PEE0Tq6ddBMSh5HgvzyEBP9tkCgmQQ6JR2GJXsmx2EFE7V6gz2nixA7ZRf7CQgsPZ0BZsoVx5Y2bOu52dwBkbrxxdX%2F2GcaLrr4tbPXVovV6%2B%2FXuiV79Wq%2BrvTTWl9XK3JyYu%2BcEO1SOpk9%2F7IbHcqG%2BzRgTu9Ll%2F%2Bv0eDsl3fvvT2Qg4Ztz%2FBDhu4wcq%2Ft%2FhifAS%2FLzdUabNlYkgZ1h9CchqqT75LUIkCMEXpqER0mFKDbjgeVSBRPL5mQpLjcuEBNxrMV8fHALWdzGj12LjIZX64zQc4WxW5YWysjDlijZ62MFuNJ0frJaG5TY7ZeewlwTwAReu%2Fihj3QW5L4nqTH6l0L8dyWMb1%2BOY9ZKKN8Eeba7nIpU%2BVWJJZ%2Buom9tG%2Bu2gS3iH932wmsZXbE8%2FBr3D93w5jk0YZ%2BPzTCN05S0j7P4ImxePKUTuoUl9cu4gV%2BEcviCO7337fWTx0ibCEI84veQQEaaE3mOWj8v%2FqCLA%2BUrOXbupcQatFcfWvzeHGW9AoqZJF1qw3rpNHOn0HjYBubmVUKA7rWPCxVamUb%2Ff48ndJzVTr5GC%2BntvEIKrvDpJf14%2B8HakjHRBq5duuatBA%2BHr5aok9fi4d%2F3jLRcjbntpXrL9jDlxLA60c9uel5hP%2B9ZHKMxrJ4o4uXtt9335CgmJpqbW4x7E61haFCasniiVlpzNDWehN%2BiP3WK9yN8hHy03qrJbxgxsXz4MmzqPL7jJv935C3S716khlDU7hv26kJu8vr6mu77yK%2FsE54JdrYLWtbntM0V%2FKkV%2FaBYI7RDZEgz75asY8zMe1mYgJRi47X0vgq315LIIx8iB32r7CZQ7UmC2Wo%2BpEyEWolsvimqbf%2FjZqGw191Nc0iYgmZa3%2BvipWm96CtjUX%2BBhDIYttyEokiYwWuzTb%2FEEBQVVHdB7xovLqJLp5x5ni%2FllN79QWCW61X5qRa4twn4xFxGnmFgolpXnmA%2F9VV%2FIX18Vv0dvyGjoxPtk6r777RXCtW7Jar2Cjeak3X7Z2QhcvrO6JlSXv1LP52TZd7JSfearmMjfe5VNht%2B%2BwjLVLfnhR95PNTfcZiPSp1Flx0ltIg35lKlVa2TX4gmPNPVMyV9%2FoRiSet9cuOPijjJi%2B09651FUp8daby%2B75BZBDtp%2BJr6yb9BFHe%2Fi5fOZSan%2Bnq6nSvHc%2F5f3f5iPf9H656uifKn47k%2FC9f0sv5kSd6zG2ImzvzGBLuFvmfHSF5asJlFkU9%2FGMpPyTNyWh1e%2Fi6PQ9%2F1jpPWHXmLbun%2F9vd%2F0Ie822iPv6ILJhM9kCSi%2FeWIRyKTU%2F%2BaKyZ1pQAACHBBmiEISgVyX9IX7Ge83J0t%2Brfq36tdqdJqlb9Yute%2BK77Xzv%2F9Wq7uvV3612tfE169Y7lu1f9XvwSEhYTIqKnrL62ythgg79T34AaXzyS%2FttLHf%2FS8PhVsZJ%2FpoyxM2%2FS4kHQSKXX086Ps%2BVYMcuKpC18N1xqu%2FVjtfUKxXnn6REqN6kSvWt%2BBHE7wYCAqwwSjdJ9pgpTTX%2FC7DvCczykPhpll%2FuhV9c%2By%2BE4Td4aizlIIMxdJF5qk3y%2BE32IYKSdTmp5bR0Ee2ayyxu0jCNvfp98Q8xTZRCFFKrn1%2BI7l9wqUtsO%2BSYGq8oR%2BQBz5xPMe58GWgeSCskEe8Gvwy%2BIDWh2%2FwqwwUDNhnTy7Dbfh%2BsZphgl3XpF16KSe9sNlDBIA1BlMdjamuLl8ybH6%2Fk0iW8RiEN6qVT3TcGD%2FrF4V%2FF47lCPJ8nvupUTKW%2Fi79XP17vgZ96%2F5zMfxLtYiF97z5xdBD%2BPrK8L1qpLZDFU68c%2F%2FLG6qq1WV62ZEdZ8ybcpkuy%2Fn%2BNKjhqvVVWovWCsdtlraammk%2Fc9z%2BPK1885FPWtlb1PXo8XqtSd4onu7Xq9eu6i69Wu5HZRZBhv5PsqfNBCXNnXS8CXzL1XTIT0R61J61Jckt%2F2sXAy1ikMNGi0niyjv9WEn1Icas8ah7V4ynVd8YZrzMnoPPkiIU5LHRB%2FqqDJrh60utZ6h8G4ib%2B%2BTM5ZetYZQHyRVBgkZ7o7EmTXqyT1%2BCeu5IOXKvVIjT1%2FhauKvyerqnlNBva6XTF8GN5tMOpv2GK5JLR%2Bocvr9eq4r1qS7L4WlXYLDUTmYoJVMjZTXvw6VwT%2BZJDTf7JA12nr8%2Bt1%2FBhLDM8KCBUS0lQOkEG2h6tbVNObdGK5fSdbBBDOYYdpu6xqhkUHVdw60lDCV6jtzZvrNg4Zsr8nzRTtWHyLX2VZo%2Bod5oB2qJLZlT73Jlv5axLkxH5v0fpfVn6tEer1uhZL1MKyGKV65ScPc1eGcmUa%2B6vr7ITUcQL0LPZf%2FUQILz4ajJY2SDmuT91KyIO8aanxOy3bh%2Fnh61aQ5J96qNtJFpnGYDF2Nfg74wcG5lEyF9jOuhHxrZGUYQS%2B8n6QKMBjbZ7iJyXVeJ4y0Q5X%2BhaZbrdE7u%2FVruSf1VuiFcsvioQt1vPUxHis4gfiPJlTQ%2FhyOCd8J3CkX0bUdEJ8kdlNrsA%2FE91kv%2BHC8nUgykWLt%2F56%2FLFHH8EVIhB44l%2FX0SLJ%2Br%2F9C83t2ifl%2Bi9Sy3UOQzD8F5RloC33rfgfxC4sMaE%2BGNN%2FsioJlA8bfXwS0ZDENMsiZbW%2BSJ5sv0e3d3N6skwcjvHhMWRdPd%2BxIJ%2Bqujf28Rl34lo3vEoFuK8XVbPx9z521TY4n%2F6E5fl7lMS%2BHKQMajtZZ8qtZpfERhMc%2BWi8hJIRpfvsp%2FhLNTaSo71wVYZmZadBQxMyz1C0n78EvXNDqVHPcN3E3%2Bvford11l%2BIL%2FwiqwJZPxIjP4MXTfn4mGcEPnBA3NR%2Bce%2F3D84iou1XmGO7iteKl92PjVK9Lv8EZ2pcfY3kqGN5SHAmbn5%2FrmMm1ONS3oX4nsg0hZHm5cxBgfz18j5WJebmFsdk3u%2BYtcv1q%2BdakXjjVV2zGGLzH3o7DO9DXyDJe%2FrCF7%2BXuMqc0fnwS8dx5LeD3BLOYivlpbV5VknYIhOkknXcFJp8O5dFWYz%2BsKUTPTr5ampcvovfr1cSvUKJ77%2BJ7r0VuYpe78dkrMO57uv77Md3d1fYI%2BT%2BvyCsrHYg9yQ1cnbT4Zn3FUNXl%2F%2FxQnNmE3UAbfqXnvBWLKYaqhj%2F6S%2F5Fhi%2BgdQzXgGBIzus8pvQDpDFHPFYcQmfyeH5pRUedpm97Fvo%2Ffgmlg%2BHESZ9yvRe%2FVuL%2FWqvte4JVavXVq%2B7W9WQx0jaJ%2BxGcYN3a990T36%2FJ7f%2FdX2E7OfMaMf5a%2Fy9fl%2FI8iBBD9EGXjW%2BgIBnRoBCNwLetY0mR1oIl5WpQhE0BC9sv%2F%2FXqGeUfpkY5WE9itz%2F7wgjFG0R%2BnjVNlMCQEc8yBVvuw%2Br%2BXAnhxbUE7wGspKLFeewF%2FBT0E2O2fVMfL8ldjiYzK%2BdT1sZXR716C6BY0mOXzfxNLDGWG4T966ofwBiG1J1xFegHGv04JHrnqyf9eWLKaO6TSVVScVDYWlre5ZdUfr9S0l07yky%2Ftcu6J7%2FeQrsb%2Fgh1k7PzeM1Se9fjtIeo7VY9jfX%2BzGKx%2FgjGvdJj8FRvHLNLqgXJxIvv3ya32X2nLcERMJRimgNM0LZkxs1tYdIk71LoOF4FGjUIW%2FrS96Erqv6cYtVnt%2FqOoKX%2BX9lqhnPl7uM4y3L8KGkMZMWurXLjDpbkjt0DHKKyw%2FLR79IZjlRcXjk11d%2BBZxu%2FckKINJHMxvMly4%2B2KNk8dJhc2dlEUyIWP7FXvl04sk9oWzwvr1j1dXXghInpy%2FWK7%2FBH0nw%2FCe6dPeTxVXL2rmNjAydfQJRd7WPBB%2Bx32CfLSgbYfXWdm5sr0%2BOEPGEIm66FXnBC%2Bn59Pp2lQPtBqKy4B2uqUmp%2F30oVmDbq3Kn5EqNfDrZtxrlMv1uEyaqkl3u4KCqvNHrX2CuNtHXiS5m3jZfmkzMYclhxlvezqXIqaSXRgnpO%2BaLd9EMLJtHzg%2FZKK79Hf9ddyeQl06uieXd%2Fa9Xl5P%2BCi2p4wpP4d8verLMZjG4nyfTZHQma1pU4%2BHIx5R7oNU6Zt%2FfZu0Uxrx1e%2FEUp8q%2F1CJQo982e47EOpfzjLly13fF%2B0fPgpEUN5W%2Bu7K9DW%2FV5LUqSerz%2Brl2TDjUf6vd2vsERy%2F0%2F4gZZ33ftBPjHooM3vmUJWkuTmPte296%2Fyfj5D4IiIZn%2FXaGtQrdevTadWrgl9uMe%2BWWXN8cI50UjeXk82z%2F1j24JAlworhgAAAwyQZohiGoFf6FxX692rdydKxLaxd9Unq3MX8n2veEv1%2F%2F2vZPr7v%2Fv7%2F51jS3XSs%2FV8v%2F8vE1xF0vhiGCcQyLh%2Bb5nXgEcv8Sw4WQ3qaOXMIiDSdilkYQGpkqJ7kfVuNde3ORBbfpTpTJCKa4lGMtY2Ryfsub7v7%2Bbtcu0XLi7vvFfV1K0X69Jf6sOc4LzZ%2BlGWgviWNyzy5jJJQ7Q2JKUP8Ihpka0uHftBD7Vgy5wPVzpk36bNTRnjV6DuwZoxBtjtWDLLl5rH9ED5h%2BwwixerqrG6G4LfIKgDWPzuag6YcnpUjvGbPaOQbIg34IRarTjcWKdVRPxeay%2BLlj2WFP0GLOZ1RJ%2B9f0lcBm9PaUND%2BESDYOD%2BDIlFWUmyqbsIQQ%2FngtpyN5LHx77rXcnwlswNJAvVeLZXgY5rjZR9cQ4KJ6P%2B0G2pDN9yBQ4dQYwUbGo%2FcAFepL%2FR7%2B96bH8YNVRp5RBzkuAay01zxC1570T7%2F64r4j7VqCS069fohfX6v8T3%2BuUtyXfhkycrFeDNL4lNXVKfJ%2BPWgzS8%2Bn3JHMuolxfzQ0W7u%2F%2BPy467oFvNQxlmEp2Zf%2FkG5VV1VV1XIA70jbn1vnQfKqNVVUklrvtDUusmpLZbfXsoL%2FwBUqMOog6t%2Bm63EZXy7%2FArFhkme6%2F9lcsJK%2FCdHwktal4la7Xu57k1vxQpu27bt3j338TJsRXSF99K5EXGdrla8hAoalCVd7KHEryNv%2FdK9D%2BmX%2By%2B2nShTg7UBVRqB6EBdmETayggSQqp1fWPPRobW04PM931k%2BMyehNXt4r%2FV%2F1y%2FVj0L%2BJXqubYmuLXqyfMQWTYYcQ3BzRppOy9a%2BJ9fzEHIfNthlom8Vr0folfyXXF0T5%2F%2F1YZQ4S8TxcqIeJf22mDC9pkcVYYvPRpmSf687%2F4U1Y9E6FrRoQBhwxloumQaH%2FJWAvv%2BDCWiWGd0ZJ1JW21%2FUEfNmLe7heXL3shrRfbe8n49FaibgbnLOcsStVl0HablcmhfxM8EdZdeit%2BvdLXq3dzm8lLVTBATKPNcsSW5Fgkf%2FFYdILIgsxqOFD7DGUEAXgpatVYwYGuR%2FDPS0XDyfSv3lLp1OoI%2BDv%2BuxRLHJzdi8jPwgd7u%2Fx3oUljpr0vKIKQkP77hScYIanyvLwqIcV%2FjUZFDyfJy3%2B%2Fclg6DEcnkQKJBlBQfXB9iDi7ioXU2ZiCciOkT4lAw3vloW19OMlV8Sgh4cXistA1LUeaIoDk5q2T20fu7FLXr66re4WOi94WRRDv36gkvEDgrfJ%2BIvahKrMLzN9EgibUfphegscO8RDePf5zshMbd0qg8Ezpfy%2F%2BHqCTrJzVoFW9SmsdYR1se0HdrcbfSQGzZieMn%2FXxaNEl3rBiGKzOt4j%2FG9pzcQ1FUIhr%2BC2s9pWbfvwTEHl1m27JspGTt%2FtGXhAF4imwQfhkp0Ard3HnJVTpv65e0C%2FQhwY%2BQxwnKqZMk05m4Jf22py%2ByLWNIFtUjVpuIQ%2Fp4%2BMJAWHpCOJ0TSqwSOn3AN%2F7lrxNd%2B5cFH9DpmmeWHOEVzsc4uMvyL84VLBVf33spusWGNN4Yaf%2FD0EZu4%2FD6Ziz0SdUO20bL2oopqcms3%2F9w9vxxeg8ONAHab9mcVxCxlB7NBHrDK%2B4Y0XbLi6vJ6s1%2BvVyVjff6yvUEheX98oglVVVr0VErwjRG3j5y6iBEewj0mz41jhHuGdwZFKCWKMUZ45mngrQr4sni93QIhMIXDunsPjbwwMaBp6kZteGV9arGjlOPlIhmSoWMH2mT%2Bvy%2Fr44igcv8cIMAQdhhh2yJ0%2B91DJYA96t4WAfbhu6oefqCvazX%2B9vCxJL305WMsRu5%2F%2BY97%2FFE3bjqZrUz1BNaI4%2B9ZT%2BI%2FOVU0FN%2Fv8JmLzccn577yfC14V415a1h9sC8Gn2q2FX99YWjJEN%2FNKgon3UHrWFzIkGTWoq9wT3SGmRJffE9sv%2B0oV7iA%3D&media_id=1254206535166763008&segment_index=18" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:03 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:03 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_ZUua6hlDD9lPcQsr1bFN0Q==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:03 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112371858353; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:03 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "de49e6924451b60278002f0d21941e4b", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19934", - "x-rate-limit-reset": "1587864356", - "x-response-time": "32", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00986fd2001e1949", - "x-tsa-request-body-time": "98", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"82J3IwDysMO%2BYS5RqBpN972%2BMcA%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=mILNrEB2v7zPqPs5V84gNj%2FmV3k%2BTl%2F%2BFvBsHvkku%2FV661uZo0c8KF9QQkd9Ovnr52GrWw%2BUAe1ef7LR7lBDdAq%2FTQDcaF08MzkgwTVMm8NMhkxYGA2%2BHZ74bnqSp51hE%2F68eJM2MLIILar%2FL6%2Fhuyh9JjWhsLJJcT%2F6GlB%2BYRjQxa%2FhG3HcY7Gfbjl9%2BmZPSvdyFx3Xl8uXLhot3d38JcGmXS6aU29%2FhO%2B6e8v%2FqHLCjGKdbQ4YeijpmBCrhy2Y9isRXnwte5a3OY%2BNJdhmEn%2BRvfhL92%2F08JYZa9XJ6r3geAIG%2FBB8ECu69cvF16%2BbXnesYX2JYXESkFAOGVJQ4%2BbVjZ7rBsR4sN6j4a1Z6YKstzpH%2F9HKrWGVl%2F%2FCxFonPYDhKwex9V4kPIIH%2FmztoKT29rCvaHBnqGpXaoww3P%2Fe7iS3d3fyu9%2F%2F1f8PbmpEjGxhMWZS4mpbA7SqR%2BNlHT%2Fl%2Fs%2FOdYdZF%2F6m1D5JZ6U1vaDP4Y5MxUw%2FcIo4niB4McYJCX8MWmFpk%2FeJ1DbWAg4v17jbekRdjv1vJ%2FjwHmo4rtpUMFQFBkMrh6K01R5%2F%2BptQ%2Fb3uSFDtIC7YzaSJ4jI%2BiXL6wl0wv%2Fgj9S0aUVX%2BtVhDQpZPXqvbl%2BXeqL2vUL63N5n3reMGWv%2FFii5EuH%2B2M%2FtvKVKnatxGtt9v7Ol70uy8bMcn7%2B9OdMLiNDcjOMJnW987%2F5oVLdK2iYxwFRfqHqV%2Fr8PCUWUP4ReBaafG3wGsOOr0YEut022D7%2FGzv%2FePDMOvN4KwRHgLR7HfCdfan0Ob8n3fuJEIkeNIAR%2FT%2BZdVnWnf086aX%2BlSC5w9p%2B8bBX1%2BAg2oPf%2BkKkcNyrxuoLzX5mivtQm6u5grDdKWF%2Fw6ZEslP3Mqgh77r1a%2BLpehRKr1r6%2F1r6%2FXvXc9BwhM3WEzllbwx%2FqE%2Fk%2BPSv5ZWPqyfG7%2BzwudwjOTiDtNMj9ixLDi3ipGh6t2DjDW9qwqXCJGfvoY6Y71dBrd6kph5fs%2FYIPGK4I2wOlOasCwjvJam1gZNBA3pfk9b%2FBBDurhDaHtEhTMILbbEO5BgcMAxfTTv%2FvI8U2UFl2Q9jcH7KiDdJw5fENNSxhOaAkoFHsfVg6e9isMZbGKUlbCZbKtaH66x4HJTrM63gGNXen23G9hOGlJV0mCK%2B1Fk%2B0%2Fob4cXpAx%2BpAdQbPQfqnYdT%2F7LZNo52P9O4IL3cP8kLS16rRDka%2FFjhxuvQagiUxqfDpQRiclWn%2FXpq19X1a9folXvtpx9vS3lGZWE6XcPzoDpdGYYwHuljt3CMDg39h%2FJ96eSEsdISXolZyel9Y63JRg93Et9WHCpOZ9sPh2lMPYb3aCdyi%2F%2FcLpMW%2B4JPHTxl%2BFJ2TnnZOWHKM4hY%2FV2NN4XIgIumU4ZUzOWOWO8P%2B2hacL0joWR98CJ%2BF%2Fv6ypMUbM3GXcwmbbmGZfb6aGEIimuXqBwdqN6u5k8anEfmXv2hl33czO08pdzLrR3mfpuo46RWJ4KTntxv1yn75cdZHgu0nnx%2Ft7QfKIJebUB1ui9o4MxIcu%2Bvp594T%2BF%2BvLBIfcQ52v16TWrvcERVXzf99oR2T8q%2FJQ8Zyk971xfPC9L8KlCTXFX%2Bl5BA2Q%2FK9KvHhkTs2UFHsP%2BeAjR2EIrBhX3X%2BNZ7J7%2FqCIu792QgR9%2FM%2F%2FFdIa0c5MeXy%2FLyfvEVhgx8HWj8V1%2FaHis2C0XuICZf3eMemKIgW7LSGGn2rvsIm6jA1aWUd9z4xYND%2Fiq5Uv2e%2BIsu1qpyFht9%2F0ra3mEQf%2FWkYjAcvrvhWai266S%2BJmv5Ikmkpb%2B97DZyYqPrcQ3XbLsKvwYT0%2B5%2BpK3w%2FXWPO73Lm3bpa0KwS8f8vXJnJuVl8UO%2BQWafKeKxmtfd3Pz%2B6E9T9IggcZdLX6trv3%2BQraf819%2Fuunv9a39b7w1cKNLmVcihn%2Fl%2B%2BlBHe923%2FcQaA%2F6S%2BizHs%2B4jjmSz%2FtwdbZf88iBd0uWx8hQF2MvylKe47x715gXZQEfP1lFuLu%2BMNSmIX348T7Obg%2FojrLc9W200%2FXQSu%2Bjvr3GHd6bvPj3Z5ZNeQFYhvbVXVTZ71fdbUubbwhenL3ZRLpfyTZXsxMmfjjrTxvL7SVylvSJuS638u3qjsUWghzpHNX0ZaSfcSEBDrrd3FfYpaloVGtfWq9Ecm1RYJfX8sM89ivvJ%2FXwmO7RBHQo6jJ5CiF%2F55CJEvgAAAJ4kGaIgiKBX2hL16v2r%2FSviP9a%2FWq9XJbWr5rta%2FWqkLUydrXTIr9q%2F0uZwZq%2Fz%2FSpV%2F%2F%2F9d5PRK7XVcv69Eetdq36v2taQWIcg4QZw5EciEtrRjeSbufrCXDExMBGOyI4P9ZYZ6jq9X%2F0rDNy%2FKO%2BEjWL5f8IcEZ9Tns%2FWq4q%2FV7y1r9evlV69Xr1e%2FVyJvJ7ghK3uEjaZyUDtMvysP8c%2FEQ9XO%2BhXG9EqDVBRvKEwjJsErj69QvMRowQMltWnT%2FHeU%2Fan%2BXzzsS3D2CiekKANPn0sXlOGmoLC%2BAE9fZ4uFqd%2BsrLG51EGBJHS73qwy62XH1NSb%2Fo3i3WPRUHZUamOrmjhCXDI0fEkTPw4FuJQgw92tApPBo10%2BZcrr8gf6qNbE3el%2FyojIsFaWNRm2HBqleVBiWKPlpDbLVZ%2Bvlr31%2BudtH1dycvqrnd%2BsrqluvW5K04lQyYnp4v6Z9%2Bpgj2kalC8vRbt5ZoKurazVSXJ1GRHXEz7%2Ftz6Uz1GlZnNLK3VOnlmVXUnJk3360qm8YyzWy69lBFhwHtPvX4ZI76njND%2Bl77rtCe3191qrSSr1VyevRHNb8ncWIjhWaFubzZ9aEvqfXsnlGXF%2FhIskFvd5dDv%2BSie5Rz%2Bnvtap5qjTcOithVMd%2FFFpa1T70WYSnEl0YgyyqnJ%2FvWgp13EV5%2B5BXC6%2BR8fqVBuJZ3ozIDIXtKjOrca70b5uVHYfWvllotYKum%2FVr0X6xfmJhvJAbiQUZbY35jDLfTZZeAq1s9vuIz5PRe9utCYz1f8xGsa0l%2FXyEey%2FGnMbBFTMtdmtFbodjsafhCMvIw6j3lpl3%2F4QqiU0OznwSkH54JfDnUcVv7Y0vcZjuLe1gDd0i3Rz1oVBWxhmYuIPwsQv0GfXbvAYIjKxK1NV%2FLqj1JWtfq7rVlDuVK5VcuX9ar1fuR%2B4JPGy5Y%2FCJOXEimNJWdeAmPo0O116h%2FhPxRvQW1O9jYMyKEBPTIEBIFGCa%2BvbHb3G1690XqKIboVNyd2R6h05yY9xloD1tHlvdUUYX%2F5CmY2FvXFCCXsZ0hyUX8EHMSSUEK1euZYl8YNfbk9qfUReS3JGLvW8RN7HfkQJI6%2BPtML7IgWS4B22RCJ5VbIt8l4cZBa65%2BwfafL0DUu7fuiP0eu1InRHyrVcvWvfPV%2Frq%2FVioEk29eOTJd9%2FYJJcisqVjJ%2BWmR0CDcOod1QQjn5xuU0saZjV3%2B5ojGx0iEqEE%2FbbHziJMwY%2FY9T4AwxBsMHagDf6%2B9N99uF4ZMBdMA4qdTYneApd6b1m%2FsCM3VzENy6OLUin2Horn8vt30HeYxj3Ui%2FXIZWrHoahd8yY9fu3k%2FX40uf933Zu8%2Fp150SZ0X33rjLuVjcMMvsrGljjY4g%2FBWRhizr4KZM5mYDdfoUX4uP3P5wzGkx35ZcPKcXs9wV3f4HdWNblF5xEEitAd%2Fs4M5f1fBLNXtnpbLXNBCPQh3bPOw9HIjNfTnkrj74lvOody5RSmmiR9%2F%2BvfPd1hPdr3sq9JfnfiX53rKWkI7WhZoYuK8DXx5mNNQhi0vusNg2YH0evk%2Fht8jCsVhV8UYy%2FF92XEVDpSf6P7%2FIJjtzy%2FftB3xvzxEZKPoBxl9VUJwf0YfyDg4KdJ4wZPZOnw%2BQaM3Q4yx17ThKzi%2BB142CkqKH8n8%2F4VKkHUKogIAs5KktTp6%2FDcSSxT%2FbJq7%2BwWnvd7Vzf4RJ4dpjv3KJleJ%2FRYvxBh6GTKc8XYI1JPpb6G71bTsxrtAm4OxykbtjaXfvy%2B27WI4qshIxJA%2Bt6EWboJnsxpn8K3ZitHyWEJ4NBl8B1SG0X%2Fx7%2F%2BTvgG4BYn9Fe8f9F8nxzQqOeGf4zGkyVdoY9fQ8elQf%2FHfUDV1JRpvhAoCJ38v%2Fk%2FNybGa2frv4xoZu3tI8PWYzCfk0Inmu%2Bn3MugWpalNf%2FBLsxeA3nTEmct1f0YoQso6sy%2F0Ee7idDUvje9flM9%2FohVoFT%2B52dGn9WPwRlYUoyfLH4b5aIGv41LUtCfph%2B97u6Ancc6EuaZfsENU9B%2FhCz1qD5cd783xqVkFsfG%2FKtcV1yd9N32vXm1OtV%2F6LF5Pr6f48Y7u%2Fn6V7%2Bg8UIRxmXERmfpeN3LMDAZm71Zjg5Fw%2BhNbEv4I4%2BCp0Cvr6CZOT5WN1eT70W8RqPDBJpCSiz58QU9%2B1VpeCIs38vyEzEQ9lvgqpJUGrv7u%2F4fO8e6bzYPNr6Zya%2B3KbCR4eZf%2FUNkx1wa%2Fq7YFA%2FQYlx84YC%2Bvtq2kmf9gtshAmOOSkBKVua7L974MPJArw39SyEmP0ax8Gn4b4%2FK19HIei9XW1bf%2BM3%2FWI1drcvxG2Zlr6%2Bh5scBCd78PTy%2FDZRmah8TSqQTGyNsv9%2FQI5AtGQUet%2Fe3%2FzTL5w%2BTxBFj6bZoaT7MJGiIvCnQv565sOc%2F4KBXDsLRujw1l7E2TP4VkBBDYxLrhNa1eRfD7Z9L%2FGnBHP93GiVrhXxX1X3Rc832CTzY53rekXtPgiIovt%2B9313hUl1NjtEVX9fUMO335pwgDMEA14JDu%2BmH7tU235CDIzpb4t4gfhPsiZ5Zfi4%2F4We5e4Hz4G2dfCl6fjQubjDukaixRoN%2FY6hKmlZFoy3k4KCVXjBhIU%2FqoY682F%2FQUjYgrqNHOWCAriP4cREbQ1hL8MT5fX0hGwwTfXU9pqHrxegrujajcQ0eg19IPOV63y5yDe9KJDYvjj7XzOgE71bv9epC%2FCWS1ay%2F%2F91cq7xRpwQKSodTT8%2Fi7rqjrJ%2Ff2TDTNHpTyw21d%2F73f8FBW32Rc%2BrzXzmfnsqphz9P6Bafd8tMX48l45DfQKX40Mc%2FHGhPU1ZBAWo9Rz%2FwTEWiAtyB0y0SJ5P78X0Q%2BQk8BDJCrTxh3e76VpE%2Fbd39hDHjaXOK90n1%2BHySRWUeoGXjeoXVph%2Fk0kPqexLpjVL%2BA5QL5t74BtgVz1%2FNrXEFBIfSSIDwkOL3c3otRHlEVN2Z8LFJnkFJdl8oYCjSW27BHSszfEfm3WvBDbfr813vfuCWkvmpl7mIXE%2B%2Fw5xdVxE0Uf%2Bt8EQmQwv0%2FL8Jk35zZrwWm4YTaQ5njUZ4vxGBD5f0LUwzqeui3EyRZyovuMoL%2FEvL%2Fr79s2X07%2BxMf77v1u4k7v7vwgOXvCA4FxMVu1fuNo738114g0Gb3zU%2FmzZr0WKR%2BkbN2ffqci%2FHisPH1S%2Ba2GtN6yXE9VcZt6xU19%2BKiyc%2BYresQixxXu6BGGL%2BG80RV0CsSLvPSkk%2F5uXlyu%2Ff4slOqV5Ln9DYKter0RgTyc37KSm%2BnurR4LxFFaTxAzhV9dX3ggQVPfct%2BwYWn9tpWm00%2Fk9y5d8vy14Zuj8Qy2Xfrpw3ezq23En5LjLrzDX1fSt%2Brk1zPXBCEDYJ59%2BbbrAAAAaJQZoiiKoFcloSZP1cxn8YzUgLuXie%2F%2F1f79k6VX7776brV%2FT%2FWL%2Fq5e1rvr6OkvGeV3J61fFK7d%2F12vVmEAgJl%2BXJ9bA1%2FDciOPNRv4YwCaqo7%2B3F3gVLv1VaKjjaZSRsQCZ%2BYPtH79Xu%2B17uqO7%2FWr7Vqur%2BWvXpPViXpW1SFOcyyGi05OanXNQIOMxGGl3Osr%2FLi%2Bg2CHMqD9AlziwzF8lkckXcEOG1EGWp%2FfW7go1SIwPDxfDaY8qCkTYnOoDxsZAOvunr0S8rwz8B0gcqNtXr8Mc%2FZ0gN2LV6%2FkNDD6p85Uqwi%2Bvv75ZPXu5LVpPXKaeb0Zh85F%2FPrXX8pXrl8CXX1cV0eCUqost62Mvv9VfffzS1Zf%2F0Xv1iqWa5R2f4frldq9%2BKFG9aFKv0Tqd5e0Jq6KWu1Yq%2B5boQsXff4oQOjL7AUxJYfwV6lJOpmJI4aV%2FVJ%2FoXFdr%2FHLtXr36vVapQ9rhJ6v%2BtTerlesq9b1E1r5d4QzevdV%2BtSerxHrFXq%2Fs1XStTClpv1GHnQWbseFGI7uUNPfcTDMABXyfaa9Vc%2FZL3%2BOuWnkXtSMKfE6mkeul6r5Zbq5vBATSMRfbtNADHdz121bajIYspCbL1xf8Ny4JaetwXkL%2F3dYqKRb%2FiTz0%2BbMvvl%2F9IEJMeRJfeuSfLMsK9Q3D95Bq09Hr9Oa%2FhLox%2FPjXvgh9TR79Ceu1iq5KSvVv17lr1bv9e83ya8SbmilP80ENY%2Fy2eEQmY%2BZ32427A4YRMFcsIIP2cpZWLsPCB9sZX3d5wBdlECv0AnokbW%2FGcwxNIlyY3b8CX2Otsx8r6akG2B%2FElG4T27uzLmTLfeX9dxd3%2BM36fCBKAw85NcmNYcO8y%2FwURsbPzr%2FL8EeMzpevTOFF%2FfRQSlODXeUfMQ%2FfglsmEkCirNn34X7BB2ntTS1jVo6phPz%2FEq1T%2FrL9elutV1%2BvX3e%2FuKEZ6InPYSjWeM9DnnwYbu5YchOvLp%2Bz%2FkEkDAjqVofw9ew1B2TTuzXx6WDGGJAathxfm%2F%2Fx5LUUdR%2FjhEQ93%2BIKnfPb9faNB7oSx%2BKJSlMtZlZba%2F7nxNQX7KWjZTf8EJi9ed9vwS4bkdN%2FaaHrjD4JZqVvJGqS38PxFK2iz418NbtXHpDMb%2FnKvvWjNMvxHr71XvX2yCL3%2B%2B78t3v9h6G6YtMOSJnY%2B%2By1tdGi%2FJhPImoYm%2BZFixkwXn%2FwTTVgXsewbpkSz9bATPwYFtPghZiuKRWMPGu8%2B%2FDetgZu5ONfwa6J33kE0V9YYNonhxGHmB%2B5deGW0%2F6C2F3G1RIdSKJR099%2FRojq5J%2B%2FxU3js43XWpn4ZvGSHqHNL%2Fy%2F94cpDzV6a%2FgZ8z1r1flEFGX1T97d%2BpiUyzhfBHds7uKb69W46x366ruTwRG4wYpd%2BI0Bj4wsuY0y%2BUowMnjgka%2BwQkgePmINt4bvuuhB5Pp%2F4a1VamQkjO%2F68h73Xqz8URgpWJWJWP0JSn5DEWdlXgvhvpUuTOsmt%2F%2FCHyV48rBcfCATWvd1ov69V%2FNfovaC%2BRd4sRx4xxJejFzyYD2ciwj78vD%2BzSDZ0A41IfxfDEkrqe%2FPWapF5%2F4nlyVdJF%2BjPv6BERDcqjf8UXjQyLr6uP4%2F8gnNbL4uOPvym8iIoh%2BUVaQTXxQmOlh8aLn%2FDu7UpjupBBNWC3t8KJQ8DSLmypi%2FTxl%2B97kWuTevwREQEkNC4H78VJn7tInjf2E%2BLzhgIT90HNK9ej4fuVj%2FXqX0QjBXR%2FCeNAqEpy5QF8EnLDL8pKcMp6vis4sYY9lIxL69Y%2Fcg0I87H83vrEYaVYtOaSVfRs5i1%2FFx%2FHomRUCLNVOX%2F%2BrZd3r1qX8OQ0qPHlwIFqgM5mIf93YTkDEIWKEB1QQHlaHePjJ8I4%2BMK%2FNlkzLQoxXq4%2BQsySq9TF%2BCilap7u39fnO325ekd64Ixg9THUxw2C7u9LZuuHvfSO634rwrk8fcfvtHYFd5hRr%2FwmUaCl%2BWf89z6bIegOX1PfhIj07W18EdV%2B%2FECbT4e1f%2ByIU9X5P3pX%2FMYeLLj1riJeJaaCA73tp6uIg6vk%2BHcVpq92QhL7d9a9%2Bj4a5FBL3fLTF6IjdXoS8T5MVP%2BzW2ovwS7ZjHHQqUFfvxGNDE%2FdtrXP79Ofb3JH3s%2B76BlvrXkpJfxGlXm1e7vfSMl7ifQ%2BL9YvRFwq1ZMX6%2Fsvr%2Bzbtbk4lFf9ld9LXvX8oQdH95fQ%2FVjpL16sS2rpr7p5Pfr0TAAAAT0QZojCMoFf6EtXq1WrYz86hDVfpfpRin6sdcvqVXfat%2Brnf6xVx36xf%2FF9%2F%2Fr92rfr3%2FSrKqomk%2B167%2BVeqiF7tfXa9XlNHQlYPkOjxN4oIq3a9fJ%2BrPkXrquv9YK9WJBy2m9XDpv0Zj9WrwRVzQcfPVNbf9%2FeT79CTp8qv2rE%2Fq36t2rEW%2Fbk8wpDkY96fXdF9%2By9oXUnqKbvuX16X172Jq%2B%2Fiaui%2Fwxr%2BhjdoXmq0Tr9Hq7WKS1avVz9e8ZWq9asUpc%2BuUvqxMX%2FXIKDMr%2F%2Bte7u0JcRX2rvDeS5fV5rq5C%2B%2F%2Fr6gj4D%2B5b1S%2FiKsV1qtr9X8TyfH%2BvScXJdVSeU3N5fdf98v76gh2i3UX1%2FexzMF4mI9H6%2FViT1aKeuIM973%2FMRakSV6sSpxj%2FZR0ub%2FwSiOfOEnLldfvy0r1JYO4yOL4Qo78bSoG0Y0Q1Afu%2FRzNEWtS3J5hFXrwiVpoeF3sh8ZOImtX3%2BQR%2BCemhHDATXCeS%2F2Owl%2FvwYa2QMBGkz6SjQIjeODQzf8LFYbofM%2BQ6GJy%2Fpo%2F%2Ba7%2FwSaaTXfh8is0A4biTePHaUiRxSjkMKLRQxO3RfFcc6A5mY%2FLjtwq9fzdG%2FwTlmlz55fnr7Zd%2FmJKxcty3clXouUvoQ5%2BOu21g7MRoFmIew%2B9cNCbHdiWhTyf%2FwS8NIaC4xTSy%2FtHxfiCUBZc2yEGX%2F4sQVk079N2FJ4X3s2TP4TE2nvf8URDHUzXILux9fFO2FqT8ERToNnl%2BCEx0EA3nPL8FlzqY4CQV6LrB0%2FvwQcbIMA6DKYo%2BmS9TIkqY6aIDh%2FgirlLseojjbJpGOIP9Fk%2BO56l8dr%2BtCe16aXuXwmIGhER0ZGYeQ4koYGA%2FiYeiSPVqnaICQMD82MmP8vn%2F7Gvv8xsZXfiserxyQ21c9%2BXS7%2F1Yry40cevV09rVCvtaq16RYS9%2BhEvwUlKith6zHOXsJP6%2FJ%2FEy%2FD7kt%2BvDcE3z1L6%2FESHXmLeVF8mVmvxGpmOzZnJU9mJlY%2FId35f%2BlRH%2FLVf4I8YSuUH5uO4V%2BNTRfl7u7Jhus69e%2FMSWX8EZwyuzUgiPL80pyhEZ%2Bj3HwXCM3t6s%2FLL%2FS6iEIZ%2BCMvNjq8wlmkwzvXgpFcdokRKH5QXOrIOjvXgrO01gQPY43P%2FbtpuvF5bRcqtYrfqsX6sWvUXe5abuvDRiePGNSzao%2F%2BCKgZIcFeepA%2FjgxfXkPx4QH4IaHaxjPxO3Wr%2Frzr5CFITR%2Fguo0nDx%2BcPBOqHb8I%2BeKshU%2Fkf3l%2FrwTk4dXQ6RIT1rXNYZxQrEL4Rp05fNv%2FObyr%2FFeb46cf74aT8nCPz1QbMY7L9JToS6WeSVarCJf1yl8hD00Cdy%2B7Hv80QsffaLW9cYQ17GVF5gs1MR0UcGfY4ygcv4qPjffe%2Bax3OQRNyTyWh7%2FgixkKF%2BvxBsuefP1d%2BKJzZCFimP8vaGAAJrwRnlhbfL%2FrfrfnxTlg5gH%2F7JcZNuvQmLlKS7WT3pfy%2Fr5DF%2BWCP69%2BW95PLpWvnr5vW%2FWC9KlzcnoWe9V6y%2Feq%2FiSRVsbeSyZ3XL9dX4I%2B79%2BcizDBd9PRPv6%2FxGc1RhvLM%2FZf18l5%2FXgk0EYxnpvWL8pJWP6F%2Brpel9Fl2sXf6uFZd7l8hmlr8NaaV01sUg15n7o5asn8EhXnyKaQvuvyao1X0r9q5infRXa9On5PWDlnuXWSAAAAeGQZojiOoFfcloSxjP2I12vd%2FF6%2BM6T%2F%2F9X%2F77%2F779v1%2FWv1rtWfrF1d9%2F99q53zyiFu%2B%2Fl9ruuI5%2B11VGdJyNyMLEGQlSc%2F5Pv%2F4N%2FpC7q3%2FV%2B17uT1fm11V1cRyLTrJdV7fI%2FrJoQKFcdj7L71m9G6Ty5r%2BIk9C3r1y%2BWhRMa7%2B%2F%2B0Z9teybC2le7VfM%2BSfV9IrXP8tCv5auWWW%2FdYonvy%2FLPX0ib9z1bLv%2B1rus9dehktf6ud%2FrF34r32sX693z%2FrFJP9K3auSa90KW5V7vtXv1ahS9Ffr6%2FVuqKtfX6IxWX333JdCluOIv0W1XVr0ZJmNk0V%2FMR5%2FvXZ3Yb15fNlu4LJL9qNBSaT1K3YmWj3sg8hW4i%2Bi9J69%2Brqn%2BI%2BI7V5LWr9WlL8IrqLJpDDZQPJXVqXPX3VhrsxqdavQl%2FyFGybvOalyCNmNJNX5Pp%2BsJ6n9zGpP4RFXUFExPjuA7Y1PzEdahXFTY0UiUf3aKR4qELU4ZAl%2B%2B6zBCRgNg57YN%2Bjx5bvTqVal9aqJrymifm%2FUGEcJTRg6QQsFf7Q2yUm46Pr9heCzHqTaTB4i%2FP%2FeEuLqc%2FvYMhl0wDXp%2Fyff%2BM75%2BjtX4l%2BqQapt%2Fhs%2FD%2B6s%2BPlHyz7u%2B%2BwvpxiV4aUzL8tjMJ%2BoQJdEiUNCkx%2FhI1sUaI%2FU%2FuXDc6YS97QHaZ6%2FjlTCvwUdjO3jj6gye%2B%2FiCnynszNntOH3BLMu%2FUsNaCnGmSrzOxBDD%2B8iweMxcnouvlm9ak9FK3tXLk%2Fbs9wwO1IaNRI2PdRWq25qfL6%2Fgi2OPVQZPdPfDQtQylidfmXGyRA5f%2FcT7CPnHmiT238FpNJrPbLf3BaXEPl61XWlbOZfGtNq3r2Fy2%2BB20Ed1EShpS0Q5U%2F2dBW%2Fcl%2FUfu9H%2FaLll%2F6oQatpIYIVOJA61wYYScbszmrudsGPknr47%2Fp5fJ6cFMNjHSozL6GjZEBAdKk4r1Ctx%2BI06fR1bV2q0LCoOEnsfA7icRwUeXQstr%2Fe55fdFIn61FSnFKix40f7EwTbAC%2Fcigi%2FK%2B7IG9iyuP%2B%2BMApWhAOwtsk1xV2eqaMeMv79QSC33YZWZPf5SM79RrvfeT33XrbDB9wyzry0X9hhzc6%2FLzkEEvzerXk%2B0CC7fCXupFpu55y%2FC4x%2BY2G4lsHrsNQW7MPTNbjCvKOytSXdEHEtlmfd%2F64V8msr3Xqu9Pta669XXiKtd0m8cYxGAgxEFYKtWoPLj%2FoXy0AYeSQ7gmCFsTaiYHWPGPer%2B4V80iiDiTVJIeEJ%2F3cf3V%2FkKX6Z%2FvU9Alrmga7M5cowjNJmTEY2Qv3cnldT%2BU%2Bm9%2B5CDYvP%2FBRaMY4xieVN9NhKEbebjNN1nw9%2FbBJmwOPBm3czL9F6rWqy4j0fXaNUifBFhkg3eB67DAh8fBUk%3D&media_id=1254206535166763008&segment_index=19" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:04 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:04 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_btKxKQN4WSAhttxQnJzZMA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:04 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112426592690; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:04 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "16de19c500e60a675cde556a1e57ec28", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19933", - "x-rate-limit-reset": "1587864356", - "x-response-time": "36", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00850af00058773e", - "x-tsa-request-body-time": "102", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"aqBW0PUIyzdXmrR%2B9Or4LaSuzhU%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=UOYjhFRQ7fDQ%2FtcIB4KFwpqbg2vsEDh1AQdS%2BmBS6vTv%2FMUbOmiisTHST9hgjw2khY6g28plfQZMO%2Ba9yy9nSQ%2FnIvvI%2FJ8vvHAiIzwfemG%2BqZbjC9%2FqwrfGCXP7JDhE9qLjgwvC9PzX0%2F3wPv6FE5pvLNfQSNXjoJeVcFar7V9X4LBJaBxlvnph4Q2vGw%2BNjdmorZfy7IH2Mv%2Bbobnyl2UVKu3r1evV%2Fkum7kbr%2BCMt3sSSnEK39H%2FxF6ChXd7rSHzx0A7Tw3W8Ttoe6f1y%2FcnYXLWsEPSU62c3%2BnoK46ePDR6j9zo53vxfu7otSfrJ%2B9%2BNt7gNW9KA4jAm8YPBAtvZqjJCGVP%2FyYMKNAcbzgCPi4P04vfQI8N8f9xhMd95e2v8%2FfBqbVbK%2BsEE%2BoZ16VCNqo6zox%2F2s8z%2F%2B8%2F%2FIYNIQ3%2FxGOsvefPRKoy7VWuLLHG3XRsDf5P0J2TdK83ku%2Flq%2FrJ7aXgsJtB1ClLdGrNcNpAUA%2B9xmw6YeXiMGBswvfPuQQHglOh0SX31cEXYMBIj%2B3%2BCONkfVe3rlz%2FvJsJFnfMzy%2FKFNzBWHMXty%2BNpp3d2apMFhthlY93J88MnqlrgjG3ulDY81OG58fZFYl5Gcn93dFNoIeiyft%2FiTcc8OGX1deOLRqk477mY18WjbpeNSpDXuXu%2FZCnxr32Qx30iw338ylBXat%2Bvbvpd5hUJmCk%2BUE1vXHlN43yfjq3gmKCbJ79%2BVg9%2Bsnv%2F2%2Fb9%2Fyeal2oV7RsEc9fUaNBxnubvbqIOm9m8EBDqQr%2BoJCWpMcyeS2uI3OIHe%2BT%2BW%2Bhht3yC4JvGfbgdX6%2FBcf79K%2FxtmPMskqG0goHPnwuZsqtJP14IuTDjOXvTy7NqbJvVa5OZDWn10hbXa1Jfd%2BKNaPDXSXgnq65WN3ZZP%2FlyenL%2F360sXeh7o%2FxGeHpvL%2F9Be6czPL%2BuRQ%2F%2Bodx%2Bm93X0%2F8hIG%2Bk%2FPfDeW9ikvj7Ltf152ELO0oLNVf7o%2BJekOXXvxZOBgx9ht418KQSOO6j7PtPJ4139l7vsJbvva7XctJVxXouX5sT6P%2BiMy%2FSa4867x6Ouk8BPXq0kIq35BJff12DF14gJJt5c%2FcEd78tIiZAko3uxr1EXfe%2FUhr27v7Vih3q%2FRHIm6X0hJkiuL0rkpXfFiAhJma2v7I76gEcmf4LGjEYwZKpm0kyntYcsUuLlt%2FDBchgEQFu3H0xc%2BSd38zdUvf%2Be8paBMMWCgEHWljzy9553AFAmjxir6kqXTx%2Bf9%2FYoPoEJvripHPS21771XIE8d4oo1sJMQSVBhMkpbxiUkYx%2B9e%2Bx6bgCC5Ih0KRIkX44gyDuVvPIwEEQyuVbrvGu%2BwEm5w1d1FfOeinqybDuvFvd002d5KZTZzYAP033Iyy6tl9IIaLo4DLJIGWlb2fjfEFFaUochPr7pjT4kDQ1YHq%2FAgdTnokcjj7B1vgog6XyELf6v75oozAnQM3IjAFQ4Sm7jOIJ%2BTp16aWCwCwNSBWAJiQTAHt%2BWQcARqZ%2FisYLGC5UmXPK0rJ50EqB6RiHRjyRzFlh6tDisn6djdrLZWmZ7vKl%2Bj48zPPkjnI041LMR5NrU0cbfvG7kV%2F0aqzxXUe6f7JmY1aQIk1IVvS4PVRr8ds37fPkmr7uvVuJ5fg9GND5YrS3ShVf56jybYC6HEgGimo8zjc4t8Y8JS1ncHbw5Pnw59ePCvkDtnoCyaxOW6kNt%2BY2wKDZU7Vl0GkqsDLgNVFdFcoGqrwGdJyglOWxZCLctiPYluhnJ3ivr%2Fo7B9hv2DrMNg4OzYp77r9lHC9uGTwNbYNT2tg7cS1ZkQvNIqS71DFM6vdFAsdmNiB%2FXUOhDr6HBhLUO0HASLUkGoUEw0CwUEwYExYCgWIQXEwnCwXCISCIiCIXNdctzEmVUvJWsuq676ym5XRLrgcDorU3xfkP9U3v9MRw%2FX4t7bvoBfQ%2F4TXf85dQVJaf0SZPIub5L%2B92uwq9c%2BdvGa%2FnhffUPqBMCOrUERQWdU%2Fwfydfat1Qgl20Stuq07shRWaFQHEPfY3UAbwe1r5qsamrz5U15Ma1vg%2FExkoHt%2BLtrBcXycMqAxnKiVwcAF93iA9wtFlPtKpOte6PSRwa4K%2BF2O3IVKZ0AVfhb4e%2FySOAR%2BDjsxJhMRSbhHK8a0VoWzcQTKmzw3RI16Ufpdsjhw5z%2FGGgHABIBSYKBYKCYaCYUBYkBYiBYKBUKBULEUThIIhUJBETvWXzVdcmt7lWXSVdXVKTqkp0D4fP9Y645pttHvt5fO%2FiE9Hwa%2BfVYMwtPlH3L1XdXsx5fqTu88nfM76Cp6H0GYeuWm6yOUl%2FAsw54NIH3da6PwX8lrx8HGcTDfTsHA99vn4mjs9%2F2ya%2BGP%2Fp68ON8DuTcWqeh1M%2Bf8xecq%2FJ3CIhzgAMlNgmHkJ0yCkJsqT%2BB4gAEE8kgHNMTDSJ9Y3S3R8c6cfhPzv7pgGfub%2Fl3dm88A5%2B9StM0qKtcI%2BjFOuCb0eD2rqXmgjnTMEOkJjKZrx9IXEvdmBwAEkFJCsFAsFAstAsFAsNAqFiKFwkMRGEQqvdazdWqpzqpeSrmXUoqalXltDiWgdB%2FvfpOWz4XHD4FyoSnZi2RfCpPlrjLvLu78%2FJV%2BzFTlL9fvo8M6lB7OFH51WzdmgfsH5XaR6XBZc2MPTbv%2Fy765lcE99V1992fBmvBD6S1XJUJ1Uvopd%2FwdQ7Ozzhx5dMIc%2FpR5uzRUVx1BroIDlE4Csdw3BxoMCmpOZ2gJ5S98%2BQDdKFV61AVlAaEzwjn0ufs16gqeBhbKMK3d%2BF30docoYo5inkmoOhAVgmxhZWfHO%2BhIvCtdEp5ur8QdfNoBwARwUkEwTCwnCglCg2Mg2GgWCoWCoWEohCQRK97144yrZMrLlC81kuqC7y6uuh%2Fo%2BkRr%2FxX7%2BUzwf1D5P8GlPs%2FT%2F%2FT7x%2FWPbC69L%2F9%2FyYvptWJP8k8Ns11Fufl4YL%2FVuE13%2FY%2FnhXKahT9%2BFVlQeafD33ZzcQRUYLpInkpDy1Qn9a%2Fmu9%2BKmCgXFUNM9KOcNcq7fZSuoxOrH6NeE%2B1kFrpPB58MPVHb6LAncrZJK4muB%2Fpme0rQK7eJPzUhB71zru9rBTyj%2BnpqCWey7u00lHdRfAlRLbhCM7XOTQtwa0IjhG0L8OfKil5O2bGDgASYUkCoUCoUEzECwUEwkGwlKJCCInXPM47VMvKcc2QlLrJUcKuU4GsPc0q%2Bf5Pw17k6x0clr56Mo7aaC1bflx7ulPG6n%2B083hq9LyaaNlr1duluNf%2Frt4XzSt%2BueF91%2FOt%2Fge8TSLhboy9l1WSGZBq6HoDwv4Nb6N9tpQ8BUorzoC%2F%2BeoXMVclfXQIXjUhvI8lQzawAHfyX2X1%2BFvCL9imIr1nnf2bRng85%2B3r6e34YMzA%2BU0ny%2BBfBPp1%2Ffs8dbYEquifbCjxj4DL0fm0XuranfAmq%2FexGWDnyGraMnkO0%2FCDgAAAe9QZokCQoFfdCPERIuhC4QWv9IRuvScb%2F8333%2F33%2Brd8%2F17986xf%2F16yiqrT8sQ23iCiowJO0rsEY3Vc5Tulrn751Y6ld2tSRvdaSsTWr%2Frl%2BsVcSvfq5LqYU9r1BHz0Zy7779CN%2BQQsuMIWuRu0Jyq73Vu16W5OVXMQsvqyTWifN99WhTyWjv9L3xXXVosXP0lerVy9%2BxEvr0tV5asVa1c%2FKhndaGxUT%2B0v%2BRSg74Fr7Xpbv%2BHiVr9YqvvEd3Prd%2B%2Fjtc9etchk3rV%2FJ61GbiybCDLO8fkRtqs%2F8pJRiih2aUwrukQnCWjOerit1iryiOb0J0K0V2d9XgtKWi2EdG%2Fh%2BCauDV7O93rz19kaTfc9hCwZJzeOplVD41Z7vkRemu8fq4tsqm8H92mdhgiBDg7PiwJe9B8YcxCEnDXP5MOa3KL8xqHZ1K7pPf1wU73pO7uh4uvlBNe8Vzwv%2BCQ8%2Bbnf7EXSS%2BK4b3J4wcmfwxGJTqdq8h3KfGTP6EiwQWDHH2UsgZWWjBro0DWMxPXhqensIR2JMHDDabzlIJCRiDaMbuN9HerqMvXJ%2FXWmEjTRafCVmsnwm%2FgwjhZ0%2BgKO08phnDSG9Rx%2FFx4nsLzD0j6foZDQcQApWCBjWj1e5ZIUUTDo%2F27Y3oCgMNtfFDAe7FdFGH2X2wr9cU6UBMqfDh33f4fX4%2Brc0%2BvdY2p1FkDKLr2L4667AgGxcEPjJWRe4I86kinf3BJuM%2But2SOKwQZZr1Ywgq%2Fh%2BcYL2bh7lIN46WepLs%2BSun2A5Ew4f%2FkCZDG95B2KOICei1JmzYZ%2FgkLy%2BLzZEkE2Cgc7Q3nGclcRxcJI9313aF6yeH5UGKIZHzaC8owR%2BbdjFA1h8ai5tZIot4Omf1ORjSMBMo2RGOkTUwkcbX7DObLgBZkjAOD%2FlSnuKqsQUhi44AZvnrMH4EE87o11cn99pEM%2B%2BTQmvyEjqZizJkn8rxm%2FVXeT5%2F3kMbO%2FcPQjz2DAq0bZGZxt7fyE16X%2FCpLEQYNWELJWhlfbKlT84eKs59C1o9NOqin%2BvtWlGSFA4v%2FHz0ZGmXWtc3OKcklq379ghIeiTCR0k7pY70J71k8EgyAP9%2BOstU%2F9L2HSgET175V9q9HeUMBfID14wK5QgxdwvKMgPL4DgIytgIiKFTuTZMG%2FcRjJZd0IuTyr%2FJ8v%2BYuEDF6C%2B%2FRSFwufUTu%2B%2FjUXvUMdUy0Ia0EuVIW%2Fvy%2Fy8lUV2v2Eb788Xur7hnlGCfIvhm9T933JMnLJd%2Bivd8uT2v6CogRk%2FQpy2qBnor7cIGa%2FXuGEShf2Gbvdf0GG8vL%2BrWI5eF0IBinfNhXu%2B7qP9%2F6OjlX%2BEnl%2F1K34iOkPnLk5LuINZ6UHuz0voGBcmt3d1%2BeL%2FoOSqH1bkSL8n6%2Bk5IStAaVwkuzoMbI1B2wPtSMme9M3YFaoEg2h0hPaGnDduuSh38dvlReu1y%2FWviPibtFi5%2Ber%2FFGdl3f8NmSnwOogS%2BgMgwhpbDd%2BGCsoyE2ncfidnDPaMEP5vbqXh0rD%2BfIV9%2Fsr6f0IZ%2BWgNjc%2FfiiUUaGQaMcehW17dbhcShxpk20Kep6G9fQGlDkT17BGQWYIvvp%2Fy3dDBHL8bR%2BxmzjrR2kqFxbhxlvGAAR0W%2FNwm72ny%2Bl9B3hIYXbmDul81wJzaRUJ2vqBwVzZf%2F%2BkviOtYpObsEVVXlk8%2FJe36TuJc%2BlyQglaDrzPF7xSOzj1glvQe78PDfXa9J4LTx8EIyz99qenhOfvcyLdeYkdk%2BoP%2BEuoxvu5GaZx5CCcs4ww4id%2Fb0CgmSo2MKErA2B5w2MiiiccOPMxk%2Be78np17xr30hMtLVN2cq%2Bg25NpYugRiQg3V6ByidV79ertYtq8pPfqqDhJ8Ttz6BD0WsHV8GE0KClyiHxkVvDyJZ%2Fk%2Be9wW4Juz5H71hdcWT%2B%2B8FNay%2B94ma7K81zXrwSF41tvw3LT3HyPIh7Uv9HODb3u6yftfiQkPjl9MEvy9r%2Fqyfru95Pxkql3toVvwkO1hMz73C5jFd%2FMR1FE3bqe56J%2Fc%2F16K%2Fry97XxQpgPLlwman%2BwYb3OYzkGpfkRfqrZSGpK5v%2FDc2NEvX8GN%2F%2BTu685VYeNd9r5IRD3N35f3dUQpZfLdXC0udxt%2BXXhaOltfd4JiPfNi8H0EhaMJeJ%2B7u%2FYJCZR4JML0P6YIvDbT69wWGqG5%2FpIhWiaB0n7TW%2BW9OyxVZCrJ%2FEb04igh9ovHw8cZ8R5Px%2Fw1LPqzHJ3%2FUEyteWU137pPRhb3epmr2Iq%2B0V6uXv6FTVqe%2BWg8%2FX4g0MT5dZ6f8FnPmNRHaSLewl%2B9VCxSYljXubPj7ymmvqy1JZN5tv8El3dlcekRlE9e7%2FxHKMklF6gL6ngMD7bvnBCTHGW3OaHssNZS3yfbLai2qRSebd7iu73fxXSDaIQvxLmNsunxRT4lvRFuTyrvNe75xfd90pf7uxd3e7%2Bf6R2q1v38IyXfr28RL9b8xD2173dAk4PeFzEJPftVF3f6T%2FCRZvy4%2F90kFKak9P%2BV%2BSilBvcSwgId77vd36hkhi96%2B2Xfqsc0hB4UqYx2mPS5rwOy9PamfZM%2BI6gtEwSb3YyfddhM5uWnaG92rfrl2rXd3%2BuUVv2i13PdF8Hxm31y5cnxOT7CSr7MSIfEPgAAACe9BmiSJKgV%2FoSxXEfq3xK9iFxCr9Yv1ea1aW0XquvUqe6xeSraulyu174n9de6nT%2FqV741E1Qxffq%2F69%2BvScXYpepZV6vU%2B92gRjIT%2F19%2Bkx0fxdqz58crv11y%2FP1Y5fJ6rL9e6dW7mlq1cu1qTzCeO04r4rwzpJPYWxa0ES6jMkEM%2FveodFwk89voHhhFrfdWh%2F6qr16bVeUF6x%2F1ee69fKfkcm9k%2BybvQhvcK32fHzfTXbLumbd1DaO90isSDt3dU3r3c3rlU9S3L3V5Pu%2F%2FNrVek2a4v9WO5lVzcT2sX6v%2Bvf1fffk169NxfavVfp%2Bqv8I%2Fq10TJ6xr9TqvlrFxZMZ18N5ZhB3Tn%2B5RROKJr0XvjFgqlXvqEfBQI41jpi%2BGX8jtIE5L3Te8G1NRgnDq4dubkFuKvNtnu%2BEt3XgPlhOcgvVy0Ar3hmym8ufexTKLvEl4mpjiHyTyXUxnyeP%2BqPldzLm5OxflzRAxiJ7DhA5M0BqszEWKYuYYh9cH9QX5jVoPppXqTgGnTc2YZcvDRkpRhHwwwPqyFp332HRKBDzXjnIIcNrRvYIQ537RjUde4iPiR5dwhz%2BtFskxBMrf3k%2FMvo1Eene4lBgrBj3pt1M%2BNyPmwtl1x9scnRVsIaxewWS2NMgMb60Ahhz0OZbdwz2yVavtEoWgpVF1Qetmrup76FSMpojaRaRhvzuSei12vVaxWOJsPEdq181ernP18JVOyFDZpu7usbeS%2F26QIJJwx4XA8EflG%2BL%2FRdlrgV%2BFl44PmkXH%2FWF6a%2FhqYK%2FaEAUuZfeAgbP8ZPfufxLIF43V3DEZEBcvBQF8P%2FqzQ%2F8E%2F42mdPzKa4CseIp5yb2RE3%2F4s5WMl%2BIcfZLsbrQlQ3d6jBC%2Bo80TBt5JUIltA0goiE%2FOMIuao8sZ8L0ZWiAtt4wT8Fs4fldZPp93fmb3F23vtk%2FcJbv0xoIT8QWjcb0wm147CVbqCXt4CUNTJhej0oT5KSU4pSw7R4dtkO5BqHEzPVXbyNKZDzuo54eeCWqJ77XxJBh%2BEl4JtVcQofFKu7nzKP0GliFsgwj5F%2Bz1YauTXGz9hoXCJisQHR9%2FMqRspXI2M5jYZi8SdUwQbAkK8w8rdQvWtm6yHuXFSYvdL%2B7qNIHb9XoJhz1QCtp0z7zbfdTkcbeSJOo%2B57CxY6DQTfPJjL1GKfyhAFBF219h0z73drP43Uqzw%2F2xLv6w8RPXHHUQcHLthxpMiThDUvIgE%2FVOvXV4eKS2SCYQ4ZOuqqK%2BKW6v9fQVMGZwXQiZkws2%2Bdp9%2Bo%2Bq3ypkaNU1MZFdsDSR7jO%2Fgvuj5iV0x9I9%2FcNVjbU9NLDLU%2F94ioVvFHlmkGMngNpm4036CAg%2B%2Bne%2Fouv1lVE479XN%2Brlar369fq3DXUESd%2BVbehoobEBViJpSxA4F8ncxw2izGEtNCHmf1tuNKCUdj%2B6xHjZy3ovze%2F0cQ9Z06LkwC76lLeJ%2FnG5o9zkUrFIdydJZMYhPjFtgOsNKf%2FQSkHcGwe34onsh2HKdIMHpUEA9Rs8dROcW%2Buhl9BfS25jBn8UV5MszvuECapu8g36qvxda93pqgS93XbPt%2B4Jissxc6je4l9%2FVX5ovkv0Xw7P4ZI3lhnDnYQceWnH3lbMQilwH2g3qhYjX52wkyZ%2F6vd4rrjvH1d0RJd4d13%2BjdtqwvlNkkrLobEJAPwWLgzCQKrGjLQKrw8VWQWiy0dInqvjiM1NZx2WbIVvq5KsKPdf9YboB2x8TKrhYPrxN%2F5sMkBAdj3Z34LlI4eFgv3O56%2F4by%2BwRakRMiy9oRH8quq%2FUx7285tClX%2BCHmUMH2tbBUakkqccQbWIH7p64z1OVCihstRe7vf4zu43l92PKwJcftew9bxuwEams1BWRnDnbILblLW6Xwh5xkqKSyQqtAn2Son2AsfL6S7mz%2Fk%2FP%2Bo%2BTtCctym91eT7%2FkIaG5MZk9uvCxuOY25EuH1fVHLtq0GSjtLtNrRuGGDbosTAx%2BMwXw1HhEthj4ID2PiQz%2FotBwykc%2FmKG4vG8xVAgLgjJ9rE%2F7hEiWmtFbtrfeG4ebjVjD18tzqKXxhBSFTNWg5PGj%2FCR0z81O95Pfe8MlP91SH%2B%2F%2BxRWruzSKJvP7BAR8Jc48xx8qT3QNcenEs67%2Fh0R5e%2F%2F4bdk4ET70mZavn%2FL9H9EF3f6HTGgU0ts0202sw%2Bkp3%2FnPY%2FhpOpzY7N0SqpLTrxuT6%2FoE5c%2FZnz6yfGl5CCt%2FercPaQngdkrAZBhXghmpMZpjIKXj4k9bJFKB1Q%2BvjcCj495TaoUtBA%2Byl%2FB3YG6XF3UAo3Cto%2FtNqvr6E%2BMJmxrIjm8Vyelr4MCZMkSiXBXqYaqMiA8MW4XiiyiBlUyqZu%2FLfeqNoIxuXxhE79beOidYCvZ7D0GWQrPe77JBuo8Uc58%2F4RJl7Z6NeD32NmP2vjokKn8Almmi1%2BUsgxCC4B4HaHEqPEfP0%2Bv42yYtWxChQR6c5qfLAhPeIOC6j9AtpR9k8mS5ZBHdpM9D0fk86WRxBTR3GZXoq7RxHAGPskkrs5WZvPwLleoYkIJR%2FHyH9f8M5rJ%2FfWLG5DRMw0NU9rKXCwr4mru%2B%2FXv37yfPaWCI1mkLTNXQbj%2FJJ6vl4eRLPye6a6ZI8Jce9t4iXL88%2BLxV9K8OsXsvfle%2B70%2BSwzUQv6FufhA3M%2Fbt4Rs9p650wQGwSDvZIZZYyZtmUx18bMV%2B7RRhhrVTm5YScbkZq940q1%2BePJ5yVO4c0cG2WK7Zd%2BlpS0bcWlqTJ4FMYQ%2BOLDZ0FUIWljKin8zFsb2KQQ978fJd%2BuEfXCI4muJTBIJd3cy%2Bmr1aae7RGe4LZIa5xgv23cEWhv1k8W%2FpWFXhwpmN18ZJWbNs%2F95cayTgll6XkyUvcERBLnKn4bidDGPF822EZP4JxOjd3uxufgiJbu52K3nuWiXJ6Wm1QRM7aitk0gSPl5vff4eyrTLBVx2MDayvZgStcvklbynCfKipPfeS04bbqT%2FbTi8pnS5P7HXFCC93l9kKYjrX%2BtmLILafxxwozvtUnWTfSGvP4JRBBomMFmoz206mmz%2FCBT5Q9mjXNRbu3e8mp6VfjRocl%2BQhZ3ryebLVUmETYvyxF93ua6O7f1BUTHd5mOoey3lrfGQ5G%2BkNY%2BbvocxpwHd%2BfrE81oDV8t%2Fgo8Fblt3ux45BuW93%2Fm1qT95aFQSFx32%2Bu%2FL8Su0MuK3dy4K7refL1mqUjv5MxNtcskEaCLknr1evdrFerIq%2F3We%2F3xx938011PfwxS1a2a%2FQjJypNPPdYhZfNX1y9sQYvuzd73OdLHNQ1%2BtSsQS1b0h3162CTu%2BfTvxaH2777Vkkq13xvcROr%2FuGbyPrlXpeJp%2FE8hPf69%2BxUl9whJa2woCQLioGOug7hX9uN8gSr5%2FEvgAAB8NBmiUJSgV9zehLfEd%2F%2F9%2F998v%2FZLv7%2F%2F77%2FVjtZf%2F%2FL0f0nav%2F%2F30t%2BsvRler7%2BJr%2Bia5VqqJWr9a%2BVe8IgvMKLheFX0VYMRI0Egf4X1Wq%2BJvG02zH06pc%2BzHHLbqR%2FuznqO9kqHfu2CPg8pE5kqfwQUNy8dVq9WJB37tcu8JE19vbJ61IKJ7r1rmJq%2B1rw1MSG3tfDkLiOGk8asi2jylo1syan34745qny%2BJCEKAkIGCB7jmA9DqJK%2Ba5acchl9V6Uvl8kkESBQUKfjI8kI%2F5vt2vIwqDQkWgBgd04HOOfFili58FhRssZYwqDh%2BYA5t91Hvh9xPuXRPhBIxAhGriD6cHT6C7sFwVPXJQ%2B%2FyhMEdFHXopM2rtC4vtW%2BXwlr1vQ7yq1ir1r5r9Xrl6J6bk%2Flq%2B7izmW2D7Rm6LQlNPNV3IvceCIRy%2F2gMbCm7sVisVisVj%2Fqdx2QsfOiKyJsKFLjlt3dxWK3uKxW7jjH%2BSCkrGXRRltbxRisS4WzycELxcCSvmW86Ewnfy1RK5d4S5e%2Fb%2Fq57q%2Fat3NfddL0l%2FrhX%2BxPk03%2B2EsV%2FHIK9rvQjv17bWj97d%2BrPpcuVe5%2B79e%2FX365W%2BrVpN5L%2FVz3%2FX5U69tSUYEMHVwsAmSKM06jii9XHM1LtVtDsefTiY8kOPIKmKl%2Fb8B1%2FMo%2BSoEqQT6qRfcSvV6nBLfXVy%2BvVa9%2BrVdetdr3en9qr1%2FgmEUO5X0En7L%2Byq11o%2Fdr0916t5fExnq9euV%2BQZl7%2FMLdHf4el1gqlUfloFkhKQcuHXF%2FPDHOcB7zB7wFb%2BRLWicfxbTk%2BsRfGErU2mozuYmO5SHV0rnDrCEe86LuzxRgF3qfVi3frsUX6E93PSLFVzevT%2BHOW2S8e%2F964snHDmlmRfDPGiJxUHLy19F%2FvxQjFZ%2FP5A18Eg290g%2FV8vm%2BogQcxgS34%2FHROt6jL9vxmIpXw3%2FJQUOxHD4cEbMUubvq%2FRe5KqWrxS1a9%2BvrlVrL%2BG%2BDXrB%2BzBPwflMO4DkzF0vgTS4PiYSE4SuKGJHBs0%2F9x0t6Fo35zwRgbphf%2BFu73evpjNzT%2BCKQkolfvwqRAhtfo8uFIKljlh%2Fy7bW%2Fwhe%2BQ0hHCxd%2Fy72%2FnKsaIOP%2FrJfx%2FOQUsxF6HDKmVj%2F%2F8nqvX6vJcjcEAUJd34FgU2CcvggEeFxGuCILCQkKrG4%2Bp%2F8F0RFAMLAHx2WPWT%2FBILfev1gl8xHr%2BCMp17%2Br2aN1f6t%2BCooWWgXs%2BUVBJGp%2Bgi5fXqHLU2KvtjjywG5aXxuu68KPvtXnwh6XiE8Eojoj8ogLVzsP2UbENuLMBvwRC3a8q8wptTcv%2B97%2FBFVjk2X5C8aal8ZrWVVVHhm1xaX3WpIL5MOar%2BJXpeL4Cv4Cv%2BLyeGPwigj%2BzKTN%2BC8u74wD3rjxPj9eCjuO%2BVjYMHxD4%3D&media_id=1254206535166763008&segment_index=20" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:04 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:04 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_RubdtmVo7xLllW0nuPhsag==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:04 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112477907001; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:04 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "c65b1cbc4ac20682c2d03905d057500c", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19932", - "x-rate-limit-reset": "1587864356", - "x-response-time": "31", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00e2987d00c48b84", - "x-tsa-request-body-time": "64", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"Z0H0fP3xSb7nRUMGCmS3pe8r3Zo%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=O5e2yDrPVtFMZ%2FqPrO%2BTJpO%2BvBaWVmbvWVi5%2FRIPzExpBHeFCZi4P8Fl8tKC7f%2FyxnT%2F1fL%2BT6sv8V%2FoveDHLlr3zX6Lqbw4M5bXMmWv%2FKWwMZDE6yWhPV4kzz52RF9J%2BCIZm3Yy%2BFvLho4rbKxrMGBQEoS%2FXnOsuziA%2F8XYMbON8XBC3U18orIsCRs3b%2FmFxksfL%2F9uyuiuwqEfiprripPfLn6K5%2BvflIfO%2Ffe2vMSfP4ITu7oW5%2BF9AUeVtzFH9%2BWMcu7Bbkk1kX%2BvUN33r43o2G%2FlPX3uzJ4oQhsOAG1jhIWtu%2BCmTLF9LNP8ooKGtbZVDqyrmHtC8QcLAzUPqB90gUlFrchxk7WmvpDLoi2T0gLNtesyQn938JG%2Bs74JqeifpL%2B8QJCAQK3ARf7ATC1F5f9TY01K3pYzgd87CEV7fH4777e1gWs%2Bv4I4c5%2FsV8bZiu%2BvXKvNZmGD%2FXvw2XUh2DDrFEKuNnlA3Efnr95IZZQB975r0%2FwT7G7BpmtlA7Kv8EnNr1%2Bcizszv%2FaGuVykGQFPrHUyZUca6svWLGGScgsjvD2lrxtRAZ0kN%2FsrzNPaP1mXl9UouJGe7LatqKf%2Be2zAV0nfaf9xWhjYwqqqHKpqbUambQpvzJHNR1ZR0QMqqi9oXFys7WdJWq%2BxmCoiROEY22FHTENmW4sWvAY08VTxW%2FIi935Fr%2Fe50Yt6Xcp9o4xXdaNcqLh%2BsHfcnnFKMjB3KvvwRlkh9%2BryeQiG%2Bm%2BJEu%2Fe%2FzElv7r30YzTVHL9J%2BC%2BhXuuA%2FpDuS%2BPmsdXo4iwZONUaLLF9BnGZfR%2FxBHULNWy2YO2Pd7lj5ai0FmXTlwa0HbH0vv8feWprcuBr8u9%2BOgh3epqk5pJNnL%2BJEIkQ7xxet8ICcS%2FWqqLi9e4QxzvqLtRdfYsRw48J4ot1vfoe0%2Fq1%2Bcy%2FCRZUP0L6t%2BsUvnr8qkYGxrwUWOxtZMyp%2BvqINpNaMda16i5CT4%2F1XraURRb7nytrNH2gVX9%2FwR%2BBinLb%2BpqOTPTKXmzsWQj71wmo%2BfC33d3Pl8voTxaGipMZnm0%2By%2BoQFvMECZe13tP36CN3J6Cec7WLvtZX6EZS%2BevuCyJBkoa%2BHP1EDbvvfmod2X1Xpy5qtE3qiGEXfXIusUTN4DS06N36CO7FPdzL4iX1tEXKvDEly5avyeJYSNR%2B0EQgIBIEEB7I%2F3IFQ0QfFxF%2BlwbfgdWx9kJYC0yU4lpwAAACsdBmiWJagVycShL%2F%2FS3Ojlrvvonurq1erXV3drXffax%2B%2B1rxFX%2FXf%2Fq%2BX9b9q1euqor9a%2BMrnWpbu%2BHznHSVUwI6%2BeTbtjcCqVgQleze%2F%2FAi9YFkoLgahwJOKxxmDt0sAc4cd7g91vDzxvaNmXIIueMLbvU80DE5UVH8ICU5ggSGOkO%2FyX0a%2BShz9hsXiHIsgCPINkD8JbXVE99osXL47IEuvttoURzq2OUvevXL9XO1JWKUv%2BvbsCAHgRCuFBay3ggCx4KrlpVjOzm8E6PsnVsbXFk%2BsUOEIbBW6vH6x3HMDbKFlanMiS1JLWoFk4CZahqMUNoG43womwMfzLqNWT9MOEDhwo0EHHol9ajkRlUsMqlm3jKpYZKlgboRlQYtJfNqJE%2FHCJJMHJ5iHjeb5jzNtPxFXlKTBZhuYHiQPehGPyJiQGNLB2rE4ytNkvhMGh0CpA8Eh%2BMZ2raEaeXRonR4Dy2CePxjv1PJ%2F9Y3%2FgRGHooBs4PWDdj3txYO8DgAEKEAwAMCg3qf3iHTnclKYZDhwwXI5PENGxAJIgLzzhgD5pk8cnHRxmnJKVVW%2FRaqde%2FX52pE%2FVy%2FXKrvpW5Yp0JtVyoQcWElWsxlHQh053TT%2BcgaERyPwWhyoY%2F2Te8YcNnChSwYoywYoxRiHBRljOSJXfLGKO0ImgzlmnESXquuNgfyxXUHulLmwNXDmVNGBRLwzd9QmGw5l%2FEcYhMv73%2FZa1wOByF66SS1i7r1cR3y7U9J65V69ZPz%2Flur7XXfeudQTjuJsy998vwX8DDD3gmIQSfAdefzkVIcl9obl9WhOq9a%2FV0nq%2F0vXfL5a1dxHrF3V1f0MCGVcAw2YYIxny1V8lfq%2BNx7XT82MKisYMhZH4G4%2BCEZ4L01KbgyQDtOTX866ynP5C67aietXLr%2FjuDYS6Sr%2BJQVqr6I7W1zr1c1er%2Fr13%2BvVcl91KjRfo8q3Yi9D7ZiMWf7Q%2F1WvSevUT61%2Br5V6%2BWT16T1qr%2FVOiT%2FlMrP%2BEPASlDuycbLlxef%2BkbPgjJlwuGWy%2BruozDtJ3KctG7KbNhnc%2FuebyVIZPiaMZa3d6geKpUwXf5EriPQllerx61zEVEww0i%2FB%2BXrhh7J9%2FuGisz35WxmWY5H%2B8n46%2F7kEI4Yx5mfEXEj5w%2BGr3W52Vqdhgyei5dre5uW1afAgxXmypc6wNImGw4KvAPnyrxzuN98ExdVEHuDAf9%2BHKHjgAGWdK21b%2FiqZIiQGQcC4QIV%2BWa4qPL%2FfgjnYRbq8EgkjO7uzE2Yzd%2BH6OHJPqbkmxBjtMGqxsy%2F%2BevpOiQ5P7dcWR3qzuIWNhviFhVzUb%2F4g7s%2BPPn%2FCtcTp66npIFh%2BIv5btXPVZV69vwoHAWXd97qp%2F5byIJBxiHf4HIIFEYWr8GQQxCi9aCQPgmFD6rU1Bjri4qUbzgY%2BzoP3g%2BhWIAAIYHAACHBTFRgjwuBhNgXpJevGqIgd%2FV%2F%2BheteoXpL4xhbyCC6xojZN0ig4jbl%2FXcxLZ8%2BoLyjI%2BT%2Fzd71GQaCYYJ3Cn69tGjv0JcfBUZ0r1VLvbb9r5GV5u8x%2FXuxBAwkJ%2BFRXB7EThY3HLx91NDPxFmKrtb1v%2FnxSmhl9%2F9orpfXv%2Fe%2Bf9ZXZMS51Y8LCDbvu9YG8Ve%2FBeI8BRhr8FJBeskYeRUyBosMeuYARhaTPwgUohhCyWCjW1valD253UDJ%2FBPjK3HyWiS6FE93uCP0CLBbDuhcX5jS4DfCP4RIT8tEfj1J9%2Fm25v8OFl%2Bqlp%2F82k5c3vX%2FMWtL4LTVWqe%2B9cENa8v1dN98qL1jsv7oiqfi%2FCgbrxQq9jVPvXHFQe4SyE80%2BZiZj5ePDB6rwVUVPPHFd98Swpcv%2Fr6hXmxYte%2BMnqr39AiyqXLeX%2Fho83lXaxFe%2B7tEjeuybpfDhBtBq0BzTX6KMUqwuzHLQtEmXQoWQShGYtz%2B96P8L8bpqRIfX4%2Bv%2BEoEn4faWDFjUfGYA%2F8P8ZrvhxqEZF2OJAv2KnUOsDfJ69evuvTfxTo%2FbLiSE3cnkwGM4mLqfBEIe%2FX4KC56oEsPbu%2B%2Bw5m91%2BHb6%2Ff4b4ZiCOguGJxY%2F7MUdA3w%2BxIdLvtrD5HtuZjP40g1VFwIVUWMYKpqi%2BCOEZyeP25VxQIhTvVit4k98LLwRHbJtKgHAeovr679fUYbw3TGf6HhMxRggb%2BxuZC%2FhcaTL48x6%2BjGIB5f71BBG5OE%2Fle%2B7j9ChZPEv%2Burgl1zd1E5P3%2FRe6Ve8JCTY%2FK6vJ6%2FuTlzWvViBEap2eOAhP5PnjX4I6ze%2F0E%2BingPic3hgOrVHg11Y%2BzpHpN4JHk%2FIN%2Ff796Lgls6D48BsEr%2Fpa77ve1gsICN%2Bm72TZFBTKTmGM4fmx2ML6OtchOSsv7J4SnXqAHLTF3Y%2B6iMlXv2OChgFF0wDkiNY7GgFvsX1dl6LjCTheDxYWBkoTGzAO8JQzS%2BDFGUv2dokgzmsTBfbPAY7nCXvviOxO%2FrO%2BLX0vIjoXU9qPXq6YoYfEcSJ3QI1pZetZImWfj80%2BVj6hs9z6Hk4Gt1NtJaN0nSAzGnFy%2F%2FILykbsDDt%2FHdOmCMb3P3e2sVf4%2F2vcfX%2FovXfvfoR6vC%2FhlfwtMDMoZVm6NP5f7XGTMg1jHQfJ7JA3fyHXUDISU1cggov6%2BHC3jovHj5Vx3%2F4KZ2TKycMYvyWOdntv9WKTZf5OhRkhy4VjG6e994JBr3wKpfVXx5jXZWO98KsJOf7CRjY3mJxswBB7DMw9Wy7%2F9caLStcYa1FxdcXj4AZ59%2BmM5ppZKwHjCCzY78v%2BuhvWRqNuzQ%2BWULXeyutWGtM%2FbIhvLL7dM21xjYwqoZvkx6fH7rSCFa%2FHKLXl%2BKkpRlViP1VDkM9BceLi9%2FQUlYCR4GNEf%2FQsBj7JwEeicd%2BWj5%2Fc%2FrZd%2Fy9%2BKXl3aFv3cP%2Fr0nozC%2FbCMfGT%2Bc0Q3gSlymcKX%2B6UF9%2Bb0xgCA2vsR1A6KHr8LQ1A30LL2O0Vx8iswwad2pSwTb3YgPMvXn3r14Lrvbkzy16ghJyTZ3%2BKE5pb79ec9gSTaX%2FhEVoMggLC8aInSWZQeTPiox%2BdfTlx%2FEvRgD92POrTZ8EvYIIRKwZVpHCpw4lmSh09IQYVTSJijLd1nnU%2BCvmwVQ2yZfFoc9tz8Id3dQtVo2hWMeZ5fsaJkihhRvuduDtjpSsLav0KGHP3qiXC0L39mLLzzzvezFXJEBCz3lYn2p3rfshhA0ZSUT7%2Bhvsditj9Zfr3atLd%2BFSSsWbZqffOhaMG18R67cvp0%2BTTkZ%2BvZf0nr8ExaJ5%2Fe78FGw3RJlwZ6rL9Gg33kws43J%2BJfi4M1Pz573H4iEY%2BMHeifbiKAay7F%2BeIJkClI7wYTiHZL%2Bu5qv%2FETULnntA5ff%2Fyvys27%2B2CMujHu75RBlXvC7lWj4%2FTvxDkbyvy%2FF5ziiu1WvooQJux58q1S%2BgiVK9WltFi74lS1arr9cqtGdXrWX%2Bnw3cua7R8%2BX6%2Fe6VE%2BK%2FJceufu6TR7%2FUhVui67V5PMKvf4Q93cBVnYf0Zmj%2FwTESNTtQaZlFl8ly1HeWmTeN5ujeqhu5iN1%2FTFuvDxgQbuB6GvGooh5SAGo9yHAFcARCtr%2BJeS79DX79Vg8%2BSpFZJ5b67RGv0WoryX3rwfd%2BSCgLbgfGuNAw4wqBgWjLWESglHDd3hvxZnaHfPHAAguAcAAhQqrB5M%2BkzjbLv8AEmFJAqFAqFBGFAsNAwFgwFjoFioFQsFRkMQmERKszKq3HiKRJe7qSsvI1KLlj8g9f0X0Oq%2BffwPrW3VHfd%2Biu1z9wSrR%2BOak%2Bs%2Bq4gR2v0wHTIGEtfPhL1dGxTT6Ssrr%2Be9awAzML%2FSswNvyT9cCB82EDPAjN0aJmWwelyBYIsBLQtTiQgFg9l90EE%2FOdiS4IP8nybVmmq3LVufbtxjz7rvt0gh3JcITtXfgixu8kxmI119d3%2BeB2wrz3zlPBfDl9ff2xZdVmk4MmND1ukFTXoIstrSnJSQtXv1qzVvfjo9FqRThvkysvn%2BgHAASQUkCYUIykCw4Cw0CwVCwlCwlCgSCISCIzCbnXPKZbaWKiKkJzWrgTgeD%2FD%2BQ%2Fpv3%2FZR3eF1PHVU3ZOlUH7o3fz7KdePuan46dE5efvP3cHf5rhjXclz5z%2BmpLUNEqBR1oRL5%2FJVNuvMIKnjO8ZTCLr%2BG4Ukd55MqBrqF6wCarC3H0fLxsBCY%2BLGjNKFNYx5xMTAlRIlNens4ciHOBhQjuSh4c4Sk71KLbJpuFOCBIABGYarlCPPgfXQtVHdss3MiOGOA6k3rr9q3V9CMgg8bRrwURiUlDtaCKmWzO5XdgDgAEaFJQoFhoNhqFiwFhoRgoJRIFgqIhGEhCJ4VeLrmSq1laZLqklNcouKk4Dw18O5tJ8tK%2FTdNzdfrlvXyV6h%2F9TDpZZ%2FGFXPM3Ojfsubn9nxOHg0eP4mldNvdLcJaKZHM%2FD4ev%2F4cyE8j%2FEfRoeTkNhPa0%2B66J07xNjnkbFyQ%2Fp1KyPkX2K0xzPp7dDbKeFV073OJ7oCL8%2Bz8Lie2ura3wf1rXvMfHS%2BOklgONM1XhFMABeA38unlD3w6u56Cl%2Bi%2FKFlW%2FkUFtWhRmYSF0o0NevsYX2X3ASp%2Bni%2BszVIWnbmgd3b2%2F0A4ABGhSQTBQTDQTBUKBYqBYaBUKFYShYKhEJBEr1rfD1dBWXlou95pk1zIupDoaW3jZVoHXCak66eXwP6htlqleh9fB%2FM6g%2BGWfl8j715LVtPwqb3Bdp%2F9PqHMeeQdiR0Kapp5x7kngnu%2B4T4pnJHZ8HN1uxn983bRsIxzXYbC9MI1zn1lcPOcS5%2FstXiPPk9fCihCoWDWymT8qgJCCQkmgKV3pnbjvtqNfPxx9wq6IMPnwGaANA3IXsIc%2Bx8YSupk90SslE2sxohG87WrhXJT6ziumhpvpJSdofxVBwASAUlCwkCoUCxECyEEwkQwkC4RM5r25bZxtVSZwqpKXMy93JrCSB8V1W8%2FBdXpL2aa7Nm8es%2BhPolwajb1zba7qk8vqLpVv7kv9PCd6u3yo3AbZP9P8%2BMDvkX5ZbCWz0tRDIgL1WaWx1Eg%2F26JOJ9P6m2jLPHpf6BxY2IvVer5YsyxwX5FrdCWutFY6Z%2BGZ5x%2F7N%2Fx8v5H%2Bb%2FvBeyGdDGeXa4qDMCfN4qALcCoCPP7XkFUQBbUxHy31bZi6BgtD0lYQM4o7RtKtsW2X1YVrxSvad6bopTdhbXH2X9%2F14A4ABJhSYRhYKBUSBYKCYqBYKBYKCYKCULDcKBYRhYJCEJBETC9by%2BPfVYvJV5apcbm7lyoSwfHm%2F8bjPxt1PV%2BKt0fl%2F%2Fr%2BjMdmRUt1r5tPK%2FvzpTRdT%2Bm%2FrnhGE2cfV9G%2FLU1ahCX4Puf33%2F78m3n5PaKjYPKneFa%2F3vt%2BiE%2F3vKOl9r0JZua44HAQgmE7Q38SMURVSGEO%2BBAEdEiujYPBQ6Y3dxnlmjg6P9zYL%2FM%2BRFOu2sSBmUrKFzFV5SW8WBdiAXrhASmvonkNflDeCaERR7pSVBNCQWy1imhQc%2BG7kyh1leXbkT2KJRlxQli%2FYs%2B2%2BYOABIBSYKCIKBYKDUKCYyBYKhQTBQKhQahYbhUImeruhrdYpN3YRJlXs4XkjgJr%2BVan%2Fe4bR%2FSaI2F6%2FpP9%2FcvqJcOw8h33FxH%2F6z%2BoeAW%2BEUy3ptqfi%2F%2BFye6canZ6ehex6l5lx%2FjUf7brgGqKz1hSNY2e%2B06qV01bZO%2FKL1u0R%2FkeMB%2Fhr2%2BbvSdnLmuWBm6cZUxHWi%2Blz%2BX%2FEwmJUWQbbqtQYizKtphzuKlTOtbdttI3qxVEhZhoufVsKnMGHAWpOf767awiC9HdHLoJx6woytjd0JoNrPFfAqdqaMIOAAAAKzkGaJgmKBXL0hNsR161JRPf9%2BspvXq9cv1y7WKrVju51udor%2FMrz3JdVXubwR77V44MBwVzWuXUsVRb8gKBOM5fGVr0KDffAuMPxmK3cBP%2BC84cFVFZiCvEJnhbG8CGLDGXAaZpG9ywLh8SFqi2BpXUfEndhBstK5t%2BBJFgjpGaHiAzgNAFYpcnt%2F3aFv01WsXz4SxXk%2F0f%2BsV%2BvV6vJfx36skZQeBYYY8rD7H33DIwk%2FOBZQ8Rbt5PwUMRImUFnj8otisuPb6Xb9k9BA5ZBBwWQ8n1qpWcVivFbxHTJ%2BsqNOGoIOSYDHvGCXUduBhdJkjS12qRi0c75P4nBcYDAUKTWOMrojUuiODjpeH%2BeSMhSCiHh9PpfyszrDCAkEG2k9a17W0ryXvm7iiHBvMDLQFTvED%2B0JD5oRv%2FzY6l2vg%2FyDgkAYhjmhazAjxDCT38Gw6rkuTpD%2Bmnr0R%2FpXrYiSZKWYJftBoU4r1EzJjP8eo%2ByAWBmbQMeXxmWWV%2FhW7vd7sPpE3rCQsaLDxndx2IbFeK0MmY7Ijbn2Oy78zrqFTquykCByYHI%2Bld8DnHnIvjKl9q38OMKSxs3lmX1Fd9agw8bfGCxxYZaWGzOs8esE2FjyTwiG5zGe%2BX0d%2B66Vjr%2FWP%2Br1S1cR9arKZ7SgnGXiu99n4I73u8R11BI%2Bq6FjjRRAdApkbfCN9L%2BXuTlu%2Bpev17l%2FViI%2F4zvf9F9%2F1y7Xv1f0wVBAOPEQoc1RUnSCj62MN2WjgNAwXg0CNgQH45ohAZas2ooj8Vs3vQvYEfi09%2BLwKs%2Fb6dKgBkPUrTx%2F7vZbLvqnv4GtBPXnH%2B6vUML3XqyoXqda7kHb92r%2FNd%2FrUnrXdetVdF%2FepNoQQuOCEoyZc%2ByDrbTMHX6ZzYVA2v0Pf9av1qrxXUKrB%2BtdzDlt3fr3c7lJCgS4h5cJIsAZ75fcdPH92r6DdykHhpCGKA%2F1D8r8AITrp5X1tZa7PSwGOfkc72D%2FKCjzZg6sHskXa9QWESJsrEbjOrwK%2BnH8bLujcboiApQVHbTxfgiy%2BhkVX%2BuXcvrFN6vXr%2Bn6gnJu%2FNFhX4Y5TqK7pr80JX9fcg59%2FwQhMg9fFufBFGROf78KiF26U01cdNH%2F5LPf3EeE27t4WZPjYTLu7VNBcbGc7DCNjMhPkuPFMLNjSDE%2B33WBdCOJoHC4txUZCZbDRzJO%2Ffq0XXf6tEer%2Frl8WYu5crwFCCIXy4IcxDj196xUCCekgeTApW8HsCfDAqr6lwGPLZUv8OqKXwNPAncFvNCBILQCNJqlBSvd9Zf%2FUVmmjiDEm3TxIPhlH5aQl4RsJGn1cLLod2ER%2BOfyZcJVBY2F3W3QzANPw8HxNfjgwNmJYfIt33t%2BcMB1%2BFjn%2BOexXy%2BPo90PwSab0vYc2TMIyycFF%2BUYSmqthAmX1Ywf8bTLGTRAb3zR9M6%2Bn3F5sibG7fwxvHknWsnDFfxDTL%2B%2FjintArxyX8aFt9wS3k4at6jLdDM3YJCU5P0toqS%2FXVcqsq7fgKj4Cm72wGoggIe%2FSV6rL4BFN1mJVfm18SC%2FwSD2HRnzWaq%2F1g%2Bdj4oGJA0e4wyQ0hSOcY76db5QkNbHAevjAI%2FUrh3lwoK8GYCGtJBeyNbzPY4O5lX9r4UIwix1ccZSgbTVDjurGE3cv3KbRNGe%2B6IR3vmwRC3vy9xRnVUpZINKkBsYoqVMMljb6nov9ukGr8a18kxVJ%2FiDVo0z9ny%2F1WCHWcVFs3p4VKjyzsUkJtEDLdKH0ZlwHDf%2Fh6XHoMv2ytKbh1X2DDakf7JlItYHIRn9H5P1c7qW8JmXt4lZibvWdgaxtPnivwoYNVioYY%2B%2FQw5xuMYQJE%2FHC8Pi3TX2NK8IMCbeAev71l7Gp%2FkJv1v9UUZGVBCXflXtHgjk2gHYSfJK5eu8UW97TaWSMRba%2Fd361%2FcpTfy%2F75dJ%2BXJ8R1rhu%2BMgQFfzaNzSL4M0TqWaCX3DNYcaZS0OPITjJ%2F7q5rlwj%2BXr7%2BNpa2LFO%2FLDufZxu9%2BUQ9vXWGY2ITz9fIGh0T7U85ZPrJ%2Bf4V5Yh7UhndWmalLpJ%2F%2B55V%2FIV9%2Fm1mYl%2F9Q1KSGmrB0GpjI5L%2F%2FDxlTWhbBDpEfjWMrEQsG6xsczH3BZC0Yu0ekv%2FqGd8X1mGiBgLCH9q4vzLtr%2FhKNQB4gxYwtH%2Fgr5IeeVgYZS8iNo1d8Gd3J61%2Bj1X%2BI%2BKa9waPfkJBL0z4990UyTAz49iTyqXUEhXsI6TD65S8MRJmvQnP%2BGhGbpr9A1GRn%2BTMx6ORH%2BYNGieUlrN%2Fk%2BAohHwudS2zh4RYn5faD18hldDyor%2Fiua2EQYPf5rA8PJm%2BLFWWAX6T75eaVy%2Fl%2FtXBCLj5C76vidC%2B6xWpdLuQ%2FN90vxAjC58fyOG5lXX2%2BldF%2F7wSSiBjJj1%2BQ8uPrzWb2vuw2x%2F34kEdZGb%2FYXIH3%2FabtzqasEgos%2FcrQMIeRBDd0vjQ6PX4ZSy%2FKM%2FCBMuV7L46CI8%2BWrhHRsYAe81pqz0ewO6WsSP9ZxzQwQBO0p1tMAzuAxtHLFKNohOytKqVr21JalPVkR6vIJcZzem911Rd7%2Ft8CzYWvvZ%2FE3paa4Kq710xwfPmGQFRF4on%2Bq8FFViCopkqb%2Fr3HzHIDK6g00pEWlJowRD34U105hYW4BErTwN%2FmFYLXxKNHrj8MbV6Fi3ePtdTVf1yku7m1q2RV15p4Hz%2BEKKcaLikfBcIDA4xyM8hj8EWmGk1N4d3ZdWeX9rzlzn2GSstX4ITvfnUvUIjowFFzYFUBwy3W%2FzU%2FMxL65LjiDMst8eYBLJ5l2QrMirbRbczjICMrHuHyD%2B1zji%2FyDRl2NMwvLXsrCRvBSanj0TWTQRg%2B%2Fp4RnqNKqutjJgVlozpJqFTlMutJyta2sZcJwNxD9PDK%2BT1i3HkzKm3zwieazu3DS734R78JyXtbwRCCk2TRBd30%2Fp8EYvcuaq1eW5LrwUGsDJCJqlirwSFfF21eCTjQ0G8wL8Xd955fiKr4dyOpJ%2BP%2FtfMbGpr%2BQXCJhVz%2BzEmxYC7YIu06cy%2F3qCc3OXHwgY%2FJDpIG%2B9YkFkwu%2Bh5L47EDcctrvct5cSI4OjhZlsuRx9ehBK14uKcl1n0CWLmzSaLZMHrO8TCmXBJofx3dhanWGr6jx3P3uCzuXTUF82FqbJjmX5BI7xhWsXibDTTMkV9%2BUgwol7%2BK2ga%2BV1TBgpTDJfX0EeIcysrJNXD0lil%2BI%2FCIrPjulYxRqGdGrXv4yr1dIIynSuIEYwQppr%2BtflLdJKT%2B6X5Rc%2F66%2FcV7r1IXfZOXOT1%2BspD%2F9SRiPAssXT8v5PQJxfxGG%2FljLJ%2BDsjljR6f%2FFxBOMfJmIw98ixb1TFVWr58G5lP5WIgn1ceX5%2B%2FElBHe96eZGKLmiO%2Bk77vx%2Bc4suWnB1ZrlyGcKgrPc5Cj%2FFGK3iBYEOJnufbGcuJbl1mVBZXlgzhxE%2B%2FYsggcbqebD4fltBOLurkvur%2Fef5fRoJPBIUtteX7kzpZBPwU9q9rf1qBiDDEeJc7i8E4WKjlBWn68TFkBl5VWMeviGlYkS5b2xTl859Txcf981X7x0YCwI4h4X5dOXDIAmRTYo3axOW%2F0POnJz5avV%2FkzX777uVEe%2Be4Jdv6QUCAKwoUKjOPw9%2FpCJRIoFAjDhlUOGdYhwe8OHMxk98IyhANhAbg6vqMt2XbOAcJRVECN%2Fy1EiojIh%2BmLacAAAC3BBmiaJqgV36F5VViPEa%2FU6fq03qmC%2Fifrv%2F9a9%2B%2B1On%2F%2F%2FX2veCX%2BsvEeDHpP1buuVZfrqK9evNMTjtJP72GjAwMIuFUNAv9GguGDvXm75ogNFLwSC0HvBGUw905AgHOWjrl1L8Hy%2BHXuLARoZDBKg3MvB54DzxcZlru4z0nn4E06YKKU%3D&media_id=1254206535166763008&segment_index=21" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:05 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:05 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_BQ1RNKpQMadFzdL7MvUsKQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:05 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112534681471; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:05 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "86275b5180525091ffbc1d111fa41085", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19931", - "x-rate-limit-reset": "1587864356", - "x-response-time": "31", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00e6a86c009e96d0", - "x-tsa-request-body-time": "117", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"S9yq9rCkkLujG60WUu%2BOjTZUe8o%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=m1LRA0w6w2V57hOoKvwOmXeDJ9v0dr9e%2FVklxPrF%2Bvd9qx7q17CxAhLr%2BFC7ulXcdiHL0xWWxWK%2FvnCmNrn%2BDvgrFYrFYrLYoxWKwAQXXcFEQ0P7sVhZiHLZUZS%2BUoIjAkgQgwCDg76QjFcumk1iRjfdKZNSjTMZlhXgpB2N4owuy1MZFkvqEFkzuksEYx5%2FGyplpgfPliqiUPA6CmhLVXjHJYrxuj10IB%2BCnjoxH8LK8%2BwpdJGQSrmJg0cnFfw0ddrE23bvcFlCTQH%2BrdxxQMVYO3CQfkJEIbPNwDBsHAZHV3K0tnD1YTV3%2BhZUxyyp2rVA28Cndr8fXXk36wV6tV9XSVLUqxWT0jfjSEFZacvuBaIAiuINu7v%2FBLFb4rFd%2BRQgo6yA%2FIDDGDj4DAfL4ObAaB0vzMyaq8cDrHG5bf4DMs5qUGC2CKCiKYR7heO4deSEyj1YAqvkHFlKRr%2FFa6jAQAUxzdt%2Ft6cvh4BZAwOCKEodKGA8UZnVrfOpZbnziZF01ebRDWPl%2FgguGgtVV1qGEiIIE8oJyBX0sJXNsJCAQP864ns5%2BHd%2FaLOfS9JSVzUKRX2pU7%2FWKX1qrmuuf4VWXk90gUC%2FCoSUK8u6TMxYhWo6vjS%2BuX1xEJHEiiiq4tfxFRRn6E%2B7WK%2BXtWnhWX1y%2BlivLri%2F1Y7q8xOilUVWAyfCACqiPsUzVvGPe7sei%2FfE8Ao5KQ5KMsRbdOmTPJ%2FGBkEhWLFDMFSd3NmogsBNbkz6AitLLWbhAqceMVxk2LXiSfXweT1hT%2F9BGFVEy2sFUv69P6vEXz0yRLxMWM4P6YGmdIHAyFHYDFZT4JAntwDf8GxREQz8%2FiSjMcCOxA4B49CtIMffAkAM3UXED4D08dL9obF8ZYpcv%2F8twkrUEg4vB4PxAPFSbwaBkRG%2BIHswm5QCLGAdLoDchDjIAxI8PvlqincDVXmwngwdmawQVEnguKGdWXy%2B%2FxAnMN1%2Fdb8kIQYGvlwig4LR7xBjuvjkOfhgueonm0RGv7Y7LrLxho9i75aJ2jVL0HG4PsE0otF5p0Jj3S7eMo7798V6vu%2BCeLua0J6rvwkIut69gh3u%2BYXUmZASbsyjmDrlnSDpWnxixGYf1zfFB%2BeWEpTCIU2%2FgcAoMAMAduThIiZgkoP%2BcNBvUsH8g0Zaw%2F8lE%2FW%2BII%2FPjBdUybUnp147o61p7kjw92rXsbXNVxduRW%2BXqQY5oEo7S4tUdMMCdzG0Kuldw3UaaNWWFf6TkbDXxVopE4xPTVJo90JYiJkjEmWwY56XcmO2OQmlS9aq%2FwSdxD2NeHQSC7vd3aPvAQYaLecOCuvBiJ14EQb4b%2BBBhw03gBoO9Qv7Lw1xcMvrwIDwp1EnFQSTRhILoRuDfSA60BwWoQd%2FPwRTmbjHoPxRDiDM8fAAxQ4%2B%2F5Z4MVhV9hES76d3fSXl44yiXgh3jr7cXupTYdplHSZOG%2FDRYtFh%2Fjuv8ce%2BOCPqZA71AX8PNNe6QViB3LLMI7f9yl0SfQpS5t%2F2iQVBLcGPui6q1iq5BX4RDBCP14gngbFvCpYrL9YFHespgNwkFgisTwUBhKtkOjq4%2BM5cvD0RFMSBGCbBoDcBAVwmJ46%2F%2FiBu7vGdOi%2F%2FYolSgrchwYlcvvdf0OJu73u%2F8EYt3uxvvBIahGY8N%2FQgtpmG3G7Z%2FcpBZ09fgqIanqviSfPl0eL1DsrAhLKfUfeReLelzkFgWwlYsr%2F%2FEdNymj5%2FwSzkEuUFUDv%2BKv6DsM8pmrCS%2Bghl82w%2Bcq%2B8QGx9f0ywXuvVRc0CkTwLdYEETvAsQMYrL9d2HhhTU2MIDyY1c4yakr6nQymfnOvsqPvH8I0cafUU%2BeYQGUNqswudi9XmNHfDeidi3KF5MVsO9jBysFLDNI%2F%2FfzUfQI%2FL21%2Bcq0ymqsujM18MGzySGdHyeM6%2FssMiKH8EPLQZLDHLnivRa%2FXLn%2BEV18I%2BCoI14gZq1JTtvDRxDlanQDi%2F6L%2FfhPxtXdp9hveyXOlDiZ%2FurCu02OGVObPiww4%2F%2F3dprX7Kq696UgwfhM1IxGLUvqoIxZy4kzO04znL%2FdJgsjMZ1Uq7%2Fe7m7oEcaiKH3yfvq42dJc0KZBg7Cmqh9J6z1v%2F4f5AUNfUyl0jzbxiojHYjnmq2TH3yz2ex9qnZga%2BIr7vQjShOK8uP1vhB%2FdGby2Le%2F5CQ3Jj39%2FjtZqPuH1hym%2BRD8ziWCESW3lvL9CmVy%2FnFL%2FGLsnnEhBeGjijrPd4Y5gw7uNof7BOXlgn3y09k5s%2FBZ4aZuwA6ytu%2F%2B0odBp35xgwGD1Hs5dixCh94Iz44HsfMhMU85uSMcy63UFwtyEuGrq9h0nGFQZaKgd9iKsiOaR7YKAjwKAjqX8n1dxX5a8EU5CFs5omHsO7vvc%2F8UYEfUDXnUTCA%2FnJBOozT9espPJHCwz01cP8Jcjw8lEfUf8%2FGKbk2r%2FjeiMvGyHpS4GWVjvqATNxdtbIOJ7tBI0RlMdYkJNgqFV6ck5viXyMkFLBN0iT6b9gshii4KK1wQvr2XzDW4QxnvU9kielsJt%2Bh5hndEw6LdqT7pySjBp1ArtMDM8%2BtclYgN33FtaxSss6%2BerS69mGR3%2F0ImnRCUxUmKOq%2Fbh71XoIceCo%2BFOA2g41Y%2F1CduTcvxyKLDDWsr%2FNntXk5pPRa%2FWq8l3yWhFfnqnn3%2FhfRnIpl%2FJHSVEvoCOEDGJdvvfJX4LMwhjfsPMTUBAVtuNRx9a4d9IzGejtEGrsBwkVf15vPB%2BuX5e5afQsdu%2FUE4wq7IV7JiHju1L1Vzx75flUSkxxhQpGsAxZE8B36E%2FgCdmuYmXeOIiqK7W%2FvyBUZZgvZdpZoF%2BLIICq8WmpOW34rus2aA2tpV1W1gNxxGJUe0ePY2gS4ja%2BHveXsYCumHWqMbmFrh1%2BVe%2BX5hBk4gFJX4nJSwdvmWCZ0FwKsuSP9WaDCM9fTNvwkIpekL6TuXEovMCM7uIctjXuiyr1acn3%2FyE%2B%2F7BQaWRqSans%2FBNcx5mEa2fiSkv2SSTtz50%2Fc9n42e7h3uFSXZ3tU6%2FLtOnxdsNZPm6J6X4gTLOzcNPelcEJEE0%2Fxsn9ruXqvwibjJDgUIzM%2FkJP2v9yf25eC26gT6xvVfaLURyrEenCnMUcnhUgIOCWG9QayxoDx%2FQGb228UIBKYuhHJ7E6C%2B%2BY8QIETZU%2BLrHPF8vx1m5qRMd%2BdiBhXtYGPc5PodxX9uLxBkFSs4SRx5aj5xWJHBvNjL4xpa9ih8%2F1PlsVhY1Zf5JhQD6NWO53aCOqubyYSuLv37sJNGXon7yPh6fTMNzu0uniHxxPsGfhO9Nt5WNfX4fu9%2Bfy99%2FnTzKQiwZaTxWq8n9pd15BEG1l7yck%2Bmj2Hlk8ZfKxnJ66Tpgny15r%2ByfLdeutzPL3uKdlNx%2F3XcpeIaAZzpVz4gjlvjrzwGwPEhRqZnr0LBVk0uK8m6q9fdmzImX6ha8aTLng1F12mmxoeYYKEDG5AAJ8WFbKslJaRR7QReItaiPROvs9fPWuT4%2Ful8TdoS1Ns05yWORV%2Fs3yfZWvnCSjRpdv%2BoSwuVX0gZw%2FiTHp73k%2FgJYbPDInN3eTwX3XMZPnYCiLGw9vckr8fUvODLf9zbGcdCPD9Yv1iviJcmXl%2BTomuL4JfCXf%2FhD5vjunBIGAThR3cQOFvSLkGsjoFXByHgOBHzBwCFwGAEdlqWIpFUyqLohP9RRYMFedhR9mgArddUNFpYN24te0PzxB2I13hYUG4AAAMJEGaJwnKBXd16ExYz5fEVy1uvT9LFVx2L%2F1axd3xMnEr1iibiTeEv83BOGhYxwvqV7dhbEOWsJNeWCiNYLVtu5tKN8gHCvDA0WW8bg3tciMRmHR1xsKhsTjMRmRXgWWjbwhLM45cfwTj%2FAuhspMsfAthmXiUd%2B%2B74R7WL9coi5Lrl2lsWKEOStHKPRzgWXfCY2gCBVh9WECLF9d4YcsMTK6hcPyiKXcQDpwOzC2DqP54avuC06Tw0qwcEkQCfBjcql6YOfkzL5Pw5ZIBW8E9NPYjfTJnEAAEAEBkIAAeAdS%2FHAlQEAIAXGFLUUWkn1G5fWDvgYOolX2zWUTEh7gP9jHu48olIumObFIxxnDx5EdiHW8T0vvWJgXQMA30bsw3P9PtotaD%2FJK3bR0d59PuTSbL4LhBBd43pXdxL%2BbFL3Y0Xi4bcTsK%2B%2BJaJ%2FnGDSpEOVPfc2F5Zi4uoupAOHpF6dV0uCHiucIK0fqx%2Flufu%2FWu6u7mHdioBXhvSGxPmrj%2FjoOGu%2FeB7IDM1EsKkK4evlhYRzD%2BFkCUgkcEjmKNL1mdVEJaBL8Q5nqUgl0THbUX%2FFPDAFTQOAUKEh%2FqyxisGtzuXl%2FAR0Etp7g22Rbt%2BzN%2Fj%2Bg7a3S4QgAIgKEQANwgVYoJzKwLNRgLYoOxDpzx7%2FN%2B44YRQK%2B6QIEA4akZjPgQbaPhBR1QMMYH6FoHNmO%2BDWx%2B%2BXOcAIvA1H9Kj%2BW5Py%2Bv%2FdUTdxP1aP27%2ByZf8BDgTw6EHDj%2Bsnh4oAY%2Bwobyqqgc6Aym0J7wYy%2BuUSBMBTxwCFwHAI%2BYFbfpNW1IJx6BAcSFJIJbYGqsP4GX4f6L5cgrmkJQmr9anvuXiPiP1qyeDAnFMiKPCQH7jxZnvBX9jsvMxiOYwWTCnYEbwVNBaEFJdZMzDJXXECx6gmLn%2BoLE9YOuTKgYtHq0tHTgpS%2F9LBIWeEzVqRjgMg1BiBGSghdKb87vg41REDTLGrScVfzNVoItLa4d938vq19L1%2BspLqzeAGxWGrM5deA2AxECwh5bRz0wZbQqW8wnKJzB1acSbXeEmE0FhBUJaHgAKkcJeOAAzgwJ1KgA6lTKKWl%2F380%2FE45BHFXqxwuvY7vE6rUzwqIA%2FAtBYENVy4FAckhDkZzhkVSfoEUOAlHBcBQBNAp401iuHD2dhUSqu9%2FLHiwbMHD8hgsw2tlJH2hdQ8NNpy3LfcEOYzuSby%2F1XgoheWSiRbo3NwJwJqSwwGW7t%2Ft5eJx04E4%2FYWUAjGmu%2F32Z9gfSULI%2FHcIej1Xq9Xe%2B%2FsMEzDEayYSPGwsLnMQhxan%2FYJyQOYNQsqeA5d%2BgE32LFDZwADwePA%2FHgOE6paiidX33iu4GMQjoWybTbPs3k%2BggEIqeNDwqo85EcCMAR0qU1nm89zi4VGO%2F%2FEhF7u8%2F%2FJnvXkN%2FaIbZff6n069RZSGITtAboZ%2FjHpUGTh3Lgdq%2BYkNeA%2Fx9uJUmCK%2BGvlshBDc83k9CInUIWUMSakUShxk4nD2CMYjrfktFqYd2lwbiNcaPDgR7ly7%2BbLwLYNAMoJNcJiCixT36i9fHlEvfXxfAIGHPABtEe2iBHPbLxzuHVFW6iyDUZECGtZa5PsLx3D%2BjXoGCSoW5DaLzX5xb6lF08Wb%2BT8%2FobZIBQycyDexBi2fx0%2BoVhCOu5d%2B84cETsR69XVArPd918uPzavl91Vwl4wMj0CbXgjjpj79lMZmXvdli%2BXB%2Bm2nuEjmEFJl%2Fh6Kf%2F3hx%2FDM%2Bciy0v5rr0XKuLlJ%2B%2F%2Buwe%2FGPL9y2z5f5bBEcWOXLz4%2BIcrCkHQsKXv1USDgQoxA1Y68zUYZm8CQx9RExkOBGaBJMbF%2FO33l%2F9ow2UQEaGEsItS42yKkJe%2FkNlBgfYQKmchk4wyr%2F%2FF2w4OAhVIOAqYxWswgYN6co%2Bv2CXHxhIEN%2B0Mrwkt%2B8H2FCUy5FHivBWNY0VJqSgKlssAGJH3%2FDgmX7%2FxdP4aNN6rZRxM%2F8EZXvqm%2BIIjpJWOOel911ES20x9johZvjyX1prEeRKR4g2Jkacn4%2BlhrhtY6WfNWEbEp%2F777G2Sy6u%2FRar1lNM1PYSyb3wCDIYl7zCqTNED9MQX%2F17WbItirL7%2FXdDdwHZtZub4loDFD3ZLOYAAgAh6k5cxwwhbl%2BR7xB1LP%2F7OQDw8g7Ht8Vx0lNGCy4BTCVbWIlGUetWu3ognJEcn2HCbuqPDK6T9VYKTW%2FPBwse6Xh9k7uR2WY%2FLRL8EJXvi%2FBIbg3%2Bhuol3%2Fhsry5XyPkfXrFXES%2BsUmqxbvVviqwJwIexAyK8mAVJgACa2eOSfBhl9uWIDyeLY9wOlj%2BGwqdAY%2BS2CtsLK1KSD2fcf%2FBHvftPq49Ak1NSe7BfZrhZGT6sNlnHf6XoRSPt939flLsiS%2BSTas%2FiDFwowe031eCg%2BWiO9WK8EcTgBumH6%2Bwru0jBG9nuqh8K1d25ajyD%2FG81DGN3vAyQgYCHdG8dgCx1x%2BKOPXoDDah%2FuX2hoy7nsfxU6xfz6z6ppvMJ3R8CcGUZyRN%2BnxIjJXTrsUXP5wwGz7ITjAgP0WYXeYoylf%2Bc7D6cauSeX3%2FhkRlyuEbR02U%2Fsnmb%2BQ1YyDj9F3%2FND2WXl18vk74YJSjJMAaMwoV5srhmpXij6c%2FRjsvSNvxZJ5LkkCGh9SJ8YXQ2rky8vk%2BlPxCFC0r3f6grnBAEflILDf%2F2J7yBnurh47fN03chf71yfbupNPhnIXlpW%2BQh8FfifxBJpbUggOn68F0kc4gI3CNoQbxHgg88I6DgPRNNEwybvAbL6RakHI79IIydAaHhHk9KLG6lXv1iQokCo1R6hTFPqBXNUKuERMGkY1u4G2q4g1R3H0FCMrrmtMnrRIgdGYwhOchdhx%2BxqNhk3ggIVqXBu1YOo1LwrqYhJ57iAqLDA8%2FSQNXk%2FEbBlsBumoUcXjpIzk0yvobOYwVFe0Je9SXSJ%2B6qi8nIIPc3znWHHG%2Fy%2Fqk0ELvZxASv0bmEIKxCBY8iqqNaKLGJM5oEJ7mG615SPYN%2Fr1LvBPYZTc8w0zQSJE1EMlOsMctK%2FRBoQgpclB8Zfk%2Ff3FY60F7aPCX8TWsvmr15qchzs9bmn%2FXuCQtK8WjoXUnSnVU%2Fk%2Bwnuy3QCEPrK7GGZr6I%2BLQy%2Fdy5qSRZscaavELywP2NUDpGpaUZMIlR9iEud2%2BskIjI0z%2FrAvARANIMxnl1LVVPfif2wm1%2BNc2M1g6mSYr%2FqlOVDR1h7JopqRSfC4OBWJ3QMwrW7g%2B8n3IFDJY670A9r6rCmQDNVJY9Dys2hOjsLR3ZUkTL4sIX3FxfNjUmVZ4KK2YL3F17J9%2BzUa7u9OostIDs1vcSwrwUDKv9HafW1dizINsfxmo96fER2x%2FPA7Enlv4WLafMwS41%2FBjEP%2BWTO3pN%2FhqlWwKZTlRfJ9FpeEybTpDr4%2B9uw5a012wQ7j1%2FzCaE7deokj3vKxrXWLJ%2FKu0ETV1Q8%2B1L6lzej541KSCWwi4Zp4J757ytMvY3pTghwGzdhfQEBiIA7uq3FKJoGFv%2FMrLzZWunf8gkEph%2FiU9kwvOSLad%2BFIuJ5DiNnEOeSHmvLTea%2B9iRnP0F82JrdItJmFOtOqT0k2wbGFFTBxuOLlsmP34L0PqF5vVUXVNvsaMnx%2FFYTpIqVDSSmXN6IxQMDbvE%2B2HWAld453DIj%2Bgj0V5CFNhu1H%2BbOY3k9%2B%2FVv3dr%2BTudl%2BQqSu38N6So3CPLUqP6%2FovyfizE%2Fsl5yWY8cfyREwXUzqcaZOvyfmb%2BT9PvwiR7yX2Y4y9bZ%2BuXp2QhbIuWuJQR3fy0z%2FySZMSVa8iH0grV%2BPxd7we8Jj75rio%2F1rWlibJinPk1%2BIL4eN8ToHTaWXOLf06ffjAYAgMfD%2FAyw%2BxDjb8xqGP2VFZaAjL6%2F2gjl0Ssv16b16b0RlPfXDnF3fLl3qrNtv%2BCaGnrdm6er%2FkLGgQFl37glswhz0d9UT9ryf0UoPXxn85zgpnuxfy%2FJYQNnyexLk4sjnj1fJ%2FfZOsaUrKa7tS%2BTq4vu%2B71j4ZKGKOkk7RrHRWu2XfXCMt5Pb%2F0fP6CZAu61V%2F3HPf3e1itovrlXku7vwRAmBYFgFnugFhBwtH3C9RxLD%2B%2BTi6Kcw9V%2FH5XgezS9%2BDGpZ2Xv%2FfJUKtvTT5lW8wUP6DQuqfGcssSJDRQtx4NZV%2FfAAACpZBmieJ6gV%2FoWxKEOv9taE3d7V2sV1X0vV6xVh%2F%2F%2BrDBr%2BvvpXf9%2F1c3q369J6ur1%2BODkavbywMYIhQp3d3BqsH88C%2BGgoR3nx3f872%2BPeMEOPz2K4%2FfgxFB%2FdN%2BO%2BRD%2B4YR2lXJIluOoKvpyy20mnmnC9Ie2O%2FxwGOCle1%2BuXyUOW%2BKV%2Fr3lqypV7oTyfv%2Brfa4rp69el9a%2FXV2rUX%2F%2FeCHoZ9mVQjqoVXkxD%2Fa711NgwIDQEG2xbE9TLxVnO4AmQFobO5HaeTcs8DsSzCgqLqswOpAyebbB2%2Bay%2BtwPgOhurGdieGwbMpYbaluItUeqDAP38fYilfTGv3WBZFjAMofvX6aoy5piDqghrOAEwzNV8C3FLQewUX8hJRGpyIvnMZb8GQsbqXG5aP440rebhDxeClA4nAUq4OmhSw1lLO%2BXxbTvsBMCgpwit%2Fu4uD1hfwsMVzDgpR3HBSg6VBSAucLnD9Ok58sqC0QOlTEmgnQ8Svqnb4EcFYbqmXx7qpyzDTsejXobX0rVfjtdL0Vcvrljv1fvkXeWA0gYAgx6M978KKrE8%2Fl8pGDc4MVBKKxXaJ4toDvgBmUXeVC9JZQ6ZA73ocsIML1bs80QsiAUBfNk7zOuwN74DCBs%2BB9qSCoSX6tgFcYQAjc8IAhbZg2uIEhYwdfBcTHCClczEyEdcXoRzUvy8l75ZFi9s8gjrEYanh%2FQ2q5ueX1wkHLKngyxPrVDn9IT8C5gIPLDQo%2BDS8ISMgpoxz5QA1fLUFQBg%2FblQXECA9Soj1qrrCIkYIRq5YBbPlgCz%2FrEgyKQLSwDOPZnVZBwo7%2F%2FgCSA47%2BGvTl%2FqQRsrGqM5pbXr4ldVkhQIGOAjFhTVQcYgAS1t5DA7MAFq%2FPROVoo%2FMkOfhKiXH4r0zsvmEsWGJYzGRBjqwdqVxPHNPbdDrMxaJPYWAJhlqnAvmImojomvQRatVr%2B%2FWX6ty%2Fq3693XrLueB0YWIwTgBh2MChB%2FZk%2BAwBqSsC5AjF4Oy%2BbkVahEJRiRpkqF6GH8uw6EWnvCzDKEx1sDgm4BZT8fKyAxYJvf70cQLsSHcWGvhjN6CMV3Zf%2FVWWKW%2FV%2F1ruXLXHl%2FugEWBSDAzNE3Cw%2BJH4Vc8ZekvQgACIZxP6YBSouybdycEersgSfGdBrBEvWWkjS8DVHYjOkDbsQN1y8CzAjs1ZNeoPRzrrBAYfBDpD3jmhJMhG%2BwS4viNJPGn9iVqf3esPYQgSpwXYLSEFRKPGZsNE9%2FCvy8YSK4UUwFVjnvnqQz0tIW8pC1nIyHylH2OjtvHxONCSrUw0JC7WExinEa2WtVluvQmpfXL7r1i%2FWXPPa1P4ITbv343xDwL5qaEeOfBx8cu7Anw9wFIBDDThibDJoIiXdf2Cq4dL2n87nWfVIP9B4iwABAkQxAAEBBkGCjSUNCwYKJYCBtL0egBJ0Ecc2ItAkGooRJECVDZXhSZHgQ9Np%2F1bFs99sQI4vsf6MWuHtM3JUl02rISKZr1EeH98zCCPaEvX%2BEd%2BvV69fEeBlCHgew8LM9%2Bq1gIEEHmxXFfWtBkymyvcqt4C7gMsSU73a%2BXit0tcvLRl8VZkDbeVo4Qv8VexIboevQlt316MzduCzu4RPehMNkRKZ%2B7ZO7T4KL6MynSeH%2BHSnMRKS2YenL%2BOkKA1QgypDf69kQNAxxvhiLr9%2FEotSF%2F%2F8oQV%2FJ8ecwyK3FHMtVXQ1T%2Fd3uK7tu3S3GmONO7t1bk%2BwxAsB4BRQJkbP%2FiX3Dhd4KKBxeBQrgqvcHQmjW%2FFtcQ1Ycv1%2B4o2yV9F9DT2vUpOXPhuXEEaGvkqSzKevUTcppg%2Fd%2Fh%2FHJGy9DUvRDow%2FDUlBUo49tGqd66Pb8EhtxpNd%2BGSz4xffMiMZf2rfglIkVjsyW7ne4jLH4Vy3K4fsOW%2BNr%2F7qPSxiMMN38Rs0kWM3338Ndm6lMjZD%2F%2FRSV2uEnrXc97%2BCsVXEPiAfL6AGOAoQwNHGEHBTiSFNNJ5UvWYpOwG5UO6ITbUQ4kelw5xSu2mi2c4W6jMBAHTNqaf8PmWXowMXRsPbpG0ZAz2m6IYmchgWxoO26iyVYiID2w8KU%2FiStRoy3MdP4i%2B9Npp%2BYu57%2BColbTnAAEWDwAeGgAFQ8AHCRweOfZ%2BEIOn54D5bffeirJdqT%2BCU7B1JmPNG%2BsvNSOQbO83719Irn6M4Fz0%2FpFeT%2FfWA2AbgLgHIgztZ8A76qeHyeYKAO4IQrKPECDYrhQVJCrMD41GBgVS8QEME1UcA5Autk46qQjnkHfhM56fDa%2BL%2FLuh%2FnqOj6YGFwm9H%2B17V4i%2BFHSlu%2FCRa1yZ%2BImJBppmEWXnoYjQfzGblUasVGCUr3dn0yxy3k8%2F1rwREJ%2FKrm2Ju75fQvtC9do0cp%2FJwEENXYbIioml%2FGT29EvLeUMBr0Ld%2BCIVmQIurly%2FycRulFx5DePL05oDQyf6gmKfPu9yrBZ3HQ0UcAX30n%2FedHCXTPRauz1ImWgy%2F1i4sV4StA1mXGxf5htX%2FPX0EOmeLc99r0nku7Unr1eid3XjLnZst3lC1%2B7lf1l%2Fu6%2FCc2Vyw%2Fvd%2FyW0uX2jhYlEFEwJjZunSvwwFBgj%2B0hwxudraxhCNWyKK5ClqLaVBwGY%2FQnA%2FEgiYV%2B2%2FoN9zfB7DlYp3Hl8d8M5fPQDF2DWFjm%2F13j4buLyCc3WwxqCdopbIWTdZHurFz3SKlBXjVyEle%2FaFiz9wMa%2BEi03bd9rmntWjvBESgbu6SwSTYnJLuybp16sS%2BSM4%2F9CXrsQKu1w46UC1twXnECCCx63uy2u0CV5jGI0oH8medRmRKwGwDpIKZ78GtTNWhb0s5iDl0fL5YhFLYw8N0wXRh5zXHbKnKAxBAkStsxmJLfcn0cLTmISCaJ91C99oK0d6k4D12NdRAUx2okC%2F3zurhDssTAxmcDggcMhirIhiAR8pJX1DZZOK3oyzXf8nyFLinr8p8G7FsUpqE9e%2FRZpbECuK7t96vrxR3QV2bO78hNIaiCl9X9FOr7Fio6y7cs8vpib5LB0B7vvUyxoKS74gzZqjfffL5xBsO%2Flx0%3D&media_id=1254206535166763008&segment_index=22" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:05 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:05 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_J3xEGjbdsps6E5LJ2GPSYg==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:05 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112591786886; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:05 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "a10919525377c536195f280a1d89bbfd", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19930", - "x-rate-limit-reset": "1587864356", - "x-response-time": "36", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00e2a00300525221", - "x-tsa-request-body-time": "102", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"YliYqSW%2Bs0i%2FSBzeyhfePa38IqI%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=eFE%2FfuFZYMQDlweeA2%2FE74cXimMm3%2F4Kq32OjwQDTEA4D3jMq%2FvFk94TerCHJipQGWOAacQNAY66cnps0oOI8q38V2opyflYEWD44yT%2FBjL9VH8RLlntBHJ%2FNhtB55GuffaC4jdyxGrAEMHEucAAQwUwr1TVeIFRuvQRf9em9Fb8gg%2BPrybMeiM%2Fhne6pjaKxQvXiOdh6UsXuQ25YyeevRoNXl%2BpNoXHmiA%2BgZiT9KY2bDj%2F85fA2NpYo37k8uDb95P2E8s%2FWjYJtp%2BO%2B%2B9IlmMwS%2B708QaJ3ey9bzC0A6xBmi%2BAd%2BSRcqLS4PLcFnpky6gz607UxtD5bQP6DHnZYYtjPZ%2BFeion6QTr5V6W%2F11%2Bvfr369KX9fRs9eL7NarJaP1YW08IZCHnJP4IwkKKYj8Q9u%2FyJkWL%2Bu38QhQi93dJ5fFiRJxWcEZOXH8s1N%2B0TBWcVctvezB3zhH3foKsy%2F%2F16yiMm2l%2F56%2Be3xHr1V8Fq5ZPXDgIsbIId3zMwM4HOs6q44uB%2Blc55M9fc8YTfDzzcKxZG%2B3VTXbrAoA4BCD8EYTzb7CCKDJoLn%2BjgAEqFIwsFQoVgoFgoFQsNAsGAsFBsFAqFBKJgqFgqIQkESK1U54zd1rmbkJSRbdzm6vVElj88ex8N97HR%2B%2FfP9U2kKW6j%2FJ1PNvm3ORpN7cjzy4%2Fw%2FkFu3u2JSP5ExFhdJdSFokZ8a%2BbfkGu21z2x%2F%2B%2BBgS6hxasj%2FNGLxRXE71aROLVsZz4AD%2BHpBwvYIepsvul%2Bmt7Ryo4xExP5MdEIBopxatLjQGoMd6%2B7w3l5YOrApQucKfY9S0XVhLPV3wCBx%2BYWeztmyBOy86oEAqdnTHJfXmlarSt2qjEi4Uv15xBwAEmFJEMJBMOAsFAwFhIFQoFQoNRINQuETK1WceKZbEpea3cLwpji4qTQ7bjf0%2FbNz5Zor5LtZefKtScc%2BiL1%2B5buu28%2FheYNOFid27v9375hjZUDhfvv%2BfECqmj6sId9Xx5Njx6MHKGVeIG9kr0504T0Hh8oryd5Gc0nAcPoqLbanwuhB1yOffLz5Zl1LF%2BVkuMfJ%2BP%2FdhOlunsrFBnyF%2FbX72uN%2FM%2Fh7SP3vxocv8fQVRZXQLU8UQRKJuglp1ScKFsrNUgvRErfHMLQl3uDgEmFJgoVgoNjIFhOJAsFAsFBqRgqETuet9ZzrupeMhnCRV4Xzdai8joFz6J0Pc%2B26MW%2FWXzD6RdzkizgJj4DNFfiHemVWG5qPjW%2BXYdWQqeWiXZM43c667jf7HFV%2F2P%2BAvZ4Ay9A63D%2F6VSD5lNYJWBaCy0u7ezL8sO6wI8C0d4G9P%2Fn3IeJ6%2ByU7LtXu6LSrOjm6V33x8SnGZT6MLXzyc%2FAg%2BY3XSACNyiQEir%2FuI1EXNZWTx7nFOa6dKfpWPQIXkkf2aFUr14pwSMnADgASgUkCwUIwUCwUCwUCwkCxXCgWCoUCYUCwTCokCYVEJnfSVzML3Des1eVqiJuVdxUnA4bkPO%2BY%2FSt4TX8l3L%2Bhu18H5f9knqfut3zv%2Bb5G%2FLhs8uyyvQFsa9gd1X6lgKauwmIv7yNX7Sf8%2FdrWGSl5vE2%2Bvw5MPm3%2FGZLfEMyHlqO2M5T74LtcxSDRJwKh%2FYsncj6gKlc34Y4TaLuuboGOHUdXy7FK6kRe%2B%2F2f5X6v%2BL3GTu4%2BKu31JY4LF68%2FsLE2pNtLVCpFBR8E6oZVkYRSVSvNeJT6AcASoUkGokKw0CwoCwYC4kEwUCokCokCpBM5%2FHz5r36zu7nJmqupu5qqSqNRDQ4puHRvF0Op4Pyep%2F5j4%2FhGv5PxMz7z%2Bp3n3UzW8nzZ4Uh7MWuNyWHVwkl9vyJHK8VzUI41D%2FV%2FM%2BJkw9MLVQ2DhS1KHbm%2Fr%2BSrtG1IvIxX8eyo%2BNewy521fGh8ejdd%2FkUC32w9Ug9rFgX6xnayMnHfK%2BB4Qv7uF9uBeYrnv6Tu6OdK4APP2m0QghddJZuWqcMUpWkJSvZBE%2FWdLWXK4og4ABKFSQ7EQLFQLDQLBQSmMLhUKBEzmtK3xvm4xN6pZV6pvVVeZ1ZNDduOci7LafD%2FaaF2qPa8dH%2BAg93Fyru2NIv3rXPSXmo3F%2BPAfsByUpz6L0s4GAE2qaTimhdV2eWwYEb35Cd%2Bn%2F0%2Bp8e7SrueU9YS70ydtoOjwu%2F8y11oIXNVJXR8deG%2BMDFC%2FhuvQhAFG%2Bv0HP7gv9w%2Bu8S9%2FZUiATPTofcX3PyenhAPY%2BoAfbjDvddizDHCeloV1FXUml6YlVp3Qb%2B4HAASSZ%2FjIVKFSJMu6qPjvW%2BNBwQMnc5IyIESmw6SWYgst9CjIkXcuxPpLqzFdpahKWa5QGOpHbSAPkIXqVqpdoTNtG6PgQgwmCKEAYEref%2Fu7zltBOqAB7vfIUZAp0%2BfAbZuUb8%2BuGbloRzR%2Bu%2Fs8Jm%2F7r9hg2H1qWDwtcXN8DvaY6bb8UZ%2FjFc%2F2nv2e3O3yfN7ujUrUojUuJLOpm289CXDxL1z8TEfbyKe%2FAmoLmuAc80Pisvdniq8saFZx1PNDZCcBrjdCYwYDSAeqDgAAADFxBmigKCgV9yeheUnE1k%2F%2F9r3%2Fa93d3dX4Q%2F%2Fq3fa6%2FWu%2Brv41fleuv16hi%2BxHVr1etV6v%2Bvfr2Tz%2F6gEeGdoK4HkcCAVe3e7Yu3FjKeIw4ruFwO4gburTuCguWOBImx%2BJRvy02a4gABcEiAAEg82A1Dl54B0uA8WvqUAatODSDAmISLRDcD%2Fa2FREB1scbyT%2FB%2F479nCTFisXMo4JBZB7w4Ptej3PnWOcqucCOvVxf6t34WXX1rLq65blq7y%2F%2F1dtXN4HxrNCckTcdVIHR23KpxKbDIOsNFGufgu9GoKaiZzSKlWMglxXvm7hj6U2bsBj5Fr2H352A7QNRl6vjwdX8brOODqjqQO4UAgDApag9jSWVNvz0T5by9Ulq9IpmOqVUX56kFbmd0zzHmsudFpJLZi1zVlpuygwgiwsIE1IKsMWBgy1voLcYqcZ%2BqKOT%2BBSLKFcFIRBBywlwQNCvZFbZEqvTrxj3%2FWJCqOFC4I9M90PNilWLNDlTqFZkPneLDoK%2BbE3SKTyFd7zcN3D1k%2B%2FyQUT5mqpLlV1VVUlCVehfkRRs%2BAiglriMoipsm854SD1O5qRltYty%2Ff%2Fxvu40grvVVV3aHlqKxrDgGgh2GJduC4YMc%2FTigNGUGkm%2F7vUQofnWBfNRp134Nwv3dqkGEISFChqTAzwwpNYsY1ugEdp4oRWwMOgEHndEkzv0KjLhBR1QMOQHx5jINVLbxA%2F2Ye7T%2BVEGjnz%2BoGBqAcDufa9Rgn0JSpjIOGReNBOGSEzKgIlCZRUycQsRPnojFfaG9XFUKVNX1xf1a6od%2BpH5PbiPyfgRYkgCPCfqAhgscJhB7etVl%2FMC3IyFjp%2BUehrzTr75u16PtXJbonx9%2BT1y%2F7yeIdBEUeSCSCoIDeYk5i9%2F6u6oGMP4ZgtjhRviQBIlRHQboDoIHVDtvCAs0FOAMYmhJC%2FblLeKbrb%2F%2Bvr1RT1%2B9P93b4qAABIEqH%2FKDiaviZ8J5sI0Pq7%2BJk%2BXDs3hx7hiLNhQAaa4AqjsNMyxVFriNCcqJ54P6EhxBEJHhYHLYEhYB%2F6hZFthRjo%2BT7Jw43LQhaEldmkb9jLNDOP%2Fof1arlVrV%2Br5fk%2FXKTdaxXl%2F%2FW6xy2u5PqVX4Xzfxwk4iggM1LKoFymoEiiwHN8CAABUbHU3QFRMRPqLuCAAQRxoRDUmCEUQeEgQpmbG%2BTo%2FQ3UBaD4lBxwfATAMbzrieoAFhwFVQOADcoUAAuLIAXMoRxQMMoxu%2BMIwxxsAOiiqeLF9O4m280fs7iy%2F%2FD8oZWAGSabFFroP9SM4y73v%2BPsajff9ajCQwp5g6lflZwQvFTDOfIchd9VganhZN2MnwLduWkiAspK3rPrtBMiVL5fly3%2BhmVZN80l9q0nfv7iyTy0iDGwVJOCfA44lNzgOKX2%2BN76KLD12AAS0ZCCZHBxmUNi%2F3tVCHNkAo%2FdNtKKNno7yGxBhc7iHEnIZrUFo1LPhaXvW%2Ff8QK0hrtxuOHRVjS6UiugU0iESkEsiEmDNKKAkl%2BM%2F%2BwxJAaZcfPlKtsbb%2F%2BqJ5x%2FNOhcFk%2Ff%2Foi8M0SKoEdXk9cvCvL%2F4M%2FAPMFGsBBjAj8BBhLfgIsd4CpgoFPmzE8AGj6F7fKLL9teUsOIQT77hiiSuVatEBrUh%2BpA1%2FwVeE3ig7kYvqLrdOx14gWZsPhDmSQjzcJnfSMptSZP3RFw2er2%2FhlP1a8xOCzJncFfBD7800mPAI%2FBbi4EpIkThqvBHBvowKLaHLEvxfE8J3f%2FEFaH23rGRlhRdHtkYoXHH18mhjTRr6L%2F99%2FaLXzchHFq0nKsqwjy%2FXwqbuK64SA0A%2BFxW4gcOcfbcn94CyBYBFAT4oRu4uqRc4GwEwSMld7Rc6wIRgsDkFO5cxWKxWHFxRAHAseS454EJAliQADfIiwB4GA89Hag50d7ihC%2F3BEPTGwld6L%2BquYlbeya1q5BkplaxTxfBqFQvFm4sDU4OTtHblFGg7TTHDitMR1LvB1rQIypv4%2F3SSOSfSvJZnlyRsL%2FCcX1z2%2Feu6tfwQ3LnFvNoRwMfky318nN3P6O%2F%2B%2BJAoDzG3fgRgmQguKHJknkAlh7lgQjj4ppxYgfxLnM4vvcf3Uklx8Vu%2FaVRPDcvwfIGdaae238TErLnZawL1zWAVmgAEHf8ExyeM3cy4RvpHSd%2BKx3LXKxRVr84gbe7ZjN%2B5hFI6T%2BNm0dvh8AlJACrNLolvjz5YMHnywd44Q9%2B%2F9iSM%2FijcV85Mvv8FxzpcNg5ZcGX%2F6FzpNtz5OMfhy8%2BV%2FIaHJ213Pr%2Blid%2BUEhZsPDy3K4bNucMV%2FHi7all%2F1xO5iMBO7Cr%2F1yu5OSrv0d6L4FUFYMQnGgt5PsNwr8eKfUfXkXresEY4CGHBBAuAqe8t27hUCvO3fA8GyVmF%2FxJ7Bn8V7%2FLM%2BUMDvvHQRaHtPkhq5gwGwJe%2BeH4iivd%2FLpXpa4%2FGtEkncdnn8GOg68IxZ8uNalzUIM%2B4Tq3R%2Ffv%2Bbgj2zgwd%2FV8WXVmXLm9Of1r4myeH7Fagxv9EKDxJO0J7J7%2FqQzhuTF3rvKbhK5THoEJzdW8qlLwgxNNeCQSuvdgnFbmEFDyJUG5ofKUCjzeQ4GIs5P8UOrabn%2F2FRNZP3LVfTG0L%2B0Xt3hfmGJSSQ7HLax4tt%2FfWCDpjINGULkk7rQVOhIJYUP6m3dI2y%2FXThAV5KxjY7eGPy%2FMh4D%2FzC5V%2F4I4fSePZOr5hSxGtk%2FHvUK5kwcj0IMI2tY%2BNmtH0gR9vJ8%2FakvmX2WGus2r61bFEapT4K%2BT9Xr%2FBOWJ%2BNIJLTGW3U4JS7WI9tA3bwm9wQ0TLKzHsroJGCcnthFo5ZvQ05UFV7sgGD3k%2B%2BvBdxprmDM%2BO%2BulFkY0ENt2JenY7zZBWOpiDctivOoH7pW%2BMMWWZr9F9rCo0jwWkLQaBesUwFa2vTTFWs%2FMprJ7qiCBoCeCQUE4MGGIGWtdtpfjcW0KwNoWA3n%2FfIMIAKfjkNj0yDCI72Mb9JzffuZh4ygg6dPICvwD%2FvHPMbSXllLqXYeY7UvHmCIt3eWRbJXwhJ9a9lOjJa9Xq30vV6L369J6EOCeHONDL%2B0Ru6XyfH%2Ba%2BsnrpbhKeP5aKX8NFnrs%2FGwYNii%2FSLe5YJfhKMU%2Fei%2BKIhsQZUNqi%2FZRu77FCISq%2FnfWT8ZBBFxxstOGJQcdS3Rs6LjD48n8nT44xe4uNriQaND6gOGV1UUJQ%2BOiDyfmLuWKg7NKS9nDVNL6Z7Kt7HlUqoxFBkw9liSwL7nry%2BBA9uOOK1uhkA4Z9IXTA36YgqNSMSy%2B%2FwSiTZCRVcAdrYyKuycGJLSk3peouMpPiqfxDgr3e%2FGz1LqX9IoQWbe%2BCZNeNMU5sNnXliyvC%2Fz7fVl%2FniJRfd%2BHBU%2BrSejy729Xru7MMsgEzdPz6roEemmfK%2FOV0I3eJRZa%2Bcnm37hue31zjI3%2F73Xd0Q7gkVqfyf6wSEgsxmRxPptwlfKNPz6iPFiHBRdS6catlPe0U4doIPJ6j52oQOLb7%2BMeZnUbcv%2FFgpKvZI2X9a2%2Fu%2FLemeINbbhP114%2BwcZe%2FExEO949vlqBj%2BKQTt3u4%2BWxWXQO1BWXCreLFWl1kD9BLbpA%2FoD%2FPuCo58yrYHiFooVGXJIFXO%2FLM3tEeFHrrvF2%2B8vC%2BlvYOByDJ%2BaxoC7irZMBaHpdTg9cbhqVjYTAkBQZuXljnPYy3GIcZykGqnItjp84HDIWp3yzRaCpQe4onjV%2FzZr0Tv2WXTnf77v9XLf0CjV06rYIv%2F0TL71dBInGshL7vsmDay9JFEiK5oVNF7BhxhreS4gmyywdypelUn0LZC5EE%2Fjvh9t%2FSi2K8%2BNVdm4zit88C47%2Fd7C8FhXd7uHGdLecuPyzJwhBuGmpNz1ymRCZ%2BT6hOLHiAn1tjRISJuljplyft15CcdxL5YPB3QJdLcuyUGoYWSJmDgjMC4%2FljOWG3Zh2tKhFWDAI0gNXeYgJMp0AfXhJJAwtCtRHUEYuIYN%2F0EYrmWuPu6XiOuvbif6xX7MyvXi%2FLSffUXmv8hYbaMXwQ1kpm%2BVE9qmr66k9BiAgiDu96TvylYjfl5PI1eQQQ197ZqVEjI%2FeY4Wj7lY%2FBBAnEWb3gyahYDgVXy%2BD4UNEgwQEwCNrHQ2DEeI4PeZcsxVc2Xx%2Fo%2B%2B1pVrHJ%2BPk9Bk93P4aoz11%2BHWnRf1RevkLd3%2BS763RHk9a%2FpRKC%2BT8wkCb9YIwSA7BSLCx8B08z60oZP1YEGEz%2BGaCr4AAADWlBmiiKKgVyehPSc369Vr1%2BtS4Q%2F86xd99Ef%2Bv6v8T7q56%2F9r531f3dXJOtXf0rOf9XXgWRfgJtAnI7it2lbV2sBOkD44abRq7s3xDggcPj8wHHYQxFIS17eJ1rwMg8MS0RlbIllx7FYY4ohDTbYjunLX2hpkyef%2F0IrFJutX614v3GXLRe8EUD8GD143l%2FA2AoGit3UKhVLLm4XZTQV%2BU%2BLoRkJ1BjLWxLBvVM9Szbn6rjQSfpcvVeq0YUB4Nqa8MDgtQMBWhf2BZZ9hX4KN4FrPFhpppqKiPwdldjJ4gcbShkmapR73VP95S0CCgcZgWTamYAzYIb48sBrJYESK7MXHi5lHIhWiCPyPbuuWoaGWic%2BPxRGo%2BDwqdQGA1jRIq%2BKmqUoNwtsUNaoufFWYoFgg3xjOWfTRDUnUSvnUOeU%2BiQfg%2BH5wA%2BFqKVMiha83H1uvhQeN%2BW8N4lI751agLNvTqzG0tm0%2B9%2BEB4YvNrrSbXgq9G45JjARRtaqq1JSUMaTVFqYrqANAF1%2F%2FUf8AjAOhxIHUgNbwMWXvA9PvdWj89esFVfrUl1quUTk8yLVNoQEQRG5f3hQgJhD3btPivmYhgowL%2Bg0VffXoJLtCqmvy%2BGAIN7XvA4YoGBqcYUfbz4DXlceEhohS9VF5FxdVxaBm8%2BBDg7PxaS8tWaSfGMzAF9974g7mjrWnTUzBTBJ7QpabUSOzfWI6%2Bhx5M0v3CjrAcMfAsN7BQBvokgr7YKhnpnbjjrSSHZ8y1a9Q44gkKdstZawYDVLyy2csvgmD4Jz3PVVKcQ8zBoVpZ9%2F%2FwcAkBAEs9jGrmdrH6ZLQuOd%2FN1q5XFrU%2FrX61Nfhv303OtcCMbhJa1%2F%2Btli98EcId9nIB%2BhbNUKy8PCr%2FwgiEIkQgmib8Uqn8quWF1%2BH7Oe%2Bhtn%2Ffcf%2B%2F1fpoQ9al%2BXLy%2BIkKVhRBQcEp5pKXiMUPDP3zUrYRoQkcGP0k9a98n8UiZKhDHWgHagLPpj3uwe%2FT1P9Hf5%2FybtBF77Wq46sel7nqqvXX69XrXhzfrq4vtXCy6zzGykiyUTvaC0YKscVGsps8MYAOz7sqbGc4%2FLEnXXNxEf%2BP1dVfJQpbq6TV9ZKF9J6vJ61fr2T%2B%2F639QWDCQ6rKymjjilvwSiTJTlyM8VtcPwVzDmNDHMeyRwPjumxu8FHjvtuctZajCRlDq0DLWe9AyGp7dvcdzJS3S%2F7lQmfolKwFFk55IvN5IXckqEvEeitd5PqWyIiMKPkrK15Ic3pwfqPFDA7yPRG3vgiIC0%2Bw3x9ZxIOwRDXfwpXjzBrTZWxC%2FfTmsewNF%2FF5fy8Wx%2BW9OG4lEzY5xWZdTy%2F2TQRnMZlDqyJQegcJmnrErE8ubG2WeVCqMFOGHujfypx%2Ff%2FQl6pZb%2BKxSyX%2BvXgIccrZfAT8BW8wb4AjI4IjL3F1SLlxWK%2BAmRAsm78B712Iw6LLkQA4IHMpo48AuUYANk1dZRKu7%2BI7JaY8kfy%2FrdjegjaY3izBw5eAjZyeNwbwVwhxKhjxggJhirFzJ%2BtvVjYzjxwHCHZ6qrpc4Ajd0%2FtS3YzRo5PK%2Fozzv1%2BPB%2FXD5gvtjY%2F9wYHxxToWpHqLsRA%2FVhjNL2NcLnUMzmGrvEqSu60MY%2F4ISl77uPhIu6G93p8Jkd%2B8GMJfcNkD6Xh%2FwTYwyjBap%2FYeLjbJtN2Y3jKug1KQ1Fn%2Bx3FkDSmKWsFMV3k9QpWvL%2B%2FZDjZdho657O%2Fh2nvHaLNVjY81aegOeaC38EIM%2F6k0f%2F85AHU%2FqcZuFMspoGuSv9eqlrBSjHcKCoh48D8v8aAhAaAPoQEhG731vA1A0AVgImR34hEAhUhxVgZATCoS0r4reXzhAFALwIAJwITCW4P8IZueqTBaHxAfgcoVg2BqFmAAdDt9XfECkDoFwN08zYP4yUKJ0ZKOIMtnp%2FBePLQOpZe89K48aT%2F%2BvaG9oE%2F3nHQOhgmeOEwLIW4i97zgXAjZwkFC%2BuWRDvOfT9UVzKq5Pnp9kzvUegPtCOIZLTqFHL%2FYYtFj4piPcrHhn%2Fl9%2Fs53%2FTdfhc1y8H7EH7FDX5nz1u0gSnOo3JU7aKIofcRRyNYNcJLqyedFclglEBulG5tN577tze7ghvLQuPziIP6DrR1pDYMdK%2FcNVgxzKglaHX14cZ89fgwzEikF%2BXuv6uWrGx3L48%2F983I3zdMj9XGS3q8kvKwayZXhJBEVbq933evfGIwFHsZ94EQUDEG3pjSmayMgEl62NwwysIE7BESgEEorEGQTfGgUEBwLckWRCtr%2FiCwBwEAqp%2Fb99j%2BP8dXgGG01A1drRJnS1%2BFSjZLI%2Bjef6sDfV88e%2BofjY9ggw4eJ0u2bjnL%2FVU4IIkAOHgcBqAqFgAanvjtA7idrTiXWP9iSA%2B84Psz0t8Qekq6mv6xZfXLy3RmNQry8FHJgemfbn5t3Dhc0keH6bYdihfDAiNC8d6DnoXF%2BOvVe6FIIHX2GyopablWjjy44DA%2FXVP%2Fdxbm3kcmldrFLfeiFfUAowUqIiXD5ub8n8CsWCtPSEd%2BGZcBYCFV2EHMC5gxHlGBsf8MljYxB8qk7PMEfOWLbP%2B2W3HzP7ZcJcXWVZtT2kw94TMrTcvNEAMp71I0OMBsP%2B3oRPhcLGW71ykrp59T4ji8aaqms%2BSBdxCSnxCkXVmnHsLicxJ7UZ8vsK0NmtXiBGE83xW39nxZalS%2F9kjYZFYQT6n9bbhsuPkaPpLjxEn6dIvKcBZpbzS4Q1fct7fMRUteCMXxDlaOiCHQFHlp3KZKJcY5PbvynBVmuVmGjGA0tUQXw7F4fLnLk8v6Ql%2Bw4IKpcqdUz4yPqP769jCSL46GybhFYcsWFUlmE2Dv5PX9SFe1srBVsUZhmqSfZAfAlZMebfxZPNctQQeNFuNYGsqLgJWID9c%2BmN%2FJ495WLFFZSGXqA%2FVY3l4dfVk%2Fu9Q%2BLPuUenj8sLjz1ZXqp%2F0fu%2F0TrpV79XJNUWqL%2BWqmIXN14Iiu7u%2BvXv0gVCI0bvjYhjhB73g5dXlKVQ79mM8YBV6fBCJ3P60S4o0gZjgl2L%2FwXnQIJOEHjFPr8aHbv4LuhnNfL03eT8f9Gvq6Nmh7Bhw7Pkq8Yxa1YJCTG5f0srgsITVY0ueojcibjpcSZt7bMFVpM8DqDSMuphqaOgptLhZk0uUAnlCpfw%2BZAavbr7S3cOCnhJLLWi4w1altbgU7zDxfeARl%2BES07%2B2e9MKFm5pQsoJPd03EhQFQnwo%2BYHlb9qtAfzVtCLXAorQ447echGNgHeTuqaqG8vDQJ5Gqk5iuaiX2%2FF3kYBeiHuO4CaW9dqTQSf52wO13k%2FdQvaD8dxlLojK5uAuyW65QyLgGVfu1eIgIReclP%2BkUSSWJ12j2GThs5MjEHnjKEOlPUW81bjbRXtHfhJ1fjGXuW6quTX%2F9CGW7wvGPJ7L0qFPLIhPFZtr9NxwdUnl7WH7UpeuHxo%2Bmwb%2BDrhYeNmKcF1hG6TN2npNQ2lBsIMp6r9MTGcugoZZuv%2Bf3FbG4dwIdU1ZfcN8nl1fmqVju%2FRTidZmYVUHs7FR5Coo4Pv7ttC62rihDGJugGIn49fQKM4xoLGuwRJCplRsaiG%2F36cjHx0sYeu5T8qZKyhI%2Bnryes2NEOIMplltJE%2FaaO5GA9%2FvZo5RG7CJswL8I2qdlMQlzOe8CJSXD4R4F%2FKh9xtcNf%2BuX4ySdRIlMFR4JuqPXeFBRGpJ8nHC0LDMSCskLeQZLpwM9WHeP4ow899TZrUEzgchHliN0rvfvvHEDK1oposS2OqCiP33j268hNed9%2FovXxHP7orkim1%2FGCi937tuGmWDAqztYtzv3cEatqfv8LF1caQqmXNz%2BEQ0K%2Bv1qn9fhrDC7zr5fbZ%2FBFzERxucVleci%2FHZeOwioOXoJkuNTTAZ%2FYLRNmG93c7GW10wpCDjfh3bP97uzP1M0tI30zt2oL7SSCGy7ymh32vsyKRtkq%2FyMaMLvjuOtC%2BgJN%2FaktfJ29OXzP3JQobk8a9RFiCtEXPbcic6C1RZPzZfBTlUncQ%2FfE5t%2Fd5cnT1ECGYI5eLiefCAgRB1YDtkWmojgp3lsgKuJ0E8zZEbHPftdKKPCdEizOJf8loOzUHVzApK%2BgSChRng1VTekAqD3x678vDYLigmGwa3gT3pFa%2BesKQP4GoECdwuJ8lo%2BiwGF9DxyLsqR0nPo4w%3D&media_id=1254206535166763008&segment_index=23" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:06 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:06 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_c4WdQiv8LuqnO+Cn7ZsVEA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:06 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112648782197; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:06 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "33253acac9df6273309f963caa37c69a", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19929", - "x-rate-limit-reset": "1587864356", - "x-response-time": "30", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "0024483800056c59", - "x-tsa-request-body-time": "98", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"Yh0FbDtjn0rJvzr5iMUyhMxqP0o%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=%2FN%2F%2Fof1XP6LNXQJRWkzrvJGzy9RmZjlII6tqvU1SrvCBZQrKSK0GP45a%2BS3Uy%2B78EmfvsV56%2Fx9B3eCkjHn%2B8xtjsSy3bQi7tGc0cZyu%2B%2FiYgjNMr5aAxve9RsnDLNK6NvJckXr7iKTy97%2Frb96iRPij%2BKPryR5XSfKbf3fCyDBBrWkbcSW77vMOrH%2Bo9E1Nhvkzjf88cU3jxIJbQlwX5fp07QT%2FNaK52iSrpYquy%2F%2B9eUhpf71ffShItUqT%2F6yUXCsvjbWJ7FBQfP%2F4uEPPKMRr6%2Fxb8v54VZYoVavlsd3fgfgTDsZXyXIS3S2feBeMAkAQeQMWOhG2Ky8nrqT0VyvVgXwQ2r6r1a7k66%2FJ%2FRIt%2BFzEM769bBAF%2BsBmiQyJFihI%2B4q8KnIcSzgVwflG4GND4AAADDpBmikKSgV3ydLiFxkSrruvV5PVg%2FXKp1ruedX%2BT%2F9U632rnfWpqpVFF8vxKv2tV6xfrV8RXrX6v3%2Btfhjy5lyC6FKwbOXXgxKXfz14ccf4e2v%2FAie32%2F%2BcPlbl%2BNS%2FgIMFpiaQP84G0H4YMfGr4VsligwIkQg5%2BJHXjUR1Zm49VqGkg%2FtenXjlBxKKsOxi2Vyi2WjZR12c4QjYgRIb1x0u2nOfk8f%2BsIaqR7l3iiah2X1eX1cr1clwJwNgoOfTUVlwtxbi2WMS4KDfykWO8kCkCgK6OtTapER1UT7Nv4Ng0FOO%2Bby%2BW54OPxIesqjywHJYijMZzXUDCCBXgGREI3ea5MDAI%2BjP4dwiywxjeCwixYbqgwjMH19JrC7MP0iK%2BLgQP0%2B3K0HIjuR8W9IZ9r2WwLrxBCIYXqakBUSx92LpYXp7Pq1mtVt1UxXbtOdxmejR06VVIslqABF7RtyjPUrcJJlWXZsmAwF9QAQ2BhAuXIHnMn33kETIxDwMPAck1r2TxxDJ4m%2FxgvkDfXy5BKhgFRpgoPQcDu2TmWed4CWDyOUCb%2F6b5u%2B8Uiu%2F9DcUsl%2Fq36vXq8vrF37Wtj8QOp0hQb%2B%2FyEXsapyCRZhBXWgmz7TTTmhT5QBeECR3wHdamMsG%2BMdCuXNwbcu%2FMC5zgdMVIECpJfA36bWTBWRogCSdIT3irmEJ3SICH5aPa4vulN1xABRCAFUnRCOzfJazDyKAGc%2B3mAAld5Mv009NPTTwc0OHeDq7l7qnPksdeCEp4wx2Di%2BPcNg6PkHrw3hTlq%2B6vuvRWMVv9SpfrqvXKsuf16T161mFmBaERF4rnUVvfmgmI7WRWeqBWTKYFZyxO1AgCeCItVp1M%2F8f6BVBqQi0JJkW1Liiwa%2FfWeBsgl%2BsDB%2FXjj%2FrrnQmpLXu%2BfuXCP%2BS8V1V%2BryXb0jDBoQATsoYcU46NWG%2FcFg2WBGCx6IaGBkEViU5BCHPMLEHjIYpVP1U7p%2FNMaoXmMPhN8eHzaKnUie7s31sskmWioXOpj5%2ByJ6ZJHiHXyS3dXVz%2Bgi0STx%2F7tFY5TDMH%2BB5Ply6fQajCRpF0yHAKejF0skGlhItoKqFKm%2Bun7wsWKxuI6IabLD%2BkNr9S1d%2FrV%2BrHzSS9r36sGKWvVia78wQ5ctVxviB%2BKAMUaZIOFORYx0eL%2BujHy7br%2BcaNUYnE7NVCFLFIzcbh%2Bh3JrLxRKLutfNO%2B1XD9KJ%2FqnYAzhcg6h1FNJExG%2BOmQZOEGeX%2FL%2FierC%2BixpHHvjrWSmZqG9vstjjdkr4xCzYvLSxPWozj0%2FrpQVyleaY7q2gI3ZINV7nv3L%2FJK8nJ8sl1TXUhNS%2BvRFmNl4dUrJ%2Bf2GLC4acjXTU1E%2F7cqBGRV2eoKjWIHxLgompnjkUcvjKauxoRj7LajxTNfEfYcyNx7cwrDTP3FvvsyBLDW6YVku233ILsOodEB4qzq2P6IHUvlW%2BXvUf80t%2Fl%2BnKWxs5v3JbLC%2FPIRKKLrg1sSzzBYQi3MzOe%2BEGg2%2Fv2wUz4Mgs5mIb%2Be%2FM%2FcinHGIueYBqD5Gczzvweny%2B37%2B4RjjfQbLU%2BR4YfiUoP9xNHbhiOo60eYj9C%2FVP2ve3Ip%2BTicnh%2FHgkLu7di%2BIcEOYhwubFmy4XKvwBYQYFLpFzROlhEBrAUwUGVVSVS43G0wWjxAYMq2lFcB874t40icb74zuIHHe2GbUwO8ZyxvTp2guUhK8YEfTNGpwrjo%2Bv32Hpu4MDMGAj%2BGpEA6LvbaMFKC1K8gYD7Vx7OdMfocK3llCJDkEGrIXxLjy8tFdcnpR342DG0p5j0ZRCEwfB3djiFOud8DwW2NcJwQ3OFoF%2BBqn63wndym8yBU7Hr8MEgjd3a7aDpCfXDj39WWGPFYLyTNtKZfjfdSqETxkdvwI9yH784S3fevV0SWw%2FlGDfqKJHEDH06f0J7uW75pH%2BidvghB4BgIZz58WURLZY3PhbvWYf%2BoYUHSS5a3cdInX9OsAr2YZexW%2Bovmw2C4g5My%2BAj3LJ6goBMASAIxu683gF9tTAc2A4dgNTEBwMyH%2FWNGg6X%2B0BMAiaBVHgLk1pVKKjxoYEGP1f20q7%2B%2FkiyfbEpR8fvJ5f%2B7cbZI5JsG%2Bnu73fvhlFT%2FJ7%2FJQ4mT03WqzfaEy6iG8vtvBIW90iu1367nIgSmduCt5Bt7vqewQ%2BA254eoru43l%2B88IwRSGV%2BO7h%2B7R%2Bku9qTLJn2b1lOBPMINJgrLYuKbvMIf%2F6CRi%2B93d9YLxF7wEmUCKOyfQDSBj3gmoqkYyRJjmBQLaNIcmK932c6wwlAasWP1f2hbd7XseKgqpZ5rN1E2JVRKrWhLCpT0pQa8UhAV94341%2FX89cgyMFw%2FTRLbF81hPrt4AxNr7v7%2F%2Bn9R%2BLyop2SmtPJ9k%2BoIePadd3yxPrKulenyQ7rQdEyk3fie4GgX2bJ6772VsoUREe%2B9P7dRBdy4ufcXd93Plon9ieoVh5iguWZocCiNZ7eSX4quT40uQPUDSF1yz0RMuY44g1OaRLIyx2PYx5PaSgm3KXl9e2EjDr%2F%2Bq%2F7TJH%2BLu1lUepVCUIEzbfsY9NPuruNq6vtH9LuCQru%2FVZD1ma92hHbKwSGoKPvnu%2B9lOLPl76S79TC%2BX%2FDgpuyTUyhnMwMnjnlBaWRTc3%2FYaEevyFECLu9ZBAe5ysPGP%2Fk%2BV6bDkbLpeGEBDqY2ZX8eC6K5jczWvCXxzl2VaT48%2Bg3iCZngXUqJSp3jg9M%2FsWKqUhClOJsG2gnly99oWzu7%2FRWu%2BOLW5cvP2W0%2BvVu8nvlv5PDrxBpf6ZkXR13k8K63KG7kCDc%2Bj60X7a1fte6snh132Y0cy%2Bw1lON6sERXLf1lajSFjQ4sHmQcus6wSkGOTxA0wh%2BXLTfKYgzQMn9816wBawApvTBbgqVij63OGAiTgMfRGmWD1gF%2BeECQAxlC31gDlFRsx47JST8KIECUFXGW5KqWgZRL50jiz92%2F6b5Yg0NDNkd5Ps6HueIGF8sxwyLUWgdyfqMJnTAa8XqWZfOzeQfJGpUcUYNQ8wb%2BCU%2FQIZZ8gtqmT58TLBXwj9Zse%2FtuPVBBNKnaoVPk%2FfbsMCyDCXKpuVBa%2BUah9972%2F34rN61d999999iiY7p9o4gOyQi39JNZuMdq5V%2FrXffWXu%2BpC0d24gMihEQghLh%2FebNzXGxo3J5CgQlToQII3Tmo%2F6ErGoxl1TITrz%2BB2sSgyfkQRHuFDJXMiJnYRSg9ERvnus0NRYlTJM1NGCpEfgzvs2yJjN6oTHNYuHoPxGjlxJT449f6HYVGhGUpdktZzS%2BvRlyEUvsjg6GYUErx0ylefOIDBYLSd5XJVJ5DxzkIG2MILgJM97A8VsOvtNFH9y1yTCvvdQdNYIZnQj9MFDpPFDBkxBsxUDqbMmLSVriIuTCZzUF%2B7FxcXNiTMaswXyloop5PzyRsWcQOCsS53feFmERIvmaF3Lt3VLf6K9b6aw2I3dYwNi5f6pL77vyiTnL2Tyr13LoQ5p3QvvaCZGiGPLn8ElMtN%2FwXiK64VnDueKv5PjyVBFgGeO2lyRBc2Mnbbjb9J%2BCWXSHXie5zvJUMv3d5ZPkNDRcGXEGZZZXCwfFh%2BoNRMRFMUy3DEnBPIouPEgluyo7hZ8UxPG1RBRAQoe7T7iHrVeeCEQES1iPdwdWDqykHtD9oZxI4I0xLgnhTq%2BqHQqPD7LV2QFIoKKh6B%2BHbB3wPzVH8vXzgDzvOAPOPFLx9BO36xdz3699o1d9yXZPFfsXJ6GXMxp7tRHQCJJkS%2FcEKiJJhnOdtQ4npNHuvKIIiZbVTcs8lmoCxOWtdzWgVX96HdYtD%2FKUuNe8Ki8HbKRbxM6x0WIKTJjyfYT5MpDqFSr3SBpDIEAPDBBS8snfRZsJkfNnLgPPJh7gT%2Bo9k4uXLbGXI%2F4uXg68ieXjRMowhZxl6amylMe8Lm7%2BkFcquT0Wqco%2F%2Biaktcr8Jk5rd9%2BCuyv3d93OzFa33fIi5VamFUXx7FFp%2BJCHNmAZ3PHCrnSgPyeK6gSQiETR2L5c%2BStYeEhcSNlEWg0ZD8OKGoxQAMe%2FMG76vW7s89t2v1QSRzpCOfe8FTIfJ3degrOrpasv5v1dX%2BidJ69J6K3lP8v6IxLBNZPTif3hFAwBYFDPxf%2FlfWiD8eOEqrve7eWy%2BNL4Kx4UFdWvjXu0sttj9UNzWofFi%2B2rxPGoAAAP%2BEGaKYpqBX%2Bhby8VjFw6up1qUv%2FvJ69Xq%2FsXxf%2F%2Fv%2F5f6y%2B17%2F5VY756u38WrH65d91693S%2BJX3LS8oYBIS8FZ0mNeGw0GDXxDId83DMWzmd4H4MRx7nDHGVaMNeGA2eA0AXC%2Fm5hR51K6wUcFXPPW%2B0zNGxwBfwIaG94HUSHBFS3DFbOHBVx8c6b%2FzH0HTY60lqdwoPImJA6kDWs4TIL%2FHyywYr%2FAVIVDftw%2FsRhpt%2F%2BTz%2FwR3ccZZhKO0L7voj5F6vX1bq1QKa90YvSX8q9%2BrXdXVrFbxcdBOKSLHfLmGJmYBgJQbrY0p4G3x5f%2B3ErV2lEqIjk%2FoRNVsCR58BZOgtKsigOMKmRCUxd%2BA86CvcQAA%2BAyEAAOAOvv2r1UHwGOHuDX6Z1fTBdxDkHfMMAA%2FAGhgAHKAuL89LzbjrOSxVyZrSwSPYwx46CUHFud0e1191CB6EGQkdCrLFLLsLGdJjLLFjt5ieLqrpBI5Md83DxthIr8jmju3MAdaNBPzuZXC1GPK%2Bc8cKIPKgxX2pdj7nB1lS1v8yDOgmLoPxpy1DXFa9Egy%2F%2B%2BAZzdjgkCBNA29lL3dG0zvzGyiAP%2F0O2mlbW78NjQZNItc2hGGwLLDmkXQtHcISdCFKgaYIBgAEbwT%2BSIriqlcdEKPL46nSfniO%2Fl7r0J6QdpHFJxKsVa1%2BrVf6sfNd2T058F8hD4k7wgiA%2FwBYpLZvt8yj%2Fj9AqIB%2BQGGYtiSZxLokd5q7FX%2FQLM2OzBKQiaB20HG3GZZKYvzRXF3FBBQM%2BXtn6Dc%2BqR60xW72O8QBrBwxoQ%2FqebAtkw%2FdR0C%2BZENxh%2Faxvqbo%2FNj%2BDtB8%2F%2BvAWQoO82NKTNVwc6HEidQeFq4gag6HtzzBwMlJiWRHRQil4Jc5UTl77H4AtAF6TiPkxXil%2BKwkhNfX7Xrpfpa5FiRX%2BtXav8X%2BuWT9wgDNGBNyeooCLK%2BwgDi8a67hRnVc10X%2F%2Fr6q9Czpfr0Xcm6t8Rx15zDAkAWUSPBoQK%2B5Y8lRQGOqEUpgDCi2%2BcyiguuArAkPIvZf5PA4EooiShxYEIDFMsVwIu2CYJDGu8C5p3Y2Q2IFMf7%2FR88vX7EeTXSH6kHLbL%2F%2FL6uSerXKi6yevxzHCwhgC34TH%2BM0CxvXz9moL8YFm%2FEnv4JxWXgL2oG8fg9EdjzUT1TykcFOK0ILKYIzuHAWMWxnyq%2B5rrFNC6k9a7WKT1blr179erLr1jUT4wRwsYGIE4ODBjRTaDiwk%2FkgBpwQM8Ekj4cCcfzdyd5E2YfgGLCxaB%2FgefhIrwp6T7L%2BoBnMxYNk6dngGAgCJ%2B3jnctbii2UYJ2nwDh4ukgZSD3zEdSNhN6D6Yfo26X5v9q%2FspxIsZHkPhlSfGe%2B5RZQUX0G1do2yyfSiDFj2MJCjIxvYLqW4VTJTq%2B2WnLLvJlovYJolwJU6mdrAExcdv1Us3vR9Ix3WhPS8T1fPWTJPLc8TuU5AQE55IpJiHMaNxLzMWgoCJrzgm%2BprOSD%2FJbRxmDl8SiEnlBBZ%2F4g5UmeK519yQrJ7mB1ERcSFRCiWy5ENRhe98pF6jsIlX%2FercPj8FXM3vfCJ4CoM6X8hpSzcWx6LHS0FoZga2fd%2FoyaXjD%2FrcOlCpEGWCLechg%2FJGLVdT4jtfWuMshQet2Ntilt4Y%2FGilGp4dtoDqbLUNa1ERthKA5aakVA3ygQVZ0C5z6NCOgT%2Fml56GOaMNzqa%2F5Z649GoGA%2FtKysF8tw0yd3LRfpw1Pd%2BrtGIXaMFUt4INTaP1%2BtV61fFgkLxD304EkCUEjbu7nv69nF3Fbu9RTl%2FwGeDIAgoJNfCZeIcesB4jpfAR8WTd6wEK4u3ywsg2bIkDgkOY5yzYEibiABJZA1OYF%2F7p%2FEI2tmPmy%2B7T6jko86YuAjP2d7p%2BwvcNLi4nOI8NlKrx%2FcWooMw%2FXfoV8%2FXcO8hkII5TQP2HJV0N8DbpJsXjJL%2B9%2F4xnViwK8ZIzJ3g%2FqFji4g83O%2FF253Jho6esZu7ibuee%2FVXyeqQT7YIMCD89z3SLtDQMq5rbNHTNSbOBjwna7OsLuxpFLScgsR7h%2FqOA8gyYvbiWOCwEjXTj1lSHtJprhtr%2FiEG%2BCm0lVImf5f8QsFfltxCy%2BbSHGmParmGPyx30WclJ7uq4Iy1cAZVbuu%2BfLJ8pV5CbmI1%2BDCYfQNd51NjWVsdSp9%2Fyef%2F8RXJLzd36Exd7aGAhJcsc%2Bcd34CYJl8AiUB0E5TBLiu8JnAcAoX0xXxDnARQsbdRI%2BsSeKAZeFg5CgxuXVw8%2BZ3UbNP9QqUUAAlEgAEqDAxBsiAdwUE2CTIlZ%2BIFM%2BlMj%2Bf%2F84vv86xK%2FwQYSPu7XQKH8zyjwN1xmpsCAqx7B5NMnzIqDst%2BlXTqHyO1BUqWFU4YpBNR9Gy0%2BVOJfNOIf1tOC8pYgvfVtNVYWRFa7E4UBYbRJGij3K4fNLyD%2FzM1FcdXVUl61Mf6%2Bw0Jsbm%2B%2BPY%2F%2FHkfvY46hy0TQ%2Bgr887R%2B50f83yhkgQDbjvZr4dyoF6lcbg78l8ggZzWzHtGlw46e%2Fw5qf%2FhW9jS0RoK1KSLkL1GV%2F9WViMpK6NgxZjPqnxHHNYw1LaESU35Tny%2BE3b%2Fymufibteq1r9e8dl9Xx3ScBpCfgVxbu%2FwPfeAjw2Aa0GIocKp%2BC%2FED3OB8n7pNWHyuamA7NrKGM7UgZIAA0IV6M0QxI3%2BkfI4btiglf%2BEIBZ9w9a%2F40n8p59%2FDx1OInpmF5R8CJ7H%2FeLDghLfKHeJ4WzCZdtvXqN1JZ8C9afwSqhGt71j1gk4fy%2F%2BqE%2F3eGzO%2BvBA3vqjeVTWlKCggeZ08g8kv3f69vtUXL3Xt2aa1a%2BwUdzmOdj2lcOnd7ve77c%2BJ%2FeSocEMqZs78umeJtyGV7qevjZH13f8MLquq4ye0XK7%2BJkwFQCnhaIMivk9f7BhJgVZXj3fILHRzsUf1DolUCBJUeF1Lq7sufc3gkN%2BWphH4%2BfPUMW726BHG7nQI4bdl9E0sNEffVeJDyK%2FvVM0V30tWGtz4n%2BUMIuE1M%2F%2BoJSpDEqLmvtO3sugX5f7NUw%2FjctqP4JY0Ts2bIwYJreWfmvSHklh0zqMPUzB3kmXTMdizmxqfNkv1JuCCE7g2gQdJWY9oeyQMcYIXt7uoKG7mhVzqxkrCqFSHdLltbfxtrKbMFHDEtOkTVBRECAvYqR3VoPRA56uH%2F95Fgrszyry4Gl9aJq3iCuDc4rSz2%2FgzkSGrk5umq5B0vu%2BDAnybJ%2B%2Fa5f3bUEwzH8bskwYGTD1D5y%2FToMxigE3sNAVolVMgwVIzKdQgcF5PbC27w3W7Rxci1wgUWl%2F98n6%2FpoXmMnx14LxWdg8LlDXtmoR66wOiQ3vGkxb%2FS6IjDQya1nfO%2F6GUhQ0JjlXwyJu4NfyFOVWXV%2F07QchVLp48Ax6%2B73wK6XTGJ27ELCgSNbn3SkP%2FBBw48kQFWDHSF60ZNWHdebIDWr1RHGvqbwwIYYJ2m%2Fob8lWUI6XpUtVkjSG3N2fwQC0g4nm%2Fd4Ef4D3%2B%2F6%2FggpX1%2BT9bVvBfSjRtZBteoCad%2F1TyUUHtwgcH7HEVYkp5LWq9FlXWr%2FP17iukqS9dYJSbu79cXk9%2B7cNECqrjaABF3NYSMXKvDX%2FLu9LbsORwECO51aITq5hf%2FevoE5ZaQdl4WUx7%2FQVkdof4PZRaD8X4H7R%2B5r9P%2FwQyjeK4x933pksFVw21rAlGUDw0%2BfCNyNbGspMMyshWCqwjqGoYTrAm1%2B7fpejGY5MCn0nvr42WPKXxDHvgsiYmGaf5WGJpHEwU5EfQeaacSbXbArcvWjVPd5xh%2Fl9hzQckGiGep8Nnm%2BAordAja0%2F28CiDgzrOsIOfANHLxtVp3F0CXGBSBeD7U%2Fk%2B3MlYobdo94S08UodXdq7wEhr7Zz7huddIma5%2B%2F8nuE5GSJMML4Te5enNRQQL2tdvwo5Vt4%2BBC1zNUptbK55u%2F9oX%2B0LVXckHqfKUaXgZecT9N4c36oaqKKAk5Hh%2FgjnLfQYSM%2BTZTS%2BygoF5iPXWE%2BWzf7M6%2BrdFd7qxdozz7q9a16Jhl%2F5cPXe84KjJCIgoIPxYLUggJkR1H%2FzW05IS%2Br0oSwTr4TA%2BnsiZ8TR5bdSCvPV%2F56%2BMvVxD9ghvtwfljTW2yXZy%2B%2FWEyrfxqXX%2Bv%2FpHw%2FFCNBvGDuFUY%2FuNJXcnDL%2BUHDzxxJ%2FAaI2K8bZfPBTRy0lMtkhy%2BUepnjhDlnISMkuQnbyzo78HVBtRlVYXSLpWl9JahGJLL8D3fk3AIl792rvkPvAVNchbOowt9RxH54yapOL1DkvuYeo4QOxOaTRLzbaicEbwkrjDZxuoFXBidRISG%2FJtS%2Fsn3k1MA0zUc%2BA3eXcu6m2nsXvFd%2FFfG%2BUToxI8ot4OrGqu%2FBCE69F74ivXvKb9e75%2B8v97mFQySBHfdA67RA3jkBAV6wRZhBx6P7Z4QvhYoE%2Bs3U%2F46r6dI4ZvD2CDCqBF5drZP4IOWO58fXKIborP6MIs6n7Vh8OFRnyrvkS41n8JxEjXdO3rWyEGoj61Ed0lpJdSkEuDfe%2FTBELfAJHx3i1%2BEyMz6SW%2FcFnhlimjfbux%2BNNe3xkEBSz1OCzBSvkZp%2F108f86eu%2F%2FCMGUQhtUR%2BIft41N5qam1JAwGbC20%2BmFZRfl7%2FsvNBHmmBD96wfb%2FxcKkPAcEANLMGx5Dzwd8HTxRbaz630kOaPjnnUKCfjgaGw2DzwcPw%2BDrzqlbCHBy8FocfB15iBoDZ1JPJVSnhHSiHxX48dV0pWqijsFh4ru%2FH1Cw0PB6rKrsn5xWAvYzPnMxbFbtNBZzx2xqXwKI8SUKmArEGDJcplyb0quzx66UAkXB9Jb%2FoJ93Xr1fIT8%2F%2FUllps3%2F2Ck2fD5ZaP73S5f6bbG5L8%2Bb2m4XOx9gYR3ogUVfgrKTIO3isS5julsdgkqh6c7Ebpvn%2F5t2Psvd16I7mzldlGFidT9ojntEwKtr7xUy1l4V0Y2PJxHjJEoNfG5cX5YLImxDYUzG2P2RA133IIuKCUh0NjRAbccTNhiWkvxQXpCCfwoIDHA0jaWITLEs%2Bv6RNonCY4XZBZ9tuSd9ToyxZOA3zwuSDK%2BKFBI8oKXBvDTLdZ8JDBFU0kh27PiMM2J2Yh54A5WBlGhkcMxJbnfrqi2DrsOj%2FuIODFUYAMHHZzSaC56gM38iolMc5gy9OrscB2yGAX8z043wNKeHr0OyARi1AHxDotZtaNyd%2FoKsfS6UNrF3VrqvECD4%2BK371bBLEOFyfMVu56kpmNfU27Pt1p%2B6sVZt3snn%2F%2FoTKkYIfLuCwjECggXh%2FjbTMn95Jof80XJlWH3qfWTW%2F7%2BPCRoX%2B5c2UvsIz4MTgpu0qv3GgycHGNYvLYFB0utYnglGqmTqd9vt99QUNgi4zUs%2B9ckn91F8SrF5NSzK%2Fye%2FLufx2%2FpYFce4jfTD7KWEju9wwCAQOfnF%2BWl4KQnh%2B72496rGlFbyCivo54t%2FASTUlCQVCQkCQUGwXCgmCgmG4UCwYCgREYVCJDCoRM5vvWepM8fz%2Bl7%2Bvel4vfn4rfj4VTvpE6Du7%2B946e0%2BNN8W5o1Oj0%2FcuJ%2Fimjeg669hfn%2BJfxtLov3QvpLay%2BZf4I0aDlfQm%2FtX%2FEP8YsBD3nJ9nwsvZW4YAArns3QHe3AyzS7oQB4HqAiY7eM8vbokxKIWWmlQiyiaUQtQeHFC4Z7Je%2FtAg1KzKIyEa2iqC6DaudgpHSDgASwUiEgSIoUEwVCwUCwUCwoCxXCIlEJFEJm%2BOZ167fHzrvWde8yErz8Zz37RWZxSXodvP3ebj4%2Bjv3bjiI2%2F7JWFa9uf8VS0xo6yg28DvguX4hzKstGCPPqnVZQfzT5984UwvXu9n9SmZFvZwqfCxNPl9XnyOReYKsdidN6QAPX6BC%2FH6OWuPVA7ryidBU0B3%2BURMToGz%2B4AHf7DHQBWyZZdIVWRimFb3iJoYxRUHAEsVJAkFAkFQkJBKFAqFgqFAqFAqFhIGAsJwkEQmFgqERmFQiZz8YrmvGqrd1qt4tVX9X656a5NCcDwPb0%2BLt6ezi%2FIean9u9ErBuzH613H%2BIeLSLVe%2Bp2cwYzbcqYiyvVf%2BKF%2FCVs6h47IHPN%2FPrJLCmDHfk1Fn3m9b%2FvqY8ig2rMSRFjogJz%2B%2Fv7gq9lHYoOgXKJ%2FHewLg1oW0S%2BUeEHzLz4KV%2FGKk4S6D4fBANP21VVkJaL1smdZpoJRDLOqkMARrOoeOcQcASKZ%2FZwWSmCqFPE71nnu686GIS3xrYw5h7n5lPglVcdx56f1XNs3RJK95d9vVAXjtlWidNEvpm3CvnD2Ru5f7YPEHl2f3WF%2FO0LrGpW%2F29v%2Fgl1%2BlPR6KW6XTPY2Aycu1JRzC68%3D&media_id=1254206535166763008&segment_index=24" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:07 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:07 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_fwRCRWovqdo11PF\/Y70SKg==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:07 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112706894255; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:07 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "b7f6f96fbb7ac6f84c67e4d6a45d66ba", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19928", - "x-rate-limit-reset": "1587864356", - "x-response-time": "28", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00a1084c003c2543", - "x-tsa-request-body-time": "97", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"ISjjOsz1ZBKv5d5MUGpJB2bvRmI%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=mVWvcm8SaVVEde3PJjicf26oJYQIHcFYVUXnORYUeGKITV5hUdRK8%2FIrUbKYkTAj59EGO2vkRjr9Ol9Xf0y%2BLOuqjtjroMcZTF5lxv4OTh0dt8np%2BNXKPbrnLYcuSKxa3SeyyxPe8cSwtMwCFyMyo8Y4ASCZ%2FZwWTljBYqRLuc3V8p56AGLXE1pewv0Fb2DZMnGerv%2Bz5LS%2FDuKiL3T7xvH9VOVUYMKtE9rBXb8gFEM4fF0morDwr%2B16PDG8Zzd5Jz6D%2BKckm5bCrjM2zyifLaoZ7gN3RJ0DiQfUL0jfiR1cOJsg9ltHWcgBRLfTopX5Q1%2Fblbr25XX%2Bb1miydzSCSluJE0ZTkqZ4w3IUx0wOLaXQfMjSZjsusSYkUQBZgztaAc5arUDfpkJA6i2FQFezM0Ac5LKAyti9A6fGrOFAAChYsldXA6L0PsngY1zAqK5jKI3A15jgAEgmf2SFmpZqRLtl1XNOPoGwQ3etdxH2AAWT1%2Bo5tsl8pABINn9rSi%2Fw%2Fv%2FAPz%2FxoeUTJ%2BB%2BNu0O0aINMR0zENKPIkELgnEhhb6ByjVcoteaFWTnSJkkjS46pH0nV9p39Z38YvHyXzqb58A2f4paevIjWClr00hPwOlMQy4fAWuO87i9%2BeVoJ7DnsY%2F1dr3KmQmf3HSfd%2F2yrLdXJLVuejyJIvXe6UzgKZlEaZYJyiP0BH%2F3Lv3ww%2B3%2BpKIe20GD1%2FD74NT2oHTUDv4wOzjA6uIfu4yNcZHs48hceQBzEhDQXHaBwEo1IjqEjIQwqMwkMQkFAsFBMKAuFQuERvGuN1u9ueN1Wt6zpuiuPFNzMuX%2BMew8%2FbVVV48ux0c%2BHlj5ZHXua9uHFWPaUs2VrG%2Bgy6yk8FQODlM%2Bo51L9K0aUa6wlWSUJ4j%2BWAqyBY%2BbtN0vEn37iFSohogW2oCDug0vvVc39MECwFauS%2Fdq%2Ft6cAhG1c75DJpbFnRp5lpwqCvuzJsrSpbek70QZCK4FoqHDyuv7cNsBraGj7odvYAI%2B%2FwdGCgACnACZaC4OAAADn5BmioKigV9CMtoX5VF%2FrX8VdUXxfP%2F3%2Brd6f79%2B8nz%2B%2FAwN2rEnq1VVRHawSer3a94EkPBEdujfeSb3wIoYBBy44WS5fd%2B8VgkoFKLtMlPpw0JF9wZvZU7QV5H3DYnGv9gMQBcCwsjbwKlGbfAjhvwoMBR0yxzYlFm%2F8T9h2sInWeHAHhGQnWBMKaninfsBW17BrL03%2FmuqoOk6w7qWtVX8DjCAxx5wCZCYB3MqBnGIXzaFsVxC5WO%2FMleOW4%2BptdS9Rf%2F%2B%2B5C%2F%2Fr1z%2Fqx3jsuXaz5QTjC4cOCB5YDEDywHEuDBjeYew41642zNwfyJhXO24HTQUiaaOMGJS8X2x3gLzsNdmCCCKvpyGO1e%2F2klBvywgUWCRZO9Hk5J6vbqBSYBWGG9y4rzygKeNAFIDIj%2Fv3UP0eYiTW65zc1pS8Q18W2adYkMAO4CuN76cODxEUdzpY6mc6pfoWzxxIDatjq5ScG8tzmMmeJGxNkd%2B7ZT8qAS%2BMzf1%2FUtXLpwPxOHngDy8XLxcXIOmj01yU70gHHD0WN30fuXnDkSrRR7wuXzIuLiLREfq1%2F8wWqU3DHDLcdzYrza%2FdfvA1hAcSBltV3JOlp980zDjD95cvzrL%2F1CFgBBgiQAYUQOMgPuQANzC8RTrPAAWO0d65LpKHd3An369yF%2FL6S9v%2B7Xrp5HYC3BDwCDF8BzDIawav3ucitXz%2F8n4D4JEEhgEIAiwBeh0Yv970hDjY3uBIKAUW%2FlHW3piexrqwXwwUFW69R9h3J1WtmYm4W4KX2U%2Fvwoq3o4QCQw4QE4rIbOOpwe42jxxWnAVkwVzcf9ArzpQCAQP4lDLLAutt5k92OOEFRgZsD9JClYhNCivCCiRwDDMD9F0HvdoGtL%2FziQqUB3YZQW58NWO8%2F%2FFIrvK177rlq1i%2FVv1r9e%2Bl6b1cktWP1at19STCPgDFRo4%2BVMyDoXF4C%2B6lcyq6uuuiteoq%2BTzAiweAZCAWCXZg%2ByurAF6Aidd4Q9of3atcWrvav16ue%2FXqX6tfrKT179eq%2FtdUTzCoFgWRxDCgwAuY2rB3nA5DBSBSSSQl%2BZqywOJ4Q9ggMYqSBSS4epUtvSv7WSeFMAGMakTbn94nDGJTK5h93Lddrn7hPMSurmeS%2BxP97PavQ3paJ%2Bl7gjXr9e%2FUtfSy7rnrkqeS%2F1PV4JC8AVMZy4929ZQUDtPBHdMIntHudK54Dj3lwk1F%2F0nLjJB8v5ckkvoX1U1X%2Bp6smqu1cHuW6L%2FQFQFIEwEIsILD34njsjO6Qfyy%2F4HI9DfA4sJevGqAuk8Mjwmhgk%2Fg7tTQCN4jF%2FAhkoMSGgdEicvA%2FSlE0i2FlZygqG3xiUx8zVQJxNi3TTIoVM5JI4DRiZLLTmKCuLdHjph1p0ph89mNt6qwrvG4D71pxJ7t5pEhLnDKeJj7fu7zHUYJRWJX0sTXoNXEL5oIJpu%2FoLSEghaaRvyDS003MhTYgsjd0OCnHCH%2F9Fr3Wv1qW%2B75K9arQmX1e91YuOQME4dWb4%2BMkWQ%2BSxH3nI%2FYXIHB4FIoFBJgVLQPLLdBgzQJuJaX0URAMJvO5RUjxmZfAqhgCSFiFwSyhsHQ7tLoB5H3A761cbgbXpfGxxeFU8bePzWULywDrCogaj0%2FdZVovkQF7uWlX%2F8FhR9k8l8MpmbmDf71r3BCVe0d6%2FCpi0egbaBjYm1xtXw053763xFzLcYznbZfWlgpoH5lqInze7Ahapu%2F5p8D6NL%2BK5BMbW7JCXcFfiGfbiRCTCRb7xVk1F%2Fo%2Bu%2B7uXB%2BEvAohom7ivgWQQeDMEDFXvXxJbu%2FgffgYRJj8AZE%2BgnvSX36oO%2BMzNpwQFmAB6q%2FpPbZAqDcsqMvxvUt9w%2FDs9TjG1Zw5%2BfAiGD3n0C46LzUiN4fl2ziiNXEvDWwQaVOkEbgsyHNupBwdvqbPQ0%2Bj1HAOJ06ojXeOF5h3xFugxDFLnS8Rh7G2AgQxJszmnUMwCOiVp%2BQG2CStt%2B%2F40xbhHhsK%2BHzZfW4p9%2BfNfHGIrY%2FZjtGTjMneD6%2BhZc1C5it5ffSxBZ%2B%2BbxmhBVvggNpX3Cqy7DiSDH8EbV5QUvq%2FjYD9uJOJCrCAvGR8s%2BGwYe4RPWxONxo3QY1YnT2KGKe0X%2FD2aw%2B0yCfTsOlII%2BI9qkzr9BG1j%2FgjJP4fFMrWbhiWFVfdccMf%2FDp2b9m%2FlvVGQ2Nlj%2Fev%2BDC8Pcy9Di%2FLsryf%2BrV2r%2Fq%2Fkr037wqOOP8pcvhl%2BFx5hy7y%2FcoGYYDwSCu%2BkLrtOXLfWEosaNvfswJrymCRwKjlH1ewixzsNcScFP3u8DQrERcQTHhwYG6osTwe4jX4Lx6YbEQr3vsPyCQyLA9eodrBeyYOF%2BqCQIrTjD1%2BzPKGqvEo48mjTULfJ5%2Fucix%2BGnaf6YKSnGDB%2BC2UT9t7uQZ7YICXFbws02eDy2WAMUBuPNSKk%2FSKe7%2FgoIm%2FbmUOfuMKoc0w%2BSZ8%2B%2FJEEZHqizk%2F8RklTk1a2FTHAU%2FuWimV%2FUL%2BXD56%2B0OJyXee4V5LLSVjVBAo5xP%2B%2Fi0dPd%2FErXxK66Jn9W%2FrlV83wJkCeZtG7ye8v4gfd821DZrInAknSv1axD3qBZl9%2Fk%2BbKYFwFKg%2FDLkKMgIJBlC0DbUWZgHKwO6sxWhhe%2FCBko12xLK3jtPgGAxRooMGnWX9oR4WPoKVF4WKAlU9gXPd8FrWOHAJR4onYE0HBCBi0wtJYY3296BOHZ1I0buekMxwSvQglaABRIXQcfZfHBCevwR7cPWGBzDuCUbuiZMDewk%2Fq8pA0Il%2BqeCBvfX5P31w8SSOTAqWD3zfqQcIr339d%2FghKPE%2F0cXqbyUtPU9fwraVk71PX06Fp6%2Fhw%2B7r%2FDuFL8kNmoUZEptOPPnUA8DF8M8aLJ3UqmysORTirIpt4I%2BPM57vsfY%2BuLlrnvuiePAg%2BQyl%2FWgO%2BPJurvCgqHwa2e5y%2BOBBLJYVjgL5THJrJgAPPB%2BgZ%2FQa%2FXd51Gw8JaCBaMHjzkwJfLkopm8GRLboLGvhNqzwoPoV9WWSE8Mv11lJL%2B9813fd4Z8%2BLOTP%2FU5ap3H%2F8vk2WuubCfd3KxKxX56hhgFC3%2BrKQURYZmM6mxLJ9brQYLiBYN36S%2Fxu1L%2F7hKeHlgPWOX3fWtRfjsoxjVYN62p79zerSei1k8PwZCeArBlWaB4jov%2F0taew1hIxTdOfS4Im1iXjRWYpPC6ZaBgK3HwQnSpHLeSV0TxH%2FJ793h4%2BiGYTvCAXeJbquSpmNfokt%2FgjKPG2zXF1pzjvxfVjHj%2BB7Al4LOm2K5UEF%2BmdGWLtpV9omtOQK7nbCt993cxhGT6sEn%2FU3lz4RPhtnaqMtvYZLUDGwmh4D8MQohhCH%2BuzUxykqmwVbcB%2BMxsY4g2WjbP%2FsIDO7cZayE8%2Ft0Ux%2FgnGjjJd740CC%2F4l918ZwJa4sfr6Yvb6dF%2FfscinazEFS4Ryyy%2BQvGt%2FKRLdbkIMA9tYUg%2F0pf%2BrBJx5lu1%2Fk%2FvcsP8S5YFd48CxmgOuWo6Pr%2Fo%2FJ%2BCfBtyOc%2BA7WmPez8O07b9zGPRL6xB84PvOx%2BDCtNqbigHfL3HhJ3jPovghve34LSBj3oCY6aHl%2BE52D%2BgXMwNUjk8ytfKQMfmX%2Fgsk4aeMYSY5djYkEQxJwpgXL0ZsWSJazhZhQKCFdhAXsk4WvUcyhjfZHIHxYZ1liDjwAxIHmkifBYBlWoH3Mqy0PHwjbzOAaPkQEGnLD6nfz5AUh0x8vgqrpfT1GhYPnwPvMEoMTcb2Tb3y1TUrKpk3%2BT2Qnxo4J02weuHW83MlCSfjvkQMJsgm8zpKmM6ViKX%2FWGC5xq%2FgEGVWep5M%2FtfXa9KrLIbVcXXgg0DZjMpxqneVGT5PMONujMLmNR8QXMgYrh8G%2BXM%2BKg2BuOg2kHRrT7fC%2BF5Enc2iiAwdSCWtBBHFvyfz%2Fgm%2BXhN7n%2F7K8VoYvJjtfnu%2BSuJvy%2Fv%2F4jNiHRvf8FV31QiLXJjTFM%2FF%2BhbaSvHma7xEK6%2FX9KU2X1mC%2BQw5kGE3GsJbl1b5fIf1GCAq01CH78lgazy%2BUhR2KPIdgsfEG%2FLxV9978viBysJsJhG2oUQxkE2Vr%2FPXgJGbPStBBRhZVUM85J38D90%2FZ4zVyfUMaWJqOJlSzLzvNvWmoy2AYTQ0yaEmQ%2Bf4Ae0rxIDoMhwY2PBuc06x5IeXJPsUIBQK8Nd3U%2Bt%2F00E6pVX567R9%2FBopeD%2FN6c%2BvMrpbur7Q9u%2FXXWYVCJYdGevy%2BN%2Bh%2BwmUMoAG%2FPDrrBHmNHt5OVeivZf1rRpZfX1FUr93vXe9%2FoSZNrb6y8ZfFciQ4wY0jmLXTW%2FZBYqCipbh408Nu%2BiGUpatkJH3KMJAZvwDwysvlIKOT4IWfxGhFpmjQR8sTcRszbGhPwovZUGyv4SECCDtgqqR8dLkTTNL4cEFBCaa7upb6uUgziGj7tmunPgqj7jm7bih8SOfB%2F7UT6ZfJ%2BlDnDJDAnPwkj8BeqrLi1xRa1A3sI6lz6q1Xx4sYKfE%2FhGhKVV6btB3V1kN%2Fg9DB1ntBF7uTlvyRyVFpfEGz5lo%2BvDZXnt8PhDqr4v1lXnqRRX69Wrz1qwM0f%2BUiFlz5LgUGOl%2Bb5IISXs%2B9sVFbCeeg1r5P2iRDFRNTU0LOQH6nCHao%2Fqw2JBQVm56PzB15Y4aYXw6sXjvum6JNiUKnl%2BLicOhoImPH%2BXwGJzVLl8DhCECEIDwwIyepsfIHPgHUF0baMvR8ICAV53BPCao%2F1EB%2BusNEiD6BaoAA8A8wheVmAB%2FGQpv0P6a7tc9Op5Fv0u8wifP4IjzJbu%2FET55My5SZi%2FCtFi26%2FokFNUdIRGHel6RGgz3aaVM27Rd5PNcS1RIsnmSXqHCbmos%2Bpx%2FWF0SOoh20f9kyoxgYyWrr3NmXwRlybBCN6mptrmNlHeC7WVeqdLlr0Vy%2FWVzojSfcP1B%2F03fhd78WcERHHu7HgVx4KhA1z4K%2Bw7Dteitp3ukV4EIPA%2FrFgAAC3VBmiqKqgVzDIu133L69drFUX2rdq3%2FNK36t1r36xd%2FX0vf%2FKrnv3%2Fl%2F%2BEVck9XPicUvfa9fr3a1Xq6k4KQUhw0ZXU3j3%2F4G8LBQzxXdy8tv4pyrMLHuQTjXg6FjeFloV%2B358SeJDSIYJ4gEaDAiwaAzl3C5%2B04MDeU8cOvpwaiFy9BfL%2F8qGtvBEwFqCPVwQr805NX9q0l99475TN%2FuvWK%2FVz9W%2FVMl0pbwesE4hz8vf48uLszURVA1V6jkHGxXcVv2nh4wFhKk6v1z9Z6aIqE%2Fx%2Fnu7sP8GNFNHqlW0lkTuOzx0q%2FVl5U3FN1bYCEKN41qhX7pAcw1VFysI5dQ5Ijvky%2BPf%2F8vgQAhEA0CoYKH5cnOGNG72qWLw%2FkcdaCfal48R7tY2aajjsdYICg1QK%2BDLaC3Amk9t3jntjbyINUgfYX3dA6buKQHYjmXMhap8IjQpT357BgzIVVLdrvH8t3w8EIIT5PW5HvU7%2Foe18X8T%2BvUKWrXr9e%2FVphm6aX1706NEOvRNwIGhBeIfnNEsCXB5Mb%2BWL3TKGXPAiGBDA%2BS3LWSq8E%2BDgEBC5it%2BNnIrZnA2mHouapqVEsYczv%2B7vSFTL9YH2qlT3vlJ4QgmcKDVoVywzGWN8G3LDyM8usAhgfgWsYi6wgqTHp%2FfLnKCc6gKaIPdQXfMPc3oWxUGNUWvd9yWvfr13fr3a9JYaMP%2BHXnAWATArLw8EgnbPMJf%2F6BYReIUhBaKSlnB3k4yyxfl8CGOBcaGc4gg4H3%2F9YLxULo7%2FBDf16Ft2vVhHLQhPdetd16wVcl0XxxiFbbHjgJorWxYx%2FpYmtX1c77A0fGkfIPL9o4zjsE9d7kEXVRlJU3nJ6DDjpux4JHvSQ98Vy2sXf6vJatXEr3692vX6xT7E7gW4sFBsEx%2BOgQobtjY7EtDlueBr7rs9%2Fry%2FcSSsnaZOi42EDQaTpKk0EiNhzP0mo%2FvuuWvvpBHvv4%2BKtcognxyyAMsHwcEAHwN2UNQagMoCZZsFgaYlAAMKJgEACIxpR4EwES6ctGAoAlbbLwC8gKIFQgaQUYoxCaC5jxDXqjdxATBcXWQxugAbCAgKg9Bt0e3HMSCDnjBg6eOpgQRM2B6fTgZ3z139TZv6fJDosvZUwFbaY865zks1aDZAeugmG27%2FwnDidioFVhWuVy5aRUev6MQqfhEg2yUtE5Zgiel2ou%2BEM6mkMqlq2sE0clgQbHPWJRkbtPtTmlSO99M3wfo8XfRdfzr099q0nEr1UXdVam6RYIn2v4JzXPC62TucKx%2FLxfiQxp33vA6mn%2B8RwqRxyePvUU9Ev%2BOoPr0LPfiDNHkuwVEdiX9aMg9drvxt5SIMUy5G%2BMPL25f6fGeA0DLegO6Qfpk0l6c5B%2FLaLS18I2DMSMaJIx8uLwyX8OzEp2ySz0PzkX43G0Upmffu0frh1e7m9Tq%2FXqwNIW1gczAjhHe97vfWAkwxkEO%2FemArQhvMJA0jBl7vu%2FE8d%2FeDsM9eCctmcMBysQiY9tCAcvxXDa4GptSaL8I8vQEPwhNj747%2FnK3x8s9jP6pl89ZTaCW2fl%2FXwwRaflYX7FDKdTy%2F6%2F4uxC7EKcM4pLcv%2FqL91uv4SLNvmY%2FBCQZvxfD9SB38l9J30l%2Bi5fr2K%2FjF74kEnLghxjWFR4CeAhCxTuWMQ5UuN2XwFsDoDYOFywVSYI54tJOK7sawNgw4EsKEEuX7UIVbsE8PjMwnem%2Bg7i8HgV3Eg8Vvufzj5XNaP%2F4I5vfF%2ByIl0vsZbGKOdScnxP5ZqTGZ9HcfFEtw7TEmsyv%2Bvq8EpJvPkV2n19gp1fMFy5BUDlxzfqFbBkZ9AdNuJMNa%2BHt1gOBfiMsWqmonMhH4MOONYrvXy4MvT%2FOd33qJH19%2BrfrqIkZe266ATgNGFBggU1F89xdRTEfq1J4woEw8aB4CYyTt%2BIed7tiil9rFd5nIXJ3vH60hDggfEXLbl276mjc%2FwFAggEd6aadv4fmgtLGiZkTMxZctpiqOACkA25lQIR6hhKQXIxcynxsc9TlvrF%2BHi0GPlXlvSbEsNY3Lap%2BvBgLd991q7L%2FoQZPx5L3OHDnB4%2BWDcV%2BoE0%2Fljiv1TvElP%2BtuvNNPJn1crzUkO%2Fwt2aupaaktP%2F6vXcvr0T5IlwOwa%2BmbBKaWhTEnD5nnBfsnuF5SEmiCapD6nh%2BI5J6kFY%2Fbh3BrnWql8FomgKPSrpvB1Bu3epRTB8ID%2FbIu99%2F75NQRbNNCZTrwmynLdSX8F8JDd38Mo9fjYzmGZ%2BF%2BEXJytaICe5uv1xMZMl%2BOnhbjmG4E8z1P%2FLZ37Lxi3%2BXtjrWn%2Fnkgxq4ryYRMl%2FlELjgIT6O%2F5CXnhspQ9yZri6zVoT1WGzBxEswuxYcDH2LwrG7RPv%2Fye3%2F%2ByW%2F8UW9rOmE2Jx8Ffd5ZYZhVefSp%2BLFXgJhREHxzO7H84tUxKa4SMGHurl55bRdVYjLl73J6J1E8evDRI2M4GfU9Ux8i4f23kpEhp3mqpggDpdf7Oh3%2FVyrIYZ6%2BvCOlMMZMxoUHyZfqCcgA0d8lrnrKTI3KOF0Qn2sWGCmGkARsjn%2BXDLXw1DwcRfg8z2VRNAN%2BxZOxlCUqXhWRU6BiQY881%2BBB3JMZLf8vxBSkGxw6hSCVp664iIn3KX%2Bc0ge1zXj65fQ2Dqz0UBiVH9RhdwkdHJT7tPjvVWlAH60YIFzH%2F074I2V5eP5jQY%2FsWxyQdwyRDjT79yfvlLgkwa0QGR78t%2BKYLRtaqxg9QNaVFJOvdat%2BrT%2BiNVr1%2BKsBMcaHHzQ%2FF2EUlOvamSfBfvKQX6XfbjoL7TNPhzlpX2jIqot%2Fhe1Lk8C5aX5lEaFx%2BCOcxvJWH178upc%2FgnI9DlY%2BuzDbs2vgtNBL0zn3LDDflMINjP%2BjwYhkcmaQlPf98caLIKD%2Bp0cUYxp7G37utAH72zILoR0tp5qhipeHaBcUvx9ZIyfC3qUenGxRWGxmV0%2BQpHyVf2yLfNbfZozKxKxPJBfPe%2FjRs3tilBH0PCjjiwiBvWFFSFAqb56QFMuAVKMYWfXsQRjYrATpNEhgEsFUcDWrPv7cpnBwK%2FlstMJatFY%2F4YReXEqx5yVy3kjGG8t6%2Fk1O92tPfkaE9Vq3Sq0zwr69kzkF9hqdJHTZrGBIXDv7LMH8htJ85VjZpKZ7BDiOn9fZPTX%2FyXu69EK1PXBRL23cuWpHcfIJniy1uPu6bCtEoo9Kq95PzczTCIq5KcEGkOlg08%2BGvp%2FFpr%2FVS%2B7buEqtkrifumXL0pxHMQR%2Br29g70gjEbF6I44TB9%2FCMQQlDoOrMNMVB2wtlN4es%2BPlpK14lOmOrAdsRnG%2BuPJCnLfgspMHlgk0sGF%2Fi2zR%2FPIgpz37UGoVKtRD3MLF%2B4QNGHCr3wfYD%2FGjAT2anLwYDsFkuLAzo%2FhHRBRVWq43QKjBeOoikvfIGgyCc2Fh3YuQWMxnuN3clof1evX5xHVJT%2F4Ii3J%2BDvX2rn7rr8L7trWq%2BMZwChdm2xz2vBFjJjwZfl%2FKQ%2Fn9bglgXUrGWRPmxOfXh7V95UIJoNVIdu53YSHs7hE5fK%2FEfFfGcv%2BFI6UuB%2B%2B%2Fk4UAaqtCk9VUGsSUURrsQPBj9HjwDjJSxUvyqFxgcQRJxtZB0eAdzXu3PH6gr21XUToF%2BxiCemGs1FAAYH4dcO5PQTl%2BsWT0%2F9f99zN%2FL964IhF2eD89vhxOF0%2F0Vn5LRqalXsnx%2BqKVqtWeEXWJoU%2B98WSGPfNnWGTljbj3cl6Uu0ykjnxtfSTabrGvDpOeI7YO%2BBiWCwYEAtMcw3DoWLzbbuYJpxH6rDZ2lIAidg7qKV74ABBahXwrQf4pgiHxlu6ZLW6kTruT1l%2Bid3%2Bi99r3LJ5Sl%2FdycqN0j9yFfWsnBEKaPn24bARIXBUQDO1Yl5e67u7u50ye5YbCWWOJswar2Wq%2B7wAAADeBBmisKygV%2FNfoT1er169%2Br169JdepUkon5li7Uic%2FaLFUJqlyeiFX%2FhgX6rXr%2F%2F7r3axdycTdyXk9f%2BTARIVw9MAkenHv%2F61zHv14CXHB8Rd3e%2BFFZID07Hl8uX4Esw28MssWp4lk%2FZafh9eQVdoAxggO4Z46DtybiDpe%2Ff4bKIc03CEyIKjeB0bd4GyH74dL4CPBLQ6J4X6v%2Fd16ur1fCXVP%2BT1ddrB%2BtehPfP%2Br2kDzBMAmwwYUxTF1J0sd%2BUS9z0pyUqIDECMAjwwQlAdsZimwBCuphR5I3HSyt4yASowsy62VjNu7h2OYJKq7AITyeLZvw6AZARVVFQ9zdbw%2FwVrKhdMA5zAwKMDLiEekFnu4s3BqohI0ku%2B48FzMFdQcptF8jVttMYkQP0%2B15%2FGNRepP06lvWoq%2FgYnBxFfQITbKSQTTDBHffI%2BWw3TJ%2FA%2FygoQEgJjdoDqft9nYlwnAtBJWIeSflje4xMnu94GngfGwpfDRwRH8ZrKzwtN9wM2M5pxDQV8BYCA%2FShAsHGCV2x3yK3pFwthZIC1hMP3%2FHEP35CgjhsR8SWY8wJwWF1VaTaqqt2heburqkV%2F1erVhtX%2FWX61y916viFr1r9XlvnV%2FAlALILjHLbitxRz5pd5fWb8cgQ35831gUygSSBm0JcwE%2FmoLf7gZhASBODhEwGeOjg3Yt6wfaz8%2BvJ6ghBoAlwkKBMAkiAjqfX3wio74G5S8GVLKRS8GrllU5cIKcggySELXGJmctYhM%2BcLHLlisVit8PuB2k5dT7LU1ezQQSfyoXXFyXJxC6%2FXpfXp75te4BvgnWWvQKUMZuEAlJ9i0Ni%2FXvBIC75KuqOXqpa0Re76EPperSml%2FXqv9cK3Vvdepf080Qx4SAaqeJE61vUZfNU9R2qKO%2BmMwBR1qN8wcGpW2JD7y7%2BmBiQcWlhd%2BVGQAFwWlz74%2BiKqQR7jCviLi69e%2FXufoxWmL%2F%2FJc%2FXk8Twl0aAfsFLXHDtCQUnavOuVQEkUdN7Lr6ItEp2CTce9M%3D&media_id=1254206535166763008&segment_index=25" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:07 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:07 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_ou8d9mrDzIO8rnW1ZFSs\/g==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:07 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112764361972; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:07 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "67763eadec8ab8a4876aa436003e92bf", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19927", - "x-rate-limit-reset": "1587864356", - "x-response-time": "34", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "0027a46f008b64a3", - "x-tsa-request-body-time": "96", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"9rBdp6AR5R7JRKjlkG6plDGbhtY%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=%2F4r5un%2B0P6S8v%2F%2Fxi98IUK5NV7Fd3Jl16%2BpaSgkFCeBctgoZJZAI5rrBYSbss7izJ5Pi%2FCg0pCE%2BcryR62EGA3d9iEici%2B2Nb4UgOpf9BQGAcHojrkL%2FbwEvvsedpH9ytiEI%2Fjny%2Fzm%2BT6PJVRpLcQssko3GY986FQcJGOFyDmVFV%2FGsNM3EaKJlpFoQMZq4Uts3QFq7R%2B7Xq57hGu175179e6T5YiwUF3fcuXkL%2F379TCGmg4k7mvwvi61w11rccnXjiAZ6B2fSrv3q2CEiiOew%2BQhciHuvINRPtAKA6ztQSmGC66CNjN0N5EJOq%2FCk9L0i5sNxsu4lGcaZA4Z9La9q4k8%2BrKgQdjPgPmpZUQtCTCVBr%2FcxfjMQdL9oFE9wNCakOsHVctxFnpTmw1YM5MYbSH99yx1oQVdMYBAbpbxlg%2BMhd76lIq2q2jBv0ev1Y4Jb9ek9fd8twDlBNrAT4pd5ICHMLFbiHFxaACagiBd8BEhAEhOEzZeLL%2F6lEiXkSesv6%2BK48OXRxHH9ipo0%2BlnNPiF%2FncDKG0WXy%2FYf%2FG0XQGf5FEbBR1dCGPpcBXmq%2FwQnC6Mnuz82971wWZc3qYgvwMVpjmX9fCBA9jVNSCAj3QlTH%2BYNwn38r8uh2hy%2F56hvCIlE2YP54k3qGO7s497X8dRP2OK4O96zwY9Pd%2Fjo5PYZrRF8oL8hFQXpSqNx%2Fr6HkWzZVsOViN02T0Xvterpe%2BSp%2FBGJy%2F%2BtWsVLwEUCAXd99ZPfwHkQBlLXgTQgERm5cxDgrim5M4GoExarFl9oCEUGgMQbAhBBitwI%2FYQgDgcDQSXOhkJtc%2FY8ukMmepK1AIofKHooAAgFwC8hqAWYih8Vehi7A1FxZ4nFHEjwk3CqQbuHzs%2F2Qh15Yd8uGhqGGEtZuDj%2BX9G4V3ICAsG4JNrxPFhF4Vf5f319wlxD6a13q2NI%2B2nXFXGqCTilgYkOeSrxKo%2Fn5QT6JIktFA42mHXCWlyfP24VK6iPMMRG%2BAoM4zBHzvfP%2FwQ8t98vl%2BdsgL%2F5HjsCX%2BvdIPXHkK3MZ6lYjRvcENhlT8hPUmI48n1XqMlbBBCvy3txBVvi4lu1Iw16J7vGx1l7NqDXjB%2BRnIL%2Bk1WITP%2FwS8aZB9t0GLQKyFpx7oqVeTwnr6u%2FWpeL8E3edgIwNkGRHOsDkHaBV4rdS%2FvafeBBGBcGAslX8L1l9PkcPnB18ZEiHXXeFRBDeDU4mJzAAF3RBaQewRfHVz%2BAKZooTm3%2FQfKBPrHJ%2FChtPTfK8edwlOhqoSGG6WLuMCShi3HLEdZ6j7YLcmnIry4Y4y8WrwRz5P2WY%2BwXjbALn7u9VOGBT%2FrtIEggdaqpUtyLSm4XITDuCHnOCH2Xltnx3uv3dcv1Pgxf%2F4sr3vfZua00%2B%2FxctG8213bfqU%2B79QSCDmJ8gxvQMa6oGHNhmHfROP2Icvwi%2FenEYHUEPgcQT5fAohEG40g%2BPEYVr7Jj9YF07jzFt3ezGqlJn2UbeAAKYsCbIcAcOAOZrDEmKDii2BdyV2hc6TqOGpdj8odOwY6jxph4Svn8go3%2FgN8%2B%2F7AftWDJ70f%2FBNeQJSABjyB4YOtt4V8Kqnh8UfEhAUEQQEigPpxLw16Dla1%2BaGJZ%2Fh3Tc4IXPSOoZG4%2Bo%2BV3Drx%2FKiGmaL%2B5jSfT%2FBF5WH0rYJe7MGN7KOyfmtzqPI0MvJ%2BHuJ2aYu00r1WOZj5cak%2FfH6BLzmmgWKa%2BOAec%2FD99ymqEm4YrF1j3tpDgKaiU2f974dn%2BcyOjJDX4hvPql8H45otK7UP3D%2Fdms07sEFGQgf3UreXP%2FNdBUS9er6te8TiC%2F%2B0rvapepi7vXuQke67LksF5ttPj4KisDsYIkF8nv3JmKYMBpdkMNCA%2Fr7OdfqZhtfLrzi44fLD79QWCncIeXQv8syBL3OH3Pyw3TLhJ3xOid%2BYwH7QYftBfwqemyHPFs3qJuF%2BH0y9PgkK%2Ba%2B%2BjSEmwTPLlp66sMaAw4s4GAaVqvQYMnhZT%2FcOuWo2e%2Fl%2FrQkIG4P%2FCF4IDxJJ7zzsL7e0nn%2F0JrsKSsbYYiQ3eUIBtD6bfsnt%2F19bUnFyebe5C%2B%2BvT9RGRGx0WY52wMEMyjHAVvu6G8IGG9FyRhIcJF8zHbv3xo9oShEGdNEl26H94A4UiQ5f0rwYE5pOK9SwzT%2F9HrJ6dahe5vBikFScLlKyrTL%2FfdjYpiX%2FdBpxFqPvlg%2BnX1KkXk%2FLd93o6Bj5EfH0fv0ZP8v91RDBUXULst8dhPJO%2BXELA7R%2Fl8l1wnyVsbo9%2FQRkMYh5nAGKUQjAwMA316oJap31MebLwgJHr7eViQpYKhBFtTK2Z07Nw%2FSmCpwK0QU80vBGDA9BYDj0NTq728w1FG6pxTjGCzrEjNd5Ms7GeanrP9ZzAlfTntzQ%2Bgn77ta%2FNFek1jB5ZyC1Ip84rsPD6I1yCKy9%2FUZoNeq2IOomReqVb5eXraiqeAcfCXP%2BGJD%2B8bUE9T8KPnZaJR%2BvX%2BHLt%2BxY1toF%2FLKjXZtZ93NySy9%2FhEzHJQD9xUncZ9adWuFJ916gr23A1ayuGO0rNnHAeCw%2BCyXAzmunomTjUUSjBRpmMn4Jvdyrf%2Fvrddfisac8SCNaKFsN2FBuZMkvvG7nL66%2BT7T%2FEZV3cwueTBfo7HEG7u6xCIsqX1Z3k%2FunxXr7z%2FrpyX4dUYRUZL5f8SrHCEHZnLAq5R5XFdbCpQM%2FvQJ2C7DM%2FrXGZXmQWL5WprWyDl2ZV8oaDh8I2e9%2BAdLpMlU6WmI6r4ow4FJUxUVoJ0xWvymzEI87Bo758vxAWOyhIYO6dvb1ix4h%2Bzgs1fMa3zXE5qr4GIZfNfh0Imvrxo816TPjRpT4P8091faL3qryk%2Bq%2F7ZrV%2B5pRgmHvqKh9EmaWLIoUgdWLgTDP7Gd6O7%2F474MIAMPZzn20o6RaTnl%2FL6Hl%2F4YKGasEL8tGXr%2Btlqv4biR9vm3S3eXd9bZE7aUup7ddK9VDXCqQryx2PJXGj2%2BtD5PtXdde%2BvshTMEz%2BEyASfzPG4v%2Bej6W0oRN1DOdFiMxe3LH%2FX8IzJ7mGVvI7dyYtYvcca8oiwZDFSY%2FqXe%2FCI8RTeBG62SKdK%2B8M7GP8%2FyRBAfYL4uJ47L4YEAlmxpmMzEcF%2FZPuOCkrxeLVmI4TwH25RwrLKF9FiUbpe8g8tR88Q8GNgeXd5SXziuW3DwAVUx%2FQKCWqQaFYHWC6%2BDu7kvvv3pdqCITCfdux%2BCbvnGV8cqc9sIzcvbb33W6DqddjeqfckpyvQGzLR0IZkpKLthfuGNqqDBrcgVt2Q8bVfOphCVHm0ZmTw%2B5AWFg%2F8dpg1kx3sXLZPWek8pCKOW9kmws%2B8VJJ4Qtj%2BIjyXflPnNg3%2Be%2BTzKVc7FZ8JS2Zqed93t%2Bsaz1%2FTNvSKXSHTh2URSXMhKj5x6yaIzFw9TZsluWz0My%2FPH%2FbdQ8Kivwvf7wqbGGg7eurxnzvU2k4tdShQq2xmrlrBjaxpClBRwVT9Aw7mn5%2Be8hb6FCyZPu%2FwRcmJMe%2BT7%2F1i3vYML2%2BW6%2FtLzX%2BmQur%2FBKcm03M7npp7J5f%2FaLF3ShhKBKddRz3qUFPexASS1yd6iQmdXNRCKPjfoFxPF8PvfBCLDs14NE5SV8iLVTBimPgqT%2BynBd6Xy%2BFxIKzBE4TGiRAHY1Dual55yFTEfv9YrvG7uQnq%2F%2FdT8tXJ6CtfonSd%2B3z%2FNT5i%2FERAjDvvn34aMyG5qdYEEbHIjGAAAANIEGaK4rqBXXoWnSu%2FXDvtaq5PVx9a8v%2FtYu1r%2F9c%2F%2F%2F%2Fa14Vq5xf%2F%2Fa1zqRv%2B1fuTm7%2FWr9a%2FWpd1Z2teXivwEKHd0MAERFBgZxDitFtos2bI33zNH9UGquQfx1rwGMsgddo8tEWgdv2IFIMCLEg6PdGd4pYz05pgCsgTTnEqeu7FaH8Oo%2BTw%2F%2BqTDn%2FxlHpUoE2oFX9b9%2FrFLe%2FmWu6tdSUR4FgEhjaiH8CkCIcbTfjiuehbfk2q4sqChCMnr5XDjzMW9Ga1foxvqQ8Bn52Dh8GBaA6jQxbpA5vDAe0xlWwVH6nxQNhtsGjx8Bx2NAFfdjL%2B5bx3%2BWprbGfalX%2FbXS%2FMiFFmSKyG%2BTpWmTgYrllvA7lSy%2F%2BRkCnravmVxPJACQe4Kj4t7LWSCaQbjEM%2FoscczRhJVcpOo%2FmslO5cPc2c1GaAEe%2BwN3g6ZdA8dVKJTNnHVq3gF2B8Uo2%2Bvh7Ldd9HED9M6H6kA5UL9%2Ba8n3J4IB4Y1pKTtRrqb%2FTtAoKo55p%2BT1iZYBXgn%2FQ2PW9etYongT1Y7q1ruT1bvuqui79YrysghTnxA%2BX0%2F2Ysdlj8CcwqVZVZVVXSJu00c1Div%2Fpp6aeLGBni63YEKNS3T8UFRHNVxPAYrwG%2BA3y18Ytp8rGxAPLBnA8sBijLGKDFBh8eVLeWxI4%2BDOwzL4LcfxLsyjqOviooaW%2Br%2BrQGBrAcMLleodtcVYHuWZwg7W8IVz71Jqu%2FqBgfgOUc%2FPdKjrJ1ClDL2UacmRbURzrVaqLYFN%2BX4UcQk4MKZgwFoFg8J0X1hvRcwgj5mrM%2BeBJR%2BrFf1iivWXLXrV0RWT%2Btw8BCghXuQ%2F4XXviV1%2BUVybzyT%2B%2FIShb9nIKoKcet893hBRhpA2hqRBMgg1fLhdlm74e%2FRW6J5%2F1e%2BJ83Hcjd%2FrX6132tSX3d161y92X0xkuxgSBjUNjSYY%2BWHJrMWjqkLWS9%2BMKMAYjy%2BYrYU0OwL0%2Bkk1OMLc6MnzXxAELW1%2FuEAsFgC3Qpav9BXv%2B%2BdXfrWK%2BDHtW4%2Fuh25btc%2F6569al3Wq9W1xH%2F6F6tRYrhIcb%2BumKJ3gTxvXe8KNILCAeDYHABbgP8asOALcH8BrRDjbNAekFNCv%2FSH1d1cknPc%2FrV3WmCQUPLPbfVgtJkzieXF9UFB7CNqjqq0uhn5Qlr3%2BYvEEvEEtH4UlAVTC0NAvdv6gq0vUz%2BXiKG%2BaW7dGnXqCjg94DJ%2BznAf4%2BsnBAQuDzQ9Ydn8lxqpMqCT6m%2BgrUCkQQ3uss5pNxn5PYsLDSpQtprJWs1ADVtNGXb82ca55FVT3L8m2%2B7nre7%2FR674M6ta%2FWKTVa8I%2Bm6eoZrz14diSP%2BCAmeg77KQQlbFdmAVujOnmv6cbN3UFGgsJdLgUb2GnQQNrVEGEvdXP7nyvveX%2BUvDxoldTMhdo%2Fr8eGKb1Nzrfy%2F%2BMQ4aweeS46X5ZRL7yQ00fDxUEeupnKCoIgwu%2FPpSI%2BZ%2F68yCohA%2B9MxWQwrGjGombBwTbz6Wmj%2FrbOxsnS4VZZD7Jyteg6ij473bjTJV5S0Q6uM4w%2BnGQxnr9a427ta%2BgfFXiPitFaS2SqUsI2D7HKCF1rjhmoPCY2XHXJ5kQj0Lh3mhdEcCSMS59d%2F39ejvjumSvrWKJwEObWAuxGaqy5eDIFICPH7xZgEHMENQHmy74dFlxweB4PB5jcdgBx8SVwKnge7P%2F3dcY6l8n8vaYZlo%2BQFeFkfX5MLwQm7gzatl3Ri40L9EZcN8Z7J4yexwjjCP%2F1Jp%2FTtDf55BuzO1eY98feTlQffQstPHfKfgyj%2F6D5xLAVl93gwm2Dv4HkVy7ZwhcMNfaDt9y52xO7uvywvL7feCDDiVT8KrKnLg41IZjVfLH00YA8VO7Epdt%2FxpFjc8bELWf3ZwGGmW6DP6Lh6z%2FjJ5dPJ5ihRJT0sA4X%2B74w1DvOPIgUQkG9CKyvfFBqPrDyWte11hvgy1KgL0d8NqVh4K45PrHFjTPvwFXZulsDLP4LLN7Bu%2B79e%2F6ur1evW%2Fdz9a9%2BuF0Sta40CcDoJeIcFYrFYrrgplGCMuFzEOCHHv1rXBQGRIQI%2B73dRdImTY%2F%2F0FSUt75vIv76EdxD7u7976RoFjBAVVgFyQ1SYDxYB8lr1Gf05QYJWrH%2FgJRj4NglK9SMSxGICXHE7v6fx73vrBOPYwQrl64xbvlr6HE46ROQADIfbJHEanobAHvNRl%2Fq4ptjYI18M3DNgo%2BbjLgGX9hD3eCmIMSAYyGX7%2FJGyIc09%2FY2c%2FxDz%2Bf2UboqISWM2rF4KZ6Ff%2F2CEvcQ5WlcPE0r4dtNjjLpKqK%2BEVGhzbT5SHsVtRQI6%2BndlJfEQg84OsWndOxNgtxc8QSzQHTP%2BGYcR%2BvfJf6O%2B%2F%2FiVqS1lfr1etWT0gTxIvyXu%2FwiKfV3d934xeDFYhCAjbSr1BMJNBMIwKJYqBJglulMoW0%2FX2HygmfA3esQ558p%2FSsjfAMCBlrAYD7%2Bsd5uAkdIaH1kwRaCOXuLJ9fYYDAbnhQG7v46S6%2FkG0TyKDRP5fUaKnD8s1B25ZjzQT%2Fe1g7gr1ZoDU63%2FEkJ5fL%2FJ6%2FWPK7fIpme7l51N6WJx89Lv%2B%2B7y%2F%2Buv%2Fcgl9foQZf57fDa2P9a%2Bp6%2Fn9vqrdFe4b8BJvwWhXWAhQiGgjrAkgg%2FsPCB5YTvcOI1T5rRJMdfjRleGvQLypMOYx3ZOvuU7J%2Fib45wwMrP6I%2B%2Fy%2BXPiOaJUozbX7%2FIV7vsd1V31Jn3%2FEWbVpprr5RuP5IG4zFOWNJ7WIUFMdZVMHW9AhqClyoEFsp2oVeQst8YZ9GE7Z34P8UG49O3LS7%2FJdJi%2FBHkDTtrF%2Ba1CbiCPcf9r1%2BtSbosVjv3gVgR%2BGgjfr32rt%2FQYEPcPokNqBGvoDQIbPFd%2FiytzGhl9a6L4IBoLzsaDjQgPWCR9eaWU%2F4I5C%2F2zJy6zrXqLvPl6EYQMnr3ybVwQ3d7j4LyyqHxkYNCYaYGV8yY6ihC5fk4SJ9Z%2Fih0dCdClUdMLPw0iQHRk%2F%2FRWe4JOQSAj9D3TvwWcczpIJvgwBs8cQD%2Fakiec2EVWYMfPfn%2BgUGOwCtV9Wap6C7p8GR9JcvM%2FMJg7ehy%2Burgrw6ny4yOfzebkXc4JCCyCvLr9e7idf0XL81Wf8xNV9K%2F4VxDuCf8iwDNmCmQDzlodFRvjhFinv%2FHb7xEEBsoycE4BSfl6qWHkSgpBUaxArrUEJMRyg9VuCLN49Rj8Exxk8aunWM1Y8k16guysNd7Gw6rF7gtMP3f3bZYdmyiJg3F3y%2FdLhEg8IjpOY4dpnXJj3rFhZEH2j1BcNRZli8blW%2F9cvYEqSEd9gb6D3hqfChLwLjV9YURXoxqGJGYphXDYLYjaQDC21u6KvdipR9I1up2Cv7Z1RP4KEniq7QKi9lz2rnxtC82UkJ57mtymD0ZZYG62OfNnIlvKRAq%2BqdvD1heaP%2FxdboXUhxa0MJAoF7lmXdXsEY%2BqD3YUYirvtEqvV59fWTwVEsny3QM2w2uH4zhvceOTsqp%2FJD4L8PoeAveOk%2FbMXOhr%2F4Le7nz1S1wT5W6b2nF74I8nZVs7Rcu%2FwRGDimbWLK3MXOxrbUhvl8npLL4KSBYWH0csUF%2Ba2vNfNpuUFXwCzLLPJzAWEeF8f76ZaGX6gOxfP4qAfz%2Fz2UUsUBpVrjObAdTJJR1%2BzCuNnuyMU5fssGXGHMxSHqGCNLyp7h7QwaSV0pNl6NIFJeQ2TvOjwMO9zycyPfxRltRXn7pVwnCZGc2NKvwnFlVdoxBJjM%2BUmq4pSlxDfll4H%2F7d1aFsifYg7B%2Ff5skL%2FRSA0p56%2FYYwhuTRPle395PBEWHsS7epyKE7TM%2F%2Frk%2BNdoWYuDMq8kWr6c8RtGNeDsZvyxGJkuqsFsxuX7CT8RAfuqCNMgYPDyeibD0PDmeNcQeUSIIIcFpf4d8Jiko%2BOHPEjJsNhzhdcWlnvLUN%2BsusIECBAjpXLZc2YtDnj2vytTKzYUGozA75zofUL9xVVwe%2B%2FEoZPnVKbpqvXLu%2BcWQVy0bJ6sQ%2BYJiKxPtC8OVkpExU%2BK8NlyXXzdF1rheXsbsbZWLr76vhZasn1%2BpLz%2BQv%2F0Gsv1%2BiD62n8WTOysOcGF%2F%2FEYVseLMrdnzuFeyGojW4QrIo9Laa%2FyfmRG4vD7Lcncd6lFzVNb9ZIuCibNKArWqEf9rxUEeGYiEQrHfFro8MRr2zOfC0XLrfyf3nJIveiBKqQKnzZ4GkMjsRMCqtnMqlStzZ3rwfBIYIl8T7%2FmJe6R9qZV2UjvbkBRN%2BF%2FBQeLGK0q4ST0Een9ZVa9%2BvVdSnJ32j%2F%2Bf2GOP%2F%2ByVr8Ep2OuHFrPrlrtFl2p0q1gfjUcqcXk9CVxkEIQNmHGkdNfhePtfmp%2BpJtpfWL4ICS38mapr%2BfW73ZQW%2BK8DnNet4RKBLDY0zmx1ShwYVRoNKMvmB8OKNj%2BsdUxzTJSv6%2BYSXwbJdplrRhTVDXp2L9debqrnUyXft%2BkhGW%2BgeBRkFb9EgCUBVgEkFJAkFAkNQkNAqEhIEgoEhKEQkFQmEgmJQoJwoFhuIwiN663kvnma1%2BdZc49ea3GTXjLzdVOJ9U6HidHbZr%2Bt2%2BnXo2peDr6%2FbW14jUHGDt2zQ6l5OxpKj0p30Lq%2BgvCh77dZqH0hLupc0f0US9FIvLsF28XT0wvvv4H0DM%2Fa%2BdhKmtv28X1etOeN%2FwO%2FD2ch%2BHSgFtvfwtgECfLq51Il8aN0q2Uyb6KIWbnJd27DHMHcntp%2BJ0bw0QTyOo7Xa4ytgBofdvFK5bktIiKqgagcASxUlEQ0CoUCoSEgSCgiCYUCYVCITCQhCYRCYUE4WGoXCoRIvmSr99deNd7nGa8dcept1fzuVlJd%2FfdwdZ29Xdo7N1eX1rq3xns%2BisdBje7gRf33YOn%2BzaCR5j%2F8fZyp0yHU9CHnnvevlSf4QD%2Fk6W91v9PcMb%2BneB7Lo1mn%2BqCGOsU7hW29XT9VOpo8vDXvNdg3BAgeB4CgAUqcKZwCa2br3cmous4%2FjvTuvSe%2BZG7q1%2BW56un5kj%2Frru67YMgXjpfllcx%2BMgM4c%2FObOQgLkIi9EYgcAR6Z%2FZyWTljCcmXhVSbqr%2BgnKa4bnSLBnAWpsJ%2BQb5eVu6Nz20WqC3S2ivrfvPCdTuCU5ToaWrnGh9UGBrCYoioOy%2F22etGghFIR1kEb8oUmZIf8F9Hu3Zzm7sytQWXkMYbscGXlN%2FpqrtMjX40XvbQByta%2BhK4eJ7KdJDulRPeSJTHmE4WryAIUoUYJ5nXozhhDVILcEp5Q1NuHcrM%2BW48ZFcHEuzoVrWgXBChOrVjaILWvAhIlnXViKkgW4lEIVwicobve7Q95pB8SA2bA8WA6naHI2hxMA2vGJRADWGGJtULDgAEkmf2cFkpYuWKkS7d3NbNewjI1KYMgIrW5PcTzqVmxYzy20ey7a07dybbsq6xmUjvkaHAPBGwX8HTV0jecT6T%2Bau6t6%2Fa%2FtHtHSPk2BUdF6cEv%2Fwqk%2BCSRMBXTCl3wSi7zIT2yr7jngvlKviV9BfYX7TsK06biVs1YbqjBHJeDhf6lA%2Bg3W2J6y987dX01VjlnVVhv0JrNWSSc%2BMxjHHoYiuwRvYCnrOUKr824HaKgJ2GFYG3E3A6rIdDkgSQI5B5SHu4B1wHvAmh3gkklMCI3D1xPEAjc4AEk1JAkFQkFAqJCqFAqFAsFAwFguGAsFwsERKQQqITueO9X85Uz49M8%2BJ3d5xk9p7s41XjzIp7DufN2%2BXV8zv8Lfu5V%2Bh7vwaZ%2Fdu1E5%2Bn4Bqphl7bu86VsdlPFgEzc98gwOz4DTioHB8c7r61ACi8Edb99Wm4GXurMdgNt9dRdbhfrg3MZ78xYAOr7ff8OVa59fXl2i%2FTgBXjdF%2BFNm%2BZQSi5sE8%2Fj4dpPhjaueevtgrKs0np8X6TVCMcJZMoTkEk71lICm4HAAS4UlCQlGgWEgWCgVGgVCwnEgmEInGoRCohOquKrfv%2BOeeufx85vrxcqH09M6vN9SpTgOjJs4Oh0OCHb%2BC008Lrx4feH5eHTAn0APSKx%2F17eO8D5fPP7sAK8T7sA7vtOI0wDoQX6hfaDAKD%2Fu9NsgiXcM4KFk7MKdVsUWLp4HobXlyABH5uW%2BGtj1mjlla9PPvYAcdBz%2FEtK4hUCC1X3%2FqxJXuYL5x%2F9gUUHp6jqWJZjOL9IsyC01AhWo8wDgAEuFIgqJBKFBKFAsJAkFgoFhOFRMFQoIgiFQuJQiJQidWs13x88Vv2714OPGtc63ftPGV1U3qI1odjocO05byc9%2FN9rhnCzdpA5ukFSaTP2TaWBybV4dvh1wfx%2F9ODUbzjw9IOrGVftANHbIxJ8tZoe9kW0Qa01v1GzTalRgpxnF7%2BAKz1UnhpwAd198Gr1fi7CT2t%2BQBmFqx7CpD5fHgiJW3UaM5G%2BF%2FTJFe6%2BsVNS6y%2ByZNEWhcRqoTO5SwHAAAAKE0GaLAsKBX%2BhMXf6nTuhn7J8%2F9%2Bvdyy1a5d91fdeuUl98%2FaL474ZWzzVevRJSXXr3fc0oc8Fr6DxvuOdN%2F5%2BqBcbCzlYHGEBuPGQ6MLzsMalDFeP5xJ2%2BEj88NcVeESBjuO5bchLiAEcHch1OnlBFLWmjgIEP74RA1glDgw2DXkgt7HYKMMtMfB09pRHZv8deBB%2Fuj1fUa6Yd5WZs4vkamJHvdOJ6T17Dce9VwhAyBAoTjgsw8%2FxPgrx5zy9ClxxBctQpV33I%2F8cvx%2BrHfzV6tJa4VfurlWrVgsBgCAVZG73UQPs4feytav%2FguBUFIl%2BvFV3fd3LhGdXsaCILDPBlSi5PYPy4XJ6Es7d8SAkgWDdWc3kjhNXx4tC07pC0RDpk0O1OXmxkTv7C4KRaRLuGEZo81Qs5MzTKaMyyJmJacNhoPkgf6NmixIWoPbovSTE7smc1VLh3G%2FEi4OqsXSJHx7fgO0fhkkg1tDX8LLW6hZO7M0pZBpq7OfZ6RfmBvUs2wrqnaEE1aBKrhwCRak13%2BPwiSE6VTB%2BiMr0ku0feAsgRHEk9Yn54b%2FWVjvUmEquTerVclyXb4VbIKNu78tc2EVC6yIhqmj7pE3hBXEpCLTbeYyYzzQ%2F8g4QNv9jCoDc%2BWaFcsv4WZZb8ynUQis1ykHHpYn3U6hKDJWOMc%2Bnt0pqrdyi12h73Itm9rSzZbDBmiBVJ3t1Wa%2B47jH84Zfob9rFUzeXmz6wnMEHE4bnnxcH%2FHv4hz4btVhCYCDBUBjlElyzJA58tviju%2B%2Fi%2B8UtWj8%3D&media_id=1254206535166763008&segment_index=26" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:08 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:08 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_pWESYokmOKFnV03Hdm++nQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:08 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112818783626; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:08 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "a426f2e97e26804cc0efdb85090eb00f", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19926", - "x-rate-limit-reset": "1587864356", - "x-response-time": "31", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00d69f2c0050093a", - "x-tsa-request-body-time": "64", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"cdyvv%2FBPfYka75gUpuXZOowArfc%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=ViqxV6sTXNfxH6lu%2B1lfBSLGU6d79Cykd3esD0EoNA0XVQFnR8FVpC11wT550B%2BjbVpM3hKU3CE2MKpAwO74qLxf3XNZPX%2Fn1R%2BlEcvqZK3WL9Ycm3pYeAnixg4Jr3JoxGH9MlCbbhYQEW5guIELc2QYlkdJQGg9FVHDCYUk8q9I7Ws0BBDcIkIuheNGDa6SfNQWRJLHh9VQGpy5qqnBKJRhXrl%2BORqW7KsulzfaCNeb%2BrHxXV%2Btlbq88vd%2BvSXzq3cvlEYUHw%2Fz%2BT8AoQNGKxQodB8pdAdHwfeuDsiOQAB1L7Qc7Eyxfb07U4z1l4aDJHruC2ua790EZVurScy9N6sq5mJkhQIXcD0NcdA%2BJeIecAPc4B545eP0Hy7S8ePhjN%2BgnUCHG624ks9hyeSa%2BH%2BpcXdWYRAMYqYWKrMZY7elp%2Bf6eNDkXS18fQe36DBdbpXmzggYTNhD%2FqERFG2TwFo7sWl9ThLaATJ0CeaSrcE2oPx8op5hl3JRRjb87C%2BPfo%2Fd0uL6uvXv17gw1SInr3Krz%2Br161Xq%2F5jbDGRhvoFQgZ44B%2BJcBZD7yYBVfQmVvjKZPh0%2FBMNVg5vH2xaQjg%2FBKU5IPbr9BqK%2BWtXECGZQavKqJA1y%2F06QjGWpMhbXTx5o%2BELzdVVGNeVhukS8uVOou5aaCLnfYR58EIIC7Nhe0UjsIcVQO%2BbTQ5vff6F4VzVfzX6Jl3Rf%2F1v6PXmPuIHKYmBIFxWK35YrFbRsk9P8XweeCHMQ4D3nyky4XOBTN4CJChtXbqAbMBMgTQwZVLjc4CfdjGF4R424cUp8ZWDoWCPzA1wGOIIzbBh9Wm%2FOCAfgg0ZwwMUOou4jaIR8GdaDgNGvzF4cX2PhqcEFgbKEAwcWzjyY%2F8LbCh6gPCF%2Fr8fKClATJPVwSCWjqd%2FwQEOSAau5PjpKMFztlsskP%2F8IsG93L%2BX4TIFf3MFt3NK6Imn1%2BGePkK1bHJoYv%2Fy%2F9FhuoGHh16BapWDmv2XmYB1%2BjcEpb3cJWCy8tL%2FOcioLFfyfS%2F10tSZ9XVosVivfFh4eEyXvu%2FDUEpHfuqvrA6AqCLBZ1F3XFMUNUslUvwTQ1JKLNVVxdZfhSpsXqq1VawkgKQbBeV7gF8bUwuExeIF5YR7iBf8DtBLEAAHMEqoAAnAvBRl4EPQLBKDmVY3VAcQ8v0LMX4VpVGEuNUBKv1wv0qCXidgzdUReq%2FRIq8JZvIw6XlDJR%2BZ%2BvkghPXkMbk%2F8RLONLGsZSfyeSuK%2FWjp5K5p1i7tYIQh7wnB%2BHxBHaxL2xXrCpwJqBKak8mMzy3g%2FYCINvAXJAJIICbr%2BCaZhSWHhJTHJeL2fsobSPbgwH89fJSw3XiBtbu%2F8Egoxij8vwni%2FVVXkudhP%2BsX61y89PxM%2BL%2B4wZSf279YVzXdq%2BT1%2F5MCIEddTa4IQmTwJARv1lfgtzD0mDZl%2FvxHVSZ8uWQ7VG18hgTv7X%2Fvd8vq%2FyVoteXd3f6mS7klrwT71pXZfnN34el%2BefyCMnr2LPu6dqL6QA9QluoEeGXS4FC%2BCAyJ2A%2BwIJW4Pd4COQdZ%2BerEcTL%2FyKcNUPqa79RbXZTOK8l36u1eYgrjsnue93mIde0Ve92YFhXARmTQX0ccqmryrcjAulv%2BCmkdLJFJ5WYRxI0w2dfd9t4K0DgOaNwr5Uo6lmB6b7TBC8w%2B%2BjMRjX80M7YVdX%2FpEicYWzT%2BHGdKmuL%2BBpN1NGYN%2FlwYDYRQ5RDPWSe5uecQCrG2KjMdGwHiP0Z922cNZkCOjZx%2Bc15hIfpwjU5PPc3x%2BEKlNuzMzi6EPk2I%2FDTKq5QwP4RVOGYdw2TO%2FL6dY69Z%2FPdz%2BhTxNrl%2BG73qnj%2Bnr0WVecy%2FJCSH0NYfIIRGQJE4z1EGy5usSFbvpyR4aKegUkigo0k1%2BmCW2I25Nj8%2BejBaaaaTIbjShI%2FnHOqTv635CB7Iv9XrK3aUGXfGkDPYXbLv%2FGHmYUWSyEmMY9r82UxybLcSKbJNJ0SxSeIPgk3LibgOo11dmof9UVISq9okKahiPaQ5Vs1Uf73hN4A7JwGJtG9LZsdy54VvzOGwv0ld7r6Zt8WbHmjeL2c%2BgMySlxr03z9ei7kndesU3hkgwf1bEvmSRgcNAZPZQqt316M6%2FQl%2FzEmkz15jHkcn9IVBG9Mympm%2FJ9xaI%2BsjPfbgl7G0Pt1vDvg0zCH6p%2BP5IJSHA0EDmegPeLfE74OzWOaYKVH3Y0l%2FekTD0Pc6VKxvBv98bzHTwUHijHnjnuLpm3bLuQkKHGWe%2FMrMAeeSAMHWok8ix1F8Z7J%2BIngyDYzR%2B8T6ZX%2F2qis7YlZ68SCAZCx9PmyL4ngngRrWreX2cxh2hKPeTVD%2Bk9Yrui%2Fr9%2Bci%2BWGQYPz18fG7awhbl8hp8yLU0M3y0W3Jvyf3iLnqY0nH%2Fv52CPyY9eS6dF7CML6e7v2d6ZwMobGdxDFvHaX5Pt4rDgqC0B%2FfBXVMXEMhPpPA0SHmoIDOtQlwKfX9n6FxXLPd%2Bt6vv9EIn4IuxvUtopa9Uc8uvvxHzJjtImcyBJSNfF%2BJIqXxz3oEPJjsbwL4XAuh0Z3eyjZOqWAPOg1G231u11gSREYCsVzPDv%2FCmS7URwLh90lVjoV3xTxl1aOdN0I8lysUtFPVAXAsCELCt9tPgiJKV6OrOwAAAEaZBmiyLKgV%2FNE33GeheXurX6seEvaxcqy%2F78vtWyfn%2FVVevTXXEXl%2B5icdpwiGgwI8tMC0dgMGJ9JY59ayaTZf%2FEBAMFLneXliE6gIXgdMu8D0fNRdBIOcuVy63iqqAaIKznSrgW%2BbcN0pRFw%2BGBGBtw0oBiml05W9AlpBU3ioDKSWPLCwX6EnvyAOsYBUDIYvrEeiaxcomHXIl6tAXzf9V%2FBbLTEawOBhwMANJguClCM%2BwUCtCnidVx1Dosm%2FqrqX3fxF3%2BvUOJ9drL9WJMaEBQ5xmP3q2s0CcWuFsPv3SlvSv34EwgPMMLvR3Cnq5y%2BMCXAfsBxhWTmjcD5%2BtfKsDAAH4AQDgAHKA53ev%2B%2FfMjgIjAV3SyHWgBGeO3fl24v13L2sFrHXrJFQAgdbhMiN3ZgCjQwty%2FFTgXAIgCAAzDehYJLcTwDHcS%2BpLafRstTQ6Ram6G9xbv5pDJ1FOvXLmDfk%2Br8pgDutt%2Buy7XbyckjmkOxEEhAlS%2BTNE1VCTsNUFgDaAKgaXIdVzh%2FTax8pD17csdO33vZ%2BK7v%2FxV%2FNE6I5%2F6DV27bHvMl4b7Ewt1uJu0%2FqbQ2emYScJdTCCAUSA5bT%2BFS6LdbccN42dQlR90Lr9a9CVZ%2BvSjiXqW1yv1eJ0J3g1gzCIIiR%2F3rwCBA6BKZ%2BHzEuA68zkhhBQnnQBzkBmML4kO5S%2FFWB8cvzYyqP%2BgWE8I%2BoyhFotQKD0%2FLoFzU%2FmdcVugJOfiB%2FYGUL%2BJNNfczFuuBgFcGHLFTjs5gWyZ%2FLoF8wAWOHhscJO2efEn66rUDLCA5Jvdlr4C4DAaIovg4ByBgAVQk1BeAWPOIBqDEBmb%2FhAM1XBgogODVFCBU5SUvxcQdOVXL%2FgWBRzxzgl8f%2FyfNRv2i5XzfE163O5PXVetd1zVoy12rMn6IoCGZ5AhF%2B0QBVlBDLUSep%2F7Cu9iVXUzSU1c3zSYvfo%2FSXXr0t9yYnl%2FFDDkBAQKDgTkntAObJtvghCE%2FZWGL75R8hoPYe%2BlDGpf4tSYFQLgAekJg3InMnkJAtSh8Dw4y4AycmN03JwGIzl0lVU2Jecr5ZUaKnn29grH9R9cWB9%2F2gixyMsVcvf6v3Xr02kpU%2BJ7kuW5Tf%2B4148d1wJg0NwPRMfjZaQUgM8Jaxvjh3TEneJl4A14ElHfihzoTiQcCRRCZTGFMkrxypAwnuTWPF3QGSviwP4UFlAAIEQZAIhtKNaeiABCHW64V6apf0%2BOo%2FS3JfctzvGiAOQLwWDK14hgED0lLUW82pZeGRVNi5O97TiC8A7khqP8AvmpEV94%2F5eAf4n4CQ7MtDZUFY4NkACttyelyfJVXYeF9r5Ra00TkB2nOlI8tSTMLqJm1%2BVRWc3VL5ETuH9kGpMJ%2BHskQ3pCfioobyyJPKpFOEvo%2B8tQwXbYO2PbZ5REUv43xM5y%2F1RGNNAb0zVYmdSJItExkoMpnRwauJb081jhmqWGbfyedZ6YfncB6zYgslhRP5APT1dzfHh88rCZLs%2F8i1aEvJdXXEInfN8IeF%2F6tWJ1KvfMsVZdXWpvG2i7KgQE4dy1AoQDqnyO8eBZW2wGAke3fuX7Dvt4hpchjGiXxN0r09XZUCDQrKGftIoyWvBSfblEXYVijPBz09SUh%2FzwIkfCHWg4kFRQS5MWC%2BahwYqp3aRlXpgzeO%2BO7%2FvYdLDo148%2FCy%2BxrUt%2FBrETKjjv%2F5fX8QUO8%2BofQL9HF%2BoZMFOWFwjYS%2BnssP%2FqHoNz9eaZbLbZc8tB8iBoVlnbp5Wqow8iWn2ZYdl3alqTF9u6l9Zrnf7HnnLOvr%2FKwvXnYf5siEF8xPaSnDWncf0EENQnpK8EGYkPghUGA3YV2U2WS3%2FmOhHblKEJiUmlyKc%2BVvpEy41CoH5u8KfJvG7Ff6L0i8CCDAXd95qM64sMvXgYx5TYr8BYhAonP%2FAUIQ8DfMasAq8T26sqA1IO1UUxIcoxODKAEi3QJOjZqgJxDaD%2Bxw2sO5UsNM5WdUGLlM4Dt5Rr5MCCRdrq8qh%2F1YCzes1%2BT3%2FoPWW4mGwjLcVGb0eUNuA2ujCPu43ER33d8A1wRvGf77jQwGI30z1KD%2BN9DgDNrtWAXGBM0vW7mOm9YOrKjdyir1YSxbtWMTWB6IDhhfr2GSmxev6HT7569UVt%2FhwkKKloUeVrmGJTL%2FgGPqvKOX1dcGBAjHuktGJn6Q5KlaGlHO0FP3K%2FTXJN03syTcL%2FOzqCUqBjTg%2BMuCwkMQdgln1LBjDXEXqC6oPDVqHombcXcRoOxXFceTGYpTQwP9tKrPV1ffcvrlJg5Cy97iRG7bvesJb3zgVAhvnsWbl77EDnATwsKFFG4oDEvUSHyTZQkAcPeTK1w8Oou0tsyV%2BgrEgB4I8BYMKo8aGNQc1UHQZ8C1DrXOH964dG%2BK03TCNw9FaGJ4ZwpXPB%2BqG8owevTFEkZsA4tpgQPZv9EbJHxtSTaWUQFAVIJqLyIAZ6bwllCleIQVxX1%2Fnq284TrCNgwZMnD3iVKYzXU0oiPa5m43jVkrBpa321Q3htWrfxL8W7ZY3FG6hun%2B9Rd5xHfqCIu7%2BHwTkh%2Fph2ruWsVgo6mt9uHYK6pvIh%2BkmZCKgtMCYpsUz09%2BP3f%2FYdLwY22lyBrvb75pyx1dUxsh%2BT0vvEGDihRbBpiuN%2B7Y2KzZs5pThiWkN5ia4cTC1PEcGzyRFV%2FDtAmCeMXQKQTF1Bf04V%2BMCnkcZ0yEIy9bb2GuPQop5dTYNPLalrD21fQ5IV8Q41n2A%2FKfNNN8r5Zo4U39oscrZtvz1X6x%2Bn4CyGPByfwSly%2FOA%2FwagFrgIEBRjhit8QPdnijiH%2BwoUVCyI3%2B4D6zpckvoHhHy9KCpJgGlPOAAO8AqpDeurznSlBYIPw%2FD6HGguEhCf0B%2F%2B%2Fo%2BQi5QIK%2BqajRMY7Jh%2BST%2B4eK20Olhylx4klGC8hj4hORxLUOogvS37%2FW0QgKcjIQD1dvyqDUsS6h84%2BYfONf%2BPoVE1TDq1OKXhl3H%2Bw%2F3cOjS924RK8t44eFp9ngVP6%2B8v19gslYjjWSVetk3BvtIR9vuju0vUJ930ZaXbq3YZOQk%2B5%2FHZas27DBrOHGwpWwa%2FHTSa9IV3RUN61NMLcdIS8g9sq%2Bj03RcPvP3DNu3XxF8j7vpvCu%2BJiJ%2FAQAf4xSCnEg5Pmw9HQPKYINJ%2Bd%2FGweaVZ0UwYCsrEdH1%2FUaJGgmYSEwIB2qLu%2F9UkrwTNoNtGrPw8feMU%2BiBbjczrEPGKaY0MBw%2FjZQbFH4W85PEIYH1OGhgox4QjV%2F9B69%2B7UJlPpGpwEw44aEyf1qPkQxad8oKeDGwmLjRaL1%2Fl2mn%2F3mgliIwZlaqrlyasbU7BFnUzfXqIvty2NePcVsqboeSI1jrJOINBGYx5MYOuSZ9IMCUoX%2BdHGdXy%2B%2Fh%2BOBS%2B1eigvIDHyg%2FOICXHsZKNSC77%2BvwUeXjgoM%2Fsn3rqN7uE33JcSl656X03oJSSEYFCAY%2F%2F4Q84KGZXQz5gNfxSRCbeDUz%2B9JQR%2BMSo3JH%2FfEeLzZPk%2BSrH7Ju%2B0Lc2hO2Kx0EF8U%2F4kY0MDn9VlswYBVl9l%2FDZzDyO0plAwJMbasEf%2BstNlEhuMU1YFGkvghaWWx%2F5s0M1iwHtv8qEv7YIBHCtXjYl51GZlBrZltccAk8Oizir3FSY9Bub9iSj%2FrLuvFDFiDcppyKPcNCa%2BM4WVXD0sWGdMySi6Lk%2Fveg8dDcGBePCz5uXQihYjHMdEXhy6j5Pv3xsv93hMzwpmErDNXokMSjiUcZs9UQ11csnnn%2FY0RfZHDAe%2BANtPZnjMTavtv2%2Bla5j0v62Wg0cD59AuvoEBB1ze%2FmULZ5XAlaQ%2FCn%2BOv2DavG7FZP6oT1QjPdZYJyCt7UX615bvNuv0WLnNFYhpy%2Fll5DKt%2B%2BXyl%2FC8ZBVwi6xoNdAvJmsM2ZeGvl%2F0SwvQYxGfGsqa9arzKvl9%2FuwIBjYu%2B3UxASsQ%2F2YWeD2O%2FVH73BP4N6ZuXnDAYZ%2BGZtg8lXRY4B3hsv%2FwR73hj2Cbu7veWvw0QAj1XNnDK9z1MrMqH7%2F%2BsGFuH9XHlKyox0CrRSH4R4v1%2FJ4f2LIzAlYXvvWpE2NspP0hPwQQhcPeNQwIaaYTrcMDMubLp3l2oauQQQy0Tfi8FeKHoSnvv2hXwRNqFNuEIIVJN%2BRit25fzupBhB%2BJkMPNnFy0pGTR3bpiQVX65XE7SK5BUsqCyl1Hf5M1NhH9zSplIJGfhtVttAf0G%2B%2BVbGyPSUKCOtVzlGlogQLtwqkqR6qJFeFOao%2Bqq7cqPm2BfQj2s9BSLQeqvTOV5f3OJOcP%2BkNaGa38j%2BmxlYr5FPYKMcM8b0CiO1OUeGBrUWY8QUuVt1Tp%2FAZqb%2F9nE5ctRV%2FxFUoX2%2FuhnX6vKX%2F%2B9URla5frlsL92aBF1J02BvixRONIDaMFGOy9BXppDcFvcFGDNApqZZ172cH1cV4z5fNrUdy5wIX0a5vM9DBgYCv8LdseA5BiUx2%2ByuT9fz1%2BSEaTHwrLDfec12zHEX%2FJ9pOuCQvAQjOo0J%2BGCOh9u3Llf4bn6f4JKHd9btQSiSMv2mN%2B%2Bx5O3DSfOjwGqTh5A77rBH5Py9pQSipQMO4FwvFOKaAGrcoAoGirknbt%2BSdSeBJxOoKZuKwW1fKcVMXKa9av28a1MIdqeg1%2BmToGG9JUDFdb39bmsIwGfkvIEOamRHIcYRaUELHLAP2xyfdRKK4w6rE15ARnZ5dWjPGj9bs25EZLAUxg%2FXDxI6bMXAMewnXlmr88nunUwOIdyIzNb3DRkL0%2Fhm93DYlh8ywHWKeQyq8m5UgZibhchak1dRn1%2F96hsLjOzHvcNXvkvk92E4l1MZo0%2FhMLgrLqpUv2vaA7%2FslX0Hu92vKzcua7zH1XAOsDX4fCffit%2FJrr1MQeIkBeunD%2B73syjzgJTOYGzp91jAkKkQH%2BkFrZPXzYQEATtI5hUSK21IDh1M%2FJ775WHShM%2FarVHGWedRSYVSDCWbRgxwEbq3%2BxmJm%2FUv%2BkmFrvdjNB0ArGH%2BhHkz3rmtW%2BUJ3vZ3fOe5%2BUUUiT6khrTcc9jiT53HCEwg5Za9Qt0byWy4qCLrf8nvyLi9E%2B576%2FBaJmmL%2Bt7P3ficmCEzgXsfV9aTQYK98AS6Py%2Fx%2B3%2B2mQ%2B5LL6VUSCwRmvmqNga1hT%2BpgFmQWuaf88nviMZMyfiQ5lqCXoCBYxLxkhA1Qz%2F5q2HqeaO4r7bRxGwRHPY8hui%2FSPfSCsESaNKO7SWKv9pQsRYDAd4KfestNFr8VfUB6DhygqkzuGuKnQdJeuOlQdWIGXPOFqAyHERcGy8O1MfahKNjig%2Fn3A%2FfuVBTe%2Fcbtjth8O2DopBuKx1WZpIv%2BMpQXkPgdtZQn049MAVT9UoHSCosuLJqsTY4H%2BoN%2BCi%2BLHXF4UhTLu3Unm4uFeQKkatpQGdK30mDTKLJeOeSSx5d16Ev3JLfklJrBi%2BX2UrJxBm4VfztpaNb65fWtwYY6g%2FPi%2FGPyvXqCkrDdu9%2BzG%2FJVW6gv6p5cr5xk%2FYKg5P3X%2FxN27dt68FG891W5%2BHCbuvx8i2hgMv38uvZAX%2BXg6fhVEB1x5Mf995kITwm9x8KI9yVh102LgQVTjMXP6hkGhkXD5fMaYnGwKc8Iekleoj6D7Ojd%2FtZ9rCKCJQ%2FeK3mqzx%2F1uI7%2FeWs12iTMx659KZ%2B%2FRAUUoaTUJpC8JAnc0WsjSBbsN14DNkXuKNuFVZMr5frlIc0Ktz%2FxhaXz6mLp9KIfn5sl9fiAV1Y1QqPdKHYI3UkYqn4WirB%2FNL2hP69Xr%2Fkr0VOvSu7XVr9ak9CIPyXd3r8OYhxdfQY6edfw3RbufWkLeIHXdELVRGHSZAeeHQbvi8mz06hX8kmpfUEuLBO%2FQ7O00YGvUIkDHvsGG%2Fd0T0RL%2FS%2BC4JGFDZ4dszS0r%2B0lPpdT%2F4LAsE%2BI%2FBIJDx5foCGFwqSQI3ZDDfPBtPwq%2Bl8DeFwfhpiQqceIzmWHfWkzJ4n%2FoJvQ7xVFVX8VP69WTWru%2F8EMKvvsVcvVXVJwwoorVeq34aEbBsKQShJRPPy0zHuI81tEOSq74AAABJhQZotC0oFf6E5X61PqvfX%2F%2F65fa1wJqt3z%2FEK7%2F%2Fv%2F9Zf9%2Fff%2FaucCX32qd%2FVpLiONkgIPTgzDQsVeWSCD88nb7wO4cwWXvbg6SfR5fq6zf9H7ig7mtsDvlqyyjl%2BJJDvTgM5AcMXBReJGA3PBpXCgbh8NnzWeeMJaILN4YDCtzw04l54B2g73gVw2BTDPgIkE4b4K3La40aKv4H8E4smXCQy8uS%2FX4bF4Ze0%2FCJueG1Ja9c%2FSLWT9%2F6tYPnW1ZP6kXXrFXrhJ65S%2FVrl4EcHeYB4VoonUSDhzx9L6gcwwZJVHOKhiywLUoDVmMRkTrrCrxpUtTmIKxj%2FbcdImaY1wolT8bY7w2cPXZnAZOggqRtjiNr1rBZ0KfrYZaK6UsBYw%2Ft29x6ZJ7b7dYE84GoSFPuNqqLF5XtRt0sPsw614O5eK7PQnLMHMdzY%2B9YDIl5manefKjOkO1uwteCQewntxoIAZySSNj%2FgzymetQwIGlUboCi5bOsgj2xr9W6WYfxMAVLMo%2Fqi%2Bw9HKdY77DhhvhAfpcY3IYVzUtlF5Kbaux2TIVphs26Ba9IH%2F7w2gCWjw7PenekB90995Niynfif82i%2BZB%2F2vrr9QhAkChED4wsCbYzwMEQqEuxnAMHLX%2BhbqtX7V%2B16%2FWK7v16X1c6174zCCj7Jf2XzD6%2Fj0GjT5noJ98TIFOMEdez4dGn8wrFlUYZeOEOnTEDTiFesDANoYZoyK0IEdljGp1C7pLPAGJA1gqLnpLPSQfy5JkrzGZ8WamwE%2B9vazHx11TThRXTqZhAAmDJCACcKiBItU80IEmwI6fPHvgA%2Bh5EZfTT00%2F%2FOH%2BiTv3nTh3wgp8DbgfoclrJfjcsouX8JKD%2BggtAnWSz5r1Cq%2Fhk4vwgszBAuqg%2BAsP4O4NR%2FVJcJoSVPDNX%2BKrlWK%2FVlWuvVcu5Za9cqvu0ggWIFLXEucnvKAcYDAL4VNWxigGIPJyZUiOvbFXye4PQLpw9mGOIOHcbBPUwBLAcdzE9f%2F5kPZ4prrotXXa%2BK9a%2FWKM9Xk4vWIGChAwcAyYyYglkcF9iUqSwPGrPUChZwKCUAYlBRVITdN8o1CUryt9Xcu6%2BNnBp%2BaKezgpwDHS8Bo6FhcTUDb1K9Z134WMt0vKDhYivQ9%2B1f5VlcH9WrSCt2O8aNL%2F9GE8Eex%2Fn3uMEiwpm4F3ug%2FcTgmPdwjE8%2FCRBROYd1MdWJ%2BEiDB2RYqSiVHqiyfR%2FigKVhZXs2yZ9fCbBQLxMFwSFuat8nkc9LyfERFF%2FoSwfrL1Xr3Xpy%2F2BWBaBMD4sIYnQWSY3kPZN2X9wIQNgOsb4HHEuxrAuk952AV3gtEWgzJoFU1cfDRMFBGRQdioTLxcO9n%2FcLDwq%2BxPV33XPVpdUib%2Fp1BVXAgjCT6JWphj1%2FymRxe%2Bj039y7L4l6uNx1MVqYhjjKMtgN%2FzdQY4bHQDWvEDtatvcivEC6TVyX5rIi6yMkPyV8Df3O0f8dh%2FFBoyFPfUunVCVqlqHG29CjEvapuX7Xtf1h%2FxN476E16sTeuU79oEG5BitaMMSMAIT00tfPrTnW0MCYqMOM90bbf7QeJ5aAHdJqJiCwO4IUGpDAGtkomTN7Q7oRZHiHp81eNmGIKCqTDUuqXwKYWB%2BFroOxpsD4P9qewB7h9zfN5TR77gBF8UuiTl74Vtjw0WHihccdCdawzYZKesAL6FjmAgippgjTWGIIg4dXQ9eJ1AGo%2BhBsCDPPJaeJaZ1HUT7%2B7%2FYM%2FnKpzjBFv%2Bt1EGvRsFLQggPoKeP%2Bx5qyprmN0kbOoFwN8fXCSNOyxRZf2i0wU3V9q%2FxdU5ug%2BPDbDnkG8LT7oOtYJxLhiH0%2Bq5Ycax8V5dONPt38mjDO8rBSLCMpKVkJgxM9le8adL0kpPlwYj%2FD8d9bgtSTHF0kny76NGGeFEO7fodLOjmv%2Flrl%2FXu79evVXY5aVcCiEBXd3zZwLYICEffg%2FDwTM93fW8eeCDwEb8D2JMJ4Arm4SoHvjebB8fUo6Ynl2kiMGQWRXlbp1srcakmGZ%2Fp%2F5faavGw5PJVhY8OEzGxLVmXPhuwee2M%2BBr4kNYbIqUq4kB8xwglxd3L%2F9gggLW0XmCOP%2But75Glfp97c3Xc73ErcHl3pem4PgCWauIw0MB4EULkj46IDL%2F9jfQMfwastbSeVFAmM51FjpGXFlN%2BsQPXbB2FBqeefKiGLl4jpuJm3JZol6H6pl8JHWOhKn%2FBGTOcISyy%2Fr4ICUcbGsJM%3D&media_id=1254206535166763008&segment_index=27" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:08 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:08 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_2rC3yHHaeeCMY7As3WucKw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:08 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112878094850; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:08 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "bb4022da03a58093169d546e6d7d5b3e", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19925", - "x-rate-limit-reset": "1587864356", - "x-response-time": "35", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "0095cea800f0ecb1", - "x-tsa-request-body-time": "96", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"Z8jsv6e1ht3y8puTyYsPa%2FerRlM%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=h7x0WiRHNoZUInd74Rs%2FHgp8S4qa5WEvLL95WZAjsZhJjHyjffeCjhO87GrvPvHS6wy%2BvqHTmH4uoK3v9cWCbue14x1GCQw0Syh7dpyfKr0FSWhlajwMf94MTPgI5HCGopqpgXD%2BT7tlkSC1Wqmkks4JRpaFnr%2F5BSPl8tilmuR%2BviRlPM8wUve8D8EgE0GgTlFbvuKxR38DwhsQAOCAHBQAGWAMQ5LBn4OngWHNl68l6adXJF9uOc1TRn%2F6BKU3CFK6kOjF6PVYn78AW30GxeHkWH7zwX%2FFQ2wHQofX%2FmZk5fk4D3OXRBpPkYnf7DnvfCmEBMCBcjZzsw%2BsmMyXGsBye%2BntAsNchDfZZKB5eLw%2BuM3y%2BquWFSx7YTXNTGEHsUEqPUo5HML%2F2N6U7BuTG5cQPjtDgHEI8cAAsHgDynsohg0qTJO9aBQXaHLnd7n40mK6GA92mQT0zrTeqTLrbBpbhZuVexwoD8KofsO2sBC87KUrZviMd8pZcHySTO7FPvBErGTeo%2FyJ7jLRDk%2FixHlCpA0xJBJFg67HHdjB5OvIaSpS%2Bq1h%2FYSLmRd0DttpYR6a3n40IxYcXyo%2BW5f38O0YimVWQfIMR5r8VOljCC%2BOhf6yXDV3HIlA07LBjLOyh0o0UsDxThXdgy8fh6mEJUNSp5ddcr5YG6%2FFW%2Bjk9Sl6zlX71v8PrTyNekuvJ%2Be8lektX8RrR8wmZwLA0zSEKZfB48p7nD3qz%2B%2FzUZgRmbT3ILvjKtN77aL3Cgq3nPHWZYX%2BX6wVATLD5CxZA2oG%2FrzXmAH8AMscdqohajwUJ8YS9uw0k2fUE9I3yQs8JTq9%2BaJTRLYXUD9v1D5QAovqXjjv%2FvJO8Yp7Ho7pge%2Fw3UvJYWlZuJ50IBHxAWWDzNZYRL9o6TEAkK89PY3sFW0kCpEGKvCaSwELoEUGT%2BXc5A73Fd%2FdaCpa0H%2B8bgYIVTXf4hdl%2F%2Bx429KpBV9z%2B8yBwVjoOAxrwQv%2Bvq8ERBIDhYNMV4fsh791FZxLyey%2FaqYcqeuv5BkOuF24Ymx2bBc%2BLgf6%2B1GJSNvhwuHFwumVsxqPBD%2B%2BRzvwnm35s6hwhqGawFQa7DBRzhykEbdQT%2Brl885AFTZOjmLdpEVhli%2BJXu58IOoCYEe1w%2FIQS4eA51oDuoKuWnuB8ahwwdbPcvsy%2BOBBzMoeg0ARWQ9Mz4mAAJc8B7kEBlXES70qA44DjKX%2BNbbvDHbmOewZk76lfYmnS3%2BMsLBvzfKGB%2BFij4OvwSvgXuOCIGLw1fhzBi7x%2F0QcRmd5oPXJHvtMXPB6BXOQe%2FaEeM4qa16bjG4F7txRV1QMXS36it51FidFRqHYYpuKWDYMcaDki087Fy0A%2F%2Bj%2FsebU908ep1wd1OjHIIHStI9zYlW5IXq6sO7sdDJcoy%2B0O2RrD9zGBvNJGEgskXh%2FC%2FHZWaucqgrDbD0VHRXOm%2BbBBBRTXENSeEr9o8BwOMDgJgKNxGTxvF4nmGDhmnRL%2F1JYfzcyGw20wXcKY8ZXagjXwqVeCl4Ev4%2B41nVmRkRoZHrSsOZabf%2BlRPSWE54JxcVyV%2Fn5f%2Fdeu9bLKGviHrGtf%2BX3vSDYi9Jf2IkWmpPdmWWwwdNqSyhgIwClwBq5QnMQ2IZLpYPn4Xu95Zaw0vo%2F77cN2BOUStfvGEj%2BaZAwN9%2B4JBe7wsv%2FWCgVhxF36GRQ8cuoFueHVAbbDfUGhRlC6x%2B5e%2F7LRw8d5q3v7coDGQQn8Ckx4i1gh3RKdXZuerNv%2FzgwPuUxbYRpAM2v9%2FfmXTgK6tH3pKLpDT89pi5gMrSgV%2FBYadidgZBINtfBmKbQqlnw5egzco8%2FW23DRWDH9OvsGCoZ%2B%2FCIkMQO2CQvzYMfl9fNDBecAoSJfJBX3NV7%2FlE5b%2FFalziFJ37s0mP4te%2FCtLcA%2FqD%2FZQlJm21hq%2FLDRpF8nl%2F3oJ%2BT6MZY%2FDcdGFvUGmrA4crP6Tlw9iMO9VCx8Gdh30IuWlqtHrGq34P%2FE81LP8v6P4JMdQbRauo%2BTp%2FrKZYG%2Bxfd9hmM0qxWprpx1FYJfyZwtuSS9%2FsNQPiwVEstHLnUoYGjjaJ%2FwYXaELuBYz%2Bgw7yMav42MHxtLzh8l7MaiTVxfV6sRHJDHBRx8G5MnTuoivutOhhC5EUL%2BBmDNzqQy0YepM%2BEVua3zOLLgVsBUvwUmFFwBRfD2hQOIFDCCqvSZQoYYStyidvgBmetYjRFdm0vbHFfdu3q%2FgmcJ3ozyXW2HGS3o01Lyz%2FFaRyeM7ewwFPboa%2B5Rh%2Fb%2FX3ZlhVz0woU5BPqh9BCc6f8sGqlUVz0aq389PaBXts7qYqu4LPVdXNZSthitGNHmzS6bik%2FZKKxQzEDZR8YIkO9CeEx4bFtw39fYFHqS%2F0d%2BnyzeiRX6LU9%2BoKzUV8%2BIETBjJWtClv8bgk2vEa2znUMDZM9zupzpVUln4R%2BYT%2FsFuEBCeRozXGVliHV4u1vjvAeMv1Vdd6uXSfW6hztKp9G4ywO%2F1Ww%2BCQtYCNugNs0Y9%2FjaGCF78KxswTtLf7yfaUVHFbnHm0doFLO%2F31ZDNXgu3r7BOcpoGPstOv7%2B%2FjxrvvcsOipwCJiyo9YO2gMHiH5x%2BGQeMQWkj5qAVa1Nynhosi9VwuWXFTHMf5fVGPZRsyElysPr6tzdrFW0MXaQKK0kgH7dSNaUsB%2Fhfz%2B%2FW17hXVE4lxt%2F7TGoIZ9ttOMx8hAR8JVQEv6tL9NUyIlX5BARh2quS%2FbLqAl8w7qurc5BAw8gKkfTtAq9pJx6iV8fyZnluGTqq%2BT7RAqH4Sw7w%2BYbCaq8wd15mFuKGnUgOrXIPA2YkcOsAq0wYmwY6DzaT%2FBGGR%2FgQaZflYyQ17w%2BJDIXCpNV1Vc%2Bt%2FWCOBDCIbEpR%2FRURSpxO0%2F4DvA0iz6QFzGuFTmrcp579EevV1S16LnKnIIRWb711ZiQwIkPXWXCbCdwQn8OnD6s69BJvsbTdVY59j4wh8dL2flyoTUeo%2BCG98cbBXdt90ro%2BDJ%2BPfhmMEL6%2BelL7JBM6Y6tEH1hXnzXsoE4eYSSDYNsaPH9QYEy4XGh%2F21%2BkTmvtXDnDvBr1wZmaeJH%2FwTicErZmzu%2FDe0EzYhar359586gsLwfZSukJfxZvziT%2B9SFBAI82zTMDETcY5qQldIF7p8X%2Bz4rvAr%2FpL8%2FYTt6gpKM1joa5pDhVbP%2Bm2ECTDYJFjzENqbk3f6RteWa6URPZQ7ug5hsg6u1gNhstl%2B45oFVYgZtxt3%2BsTyJWl%2FeSFBgV2mvNXSCLQh9gHSoB3L0u7JzIhBW9P%2BuIxBnY1ED7Mc86kvwlgoICyCiaYtSmxzx%2FKdTm8G4kB3AVAWT5xPF0sLh8TVjm%2FAKoB%2BChQ9ivEMxdNptXq1t4PsWWawHUBaA1hURihdWKrNLxosp4YKtwWHGQKSvy%2FIEQWFVbifC4fNoZNiLzYHYvhaPehUU%2FX0vJJ6sfkJJmvFkjsWwktaP%2FZWbehxy%2F2%2BbMwlAvSsbtzW5mNTqGt6r57YJesLdN7x%2FxVn%2B0CT439d8nz%2Fgi42Zd99EZiRyI%2FwS2o%2BPg0JgkbTdjeM0Ig6cqSRlvCva%2BCOrddjRY%2F5G1LWoa5EeoNWmrkBfI702RAgjLSo%2F5u9PePcGFkQf0vIU1kg3%2FeSSMoXphKnERlg3Elxf2EslAi0%2Bn0ZvEIsFfZryl0ilxgs6fmPw5w%2BmbXbLumbeEyiyaQyuOTwZzl8QYpj8mT8OuIHMZtz5eIeJeqqsutflKEO72fMKj62a%2F%2BYuK4kc6jK6gGOcuRBUmJL8zIvJ6ja%2F1E8xqG5V6tisrGir9aviav9etOuT37XBQQXa2lRo3Nfgm6niFFiFTZ%2BiOL%2FBEeNjW39rfu0XDq71LgiIQYILPF%2BDV%2B7KJBEI4ZHuLJ8uYTiIIpSxqbiTwzRPDuV1X2w9%2FUplI2%2F40J1Xhay9diUQhc99A3gp0wXJ0aYwAAicHUJgdviPWZcxVpcteh9V5eqq%2Bi%2F1f7Wrup68mGkf9Or9%2B%2Frv9a49X1YdHdojnhX3ePoprWQrqdPxA4LZPqveKR%2FqHM25G%2BXU%2BAAAA13QZoti2oFclVcQhNf%2F1zd93PXq83rl2r91avJ0rF9LB1zfXErVevVz1Ak947c6a8F4b8C%2BFgWCru7YnBuYg8Mrci7wbig%2Fy4K4hjw9x5pjsonwcgUDTAxQW2D%2FoiMUslRVpRHwbiPVD2y%2F4N4HkM4pfA0hU%2BXgY6xuHXFqV6tRddS5XYIdatjn9WEMstfXohEk5VqvVzJ6%2F%2Fgn7w7TMTd5g6rVVUVrINEJiH7v2sOhw3LUnO1uf1zO4q4U%2Bf6n57Gki0hP7j%2FgcHIGD0yp7gq4yxZ6ncKZSy5PMFI6JASg3G7o0c2GohBjXInlpiFz5Yt8nt%2FeCqBUFjZcjroOy64XDwGt6exhH7fqs%2B3UwBRcw9wU%2FPTNYLe5O0u4d4NXY3XSLIbm%2FUHfAMyHluWj4c%2Bt%2F3ygShYf8Evl1lbsmKOtRtqWiZa%2FVpO8XMPBRGzpcrbU7bLKN5V6KLXgnBGevjiT7rHDqJ9%2F%2F0h%2Fd1a9in7V5fVpLlv3WvtX%2FV9YCgBcAnIaEQZ%2FcDNgKYNZfBnX8CEYEsyIjD3n0VvpzqPHBIbiicUbMm5MLbisVm4hwe8OINy5vxeby%2FDEoMwUApBIHzTNIVh8NXJW1Apl9ndd0rA1IJNmH774Nrr8JK8g39LtQgorXIZETOwmFf77v5TnWIwb1EsE8l998%2Ffdejucauvlq%2F1qT1cu16sFVarjdcV5PvASPziAgWdgguzk0HIBbtA4gHvUBLGChYaMF9h98LSA7soGL8FwaO%2FQdEvxwsGl82h71wwu%2FBJyXV94rVXdzcy16r03en%2BiO1fJ%2BjIpDIxDR0JmmDSMNjuTeJBYx0pQBtdzjyVPHH%2BOU8WX9Ztr%2FbGYJnnhYbWeA%2BvpgYzuR5Cawi149ZXS7PG1%2Blfn0f2KXFfct2OhHLd%2FyrkyeqvN6uTTE6YzDBsBMa2MGmxvchslRgye5gHj4GaWYa8Q78nv4KCASpff1x9H2kjIUNHkNKmQeGnTB4Jl%2FHhM2PTbTHrve4PmkBqH9uXO9lFlwywLAYwRML%2BxKDceiL4mT0dzu7i2YOwgGOHHlNkA0MV0cI4ABNwBKBuIDKaAEgHtJAAEKI7YIAAqCHCQgJSmpjJ7AW7kAhsd2zIwOI%2F6bFyczepMQcmAbQ%2BlBw2C34DtgsL0Cq0CZXLA3y6%2B5Hk%2B81EKfYdacz1KqOBa3SgPu6hw466GjzUqN6%2FCC5xwWABAIATAkfggLF5rzJz5zUBsHDgUBoyoM7smKRnGdReE1JbU%2BgtaPNIDgPfL3GDnx%2BWfURh4BjpfNkvEJXN%2BIMEZ5jRlLcyYbN3J80gFcT00vsn4yeIMHYt6S%2BAGN00Q4vt4O6cEZ%2B%2F9%2BzvFPuisT3%2Br3RHOtVavJp%2Fgk81tTtoaTGhjw48cDh7hb5qM7x4aqdehFZDqctNLeyefOmo6W3f4PTNe%2FJD1IcVQ8AB%2BGQ0WwN4ceBRekxvWUppFjVN3sZ0Tcx%2BnUdz30DB6JZb3l9%2B6EHDF7mALnEHD17qvTBKa0mxJkkDQJtKtfh7BKrYOaz%2BUS6YgHX3Zqt0zgd19cevhjAX69xtOQ1WxLp8WDXoLGFNcnDOvioTH4N4xNXzWDMlkHvhjnYZtWDMRXGUWvDSKL3rgh5MGJcX5xK05%2F%2FmkXEfC8l%2Bq16dN%2FFL4HUKawP4W%2FA6hQeMu93%2BL3iih0EA%2B7u%2B7va3gXwRpmLub9pXEv%2F2CSOr5U2PwVbKZDQwugqEbx3kXhAHIQ%2BYvxvIkU1MSHhwreJRvW4%2F84gLqyKhZPDA%2F%2FCxW37mJ2%2FzkY8aa%2B4cKSXX48n1h4p8NkyWBErT8Of5k4ZbrSxshoQzAC6%2FnE%2FfOkEEaaVxi4josXWdRGeTr%2FTKmDKojwgMCcGcZN8CQKTVDYl9d3D9K5hs9%2FA4eSf4fyDUwQFMeKx8G7kIze6hgkJOWkx3925U27%2F%2BGJBg4IPg7iCmwxuNWyvfit2szEeTH0LMU8LoQ9Y%2BtTPeEqWoCEBEU278DwCIfB4sEHMXFOrT9YOEcG4UIKMV%2BY4AqymCEnDaFCu8x9hDsdHNYHpKNKKAMSPVdjt5SjzmseMK5zxCwgLUss6GMfNcA69sguP0X%2BI0OcMBWCRtckA9%2FL%2F6hMyBdqYUbB5vQfwqWnay%2Fg%2BEbBgTBbK%2BXGUhoNCTO%2FiTlM3yw1HMovgiLzdIvjyFY%2FzLw7TLWZWK1kE6rl12xjGxexP3BFMuTz%2B%2B9cOymyq6YZbbnjQG6OKc3Jts5mZL8KklE0G3YymCV0nRO98y3X%2FwzVgfpL7CIOk1iX7sEUeSab%2BI7o7lH85VWeHyQvd8vfS36t8R34CEOOI7u8X3d8ngAzQHrBAgmHCAqiDjNVvEB5eSFeU1djM5O5O8pq8ZJC4XR3JbkTBXEIcLZw41VujNwVBgpubU00y63eofmCf4VIFghoU1EYIfhiuZAdVBaIG%2Fy3WEvS7vF5PErFf3f0NKBC8lh3508f5kxbRRAbznQB9f6ghG2i3cggVCXBOai6LBj%2F4MNbwL0ZTHWOomn9fYI5V%2FXp1%2BcaUuzHjH%2FMKbjNO9bG5fik1DgcKkNSwAZqSmLkgOh4DhImr8OM%2BiG9cO8Ih9WatKT27X1S7ON9v96iy3o3jQQHp64KCcZEBfaPv1YCa%2FGZ1g%2FBP647ERLglzfgd5Rc8A%2BT3YCRlCBQhEGs%2B8O7U%2F4ovgqngHmISCGZ%2F2YdS4OkSYbuH0SZlzglKHyW60oU2VS4yfC1uTtHRbHljX57I2NivQvXgi1FOLEUv30yZLeuCbek93x%2FhMkvl50kQsN1LYbFtScG8yckNyWYy85E4w3uoICLr21JqOs%2FlwZjK%2FQGM9A%2Fhiwnssh4SH1PslE%2F7hfj8xA6N9fZAkaZ9Ef%2FBBvRXosI%2FjETslqzW3%2FJ61XFyXP5iO%2BvMJ5srbwRX48sc3dh0Um7kncwg6SDlDA4RvXXiFdP5PO%2FsJle7LJJvhEEJLb%2FsXNssV5Ndgkpy%2B7J6%2F%2FRKs6guKMxrWRms8J3%2FrD4mW0vGsDo6ugeV9HDuMJfp%2BpimqaoyCGTQCJfk%2FBZ5aBZZNjxY3Vtzh2CAiY5XwBvJiG83wA70ZBiLT9N%2B%2F5Jj93k%2BsnK8vr1vH5XEb36OZr829710c5SWQUcMBv3RPevs0NJAlvonl%2FfYosyj3e5cISiEcMzfujfd9EHt8j6G1V5CAd9fyfn9guqmOQmcQ%2Bf4UnwiaYGvRhVlAd9MqJ3AOWT6PvftfCQIMqSCtp8XimrGny7MUyPhfCbtBu8y4abqt%2Fk5f0hmA4Moj%2BlOzBqtagIdz99gwAfelK72zp9tsOzcPaHyPgYEYkmbDUMhQ%2BzG732GWXoZ%2BuZaBBW2uplJ5rMgXjc88VVpL%2FGlyUSCL28igSJJHu3Iu6TIp6YgHOkjA1xvb4xj%2F8MXggEpx%2BD%2BpJJgto%2BqL3LDbMg7WVOaCXoFAtYY93fkv2m9um%2BZ5er%2B8loQ%2F0bk%2BT6r%2FJ9%2F4S2dc8Na9J8VzMeNabrwru25lHkv0SDL7eQEkrEiDB2hbnYeMz1tCJ1iUH%2BOhKd38bufb2FCHVgRRooJqYIBJHFvSxQsgAg6CL%2BYqMzDJe%2Bg84ZHtHPk27stTC2Zf01cbEMY1VQ8ew95sKKDGLmNI%2FAoPZVsfjprDD4NmLJhl7%2BzSSELjiFt%2F8DnDSm%2FWM2rjXKTZzXM4UEetVVBY6ESn%2BWe8edr4dsKthjey%2BqQlkGBE9fUVQ2mT5oVRehyQ0LO8oqIBTlos8xqqhl4Tw8ZZa6mCk9slTZIiXVtVzl8XQNoTlQroBuQznckzy1guCBxouagnmouTGZXNgoz2J0L82e8UIy%2F8wUEIaxXyayWuVX333k9f1RmPy2tdj73u%2BnX8%2FCOm30v%2B5Jf66r2S6Pe6hzkhX85o9ZPe%2F%2FXZbRzqmS7f7BAIwJWVx4JO8vgCLEDzXola35%2FV0zFyny78vqhqRWNLvRx1ojDFNmheunRdxuQ5IvrqOEKKL9zaHiLNZBWQKTKuR58gOZP2ERBXxGbmu%2FpCTu0uJnqEaTN2%2BObAsfJR9iw%2FuOKFCFmJ4TOhZQ6sx9gg4gyyov%2FKjxW3%2FGX6MIEHMcKeakmYs4iXIPsEcfa2KVNYllhQojgus2NKkWYk4Nz%2BH%2BH8dg%2BwrjPc36QKZTL921CdEjt2%2BYfEOeprPgUeEJln62Iwhy2lUfJWQMbGe9IcOX2uaYFZd3bly9qywf5F3E3%2BTLTXo2XYISnpodhtXd%2Fmse%2Fy8vrzEdly%2F%2FXYI4%2FTXpvhSlxEBuuhcvpctxAx8pP1ydQS%2FviNDEzNqduy%2BXvRoP6Fp3u4mbJc1Wvc13%2BNr3pAkJqz7L%2FieSzfneXKI7TJIHviXkvCxaMg0IlSiBY1WHaXZV6CcFebxDhsRAKkU29csv9coUJBRsdINYr1TH3TvTnKmm6zMQ3SteE0L7luv9F1V161k8vHwpVyvYhTZ5Vw%2Fe9%2Fgkzw3NeoId1Y4w2csoyNBwRv9x9KJ%2BL23%2FswlGf1XWXxMTGQgglaGtOHiZfl8XGxVR1Hif0jWj9MsZPsuvBD6ZYsbcz12EyiCFynvNDViUcdL16SGtIKUn4Zy0T%2BorH6vfq%2Fdetfr4O%2BWrmyIPVnpqqrrEu%2F3qEbHOveFCdQASQUiEgSCg2CoUCw0CwkCwYC4VCg2CoRCgVIYVEJnidbT5%2BO%2Bfbvr3l0heXq%2FF5xzxk1STgbPzxvbsW3fNuEnc8J8L9HUa0LeeiTdua%2Fcnvu1x%2FyFNWGzf%2FHhCMaB9u2%2FRxorr6vCp7%2FHty2qlR%2BoA93wfsfkEW6UaCMV%2FfuEuoFnWeqeTuDL3v61HdZ1hr5yV3Y523t5%2BzPaQSCpqep6b8QQ%2B3o7L4CF3F3nXXkRR7%2BD1l8FeoA5ARWjwZCJjdb0KLl4oMFSATwg4ABHhSUKCIKEYKBUKCYSBYUBQLCQTBUKCUKBMKkEz3kvdd%2FHitYzW6utVXGXMx13xjURoc3bc2%2Bnk8S5P832DxVyz8Pg3LPxvRx89wY%2FGUuS8kvls8LMR8L%2FDsYpnBEHab80Cb4IvJUMa9J7Yc6zi3RsFkOPhBoIntkl7Pg0i4EYVa2P7BXuLf8lNW1dffUb11CPuPZDtnadN%2BS2p5K30pdK87xgHB2ejqzRbPPoWHHoNvFvYVm%2BNr8I42UHV4parkUV21FOztW6uclI1GzNAGe1gcBKFSQShIKCUKEYSCYiCYSBIKjQKiQKjExu9b3vidzet67u7pV1pWTXN5equpwPD6tx6e16r3PxHV685v%2B025gIyeXLX3p%2FQtP3Yh18cfrKNvyrymsMwx29pU6OPTcitA38aLSI58vQ5L%2BU%2BmMSP3mt%2F2GdYJ7gt0CEZ6iJkDnHDh5R6O7X4efvu4opHH56h2OYCy5Gf%2FCTh4JQ5d8lc9PPiFOPCCrb8dpmq6PmXwa9DQOfJRlnElQx5yFTqvGJfi5Faiu%2BbpcDgEqmf2UFihcqWKFSKc5d51zquOAAooWPzLaPsT2Jzyl3075x79Y%2Ffxm8ffWeWhNg5Fjbh6%2Bm7B%2Blqfhrhlxb%2BH29eiv%2BLNc2kvzvh%2FnK%2BnfjXwXZFPR1E%2Bo0M68e8o%2BNOx6Fm7aWzvKiy7TPkmfds5xEWR3k82%2B3qtoMLqDPfQA3cSefjaSUEAUAyoZ48kztBwmjVZo1fW61UslWVOnoW9Z1KHXOIOccBxnpGNXR3MjGOQznoUoFykQwea5564a1mIiwyjKJwNlyg4BKtSQJEQKiYJBYJhcKBYKBgLCUSBcKBMIiUJiEJhEJiEzvrcV%2BenPx6c6541SZeuN5mq1uuF1JY8bPn8MnZdx6NL6CH%2BW98X2oF%2BYv0606bWup7IQmNm%2B90ju4cvblxg9f%2Bdhzv%2FWFZa3utmOIQ0S79pSTb%2FCThmIekZ5LvYMPGop%2FWf%2Fooh6NxGbppT1FPGyz%2FkoD%2BviNI3n1eLSJ%2F%2F1RAKIKLPGoVnACNbAWqVRYwcBKlSUJCQRCQbBILBQMBYNBIKlQKhEJjUQhMQnZvpXrx%2BOfX189eOPHWpzrd689855lZnUpbQ5ujh0PqNv9438b8lE%2BB3yBdpFnfh98Rj5ijv6QAHth76F%2BXqOMH7Gou1%2FfUhf9ekeVvzuLFG%2FRU0hwJg%2BnT9djeeve9C8ED3RAkWEh65BsZkEFlY1x%2FbBg%2BG7cfyApCII1BV2iBCKBe4VN4DgASaZ%2FZUYLFypQsVIpz3rSbTroC4WVMbBafoT3jh3bwD9DWPJ%2B6bb4Xw1ztzOifaQs486DbgWaEq8qucmbMK4yURILTV1y8o2jcigQ02u3p2UdVNzydDPKMZjajHDZjMzjWypg5bM95ziY5%2FMrqJzdMp4%2ByNozvfQ8%2BA4kXA%2Fo%2FE9mFfM%2BAFAAmfJXEAGEuQahB57aggmUge%2BdCIDQutUvVsOMh8akdWg%2BwHVcC%2Fig7faF4KSapp728jG%2FNeCO%2BIF4nQBG5gAcAAAEpxBmi4LigV%2FoTFYzxyS167Wvi17%2F%2F9e%2FUqvr3UqVhD%2Bvdr2T8%2F9P%2FrG%2Bl79XPb%2F%2F%2BT5OX9e%2Fr1arXrvtWk4QXuiO17rV30rcAkROnDAUNiGjzwPowYKd3u76tXEtIUBXgVSAwvA%2F%2FFH8kjDz8U7QBBCB0MBwZx7hHZBw3kqJd%2FhsSlJ3eEtQVN8DBG3vAqSGbfTR%2Fe69hJebtt9F9e%2FXv1GIOBHXrte%2BT4jte%2FVvpE79cpLWv174mS6u9BExeBcxrJ%2BQ7BCGgP4QIGBiqpylQY3jSSTSMyurtfMzJmw2Wom2TualRi9PP5k1H8jZbSD9jrD%2BxFC4ZRguDMH2ih6MFANwe0oA6jAGkUbwRjFQ3LvNHx2IEhofoU4wwYafdvWRK%2F8d6sCKJArIbqcgndHe0rv8lAfEvyxaFfgZGWEonJL%2FI7emTP8ss2S%2BBXHhUJkyh3w491kzbiKlV%2BYyfO%2FFgnGlx0QteY%3D&media_id=1254206535166763008&segment_index=28" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:09 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:09 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_6yJjrf6tPGkf62VuuY8UMw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:09 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112935178444; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:09 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "8a084e0cb820099c7e1f171e46b386ec", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19924", - "x-rate-limit-reset": "1587864356", - "x-response-time": "31", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00a259d5001cf6c8", - "x-tsa-request-body-time": "69", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"Awx5TUISBHXs2Rzo8%2BLwlPE6y8s%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=xQY3SfrmjLhJXU1RVh%2Bit8NKUrjZzgnBB5qAt%2FjBNJ99PAbvaeZe7eY5dRT%2FwmCMMUCnk8kxeq4O82f7Qvu16tV6S199TXE7rX6pQWAugTCiY4h8Q9XbxTHEficeLfzUtu%2FL4dh6d9uo7RIDh44W98rLHbnumzo27wJYUG7xW56nc1FbltwvUEzMFdQHYVSGUfg7oYk9wXMMqeQlJKDqYg2xaBPArHCA014rbMxbOW0%2Bqh6fvzAe5b%2Fv8QRfDw%2FohBSdaAM6A5mXUmKlnHWmh16eDswxmP%2FoFha%2BBgbgctWwvllRUvGNSB65fBug8UVno9u7ivfU7EKaaZaw%2BxDcfcYXtggJWq1WtTCKzE2KlGkQsRL9N3ySeheUlq6X1cr1i%2FVpN%2B1i%2FV8n1%2F%2FR%2BxbLn91gKUMnJFgg1s6a%2F%2FrOHiARWId3fwagptwcS4dAMbCrV%2FE%2Bd67PAoag4CZDX5%2B%2B7nVNdEy2uXqrfr0l1uvS3k%2Fv6Xu%2FA2hfxBgoOgC9s8C88xyE5k1j0ZqKU4LYWfCAx%2BdwP0esKb1NAa%2BgQZeMWbrAU5FreOjkDlFhTQYseKkO7dYRONzKZ18dtaPXJME9lK41JeQk4TX%2BnO69DYsV16s%2B167XruvV8d%2B%2B1eT1y%2FXCrmr3gWQniycAtvjRq%2BXyJCBmsycaSOSXg5JcsBnvPAee8bHuASxYC%2BqrShe4pnfR3Swmr%2BkqsXxrKrCNt0f0Lfxle%2FXVb3qsV869df6sr1a%2BavWv1r9ak855c2NfxDBAK3DL%2FgY5UD1wSAC4zOFUwAKqXQADD0FSLQEJE82kGCxjX9YsQWN5QFPCqKpNgFPmLCUNc1trqgcG4uLDzZw%2BCW0Y8O%2BjCptB20lVZYpXeP%2BN%2FPNNzuIcbfZZSTwNC6EwkrZbrYTBtDsO4WYH8flnIf42D%2BopsIQBTmYkcM9%2FrGUOTNZ8eX%2Be7TWMeIIjgMamATAlcagP71IlY9RubzqV7Qatci3WBH6Me1AYZype%2BxBvfEdtWtIwtwVRdgnQ6vxYbjT%2FvLlD9gHRAKocSZ0b6xIhByrcq3QKlkISFbaIeBbdRvdDT%2F5wijFEHahIZWbW45fy%2F90Kf9Er5fl7unibv1a4T9zeNdyMOE3OJLaSARPWcN1xp5sU%2FC8N%2BJwPi8vspZCtG6WQFVaL8bBjM3CHGTFuufcv5X42eGWaVUv%2BKNxXyQEWKjfRqT%2F%2BHrDmTFlH87DURUsajGYqsZUjOrBrta9P40qgtF7ReG%2Bp6kBlaPPfTsUaSx2O2WzKZWRnzGjb3CtAn%2BVzX8Mx0LQLv4ciBv3DxBnkLWewmNkgK8nhtKxJKzX2R0h0B7cDDGp%2BX9vUb3IO9M5HvfuMsIK4KGroUzrWqhrv0h6d%2F1GywTdC5DH5fw11DKWP4CGV3LGjQG2T4MjIo25%2BaSTBoHF%2FyQ1z0ishHmFRg9%2FfRkEY6yI%2B34JhE%2Bs4kXLNJHyIE1ay4iEWdBmnAeVffovT3Xqy8DCO8D%2BI3jIGsVrASoqQWKXfd6wFfwwfNaTuoCG4Xt1LxhBwkc2oESMFvAu11h1Cnub%2BvIwYTDTJkgw0i4r%2Bhi%2FkapNwF%2Fpfy%2F%2BGocT%2FjwvIRP2Bd7annIbG4z6dFZf%2BFt%2BgJw1hxB9zK8PfGcZEW%2BP%2FGMhq4c0zjJGrGT4dKIfd337tkWGDivrvR0MUppSfP7nufTRT0rdQveQR0LH2GDe0ETdtoAVtNIJ%2FryKGDtc9EuX1Gwf0fV0lxCM2qAh9P1WpH4IXoe%2F3WGQS%2FDxIeMbEUieGE64o81YW036I6VQVEOtZAtzAgR16G7E8%2Fz9zH8dNU4VWZBiH7ZQFEK3pC68JPuj4RtuhhTpFIOtffuFSz3lIhhrzrUea%2F1h66A%2FoUagXKRDzFvu6%2Fl2OYv0grGWtQttHTgd05aIetaGiXWwjZvbR9%2F%2Fo8XujS4H4le%2BXfFf6s917vy%2B5n%2BCQ%2FEOWPnBRpA8eDweUgcgeDhC5Y14EIFRhk2JH%2FwJgeHESS0kr1kysGBAVArGxe8VigNwB3fG7uIADgG4sCZA1hE94QExGOaZRk1bZRV0fB8EQrPAAEAngXkzAAOYaoPnc%2BSAPLIuCuHSQHdgvtjn4h3%2F8KjXvGhLMXCjQq2HzLjmsOT9%2B8EGAMJWB%2Bp2ZqPbZRhAf8dQsCypRA1c%2F7U2LKsBHuH%2F57d67vDpM5CwmlswwSgxwNLQWwlLvRonoy8a457MEFLrGxW4%2BYezJ1nHTjVXDzh5wsAywDXDqnn%2BT696IWf9Ph%2BnROPr0sPKY56JuTT6ciD%2F0HbVIYzTYKbdu9fodl74b1v%2Fz2jJHF%2Fl9RN8QQNVwYu50x9mFjR3MXk43B8eUthE9c2iNxEQ3tJkPrRm9ToSL5nqmhX1h6PdATn5ElnqtrrythA23QNPXixw11KgZHfhFrHp%2BotQ7GXLgRZ5SIFGU5z4jVtZUVLbvDpxEEpMe7B7I579rykOeRe%2FeIvmoj4uIfgMgIAk7vXgfDsQ%2B71gfAW0IyYK7k7j94ORw8EgwlX1e7TYvF3C5WtxgJRpxjMizE5LBr5Han9PBG%2FvZ7HhMseEDd4l54AAgHd4BbEc0gWgj4ffNp8Bgb5mC31mkQfTSDbXVPJ6Re28P1oFWhhu7A1ci6vtSRqEGJR2sGKBD6RQExF1eCAoKMZlpZI0%2Bik4f%2F3OS6Bo0XEtCGMEAx0FltMubbWm2z1BrdPlT8fRVfky9GHU7vp6ILcd%2F9hMU7X2xpkt17heDywsNkkIHlgwoyFgMVtWntis9VUP7h4VxJDblKK3deGSmjHKtVLdsPNJt%2F69tJfL8VUs4ICuWnwBm6209RjPnOXa9%2F5tIQ%2B%2BaDhN3X4z8ELQ5%2Bl0it2z3fIjw0GhR2%2F5nC9np%2Fsfax7ERMERMpfwFu%2F1nfrBmLwSw%2BD13NxQzc8DzNvApmBqHBBBIPrLG87go65PUBDgQvwrLEA8C%2FPJgD1vlXQH5DQwIhlnSA0ZlrPsBW%2BK4uwGVKOGDj4kKeg0UO5mQO%2FaSeIwa7bOaU8NfP8n4%2BoJEG4ZgGGO4aOGKpZfh9Kl5f%2FRyKvEhpb91Q5uEBCXw4uXvZX3tYV8O%2BaXdYhM%2F7EUn7d36SL3erkBDxWONWauw4S48mIlsoHX3JIVsI7ECdp2t5P3SKkgqTuRFuJoDEUD3sEHV2hsd7wgfuaz4v4en1%2Fh2uRpSC%2FKe%2BzrHAQ1w%2F%2BpvBhRJqo8GAwDV5hP6jVcnDn0dIVpfXXWcZzhv0VzS3f8PLqNfRf%2F%2FpeluTL9%2FdEyrBMEUdxWi4IsoXbJz2GT9vWw%2BZhl0mggNxXOEpS8LCXJwp1bpgl803f222Hy42IjSLqIWMKjyTAr5MB%2BUc7BokpjzTn40NzxAUKa2KfmwQNpL1g6aQb8MRNmuEOJV%2Ft0xe6WoQ%2F50WzMTc8IXcLiOPsis5WWA5k6eMDJ9Pnt%2FD8lbE2ff8UMgzahZF6FpOsKiXnjiKQuHcdjSIOlZ%2FqBHu%2FLJ497h47scoYcG36JowTe9qADiaKZqMEAWNf8hj%2FsVAjUhJ4WGffkUWEG3lL7uThimY4M2K4gcB3znR692dWhMaRDtTjVW3d%2F403Gkf2acLrqYZvTfQSm5EGR3b6d3GXtGitrzlMGfpbKMomaTeSmT1z8QguU5d3wAi%2B7793319oWCDXp8niQnuHZmG7DCdhmTrknziRiVgg6l8Kah7ITS7vQqecq%2FlxGrXpNPXkWsJX9QSFi%2B%2BvXzcn3VbnNKrRHhhxzT%2Fruont5T4c5wuPA5K0QHDMlf%2FIWDobUv%2FthrB%2BGAzBl8bv0Nr%2Fr8FsbyXg9%2Bf9vwzeisrnwJt6304X6%2FBFd84%2BX%2B%2BgkRtNzggHkbTeHZUKCUZd793X6BYfkN2GIxkImsD1L7y13SJLCbRvk1U0epawK5PqyOioLkE0N6MuqBMbBG0YaD4ISwBRMT1ghJ1cocgrTwljK%2Fn2XPYJGBNP9fCAIOYhhCCRLJgGK%2FsRYXucvgR6Ry8jqwexX9jrNE69NfIa%2FGbfHftSS%2BiDCSKNifTW2XzKSk%2FS6HsHlcZwQQzRI%2Bmj%2FPW2DkuVmxSYxqFMnaY75Z%2BIwWJqE6oh8oGVP%2BJY%2Fgs9VXh8BspkdTg%2FTmpkHmE5uVtSr6VtzD%2FDWJvNGg7SYqJs9%2BgGV3MfyAg1pJlaBes54mStcbmtFfjvijX9bNe2TeNhsenKF6IWmS5O3mnE24Y7%2FNXyyejdXr1F%2F%2FVtah%2BCLpJdRf93qfZyh6ZIDWGeUxlhyEBbQy8Bkk05SSsYz0bHymcdU6%2BBOPm8w4J94%2F2WTxV%2Bg7V0KcEB6AirVbzXD5GM2KCoSjPk1TLMakDW4KwrNFArraf0F80efNzDBHn0weTjvIWn26kdUGmDiNucfWGyA1tPrj5rWpkfV%2FPX4cRPqduvOSBhvc7yESHKa%2FlHIwiW9hvPyyXZqaibUcHzTD%2F09gkLuAb7ePa6sPzsxU2T%2Fd3eDHLn%2F2GiFDUrHDiV6vf%2BT%2BXy9qlCIeOfGMZJ%2FifwI%2Fp4pc96%2BCFvm34%2BvljXGpjSI3VMUYw45Y6uW0YtdGCcoGgNO3ddqLhPQg2sTEV%2Bz9Oh%2FriaGkStTugANJnNRyoc4O1KgesfSRUzyCbI3oAqEHz%2FqX87gX33uFuzRD2D7%2Fe3OMIWxXpjsCSfjiHxyYFq2jkHDsVUSaZivy9DC2z4bBPGy28QI2yTntbWmgVi1dpS%2BQyERGFCkSdxDkdd8F8p0YoIkg45idBPGN6dDeTlsAVOdqjhsTB6gjWfuwJwOqC62uWQUwnVvfj5iiORFSq%2F3uPIH%2BGcswZmXi5sx2gzs4tL5PeMwjA6hkWRdXdVvCpDjN9EMYuIcEOS%2F6Edbcvo%2FVuvb%2F5d%2FsRlMWcn0%2FogXnCAaOG5cTCDv7g4QYu4qxtf%2FhjGY5YkCGddB9dRAfcqSeoMr84WKAJH6oOHF%2FsZMhJ0h8Rt6823YjeQg4hBc4boyCBS%2B%2FcJSG03%2BwfaNui32l7iJhhz5RXeT7e%2FJEIQB9%2FfL5fvk%2BxHPL9oMFu992Prkp6YJSJVmI%2B7ufhctg43Exby378dkKQx%2FCIpbQHWfLIBWttHvAX4QM772vCoxqQyYdzpfOU1cKlNxb%2FWm4vbjCx4EA5tUW3tb5zp8d79caePjVcTjwT%2Bo0g2qld7%2BwrDt0JgalUgldIsh7wP9brNFMF3Mp1aXc%2F%2FDIkQaKe4IaYrSrJLCHLk%2BHzLQuVl%2FaJw%2BVImYP8lqPipPhKxtEadCjSLC%2FFzcG2t88fB3wQ0xtW41l2vpa4jEc%2BDfttC5ziBc%2BPCia2pCBsn0foov7%2BStbkaEGf6EGxjyLk1OnUL3dnVar6kY1ZI%2Bnw%2BcoYCyvi4uf5Vp%2BjSYX%2Bzo19F8XkRn8Dd7%2FCXit252fghve4rWhu693J5OtVr%2BggQtKxdeoERIeSnLknZPO6vFXyi0PdR%2Frl5YiGRnYFj42NGb6l%2B6LAxevvE8fwVX0zDWU780u7XgjKrneX8rE8EEGv4Md2DV%2FhMniwo%2BgPZNHr6nfSrNLCkKsrhV52H2GGopMXB%2F00f0anBoGsTBhzXA2S%2BISlPM2%2BA1Qc2tfi%2BBIIOTuXUvqLCLBYWI3400Kmq2z98ooh%2BjsE%2FzUfrohApNhtSP9%2Fnet0tn99bFFhAqxc2tkhV3Ip1PXJY0iQsRLT8zu7YqsVQ7plP4lUf2hL3qtSk%2B%2F%2BS0WK%2FECGsmXr3Eaamxtr1%2Fv3FdJsvg%2BrJDN3uo4v%2FfovVPUbqLxBXvnx9NFyWK4cek%2FcVNUEWJ00Xqm1DvnzPEYzx2S1PqTTXye5Y8eMhKCXxA3klV%2BfWo8pCEz5fkoIj40EpRXd7ZvX3cnoWxLzU40hO%2F1Si7rdE7nVKfV4qvfOr1hz3XLT3N%2FECgdeeX%2BKRzZSJdpYmPJGPLswyI2cKPeAAAT1EGaLouqBXEXLd2hfVzVas7Vj9WLvv9WK5P%2Bj1YbVv%2F%2Ferq5Lkur7vA%2FhHwMIg4hf4vJ%2BYksHgUBANJulq0WkQN2ZI5CGl4aZxy0fWdfyffg4LIGKRcz0xXDXIUpnDBx9HA1%2FH8XJP1IaKbHfOwlyp%2FsSnV69Xwkpcr%2B1Uv66r1yu%2B%2FiF74iS7wfBQOGacMAqj3mT%2FB%2FdemDDuXB0jDYXMoFKUpnYIwHEDpDlonHYaR8gMEpbbX%2FXPHhUEg3dMQCwKMUZ4jIcHT4lCUOePg%2Fl9ETwdnHo1%2FhKrtdKbKbZCo1B2NohzFxrSEQJICWBOHjPt%2BH8HbJEX3OXwLxaAwB2lbmKq0Mv0J5a9IH32FXOtlDIkb4LXzbEuN7fjhdgqqW4DAXnvk%2F29ibQPOiOnHMm7k%2BN8OsYEYsEHgHv6XAa%2FjXnypbn1iSGF8fX5gmLhCd%2B%2Bezvvn1g35cLB8P9VVEr7WIZAQLP%2FPY59aw5kYa4EQMBspcp12OxchS8Sx4jHv9Ca%2FWK1f7qyvX3a%2Bv1yqqQYt9f3o369UEKK2tcLjjnMUcUf1px1f7YJcFlK3912PlD0SODvj9WqqqUrM24npjMWFn7TPBGQbqqi8i6qtw1pg1tUePJzg2pbN4GPUP28cLFkBYQtlsUYo1rQiny89YvgYzR463rWg0VfpYGAGoEhReEofYCwCl2OA%2FOuAqFZscccKRWfijLexDhbFYrPj8LGKMtisaxn5wUlknLn9agoo%2BgsYrFGJfphvbJDPSqNQXSoqU9TQOwHeZVsCVSFaKx%2BspOTFfQlinv1f9ZXd0ysW%2Bqr1y7V3An6Af%2FCCpva%2F6eKPhAYtYKNEv45Tk%2FuFP%2BHkP1l%2BCT85hQxewKy8GGuBZdg815Pz%2Fuu90V%2FH1ir1imXEd2uVWuX6kSTS756p1bL6YxIgQhQY0BL6%2FWZooK1KGSyjWCnZ%2BR4wN7Ut9JbMOQGRuJwAEZunQdx5yDMIRn%2F27BiFV6b%2Bsl%2FztKTscF39uiZa0nmZGVyZnS%2FLHtSm7lrQ11eryWr9LXrXa1iiaq7iXmYaYY8Cu6WCY7uYrfmf0GBjVF%2F10Ck0HUxA4ypfdGnOoQfLL6%2B4qdfmFINVE%2B%2B8nn6%2F6PFXEq%2FffayrDFa4RrN7q1ir1v3d9yvIzMMdmpZXcuRhlVhyfX%2B4eJjWRfMGxdmEugi5lDA9%2Fz5rqJNoEvUaUsCl9QE35VvRzZAbpyLW%2FQOmKx1oOSD%2BJRPIOUaRkmNi%2F1q0H4Pec75fTQEAdCJBM3x%2BO31W%2Fw0K44Y5WRpNf0vxuX3LEHSo%2FrKFzjPp3gAeMiPYSVOTYLsrL7IFvzX1GwOpsgd04ShkygwPv%2BImjjBGJkwn42M7fb%2FNEeMH0%2BbNSKZ1hl7Lqq1f5FrtalvxH%2F1VpK1au1avV%2FparLNs4bnyl%2BEzFNcEF7xssMC6BnMWCQNYkiHvP%2F0GIS6Aa8lOO30j1%2Blj6tRS%2BYv4fvHR1OEBeMMAdTv6nxZ146lZ%2BUVErc3ZjZRu0gRssb54D%2B8%2BTMuNxpxWOoeuJGF3n1dz2reIBdcVsTlOvCnTrvdsbR8acXIcn2Eo029pVZO4679Ovdz%2FwJiEQStXkYILzCYZ3rnQdqEXt%2BGWaR9L4V6Da8s%2Fxzkh%2BS%2FHO8YvNv%2BrhpvF2Rq%2F%2B4KiCsd1TtlNJ58yN%2BO89BWHue8dIaL7Q3bZv2sgvz1eA3l61ak8%2Fx%2FQNKlmPsIEnxoP5fOnNMgUQNaljRppbopGaP6bebQILBmLgiK7iyyZbDA1c8MYarGZaPm0I9BD8PIJjrLssUWjOv8%2BjCLCPTqeL9F79e%2FXqwO5kXLeCCBPZhS78CWTwJphYjd%2BHFfxBRo3EOPNp0L0QC%2BYGwbcMb65CjQIeBfnEFWlwl3pvDcZInxsdLdfG%2BwaW6MC2h4FZQXg09Q9%2FuetBHVC6UTahtn3p4BRVx38sx4hpb54gPw9WjBoE6IlewL3BD2sRJPr%2BQlfauIywLNqAReEOv9Ff73%2BCnIQReTw7JxDPH9DsOjdi4Engli3fnlH%2FJ4EdXQ3wDcIPHvg4%2BnBtPpAbCZZUb1BRQTzTuF5HYs3EU4vLS6jh3Qi3x4y9yg0OsnttS%2B%2FeDCid76af%2BnW309WfsKl3d86Z727TyPZRS%2FTfQ3jMd28IfNPdwk4z8gPeq5kwZXtNCoQHDGHqdKI9a8sjRBBIuGhPN%2Bvw8R5INs1AjFVGdUx4ht7QOHkdIlNdepb0E3Lf%2FBD0jUcfBRSUimVqn2%2FLDHEnEDw4MtTf%2BHKV5f38RapvYMDvPLAfcRNhpWCVxcsIt3qRBWaea%2FzM0zNZWXDNE7MtLD9yTNfr1XfNa8CQGARld3afXMDNgou4oxR3Zjdr6%2BcUMy4XK14MAgWq2dYIDAoDY0pMEcEOFsXUuYg4Q8RRIB8D4CcDHvAO7vrfULUP2w2ndj5F8vgUB99B2B1ABqRiMAW5wx6m3MQSgB8BcDOjqqoP7M569KDBsxfBX3BsUbLhzyHgQKUI1mFnsk%2BGhZwxDEOwRsbecHtdlAxukytVuVLTX%2BCAmgQRnHIIDOQ46GVaFleqd%2B7TRIof5PvXobVtmZ61WiAlECQ0vLShJIaYHbjr8w%2BHY1LVgHN3eRqRkNZb09L5LwyOGfxnYuS4HrJ7rtOFYTd%2Fazj3VxkU0coKFFTLyjgLMeG3cjSt3P%2Bg%2FOw07c%2FY9UxPJBqZxERARvUOr6Px6w1CJ11QJO73Hw9%2FVcO%2BmZYIoHG0CiyieYl9Xw5TP8SGchBsB6M4ap1cXzX4d5OH3%2BCqMiSGU1PHbs7KLd8vx5C%2BNdB48sD%2FqThaji2v8K0sXCFRmXFDbYP7pal2n%2BX8iVoEt3h6faeGSEdfQVpJMIJjrqNEUsH9N8pkMLrI%2FhyI5Si%2BvGxsf8d8d3frU%2BqvS8CAEPBYyCJf1hqVkqvyiEIi1pmDo0aCqyIwPm7%2Fn0lIkI3bK5mpPECwIiTUGK4JxyIALdLspfSBDcP3pPcsKuOsop1zIktPKszHSorkbifQdguu3yyf77%2BBp3YN5qBPYDeB9DjT%2FYOBMwdZFQ2Z06DN0WjnDROR1qh9fDkhwMSbIfYiSOvStM4Q2S%2F%2F5f%2FoLYQd%2FP6BEh2oglAxNKNDUPNUEA%2F2pqGhevBAkB6%2F7EgSjRLyKFzO%2B4ceDYla77IUUYRPAFNfPfrLhVQ%2FgghcA1FgZohJFgGjn0U%2B6Y5RwcJBq2KGSXfdZInYouhJ1VYQMsQf3e%2B%2B9T4JT3GSwvzGWjcbPXGSI018n766pVeuG%2BXA0uNiQ%2Fi2PG%2BuiR5T53afuWMv5fhwzClIJc3H46lDPYdw3LltM3wQtsP7zPu%2F9f0uieeI570JrA80JrL4EsOncN%2BsGJTCASiHSyYI5F%2B1gveCq90ZMXbTLt4Mv%2B1h68ABwoSMHcmx%2FY%2BDgLRpYDwKBLwJUXcsiIJlXoFwz4PiRdg1SE9%2Bq8XA%2FDtAn43oQOsNNtZ06V4rQe%2BgJp3tdTXiJbbYFrGaXurjeb1mR5P3g0nwt7uQI4D7hLDAn3wT%2BWKf7OQooa2y%2Fggj4masX9xgSBryeLopPGu3POXoYeE%2Bn%2Bu8NSu9tItkoPsIbiteGd6CyJqmf5yCI1b%2BLH25bFfca2HyvapbivsbzU1D08%2FNhzKuyYqSfom6wdvOzIFWkMeSZ0Wy2vkYSvf2otwYEDuW9jKs5FN6vuhDVwdbywYoxcqc5TCS0R8n74gih0mu4Yki%2FSCR85vow%2FvjNhu6jpQf2g9Ju9ER8MRDVvXKlGJf5fbtJwXwQLTFLpM3aIpQPVETa3X%2Fek2GNlcBd9mAEI7YxwA4nk7mCIaip7DUthxFO%2By3cXl%2BStWjbRa1q4aJYM9w%2F1G1iH%2BvOX%2Fy%2FXTYfI4ObQuw2x4yvDO589dxOAgjxeYr%2BX3KXwYFw5bxyBAEfNjdAl6BphhO7Wi4FilGQ1J4pRmUNThfHOXB2bLsf%2FyBuQNwPoQ14fDC294fS0f3NGgesGfse5x0SyI77EsaZpTfzwPQXocrGRLRZOmna7JYxASfGnnTyoGT4W4Qd1PMy2pKksMEtd6ycFDPVH9G%2F8YFzITRF979aVGaE%2FpMSLCola2ydJEWVhh2SQwmxP8yPvL77sPHvMEBwhtncDD4hfEB7d2ctF1oMJHcN97uCDwB7dTbzJnt9APBhEyQ4CleXD6leeTu6TSoDox3N60v%2FnYLzIPCRw5vapAjMqviZflO6vhoqCG7n45eheg8WSOOMnj%2FgDLvtTr1r7Yia60kw7g%2BKXGgaD6Rib%2FR%2F075%2BdDzYU9EGF7lafZOmyrLlz7uRZKkqrpUka8vE9u7XvaZYe7uAd%2Fg6tpgLG%2BNJKaIVgWqS2b7hqtESqV3C5MAiN6fv0EDkw9tuVQS2iHOGA3Gh40EbvCMmD9HBf4akdp7Dl71YGDDFx%2F9pBCh7AIV5PKKEwPSEw7wgL0LJD%2B905DEkvhmzMr3fSm2F8HwfmDblkVDWA%2F5d%2F7DpQUz0%2BPPjHS5Njh%2FL3t2sigX39MpjsMwRvnUZX7fDPcMBOUqWHb63l7dudq7%2BBv6DhDoHoffeeGX2LWsbn9pQriWPjglEBg%2BSFCHo2lYJA4En5Bd%2Fueqa%2BT8CLeY9f8hONgsb%2Bht33GOiK9MSQAZg4NSMc9QV6IdaKDv0qJEY7KBgiWzb32sWMgRS%2Be8lXYINb6YaIpJty%2FHSRFDZs3xMpS5%2BY79NgTaegqFqcO4SiMtzGXAviGCUbdq%2F89vrOS6Jl6VLABTO8kJm5jirIivTMhsKmdfLdUQKs5OBv%2FkIOLFWBukYAbhMRe2wCae713fandtZB8124lVdsX4VnBxcD%2BQyhlbQ%2FpUoIR%2BM6S%2BlaETB62IAhmmKOHZYtx3F%2BCV0yCR9L0cNrjPDKdOv8n2pidDaNBjMok5rtY2bFogz97pQ464w%2B7VNS9735YU4%2F69lD82YE4V3Cd4%2FhvkB1RAr2oUyxb2L4qLlq1IMwV8qT73RMNjXuREf%2B32tVX3mvDovieEs4lI%2FdWWT9%2Fie%2BdDuqdc3d5X5fmSte%2B5Zsn61rggwHYMPwpYecK9CiWEFwjqEzFlGkE%3D&media_id=1254206535166763008&segment_index=29" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:09 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:09 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_PtVWwHTE+lfKzZp3DJ0Z4Q==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:09 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786112995588563; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:09 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "d7f2dd35bb4cdbae597b6b9c4dc57a50", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19923", - "x-rate-limit-reset": "1587864356", - "x-response-time": "37", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00e808e000994db7", - "x-tsa-request-body-time": "96", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"%2FQDy1TCHkJBdRxIGkbwPuwY7dsQ%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=NWKm8KEqE%2BgNKmoVodUnvsnQfzoHAqg6ENtgwkWT5UcSA4pTjlgE1SZOT5GRyL0Srl%2BW3sEECM96OvJOp6PhUYM3jJhmRYOyjJQ6iHen9GrTs5x98kJIzvuCmTLLUjoxPlkQR993f4nVpHhe1ve6YmSjBrsFrE%2BtCA%2BTxvtoOchIIvCZvBGTmpFenq4QtB5kHw9qv8O9m92oz2da6e4Nrdu12YlbX8f0Mlccj7Gz%2FYXvd3eihpxhVOnTqVPU2DPwthpIjHtoSCNjv%2BEV7gr%2FC5A87GxmMJnjuUPd7Kjiyou%2F4o%2BuXdl1WOjDVrmsX8ownvx%2Fowp2yg2I7ouWkNbStM7uhS%2FddjSC9D7vVGK%2FMwjds2Li49J6JBGffLyQkQlX%2BS%2F7tVhLL%2BtXv9HVdSAoH%2BtGRBssxPC6K6tVXnmAuQ7pH2gaLGMooCKuSviAPa2q43OxYWzvWUc2EKUi5scHGZKI2W3Ssw1H4W71RgoVhg1Ny2jM6S7b%2BXl4A%2BdmQdjVpHEMLll%2FSmwU%2FIQ9uoAZEjGbPHESRudZS5bJhZVFEd7oJnC3gVlQtgcgTDaOc4llmzPj8ey2K%2BD5t2%2FiyCHEj4W8UYo6Z8vEOFziEivWTXorX91e9Kdd%2FQJzMCjonPD6IOAmFOn5%2BWX9lbUvLzGT3L0sLFIfwJzd2xyiI5c8ydJwMdxDCd76cYmg7xBFGamh7DGXIdGvKeTpRwgffPDgKdvsvveUaOo%2F78qmJovJ6b38oIbK%2FxbawRQl%2BHzD6V6%2FXuCIrhZLr9WfLjQYS3WsZbROQY7nxh77Mjl%2F9oK6FFzV492bUP56%2F7Y0QV8XeECi3%2FwRRcL6ZjRHeQZ1Rmn0Lqv%2FDPFhR1vgljdnoNZzrP7wTWb2ar5ejgl1npOeeFulPHDmnH4fEhWIflerkzGvMMmAdByPFzUq5HUd6P%2FxrBUQb2N1vuHjmFgdB48z5xaxfBXuDzxuB2NTwc4WAdCQH2tW%2FikMKfD3MVljUcngP8GM%2BHE8SHFSgD9kqraYwI7bT8%2FQXzY1WZOPkj9atX1lSY4o9Y%2FibCTivvkMgyTNSuxDnvy16O3vWJ%2BxC9JYIvCBGDp6bxZP5kk1EG8GaU1uo1yffpUCC7M1LE8CvTirTp2ZMSB940YPNwzqrKTGnHZOvbsZUVzaFJCNap1Jku9V3966DqGC9E3ZPDvcK33Kw3eJmjRQypJyz4NS8njvcgW1rpFSJB%2B5aTJ0N5L2y%2BX%2F2z19TyRdfRYrvo7BERbJSnOwT5fHLvl5U9QQdyDBDFM%2Fd3UkKo%2F77y9wM%2FSo%2F8fwl1zLn09uEnCPXX%2FgskskG6YpjMa6ncNO8IgGVOx%2B4rRSw%2F1FO9pVXd0qpJJJ%2FWngowFa6iulBkKtQB2jES538XhCr71spONvqtVHHffsGLfrjbReWQSMMWxXn2Ii77vu9ZCyj5MF3B244tWkbX4vXVDCz4FeDvxc2Dv43LEQ43FqljrM0xsP1hNvUd27yZqOcX4qbiQ68GMY3frVL6L67Wpf%2FXvJrLrJBLB6wQcxJoJ5R97iCOyuIhHJjOT7%2FwnczmsmDEr31gj5s2En10%2Bevn1m2Ql3Xt3QaLL86Wx0bHKwxPycuKo5bfQuSTSiA9Yn7ySwXCuM2G1hp79rclkSj79P0zUiZy%2BvKQq9r%2F9C2r1b%2BvXKRIj86v5%2Ft91OrSeIkzy0%2Fq9euuMv0Rqu74v1%2FIIlz5fljySZkwR%2BkC1qW%2BAAABFFQZovC8oFcgjv0Jbun%2FLxXwn8Idqy5rrr16ul77VpfV%2B%2F0VIvr4vmiarFLfL4CnBDk9wMECTsESDA7gbR8FB0Fly3clw4%2BvGFl%2B8EkEEb1ORee46d4fZCUvKeKwrZBJI91QU%2BIm1Xgsu%2BrggbQnJVtFrFLY7sPqyp1evVuif16oM%2B1aru1Yl9XKl9r8ODeCvTMphAUbBH%2F8Gg4aFOOZ7Yw3ii71HZOOT%2BHFibns0hpBzaPIfeoDIBMN8seF6iQdr%2FPvH1ElEM3KLB2J4MxNFm2kupTwMggbifFFqLCEIA4FQACCltxu%2Bj%2B4CUVc%2FP%2BFcwm4S6BWGkJeORpuBsBTXWCIqKNIWG6gJ1eP1hrJR2hVmpiXDBB9Furm4G20iNWMtI3Z%2Bm6HU3WiBFjfNEGNifJ8Bj%2BpYj%2Bqj0SxP0nbK6iWzbJEPy3Wpd7bevg8FjYl8HfpYA9JbsSTuXw8BklgBAcQeUEimXEjA2r1%2FQMOq6gUeSSrHkh%2FyLD3%2BCoeGJjFSry5xAqJwvF9trn06XjJ%2BBCSH%2Fd30tsctL1d1uqRr0Rh37q%2F1YkubBQIIJuYlXrsUg6OLHlg8Jbw4NXlf%2BfE9ZOfRDvcKwH%2Bc1%2Bs7%2Bez21lcT0ciUrdGZczvj%2F9Buva%2F7gc2Bnk03JShpTbasyIQDLfHFkDxFqtVFxMisZIeAKLOU8thrPTRjG8IFCqClvLBl2KDLGWMUYo2DxsPAvZYxRvEdB9Zh0Qx9eqnZrk5m6TnydqFD7BIWLpgkAZbAvBvcNsC4bOAjhNMJnaLVHnSEdLlJmBSG%2Fmug%2F0y1dQ0YkMOLZQ4FTSbZ%2FW%2BJQJtyy%2BX988Ev7Zm9%2Fh4JfXOlnyhnhlppF6IQd6xNiSsKNNVd%2FFovVi3frF3%2FdxNrVzPq%2BsKVrwixQy3B283m95GxIIdwb8XLb%2B%2BXBKLj%2FuO%2BPzlruFgqStVWq%2BfT5%2BIPJyAzVz4Lu%2Fz75fCLR%2Bu%2B8Uvxav0QvctWryXVU9VYbF7yGxgqAOtU0Z4LKTIxcFfem8aWcmtbx4CjI0K682g2TMd%2B37YDQTvpfE0yXHmhLhtfgLu7cH52Mx1hl91X6CLva7XuvtXPhPqX%2FXX8E%2BTz%2F4j1q%2FWCtPTRUCjmwbm99lJPp18%2FysExJ9iJsAt6oJxqbjb86fgop4GOqTVaMTyu%2B69Fa770yfsX%2Brnaue%2FqrqHLyZbq5rpe4Y7tqMKRFEWc0mBjB%2F8v09YRJaJnM2MqQS05j7jCuypBYdoGjTbSxxod8Pi76PulYMJbgNL%2F9goN2FH2VnkPePvJEIKFjyCfUDtoqizE2BzJJV7aQWSL1Moe6QjW0JYQhsy22O5YboJCkwAMx%2Ff0WZKsNepviIO8vvvn5axW%2FXu%2Br%2BS%2B%2B%2Bm0VF%2FovfqdKftAsJmsfIiJAiQbjz7gQCuFOYcbWxa%2FDEtG7eJN79uAuPx4jYxX4LM%2Bbnzd36%2FBPW0NHSxd1HWnljgma1xxW4wfer48XKBiV7khWYWqRw5Z%2Bppd5KCwQfifP%2FwSmDyPzZlPkX48YrWhFTkwMv96jOzPcF1yy9sUroQTMwcyG%2Fd%2FWPl%2B9qgpE5LUZPVrhj%2BbvO15yRz7W07VSi6Boy%2Bld%2FcI52A9Cgyyj4wil%2BOkl8P5rFKQEr10iWfKhrqXdvyeiuPrVc36xVaur7vZXUAREEypfAjxRaqtJxA%2FgQRI4ZdbvdeXOD%2BY14DkzLrweLGDXiAHAoOWYOUwuJoLYwDD0kfez%2FbKDHkgu5f6acbQTCV5%2BPGzyxMa1qHu0TAHLwJl2vdLBjarR8PcEECev5P50%2FY6vB%2FsX4LULrCRgRfIbPhaLvx9HCMWBA%2FjR99OSwYTb%2BTVVkKN%2BnZXkIV0sZxfoCBXj12UgkMz4dXsaQtBUPCZZmcI2gxyg8BWjBUHlE4%2FwsVz5cbu02sDh94y6KJJ%2FQI7vsPm6Q6U5f%2FwVkjTQYDWGUXX6L5VSDYEMWrUJ8xBHrTr%2B1MkXcASe8nf3wRT16FFj3ZILcs38T4QPh3KCnkvH9Age5%2FmzrZuTjPm5V57Dy63ZfRSNfr17rFV39k9%2FwZdcSNCi5eEAgJI73xXvHoCwvCQjweIbEAAGsOAALYIAA4cAHAeAFggAAphwB5wAcEBwxq0gUZZmHw0aG4tIw9ZfsxAJDRQym2yYQXm5RbRhvfPxsQAAS4LxUGUVHIKXsWc3L%2FH36hb2BWMmZWhuW64cGA6BgdkfQmiPW6I4CCeAxQL4dPwbbkFwCKGA2Pt4A3X4eSXJ8niQ9dB4nOMTpECfC4FKPDMop%2FQUK0ndpm7T3f8v7%2BNiUEDrCB4HTr0fQQ%2BQhJ%2BM9XYY95g4AL2RIIOXeQtCAuVpkcasFeR4dlpAkjUQEvkgW8T3l%2FbAgC3%2FDfdupV43c%2F%2FXvw93fuZeDsvA7SYRSeaismWsO5SJ134KrlnnLiex0dIh%2FRcZeOGyOH2GZi%2BAyk8vzlx9n7y8RNVIKacqL9JmXmmXJ8lb%2BH5OaQ%2FScpusCiJqg0Z4JGDl2vyohluoWcKQTnxhEhipSxlqj6Cu86vvAlW0f3cX9o8KZbozwyH8dZu3OYtYz3YVJusxBppW%2FLCO3NnOVvlGCmouek5Vg5a5u69f36xeHPeT%2By%2BN83wt8IfBmIy%2FXeNJqRtgvusJe8tjaVSVAksthNQJNjgZwHtehg%2FsWUqWiz2gR5JJ8RkSyN3Hsvh%2BA9k3se%2F70jY3QLgcw9vrSxV8K7E6NMN1TDrQQFgYlBBB5dxeTlpGyozhDI6dE1N1KfGyZVSYMhilx9l8H4QDIEpi9KHF0nWDY%2F4b0RQvZyur64Tm22Ejws%2BkC8XTvz9Zkj0%2F9wVCEU8EHL%2BUkM02HUbiBvpdydTOeeFio9ouaG5YskM8Dbp3F0wnbBf%2F5f8JB7ZHrF67ZQvVxtuOim8sM0X%2FYWL0YqZ1%2BjuFk7ApLf9Q5fG88P0h6P7cle0uLat52FSlIvnz10jU%2BpzIMEoKOG0ToD7G0TDOoCw%2FaD0ROlzMbyGJqXY%2B8%2BXoycMXZSII5Kgswtau8YWSjOQUXu%2Fm9Vl%2Brf%2Bf8vfSo7agTifUHWoJDaqVsvrXRiXv8FUU2dWBgO03KLDAPMFyg%2FBgUxYZ%2Bi%2BMOQ7Br1S3hqG1fU3e%2Bjn%2F0gtx2744zW0o1D6Wq8TP5%2Blf%2FthUwUQVPOGbvVeJByRyRij8v%2B3YcuPj49h9uMmFTO%2BXD18DGMecQbt31PxCZ%2F%2FenPjXbRX%2Bgrdlzer%2FekPO1PhqSkVMpJRoGBLhf%2FbDxMKpdUGjUlhMo3g%2FYVygirTvgSyTpxyCx%2FNbWXG1964zabqSw9hhcizwfSLh6uT3d1RjgyDRQZVYwMNInE%2BT5X8P6u2XL2J34P2GkHNW4rwXwSZ6d6%2FPEuBC%2Bm7pxk1R5HAw7Rf7NoFccMvYznOWAaE1Ct%2BWZ%2BXOr9zUI1lrKs%2Bhz%2BqfusHQX14uGtgTukH4Jml%2FdafwXk43HtVBIyHF0f56h0oaSXEUFW0TaZvVIPlJmhykWggOku5hg%2FsKjRgnYpx%2BgEugwSCZg89bvH2Qw%2Faukidk%2Br3w2UgQDA5oFTdShAxaX%2F%2FFXnhDcXkyFu%2F7T%2Bis%2FD5nfx48bDmVMyrFXM8dEhrrlH8MRkQHUjiSrQ7%2B3x8qdUN35N9jR4oUHKExn5GcjPYVPGJeyNimIevL7IBXxYzF9tcwvSzHBjxaWNhB5Pd26sEHG83l2aBQDDfIMaEgrucBsGSpocbkcp%2Bu8KEYXjJ%2FzegIThX5OaD9a%2BF9BxaiXHVBaz2hXDZXs6%2BcOhh2XpVsPTUSc1cVlx7e0J3giVaUv%2Bc9f4YhkEfbm9e7%2FXrJ%2Ba%2BTi%2BrU9eHTAf5ffWJuIrWI4vifbD2b8LZ1IgaBXFoFAeuBLblCXpkyWTuDLdUdJHw73Y8ngMQmNqky7IcYbqFpU%2F%2F6DcPpTkAa%2BIhv%2BcMBjg%2BD9w4QdF5uD7A10odvr%2FeT15doLlmGZeVcg%2BSj9szCcJefeOdfShSVyDWUywXXc%2Bm9Wn9%2BCa7dQj6orwON627u%2BTzTXxuf2hnWUub0f8S3081ypSMV%2B0Mk%2BUwyPC3PPQg4wuuT9QMCOuyvLhc4s1U04nh1Mv9YY2EOmv6BylyDOVpgmlW7YJI21vY3h9cZjoKK0SD1wBPJmQ1RDF30YcdgRtX496qaATOz4%2BHLQJj2D7gT2GV8IcZbmYQEwTU45RA34tWiusWSNbRG7Xk0WbGsaoC70WCKjruFeCG%2BAHIy%2FTw2onAvlsEcFVF2uNSrKjX9cq9ZfLK0kYboEpk2gWk5%2FOuJqGq%2FhNh2ZLc374c1ZkNzjhT0%2F6%2FAUV4vdSMZ6Vgh%2F8F%2Fl%2Bm%2FGYGK6gEYy0cfNQEL3X1unoYCykw75flsqsPUj6cABlNBeKRxeqelVWVoWx6CaRDcpGXGzxSLQ1EaJILzd69sMUhiiU8zC9Qe8Eek5kC79hgysXed%2BowdGHG41lO1cyENZcW%2B0R6%2BSf34k2Pee%2Fi%2B9ndHzvWzr1LPZ85f9vFR0dLxDFAQ0PBXEwpM%2F4QkibY3AgK9wcBlroFj4LG%2FaCNoBP15%2BB1jtHCDPsvLwKT%2Bv3E%2BbzcarnX14J5DZaaw6iCmW7e%2FSkVMZdihDo7t3dMt73P7blBBOIC5EaFp2%2BD19ifv6trR0QTZ3k9P8UTysZ2gkeN2Cyyyfpha02CDEBEDNGN%2FOQczpvGMMMT7SIYlUP77iYJanVfgKzenL6aI6jTA52g%2F6iet7qJGoELFYYyW1%2BRe23KSxTgx2Pvb36%2FitGw60IcYRmC%2Fz9TKGYcMEVulR4T1U5FO91y%2BURInhQq5F2SjqxoLNDZjn%2Busx1tGNbEIgws9sZq69XepRLD2BzHE8dqsp4kFZMFG0oeAVFhb1IkkI1RbH95Nbu9jWQSIhbnx7fVI20%2F4ZCIKJ8d3R3B9j7zQiES3vzYYXHoS%2Bre%2Fk9aq%2B%2B2aS%2FZqPeT1%2FbC%2B7n8PRJdNYavwXDvyeEt%2BJzsT5dMgEfkv69hmAd%2BvV0LsfclVoD%2BEO2ohxxoPstexDlPhwu43mRP5kyr%2FBFzG2t34JbK9E985%2BQhqe3om5%2F0ahjISfIaZ8SnGQVUrPf2LjN3d7xOjt%2BMmFt3YJzuRiVcjPX937%2B0HiZJXS3vNbPUfn8f%2FgoLdhPDeWe36hogr4vbDP4Ba5nZ26pQKeNQiubD6M8WFHJ6Zim46PEtJ%2Bp4ppMZz02nwa0v2Ird%2BCbXY5F%2B4WhaOn4VgTKldt7bX8Q%2FlPGAgcmOP8tS734cEB6XHPcPcxWK5YcDoplututI22rw%2BJLG7ly73qPjCxDQsaXPxHTbiXTpb1CBBu93E5XEOW58cVSuihX%2B2WMV12UUMLV6jXJ1tS8R%2Bq%2BxkvXqop58MzhUe77IExlVVV14yqkz1gnD5YYKok0hlxqqhrXLzJOmvG%2B9X69frUvmEJFn176%2FZ3KP%2BKvR2PSIt81Dx3Hz8vhxfJ%2Bu9e0963o5Iv5hhDqG8m7RNO6BZ40SrpInakG5XWryYAb3SaGrn8aI%2BnPmzPknoI5ppN5Thrx2CyOSlH%2Bw7mkyXc3kUDVfaU2%2FfduKVHIbu4yz2GmeGJcR%2FnxS6l%2FhyE8ucTo1bgkCGX%2BQpDkFky8DlD9hQ54oUvhKoZJRPd%2Bo%2B5buZiKu2n38w7Ef8uuw2aT18vwkxE6jBIuT8C5f1NgOvui1VpO3L8mnhQRM6tLfqf9J77u%2FxKF147%2Brk1SvV%2FrlVqdMn5%2F17Nqjl%2FvwUTUXa0my%2FX2FLvve8hq82Y%2F2evjxH0EnX0GjwQvL1437pkZYt%2F39etSr1YRiDvvPnvxEgxp6OXx03UM%2Fged4iFaHGmLbFXp8kPkBdcsOvO5ZZbg9YSK%2FJrT9rCZFF%2BJ5j2XhJHy5qVRdWvENC5UnglicGN5MznSW%2BGUJeW%2F0UtJKrS3%2BsXa1p1lFLXNTyzUO7t8ewoyxITM0fPl8AAA5VQZovi%2BoFd9IXX6xSX2r3UtV0sUl3f63c6sd%2FXat%2F%2F%2FW6pg%2Btdq%2FakTqr1r439XoZr1euX61%2BtfrXTKxXrX612r36v4OxJhVoOPIR6sH5woQMEJUGJ%2B9OPO%2BaxiybQl28GZXe7w3JSKh32NoFK0wv7LrvtD6r1cK1p9NtrXa5frVjuw%2BtdrKvV7uuJWvl%2FU1%2BrH6v%2BtdrW3CwSDnc7EX%2BNdfYYHBc15tjJwfHkpdo3%2F3uKFAuvfjRYAlNvsHWW1uGKxRmwQUocbq7aepGy9V6GQO0DbNeImgzgSguXx5QwQFAgOGDxsOvQmZv%2BGHEUlTAdFDSFJv2LVpLN8v1gog0Eh%2Fh2egj%2FO7e33APtW4A3E7nWU%2BrZ8OI4fDPFL%2BMFkJjc6by3fL42OxNncWJEhooVl8dRXX4wWCA61U5uyVZjYKiKtZHuPTgpaPlSBGZbQHACICEHAx3zA5hrq1wgXRggs740gHBxYxAVHqia4lFy8JVfta%2BP7V3a1yrFjnxztZXxHsRQomv6vCv2pH%2BTY52K6ymPn%2BcuvBvk4hM18pyHZezSbn0%2By%2F5UdlMkl3jmE2FJzy2KxWK3FYraB3yhFjFdoYxhXJGiS5LBijpCHDnBQYoxLh44WMsZYMUGOx8W59LreOreIKIYKaQH3nZOMov5ijLYoMUYrizJ5gJkH%2BIDQ8w04frowN7PX%2B6emf7TM1MGu1d%2FTjVbDgDTuRNCJkzA%2FCT2MDTXDJc%2FiwFYCMGP7%2Bs4Fuvv6K4gciUveO3KnderdCdCl%2FXq4qa1i5Vl6H%2FCPITrKE%2FeIFBMwWGZYRnL97onJBXXf0CIa0Fle2sdhAQaxXvrMWoGX%2FQK9aQfTDXgO2ga%2BoV3fLrRPhjv2%2Bc6cLFKfvqL%2Fjb9aq1aS5vWr9X7UUVesUlE9XRnxSv9DBktgxqBAxQYTihWcn8cZoRxetG3nSIXVwGfLxNRgjw3nQCiTOjVBh6BcEvDXnS1%2FMa58pyZN%2BgnVxNSqyXjV79enuvWu7jxfaNV9H7VeUiBDn%2F2wjMxY%2BNhuVjSdfEhbmhmrRX0136sd1Tfq0V6LF%2BqcPgoJy9B6hCxrTThomHGtaplpZfT44sM6SPqRFIMBnu16haGEA3Am4aPj2Nbr1W6L%2BeGBGIcBpGyxyeA2%2FCMhC1l1vBu487L9pZoUPDMnmHbQPsN5aPGBsGLP64GrfMCrn0gEfbnxOqwvramqTYFFNwHfygvNLOcIgJDf%2BiLp%2FWRL88tXE7aFP%2BuFv3DBsth3riZwB7d%2FpeCL52L5fd9IF%2FNJJNAfTNqRZFbFaoENoKHAbP46s788Mn%2FD09dl5EodVjmmr%2FirQqCT8XCRQ9aZ6ZFm3qPjSsGRx9d9RSfO92DLnW62V%2Fepoijau7njAF8PEzkxZsShZZ05eJy25BgcIXp3YOEjhu%2FqTSSpD%2BvUISdjGmyj5FXy7u6Q2XCclQfxvgNpIFHlqZjG2gYSpdNkp7bMO2vGrbnNrAQSH1xn6hjbyyfNcu2Ddeghz%2FcFkuDviCg%2By0UxpwKpKR73GVvoh9jrytfPg1Hb6UBJOSXu6bFLNRMkA5wwCQW%2BXnbWBRhQeLFLy5afwJ5QwbLghw%2BrEAYGKUwKUeEO%2BuHVF8acuFwQOHA4XGAkohBHnDQRs6%2BD90FfQ3iA2iX%2BjTJy1%2B4e2NodKzcGLghD49edIQnXnSTMcrVs8qP70lD1E9K0yUj5LcARNlH%2FoDjTdYbvrnjQ9yG0n78MIQU8ljBO6jeVR1%2FoCHXyJDxVIM0FBkuj9%2BqlygloYMrwwHGRg8J2DV9QyV01WoQaOm4n%2FqCLssPHrVwVXu4%2BRqzL7xm9rL%2Bt4fJuCbe4%2Ff6BPBN5eJIY8n%2BKNETQd942aXr1%2BCS8qjl6gjlZLgdphY8Py8pBDE59b4VKGJmZW6mkEA33sHfFk5Esf5fVdw7bW191ZyR06toxJb7JBpR1rXlj9eoeJQfPR3TM6JlMRJqZWIFKaazP8l91RMQX%2Fw8GgTieXHqfLL8KwwGmFo82XBDm7Wf6wKIYnKR27xiEBwHz7AFwxvWEA8C4eFBYrOdPhK8dwU8Ei1PMD1hSSEdJTQfuJMzQrwUG8Fg%2FGzgACWEMMAKggwlwQqoYSjAn8SFYdSY7jawmcsAOihFp1oFFuL%2BCo%2BX7l1rPd3wh8eRONBDfc1oX2ebEB%2FwYXTHSJxoMBvQa%2Bu0l90lQ2d9YJZZh9%2B%2B9Dl%2BQvELHwVEzU0SRK1Beota%2FBHWRl3fgku%2FFl%2FXwSzVUCH5oMucazcfBVFak2%2BqjRI9j%2BZg1GqMe%2Fznx8P3y6ReUZl9fwrVkSD64K5NJGdr4zGoFW%2FuCUmuaFnnayslbvzlXx4bEz5P2uOrx2XC98TUGvH3dF%2BJl8nd%2FlM7u%2FqsJv1GlCFzikIkTdSWaJGOdvpBOOERIYV6kXC%2FOgsvGIrZ4amjAH8v%2F0H4Ez7A%2F1nQOE97p3L0vePyfGxauRORtC2tQh0eXpDZ46X4J9ogZUjTNaLrJkyXfgpmsYIbDdpLr%2F7hgv%2BwQC3sfgkFvppQW48Ve5PrhupI6XL%2FhHW9V7v8EO28Vpv3e5Bj9685VyIjb68ORsZ44DSi%2FYR7n4njbV4d0M23fTqy8mr75aw7mwuE1fgIZ%2FiR9JLB9hM7SrWzhISCIm004%2BNxIOOH2w1a5MiuQmY6J2kWvIv1MrFAZRmEeLxEggMHdR8RyGWyNZd4DevosIKCk1uP4JyPvhLg%2BTi371KIpXdV14aPTlYqZRTZff7IytqOPrqP81HuZ4moB%2F6ssMHuDJ5FAZ7TPyvVx%2BDsjIPfJMVjZlryEngdJq1j9yetVdR%2FjdQa8%2F6E6%2FRqy%2Fv%2Ffl%2FnkTW9r%2F4ZJQZwgDGv1PD%2BCYsEH0jg7Td6i6mzrgUvw0RGSY8YGVY0PrP%2FDZSeEWanGP25kj%2FBJGhMU3w65%2Fwv0z6xUY6JygSkDAUCQyKP%2BCbe5v6f%2FyGveX%2F4RDRlxxBwfREgiOvl8KE%2FGn90i27vd5eOmz7%2FqW%2BgHTqy3GM%2F%2FDglM4IGiXhJoF%2F8I%2BGuojQ4yDKVK1roRqGP%2Fh80obgE1KRHg9qsJ9yyxq0ydefUGbbijQwl4xsCD%2F8EJXfi%2FD8xncMSbYSoscvp0uxMx7BDRXwwrS1u1ld9%2BjLUqt7nDM29UpttH3k%2FffJMABIIQQ%2FH9Z8v%2FTh%2FHssy4xbx8QG9ZzTw3TKroL4Jrw4i6FvQ60aGcqVtgjvd8PwRYcHoO00x%2FwS1yY%2BPgu7jPu%2FXD8N3vVWU0P%2BSGCQhRva7C8WaH0Krwrlp8I2BRgRQFzYlNj7%2BxXpCCUIMQI%3D&media_id=1254206535166763008&segment_index=30" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:10 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:10 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_KImBMpt7QSUPqH+jP7d3wQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:10 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113053714705; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:10 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "409842ae67c90d017e967aa8310c3e65", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19922", - "x-rate-limit-reset": "1587864356", - "x-response-time": "31", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "0049cc9500d19cd7", - "x-tsa-request-body-time": "64", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"cF0%2F1bNCsV5zG8vEINfrncApyjo%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=EQfEJ57ZpHhVnGFGDfLVjR8B3yGRWJuHBNAtFOgrwEp4AZEHJNuV5FoJDkJaFyLuaXy%2BVHaIoUo5XJCPtxbNejcbjxIPZd3x7trT3980ZSNGYfsf5X%2FG2SfQP%2F10wl%2FaiDihkOPBM27bVeKGBr01i%2Fl5sn5s5fapyof4Ac%2FtxJvmayr%2F8xeWmynGzKJE%2Fcv%2B1IGII6mFEgzntjMad30HhNoM%2BcgIxbz4Ej3Jyb0Ru1i6eI8EU2d1ePn97kTmJgUigGdRfw7VoGhAFmqEsbB4DoRECqo4ZEjMXz1YE%2F4LtWfUsGP1lzktM7OrwRZkCw8OdYw3%2BCuhlRFYlNNBXdrr8UQzEcprEH%2FnFv9Zul8bIQYMPM0V0Yz1zNZ%2FscGSSmkUw6VWiT2Wc%2BMEHo%2Bjjzd2HMYCCIltHmFPQxhfhqGq39usy4cvrXjSQ6e4ifzmdHD8VzWc6C0a02Sq8CI4xZDdz3flFxS2d6sN3fqauPdi3CR%2F0%2FrdsKZ%2BS8L6F7O7CPWwrYbM2bFgIS9JwE4zkL9ga%2F04vPGuOxpRcTYLM%2Fy8XLxBwG%2FBOJxxajvEtoupUZZKZfx70dZxEYNkYA3G1BMYxlLJ%2BVH8nHdO0OYl52kZemv8Yxy%2BdO4eh0mA%2FW8rATSGCcUn5W19n4%2BkvsVsC1bO%2F%2FhFeEevdcN5yIRPRX6Fnpl1kFGY6a8cUEL4GuJqyJMOKtZmGHGH0%2BGuWlP%2FD0Kr6m5WPf8RnfvfXqe356mRQPYINykHzZkhs%2BGYlvzqu4gjyorveT89XLu9rTxAnd7O%2B11FiJs8Gr8ZC7mrU8aWIb%2FKY8r3k%2F9TAR%2F7yCD%2FMYN2rELTC%2F8oVpkzFLzrAorWb0XjiyH5ggr9qRKOL3c%2Fv0hBDB7VDsS2AVrD84bDr8UK9RIsdzwpbQQ4kZU62fkpYob9m7wG5j5ql7O57hTlt8uFxFpl3rssVUM%2FK5k44ogIC0nG%2FCsQ4aKgXi0bhvJOPE1rQwQk1on4%2BX3G5mEApNT8uA%2FyV5eXifkXjWJMeLrF1xcX4kwveDz6W3rzsPlxDnNwV8s3fhMXUmeSj%2F1eXEteucNGmoz2PjA0TNw8Zf8Klptp1Y7P6dPl%2F3w1Tl9fuTKH1D927bd0ET%2BvGzx%2FwQx3FCb7i3eCy1SpyJL3eXqFr035cXxrTgYamWfJ4xP4XypYd6LGLedjg3O9b5fm%2FKQFKTNQd%2FySmwlqpn6ScK6Ybnk%2Fy6ozLca%2FyeG975JDLWT5LJFRiBPoIOP2wD%2F%2BkU7R%2BWtoS3M9cvPkvhF5uLx9kgquB0n5uY0thbenEERHNJhOvexYi0mt7Ox%2FOPxDsHfklZ72etjEQKCxHCzJ8ScdhMkdXOTE5iDvgdjU7hflvi0g%2BIra%2F3TLEuOO2VVJPKx93a%2Fv0Lasn6WKrsv7%2F%2BjM%2FBJk5b836I4q069CaqjKzdf%2B5DbtyfIsqK04LuOxDoyZ4anLD%2BD7Lj5ObnfSFFjXrN%2BohMF8ue9tV6ocnmMm1uKT6RGXdWMnpF3nnIu2XfrUQZxXeqNxUSbHaxfS1F%2BixSE8%2Fxf36F69Gcli%2F0UoK8Milo6k0u9o%2B944hIXIfC2XB0vA1J1JxyA%2FEXfbG1nMIAEimf2UFmpYwXIky3u5N5V%2BdADaVb2%2BQUtam4N3m%2FNstfOUOc9jz52s3wt%2FZyojkIYQvgLLD0icaz5xculIGIoKU6HFLUTo8l7cUZMxSJ3sCmgLJEZIRYACYgurRriYwm5IpHf%2FhP6fqq%2Br%2FLPf%2F1JbjOzncPrOq55mJaN1%2FdVy1%2Ft3%2Bsx8HIbcmki%2FeOY4BUITniqeQUzREeEmfAClApPvBlRQMx4lMHHZ1OdB1GgHp9sDd4Yau3MfG%2BhI1dodn40C2LqPQvxTz1gxWJ04%2FGggI4zhF4nsokonCOABIJn9mhgsVMJyKc5dXvae2gFQznJyZuUGly3RdXVrvS137JpgfAevFl35yR97p4rvTVHxfsv95Db%2F8oEMZhHcstZS9ACFTVJG1SLxhGSgC2CJK4JxBDlQK5jP6if4I6%2Fob6vi10cDlJz4rj%2BiMkwHK58dBAo70yaUdCk%2BSkkiEtuzcEYCC4ZCWA%2BYO8bCCPAUEiNIM5GhPpmUKNhC58hkVfCYLJopUWGw8n6MDT96HraEj0eoHe8OB4W2A3hpdtIWlU7dtKVblSsr4tOuszkPTMgIjFE0DZc4AR6Z%2FaIXLNyJMt5JM3WvOgcZytTTXRvhw21T7B8jSdIpAtq3Y1N8p5Ou6I%2Bx7dvxtLlfQtj5zZCDdgFL11fqmo9LeT7%2FyXw%2Fymnsvi4xXfaCdTSjBpTlwE4XhhezYkCL2IvdaDrzBkYHw3BfHMLvDgFk6unsCMz%2BdXX%2Ft42trui0UXKXBakp22Fp7Lrunml%2BfX8KJ%2B7p8eVNTmS3XTd2jtXOekZr%2FdDzOmT3Qs1vgQo4nDken3B7zCB77OxzaMDU0wjKRx7akVLWIQrlkhaUl69TUvQ%2BuxEQGIZIFRwBKNSQJCQShYSCYKhQbBQLBQJCMKDIKEYKBYQnUnn3yblXmKlpeNb69Km7le1JU4Hgd3HkfOO8PDYPFv2GkqqJ58XZBeovh2ttBpd8%2BP4TbyffNcer9beuXhGrum9P%2F2TxNeCa3r%2FW10Xm5k%2Fl7BgoHkVweIFk%2FPaqs%2BU2dC7rpWAuwzonvv7XwTeus8HPxVdAaaBCuwKCWnHrYNf2yDkQoK1VqWR9v5KQAAtQSI0yAbU0PglNCJsAAtxSUgE0779KNFrK3GROl6zII%2BguW6Kg4AEkFJAqEhIEgsFBsZwsFBEFBEFCMFAqFBMEwiZzrb4%2B29VnHcJKsJNzEVOqXU4HI3DL%2FuWfhuHxjiPNJJNVDqf9e3TNUMnL2nptlCX%2BU1HnLtlB%2BHOe13tGm0Vh%2Fe4X9ys674MwQB%2F7tskLDPW%2F8N12dPWEUmHz4LovKX1TzvEOrk1r1JSw1OxjgvzXK5P96o%2F4vF3y5F1TX7eHd24alFbLi%2FFssvJPiq4r8NpoqyQdxa0FCGkCHg%2FvthjvhpGwwIaZxOAxK%2BfJuN4jcUhgW%2FUDgAEmFIgoQgsFCSFhoFgohwoFQkFQoFQoFQmETN3fPHvd86745lS0EkxuXlXqCWPPu%2Br8PZ%2FdePgcs0P9iIMMPlHr1%2Bj97p6dN%2Bui%2F6x%2BeDRxX9pt%2Fgkt29%2F%2FeArUB%2BFZfY1lxv5o3X9eoydCO8pHtca73%2Bc2RJMpvmVrrlGNdHtiYm1j%2B%2Ft5GZCEsRjVJ7zRIoYeJf%2FTiGtbSFONWW2nrdHEwvcY7qFL%2BySZ%2BJah1SFFKkVpM1Q0kJUiXTxKWKQKaLg4ASQUlCQVCgVCQUCQUHIYCw0EwVCYUIQzCgTEgVCJ3Pt7%2BefHW1b8%2BrtKmt1cMvJNzipDQd%2F4cuGdnL9Nr4jy%2F%2F9Ebrs%2Fbu042Fhp8uDTeRD6zjnnpK%2B48hs5qE8R5fDI4PnmvTX1JrcV8BzJrLHV3T5Tby6MKr4Qsqdh4QLu6n%2FvX%2Bna7rlXxZ8rFOLTf2Rw6jPW%2F1D0n9%2BYxet681pm6ZxHZXADMkv2o2ojhFKiEIJi4tCKWlICKdCekDgAABARQZowDAoFd3k%2FP%2F9C%2B%2FXsIev9s3F9GczrX619f%2FEXa13%2Bsqta6lTonqbj6udyXVFyDl9d%2Fq5Vq3fd3wG8N6AEOcFwJQwIVhAfNSryAaWcsFePHUjTsGo3AlkXIK%2BEY0YyaCqjTjxoFS82XwIImQOGbBBxW5VGqUznWTnmezj3VF0agUyXWpG0EzI187SnTlhu89yv8Z7%2BhL45bXffat%2BpVd%2B69V9%2FrF%2Brd16skte7q%2B%2B1Y1hwKJBcj2nTEuJ2W%2FxrHDwUGEe8tHAr8e53fwyywM2DzG4vlCQobxzyrTJllx2kAAalzDAAGtLXHAAIkoDgAESU5gD065iH%2FXtDfDSLXYRN8cHXwPg0ABJEDgAtT0wcAdQcAFKAhhuWyJrNQSIpkzfCbGRPQR0mSTBt%2B5ZNbveRPYJ9bmIQoODK0EJ0UIbYXSBp5YGb9tjNtcwGDSwO9JeY5d12lJQbDEN%2FAQvxBXj01zt8cHvLaZCshEg8NJ%2FCvf4Zfoi6ZvXKFjjTjXx7QLYz3ps7%2BzFdRYL7sYmr80I2EJBkCCpCw8CNIK0%2BHmhI36J7abOBegvKtbaxcKgIQDobnABhiVBUZ8t8AGFrHbGJ5NX2BKMin2mK1e%2FWLkJ7%2FXqvi1Rf2tVKiN818yuWKWdVjespZMIqXlV228WxbmH%2FX6IO3R9%2BOefewmFWFIdIFxnHB%2FxhyWvuCypy23%2FNXGCqteucsf0xVvuW4rPmAwNFjFWED7Qw7NOMFD4GQi1OKsHG4tOxzMlRagquMMqQR7Uy4szDUKdVe3x%2BW%2BXcMQTw4NILnkrV1aR9ig0kR92bUyaexsljEYIDx5aDqn96kINY5%2Fxvef1L3hv3PPNdXLInV%2BvXfwn8R8%2BX3MClzEMKl%2FJ9fAv4fGx8bDzjqYEOTx9B6IvqLlRc%2FewjQJcDs14xjGcA0nGqFrruEgrf1VVUmMzoLKgMoJS%2FHTMsr1te4EZOS%2F17wxk9emlxS1fuuu1bqlwQ6qy%2F6uNEQS7d5jEKIUc9FF7oFP6FdE2ubdPdPLuzcl8k%2FK1%2BXacyRUIY1FkPFdhECrpEHzE%2BX8CcBVJAJrUZS6jzGlAtfZ%2F4H4PfsBPZy6%2FQr9Gql8R%2FQTe8Rr1dVq132rRd1qaalhJKK%2FKykOfjJhuX0oRyUzTWvQeJ4E2dcmbRy%2BBH%2B0Lqt0bua9PtdXcReOXl%2BtTer%2B6O3fuuX6NLY6gnJSEjj8aydFrJ%2Fb%2BFS2BHIL6R4dqWtIl0JGH089ruXD8i7PevSAAwt9ZEGrM%2Fs0Lsv8%2B99H6RO2rp248yK4ksOExnLRav0xPZPvd1CHCb6VvYGaD7lgFwndxqb9J5ZPhAoDtOWYL092wFrxeZH4leujQwhOT09CaY9Jcnocxtf8%2BSdZq2JVv1qvXr9a%2FVr9W%2FQsVJZP7%2FFjNhnpWHLYqXPWhB5EC%2Fyl1pyf3fQ%2BqGujYhRorwxMfghKQxz1T1yEZgPshEtb8sFWwpGPQLQGmC3QWObz5PTy3G%2BFn5kxa%2BrNMHMqE0v6NUeJj9%2BSs3xRAuckYfkMjmrNbReMG2gqUPdCPg754%2BJtw%2BssOl76D74qfL%2BEQ0B%2Fi4QgdtoV41LhTw05aa%2BIhqGq98w4D1%2BceUKNZesbwyf1EoZ3uvd369OK5VgUYfD4KDqtJVSSi8G4sOClwDmMyVMuCFr24I9x9PhLcprEf%2Fd4IC45S7V1AOLc019hhhshAVB7BBVxBJEzcFcGm9ww6ggDYPvoEIKVBY0mDfwU209MoYDjTEPhZCbvwXb0t3Z%2Bioo%2FDdBkIJaNpN%2FDmBMB%2FCBuai6elKx9WbdwUTmgkWGVf%2B4rOXYvig3y0Sk893yFZgj9XPgOlskK8YfaVPw7qVSh7N%2F%2F%2FHzG4Yd9oXPK9BlYlY%2FaLF%2F5dcSjP6q7tZdq5N69vjQ0GAWFd58iu7cXF4aCwgjvbu%2FeECg2HMzv%2BOxCELWFQXAyCI0a04u09wDavn7z9UFISIgLYtMd7dTzH8Z7vBkE8FMQAAQwIYArmIwl0GgsHEyGmra%2BnLBAcFsAPznFovPmwYcRcJ%2FRO%2FCMpj1Uwy1Tor%2FCdPZEnysX3nr46S3rUvY8rvZXvNJ%2F4JCYnmWX6%2FETGIxtD1%2Fq%2FJ71%2BIs2CQNzRZw9vh6W6oM3oGcaYw0hdLktJfaIRPvyIKzhYTXUq4zXMONLW8hsOrdoP%2FY2O2CQTRM%2BK8iCGxZvguhFBqYi%2BFwq6ubm36XoK3G2jXl1yVaijyy%2FGfYDyiCYbR87gmvubFHPlqflRcJuaX1esTFkd99%2BQgsj3e94hGLcQiCdPhQIjV2Bg%2FIlj66oDbFIgglAKAlKocywbUZMpSE%2FBNCLDz%2F7E1IxI9eG4xb5urkohf%2FILhpDgLH%2FDgga8qlQCfRU8fz%2BT378FdIkaHmpjs1Mi%2Fn6Jqif1P0CUpxmggashXR5ppyy%2F%2BocpDxG%2F3Kman3%2BEr392vgj8ImAUtdhkrOb9zYX%2F8MEyV0OMjCOn6SIZM7%2FP7426s2a4%2Fnr5HyPifXu1eXi94mE%2BtZVi%2FBH1X1eFYYRXlSMJEivD5s86%2BvnfQY55%2BHCSGKBMj246CSknV%2B7cd0Qfu8aaaO4ccN9uX%2F%2BImwTyZL115ywMvQpbNSmsKwWc%2BgM9z3Qw77QV7UbdLFV%2B6DUdmapf%2FQ80NAz5lBZIaHYwqrXjoYFsqcrUU9Cxaa2fYUqMajqropMJvaX6DWibRuS1yIvy%2F34qCV4WMXlMraMEwID3vjN47i9tvszYCyjUKN5owRN9gdjZf3y%2FXpfXv17nXUjoqJIJWvfOh0Fejv%2Bpsryx0sqBoEx14Ib74mT5%2FzUCw9cH0XL8EppofBE0X5ZJ%2BtfZyL7yP%2FIbc%2BSfSTUqKHRMu74qmsSFR4hbDm6tg3CfglTilPsMbuy3dWW3%2F%2FGnKzYEcQcNp64E%2B7qcLx8XCjHxfokkZN%2BCCcy4I%2FD%2BRfnbWvN4KdE00%2FDube9SSyEq0Goo8SkNL5f%2FLChm9uSCXquCT798aNmB2yo9J%2FNgO9R6p8JrokLlHGTh7zS1MMI%2FL5ahyJ3%2FQWj0cpZ%2BPEjgO%2F6jSP91cFtcq3V6l7vwQ13e7E3fNT9fyUBGl%2FBLfH87HfhuVi9SjMcdFA%2F%2BHCMBwnYKj1GRn9%2F%2BUrv%2FBJh0U8vUJPoPWG6csg9rPtNYRXtsmCcu%2BgzdOUnc%2BHVkhf2fM%2FB1e%2FoE8EWclJE9PHDTcA7%2FYMKrzkoklEWPhgB4zKd5SgvO8aDZ%2FxpLluHTjs4rlPDAfjYo6tAzlTuCATpf%2BCCF4nYPAAknwn5E%2FFYjqZDy8jvDGRgsFVZHm1LX8vnGHFKkNKA4eNy7ExHHzN1OluOX2hoAq4oqDCGTA2fCnXQwED9BRQPQAsrwABQcajASzxBfJYYTA3oNXCJ0ZhB4EsbSuaeNQ1%2BX1lSEjdFQYIGKt40EGA3jif%2BvdN7u0gEKkD7Wuhz%2F3x1oZyxY5a%2BakvIqWDxeHhzAx3e0SB7VjASupiWNsKbcnShxPPfBi8TVooVdFEDfEAnDbgw3TFtLz1FRAzNTQ3cCqXi%2BZizQbD22L8qU%2B%2BX2llkG6NhANmMnf5ZLRkQFKKI2Ek%2BK5G6d%2B7nudiQoYu6u1MSCfwyvp9fYIJzG5WQ%2B3SEZR2bC6V2ktTrZkNu3q8nBDv2EOuT%2FfwR6HqqGKhiElFDOnL%2FyYbLFJENDNyV%2F7d7vLDu3Xl7r1qa68hrUpH4K4cWp3jrnlt%2BPjJF%2BXroR36984Xz1dtJbQGKeXSD8cSLFfwtS33KFEI220cYz7u2eX6%2F19BK96DWvoL21chPjlOireov99kQIxL6UX2HueaH33ZFwJffy6UBxFv22z3NaFpggMVY4lewsQ%2FwY54B7wepkVD9uJeG47Di1xjQ%2FrUqGzqpNLMzQ7%2BtGse8DcJLu5Z20YISZhnJ9kOrhp70g9puisUpUnDc53Hp8QOgpbpbyui18AdjKGybggC93nGyZVAAjfOH2RIPiPgS%2FjtTPkRog0ztUsbzlY1oh44KRu6OvbHf0RFKJH5hpYgDsQ09JoA3QOt7IIYts44hGC9%2BD92QZH%2B4d0ct2xFGWXQ3TWS6Ip6FHX%2BsoSZApVc5mw7w10WBebS8kqcscahMKqPZOfDWQ8flQ02EhPDJyR02SgMVyws9O3t7m%2BVFPKrGfRPbbPDdRNFvdiA74S%2FFdpG9vXzaU1bqiAKQYCHLkMZaFz4HB%2B%2FFiBcr9DnFSvJO41ugbZ%2FU4ggst0Te%2FnyvA0BquLifZAyy314XsBn%2FKwl7PwDv23T7CWmdHsjw6twly%2FuzzQYqbUvlYl%2BdCAY8pnL9lKWj6dm4KM2WEbEDu49BawEB%2B7vqYuHb%2F4fcbVH1P4LIdT5e%2Bk%2B7xj8hNy3L%2F7nrmo3huKk%2B4c5eWMHETQK8%2Bj9gpPe%2Fb3Pl%2Fz8ZBfBJfmEBfd3e0GV%2FJJCBX9CujKQYQ3z1k4RM6crax0wimm4IQ%2BPwkPZnvv79yq%2FL8tu46zy0UfC%2BMAWmDFfN7M1HGLcrR8FRSLkOyrA4wcgNtpmM28rarX3SYS%2Fv0CUh1AeaNM2VRVDisSTtB5XjprAxBpRmotgb8iOe5RCv7pEvQOxL76aVP8WxK78f0sPgUAsCilN4483LsA7F4dLF8VExUqJ5UFPLnubjisFUFZePFQOpj4hBURgB8gmkkzfljKFH1NXUarrSqaDNR485ZYxWVAbwiFD283Uro6lnieOwQcnsvhMIDxxYCtDYzG%2FctuakJ8FUunz8WEApd2hvzuWxXeeAMI1Las7AgXrv5SntsW%2BLrTV6u8mvWvwREjWXyrwX45kZjjfP%2BjozspAeOhQ09P47Kc25Yru%2B%2B8v13Qmurt25ffqgX7Tn6rr%2BOcwRrewxWx7vX9mPGew1e9IA6QQR30JbROxw8NXoKT%2B7uQJZm3RyfS6Q3vY%2BNl%2BDNTYpYWsl30gnH%2B%2F2CUkBnt%2BkFPz16CrHGfrclf34iMvtpP7MDdfX%2BFaOaalTdxnU0BrGX2y71q4LITNVm5jHX3w1cXmp%2FvPBVAa8sPCjh57y0Z3xeEzhHd7u7u7vWFIIhHiWGOPcN67DGkryCuXUs2tVYZgvK%2FMpp%2B7kLbMZdv1ZYgheLxOnFs%2Fk%2FUJJkERhVdmO%2B6Stl07tq7y%2BY1SkKFC3cR8k1LaP5HYo1F4k4UGX5DSzoIGZCN%2BQeG%2FSRrHVjQjaIJkN%2B7%2FRekL%2F%2Buu74m7JG%2Ff32Qj77BbqsVlzY0%2BHM2IKH3yITVo29aIkCnit33bl3pzT2IKJfvNB7k%2B07N%2BT76kWusOCbu8rkl%2BsNCA1JqRFqPEuxry1fL6%2FoIdl8tdwQ%2Bx3NZ7ShywWyZ457wzJ7uFLuHOWlQd9KZQdRNy7aRmOEuHtHg7Y1dkQIMl7YaOL%2BfH5bFW3DWXdtabOH7su7vTKQbiGhzkc%2FltssqO9YuvScl5PL9q9S3YaK1SrHvW1%2Fn9onXaJ1fVrl8u0QQiED3e9k177YJQlkvP%2FmNTh6CGLidLPtakhe0FRNKgZkCCodX13xoth73bEMOAAAWfUGaMIwqBXXoTFdNiF%2BIr1aub4%2B7u5qvi1bf13%2F%2F79rXaxfLz%2F367natjFnr9akuvV75AwTLj4Nv2IpB%2F4NI5ZsNhgwSlodOuRFFzfr3gjgg834OlqQvF8Ruga2miBjCPJooqARnWLeVL8oP248o3hx8SMbh3vLcJyXcK8A%2Fgoy36faoLnvfHgOA69Pn4mGWNyEsMoWIQXCR%2Fpu3Qdm7RCAw7BuHTA38RcHpQ%2F25to25JXrv8zITUk9LCzxthlSizXcnrKvV%2B1ixRPyY75ir777Vuia4Rv1qWde1jglY27u8dQMNf50O2VjumMbRRf%2BXxw4cOlAhAuC8yUSctQX6JTrjBSY3sHzBhbZXtoVb6pu0SLuT8HDhQgFwQDZRsvezoI4OwGLGI%2BERbFYrNRdzMo8lPi2VSaYybKqifKTcqJb6oUYSJG1dyjwBXJzjgk7fS3bHTBn885EHHAtvoPIjuMaJC5EXxoHVZo1SLomT9mC5pwtBBmoHBqwIWa2PURqOIr2gA8WfoSm9L1iz4sdsDVt1n2yj%2FQmsM%2BsyDrej%2Bgv7hxtKDsS%2BIKZAkQPGNhINLYr63ywdKcx83LVF7cZPC9q7qhNj9u1ojhDsW%2BUM7zsY%2BDhysYSBxoPf%2FyHSr7hl%2BWfzhMsN2sUQsbwFz47WTKxHBjr4s0E91KhaG8qsuEvZxIgiYZAhEYWOvAH1NAPa8nVPiDXWAtqZ33%2BXEWP1fsGTGl4MAVQHABqbIAYtoESeDm0kNsSE0DvAV1JgdK4OvNsTaO%2FIyWr1Uvd4r%2FWv1r9e%2FXUtq%2F69%2Br%2FEzrfCt23cSwbzS8FC2d%2F9QWGd7u%2B750JkuUNGe%2BK2Id%2F3gQShCNPd72DxsYo93AG39QupSpMxjNOd27b9Np7BNiWZV1Za1XMyT274skMseXC5FZDWCR7awnMYMHB3Qqxzjj%2FWKsNTlJMfDBxsdH3UHT6r5MTIvS%2BLMUbcFZbhI2xcKQ6DiJxnljOPAaHx2XIZfySWw7VVGimg3Jur%2FEcv4nRNDd03lPKTjZknkAlgxMgQYWLja6%2FH3mbfXChI33j2j79OotelCXfpv%2BVb%2BCir36I%2FTRF91a5d5PP%2F773kqYZe9cJuQTRpn%2FfPgmptrqqpB5YIquuJ14k5xQjwDta9Xw06X3axVfS364c61fr1erFWpaTi1l33LffPl8UU4tGArxsBCLS%2BgFHC%2BjjQuR%2FB6oiAbBx9C2A%2FznKkjvY85Uq5EDxi%2FwpAyKVlTe3rmVO%2FuJloMA0v98IuEc0eYJZg3NQoyYAMNTwjEooGB%2F%2BP3afg71XmnFFddVKA8V1YdlsAKK%2FFcwn17w9qIdZ8BBaGLC5s%2F1A%2F3jhgxKNY9WBypCq6A0oJS4RY%2Fql8ci7vz%2FhPECQVUBFeFqiEr0PYF0AYn6Q4BK2kD8gjyDr9WKv9W7r16e1r9XLEclEfr0mSCjjkesLPJbEE9q6UrQRUEjb82Yen8n64XKGB0amOWor%2F5YYMRnGJGMeukzg1sn2HqvwnJeOl90lzqer1bml6Qd%2BiKJr1cJcpihjxlcrfhz5hxs2FcR%2Feao3wNiFVB1Gtj2EAAQAeI8Z86D2nwP8VUTjANZyx4IZrdFAMjaGpymgXG581mIxmjY6X1W3HXoDdb2zllHTVv1Xoe1Ec%2BiL6grhA40yg8FFY0B1%2BLRqPS44Y1IUVTYZf8jsME3DBB0swdWNIbX8Q1Dw09OQg0sOCbgguaeBiovy0H2F3w4XML8s6zRvPsW19kSLX1NzkwnxHPkxLSprD8ONtBVyEW38VnLBQqznz6qirjXWNfJpEleuJ61e79k%2BS6bqku5ZLvL1ziChzLYcaQGvznXFsQ8XICN656t98v2R9hiV7A%2BBBpvHjTK0qPV4nDw1CF5o%3D&media_id=1254206535166763008&segment_index=31" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:11 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:11 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_D67vLVKLcDBrdt0\/+zwywA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113111947894; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "b6bec65fa7585c6ee43b82b75e3deb25", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19921", - "x-rate-limit-reset": "1587864356", - "x-response-time": "40", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00eb298800bc5625", - "x-tsa-request-body-time": "64", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"xwYf7TyiVWODvWVfy1mzcgxFdyQ%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=wFfQ052%2BZ6CsMDUnINV2%2F%2FisTjU9%2F7GzG3%2BtA1sOe933MWxshMFGhFZvdMyM%2B%2BHd9TLJAmr%2FQHcV1bV8t%2BcnZjw62kg9IJwWKpFlayF7auawZYpvCo8%2BR234xiUD41SN6KWjrKNJEfvqhvkkl0NXjudPy2P2FgZ2i1PB%2FOW552YKHNIeliDKdv4%2BtuT8Kr8bPQa5qtyPTFjppg5wpsI8SaS0C%2BkUYMBhtMobkoIMxp5V2w3kqB2PUP%2BIuA7EUiffuRVESPIJB3I%2BEMjnvQg9ocvRbuQma8GrG8eb7OTYGQhPfeQg55li66pmjNJ6Xq4o73RHUdfHQ9WGkaPNBz3DRt%2BT7wanrDsaI6DKobUiiPP0nfYlr27oIuYyyf8W9L6vu%2BXl79vtYz9Yr9a%2FUt6F%2Frl2rVh3vDZgUiwQVrq%2FEOAHSX47vBCy9uAQtW%2FaXwqJEFDBMEHZD4%2BECyhCkHVHapMGbhGf5ASsELU4PQ73%2F%2BNnFygrHm1AsSuqGug2IBKbxz68zz4%2BbNAQBPU0%2BS80uXAf7XLz39942fCdpiRV4%2F%2Bo28RJfSV9FO4usf8dzUUF9v3UFdhmozOg%2FHWHAZsbzfGf%2FVXPg8h%2FAVxRwSkWDL%2FfjdRusggOrJJpQhu9X2otcRqmoLK7UnWB8jH5Nbeqfd717%2F8Zvj3M7H9hhD7UKvd7YWrJ235aA3nMZOOAb913iczauVP4cvev6HDOOZPV8lwQVSz9%2BYMwYwgNeEjtx%2BTxcusP2ChCwC8nUL7A2wcIuTAIXtezhPKB6JA1YwlgzlGNxkQ1PhXuGVVqpjSy7waf5Pcu6GsMYAtdJRo3IsTjTptWO%2BRSuEPqitDw1rxha88iDEgygn2FnKfeUYuR3H2e0yCvnfDafZ%2FGlDqf4uvZI5%2FwQu6n%2By%2BrBnLhSMtvpBuLBxYxwOMWG%2F70sKkYmmFPqFdPCL3NDUOynTJtT%2F9e4elL4dtocS2M2SqKEQFpoE3u%2FOYfv3U4qtSXfau77rkkveowOCPL3f3qMCQIrvvvJhBCGN%2FGIQx8QqVcEA0aEaijLguKG7s4gAHDJGKACcxsD6V9neMyrY48oMRhKNsB7yMw%2BRYJPx6HdJ7GxIGgWA%2BK6WSMYOQslVJaV1xfQ1TfT5rEOQ30BpEGBquMokrvq1Qg5zRUoMzVvf44vbIeyYEQdh7QLlnl%2F9xvcLPLrgc3iWQFwBs02wNsbXhg7i0Mxz5IMBf7vfnhpYwtuxWlFjhiYquGbi7tnK2MbjA2AV9G%2F%2FLiixmPh8lxeg4ZogjVz1PgLs8QgZ%2FoZuM2eXoWiI0%2FjcKj7fqP%2F8Ow3DV6j0ykQ2u%2B2G9n%2FhlFT0FNl8LS%2Bmxu4%2FiH3RSKHDyzP%2F8QV3rkx5fveguSOyqB3kzK9Bb4%2B18dTbHGkGURN8%2Flq3jAepjX80GbBlaB9td4882Gumfe%2FEIKwgYu8cuMR9hfuIUDXCrt0iLfdeiXfP5fv8O5qEfqGstssD8chBU3EMXSgTRDHmhFTdgkel9nHPhde%2Bf9q5f38PYDA7W650BbjB3GIGXmbgSSBrWmfasD18FvLNIw6FW%2BNlWIjS8JkWDhV9kPyCWnqR1%2FU9NAOd9Olj7MDiuuzv%2BFeDmJA%2FIKY4D16aHPyzC54fg4ZfTgZvf3HrDKsO%2FVifByE%2F1yq%2FHohXPfxLCIhV3vd9d%2BdfjeER%2BAQypM2BgYqAxQoiMDBL%2BANDnUf3%2FnzcoOsqCkoeqJT9Y1Ph9gbYR%2BNhHgP5YII5ISm9hXgGNaUH1r8tysfEJuDA5bs0YjTZszEL%2FpODAp8yVqT8aWEYIGhRmHkAhXQEQGrniXGmOlRZJl9tHe7I2I5ivShhKJwP%2BtYVhP7t08UUlRg%2FC0D%2BIlbDcvdKrWN6BvOaHQ213eT%2BUsJy6iXuH4%2BMnu%2B8tjhrEqOoRd7v66w51U4qGlZ32i%2B%2FZ0Tt8RRKwOXbXwTFZosPJ%2Ft93x%2FhyWmwUY%2FlDBPt%2FnsMdfLdw1gMHbK53k4Y5aASfz9nP0IuSUPw8eloWevQc5eIYN%2BlWGW61k4YymXCcf6Pu8PhYCWNZMEhCq95QmeZkBR%2FqynyQicMByeTVW0G6J3m7mjjq3RgObfPv%2FuEM7L46%2B3%2FqCax7scZy7p8uxRMlffgf%2FoeuGwJtQSdm7bqw8Ss3x59nMW0DoiHFwIReColVMq1F4Hgpi7EJGvlcL9w8VOPU0qUkSMiIoFDnIJ4UUIgn%2FtUb6qDzhXoqOQ0M4bl9BHvspQ3P4D93yW%2Bu3%2F9tMaH18pQ6QCMvNbp5FeFMavXIXY6WeBwS31wS8atgYC1OdTL%2F9hi%2BbHLWAqAl2CBHsb3yjgSsGXuew7s2EajqMzLzPAkH%2Fofuaqex90%2FUNZGJ950VDoKi2U%2Fe9DK3f5IMCi6ru1y%2FtDa0ytAnuOq8E92Nj8dJhLMHPue30Mxb1kv6GytkDu3Lbd69lGkgox9C9oupzNBFEKzF8T2L4HoaYT1BH8x5NWNpj5I9Rom7DaufG9todURn%2B41rhMJI5NLAsOadce53aBJ3T%2Bkvty5zDSXoi7Q%2BeOCMdy5hyXLdVGTkoJME0NGbWz0YnruJJOnW5Cjard%2BdDhsNUNiT6XoJPqT2cV1sOP5IvX9%2BDB7%2FYd9HxsVZC2Z7zV%2FIbpeGI8FDRnKPEwtpyKmfUk%2Bf%2FXuH%2FVYIXWwyUHyC68cqKtIh4aD%2BUEoBb11v51pfXEpikyDFbNIGb4rZOfepaBAwaTB2G3Pt9zlW9Ty33jsV9XCfxPWi9pzr3BEId3xepCXvf0hLZPXStkDXQJCYBazJn7vxpP91YWJRxgFShqwQrIPgrB4nK1OGCI8v4PoEQMI%2BJBSzl%2BvcPl6OAV6JoQkiQYEzI8Sdxw8EHg2%2FMibMPb0WxRD08ax%2BiAoKrFwOtB4C2K5Uz9WWCfGstQJWxZvN9axi%2Fc6K29qwQEJZLHjB2LHBBZ8uvKFigac%2BELtrBnK0Q%2FsO8VsaGZjCyx4bDl%2BBMmwbD6Eaye7BFuoLalMdalMd7pcvjEVeNLHdI8sEYdxdYf%2BG0T4tBCfzB80HLRB0bPA2lfGZi%2B0DDrJX2RJd%2F7ky%2F8LnwgaxqjAXAkbuIPWAqcNhECeufHST%2FS0XcWHJX%2F4ILx5VgwjQa6i4AzRocib4P4fF2Nuj5%2FAe%2F9XU51Lf8n3f0CAxj2MCTwK%2B3Cp1W%2BQodp888rxte%2BzRc3EibYYZSmYqnwucNiaoHequfeU3U8oHtOv8DA1Tbn%2F1%2BTwISqcbNeIcNDz2bhB8JffLb9lq8TXExN23IGpoDkuyiYKw9739kOR%2Fqe0SfS5Se71RepDqEtXvvR57%2Fty7l7J4vyMbnxdppVSnw8MuOvtDkhK%2BIIyetfIHiVwgLtygMYikYTY%2BbuNUsH1Wg%2FJ0u3pftTv3vjsNe%2BO20buZe8v%2BCORRHoRV25EUbtiSEXDoL2K6JFo3sidrtd2BEh6h2dzCbX%2BT7TtqhxXfy5nxvqnoL4D%2BycaaT%2BDb6%2FXb8zEz5P35MEvpZslgIbzN%2FIGeRAHWpbHwkcqU7i6zS%2FYvggIDO0EJsvU3Ik5HjJ5GQWMV2CMYlsbofsPWiAr1v3e7hIxPGqa%2BRiWyMbXnH0dDcbMA94pzy%2BgQEN3M3%2BzSQgfr5%2F8wphhKs6ggaURPvye7siLjZzTHiuRiduP6e6lGn4RNcB%2FNlGMISBUxC9f%2BgPIVUlrDghFpmXPgP%2FZBsWZ%2Fiisudjgw7n3DgfK9Z%2BAfNbomsxu%2BK2h6fhuH3uR2HQZIHI85GXJD1G0eh%2FOgD4t1rYFlFS%2Bmrbc%2BCIaDm7sVb0M2oXxw1KpbIGlbF1fsgNaE1VHKbj1P%2BZzOxL4%2FSLcj0yR7y%2BlVFMHqzPCF3Rr5vDgyxM%2Bt%2FwSE0xK2jhpZt%2F1tSjbr8JTPBQSv%2FeWcO53Sr95G2rItlSaprTLtrmn1pKH9UBdya2HP7C87mXSfM5rvJVRrxo%2BB0ChTAq9RZx0hWwYo11D06ys11azcKm7u5%2FIvIqs5mfJqfJ6Zbqa%2Bzk%2BvRqBBYLAx5nolMMEZaOLnSzMMRoo2agJih6%2Fl6C2NaBs3aaqg7EY6ebNtXqpPs%2B7wQYBggOZQHVcg%2BSx9s0L8404FRYrWGsVBsMWqScO25W7Z8dfNN9SdCr7Mbf6Bx%2BusNWY2MV6DzD449LFfcXqfG7d%2BaF3e%2FDqPNArsTWNVhG659s2hVrDEEjks1%2BXB6tP3D5ymsN4KoFvdoeuhuF86KXf9HHTZL8tp4wkxNdNEOwuuhLH6nG8SkEuIjFn6j5fnnJcdGxL47S1rjhQkjjyg0DWyOtpMqXbKCtpWHOv5Awj1DCy%2FqiyjbtqMnMPZ4vm7io9MCXPt9hPoN%2Fjlxuan60TGVKyuJKkzv9VZLfEKjvhWFhifyArLKaIQxFpVEX2YHHA6GLrnfQKTGkJkjx5foZ5JxDeCVdv1XmG3BGTeOIGRQV2r3g%2ForZd%2FrAhoF4kFN3HVRpJ3t93yy%2FzsJCQkGJLJuzac%2BLn0pn68yFll4Yn%2B93nunA1BwXW6Bp6RjV4HAGXXq9S1UCMtm%2BV2THmr3vf%2BplxQgoTzyMdE%2F8c5%2F%2FDf0h2ILasWMiB1%2F6DsEbReb9vJmQ4PJNr8FHFwOsJEUnhXeGCkQT4EtnLWskOHE3tzoRMzonlpdBrCJxlLqmIqf10SEQu5s5j%2BVh2tWLpRMgiElkj8HC161JoCXiXVmnYWp0gVESS2totkvfFrvDl46qtXl2U%2BMBh0wnYfbyffUthU8928dz8H5Ul%2BzuEFOghUWXy0ktrAVe5%2BxU9KcxQQZyC1Z53YrQmIReYja%2FaNt0thQxXyuHknQkc9AO1rN%2BoS9WZ2TQC%2FngVZY3QbmV7V9HMntibPQKaPoUkcXrM%2Bthr6D2kAq9aocnmIXi%2B1M84VK%2BohVM6zvNIJM9ZgqV9FqrX%2FBKTAxupPghG5EQ%2FfCrf7svuuYgJaP9U%2BiNm%2FbpiCxrtQV302g6zV9OY2BnqbDdroTCm7vu2PePpg6yTfb7VejmX6YhJxh3teJYUcEgOrAd8pMxkK462uBtCoU31NO%2FpnvqbMLmxLP4e2MvuONS2%2F2rUHb1TCkprKGmhhM%2BeNfdJQ65QR15iysz5buubz%2BXurR6%2BQhj4BR96%2F9BUmxiZafXPSSoq%2Fhy%2FB5f9Iiyfvk4Jjnrx2Ub0KQ7D4L5unQ22mriQYMmlRurFVvXR6%2BOIbhyC%2BocxlfDHLUdK3No2CvpAoJzMXb2fQaLrZOuk6%2F9BUm6fdHF8fG3DY7k9BR3jMEtJI%2Ba6wgzM0frJ9HjjWE4VryMV80e3H4zoGvpv3uxBBHGJS8hFu0I0lRJk%2FSxyWgT0xyrnIjjJKJ2otGGwWaoFbR0HcDrfgTzdzB6vKPfQe6Pb82p8nuyiRZ3mxvQZ98KjQUcxEbaPd8vCAkX4Yyw61%2F1u4Le382RzL86YVCIMCD%2FmsvifQncu7%2BcKe%2F8MjR0nFbZtW8Xsows7KxfVSsJmi9bllpjTR7CBJY1KwOVKzc%2FIFlpCJsOJMjxVfSK366u5LpeX6olfuznw%2BS%2F14MO56Hwflevx6RuuvwUYZcy5aKRf8McGw9ByPMGz83G%2FYS82tPp7Gx1bnd7K673eL4o7Y1RooOu7BKUrD3cpm9fYIYB3FDYjDY%2FztpYRiZLyeqvwjrXy%2B6%2FyEAsMlu7WNsjm%2FHMnyUTfi90mbz02Z4dtNRnvLj2DAU8l%2FqXaCSal3eMGmHgol0mvaHuxrAoCywQdtNaQ013DEaNrbYP9j8vE2%2F%2FJr0Wr9FYG9Eeb1qSFfQte%2BtJ4YhWwlvZgd7n1Ptf9b7M%2Bq6J9%2BHRIy99k75mu1d9yYVdvgAAAmwQZoxDEoFf6E5dq6b16XL%2F78ZXv%2F%2F%2F%2B%2Be7WL9e4V8v%2F%2FpO%2F1f7%2FVrvpsZ%2Bn9e7k2g3wj8BuSh%2BLCYbhPzwWXf4J%2FB%2BzFT8Ym%2By%2BJsq2N8C976HrvO0FRKOH3LcGuX1LYgB4ktPHH8QPrPHoTbbxPrlRG0lWqeVh%2FlxnBfxwR0vL8b7QBR4lZVSQjdqHYrLDP5sJfYZXQon9Yu1eS1v2tSerEVvS6Cf7BBLYG56AEzK%2F84983726w069lwvPf9B6XrAFBtFN8vzZYuBP1NExYcBBt%2B%2BMv4hxq%2Bv8cJDs3uN8%2BOd4Qu%2F2PEB8%2BSeRGGqhqsfdShqyzpGZS3ur98lDZVtgJq8e7i82MD30I%2F%2FfsS6UCXfvqgvEc4jZZGxBsnWa5wgCY45LWlggyGKNXh3O2yx0aOSNVjUHbm05ooTjir8bDmm0NY2g0YtE6RWgkfs3%2FSQ9gfXCM9u6a0LXm%2FMTyU47P%2BIuYUVUCpcaGCXzXkIN%2BGi71Vf7cJImNcwapUJ%2Fq7SeIg%2BzfyMZCpUS4SJrpkY%2FiJCNEk%2F68sN%2Bwe8CWJANMePUAIe9%2FXIKvbyxcAEzEt%2FPN0zbTL1bteq1Ona9jvnfJ8tS36vJdVS8TfQau%2Fph%2BGWffL5f4aI7s6jUtprq1i%2FA5IK7t37vzJBWj6Y0Y0TWbwWNEja0UF5AWlt03mXoZQxeUx4ePcWzv3Hfd%2FG23HL9K6h3rERrW%2FPbfE0pz0sDQphGfK%2BUYhx2bfT0bui%2FWsxCkGwDX6F1x9moRSscHPZGr%2FLCZdpleOFWqEZnfLTXeKyk4cI2rvb08EzSv%2FozeB8ICFTL6t%2Brfr3Lfr1Cl76Fbux36rXKW69X7rjFbL%2B%2BCV%2FCIIxlCkUMy%2F5bglO73bfY%2Bg5fhmW0vNg6t4h39HqITQKqgPnzRImfr7Ry1X2vVV%2BvSX3V1dXVMtSevV6xVSL2X%2F%2FlRO4FpcvxSRSJAqhx4y99AZdhChA5783VVGcrfl8QVf1ZKAVI28qOcZe3IQU6%2B5Yx%2BQXEQD6E4DuZg8EHh2%2FmomiTW6Jv6n61aI5Y2QlFfzsMeWugYYE%2BvfzaQzvyvXaiyDzcuIKkR6CQ4Fii1sZifI%2ByaZA98TDojOtPQI9sj%2FFy83yyQ33NxETdrXBPppOP%2B39k%2BtcRc388z22l%2FuJKAj84%2Bf7uMHqNeH%2BJzPRcox%2FqCgmbDZkpKF%2BP5WIUUxgbnS%2BhsxsKkv5viZZdAQO6H67TB5YZb7kXrJd4Zzc1%2BivXrBXq%2F4IPHCxpsmsIdwYHD23DbHje4QdAw4zzL%2FrhuOhoLUPhq1j%2FSbIzx1K9P4WjBx293Ffs%2FGoVmxR8FUwhrG7kBwmyCAvZoEld6kjp%2B7%2FjZEPm73%2Ffusv2SwnOMfvIIYYy3yRl8ej%2FF2aBpF49rq%2FfEwWRpm0k2R6R5mED32zi%2FBhwuLWpA58qNzXX8n1CMlorO%2F1qRfEd9q7gb1i9L81coZ%2BHeqZpMEwML8NR5mAL7hu3D0tIiakm%2FGxoLXrHB1D4aCsMmmGg0jYcPnfEntbpqBlDXNTvUnHmBmCArSsViE%2BFydIMJNpvw6WiQ8j%2BvHo78f%2F%2BOm9X7nUUM8CDB%2FhspTUhilB8vyjFB39F2nfuF5CS%2BagbVeD8aLMcBu%2Fi4%2BJ%2F6NGcIAx8EBXomX61%2BIOeTyR86DMSv8EZLa8v1Yv1r%2BvXLnUyT3vNiSFe%2FpAkIx5pOK2%2Fwr14eWX9tvF3Cy0VIxUKrKyFtikHT4zoxnIPfo%2BmNhw90zIW%2BzBgZfvvRa%2FBB3Sgi7bNoIogNPQIrXI8KA2hgLV%2F%2FFknIKJ%2BY%2FKbD4V4ZnkxTw1KECEGjm3%2F8O7d7vnhd1%2BxRpMfxRaG99%2FnJjPwiRT%2FvnUfr34JrVJHKYvcX4%2Fjk5QcJuWqdDntn%2FC1UROE1mJP4TWl%2F8fmuOv18DaZlp3k4JeDrwg%2B5EK9ouvz1%2FFd3%2Bryern6xeI3RN%2BCE1aXX4UK1DNFokxNBEDfMEFNXkgx2RCxq442H4iYME37wffnEH5NWSBfJHQgT%2F0ct%2BcjFceJ3%2FDdTZRru53%2F%2BCEh8fYrw4V6dSMDhp%2FrwUdAIbIWzEaV%2FXX6iq%2FVj9WP16rk9eviV2%2BJkn%2BNrbL3d%2B4%2BDg0C2%2Fn9RQnctT%2FXlJxt%2B%2FBDSkCAJqZZf3%2F8OFmNT6qeNEP%2Fnv%2BhIMaWK%2FcEU2Z6Gf%2BycfeS9ljwkC5%2FCVunVH%2FP740MFqfXgklg%2Fi0z6zzVr3GxXgmpb3vnv1yrz24bv3i%2F612CQtnNKL8LkvSxnmpV%2FMojhQE9kxjWH9dfs%2B5Ta8NG5oLl6P%2FgkPGh1%2FP%2BCHNXcq7x3tEik9Fr9arz5bat%2F8M13VuO%2B%2Ffq78hHf%2Br%2Fn1hBw7lMz0%2FXnrcr0BfJ%2FfkghK%2Bzf8Eu5yDTfk3X4rEpXlz%2FJd%2F4S7u7or9GyrxhQrCmqC%2BqCBFTIO36BlqD97cBVJLWHAdEtqP4yH1yvXGQ3o5HdbuyVOnj370lfQYx9cts9fKSPv8PXDiI0lwkYTMPIcRvK2vw01L%2FPRaijyjDyqbgcXLtHTevXd6q5Xq9eCy6PulPnv%2BfDj7OL%2BvCOmjKwyPlgHOEAaH89WyBgjea8Hf%2FhfHhVfkquETvarC74f36gw842Nwe7%2FMU6hv%2FhqgiZSX6ba%2FBJugMls%2FBZ5JU3Lu75V4bs6RZWH4ItTkbL5SPv8Ni3ff5VF%2FwQ8ZB%2B2HwWG0p7zS3r34JdDPGEizBASGL15JEtOvG4QdzNnqRILGvo3QFz5f7MhpFH3DUt5m3%2Bkbfv7lIkXNL9CW%2BYvP%2BG61Wv1s6jd3%2BveStTec0X8y7czPwz5mFTs98Bf%2Bi435tOn89fOMFOcjv8N7vXyGc1%2FBLsr6RqQfnIo1Lugmmy7TXgkPu%2BH4Lrv2mhwNr%2FrP%2BHDIIfInVu2dL%2FwTZx5e9Jj9Fl%2BiN6rlr8mpb%2BpuQgrX0DA55eSlFiAr%2F%2FBDbrhmsyoEu73t68yDBOXlxJfGcMY4kr%2F%2Bx2%2FSei6u5C%2F%2BoL%2BUPjQIOQyupYjSVjZDpdFNfwR46MTuVYUn%2BN47bY382vZV01dIsvwSaOM1Qj8O7tXp%2BXXzpZyQ1Hr0Tvwjd6IYpOLmxgTWSte80f6I9esX63%2FPX8mpryluYYNXwTU8xF73y%2F34qstKr%2FBXrVrSb1i11gg3voGTMnHmvpcuZKaCdqTz%2FW77vE%2F0du1y%2FNe%2F5Lv7l8EhufMvwT5cJnNTqvRZSevV65V6Jlfh3DrNO6Y%2FL%2BkWD7c2%2F8Obu%2BTDHJbX%2F0TKW0dx9Wr1rtau%2BdFyonv%2F%2FCfkq1esXurkm61616M5Lf5Cu9%2FrlT3wVGdJ9NmXyym98AAAAbnQZoxjGoFddIWmcZ2Jule%2FWKXm4Ni11%2F3%2BrnV6rF999qVPjfpW7777yfP%2F%2F%2FfS92vSF%2F%2F%2FXvVer1cvaXurTCJWcjnB2NIP5Pn5fxxfCI%2FwwQX45Y178%2BFoIOjLaugIpqMiocPxTLo6bb%2Fhapy6fvv9F7CW83p%2BsKlq17n%2Bdev1i6W%2FX9%2BsX6%2FP1c%2FXu%2B1conrr0F7YXhAYehnZC%2FL2N1%2BVivoPRK9GXXUW%2BAITVilfuY8R%2BORDaciz479Y0wLvTEChuqF1aGONKov%2FbY7EnwO21eP9wUyemskXLxX4KAkNpSfcJFTRxEGIPNOn%2F19uCa0N3YwT2nLq5PiwpasECCNw9V6g1LK8vh4JCK4K%2Fkugg9TWA0FCD0Wi47gpsIkxyCMWtNdj602NHb7e2vxs4g2E51xnn%2B5d8BUUKGQEoKslsSP2zjj1H1%2BciKVnsg17f%2F6uu%2B0WVClc3qz5ZOlym9eyfr36J290jkU2lNZdHZfRf65PwW6N929vUOCco87ToyJbf%2FVxf0Njw%2FiHs7vHUvy5PCORmrqmnBG4QT62EohjiF9e5ekluvXKbi5Kp61rm%2BVe5V6uwSCr31%2BCwude97FJ7v1jHqI1pS9LdovSVr6ajMd5e6yv1ipV9F%2Fk%2Brq64mtVqn%2BHqj0ewI04Lh3TWKAqDDa%2F0Lsw6WTxwx9%2BSHd7Oh2j9G1PLwSvJdi52LBeru1c%2BI6I%2BW7Wr9eqia6X36xRcKN9LX5S4ZwF7RCp%2BDDTYhmmenv1lrl%2FvwpzYxUVizsO0gooa%2FWzOev6ye1y%2BIqkV1Ukvr30uE3rXzS%2BelHQhhclt1vh3y4zQ1cIeIFXM0S6Xsv%2FglwmaBVnrImLNj09c%2FX9IObl8F8bfG%2B%2B6lgwkjGf%2FCVQXX6Az5a9dSRdXNa9WquXfRP6t0T2rfrha1zY%2F5jIfnXw10TvWNA0Kog%2F8E%2BlfaLyf8fR2zY92VlZR%2FWXf4Zntlr6aiF%2FwRZyRhuKvwnpGIlOQFPQoU%2Fnq8xceiP%2BKsEiDqmn35q%2FBDZ88k7%2BsVd9IurL%2F%2BryDu3LXr1%2Bvfqzr%2FBIVV%2B9wSZsVgIGL8EZFYEwe8Pz18bBcWme4Q%2FC8bDQ744QVQZg9O1hnHhgOsMT2TQgf%2Fh2ODqVADdwYDaDRIsvM1hqXAcLX%2FjA9movrh%2Bev0UfnV5NGYv%2FDlAUVFX7jMZ7LPGx9gk44MddV4Lo0Kn2iw8X7mH460LSNYV993cv31rk1YVgUV6YoHuvDGRujgkeN0pLJY%2BEWfDA%2F8O8dZQ04aJPIGY6qtmpV%2F9F78F%2BPgQ2wjUMbHo%2B%2Byw%2F3P8FJOe0DZIMbDOwEAQ9fw0KHc%2FEVsSMEU0h6ZPPXzo03rwS8ab%2BXLAsr8EVrSY3vh28YZZxddf76%2B5W%2F1w%2BWvV6teri5rr2RLcnitpcghRtz5ZAtiRy%2F640q2zoGTShrFCAXTv2OgjVoICpy44Vxwso%2F%2BCu6Kj3qMoB18YGSWHw0WHW7PBOMh6T5P%2F5iR5kPDPF8t9sd356%2BNt70Ww16v33%2BG84tMqX5QgEaH0wH%2FBD3GzrVVrl8q5dr18i66qm%2B5%2FVh8mlbXh2eVAYRcZEqI39OmrIZQafrx5AncKT3UDJ9hw%2Bkxrwl2DUmD0Z%2F4iU0fPqv2VLX5fPT7kIqf%2FzEen2CsTu7xldKW735CMbU4989WDVGf%2B77qte6%2B%2B%2F1w8XXU3mJSuTyXpnMdlKwMilKH8OEl%2BsfEgnAXy%2F3qiv1%2ForlWCa%2BZBKJMDZkX3X5hBWP9cvznWg0Yz3%2FPY%2Fjxckt8l4atD0b8Pw%2FxY%2FhXtFY2POhUfHDVv9a9NfL836v0%3D&media_id=1254206535166763008&segment_index=32" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:11 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:11 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_sPtkYBQwqr2JsQjNTnco+g==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113173181716; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:11 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "bc6ae6c592e5f967e286c387d2af69f5", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19920", - "x-rate-limit-reset": "1587864356", - "x-response-time": "29", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00b4e86400736033", - "x-tsa-request-body-time": "63", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"u5p0zGnwSZ%2FshDG2EmuOjv7J%2BA4%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=X6xSea97uvZLbpMv6%2B9AOS%2FglLn837V61%2Brq8WR6aHecVXgr6bnpQHjgw%2FQOuw1nUa%2FQGxBvL%2FwvutK0xVLzBAH%2F89SWhV%2F7vJ%2F11dcRz1JX5bnIP9fd14ndPpFn8EPYI19XrqS%2Fz1w6nB%2BvHibv3fdn89%2F45dSfsn7%2Fho0s7r7YnrsB%2FBDsilpbL9X4mtU6U5B%2BCTj5cPl%2Bbevwzu1UqQel%2F%2BGhgY7vd7mobnf5EvlLpnyl66b9W72%2Ftb1fvuXxRsex6pXYJCtr4frL89S6wZN%2F%2BsVeuFejayea%2F%2Fo6RV7q35COQkgV%2FcnQf2IKQmVuYlpMH8hBxo9K7cl3IMxdy3a0%2FoER%2BNm7OPasfr0lVYV1d%2BvX4UM7HykEqTcai%2Bot%2BFeisfmvbX6xfq5fny%2FmXJMvlI5yC%2BtQlykF3SMR36ysv6e5C6r9Ecri69FqXLRSp35Mno3Sef0eNDaf%2Frl%2BEi81pb%2FEUhh6e3BuV16678vkJrwqR3uzauxbNf%2FwyTizUcnWmv4kV916EvGT%2FuOe%2F85VvNT%2FqVO42AEqFIhIVgqFhSGBMFQuFgoFQkFxKIQmJQmIQmITrrNPnrmZv29%2BLVHHaXGXRUjW7eRt1cU7vtt3%2FQ7D7ScvRiJLv2%2Fu5gnLja1B%2BtkfXUIdn60rS5%2FknSFI%2B8LpUorxNjab%2Fv6EdX4eEDGovkTPrDjh18jXeNLtT0%2FR4%2FUYVz8YtQBC8oe330%2B5BVuGX1Z4xoZ%2B69n3J3sl3R4cErk7J3gSWU4YQStKIoVWmjUM6NoxBwEsFIgqEioNQuFg0FBKIgqEQqFwqExCEwiEgitO%2Bqnzet53%2BP26tKnn5q%2BtZlXRWqF6Hf2NXZyx8Oz9Hl%2F0ryZ%2B6%2FeRbYkufC%2FlOl7yoPd7G9LzlNHugPLUv9x14rD9DET9%2F3N2LZXtLJxe1SaSGA8tKspfOO3SCMwEp1P0gOZfKLpZnluFIxJQk6BBWwUTIxFFZrAIVqQCN0wcASoUiEoSGoSCg1C4ZCgTCoTGQVC4VCMWTd1687nfPn7a83SX4qddZzLpWaXVTgZOHBk3uOz28Hseum23%2BfmuVYfOcdPlPsIeW18%2B%2FRn4wS1gX9Nit3qQvy8ZuwHp5gx7GncqP9F886UhMIEKzQQsDBQWuvOwIJG3GCpSYRha5EMkQFC64UKrA4ABLhSIahQJBQJBUKCYKhkLBcKhQKiIKBcKhMIiMQjMIhMImKu32%2BPV778%2FNy7kbXesqcbpXGUl6GTJ6dLy8vFfLpeWe4iac%2BqWvfP5DVrqHendyJelf%2BWj9w0eoKraVfbsgDP58ERPwdGbCU9HvyXUlneTRELy1fR6s5cfuBWk0l9cCFCmfCJu6R0dMxM0hX9waE0gYJLFkQbUFAL0lJQOIDgBJhSISBISBUJDMLhYNBQLhUKBMSBUKCMQhIItc68cX9utzfjXcmtTJvNdXvL4qs31rcT4GbX3fRz7Q6%2Bnx3eSomfbSUNwPUDQeq%2Ba%2Bh2jg6FdsT5TxP8C0PruTOFR5zu6T2eSaQ9fWdkd%2BXdNh1tp%2BGKRBJ7Kufa%2FlcWORjbYWIDbgFZiNd8FvZyLGgEYRTv2ICiCNIBVITggqIr1RBwBLhSUKBIShQKhQRBULhUMBYLhYKhQJhQThUJBMQhMIiUJjEpha74me%2F17ze%2BO6nEic1PN73riu5nmpUfAcPB6tDn4zq511Oj%2BhVTj31dzgDtprrH8lv7RQqWhc4j8C%2FT7N%2Fvl%2BD9ePsBan839vJLG%2Bxl1Jz3kRvBJfDIvC%2BYn1sE9yT%2F8834t7oUaRav5kG6g3oa0XwD2%2F7sWkaPwuo5Cx41RVK01I2E4NNxawoXKwC0ojvAOASgUlCgyCoUGwVC4SC4UC4UCoUEoUC4UCYRCYSCYREYxOZuX7%2FXvuc%2FX7W85POeF%2BZzV8V61XQPYOHp9z6PS7uLeHzQd%2F7l4PE2o93%2FHa%2BsbH%2BBBt%2FDnO4%2BJXL1eguBPAj2UQ8X4lrhu019E8phXjyWhsWVeUn8uDmHUpDvsvHIFHKgEHeQ44Txu6feGOKxZoeQCCojWgVknUTTgXVJJhKVQgggDgAAABetBmjIMigV%2FoXFXS%2FKGa%2B%2FXv179a7Xq9ev1b9eu5bknXu1aovvte6lb9e67ql9eiOReqq%2FVMvnlGfQTREs%2FKQblem6Req0XOyef%2Brdat%2Bvu67Vupe%2FUoO16S174hfH6sdr36sd916sd%2Fhy6WsZQ07%2BX%2FpQ1CHvCeg2OWMQkp9aWn8MWmslBxo6%2BkjJfL%2F7hmadjBNp%2FtXz0QqUv6%2BCOYlGMlDUzfhHSHn1CUYBaqzPHCN3pfBXHwN9wy2KY1KHAyiAoHfRpqwnXq9W4ZViT17HElxrnv17tWv1arVia6f%2F5xytG39ecSvgt7n%2B8ugSHd%2FP9DcVOc1y03dvNVYPKghnJg%2F78JQTQ6nzKcufhC0zPqerl6VblYzWKzetVcnMtVl%2FrqrV%2F1jKf%2FOCEjCeuvc5CXxtW78hN2j1drU1%2Frr1XXay7Wu%2Flky1q55cfV%2FwnQHMbJgan12YL%2FLuMSkVi8bdrV2uXo1V%2Friq1fFf6x8d%2FVfySesUR6v%2BiwdokvwW5MxwSVA7evxPavTw3E1%2FN0knrXCaxVasXivi19rVX38bLd%2Br1uvfk8t%2FBZ3HglZzF8M%2FYCmfhOy6zBtNpH5ujLq95hAsGx3wR3ldhD%2FcVS743uXu7V7pr83dH81uGLiYXxd8gSQ%2BVn4JqPdN96%2FG9Wzy49XscmWw9bW1j%2FqRK8RbfHNxY4OL4WobNyTbXVqZSn6L6TXi5QZjsrVjB%2BiCsiQYje0la%2BCrtNZZU3OPcpL7k%2BqWW17u%2BketolJ%2FizVru38L80kEOnnMeFYWXHHDcif8ZTJKEn2W29li6Ca%2Frxg9ImfG14SZw325hJn7fsCrIoHhovCP1rgmn9HHnhd1eCTRR5B34K7NENnNBqKcLGhyoNQfFFXgjnGDfl%2Bvdhwu2llQDINGKPvz2ja7upelFL%2BQu79QTX231r9CKtP%2FlLPD2GjngbchhgELqe78Or9KF%2FBVyjEPpNDlHkP65F%2F41KpET8OEYSIOt2LRwFFMQq0Vb%2Fk3nz2DDC2V6zdfPXf6sfgk2NXTCrBDZ2SVV4V02pTJxKZlgPDj8NN8%2F8kpbOa%2FFdtMgwd69WLurriIj0TvPrBr%2FHSMsBSoq35q%2FdhSZ%2BCQsfMVwgbmrsTsFNlx54J9090X4MLT43HfXzqKKRZeF6jY6KuSxpIbYpLjGk9G1%2F%2FWCSwR3fxj6wfnyc%2BOr%2BT%2B%2Bs9%2FvGzx7%2FWKS11VPE3%2Br9mIpUH8hT12X1dk8%2F8YQzFgxhAe98r%2BhlEB%2FQI65gQB6d6%2F44srLeimRPnc18Edmu%2F6xfnuPKQZwgI4CyvXVevdr0nL33EF9f1b8EVNeL8ExKZEmh5UGvzFWhNfIQMOjhN1m4IymPw6i%2FA6QN%2Fsr7%2FRIP1Z%2BhD%2FkoU%2FSXjjh27XGknvumvRUoL1IYfPXyC7aDIqSOa%2FXr9eq16%2FBFy4%2BuX8vd15uq%2FBCR33y%2F5O9K%2FzcQ5XhPQG9wy1EIwcKs35Stv7rwQkbYnsdnr42Jvxkfvz19AnUlH%2FBRjTcgdJYlfw%2FBhLhabsCZ18u6%2FLYdDf71Oeq2uv3x1D%2FlOMyvOWLzVfifxq9WJr3eT3%2FyGe%2F4V7vlyvmtP%2BWlfl969X%2FJ3d%2FljdX15ucILq5PBUfKu5moL0GjM9%2FwRkxzNsH%2FV%2FzSb34SmNlGD2ysfdx0ltI3V3RH99NKLK1KRlzRexZc%2Bd0uKVer%2Bn%2BCOa%2FK7BDvc4KThPflNuafz1QHHHi03%2F1w%2FZSXsq1xere6%2Fmo35Pxf%2B1rsEmQ1dz8ERHdq9E9P%2BtQ8fcdhD1hFpW9J%2FtRs0x%2FZs8ZHuu7d815f0tTbRxmb%2FDh1rFeHkhX9TFv8Vsrl9%2FoeTd9ppSZk1RevCNe%2FLzUr1Yr2IKlWYuvZ3ZIcvrhXqak8pnfVyeisrxOtGjX%2BWqf8F2VgzFeOZMyOv16%2BJ8dqE0dHeSROr1e7PXyGha9kJlo%2F18Xf4ZPc8M4vzJD3ul7vwQ3vyt66N369XnqnUQmeLfzedgsfVo%2FXc3q9evfq57366%2FV%2BliPBFSW8b9CGKgAAAWGQZoyjKoFfdCOrkJ8%2F%2F6Ev3dq5wU%2F8%2FV8%2F%2F%2FE%2Ff%2F2r9Xf%2F1%2F1L3korH%2FfavJxdeiPVz2teGa38kFHHh5%2BzLFmm%2FqLx32ifa4VQTRo77f0fC5lg8LmPX246PBYr32r2O5eXcmqLXfaJlJ63frXeIX9b16vQpfKJ8n8fYQWsdEnAdBSb%2Fk238Jz18iXPRerP1fX0e60icJNWoq0htzjsV4W38d2OiJbkvlV13XqnT2pPPlbHon%2F9G6%2FPU2zZ%2F4KBLV%2B7xfnlB8dmpdCv4c0rpV%2BQ2xLf6sfJyHdFLX69%2BrP16rxy4v17pJ6Iv1cuiK9f8qsrdW7VleQjGMxn%2BrFQS1yVzSUlXjpXerXv1i76q5a0b9dc%2F6nSr7Xq3Xu16vBhLEhFkveMMfDbbxO%2BMxvP4KOgYxk8KlCAb1veq9%2Bvd9%2Fq77VnSKWqQ5X6IXu6tdVfTdri7xS3xPOrkvr1u1BHx6qA%2B7Xu7teku7Xqm%2B1Y516rrQmhX6r12vSerF%2BL5oJWkjZ8EPd3fklxzkf4WpHU2M5O9Q3pq9AvXlmPuy%2FBhSGgaU6sfL%2FwsKPQG%2FWtk9%2Fvvn7XvVfnpS%2F%2Brmv5Sef%2Brn6wV6t%2BGLNgbkpTc3WkwYYhy%2F%2BWwOlidGrtV8F9vH6b2qo5f%2F4KqqlKGAqHkQ9Xx4x4frr8EMpc8OVeCSE3FJ0enB%2BOyOYG8krJW1DY2QHC6%2Fgh7mI38sENzkJEsLLyy0spv%2FTVyLLkl6S16%2FWv175Fykwjk9YvwpIMSscllL0aIu5py5dKlg%2FBERcyx5M%2FP1pjkR%2F8JFdvdtpn9X%2FWvwYVy0RMKUEAVORkDAnMf%2BUidpFDXltW6v8Vxl8fe3uI47hvrrqn1SLl%2BKvvLDeqHZfhgbedE5aNlrLqcP%2Fgu1lymNmGQcfRdV5yL%2BeyW7DRb2l%2BSM0PkJN6Fv8EUfduH79Yw%2Brj75cdk%2B%2F9XVusFWrSerHxCnTuu%2FlpeCETJ42pj6svrkFzNEgGhMdKagGKhIlmIEKqCMsdXojb5Hxs04ZwgH42CZsD%2FjwC0CepBEdiWCs%2FpYQMAo4GLUDY1KIWJH81P%2Firtmlzxv89R%2BKoddfHCyf2i4X6EZfrl2it3%2BrV6mb8XmC75aMCs2X%2Bv7rXoiTCNStfd8l2pQfghJzS78EpV5jIWK8xd2azdlsbt%2FojP1i%2FXru%2FOJX8Mp5YL5SWA5J%2FBfytLSTfD7Rz9L7u9SAfwXefLKNkLXfhcq9xK9eP%2Bf03hOsuEe%2FiVyvZr9iHfflKkn%2FRcr8Efd2H0VIvonfhu93UeIL0b5%2FuzkXhil%2FVmPnhfq4%2BLnX0AzKPX%2BXVUveX%2F%2BvBD3eV%2BriX313a1fh2c%2BQ9dJhNlZQghcjTwoMffWfrvRHSeQtE%2F5b2X6kq8xJAfa%2B%2BUglm%2FE0J2BH75ROvBFa3q%2FXp%2Fv0WpC%2BFf9%2BQkpjKa%2BE%2Bm7RJUB%2Fd3ovuN47rwSeWcHYm9l2nd%2FoSw%2BeoznB2UO%2BSwRkRTDEaHZX19kI6PWExL481p4WJDEo%2BU3osZGlfyaYzxImqevv0dv1fiiZfIIHBCewGrOVfOOnRJPRL11%2BGixkauvmU22%2Fguw5Ul3d%2B7%2FRMR%2BJu%2B7BPXgiKzQ27fmuwr%2FV1eCAhB4P3yfDVjeYyUxy%2BZLaW%2FcVTb3ul8F%2BpJsGcuVi1%2B%2FDlrKPLpl9jaGUlL6BKefPdjrfiRLlMRlo9aatzf2iP3MTz%2F%2FyQWea%2Fk%2Bf17MQ1NA%2FosXd%2BuHd%2ByJb%2FJQRWPYIpBBpWH1Z%2BGquI6uR9v1dXV16Ll%2BYk2erHS37%2FVyXf9SJ3XspYNa9G6rE8uX2vnr4%2BUqcX4b460XlNIiL9eQt7q16lf%2BryeQRd4pHE2K%2Fif0fpPV75EWVXXrKr7vEPon9Eyks9fi3%2FBCZm1f1QAAAA9NBmjMMygV9%2FoTq6q9a%2FWLvte7vpWPtemml6pL%2F1%2FVvf%2BrqdWPVFb9e4Mb5buNL%2F%2F6EfYbJy9f0hyWn7LSf9VtNVXCE%2Fq%2FxKuXauXl3f6vJd9r1dq9cSrljvKTpam5a5ZvV68EVBUjkq14EDXnFL5jRjScXzHex%2FkO3pfBLySj%2BKPs%2FBFSugXZPIv9a7rCGr7UqVxUhf%2F5fr174le7l1Vu1ZL5jE%2FXr1XfosVTr19L36t3P0vV0uUnr01q0vr1XdS%2FcFOKVdqUEnq9Du0tr1cytXEr36t3JaOcEno1Vj9X6r30uVUy9Tfq179e%2FWD9eq1iiPVyh3i%2FXKvPaRSMIuB%2BX17xe7l9WLterlq5fV5vPX0a1%2Bv0nu%2B2%2FWK7WVerB09evV69VE3d2vUuJ0Xuy8uZPvfwkTCVhSfYIsP6sPhy4%2F7qMg59Qx%2F%2FgjqwgjA3%2B%2FPc%2Be69%2FjsrGklvs15e77%2FWCrWX4a3Q6nmZToLHMExz%2FVj6WKS17FEvlXsVp7XtX%2Fr0nlugRf%2FBF0DHTXL9FMMfhOgJ7PLZhj8pGmTSD%2FBDsIhdeO%2Fq85cxU0P%2FgtIh33twfqxV16wfnr7AhksUqvr369V1692uVevfr36%2B9V6K9a%2FE2ZkBRvOMFH%2FFRnSuLdF3%2BawaMaVlfhLljVqA0t5PVf33f4Iuc4WDL89fTk%2F6wVctr0k69PzV65X4%2BYECjGB1NNEI6DORTr1e3cxFSvsM8%2BqwGHDEvGb%2F4i1qx6q78Egl9m1%2BcmXyoDjCyi%2Bsque69Zdz%2BsfL%2F9rl%2BLJaWQ2zZnJfKUsOwS9Xbu%2FwQn3Sg7lsgjlY%2BCIpf9fhzlowS6jw6f%2BzU40I3xRyjT8dBAeIlktetb56%2BnLbNWevy0nSv0Ryb0Xvzby%2Ff5iZH%2FuX0Hfr35I4NP34nsBE7UBpdy2uvT%2FV79F7uTwSE3SYfBF5e1%2BWNy5rm9XP1lVsSm%2F8El7A3c%2FBCbaVuz18tY4VbKbDEoQBmJ0BY6yX1Q8t%2FBHsr9N65d36tV0T%2B%2F5PERlo%2Bu3frVgjtTCAs%2B%2FBhBJ4C%2Fk7uY%2FaU27fq3z5%2BUuiGe%2BevxpB%2FomUnhwr3r5Ib%2FXtL65fhk2ejv%2B5qxr0Vv0Tv17sXIOnN595H1kO7%2FykL2%2F6%2Fr1af0epLMTHSXAe1f8l799%2Fq8no3V56pm39eak%2Bnrqx2eu2Xf%2BCUru%2Bk92T%2B%2FxVKza3S%2BsFF%2FFawR23a5kly2jsCeS96tmd3deCSm%2F36xfgk5JM5fq78NllpqTsv3a67WvifEfdYr9CK7Wq9XllR2JLk9FKlXd9rV3Pj%2FaNr4mi%2BvwjJAAAECUGaM4zqBXVoSkf1Y%2BbrxHV%2Fqx%2BtU%2BO%2Fi%2Fjf%2Fjq9ZV6uKfu6tcv17tFdUunBDWLzC%2B%2BQ5WNXr0nycRXolVyrURVfhuzdbHGx6rEL3furd2O7klr08K3atXq0l9nxflolr1eifX%2BbWr9YJLxy06Y7Sb4QVlVV69LOtUM8o31r9al6WvH1cr1qhS%2FrUr66ta%2FWu%2B5r7Vjtal8%2BXx01Uy%2FUhMly0ywu5%2FWLtYquS69arta%2BZarwRVlEKByrm%2FWumu1dUqtWL2O36I9XK9WO1iqVarLvy%2BHE8r8EdyxYHsfnqybkr5rq1rtZXutd4r7VjuuZcpPWUwpe1cfBHtNUj%2BK0lYMZ3V9hOQ5nuz%2Bbnkvy0kAWoTtWiS%2F2%2BLyn0DaiPh25gQfSpn8F1773Z%2BCTc6j79evyd2av9Yu69e5e113Uqt3NusUvNyovfqQavBeTklqqpYfit%2F%2BKlvGBUUTVFQmMJZf8M2GMXPXxm3pyeIlcYQHy5T9QUUl56ddq4OriF7uT1rqq16R9asSeLt2EcxLQ%2BMEBgvj%2B7GqdBPs%2FopE%2FG9k6Q%2BAMuEEx%2BgpBbHCwro5bggEYhND%2F44jSV%2BIKwM1DPvZMaI2T%2FiLRjTBWIdXq%2FBNvSvZOforn6Jh3VnqG8wqF%2Fk9%2F17u1cFvnWUnq36kaXNvxU4QFFeywKM6HDAUibXwR1oBH0cVLh%2BCewZhDDGptNN7fnr9KOIevPX7lUfyxkdiyMigb8EXLTBk9yfyXf3d16sRfEyXV15CVAzsBsJL0V3aM5XjvNC0TMcMf%2Bi%2B77rwrNiB6T2atHKSrf853%2FmWGgbfoj9qw%2BfF0Bip%2BvV%2Fz5fwh9j4q1ik3Xy%2FVv1irwR25kRaRVdWc6%2FWaG5PKK5eX0dz9WIqVW%2FWu112tfgi3a6r1i%2FJd9eQk95fJpzL%2FZXx1b7v8pGWq829n9amsOHz%2BvvGCv%2FRKr17wh%2FWUvrWT8if68mlaXnv%2FPqX0TCr%2FCxXQQbhBkBvpUzqGl4oCZX%2F4qkQYsJxKwMgwYvqlDb58%2FBR2N2d2AsOz1OdRGh%2BXwSFpTR7s5F8qXPhPfOoT2upLNmv2YuGmqa9G7vhdHdeJr0R4bIyJdJfkMSzYpLcnor9nrqXf%2BC3nox3txXYIY2nV%2FCWwQ3flXhPu7T%2FwSEs7v2r%2Fq8votV64SF%2F1%2FwxojF1j6ZXWYyphk7SGv%2FgkvkZMjJ%2Bex9AyBhj1n55xfMtcoIMFeiOfgi8OoJRi7ORfG2cfWsnrKvRWVfaxV6vforJrWv1guUF9KLvdfaPv9E7sndJe9OQ0%2FBIV3QVh99z59a770%2BrX6Iy%2FPXyam1%2BCG1MPscFeLmJaXPNcTVXqitXrFinr0SqurkuX0XU3rKtH8Ry%2F%2BGpM1L%2FQiqgBKBSQJFUJBUbhILhYLhUKBYLhUKBUKBUJkEJiUQnOfr3339d%2BL58%2FOpeVxrxWuJm79u9q8oldDw%2FT21afN25OZ5fkuld1oeVd%2F%2FUj5Tez2ob%2FtOA%2F8p30RUU%2Fj2scvaOPGVD6O%2BCfr0qEeFL%2B0MUrgG9l%2BB4gn9u3i1ZJx3XgfnPk%2FGaaZEk33MDvcMTgr1lZd0359sapQ1qHPlpXrzVgCgcFIQiCKsSt4yAnOQ3ogwgOAR4UiKgVCgmC4WCgYCwnCwUCYVCgXCozCohCYVCgVCJ3rbrffmvfM9vzPjmnEytSbzXnxW30KvoeujNu8u2cNH%2BXHL2jECy1cBTB%2B0Cu%2Bx%2FZ%2FgpX9wkqLZA3fC6PzXH%2FszuuaZ0tU8S77XilYTHUX5STAZ0c3ZzAL4ntGbAheoNYZcufu2LgTBcwll%2B4%2FMziM8fC91zKgR1Rs2b84e8ZO7PV3AAkvUrBYSLQAMFprTCc0AisDgEoFJQkFQkNREFguJQ0GAoFQuFBKFAqQwqIQmJRCd3eJ443fqvPy%2B%2FbPasycTKr28VWr1kToOGfqadPk6elyq4e0ZL8XbXmwFn4whLb%2Fi4xB9IuLxvv%2Fr9vLOr%2BLQbr1jhozb%2FovQ99O%2BWvYMg7tnN0%2FABFbbQene65GoNr5UXyDgOJNaIkdx%2BV34GbF4vsA2PHqbHdonh46XExIDPUKk4JEyFwkoUljCggTgL2BwE0FIiKFBqFguJAwFwyFQsFBuJRiEgqEQmFQmFRCZ1O%2Bt91Ovy49PjJk1znTjmpxzkrjSk8jZt0bHV6fEd461vZ7ScVe4k1%2FA3%2BEGDibn1vUYbux1AgT5WAdHXh%2FpvZq5O9RGPXHzPOor185S8usYBvtvkjgsEPf1ZMGReeN1Sz9GMhwESEOlFT7js4e4ova41Y7ibcT8Z%2FFanHwXWPaAHX4AAvBRWZEvFEndWBEmouaAvYDgEmFJAkJRIFQoNxIGgwFwmFwsFQuGQuJQiExiEwqIwqETPFamd6nfM1735velctX1vbjea51ZqvI8bz7uh2PEeHYeD4%2FtIuXhxHzRL9IFEyIf0%2FID9CF9rpIQns5%2BAjyTkKxMlenYJHwpmzj%2B0AKxz4Gl8np7jW%2BDVqkuX72f73Naawz7Ekz%2F%2Bb0tMoVCIyPjAFZjxCD2ffn9xgO7xgCBVQYUFVAXTiJlaISnQgfmA4ASQUiEoiCgVEQWC4WFAWDIUCw1DAXCoUCoiCYVCYUCYVEJnvxknv5c8td%2Be%2BJCt6msyXteavF1wM%2F0dXJk3J8fFvt9H3KzIX8bDPlaL1X0fb%2Brv%2Be%2BShX9eEoRPn1MITNIwJHL98ZEEB4Fidneablfparc6%2FD%2FWBiod2d%2FV2UhNc5Cv87oOPXRuSJ%2B9PiU9PAHE2qVm6H1v2ZPDKov3%2B50q9VdB49J%2BJvhXsO3KuQBz9fVAAIWWzhfyTEhCk0SPMUgTXbdgOASQUkCQVCgSCYWCgoC4kDIYCwVCwUEwlCgVEQUCoTCoUCYVEJnrz68z7e3e6r4%2B13Eq8iaykZK1ZJY7f6vDq%2F3%2BZPd%2Fs1kHU%2FgEHceev%2Bxj%2BzbSI0tN%2FFAXHl0iBXN%2Bv6fZ2BMN8Xz8FEDPWxiJSfcujHIH5l%2BVW7bosrjdWVhC3rIO5Q24OUuv2y59%2FKpbjQHsLzg72wTWtJG%2FuMq6ZI3WeJfuh7B3PNfYWVwAW3%2FIBBAlTCRleYrMmVLyCJKJBCoHAAAADt0GaNA0KBX2hOU3r3698103Ovf%2BssE%2Fqtj9Zf9F9Ivf%2F9q%2F%2FS%2FEK52rn%2Fuiudd%2BiN3Ja%2Bq69erJ6eW1ccIVg4IfCFUpX0O7fa5fNVyXfN%2BtV6s%2FVyT11W6vL6uZP39a90CSf8EcZEX8Ha5fq39Du1bPXr0k6%2FqWM9bT%2BqQHKrd2KV1I%2FffVPzdXd%2Brn69fSwip1dN56jTWP%2BTWI5V74uvU1%2BuV%2Bp0ye%2F%2FL69drlfr1erD5b6Xi79Yv%2B6ov9XSL%2BrWK9Vq7x3w%2Blb9cq9e7V5PWvyn43qfLq%2Fiax2vRnO%2FCFXPnrmvCO7l9Yq9bBe84IAy39xocvzWsq9avl5nXKT1sluI9X%2FWL8MTw9Y6ZrTLcXr3TsDX7noQll8ElJ9qt0DSrtddyWvd7P77Wu1f1VqJ%2Bf1VE161V165fm45MM%2Fx%2B2yGn%2BwTJeMWgNWk%2F%2BMl3pNsSsW5r8i9A%2Fqxfnr46mPry06dX%2BuvzeVQ4hf1qrXu%2B%2Bv1Xq9ak8Edd7lvr%2FXD8u9%2ForknojHeT6%2F3e%2F4mc6j3vXq4%2Bc%3D&media_id=1254206535166763008&segment_index=33" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:12 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:12 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_LeknfK9dQwZSovacV8++5A==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:12 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113236480030; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:12 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "60d3866bcb46b8e22ecc495dc593a980", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19919", - "x-rate-limit-reset": "1587864356", - "x-response-time": "34", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00dc5a2200042a35", - "x-tsa-request-body-time": "101", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"joWsCAjLP4KAy3o7y5hTgsRIvXY%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=r7kP0%2Fq4XhfH6d36xuv%2F9WH17%2BrV6u%2FW%2FcT4nHRwrArx0ACfBDHJyNSLj9%2BF9ErAbDHgUrEql1JhoPye9u%2FzEe9eiu%2FNlxrXlvmxeuHfdfXrV03qtS%2BrXUrVusX4TIqwQth0cuf%2BCQsmZRV4s174Ze35yqNtHp%2Ba%2B5PXX1G%2BrvwQ6Tv1%2BTCXh0b67xu0BBldZbKMDJvEC4Po5xuVgLtAUPuj0T378VNlengpiYqzx993d2evom4%2BOJ%2BQtKQfV99yerSaSJ1X33V934jIEAUe0wMOSGatdfmjQIvQM8lZs3qrOVVysf9WHyEH4xw93f6xS44QU7DzR6yeiYdq92tS6%2Fojh%2BCSjLRYTn4opA3QbkpsgxyfJhxmhAbRr4a8tGJjFopz9eTMw3T%2BXnox%2FXD8%2FUkJBgnQ%2BvR2fhvNLjEPeeMHnglX5jSQ%2Fgkw8kpfb9WO11XgijgXoAqeXDhBO6PeT09%2FwgILuP56fr4jV1aOztW%2FNSSyk%2B%2FXOKWMjPet68ERbET7H6wTeettAxhE%2F6JF2cSvj%2BKH%2FghlEG179fheid%2BsH61IrzlY7ll9nQIrtXLVGEVeOxn3TXXkImMgo%2F7Joo5mvR4q8%2FX%2BMIn1d%2B%2B7%2FVquvBCZ3QL1WI88MtL82fN2i6qzUmd%2Fmvs%2FhysxignRXRfQrq%2F0XUtrLua0ar9e%2FRXBL0f%2Buv1ruLurWpPV%2B5r%2FWr9Fw8X9Ce0Z74m%2FXt4OhlIqdEgAAARnQZo0jSoFfdehKdLjfr%2FpP1p15f1r%2FtYv1i6EFr%2BTie%2Bivta9Vc7%2FWLta9ZOJUiKv%2FGeyq%2F61V%2FrXyXX9LVcR%2BrHSK%2FxG%2F%2FnVpN9HEG5nLsEmHE%2BvxiT3v%2BoV7Wqom7ViqKVOtq8lS13190KV45bFX3%2BrSeuXf4nox44px%2FXL7q%2BCO0f8snn%2BvYa5WK%2BmyVnq%2FV%2F1qhz%2Bqfv761T945Xirm65hCy3EevdghkBb8HXfqx8T2rFXd%2FOr36v6qfcRK9cTd93cz8kEYinJVl%2Bcqm1P%2Fd3cISLUlfRsl%2FrVetSbq3dy3LfrVClq%2Blqm8Z66pFhyWrV6%2F%2FVOi3Xr03rqTwVaVxhO2Myw6WW7te7U91ycQpblWOV6uXSyUTd44n2T6%2BqDl9muVr%2F89fSJ7%2FV%2Fy2mBvXgh3t4WX%2F%2Ftfe31TZP1xerftXkFd%2BrV64UT9%2Fr6LGvfVhqkqPl906%2FDlSx1NZVv%2FqS%2FJJT%2FPUcBQr0Xk8mUHD4QFV8tDnowe5fWrxv5P19XrV3V30uGT1qvLsaAzs%2FNQUvYXwXdhBhBJMaPPf8M1NrcNfL0f9Wfq5%2BpwfnvbONP%2F8GHhpJuGDh9f4%2Fj69%2B7v7%2FPUMRFKtP%2FkvnEB883N4%2F5NcbLuvSWbjbyoCk%2Fl%2FBh0lpTMLaLOv%2FkKjJVB%2FwX4WRr7sBME0vmqGkn2H8EhECSDTgpBA8vz6lUMyJf1cnrl%2BCSjfYFtcP1iq1qSm%2Bde9VqJ8L6EneUVt1YyyQG5B%2FwQTyeEpTEqAuMDBhoPRPFrLSB4wRW0oD%2FlnNP14Ii74ffmJh2Jh8v9%2BsVeGsgzfD8d1vp9d9b566Zb%2FavXr1e955fWqurWru%2FWU0v5Na9XXf4IiY8bIG34JSjKOA9mgCm1Tpqv%2FIRtOa0Jd2GSTS4vx%2F7BfwXby22vX4I6SXX66u1qrWrmeXSu1qTzbu6f2CS81HerLwTPgDT%2Bvd9rhL4ZnmTL44wJp6j%2BvL3fZyKZ6%2F%2FOdXMfZflvvtE6W79ZWX%2Ffrz18cHwXDnfn14Zt59esuwQlz%2FX6u%2FDW6dfum68xJYHY%2Fl3d9lx8EEd5B%2Brn4nptZc7dAbQ0Cl%2FJsyDsP5bN9er1GrXUtTWi9EeGiFRaJfpyavPX%2BTB1ofrBRf1rWDt2M6S6vsEh7Vux%2BiN%2B%2FHRhfBfTRp0tqtx4GOL%2FqTH5eW8v16iLidG%2BWne%2F71ijeMFIsXGFFu%2BtVbdy99%2Fq%2F2pEr3vd%2BQQMA6cH2tfouXZ6%2BVFadeGSq%2Bo0RWjDVs45MfwR93y%2FRMv1g%2FDkuJPXNzreifi%2F%2FrXKQruv5TFy%2Fff4i2gSRREay%2F8130%2FzVkxr0jwVmrXGmI76v9bpPRem8pjY17OVTqKJP3auN5Pzf79Eyvz18pku68JaV0kvuXLTfm7T7%2Ffaa9AkK%2BfM9erSXL66r1lNf56%2ByCVg3lj2cingzt%2FdyX2hJyqXve%2BOEIr73P%2FnWt1v2ryeisd169LXPd%2BilL9cu5PRILolXryXb5f9f1OZSan%2FAAAAM8QZo1DUoFcnE%2FMhblXXKvd%2F%2F9Ktf86xd%2F%2F1aueH6sd8DD3%2F%2F1LXGftL32rjfE%2FXt%2F9%2FrXquu6uvXv7pFrqq8v%2FoR6EX6%2BC9WCteq65rvqVu%2Bv6Xq9XOupiP1b9fHa9k9f%2F6XuqvX2O5nHyL28hV7BHvaf9dM%2Fgh7IOQp7jYrjjziUyV0D%2FBLkDGPDE34lr8F%2BpxntMEe19thmRNVyfv%2F1da932s91K3devfa%2B%2FXKry%2F%2F3y%2Fq5J6tW6t31LF1SePJtNJuxWOdR%2Bisd%2FriEn7%2F3rWnJWvsJd%2Fr4S%2Fftrd%2Fql616TQntYq0aT1l7r3axTWvXvy1VVIpUx3TrurjoXLVVrBfq6%2Bl1XS9L4Le0apl%2FuNnr8uj6Tmm1b4jv4iIv9ekFd308nrh3N69Jl3ybf51Knct%2FrFE9VpS%2Brvy0TMkaB%2FWq9au1fgn%2Ba918%2FWX61GWpEk9Yq89RuAcL5HrirCuZEhNCAt68EFA2BsDD8JthW2tjbXVsbIX%2F4%2FvvzLkNV0E9HuO%2Bqsq%2FWftW5VeX11J67%2Fku7BIyWWck%2FtX%2FCUtfjjHfokqv9ZXxM9%2FrlJ6xaz%2BNvXxVX3dvntk4IZrr1ykxb1l%2Fnz%2BjkSrORSi50pT1A%2FXrB%2BphdyLXqz1Hrm6H0%2F69Ypr31V%2FPff6Iya%2BwWib0p86vyEZ3YC%2Bbjhn%2FVh9ZVzLUWX98yRYuFJEqy%2F9655Xbq9ez3fv9Ggu%2Fy%2Bd%2B%2Fz1e035PVu6x3tfyUWtfq9L6%2FJqq%2FFzZ9TYvVx89U46Zx%2BvNYRf%2FJU2f1lN6%2FG5PCukwZZmGNg0Ni2Vobmf69Wfl7TXza3V3f6wRHuSDX3k9YP1zBee59kTWf8mef9XUnxG9FL%2FbsZktE%2FRXK8hmtJeC8uW%2FLRzpF33BU%2FfBMSUz78Jn7u%2B0eKtfdF12uFbkz5rwSCj32Hy8md9opwz9YLu%2FddSei9%2BjMZf9%2Fv9ektFcq%2F3LndrUT6NhXo5KvWX6nb9WV5yL86Vlau%2FeWlnuvNff66n9HfxWXif11e6wdq3lxHnrDqT3%2FJ6vfrVvfIIu9evfrFeqEuqXqqF1f4pav1buvVv174RVy%2FJYNnf70nuT18Iq9YQ1fjtU6v036JBcAAADLEGaNY1qBXP6F12vfrV%2Bvfr3a5dr0tVS%2FrKrVv1bvon%2Fl%2FXLtXGhj9crue16L9arcE3UorYGG0GK4K9Xkpvrqx3L%2F1f42ohauT1Z6q5k9%2F%2F9Y5Jav3z7rwSbbfXYJ42VP2E1dgTz5UCTH4%2F%2F6tXq%2F6p0%2FWKr78VV%2FjZLXu5LXpJ6ur7k8pD417RddrFk%2Ff%2F9e%2FVpLrJXqv9XBLu1q%2FX3L%2BvVa1XrbtWd9zetX69y3F3c%2BEcl%2B6vV1atfEy%2BtVy3fyrUvGyWprv9YL9eltWu1lJ6JK7l%2BI9cojiMV3auD%2Btfq93%2Bur%2F5O1qhX4gdHWYuUZd%2BevssfX6JVeivfnr8MJxdC%2BiPdrlfxPr0lyeikFXucxRIGw3Z%2BUPtx3%2F9XJH799%2FuwR%2Bj9rlJrVMtSS9JXNy161J64SesVXXvptr1ZZf%2BsfRHNZzQ2%2BmCqyGmfw93VLLMdJVsNgwYeRT1g4D9eWxt3dydrlXrUV5SSf%2BsEVfYIy7J9fgk7vX4zu%2B44X7ZcpdSX4ntoMwHxpoyZhVZsvq81E%2FqUpPduYL36N0t%2FoT1%2BYjAR5UC%2BCH2ZUE9wr%2Bvb%2FXrte%2FXrx2peLk9ffrlfokqtFqbyEllGQcVaPLsnL68EUpB20p%2BQgbQln%2BJq%2FvVy32ixeq9J6sNn1%2BsvJ4c3uv2o1ovRu%2FR4PwSb3wr1q77Mbd9gk4%2B1%2B%2FdGwaSq%2FxBSI5EbN4buk0H8J1klGyXT%2FPKVk7B91c%2FrVZZdbnv85FjF1hUH69XG1wvzXsq9Hw%2FC0qWh02VkW%2ByP7L4IjSNon%2FLGwQL9dYLLbHavLM4tr5VDyvwS8YBUz4Ug%2Bvdf8WYkpC%2Fyr2ta6E4cZC%2BNXfd3aveevS%2BYQwmUl2v17Kx4zO7q7tcPz%2Bb9hD5Fu9%2ByfX%2BYstP5jJY%2FK%2BSkYj1vkK1S7uzE5qyf2vxGqPU3giJMxy7v1Kl3XrlXgj5INZV5LSN0u%2BX%2F3y%2F%2B4jSkFT%2Ftffit%2BsucRfSn%2F8EXPDX5bo%2F5tWRL3PL2i9VxXrGG%2Fy291a92vUvnXu6J7%2FucQv2ib7q7d9Xd9zUI5Pb%2Fv0LOknqVKuye%2F%2FJd%2BhR0%2FCWWC93eAAAC2kGaNg2KBXJ6F9%2BvTevVeT6%2F79elJ%2B%2F6sd3d%2BtrtWO%2B5NV6PL%2F%2F%2Buu1cbVn4KNkSjCDJvhVrX69%2Btdq%2F6sWKW76Ea9Yq5a9XXf61Wl86tfko41D%2F1i7WX5LVBNfNy0%2FXuwTcfFdqwBvR3DnWv1arv113%2BtV6xdN3%2BrfLE6rF2vT%2B8v711zv1cfU14Q%2BhMlr1T0O5BzqVj%2BrrVarVaq179Yrpde9Wr9ExGFP61eq9P%2Ff6xfqwfrhGeuX4JtpLGHHpT8Xs5mGDYTPrG69YqxWrq69cu1tN6mBXKrnd7N%2Bp0%2FV%2BVXr11JaJKbkufuTpWIq57kvuS5rr11J698sVct169V%2FkrZtbdA7TR7Vi%2FXVc03rUR6LXaufhvnf1ZFLlJUkE7I9kvsRnpqiRVYc27S%2BkNpPP6vWI%2FolSei1Vqx%2BhT%2Fol6J7f8T4geZa3YO0cnta%2FXLv89h5h4zK8v%2BuTmr%2BiMRPq6vXq9Fb9Yp7iPdgpdYPaI%2F612UuO6WvBf5pR2f1nRGCLfQaMKrMZa5X6vXERHgkNx0dGKvBJd9Kie6Zc%2FsS7%2FzEzQ%2FBHGhkhZRAwfnrKrlp8zvrEfFVromTE5rWL9Wr1yr1l3XmkXsmB%2FfdSWanvuvKQoYZcZn%2BW%2B5L7R0ofPUZ%2FwGz9%2BuXf5DaSu0fu%2Fz10GHpdj37Nul8uhlpr1dZf98KlYV0RUT9OAyZ0%2F5Pq1yiPPc%2FHl5b%2FVrv9dV56nRum%2F69Ecb%2FMJsMZ9vymLn3bX5GJcl1jaOx%2BrRNllDFlT%2BfrjebxP91aJFSXyQy6X0X3%2Fr0XOPgoNGhj8K%2FKvZTi78n1%2BDTSt%2F0TvyHvY2X66sxJaZZa1RalXvXmn9psniN58IaTzCH4JO7HLuZe933k9P%2B%2FRIqusTiF%2FN69%2BuX66%2FP6OIP%2FuW5HfXr3YLeTXu1i%2FKRkXPf6Evct8iv3Pa1%2BuIy%2F%2Fyer1ia93NxPhJr2X%2F9e%2FRMP2RRrTqAAAAOqQZo2jaoFf6F5V0rd9%2Fr8m2I9f%2B%2BXv77u64j6%2B%2F%2B%2BX%2FtWP%2FpdVapE%2B1JfrlN65Ter72mfL%2F8fo5%2F1YbWvz4MclvP7xRJcXE6fuDGbVel9X%2FUyiT1c%2FVyT1frBHtttJwzurV%2FnsPuk38N2kdEtBRxElLQ7tXw3GT36BLHt%2F%2F6sHfeO3TfG99%2FCa%2BOjVYoV9zaq9%2BrEl16uD2pkf8Lx5%2BejpvX59Kce03Ey%2BrHa3755aIu1c9FWv1cr1qrV1er%2BzyPJ5qauO%2FXLy%2B7tX4v9XD9aiPV79T01r1%2Br1fXXrhy9Ver16t%2BuWK6pZLu%2FDDiR3Yltavnv1zEnq5fq9etV6uV6IwP4qWiP5d2JloW%2FSV%2Bi3ubVvauDP9ZV69Ger1detdojDbKSf2ub8QTLfTMsvNZJUvms4fftP1J45Ta6l1WomiInzWkv61T%2B%2Fr90df1i%2FXW7ey%2BriffrX69XdZM1%2FiD8Vu%2BX0TuyXtTesrtXVYJ8N6WhpHpsPnqwYzPQTaf8urv8R3PQ9P9L3usF%2Bvf1ydq9esVbq%2FBH%2BvS%2BCOpyDnL90ByMT%2Ba53asEnd37Lywd%2BsE1qdJrrnm9cprRGPz18Y768EhXY6E43%2BjV%2BhabJ%2FfqCIhTF%2FL9Y78IaCltejZl%2FL%2Fvi92EMDokFU7DbTLwR8OrrPVbrFX3lzejxfmM%2B7tav1arVojz2lStP9eTxsYXxhLUm7%2Fx%2BamELT0fwyeNZ9fLbf8EJM%2BcUl88vorfr01iKb5uuS2THTv%2BTatvzlced5RBYr%2B%2Ben66%2FIQ1LI4N%2B64vx9ZryXPKzZiq%2BCjSaPY7CP1%2BIjs42i5opuiNj5fJXkTab%2FHVIQcaIVWjvR7JWzSV1icR6L0no2FbrBdyX%2BiuV69J4I%2BYebb8FfIFjEEYAGvE%2FPm9eCPYY41%2Bp%2B4LY%2Bf%2Fyompd0ufy%2F9HX0Cgr2Rj%2BYhd30uF%2BuVX9rPF%2BepKOw%2F%2FPU2uj%2Fv8pHfXiySfyZ%2BUTZ3yh2EmZ%2F3vvLFfbtmS51cfFGxsL5A%2B%2F1i9r8lmv85Vpyf%2FiCMNZMD3vYXxOjMX7367nU3UhB%2Bju%2FJpP7rV9K1evXdYRr1eia%2FRO%2FXUnorBeuvydE68E%2FmyYhS%2BrcEUudwvBIQxEc9%2B3v8%2FfZb58dovd5P6vU2NZWYT0Xv1ikxO%2FUvpb9P3y%2F7%2BX%2Ff7Rulfgi16Et%2Bia%2FRa14MJDHx%2FbI%2FfrW%2BT7wpV%2Ffu8I%2FiahP1r0WD9FeW1Yq%2FyUh0h8nrl%2BrTwhq27%2Bd0krr8AAAXLQZo3DcoFfdURiP9CWMRntetSWtd1axSXJNVa9J61%2Brn6xd9y%2Bsu%2F1YL16sF1Yuip%2FXtn369%2BbDiLc5%2BXSu79eu7uvVyTia4ntWdrX61%2BrquVa6y3OoIo4vdx8R2Ms7CPf9%2BPi7v1%2FDmMNPX4xALjGX9Vf9573f69Jfcvr36vfqkTufyW6Uj6UF8zHvTg%2BRRJta%2FuH5mgvesXr4aV%2FpWk2pPXHXq0tEqVL9au6v9euYlerxIqnTl95f10LIdu37ybEovSfVVUSvXd%2BtVdcterSevfrF4T%2FrL9YvwnfNSwaSr1asv9c0nS9falB5f6t%2Brd3a%2BO1OCI6VrtZbFe%2FBNnjbLJ8253N2oQx1Bopw0NvPDE2c36uVk3XVf0rFzEq1erlWuUnN3%2Bsu79b%2Fq5%2BCikXxy7rbjgwGvwjNRryDBaVLl%2FDH3Mxcyv6kb8EOUgtkqghPUE3CL7lOWIhYIT5XAsrKIvtZdq9cT%2BtTer3eX%2FX9TcCXND34aNMh3xccHytj%2FW6fLH4cnh1qadF%2FwVWPYbrThx2OZgfu9V5PnXxFJEWFA8ayb%2B5NGqP4jDaobxxM%2FwxbaghzMKGO%2FdculK%2F8djkOgtS%2Bn1bJ90FNncIWdPuSG%2BiA4j2%2B3vJd1jt%2BrOGVTMq%2FiPRa5Vr3CRKjUYslRowy5f%2FsF0hjpwNZszS8l5fjycdpxXxUrcgBP8f7L2c%2F4z8ne2sa8blCD0imaREof0dP2tj82EeKdxl2j4shH0Pcf4zSKPsb%2FBHLykEv67WvyFSD2af8Ro%2BOPrpjJf39AuIe9pJA5WL6u5pVqW0XqXqtSTgvvd8ppWGdIOPj8n8%2FeC0lZMUXrFXgqKgp%2FwSvj%2FAg%2FxssKmOr8IYAhwwy5xi%2BW9hGOS%2F%2FYKrCB%2BaYXI%2B2W%2BxvjCv3aZtZWrv8Vhnd%2BIPfJjQ9ryr5QRRmnD%2BIbDMk7OvkVjINH%2FZAo4mL8RjBM%2FBI8nk2xIvXd1D39LWQlSM%2BeS%2F1qvWKe5fGRgEBWoI1Nx44R%2Fq7mrCZxy3AP4yYAAOEDDkKM4gPRr2tjXGFxt1AKn82F0xIrNes%2B%2Bb%2FkPCPg650X6%2FCZC9vzNrwjjNPtN8zHxPqq5ye%2F6gju3OwS372%2FRVMDf4b3tJ%2Fh%2FvOwEZcQ5vWURZN339jyMlm8pNEKDnlPBfOf4SqhAf73r71%2BCuErhE2%2FGAQn7J4OwSZ52suxPjeAqmP%2FWvyX3fgnvG0GrQZRaDZ2hNfgjJqcy52Cq%2BbHQTw3hta2LmL8kaGxxfgotXD9ONWOipLh13%2BswVz%2BsonwRYT0TstZf8pFwl241BkqmSN6rh5Jb%2BwRGfb12U4dpevBV%2FgkkPoDHRTd6WuNu78JPkelJ%2Btr2s7gyk1MNM8wHKA3SChVcuxL52NfQRPbhfOcZwHEmz%2FrwTnKqs7BktFy%2FNDK4P%2FEGulBf7CFLhf67MfP%2FwmRquhm%2BJm1rue68EuiS6PXiZoaLocfll%2F7%2FstBx4aHsFe88JYZYQyiHOqL712K1twdmKP4goZUj8dLH%2FBDz%2Fmda1vuwTkD6p6PO%2FhrugnN0logHwRsmdW%2FisbLCX6HKay%2F147Sx2l6MOLr9x%2B7X0Sh515fruhnYYFNYkEP04MZp7WNBuZj7q83zJK%2FyVhpSfvJ7%2FXNSzF%2FJ%2BvNd9Wr1UCjYcao5AdBeH0EuT7Bl%2BTwUVqyLT3usdhZTDGtERGn22qOrwT8VwY6D734IrS7%2FiKJ3jxtZPsfyU2umv7%2FHbnSZ495WO%2B8n7%2BqvSXXTvL6PXevkWKVN4oQPgqfg%2BhZfBRunez1%2Bi5Xd%2BsEvorCX6%2FIaqNBJ%2Bt3pr0%2Fk9f9Hc7y%2F%2FRiKIOZL7k1RdXZhDW0%2FIWhr%2B90PuvBJu%2BD8VXWldeCvdjj9PKcJQcMfX4gk%2BrlGTEH3d991deUtG9e97r0XCr7V74ma7ur7%2FEdNpw4uN969Wpr9a43n79e%2ByiGQxltLXklR2iLk9FquRXJfVirWognt%2F%2FrKSAAABGhBmjeN6gVxEt%2BhNfqdK9YO%2B1il9XJN1q%2BL6RW77VOvorn6pg%2Brv7urq74mtUTr5P1auJBIXh5%2B78EZNb7YE9Y36%2Bv1c%2B1c%2Bl67Voi%2F1er7XsVyDldq9dvwznNLr7kh%2FNq72rifj8a1fL%2F9CvPSWjP%2Bpk5XzT%2FBFJH9L9Wvdq36L36%2Br179TNHeiMC%2BuFerfq67r5vWD9Zu4i%2F1YjrXr6WvkkFLKK57%2FWXa1c1191667%2FCV7Pe38I0Hk9KmefHfrX6xVusa%2FV%2F1aIlWKT16XlV%2BqYn3%2Bv6sC2uHxHl%2FFVRisd36v2sXRNcT%2BpFlSq1WsUsRqznL5uvdo07NeetUz5%2Fxc6pkw9tAg1LQfVwT1YExH9Yrn7r1bq9bL%2F%2BrVf698tam3S9z8tgNMeN%2Fovr%2BvfhOqJvY0I7O%2FyRsY%2FrxEhEk0uHVJnwhaRsr8bY0bxAYCXiuN1Ks6ezNT4j46CfZTvhWQV16t38q9Jc18vuXOEGT%2FBbz%2FGRo4B1l%2F7xBOSp4MqZg18T5GCsevR3K8GBMOxKFOdOhqmgQ%2Bn1%2Ft8hdGr%2FRcP11%2BQlDjdD%2BrVt869JX814IdeL5ugssf1g7EFrXNv5KCKNIdGvcuHBAFhVfBVDf23aTZ8uSPHv1gr0SLL%2FriO01QccMP3z20a7urk7RXJvEkGgQXgDbKHdBJy%2Fr77kOfJGmX%2FgiPGgcvl2YmFk4ZPWD9cq8X5ILp15cve%2Fku%2FSvEVL84eu%2F1dN6sF5yL8rb%2Fd52UvlKXJAzXmJTSf62O%2F1i%2FIWVTY%2Fqz9mHfdB14aOHUJP8W5iC5L%2FwUQrJEXqj9%2BCW7Ng2RoYfvwSaGHt5XiGID9Yoq5PRek9Eir0R1eKhpyew4RcFY%2F0Vqv8XsazeNCAsEDsEcOKZ7eHRxxC%2BeF8v98QCKftn%2BmPyFtDxh0duq%2F4JDkydJ1%2BGKBDoeBYPaGB0l%2FTGIb5TGZKivl%2F%2Bpti5fRan8lV34T2c%2FyxVl%2FS%2F8nhnvC8EOdkgT9fq%2F4Tsb3GzHRX4knO%2BOmAyxL%2FiuhGYTlP8JeZQOpjovwReaTNeoi0n26%2FhsrtWTPoBrFX8pSCN236J%2BuL8RXv1cn85Fan3%2F1Yk9zMm%2BXw2WTpJIg6%2FYQ3c5PPX1M34LurrTi3tdeuv83D19LvXr%2BMjoAI6Bop10eOmxeCI%2BIpvfvaX8TnYDArLYg0PfvVoj9goK88vPrE8J5P7%2F%2FRcpfMIjoura%2FE%2Bf6Zzf8ExRwaPpven%2FE3Z%2FN1f61L5C5jdP4IYI33Ph4%2FZOUxf4SM3HpwgvRuh7Tetd0i071d%2BEtqukl8x5%2B3ewnfc2%2B%2FqvXv1f1V01rVeCIkQseFe9DTff5scEfry6dNeuH4I%2BklB%2BKzwl9jcdpL9r4S8dMj%2FUuUhI4y7L7%2BqxVfYI%2FLmFeCMr0mB1%2BSk%2FfpGs717pjdE3%2F6t2ivfSteJzWS75LRoq8Efmoz8hb83eT0%2F6gh18Si1J6EOd14J%2B78ZVqd9%2BhLTPEdW9iVyq%2F1KD9EeEvZjX1ABJBSQRBQJBULBQThkLhQMBYSBYKhYKhQaiQahQrhErk1nv9eMpx4TSZdJLyqvKhrRNDi%2Bov%2F4v1etvV%2FWtMv7%2FfWekr4WRL4g38rzr6fL1%2F3NKg7%2FaJTOno5fYa4T66IIL%2BntHJAcwRF%2BljorngTxp81ZdRcc%2FVNS7pWYupGkNnjMTDC6vNj8lwHZVF8k3LGPXFfr9BKxSrEfENOe0j2dOiH1Jl5OP7fTEIRoGbUY7%2B5gPD18Pz7QdFfs6WnIsEl%2B%2FmAwThGUE%2BNk4SvdSkCqnJD8VwcBLFSRMCYyDUKGYKBULFQRhEar3bvqu1t3lynW0q93zdVVS3Umhu3B8i5n6HifRdAeOnqf9AC8BeiRG2SZ9Mi7ClXySxMNVfP9NQ%2BBcw8jR34rvwWOw5K9%2Fbgn7l8LzZkFfhQD1EN2t4z6WmzEzcFvMRQqcQKAnhTpACukT3hO6Dukf1Mlms%2B2H0cN72Di900ADVezySUBdN5%2BrIaKnTspLfdeirRVFk4TVC1zrvisZ8psIRpN52TmslJ7E6b4iGmvaYP%2FkKIe2%2Ff%2FE3V3%2BzsfMNQMfz%2FtyMHDTPPVZZO8hWVOVgcBKJn%2BDRgs0LGEpEty9W55a%2BAZMPXFNV8C6tfqqsDRk5arfV5Jj1CFqaSQZTCh6%2BGvr%2BlC%2FxnPyppRfF31Omuqf79VWiw%2F8W7qqKWlpd5ofgOx%2BJO8o30ndVUQicgSGhgBrJSaGmq3yO%2F13oPXPl5E1%2BQrl128UJSzhnAB1UUlFWA%3D&media_id=1254206535166763008&segment_index=34" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:13 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:13 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_sPZseav4pgpuY36mSmyWmg==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:13 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113300928181; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:13 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "41fb9c88dcebd7dbf17116c5d943f468", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19918", - "x-rate-limit-reset": "1587864356", - "x-response-time": "31", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "005f7d3d00262995", - "x-tsa-request-body-time": "96", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"1k4bVPzPmjF9bEiiMhNM91kel38%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=FrzIUEA35hfUKG5UuITZqR3xIfoa2io2qxvVUiDfcYcqMY80m%2BNtwxl4E4ZEMYLqoT88Tn5lU%2BN1i%2FhSacUO4uiXCmtCE7dxEAkuOBIx3JRJZjO1%2FTIXYfx6Q9X5h6PaL%2FZJTXAO7sHAe8eCB7Ra57wgbJnAASzUlCgVCglCwYCgmDAmFAUFAUCQVCQTCRFCIVDAUCwUCJmuZe%2Fdrjut%2Bd5d5fUUiuePCk81aaDlx92aH3p2v%2F%2FTPfTtdyDwsyio3j1LGLFCvYVqZdqN5LUaS%2BLcj8TRJgovZ0AV5IrhrTnHvQRNNW6bz3NxhstuUg1HMhcrFxjrIeB%2BFXtvJZS%2BXB2e8IbPWAzj6e3%2B3h80hskm0wCsO2pAcqFbu9Ia2%2BtWfdpVRVzFagjXbhIJADjfo%2FNX7S316KxoSj5yTLoqDHXkL4JQUikinPBAHAEmFJCqFgwEwsVAsJAwJBKFBkFBqFgoFgqETJ3Uv1nxW78WNcz2zWF8tbzLaXU0OIaM5ztGt3Zf3w9D%2FAO8F9XGxN6f5ZZgWiPz9e%2BxJw%2FmfhjdH03%2F2NBadVbilmAlxGFdIEEsNg8hHcb8WNukqnbhD%2Ffh4SsXB2u4nprkT2yc8Gd0vld7xGrmpa8kGyt2ZoMfgFcC%2FLv35e%2BKzJ7pkO4PucyAeKBF2fyW569Rv7ltSDNQD9fwp2AQAHPp7fYOjle1cUbI2qtc4y%2Bys4L3%2BtJ27x4HjZSpk8sAcAEkVJDQJBuFiIFgoFgoMgoIwqFAqJBqETPF1Un6ddcszUrWSGrqbXukaqSWOIcm1RyTl%2F7eX2elzP%2F3%2B30d9kVq%2FZ9Me%2F9vLH1fcM1i601f1zTwP2DXHLNi%2FkPtGhBXs%2B%2BAObaoNoPI0nL1blHd%2BX%2BYTJaz2HSncYXf8cNlq2aukS4rVxYm%2FKYvwuAoral93qoUS52zyqo6eRVqPL%2FIXm9gLszIADOJxt1NrDRfQndReYmzvm%2FmzKM%2FASZYxqw4BjKNeW%2BAWaoaSXOoOAEomf6MGjBoynLFSZUtyEutOABq4f20baeSgkOvkHTiTT1dt%2F38bHP1M6xt7MnIlfoKNoB0gM%2Bm3qYzFYGfG5XCUyzepEssGg78iZ58QJ04JcDomEYnS0wEx9XiTdmaynBYtW5bMbjal71%2FwPkfqdE1FVTJlKk1jdMGOu%2FAfFf0%2FsKLwhFwy07JpWiXdsfoePwvAC1kEIg0vUgrUTAwE4MMSbkFDnKwA5nzuylwCmeEqemCaqKvU9MVauNVB9XJJXIPtx1aqburtpxrvL8WhglCI2qLeH%2FaLSCAABE2AsABN2D1ff0A4AAABWVBmjgOCgV2vjf2LVfyr3%2F%2Ff%2F693%2F%2F0Svc1%2F%2F7%2FEL3zrXfV6%2Fr36x%2B175e17%2F%2Fv%2Ftfna%2B%2FXyX%2FlkketJWP1lbMgrvJ6%2FyeISuMN5PPzCPeYyMbDiLP6uvUWVXfJ3RPn%2FVj9SJ%2Btfrl6EVV6rzX0tV6y91Yq%2BiPS%2FBFKTZnNcHuGob63rTXxwkRf4%2Fy82Plxg1JMv%2FF%2BQkQia%2F%2BS7%2FcF15ReUalEUcqtW%2FWx8tXjuVO%2B1Y6RX%2BTpMVvouJ%2BbWTykvOx83J%2B9uoIZTLbV9N6OmFWid8i9PE%2Fr0nq98t883rL9cpfXvJq175Fd3dNVycb3fr1l%2F%2FUt8T7MvfS9d8%2Fa5fE0v%2FwnnBAF%2B6oGvWC765BXxHJavfEq%2Fd8s189SX0rElidhx1MVqY74mru6u5te%2FXu%2F179Yqu%2FWu%2F1PSertyIkCS%2B5W2uoLNBxs2XmZvIJFN9%2B6BHEDPXqC6OG3w4npqj6vE4yk4I%2BdS1Lrgbi5N1y6qv3WpeWrq5i%2BifYKJ4ZxAT5oY1Gph%2BCKfN9fip4SbVJtGMPU6C%2BCaufIYpuVby6m0l9cK8MWmbNIZIXA6%2BlHUVhn4vSLJ96tK5LWu1dVJVy0TP5c3Wj%2BKo6JQa4gPA%2FwmQv5QmEr%2Fn%2Bu8TCcXTvgwRtODqDT%2BX71wTHFZ%2B90yxWGI5s7%2FFXQCmM2oSjFB8WQn%2Fl8bx80nk%2F5bHHUGr7dZ%2Fis%2F7c7K5Pkkkurn%2BTqr0WL9am8FHQDJo0yYY0BffgsJJxwkGWBeik%2FotYxT3KQsZjf8R6IwgI2CmtHZuSS%2Fr5iNtPXq35S7v8fbt4kbkskeTY%2FXY2r%2FPU6Mn%2Fyio%2BID%2BX69E6l6rqu0WLxWb1y%2Bld1K0nr2T0%2F5fGkHjgkdEpmwSy97P%2BaPHlUEB4dksQ6SvHSY1dWd%2FYdrGRI6vMxa6zcID1CfzOKB5Wfo3DmE3J0TXkwq8bGx%2Fw3o9ZIKnWDQ%2Fr7R4q8EJJdpxVZKuS09rF%2BXl%2B9evc1pZfmpa9W7kz179SpXq4%2Bci0CLcw1%2FxdnvHc%2BvEx82bggF54URG%2BTu78JzD5yCln8S%2F8wnTf4IjMCk9vycqj8uxvV3ySevT3L4IsPxCdsv3dJHr7Y0ho3HviaGwGqGURsqL%2BQhWMfEBv1KdgON97Pb8%2ByrIn79Zackv1lfok6vMc8TAAD%2FBLd%2FCPlMvDJ71%2BUQdiZn8wmEWngfYVINyU%2BbLd3x%2F7V9kviLl9HSH4JMYldr8QIhE2x4ywGBk2vs0LuRbWXOvkR8PwuSb8aTc9jVz%2FJ7%2BuC0rIZHLuMldh83m%2FxNa1X%2FCRDoTIKAzBm2PgiPufQ5EF%2F8I6QdRch6UfZO%2FUnr%2FwjbZTggKGxzmKoVI2BH4%2BGF1MBaByhNNgYEgfpl7FHwpoDq0jYw%2Bpjr53lY65mK1dSfVyQrF%2BSOwjw7CXfCEggJgs2FJJFfjBs%2BSQm9svuQrl%2B1X%2Fd3%2B5L3debyw%2BI7bQ1r%2BEaGag2g93f69f7EvfauUje%2FyEkUNf348CBrUL4RmSxbs909NeJLttsbZ2a%2FlIVi9U3Iwujf4%2FKp%2Fsx8%2BaL5PXV%2BsHCcnixHLlaXxFN7DtZf%2BCsoYUzx2EbQ3OcT2DSE1rjK8EhMogJdy%2FBGJnzy%2FUpuycpp34IiZCSUvxF27Ct0n4rrrF0kviCk%2Fvv9XNWkCPy6%2BX9Kvvd%2B35%2FXv0SX5iOfNF%2Fv%2FzFMw%2FtWfuSH%2BCO9%2BH5b3R0%2F%2BK05mZff5pYmEEcMtXfhru6%2B2trYLeXOQ0zysv%2B%2Bvfmu%2Bu1jWT1%2F%2BVFc%2BXtW%2BLWLf%2Fa92tX6tN5TO%2F93t%2FhPmxVXfo8VXfgivv0no1dvu5MTk%2BXyHffdaqzr6Yl3zeimBHQAAAE%2FEGaOI4qBXLR%2Fwp08loS1%2BtS3LsSiixP%2B1ZxPzLX637%2FX532r9ry9rF6olfrX61%2BtfrXavXrXa5STq%2FavdrVWqcPqZY%2BsH6v%2Br%2F%2Fq9erGTz%2F%2F1vJTrevXL5eqRv10tV0su1nKta%2FWqVqevuna%2BqUMu%2FWTy70vfRC1jlpUhXfq5N61P6vF%2BiQX4JjkJtAADkzpBd9q5ECiS%2FRN3PquX65Xxav%2Br92tP16mMf%2Ff66%2FQmr9Er%2Fteu%2F1Mk9y6qwLRNzrlT1d4xYVT6rwlYdmf3jK7V69eu1ysd2qE%2F192r16w6llEcT6p19F1%2BiP2CHOzOzL8Fe9ROrjg4EP52LA%2F%2BWpErE%2FC2rVzu7n9WJB3cZS9BBRpJ7%2F5bsi%2F%2B8%2BIH5QnCVwBigf1Ronz67zhgZ%2F8E0pBxpBYo2%2FXqFfauOXzqxUT3JasVzK8RutV69fllogKyXklYQ7HJ7r%2FI%2FUnBjDQoL6v%2BTDty0%2B9XfsBB1azakbuuXvuTnVyb1qYv%2Fqusv6viuOEG1x3oEQKfh4gea%2BgdINORmG1oVhoNhCiFdOgfVBHVyKP%2BaOpjaldec7f4SMH8X4anOEGrr9cPSal9YvwRVVhyi%2FORU2pWPXcty%2Bixd%2FrFXgkpbbknolfgo8v0hg21XiKenlZfXk3l9ff5Cy%2FvXD00ZPkURhIymZKkXnq9iZ5PEEjp98M7wuj8nkj8EXKMJ7lRPj6zlX3bPDJRMvq9evVLN4sk6SND6hNim%2BjbnwhOCsYAI0POU9WJ3zsfmsMEP2cTTl4Pgjyv78Fp2zw70PD8xLAxtB10oJLA43TKV%2BflQbsa%2BXy3YdEvV3svN3dcq930T%2Bry3Xq42CO%2B1ll%2B%2FwmR93HBCcDYD%2BSH7gnR7KXHTz03o2GX%2FXvxRXpvevzede5ct9v8hM%2F%2FQtIviTRs2%2Bssl61%2BE7t0PLyiB%2BCTbu4ct33Vy%2Bj5fojJE3kx8EJleELlCJsMW4NJ8akSXoE9YXMSHjxjr8NJd3%2BCM%2FHzZEwv1rzzGbDZjiTSHDfC%2BWGlZNI%2FRf%2FiARDD%2BP09n4oTLFE4QE0PXmOc2PPEwG%2FnwXbjJp%2F48Rx4vD%2F%2BO5Zvlv9Hay%2Fr5rtb9X%2FXqXqCIixkDfg%2FJmMY1RF%2B%2F3xfXgi8aTEH7O3rRfc88bA5%2FqfZf%2FohGNJ%2FzZxAS%2BkvCvlUFDAeUfWzGzX%2F4rMgKYuUMbINQfwhkNThgJWNaY6zKfvh%2B732IkMSiQy2ZFGgl5TlRymme0Ru5PWp%2FViXwYTMehm2jPThpmRQ9J8v9%2BELGitreOzXkCAMv%2FqC2hDc77RhBoLDl5%2FwWbG6plh3NIiQra1y29BFM%2FJdv%2BXP9ec6%2B3V%2FgkJsRZOpeo8jWDJyoKusNLs68k%2Fv%2BUpVNm%2F2QeuuGo9X7Wvy8eq%2B1zSLqtVaW6L%2Bv34KDY%2FKgUz2bEna7whYeT2llj%2FgnLljUoYeO1rm3v8EnRHgw6u%2B97qvS%2BivXq4%2BKMsgIAxh%2BewS9F1NeTy18xS5fXTkEbpE9HeT1e75WIQHIYq%2FEFeJYZfMv0gXXMx%2BKz1eTen991p7BFYUqEqDt95MZOH%2BFvP4%2FTN3%2F73rUtf2Yl7iHry%2BhLMdvyd6uJq%2B%2B%2B79Xl9Gr8tLf7od%2FoEnVFmN%2BogqyZhqJ11dF%2F%2F8NOvBCXdyFJf7EO%2F81nf9X%2FR3kqV7tf37rWvVjuvV%2FG7WvvdSFu%2BiEIZlL%2F%2FL5CO%2By%2F%2FeAAAAadQZo5DkoFd9ITK7r16vWu1qTdcp%2FXKvU7fFLl%2Bruv%2F9e6J7Xq9WO7urqml9a7W52urtWktX7UXY726m5a1QmtdCf1Yomh3Yx33UOZS%2FVX0Tfomvpe%2FVg%2BTvvu9QQ93w5f1i%2FWdXlkBA549VrqqhKr6JiL%2FXprkmp9SklZofVFl7q1SEIvu64mW1bHSe3RPVqxL69frVX3d9161V%2B4IiJyf13dy2iy557ltaiL7WL8nRjpwyl3Uq%2FLqv9X5%2F1%2FW60n6vd8vxPd%2Bty%2FXp%2FWCrXX6ty98u9zR2M0uXjqEHDMPN%2FrKa1eatai7k9erwUYyICVEtprWZJl2CW4wMvgDu%2Bvfd%2F4Zwgcy%2Fr5va%2FBNjbO5iZhkzdKG6tdVaud1auXyrLteqevWom6fqayLoEnaHJnkxtXBRJDQQRYLQ2uOnnteq92CqK%2FGMW9Lgx6Rjfp5dZPl%2F%2B3dL2IrWUsbR2NetvJ6%2F5tu8nz6qabNBZd%2BsR61VCPTRcoS3j%2BUE2a6j2VMp2w%2Fd%2FhZiDF4EAYzqnmW444QaNfsFRGPDsWB0Y0DhQGTYT%2FXY2HRcZhBA3Mv6wwjnbcowWGAHD%2F3rzBgN0gwaDPD%2B7OPv%2Fq%2B3wT00uAx5E%2F5qCiIzsIEdyqNl6f4bkRhlNT4R7vlUe4%2FT7lhx7b%2Fxfk%2BMyvYSLHLjO8uJSfT%2FIsHqKJnwnp0361N69dxGoKNhB5uF8t3XAhd9z4IM%2FPC46cLUmfuW1nZeTVTRfXYIsMCugvbvsv7%2BbjAyewRz58tO25fL68VkN4PWrwe1zYKMS1vXczFhJSeS%2Fgi4%2BJw4Yv9alf3fd%2Fkj%2Bi%2BlLexdevSXN6L1ehGW%2BupRpSibEKOgqH%2ByZkanyghyhlylYt3AY5ZPy1QLVEpIf2%2BCmN9gVats90esWITMLD2FcJlq1BJMGwtxBFzIKSXZcXPCnfs3NDJ%2Bf4IdZMy0r9RLmLk7c9V6%2FKXgn8dMuoq9%2BaWrwUZ2zqc4yPDs78EPGdNFzk8vlz8vnhGyRkwluEeuriSef9gnNLtDcCM1p7eAUuxHp5GWhkER%2B9uubBJl%2B%2FKbnkvwl5KhNi4b%2F1TLX2cqyvjxv%2FYTob%2B77BIYGamKFJn36F9yiDVwPfobT%2FnrkGCWv7JGYz%2BwSbIhj9EevV69LcqW%2Fe3Q6mwwKNO%2F4yMnAHYGDEubvBXKyHoBCHhCw1YpGOunA4T7K4uzkX4al2PZuU%2Bq917W9GLxmbr0woaq83n9O9lYhp2K%2B7BHMx04NcrWT6fhKLIIjp6NjAQHx3D%2Fx0ZEqJD%2BsZHyOFOAv32IO5UnlMXvdQjwk4ddODGHEn9gawXWs%2BT6f8SIh5WUzsAPuTOEUZB7FCT4j3DTvNxyrwTkCLBezmdROouCXVxD9aupewrhCWFIl1sgInzAs09rlSzCf5S5PHwVfljtnIuWtfoZonDsXGo96RydgjhkdZ71agn3MSKIMOmNuO4JSqxAd%2F4YibPZ2C7kZGQLPjqB34Ia68%2B6kwWEQZo2BwyvoGzb8d5217QLoR2Uxnu%2FDwakxUPtr4RJy0zfJLv8E3jgiJTCQ%2FZPt%2FceUdChpXDyZqA8GJmB0wb4dI9Root3Cl4gM1YoHODcmZBvZZo%2FW5LGVUmOqOFn7J4%2FuvbvBLM6yYysTL%2FzxDYIezMfcfKcn0A16N0mIyei1Jrbd9vQokuc6SyqpQh2SnDAlNOXq21fHzZ8JVtFqJfmT7s1PuXBJXSbJ7f0XJ2nNSU8drB2YcrqXvf%2FYe83AvjLrGRWLTNCKZ3Nn3zL1ehLCx1MTHzipp3BVOYothkhZXse%2BSUakCHA2pF8QSg5OzyHl%2Fh6maBdwRTbJ7nZdymPR0JLjNI4OInU7fEkwvuY1kmZPTG72rlLMbf%2BrKou9VLT%2BEzY6QsYLOgvdtgk4dZu5atIO3z%2FzeZhvg%2FHL7cLKFim%2B3L8ahCyZji%2FUWk9cv5u69%2BVe72%2BrHr%2BjRaldC4svqu%2FZ65Nb%2BT79XIYgYGUQEdInd5DGe5X9XS1n34LM3m9mUx49Tu16hM8bsZ3v6RLnx%2F6s1alM7dSXJaPK%2FIax8ZP8JTUQNk1R3k9%2FfVmX93XlFXY3uT6su3b2Cgq125%2BUuwlvcOVOR9adxBHOY770t0EsmyqGUn1vhDnXn7uK3sq9cMvr%2Fr1BL3PzMY0WXu6V68J%2BXGr3928nk%2F0d3emurWKS572795PL32Zcv%2FetOX%2B%2FRT0l36LlEXJfyV6I1F8bX7te7RUo%2BT43he%2FRHH0WKvUoJuJvwSXflfkFPvAAAAzFBmjmOagV3f7Eu%2FXzL13fq5LxSvJ6vUvh7%2F%2F%2F3%2F%2F1f99%2Fq77VyrkELfqYH61W1Vq1XT43U1%2Btdqw%2BsMy%2F%2F5PcEPV1yonlX%2FBvNAp3aLFNxNbE16Jr4lWJfJz5%2BtVb8YjMuX9X%2FdWPc9ZIkIYP%2FHK%2Fdc0w756ur5ZPWqvL9fyerzeiXqxB0EM5bqabXYZmwu9Sq1Ef%2Fk8f%2B8fVi%2FWu1ruxz2l9e7ifWL4lXiLt7hP7NitRXE9%2FrB%2BsH6naXde91ik9ZfEq8nE%2FE3a4Uv%2FYib1iriVftXLu%2FVyS7lXrdr%2BUkeFn99r1deGcvEczd99ovSesX61fEr1Rcg7cqfl8eGg%2FcPdz7BP2SVFYycTVz3d1pRxf%2Fmr1gvxXZukk9LfrD%2F3rQirivRXSeesaZp%2F%2FMRu%2BX%2FrPVBDVuf%2BeqGXQtwhzxGxrIJPXl%2FJVtF%2BOv4JNqRQwfgjMnHUHK%2FRTlJRPzyXfa9fOvV6%2BJfBN4zOUakY6vzU0kAf1%2BO6u19728ljgo0mH65fhK%2BG23s38omgZs7e%2F1c3rnuPhmLP%2BS%2BJjZZfROk9CdV5DZPJ5e7%2FWqXr%2BtanX9Yrj5L7vdF6XpcpPKTmUfLRSqq8%2BLTHjQ4voxo0PzXf%2BbKpfXnIpPZL%2B0L6vKZzL68ksOtS8vu5dkkya1V0vmuz%2Fvm7bu%2FP1%2BOaPr0Kqpfw4PTOXQFr6GVKuTzkX7KPmxv%2BsMub1q%2FLd%2FrJ6wV4I%2BxnSa%2FDeOg5dS3r%2B%2F1yy%2F%2BqL1etfiSTt%2BaPyZfrxUkQiYOIyaEEuRonXisdECwCnfOv9a%2FNSu6L9%2F1EP1r1Cvvwr%2FRZVcut%2BQjsBOgP7sp%2Fklkgrn8ORuTrqo8mP69FSJeCUiAUNw0NNr6nWZiX6xS%2BTd79Hxt%2BO16v4n4nL65cuneTzkX0OG7l%2F1cE9WV5jap%2FQuY5fUJd23ayLxW%2FBIbmk1eY56%2Fen%2F17%2FyV1Jfat2vfrUnkJdP89fngZVAGvDN73fHhed36JKLuvBCW68PVX%2FNVdWrl3P6K1KXn9xynb%2FJy0%2Fdb%2BI9r3y%2Fr0R5TZdr69HYyfP%2FL6Jr9F6rVyrv33dO%2F9FTtc0mK1dQihEv0U9JATCZ%2Fow6MJkpQmUqrqWuWAp2%2B3gHtYVBgHaRaapHdmvEFw8UDWqmJ1%2BLV9Si3pC8M%2FLtMzbETrQuok5dE9ayhbb9lmd3qtLoX5m8uWpmROYmIzDCayeKOEjNkJJ2BwOZGToX455wc%2BNO%2FSg2imxbQSqbabqQgncscIwpF660pQ2uTNNSCbDAZQgQgsmkktSKV7qSCcgw6FBmp6gYQChGSq07hHjM9eZS2DU%2BgiSloKuGafgYOZ6GnYAluA%2BQRxmohFRCersYT84VFe%2Fa9V1dsxDr5QRSOdLZlZY26OihpW10dl9pPFk9nTu4cY0Yn3fgMNTgxHZxNbCcATLUjCoWCgmIgWHAWGgWOhRCoTEJ2dzW3Px66re9XkvKtCGm5XTJdcD8x5OT%2FH9L%2B5NN2v4%2B23%2Bp1Hd3cZNxZ%2FnzhB6G6fp7P5kKU%2B2a6zhxL6r%2BIbdxaqGwbU4SdKAt4z4Ci7CJQkkforTfQZmvC1LnHnjaUySGDBIUK1VDbnN2HBfAwsL6Nolfk2mdB1nimpdVVwow4VanvsxZ1jV32GaJXPf8rRF6N4mjL%2BZ%2FU%2FaKkZIIXnCwlgMf4SupyI3leM6ikok42I5K3BwBMBSYSBYbhgKBYMCYMBYMBZCFUSBMKBERBEjm8453Xnma5iYkmXKlJqqVpCaB601%2F1nQ0a8N8dyT53%2Ft9zG5nqRgGzPtJX4aIgMs%2F%2FSLCH8US7dtVreWNOOi%2F1XpdrxwTc6E0%2FZodaLe15KXve%2Fck7xfMIV9YEOpwUN0r1BUHWd%2FF%2BroRZfi9zonQ9HsUFRjjvZQ4ZdTVO3VWojMVF%2BUrsZUrdcmRITS83LD3e3%2BOJas4R%2FcNUtYdONeBSWDpa8lp5l1SkpLthtFnrE0VzTjvy68LrH61uDgBGBSYKBYKhYUDQLhYMDYSBYMBYKDYJBQSiQSiE7%2BnmZXPf7%2BFz51KlpkRM1MqLC%2BhVt%2F%2Bege1yPeiXk9W214tct%2B7ufq7%2BGps8TT%2Flm1LovMCBq%2BumJ9dehfxH5ebCa63fo0XlPluBW7s%2F%2FloLai3C8qHad%2BCX%2BSFgL1zEJhObKIffL9OA5TJ343XOj2OPTS9Vd%2BORXTNIuwvSfmuEzTywxq4%2BAX8phV3Gp3aSDY7jp1uUcOJVDJm%2BSbjCLpCi94mCrNh0FOk1tdBmnK6vKv6YIWEOFwcASIUlCgWCgmFIWCoWCgWFAUEwoCg2Cg1CwVEwUEoSEJHNUeK6VJuuFK1V5dEVVOFLrgPPQPGb5T%2Fso3N%2Fn5GZPU96R68dq%2Fmclr%2Bv%2FXktuueQZN8d49pu2KdkxD%2BiNu%2F0GCFLN4av1EX%2F2m%2Fld36YH9pXUyHAJNt0RprHuq%2FBiiVG5oA8gUHY8rR3e2tanuMMwPXoqNJqEQDMlC0%2FC%2BvptDcpb3rm5FCgDGBnCw1E9t4HYvjwv9xod0%2FX3o%2BE8nozOdR6euYZwEQo%2FWXeMBA9Wa5hg2XpgK8Y6NcZmPReKRw9swcASYUkEwUHQZCwkCwoCwUEwnCgWCoUIoUCoWCgmCoRGQTCIXi3GPt1FFcbuVJUomTKXIidD5n9Io2fi%2FoP5M3vnwMU6KNvMf1uTZ2xQX1riZyj93jInAbb9z%2BcR20HWM1bUh%2B%2Fy605tR1l90C3f3KQS%2B9edL5Xknt%2B06skLRff%2F2yDFBsAAN93iDEz8T8L3cUTuul0dJoP68gDd9eWtKc9r6OrxZlcSW0yFtMAhS6t5d9r4XT8fq15tfzj%2F%2Bc%2B7B5v1lHsCYKd1942oAi8HHr5SRmyKZ4s3a8a9d3wxKM%2B%2BkF8pCSTathP2NO%2FXqzy%2B0DgAEqFJhoExQGQsJAsGAsZwolgoFgoMhiIwudVHx%2FT2qpVSRMuVe7qsulNSpHkHut7PW%2FwL%2BB%2FET%2Ft%2BRRtHr%2Fg%2FBFafvEnmA5F9L3%2F1r5bW4%2BRLarGtLWMsv4Vvj7LS3Gj%2BXY%2BwJtO2ekwL1NyRXzX39NFDv3yHnaXobm2CBScdL6RHZJeReEjnOc%2FfZfA0j%2FOtuY2sFgjcoVc2WWqxoXRm6ds%2F%2FLTnPSgN%2BK1C%2B03SHhTWnNDiPT2vXxMB%2Bq%2FU0HH1eGWkU8ZXAmbiHA9NaKFwA8TK1FFWkR71eKlXb8VaaDPk%2BaBwAABBZBmjoOigVxdoT1%2BvVclr1evfrKT16vVu11Sa0WY8D0CLv4JVOn6J3f69Qhe66Xv1i7%2FXu16sv9erVfH69y0T%2B%2F7uhy%2BrdexS%2Fr14Pa%2B%2FVsdl7J%2BJVna%2FD9dfLfE%2FqyT33cl9rysgpXXq2K8ct%2BrJ7%2F6tfE%2FLLfVFX3%2Buv1y8lFq%2FRHO6vv9esUv6ufr3%2FtXS16%2Bmut1b9e7V1eQiyM%2BquF6OW7VKBL%2BIr1aX1y9Hq%2B%2B1qafl%2FXpPX2T3%2FWXtWKtaqdel9Xfr6T1qT11V363%2FWVRP61IuTr1qWJVq5qtXr1i6K%2FWCS5LWLu%2FWNfhslNDdZ41%2F6yt%2Br8foIhHtfFX%2BvVLE2rS%2BCTusW%2FU28N1tep0r0XV%2BQmOpjL69d1P83XxK98svr0%2Fgkj4gPAL34m0kwNAO9P4I5WP1eYvPla4c0OVLJx41Y9v1y%2F%2Bv5M6jvXcblXXN69NnrX6xyvXKvBJdvcl8WRE9AcwYaluvFY0tq8Qr2Pr%2Bi9IrxF6XDyEd076x%2Fu7v16vWq4ubzGhPyj57%2BPsAxiDzw0AzwQeZQdD828OJML2J2nfkFbuvRa1a1692cvf44vy3svw3Y%3D&media_id=1254206535166763008&segment_index=35" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:13 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:13 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_aJQMklx7Tiw90ID5EjVhWw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:13 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113365613628; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:13 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "dd58c9d151e4bbc61166b1ef80ed86fb", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19917", - "x-rate-limit-reset": "1587864356", - "x-response-time": "34", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "008a6f770012022e", - "x-tsa-request-body-time": "101", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"PvsKYgEj6JMj%2Fxpadfwg2JaitDc%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=3uvhIceGZty7j%2Brr9ElCHhyqHG7ymnjI2%2F%2BI0Ef60O9H67y2FN9%2FhAgSbaUOvGDZ%2BWP6uSeQ5868Ehs%2F69Q0Ld73P6mh9Ge%2FWuVWAqi7tF6X1z5f%2FUhJswUkn4%2BFbU7AgG274oZllwVBf%2BCikflBAdZkSffkIEDh7Z%2BX6%2FDZ8JnJ435gwE1cbWH81gTEPH1ov6%2BCLcLJjb9TDU%2BEHQoovylvXZivPCTwVl3dPeHYRf7J7r9EIRLDSTzrYmeiF76RX7mXqiVXghw3Fgf1%2BM1Y%2BCpvzWrxDvFN9Jy6yD%2BCL3bg2%2BTN4GPaz4VKMnn68MLje0esemSDa14rjhx1gy%2F%2BJJKoyxsZQz8OZ%2BGkmLUE2h6r6D%2FYIyR4ZvqnrmKMiAsSMSpO8fFTogmc8wcaMZ%2BbjRx2v7xOK190TrXrl%2F9Q4WOAq4SsCjmn%2FxFOg1xwx%2FWKRepaZ%2FQ%2Buvy0Mn66cL9Xn96kZrb%2F9CU62cjH9R2%2F8hMciL4ThFZeQ9ggEogM37tQjLXB38n7x8IC34I5WL9RF3qj9Xr1XUuT9H%2FxQgiTpzP67%2FzFs56En726mu%2FurBIWnfNXq7J7f%2BrwUE3e7%2B7Vv1lZf6%2B%2FEFd%2B7tbBCa9nrv9HZ3J61JZDQ1dZ%2FhPAaQ%2BWG3Pl5f9dWDX3XlK93V%2FYokINjscaTMrdKVoEca%2Bmfdh8RjympQEjmp9eThhqr4fEbaSBpzNq7s3aaJ73v4vvFcnoTFJyV65VrLL%2BiVP6LL9Gg%2FIR6OX1i%2F7q%2F0J79Xv1i7RO7m9HgrwREPjXVeiyq%2B5yfP%2FTyVRoq8xHe8AAAAP2QZo6jqoFf6F5%2F1crm%2F7V2M%2F69Wv1auluX6xX6xVRff6u%2F5pe%2BT9dd9%2F9qnHV%2BvMicSqZeeuJmxtauesmTy%2BOpjqXdrorfxy9dMvfq5q%2FvFfI6thLpR%2Bvq%2BLV09%2FrV3LqG83tqqr%2FuCXRrHBL%2F1PXfgnfZ7VYmxv1A4CDiLP9l8FEgfjgmPdpz8EhH399UK7ohFa%2FU9Vq6LpZPVq1XK4PJjL3RPpf%2FX1MLfeX31JRekucd5grsdI%2Ffr13NRqv%2BrO%2B%2B%2B%2FwSEJ5Gddrqf0Wu8UvL7qwJd0X%2Brfr0nPNzdqd9eI3jxl2%2Fy9gxlb%2BJ%2BTte6T4zwpkoj9Wq%2BmXr6Vv16S5b9V1frqTxOa85Wpiqg2Fq%2Fk%2FXvterkkrq16rv1yluS68vm8v6%2BCzkoxzwjl17NWh1%2B8fjf9wxCCe68EO8qgwt%2BonMIxpMXMWAl9evSetfa65Vlyy%2BtVxK9%2BvZf%2F4jwtzRnhaPBfYodk9tS1rui1X4errdDTk8zB01MHWSIH7Pk9cK817pdolmxp%2B0%2FGhifrVek1Xu%2B5cXXpPXyTy5BAbH8FFBjALjB1GfctwW9t0mvwmSg4eSED6JD%2FwhHpz0yv8y%2F%2BCE4wbeux%2Bvfgkxw308hO%2FFkTS6P%2BVicIBXlh5sjiCtQeWT5%2FXrvqltEYu%2FwkWnKfnCV%2FiCzfcNKw2%2FxGOMhe8CJvPfa%2Fsnp99eCqf3epP7whmYhx2Ob94t9kk9Pd9eerbDDGMgf%2FPUoTGsv%2F5CDK1%2FuincXmy%2BrRfiTKOpjd6fx3GBCba7150qfwS90WXOu%2F0evyb3%2BCEjR43ipfcjtf0Wsv6%2BCPI3799gjtp0lqTJ%2FW9eiV7rYq1eb0WK%2FRmCJ5r%2F%2BHOGUWQ3BhAyLHr5fRUgrzGP%2F9C2Ij0R5PWKvWv1lEesX56w4pz%2F%2BUjDwxJj4IZv8vzYyY%2FylXjB9B%2FL3f5i83XgjINghPvXmGPP68ovk3deGSSKozRXJVD%2F%2BhNS7%2FP7rKS1ey%2F%2Btl%2FXzVXL4bINGXQKv44eP4IY6ID5WMuTrwQlyqNTWjXl9WFWpRLzmJUQkdypXqz9YrtCEgdQQ73avXVeEpkr%2BkruvDRZvbi%2BdLRDrT8M6HKyszDvDA%2FXnOxekn78QIuUM8yiMGPltN685VTtr%2F2SiLDJ4Iy49Y2fqz9ZVITd1axfr0vlNcwAAd%2BcrD255lFH4IqN%2BL9W%2FRMK9CX77u%2B6L%2F617sYa16sr17vtZ5Lr1qUv9r16IwJf67vyeOyiu1corvs9f2y6%2FLS32Tqz%2BsH5N7m4vXv3JZC5e78Rlpz5p%2Bu91ksNZTF94XbkfdNht9Xu6CL613J6NVam3uW%2B5Jb2Jluiev%2FVxHotTeQ27KAAAAGOUGaOw7KBX%2BhbchPV32td7f%2F7xH%2Btd1akuCH%2F%2F9df5Pz%2F%2F9Vw%2Bu9X9%2Frr7%2BTpe%2FpWH1rvrWrr%2FV5PWv1y%2FUyV6vchHhHrV0S5JhHWEXjv132i1J2r475pfrk9kWVeuIql%2FXUvrBWEZLsiGvhGeqk8YN8ZOBUn9XflrtfVirV69e%2FXv17vHcY36vQSXt0X%2Fqy%2FVv65ZeleSdarzE3d3%2BXxpMrwSFStZfrsVa9Vr0g5dY74Xd%2Br9rVUny%2FNLk%2FrFXrqT0MevQl6xBa9FqS7xqVwTCP2I%2BTtcu5%2FXv1i%2FWrtdcEf5CZ4JEJ9zfcTdYX%2FrlUsVxMXvdJ4RFy6yWimS%2FWoj1TA%2FFkpyJc%2FS%2BIqPjCQPyBA1r1rwQ7dt1ZdX38lZd5dfL98tevfr0nm2i9LqnwR354V%2Ba9%2FxUfxPMy3y%2Bu6kLOQb9wR73l%2BzPevJxmrJXUTUGdctfVSL1esv1quf7XuYnuusv%2FqXHrjA5%2BF8xEeBo6ZI7kBse0nqBYRMWifL%2F3jyMKyDi4L%2BhQgswYVWmEvT%2F%2BN2mxZz8iBSIjDqniin3eqKZgzH%2FBCfOxznf4c2KG6G3YQdwr%2FwRkHAQH%2Be9Qny0QFn%2F5Ywzp6aeuJK6Xs3Xiic%2FdWg1%2FRe4V7ri63Xq4jn5%2Fia7WLXJXxHRXxVeCQiOG%2FRNl9e8FEXNStNEMAqdvvDRZQgxgH3vw3DwufkvRiZ%2FHHT09mJh0bsgfyb07%2BxNtgxV6tMa8NapMUVMX956fRe5f2QdTH%2FkyJIckQkCEWi5Scter1cnq395N%2BMMToabtTY3qG1IpU0sBu4n89jDKv8ZCZhWjCCql75evHOzJjYGAoD4%2FTrSo1hgiXgXwTTl4FXt8xcZQv4mMoGmdk2Uj%2B%2BxU3D0Lh8Zg7V%2FgkxKY%2Ffl3vXqvjVr6%2Fmu%2F8ElOnbd0r9rLnXqku%2F17r565V7xOuWy%2F%2F2X9exRHVc3uEz7UwKhbEbsdLw%2FJ7BAMXqUo7c9gcv31gmMUPl5Q3xLCdBrL9d8vvVfzTsT%2F3BGLe%2FvdGb8XWnCd0v%2FJHMcL82UQELMm%2BJnnk4n2pV3q%2BrSF3uCDsWUh%2FZyfe9WMtzccOX3XndLQJ4e0v3v8ubmx0L%2BqL9aeCvG5Wz%2FGhlxpMaXsb%2FlhxTPP6%2BGEZ9fFggg7%2BDXpy%2B9Hel1i%2B5fXxpNtET%2FR%2Bp64rmRMhkTtH%2FjiQ05Jt%2F5bRCfws09v%2FMeCJ5P8%2FwvD8IG3eb7r8aRGvnOcjj%2BGk6ncI1dcvy16PVa%2BuX%2F4X5Vv%2ByVXvXaQjwv8O2BiIGI1RL6tQwNe2CLhuLUa4ww%2BCOdiH4sh9l%2FXwXTdgYDHkkKvj3HM8G5pPL%2FXYq4bWpo6ZHGYoCyghK9ZnVNx8MziAtDAh5Db9fGSs75BEFG6c6R39ppkHGgQ%2Fr5%2F2V5aN%2FwnNxwZfiGAYVO9cEHmpDSw9KiHvqHcC%2Bgv%2BP8bTBQwJfohhI%2F8E82IBwnr%2BMNYMEdTDFGWvoKegUF4kAhYs2vp6Vy8hzhvjOeqTxV4IqyqUE4S0X7Xp7R9XP361fvXQSIAmbsqbkHx8EJpEhL6ST4flrOkcibjPL7PGZSyKI6Xf5RUELw%2Fk%2FMbShfdLdeCSK5pNar1y%2FBLYysT9bFGW9WgvgyQBi8Z74ZU89WSsllYvtiT%2F9RhMMIuhvt29jw3a45Y6kI1dXiTIuBrvClL8l51W%2B6GAbjlIEuTCFJt%2F0Q4dx8EvT006fvwle6DjlXr7EloJsowiFe2R%2FfqOINHG1NM4YDecsSsfXpekra58EZbji7uKlg7WUvmLdJ1lrlodeXun9ihUn41HDhp%2Fjq2l%2B1mVDQzmiJf4mVvKw%2BVj8xb3%2BF974u6%2FJic3r%2FgivvX65af9%2FzGz43nQmMNq5%2BE975cpa7IzfT1f1qUViH3uzaqTdHl3pXWDT4s3FZWG%2Furvlm1y%2FfqFqMm5c6%2BND5UlZT%2Fidu3lzWuKvdin%2FfpHr7oFIoRf%2FsFxcsPJ3%2FC3c3Q9rGD%2BiD1w8qM2TzW6cVkznY9i4%2Bg%2BqXau8uP9VZ6396yW8%2Fn5Z%2FTv0J7nN4uvW8xf9dm3f7vbrUQU%2F8OcP3%2B63Ra%2FJVf6JKtUTD8GHHC63fX2zXryTw%2BVcq1W0l%2FoS4E%2Brg664i69EyrdcqX3gAABdJBmjuO6gV%2FoX19Ll0XjO1%2Bvdr3ctrl2p07q1yr17tS36%2B7qjK9fc6uOCn0Srd%2Fr3asSX9UOUX67q16a9EJ%2FdXXq7FK79eqpe0d%2BFq9Q7lW%2Bl6T%2Fkq1qS6wnvy72O9cM6T19T9H9VYXuojQCgNbg%2BAn%2Fyty5Pf1%2B12%2FRHXfPZPz%2F%2FXtX94Sl5W%2F%2B1f9e77XpLXruS1qW%2Fym40g3%2Bjs7kuS%2FpeoJLa1%2FjiZw5L%2B1ryYiXgV1d9LNJqJFYKVeKjsfUEZb37lrRqvueqa6tFqxS3favfE35ehv8JcvfhC39fWpfVpbV7taiLXUvq8lrLtYqL%2F7%2FhDLRzrxUXkUVutV61JauX61iln4teil6i%2FCrk%2BdWoK%2FL41i7xvc9%2BPoIJnBqhYbTI%2BbGUzmTi1hZQXU6s%2Fuz6ieqv4Lsi46mVFLtb71cTkVRlMVaDu1l%2Bvfqy7XpuIr16tVqie%2F%2FJ6vcouO%2B%2BPrqhyXV4YseNHBM%2FpGNkYduGIra4Q1GgR5qffu%2Bxs%2F3jSZ63p3P7KWcbeSg8MtaIgNJWjiR2%2F6nqOAhZ%2F7%2FH2bd93tX2InqwqfGQevfqO7osYBAt3QCR9Z91rx%2Fxf9W91qrov%2F8t14bwSvADSsoup1%2FvVwxgN%2FHlgdIt66nBp4%2FyzJRfYKyBndqfHkvBD5rBI%2Fb8%2FBquzI76NwJjfY2UMB1tFbHqhI4We3T%2Bwj1fHWYINzeUf5PX3%2FcEJ3f9k9d%2FBhd%2BBb%2FrmgxPDP2HCJm1sIEsw6iCdd%2B%2B%2Fx5MDqaXffsJb3Gkxh3qedYMvv%2BQsMxbg4DVmJmXnv9a7luvWpPLwTHl7iBZQWQlYl6%2F2mV%2FHgRG8oQDv%2BCUtrHlQICrr3Hc4YFPRYJbrA%2FedQCh5WIu7wSEhxxby9wW7xD5ri33uH8pmf5i2OuwTkcWOSxHKXgetMuH2mX%2FRTLH33e3dkenflJhhWipF67Luup%2FT%2BreeWIjZGrhSnVgVdBPlnQgCiEX9I%2Bi%2FZ5g2SUFpDYEVOAuPiHsMcxp8P0iHhPAU1KRH6r9MsT8c%2FzY5Am2wN%2BpZoMYGuAXyefq2GLjcrhXQaJscOFrzjLw6mv6vyen9%2Fm4%2BY5Pq18J%2BOVZ%2FSe5b%2FPr%2BHmFOlfWuisC4ry1dXLBH3l%2F%2FNd0R83k9%2F8JmuoRcOgMw%2F8dW2YTY8rIYxnSRCx3KVBwJ%2F49%2B%2Fzf5iaT09Dtk7a%2FKFx6c%2F9WPXT4otjmYvfL%2BCczz%2B3Br06on7648sO%2B1JErl0D5ofnr7bdbtSSiV%2FwV3butHdEcAAL6N2rkl%2FNXrlVy5KP3l3aI34IszBsL%2FfskvT7V33UXonv%2BpS5%2Fyky32kuHCytjVF%2Fg%2Fh3FGxox0coYEyWvwW73KxqOzgwW3ozsn1DScZnrVVkjdN9nd72r14QJGhoq1gzOPHHy5%2BEz06wSNgfP%2FJ96%2BCPeQfYbmte%2FX0vkrpLVFc917shnfXhqyQIn1%2BPLoviKe6CWVleK3t3Mv%2Fe7sUnr1Vnu%2FGdP9FsPhPOyi%2Bby%2F16ufaNh2E46YfnYQ4YDfJ%2FcEXHZOX4RlQBtrxgXEMDDDVLcgYD8VjwAjIcckHr8EFhhhZeR0RGkS8nQcePCyvr8vr6u3N%2FgijSDckwV5xK%2Fj54y%2Bidzr0xf1%2FtEc%2FV69WOXb5fCDigy%2Br%2F%2BrilcNaJa%2FbUiy8hZVFP4WzLmYUnBt%2F18sHQLL%2FX5Pn%2FryX1%2BIJdN7lLHpdbLGoRXJleCueCZWMrMDPpnoy0lL6xTejxV6J0nsRmuvLjIwU%2FKGShuAs9jZY7qPjI5M%2BMGAbl%2FReuWrWLv9XEv6%2BQzwynmQpf9fdrLKYShysbte%2F0aXd2j9drUnkNDq6z%2FRMQStRB2js6G7IeHZ8nnYT7wUaai2x1y%2FVv1evFZ1EdpVJmiUz4fvr0dOk7zmidj5plEkPkl%2Fc1P8m9yT9q4XojxF0Xx%2F%2F9CYO%2F17T13%2BzPctN0X%2FXJ3P16Lld91cRKYm7lub0d7uXVev1yrI57u%2F2IvIagAEuFJCMFAsGgwFjIFhuFCMFBsFBsFBEEQkIxKuSue%2FuydyRc5supWTEpxUNcD53%2FWv1L83on0E%2FVuL5oGU2vuh6i1jwL05%2Bvs640WPb%2BB6Ht5QsvxtMbba5PE%2BXeauiZfFg1H8fTh3ENKg8%2Fh8%2F5l6Zkgjm4JonSng8ZNOpF9kGbUmKUyoZSyQeeOvHSBjSKvUAwl4T2eUFxV%2F46fjqyKUD5npnrAy%2F5m2eX8sJjfuCR1uGkJqEdNP6lE9R58fL33LDhXCco1zSrVBajNli1N2KXiVax1yJS1UtYNGt7zo8k39TGwOAASoUjCgWEgmDQWLAmEoWEhSCgmChFCISCITCIjC3vrPjv56JvWStc3cKvCqJqFPYfnv6nNv8Lv0WuT8pPIKtms3s8YSiT1WbqPlnARfzAtvT76Y%2BD0Z48vq6SLBym7LHDPhl%2FZ5iCd2jRh%2BurhUMg5Dt1AHDw%2FyOpqK7fnh%2BDbaeVhq7qanYUskekB5i4b0sOGmMT6obYU3p%2FgfGz%2Fd7B%2BnsFcxw1MWcX0X9%2BaeMKA71zRvoRuHfp2YrqUqi0%2BUrb4i2JrDTBaUaRrWvsFMbj254ONeM12%2BCmmbL%2FWPFBwEuFJhIFQoFgwJgmFhQFgwJhQFhIVgmFQoNgqEQmEgiRuus1nv9czxaa5SusTXHO5fKr1BfAHr8I%2Fpv0tKppI0uqzfdL%2FCwx7v2%2BdHZ%2FbA9wlN5PF5CWhX30DGn%2B%2Bdn9%2BPO2upqDC9pjbsfDJ5QF8uc3xPV7%2FU%2F9nFgnhJ%2Fd2H9IDcL1cSVBsz17niZWwxsTBeQb%2FkDQ9v%2FD%2Fd%2FzOni6tTwSr116xAZnPZy1fVcJ38NGt0jb%2FSdl5bWcCmvDB6b6tVDVAXz4c%2BCkU4%2FXGS37%2F%2Be9N%2B7RJwbGqSCVmOClFHypcK0rxrCpbfRQ8umYOABKhSULCQbGgTCgaBULBQShQKiQJBQKhQYhUIkd3rnXO11tMkkkLuNmTL4pUdB799fOP%2Fno%2FTy8NdvttLla3w09wfDyp0foaS2Garf2e3bX%2FzTejS0CX46AZBYdOoEIkvk3mbeh7ejifv%2B41BA9tyDzUCB%2FsG73rfXwIiaVCM8alk1It2p%2BvrzZWCforvZUPXc1lJm3ChO%2BfsP5RMnFbjVsuLW16eHRVwuCJDlnI6yTBzO7rW%2FzlqPs5JYHge%2FT7zIyKbQ4QtaFosx9541Rh59tFciUmNpBwEwVJDuFhIFhQFhUGwwFAsQhoEwqEgoFRCdaTOe64psrz3NSoec3WqqpdSpOBw2vNFeD4mvPzT32fr705l%2FnaPiO%2BXr1q3TwKflyl7NOq5bQR27f4Lkgi4r14qlwkaS2%2FqyApi66cK%2Bc4AWycLoC1RM16wFiq7vvEzSc0hfRbk2RijYnsRmHGxD4lfeff0FW2PLlZoq0wpH0tfN4Wxq2hd66lv2RNW7WyjpFCe454aFzZ5HgqoJepzicU6WWS6XlERSTkQ1zBwBJpn%2BFSgs3RFS3zfGlZXGgCyFIdqgeI%2BUAbkx8vd2mjO%2FqsrIBQnFNtY0tH0EbipPDRZpJb4055hwTHvXLANAc1RZWTO8r9IdKC3B8NIOIvOPIVJM%2B5FbFTA%2BWmZ2O4%2B2QnrOct5MMxoOy65SS3xBl4gBzCjISNbALmoRWiQRXEPIzNpASkxI0BDNbrIBjaMblnM1E3tpnNzDFWc4b5bUYxt6%2FTyzx4PB%2B1cRW%2FwpzDAFoFWCBfibM8z%2Fv73RrLLuNHbhbtlqYEWLBiRR9mLHjGz6YpwigNRIKATcAUBN2D28tgxdA4ABJpn9zBowWcFjJUmW93rTdVOg%2BrPFrsI8a%2BI8LP13dx7tppFknqZMiJ8Elp15LzAD1BJ5st50Y82N7MTphIDie0JdYlWo%2Bgn2iFaeoUcieAfUbn0H7asi6%2BYVcKza0acsKFhab7%2Bkozu8pFAOgCSIY1rj6PIDRE6piEKRNKRGzjGYayFn1VSNpRBSIDHVILOdJ8YgEucDvACQWVnL3cYwT%2FNc546kCiZsaL6UEogSE%2BQihmvS4yXnJV%2F6Dp9DK8fWemxwnZrbYg14CsZAgA0aqePp93x%2FR29np69fH9CJqoMBcTrIXchz%2FQH%2F8Lxz7F4p6lQ2hs4yuE4AAARkQZo8DwoFfaEvfrF%2BrlWuv17url9YpLXv1ftSg7%2FWv1I36xdqS7Xu64%2F2%2F0XvCVcmX1clqon5%2F%2FonTevX6lSnpat2rjff56%2FjaD3ilf65fr1z1nGUElr%2Byx2lKe%2F1KORJP3%2FeNm%2F%2FJba36udhucxf3Poowk%2Bz8v53tri4qpWdrXXXrquou57UqSv%2F9EerR9frFy%2Fa2C9dSX2sOT1SAW1c6Im6WuX9Wd3a6lv9a27Xa1%2BrL9XP69WYS%2B3%2BpPVivWoj1aX1v%2ByVuI9Xk%2B%2BWIuI9FY36nrksxn9%2FrVF%2B%2FyEGEzxyX%2BtTSwr62cpO7nubfkM%2BleJ9Fqqoj112Q3HjyN9Fyq5bn9RXZfdfBhsN2tyBJdRocn%2FDhDJomVb4wkf89fnD6c8PlK09%2Fq%2F5KTBv%2BGeRvobl30FaL%2Fgm3oc4ZjaYeXwzd2ssMIga1jyetVlyV8U69d1rrxG%2FX4%2BDDmNEk%2B%2BUeHF0Ev%2FXvw1MK0mBkMdaNfj%2F%2FCumcz8YCBpb03lY2Jr%2FhrdKwGyrUCFOYY2CnDn8N8rFWQjZP%2FvXLd%2F5rv7%2FWvwnY3y5%2FhmVfdYZvkz78Fs37vfv1dN6tN6vVr0vojD5edKQIF%2Bj9J5yK4sv8pskP5b3v0XvxZJ0lFzSXorg%2FEdojEnovfq1%2BuV%2BjOfipk7WHIYLrwTTpJfsnQFBL5CyU17Ny%2F5xa8NJ5H%2FRmL80xtJGUEA%2FPX7EHEQw1KOJ4%2F8l14dodWy5uuMCcXDEuxQv%2BLsDTSRkhoyBJeXj5jflscNxd%2BTw0THloGtYgwD%2F4Iz7u%2BvwT240%2BMPRB2DI79iuGklh4ijWscx34crN%2BX2IZEpt7369Jfcy9eX9WrWi%2F94Rh5V3iC9I8QM%2Bd7G18N1jxw1QHGRoX%2F0bX5zqtV%2F4XxpMVQiJVjhVJibE4TQ%2F79ev8M7VWfGaf%2BtfhgkM95rjjXPpKyTHkEA%2FXmoWTPhPtmZxzdA7VxVHG4xnwlwHpn4JdIvxpDvN5WT7W%2F%2FKJWgn%2BiP%2Bvfq%2Fzdy%2BtSeCE271UteFyuhtDI0UaVxdTqZw%2By%2F5cJmxvskMKQ3NHf5YXZX95f%2B1BhvbWHEm61%2BOD4NggNKuG7abnYX6VXc14it7PT%2FISar%2B0NTh8EhNDV68EpiBmcICi5mINeoIqdPY%2FKV02Fl9fxN5WJ2ZmPwTUmM6Te7vJ616gjLeUxy5a9YLv1V%2F1qvJu9S7fECo6bu7a8oib6DJ4R9s%2FwRloMm%2BWpcs6AsEkdM6m4r%2FIWJ%2BpfL6qr7%2F%2FRstJKm5MTk%2FfWwSib3gmaj9fL8Iaj0%2BOZ68gwFlLlx6u93foQ%2F6E4dgj7QzSD8EV2tzJ5fX36%2Fq8nr1Wve%2F5DHt9WOyseWuPEe%2B%2F4uXu1XffLk8vp%2BxO92OT%2B56%2FDyGRmSfcV5feQMD8tvX%2BS0ZVmX%2BS%2B7avLPdhDP5%2FKxtUu0V54%2B777taj3V%2FgnJpvP9h89fDLqNgw93aEwfrVbonQl612vfouUmI3LXqUGTz%2F4rNXKvQqqgAAALSQZo8jyoFfKhddS9%2Bvv16%2FWaT179e%2FXvVT1X7r36tcPr36t0RwMP69k8v66%2F%2B%2Bpe%2Bu18da%2B%2B%2Bpev5tpevlq6yVbjQ3x32v4hNFLL1134Q6h3BD3RRV69J6t3LFSt3%2BvV9evdELqvXpxS%2BWCLKoYe7iwlfL6HfZ6%2FIoTi%2BCGw3ourcXOEAUWgTAJI6J6%2Bv%2Ffq36udr9VapODNZVzY5XyZfWvR%2FtWKtWK5fpWPpek5Yh%2BvOrucZbdg%2BX5xAb078ldJQruYmqlck9W91epa42a69foj%2B1MF1cT2vfq12rbPrtZVqtVfzL3f69E8bd369iurVquW5OVXx25d2su%2B4u%2F1b9a7mu%2BX7XxdqdJPWCT1r9WK9a%2FWu5%2FZGBlUyDB3%2Btfr1Zd9%2FdYR1ycP%2FPeCEJ%2F3tL361fq8UT5%2F6tYf6vXnr9IlNL%2Bu11XNLaLLX%2FxX0tScR8R80nomUlotfoj3fZuwZ7fr361%2FJavH%2BsuwkWUi%2Fnl%2BCHnYkq8L92nL9UVV9J%2F85FRle8P%2FkLPP%2BepsPD9%2BS6PXoju7xu8J%2BCO34MQvJdRN2HM4OQDrVEhFnX%2Fz18iggMY3BteTqmb33c19yc%2B%2F6vterD4Rq%2B7wjRYpPDJA6lOQFA9fGLnbrzkX2xkg3C5PRZTeru3vSIK5%2FXpfR8vzEvZv1y%2FJfKiXrKr%2FNMGkBCovylff6MyM%2BsbvEYi0djuT2aQY2yeuv0VwJv8hMbETfyT02BrJvNvGibuvIeem%2FQiquW7u77R4u6V5jaof0WpMJiURqgyJ1COj5cExPD%2FckJa5TJ9CMtVZ6nUX%2BvOdfw0knOy5IfzXQO69Ysn5%2Fnr5Uxo9aSsxrG7GvQlzv9Gcnvd6E5fqlaurXpL7yfkn8vsj06sEl33GwRbt9ZPb%2FDXdtfRJonu%2F9EgjfRWGwQ6dNor0fVk9P973LZhT7nupUJy55PQjoz0eqvtW7ifMV9xdvu5IAAASxQZo9D0oFf6Fxdq532vfqx%2BsXdevv1bn7q11wS%2FXX3%2F8n610%3D&media_id=1254206535166763008&segment_index=36" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:14 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:14 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_RJ1HqzciWxnQE3UVX\/qwlg==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:14 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113431585987; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:14 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "b42018183e0f571868fea227c91736a0", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19916", - "x-rate-limit-reset": "1587864356", - "x-response-time": "32", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00a68c7200021694", - "x-tsa-request-body-time": "97", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"bim5zzZc2t84q%2B9ZHIw5FcEpz6I%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=L%2BrO1%2B%2FW3h%2F3%2BuvJ7Vhq7Vj7WP0Yr9detS%2BsVXN%2FBH4T%2BLLptr5fCfgn8J%2F8UqX1iq6tcvj6te5FV%2FhlWd%2FrFfN%2Bsv1qTJWK1v9%2Fqz89YyT2v1Hlyhp9eexMjpP%2Bz19kp4yS%2BJWu8UTeku%2FP7GVfa93V1qvVVJqrfq1eiRSe%2B0aL89fNA76JT1dVXfkospr%2FXsUs%2Fr11K1evdrKvRnDd%2FjPoXXE9Ki93IO8%2Ffpdxvr1YvJ5fPyO%2F4n2l6Sde%2FXpLWLkJria4uMpYi%2FN517tYr9SpfP3fL1d9Er3RHd%2BrVquVeGNNGjfSVFHbkKNnhlSr1ETF3QHcZCt%2FrVv17Xq9T1f8y9fa91r369Xasv1q6dWDte%2FWr1PXhxE9f3NtOYx%2BXoZwAA%2FJcgg%2BwRTT6sSX3Xgh6Gdr9iN38rD1WVd9rFXrB89UT2rfr369Jas7uwWdpZA%2Bb%2FdYPwnnqlAwQsxz9zWwXrWRnxRuNR5TMe%2FIJlVSKNmJKzDdI%2B48RPS%2Bbk%2F69Ey8692vfN8tUZJ6LUviyak3BI9j%2BTNqL%2BcuWPG3T%2BX%2FXDUgvD6Lab%2FA9Ol8BL81DBb%2BEyeZKyur0vt9tP2isfiiSjJjRxpMaOX1%2FRa%2FEbo0OO1fvenWvEer1I0vrH%2FJdLL4eNKxfEfweg4SNvy6kYS%2FNI8v4JrAMKRP9lNPBhCmnfmmETpYyYXo9U%2FxJBvJ6XdFvfrXrUnotb9SkpyJflxfpi5fLl%2BSE%2F1qIsxAgwUixOXYXZfC8ep9zCupDEaHn%2F9lOcIBnNP8Fxg%2B5NIkwxDklrutfzFJnfhwg%2FTX01rJD712Ly0f6M46hDu7nDVCRO7%2FE7bRRhj6YOEPJ9qu4K9Or74eblAN%2Fwlei8nN%2Ffc1yWinT8ERNJLkq7svxONNxnYdDDm4%2BaCNpca6L7IQLRCenJ7feUuF9UrzHrHEx8YbMwnoIZMM%2Bzx6muMPAAD8sdGgz0b2WXya8hJeTbXmOc2kVj%2BEeYyUamFIyD2%2FY%2F1CBoLMRJVSYA9yDQyQ82Zf13MeGZL%2F8TjkV%2BgdtP56%2FioaBE2er%2FXognr%2Btl%2FycQSjkx3aZCGIkKTT2CupHJ7w1J9z3BXv%2Bi3qwnY76N3r1BDNGkgrBeCEksOVeEuwx4cjYRMHB%2Fw7a0NyhgUHU8bHRRU1mEBHRYf%2FiukG4lkyliAy8F3CnG4jXiDadDbbOsOxm5lOCI6auWeqeuGqFGELWMXv68olLHBhvTn9WfriSWhDD6sV64fiZCFdK%2F5Jktqr7rX8F2M3dZP33dCskAy7Gai%2Fm%2F6uzi10hok%2Fv8EQiMIOw%2BPkB%2FdNwgS7J5lMmewnvDTvF77rwTU2sDNNSmO9VZObOXsEZcbIP3P3N6LF2p0lXeYZBE0P6yxBuvMdPf5t1u9%2BtX33k9v%2BvNyU%2FeXP6sWuv7RevzGdn7rQn9HqsTl8hhxtfDv3kgx17%2FNpX3VqzvXdHrM9lf7FzsWsPSZop%2BSPRHxN37mZp%2ForeJycI%2FopC9e69cpiev%2F%2BCIQ7b8ty9eIKT%2BfL%2FLSvJfdl%2FX6uK9XjPWWX1%2F%2FRWV6yjYAAAALVQZo9j2oFff0hbH692tfakT9Xu%2B1q%2FWquX1d%2BrlX%2Btn65Xqsv1er%2BJUie65f%2Fq9UX8%2F65Vy99KtSeteq5SeCTlx9drXazhk8f8N9N8%2F1TRs947SLXa1V9Eq%2F6wVV1q%2BKJSVrFXF9S3Vfa1XL%2Brn69L4V2qdaWvyTf%2BC7u1dHcU6gktp8XZ6d%2Fx%2FT4ndKrPk8l%2FkvJ%2Bf9%2F1fEyXLatXSuYhT0JdWvSX%2BjOCPUEm7%2BJqvvqR4bvtX%2FVv4n1cvlq1b9ZVaxfrFV3y%2Fq8hPr%2FqftXqvHdKGqTl%2BlaEi%2F%2F16lT9ddqzXsT1dfPXq75a0p%2FXr9SJ6q0Zlrq77Wp7r1aQnz%2F16uOfV1LfmIdI%2F9cyS%2Fi%2F1r9aq%2BEOI7kZ93XFxd936v098nELeJNV99V8leuVdI9cSbqBR4bXPzCtNX6Ep%2F0SP2bttm9Xmvhu%2BX2%2FkWXz0T25uSK9aqwRF4wYYrwQ7VtwT3583%2BCEj319HLHfPC8t8vd3W%2FV4mveXE3XlEXr8xbHMxuS4nEV6%2BKy%2F9cn%2BXdrFXhDQCOzFob5%2F2Xm7Ab8STNJBFh5fVn6F1F3Xo3frUgrrJ9b9atPgkJHjh4pfDZ1nnX5hcfF3ksu3MlfjDUU0BiT48Y2pbuwDk%2Bf%2B9uSE5fR%2BvxddLNRpX3fhmxPOwpWA8l%2FSq1oh%2F3q%2F8tp9esvxe7%2BVg3j45E3NEMhBa%2BJHQ4BcGmCn9EYLz1%2BPJj%2FVj9CcqxH9GbvxNe8V%2FVy7lvJ5b%2FfgktY2D5lV6F6sl9%2Bzb3d%2Frr9XDvuvEXPTfdbq%2BotUXzVEqXe43yCBscmpMfybI5bq5PQl5PLd%2Fcl99q%2Fr38X0q1%2BvXa9forS%2Bcyjp9C2v%2BevzjkdNt3q9N8Elt%2FDuL8l3%2Fl7uS5qpLl8K72Z8wFXyJWV14ujo0r2fz3%2FDVjayeiuSYispfBCYv%2Ftb9euVf8uKfFISn1Vu59VqvXCW1wiMRrEZYABKNSQTBQThYkDYLhgNCULhYLhgKhYKDYKDYRBEJDEJhXW3Ob%2Bt7q6qb4q5l65u8zrkzgy70OKfsd9XR9Aux9N3n%2BGrpT%2Bu9RIgfiWWs%2FEp%2FiXur1e98KDWtJcfKkuZ8phLsKAXuX1Po46fDU7b6Ta6idHz%2FUVG6YOo%2BMKjB8zhm1RkQPU6UT1B6grXJGK9m6zoJtByHvnG7ZrtGRIQa6HXWx9xHPlZO2miTGOL%2BHc%2FHQrUX%2FMM7yucRMytE3RoBNFOweBoqO97E4my5kYkyT3j0yY5JgCfNJxznbETfvkXM8TFMWVe8sqBXwtsHABHhSQJhQKhQLCgTHoLEcKLUQlML5rU5rnjetypO%2BGqq5mqm9Zl1clScDW%2F8D9P4tRJu1Jh7%2BieH3fXhURdt%2B%2FnXrsx9c0%2Fr6qolt6IKcu92PsmDvoXhoeu71JQcPbsnc0Y%2F1%2BY3T3%2FLuU56MjyT8vZDwbnNII2MUTxVNbS6DzPLEd27ErM0vJ8duS7Eu2x%2FKkLWdg984Zv7ZX%2BOvcSoP7lNe8LygfYdrfyeuvRPfI5wEdGEOhYOkJ3zs8e9LsnFSNb7BrngrYmxUsIPgT2wcBKhSMShQTCgTCgLEgNBgLBUMhQTBQKhQSiYKjERBERhZGt54%2FWvGKgaVLpdZrdRNUX0Pzv8H4v%2FLiY7ru5PpaPiT3%2Fs9tqcLffDTv%2F5n63%2BJ4enJdmrkbBg%2Fj6QqdOClFDhxAvv%2BmtC0Zf7Z8tGGr%2Bo76zoK%2Fg8N6Wz3j%2F4mYEsEG919ipF%2Bbx3mnsZhTr%2B%2Fc3bGYil13JhHr1kU7v%2BBvSxZ%2Fp18q3W3ZYnHZeOevd7cOVARy1FRMRLzM4n3uZcY58VLjPlFejxmyPKK%2BZX2FT4QkR1E7WeyWJb%2B1IWxB3qhck7OEd9l4qYWSkkc%2FciDgASAUkCoWCoUCxoCwoCwaEwkC4WChFCgnCglEISCJE5pzfv8cfmVK43rLNYl1kZUu6ScDlvubTfPXMd5fnf6t54%2Bfyxj66M%2BDtO7P0dnk91NE3OabD5UVHoGPJfMrQDJxOi%2F3vcW61YHH5T9%2Fwvb6jv13iD8iRVfoqej%2FvEUW%2Flfm8edH4fDVu9nfUILgTh7stmnVyiqvTUGiYJl4bV41vfvJGVVDKdzbHL72a5BHdtXRdzODENv9od5f9rleo8ta6edhzR9xxwPlFVB4skYeruFgUGEnhSd4xSte98i817XTvVDy3BwBIhSQphQLHQLBkNBYbhYKCMKDUSCUQmd3Ws8c3eJe5z0l7uUvKvKrSySxxD%2FXqvjOtv1%2Fx7fnJsr55X8M6%2FU3UtG%2Fj71kD9X%2F%2BPbooZly%2F5H%2BmqBFcr0jc%2BNGfrARF4OjiDD%2BbhZooa241Mb9NDV0oJrDvR%2B5lP23nP8CFF239Gr%2BalPiZF1czWzxSx7umWm1FeuNvlznNTiuRz1S8d9R%2Bu7yjHRco%2F%2BPW%2FQd5%2BIt5Wj8f2RXz9cLiEsWrobvrtorSzjnTmv5rI47JZ3WseFZozvOnAZod7E%2B8MYOASgUjCgWCg2DAWCgWDA2FQmEgWChWCg2CgVEQhIycerzx549L3V71LqKQYVa0jQ%2FM665po%2FUH7eN4uh5vN8RXn31SoUs3OgZMLSvB1%2FDrst7dgmIhvxf6w4CK8ZE5FpYNBu93oeD%2BYDfTmSBGsr1PoGipeIbgiHgemla32lP%2F%2Br9udmfWbGf5vWZ8UoAEG1VKSov6iM9%2Bp71q%2B9pA35T7%2Fq7gx44B73Bhq6JBg4rB%2BXG9ALjxNgH81%2FEeyXw8ez4ukFr7Cu%2BbJdhuYsCJbDqjIHstKGXCPSJe5PsxUx4VELK7eQOAR4UjChFCw0CwUCwnCwYDYXCwUCwUEwUCwUEYUEoiCISCISCITC9%2Bu9Zz3548bXVa35FVNZUyqa1SR7D8xor4B%2BZ%2F%2BvyD7Oft6s%2FxErc8f%2BP%2FTtF9fTlz52a%2BHcrMONkX9df%2FW1AGAaIuqmHF79UOYuXIfB4J1%2FNFaAH%2FvS%2FvgnGaiMO8ZzfqoO8wLQvV0e2xcATsZTSdbSI%2BvNv3e51OSY2z7nZiePgeBxaH6nW7MQO8zsLfV%2FGp7XyamY7T94rHPKOF9Prk3LqXx9T6HAAaPmcVQAwcnBSaXzL4IUWzPqFj%2FaKEIQq35Gm06fU0AcAAAJ7QZo%2BD4oFfdXYjxHXoT0l%2FrL5vnWKuTq7%2F7r1ftXsnxX%2F6xX6ufotfq1F%2F%2F%2Bark9E6W6wtr1lS4vXW%2F%2BnXv1Sdl8tkFL0XV9zXfqzov9av1l2uXct2Tx%2F8n7%2FzCvFYr0TE%2BtXRF830ry32ur5TiiqtT6fTGi6TY9yq4n3Qt%2FEZOlf9Ut0XJLNXXrUlqxVrXc0WrH6uk4jHLYl9ar1Y7%2FWor1q%2FXL9av1q%2FV1er%2Bqu%2FV5Z%2F1cq1cu1vJclzesprk9e569XrQurqrhFWlv9WIn16X1i7%2BeXdbu1qt1dVq12tSWtdE169dhvmnVApTwyT%2FEXctVyivtYP1eW16vWrYsVfueS5fXKvVx9Gr9aq5LnurR4vFeur159%2BeuiDUlPk89fOdLvu%2FPTB6DG8tN%2BSdjNa89cb79%2BtVXJ69Imb77Vqn7muvBJvfvz14q%2F3fqx%2Brfgjs3Ro3Mv6%2FJ66r4i16bSXKT0SX4bKsPyd2rcO2Z%2Brk8t3Z34sum76SuvOIXUdEz7%2BI9FyiPVu68EOk0rC133XmLblj84hfQKpH%2FOVyzZDw2PzX%2Bjd3%2BrTei9MKV169%2Bjunv9E9l%2Fr0Tv0Xq9e%2FKTZOrl9eqzie%2BSqs5LviUbpPRXS%2BjQS3PaFxhtGbsJUPXlz5CZa99hktBydfG7u5T3%2BJngZYy2evJe3%2FJr1alrorV69L6FOq68p2Boc0C2fBh7bKf%2F0SK7%2FIJ2zJfoRF%2BsU9oTXf5DPfuieX%2F3L6OVu5PRNfgiq9DerWVeevEKT914ISZ%2FevXUTL%2Bi5%2F2R39yehOp8mLusRWKvU1P6ERTXXo9fr011d%2Buq9FZIX%2F%2Bf1Y%2FKa9%2FsimNfz18%2Bt8AAAAJJQZo%2Bj6oFcnG%2F%2F1aE1z169%2Brd1a13V9rr4la6v%2F%2F%2F%2FtX72799%2Frc6lTr%2FAQgSfPJzY5ffr0X6uq1i7WLTLN83zO7%2B1dLas%2BTJ7%2F9r9U58I1UuUnrqvXphXXgv27fL8d2df6iLhG5Kn8aQEsEXjsTB%2BWNg4LTX%2Bs36vJe%2F4mqT1r9X77r1qS5LBGS92v0Vxr7muXnqdX%2FW%2F61%2BtTX561ZPbr%2F1qrUyUX%2F1RnBL6ZHirilrtXr1cluqWr%2FV4Qu7vdWTV8v6v3%2Buoz11frXa1PVRff%2FtXLnm0JXDkpPWv1ruS1y%2FXr9Yq9EqS0V%2B%2B%2Fkr1qvVLWn8tWsoq5%2FW5XokEvopq6SuSxXXLdrX61e6xSJXBf3dw3Tjr8xIbtaNPwgTk5l%2FMv%2For15sgXnDAq7J9%2Bv%2BeqAx6Vhf9RdSevV2rfIvX6v%2Br%2FrldqyKsmS%2F4IbSfBJ65V5CTZMGBJaPlf%2FLV%2BStV698lSxHlMZji%2FIW9916wxZWevnhfHZcOl1SZPky6qysfr1y77ivRe%2FQhzueeX0XpPX03q8Z66q689fbPT3f3cTdeCTu5wV5zLeNFf1fZrxsQm7R9fug3Y5fRspfCBTRmNZ0VjHm7fL9HInqiMSUV3q%2BT1giPROnuk%2FV2%2FX8h3fJpIzkt1aE1Uv6xSXV36I5d5PT%2FJzERzyspps0Tz1%2By%2F7815PT65PQlyIu%2FRndy%2BiuEuvtEe9%2FX8tme8tr1X%2BsqL%2F11qhPd16xV61%2Bsoj0I6%2FR8L9Fg7lfvrdferlfpK13XrFfrlE3F3JAAAACeUGaPw%2FKBXXEoW59f%2F99%2F%2F%2FfTd167nclE9zX%2BspLWprq%2B%2BjKrWvmv16W6plLfS5VaJ1Wiyq1c77x2XCp%2BsU%2F9EXa6rkr11%2Brl%2BuX69V%2FqwJ4jjUtwLd2mv5yLKxf8%2BOW5z1ddLBQ6VvMFh%2F%2BsXRC98laJd993Pfq4NZOfP1SPL3xauN9%2FEfq1dL1eru1atfkq6V%2F6vNder1f690TPOqWuJl43HeUT3EaNLdepmrVY6rVu%2FLVpR3%2Br1yvpa%2FVvmk9XJbr1fv9em9dT4%2F%2BrGK%2Fpeu5bmovs5FzzNDxVFxd%2FEV69dNPcly%2BTSaaF%2BrXiK94Qyaq6f1d3%2Bi9L6N3d2i9LOp6777oU%2F6yov%2FTxPrl%2BCOnNlw%2FJG9%2Bz3dvNj%2F1qvV57qeO9a%2FNacOpCfxOtbVX4Iuam5T11qvWu%2Fz8PonG4iAkO8vLk9a9u%2FWpLluL9Fcy%2F%2BphF377%2FCfRFuzICDUrXUT6xforVas%2FRcpbktGavRXIi682CJ4z9%2Fd4nP61%2BrX6NUR4KMsPKxcfRX%2FBES1MxLtF1%2Beup4%2F9arwmY38sChgOvLjn%2Fv9elv9FeIFLL69%2B7lzXk8Nzzt15fLnzXva1xHd6yqflnQHj%2FRH%2FMNfS%2BjP2CPmvgwvzaG9eGd39PFBsaXu%2B1aa0V6vuf0aKrlurRa5QR%2BfXU9f8QRGQg7ySX8kZi%2FfmkH7%2Fgk1q35j3Y693au7l9a1rJ5K5a1ZVef0TWX1%2F7Pg%2BixEMBRPf%2BiEl%2FUv7ye8ubL%2Fl%2BvfvJ8%2F6v%2BivcFtXfo%2BX567M3%2FUuufJ%2BfwhE%2BhTP0cpXfaKdPVcv1dNZBW6J6oS9L%2FFd%2Br47al112vRdr1erxGIyQAAAA4hBmj%2BP6gV1ctV3JaF1P6sV61JasPqxL69FX%2BsVetdq9er1qbe78vd%2BhP6Jl2bDd0n77q6tFeuLr1r9Xr1ftX%2FWK77l9Xscuu6J5f63%2FPU8Bol%2F%2FsnDyLveobKSFqp0LaDa%2FuiPPPV16K%2BKxXtXTX8TNSq%2FdehFTt38vtHa7q6v9Xl9Xu6pZJHuQnqxRNeJFXvemvQmf8hHfU6PO%2FWv1lwazdLqM9arWvXr9Yv179kvVei1d8EderJqv16vXu1bqx392vSX7rlXStfJvX9UXrtiJl4HbTCy8ci%2B7k9fHxN1q9Vq75ZOleXLr1Y%2FVjRyfICzx2O5oL3w1rlJeX93IGBa34T3U%2Fsccq%2B6M7bGxXUXe69XouUsqmruT1e%2FV7vfr%2BQjaaff6K9vXrwQWCHRxvTQK2UlQMxBpsY1Ka%2Fl%2F1wQ4DQMe89p2%2FV%2F1l%2Bur9ZSWtfq%2Fyy6r0vlxoZKxB8JkVLDWvuB5f%2B8eTjJh2J9YI4YFwg%2B%2Fyic0a8VsOeEPW%2FqjHwgTHqu5Em%2F4RcKirEBXljbo0imb9cvzZ%2FP9ybop2kuvV7ubUWTCybKsJP4%2Fm1k6L6%2Bu9fUqisTyJ%2Bb8n999eK4KVeZmmrBCWan1WQkdBQrDCv8R2Y%2B0Pf1xHr0vosU3jDM8Grul8%2F46Jj%2FBDWMgk7hLX9%2BzFyeS%2FzXy47OVaY1L%2F%2BCMktKE%2F56hui4f9%2FrqEbV%2B2TjxhLvKVqRR%2BzH9AbHfr7ieXuMzn2X1%2FMeZQh0SWuYx%2FP%2B0NrSuxF7vzd3FbotVdCvvL8I6%2F6NUnrq7777%2FKUdhHoJciFM09mKf%2Frdgjl9mz1%2BYTGhHz8JkPnbtxHrVX3J6Euk8QKm%2Bh1ov3%2F%2BrLJ6f7O3bqzyt88LsOnr8OGjZgyXXh1JX%2Bwzsj%2FX9CP45f18dspmUMkM0N2XxEtEfoByf4jTCXB1trEZyvUy%2Bv%2F5JmOvQvLy%2B4i4n2IMzalv7rwRRulVdn6FxUX%2F1rxQxORnuj%2BzuxvXiZNMM5WKHU9Wa75%2FRXrue5PC1x8aP4rl8f04C%2FRIqL7%2B9M1JhlcL%2FVM%2Bv4RNjxYWjMuagh%2F%2BCErCrCPyiPMd3169VqarF6ufyGp3%2BbP9X%2BbNszDfeK3hpTK2nyi7GO4%2Bv%2BQkmfLk3%2FNd9eUt3k8TzsNx%2FPiL%2FQlL3V%2FrKdest5PUMf%2B63ryiiYzyLiX7m9Ca7u%2Fmk5PLluriZ%2F%2FyCuMrASIUlCwUCwVEwkCx4DYVCgnCwUCwVCg1CwVCgTCQRCYRIzeqfaTNYmTd61i6zjKVMcQR0HQerQfBPkdB%2Bn2J%2F79ixdq1NjV7Wks%2BUmXBm%2BGFBaNcVXaCsO9UwCoBPifReNr6L%2BX%2B6%2B589VrcXx%2FPZ%2BgGtwhr7j0nckhs9vTKZgFHPgtHe6uB9c8aqnEdPPrHH8e%2BE%2FW%2BHMzEHh2qeBxb8Z13x6HACFD7HuEJ2WkVf1dO%2Bndeeo29u4HiP3azufZn%2Fh%2F2D7LdBTZVQHlhs4q4fzdyOmgtpasaKuDfNXS0DuVo7o%2BcHAEmFJgoWAsiBWFhwFhOFhqFgqFAsFQkEQkESPEL9Vrn68Uq98Soo1OZQvVVdXwD0%2FT%2FyXwf4hvgNNZ9G99nj7Fb7bbu%2FtwzPww%2Fq%2B23q78jTMHk5eKP%2FDk0BwY1pBPrts2JaN02fFAsaA44ekYcw9Om8udprZN3EaT35vH%2BBjr8s2C3UAQvkBcRJ0u2gImjQUzHSrgCYM%2FW7XznHo598CpACioCPh5twkctfYVwVxvq96e7tWJkX%2F8%2BrcY8XuAraSUeiVCFrUAD0M%2B%2FtmoWlcmWg%2FgpMcla1tPXraRxY4gMK0a%2BWzcvtjOloXY60tr3wBwBIhSQjBQLhgLHgNBsLBQTBQSiQLEUZBEJBMIjd7XfjniqvmFWtS6u90VLuoXocw3j9hp0eepZ9bj0W%2BWnf0qnr975nZxby%2Fr0DH1LrcDZ90uOB%2FG7Nbphh0XtN%2BJS7LuXnf9lnMrBpZtSYY%2Fwt9%2BC%2FKdVx58q7tV%2Fw6jpl1trj5nBRf0WNpysACIUOxD8MIFmaxeJcwGAacIkoJCavcBI7VEYSCdewJxpNQL7Ke6vhza745zD%2B3biuzfztxLT4VvqkrewqNcRjA%2Bv50coIDu%2FZBBJu5rz2SxG63C4t7JJN8uQOAEqFJBGFAsFAuGAsSBMKgoJgoFgoFgoJQoJgoFgqISEERGazJ8%2Baqpib4WyXJmFROJkToaK%2F%2FH%2BDQZ6fy99xO78ceclRee%2FO%2Fv6RcDtfrbcbX%2FvxGq%2FGXuILi92%2F7dj37735vz7%2BcRNm3Xrv2iy5CGhi6Dn8r%2Ft1eaaBcHpC3%2FPJ%2FQel6Oh8kDz7IPu4y6YmvsvHS8pndQn8x7%2BmPyIefdiaYQl37xRCLYc%2B4HPwsV%2FdmAAllUp6ecTNQ9812dcPCezisUh8rn0m%2BViq0x4rIyu%2Fat3unRrraMprxkxS3MnWoEbvpecs1rJemAOASYUmCYkGxoCwYCwaDYWIgWEoUGwUCwUC4SCJnj49Tc56mc3WXmpdIrWYm5Joq5YHj%2Bv%2FM6P%2BB%2F9s%2BuTr99EbZKR%2FO%2Buz63xPc3z909vczYqLUdd8wpP7pygA724x7rx6%2BNvdpJEcqNxBbLHfU14IMG%2FmeKI6hByLtNQFBTxPRHDp2dvakhlf3bWHY0vb6VH39l4rsX%2B4DBNben9xcK1EDfz3toN1mDzfQj%2BbfiqWlqoQbyYbq6LKG7EBkdBH8X4viYwmtDcw6D4WyJVWPSEGWYq4XeGFLRzlO7idKY8lNxKv6NSMUtiyM%2BOgHABLhSYSFgJhQLBgLDQNCYSBcLEQTBgLDQKhEJBEJBETcvXLx1TF1e61JKVGFFeYqTgW6Ok36XTfL%2Fm%2F5LD3v4v%2Fb3VHMlA919tk3u6dUlfuxafU34pMyee5fo3IE1gT8oCnIbdRZuE37DW89xOOXM3cDfAZza5iRHHSkpA0QfgkleW8BAZwUmjJPwXTfMPqbgu59gBJOUG1kjTKDt1oAOCTfcoQClT3yNjA4JrgkaqO6UYO4JwTMZEs6QN9%2BgggSyIYpgFDouymPG0D59TzfP6Ury9PBLODUExhIZNEzQUgkGr1PmshAeQqPNInHnmI232sDgBLhSQqhYMBYLhYaCYNBsLhMKBYKCUKBYKCULBQTCUKBEi8s579szJdTXr2pmqqUqbVepEnA%2FZ%2FP%2FoevdP%2Bovwezf7kdnk%2FaHOrRT76cef6n1u3%2FPC%2B1ABV6N7X3s8ioVk96qKnpfrvzLHlf%2FY%2FNitnKEvOxff9ZVBhWyZnPth5c5fTNlzV1211BIAXpRrZ1T89iMJtG%2FtF8k6L2P3JVpfSV57fLfV%2Fr4SGbBMSWvWBjmevoGrTvFuB8r9K9vofhv20Xv%2BBs5HzAlaoDCyf111t7FgigTEjEHRfy1ZuYkQNPXeJH84lHO22lmlhKQlg3nclPzg4AAAAgJBmkAQCgVxFSE9G2rzSEd%2F%2F%2Fq432veI%2FxHrVz%2Fq0X6xV0rX8nq%2FderdWO%2FS%2BrHa1XELLtWK9X7r1b9Wu%2F1wry%2Bej9WK%2B6Juqr%2FVyW%2B5dLuvPX3HwVebwQ460dzuXvx3vT%2Fa1jv1euaS65VcriIm%2F175rtXD3XZ33%2BvVySevXyz2vTY3Ewr%2Brr51Y%2BJrkkur5aFL%2BtS3VNLc15PP%2Fkprtcu1c76LWrgQ6kST174mSJXqubiV6v7k%2Bsm6WvXupemv5l6rkurktEaS5KfuuVF7vtX7kL%2F%2FVr369fq0l364V6wSeIo4w19mNtfr4H%2Fxyq7lv1YksFBJZNbMlOKrpP1asCXXr3d3N8%3D&media_id=1254206535166763008&segment_index=37" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:14 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:14 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_tpMUx5\/RAV51Bx59IdY\/gw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:14 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113496693119; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:14 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "8bf9af9b89a23d85eea3c29445ce071f", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19915", - "x-rate-limit-reset": "1587864356", - "x-response-time": "37", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00bd7956002507fa", - "x-tsa-request-body-time": "96", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"H53XamprFVR96a%2FINJAQajhT1Pk%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=4ZLLy8s1hOnXq1uvdnftHODua0Tu69Wnx%2F7XpPXou%2B%2FzEm%2FJ8f8pP7%2FEWWb5PP5yr%2BDspk%2FzYi4i%2B57lv8EOe95f%2FXvE%2FCOvRWlv89jNtr3aEZV7Ln9X%2BryXfkImfd33XmF4yIXF%2BpWmXv%2BhEEvk3ftWu1Z2hZGQfo25J4I8noqq1xl3%2BrS%2Bixd9%2BmtS7lFO%2F8vQQ9KVyej67mXuGS8nf7NM%2B7L%2F4jLZO2Rn6wXV%2Buq9e%2BaT1i%2FX1XLct9yP3ryiHfL4Iyq15VavJ6LqvXpcrk3kv8mVLUunXho8ogL6xV0%2FJ6HVLRNDom1%2BrfrBWXrJGCYpfr19q9wrJ66lgAAAAf1BmkCQKgV%2FoXlPc3EK9aE%2FGf5fX%2F%2FnVOl69eCz%2Brj%2FAt1aud1fasSc181dKZpfVpOf5Vetlq6n6ly76vbV7te7iPWUlq5cEPusV333flkEicb03fJ1a4dq8pP7%2F%2Blb9XdrUtx%2FrsXNV2ry7rh%2BrsdyXa5X6tWqnB%2BrE%2Fr1%2BvS%2BhEpqJ4Wph0TLRBf%2BJ6uvXr9WK9WK9WBPXrvv5llJOvfEVcvq8XfaxX61Jy%2B1EXXExdrlXojlWsX6wS%2Bidc6PB3J6lS7WKW%2B5NKJ9XKu7rykU2ZPRd01VerRFqy7Wq8xCv5bt%2B5u7ivRZVdc0uqu7XKTxZJTretLvvuvJb1Xo7lX2sV3GWrdonR7%2Br8R0a5qSei1XlJmpEXCflvu%2FRsu0N79iIcSbuvLSb%2Fnr46l9Jhr1lXosUXcnq93V9kvu%2FViyf3%2F%2Bsq8nYZ73Xokoq0ev1r1kuX0Su6uldVdeLNH2X8%2BJr4gobbZ%2FYGcQa%2Fkmv%2FEVZmSao5RHYIY%2BM3mpXcX6LUb6JFLfaK0vrF3z1Py%2Frh%2Burur%2FZ93XqwL5xijqD%2F7lu%2FN1a%2BCITQ7kSWxWlS3cvrhfmM76lq5Yvlq5rry9N%2FrF32SWnb3zUhxl8%2F6xVuXe5H6SLFNckP16L1evb95rl9e7mswjjeZeGKxFCcq6V%2F17FbQ31q%2FVp7v2KJjPUAAAB3tBmkEQSgVyehba%2Blcr1y7mterdYpL%2BJ%2Bv%2F%2F8n9%2F9%2FKrHat%2F2vh%2Fvq7iPXpfWU11xHzFJhvUtfU9cZ3IKf9FSs8vauX6sTeiP%2BST%2F4LbGwM%2BZba317Rs9P5dqS%2FvZTGq6w%2BXnH0ijDUQe8mlIK%2BNGOAO%2Fodlw138lDvmMcsqMmO8TqT6%2Fq16ES8tcXfqnTL%2F%2BhHVNIzn1a9piyuD2W%2B0V69e%2FVu16uSh37v6V8UT%2BrP1i7WpOIk5l6ub1Xv1Kbq91r9cr8wg%2F5Pqm8MpH6uSuSr%2FU4KXXfNPtVV%2BrncnguIyBm9PcBrNadu%2F5dJRck6Kyyev%2Fdy%2BsavVu4rdYq9ctfgo8Nz%2FW4iC9mZvwRlzPz0cXSq5%2BUUYfLbV13vGkxau776StjP0fvdem6WCJpr9dylrmJuIc2EOq5rbmpa9DKNtGoDUxDzSA4DUtF7Bj8p%2BfqC7N8wdP8NmWK9r2T738Eft3Mv59YzGs8sJDLR2MsmGofg5WA%2Bz4mLc%2BggZz3HB0MHJYoyVEfJ%2Bi1JTycnRyy77XXfxH69Pur%2Bu%2FoIk3KQeXGD3c4xrXVtnRJM%2F5KcsfbElUHclpw4yxW%2FehFofj%2FYaXTyj8v9eIMFDKjr4P6oq9x1mkfN5Jc10x3T%2FoTcRcR6Blzr8sQ0B7oWz8KU8IykhCSAmvn5zI3thFp1Q20vyOD%2B5T%2BURytCdfqWlvHKkZcnrhJ618ypvYivUoPxZpWL6vW9CqJpMVg%2B%2BHus5frrHk4Orh0J6jDHtA%2Blrr7SFWoZO%2Bv19hD8%2FBiVEHt%2FxpMf%2BLE59vffqr5PqrSUEE9hVZfh7LR%2B5YqTJBMHpR9k0tJ%2FZ3tBMybLPGTSbWa0lEBhxEsdXyZuxLBHGkEQqpM%2Bye3%2BWGZmWPvil9fsFpx9kFR8Z3%2FtNQfh264CnI8hIH9HvK0YZ1f%2Fh6UxZsJKWh6ksKlMXBWOo9Loe%2FsUr%2FWr4rteiJJXOJ7rxZHYKHLvRUx6IMyZUl%2BoFmfl92T%2Bfz%2BL8Epb3HMkDVPY1N2EeCR0SroBrXlVjrLbm26GEh2YlaMYpNUjOrP2wXl%2FfcFsxpMm73y16I%2FFun7QrP%2Bxyryr7ZQ5YzKfYat7r8Otz8n3q%2BII%2Ben3bl%2FdcEWPC8m7FrhOvvAYReajqaZ8ktjrVG43L5ml2I8S2exqVH36Kel9XVfRcmWvVv3RPv%2FHmbRlqKfrOkDdVVwCqq0vX%2FYmtBAsDu608x8tprsepVeMnhnhgo7LufOkGJMVxir1l766UxUh3wGtDz%2F2EKie6f86nySn%2F1vdST9dcejp3e79m8FmCqtvPSj%2BU%2BOTrXeGMK17MywX%2BEDBeLWplbL6fWisRPE9rb9e%2FWX6t%2FWeit6fp%2FjxnFuOOTww6Oso0TynL4JboPotMPsLPug%2FflK8BTJj3HL9de%2FzEdgb%2FiPLRUMQ%2FI9x%2Bd3H8r%2FvL6ftii3vqx9wyQOzyj8lntfiq5P31wYQPt9qyzXtbG0GrQa%2BY5RFY7kFvfW6ZBA8Lh6Hz5Pj1yTyyJMv3eoT3lyWwUROMQcqv%2BRIz0Xsv%2FiKPl5u8JiOrRnFdWQnuXJPuvxPPWVJgd2Yl9%2B8IayKOgJoQjIl%2FYfoxI8Y%2Bc51w1c3%2FJ%2Bb9GhuL870FF9PdsVZx0xW1euBC1Lb85Zf8qiT74NF%2FsUKrn8fp0fLqyk7HizpUObcdLnfjIeuewjw31kJBBpEolJfGVjk9Ht8JGYv9g0DCBxdrqcgkYbVnreoyiiBtuO7y%2Fuf174iRaR%2FrW0Qu79x5Hfaf1VeP0gkx26yCVfpCt7y%2FfWI8noDjtJPP%2FLEqSGVc7tQUY7TpuTCyiLrOXL9is3lXgxk37DpQgxPr9pnoI3f%2Fad9jbUZBHX2GZT9ZRip199N%2Fq%2BhpMERgR905ufW%2FaclaL1CXDfJcNLs9TeC20MCRSxMbCFV0gi1O4UXY%2BzB19r2SloVvryhmH5dhOZPr%2BgjNpwwPd9DmY2E4bntKXxTvfjePOSbnwf16pF1%2BLFjhd1U0PLf6NUTf6LLxLr0I6TwW9gwfmr3lrfBHarjDYJ4q2RPdr5bPON8ny6fljA%2BD%2B3rs08B33%2Bvfovb%2Bh%2BdIZhrAl%2B4l%2F77O%2BcEPllbJ7%2FpgsojGPgNab%2BWhT4%2FBr6CZLYbQI35vifNWCUtbGRFi9l96VIpRY77rXhb5SG3fP7W2RrL%2FyaP1dKy78%2Bq7zv3CIpBzfxkiQ11nX3XWTwt%2FDJQifK%2BvzTMNPCB75Pd76RXfgjve7ul6kIzc9vyT7Evf3f%2BCI7hL9r7emCTGpRKffYLcuPQdcuW1p0EhGEXGLVksvBBNz8vsdA%2FyI4ZoWH2W%2Fkw1Po7Zf18lHeSb9tFw5y7v3fq80v69V69exRr08uM71wSaUqJtd%2F56%2BHF8m1i%2FRHP17J66e%2F5JoBIErm%2FFxHaxD8G2yoP873fk9dcSy5afEvxL5eXupQQn3eKa%2FVF6vXprJdr%2BQxiS3352CX0lvaZr3%2FPZ%2B6RjKu9UXv5PRy1PV%2FyjINpl6VwlNT6SWzb3VrhVN%2BhLctN%2BuKr11%2Bvfr1fL6JKrR2PTqEJWnl8vye0M7vAAAAF60GaQZBqBXJTYyL9%2Brna9Xq1br31%2BvXa9eq9Xq36tVr0kqt9dF%2F8X1K3%2F69Jy169XEfS9fanTu8te3k0UmwhMkn6Rea0tSL8XvRiZ%2Bcg1tNi%2BEvD06cAVa%2B0%2Bf%2FtYqVJYEHXq1Ui90namb9W7VIC5Yn1lXq5Xr1TkJSG4iruGoAZPX8X%2F%2F9fjjRrrdyc8t24VjrcbM9bKYHqHyYvjZl5cS%2Blc%2FBWXgl%2Bf%2FDqBqWF%2Bb%2BjfEbN3%2B3q1VqxV%2FMvdq3693k8%2F%2B%2FVq9e%2FVpOl6S72q%2F1QhsntX%2FUjOd99ghG5qbip3DMNt0vC%2FXxsF55tYh0atXK9WV98RXr1T9rri5bXrl%2FWKrr1cq%2BT%2BXT%2B%2FdWHU5qw%2Fun%2FVUnFSUdE%2Bjy%2FWpbv1bvrVx9a%2Bt%2Fybq691d3V3urKuI9XJZ69Ze%2F6Ll3%2BUQMt3o9iMH68H66FYvPhnEXWK3urH6LBJxNWrlb%2F%2FghJPDy%2Fdhs3v3c%2B65a9F6X65aoqrXv1erl9ar17l9zEtQD%2B5aFaDd7OeEHGe%2Fq72dAutXfbKZduV%2FyFnxA%2BvXL%2FrgkMaxpr63vZqCH2vrby7fL6PVeuXUs9V4pX2uriZIT7ka%2Fq2hRKBszwHBK1uO2seTj0daGA0SeLQAm%2B35%2Fo7FwkyaD%2B77BCJP967Wt%2FhG%2BXng89eEoo5V4MDRt9IPmaGmWglDfv%2FnBDz4N8z1LDskIQP%2BTNL8FJ43l6Bg6zF%2FMICpxaXcMw%2BdL0lDE%2FlT%2F%2FDmRmRiK0OpUuXvFbtdvn8utP5YmxZHhZMdmARPqc1%2BcFXaadiKcXwPVP%2B71pvk%2Fl%2FNuu%2FVe7yeHX9gn3LxNeLGtz1ZR4suCR37qzS6ghI4lktjsfxpk7II9j%2FQ2W60qR7%2BI60ZcBZLIMby%2BT7ktXJfe4fv%2FikXu6v0IkuSfsEhoBnvUuQ3dRtkSDbqCWYegGs3pTGMX226myJI0IDT%2FZBMYGT9TEqEOJ49gjuXPL17PWb0%2Fs3dHKTHGWVXonm%2F%2F7K7%2FUxksuUbvxumeb1rusojvvvurR%2B%2FV7J9%2F4LhGpUh%2ByTbh9iKSAx8XC40U1iYWyleD4MoC%2BxBEk3377fE9UyZ%2FcQW0q6rJ%2Bdl12iuKicEpHucglsGN5%2BPyD8fqQN%2BYcmbg9xhM6S%2BEpafHRk7vNIGAron75bi%2FNgLrqSx9X7%2FKXh3LGX%2FhH4nv%2BS0dlXVq4%2BhD7vBJsI0S55fljN6F15dzhAHk9%2F7KV36fBGV92eSCIVu0438I0p7HbHe2fGhLjZt%2FuVRRcGXKpszXRuEegwrHYMtHxkTvpSemnuGDFkPojCJu1a6z%2BuN3P5Pb3xRyYvCZinv3biIH0vtH0ENyfPvfovquk%2F%2BrmjfRuQyi%2Fj8n7%2FrHt9%2F6Kkov%2FeSU0SH8EM5OODHycbv19kMWhh6iq3CcvoflhyfxPuE9sDqS6HdqT99cI7N9sET9HnNJ0rlx8C7QZantDMpsFTJoZteJ7zTpgl9JgQ3LbmFw3%2BI3HDGM%2BaY%2F7jrK99QIegRO4v7BGLNTail%2BX1lUXz998ve7xQoX2bMXb2dAliFkQ%2FO3P8WT0vf0Plkz5cn9%2B5tqBnh6gR89sbvPzeT9r%2F8EUyBpC6yenrlGvf8xnh7Nul%2BJMwKkFZcjTZCp5f9c3JjOrcJFW%2Bxy2muonFb8bM%2Fk8X5Nr%2BrktH70J%2BI775dr2KGHDd88OraLkND4WG6qzFlz%2BWsmNpa5yr5Uk%2Bp53G2X7l%2ByEwfYaknqWqSm3vYXiyLWeX2CIXnMX%2B%2FWvdU%2BlVFiEYYBm7jR6iHEMerckmfO8myFyWjt99aTaL4JCZ8d57q5L8%2FxXnyeGrlq2h8JlEciton071YInx%2F7Nxfd5Mvr7UVp2Tyy%2BIJLezPnzf9B7mkxg%2BT3zJ%2BvV94j8v4grv7ul5P4ve7iv%2BitLf6Ll3l%2F%2F%2B0TUkvP5POQQb%2BpXyfGke%2FqsXZj7vl77yfv%2FVXf5LPdXtyeE9qmlI7%2BE7ur8fQnX63uvdS1r5OjflqN8n9z5L33d1k0%2F7zVes%2F1ECBLjPaafvAEsFJhIEwsVwsaQ0GAsFAsFCMFAsVAwFQuEhCJz7b6zfrzhVRnCSqlRUylNJcdDlX3N8a%2FPPwXduXxw%2FCPB8vg03m4BPrvyk2fvFv9IOTfCKLvZ%2Bo%2FVFBhpRuSs60Sraj0Gl4J%2FrkwvXwiBkC%2BVfOJ%2FspjomvSqD1fv6JsK2zuUm2uscAkkVKCmugvGZ%2FkYdGaU1B78CqNJ0JAMYDYNRUbPALhMwddBg%2Bfe%2FVhfTfUtvYAaOeIt7u4BKMZIkFRGP7x699m49R%2BHPdzr%2FXWoH3wvKhfcoo6eicqRh9l%2FicfTKkhdzELdvv%2BV1omlFMihE3y8qAxQ6qNt7tHnA4ABLBSYSBYKBYUBYJhYcBYUhoLBQLCQTCQTDgLCkThEJCMK5XHe%2BeLrkuokmQlUYFtRwLuXFNvTlrh9I9vIWvH%2BDPb1bpJdfSrCXy4GdDBspHk2Eac8b9t1AlA28Gbu%2F1hXRr3jHd3sNVPf3WXwd1iapz5b%2Bf4zjyxn9ux21HqOVn4vUWR3K5kGW%2BpAbj%2F%2FH9QN%2BQ0ZcB9vxQNiLYLlxqQmOQrC0PVZN8vsZQEwm5CFmFNF8vNr6TYOJBIafZIvnyFurvA6MqQS%2Fxux8tz2TyjbiAxnZm%2Ftvq7P2vvuG37Tu08nmHHxru3F6DFXx%2FMEYXUkRO%2FqNT4%2FqyCPT6zgvYAurpKIH42kMfqm5A4BJhSQLCQLBQLBgKBYUBYaBYMhYKhYKBYiBYShgLCgTiIQhMLnpWPXnd7lTWzrKlZdUMRcuPI0Puk5j%2BZTj9Sb%2F%2Fiv%2FdrOF9nZzpAV2WGzjb8ONU%2FjsJ9acY33Bv%2Bspx1dtVuNm2Fuz8jAnbQulfK7H%2BH1uNt41pJBLvuBZ7CsfYoFNG%2FeABTh6uSMiPxqLov6j84F6Mx6Xm8dSA8ltugSpEJ%2BeTP6EXgcuL38fR69PpFpvsDWIOqYbewCtean6Xlg%2FZrSvtE31Beku3PKn%2FacfAchDARhKUWjK0A1k6g9zLUw8t0AaDpGjAsMx4uPoVb%2Bz0hBkJGL3vk8LdiSoS3JK3hfOKAwsFftLKo8KPKBwAEoFIwsFCMWAsRwsFBOFgoFhqFAsFQoGBMFxKEhCEwtzU3Pn22b1Uzirmbvepymaw4kk4H5rfL8Z%2Fyan1gvV1%2BuN1PZlT2VahaKH75n22Dyv19ByCsf3jxHZ7fVBMvz79ls4b%2Fg2yYetoZ9cl%2FScDf5d9T%2Bf7BQFsz3dkkw5yWx88pV29mn5KVeNeoDMaPZMvo4VH1bt0HSXOq%2Fv%2FO9%2B%2B5dfpNCO9%2ByTIPX%2FC%2F1648u31ux%2Bsf4%2Bk%2B1VfifsKTEM8BNCu86QcEZysMc%2BFTejvYDjuGFFC4iXC327sEv1HbgU3Rwujzc5u8TzOylWU1rTLDHy%2BoxLWlaNWrP3a7V2IobQQpunwCTLJnrf6nLd93RBwEoFJBMNQoGAsKAsGgwFiIFhQFiIFgoFQsRQuEgiRiTj7be3jXLzzVpK51UKmSqnUJwPoXwCNI7D3Pq%2Fnn%2B%2Bn9dmJR6X4Up2KL4REpVV3BFw18PDaFQWXfF5bcviGp%2F9n%2FuKN99QCD%2FaECdLV8ahEXT1W5a8thNv6jq2DVFVHr7PhTORhXhA02NuCDF%2Fek4Rn%2BR7rgQawvio9vxuBBv1jo%2Fm7v8F5A7%2FVP7OrPL3%2BW6FqhcJAmIu66tPklxFTTZRqpsRQAsVTnT%2Fd73F2f3wPdL2gvpd7Jg%2BYgfhPL5x7%2BrpPP1%2BLiAknPy%2BxRVQoQiyx18Z4ZKIqUT1OL7cfrkJnv28gcBJhSYKEYKBYMBcLCgNBQLFcMhYihYThULBcMBcKhErucXvnw6yc18ctZxm8tFZrJlzirqdBNn678u6DxzgmhbvUrTvIBffZ80oHSZsDyIn2nz%2BqeV6IVOGopUFff1kWoMKUFBl0nGbu%2BfPKd33ir563vIsJtug2yW%2FulnG2eP4qukGg7%2BMcHe6SsOUVQd3I6av5U1UagK0wrkf66c9wBhdXMAbtLjCRU%2FHrk%2FLu8U67ToyPG%2FT5%2Bv%2FQMtJSHT9vrPpQAAupK5WfsxHK%2B5n1HF6V%2BBEzjySt5zlFMh7OdbSs3e%2BtQVVwXff9JUQlSsyHXyTsgvAy2%2BsawXiySowwsDgAEmFJBsFBMSAsGAyFhwFQsJwwFAsJQoFgqFhuFQoESGF41rm87587uufrurtN5cTE3Kl6ROBp7XPOE0aE56W%2B7jH9H7Egv6OtPQOmNAFu%2BQ98cdkDvDefS%2BhSAI%2FRc7Y9HqBYp8DEQr4uh%2BnwWGYNZHPhWixV16Z%2Bq8tYF9cpWIVrI1AbgsMYEV43XLWuUfw%2FSfc7eUf38rkCbOyQALtQBodf%2FnX0%2FPh07g6weJ5wKeeMN%2B7aXbqCATl07tQoALyA%2BxtHe5gFZcvt1e65%2BPyMIR7HkwF%2Fy4WvcV08eQph9zcsBU10b79cazuafDVZF2sub34R5oI%2B7x6IOAAAAFtEGaQhCKBX%2BhcUlIrHfyrXxPTL1X33XrXd3%2Bsu17gh791r%2F777Vz%2F9X%2BTr5f%2B75v7tdV61dqxfNz7iS0R%2F0Xv1kVmqvKTG46cEVdy%2Bis6sJa99vqpWL%2F5FddS9%2BvVdWuVXUqI2T2%2F9W0C2XsLJaO83q%2FHwgLWbaJW5PCnewQ6Cgg%2BN7Pl9fUpQ%2Bnrq6vu%2FVq5Kvuh3d8T32td3d2rxZPX%2F%2FWYV6sikl%2FR26sV1DAh2iNLA5qxWghVr3fKsP5Kv3XL4irr1i%2FV9W83ghlp06LfPfrrtWSc91%2BgnVrXc2X6qxy3eT3%2FwQkjbag4myeNfYSo5TvcqhT3aK9XVFWO%2FS%2Br3xHdXPasdi%2BXTm9wTK55uv69%2BJJedkPQ2GfJ9%2F0E9imXKonGD32i9XEeGNU9etfrFY7y8Ev9dXP%2BsTrdetS%2BsVWLJxCwvLlNYnu2kdi4%2B4qNSakabCNKclL79boGaLcgFixfLTxX8KZVFCjLRg2n8cMk1wot3hChZZCzrmZgpmSgstzEnevn8KZLrkv0W56rV8i9N6t32YmErB7Cu59W0%2B96%2FCdnvbnX7h0ox5Z6boJS%2B%2BuONUty7%2FqfKNm2uP%2FxBiWiGduzIQnqnr%2FmjTb%2BX9fBFZlgHZdirL9%2BeDuq%2Burq0d%2F1fqWDxOsn4i4m31kJqTJPdr8EMHYZ%2FX4XI1hfdPVg4U4sIXWG0STYj%2F4uoBD1aCw4iTeT4%2FxIlk%2FVA0t%2FgntNcj0bRh1%2BCYxBeZisER%2BDn35ZcZaP3Ny0%2FDZ8uPhQRDRr%2Fzyer%2B69%2BvVS8%2Ff6933a3eWxZMvdg4ET0aT%2Fvqx3SSxoHAZvL%2FXZIeRM5B0Ou37N32xjXo8EXF7ZQbqr9HY%2BjGu%2F4SKPtH079r3bIXpdvXfYiYiUlrt5SVQ6buSk8eRF7lisCHyfAEJPqCg0ZERYcw2Sf%2FTqu6EwhZ3f7QQaJFbODZSeLf0aH2ill9Puju%2F0J7J6%2F3zbM4MddrpZZPTf9W696qx2Yuk%2FXJ7ZOvZ6%2BG4lmEodtesv61Xqh565ab9CibuQn7XeHjL1nIkU6hqkus05FH0viN2BJKwJFV9gjvd2HXlpDry%2Fgq1SUwIBOYx%2BT3V4jL9pjfsnHhMdG%2B3zQ5NLt8%2FKcq%2FhIwWpkh3u%2BZekFff65V6M%2F6EsPgiJDQ5KnBrfVjidQLzzfVJm7wmVO%2FD49qy8MSE%2FmKMnrWjY%2ForqsEZgjZyzzIIK5SCiKZFL%2FIWtfguOaiXT0sOc1u77F4%2B%2Bn72d2o424aSOBBkvAJLDOsvvLf0WFa2bhwTDsWBu6%2FDzBv0uoLyDouv8kbv2EVhi0Pc91f6P1r3pW4a81rNWVF%2B%2FL9xAib5tRB6Rz7%2FlvKxo6NUXf30yqbB%2Bx%2FIePjJna3d%2FhExqNcyBODYFFdWE9shBzY11Lkp5zlK4J7NASMKqDzqIt3jPDzwjkBuZwStD3LiGE9Lv%2FEWpLjqD9CuenH5BmOnvaFkSKusvui%2Fvv6oRKrBJeYM8NHuVLHAgO7XUFkJWPIDiV6S2Z8qKWjcs9H%2B%2B%2B%2B8nrv4jMyhuYnO3v65QXFe%2FOUeLvRuzODAZyHbuSZTB9%2BUEJaHetKuCMo2mfZZZPj%2FCRowVfE2JmO%2B%2B97%2F6PLtSVXLnr17%2B%2BT418UKHxOa0QHw6iHPlF9W%2BenKIKCNsVX%2BZihv3vq9P9s408q%2FsEV78nCnfvs4peGE6j9oX%2F8m3ejVX5yCMI8L0VVKvYSOzfy5333k%2Fuy%2BI1Rel%2F1WqvTllFSQ5PL%2Fy%2FX%2Br%2Byldt%2Bz1%2FGh8GFsJ3rp32cixpB%2FqfFZfxql3t%2FsksPvsnKaXZo%2ByeR%2B3ZtV32r0snKXRhhpu%2Ffb27e3k8nJ6K3ayr0V13ynjNtzX%2B%2B1i71F9Wxj2b1a5Pry%2BI9C37yen%2FSsntiEkvZejfK%2B78s3l6HRJe6S%2B1f9cq8vV%2FItd1fmyWia%2FWDT5Dve%2BpLRIO6y6up8AAAEBkGaQpCqBX2hb%2Fq5Xr36uUM5wv1rtXqiFr%2F%2F%2FomW5E9fS5XOr9Xf%2F%2F%2F%2F89PJ92vV6tUv564ma4MaXvw2TJ%2FfxOlborqu7ocpc76VqFEpbu17q617lm4lYrtWO%2BxNkgbySQN6vXv2JIWXYNHfauDItbrRWLrVIAjJiPWCvQjKn61Zj5cpXkpbyfr6%2F6%2FLxh%2BnXu%2Br06HL1V9qW8JatXO%2B63Xpb7r16I5Va%2FqXlXviV6W5L7UoonluQmi%2Fb%2BQhIfS%2FLd9yei1V0K4Qv8vLCIuS1sdS13d1cl1a4d%2FrXurHzT%2BFqJAbMdBUPlLdTlQv4i4q1b9fXVJ69XrV%2BCQlOWOVeaT%2F6LqXwsTLjx0uMtrjY71v%2FXlmGUbBnIJvRe8uT1i5ZuaXxZC%2FjY0dYOBn%2BCcmwMZsH3Kk6y%2F3%2F6EuKnz1%2BMpj%2FMTm%2Fwj5NMlv%2BOHWgO3%2By4cvJ%2BzctP0WLb8t%2FrUX69J6Jlk9V3wT0CWkrLbV5CshmnXmIPxOQmbOK5f%2FlV%2B3bJD3%2BbEK%2BrrwzoZaRL45CqS4f3qXrynTdjnnriK9e%2FVpyfv%2BMFMRfwgzlu5WOEzlLWvZZDZDQ%2B8CNr0bE33jnvV%2FfeTy7XryFbHInR7BD6pObfq6uJtcv0Xr9ev1avWK7IayMnTu8FcV%2Bf7y9z54O%2Bwne%2B29e%2FLRprBMXd8tLDfZjNz%2Fu7OVZrboD%2FYY81GCml%2Bp%2BQfOMHDUz7LJK%2FJbRevtW7%2FXpfVnrXq2q%2FsxuOkTfYal%2FWH0u7%2FsvHzGl9fnruWP0%2BUpWEVvaNrsEhM%2F6yefVWUu5YK%2BwkfnstCmPV4k1jhx0IVbsPen0Vxus4mT16TiLvsEIl32NevfffffYTFa2SK%2FbPRX2Q3N9996etP9mjZonOMHZdJ9viqsNwtQF7ITQtrGaCpDGYdvE%2F%2FXnj0%3D&media_id=1254206535166763008&segment_index=38" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:15 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:15 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_v3OssqeHwG9jy9hbFiD3aw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:15 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113560974517; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:15 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "581857da964c7c95c997af1b298c5f7c", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19914", - "x-rate-limit-reset": "1587864356", - "x-response-time": "28", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00ae1517009a6253", - "x-tsa-request-body-time": "77", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"tCBERbELTX4OGhSIJttjsmSs%2BTg%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=61332uN3u%2BMnkvvsEcxstF2FOpMtOT29TasnNLvsUW7u7v2WUxCqgPlWxRCsT%2BNoO9qWCQbd6VbRiP%2FISVFHJzYig3w8zqZl4wWT2Tk%2BTx%2F%2B2fUqS2jCBJobLqOeErHP27v1RP3y3L%2BhMUkL3fqYU7%2Bwxxz28Op52sMW4uV%2Fs9fsTyw2W7%2BwyV7Vfw93fZ33t1BCU%2BB%2BTT4tb4Xmyt7trpm%2F0Ovff4Is0H6rXVuQRjZB16OYtt%2FrTvv0WvxYjiuk%2F6P13L6kar77IIqz7EFm%2FdPsmmvZab%2B%2B%2B%2FwvJDIkm78GPhlvUTYVT7N5fsXY9EqjknV%2Fsmk%2FyXv6rqW16tTH3R1K%2F6vdq5Q6UQ%2BLtYruTVWVfr333upfW5VryVKnSrrJ%2B%2F4ZO76zbb9eCEdeej%2BoJJqd93rFz6vsVEl%2FRFa%2FV36titfr1X%2BtT5Pfd8TJVfIuX5N3tr%2BAAAAClUGaQxDKBX33doT36933d1axTevzq9taumX3fd2rlWsX6xfrFLy3y1xFWvVa%2FO%2B6v9WJfBJjQ6fVX38XilderkR6sfrV%2FEepbvJ8%2Fak02bSs%2FWXtf7DdG%2BykxzZ%2F1l6h%2FsyhAEJHC4f3u7HxtveUUxkFf62HwRSsXuqr4ivWpvXp%2F%2Bl8rlmu1%2Fc67Mn4vkq5dE0OWnStXvdaod2JOLVq1ViuevUifEy2rpvIYymn%2Bi1EX2spB0szuiVrrhTTulVlZfRPc9NjtfYpXEeuX65RYrkwxvSXUtE1avJ6sT%2BuUnsxRqt%2B%2FP1pV6LL2Jr%2FDf2r9ek1V5vXqv9e7vxZB8ZKB1Do0K6rzcmNrwQlZ42XDq%2FRsKuvRevVel5ZPVqwjr0XUnqdL8gqfEBNBAPxNhjHB2BkUe%2F0Laa5fVu9HFyaonRnsmWTInlKTPd26pa9Yv17vbq6JnaXnqXE%2F%2FhfnBAFyjXdfbHXp9onScT81ej5fr3o6zqz17vun%2FEeQz3%2FQlgI8N7x0LCv4SsG84F9cL9XSeiV4j7Eyy3PVxV0X9%2FktEYC77k5u%2F0WKy%2F6%2F5MNJdDUbzH3dJ%2BS%2FxRsfecJYyhf5pBWjG49J9ei7RenuJ9E13L6JBI7z19Mu0Ck9%2F3QvLd6J0V6Psu0M6rXWn79eu1S0n4jylw4zrk%2B%2F%2BvdJLu%2B7RdW3%2B72kWrv3vxYzGfaK8Rv2CTnzBfoS78WIid5c3Jd3XoX1etV6vJ6wX69%2BQ0OmKfLq%2FV4ZnN7r45T691f%2BeqJa%2BT1le97guzWufM0%2B7Lz0OY7k82fL0%2BrZPf%2FZJ%2Fd4mhbn6sVay7k9T1k%2FP8291vVoRX4vmxqrVJrlxH3R5e9l9y%2F5e%2BfuJv9dVc3X6uUrqT1aa6ut8AAAAMZQZpDkOoFdcX8naE133%2F33%2F39%2F%2FrF9f%2F%2F99rX6xf861%2Btf9%2F%2F%2B%2FfX3k%2Bv%2F%2F9Xr6y%2F1rtavb5upVTrddrL5vZlSj5lcfXXfzHxeJd9SMrElJUtVrXUr%2BxS1Jd0i1Va18y16XxXzfq97r2X%2Fic17%2Fq3YLrpWb2fWnyES3dorDZ6xjTn1lOmX1dJ2r1derd%2FIvfr3oTVNfq16V8RZf%2F6T5NK%2B%2B%2B4i1aqu1aqVavmWquvWpPWqoxXr1r9crtme7r1cr0d%2Fkl5MV1tYr6Srl4yuSSRZfXvxBlT9pyehOXa4V6v%2BuXl%2BqwV2uX6tWqtN6slvuXcxONMvo8Et1931IjmKWTk7qiJLv16bzEfWX7%2FDVpmvpt1%2F4qK2WSir1TF1fBH0r5UTzyVcXD04Xb4O%2BHz4maiXKoB3zd3d3V10itL69%2BvSXfm46MaOanoE5s1z5khhJKyu7%2FuUjevRO%2FFcuEI3lGO690cuEl5ZLR%2FY7y616t179W%2FXJEr%2FXru8RpbVFJHROPBfCcsD4gsa07%2FCZrcqFz5q0JbtlKx17EB%2BfR0IuN%2Bvd%2FfotVd333E9GIjdqi%2Ff5DpFow%2BvchI%2BMnl%2F31g3v32qUNghKcvSnTteryGjOjp02%2Fu2j%2F5LWkl%2BcSv4zcyXVPV%2Fq%2FVJPL4oVJmjIECWkRJaspTUV3PZjvZ3f2idJyyevT8iP3urB%2BxTQw%2Bke370t%2BrvxIt7ekyRb3P9iBWXD0Oo%2F5tur7%2BaXSm9DZSWiPN6I7fvVrKy%2F3dX61Vnr8Os%2BfaIw38X8RP6PBa9a8pby4rv2ItVI%2FuTxfjRhPP5iQ8cr7n0ijUHj83zURk3q8loSdrtjnrJdeXqir35%2BWvOVR4jn%2F9Yt%2FfZBem5vBMa5WN6GZLW%2FaZrqL5rvvtFbvtar0XpL%2FXv1YK5PQjr8xaOv1yu9v9vKxq%2ByCMdCnDqf%2FIcuZ8%2BErnp5cfcl9o%2Fd3VJatXrht6r0MZ%2BspL7OJX8aHwWP%2BuURr3L6JaWuT0JS36yvwRHbpTpKT29Xn8xN3dkKX8nocxLtfo7y8UtVdbPWhMlkE2nu5%2FQiUlyQEkFJBsFAsFBOFhwGgoJiOGAyFgoJQoFQsJQsFxSEREERN7899c979u%2BO9%2BduKSs0kxmKk6ir4HYao%2FQ8k1vuHY%2F1x3fPwlC75XeGjx1Cxxj3Vb%2Bt%2Bu8%2B%2BMfC89EyzuC9zXL9mkYM3u4IV6TSyDAPcvmgPPte3ZU4egCCws4VOJ%2B7jxlels8%2BK99xaYthXD0u6P2npP3NH9HwXDMW5d2VL4gAbRA5Bs%2F55kyp030Jzpl0AQzFYp3dnuOLn1%2FOJ%2B0vnYITPRJxAKu0uy7lqT08nh9dFeewOt4BXvKrmnYC69O0CUzYOaWBDZSH0Mu8YdZ7Uke0%2BSqTP%2BwHABLBSQLBQrBcLBgLCoKBYUBYShcTBULhQLhUbBQKicIla7e3qd79u78V7ZealZVuGVti2pI4HIE4%2FpOi61%2Fe%2Ft41Oy15gWLNAuy7mnSeIH7t9%2FWLvohpSDTSWcCOicB7LXg4HfIA%2BrlfC1o%2BMSx%2FgaVN1gENz%2FDlOeFcPg5OMLsNfzyldtGDds2WYztnOOz2uuB4yKnxDnKuc%2B75nXr2x8TvjLf1nHEZrYDqG2B7eQSrXf1%2FecbOV%2BKej0f2Rj7n0TeYjUIdviZ%2BHLPbfI3I9PsF78kAS0XnM882OqbfygI9z60FddQcABKhSQShQbBQLBMLDsMBYSjcLBcLBQKiQJhUKBYKCUJhEqO9Tde%2Ftv2%2FOeyVqZWS9VzeVuSakuuBy7Vfm43zHm58Nfj3fm1ts2Nx5936o9bIkfLLb1lNSujA2giT4I6vEudfYrse6ynrzbgP8jEiV67G2ptQlPX%2BAvM%2Buq1vtjUUEeXwsF2RPojdMguvpB%2Bap%2F95B5xhFyr7%2BrzoxiOK%2F4NpUF5ciSiAGgW4HNxHU1siosdx7v%2Bt%2FXfzP3vUf%2Fzp%2FurfXZm19Hsx776pIk%2BDTV%2Ft%2BqemfCaR3gmOk1NiSCMnE6dcgHAR4UkCwUGYVCwYCwYCgYDQXCwUCoWConGgVCg1EgYCwXDIRCYRG5rnjnbfx73znEknHatNZinN1NXE6GtOA7DoDn38R9HK82dx1HC30%2B5%2BMfo6JEIA0Do%2F%2Bfcqn8DJT%2F%2BPycMfmnJA1jWHLsFf3jEXPbo6hu%2BlKnRBWHudeoPW%2FW%2FYEsCVd%2FefJdfKDhrP87c17xmLOqXrJeXHMt7Byvu5ER2uzjysc5%2FI7uENf4Pd3Pndz972ZzrcdSZoXVWckmgRivMLugBZiJoBmqt7iRya7yMHHhmyBz%2FU5EoKo0zyaf4zCJVyssIKLd4%2BQPzsDgASYUkIYUGwUCw7CwVCg1EwVCwUCoUEYkKoRC4RGeHHdX7%2FXbnfV1d6zmtLqqZQ41Vuh3fyTdtz%2FQcc3fQKeno5LX8uyQ7%2FcHoZXL6KPe7ET%2FsnPt%2FV%2Fifacz4Nv4rDHvRR%2BjBhfaJyj0f5LecCRjboJDU2%2BYzWNe3cC8m1h7cfCOmotYemwxtdh9ot%2BoewPC8jB5uAT1GPlG7OyvAVX0OtN4z9S9osF6b7l%2F%2Bt30601xPvl3YPn5gK4PGF%2FiA8scARCFM4O7sAQh1LkqRXkeuwHAASgUkGwVCgjC4WDAXDAaCxnCwXCwVChFCxEC4RC4RGc51zN8%2B3i%2Bd8Lqe3OVJKGKOItwOL8Y3ngXc11oH9I8P1Eiceh%2BPBpss4QlXSvC%2FiYT%2B7TgPJMpK5D%2BgV0aUqBQTnYo8HXRF%2FznQS1%2FUWNbhgFcmGxAoqyOxVa5aTqr9qxC%2B19cHIlPdDOp0B6%2BlF7dWx5Jxp%2BKDZ260XFAHRREBa%2BxObm5EBhYr5HplBxgZSC7z%2FS5xQGovmYXy313AD61QAz%2Fv78J%2BG1fesg1UFF%2BBtBNS9tawV6RZYZikt7XufmDjbMDgAEkFJQoFRMFAsNAuFgwGgsRAsFxMFwsFBqJBMJwqEQqERvFzt37e%2BpO84uqe28q6ipmM1NWcaD3f0t9Lzbd8mjp4EvZ8LNDv1DvfBnskkqbP9af4uQajsAu6bgs4fq39W%2FvdiznrI6vd62a9WfgU2407kEwj4adTu6e%2BUxNwDXXetlCsdYF6Xp0tCrS%2FE1Pw9wN33sudcomO03uPR3kDTh8W%2BkjhPq%2Bo9DKccWX6F4H3z7ai5QC%2BNskltkEjXqqa3suyG7vw9dKUAeyQAItDPHRvvo0qNI19TsoCvq2aNvO5b5FLfLa8BVp1pkI15UrcV6RBwAAB8FBmkQRCgVyp6%2FQvu1arXrvtcror77%2FXv17l%2BXtWH%2F%2F%2F%2B%2B1Y7Vx%2F9W7%2FXsZl7ydLld1fa1XS91LLrXu1751bpw2bOQXXB%2FqWLfT5PD6118Tr69s91GMy%2F%2BbriaHTudEXif174nl7X%2F6%2BocqTL6XKSpWO1Z1d%2Frrvr5bsEsfIkB8CDWB%2Ftzub69n6Iw%2BCHKC2ZFGZBT%2Fqx2Ca7ThpM4zY4D7%2FlgGvPLz%2F2a77tWJRS36KxV32tVf2vV69N6uMlb%2FQ59PWT397MNwhcn71%2BCHdm%2BvxME7dOeQaFnmz%2FL4hovSXfoj0KW%2Ba6WT175rv4jtWXcnr1%2BsqtYpPXu1dQr7V57Vp6VYpOVZcX%2BYyMSj%2Fu76kd3zL3xi7dFfFcTWq9xPTL30vfq1DuVLuK9WNyuLJpAN9v6sdyCwWwRic6R4uK0TGSWv10%2Fa9EU8mq9P69%2BrfrFVSJhk9%2F65Q9HS42MAeQXjLYQx8RaSHCyaSxseSpWy7%2FUOcdLpUWeI8Imnf%2FnpA%2FjKKc7sIyEhlo5Tdtg0DhjLKGWx1S0QLnpykEqhHmqC%2Bl%2Bi4frKr7%2BeW%2B65pNVb9a%2BI%2FVjoj0vETdgz5qOZclAm4dy%2FsN9Je%2FKlaDS%2FXvcFRQxMaDmPNVZdfjeNj9zxHzCD%2FDRjDFGISUBq0Omj%2Fr37DFzkeS9fhxmn1PhupqZC%2B0hMakNdoKl0GWYH%2B3iQb%2BCJC%2B8b77%2BGonceaGSLmu%2BykOW9Ax9q8kpLr%2Fkvk%2FRXxX3VX697rFEY%2FVPr3ORZkpofyfR1%2BGrOhNHNKMTXhFi%2Fj%2FYJyBLxpUA6RCFmuLLsJf%2Bssd4bCXoX7sF5qDDqfL42y1%2FCb30KS3k9N%2FD1lg1i%2FHgQRpfkoPFxqhNWpVC9D8qj%2FV8ry%2FFu%2BS7cWQohDTNHaMF31Vhy9Axoulzoi79O2EjoDCDXU%2BiX9IDrdRFZSaEMETfaB2K7lp4sGUlyfJ9O6a8v5ZPRW%2Bvr6%2BvrUlgwEbuzSKC%2BMNiCqaf%2BG8YXQ1Gvz%2Fp6R%2ByeVdqCAkeCpaINmkPD52jIiMVZwEyDjAf3Lh3YNejDi6VpJE8h4yUYLhvsVbKOCjAX7egg%2Bn%2BP6efPYTPu93%2Bsnv%2FMGaIPstfRfOWJtLYm3B3JXf2GhGOPqJfH2Y9mf1PUppcbP8nuT%2BFbqPvPZCXr8OM7p%2BkvPVhNH%2F%2BcM8Dr2g3e5l9o%2BfOXu%2B0fvku1Z5PctW56sn39OKEMY6PB8BHrwPP6KJfJ%2B13jojeh%2B8X8WaX8267wlw6NXz50%2B7qSw%2FUGhsNOY%2F%2Fhxfj%2F19mES4O9cnz%2Fnqasfl%2Fp76sK3wz1IMFSRmhJsfL%2FdkR8XymqMVd5E5bOkemcN%2BG4HhX82tfDh8vxf4bwJqXMZqwauuetaqpF1MTw6%2FcKfVQeELrYOWirMuvxo8aB2314Zh9ye6mF8kPk%2Bv7F1zY73%2BGsz46jfNM%2F0X21pP71vhqA93LA9pyziC4gqDsfa%2F6hOqa8SpyffSjxt2SN6OivVoVFp3ye3vhyGNS6EP7UeZ%2BE3DcD99NHxfoyowI9b%2FNxU691SzWi1JEo%2Febcnl%2F5W%2FzDLoIF2mt95uP5fzZf%2BylwwcmqzCb2vkFcYlSfdfOUpmLJN2cQsbJb%2F3ddQJz4G%2BPlAY68aCCd%2F23UEHhpaywhtogLmJFzWhNF36egibj44ds5FhBJX3RJqdPhwXNLc%2F4YTks6vQZMijWW59CnD9le2X35S%2FLd1X3cVaFfx%2FQ76XS4v3EZvu2EGrWfoRZLncHgoei%2FT%2BaTCZ9znU0V%2Fo6Rn%2FIdIMt2f4Zrhc4ie%2Bj8vnq%2BldkMDFNEBbL4Tmh7SZglyfj14TJjLLQ89JPe73LjV4NsS%2B97EFG1haCvaHF3jKYTM0uoLhf%2FYSkU%2BbxYMPIGAxoRHrEWhpo8kpQf3Bje4BnJW6nsfKmxNt%2BhYk6TJef3VJLJ6s7q%2BO7f4JxGYkEnF7kbmft74K6Zv2d4e0egKX2KoY00WEGYYLBXZ56%2B07XZ6%2BMvVe8%2Fk%2Fv89KeETFvl%2FOG7xGxnNfjPbYa%2BjlXzhIvo6vCV7dyRH4um%2BCYS96O9yl%2BQVJllJ%2BVVuO0CQMOsuUTI5%2F0CGq%2B9Hirc%2FsHPjB%2FE6He5iTYfBGcjN%2FdjjN4mxHyEpaPF5mPG%2FH1bXLmsFhlW8VFLk7l7XLq6buTP5%2BLq%2BO%2FxQgcF5xE8eBU%2BSLzYF%2FTL%2F7hUoJXz7Y%2Bx0N9Y8icxQPZppuP8N8Gv63f5eFawsfq1PYMC3fPmoyk8L%2FJ5L1TlI1%2BfduCImphspbdw%2Fd2kvNLDEzd5tQRxl%2B%2Fb4JCatOfjBs%2B8dLh733d8oTtyUg7BBuG8E0W%2F0SfztKkMu9zFikoD3faez5QiMeUEASD0NIQV3Xx%2F1SuIKUZeCAPOQRov%2F3ZX03uS613f3ruTsFBb3afrJ73Lf%2Bvdq5d12r%2FrLvv8ERnf73OZfhzsvX%2BnxJT3LpXQNqX%2BX1c%2Bsv%2Ff9ZPuu89fzUCPBTb1vWkoS1m7z%2F8XBTJn73%2BSjTV4t63hUEMxB95dvjHoXy5L9k7vb5N3rFIXu7jJo347vtFfv5FaTvFKXkr5UWDvvhvvbuxEYlfuCHu7GT1vd%2BcJ3vn3f1fp91v6173d%2B812Eon3np6tXu73V5M7r1i%2Bl6T0R7uuLqCSReyeggmuiRU%2FXAAABahBmkSRKgV30hLSDPahH8UryeuUk%2Ffa94c9S5dr3%2FP%2F3%2Bixe%2FX30VxmrnBn%2BtSVfonSVLqS%2BiP1qstUoqNDfjvmP4Vy%2FB%2F4bq2T9%2F%2BDrPcsKG9obP%2FasS3UhHdilSd3zcvdCvu51115Pz%2BXyQrhNrn5NCnf76IE7Q%2FXsCqJcEEaQXc99Ud5i0GbU%2F%2Fw73GTpHtCOQfdft0MN2L%2FPUaiGov%2BT6drwW2cZlNH70cJl%2F3wRctJlilfqn6VrtXiLquafkVE7tE7J8f%2FZydGpdX%2FJeuTzr9DXCtFyr0TqozuUn3%2F%2Fq8nqn9Vgl9ek9e%2BJVv17te8V7uc%2Fvwqzv2jeOTq0eXPW%2FSL1Dl1il78Kflmv4mXS8vx%2B%2FXVeEzUrjzX%2FwlGh2fcf%2FoE6kd%2Fl7%2BEfQ9dSZa1dEq%2FaxfMrxnSv83JLrc9fouXaJFViDUKVcyjPfUj1d1hmvf%2BTfq812X5v5L77rUEhObGGa%2FGWEM2MBtoWlShod0DjYQFVQZ71Aho24DMICYGmJTBGXNbsdX4kxMJdzXBtd1RGT3f%2Bm%2FVdclWjurtXqWt1qS1fta7Wx2r%2BWeukbfrskWZI%2BZzTI3oLkqRK8Vei3cYW%2FUQVof31hdMJfbh6fxo%2F3EGaZy0xZvf4L6SU5IZaFjX18MYN%2Fk%2Fveid3k%2BVG6ctg6NbgygyUFhQZ2qotKCFfOtykG7HfktIZK2MwGyaIC%2F460bKcNrd359QJfxKK76WpOeriLtuuX8ldmzw6hRCGMwHvomm857LY316G1k%2BvWwiZgYchef5qYy0NMdjagjRr%2FTwgCqb2kcMfL88f0MoQW1giVGiH5VHyf2v5PL8TFkbJmlfydPkOe2D%2FiIhybmzaQSX8K3QJtC5qiPbOpbX%2F9eveEvD8Td%2BjZivRGPxZ7nSP0tD4ra%2FybboHTX2%2Bm8nn7auzfvb7s2Jr0H8QdhDEf%2Fc9PvaKR1uINozF4cdFpmT2aX9y0XJfJ%2FFvr4TsTn%2B%2F6tE67WK4lffPLCdYPO38v3%2BCw2HKt5gvRRyPcy%2BO2aa3gHPDJ6%2B%2BaPq%2BeMmKnosrD77BOLtvfczhZpfiTXuzvk%2Be668nlz5tg3UlX4Z4em1r7U3qF64mXJRerpemL%2FG%2FU1k8V%2B%2BwmYgwTznNxsf3k%2B%2F8tn%2FshCCOuS%2FJtEzVnKv8PE%2BvzFlUfxBJSVpTYen9kmo133%2FgjLbe%2Fff4JMtjQyRRV5S8NTz1dXJzS%2Bj1yoztGExF%2BTHBcDvYk3P74%2BID907%2Fk8%2FXmOH5evqvyynb1S5fq%2Bu%2Bxd2WwkAjv%2Flkwxia%2F4QEcepZbJWyzH3U%2FihIYxcAXoZc6umRNZvCW9Y%2Bi9fESjkJtSs%2FV56%2Fi3%2BY09b0U%2FP%2BFTZdzJE1GWrR1cwgP01gn3l%2BXOu%2FzW1G7n8x3v%2BQ0rErH0XqpMnnJJ%2BjsxoZHK%2FsF%2BETT2JeHfdWENpCT9%2F5domfx8cZOo%2B1LQbMMqi96%2B3uDAShAPvskymh%2FhAtykV%2BT3x8hfngkEu94u4jVTJ%2BtdJvdlXt3%2Bta7%2F3eUVyQs3CFBnEBYCS5e0mb5j%2Bil%2F9ydHf5Y2Wf63%2FzUh8idL7on1%2Fk3TrzFzvQ9QRzqIVZx4S%2BbqsNtUGmuF6BCTZRnl%2BagpMYS9HrfqyNDnvUc%2FwTPtwqfXO%2FBkT1o%2FS%2FLC5BCW11005scuMF%2FBR0Szys5XD69%2BrBeQ77X3Rv%2FPXyJbZrWu1r%2FBCWm%2FvcJ72b7lEPz2P46v8gxhxsuN%2FZXHCX%2FmK7%2F2SIcfk%2FF%2BR%2Ba9i6V9q8nr31k8%2F%2Fl0r6Wurr5L01oS1%2BIGY6raY%2BRNL1%2FId9O7rst7sa82mlJ7IYeKCn%2Bt67917SkvjNTRCsn%2Fk7u7vevR4qte9a9cPiKhd33RPpfql63dXJX7%2B5DO%2F8EV33PVEc9aqvN7lFdbo%2BpJUdKBEREK%2FozHV%2BjwS3VrBz1aI3P%2BuVwAABHRBmkURSgV1KhPd16v%2Btdr%2B6r9XL4m6N%2F%2BKXpPXvVcP1c%2FXL9ek9WKv9XvCOtV6%2FUt2rK6WpfKTFn5Or179F7qDmYkUg7j1wxo2LJjpYWkocQef%2Bv0dMiWs%2Ffcl86p%2Flk5V6vXu1dillpv1rL%2FXkIOtY2Ag36JCR0qvWWqub6jAYWDHWV%2BGJGJacjU1D5vr8Nx1q4l6jcunVaRpEW%2BGZC8uB3NVNsxjG0X4GvywGv4rOr3%2FLaL5fq98Wve6s18ZEc0t1aNl6hXy0uWmomZNv6HoQ0nRTSC0zGff5xq%2Fbl36sLugYQyTrkSU3Xu91LItf6n7ucnnHforc9eid%2Br1VJtS%2BpAXiyy9HynoYz%2F85l8pkbl91do%2BeQV1zcirml9ZRVqcpPV%2B%2B2ZFjupPR41Wtdq%2F6yk9SpVrdJ69F3d16Ll3q%2BvRO4fr1e42bdek5pOb9a%2FVrurKS99my0pbDMx0MXWI9fir9uHUL6WhC9HY%2BUu7yfG%2F9sxCW6h2ubvzqbpHZVUlyXXq5V6XzCKUCFrK2%2BLr7II8vT6sIUet3n%2B%2Bxx40X%2FXNFB%2FYMubET06ASTBEH9iDKcloHIPoHcn175Z5%2FfZYwWX99uXNraE1fqzu4I69ak9ar1f9alsIE42bMHe5knsfR40Jm1G4WjRxMPw%2FyO9s3D8SG%2FwyJHTR3f7DhuJZ%2FglLly9ysRZPH3zGy07BcRAgw03mYpxdgwLnwPLMzqLgpkxpHF9ufsfDnLR9cPxQf99%2FrKv657ky5r%2FRNd9iC5jJ%2FhHNQMn7NyGKe7sVjqYuXia9D33XiNmNlnVs77BF5p4diqB4%2B1LD7zcNQ0Ms9ndWh81%2F%2FOdfjw3cy%2Bid2vXa92tRFonbv7C1KZLIvHRMwnHmnIi7NOZWwPfaF1k%2Fq%2F7KIlz3%2BCK97j5OrP5%2FcqQt%2B%2FR8uzmX8eL59fvu%2FqXa8f77%2BZFrJ8%2F6yiL0%2F2FTI55DRAdhDqF1I1OjHBg%2F1fffeTx9%2BrXDshE6fYIx5cpJOq%2B%2F0Mw%2FRcoq0U9dr3fqa933JdWQUPGPr0J6%2FVj5%2BlFDCKZFLp06vsEguezBbion5%2FlMRhGy%2FBEJnjxfojguL%2BfTsTR2kvtcO%2FdHYfBGZ32O6urKRDiFjuvBJg%2FYuySk0%2FViCPt249H2%2BSXDgABa5P3%2FJjVj72%2F%2BcqhvteP%2Fw2JNPay%2FpF0Unr8m9%2B61y99lFI8mb777PVu2Nid%2Fd333Xmk%2Frk%2Flu%2Byl0Zy%2B3T096X%2BXuvMXd9rlzE%2Fq%2FyXP3V%2B9akFPTk9HYPySS%2FwX7Yz9mburDBBoUk%2F%2FaJ47Dk2cqcdfKoIn35xLklt%2Fv0TLdvvcuvFkVqjuTP5Du%2FshZMvten6Xrj6vb%2F4TFVfdIxHdXu8hcsK9Ux%2BGiPuvsw7F38l%2Fk400NLq9vnqXdPzP6R0k%2FouVM%2B1yKuV5fuhD%2BX2evoJs%2B%2B%2Fz1%2BhJm36u%2BmV7xHuQlver9%2BXl931ZKN0pPz%2F%2Ffd1aEuFzUKz4qlbz5sQq9YqSX1s1%2BryClfhDJuQlm792ZJP%2BW78AAAhtQZpFkWoFcnFdF3UhPX69VU2111axV69VXfMb%2F%2Bsb475O1i4Jeiu64ru7u6tTJNkm8Ie9b0ev4PzXKvfgklHnYJA8ve7Vvi17FeO3OCulMna9VCdBLsPt%2BSsv1%2BuXzVoRV1cpf3vPX4371viMYe%2BQPman6yo8EstludAvuxvbSC8wzmhHn1tVOs1%2FX4ItxlvbhCyfdf%2Fh%2BzhwZrp0VIpffQqd20gfjRI%3D&media_id=1254206535166763008&segment_index=39" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:16 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:16 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_XFZqN0hLumLDGyS7QRh3jA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:16 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113624207302; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:16 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "11f90319f8e6ffa9b90c699b67ceaeb0", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19913", - "x-rate-limit-reset": "1587864356", - "x-response-time": "38", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00b5d028003c5e89", - "x-tsa-request-body-time": "66", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"3hAPCbV0ZqoOz6k3FLpOlUfkbH0%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=Z1HmD%2FkqPlff6v83V8V0Z3zE93asr16XVev1YviLy%2F0bL85mPl0u62%2Fa5xAuY1arv7bmkXfto%2Bvkr0TvCDu1dXr74n4T%2BarsUT%2BvROyXWvXZ6lwLZf9S3XfJy3eKJ%2BK%2FXqh35plzcuieSvdr3po506iDMfIn8Xcs8faP%2Bfv57pq9Hb9ekFdcytXrX61cjd9rLuua%2Bby%2FzGw4yziPa8vs3mv2%2FKoV%2BP1Xz1aOdK6VpLv1ZP6vJE6XPDhJMGVOcW3GUP5PlFrz9Taja%2F%2BT338Iz8EZeQ9syY9sxQy4d6kQQp56kM%2Bh5BeMMVXjLVFP9byeP5WM1Cf3d0DUNfZheYvbUFqPlTkgrssItXeDjNhCZNM44ZcDiWpFeJ9U6frFWq1XNfEdoSYFE%2FcvaFhDjhzagzZ6DfNSvpMjjL50vopW29Aq6mhcoYHZJ02baLDuN5d5I9JeOvtaXS%2FTHZfebjyktj2jGmcxZe7yev%2BIEXSQM5mD75b2Og7W4161lx8lwF5Pf1oRyNUk%2Bv%2FINNVn2EOMsuQ9luwg5CVlOEqBiYtPmYyWlu2JiwaCaQWEctvJ7d%2FXfgj8hFURUFdDokv6TEiO%2B5XuVFJe8n05Vdh%2FY72Ay0pDgPWvBR1tR0fXyfG64XMatirAd6c8GYEL%2BXDF%2BOg8Bcr9zbh38nd2sdO%2BpmDiI%2BUtcU3wjX63tqJEm175c%2FBIV33yfrpOmFzQ9PL7uGBIKxk23wjwXTye2d7hMkQ%2BP8PJdD5YRtBWSo%2FjYwoD474%2F%2BT91o8s3IRGkHzy0DxylPgtPGPfCFnU0bAjLb2IxPpkpYMHalu4cyeTkFaDmp3P%2FEEdzwa%2FNLtU%2FSrBf14LIYI7bxojwrn1a6jI2fl8qavDWPJOganSMsyT%2Fho7htD09Al%2BxB3j1yfv0pSOgUefkns6lSgwlY2aYrOIGNTZCNgvNv%2BTyI6fEXaRlGMV9fYZ6Rd5Vh9bj%2BT%2BdUsh73k%2Fv3FCI7qIHbTGjXqBCcOWNQev8R7hWQlSpnp2%2BRKGma%2B5LZgIXukP%2BWX396kvpj3pu3CtNMz%2BnRkujUdfLDX%2Bq8RLRguO%2B3kjV6hmXC4Vdq8k343p%2FnPF9roxc7%2FWKsXW%2FfFNxd%2Btb53V5H9ViX1UmjQ8IMwek6TjGLHDgNvnSHPcqQaZANU8cQ%2F8TRoMVgj%2FF2KRDVXTD7dFPheYlDzUoHlDAabFs4QDKr%2FWuev4bdp%2B0N7qMIaav7BNt3Cj6%2FhU3k%2BPb33enbNJeIc7YY0rWfL%2FzIhyWtRZ932RUkvuS1gkM%2BPecfC3d7upu%2BEedxuHvc5U%2Fzr4YdfvJnrUi%2FVevTqpHPvFUb5XnES0TheDMJD5PSl8RKQbzbvbuUpQgDGQWYF85lHxIcjQ5%2Fv1XLvsKlZtUtVUPuL%2F7XLs9fxuW1H8KwV59Uyf8weqlogb%2FF1Eo06V8r%2Fk%2Fen2S2DJcXzj8PpUJhBxg1qDQoYBB%2FWSZQ05L%2F2EN6mp8mfwr5tOVaPNprGczjF1%2FL7u6QKPNQPIxXhov%2FfnsPaijr39wR%2BO%2B79Ce8tWJqXu75a8ojd%2FvapL%2F0Q4NtfEEfhs6DhDg5ZvwQNLOv6auCQW%2B2mN%2FZxy%2BVQTDvavs5V9iuiUjJ%2BTb0cUs753%2FtFw2%2FtrDh10SyJJa%2F8V3PUbNvsHL%2FXhY3DAxF60gwVwzX%2Fy%2BXXgnFhz8gnq%2BBNuH0fy%2FOZU0UkDmQJG%2FzrHTF%2B6uFl8X3WTMos8hXe1SpFp%2FQVPp2wQ3f7Sv%2BFyIaaoMmeUsE%2F1ndcl%2FT4apEEB1xg0cP0T1%2Bs%2FVSM9PBErX6ktZFC8VhuRNHMx3%2BFSwCnXmNBM8wz6g1dz%2F%2FE25PcuevrvJ6doRnMoevk8dGx9WoJeIcGcqVsNIZPD9QtQdDMvGogY9ntkGGfaH974%2BBDjOTuH7BDr4wmklAgNy8yj4%2FLRgQDAIEO2SguHj2LfeuIw3pN6tq7P8KzZq2xqcmsJm8v%2B93BMXZnMY88e4zgkPmu6KR1RP376yu9zCHS5f989Qiz8jWov6J675IL8fBAdPRjEpeCVsXsal%2Bnwl1FyZ7Sf7DlTZCXTWvxxIrBt7DfQZaJWcI8Fy8BJJHdezlFImTNH%2F5SLNL8N9Vcy0o%2Fc%2F2ExpA2%2Fk2rCQyHlJfNZhr4nXclR1s%2F8sdwpZe%2FJZhtnX5fCffG9mE7vV1hKUPVWW5IbZv6qptn3t1OIGH3mv7flyT7yCNQvn9DpgiGUHrjAkLRf%2FhuMDhiJEDgDpcAzWY8Kz%2F5P3esMxlo%2Bz%2FiGgbJZj7%2FnKv5VAak9%2FVxTX970rDVqMRVj6YeEvmQvIu31t5CXa%2FFzU%2BkvwVC5duzLD0m69WSq%2Frt1CIgvYypOF765zg749r%2FVqWTGPfOIPlzDuW73%2BIxoYTB5FVZnkcpBb9bshz5f7MKc%2BaFLdoXrv3WLkq9a7IbBKb23ziTdv3vT5N08n90WWi9KX%2FrNnx%2BusldZPdOqs%2Fs0EU44n%2FxBMH38eIOyYSMvx69TXU0mJfclA5%2FU%2B4t69ntP71ZiO%2B%2FkmT8g139LUiayV0xHW%2FuQVe%2FcEU8TGeWv1Yy%2F756%2BiCVvy%2Fz3Hg%2F9MhaPUGSvuvqE%2F6fIXk89%2F78Ru3QN72K9O33%2FzZiO%2B%2BZCWCtXrdcsd3q170kSC6aSrzfe6Qwl707f579G6Rd9a1AEoFJBGFBKFhQFguFhSFhIFgqFhQFQsFBsFQoJgoFguFQiU5vnr7fXz8epvPK9tTlEmTFZevO4mhxXf%2FzfGdWeIft6oB4%2FdLtV8hm28fR%2FjDVfu%2FwsdhBdqGmX4KjGnz%2Bn83PDmlB8J0BrdYmpS9NWgfPX%2FVaI%2Bk7xJ%2Bj0aynt57pX7JTa3vL2Bj7O%2Fjfx8wAlPcZTk8HnIVqOuPV1TeyY0dN98e9n%2B7mxq9qbVa1fhTEqrpxOoJQtpTUym%2BN%2F5B6%2Fz%2FzH8Tn8dMpUAEswA71nbp0KAeJ5P1WpzzyjBO0YVtXEdodVi0rSsWOSCCMudQcABJhSQ0BYLhYMBQMhoMBYiCYSBUKDULBQLBQLBUThEjxU1nvxv49Xm%2Fx4q7rXKUvZTJfttbobFqP5j900x%2BOHok4u4%2Fqg44Oz%2FQfgtX2jAgb5z4XgZ0XDy9MLDV%2BFMVl%2BrSLUcp8l5eE3Uv8cDr58GmrJqqAin9%2BpZA9DdxlCZ644faBoOf%2BqDfcO5tA%2F2q8tO3Gdh0b1PTAMcXo8uWBQXxeQw3zAHdOYs96GoxS4OQZCDi5E%2BggemaT%2F5cc%2Fquw%2FWUKDWt0vgXdVWgNbUBgHyqenykA6u786kiMqaRJJ48QXdpS6SwSuPDimFZCMr846gcAEmFJAsJAmFhIGAoGgoGA0FiIFiOFAsFQsFQoFiKJwiRzC%2Fte%2Fv765rgLovLUyVjXGXV9D4RvhtH5783b7PPq%2Fng8v5wO5I3LQ3yey7kRjA%2BB1HnNZV6PTesqcrsomfXdob43qj3JW8ouTj2ZgEfr%2FZkzt48JTE8c71NZ9jkmeha4opeG3FTIzMImxr65M69%2FGFQDQFBJ18SUZ57AVnl9nXzx1Hedb73Ldq4LxErqG4UkmvEAv7ufKDOKNIa9wAbXJ5yrqymCEmPtlnZZcDso1yUcKqUAKA%2Bz8vf35%2FhACo9phmN1KdGMLrP3PDGQJ0YYqZaNQxSTMdey1vvgzA4AEmFJBsFBsGBSFg0GAsGBMFAqJwsJAuFQsFAqFBMJRiR3I18%2Bff499bz68apxmQ0yqUjqrq%2Bh%2Fp%2FF%2FoH5891P%2FQOMwthoyWXN%2Bg8X2ziciLdM5TPM1x2qT5hBlCh791U9fu%2FG99f9P%2BtHLJg%2F%2FzCs%2F8UT19e7gbVAuwb6GtEL7e9o%2FMORbJ3uFbcisMW0zND6fx3UBrZxJLEILh%2F2KLY1O%2B37C%2B7rPN1%2FBvr0tkMf6ilHlmmpan%2FdSueX6%2BhsIVWsNs9fLThKHOiGvf7STPGoCZg%2BHj2%2BHt%2BCpgDGxK%2FPlaoES%2B38SSzLmhZOtZsbLeqj0yVm9UwOABIBSQKhQLBMLDcUhYMBoUBYSBYKhkLCQKiQKhQbCUYkeryvr9tc63eVxvRdZIl7VQl3E4G5vjozgv8Yec2%2FdU993l21v8ix%2BcsvyRwID33M%2BbmW5yv%2BgeEN%2FZUdxX9vBcq%2FgN0GiCk19f6Dfv%2B456iY%2FqNJBfnoaa4UKA6PqAiABmO1JVb8MRtct6cfWXRfHceyo7JxdzvzFi6he4qi8jo3yF4jXgf4odTT3BgnV2jEZ5r6RKKyEMWmOnMoFNJTXELszcQD8iXu7p6uGHU74DPojaqPOBIpn9vZRouyyF5ZVlP2d4SrC9LzJ%2B6gHAASIUkCwUIoUCwoC4WDYaDAXCwUE4WCgVCgSCYUMoTCoRK8Z1zO535rHj68cZLxZd7pVVck1U4HHk0853vTu6vq%2B6D3fgxJPZ%2FqFCs9bmKo3InsBnRDK5RBjf2eQFA%2Bbg9FAPyrhIBGt4AgYeXjNL178P5Ue%2FpIx00HcrhEZ9kXZWbVyC%2Fsd4pNoyqWRZ5L59T6e2rU5%2Bq2xAar4ZnsSusJ6013rpE5T1CfCuKKtwEC%2FbcfC%2BBpSkPSt5HzH4weAWnjwKFlMEKktsWEDDKc5%2FwThcYLAcASYUkOxaHAWEgmC4VCwUEYUCokCoUCYlCJXKSu5r54173mrqpx3a3Hq2TL1dReh%2Fo1jwO%2B9jo3bn4Sd3R5r29P8ijgTOjoorhfbv9DyhwpaAYK3k5ypOu7afwn2%2F5TxnyTEFx74g6n3n%2FdSPL%2BvSscvxBgFM9bb%2F7%2FKK6Oh8xhMa4yn4fzibnntDcYQZn5p9C4N5SOJycem8TziJd%2FnCiv7b8T0F92NSv53Lzn7cLttN7ZpjfP0j2r5eGZm%2FHL32KslSOPgla71leGSaSekuk9m0Jp3ZEfYmDgAACJVBmkYRigV10hddq5XrFQj7u69ev1zFzrXyK5%2Btf%2FrB0b%2Btf%2FXf612rH%2F%2FffakUVrVrlJVL6yvLV%2FL243xdZSokXFKCPhHhuzhtzhzd6%2FjlyH0K6aTkRa7%2FXKt1SpUslX61XrURqrbxfRO48IwWOJq0g8%2BPyX7Fy0HGvWtDyD9ugh4BGwMHaxztXOwz488NU3a%2FyubLuk%2FRXMc9puIvlqiFe7uyGd8jj%2FvJ4q7qILK%2BzQ3fs%2BEUQTb2bOsPkvS12O%2BYu%2Bkqk6VX61eulq%2FWv1Jd361Lav71P2r8vZRD312BGel9Xu0Jrd9%2Btd0K20O6fie69Yov6mVe7Vv1fshsfIns0fa8AtUUb4M6PFdE%2FSvw0nfXUXITy%2F7uLvl5Sk3GSq11ZZSCgUow3JnifDSmYIg%2FTL6LFJV3z86tLc3r0nrljlvznIw4wj%2Fpnr42n%2FQrhTKb7wGF88pYRaoDeGGJNs%2BPyg6b8oK6RY%2FAZQbu0gPLQZlVqUkpd15PHJdMIG5WCXAXiN6%2FF46mEoD40mMkqO4t%2BWdeul7%2FWv1ru5Vfnr168TPXOlPf48Lm0i5ahA7qq22DCDjHH5Qx8eMRXSGjju%2FYbnGVd%2FOu%2BT8X8%2BqIo54sW%2FKOLb7fNTz0D0S73G2tPfOIMfBXLTBviFIwqHURNaB%2BIxGwewS3EXDGg%2FuXH0Li4%2ByHunCB7lF5PR%2FwiWMj4h9gnh5zEtM2O%2FKnwhWBuWaqh7cMlG0qYK7l9F6rq%2FdX8u%2FXptrz1i7ITc%2BSeLrki8fBUMRwf0XTvCFB2W4XIbODHbgD%2FU2se4Q6x6phzLo4loUUSgNOvyHQeAuVuE2DdLkYfpNB%2BJrAhDqW%2BV9sP2r0A6oSch4jnSyC%2B%2ByZOYfYQTBTYbPdo5tfh9fj12XsLHvd2W9ulPkj2nIqPBGI0iZlk8HJ8GBAk10hZg0S1uksI8JhcZRP6Fwn0jUOv5PC9yS4xKQuxTeUJHZgOt8V%2BG2a1ZR9ScKP7lo9%2BcK8l93Wig33PqTGflrS%2FVyflk70gQfV8eGCbto3KS1xoiKRwfs951DLX9YaPARb8%2F%2Fn9GvzLh5zw5Pi%2Bmg0RAQYglnWEufuuVYwvFyfhPkh662yXtIJ3J7OKRr8V%2Fk8Dr76z5SKIfFuP9H9YXwHZyZDs0zWpmoOC8e%2F9xHhvvdV9yL%2FsQW0NssfHBQW9Gogw0ktz3ZnyxXBDnZlx9niLSCU5EZstVHxehcmYkOkFT66xsR4DG9A7PV%2F7Mc7vnE4i%2FuttWnv9cpN%2FE%2B0M6ieH2oeLO5jXmxqslMjoCR6wN5JD0DDrCZAD%2BTEf2eFoIvAbGaK6D0WxxtbETSgh6a5urwDYeJ%2FRWpU0eCO93y5ewmVFfNnR4uzHvbT6n%2FfehL59%2BI90gtQ5S3KX5yEcuoOVQuevghaYobO9f2hdQyV7HY%2BdfY%2FqlqXLyf1c91y569Wu1b9X5tXO%2BziJaIcH7D0hIWo%2BJCysEs8thszYZIw3wdhsowCfabqcPQJn47%2Bw%2F9nNqDXEhrBsKhz%2B3I8nn%2Fk2iZ8jyfC%2FWmiSid3pSoQRmDHa%2BRrx6ecKk2Y%2F7Sn9bKJX%2FydrpmK7tafBX47KxXGDx%2FW3NCvLjgojSNeM%2BrSjxU%2F9iuCSP%2BQoQL04%2FPX6QyRGp5o9fx7vfXUVdovdJPffiNR1oyT1hD%2B72fpb4ftCMNxOGC6BDL6ZVsNrswQTDCd2oGKxMDCiVcFjCjkXRLcf%2FSFnHF1AKlu7tYqNYE5A04MDqBILe0wskew4MMv18dEgzveqTHssPNxtEUPa97ihA3TYvIvQuzlxCcMI4ObFf2bo%2FbU8Vz0mkl5y0gmaBLRfDAiP0Sp8dC%2FA1U6svh%2FJ87rQXGqFrLw8ld%2BX8IttfrTwqaz5iUJeO%2FoER4cdrHS8V4Zu59vR1q%2FQr%2BR1pB7YDdwykChbvJERHr%2FfU1TfjAk7Z0HE2CLEQQH3cd%2FhPvbD0TkrgQH%2BYpP5PJa2wT6AoO6lt3sRrJ9EfqFoTGLvPv9b3SR%2B5r7n%2FYZj2W%2BOO%2BEvdeeWHv7DRg0luSE2b1PUdIvSK7%2FhzcdEBewtF4JtPN%2F2LQKuDths5dAJfcnWv9cQk8uiNLaTj4BdnF2ranTbQ11BEG%2Fhzb0E6%2Bcd2nhoRSL42pHd%2F%2BvvxlB%2BwR0T%2FfYasQ1Y6xy%2F%2FxUCovjjRfcblfcYTDZZc18ZKzUJHx3v4nte8wiW16777705pTT51ElYY58LSNjrwPCzj6DGAw%2BPD%2BsVwzQy9gqDUiFgcfBVGTw8Zq5PGrojDXHQg%2BmUGYmQm99PtS7J8Z%2B5ZtPnvVShfHSXiJiZM3X%2FCLF2l1qG%2BoRafThGL48NunrDk9P28n5%2FRd739Ct5l4sfq8Eg3nonD4TEO%2BekIXGyuTxyy1Bfgxxs8uQ4xe5TlogH%2BsSbw3OuGxiddC7Fwm6%2Bwee07N%2B9FWOzUyYI5l9%2FrJ95l%2BxTfel%2BhdS%2FV1ZCnzdu3Dg7CXLrgzCQtF%2F0uSXcYAg3bSQdKBmhAf3Jux3r8bE7BoyWYhWaYmj3tJeSbu3J9e36H%2BXJ%2Bmp%2BTxz0nkRfhzSuvtsIfK3sVxZGbd3f32xLItcntRP%2FhEzHRDgX4hGdhGhHIPQ0Iio%2F6r5cfEgiKST8Xi2SNe9A2X%2BXFsxKpL6BGe42v1PxAoJls3vT9f1qsI%2B%2Bv9ZfrV5fFkNipcn0RLrk8N1JOZn2BgV4gmhUXmK6Jg3t89fHSWStzetd%2FNnr51pc5s9fyKB25nPX2dQbFRWYst7%2BSKz58apnBMQ%2FvGUx3JVil2TloWknjneVmmInJeIu6i8np7vocZBCfe9eq1x%2B3dEebqIxHxS4QtG%2Bjz2P9Imyfpv%2Fvl90%2Byne%2BT73qvXvu7Ym9%2FoV2w%2F5wRkj%2Fu5xOTxdIlvvcIX%2Bhb%2Fr3d1d36JhJaK%2BgI%2B%2FVL2QjM%2BeE1i4j9Zbv1ytpfv1ZlNS9z%2BAAAI5UGaRpGqBXd7%2F5a5unriOuru7vvur7790LYq1yiefpVrvta%2FWv1qvVj4v2vl7%2FViXsvDTLNJeda4rRIt22L4Er2Prp3HR1%2F33JRO947u%2FRa7V%2F1qvvif1w%2BJk0JkvS2unwrHS%2F9wBPjEsg533qmNtGhNB7NHvJUF5LY%2B10n1%2Bskh%2FOFd8AMW%2BLT%2FcHIKP8Ye0OElPk8%2FyIFnHh5e5CThF%2B%2BtPDstD5KX0Tw3a%2FbzK3Yaf3JOFvxs44KYkYM3Eevlmmnzhq96zMRgzu2evFa9Fcod2%2BJu1il6UiVtTVVtfq1evc36KcRyI2u3G1Hvfb6M5Rf8iv1CY138bX7ghx6I7j2GYcn5ocKevxkEe%2F1RW4TqqW0TpPWLu77l4iTdcK9XOFn%2FVt5K%2B3%2Beo01XS%2F%2FOcyu1P9%2Bj9dNVyClkuvXKMvv8xhounEoD5f%2FqvR8ryb0P%2BLktTOqi61VPJxdeusc%2Fq4n9WDyUWfiGFiNobaMfkhwu6cyR9V5RBh85rzhGdf0IGcutOaH6FvV1Ag91PfolVBLXrF6E1z%2FrV%2Bsq9XLuldgkI583anwUZubNLeLWqYyGmvK3uXnsmZVlGrx5rFioOwrUJzRn39BHwZQbowlaBXuHD6N5f0hM1J4N%2Bo8RMppksmfcPsS2JpjLEfUs%2FeoLGAyTo8v17wQ16oeK7upfnUqYFfdyE3xK%2F%2FVivVv1w36YJDJJF9F2vw3DV9H4OEvhKisiImJN9iZKW9310SOKPqRX56Xg%2B%2BWG7Po8SPh97sLwRSG96Sj50yfqrmQgxLto0gce9C%2BPvHCFJiTiWlB%2BS72lDuIuPerTri1xww1T%2BcNzkEdInYelk2%2FwiUH9g07UMDiI37jTIl%2BZSA4fwhKltckfEE9JHZ1FzRlNX5wZoXHO%2Bu%2FRu4Ru%2Fmr1arXpovaRqQl0ey7FUFOxOY2zTs6C5h0stSIcLPhiisTkN%2FLH6wyiia8pfJ896gm%2BFuKPCNZIz%2B7DIlnevh%2B2sbb%2BXk%2BjyRFwQYQadruJe9njrQ%2FV%2BWrBl3J4ZPguMMaP8TkQqWxSRJeSkHFoX2OORY7DoNN9WNeoiwRHPgFX5q%2FvsK1i%2BOPrpg%2BIPRydq%2F3UJbo0Dy02j9e6J3f69Vr3KvdF8Mq0mvL32xj371bnOuapEv8kK9JO8blQZlCEuJH%2FCR5DxQgGgV0WvcFBBsdGHs82eyf2%2BygwoGVI1z2MSvLzYG59%2F%2FBLolxQcvb1DMv9fZxpI7sryeF9qCDkUSrvvQ4xReHab%2B3IuU5VGSNp7%2FL6mVYTM3pXpWbhq%2Bm58ei7N26QVoGGUzdlpai1%2Fk8vTc9faHH%2F82%2BD0S4TR8r9e%2FWpBRP6%2B7X3d%2F%2BjdIpLD23MwRcFaeKFAOAMT1fVfsLcgi8IIH1uBtV1Pc8c2FsDgJ90B%2Fcn0Y3LhoJQyWZ0RAeYNuJ%2FVeDCWmfJmKAorY3L0SWX9XnsNBk8x%2F1BCJLDZd9hw2N7X%2BXhhdF%2BbPU16jrfSt17U3a%2BavNfWT72rNVj1Vhv3Dk%2BbTj6DHi7MLDAe%2BTZXvU9eveK9E%2B6xfqx86lS7r%2B6658ntqyWFxFhQY5GPghIW2dKM06%2Fd4JZJU6hyKOyug7Cy3DZT%2BMjNrw%2FLQf084ZMipkCWvxgSHbFZvt8K%2BXeI%2BasOsfK%2F%2FoEJTyquX4JKtPY6wQlvdm3wSkOMiwc5J6xkHea9t6RNZPe92ij3z0k%2BUldw2K1RL8f1Ko6VU9frcYPfs%2BD8N371UOVNUdNi%2Fy7QTXMkWctj4Kfo9z8YImtBo0LF1uj5XTfq1euV6XuvVfaN1O6Yl3%2BmQRIGBm8njfom5JQh5vHru%2FCkl6f0Ytk9qolMNicuV%2FDs1KryP0FKkcS%2F%2BNXLFzjOT5VacjQxNhspWKA64%2FrtGmmTke0Tur0g35oLQKMniYZHUWgvghOfPy7D%2FjQg93DadEUAqzl46Vn9gg8rEfHx60FT0DW7zUX7DYqilIKmUetx%2F%2BGhaQ1rYZY%2Fg399nIm%2FAGZODvDmRyr%2BA%2FWfS4sXEZcus0lV6fyfZulo7%2Bool7UX6lshL3ofyf15%2BGSUSrKfGdl6aiKUuJsbbwYEZEzDfLzZiaUPr1Zft%2Fd4rE%2FBjJiUZMZk9qXwycZPG%2FoknzMNRL7PX5E%2Brqf2rtXkMDfEEjK%2FNm2Bu9ORDOahs0x6mWHtuS7dS424hBqf3YuPjjFa%2B3koDYQaHQbG5gwGtXhTmEhjwEq67S%2FI%2F8thAy3kSO5h93vlp9xEubzsGk9n4WKFGI6huMsvX4A0g3TQNRzIEJ8%2FxOxVr3RPSd%2BTWRFNu%2BKwR58%2B3pUHCON8ny5pl%2F39hPVkkXJ6fQLejlpicg9lotPlnz2iVQIiny%2Ft2oX7SSRckGesh%2FFHmmOJEkgkZQz3df3CE1SRud3Zt7OnIQ9iTmY8ErVtuzoE5G42g1aD8XuUfmlo1CYjczPnECnL%2Bq0EiSZ5M2qoVg760VQYeMRdNDB2plJofy%2Bn1W2%2FX2USB2rm5jJ%2FObY6JETVfH1t%2F8EFz%2BIm8vyfeT49Pl9C3v7f4sVHH120S5PfXz4MImfUmzm%2F9YYx8ZfuXM9V6fFOonDAoq9T9JH0RsdHKsJjBfTCGev4CF7ve%2Fk%2BbX0V3Xk%2FF%2FBDH8fZ%2BW78v%2FqGuXusOt93Dv7tMEpMtC03eLcTgv3u7euZEMkTTDSTzJ4Vr%2B0LEu77yEZP7f1nZPc99foFgiP%2B7yYambOtP7q%2B6l0qkjsdu99QimQpL%2FJ6FZaL91OlT%2Fr3enSMMj5YfW6hzz4w9Aa%2FRh9a5y%2B%2FgQMjVQ1YZvevvhicSzs9fD9u4XeTxr0j1%2BNpQ1pC2ev04a7koorL8rPX0yKHTu3wv4h8viH%2Fa0bbJyjbB%2FOCOT48tow%2BSUZSMR8KiL8KR5c%2BTpvZMuDbRepIjNkXzUt5vd6ZKCYm6V360Xm4m8Rqvu9f2R90ny3Svs9f1SI1Aez19XY3U7Rcvrh%2BrRy36yy%2Fdeuw5aKarf1yffqvkkCHLnXyVi77l%2Bye%2F%2FVobB3k%2Bf%2F9EevV8n3%2Busv76618T9ZbovzAh925TsUKu7z5wAACJVBmkcRygV1aF9%2BvV6vd3c1qxXrXurfqRMv%2FfU69U8nq5fq5W6pk%2FXqur7WLur%2BWrXqyeFOtOsVMRnjr0vzTz4%3D&media_id=1254206535166763008&segment_index=40" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:16 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:16 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_B+U5CBri0wLopheYxCA+Qg==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:16 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113689601206; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:16 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "bd4faddebcadd8a630c4157c84ff8462", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19912", - "x-rate-limit-reset": "1587864356", - "x-response-time": "38", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "0038f9c800bb6c95", - "x-tsa-request-body-time": "63", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"ygio3ywPYDgPQxoXkiEzieIks9o%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=fKjNo4CpcnuQuSp5wceSGp4SvpUMnovqFL3%2BsVS99%2FEr18q5VlrB2rH61L6tXr3OciqWfHNfJ%2BtP2Iw9i%2BsEv9%2BZAhox1rhnRgl8yJewzjQQNwJX6ufsk%2BNmTVHrEUg3PR9TGhwF%2F%2F8fbtDJc72UxG%2FcEdBjfN7H4b5bQTuR42%2B%2F6tF93d30ua7qmltWvlVy7rL76zimPjat31%2FXlyKOrsNibvW1Lf5M9fHJ2fV4ISDpc33GCGrR6u5vXLp%2F1lEevSzq1VWT7hf%2Fb0hUvc518%2Bt%2FzkX0hkz9v9oSfSevdr1dL2OJuumlu8uT17lXq9fVfgv6cGHsEZkDSlDAXSbE%2FovVanvE%2B%2FVeq1Yq168I1Ok91fcm0bgP%2BloCk%2B%2FThEp8uFzusu9MjQkZOomXiUNemR3u1y%2BarViSeS1ZJavd%2FrUsurdEw07QK%2B0nm1uWlMomHYKpBE%2BlN7CCpLzjjghZyDWT1%2FSdQRYE0l3pOiv2HDZB4Pz0V2k01St19iYeMszMqihKFYaJRPLd9%2Fo9VaxSWrpifn%2F2tdF1EqxtzQwbmy0VdcOx%2BkEjvGabRUVL4bvYIDX5iI%2FqiRd%2B1Ln12ZPDS8Ly%2FuLfYDTE27Nq6GmN2cP0NOK0DP9GTS652J%2BbMxJ4tkpp%2Ft8K2D5hrKYspySQT6PYof%2FfJ9%2F6M%2BlXCta0OGfhuIrAa%2BmEv%2FTMn6TpuW0NMvVpkhxiq1qmhS65J4Jpe%2FFUPXNy338sty%2BhLryfwiazRHuszGIeg8RhyYMYIex%2FjNVj2ATlxPgOtroDVHpSJWTC5r0x8YsVAx8v%2FF03TZT%2Bz3QrJhq6db%2BlSVDPe%2FYZEhr76%2FHNmN3sOFe7r9NDLqFeRfljxD27rNj1m8yGF4gOwvx9l5lNz4lkdK60ZP3tzQ3Dybhg9HqNS9dG%2BTCEd9glK5yWUfBrl7%2B9p1pl7WUL3oE9udnU2hxNSpueS6urmFLxC%2BZ8Z135JiAZ%2BWfgFvNGel%2BIzyFmYKrcMG6a7BOcaEqnjVvd2ZPOt8Mk3pU1zVw9ovIf9gv0mCDaGCjxL52%2BwYbiREVp5b9z4Zu1AFKEWhAoqN%2BEbBgToIz7DNmu4%2F04io7BEe7djcXhcR5mJmNZXxxOmfW3aHHGWr74w17PTTfuFbBtK2WYmv34%2Bu5PXeishrmz2FblIPIkjggLlGCFp9v%2Bwrj769pdHqdNcltcnwu7hrje3jFfbCX2Z9hXgf7Jf692lMvptMgUbeOLYc04lffBNrG7u%2B%2F0Q133JX9cI1tomXYXJ5L5j18EEH8EDLOr9vgINUb%2Bl%2Bz1bbhoSy%2F2cslFhsLGqvL6hodj2hPd7cs5tk4yag8uOon9mvvR0eUGdWsv2emEckq%2F3drhtyLvtHc7OZMfoMNxSykz7nwfDeH2wNtafLWHUEZ3d6eS7nktav6z7ZWGRWq5TThw1fgZmIMwvsM5DRxg7BAw5g7j%2FZyvctKdLt%2F7OaGEq%2BhyakSdBKBsUT1Hs%2FDsEHk%2Bn6cq78vs4ln8umJ7BKRyEUDoMdarWuvaChOzk19EiREfyw0Pae7OY0OGvyeX1nFOfsINpq%2FZ8UqNsqXfGRPs%2BC48CDwH%2FWrgu8co80BjLvz19GmHu7anhDReYFd3%2Br1ctoTXl3kfZxhrR278MqU%2BzkODowZQkP8nl0dWcq%2FMrsx4r6kbusol4Ykx727SPB9AvFab3u5mq6gZAynW%2BirvOV37BUjqLVnGbJoTQX%2FnOtDfIMnvi%2Bjs4nL8Y9%2FYX401yjl1QfWPvuRM5eg6mIsiLYcvZjpdL10pYOX9nFasSq7n%2Bw0LPEOMrupnNW5Ibe3e8qIzkX4ENJc9hwiEbp%2BlRWl9FasT4j73G6KwrI31%2BUVu%2FL06hUkMIkMAexnScFeQl429wgPyeH19nKuFI1%2F0dAwNXkgq%2FTqKkV%2FRy9nvjd%2B1%2F7OJX8zCs9K3LOgzw9DctfIj6Td%2Fo884bxd3PD2c1UZJMSoZPt8NbvVNfJ%2BHEngfS%2FXZcfEC8nhX4bxh%2FDD7zimh0ipZ%2B6sRCdntFOnDTLejnyr32SDtmS9hXjDVVvRJo1hzlf7dMGBWtRsuu%2BFE7HyBIcHwbVcvmfuUSyw9lyWjVEeQ77rIuvvr7Cwrd8%2BHhKH5Yka4Q5C3vEBRkZ0i7WwV22GlowrxHnoUQEoNRVnuIZFqLa%2Fs9fzImo85%2Fj4cRPrkvpyw50BgZ4a%2FjiRqvPoN8O80Rrg%2Br%2FrOUoPlU4yRdhsh4Wq%2FLBDMmmOu57C%2FJ5Pz5lVp6T30TYsuVdmLcIuL0t%2B%2BwsZbYHebj56mUmh%2FyoXKRLb7Dk1nc%2BU%2BUkHEM732Ug5TnzeCHcIkfkmOzZ3wj2vcq9%2Biv7E9E%2Fq3y%2BJ99%2BQnGWmhbDgyN3OuZM%2Bp%2F5fOr6%2FBDCPAlH9jJ971hssaGUlt64SO5z%2FJ7X%2BfL%2BRUND8v0uzl756KNHr2CPdKxrSKw0TPg35h6k1r8n0RUVOCeu6Ng3tt3MQuT4%2BfR4sW793S2CO73Sv2CgVDSZvx%2FwqudPoyzXtc%2B1dlDtZ%2Ff69t3MTPnWDATu76angv%2FLyeCbe2ixaHowqV%2FuI%2Fz0Nw1JZBRB4Gvp9evMgX56YQDDEz3%2FjyzHDRx4liD2%2Bmp%2F3E9beUiYljSXbdjk%2B33%2FOgUZ%2B9b3v7gt3pvd3ekCPdUnPdETL5ta3f50I0imPBov35Fu97x5oyhHRmYyEjktc0PJe16161Pk%2BfU3ui%2B%2Bt6V%2B4v6hC4Qu9TfRf83Vh339hYST97zjxlMKyJ%2F2L9L1cl%2Bi9wjqWX33urFcvt33KeCTuWncv0G9m7sPyantYu0Jb0prWu69X6e2R4M6KWLjf0rUv69WK382T1rqq1OlO39RAwS5e76gAABW9BmkeR6gV%2FoXly9%2FE9%2F9%2F%2F%2Fr3f%2F139frl3%2FyrXV38Sp0%2F7%2FWu%2F%2F%2B%2F%2F%2BQvv4QVj9WBKT5vmqmV65uvJ4f%2FyLLJ8%2F9Um25qiIvd9q%2FUiQeJFC%2BBrU3OJQlYO%2B3u2Ir0XX612rpaEFZ9K9E%2FP%2F9aurteq1Y7WpfV%2F1rvtEh5PH7PJBNpP5%2FzkDcdaHkHqNyPp%2Fk%2BNrsEOQIDCFgXzy8T0PbsLCIaX%2FLIZMaJfd0rd1MRV3v32ixj51f9WP1yu167riZulrvvd9E%2FZcxK%2BlenfxKv%2Brl7EeicPJQrtnUnfutSc%2FT91a1%2BrHawS1lHSryqH6PVXXEdJ3rm8UvVzo7d9UnPLxFVVX32tcDjen7mMklq6FfMnSX0j9WFdc8o5cpvWWO28JCeP%2FWWit7o2v0eV%2BIFRYosRF7F%2BGbnu6hvrq0f9%2BrpPVruvWrtWMV96FxZpf5%2F%2BCWO3Pc2Gpfll%2FXc150XEo%2BX4sQzanGsmDhCuxMTfQ9mKW0Jq8L%2Fl8RXK%2B16pVbnl3Xpalg3FVAkNRhKwexeHYKJ4c8ENcLJxS8u3wvMw5kGVmxMeEYGZeiaga%2Fr3%2FBCcea%2F7lOI6PtEP%2Fn2%2BTmYaxuT0%2FwuXHxJ1bu6%2FhFphPjQlewbKwZaNIKy%2FTRXvHZcme7n5wRmm9Ysnu79ByHkS3uDaAUHhEMX6%2Fk9nLkwuSOOgoFfHmrtX%2FWGEVXxTKyKP4fvQK4QYJp5DT7q6A%2BMi8Ssy7JPs4lf4bwx9UV%2BJBIaw4LMmMyemXqC4khBDSB0Q40IhpwYF9G5ijAgPRcpSDaZx%2Bv32Q58CNnnHzuuOf7C%2FKMvP42gX9zQ2j1Py%2BT44d%2BiPXrhV6BNu7QzLY66c%2FsEQ1GcMBlxnYSJAO%2F7lvL%2Fs1zF371ct7vJ6v%2F19kx28aQWLjijxZbd7no935a5c%2FOINRvgieHQZ2J7BpO99R%2BTsz3snb99o8V%2BvVa5ScRXJV991faFV33333333332UTjpEq332C3xDkZEw08NMdhblog6vhPjbvtU6PhD0eNdnHL9Y6Pg77KduNi95PiI%2F77CRtymgqmX999nEuP2xxK32YQhRYuyD2n9oU5k%2BDr%2FtZdm45EqyFvu8mqe%2FQlyR%2Bq11SX5UcQsI3fg%2F5PL%2F7PX8qsaE%2B7%2B%2B90loWdu%2B%2B%2B0FNd9nHr4x%2F%2B%2ByccBwMAeyiobd4r07fZTh1LX%2Fst7uS7WHejvVrVWj15V2hXc6Et32URu%2BflEEhxLgtdAiWE7h0Z%2B%2B%2BzWnOGfaPrblhckgYDOGY0me%2BGae3K%2F2C0s8Pc7HF27Ahsx9nsM71%2FaNXZtEmy2XDSw%2BzoL2A514bnq%2Bs8ypf9hzOm%2Bo9Lq%2F77777BGLPjOweU3rKs3HPLfrXtd9oRlz998%2B5rPUsY26f9mpYfESZvs9fhxx8e%2B%2B8nj%2B0isNlIVITr7DUdQcHZnelP77BIW4cce2O%2BxxmBMh1DgK3dCuF%2BTwk3yzjO9G4kt5WKb97Nx2x3O1%2Flbz%2BJJuxQjlLSmp32hOI5%2B%2FNVrusf3JfaFP3q82EzBSeilJvCG%2B%2BwR3uXsNosx2azv3zvTfnBLd75kjTCh15zGe7yeG%2BpBeHZ%2Fv77XXKERTdGsmfj%2FqFfvZ92bjnpqfMJdN0%2B%2Bl0ilvfLq%2BvV7zau1V95Ppr3yeD%2F9giM7G7GzJ4e%2BelD0Q0f%2BTydXw5Y311Mv%2BT06XLTfo1PXzLTMHW2iJnkuz1WPDY%2F28mfG6vi%2B1f9e4%2FJ8eW%2B36vt3Tk%2B0JahSzeiyrVYKi1PZPH%2F7759GvZhWW%2F3d%2FZylaMpCtE%2F2r%2B0eDtT1XUTz9kGMyknujdX8TVjj6lQnKsVkv9a7WXdwwI6Pq%2BP8bVzmnG2V%2FfcnVXdS95PLy1AAAB8NBmkgSCgVz3dxXSFy6VWJbkur%2BO6P7v1qbmku7VvzmX82tbR%2FfnsfwP6X617qRGaNzYI3mPn7onlX9eithImtr%2Fa3L9XdqnaFK%2FSWXzXatUq%2FKvFL1XPVo0Gx8E5TU8977dQvOwY3clJ4p%2BnohrvJ5tfQVnJAjZl5sxfLO36ceaQ0SL9xlw1KyfEnT87Jlwe3lBGUfCVVdhsN93ZqwxgqYleRHUpqJ9FTcBIFZPz%2FiL%2BaYnjT%2F5vaCHUltdy11MXHnx9nghu1mzxDiLRa7XpOlNVazHdcRdd3%2Brl%2BrhcvrodC%2FN65B3dct3ehN3P65dq13XolV3l%2BnrChIw107dnkvWvsnS6%2BXRQS5faQUCseurQnK6LVqu6u1cxyulRLm4tek9WkeTizcF%2FOsYrPkRvzLP2hP9NmQsUHr%2FS1o%2Fz0k8X7T%2FR2qif16b1ik9YpOaS6u70aouzbm%2FgkFWabWt1JAqsJRqwbSXetIDHxF%2BPvtjbkuN9wGwPqCg%2BDbaLzkFKOZPYv8YaRSHGLjRsv0EafKQV7WiRMlkhU9KMpCpJbtHf3VgrWvdau%2B6q7X%2Fa1IK3V3TL1ZJubFsVoEBsd92cuc3HS0MWUYWCSIhj9QJNtythurJ4vdmWT0dc7ElZg774lGSl5f9YgRGzVpDoI5slMhL0FTbNItONs0TDyu9v69QrZpVWDHmvVhRqKoMwg0Gf5PqzpNQQ23Vxeozu%2B7qaksFA%2F7q3JRQSg3jGrDQxQ2VhFpzXKMMeu8%2FHfV1oTVevd3T%2FrFEao5byf8n50VUCQYFen9bvFEA3wUjAhqRgoZ9LAwL432Ft7dZcr8XzLppn%2FTQl%2BSyeWknYJCZaHhAqoegYSj5xkDfiUsJR64W1FCrhVKKBaP6yskEPQMts2niYuGYRAfp9tU%2B7%2B4YvOSNuMkRa0L%2BC3jjpawkVmPOD7kRck9nfx1wxebvmoaj39Q10iKFjOlrH7iqSrr2Xd80Qjv778v1MRnBGZkF%2BVZUCju27cua5w0dzw1jn%2F8nvbaknIv1GSkxcn8muJQRvvHyv%2BeDexkajYb%2B0xZtZu%2B72700RBmFlbjrg1hn%2Fl%2BieVFY7BOaOpiP2IsdDRb7hk5oOL6Tst3xR8ccz%2FOCWiaaqzntLk%2FTLW8njVtKFTP0dq4mtyXzX5bWf%2BojTppBqhRcppr0lShWOvv7Rbs1OaDej%2Fd0%2BC7xROy3JQl1VSK351TSeuUrvsnz9OC4Y2b2UBHrYG8%2B2e2a8kTOP4yu5bnhG2KlWxUxIw8%2FHwVK8HgNW6y99PRi433ndNvl%2Fvrd0TNLzrFtsz376cnlOJ7%2BUyFEua1KjmcfZmfeKKStxYZ4zpWnPhFwle%2B%2BSip5LXpJ16rXqxWS0eLxXUI%2B22wVDrK8fJE9JO2A6Lgbht9YVvzeCuEZsoHUI2seChfXgwhiTH5ZXUOL5KCaroL7%2FPXhxOp%2F4Vt3JlVQyiyjAINiPnGjJhCxP6Y%2Bld93d9LacFJ0pUuRFY0U1LnYVIwZSSNg8B%2FtAfzV5Kg9Q7udW%2F27hkg%2FJDZYaDi3h%2FTboGY%2FuGx%2BVhHDMplCWGuWBqcn8WKdrd%2BlpT4PsoqMe3aDkI%2B%2BKkIHxKjNbAadLJSpqU9n89foBsQz7o2jlX8LqLl9eriJifP9eTT%2FKZ37f0PkLmfHsSeN1kZzd8wYCRWPiQ7qKjlVFDCfevEh8nj2pwmcywa4kOfqHaOJw%2BGLa%2BHZqVd9RbgkE7jwqnHoNjL7xqM1YwMg2SY5RS%2F9PVnNr6JEWDH1JJostX5PIvI1yfsrv7ssFeVDV6Bnx776ye%2B%2BogS77nSO7y%2Bkn%2BndWRdNk8N%2Btef5et%2FXv5enUhmBJkS8nxv%2BisEZZzFj3yeXkXk9%2FrOVfG8fvfDRn5V2ZXxu7WOXbsuvOVXjPfyfG9V6hw12OpJ4cSeDrYwPg2tUHJIDrX4ZVmbAv3Xgj4yhA688snt%2FQiMbh0GwgXc8tI6M%2FxmOvk4YOjzQvN35lG9%2FQi0QEpBfGSITLL5fruhFMvF56UjH20l%2FWvQ9TUR7o7yXtD%2Fre1Ynk%2FtdoUQhfBf0zN49bk%2B%2F6C2%2BKqUmvsjA%2B4BWZMMr8a8Sf09go4hkWlIVvlk99P9ZNZflfzUx32K%2B3L4K4%2BSg3V95Pe%2BrBHVt9bno9a%2FT%2F7sa9vclhwRnHlX6zP%2BUmEjQGebpLcF1vCPT9Oldjv7CBbt8daG0flIKb44kZXdnzd%2Fl%2B5rv8vmkXtEb9iz7vuXFfGEX7qu4Tsnlf0LGbvRB733CVzx6Qeczl%2FffW6QZKbOuG1K%2Fro5Yvhp2NsTqr9KnbWT6Ps197t%2FetP8jBJLfLa1aCIgvd8FR5brvOzy%2BqiZZMmfxAkJ3gM8R5yCelK7KqhfkiCHv35P4gbdK99kncneq9d1NAiEUwnt5Ty92TiyDBr3VjL65WVsrVt5f6r%2B%2Fy9U%2Fr2%2Fou915MbuY%2B16gioYJ4k73OnBOIszx5lgPZCZSE2SfW0%2F5W8uRX3%2FV95ZNWj9k8fo13d99WW9318v6K76X5JmopalfURXDaJ3fZzL5jJt6kt8uGuX33LXsv1k4Lt2%2BXLCurVx7BaV2sufG6qz%2BXxmsnhdX3m6N369%2Bve2vc6seXXoSYp5e61WD6vpcPk8j4JyY7n%2FQi%2FOyvk9%2F%2BJtcu1f9eq0Iy7wAAAIOUGaSJIqBXXoX369%2BvX666u17uul79empl7p%2FdXOtY36%2FP1b9e7Xv17pP17vte7X3%2F69%2F5NX8RXr1erV666K672u1b6OR3MaHJrLI010Xj8vVICjexlxg%2BzpAUcCfeN8uA42XXc7u0Xu8d%2FtW8wr9VK0lrU9q5I88%2FnCuJzbwIN%2FZfxY%2BiTLtrgaklEXYZIq7D6jC4ZP52CvDHSDAp3bjuduwYeXlw3FZeCbuNsm399bWDDP42Q2xrPsfIqmJt9ME34RNs%2FPfGjNYWH3FbT3aKz4j9e%2FVkla5XaxY7%2B%2BI%2FWr9aiPVjshnf1%2FVKUhN%2B6K2X9%2FDU%2F3cDU2rNH%2F85HwRJywnnVcn6L3pTQ%2FXq103VXrV8RXN00t3WQZu9e4Iive7a%2FYpb5%2F0JarXvT%2FVna9N6xSSXL3L667%2FXq8EJpTGx9WbVo%2FV691%2FrlydLwk%2FC1Wk9TpN69Va6yfv%2BsHclrL9FP%2FcWIyGjEOB22hay%2BU%2BaPj%2FanvyiEV%2FUIYsUH68CvifjrYF%2FdWju7vLxy0hU9arbrV%2BpeifXpRT%2BWGCcuVKgHvF4yifQtAt0G5zHNs7e4rvHx33TIQfEQc3ZDRHh2xqB%2FauUu3MvqX4QNTYyemcx9IWviZSCUgysSsJbupkR%2Byfv%2F3fUl9q9ar1erpPXqpl7y17fnhw2NCdRtYvBL95j6%2FPXSwnKZJKYZPIeIqq5rBFe8%2BGoM6tVNzidF8v%2FuGy440fXmNGLY7LjuVyT5sFt%2FL6vuFiXMShDpfwFuvjDR1a9QWccBseMRssqtA6VBx0l9l%2FE9Qxs7HZDUMRf6Xj7aQ6aWns0SMtUt7z5PFrdsIYDQTjMolNp6Imfk6e%2FR%2B8v5Okr16qauaT1dU%2FNZPBnJXKa95PrSewzKaOcoCVWUJWff%2FJ4K64KicZhLTcE%2FtJh7XK%2F3ubOg%2F22lIgU9NDpa%2F3lGIffbDAm7N704Pn3H%2Bcq%2FGbnuyIEBnIRvl7y8mI6jf6YyWUn3nfhAiMOM0VTQf%2FhxF0WNySrERXNGP0%2FerljaN%2BB%2FIIP5Y772fwXnjGu8N6nwZapU%2F%2FBFMQZxhNSXEYKiM9M1OOIMcn7tC%2BvH%2B579f0Tva8uTLDBnOIMhpkOx5t2XrkGCGRcT%2FxvaVDdBnM4wbM5zUbuKSZoUNcbPq1R0ofHkw5Ois6MMXWbTWXN2ojtpXh6epUGHtgioESFSC5J6j4n70W2F7lbQQ4rTF3ssPrMmSfyu%2BywrGT0q6fGhj%2B4ZMbeyfUc%2FH%2Fv1CWNg4q3L3vXCvagby3vp18ca0%2BtQzwd7Zu%2Bgg2P2FJ41%2F9I%2FVavWXNci3vqQju%2FBP0E0MwiZqaXAIJRbyXhqRz4AwN1b9sH%2FYhcckJmPB3xzeyeMl0x2G%2BiT0S%2FF586x0aPw1ren4v%2Bzzi4PozC490PYTEO98zHMoKIWZRzlWf%2FXXXhmnRmL99mbbdFqbw4jvJ%2FUNly0HTJKvxFKRX9FIn4LzbvDq%2Fhe0v8cKlCiadQW44Qu3evjQIH6peurRZS9LFd%2FfcjpZEXLn7QiDUV5iGCAI7JUCdq1BT7aQadt4Si%2Fm8HUcvWBQ%2Bk1%2Fk8f625Wci%2FypBpp%2BW2%2F9Xyej05P5T6Qxl8Qbksd86%2FcqjyOOe9WTyeOIOT10qvJ4E%2Bv5zrbKln5P7%2FBFDcIM%2B%2F4copWEAk4DZc9RUn9w3z5YY0if%2FOVfw7E0bzb5K9WKu9uTdFcfDRrAvWLBD9f3H%2F4cNxZ4VZ7gJwn%2F85WfmWHxsDJLYok8f61E2WhwgwUlyeHpE8Tt8Pav1TN9tgMtUyiOXBskQtcRAjh%2Bs9NK9F9ihXJ5PJ%2B%2B%2FxQ3Diep5izPk%2Fl8iC%2FjZuHBl6DHSwrMOCG4D%2F4dEeMiAhkSY%2BCxd0zoePqVjxrqfzC4T8on5PjIuzkf7RhHBjtgTG%2BqX%2BnQmqSkWQirov1l6K%2FUCLufHMvk75DKvi%2BMhBI9jbwlmuDlncra69ylHxOa2G9mMcNxs2e8nz3lii8vdUmPqDJSez3fyiAz%2BjdzYKbvvywQGDqfXtltu3Ouh4R0idJl%2BzZkoZ7HJ71%2BFeUiUa3ZZ3222zGZPFenHT%2FyqHD6mdmTKVXQehhgQ2mcZ4aBiEMpvXsSh3c4L%2FaTjOMghn4UTDiI49zGZ0RrifmYTuiR1BrxAuT618MlXdQi%2F44v0dIseT16T5Nr25N8nvt6lEbMtdhPR0n5ISeqdpKSlk8f%2BJtWkha9WobK77Hz6nXYJMPJmQWzsN1TXVFx2NmC%2Bmn%2FUevjp59H1D2Kjdjt3vuv4aiee%2FTFk3elf0C4eVQ%2B%2B7DZBCV9PaJ2lrE7tDYcEjaB9CdFhC1jVXSU8Ex8vtv11DjUBl%2ByJmXyse%2FvwXPxl5aE5eVTLrk9CO%2FNaLnd2F5wgNgRQ%2FHQew7lvX4NYZ%2FRdfnr7YzyFBfPX4Ucl%2Bo5V%2FMiGkz7%2FJivy9hqXN6%2B4JD%2F%2F29CddgnLC84vtX%2BGJNtTEnqKEEwY93ly4unP9glOT9725TXn%2FtmLd31IUx%2BhLSQz33%2BvW0%2FIR5kYGT9yGLRvk%2FNS3yfflvk9P8OHbTe48SjL4NvU6lZk9kus9fYoymOnz13NAnGBBULo3PcI9IZNlDtDhjaI3t%2Fgt3tH9iWvyTGKj3778sEm9%2B2CYpbnPEdy8pBk7S90T7wWS34%2FTiP5S7ur72Vo8XfjPjdQn2vVqpao3jdSl1tkEXlpXeS2cxfp89n0GG32hZQQ13bnPceMpML%2BkV%2FV3f%2Bi92ve0vfq%2FBJrrTy%2BTsXQrsn2b%2BXJnTl5PL%2F9%2BOzd3%2BhLyYz%2Bry33VSvV1X2vjVYnyyfS%2F%2FWVesVbrVNMn9cAAALVUGaSRJKBXV9yVVV11V1oTFN613cCPxK133331dff%2FfeTw%2F64i7Wv1fplKkvrFd9X18i10h7mzEzX60j12gVed5VITGDO8CAgYJgnrj5cCUbwP4X9ftMJymLBwnVJxt33wKPfB7fovVqveTXr12sXL2sVeinuaDRkcqRNWZVK%2F1LglwCB%2BsB8MLVW336v906zhrZPyQ%2BmpTPS5mHrBgCPnKzsD%2FDpOWmfLn5IvQ9huOslrLiUpkbM%2B0A7Vjk2C6jZDlmWGjOQQk4Lpb09tGDqrl%2BuMXTymK3PhieYy3%2B319uGUVp9fhgT0I9%2ForFk9f%2FurXsnx%2F9%2Fr2O%2BX6sdStXq3c1S%2B%2FXu17tGi6zzpTFvDOc%2FJ4f5xCm0pr%2FfYaLpu8ppFX9YsS%2B%2Bf%2Fghy0fh9hWYVCbhgPxbo7GSiQE5dTeOkM9N7eMI4EtWdCClq5V92vUKJfgi%2Fr44JVbFbcv%2F6sS30T81etfq0TklGcay32hZ07ZHv3Vo7V0vfS9fyc0l%2FNJ69XMr%2FMvVzexHzWT5qvBgbVD2rB%2FZiWpqkr%2FRVieWhaLH08loS9H6778lSpcvf6935PRHff61d3RFX%2Br%2F9%2FnLbJ6P%2BigoEbMJu8lloMG98cuZEWKmeJNe7CQJ0eoZjKDsZgfSZ81oEwNb7qD%2BuP%2FR6sctiRX9rnfrFWJ1RFf8%2Fa97qxV%2Frl7nOz%2FGs7iMrDYrkgLG2zzQdv9SagwvveMEWCHuH6%2FaWoUmH4BpG4SfXM%3D&media_id=1254206535166763008&segment_index=41" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:17 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:17 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_eyevWj4PsKP3R1fBVeLFig==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:17 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113758739987; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:17 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "831f695e92e64890edbd097ebfd39f84", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19911", - "x-rate-limit-reset": "1587864356", - "x-response-time": "36", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00d83b29000e3a6e", - "x-tsa-request-body-time": "102", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"rsHro9kKYu8TQBquyGoG1%2BxSW30%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=ERDMU9ofQt6HJRUEgSwhROJHE3Bu8LTdn9TRnGX6JLUKGvVDroMBvuj9hvmtV13VcGdnbmYU0MJu8FYuFVkpaPb0gviuL3ZgH0yfc%2BFrCSksrmJFAepkwYufIcn23X9y7U1o%2FVRNerK9Xu1InTeIOiMbCtQuTDSZlxHVAZQ2wFRaCRgmbHep%2BT8Me%2FDe5RnPdMhEPUtvRjpVvnT%2B8jsFF77HAjXudEhppIaUOoVhOMt6%2FJsv0vPQkT1aJllzLcQw0N%2F3e5aDMGB5PPvEQqZEbSYpaA%2BxXH5014r9odr%2FxFg6kkDOkm3mEBr1BhHsiHvZegMlmN2vwi89fqDFAz5KSpDLJEzqC3G52A0TAbjT%2B09zRpbBO4PyQFW6cZOOn42pUO2D3nw5JzGZprpAj0Lj6iISgrH5IpBaXaXd4dTk1%2F4e9zjiF9w3XH3Td9q5eI9WX8QdJdC2CAyM0%2BaJaYRcpjoDfKMGiqiDpfWhFMu8QGTzvJw8S1HQexN3HXNwPZ6GVUZEbh8WuBhhH%2FYkn%2F2FvXwh%2BgS%2FrdPf%2BDgKx8FyS%2Bv6cjDgl7uo4faFzIf%2FRX9wQGXsnjfzD4Bne5kzRdMJWOsClukUysHPAKvUNqN0UnxjSjFQegh%2FPItBhJ%2FS8ualx0uHZQIohmvAIaZG2DnkqwE%2Bdh%2BM7HV30D118n2buyhagh31aiVuKpTIv6eDpymo6pPoW7kCcFBEIGFeft3pVeW4ugZbp4y0dOoLDq2XAfzDCGmWfby5Q9RJ8mkGnrWu%2FL33hjAaZnI%2BttNc55ElqH39heoK6tTpFXsnXWnfJoyVa0IfwJdCX2iUdC7nGIWThh7LMwhtr%2F%2FfJ6tffYaEjWZuMU0dB7D48lEryeFdONJ3TbZjAyVUvjQWFqhKSrYNQW2DkOMB%2Fk%2Ff8GFt859goQ4Vs1tmYwZ9ZVGVKZT2vhaU%2BjHiY5rhKdg2xRw%2BwI9liz5f40mPUCMr7p1X4JzYNxYoH2mcE51AhOE2P9680i9h6gaTBucIvu6T18OYDJmL8n99OFSBN3l%2BgfDuLXxZ5dpn5oK4bZdCy2Vo8fFwOvKJwNSlY4fDurcZ9SqHa4iYmigmjJi4g5Kn%2Bvu98Js8%2BMNcZnY%2F1D0f0Dyf4w4aIZZb5xFe1MafnAgwGN77QQPBn%2BoV4aZYHf5boMx87ftfr0e%2FRkHA76z8mK69F6WyE0ksvVxUusn7umo0ldthqcNh4wKv2ANnWtfjrdX8maYwkLmf3q2Jgi8Bfd7Qi8L%2BP9R63i7kB1JSB6VCUP2WEbvdvMcHpJBVRMLDiKdYL6lbWYcrDg18uLOejP79Til4bdP%2Fqzr2Net1dg0lW0t1cb7PX82jpr3OJY5tVvhvAcnna6nEL9BuHVcTftHr4T7fPgf3elxkqE9ITz%2F%2FMVZiqg4MD8SEeGJMLRcGYSHyfav4eKvGC81oxxNocB5WNR%2BekuDdf9F335f%2FIg3fLmHOlCOxnT%2BoJESNB8mevSZSS3%2BHIrf7%2FGzFnZszC0dbwXAlhWXSaf6lhBcPoGo9E%2FqEyWDDGWlDjCZ8obH5mpbH6IP0ZeRye9tKmCMVucxl%2BCLjokLKm0twXwXK2ICUR2h752O%2B%2F7HUOQIjKNwlmGFdghPTgjnz6ipP%2FDfoZqr6MZBTA1orrsMcHBlVI%2BU%2Fr1XVo8HiP9Toz9ZzLRL9n%2FYTJnh4N5HJ7cqNhgrDOiaCAabAprqUdKLj3miCZXjAkPW%2FwR9tZeosr7mDSdoXaMfjWOmUZfem85XfZTLFh12l5xT%2FkfI%2Fv77S8OCwm0BlASfWETcv%2F26gv7h5KPaQSgABd5fDUVCpNYpUjbPJ9fuDARfTwmYUpsuV6s0f1VgvGgpUsYaeBe9GjX1XLxcHjl9U1wQm4carbjDp6cPeMETWEtCiZPRXvm9Lha8b8yyfm5Z2Sq9WvYVNYEbNgPHwcHUd42csr0DNw42e9h3OY3hvYFeXlbrBytin%2F2cqjAmdQbP6dMMGjIIbnvcjNAalF8NS4vyeP5IgW78%2F6KwTmvTdaJFzoaff3BKUGOIDnvlHxwsuzL%2B606OLWdPaW0ef%2Fdzw%2BmGjCph1fy6o7M1P%2BHOMiA6o2eHEnj6k2wrzzQOY3fMByBNUaGX7dsxmusP5l7AkZCpSDhplmL09fRol07A%2Fj4sGdGQxPUuIo4%2BkTN4P%2FneETDV6GhHUfG8EP%2Fs4MB3nS7%2BpwR%2BrEvM2J%2BOcMBuuMpTKl%2FxHNRgWUuW%2Bt8Kx3akTF7vbrDydP%2FhwoMlNSk2mJGal9Op8LItKBFYdgoKnpZY3V61V169J69cJfnf6N3Fq%2FHeTz6XDV8Ms1OCUQR0yR39nhPuBAQssj1zhKT7k7UEWEzhv077nJ9cn0m%2B4XsiHaNAjkWbxhXgO6sr%2B4bhplqPr8O31%2FrWzlgnSrR%2FY7iSODsyVhZROPsVFBBojwJ%2FdydLdfyQrJ4r1YJBuXKVfMIx8cCZ3juOu%2B0RuUXH0xm6wLPSXjjbhgOAMOJCpmGXsK71Pi8OtGOjnxHVX2JEy3hlTP8iBeaMtHMoh6malUJsv1Cfw3t64qBGV57137yaVor4Z6u0Tu17b2HNICUjiePcwZhITLv0fJ8fpBaWU%2F47wyAAJ7itF2eqXMGI8g8n7%2FiYTMNT%2Btj3bhvubzvpwiwS%2FV0GS3v38yYaUzuTPRFdv7JEvw1PR0EP%2BOmHDc8f5wqS9Pc2eF2lNV8umTjq8MTEFc0c%2FgpWwzO7%2BX%2FbwUi3vtGsPllpzsE5HvzD7vz5PZyXUJCA0kxqwgF%2BQ8xPyfv798WCUrZvjT4rWv92CLe1ly7H8nupP0hqgSCbvy3yV32req9eXV1Xsr7IMLSgtedgguwaeSnyEiYvltmklJ7PZ%2BGS0O6%2Biml5TXsFm6lYy496TtlVk%2B9%2F1%2FXnIvw0k8%2BT2%2B6WWX5fwl48P9771d0EXH577FdmUve9Pkq%2FUT%2BLYI7v9WMRab7c9o7dfpmM7%2BXtDWe3V3dZvLyr3av9eJaEP55N1ak96xM%2FXTiL7vfsLdN9pr2HFKeNpRt6vPVYgv%2FWR16F1y9rKmiK%2B%2BT0PFv6i%2B%2B9UXoZ3NSehffq1ete1TRX3f2id%2Bj3f%2Bb32qfs5O%2FEu%2FrvtHKnd13xPOjRd%2Bmvc5%2FZ9X%2BnBF7wAAAoyQZpJkmoFd83%2FxHToT01X2uV1K3zqyr%2FVq9c9Wr%2Fr1euupWk5vj0V3v81eid9%2Fa5d4pXfrh0yyrmXKncdU9VK%2B189z%2BITVb9hgmGZVacdZ%2BL7JNMkt16K0988vy8R8fJfquXsRpTcNcNtN7MIRtZ%2Fqeg1RnzXDaIM%2Fye9laY1hqZ1KxqEtGv5PFe7G2DAo8M7tweViS%2BPPrrCNgmXhhyvf2GOXMfx9cptt2f7grxzdDgIs3K2FqrfW2nC3gNbp78jtlqkV8vuLY6CFhN4ZRVVLl9q1X3LxPz%2BFj9OrF33XKr36sSS1auchJ6w1n3w03T%2B1v%2Fqyel3%2F4q7%2BWGrVXe4Jp7DbLYcdk6ceWit2iMXa%2FO7qXrqloia7rXDtWlTy9XOGbrv9gxCZ6u%2BqT1q%2FWu%2B%2B1ruqa%2FWKruWp1%2FJ9ZfjfYeJGH1vnILlwO%2B0bVmGkf%2B4rSCl3OQbOEkd1bR7j7R9yr%2BIntFaW7uS1a7WVTVq%2FYS4JCYDsuWMPs2W3iyicOra9r%2F2GxQ4XX1yd%2Fs%2F7QvonZKur6vVXJ9UR1%2BrddPLbRGFz4J8ufOu45WNyFkn0aX%2BAxlkc3MBo0lJfng8ksYlpRfSuC6YsV6VNHZt5hblJwEwyl460cv4pNuM4yP6Ckzw0hsLC3XSHCFWWoJoNpkOSz5j53ZhbvvriNiu0XLn516W75pIlayemVkpCzcOo%2FDUL40E4I5zToU%2Bvrq2NpE3RJyeG7bYKSoIPst61RcPWjGZTi7wQw1um63Pr8Kk3RlOMEUgtJadB9ljTha%2F%2FJCOWwxTTCTbHu8lMkN5G5hKLxqOJn0dZYcCeQUdOts1wH9u2G8GvKugqVhhpM7ZrRCup76sI5SQ%2B1fec0WlwHTyfvkW4Mdo32cQX6PFNRFWvX61%2Btd%2Fqxd97itw4ajuspIeNt%2FzsMeV4mF9AbA1SeA6ufX9WkHvglfAv4k4BbmRM1AffagibGixWNAajhMIIHxhzRe%2BiyI4DwIXaCtaBwF8b2B4mtIgZrhEwdiAi%2B1dTQyWJ1KSUPEb6ctggm%2FDZgqsZFBQhE9%2FR8Nl3Y5BRgfk83d%2B7u2RLNyeCybor7rJDBs%2BMHwV5EX0469OT938PyDIen%2BghbZtSKdWX0bxwHodtWC6eHaSocA0WNkR2%2FBXxhqoI4PuKinX1uysEZC8HxIaTOcuKxfk%2BFFouT9%2FUFIk5N5B4ahaX8CRuO%2FzcvjOaHUhMxBZ2dAq2DZip0HKxQ5WKkv4mWkv0cjU4vy%2Ftt192T5%2FKwwIeZBZxkICjXZgD%2F3dfQ1gh6N4vwkcqgy4%2F5aFkg8n1%2BoICSARpiSgUefl7r8qw0DulyeVKV4Wh5EDegRgaUcfFvVg6xsFJgw%2Ft8E3Hn1APuf%2FPw3Q5fUiiJYf9xR6b73k8HfUUIizJlLTI6l63Kifs5LnJM5Pr1JBCQg7OpTyX32HcaGP4bRcOjktd9yNENST%2F%2B5aEcnlkZ%2FDJfysNUpZj7W34cz171LBLeHf8bj04FmPUwNflzaLFRPXr6f8nNUtc9cu3pEr7rb7ChCBgIViduSo5eZ7njZ4%2BG0WZSVEJ%2BwtAFGv8De%2Fn47eBut%2BfFcHyBgXKA2Zk2DBHdG%2BnNvhTKgfsh8jX%2FmvchYF5AwIptBFQjfe8V%2FwQi2T7sns%2B%2BYRLg6gXvqTySvUXGiJO5JfJ9a8nYi%2B8z%2Bzd2rCJliT98SGC8IXFV60TGmX7Q%2BZaw4XGjnsce%2FP9goNHb2vQ6pRoScEPlYdzhsuXOvkfI%2B5%2B1qvXKi%2F%2FrVetVderV6L3VTKSC47n974LFgzCQ%2B97DJQ6IW5VHK%2FU4J5kZpm7uShvBB60L2WgHCJg95oFsNkj4hPqPiQcnoXqIiYnSPj8rewqULu%2FXVVD6P%2F6gRbryye6um2cq2RjLaYUYlqPYJSBWXRp7m1DREO%2BUeZjOwyQfkijPX2ED6FFTbKKH2rWaOhyQkKZPtS07BP5tcYQvxbKSDths3SCBZRCslfQ7uxpH%2Fk8tfNCQz%2BpPdRNXwR%2FLTucEd7uw3PP3fE3d16NLauCrRuX3j4gO0QG1epz1wxJL%2F8WXdM8LA0RmlOg4Jz4Nl%2Fn6Y3jbHtLm7C45LSKzzRZ%2BNoFDJ74LZSjQnepD3%2BFxiFKolUSqKzvnf%2FoOHHQQn8FCOiTHSgUI%2F2xI9l%2Bx7BVnDAZAgcLrYYP0kNNgNqRF2Pw1NuCDwM%2BzAffLGLgOLTpXlaCr%2FeX6E2PIdnQwV5VwZVPjiYNWzbG7EHjb66m7BANcow7ujwE%2BdAb%2BefpQTaRttBD4PP2FTGLwCm5BZwlvHNZmH3ix9YjLq0J7l1ZeTzk1%2B9C%2BTz6X0vox05wyR9VTDyWXoE2MCTthJ%2FX%2BFfJ%2Bdj7%2B60bfVWGyj4OB%2BuGJKP%2FnMrZs5Rr77yi93k8dewVES3uNx1M11NdnYMJhLd31O9pl%2FbmOLxgj7R29L2T2Ir8hA2kNgKIZHLS6hOCzSy8d%2BhLx4QHk9nusPcuDOVFA3HiLF2JjWPs%2Fk8NVoMZXhtiWMj1%2Bv0ZIBue7A84%2BBI2zqlrRZqamgaZMgLKaHvE3f%2B0y0VD0HeVRhlFwSRPUG728%2FQy6PqRL1hx3R4UtSwyiOamag1753KN7tg9gwLpHMR6Ohdj46Vh6GsMIrDtFcKesTr1qa%2FUhnLmUv7a4cl4%2FcMJWvsGR4FqnS%2FNbbYf2wy1L6EQiXvY3LGC1KwNx8FVWaGz4Lk%2BLrUkYGlcR7qVeO5aMoeTGYPWfl7C%2FcowZsZsIr9YwJOrw3yYSS%2BX4WX13XX4SrXJ%2B9WjkWKlO%2F%2B4kIkXvPB%2FYTEK83HK7wnzlNFV4dpWsEi9fEvcJTC7OIrl5O22b%2BwgbYMCgJAYdRATm758f2bd2Dk%2Fm6yewgJmzG6eVh%2B3sOmh0VC%2Ft8vx18notxL%2BTxa9ylLj3vaLFXonfovT%2Bcqx5cfrzDmi5y%2F0pWEY8Cp6Asg8YfjWPfbYS7t7QZsLMk8N6cKlAhrYGx3%2Bzx%2FLSCpqPA2IcHyQMBaCb3cP73NlK77sPoqbQkdbtWEnjv4wr7z0vbefH4lF0xNGzqu7732Cq77ve94MnlvucmZbJ%2F5fETS3BFWl7b2HCceN2v8cPFxOIGvdKN%2FLqfGXcpjEW2eOPK5ruzLyeu%2BIjBhc%2BYSIIDuC%2FiXTp5fyfD5aksIl%2FUEokf9AXDjLX2NuWIIELlNPwbbQ3P98l97P7Rdd6awmV3e78nlfa%2Frl3%2BteTiuvJvPhPIZgiCA3S9QSmQ37vSDVuCErj%2BXdVlsefPXZO7ew5u7T%2FWah1vhy7J8GHolhnfyeJL9hrc%2B2v3w4p%2Fye8t%2F2TAlruH%2Bv4iO%2B9O6MgzZqQl753Rvvxce9P58SfIe9FbWbd3s60WmySsXE3V%2B6Fv2rO1rzfJ5%2BfV%2FZxSjiD%2F7IWOjJ8vaLW364R5Vl71CaEMZPD3%2Ffn2KWuGr5bu%2F0JJSX6%2FIiuG7P81EpeUEMmbxcUiKW56tWT3k%2Bv%2FxH3ECj2P%2F9TXZqcik1P%2BAASoUkCoWChnDAZDQYEwVDAmC4WC4kCoUEpGCoUCJhXx%2Baq%2B%2BM3ZdLb4JWSUS0lXoai8y6%2FiPQv3%2F7z5P9W9qH2FeV8flbo15kgCYH8vl3ySE7Ptar%2BuOrJAZiDvsvqov7s0rCX182ptnxIEbLPjBpeNMajR0OEHY7Kd7%2Fjdp5OPa7nDFOM391gW%2Bg%2BG2Qh78XQuIhrPZEda%2Fr4ONVwM8VcmvbuXOEjwzfKJz9Weq96P9b%2BcL5QfPpMk5CRgU6hffpP%2BM3i%2B47%2BAnVawkjwtfA66TtW8m5FglOOvjblOJ6iLlal905Yh9vNAHASIUkEYkCx6GxEE4UEwVEgWCoUCwlEISEI08HHvDc7%2BPGgha25MZfFRHQ5r%2F2%2Fwf8WmX5VaOwj%2FXUmVW4v8mqJMx3i%2Fp2sHuXTHK4KVOOgtvt414dCWYs3po5%2FXv%2FL%2FP%2Fl4bZeuRGG3uK1t2%2FWfF%2BsPQcQ1zsUothwvfyy53XYVtgQV6PVHWd3bnuhqAQKFbLeT0AVAQJZGZqGJrxc%2F8u%2Fnbn9z%2FA7zCdBINkCHdmiGF%2BycwQ6gsgQOcr9QT7SoK5erqv6J2IMTIjVS1HCyvpM20gIAzIkKlb1mFDcxZli16g4ABHBSQTBQShYLhYKBgKBgbDQKhYKHYJiYShMQleipz3xmceLq9YmsW43kYStSJobrrTjG58dfGvy981R8bXD9Uf4tvGkd63P6Tb3Dz%2BjCrhbVQIZe9OPhUmfwP4x%2FC856vtDhONNerfVv%2FNeM89H6eDh%2FR9vS%2BsDh5KL3XKmacAZfEM%2BIgrg%2FT7GTPoJ8uKECmsEBHyCUY%2Fcn%2Fjrv7P%2FC%2Bh%2Fho9TOSrRMgUAqq9R8AhEJIg1VE%2B7oiY4KaHhqfsrp%2F6dF5fjrp%2F%2BfEjObBWUhFTpelKz3td0vGuvVwy2BwASQUkEYUG4YCwoCwYGx0EwVEgXCoZCxFCJXNPr53vrdefnWXJu0qOK2lYTqpHQ5z8%2F%2FVaK5t%2BQfA7z2XLhaMG5Qz0D8p8yy0VOqquH9y9OgnXqRtujBsPTEcbN3hup1D0aTWPOTvM77tsOFq1ftQv%2Fv8fLw%2FB%2FkENGqxaJQBg%2Fx7FlbtUFpuNfx%2BcUoS%2Fk7L838eeTy%2BP6bg6LPOBaSi%2B3sx%2FW9coXqXoO5cbDHLiaGP3vZTW479kiZrFNeRfFYC2mh7L5aamDl45nfyYANQALJfmlMkZl6KAqoACySLFeX2kLQ%2BbPfWizVXkYKSMlrVRMCUvSyA4AEaFJAsFAsFQsGAuFgoFgoGgsGAsZAsFAsFQsNwsVwiV9uvf2vv59t1ruVw2i5UvKyYJxInQ6G%2B791xd5HpK1X37nz%2FnaLPLqJf0DnKZKQ9a%2F7qe9BKt4FdDeISG3THNtVslP458drxVPOO6tL3yn4%2FtI08BlkdCXL6eohQyUI5hwlm%2Bn2pFpjgBCTldX3ZocwOa1AVYIejC%2FXMGAUBqioQLSzAvk%2BTQ5uzrAACtBXxTWVVPKvusoreqOtA81mE0hW6woi2fdjZjTeSjXnAJ%2FIAB9UJZqw8h216JnOgPLMoF2noMNBL7kCM83WNV4Xn79APdJJL1QRnsa%2Bpxx2BwAEgFJCMQwsJAsNAsGBIFgoFgoVjuEgiR4ycb3nW813U1S6lXTXJVbkrq4vQ599G%2FEfX9hJx20exP0Og6cfgur9y2eq2gPrN5v%2F9uJ6V4MSy7jNGfnbHcgOQJn9b2QFqe8udHDfpfntzfFFRHBbYvugDhvtlb9%2F1ue%2BC3eDwxntH%2FIPhj%2B79vux5ffv10%2Byi7LgZgwgZGgSoQHbJX6Zv5nnILcQqvsX0z1vzwq9dxOG%2BTRb3F2BL4PgSPvR%2BFk%2FbmuSHhnyuoAFu687Db%2F%2FPhXyo%2FbP8zHnoAD3eU6OCamuDu9OeSYV1C%2Fqx8bk15Imau2v5KqnbPAHAASwUkMYUCxoCxUGwUCoUGwoEwnCIzCIRVcb3V5rtXDa9blOO6lGSuODVjkOptq%2FP%2FceB%2FhfXuSjqP88Huo2%2B7%2B9AxJ6k27uECPO%2Bu4D2e2ndZqpCqSrbJTV5r0A%2FCu%2BCEgH1ck38w74GE2qb6jm9n%2BDo%2F7iXaf3Y34CkGFPQ%2B1fY%2Bs9LLrIeo%2FmeVcu9Wv6HDt60dQnAALvOTy9W3gpVWfa8QvO%2FjXt17qYAPJsS73mXn0rIZO%2BA7gMzBYM8ZBWJPM0xdViEpFl35T%2FjrotBy3VT2401c41IAS53xuGbsgv1%2BGnlrxqrfPdetKbydPw6K%2BJd2tpK6cEwcAAABrZBmkoSigV%2FoXFdS13Xr369Xq81rFy3Trr%2Fv%2F%2F%2F%2Fv%2F7Ut9f82rO%2F1i%2B1iq1fv42tC69X7u1yqdYL8psHYleqEsbJJjGnIJS%2F5g12b5Q87Suh%2FomcTxCQXH2X%2FE46VtpfXK%2FVj9eujf1qqI%2FWV32rn6nT3VypVf0J9Q4Siuvx1A%2BtRF9jakNe4ZwiYbKvBqkw3%2F9Aks72FyuInHsh1%2Blevp9WGSqjIkdK5VP1r%2F9Wmu%2FWqta%2BLV6%2FR9a5Pb18n174JbY5788PZPtb3ZEDe%2BdH6S0S8na12tztX9Vf9XPk%2BEouVWPDGWKX19V73q5J6rVL7q0nEyXPfutSX2r1r%2BCMm5VD1I9d%2FovTVYpavucQrTvomXW%2FRpfj8q9jTjCZ3BeUX6a9v1R8P174qS17i71VjuX1qrWrpqrRYvX9CmUvX8OHvdfzwPH4k0i9COogXJxPTd16LV0klXd5PI9erS6%2BpicMLLk%2Ft9w3PC6AYRIdy9GlHSv%2FVLzuRGqXr7nOo7OtjH%2F8Fxncv33wr1Y9QW816KNDQK2%2FQgTlp6RaXe%2FLqz0eXcunLxFF%2F%2B%2Fakn7Vx1KZw5LWZl%2F%2BwTyypR0bHsoMv39CibP1d4IuXef9d4zAH4516JxkEBi51G%2BtcNib3X2cYaOt1KV3%2FmNwO2mfiqBo2DHSFM%2BTxC3wuFa4bth8%2FcF1tH%2FqUgH8ggg%2FkEH3Ju%2F4aEtAMbhI01hmcDC%2F7nI9By%2F%2F8L70OVTG0Gsy0sPLXXJ83zLUxf%2Ffk779IOWkDLFwfc5lC4ZUVD%2BNJywlDUJ8FayhgN6ylzHflUTIKG6BaJKuUHzhze8%2BT7prwuSF0ZO%2B0rMOuZeQ%2F8F3TaZobQwMu%2B%2FU%2FKzGEjP4sLXp%2BVhWKL4f9fxl96qjsUJvyqYyeLW1%2FDRTwvyg3tYF%2F7sinFP%2FCuGZ9qBeNGG08nlfGcmkaH%2FN3eX%2FdQVY779pz0%2FtfIevoI6iWGpF1fr1bclSt2rkmXXmEPfr59q42NiAqhoXLmYXcI9%2FKVfToe76cM%2F%2FyfnbdCYELUO%2FnydCvXcd440BSf1LuCfaOf2hz3wyfi%2Fnr9Rs9%2BfTqblY0%2F3WqvRf%2FNOVcOM%2BtM%2F8t8gEXq4k%2BmX%2FyKIpKoz42%2BdHevRbG6ie8nt%2FQcCCjsz5fyMXu7Ezww6lJ%2Fl%2Bsp0KGYlloQ7DBp4ePic1Di%2BRyf%2FJ4erdk%2FiVzvWro763VcPwoZbyXKxfcMqZg%2B9M9eocHzw15LOopQ9P%2FfYpqlf69k92%2FURe1adF%2BFqBPfcpivjpL6mA%2Fnr7UELRgralv9Fe9te%2BSrXr9ekqR%2B6%2FNqwTz57vd1bPOOUbPEBOE%2F5PKtcEJeX2de2svDqLuX8WXnUDQPaoceoPk%2FUOGGabEs%2FM1HckGRw8khc7hso7J9fOhrUj9Ij6pGE8nm24g%2BGt5QkYWGbaBxc3Qz93WFGZXQ68SYxywsv33CLlWviuYLsggcvB0P8gp5A1%2Bcav4QME3%2FgjMH0mj7h8RQrpcR1zfoT116WiJCItZuhbekYxdS6dfJ7EGxWWlAYyMOD1q7q6zTbOGe9F0CLysM21kOzHgM%2FXqF97u93fMXNr30YaYRv0wRMoR7pL4weE39RxGev4%2Bl%2BMDBXieV9AZFH8V4KsUKdheKc7E%2FGZgwrhC1w%2Bi7naGA6Jbxx0TUdmE9Ug1HUztTrDnK8PqU%2FSy%2FPpJAoFrpXMKeUtNLOtc8voRlk%2B%2B%2F7PX0ZwnHB1Sfa%2FhOxnT%2BEuDoyn%2FSPXz2ZFrwSXffdyLsKKxRaG5WaO%2BxJLmLG6JrsIxymz93J7mPVjU3%2FmEZnlZ%2BTDXcf4g2UTnLzMNytSlw1p6F8pW7e1siEmbSMxmYr5Fwhel5O9Vu0JaXJXq1Xrd0LFY0vg0v3J4d25dkWnL%2F6%2FgvLlySg4qX35pjIzUDk9O999KYo2ygOdz%2BT9Tq6PKn3nSs79UTqf4cJbRH68NTi%2BtyCXvRffUkUIoMIWGZc3d%2FE%2F%2BCPkv3qOEzblizRXbdu30TL9et%2FhwpWKHXxGHxfYKyvfd2y0%2BLeuhUEsE6F933vFklXvP5VILJ%2Fb%2BQz2B9o%2FwSmfTOY5cc%3D&media_id=1254206535166763008&segment_index=42" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:18 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:18 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_6+Q4YpPWZXxDcwtJUivN+w==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:18 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113829532842; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:18 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "1c38c63d94d23ec0e727c6c785c68d0d", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19910", - "x-rate-limit-reset": "1587864356", - "x-response-time": "34", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00216fb1003b89d0", - "x-tsa-request-body-time": "100", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"V7QwdMiNKEu3fWwcR7fkuuy45Es%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=fJ97aqrGTz39FY533e6371f%2BCO78HlKI3uXdtyfEr9nxcs1%2Br%2FxF5QVQGWXjSUCHWX679%2FUFFmYf5iT76nJH3pXe1d%2BVfHquvUXyXz0r33cvoS5JaxVWveXtPXa%2F2rav9fWteK%2FRA2Ku7S%2BGVsf2i9eWjy5V%2F2r99kK9%2B%2Feok45Z9Sj%2Frr%2Bf0LfuVLN%2FonfSOW8I7aT%2BpDT0v37RzgvPVKlfkyE9%2F%2FxVZSQAAAX1QZpKkqoFf6Fv%2BvUX%2F%2BvWu69ev1qKurWD9aviVfnV%2FVWPrpffr6qtal6XK9CZLm9XPf3RrC7z19qODNGnVo71a5dr3PJct3alv1iu%2FdXv1at0R2Twfyfcnd9q%2BT73V1w3eCO975PBffs3SfRco79VoqXte7XbtXMJbr9vVrGP1fteiLq1Y6J7ZL3%2BjPv%2BkOveT9f0%2FzHveoslFYq1yq1bte6vdcu1roUVyief%2Fdq%2F6uH6v%2BvTWsEvq%2FaGdykKf26tXlonHT%2Bq%2B65lcu5II4vCH9aq%2BwSEe9%2BGaousMZPl9HrvonuJ9ffq%2Fpfqx%2BsuymxuwubeXVhHu50aBXukzqbcKaFFiOv9EQEBpjg4OgvSX34T%2BTVor9Nr9aq1avVy%2FXpvVy%2Bly6N2RFGJxn2wT4cSEV25P85x%2FoSBclxLdjBGumpr6NQQzJGVNjwyePu%2Flgrwq0krQMtX%2BgimKHWMMmGUE2HmyaLYQSRj%2FoeRKxuS%2Bfiekrk76q9CrzcXJfZjUDKyZdNTFFrDdl1b8s9fDj79iuUuYGB5P8e5IZSy%2FQP4ghCFtsqb5UknuT%2BCWjaiJIZaw8xmWl%2FywR5qIFcIUEuCKzHoo8MHv2JuuzYCPTZmpbFvd9o9S%2Bqe7rDf8vdzWCMzvy0bhCYeOc5wlcAX%2BL1vz8oICsvbHk44O2yKOk4Sy5%2FYne6nIPtiX3u8QXd73zijMGPkL8QsyenqoklCRghe%2FPf%2Fqfyenk4bnrbrl5zX%2FBNd8ueq8QUMS0FDtHqPek%2Bjcb3HH10%2BXu%2BIm5JbtX9gg3fLESw2jSBjJChL%2BWg4adhInOwqv2KE0RpUBu95PRS%2F7MZqTE9gtpLvfKyfCS7gnw8objVF452Fi0DH2pGeN06j7n3%2BovcpNAiGvYa5LBfS1j43Lr92Ts3Gx4iLvetOEB5xASF2mZfd3ceYibf4IaMbjLYMYufnXK8R5bwl6Lvlkte8TRu7pOWHrtugKGP%2B7gieHUuqpkUf6fC1eMm8xfLB9AdSKGCHDwxIxRo1VaSfRetGnkl0eG4xl%2BX6jZ7%2BXqyf1erJdu9D%2Fe76tC%2ByemS%2BLNTp6bewt5WMeaNfHO4Ei3NqsX65VKi9WRXffaLXfezoUOjXr8hDnFfXo6DZxhBrcqG7hlbz%2FqCZhgFXx8TmPgh%2FYu%2B%2B5THYi%2B0t6vvQ%2BTLnvUJ4aH5b5bkuhfvtCu7JDKdHeovCO73xtkEOgyT6bcIdQqr9oS8mJz83zyerjloxiyeVX5TLmCDUV4TLkYob42JxVAjlCAMgSeXegv7Dd51Fz44LzzMSfJflgjq%2Bw332Ql0kA6fyeG9ZzxfGRkrqQt5PB03USI8vg16V9nZBu2ZDkgga4Ivsn%2Fu8v%2B5Z6tHb9dSWTc2e0aLzyid32CTLTY7p3giFEDaQaS4OQHfZSlY3srMYcBAd4S77Id3nUUVhezCfP8%2FpJZTwv%2FbmTyf3k8%2FKqDRBoYjs653lf9uVHrw4tx%2BsIdzW6BCmdTKp77CMcESsODAzsZpHzX6e9RdCIk3i9tBn7BokDCFhxjKSHmNR%2FZJCCOL9hW7MmPZGsO8X%2BTw9UmXO58vCPkyWi9Xr1X5askvur77CRpIbxkZlLRJ7u%2BvfYJ55q7jHy3ONMNqe2vfYbyQ4P4aifGJd9nGsfam1PfZBU7HtkYDxhF2EZ%2FP5cLlPj%2FlJE2i92i92FTUZM581eeH8X33yiy3Pmjf2Ur03%2BspeT9Fg%2BXtTp3bHzDs2ZPlr77ZVpd%2F2XNS%2B%2B8nq9eFy5fe3l%2FDs6tPKa9rsERGpKe1H%2Fff6L3at32C0zBEz0b95e71hu%2B%2BUtrJdT4Ij5fOXa979hMzvpHzXoS1Za99LXdXRPX%2F78vs4rCpKYyIC2OnRv2Gi7sbKMcuYL999S5dve%2BwzvdfzTPST56p%2BxJMMUzYottLPqz1%2BO5e%2Fd3Sv3ksx93333d0KlFa9Fyr5PVL7kuze70W6GZd99yX2he%2FXWvG1rz5PB9X7%2FXPLdeteqxZf%2F65%2FnvNuyZyT39cu6f9cT3d1DvBBbBxtErvsgh5qYAAABypBmksSygV916Etfq%2FS%2F16tfr1esV%2BsZ%2BsU1yz3d%2Bsv16%2BL6Xq%2FVpPWL9Yv1ZfonVE1fKrDOew9qiGkt2jt3%2BuqtYu1yr1lLdcy1V%2Fqx8t%2BrFeuqsxDS9Kkgh0b2OcEnPSzlePCq9H7ckITM5xIv3fNe58sbL97H33KOlusV98XhJTdfZE9vzdSka64m6uSfZqiZc61o16kc13%2BiRVV3V16sV66rCGrjfkXxP6mv0bCy%2F%2F3Wj1fSsdq3TfrqTWM9ZdrX2rX5yLHl%2Fr0WpZ1ix3yrCtXkp6tYpvXD9XP16r77V%2B%2BpcN26IRL8s09r4qLFQpBBnINZPaLUvSxZPT%2F%2Be91eT1i7WK%2FXv1l%2BvV6uV6wmT%2B%2F9eSYmZg2ZM89ZzQNT9gkx0JGnlv1BDGM4soYC9agwyeT7R81LBhM0%2FzluVfQItotXVJ6xfS93%2Brd36u%2FVprPx%2BEOnPuJVGi7BHOCAM24Mnz%2Fu%2B%2Bw95qXb3Q0l8NTVgs0%2BoISu79alXiyE51G%2Bz3%2FCB4C0LasN9zf%2Bj2k9auYlek4hWVm1khs1ar%2BNkVtJPrVdddhcjLD0S9res9ZKfsNzwQ9RomNeLto5%2B%2Bx4t7vRPlY5P71LyeB6%2F2C4j6ZP2OzkXHcPNZulYueuNRFeM2PaP3bnQInyeS6theweVRexqmWkrHk9e55rV7FfEXN3exfs5oLDVmv7Ifd5Ph%2FwX42DjiKis%2BrOaKXyeXr9hq60i342CmgXGT70N%2BpvBOSOpiXHFioXdhk6wYlB6XTsEIP9P7c3nKbl%2FJJSS99gk3umyfMb9HEp7zvjqJnsKvolXSesH6t%2Bs%2FaIxeN5Pv9e%2FCHvrXuwuaTLG4CNpwG%2BcgR%2Fd7XNURIM3kPyfRP2FuA7Um%2FCCh6CVsVJhQMn8nh%2FYI58%2FavDF3YG735cRh%2FWQWwMyR%2FYKBD72neDsLU3zUNS9TVmydQ%2Fr7DmVeVcg5hmkf9gh3f3ZfL9nr%2BNPVxmp1Nex%2FoTXZxGz8xYcSfZ%2FvmWgN3kqQuajyftZdy%2BvVe3if16rqG8n7%2FLk8v%2FvrIK8bLq%2B6BDObXvroJhbeCM5ckDST7hwS0Ig20q9Vs7TXd6wdm2N9C5MtvQdHYMCNPMR%2F9vG0HrmgZj5P43LEwYD3fSSsGv82rJ7t%2FoVL9X5R1tI5DiX9DcwR84vj8rH5UNaBAPlBh3d32HoNQ0nEosTNiM3oS3jP6MzjiNuTo8x932cRF%2BNJvs6RNbOwyViDUn2twss2BfTY4JHMsfEhr%2BzSMJu%2Fr2c6cPLhUcLctgtFPenHBL2yea2S4bKNgn%2BuPpcc4Yg3pHtG1k%2BS1xENGZ%2BtVX9kPRPq8OCcxl1DLcf%2BtcbsTs6IhB4ae78oB1jRooGDH3eKzEo4ON4VnTknFamVxu5%2FcS4eGvfBLqjQUGUHJ9fwi%2BxZuUMG3tnUev1gY2lMosZN1SzT%2FoTFcTk8S8kRMId78NCQQi3ffJ7r5On6sEgxJcgtHhnobwfeMiT9YIyoORRw0VhwzugH1LCyKt%2F0LZk%2BuucNGcoQDIoWNXNL%2BwRFhmX6fy76TRWQwRLqY5z5oKyxT7vUcEP46JD9hTmzhu0NSO%2Fnb4ZP5PssIxoUjhS%2BRUNsuhFUD5o6XsfNS0WikCzHCi3BtjMvX4ygxoyXCEx2zHaNDTvT3aoscny%2Bvzj5c8kHbz5fLpJUotmgbyXJd4R1L2CEU9fd7ddLmWilFaCaakDAt3J5VkqFqgYrvpOuw0YRMT4%2BTzWraJGDhPsywRw2s%2F399yahymXNfmWkUUpqG7wVf%2FXy0ZqbnJ%2FGb7hw9W0Mt84SLSUf%2BcjyQHLCFon3zheOiIs9%2Bf36uguuL%2FTm%2FgkK1M5tzXWMs74d3LU1E7Qbu42SPiDLxIZny%2BcnSqux7HVvzs%2ByOunbgjJjiZvLl72ZPm%2Bbwj%2Bi1%2Bi9JdXvye6J9C%2BbkFFC%2BYP9gj7axZPzXwtCBv8%2FSp3%2BPj6VpCwkPpT2Giu%2BrFDDfNwcFXpv9%2Bob7uv6EG7963v8SVRF%2BWm%2BdX7OSvhvu2o8qfK%2BaFkPnbvk9tryC4I93P%2BL%2B1fnGCrvmOSmMFWlu7G3JdGSuHKQ5cfu9kb%2F2epNT%2F5Lvd7%2FFbu93f6Es%2FBHveuK9ZtmEQ0rn%2BhcV2bd6vtW49a4%2Fr7IIDLV0vlDRL2mfhy2Xk%2BJXUkt35Pzrdlocvk9nvw5ddfnsPNdq%2FYavuvyrK2EnyvuL6pSZ08p5RR3lpR71EPTuDJwpPL0mgT%2BNUuZjSZKG9NEl2TC778yyfOTL62yzR%2Fydlvy98u8RXi62yHe%2FUbc9Oim%2F0Vir8M4i1qpy3f3xOj8nwTb5BB8%2Bo9fQYd7T2%2BCPu7jPXL4lIbqlfdgiFRrHy3F%2FfKr8uxyIEvad738R%2FQlpMeEPCP9X7WDnqPXqaq1y85N7qP5SEYMdX3ZUsHMiPL3UqVEU11fL2CEYDrz9zgnvgd67o7nTAAAG50GaS5LqBXXoXXd30vUtfrUl1d3Na4dy8J%2FItf9%2FDXg2qZO%2B1l%2BtfrFfrlLfFySZScdZS%2F%2BdLXy9oten%2BCg2AdtV9PBIuHZvuK7svd381X7Fo9fS1X1xHfa1zrX6sSc03q13WmQmUxPK%2B7CsS4lcvsAmunOjP%2B35Jv9Vc1UoIcQ3BK0XVTq%2FaNINFp9MFW8o9l6VG98nqTdqC274eZrGqh6b%2Bk7v7V5RX8ZKOlnRUT1qT1eIl08ehTZPD%2F1daqybv39o7e2evjyTSgW9Y%2BXibv9FqrVKfq%2F6xSaq1etV69Nrdq3fucQrt3VNf0VyT1e%2B5BxCttVrF%2BvT8XLnE3fz1f4REY57lIN3EjEuX0dl37qnX1qT1rpfiZ7751g6L3%2BvdX6t8vk6cSQWTYQ211TKdoTLvsEYow%2BW%2BVzE9y3J6OlW%2FZLovn7V64vvuquv4teon3yW0LJuye0bPgo5bKzcm5C%2FGaBRNeVEHumQgjfi3c%2BVT38TKYvsD5cvNLyeeW%2BMyqGOCKXLThy8rc0VmfF7KTyJJ8LQZ2hCy1wRCMId8finlHo38RWi9fanvVekv4ivWU6ZHDflzv5tMRk%2B9CGqFmd8Ps7yjCA9LWahvEa0kefs0y0%2F2eoYvIN%2B3TCm3Xn16hIoD9c0B62jxL4l%2BTyJX1l54TI1OXLiI%2BfyUlvq9ovLcFV1tzvDaf%2B4gxMx4Xh7QKJ7ghpDxh9%2Fh7SaCMZ2ZHFLZeH3GmV5FtL%2BE4%2FspxT5owRplC%2BFayif%2F0fvaxS%2BzePy%2BtfPXrXasq0cwq3y%2Fr4cGAm%2BK83B%2Bts6kheX8v%2B4UI9kYIBgRQwFalmjt%2Bbpokuh%2F1uyQh4RO6jHezHM%2FYaEu%2Bvj%2B9Dlu3L0k4X1jhsmfdZWJ7WRNhxcxRjrV6K93GESpBZXu3fe%2FyhgMYTe6v6lhCK%2BogfmkzW4gs%2BZ4BdfHrdE1%2BjvXXPyy82viKFPVV4Y1KYxbgheo%2B4Q5ceeEcNu%2FmDH5Cml5fX8FthhM41ZrKQWSCs%2FMTPiA%2FrBk%2B7%2F7yePdnQropl7du%2FwTHHJUDg3Td91L3Zk9c%2F3CewMtMbZd%2FhmWhaIFEpc3%2FqS0jo6Vwzlsl6%2BgjqJYd0JcbWx989eva%2F75e%2F0Sq4m%2FN3cm4XNQyBALfCFg%2Fv6mQw53HPB6fwtKBsGrAq8I2O2lJBir8vr9BrkIurYZaVoYfXiRd73f84heG1Pfu%2FvaW5Lb%2F%2F33dF%2BM%2FFl0EPghNYOHW6JB%2FxPfaL0trF%2Bre6tVy2i9cRmGDgIT6WiUc64eSyf7EJIIOaCOj4MwRx0gYCNnjRW%2BrDE2gl0d9Wv5hBF4wmf4LQi7nIOjc04Deonc5ogVPTP2%2F5LxXl9%2Fz3LDqbfxNU%2F6PXT861%2Bpgdq4KK7v3qyGcIlE0zfVgoItLNLODJ%2BXRNsr3QXOLOZYNcSGftbwRnuUMB5dhwoRcPftFMYPS5ei%2FaK9IugXmSY3hZk%2Bvx8Sh1I0khJUM1oRzHOeWGb5CJoJ3f17lEvl9KqGbeRCsYMrhn85OYLsqtQsKnD8oZKzRXXG7H9avu2wse5Azne2ng%2FHRuq0iT0%2F6liPQmvE8ngvrry%2BJV9e%2Bv%2BS%2FCop7vGhOsB2s6uMET5PL%2ByXf32uu0dLk9OXsUSNCXcGYiGu0nBCVBJ%2FfZk%2FdzaDM4fKk6ysXeGAorpcjQdNHkruovPlCOYDJp6Nl6QSonqW4ecPsXjSETNV7154%2BEf1x%2FhHRFHIK9ieC9yjOM2BJpC6zYPmP7dEt446JqOzGyXLn8kdTH8kriiXMLeXKppPRKrifiJLq0SLvJ6d%2F1AgnMXsi3QMYy2CAkFVHiJ0n%2FUHrGdPQDjBj8PRJjC6Mij9kx82boXV9m5K7yfTvqGtE9z8y0lNqw7orm%2Fx5DrtDAWO3vP%2Fe9iiZPJ%2FJ7vW%2FZhOOXWs7COJmPngie%2Fnsy0TkGzpVTKS3b1Psu7HL%2FJ4SK77dvY6iTR24X2OpjWoPCCcIITu%2BfspcS%2FvnR9ZPL%2F%2FV5N1ionp%2F9r3aFZeL7uzEuCYao%2Bi6WLTnnKvsEeAmMFaC%2FUf84bLu6%2FjJSUDb2vctef4IIImC1a4ofwj335POivzghFXd5d1LvG3%2FNe%2FOI7vbfQ0ocFjNNrFkV6fyeW4n99kEXeTCPvxPvx%2B2i51tVz3JErT%2Fk8jPf0am5b7d99%2Fnr4fS7Hf5yy%2BzKGAjA2KecN3fhP9EOGjn6Lo8oHyKA8t3%2FsFJs%2F7onseXfLy9%2BX33JfffaFtV9y7V2tcXy%2BLoQ7l2OvL2Gab7%2FqkhP2Xd9Phsu75fjCf0Pc%2Fz1y3dQr5faM%2FeoT%2B79DWrPu%2FE6xFakjqoXWXfjYId7vzrHOzb3V1j1L65famLn77OKVsu%2F7wAEsFJAsNBOJBMKAsGAsRDKFBMGAsGAsNwqERmFG7re%2BMXlZq25crHnszcVONSp5HKY3cn0rw23X3Pvmm%2FmCSe2bid3u1QoV2ais4LzxW6qYtBnNoasbW1RNTNT%2F1fFCJEO9lfy%2F3Zz0B%2FUain8X6H22quMAwPylr2zmm0aLur02V%2FoPWgV%2F199%2BfBdePVQV15AVlyTe6%2B8YgzjLilzs8IFltw59TjSUx%2Buqlf4zPKIYM9wET2b7SYL1%2Fil04XyZ3S4VzbtH%2BeFugXKjst6%2Fzq7KNVmVA75NXO%2BenCkwc62dh2wkGr51G1%2FsxOJENGmtmk3q40rOe071M%2Ff0wcABLBSQZhQKhgSCZaFULBQLGcQkTnXOuavXeqrLSoubl1jFKdaq3kfteI%2Fo%2F0X4v4AaXoG%2F4H12bHqXwuZOfutko6mm6tFl2jeNfb2VA2SF4UFJRylulv7jlM%2B%2BaDjv%2BW8vJwfKfPJDNQ%2Fr2rjQCEUNa9v930%2BIhatmC8O%2Fq9eMEhFKaBMMdLKfmxlGU%2FCcY7YwFhig77r7MZdXZ9zj1pwXhz9%2FnYyxl%2F23RSV26zXWlL2Tac%2FRWCJvkebQrN4ZDsfWJc8Zhm4UfHldKp6Nl62cd79UgX07PW8vKuibG7hKgvH1vR1AWpazBzURiv9O8c7191pJ%2FhMHATAUjChWEoWHAWC4UCwoCwkEwUKwYCwoCwXEJErrm%2FTU5XVJV1aM4ysOdU8l15H6jRmneZag%2BdU%2FP9i9BPdln5q7fU3LRxIXt%2F%2BVWvJ3mt9g%2Fqk4dFtupjD2%2BMlZK4F2YC9TOWulgDWXJTXS7Lv9gOefJGeotS4E%2BE%2Beh%2FSkhKoD89gZh%2Fa09xheshZP1hutLQfcgm45KAhIE93laXj1fYInVSZTngoPU006Hqyc0jfdJNfdmom0lOdohaLY2R7qi5q32zTSdgqRUpkEhBFFy42pjT8XmOGoCu3R5f1CVUITUkabje3ld4h%2B2gNtZ3Qo86EpOkDpGwOAAS4UkKYYC4UCoWQgVCgWCgWC4UEw4Ew3EIjCIUyW91%2B3qVSE1VSZxumKqtcJL0NMa2%2Fac547%2FBP2X0n6r72%2FlZQfwCcu4tVvf5KGm6vxlSG%2BbsCiPvvqSb5NsW2t%2FXlpJo2SEqqA%2BpurDreMJdLqJydr79XfWRV1eejjXE4l3a9mnbfP3GgJK6wqB7Alu375hkaaZbbnYAdxAAYKjy2XY5dz6KL63OnLoRHYSNhbSvsFjco9kpiLA9BJLbFiB2DC%2BnKo%2BRZZj2ccbK%2Bf4sGTAX0LniVvbDiiODBOr%2BqZrF1UXKvcbWpwlRILxhRmkjG0Y5r%2Bw0MtLjBXYDgBKhSQLBQJhYKBYaBYKCYSBYaFYJBQLBQKhYMBYMBcKhcIkZpU9K1l5kSLYi6qm0rWlpofONabx%2Fi0n0cffou8JP4T%2F47fBNcfFvhmXDnMumu7%2BgaT9NCSPGi2w1ibaDcw1sW9Mcl%2Bp7EBlPn7VLVPt%2FG68qwl4GJoNF716nfBfflhzDWUHXnFNyoIa6phCNHpv6NUZahgltXv9L19P%2Fn2cCS3rGEkDj9b5vlx8KilxkJNG%2FArANQxIkFkSAABrbV3Cfli8y9HuEQE6jSKNKfew6X4%2FT2svGwvCQL%2Fn9BAEziIn6yZzsKTOUOlJC5%2BrZVW3HQRhw5A4AEsFIwoFgoFjuFAshAsFCMFwsVQuFQiRWm%2BPnWavlS8kioSqm6TNcQvgfxNOpy4ifKbjL9fhX0u2Lw8I%2FPtOjV%2FG%2F1bD3WDT5qnlZeqxcfHfw3ypVVRX7hY1CTnNKHZgYAoz7d%2FSeXnJVCceZ9Gv888caH%2B1L2fFdH%2BRu3XwZZW%2FT%2FbxIydqZhXubXeCR6fbF7dPn3ZS3pQOp7xC1NS4U2YS8U0ky0jZ1ZYT0727%2F8aH0l5rKGTHCC0lQcgT1vOop5rH4O8y2d2mjG963n6fHs8t17fHnyAwf7dKwkQmVfVyiaLq5KT6pVpdrRst7vbNPhUvj0g4AEkVJDMSAsRAsNCMFBMhwsEwiR6lt1vjK146y5SXuSopVKXNXV6HJfk33bW3H%2F0g%2FDy0Hpp60PFNKtyk%2FbPyvo9%2F2iS%2FEO3%2Bh8pfwKCr%2F6r1Uylb0n%2FrPTa%2F57z21GI%2Bmfk%2B2x%2Bj8JJOOkScnlMAKTeL%2F7QJr9YbDhADWdXifWgkR2EdOLTKvoThODztIMQiz6hOpmqOVxD4YXi1A0qJRoWru2ZjsooxunqCzX%2BvA76uE4New7IvEF4Cnf5MN8V6O4TytZ3gh1PfS5p67X19lRAuy35ygAgUCEFR%2Bnp1%2F4BUfG8bLwlIX5wxul7DPsuDgAABMJBmkwTCgV%2FoXl3Lcpf%2F%2B5d1b9cv1aW1Y%2FVi%2FVIldWrdrq7Wq9Xu5PWK7W6if35Pfr3V9goNjJdcOQXTxdyX2jynn6lyn9XL9XJbBaShvve%2Ffa1yqnVC76SWyeODi3u8937I5FeP14RwjcQ717vZ%2Fe3zkXzGmV9osXau7v5cKanu%2BibHd%2B60JkyCa4ua2KtyqVfaO5Xo7%2F3BDz1iPavXrlF8TfrBWn%2BvXfct30vdV%2BuXfVF30i9XLdnJ3Rjsv8tK%2Ft4sUq5eX4ng9ur4q7Rdfq92uXRM3NJZyLlVjSX%2FyeX7egNGcYO%2BXt5GZGdrFYrr%2BuYV4r7%2BXu%2FRdfq82vZjZQwL0%2Fp9cNXhOz3bjR%2F7777XDs3Gy4YDk%2FP93lJd99o%2FfKvVRsRdUR%2BvVd%2BilBV5PD%2Bg0Kd3rPU6lDJXSP1YubKwQkfMFj3ZJkrH%2FYkn%2B9X5PT%2FOZc8H%2Br9m4uetu9%2FfsJHjxz9GSSuS5fXsv%2FfEWhWVWQ937PVGPJlCoL9st77JYDIIsCvfYXkGzMTe3dR560O2%2FsrZB1Td8dfsh3v2Q0dTGDl9X8MnbDbBM%2BU%2Bm%2FfffaJ3fa91fr3fy3kftovXmxNjxD7I%2FDy0dwld2VnVZ0CnAo%2BBQHffKcO5Gyfmt0evDSWX%2Bzb3%2Bxb377Qh%2Bo197kvvV9O%2FtH7J4a%2F3vvUs9XS4%2F8br17uXVWsv%2F9WjMbKwSEFZn0WXYiTWxzEM6j9WT0pfd99lu%2Fs9R0iQKP6rOVbz3%2B11q4e71eCMXPRh7jfeT1df7IMxXz6r0VjtFavXpJpekfxsl907ohqAneTxq9NkyBJ9fV2UuIw3kqPLu733Hw1%2BwXFelvHRBGd6lwRm4xRK1ZBmT%2BqPjd99gjPDSJR%2BXZRDe9H7iYwEh3nUc%2FNHr%2BNlxVHkT6Pl3%2Bjwc6Fd6k3fnQltH6vQrvXJ4XieI6myGp1Tw5PXWsOXdrrBF8fj%2F9iS50jrRI68dPR1u%2FRf2eofU%2F%2F%2B3DcO73%2F3uXIY1F9%2BoV22uNjt8KsjV%2Fp8FV6baY6JLjkYxfnBqXH676AbnXnTQrk9NfCOE7hGPsdfP9lsN771JfpBsXIPvr4z3AOa5vJd%2FaEd36l5LpJq%2BSL8ZCAUZQwXhgWI9irzR8fBCbBfDTlwHjDZpF5VcqWOvsdPq0oaYOgW%2B9ROevDctV9FZdyO95PC%2F%2B9jrrVwYFdhj45N7AhrDmycZO2WLLuiMdiJgwGVnP5kFy5%2Ffyanv1KcZp%2B11EmN5sk8zHrWXrXyef7oSxd%2Fq134mi1%2BpG9bJ5idbmCEeBUS6KtWdorOwTXt3s7C5dlve3J77ye%2Bq%2B%2FVmy0fKanUn2hcXYIYfT7O7nuTs32CMVRu76cnJ8v%2Ft%2Btd29TixfJrLvvtCGV6O831F%2B5CQ%2BLzP106slJ9Phkqp2Jj4wgbPQUnh75JWPs0n8n6n9lu2%2Byt6p9nkAw%2FohNJqRGZPbTl%2Bxfmo333z8%2BzyZ88%2FPo3u%2B%2B9uT8Tr%2BTPp%2FoblcVlvv5V7z9Xq9E8XL%2FyefvtjLu%2FRAmd3fSfyo%3D&media_id=1254206535166763008&segment_index=43" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:19 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:19 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_zlVo9sSOOSFMpnzV4U4g6A==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:19 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113897996441; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:19 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "39c115f6270d073e625b567931d2bd50", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19909", - "x-rate-limit-reset": "1587864356", - "x-response-time": "36", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00ea6b4100dd066f", - "x-tsa-request-body-time": "63", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"ZwZgMZ1fCJvs3wwVfpH2R1JG0Gc%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=J3dej9UKqVK15biyjHfz9i7o8ub4vtDYvVe6p56ymuLXuj1x8F6tyq7n7BDNS9zyPvy6vtEeTCWpTn7P6L5P4R%2FEGSfit%2BfvAAAEtkGaTJMqBX3XKhPfr36xf9%2F5f%2F75V6a6uT1dV%2FCv%2Fff%2F%2F6v3%2Bi9XE1LXFdXd2iPWT%2BsF5JSXkGO0fvJPXFQiV9amJyXsFGdAUlwjwvCY8id%2FEzjpZzmKy5o7oY%2BO%2BJXvjr9ett92ueXVGdk%2B26uhBT5Vhhil%2FuCIiO%2Ft7qIxsQTtp%2B5aQ779XRvKMafDZRgaooqQmiVDjJthfxCi0u1ab16I0v16tOK%2FnIId%2B3%2F1c%2FLve5XMJzMZf%2Fs9fKjW%2BwnCEGddWs%2FOSe%2F0VtX1xfRP6J0QK%2F1aqWulb9cq9av1qS1qVXk3uXr45f%2B693J0qcr1qb1cirk9GgkFf6PV3Vzcq5S89%2BuFWtVcnrKM9Xr1Yn9Yq9WK9ar1Yv1MCvRpSeUu04m%2FJWonJ%2FWonxRt31NG9%2B90fDui%2Fv5SM7%2FiuddsqTvXvvf%2FNIPotUWj6uepie5vWviFiv16vR9V4bGXuo3z0U%2Fyf3v%2FiiFPaaYU5%2F2G6a6qjNOAvW5Re77Mbm%2Bw5hxyWpFyqDiA%2Fvb5bBnz%2B7v1q5Czf7%2Fiicnk8jOfy7k5%2BVCe8V9V1%2BS79fSI4JKLNcyXxlep3Eb3jiDAF%2FSq%2Fm4difOT5%2FfvtCXG%2Fz3R940PT%2Fu7725fqQRHREIMq6%2FBCW3oPr89TmhuX%2Fq1%2FOV%2FnEBkfXr36twRPd%2Frh7r0nr1ZaJl4nUBD9hMzGNgkbhpp877cbNlA%2FXv%2BYby%2FYoRe7pGO%2B%2B11u%2Fvs9cdRKH7%2Ffqf9%2FDqdh1eqcu0WoRU%2BCIRZMzzlV9q4vf%2FLGF%2BlvmK6L2re6%2F7%2FQthd7GSR995PH3zQMpBVPs%2FD33ct2hPV6uSX%2Bj1%2BhXSWevw9c19nMrEjGkH%2FYYKUROwNhAbRlgVdF1Y5qIv3qFfJ%2Bf0LLzqAj43FfQ93o%2FdnGM%2BMlHMoD2UpYWyqd9kFDaDVoPYcKIiA9fjhRmVzYv32Y4QOXg%2FJ6fuCURy8Yy4Be7C42FVlchjx1r3Pjsa7PR0CE2PsjHN3uCO97hzy2it%2BitdkM99uX5ZD7vtEZq352RaXauyeu12CW5D3Zi7AmCsNEy7V8tPSKvsEQlIfAAnbsENiqssODvR0QxqGzr3CcJj9nx8dGQeBFo9hDbfjQeH29nbuFOV8i867BYzkfKrv12PjYwmDMTqOULNJPEh3v7GWAy0xsYR4edRsPGkHu7d5%2F2ImxjpVKK3vuMwi6vvvn5Ql42WGzvJ4eu40Mtfk%2B%2Fa%2ByzkHfZy5Saf%2F7DlbDLRaFAxsmf7djrk9Nr%2BsMXfveqayU%2Fen0JfJ%2B7rmNnY77HGYFh6LDjlGmM3tvcX9kO%2B%2By7pdsic6Ta4nu375ffu7v931fffZiTRoLfaK%2FfffYZOeHUY%2F%2F9nuPTzXZv2URnx9nrw0nE%2Ff6ExirBaIbQYbhRDRmONe%2Ffl8vfL32hLt9NCCu9y97fb3vv9cpP%2BXrXvdX5179de%2FZhkdfe9u99OJnL0fQf%2FfZN37yfD%2F9999iyN2kE2nffffa92Ivu9%2Bfy9GXz8vffffDdcT0Zd6eE6L%2FkyeTTP5%2B9G%2Ffffduf%2FQ8qd3l8Tz997cTpten7x39YK9E6vWUmun%2B6vtW7VjtFPdq7hdT13W6J1cnffie3%2BEWKa0oAAABWJBmk0TSgV3xKEt0V39r3fa92vfr3lrF%2F%2F%2Bvf%2FqdP%2Fde%2F%2FV3PxP6xdr3kq369Vq3a%2FO17vvv9ekrXpLktTp4xr1J516sm9ajVY4kpMs%2BJrdF6J3Xu1Yk1ntWJb7BLjtOpdf3O%2B%2ByE2n3q9lzbVr1cXYonqk9eiKaTq%2FXrT5DO%2Fd9z95PH%2F7ifQmr9Yu1ZJatVr14r%2Brc9YysVXJ5BVI%2F%2B6OdO%2FpFcRXvi%2Brk9XP1bteu16WJk6Vqte61wri%2B69Yt%2B%2Bt1KI4NwkDSEybo7V6xVhCtfqx3P6yov%2F691SZP5jbBhxnWeIqr0dirqiZOW7q6urrJtBrmNuXJf%2BtcuwVYwJ%2FdDLkhilR9%2BDCeVg%2BDtQGMQu8NJj6L%2BW%2BE8210iZ8TcdGhgsmfoTBJa9P6y%2FXr9Xv1ZL65VkmJd%2FNMagbDDi1HxdhW5ueCJyJfhO1qOnHumbiDucO8ATLeA%2FiDDD5f6qdzVal%2BIjrUtUUtsJUl6sfgnhRfZX%2BYYvt%2Bck%2F4m677H449IDp1c4rx0TSP0vXfRFeuryb8wg8P8bo50qXQgmNfc9u40aOevlDAZV2H8O%2BGPCE17hxCD8H%2B%2BV40IeOn9FevBZZgnGch8%2BY4dvWivJ7%2F0EyNoD3RgNdEY176iO0%2B5cuyywn6FdX9yy5p%2FCR0gZnx1ZTEpB%2BIsGCv0gdqLmriJfXv1qKXgjojH4vHSyb3XHWj%2BGrsqfXVCMMH%2Fhwro9ZqnSf%2FMTLhYfFywQXNG2y%2BSTP8TpPKxf850ofGtf8xkZFCwXxBWZ77KQf7oHHWf9EY3vgn2A2BDlZSDvYW%2F%2BIozwf20%2Fu85Jn9Hndqd533Wq1c%2F6wc6uXcmCHXjxTERm%2BGWpeOguLV8TgHDKm9l0z50nxW7WH0SFvb9TFyfsdNwrM%2Fd5aP%2B%2BpXt5Or7lfsEIk5NLr8WIhpJDRXrsE3d81NxqRbz1rUnr1L4lF%2FXF9rXfrqyyDKRggD7GRjL4Z49e7azMR8hejop9zqP5hGPic29aElS3d9K%2F8R1WXFip8JkyWp%2FP6vva%2BILdqT%2F83HTFiLq5pf1ytV5r76gQb3NmIwfkHo8%2BjgnE0YZkhWwKNHuv4JvVDciaGDpd970urML40k2%2BCcVjVIVcrI2O%2BWrcNlH5zfFuX6MbHwfQijd%2BCcx%2FB38%2Fj9NmT81%2Ftj6V6vFcko4Qv26hWWG%2BgMsFlUjBoi%2BusSK4J%2Fe8ap7UqVf%2FmKb24q5EO9LX1rkqurEYcS4L30x8FS9vWuxZTpIrd99mNW%2FziVVNf9Q0SRt%2Fkp0wsr4aW%2F%2BrcQVkcea9xP3BD1SP%2BcH6lTJ%2BV%2BKMndf2ye%2FYLpo%2FYGPU%2ByfPv%2FhTw0pg2IluehoZI4170WWvUbP2vHBrgu9b83cq%2FtXqyq42aX%2FCMaG1QHzKJQ1nDAZ%2F3H1k%2BsojjZv%2Fglnl4OryZyr0JdJa9FxdvdfwgIbKGAo%2FN754W6r2v9fWX9adWeuTyf3ZX3vVw1J%2BKTfdDGj7zQozWIymNSmPyfH%2Bwi99D4TEKlrDaXBv5CRmEXsfCtwYDQIhdCn86TYnUGh%2FL%2Frkl20nqV%2FUx3vv%2BSy3vXlverRanUoR292zDrAYCt1j%2Bv6Kz9WHv9FTgt%2FX39dz5C4Z1PfwXYT8hjGQlZc9v3IQ2L%2FZHXk%2FNeR33Wqxdo%2F2ra1ePK992M%2BXvV%2FdxtwY1613%2BQRknvxeVE%2FdL89fLMSwsqsui%2Fr%2BX%2BvPcbZ6fi0RzJ%2FflRysZhAXVDY%2F82vF1qTu68nLS%2FR3it1gkyZfOKXx%2Fv%2FZ2N9TovVvXrr3RZeqFRfmI7%2BP7%2FcsOXQlC%2BuEavtYu1lXEy%2BvfVzoulW1y%2BT3kusR7RsvN%2FXK4AAAELUGaTZNqBXXoS52teEf%2Ff%2F%2F%2Ff%2Fxa1%2BtfrX%2F%2Ff%2Faxd%2Ffa%2B7VztYu1c%2F%2F%2FXv1In610d1q%2Fau7%2BEa4he%2BLl9XJs2l4wUa92devhAVXqwpwgKU94QGFJiz%2FPVKSn0KWTmu0di%2FVz9av%2Flv1q%2FV%2FiPLvJl9GlXq9z16PqTi6uuW%2BIW%2F65eGq5d36v3Lrk%2BP%2Ff%2Fl3PS3%2Br5L761g%2BX9ex3d8T4Y1a9WDDUtXdr3dcRN4Ix0qmVSy7Ie793aPl8UvVtfJVdXV1k3qtXxPcnPV%2BEK5ZPz%2Fy%2B%2F5zL5amvWGt%2F5%2FMtdI8vnVu%2Bb%2BlevXLq%2BWhXX3RKxVd7q9%2BjPzoTXRKv7%2FsVKvKv9CXverXU%2FSvXyer%2Fqx%2BtdJVl7vuqIV6xwjnCQh33pU3Xe9HOv7g3y9%2B%2Fd5MmlfNQomuKV%2Bi5KpoILxwj1Dhk0FDtzLvts2ZX77Lvd2S86P19%2FDde9%2F%2FNvm60J6%2BVcpqW61ri1rvgtyeH5%2FjifmEDwK9IiwML5owDz%2F4QshxbOGUVws%2Fe3%2Biuyef0vuCToglY4a1Oosg%2FT%2FD9ZZ%2Bu914sl77nznW26%2F1%2F9bffW3U8vosp9%2FzCq1vXv3SQTtX8peXtr173BMcfTGvTG9R2f%2Fsgzp9WGe7qGWj%2FyfP%2BSenWQ0TJ9xPojPxMoAYdSeeCzX%2BTzFd3pe%2F4Zo8lqTp%2Fm89P8aHLCcK93nKvkfI%2BfLmou4gm%2FOIUdRHCmDMJD%2Fgj2OuvynQDhDwrECNasrziFnfEr%2FtfKPzmJSD8go4gO%2BWrVwsJCA2Xh1Gv497%2FfouV%2BuXzLK5EXsUt72T3D%2Btw0SNSd9Cl2v%2F2a7f4IS902ePDKJ3deHB77v1Ox97WcYvhlODcwRRs5asOG05eRW8A0WtG%2F3oJTBFmSjM5eNS98n1q7o6UNoQzsE4t2XBLuH%2B%2F4WI%2B1%2BViv40VdrHCAjyZIVu0d%2F1Z%2BtVuid79o7%2BX2QUq6s%2BCmPCyvDH9lvfL4QD269hPeYNiXHMH778orGsa5mPaL1q%2Fmsnpv%2BlVyfy7%2FY43OwgMqj5ft%2BvOV0dS3U6ZlbXhgiIlQnr9eret%2B%2B%2B%2B%2BwRitJLu%2BXvvsMle75TpTQ%2FufZL3s6PWNjJX3Pv35e%2B%2B%2BwTH3Y8xEPM2vk8VVy3zqO2a6fffeqvhgjJ5%2F9QnJhVVaG5SX2CQY9g312CGMXfs7OVgkzKZtikEQ%2FRtq7vs5e%2BPmifJ7uvqx3337qxVlvfvvbqCHH5H2BN5PRoL9CX7V79YOpWlvc%2F2czvjpLOWNlvvv3PX8kA3Osk8n9ez%2BzQmh%2BzkUYGxvX%2BS%2BwR02b%2B5dj%2F6vJL296G%2FQvq%2F7RYvVTp3fJtiojjk7DNpHdfj8vHl770b97v7u1l5BC5c6t3yrLl96l3a9lHSX5VY%2FQ2CrrQmvVq9cpPRGOfVDbot9L%2Fn8T%2Br8vLNdWveTwzoXkgBJJn%2BFRhM4Sky5klsya8hcyDTL1ILmBoEmU6V1utyKvsw8BPu4tpYW8f0NTVKTIQq4tJdy3yFY9pLSP15wWeNUgTwe3Q7Gq6042AJhHAAaFZw506Mqb2zFlUB0qYSgdlxq%2FXgUdctgr6Qg76rTNirLk5Nv7mBVMx%2BIu9gXtRDPYrrt0vLyA6bCqt74nl5iIvIUlggCoQDJM5cFXFPLYE9CFlKRTIJOiApEYyiaqFNNPTbFsKQnYz4VLCiWXSMUt547zwpiyBOQ3ow4HIcsuE5RS6oBTnSqkxlI%2FIGIsj4g5Ta38LWdvCYuu6iX48jLbiIGgNmJsYzYifhxycJwAEimf4jZyZVVyVlNewQuldVZKXiTKR5LtoV9WJJ2k7By0qOl2b8UWcxMSV8aXbU2ZuMDgvf7j00KmqvnScw%2FVHulRQ6QZKRlllVd%2B9G57pfLvrmPCgqLF3pwmqfbdCVNQWeNleMvbS8VcDrICqvzp6rjF949rWmzH332NNotm0wskrZY7diXdz11eFO6jyFdlrEZHLunu0e%2Bzu9r89iapFo1Nyyt8NUW0T%2Bfqs1N8Le%2BdF95WddnH0%2FL0dWdsenf5NR3vdNrCXTV2dz0TsY0yn1y7Tuuscqt0sWV027p%2FDvIVlY7Cg0YKe9B5tsDjImnq9lriUT7vChjHQh2g8CJ03GcAEk1JDMGAmFhIGBsJAsFCqFCMVAsFQiR3rj31z31u2ZqKrhRMGKpJxqp5HB8JyTqdl4Jv37wf4sumYuD%2FaOM6KtMEl0vyNCXjv3j1LD1dND6M%2FUM4rX2AUCOV7L0eQJ5p3IweCdh2ncVOB2QXrwi3HdNg5iLd%2Bb9e2Y64X5LRkH8ZPU05vMfC93ab67sqJLlnOSBcSOgtCWNOgQ7%2Bu7ZRAEFFJ5RZcuOC8p%2F0lkZ4%2BB23VFm4aLBZgXQCU5zDLNtU%2B46wr7esAYAHPBFQBCpJUB93H0%2FuiHu2oBOd5VgX7KsWhVVybTTgBwAR4UkCoUCoUFAmCgWHAkCoUEwUUwoCoWCohI%2BeJzVeukvxdOuVyqlQZVRV%2BRocZdPF%2BLd%2FDV1s4HJuiG28TSTpg%2FlAk3J%2FT1yAv%2FsOXvPlPjcl3jo3ufKzvSraST8Xb7nNS%2Fr23gQaLIPHav8DwxloGMHtv%2F76NVc9w9B1OevEBp8voWhUHuyr%2FUNi1h32s%2Fg3%2BWTsdsZC4FEK7nnbMGLSdo2UUVPJiM9rdBgKdJLMFRD%2BwmASESF36ufr%2Bv6f%2BJzKBgApCm8eeON1R6%2FazA%2BqQ8vR7PgROOrwamMnZerpGtoUjdvkhDEqbdUAcBIBSQ7BQKhYqBYSDYKEYKhQLGUQketZeb8cXvXjXOpktMlLqqZEu9VNDkvhax3nhuPf93lq1C%2BQn6NnMXrr0dKqBn4%2Fq%2Fof7jSG0ngZ81q9I7%2Bx%2FOeN%2FUykf6RGj2SfV0Cj5Oj%2FhmwawM9ZZqBFRDvmevs4TIZv8omhQG8LWSjFcHf4Yic9%2FU3Oan%2Fn5T8NTQR2YCgCIdGk6jqR2Nbcpu25BYLWKm2baRFK01Fq1G5vFj9jZrt79gB1ADLl6JseQD2ANZCBO2Y1c%2Fv8KZ4zE3A%2FeEcvo6%2FqkMcCqIte7y0e195RkVRstZauvYDgEsFJQoMhMNAsFAsKAsNBKJCqFAqFgoFgqJxCRNy8fPXHanPU3KtTVGzJHXPUeQ79I8q5R7%2FeOHZRyXaRDrm4xrWkfUF8fIvVKhKovHTseyFcfYc37XjoZuqT33P5%2BDfOOmr8izjR7%2FtrcCb3XtPoPh9Ogw5XxysujF%2Flli97yVqcNcLYxua%2BmSz19T8q8%2BD5SayPsmuzv7djSaAaHyu4lLfSNYK%2Bf9l037n%2Bz0Cbg2gJcAoVPbgV4Mnf%2Bnu93T0jhr4Ar6uvqnjU5jy5OOMQKkR9rD2uxB2EgFTWhk%2FeoTruKJEY3BwAEsFIgoRQsGAoJwoFhQFhINQuFAuFCqFgoFgoFQuFQiRnG%2BOdfpoisl1WqupSVUrcqdb8q8j38rhNq2bod3s0ytT67T6TcY%2BUJl9Xy0EMvj74uC6qT8FL%2BB%2B8q%2FwLfqu8fh92uPZxXWnl6dJZ9Q0FTqPSbLwuc5COsy%2FJTgiPupOx3DZ6HheC1UcZxmthsEWGv9q0GLkh7IrfWHrN9ONVOqidDcO0zrY6v8QrYv817j%2BsvzLlGRUSI40e4qdcedQ5FsBlWvfrIOPw6%2FWz3yd%2B0oIB43ger7foofCQFcqHaC9k0E3rQIq1%2FcDgAABoZBmk4TigV1aF1%2BrklrXd1Ll7auTetd%2FrVX%2BqR7Wv1rqWu%2B1S1x3xPa12rj%2Fa1SfWfta%2FV5PVi6NWpd1fy%2F1qr8spOX8sEfDaVv0qzq9ccr9deisN3asd%2FOtZPyvv9ddzXVCSxd3fxXv2QgZ08B%2B9y%2FLeBL7PW3QNKw3KZKQ6%2BQqqa7Cfl3xr3LPiyQjBS%2BOlbm7lyj%2Fj16X1lzr1X32rkl3Bv8XSFjad96mJnYff4Wx01896opueZ4VJd31ePorHauWX1%2FXKb1eS73XUvPfo0X55FBoPNx%2F6Pd9zWi1fF1ayiL%2FWpbpa%2BX%2B7ryZK7n1YY3dWvWO%2FqHc6rpf16SrruLMbQMN511q9l0J0KLFKo8EPclyckmE%2FaO1c1X33Xr0hPL%2F9VcWllgkNxPJbl8n4v4%2FJE5ByR01pkIJ8qip0vm4zvk8%2FJLye9kX6GlC0G0yP%2FB29iPms8DR%2F4v3PfaP1z8vd%2Bvdq7uTdYqyzbu92VhwQfGoQszLwmwd3fTquu9Xu07%2FhIsZaO92u%2F7I1YN%2FiJrFpqax332630XqfF3LRHkJP1N4RmiET3VBj73uxngw3NW%2BLce7KcU%2BQNNb1IKJ7q%2B%2B%2FiZvQnrhOkFroWxYjLRsgYXoD7D2UUh6e6JRjgQId7kXq%2B4H2yOb5pKefAHHyl%2Bw%2FrHF%2BMCHzG2lnn%2FtD1GkheMj1l%2BgdTuKUEeG%2B8n26m4LcY93fbJ5uTdBOmyxViJbaRwFRg3hv5p1Fj3YiXBm8NJm%2Bb7hI4%2F4CRt%2BHze%2F6jXu4gnd%2FLTcly6PV%2Fo9cv6ymJ4eSSYQM6aPLOTo1BV3bQ6IOrub%2FbYSeH3ZDl5QwH2KJDAnbwPGpUUnl%2FgwqXnX247I2CsPh1fg%2FZLv0XKe4w%2BtxrNPr0dBfHkFcgr0zi6WhGZl%2FyQIbMR%2Fu2VlGW7k9H99zliDZaPQDjYkqnxEZaG05aEv6klstl7aWbvLYiS8pxK%2BOp2x9Wvdq0v%2B6355PXpU%2BCoUpex6lAoy7gJH6A3n2%2Few5IWokP4DgN35Z6zxMzgYb4L5p5qVviukREw0ESLAKn%2BXJ4r36a%2B%2BvvZvuybd4YLN%2FiuD%2BWYwbql8vof%2FW6PKS%2FJXLJ9%2F%2FUr9clPVovnH9%2FkHO0gLiyRtfVeGYYiTOANgSj4kOgZFP3bSsJPz%2FJtEzpXEUiSf3fJc4Lzub13dn6KPI6VUEpmd3mx33FrVQYWbNf6yeD719EOJ9kN85t37%2FEdJxW%2FcuCSPyoerjEouKW76R4v11d1GZi8V8tCO%2FROk8J7b4zNhvq3mXl%2F3%2F1l%2BWGuu0CLkaTv6YrxwYT47S%2BteYQMJngtb3qz2Ndr6mnz3WWEvGGgowWClHa26BIIw0mp6%2FC4tQbmV8I6J%2Fb8PMtza1Pd90pPJ1ao%2FidLd6lchnFfl%2Bwrj4PAVn4ihgOvpBByeuF8kmDQ6Pr7y%2FfWCSPidlqTYp%2F%2FRyuB%2B50f6W92c91FhogG86Yg0ee%2Bslj6XS%2FYMKscn5oah6%2BT2B%2FauEyZsDUZjEt1l%2Fu6F5pDbKkbF96VjygJ%2FRdrp5%2FNoDeQkK9yqZYUxb07FL%2FfQ%2F4AyYtIVA9u7oVpeIy0x1oOc%2FxEH%2BbRe6cQ7geX1%2B1yy%2F%2FZxM58ZMaC%2FHm3q%2BifVa75atCnOIlfvJ6f%2B3yePbl%2BrpSzwMMFvl%2F7cmCZ9y2nyd35f4Li3uXg3%2BqtGfYIN78wNsyS3TuW64z2WkOuV1W19Amt1qhjuUIvfonZPX1v8UJY72cI2FuP4SIjMt463Upfv8M8qENJ6jinUGh%2FJ6J6RXl%2F7%2Fv8FOJ04jmXysX43t9IuWZf5i2d9orncR6xd9iBT77vt92dilm4779ibvoBpJny%2BlExzv7v7F7273zghLu7uzRtlD7Y6ks3aegr9r3%2BQ%2Byr34vmwiMwymzlzUsuz5U0kTG8veaSCI5cf7VeSbLkvPz%2FZiVs%2FoSzcra9xeilBQIfW94K9C3d5Pr%2Fu%2B%2F16pxRsIWdLu%2FvJ%2BX5KMxq8Mltz9fJ2f8mnT2COf%2FDL%2FX9%2BrvfcpkF%2B73u30h0Ek77k9%2Fuvx13D4kT2RaNUX%2FISHkfxvE7crNHGTiP5L8XeI7nJ%2B%2B9Ffkve%2F0Naru%2B5r8QlT8TxLFPvR4i%2B4UafrxF739idp72mvR6ko%2F%2BbGHP78ub0tJ9vmu%2F1RaqLRcr9TgqE%2BXkvGIo7d1iF3%2BhrqFPisuP16vRNWn%2B%2FdF75KvshHf%2BuWT8vd%2BSqja3uNrVdVZKI%2Bd%2F1AAABstBmk6TqgV3eX%2F4Rl9C6uefie%2FX9Y3%2F%2F%2F%2F%2F2sX%2F%2Fyd6vVnasf1BnUzxFrUk6yyfX95Pr8T%2BQEZNIuMeqL3M3ZTXAI%2Fp1fP6t%2FNIOR%2Fd3a9JajFJOWrWruXl5PcR4gjjjfwFPGmrb%2F7BRRlt9Gwd3OwQ5zUE7RXVnYKJcZ6BSb7yX40WOwxJNWM9H6NfMoTJH3LSLK%2B69Fyu%2B64n9TndrFfqxPk5PHr8nh%2F9SHP1ELmzbbo%2BWn9xOG9m9nw3EZaEH7rmkHIvKq8d51Cv%2F5VY%2FktUv6xXy3dDuxJejj6U%2FG%2FfS67%2BL1%2Bvfq5FLi9X6J6IMKKPnH%2Fdiuf0J1fddVdXiif16ulMl%2BtdyVizcaa8BlyzUEYvd%2B90RuxIh23jw%2F6D%2B4nlv0J77rW%2FXpLXq9XJJdj2jYdmispE%2F7lw9pIUbTqNGF2QMfEXpzktfaH5ftyCHVPPbhxAVeTxxDyXkJPWbkkiau%2FR79VTyLiu%2BkV6fphwYY0k7GvG%2B%2FNk3fsnd9j52%2BVhaK2eP8JFA3Z9A%2BJfMMS5Y6hWPW0F%2BGk%2BjrRKf77BcRy7QZxigZCUT999hqjCBxB4%2BJDhr%2BGp5HssxuwZyRbQkyYruEav3080nEyeCS7y0f1yeV%2FYcEBwWohLhAdUHhExPj9gq0UEenjSzGRIC%2Ff4hb1%2B%2BNXaL8%2F1ReM9RvYFwg0WQ6R3qOAMk0w2%2BnS4PukGCQcH0%2Bi%2FYkqJ33vvV4IJ7G2f2w9mutaCRhLP0CDO5x0E7Nw6snvbiECOcYJCQN9N%2BXlIc5IBj0LBb69Q8mLMH9Nz%2B8qnaEt%2BsVQgdWI1LxNS%2BEsy79d%2FWGhD3dceRIH%2FTCWxHqinApUdvNkKXmigHFVeFeHE5PnEC%2Bs2e2nGkhg55PP6TBaTOMF85p8snw0vk2vSlu7T6boWJu97%2BooRaqliiRQx8njpeCE7hkg8vp92GofSu76%2BiB33t3OZz4hM%2BzcNXHqXKFjmP%2ByaN%2BcklJwQLBa%2BziXfeR%2F6xVBbXr0mHf6xfxClUaKKGTpI6YYwwiiPqBOfAgdo%2F%2Bez%2FSCP4QkJP7%2Bg7YbwJvYE847Kk77%2F1IIDQ2Y4X%2F2CfuUYMgYGG5MRaqoEOS64c4oXe733bijO%2Fuz28%2F9ehtRF773spQzfH2qoi0tjkur2eCS%2Byiy%2F568%2FeT69fZ3%2BU%2Bdl16npKZeriKv3Wr566RXX0Fx1EwGMtQdwlAzBZgbX5EkeG3nBFejwe3Slrvv0v0fWhWiEtGI0HJ8%2F4TIkXGD04wmfffaK%2FYesb3MMNkrnGDq7M4wx%2FauHLOgMED7wZWsEm5TDpLnZ91i%2FOVfxre%2FRev1yvE%2B76R0q7yV5PG%2FS6ggOjFMEVDaBIGp0lgSclnrjKP%2BxaMVBx44XtCW7D4y91Y9ttKz7NNUX1dul9r4SEMXoW96OjFff0UTy%2FKaQXSQFo8N5IUCW2c1F9F4LxHDCnGNUooGdJqgPxmk%3D&media_id=1254206535166763008&segment_index=44" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:19 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:19 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_pRNwpIs0rqtt+nhyxYmdqg==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:19 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786113965614326; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:19 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "395b0371e2fc50f9cf03d627921ca3e2", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19908", - "x-rate-limit-reset": "1587864356", - "x-response-time": "32", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00f195f000b50623", - "x-tsa-request-body-time": "61", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"cgGQn3hX9hiwo7menxsKREvCvwY%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=%2FVuKFlIIc1Xxke%2F2Yz3fhMfeXJxHze9ehOG7T7MIe%2Fm6v5LktSWFcwbezhZkvB73DnrYH%2BUEWwnL9ZP3%2BuwxjQOu08mWuERrAONcpEr0mnFZvGjEyY5%2FgiKwMdBAfrneNv1AjtyM0%2BT3%2B7GE3c3Nm29yqM6%2F4TjNf7gy19omWT498lgM3fk8N%2FHlMIC4uPtEBjb7baJNRoZga%2BehPU3agsog%2FF%2B72IBUsXI3WiItUuc4%2Fxwxoy53vsEtKgbRu%2F0nEe0Lms36hYnQnqya9aknqia75eJ26RhG7706WX2u1FR1WmNCgTsKjk8PfFXfvfZ66VmgtIf53e%2B5r1amj2vku1Usv7fnKvjp5j0WXddijOUyMyM7%2BmPd%2B3cImLnsnd4cKVVUo32%2BzUChDwryrI8oXvOzxt4Vrn1v8uj%2BV21WsvWEOazahx7iXqvu0LvPJ2T1dsRzjIMMW4%2F5T1%2BdRmftWOUNlppIcX8Eb0fv2%2B77BIU%2BeuwQyEm%2BvvU%2BQmOPqnl799TXz6ipQkTj0I4QLnr5Pj%2FewRM9kO7%2FPEETfLR%2FG1FYu773q%2Byi7v2hTP%2B%2Fia9Dd%2BS8pevxvhtdaTtPvJ475Fk%2BnyIkSKNSeivs10%2FfYc7u754X99WtF%2FvrJ7qu0CiGKZxPbe5uHH%2FMhEJ1rAfDWIbl3d4JSXjzXbQdaH7CfWslvjkjkuTx9SLzajfIkWLu74%2FFcm6FxdPWM1fo%2FlXkonh1Rn8snPDJ8lfmSsa%2FNe%2Bvc%2FD7Qf4zT1vqy4Xv0NTrqidxqKe%2FQztte238i3fy8vqhcPuh2j7tX91e%2FWKtn%2FV6oRV%2BKI%2BTRRgyrHPvy0RL2rn1eVSc111qCKQ0at%2B%2FYgS5934AAAb6QZpPE8oFdcT9dL8%2FxX6F9%2F2rH%2F%2F%2F38UsX2sVesx%2Bp79Yv1iu69e%2FV69cpN1b9XODn%2Bv%2FXv1lXr1zfuvdr0u2usvxv0CMnLRvlRdemL477y5Ui%2B4XNlojcbZPuPtIM1NLQ4h%2FX6ufr1Pw9q19frXa9XJd%2FrVWp0k4le9n%2BkbvaJCc8wt%2F0C2YgoE8xI5Bx2y%2BXW2FcSUAIiu9Jf5%2BWssPXx%2F39hyNl17r6ZjLTkWwz4QM%2F%2BY59OpX%2BWCDUsPIP7zcqO5e6%2Bk9e%2F%2Bbm%2B5Cef%2FJp%2FNURkM%2B9reci%2BOy4vCKnIiZAZmNyw%2Fct%2Bv0xkSTNL6IRMny28n2hfcq%2B5wtBIumYiaWDXy5rJdQ3EwacXs6O3eKkc4r6RfeH6LOq7usnpJNP5qgccUtQ7W%2F5Bjzr%2BvV5Pd2hPeJ%2BFtDulZMnlu%2B6rm5%2FiL9Wongi%2BoLhEZeT5R8eLpA98ngtVZJJymmEK9CZSz9rlQpaFL8ternyK5d3y7ikTFk4y1w59q0l7rb9xJOVeVcpLfoS98str3fatJxPflNXJ3NsnYIzc3Fqaeh%2Fd921JfcTjY2Ql5YaoDUtXAuphJhK85da%2FLyDX2x%2BX%2FQThK4H2NhoQYAtGEugPpQ2XbQuL%2FBL7Zak4wRsZGSEi04w1uHxiWR%2FSL4m4kN%2F16gsWY%2FQvLtevC%2Bfpe7V636aS%2FmWx7rmOfzm2MihwQPvmPrbHGba%2F6BZrfNiA7sutd%2F4rOo2JMdTEfxpT4ceuDMXQ%2BJX7MM4lrWvHyGko%2FvuhEg9pI6pyWUUYhKKTcsH509DLoG%2BLclZ2cg5cvzYZlbatvi1Y40g%2FJAjj7JCy1VJz7CNqN7Pbd5SPPZ6Xcr4qhLI9oX1csvr00u3m0TJlERetKdAg0cmQ4lxGegkx0M8F%2FLg%2BMmULkCZn9W3lJBDh0TDfyx%2BuGU1f%2B%2Fwh4l%2Bqt%2FzMSf84lx51EeQv5SvvL%2FkuEREMYIXd%2FOSN6NxugxpoAn1rNTWkBVr4070mNifBtqjUnB43mpfPX9HhDpHJbvprYnt1E93DCjzBdi5bugbyDBHy6pc8Klj%2FurLhGjs%2Fx9aaZt%2F0FaJLYYC35SCD%2BihidzH%2F991aK9%2BvX66r17llvrpPmEFJGMQjPY39oE3SStfXLq333jLtpcNwviqChlSnrwr8ihWXGlYULTWpjXBGyNij%2FbJrL9HY5RRnHZeJr0M7HsEJXjyCevs29OwZyJSD3eyHmM1esmhHaauEp2LCSQrLQdaGDHXEtgzepN6f0OeevthxgL2J2FeDHavoOalHEB9SmT0%2F5HyfX%2FLhH0X36oT79Tp8XXE6vWuvuy%2F1WMFTUml5M5I3gMeim97%2BCaH2szfEt9Fz1pEmE8QktXKCfUYawmWpEE%2Ffgj%2BeEvr82bDQik%2BeessuFzv3Z58pvyfPub%2BGz8JeL3LpG3EJrrDhbv79OamoNiI7l0x%2B2jGTOT2%2F%2BZP0fr3Xqx%2FuS6hWqvn5e9r4SFTEoP6Xfai4V6dPKrLW%2B6D9KSJ%2F99q%2Bzrsl0XvYrZyr%2BzDiZ%2Fm3vam2IuNtDvILcjuSD2W9DyNDTR6whfJ61Vk9arvdqIKw5chtH%2F0L2nHbB8pYSwU31l56%2BjIiGSP%2BUuWy2rRe%2FXVRa9%2BsXa1%2Bsq4v1qrvl8Stym82jN8n4blhMCAjfss4xINLhLyDo6eiVMWU5v9Dvj4bKG7Wfb9GOpGi%2F%2FCJBRPGKfumXQoXjTLp3%2FFdRwLQTYOW%2F5Pbu0ymuax2p6IJJg80f7Iy%2FNct9W7yd3y%2BKoW%2Boz%2BS5dW7Hbv8QU8OhDjL5G9%2FiiuPDo%2Fd9YZxjZh9fX99eQxaDMr%2FCeokOWHkjS38oL7AY1R9jUhK1VkHE93%2B3xGgzkjkoDLlFMU6f79CNXfDu5PQ%2Bm98eEx%2FES5vcfGDTyerdC9X69EYT3E998u3sJCiXnhen8J27xdJrIIDJ5ad%2Bq8s%2Bfvy8tKtPJ6%2BtdlHuXOna0blFbvtkYFHUzye7WT6uync6CgalZm6%2BTwrwl33M%2FwRBG0klrxP5e%2B%2FS3ve%2FrT4WHBJm%2FfL6Cd1OkjZI5FY4SKfTLvb9AuK797%2BF3q6r0dZPTt11T5xC5DQwRfy72l7EDXfeQ3qLcIipR41uGYUR89kNrU6giw%2By3w7R9e4gh2XxWXPYIr3vy7iLBJukr6LyCb3btNCHluUnnfLf0Qsfb%2FJ5Jv%2BlUjmy%2FgGGWBH39ormT2b%2FPX3xgoPf0uXJ6Nvtcuyk0nvfJHQoU7Lfyas%2BcOSH9Okvetblmz7BGXdKLS93J3RKF98TVJ0q9WL%2B17lu%2B25F5F5FsV0OY5du4Iuk7DL33xbH3fl439el0kOfr7J3e3NLd9X8TQ6PRv%2Brd%2Bxq5VlXcmTk98I%2F2%2F6rXn%2BT5eTz%2Fyd3WU9X3EJ%2F1wAAABJNBmk%2BT6gV36EuNr8%2Barq69aki%2F%2B6vuvXPfrXc9y33VyXL%2FiPknvwdjTP8t2CSzwO01d6goI9Ki9fA7QOffrPY5RMdS%2FQ5H73a13Y75fqTyetdSsVa1LdUTXqZKi%2FcNEBLpeefd32Y4341qGqN9j5Ujvp9EwyfpP%2BmlZbs%2B6HbzEl%2B1VX6LV3jl9NNdq5UtQQ1j%2FkyNddb%2FaMzUTuG67%2BT5l1%2BpFcibm9e91arUzUTy%2F173Xu4i8nh%2Bvk3XN0uUvqdLwzu4y17eS44RanjmvGWjcnhe21c6EvUbOK%2BpXiLWK7q1OkuSYnB%2FmtCdfonckJEXuY1fJ5Vk%2FfaEt3%2BvXaueK3urxFq8lrUtr3YKBHNnNkXKpRe5I4Oj6S9Fd%2BKM5aeTCZYuJjjKL5tQNzx12X%2F%2B77q95K1deinTa%2F%2BcijZoWmj%2FVrh6lo98SKh5mpn567cXvlcf3U%2BYaNuhfRFLXE%2FESWreSUQmFkRG%2B4JI2la4R%2F4%2BCchrecJxyV9X4ZFu71%2BVi%2FzGvDqm5PzfwVy0cOommV4n33qdExmJj8R0DNPLnfvq1IWWX32urIjujU6EmafdZVBHPffKLETGhoHGobZbSWTzX3NjgIC%2F8UUzh0XP3evXJ6%2B%2Fter8NEwci7n45c%2BwkWwc9LvXmJu9uoVxiyWnhxKB3oV8ZMcerck9lI6sRwPprCn%2FlBGJY7G%2BvdWK9WvEa6Xoi%2B6X4sZELHHBP8nv%2B4IbzqMX4YjnlzR8pzhJfbz%2BjUNWq1%2FGzx5ezFzRerc3Mx9Gvd69sVe%2BhOVfdXXW9MkunfOCPYy5udo7v1lG8133k9rX9vsQeR6MP7lKsFm0ftiHf333zor9kLQpV7ncM1SYQZ78VX8OGWRnqe87%2F5OTz%2F%2B%2BX1NSz59FYEubmv0JrJ8z%2FSL3ffPSayDHBZxd3y%2B36gjJx0TDjqi4e32CO8MEmN35ihuL97xRDqd%2FUxs6hgP5ShRpwDfRHSkFN2%2Bup%2FzC5WPYJjOHUjLnIZS9EJu%2Bu%2BeI9DXwkten%2B1iuXlpK%2BjWq2M6mzV%2Bju5sUZo%2BFzd%2Ff4XLCPk%2FFYJbqUxg3yvlf9W4kqi7x3%2F%2BoIbx8j4N9ta%2BQERh%2F%2FoDfkzZMHwR%2FOuG5cFN6Y6IkoYCPC4L1%2BrS3p4aPFefsbgwGRjOM0h4QqFnUfMebf%2BfWv%2Bc3seXlDUOKZqj%2FWMaf%2Fnr%2BQYMMJ4P6Fvdxc7Gbut6cq5PV9ayfFLv3z9ii2N7s%2FuCa9%2BGp8oouVe%2BUTOyFlbWJVHZyCicbQalMfu8EoRd38rBU1Ou0nFjM2caHUH3OfHWpMI%2FPqx63xi%2Fjt7p05c7POQowKf9C612JM3MxD1M1iDz99xsT3k9nfzYJ%2BhVEuhZxN3lY2gxyanCBX3vN73fovUl%2FR%2BrWp%2FXlKIveT0VfU6d998vZPN9ihd77bsv%2FWYU9%2F0NyiSe3%2FUup9DGOXQ%2BCIqGnTcO5CeMSqvU%2FPz6P5%2B%2B%2FP5f3e1TvMR33RsitauvQ%2FrS%2F3V6v1fd7n%2B%2FZV7nq%2B8nw%2F%2Ffeov77%2FWDFbr1bh%2Fv9SJXrlXr0kE0vMGyXvy1cubLVJffeASgUlCgVCQUEwkEoWHAUCxECw0IYWCgmEoXEIzCreuXt%2FT2vd8zciVqZM1SjDib6X5DnsvB19vzxP2%2BdWkNvcvnzM%2BBzydVz6Xrl%2BnEL%2BAasjuqSsXPt2DJB9z88HztETy%2B4b09oihGlHlqO0ofsEUB6lYPitQ7c311fwdrs7xv0KTzNjOuORMFnsr%2BXfSelIAoJRkCpXdqC31fP3pckpdrU4%2BG8T73ZQu98dIajtMwiIsK3mqiVw7Jl%2BhAVIHZsDPwXiVashIC9X%2BLwvN6IMQBCFBAutLYfSJM9pYDgASAUkGoUCQUDAWCgWCgWCgYCgWIgWCgmCoUKxDCoRI5Vu9%2FP33u6zOK45RFaraUpfEvNWPS5f5Djy777%2FqX9FHDDf8x8Png7LC0n%2F%2BIvnprRfXk42QJ177JX03zRRthaygB2IJJl90l4iTAOFM843q54evia7XWphQzGfdycZJGOfb5Utgq%2BmNLEgm5pEK1x0KW1JBzahuXyZFmu6i6rtGwMDEgYG0RZPnRC3%2Fmh75mc1gbE1gKPKXWcg2CWeghBkcwiDVYQLu4UBg%2FsHIHg%2B3d8hBZKSH1WE7kk6ttlTgqDgAEqFJAqEgoEhKFhIFgoJgyFBQFBsFBmFDMFROESl4eu%2Fv6E5u8l3su6xTFzUSdDwHDz4zt8Xzz46Z9ODdoP7P0T0vzQHJ2Pk01qfy%2FL0MAaROjEi171nDc0fPmrJJN1SCbccAWuc8%2F03MjTdMAgvXYfBPiEWOBfmTWQ%2BFW9Wet5qg3gXxhArrheGqfcgW5rigf7vHbU0%2BANV8VXUrTI4hHFWZguUI4XXd9X39fbqAKRfkqF%2BMCiuy6RQCMmcsWrVAIcUFYCtGDQBwEkFJAkFCwFAqFwoFkKJCKFAqFAsJAuFQuESu5eM9%2Bvj7XjNKavmRpjcqnEkToeJ%2Fey4t0PtfE1T%2F%2FzeMavyAL98X73BvYZN3yqvbbFlFvMRjq2U081zGS%2Fyo1QEl7F2%2Bnl3cF8UQ4dJNopk927V38jtdnIlIPSfM1Tn1FXy%2FJROCRNV7deMHBqDfq8FcPla99wchJaokpktesIpHtvMBS0ZiED5nm1tf3r3AlJ8S7HAndwdbt%2BICy4vtiTf8syB0ezkAFL0pCxebmnOSXUTjSgS9AHASQUlCQ0HAUE4UCwUDAUEwkEwUGoTCgVCgWGgVEJWc8N8%2BOqr299ZCamCVdbMmtRJoOzR9O3XW779pj62%2BeK%2FNr3Nkl5embVXZo6uOL%2FPv3t%2F%2Fdb8wtqjoZnZx7YrLe8ABp0DgoL5OgZ%2Fe%2FtFBvfdoBNNbDl2Rqp87ldp1fS7%2BWWhy1JTWRqNZ996XMHFVVfspgoniwAYixWItIKMmhCMgItS0oN4eaSSDG8BJCXc5LkBv%2Fuq6xU%2FeFxf7A9ea0lOafyASWmlhmHLcITKOIuUor0WBwBKhSIKFILBQUBYMBYMBQyhQZBUSBUKBYRiEyXvWePHVVNyusNVAk5mErqLWPjfeK9D0b4P%2F%2B48z%2BnHHzhuG6hH1zLrx0Nh3QVa47XWfFOO%2F0RnU%2F32994rKt2rk777dreQnQRSzbG7kN4%2FV61FW8YuAyLU2iOJCluIiIRsupxPfo7LLHdq1s9nUuQFu%2Fgd75tzkFFgAZ2tMYHDUoViwgVid0lKg%2Fqf7X4Cw8N5554fOeuX9YxwvZtjOplqIXJSlfUuKQRxKg4ASgUiCgyCoWEgnCgYCgYCgVCwUEYUIYVCglKJ29ZW78dT368a3q8mm7ZdTnjczTqUnQ28Y6DuOfqJ2dlXGvu7P8jD1%2FtzfGkHoul4dy0r91vsPHCjMexKn6vR94JozfwO2%2B83AHLD4gM%2Bf2tK8J0YjXHxH%2B3%2BXinErDtzggziuzeiNnLCLXTyQO6yRdDy7vstc7Oy58Y3fd1dHd06Of9fZkk7LnlU8ubhHScl9nSrHV8gCY5dp%2FDETsWcMliqrEimK0CCgwhLYDgAAACP0GaUBQKBXd9%2FoW9CP9au79cqmI%2F8FVdf%2FWX%2B%2F9%2F%2F%2Br%2F%2Fv1%2FVu1r9X6%2F%2F%2F1qENieBCN6TrV9OJSM54JxPgnElsG7%2Fzejs%2B117U0svr0lq5%2BsX66v0aL9bj4Ict3cp74Qz0sh4GWH5afyxhx7%2FWLtFftWP16uW8E7q4jH58IZLk3rfViNXPxWK%2FpdS1TSyep0iPRmes%2FoT1cn69CmP0t8gwkO7Q3pbXqtYr9Wx2KzNXrFXr0u6t%2BsomdXr0K1VoT36xV6vFesUl16wVgi8GPd3UqFavyn0brxJuViVjV9ob3corS4Z%2FSsfqx8lesXIRJ6tfqxO18ww%2Ff714rnqxJmI%2B5Nzb3VaF6k4mTkXu1dNdq6XvDO%2FEDOHYsCg72L8gt7oaL%2F3mERkUuUnyyKI2mcvcb6F1EykEIDDUTb6d3x%2B4Sn97tfgrvfe9OsNrrBCd33P0ZLJ6v%2Ber5f9epK2bCd93k36E1%2BtS5y%2Fo3SezTr689eHE5f%2FPYJ3f4h%2BT2U%2FJAty5n6GZf%2F74n4mt0d6xOOd5u5WC%2BhD18RcnobUlghI79fnELGzx%2FXkvGQVM%2Fnr73f4JBTd7Im5OaS6tBfoixA7n9ZWV4JL37EvnKvvNO3fOT79XMfbcRia1XrUT4TFMctPJA%2FrKIXqU5WJWIj57Qtkq7W%2FIMvfc1xPmNN%2BleSq%2FQRZXG%2BTeJ35AhNTXsuK%2BS1eEr2739QSXvevLapfisv%2BHlYomHN63r0RlP9CehK%2BXFdehMVet5rk0vzXfPy%2FrFNAAAD3kGaUJQqBXLVJ6E9L667WK7knWKqprd33auXdevqppvWupekyavZVl3aZ73Ks3q1Vfq6qOWKvXYv11XrlJck%2FPcu%2FohBmI%2FerYIp2GE1YSfNfiLBmLQ24whI%2FW%2BsWurDV7%2Bj569%2F2WCdeYM3Y2H9WifR%2Bq65Y31qS0OY7XqqqpHe7mqu0JZXqxL6ur1i%2FWo30K6TYmEdUJy%2FV%2B1qb166snr%2F2K57kta%2FVjuX1yq1YxXL6xd%2FRRHB%2BMp26FpJfWq9Wll7W369XrL9XiNV6sIe1ar9QSDNxDkvrsEVy0QOA37%2FOdf0h2XvV2JEJEzwfYkxS9obBVrB3Ld3N69V3r1dX2hUWT3%2B%2FvfezsGEnZ3U%2FYKjCzLe8aGh0hjzCuLWJiEE%2B6MZfnezoIyEkDctHeUjafTViaBsrKMFK2bPaF6ktYq9au5qI%2FRe4N%2FieCwmi%2Fr13%2BQJUoQNPbvJ59d66%2B0Vsnj92E6BDxflhAdGXNPsTKSG2df0euNzsXrqru5MTmu%2FMV31hkR%2BaPNEQrwsv0Tu%2B68tq1%2BIlNpDYz7vvrfts5MR%2Fr%2BvMR910GYdyyXLdr5TI2MLq%2B5eI6kJrrk0qxOoN%2BAk%2Fow6Yfah%2FcfLzcl%2FBJ5vKvILdF%2FMZoHbF5f%2B8suFz%2FXuluqy3vXaE61p19RVNEZPk%2FkGW3%2FcozTPFerN%2FYY7s3vXh5Pp%2F5LO7%2FEUr93%2FXkKD8kD8kH2WeS%2BKJdOnJ39gjHtNbFPq%2FwSjMuR9b8H4cy2NRmuRQcYP20%2B9Lr0NIkl9167y5P9N9WfoRX5jcdZke3%2FgoCL78%2Bv9ih3JhWMiXXdVdX%2BKLjpdb89b4vMgPR9BjP2dd4kRz1bxhwd%2B4TFz5wTex1ur1PFdEqvW669%2FLNcV9a1V2vowhV%2FX4ot7w4plavoeUn9mX%2B7p7%2Bmr%2FMIzf6fGmTsXiI5KoN5GzjLRGG1R8vMxvv%2FJe%2F0CEu2qY5IolIpd980vopUqWi%2BC196%2BrK6yvyvJ71dNodLJ%2BX9Cd7VGb%2FcJYQvR9IhjW2nX1v1beVepe%2BvT%2FdaP80cff%2FfWhPbGsogrErD8T8%2Fz%2BrV5Ru7%2FL3f6vXoreL10vfdZ99dWT3trwyODqq%2BvsMZ5ddbLpFckyvfrVff4sQ4N7LlOyvPlanksGDN73HryiCnS3lo%2ByfXfXXXoWxv2u7uR%2BFfn91lercwx3SSqa9PfV1dda07%2FyYHkvfCf%2B%2FU0mJdKl3mXn%2B%2F1rk%2FqIf%2FaCOvn%2FWrvz6Tfk93ssvXr68snrXjiL02f5334l36t6Vilv0SUnaO5%2Bru1Sh9T3au56plbv9cpO6zf6XwiS78vlv%2FdQAAABAJBmlEUSgV9SEv%2BvfF9MvfE%2FJ%2F%2F0Yr%2Fr3wj%2BvfCXBz2r%2Bx%2F6v9f99r3%2F103%2F%2FxP%2BT5%2F%2B1%2F%2F2qZaFO0XvghXvQv5u%2FLXN%2BidJzyfcJKCTwi%2BLtwbMHyGvbfE%2BGyVB0mx60B%2F9rqQctz9ex3yx39XSt336r3fasav6IXq2RWJ7WXB0Tz8XtUvywQmhLwbqwJ928ThPeH9jolLv1Y%2FWp%2FVj6V3pV6tef2cUpta%2FLdbRxIsiuET%2FrlJXN4Xbm4J1ykFLXq3df061J6v3VLfrFfrF%2FUT3J5xC%2B2Mzv0iFvJzy%2F2rY7p%2F4jVYu5fV3v3f3dcq9%2BvZf%2BuulYP179eq%2BvJ5%2F9etfJl%2F%2FvVZTeuVZYsVxl4eDvfLQu3OsarHjLyqMYTOxfq8nv%2F1hWhvX6v2r1uvd3UuU3rhXrr4n9Yu7y%2F%2Fx46pNHbSGuUg2eUJx0ue%2BzOaStId5F0iZ93afyfFfy%2BhfWK%2Fk6Twci6%2F569eq5Z9m4cFJJTwXRn%2F7LII24i2uvz1RHUSP%2B3JElJnWjeT4L%2F0ZbMTPJ6XvkmImI689dIbafuw%2BXcHyh0rltBFyJzfd%2Bh7%2FN4b%2BXl%2F%2FuieLq5cvRucYvDt9f1Pgq8ONIpGCQOWhSOEB4WWQhfhk8f8LYHzKEvfUupoMjrY6mHwgJfjdNcsE%2BS%2FZqwk%2B1L8GFKOiIunG0CjyFw%2F4kEPPhaM25vFl8nsVSFJgINUfYjLfmoaiprkr2L6kfqx34mTZPk%2Br2hYrL72XOersq%2FtF7J4fkl5e9i4aJlMXVPGSJ%2BUms32epFE8PqUVjyCuQXKOxf9ntNd7dcn36qyDbJSRP2CKlj7WKn9nO%2Fx8bedf0099P%2Biv%2BvohNOCodL%2BCJnCPk%2BnaY67EygaPiS2GTfL5Pf9QUT53IkoCi0LSyqerpm%2FdXcvYIxb3svmjr7qxApLpEp9qVdgivvqtaYWvLo%2F1cpIoyP%2B1r3z84JOHGhO%2FOLv5yic0iDEnN4nJf6PlforO%2B%2B%2B0TucgqNAgPk8Evb2Xvd8nx%2F6Em6J996%2Bb3XfotIddnWirDZofUzqsrH9mEx4HgPsXORfnhKxvuoQaT0LaWLkQ5fH0T4%2B%2Fvqvw0Ypo4W1H7n%2Fqd3Nn6%2B0Qgy0NBAHRLzEVfZdIfy6PES0%2FMxl77EFazWdRvJ7vuSvUT24r%2B5H9Ib1XJCc06HYbr8nhttk3L1VdS5PB%2F%2B%2Bp%2Be6rbtuJyTxBPf%2F8TlJ6aWuhJ8n5r%2F9O8p7tvk%2FzXv3qXq0Vzbrk%2Fv%2F%2FRvz93ftXv3%2BjtFpVcnn0%2F1%2Bsqa%2B%2Ffye%2FJ25t6iwgNMvltH56up5NUEe%2Bl6SE6uTWouQnu%2F8t%2Fa1d9%2BbU9euFUTQqUueLiVfXl1ru1f3%2BpQw%2FRnl9ZXk94AAAALiQZpRlGoFffeT0%2FqhkXa%2FXu%2B6tW8FlYv%2F%2B%2B%2BiOf%2F5Fbvh5%2FXr%2Bv1i%2FV3at2rfJ3%2Fk9v%2FCGcgxaf79e7%2BIr1yk9WdrVYW1Av68FfJ6eCGCkTqsvw34FY3Zh0vB0st1T47vjsutQSXl3%2Brq6on9aov%2F9%2BuXxckvOhTO9xP32%2FLHfX32hLqFLY5epelucvfaxd3zK5V93dXz16FNq%2FZ13332hr1fEy0SrLFYrVq5Ja55L5e9v%2BV3ITd91aGZVdVoWyTdaj%2FXr4qa%2B71vklHeSLdT98hdXLd5db%2Fr1JjSdy5eG4bl777vvrv175O5vV79elvi1Y5fJrBD3O%2FP333337r1XVrUXxNX2rP1ebN4%2Fur77777Q7vJ4Pl4PlNLnNaHxd3fxd3NfE8%2BjfthLl%2B%2B%2B%2BzFopvR0E%2BaHn%2B%2B%2B%2Fqqru%2FQ2V8XV0OZXKlZvJXgh8pgglLnP3p0tKruS9HffkXX333318nz3aHyrBmPqEViq%2Fpcu5c%2F%2BifApOuYJRmG%2B%2BzZwgDL%2Bta6KrrnQSX32Ue94rE0WKs39euzeX2Gk98%2FbCD2%2Fw2XFgVcJ2LF%2FYUtbNKXwRSkikvZc9TiObJP7dLn7nxVD8rv0qieXxGnfov2%2BUJJX6uuienuXk9cvS2FSdc6Lr7OI2Vsl8jcipGvLz1IRJCMvoL15Fr%2Fxfw%3D&media_id=1254206535166763008&segment_index=45" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:20 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:20 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_vI1KjXeGGI3FxMX1nLy+5w==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:20 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786114035721136; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:20 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "294f8cd9ff67736a60d711b50b97effc", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19907", - "x-rate-limit-reset": "1587864356", - "x-response-time": "34", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00ce83dd00e2ec0e", - "x-tsa-request-body-time": "64", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"QWAfE182LMO14prmP5CpZWU%2BGWU%3D\"", - "Expect": null - }, - "body": "command=APPEND&media_data=600tWQJMiw8tqv5dv%2FnK756PpD0SzNnq%2FDhpb1um37vbVblXnyei%2F%2BCETJaCe%2FdU3dY%2FXfldb0x6ufvryevvlHUyXqvvRt5f%2FzFx2w1ircmhvLpeXxffkJwnejob36vXIr%2Fcn057FBQ4YDfdrvvs51%2FGM%2FXpdfaqcnJnEW3K%2FXup5nFm9JxFz91LXoIsiJLJ%2B64166XR11UX67%2Fo4QX0WOGETzt0nmvhr78QqzfKuXelfaHt81etdxOX5c63Nrb4KUU9o77XWjj1Z35XWLfDX7f5gpy%2F%2F6CbVn9%2FrhL6%2Bufxn01eepS02TVywAEiFJQkFBEFQoFRMGAqGAsGAqFBKRAqFBKEwoFRoFQid64yc3603fMz2243rday6m7yZrgR0Hd9tv8fp5vqX1nbtRa9e89uLDybwGo6pl%2F5Er8Wa%2Fcyae7HrLZ8M34y4OI3HU30U%2BWWe1iueZ259ArjzZKpFzb97OpTgw7HZ8y8nrp%2FHelFbf4poNidxBDlBz8fn1joXjlxtmk5554DXt7YKo%2Bu%2BMItsZE276LuPKYAVGbCxm5RItElNK0UqVL2eZXOLOyA2VBwASoUlCgiGoTCgWEgZCgXCgTCgzCg1CgSCYUCQUCoUCoROqoyvHne%2BO7zqlpuxKyVMviCcBw5H3Hj1e73%2Fr9x1iV38Jc%2BCz1PtL8B%2BKf7dG%2F3VD9f4ulev6v5Zej%2B5jI2h%2Bcu6ZMnK%2Fe3ySa0hnrrXE7tJc%2Bplf3RgSLEeKSed0v7D5rHXDdQ81q4KPyHLzCcjdxkbSF6lLXilwxfhk6ir%2Bq3eusDq9vLDe5%2B4AQ1p2CCn2E0Lqm3EBZPiA6QUUYwcAEqFJCEFBMFBQFgwFgwFCmFgoJRoJQoMwidGuU9%2BOc68a3xUlqTJeZDL4lJOhxfg%2BI%2BHw7fqO9ORdEcj%2BhVYU%2Be%2Fg9EqPLZIbk3w8p9g39NV2T%2FRtuHh%2FFkNjU%2FspVkib7g8HHtqH4CwNrMxH00xU3czkjivAizdcNWOs7DzAXUp9xT%2FGmVud%2BTuZ9%2FELV%2BBFMZ60qsxm%2FtOZHrcF6r%2B91enZD2LfE%2F2XpwJc15i7cqMlIzQI0hMKqXmAzsz7LA4AEoVJBkFBsFAsOAsGAoJhIJgoRRIVQid595rtzec%2B3rjninFUiJTcpOElTQ7fwOTf7n3d9E5Hse8T3%2F%2BlVLvnM1FuX8L2vg2HGvoXkdRqtXsHdXsyucg8KkAaxxvGEJbR2QxB%2BjI89p9EwLmuYkDKjCHb3vtVClumeIN91x1MEui61su13xcMGVn62owtZRvkdu7tQWLr899Sf6%2BA7hitQ3LHlV9M5BnkCaDGEZUkRrcRkF73EFuy3YSL%2FoBwEemf4bKCzUinaWmL1oO04bEqMBYyAYBgSTo3UHrXWfdE0psa09Uvky9kxpw1iWw0ySOrdW37ArWmiM9HYfdo627e%2FVisFV1o%2FBsO8Ley4b5ZkFsiWtblgWM9ByABQLPMG2l50pMpKSmsBEzkuCAeEuclRhGKfTdFP8oJAq2MMl88aYkqHNxkQYvsvt3cpTNzV1gnpck5xwFwmrseDdvAd5C4lWddmYc58MMX9HfZO%2BIOYcMwwzhBrJD4dtaMfDFVJbVp338E9q%2FeglKn59%2B%2B73wMA8kDwRLxLxPnAYTgEm1JQoEgoFQoJgoKAoFwsGAoFgoFgoFQoUgoVQoFQiYrOvXO%2Bq5vd7%2BOadVu5kqlQnSE4Do6vu547%2BN8OfDnOs1o6qAK1Rpva%2B7HhMdKVoQ9cHvtBf2f0Hkeg8DtDogjsJ%2BakR9P8YFThuwsiQeqk5b12kUDDr010T12m%2Fl%2FQfGWwajZ9%2BMRgC%2Fh5M%2FgdNcOqk5BXuU0ijv6Ka0EY%2FzW1uP%2Bn2gC%2FDVHe3apbVPFo7cH9qnGi1B64lRZKpVOUkozWsFN1BUklcxWA4ATBUlCglCgVCwTCwUDAUCwUDAWCgWEglCgSEhGCg1EJmsknfdznXN5xRZV1NyVUTV5croc3HvE7HIHAuX6zavMXB3RBL4o3s3aNf%2FHlfbvGeNhcU%2FYnKTfdRU8tjBBr7CmGcRnT7q3T9rvNaiXx20Lv7Fo4dPgMWGMchQLux%2B1%2BeCE51BDVobD13beSAKFpuJFWEIjcj%2FyIMfT6WpCEUZu8kg9%2Br%2BI01n5%2F5xwjeXc9p93HtgxIDKGw%2FZCMVsI4WLlV0SNoQC9r3IBruDgAAAmdBmlIUigV%2FSE5X613%2BvX61drFW6u%2FVk3q%2Fct8%2FVya1V9q980vr3zeqxy7XuqvWVcnyeI%2FJXJv6KOyS%2BSxyCPqHEzg%2FWLnWN1ZPX%2FXvm7%2BJn9XPlVx9XKqV5fy%2F35BgIf8%2BugQ4MYLXc%2Fryx3L7tC3J7sV3fI101evSbN1V9ecYvpF3v7%2FRHkya9BHq9e6rqVjrxxPOxyypNVNxH6tJyfL%2FeT3W6%2BqpWfS9NusX6sdrWOf1c369XMrfERHrKt16Tnk2okJLc%2FrV44n0byLB8hh2e2hg6P%2Bm0u64juRfOvVLXEXslIJvuifGa9%2BWwkTEXuSiEE4u1wk5viKwzkvon9XehNcR8RUxHDhPCSbXW7q%2B6RVdXdXdEd%2FF81Vy0Vz91%2B%2FkWXl%2BuX3JX3a5P3%2B7J61rZghy%2Bn9P3feT3WTuXm7u%2FH69BGV8l%2F0u5ydKvXffPc3K3fn92EC33Td8%2FxCH9V38kssTKzXV8sT336Zwgv8f%2BnSdV36CPX9X01093yyub%2B%2BXn7777yeHu9yVS988vr13JL5C1c3dOv76%2BwSBR79nMnLy1L2hrmp%2B%2Beuavu0Liu%2B9v99yy8vP37fenb9lyeCvr33333W3JlXDt3LfffffLy8%2FLy3V32gtrn2E%2FfffejXvxvgj74xOROfzie5PQZqvXLJ9%2F%2FfiS6ClRO9zb6duurvvvl3Iv3y89XcOJ7Ly8vE3693LVTi%2B5K%2BXv2WrQQ7Z%2Bz%2B%2B%2B%2B6i6u5%2B4uiLzvl5e%2B%2B6vviayUE3%2FWvl2hD%2BvffPy98vaweJ%2FHequFV2tfrXLSfkm1c7qZVdoXkJ8%2F83okH65XLz8%2BAAAAJxQZpSlKoFf6ExS39K5%2BtfG1UtfrX65V6t7rV%2BrletRPq42ur9cP1ruT1rq61i7%2Ba617tYO5fOZcG%2BX%2B9ZLq%2F0Jar%2FV79Xk1WLteu1%2BNyaqz3WK9QQjI0175PjRP9a1%2FV69C2ktW%2FXu1ljumk9Yq5lqvWuu7V%2B5al73V5H%2BcYvl1L6ojh63dXdoIv2rudX%2Bl7FbivV79Xn8oQ461KT6%2F7upiL6QRYbV%2B%2BXv2avWv1ruLnp6rLKtVoXctbrq6%2B1jnF161V9165S81Unr5Nd8lVrV9LVzy8101%2Br3MRXqx81wjuJ68UEroGzSSo1r7m5MSLaCcu7vxb516X1bvz6yZLvX84SXhudf%2Fz1%2BchPIqeI9Si%2FJNaW6ZBNwX1Knjt%2BuVetRGTsmv13tvv%2B%2FMEqHN%2Fr1a%2BTes2xM1yRF4jeTLrfitCixSr0LSVSHr59KZ9ckTfoJ36bqktarqT%2FJvc4UUsJZte5rm70ull841f4bwGopEISbV0Le%2BJ5ZPRW7rLkuuvJp9%2Ft1JS6%2BqCmvzhFf2j2TXYt7ieS79HikuomVbfUiVdb%2Btl911OFlVa%2F19ULw9T%2Bxo0VaD5Pf9fc4rDU8%2F84Jxox78YB679nEL8q08MyxNxa7b9T1OoyK%2FU1%2BitJNXqyIGWiBdklkh%2Ba%2F9Fon3r%2BT39L9uK%2Bd7pe567jp58m%2FSFjbR1fosu6pELeIhOn5PJeTdo9r9W7qkke6yTXqccvp5tH33WqO569IhLlUQr9r0lJWV1l%2B9XU9TWlLne5eX%2F%2Br9vu6pf%2FWLy%2B17ieLq%2BWa5KWpKsndyRF4rq7orue%2B7tGfbnMuXybif9Ffu%2BI5rvuaAEsmf4VGE5QsUKkSZcq1Lyp5sKWYboUboviN4j3Sp4RMjCruNJ3XWTpwokSgTr5M5AS7%2B9Vp0WndPAaxDGIf%2F9vU8pqqaZJLccyzA0%2BP5zZSYRiFCYmInXtfG835%2Bl4OtwtXR0Yu2Ozjs99EXRSJUv8DSYrTOj0lwFi%2BzKoBCDerIdvV42n9gElY7jcQYX%2BHGDVJv352tMWcJ231acAr6g%2FgfES%2BghP517hB0lmoUf79et6356Wn50k10KO7KyMCpB%2F9spkg5xvMT1IAVHq45NCo2AHARiZ%2FlvZRlSypCqnnoe9feQADzH%2FSAAP9F50AA%2BJ%2F5AAHxv%2FIAA1%2Fff8fSAAAAB9v0Hj%2FJAAAAD7L%2B3%2Fx4wAAAAdV%2B3dN%2BXd7xQAAAAAAP8T4DT2WAAAAAAA%2Fu3S%2F3QAAB7cdwAAAAAAAAADgAAADYNtb292AAAAbG12aGQAAAAAx8rup8fK7qgAAV%2BQAAelgAABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT%2F%2F%2FD3%2F%2FAAAGCnRyYWsAAABcdGtoZAAAAAHHyu6nx8ruqAAAAAEAAAAAAAeZUAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAACMAAAAUAAAAAABaZtZGlhAAAAIG1kaGQAAAAAx8rup8fK7qgAAV%2BQAAeZUFXEAAAAAAAhaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAAAAAAVdbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAFHXN0YmwAAACrc3RzZAAAAAAAAAABAAAAm2F2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAACMAFAAEgAAABIAAAAAAAAAAEOSlZUL0FWQyBDb2RpbmcAAAAAAAAAAAAAAAAAAAAAAAAY%2F%2F8AAAAzYXZjQwFCwB7%2F4QAbZ0LAHp4hgRhTTUBAQFAAAAMAEAAAAwPI8WLuAQAFaM4GyyAAAAASY29scm5jbGMAAQABAAEAAAAYc3R0cwAAAAAAAAABAAAApgAAC7gAAAKsc3RzegAAAAAAAAAAAAAApgAAVicAAAsgAAAFvAAABeIAAAXBAAAENwAABAcAAAO2AAAGRQAAA3MAAAUSAAADJgAAAukAAAN7AAADSgAAA2sAAAK2AAADTAAAAnoAAALHAAACLgAAAxYAAAImAAACfwAAAewAAAHqAAAB9QAAAesAAAH6AAAB5wAAAfwAAAHdAAABxgAAAa4AAAHIAAABuQAAAZAAAAGTAAABjAAAAdoAAAHCAAAF0AAAB7gAAAZ6AAAJqQAACiwAAAp8AAAMswAACYwAAAlSAAAMBAAADcEAAA90AAAQSAAAEQYAABBhAAAMYwAADDEAAAtCAAAMDQAADzIAAAp7AAANDwAACuAAAAoOAAALawAACHQAAAw2AAAJ5gAABo0AAAT4AAAHigAAB8EAAAnzAAAHxwAACssAAArSAAALdAAADCgAAAqaAAAMYAAADW0AAAw%2BAAAP%2FAAADoIAAAt5AAAN5AAADSQAAAoXAAARqgAAEmUAAA17AAASoAAAE9gAABFJAAAOWQAAEBUAABaBAAAJtAAABusAAAXvAAAFigAAA9cAAAQNAAADuwAABGsAAANAAAADMAAAAt4AAAOuAAAFzwAABGwAAAVpAAAFAAAABqEAAAM1AAAEGgAAA%2FoAAAY9AAAF1gAABGgAAALWAAAEtQAAAtkAAAJ%2FAAACTQAAAn0AAAOMAAACBgAAAgEAAAd%2FAAAF7wAABbgAAAQKAAACmQAAAx0AAAfFAAAFrAAABHgAAAhxAAAImQAACOkAAAiZAAAFcwAAB8cAAAg9AAALWQAACjYAAAa6AAAF%2BQAABy4AAAbrAAAExgAABLoAAAVmAAAEMQAABooAAAbPAAAG%2FgAABJcAAAJDAAAD4gAABAYAAALmAAACawAAAnUAAAAoc3RzYwAAAAAAAAACAAAAAQAAAAQAAAABAAAAKgAAAAIAAAABAAAAuHN0Y28AAAAAAAAAKgAAAKgAAHPmAACL9AAApAgAALdkAADIpQAA19gAAOSlAADsXwAA%2BF8AAQRBAAEfwwABUYUAAYR%2BAAHMpgACA8AAAjxSAAJmdQACihwAArSmAALnZgADIwEAA12sAAOelwAD6mQABCYKAAQ%2BaQAETP8ABGPZAAR%2BQwAEmJsABK2pAAS%2B9wAE15QABO1sAAUOOwAFLckABVnwAAV7ggAFlSsABbPaAAXGZwAAABRzdHNzAAAAAAAAAAEAAAABAAAAsnNkdHAAAAAABERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAAABn50cmFrAAAAXHRraGQAAAADx8rup8fK7qgAAAACAAAAAAAHpYAAAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAYEbWRpYQAAACBtZGhkAAAAAMfK7qfHyu6oAAC7gAAEFAAVxwAAAAAAIWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAAAAAAAFu21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAFf3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAEAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAAAEgICAFEAVAAEYAAFl8AABRGsFgICAAhGIBoCAgAECAAAAGHN0dHMAAAAAAAAAAQAAAQUAAAQAAAAEKHN0c3oAAAAAAAAAAAAAAQUAAAD3AAAA2wAAAOEAAADlAAAA6QAAAOgAAADwAAAA8QAAAO8AAADYAAAA5gAAAOcAAADpAAAA6wAAAOoAAADoAAAA4QAAAOcAAADXAAAA2gAAANkAAADbAAAA6QAAAO4AAADlAAAA4QAAAOYAAADlAAAA2AAAAN0AAADdAAAA1QAAAOoAAADdAAAA0AAAANYAAADpAAAAvAAAAKsAAACzAAAAtQAAALwAAADOAAAAtAAAALYAAACzAAAAtgAAALcAAAC%2FAAAAtwAAAM0AAADBAAAAugAAAKcAAAC0AAAAsQAAAL4AAADQAAAAugAAALwAAADEAAAAxgAAAMsAAADEAAAAwwAAAMgAAADSAAAA0gAAANYAAAD1AAAA%2BgAAAPYAAAECAAAA%2FAAAAPwAAADuAAAA5gAAAOoAAADqAAAA6AAAAN4AAADfAAAA5wAAAPYAAAD%2FAAABAwAAAPYAAAEIAAABAwAAAP0AAAEFAAABAgAAAQAAAAEUAAABGAAAAP0AAAD7AAABEQAAAQUAAAEFAAABCgAAAQEAAADzAAAA9wAAAPcAAAEBAAABAgAAAPgAAAD4AAAA7wAAAO0AAADjAAAA7AAAAOIAAADoAAAA3AAAAOAAAADzAAAA3wAAAOEAAADPAAAAzgAAANgAAADOAAAAxwAAAM0AAAC3AAAArwAAAMgAAADXAAAA5QAAAOQAAADGAAAA0QAAANUAAADlAAAA2AAAAMgAAAC%2BAAAAvwAAAMsAAADSAAAAyAAAAMoAAACxAAAAowAAAMcAAADcAAAA2QAAAN0AAADRAAAA0gAAAMIAAAC8AAAAsQAAAJsAAACJAAAAogAAAJ8AAAC1AAAApgAAALIAAAC1AAAArgAAALQAAACwAAAAxgAAAMMAAADVAAAA5AAAAPYAAADWAAAA2wAAAMwAAADnAAAA%2BQAAAMsAAADYAAAA1gAAAOQAAADxAAAA5AAAAOYAAADfAAAA7gAAANcAAADHAAAA5wAAAPkAAADtAAAAzwAAAPEAAADmAAAA3AAAAOQAAADvAAAA5QAAAPEAAADjAAAA7AAAAOwAAADzAAAA9QAAAP0AAAELAAABEAAAAREAAAEDAAABAQAAAPsAAAD6AAAA5wAAAOUAAADwAAAA0gAAAOUAAADzAAAA8QAAAPIAAAD%2FAAAA9wAAAO4AAADVAAAA2QAAAOoAAADjAAAA3wAAAPcAAAD%2FAAAA%2BAAAAPoAAAD9AAAA9wAAAPkAAAD7AAAA%2BAAAAPYAAADwAAAA%2FgAAAQIAAADpAAAA7AAAAOwAAADnAAAA6gAAAN4AAADiAAAAyQAAANQAAADUAAAAxwAAAMkAAADIAAAAwQAAAMAAAAC9AAAA3gAAAMsAAADNAAAA1AAAAG0AAAAoc3RzYwAAAAAAAAACAAAAAQAAAAcAAAABAAAAJgAAAAIAAAABAAAAqHN0Y28AAAAAAAAAJgAAbY0AAIWbAACd5AAAsSEAAMKnAADSjgAA344AAPNUAAD%2B6AABGgUAAUrHAAF%2BKAABxaEAAfyJAAI1XAACg2oAAq5iAALhrgADHW0AA1gEAAOZTQAD5LEABCGZAAQ5ZwAEXcYABHgYAASSagAEp2cABLh%2BAATQbAAE5wwABQfGAAVTXAAFdLwABY6ZAAWuGQAFwOsABctHAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAG91ZHRhAAAAZ21ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXIAAAAAAAAAAAAAAAAAAAAAOmlsc3QAAAAyqXRvbwAAACpkYXRhAAAAAQAAAABIYW5kQnJha2UgMC45LjQgMjAwOTExMjMwMAAAAIRmcmVlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D&media_id=1254206535166763008&segment_index=46" - }, - "response": { - "status": { - "http_version": "2", - "code": "204", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-security-policy": "default-src 'self'; connect-src 'self'; font-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; frame-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; img-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com data:; media-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; object-src 'none'; script-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; style-src 'self' https:\/\/*.twimg.com https:\/\/twitter.com https:\/\/ton.twitter.com; report-uri https:\/\/twitter.com\/i\/csp_report?a=OBZG6ZTJNRSWE2LSMQ%3D%3D%3D%3D%3D%3D&ro=false;", - "content-type": "text\/html;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:21 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:21 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_HPbaNZ+DeDAAtrFzHvR9CA==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:21 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786114105175417; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:21 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "204 No Content", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "5faa60936f0095cdada36f89628ae0ec", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "20000", - "x-rate-limit-remaining": "19906", - "x-rate-limit-reset": "1587864356", - "x-response-time": "30", - "x-segmentcount": "0", - "x-totalbytes": "0", - "x-transaction": "00583d5a0012a058", - "x-tsa-request-body-time": "65", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - } - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/upload.twitter.com\/1.1\/media\/upload.json", - "headers": { - "Host": "upload.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"xMvogq%2FzzAEKO8pJIrksDYlKOqk%3D\"", - "Expect": null - }, - "body": "command=FINALIZE&media_id=1254206535166763008" - }, - "response": { - "status": { - "http_version": "2", - "code": "201", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "135", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:22 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:22 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_qkMgnhcw2O5dlZYspX5K7g==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:22 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786114169332176; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:22 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "201 Created", - "strict-transport-security": "max-age=631138519", - "vary": "Origin", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "bf196b3247af9e6bf4d8fe8f07e205ba", - "x-frame-options": "SAMEORIGIN", - "x-mediaid": "1254206535166763008", - "x-rate-limit-limit": "615", - "x-rate-limit-remaining": "613", - "x-rate-limit-reset": "1587864382", - "x-response-time": "324", - "x-transaction": "007a2eaf00daa375", - "x-tsa-request-body-time": "0", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "1; mode=block" - }, - "body": "{\"media_id\":1254206535166763008,\"media_id_string\":\"1254206535166763008\",\"size\":383631,\"expires_after_secs\":86400,\"video\":{\"video_type\":\"video\\\/mp4\"}}" - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/1.1\/statuses\/update.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"pWkPa%2BUCAF4iAZkx9QI2IeFUwRI%3D\"", - "Expect": null - }, - "body": "media_ids=1254206535166763008&status=Hello%20World%201587861062" - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "1240", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:22 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:22 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_TcHNmSK1nE37GCWbPpQbuQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:22 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786114261320282; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:22 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "ca0d9e1ce5dd591b36e8b6f2887e1730", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "167", - "x-transaction": "0070a65d0013f72b", - "x-tsa-request-body-time": "0", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"created_at\":\"Sun Apr 26 00:32:22 +0000 2020\",\"id\":1254206652397617152,\"id_str\":\"1254206652397617152\",\"text\":\"Hello World 1587861062 https:\\\/\\\/t.co\\\/nQbFmnj7Dq\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254206535166763008,\"id_str\":\"1254206535166763008\",\"indices\":[23,46],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254206535166763008\\\/pu\\\/img\\\/MKS-slO_VH066gld.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254206535166763008\\\/pu\\\/img\\\/MKS-slO_VH066gld.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/nQbFmnj7Dq\",\"display_url\":\"pic.twitter.com\\\/nQbFmnj7Dq\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/oauthlibtest\\\/status\\\/1254206652397617152\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"large\":{\"w\":560,\"h\":320,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":560,\"h\":320,\"resize\":\"fit\"},\"medium\":{\"w\":560,\"h\":320,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254206535166763008,\"id_str\":\"1254206535166763008\",\"indices\":[23,46],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254206535166763008\\\/pu\\\/img\\\/MKS-slO_VH066gld.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254206535166763008\\\/pu\\\/img\\\/MKS-slO_VH066gld.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/nQbFmnj7Dq\",\"display_url\":\"pic.twitter.com\\\/nQbFmnj7Dq\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/oauthlibtest\\\/status\\\/1254206652397617152\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"large\":{\"w\":560,\"h\":320,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":560,\"h\":320,\"resize\":\"fit\"},\"medium\":{\"w\":560,\"h\":320,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[7,4],\"duration_millis\":5568,\"variants\":[{\"bitrate\":256000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254206535166763008\\\/pu\\\/vid\\\/314x180\\\/HtzyDH6Gqdl5UDwM.mp4?tag=1\"},{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254206535166763008\\\/pu\\\/pl\\\/RPouBvpOym-0X8Yr.m3u8?tag=1\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/twitteroauth.com\\\" rel=\\\"nofollow\\\"\\u003eTwitterOAuth dev\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":6,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"}" - } -},{ - "request": { - "method": "POST", - "url": "https:\/\/api.twitter.com\/1.1\/statuses\/destroy\/1254206652397617152.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"AicdilxiX%2F%2FyTYLn4%2FHVYw7iuiE%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "1240", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:32:23 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:32:23 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_a6ZVfkcIDM\/aQYmimBf2fw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:23 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786114334116680; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:32:23 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "bf0b263f4d51d45af76df75606016456", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-response-time": "54", - "x-transaction": "00c7bdbf003e3a48", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"created_at\":\"Sun Apr 26 00:32:22 +0000 2020\",\"id\":1254206652397617152,\"id_str\":\"1254206652397617152\",\"text\":\"Hello World 1587861062 https:\\\/\\\/t.co\\\/nQbFmnj7Dq\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[],\"media\":[{\"id\":1254206535166763008,\"id_str\":\"1254206535166763008\",\"indices\":[23,46],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254206535166763008\\\/pu\\\/img\\\/MKS-slO_VH066gld.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254206535166763008\\\/pu\\\/img\\\/MKS-slO_VH066gld.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/nQbFmnj7Dq\",\"display_url\":\"pic.twitter.com\\\/nQbFmnj7Dq\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/oauthlibtest\\\/status\\\/1254206652397617152\\\/video\\\/1\",\"type\":\"photo\",\"sizes\":{\"large\":{\"w\":560,\"h\":320,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":560,\"h\":320,\"resize\":\"fit\"},\"medium\":{\"w\":560,\"h\":320,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":1254206535166763008,\"id_str\":\"1254206535166763008\",\"indices\":[23,46],\"media_url\":\"http:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254206535166763008\\\/pu\\\/img\\\/MKS-slO_VH066gld.jpg\",\"media_url_https\":\"https:\\\/\\\/pbs.twimg.com\\\/ext_tw_video_thumb\\\/1254206535166763008\\\/pu\\\/img\\\/MKS-slO_VH066gld.jpg\",\"url\":\"https:\\\/\\\/t.co\\\/nQbFmnj7Dq\",\"display_url\":\"pic.twitter.com\\\/nQbFmnj7Dq\",\"expanded_url\":\"https:\\\/\\\/twitter.com\\\/oauthlibtest\\\/status\\\/1254206652397617152\\\/video\\\/1\",\"type\":\"video\",\"sizes\":{\"large\":{\"w\":560,\"h\":320,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"small\":{\"w\":560,\"h\":320,\"resize\":\"fit\"},\"medium\":{\"w\":560,\"h\":320,\"resize\":\"fit\"}},\"video_info\":{\"aspect_ratio\":[7,4],\"duration_millis\":5568,\"variants\":[{\"bitrate\":256000,\"content_type\":\"video\\\/mp4\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254206535166763008\\\/pu\\\/vid\\\/314x180\\\/HtzyDH6Gqdl5UDwM.mp4?tag=1\"},{\"content_type\":\"application\\\/x-mpegURL\",\"url\":\"https:\\\/\\\/video.twimg.com\\\/ext_tw_video\\\/1254206535166763008\\\/pu\\\/pl\\\/RPouBvpOym-0X8Yr.m3u8?tag=1\"}]},\"additional_media_info\":{\"monetizable\":false}}]},\"source\":\"\\u003ca href=\\\"https:\\\/\\\/twitteroauth.com\\\" rel=\\\"nofollow\\\"\\u003eTwitterOAuth dev\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":6,\"lang\":null,\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\"},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testResetLastResponse.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testResetLastResponse.json deleted file mode 100644 index 0637a088..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testResetLastResponse.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testSetOauthToken.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testSetOauthToken.json deleted file mode 100644 index 572e6b85..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testSetOauthToken.json +++ /dev/null @@ -1,46 +0,0 @@ -[{ - "request": { - "method": "GET", - "url": "https:\/\/api.twitter.com\/1.1\/friendships\/show.json?target_screen_name=twitterapi", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"TzPCDLbvxIAlxBqg5Fpf4JZpFJo%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "2", - "code": "200", - "message": "" - }, - "headers": { - "cache-control": "no-cache, no-store, must-revalidate, pre-check=0, post-check=0", - "content-disposition": "attachment; filename=json.json", - "content-encoding": "gzip", - "content-length": "246", - "content-type": "application\/json;charset=utf-8", - "date": "Sun, 26 Apr 2020 00:31:09 GMT", - "expires": "Tue, 31 Mar 1981 05:00:00 GMT", - "last-modified": "Sun, 26 Apr 2020 00:31:09 GMT", - "pragma": "no-cache", - "server": "tsa_b", - "set-cookie": "personalization_id=\"v1_1Yr9ogG1fxy1wdDOY63jAw==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:09 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None, lang=en; Path=\/, guest_id=v1%3A158786106956820884; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:09 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None", - "status": "200 OK", - "strict-transport-security": "max-age=631138519", - "x-access-level": "read-write-directmessages", - "x-connection-hash": "e8b1e309982b5c1d1adedc814fa2e6c3", - "x-content-type-options": "nosniff", - "x-frame-options": "SAMEORIGIN", - "x-rate-limit-limit": "180", - "x-rate-limit-remaining": "178", - "x-rate-limit-reset": "1587861610", - "x-response-time": "20", - "x-transaction": "0075ffd2008ff583", - "x-twitter-response-tags": "BouncerCompliant", - "x-xss-protection": "0" - }, - "body": "{\"relationship\":{\"source\":{\"id\":93915746,\"id_str\":\"93915746\",\"screen_name\":\"oauthlibtest\",\"following\":false,\"followed_by\":false,\"live_following\":false,\"following_received\":false,\"following_requested\":false,\"notifications_enabled\":false,\"can_dm\":false,\"blocking\":false,\"blocked_by\":false,\"muting\":false,\"want_retweets\":false,\"all_replies\":false,\"marked_spam\":false},\"target\":{\"id\":6253282,\"id_str\":\"6253282\",\"screen_name\":\"TwitterAPI\",\"following\":false,\"followed_by\":false,\"following_received\":false,\"following_requested\":false}}}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testSetProxy.json b/twitter/vendor/abraham/twitteroauth/tests/fixtures/testSetProxy.json deleted file mode 100644 index 6a5c021e..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/fixtures/testSetProxy.json +++ /dev/null @@ -1,20 +0,0 @@ -[{ - "request": { - "method": "GET", - "url": "https:\/\/api.twitter.com\/1.1\/account\/verify_credentials.json", - "headers": { - "Host": "api.twitter.com", - "Accept": "application\/json", - "Authorization": "OAuth oauth_version=\"1.0\", oauth_nonce=\"2b67ebbeace76543f356ba8bbd59abde\", oauth_timestamp=\"1587861062\", oauth_consumer_key=\"awJfND4zFGapGOFKfdjg\", oauth_token=\"93915746-KjE3c27dCt8awONxuUAaJ00yishXXwcH5CdLBnO1x\", oauth_signature_method=\"HMAC-SHA1\", oauth_signature=\"ZN1bM0df5EPRy1d7oYcoZfj3Mpw%3D\"", - "Expect": null - } - }, - "response": { - "status": { - "http_version": "1.1", - "code": "200", - "message": "OK" - }, - "body": "HTTP\/2 200 \r\ncache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0\r\ncontent-disposition: attachment; filename=json.json\r\ncontent-encoding: gzip\r\ncontent-length: 778\r\ncontent-type: application\/json;charset=utf-8\r\ndate: Sun, 26 Apr 2020 00:31:49 GMT\r\nexpires: Tue, 31 Mar 1981 05:00:00 GMT\r\nlast-modified: Sun, 26 Apr 2020 00:31:49 GMT\r\npragma: no-cache\r\nserver: tsa_a\r\nset-cookie: personalization_id=\"v1_hI7rl+lJjoy5n7HgyNo9LQ==\"; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:49 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None\r\nset-cookie: lang=en; Path=\/\r\nset-cookie: guest_id=v1%3A158786110929931313; Max-Age=63072000; Expires=Tue, 26 Apr 2022 00:31:49 GMT; Path=\/; Domain=.twitter.com; Secure; SameSite=None\r\nstatus: 200 OK\r\nstrict-transport-security: max-age=631138519\r\nx-access-level: read-write-directmessages\r\nx-connection-hash: 18e8b1b5df2ee964aebf8f85055ada9c\r\nx-content-type-options: nosniff\r\nx-frame-options: SAMEORIGIN\r\nx-rate-limit-limit: 75\r\nx-rate-limit-remaining: 72\r\nx-rate-limit-reset: 1587861178\r\nx-response-time: 34\r\nx-transaction: 00716cfd00f6fd8d\r\nx-twitter-response-tags: BouncerExempt\r\nx-twitter-response-tags: BouncerCompliant\r\nx-xss-protection: 0\r\n\r\n{\"id\":93915746,\"id_str\":\"93915746\",\"name\":\"OAuth Library Test\",\"screen_name\":\"oauthlibtest\",\"location\":\"\",\"description\":\"\",\"url\":null,\"entities\":{\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":58,\"friends_count\":2,\"listed_count\":6,\"created_at\":\"Tue Dec 01 18:37:44 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":true,\"verified\":false,\"statuses_count\":1,\"lang\":null,\"status\":{\"created_at\":\"Tue Dec 01 18:38:07 +0000 2009\",\"id\":6242973112,\"id_str\":\"6242973112\",\"text\":\"Test!\",\"truncated\":false,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[]},\"source\":\"\\u003ca href=\\\"http:\\\/\\\/twitter.com\\\" rel=\\\"nofollow\\\"\\u003eTwitter Web Client\\u003c\\\/a\\u003e\",\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":2258,\"favorite_count\":74,\"favorited\":false,\"retweeted\":false,\"lang\":\"en\"},\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/images\\\/themes\\\/theme1\\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_image_url_https\":\"https:\\\/\\\/abs.twimg.com\\\/sticky\\\/default_profile_images\\\/default_profile_normal.png\",\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":true,\"default_profile_image\":true,\"following\":false,\"follow_request_sent\":false,\"notifications\":false,\"translator_type\":\"none\",\"suspended\":false,\"needs_phone_verification\":false}" - } -}] \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/kitten.jpg b/twitter/vendor/abraham/twitteroauth/tests/kitten.jpg deleted file mode 100644 index 9f7acf1a..00000000 Binary files a/twitter/vendor/abraham/twitteroauth/tests/kitten.jpg and /dev/null differ diff --git a/twitter/vendor/abraham/twitteroauth/tests/mocks.php b/twitter/vendor/abraham/twitteroauth/tests/mocks.php deleted file mode 100644 index b3127313..00000000 --- a/twitter/vendor/abraham/twitteroauth/tests/mocks.php +++ /dev/null @@ -1,21 +0,0 @@ - $vendorDir . '/jublonet/codebird-php/src/codebird.php', - 'Codebird\\CodebirdAuthException' => $vendorDir . '/jublonet/codebird-php/src/codebird.php', - 'Codebird\\CodebirdCredentialsException' => $vendorDir . '/jublonet/codebird-php/src/codebird.php', - 'Codebird\\CodebirdEndpointException' => $vendorDir . '/jublonet/codebird-php/src/codebird.php', - 'Codebird\\CodebirdMediaException' => $vendorDir . '/jublonet/codebird-php/src/codebird.php', -); diff --git a/twitter/vendor/composer/autoload_psr4.php b/twitter/vendor/composer/autoload_psr4.php deleted file mode 100644 index c559fb17..00000000 --- a/twitter/vendor/composer/autoload_psr4.php +++ /dev/null @@ -1,12 +0,0 @@ - array($vendorDir . '/composer/installers/src/Composer/Installers'), - 'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'), - 'Abraham\\TwitterOAuth\\' => array($vendorDir . '/abraham/twitteroauth/src'), -); diff --git a/twitter/vendor/composer/autoload_static.php b/twitter/vendor/composer/autoload_static.php deleted file mode 100644 index 740109de..00000000 --- a/twitter/vendor/composer/autoload_static.php +++ /dev/null @@ -1,53 +0,0 @@ - - array ( - 'Composer\\Installers\\' => 20, - 'Composer\\CaBundle\\' => 18, - ), - 'A' => - array ( - 'Abraham\\TwitterOAuth\\' => 21, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Composer\\Installers\\' => - array ( - 0 => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers', - ), - 'Composer\\CaBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/composer/ca-bundle/src', - ), - 'Abraham\\TwitterOAuth\\' => - array ( - 0 => __DIR__ . '/..' . '/abraham/twitteroauth/src', - ), - ); - - public static $classMap = array ( - 'Codebird\\Codebird' => __DIR__ . '/..' . '/jublonet/codebird-php/src/codebird.php', - 'Codebird\\CodebirdAuthException' => __DIR__ . '/..' . '/jublonet/codebird-php/src/codebird.php', - 'Codebird\\CodebirdCredentialsException' => __DIR__ . '/..' . '/jublonet/codebird-php/src/codebird.php', - 'Codebird\\CodebirdEndpointException' => __DIR__ . '/..' . '/jublonet/codebird-php/src/codebird.php', - 'Codebird\\CodebirdMediaException' => __DIR__ . '/..' . '/jublonet/codebird-php/src/codebird.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInitTwitterAddon::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInitTwitterAddon::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInitTwitterAddon::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/twitter/vendor/composer/ca-bundle/README.md b/twitter/vendor/composer/ca-bundle/README.md deleted file mode 100644 index d8205ec5..00000000 --- a/twitter/vendor/composer/ca-bundle/README.md +++ /dev/null @@ -1,85 +0,0 @@ -composer/ca-bundle -================== - -Small utility library that lets you find a path to the system CA bundle, -and includes a fallback to the Mozilla CA bundle. - -Originally written as part of [composer/composer](https://github.com/composer/composer), -now extracted and made available as a stand-alone library. - - -Installation ------------- - -Install the latest version with: - -```bash -$ composer require composer/ca-bundle -``` - - -Requirements ------------- - -* PHP 5.3.2 is required but using the latest version of PHP is highly recommended. - - -Basic usage ------------ - -### `Composer\CaBundle\CaBundle` - -- `CaBundle::getSystemCaRootBundlePath()`: Returns the system CA bundle path, or a path to the bundled one as fallback -- `CaBundle::getBundledCaBundlePath()`: Returns the path to the bundled CA file -- `CaBundle::validateCaFile($filename)`: Validates a CA file using openssl_x509_parse only if it is safe to use -- `CaBundle::isOpensslParseSafe()`: Test if it is safe to use the PHP function openssl_x509_parse() -- `CaBundle::reset()`: Resets the static caches - - -#### To use with curl - -```php -$curl = curl_init("https://example.org/"); - -$caPathOrFile = \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath(); -if (is_dir($caPathOrFile)) { - curl_setopt($curl, CURLOPT_CAPATH, $caPathOrFile); -} else { - curl_setopt($curl, CURLOPT_CAINFO, $caPathOrFile); -} - -$result = curl_exec($curl); -``` - -#### To use with php streams - -```php -$opts = array( - 'http' => array( - 'method' => "GET" - ) -); - -$caPathOrFile = \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath(); -if (is_dir($caPathOrFile)) { - $opts['ssl']['capath'] = $caPathOrFile; -} else { - $opts['ssl']['cafile'] = $caPathOrFile; -} - -$context = stream_context_create($opts); -$result = file_get_contents('https://example.com', false, $context); -``` - -#### To use with Guzzle - -```php -$client = new \GuzzleHttp\Client([ - \GuzzleHttp\RequestOptions::VERIFY => \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath() -]); -``` - -License -------- - -composer/ca-bundle is licensed under the MIT License, see the LICENSE file for details. diff --git a/twitter/vendor/composer/ca-bundle/composer.json b/twitter/vendor/composer/ca-bundle/composer.json deleted file mode 100644 index 5213e976..00000000 --- a/twitter/vendor/composer/ca-bundle/composer.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "composer/ca-bundle", - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "type": "library", - "license": "MIT", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.2 || ^5", - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Composer\\CaBundle\\": "tests" - } - }, - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "scripts": { - "test": "SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1 vendor/bin/simple-phpunit", - "phpstan": "vendor/bin/phpstan analyse" - } -} diff --git a/twitter/vendor/composer/ca-bundle/res/cacert.pem b/twitter/vendor/composer/ca-bundle/res/cacert.pem deleted file mode 100644 index 264923b3..00000000 --- a/twitter/vendor/composer/ca-bundle/res/cacert.pem +++ /dev/null @@ -1,3138 +0,0 @@ -## -## Bundle of CA Root Certificates -## -## Certificate data from Mozilla as of: Tue May 25 03:12:05 2021 GMT -## -## This is a bundle of X.509 certificates of public Certificate Authorities -## (CA). These were automatically extracted from Mozilla's root certificates -## file (certdata.txt). This file can be found in the mozilla source tree: -## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt -## -## It contains the certificates in PEM format and therefore -## can be directly used with curl / libcurl / php_curl, or with -## an Apache+mod_ssl webserver for SSL client authentication. -## Just configure this file as the SSLCACertificateFile. -## -## Conversion done with mk-ca-bundle.pl version 1.28. -## SHA256: e292bd4e2d500c86df45b830d89417be5c42ee670408f1d2c454c63d8a782865 -## - - -GlobalSign Root CA -================== ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx -GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds -b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD -VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa -DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc -THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb -Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP -c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX -gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF -AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj -Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG -j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH -hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC -X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -Entrust.net Premium 2048 Secure Server CA -========================================= ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp -bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 -d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u -ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL -Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr -hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW -nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ -KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy -T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT -J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e -nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -Baltimore CyberTrust Root -========================= ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE -ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li -ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC -SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs -dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME -uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB -UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C -G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 -XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr -l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI -VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB -BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh -cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 -hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa -Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H -RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -Entrust Root Certification Authority -==================================== ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw -b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG -A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 -MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu -MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu -Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz -A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww -Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 -j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN -rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 -MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH -hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM -Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa -v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS -W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 -tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -Comodo AAA Services root -======================== ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw -MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl -c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV -BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG -C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs -i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW -Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH -Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK -Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f -BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl -cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz -LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm -7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z -8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C -12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -QuoVadis Root CA -================ ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE -ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz -MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp -cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD -EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk -J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL -F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL -YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen -AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w -PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y -ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 -MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj -YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs -ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW -Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu -BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw -FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 -tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo -fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul -LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x -gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi -5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi -5nrQNiOKSnQ2+Q== ------END CERTIFICATE----- - -QuoVadis Root CA 2 -================== ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx -ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 -XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk -lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB -lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy -lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt -66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn -wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh -D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy -BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie -J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud -DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU -a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv -Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 -UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm -VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK -+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW -IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 -WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X -f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II -4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 -VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -QuoVadis Root CA 3 -================== ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx -OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg -DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij -KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K -DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv -BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp -p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 -nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX -MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM -Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz -uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT -BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj -YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB -BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD -VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 -ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE -AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV -qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s -hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z -POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 -Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp -8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC -bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu -g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p -vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr -qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -Security Communication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw -8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM -DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX -5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd -DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 -JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g -0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a -mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ -s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ -6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi -FL39vmwLAw== ------END CERTIFICATE----- - -Sonera Class 2 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw -NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 -/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT -dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG -f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P -tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH -nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT -XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt -0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI -cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph -Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx -EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH -llpwrN9M ------END CERTIFICATE----- - -XRamp Global CA Root -==================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE -BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj -dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx -HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg -U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu -IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx -foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE -zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs -AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry -xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap -oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC -AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc -/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n -nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz -8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -Go Daddy Class 2 CA -=================== ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY -VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG -A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g -RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD -ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv -2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 -qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j -YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY -vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O -BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o -atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu -MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim -PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt -I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI -Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b -vZ8= ------END CERTIFICATE----- - -Starfield Class 2 CA -==================== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc -U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo -MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG -A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG -SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY -bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ -JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm -epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN -F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF -MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f -hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo -bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs -afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM -PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD -KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 -QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -DigiCert Assured ID Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx -MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO -9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy -UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW -/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy -oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf -GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF -66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq -hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc -EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn -SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i -8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -DigiCert Global Root CA -======================= ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw -MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn -TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 -BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H -4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y -7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB -o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm -8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF -BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr -EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt -tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 -UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -DigiCert High Assurance EV Root CA -================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw -KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw -MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ -MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu -Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t -Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS -OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 -MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ -NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe -h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY -JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ -V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp -myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK -mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K ------END CERTIFICATE----- - -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK -ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X -DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 -cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT -rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 -UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy -xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d -utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ -MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug -dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE -GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw -RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS -fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -SwissSign Gold CA - G2 -====================== ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw -EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN -MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp -c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq -t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C -jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg -vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF -ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR -AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend -jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO -peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR -7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi -GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 -OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm -5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr -44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf -Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m -Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp -mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk -vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf -KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br -NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj -viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -SwissSign Silver CA - G2 -======================== ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X -DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 -aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG -9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 -N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm -+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH -6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu -MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h -qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 -FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs -ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc -celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X -CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB -tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P -4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F -kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L -3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx -/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa -DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP -e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu -WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ -DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub -DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -SecureTrust CA -============== ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy -dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe -BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX -OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t -DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH -GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b -01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH -ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj -aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu -SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf -mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ -nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -Secure Global CA -================ ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH -bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg -MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx -YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ -bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g -8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV -HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi -0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn -oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA -MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ -OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn -CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 -3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -COMODO Certification Authority -============================== ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb -MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD -T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH -+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww -xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV -4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA -1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI -rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k -b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC -AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP -OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc -IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN -+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== ------END CERTIFICATE----- - -Network Solutions Certificate Authority -======================================= ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG -EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr -IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx -MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx -jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT -aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT -crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc -/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB -AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv -bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA -A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q -4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ -GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD -ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -COMODO ECC Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix -GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X -4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni -wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG -FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA -U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -Certigna -======== ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw -EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 -MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI -Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q -XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH -GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p -ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg -DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf -Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ -tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ -BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J -SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA -hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ -ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu -PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY -1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li -ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 -MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD -ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW -0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL -AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin -89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT -8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 -MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G -A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO -lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi -5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 -hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T -X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -ePKI Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG -EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg -Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx -MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq -MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs -IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi -lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv -qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX -12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O -WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ -ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao -lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ -vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi -Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi -MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 -1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq -KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV -xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP -NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r -GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE -xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx -gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy -sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD -BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -certSIGN ROOT CA -================ ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD -VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa -Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE -CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I -JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH -rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 -ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD -0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 -AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB -AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 -SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 -x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt -vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz -TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -NetLock Arany (Class Gold) Főtanúsítvány -======================================== ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G -A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 -dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB -cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx -MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO -ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 -c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu -0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw -/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk -H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw -fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 -neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW -qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta -YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna -NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu -dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -Hongkong Post Root CA 1 -======================= ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT -DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx -NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n -IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 -ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr -auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh -qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY -V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV -HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i -h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio -l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei -IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps -T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT -c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== ------END CERTIFICATE----- - -SecureSign RootCA11 -=================== ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi -SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS -b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw -KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 -cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL -TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO -wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq -g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP -O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA -bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX -t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh -OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r -bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ -Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 -y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 -lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -Microsec e-Szigno Root CA 2009 -============================== ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER -MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv -c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE -BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt -U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA -fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG -0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA -pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm -1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC -AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf -QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE -FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o -lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX -I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 -yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi -LXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -GlobalSign Root CA - R3 -======================= ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt -iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ -0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 -rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl -OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 -xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 -lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 -EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E -bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 -YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r -kpeDMdmztcpHWD9f ------END CERTIFICATE----- - -Autoridad de Certificacion Firmaprofesional CIF A62634068 -========================================================= ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA -BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw -QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB -NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD -Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P -B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY -7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH -ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI -plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX -MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX -LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK -bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU -vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud -EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH -DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA -bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx -ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx -51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk -R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP -T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f -Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl -osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR -crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR -saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD -KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi -6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -Izenpe.com -========== ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG -EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz -MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu -QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ -03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK -ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU -+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC -PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT -OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK -F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK -0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ -0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB -leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID -AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ -SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG -NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l -Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga -kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q -hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs -g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 -aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 -nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC -ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo -Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z -WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -Go Daddy Root Certificate Authority - G2 -======================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu -MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G -A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq -9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD -+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd -fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl -NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 -BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac -vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r -5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV -N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 ------END CERTIFICATE----- - -Starfield Root Certificate Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 -eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw -DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg -VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB -dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv -W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs -bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk -N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf -ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU -JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol -TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx -4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw -F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ -c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -Starfield Services Root Certificate Authority - G2 -================================================== ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl -IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT -dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 -h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa -hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP -LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB -rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG -SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP -E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy -xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza -YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 ------END CERTIFICATE----- - -AffirmTrust Commercial -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw -MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb -DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV -C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 -BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww -MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV -HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG -hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi -qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv -0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh -sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -AffirmTrust Networking -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw -MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE -Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI -dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 -/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb -h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV -HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu -UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 -12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 -WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 -/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -AffirmTrust Premium -=================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy -OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy -dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn -BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV -5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs -+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd -GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R -p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI -S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 -6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 -/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo -+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv -MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC -6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S -L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK -+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV -BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg -IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 -g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb -zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== ------END CERTIFICATE----- - -AffirmTrust Premium ECC -======================= ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV -BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx -MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U -cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ -N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW -BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK -BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X -57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM -eQ== ------END CERTIFICATE----- - -Certum Trusted Network CA -========================= ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy -MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU -ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC -l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J -J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 -fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 -cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB -Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw -DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj -jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 -mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj -Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -TWCA Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ -VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG -EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB -IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx -QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC -oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP -4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r -y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG -9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC -mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW -QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY -T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny -Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -Security Communication RootCA2 -============================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC -SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy -aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ -+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R -3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV -spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K -EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 -QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB -CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj -u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk -3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q -tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 -mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE -BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w -ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD -VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE -CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT -BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 -MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt -SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl -Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh -cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK -w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT -ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 -HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a -E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw -0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD -VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 -Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l -dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ -lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa -Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe -l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 -E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D -5EI= ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2011 -======================================================= ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT -O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y -aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT -AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo -IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI -1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa -71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u -8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH -3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ -MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 -MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu -b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt -XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD -/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N -7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -Actalis Authentication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM -BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE -AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky -MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz -IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ -wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa -by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 -zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f -YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 -oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l -EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 -hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 -EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 -jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY -iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI -WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 -JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx -K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ -Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC -4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo -2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz -lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem -OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 -vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -Trustis FPS Root CA -=================== ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG -EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 -IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV -BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ -RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk -H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa -cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt -o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA -AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd -BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c -GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC -yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P -8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV -l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl -iB6XzCGcKQENZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -Buypass Class 2 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X -DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 -g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn -9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b -/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU -CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff -awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI -zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn -Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX -Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs -M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI -osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S -aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd -DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD -LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 -oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC -wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS -CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN -rJgWVqA= ------END CERTIFICATE----- - -Buypass Class 3 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X -DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH -sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR -5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh -7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ -ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH -2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV -/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ -RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA -Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq -j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G -uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG -Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 -ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 -KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz -6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug -UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe -eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi -Cp/HuZc= ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 3 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx -MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK -9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU -NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF -iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W -0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr -AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb -fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT -ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h -P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 2009 -============================== ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe -Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE -LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD -ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA -BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv -KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z -p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC -AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ -4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y -eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw -MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G -PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw -OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm -2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV -dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph -X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 EV 2009 -================================= ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS -egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh -zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T -7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 -sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 -11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv -cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v -ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El -MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp -b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh -c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ -PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX -ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA -NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv -w9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -CA Disig Root R2 -================ ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw -EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp -ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx -EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp -c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC -w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia -xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 -A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S -GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV -g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa -5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE -koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A -Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i -Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u -Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV -sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je -dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 -1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx -mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 -utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 -sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg -UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV -7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -ACCVRAIZ1 -========= ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB -SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 -MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH -UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM -jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 -RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD -aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ -0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG -WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 -8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR -5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J -9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK -Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw -Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu -Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM -Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA -QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh -AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA -YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj -AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA -IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk -aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 -dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 -MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI -hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E -R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN -YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 -nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ -TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 -sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg -Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd -3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p -EfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -TWCA Global Root CA -=================== ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT -CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD -QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK -EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C -nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV -r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR -Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV -tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W -KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 -sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p -yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn -kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI -zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g -cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M -8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg -/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg -lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP -A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m -i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 -EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 -zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= ------END CERTIFICATE----- - -TeliaSonera Root CA v1 -====================== ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE -CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 -MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW -VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ -6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA -3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k -B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn -Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH -oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 -F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ -oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 -gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc -TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB -AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW -DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm -zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW -pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV -G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc -c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT -JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 -qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 -Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems -WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -E-Tugra Certification Authority -=============================== ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w -DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls -ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw -NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx -QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl -cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD -DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd -hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K -CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g -ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ -BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 -E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz -rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq -jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 -dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG -MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK -kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO -XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 -VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo -a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc -dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV -KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT -Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 -8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G -C7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 2 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx -MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ -SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F -vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 -2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV -WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy -YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 -r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf -vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR -3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== ------END CERTIFICATE----- - -Atos TrustedRoot 2011 -===================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU -cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 -MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG -A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV -hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr -54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ -DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 -HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR -z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R -l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ -bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h -k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh -TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 -61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G -3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -QuoVadis Root CA 1 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE -PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm -PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 -Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN -ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l -g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV -7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX -9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f -iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg -t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI -hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 -GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct -Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP -+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh -3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa -wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 -O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 -FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV -hMJKzRwuJIczYOXD ------END CERTIFICATE----- - -QuoVadis Root CA 2 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh -ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY -NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t -oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o -MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l -V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo -L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ -sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD -6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh -lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI -hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K -pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 -x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz -dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X -U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw -mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD -zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN -JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr -O3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -QuoVadis Root CA 3 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 -IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL -Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe -6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 -I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U -VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 -5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi -Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM -dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt -rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI -hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS -t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ -TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du -DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib -Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD -hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX -0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW -dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 -PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -DigiCert Assured ID Root G2 -=========================== ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw -MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH -35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq -bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw -VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP -YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn -lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO -w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv -0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz -d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW -hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M -jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -DigiCert Assured ID Root G3 -=========================== ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD -VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ -BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb -RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs -KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF -UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy -YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy -1vUhZscv6pZjamVFkpUBtA== ------END CERTIFICATE----- - -DigiCert Global Root G2 -======================= ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx -MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ -kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO -3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV -BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM -UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB -o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu -5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr -F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U -WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH -QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ -iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -DigiCert Global Root G3 -======================= ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD -VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw -MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k -aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C -AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O -YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp -Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y -3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 -VOKa5Vt8sycX ------END CERTIFICATE----- - -DigiCert Trusted Root G4 -======================== ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw -HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp -pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o -k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa -vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY -QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 -MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm -mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 -f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH -dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 -oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY -ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr -yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy -7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah -ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN -5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb -/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa -5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK -G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP -82Z+ ------END CERTIFICATE----- - -COMODO RSA Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn -dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ -FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ -5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG -x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX -2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL -OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 -sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C -GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 -WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w -DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt -rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ -nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg -tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW -sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp -pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA -zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq -ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 -7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I -LaZRfyHBNVOFBkpdn627G190 ------END CERTIFICATE----- - -USERTrust RSA Certification Authority -===================================== ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK -ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK -ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz -0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j -Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn -RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O -+T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq -/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE -Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM -lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 -yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ -eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW -FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ -7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ -Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM -8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi -FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi -yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c -J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw -sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx -Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -USERTrust ECC Certification Authority -===================================== ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 -0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez -nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV -HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB -HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu -9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R4 -=========================== ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl -OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV -MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF -JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R5 -=========================== ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 -SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS -h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd -BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx -uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 -yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -Staat der Nederlanden EV Root CA -================================ ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M -MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl -cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk -SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW -O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r -0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 -Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV -XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr -08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV -0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd -74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx -fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa -ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu -c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq -5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN -b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN -f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi -5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 -WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK -DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy -eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== ------END CERTIFICATE----- - -IdenTrust Commercial Root CA 1 -============================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS -b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES -MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB -IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld -hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ -mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi -1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C -XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl -3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy -NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV -WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg -xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix -uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI -hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg -ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt -ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV -YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX -feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro -kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe -2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz -Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R -cGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -IdenTrust Public Sector Root CA 1 -================================= ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv -ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV -UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS -b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy -P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 -Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI -rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf -qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS -mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn -ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh -LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v -iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL -4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B -Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw -DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A -mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt -GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt -m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx -NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 -Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI -ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC -ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ -3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -Entrust Root Certification Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy -bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug -b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw -HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT -DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx -OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP -/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz -HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU -s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y -TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx -AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 -0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z -iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi -nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ -vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO -e4pIb4tF9g== ------END CERTIFICATE----- - -Entrust Root Certification Authority - EC1 -========================================== ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx -FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn -YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw -FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs -LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg -dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt -IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy -AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef -9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h -vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 -kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -CFCA EV ROOT -============ ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE -CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB -IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw -MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD -DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV -BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD -7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN -uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW -ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 -xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f -py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K -gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol -hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ -tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf -BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q -ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua -4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG -E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX -BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn -aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy -PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX -kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C -ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -OISTE WISeKey Global Root GB CA -=============================== ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG -EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw -MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds -b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX -scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP -rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk -9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o -Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg -GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI -hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD -dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 -VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui -HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -SZAFIR ROOT CA2 -=============== ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG -A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV -BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ -BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD -VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q -qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK -DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE -2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ -ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi -ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P -AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC -AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 -O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 -oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul -4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 -+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -Certum Trusted Network CA 2 -=========================== ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE -BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 -bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y -ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ -TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB -IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 -7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o -CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b -Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p -uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 -GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ -9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB -Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye -hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM -BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI -hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW -Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA -L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo -clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM -pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb -w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo -J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm -ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX -is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 -zAYspsbiDrW5viSP ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2015 -======================================================= ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT -BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 -aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx -MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg -QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV -BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw -MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv -bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh -iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ -6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd -FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr -i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F -GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 -fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu -iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI -hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ -D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM -d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y -d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn -82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb -davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F -Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt -J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa -JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q -p/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions ECC RootCA 2015 -=========================================================== ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 -aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u -cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw -MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj -IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD -VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 -Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP -dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK -Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA -GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn -dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -ISRG Root X1 -============ ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE -BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD -EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG -EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT -DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r -Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 -3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K -b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN -Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ -4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf -1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu -hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH -usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r -OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G -A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY -9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV -0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt -hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw -TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx -e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA -JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD -YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n -JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ -m+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -AC RAIZ FNMT-RCM -================ ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT -AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw -MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD -TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf -qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr -btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL -j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou -08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw -WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT -tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ -47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC -ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa -i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o -dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s -D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ -j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT -Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW -+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 -Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d -8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm -5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG -rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -Amazon Root CA 1 -================ ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD -VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 -MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv -bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH -FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ -gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t -dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce -VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 -DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM -CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy -8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa -2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 -xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -Amazon Root CA 2 -================ ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD -VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 -MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv -bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 -kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp -N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 -AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd -fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx -kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS -btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 -Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN -c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ -3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw -DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA -A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE -YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW -xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ -gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW -aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV -Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 -KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi -JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= ------END CERTIFICATE----- - -Amazon Root CA 3 -================ ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG -EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy -NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ -MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB -f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr -Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 -rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc -eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== ------END CERTIFICATE----- - -Amazon Root CA 4 -================ ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG -EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy -NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ -MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN -/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri -83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA -MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 -AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 -============================================= ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT -D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr -IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g -TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp -ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD -VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt -c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth -bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 -IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 -6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc -wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 -3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 -WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU -ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc -lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R -e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j -q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -GDCA TrustAUTH R5 ROOT -====================== ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw -BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD -DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow -YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs -AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p -OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr -pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ -9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ -xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM -R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ -D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 -oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx -9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 -H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 -6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd -+PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ -HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD -F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ -8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv -/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT -aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -TrustCor RootCert CA-1 -====================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP -MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig -U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx -MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu -YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe -VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy -dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq -jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 -pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 -JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h -gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw -/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j -BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 -mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf -ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C -qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P -3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= ------END CERTIFICATE----- - -TrustCor RootCert CA-2 -====================== ------BEGIN CERTIFICATE----- -MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w -DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT -eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 -eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy -MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h -bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 -IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb -ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk -RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 -oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb -XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 -/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q -jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP -eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg -rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh -8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU -2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h -Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp -kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv -2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 -S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw -PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv -DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU -RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE -xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX -RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ ------END CERTIFICATE----- - -TrustCor ECA-1 -============== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP -MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig -U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw -N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 -MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y -IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR -MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 -xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc -p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ -fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj -YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL -f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF -AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u -/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F -hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs -J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC -jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== ------END CERTIFICATE----- - -SSL.com Root Certification Authority RSA -======================================== ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM -BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x -MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw -MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx -EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM -LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C -Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8 -P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge -oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp -k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z -fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ -gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2 -UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8 -1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s -bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr -dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf -ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl -u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq -erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj -MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ -vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI -Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y -wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI -WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -SSL.com Root Certification Authority ECC -======================================== ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV -BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv -BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy -MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO -BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA -BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ -8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR -hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT -jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW -e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z -5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -SSL.com EV Root Certification Authority RSA R2 -============================================== ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w -DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u -MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI -DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD -VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh -hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w -cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO -Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ -B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh -CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim -9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto -RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm -JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 -+qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp -qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 -++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx -Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G -guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz -OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 -CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq -lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR -rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 -hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX -9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -SSL.com EV Root Certification Authority ECC -=========================================== ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV -BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy -BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw -MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx -EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM -LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy -3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O -BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe -5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ -N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm -m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- - -GlobalSign Root CA - R6 -======================= ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX -R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds -b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i -YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs -U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss -grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE -3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF -vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM -PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+ -azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O -WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy -CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP -0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN -b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE -AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV -HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN -nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0 -lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY -BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym -Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr -3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1 -0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T -uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK -oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t -JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= ------END CERTIFICATE----- - -OISTE WISeKey Global Root GC CA -=============================== ------BEGIN CERTIFICATE----- -MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD -SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo -MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa -Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL -ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr -VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab -NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd -BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E -AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk -AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 ------END CERTIFICATE----- - -GTS Root R1 -=========== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG -EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv -b3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG -A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx -9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7r -aKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnW -r4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqM -LnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly -4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr -06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 -wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om -3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNu -JLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEM -BQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 -d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73sv -fuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm -ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9b -gsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq -4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWEr -tXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBo -pY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0 -sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLql -CFF1pkgl ------END CERTIFICATE----- - -GTS Root R2 -=========== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG -EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv -b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG -A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk -k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo -7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI -m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm -dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu -ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz -cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW -Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl -aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy -5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM -BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT -vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ -+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw -c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da -WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r -n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu -Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ -7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs -gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld -o/DUhgkC ------END CERTIFICATE----- - -GTS Root R3 -=========== ------BEGIN CERTIFICATE----- -MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV -UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg -UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE -ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU -Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej -QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP -0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0 -glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa -KaqW04MjyaR7YbPMAuhd ------END CERTIFICATE----- - -GTS Root R4 -=========== ------BEGIN CERTIFICATE----- -MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV -UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg -UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE -ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa -6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj -QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV -2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI -N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x -zPKwTdb+mciUqXWi4w== ------END CERTIFICATE----- - -UCA Global G2 Root -================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG -EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x -NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU -cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT -oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV -8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS -h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o -LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/ -R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe -KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa -4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc -OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97 -8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo -5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 -1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A -Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9 -yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX -c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo -jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk -bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x -ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn -RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A== ------END CERTIFICATE----- - -UCA Extended Validation Root -============================ ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG -EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u -IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G -A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs -iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF -Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu -eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR -59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH -0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR -el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv -B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth -WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS -NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS -3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL -BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR -ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM -aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4 -dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb -+7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW -F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi -GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc -GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi -djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr -dhh2n1ax ------END CERTIFICATE----- - -Certigna Root CA -================ ------BEGIN CERTIFICATE----- -MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE -BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ -MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda -MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz -MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX -stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz -KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8 -JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16 -XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq -4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej -wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ -lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI -jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/ -/TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of -1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy -dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h -LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl -cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt -OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP -TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq -7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3 -4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd -8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS -6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY -tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS -aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde -E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= ------END CERTIFICATE----- - -emSign Root CA - G1 -=================== ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET -MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl -ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx -ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk -aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN -LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1 -cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW -DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ -6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH -hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2 -vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q -NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q -+Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih -U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx -iN66zB+Afko= ------END CERTIFICATE----- - -emSign ECC Root CA - G3 -======================= ------BEGIN CERTIFICATE----- -MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG -A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg -MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4 -MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11 -ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g -RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc -58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr -MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D -CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 -jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj ------END CERTIFICATE----- - -emSign Root CA - C1 -=================== ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx -EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp -Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE -BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD -ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up -ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/ -Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX -OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V -I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms -lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+ -XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD -ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp -/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1 -NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9 -wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ -BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= ------END CERTIFICATE----- - -emSign ECC Root CA - C3 -======================= ------BEGIN CERTIFICATE----- -MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG -A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF -Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE -BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD -ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd -6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9 -SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA -B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA -MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU -ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== ------END CERTIFICATE----- - -Hongkong Post Root CA 3 -======================= ------BEGIN CERTIFICATE----- -MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkG -A1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQK -Ew1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2 -MDMwMjI5NDZaFw00MjA2MDMwMjI5NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtv -bmcxEjAQBgNVBAcTCUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMX -SG9uZ2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz -iNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFOdem1p+/l6TWZ5Mwc50tf -jTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mIVoBc+L0sPOFMV4i707mV78vH9toxdCim -5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOe -sL4jpNrcyCse2m5FHomY2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj -0mRiikKYvLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+TtbNe/ -JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZbx39ri1UbSsUgYT2u -y1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+l2oBlKN8W4UdKjk60FSh0Tlxnf0h -+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YKTE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsG -xVd7GYYKecsAyVKvQv83j+GjHno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwID -AQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e -i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEwDQYJKoZIhvcN -AQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG7BJ8dNVI0lkUmcDrudHr9Egw -W62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCkMpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWld -y8joRTnU+kLBEUx3XZL7av9YROXrgZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov -+BS5gLNdTaqX4fnkGMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDc -eqFS3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJmOzj/2ZQw -9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+l6mc1X5VTMbeRRAc6uk7 -nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6cJfTzPV4e0hz5sy229zdcxsshTrD3mUcY -hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB -60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fq -dBb9HxEGmpv0 ------END CERTIFICATE----- - -Entrust Root Certification Authority - G4 -========================================= ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu -bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1 -dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT -AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D -umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV -3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds -8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ -e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7 -ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X -xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV -7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 -dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW -Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n -MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q -jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht -7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK -YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt -jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+ -m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW -RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA -JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G -+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT -kcpG2om3PVODLAgfi49T3f+sHw== ------END CERTIFICATE----- - -Microsoft ECC Root Certificate Authority 2017 -============================================= ------BEGIN CERTIFICATE----- -MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV -UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND -IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4 -MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw -NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ -BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6 -thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB -eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM -+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf -Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR -eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= ------END CERTIFICATE----- - -Microsoft RSA Root Certificate Authority 2017 -============================================= ------BEGIN CERTIFICATE----- -MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG -EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg -UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw -NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u -MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml -7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e -S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7 -1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+ -dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F -yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS -MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr -lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ -0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ -ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og -6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80 -dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk -+ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex -/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy -AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW -ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE -7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT -c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D -5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E ------END CERTIFICATE----- - -e-Szigno Root CA 2017 -===================== ------BEGIN CERTIFICATE----- -MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw -DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt -MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa -Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE -CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp -Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx -s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G -A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv -vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA -tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO -svxyqltZ+efcMQ== ------END CERTIFICATE----- - -certSIGN Root CA G2 -=================== ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw -EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy -MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH -TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05 -N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk -abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg -wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp -dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh -ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732 -jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf -95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc -z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL -iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud -DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB -ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC -b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB -/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5 -8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5 -BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW -atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU -Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M -NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N -0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= ------END CERTIFICATE----- - -Trustwave Global Certification Authority -======================================== ------BEGIN CERTIFICATE----- -MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV -UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 -ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u -IEF1dGhvcml0eTAeFw0xNzA4MjMxOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJV -UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 -ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u -IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALldUShLPDeS0YLOvR29 -zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0XznswuvCAAJWX/NKSqIk4cXGIDtiLK0thAf -LdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4Bq -stTnoApTAbqOl5F2brz81Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9o -WN0EACyW80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotPJqX+ -OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1lRtzuzWniTY+HKE40 -Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfwhI0Vcnyh78zyiGG69Gm7DIwLdVcE -uE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm -+9jaJXLE9gCxInm943xZYkqcBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqj -ifLJS3tBEW1ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1UdDwEB/wQEAwIB -BjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W0OhUKDtkLSGm+J1WE2pIPU/H -PinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfeuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0H -ZJDmHvUqoai7PF35owgLEQzxPy0QlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla -4gt5kNdXElE1GYhBaCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5R -vbbEsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPTMaCm/zjd -zyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qequ5AvzSxnI9O4fKSTx+O -856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxhVicGaeVyQYHTtgGJoC86cnn+OjC/QezH -Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu -3R3y4G5OBVixwJAWKqQ9EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP -29FpHOTKyeC2nOnOcXHebD8WpHk= ------END CERTIFICATE----- - -Trustwave Global ECC P256 Certification Authority -================================================= ------BEGIN CERTIFICATE----- -MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER -MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy -dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1 -NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj -43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm -P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt -0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz -RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 ------END CERTIFICATE----- - -Trustwave Global ECC P384 Certification Authority -================================================= ------BEGIN CERTIFICATE----- -MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER -MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy -dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4 -NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH -Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr -/TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV -HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn -ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl -CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw== ------END CERTIFICATE----- - -NAVER Global Root Certification Authority -========================================= ------BEGIN CERTIFICATE----- -MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG -A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD -DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4 -NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT -UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb -UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW -+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7 -XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2 -aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4 -Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z -VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B -A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai -cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy -YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV -HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB -Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK -21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB -jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx -hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg -E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH -D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ -A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY -qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG -I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg -kpzNNIaRkPpkUZ3+/uul9XXeifdy ------END CERTIFICATE----- - -AC RAIZ FNMT-RCM SERVIDORES SEGUROS -=================================== ------BEGIN CERTIFICATE----- -MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF -UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy -NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4 -MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt -UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB -QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA -BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2 -LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG -SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD -zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c= ------END CERTIFICATE----- - -GlobalSign Root R46 -=================== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv -b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX -BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es -CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/ -r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje -2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt -bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj -K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4 -12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on -ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls -eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9 -vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM -BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg -JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy -gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92 -CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm -OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq -JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye -qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz -nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7 -DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3 -QEUxeCp6 ------END CERTIFICATE----- - -GlobalSign Root E46 -=================== ------BEGIN CERTIFICATE----- -MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT -AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg -RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV -BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB -jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj -QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL -gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk -vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ -CAezNIm8BZ/3Hobui3A= ------END CERTIFICATE----- diff --git a/twitter/vendor/composer/ca-bundle/src/CaBundle.php b/twitter/vendor/composer/ca-bundle/src/CaBundle.php deleted file mode 100644 index 0109ba03..00000000 --- a/twitter/vendor/composer/ca-bundle/src/CaBundle.php +++ /dev/null @@ -1,353 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\CaBundle; - -use Psr\Log\LoggerInterface; -use Symfony\Component\Process\PhpProcess; - -/** - * @author Chris Smith - * @author Jordi Boggiano - */ -class CaBundle -{ - /** @var string|null */ - private static $caPath; - /** @var array */ - private static $caFileValidity = array(); - /** @var bool|null */ - private static $useOpensslParse; - - /** - * Returns the system CA bundle path, or a path to the bundled one - * - * This method was adapted from Sslurp. - * https://github.com/EvanDotPro/Sslurp - * - * (c) Evan Coury - * - * For the full copyright and license information, please see below: - * - * Copyright (c) 2013, Evan Coury - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @param LoggerInterface $logger optional logger for information about which CA files were loaded - * @return string path to a CA bundle file or directory - */ - public static function getSystemCaRootBundlePath(LoggerInterface $logger = null) - { - if (self::$caPath !== null) { - return self::$caPath; - } - $caBundlePaths = array(); - - // If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that. - // This mimics how OpenSSL uses the SSL_CERT_FILE env variable. - $caBundlePaths[] = self::getEnvVariable('SSL_CERT_FILE'); - - // If SSL_CERT_DIR env variable points to a valid certificate/bundle, use that. - // This mimics how OpenSSL uses the SSL_CERT_FILE env variable. - $caBundlePaths[] = self::getEnvVariable('SSL_CERT_DIR'); - - $caBundlePaths[] = ini_get('openssl.cafile'); - $caBundlePaths[] = ini_get('openssl.capath'); - - $otherLocations = array( - '/etc/pki/tls/certs/ca-bundle.crt', // Fedora, RHEL, CentOS (ca-certificates package) - '/etc/ssl/certs/ca-certificates.crt', // Debian, Ubuntu, Gentoo, Arch Linux (ca-certificates package) - '/etc/ssl/ca-bundle.pem', // SUSE, openSUSE (ca-certificates package) - '/usr/local/share/certs/ca-root-nss.crt', // FreeBSD (ca_root_nss_package) - '/usr/ssl/certs/ca-bundle.crt', // Cygwin - '/opt/local/share/curl/curl-ca-bundle.crt', // OS X macports, curl-ca-bundle package - '/usr/local/share/curl/curl-ca-bundle.crt', // Default cURL CA bunde path (without --with-ca-bundle option) - '/usr/share/ssl/certs/ca-bundle.crt', // Really old RedHat? - '/etc/ssl/cert.pem', // OpenBSD - '/usr/local/etc/ssl/cert.pem', // FreeBSD 10.x - '/usr/local/etc/openssl/cert.pem', // OS X homebrew, openssl package - '/usr/local/etc/openssl@1.1/cert.pem', // OS X homebrew, openssl@1.1 package - ); - - foreach($otherLocations as $location) { - $otherLocations[] = dirname($location); - } - - $caBundlePaths = array_merge($caBundlePaths, $otherLocations); - - foreach ($caBundlePaths as $caBundle) { - if ($caBundle && self::caFileUsable($caBundle, $logger)) { - return self::$caPath = $caBundle; - } - - if ($caBundle && self::caDirUsable($caBundle)) { - return self::$caPath = $caBundle; - } - } - - return self::$caPath = static::getBundledCaBundlePath(); // Bundled CA file, last resort - } - - /** - * Returns the path to the bundled CA file - * - * In case you don't want to trust the user or the system, you can use this directly - * - * @return string path to a CA bundle file - */ - public static function getBundledCaBundlePath() - { - $caBundleFile = __DIR__.'/../res/cacert.pem'; - - // cURL does not understand 'phar://' paths - // see https://github.com/composer/ca-bundle/issues/10 - if (0 === strpos($caBundleFile, 'phar://')) { - $tempCaBundleFile = tempnam(sys_get_temp_dir(), 'openssl-ca-bundle-'); - if (false === $tempCaBundleFile) { - throw new \RuntimeException('Could not create a temporary file to store the bundled CA file'); - } - - file_put_contents( - $tempCaBundleFile, - file_get_contents($caBundleFile) - ); - - register_shutdown_function(function() use ($tempCaBundleFile) { - @unlink($tempCaBundleFile); - }); - - $caBundleFile = $tempCaBundleFile; - } - - return $caBundleFile; - } - - /** - * Validates a CA file using opensl_x509_parse only if it is safe to use - * - * @param string $filename - * @param LoggerInterface $logger optional logger for information about which CA files were loaded - * - * @return bool - */ - public static function validateCaFile($filename, LoggerInterface $logger = null) - { - static $warned = false; - - if (isset(self::$caFileValidity[$filename])) { - return self::$caFileValidity[$filename]; - } - - $contents = file_get_contents($filename); - - // assume the CA is valid if php is vulnerable to - // https://www.sektioneins.de/advisories/advisory-012013-php-openssl_x509_parse-memory-corruption-vulnerability.html - if (!static::isOpensslParseSafe()) { - if (!$warned && $logger) { - $logger->warning(sprintf( - 'Your version of PHP, %s, is affected by CVE-2013-6420 and cannot safely perform certificate validation, we strongly suggest you upgrade.', - PHP_VERSION - )); - $warned = true; - } - - $isValid = !empty($contents); - } elseif (is_string($contents) && strlen($contents) > 0) { - $contents = preg_replace("/^(\\-+(?:BEGIN|END))\\s+TRUSTED\\s+(CERTIFICATE\\-+)\$/m", '$1 $2', $contents); - if (null === $contents) { - // regex extraction failed - $isValid = false; - } else { - $isValid = (bool) openssl_x509_parse($contents); - } - } else { - $isValid = false; - } - - if ($logger) { - $logger->debug('Checked CA file '.realpath($filename).': '.($isValid ? 'valid' : 'invalid')); - } - - return self::$caFileValidity[$filename] = $isValid; - } - - /** - * Test if it is safe to use the PHP function openssl_x509_parse(). - * - * This checks if OpenSSL extensions is vulnerable to remote code execution - * via the exploit documented as CVE-2013-6420. - * - * @return bool - */ - public static function isOpensslParseSafe() - { - if (null !== self::$useOpensslParse) { - return self::$useOpensslParse; - } - - if (PHP_VERSION_ID >= 50600) { - return self::$useOpensslParse = true; - } - - // Vulnerable: - // PHP 5.3.0 - PHP 5.3.27 - // PHP 5.4.0 - PHP 5.4.22 - // PHP 5.5.0 - PHP 5.5.6 - if ( - (PHP_VERSION_ID < 50400 && PHP_VERSION_ID >= 50328) - || (PHP_VERSION_ID < 50500 && PHP_VERSION_ID >= 50423) - || PHP_VERSION_ID >= 50507 - ) { - // This version of PHP has the fix for CVE-2013-6420 applied. - return self::$useOpensslParse = true; - } - - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - // Windows is probably insecure in this case. - return self::$useOpensslParse = false; - } - - $compareDistroVersionPrefix = function ($prefix, $fixedVersion) { - $regex = '{^'.preg_quote($prefix).'([0-9]+)$}'; - - if (preg_match($regex, PHP_VERSION, $m)) { - return ((int) $m[1]) >= $fixedVersion; - } - - return false; - }; - - // Hard coded list of PHP distributions with the fix backported. - if ( - $compareDistroVersionPrefix('5.3.3-7+squeeze', 18) // Debian 6 (Squeeze) - || $compareDistroVersionPrefix('5.4.4-14+deb7u', 7) // Debian 7 (Wheezy) - || $compareDistroVersionPrefix('5.3.10-1ubuntu3.', 9) // Ubuntu 12.04 (Precise) - ) { - return self::$useOpensslParse = true; - } - - // Symfony Process component is missing so we assume it is unsafe at this point - if (!class_exists('Symfony\Component\Process\PhpProcess')) { - return self::$useOpensslParse = false; - } - - // This is where things get crazy, because distros backport security - // fixes the chances are on NIX systems the fix has been applied but - // it's not possible to verify that from the PHP version. - // - // To verify exec a new PHP process and run the issue testcase with - // known safe input that replicates the bug. - - // Based on testcase in https://github.com/php/php-src/commit/c1224573c773b6845e83505f717fbf820fc18415 - // changes in https://github.com/php/php-src/commit/76a7fd893b7d6101300cc656058704a73254d593 - $cert = 'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVwRENDQTR5Z0F3SUJBZ0lKQUp6dThyNnU2ZUJjTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUhETVFzd0NRWUQKVlFRR0V3SkVSVEVjTUJvR0ExVUVDQXdUVG05eVpISm9aV2x1TFZkbGMzUm1ZV3hsYmpFUU1BNEdBMVVFQnd3SApTOE9Ed3Jac2JqRVVNQklHQTFVRUNnd0xVMlZyZEdsdmJrVnBibk14SHpBZEJnTlZCQXNNRmsxaGJHbGphVzkxCmN5QkRaWEowSUZObFkzUnBiMjR4SVRBZkJnTlZCQU1NR0cxaGJHbGphVzkxY3k1elpXdDBhVzl1WldsdWN5NWsKWlRFcU1DZ0dDU3FHU0liM0RRRUpBUlliYzNSbFptRnVMbVZ6YzJWeVFITmxhM1JwYjI1bGFXNXpMbVJsTUhVWQpaREU1TnpBd01UQXhNREF3TURBd1dnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKQUFBQUFBQVhEVEUwTVRFeU9ERXhNemt6TlZvd2djTXhDekFKQmdOVkJBWVRBa1JGTVJ3d0dnWURWUVFJREJOTwpiM0prY21obGFXNHRWMlZ6ZEdaaGJHVnVNUkF3RGdZRFZRUUhEQWRMdzRQQ3RteHVNUlF3RWdZRFZRUUtEQXRUClpXdDBhVzl1UldsdWN6RWZNQjBHQTFVRUN3d1dUV0ZzYVdOcGIzVnpJRU5sY25RZ1UyVmpkR2x2YmpFaE1COEcKQTFVRUF3d1liV0ZzYVdOcGIzVnpMbk5sYTNScGIyNWxhVzV6TG1SbE1Tb3dLQVlKS29aSWh2Y05BUWtCRmh0egpkR1ZtWVc0dVpYTnpaWEpBYzJWcmRHbHZibVZwYm5NdVpHVXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCCkR3QXdnZ0VLQW9JQkFRRERBZjNobDdKWTBYY0ZuaXlFSnBTU0RxbjBPcUJyNlFQNjV1c0pQUnQvOFBhRG9xQnUKd0VZVC9OYSs2ZnNnUGpDMHVLOURaZ1dnMnRIV1dvYW5TYmxBTW96NVBINlorUzRTSFJaN2UyZERJalBqZGhqaAowbUxnMlVNTzV5cDBWNzk3R2dzOWxOdDZKUmZIODFNTjJvYlhXczROdHp0TE11RDZlZ3FwcjhkRGJyMzRhT3M4CnBrZHVpNVVhd1Raa3N5NXBMUEhxNWNNaEZHbTA2djY1Q0xvMFYyUGQ5K0tBb2tQclBjTjVLTEtlYno3bUxwazYKU01lRVhPS1A0aWRFcXh5UTdPN2ZCdUhNZWRzUWh1K3ByWTNzaTNCVXlLZlF0UDVDWm5YMmJwMHdLSHhYMTJEWAoxbmZGSXQ5RGJHdkhUY3lPdU4rblpMUEJtM3ZXeG50eUlJdlZBZ01CQUFHalFqQkFNQWtHQTFVZEV3UUNNQUF3CkVRWUpZSVpJQVliNFFnRUJCQVFEQWdlQU1Bc0dBMVVkRHdRRUF3SUZvREFUQmdOVkhTVUVEREFLQmdnckJnRUYKQlFjREFqQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFHMGZaWVlDVGJkajFYWWMrMVNub2FQUit2SThDOENhRAo4KzBVWWhkbnlVNGdnYTBCQWNEclk5ZTk0ZUVBdTZacXljRjZGakxxWFhkQWJvcHBXb2NyNlQ2R0QxeDMzQ2tsClZBcnpHL0t4UW9oR0QySmVxa2hJTWxEb214SE83a2EzOStPYThpMnZXTFZ5alU4QVp2V01BcnVIYTRFRU55RzcKbFcyQWFnYUZLRkNyOVRuWFRmcmR4R1ZFYnY3S1ZRNmJkaGc1cDVTanBXSDErTXEwM3VSM1pYUEJZZHlWODMxOQpvMGxWajFLRkkyRENML2xpV2lzSlJvb2YrMWNSMzVDdGQwd1lCY3BCNlRac2xNY09QbDc2ZHdLd0pnZUpvMlFnClpzZm1jMnZDMS9xT2xOdU5xLzBUenprVkd2OEVUVDNDZ2FVK1VYZTRYT1Z2a2NjZWJKbjJkZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K'; - $script = <<<'EOT' - -error_reporting(-1); -$info = openssl_x509_parse(base64_decode('%s')); -var_dump(PHP_VERSION, $info['issuer']['emailAddress'], $info['validFrom_time_t']); - -EOT; - $script = '<'."?php\n".sprintf($script, $cert); - - try { - $process = new PhpProcess($script); - $process->mustRun(); - } catch (\Exception $e) { - // In the case of any exceptions just accept it is not possible to - // determine the safety of openssl_x509_parse and bail out. - return self::$useOpensslParse = false; - } - - $output = preg_split('{\r?\n}', trim($process->getOutput())); - $errorOutput = trim($process->getErrorOutput()); - - if ( - is_array($output) - && count($output) === 3 - && $output[0] === sprintf('string(%d) "%s"', strlen(PHP_VERSION), PHP_VERSION) - && $output[1] === 'string(27) "stefan.esser@sektioneins.de"' - && $output[2] === 'int(-1)' - && preg_match('{openssl_x509_parse\(\): illegal (?:ASN1 data type for|length in) timestamp in - on line \d+}', $errorOutput) - ) { - // This PHP has the fix backported probably by a distro security team. - return self::$useOpensslParse = true; - } - - return self::$useOpensslParse = false; - } - - /** - * Resets the static caches - * @return void - */ - public static function reset() - { - self::$caFileValidity = array(); - self::$caPath = null; - self::$useOpensslParse = null; - } - - /** - * @param string $name - * @return string|false - */ - private static function getEnvVariable($name) - { - if (isset($_SERVER[$name])) { - return (string) $_SERVER[$name]; - } - - if (PHP_SAPI === 'cli' && ($value = getenv($name)) !== false && $value !== null) { - return (string) $value; - } - - return false; - } - - /** - * @param string|false $certFile - * @return bool - */ - private static function caFileUsable($certFile, LoggerInterface $logger = null) - { - return $certFile && @is_file($certFile) && @is_readable($certFile) && static::validateCaFile($certFile, $logger); - } - - /** - * @param string|false $certDir - * @return bool - */ - private static function caDirUsable($certDir) - { - return $certDir && @is_dir($certDir) && @is_readable($certDir) && glob($certDir . '/*'); - } -} diff --git a/twitter/vendor/composer/installed.json b/twitter/vendor/composer/installed.json deleted file mode 100644 index 2649372c..00000000 --- a/twitter/vendor/composer/installed.json +++ /dev/null @@ -1,317 +0,0 @@ -[ - { - "name": "abraham/twitteroauth", - "version": "2.0.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/abraham/twitteroauth.git", - "reference": "96f49e67baec10f5e5cb703d87be16ba01a798a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/abraham/twitteroauth/zipball/96f49e67baec10f5e5cb703d87be16ba01a798a5", - "reference": "96f49e67baec10f5e5cb703d87be16ba01a798a5", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.2", - "ext-curl": "*", - "php": "^7.2 || ^7.3 || ^7.4 || ^8.0" - }, - "require-dev": { - "php-vcr/php-vcr": "^1", - "php-vcr/phpunit-testlistener-vcr": "dev-php-8", - "phpmd/phpmd": "^2", - "phpunit/phpunit": "^8", - "squizlabs/php_codesniffer": "^3" - }, - "time": "2020-12-02T01:27:06+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Abraham\\TwitterOAuth\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Abraham Williams", - "email": "abraham@abrah.am", - "homepage": "https://abrah.am", - "role": "Developer" - } - ], - "description": "The most popular PHP library for use with the Twitter OAuth REST API.", - "homepage": "https://twitteroauth.com", - "keywords": [ - "Twitter API", - "Twitter oAuth", - "api", - "oauth", - "rest", - "social", - "twitter" - ] - }, - { - "name": "composer/ca-bundle", - "version": "1.2.10", - "version_normalized": "1.2.10.0", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "9fdb22c2e97a614657716178093cd1da90a64aa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/9fdb22c2e97a614657716178093cd1da90a64aa8", - "reference": "9fdb22c2e97a614657716178093cd1da90a64aa8", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" - }, - "time": "2021-06-07T13:58:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ] - }, - { - "name": "composer/installers", - "version": "v1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/installers.git", - "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b", - "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0" - }, - "replace": { - "roundcube/plugin-installer": "*", - "shama/baton": "*" - }, - "require-dev": { - "composer/composer": "1.0.*@dev", - "phpunit/phpunit": "^4.8.36" - }, - "time": "2018-08-27T06:10:37+00:00", - "type": "composer-plugin", - "extra": { - "class": "Composer\\Installers\\Plugin", - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\Installers\\": "src/Composer/Installers" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kyle Robinson Young", - "email": "kyle@dontkry.com", - "homepage": "https://github.com/shama" - } - ], - "description": "A multi-framework Composer library installer", - "homepage": "https://composer.github.io/installers/", - "keywords": [ - "Craft", - "Dolibarr", - "Eliasis", - "Hurad", - "ImageCMS", - "Kanboard", - "Lan Management System", - "MODX Evo", - "Mautic", - "Maya", - "OXID", - "Plentymarkets", - "Porto", - "RadPHP", - "SMF", - "Thelia", - "WolfCMS", - "agl", - "aimeos", - "annotatecms", - "attogram", - "bitrix", - "cakephp", - "chef", - "cockpit", - "codeigniter", - "concrete5", - "croogo", - "dokuwiki", - "drupal", - "eZ Platform", - "elgg", - "expressionengine", - "fuelphp", - "grav", - "installer", - "itop", - "joomla", - "kohana", - "laravel", - "lavalite", - "lithium", - "magento", - "majima", - "mako", - "mediawiki", - "modulework", - "modx", - "moodle", - "osclass", - "phpbb", - "piwik", - "ppi", - "puppet", - "pxcms", - "reindex", - "roundcube", - "shopware", - "silverstripe", - "sydes", - "symfony", - "typo3", - "wordpress", - "yawik", - "zend", - "zikula" - ] - }, - { - "name": "jublonet/codebird-php", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/jublo/codebird-php.git", - "reference": "df362d8ad629aad6c4c7dbf36a440e569ec41368" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jublo/codebird-php/zipball/df362d8ad629aad6c4c7dbf36a440e569ec41368", - "reference": "df362d8ad629aad6c4c7dbf36a440e569ec41368", - "shasum": "" - }, - "require": { - "composer/installers": "~1.0", - "ext-hash": "*", - "ext-json": "*", - "lib-openssl": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": ">=0.6", - "phpunit/phpunit": ">=7.3", - "squizlabs/php_codesniffer": "2.*" - }, - "time": "2018-08-16T00:07:08+00:00", - "type": "library", - "installation-source": "source", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-3.0+" - ], - "authors": [ - { - "name": "Joshua Atkins", - "role": "Developer", - "email": "joshua.atkins@jublo.net", - "homepage": "http://atkins.im/" - }, - { - "name": "J.M.", - "role": "Developer", - "email": "jm@jublo.net", - "homepage": "http://mynetx.net/" - } - ], - "description": "Easy access to the Twitter REST API, Direct Messages API, Account Activity API, TON (Object Nest) API and Twitter Ads API — all from one PHP library.", - "homepage": "https://www.jublo.net/projects/codebird/php", - "keywords": [ - "api", - "networking", - "twitter" - ] - } -] diff --git a/twitter/vendor/composer/installers/composer.json b/twitter/vendor/composer/installers/composer.json deleted file mode 100644 index 6de40853..00000000 --- a/twitter/vendor/composer/installers/composer.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "name": "composer/installers", - "type": "composer-plugin", - "license": "MIT", - "description": "A multi-framework Composer library installer", - "keywords": [ - "installer", - "Aimeos", - "AGL", - "AnnotateCms", - "Attogram", - "Bitrix", - "CakePHP", - "Chef", - "Cockpit", - "CodeIgniter", - "concrete5", - "Craft", - "Croogo", - "DokuWiki", - "Dolibarr", - "Drupal", - "Elgg", - "Eliasis", - "ExpressionEngine", - "eZ Platform", - "FuelPHP", - "Grav", - "Hurad", - "ImageCMS", - "iTop", - "Joomla", - "Kanboard", - "Kohana", - "Lan Management System", - "Laravel", - "Lavalite", - "Lithium", - "Magento", - "majima", - "Mako", - "Mautic", - "Maya", - "MODX", - "MODX Evo", - "MediaWiki", - "OXID", - "osclass", - "MODULEWork", - "Moodle", - "Piwik", - "pxcms", - "phpBB", - "Plentymarkets", - "PPI", - "Puppet", - "Porto", - "RadPHP", - "ReIndex", - "Roundcube", - "shopware", - "SilverStripe", - "SMF", - "SyDES", - "symfony", - "Thelia", - "TYPO3", - "WolfCMS", - "WordPress", - "YAWIK", - "Zend", - "Zikula" - ], - "homepage": "https://composer.github.io/installers/", - "authors": [ - { - "name": "Kyle Robinson Young", - "email": "kyle@dontkry.com", - "homepage": "https://github.com/shama" - } - ], - "autoload": { - "psr-4": { "Composer\\Installers\\": "src/Composer/Installers" } - }, - "extra": { - "class": "Composer\\Installers\\Plugin", - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "replace": { - "shama/baton": "*", - "roundcube/plugin-installer": "*" - }, - "require": { - "composer-plugin-api": "^1.0" - }, - "require-dev": { - "composer/composer": "1.0.*@dev", - "phpunit/phpunit": "^4.8.36" - }, - "scripts": { - "test": "phpunit" - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/AglInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/AglInstaller.php deleted file mode 100644 index 01b8a416..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/AglInstaller.php +++ /dev/null @@ -1,21 +0,0 @@ - 'More/{$name}/', - ); - - /** - * Format package name to CamelCase - */ - public function inflectPackageVars($vars) - { - $vars['name'] = preg_replace_callback('/(?:^|_|-)(.?)/', function ($matches) { - return strtoupper($matches[1]); - }, $vars['name']); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php deleted file mode 100644 index 79a0e958..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'ext/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php deleted file mode 100644 index 89d7ad90..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'addons/modules/{$name}/', - 'component' => 'addons/components/{$name}/', - 'service' => 'addons/services/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php deleted file mode 100644 index 22dad1b9..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php +++ /dev/null @@ -1,49 +0,0 @@ - 'Modules/{$name}/', - 'theme' => 'Themes/{$name}/' - ); - - /** - * Format package name. - * - * For package type asgard-module, cut off a trailing '-plugin' if present. - * - * For package type asgard-theme, cut off a trailing '-theme' if present. - * - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] === 'asgard-module') { - return $this->inflectPluginVars($vars); - } - - if ($vars['type'] === 'asgard-theme') { - return $this->inflectThemeVars($vars); - } - - return $vars; - } - - protected function inflectPluginVars($vars) - { - $vars['name'] = preg_replace('/-module$/', '', $vars['name']); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } - - protected function inflectThemeVars($vars) - { - $vars['name'] = preg_replace('/-theme$/', '', $vars['name']); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php deleted file mode 100644 index d62fd8fd..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'modules/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php deleted file mode 100644 index 7082bf2c..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php +++ /dev/null @@ -1,136 +0,0 @@ -composer = $composer; - $this->package = $package; - $this->io = $io; - } - - /** - * Return the install path based on package type. - * - * @param PackageInterface $package - * @param string $frameworkType - * @return string - */ - public function getInstallPath(PackageInterface $package, $frameworkType = '') - { - $type = $this->package->getType(); - - $prettyName = $this->package->getPrettyName(); - if (strpos($prettyName, '/') !== false) { - list($vendor, $name) = explode('/', $prettyName); - } else { - $vendor = ''; - $name = $prettyName; - } - - $availableVars = $this->inflectPackageVars(compact('name', 'vendor', 'type')); - - $extra = $package->getExtra(); - if (!empty($extra['installer-name'])) { - $availableVars['name'] = $extra['installer-name']; - } - - if ($this->composer->getPackage()) { - $extra = $this->composer->getPackage()->getExtra(); - if (!empty($extra['installer-paths'])) { - $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $type, $vendor); - if ($customPath !== false) { - return $this->templatePath($customPath, $availableVars); - } - } - } - - $packageType = substr($type, strlen($frameworkType) + 1); - $locations = $this->getLocations(); - if (!isset($locations[$packageType])) { - throw new \InvalidArgumentException(sprintf('Package type "%s" is not supported', $type)); - } - - return $this->templatePath($locations[$packageType], $availableVars); - } - - /** - * For an installer to override to modify the vars per installer. - * - * @param array $vars - * @return array - */ - public function inflectPackageVars($vars) - { - return $vars; - } - - /** - * Gets the installer's locations - * - * @return array - */ - public function getLocations() - { - return $this->locations; - } - - /** - * Replace vars in a path - * - * @param string $path - * @param array $vars - * @return string - */ - protected function templatePath($path, array $vars = array()) - { - if (strpos($path, '{') !== false) { - extract($vars); - preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches); - if (!empty($matches[1])) { - foreach ($matches[1] as $var) { - $path = str_replace('{$' . $var . '}', $$var, $path); - } - } - } - - return $path; - } - - /** - * Search through a passed paths array for a custom install path. - * - * @param array $paths - * @param string $name - * @param string $type - * @param string $vendor = NULL - * @return string - */ - protected function mapCustomInstallPaths(array $paths, $name, $type, $vendor = NULL) - { - foreach ($paths as $path => $names) { - if (in_array($name, $names) || in_array('type:' . $type, $names) || in_array('vendor:' . $vendor, $names)) { - return $path; - } - } - - return false; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php deleted file mode 100644 index e80cd1e1..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php +++ /dev/null @@ -1,126 +0,0 @@ -.`. - * - `bitrix-d7-component` — copy the component to directory `bitrix/components//`. - * - `bitrix-d7-template` — copy the template to directory `bitrix/templates/_`. - * - * You can set custom path to directory with Bitrix kernel in `composer.json`: - * - * ```json - * { - * "extra": { - * "bitrix-dir": "s1/bitrix" - * } - * } - * ``` - * - * @author Nik Samokhvalov - * @author Denis Kulichkin - */ -class BitrixInstaller extends BaseInstaller -{ - protected $locations = array( - 'module' => '{$bitrix_dir}/modules/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) - 'component' => '{$bitrix_dir}/components/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) - 'theme' => '{$bitrix_dir}/templates/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) - 'd7-module' => '{$bitrix_dir}/modules/{$vendor}.{$name}/', - 'd7-component' => '{$bitrix_dir}/components/{$vendor}/{$name}/', - 'd7-template' => '{$bitrix_dir}/templates/{$vendor}_{$name}/', - ); - - /** - * @var array Storage for informations about duplicates at all the time of installation packages. - */ - private static $checkedDuplicates = array(); - - /** - * {@inheritdoc} - */ - public function inflectPackageVars($vars) - { - if ($this->composer->getPackage()) { - $extra = $this->composer->getPackage()->getExtra(); - - if (isset($extra['bitrix-dir'])) { - $vars['bitrix_dir'] = $extra['bitrix-dir']; - } - } - - if (!isset($vars['bitrix_dir'])) { - $vars['bitrix_dir'] = 'bitrix'; - } - - return parent::inflectPackageVars($vars); - } - - /** - * {@inheritdoc} - */ - protected function templatePath($path, array $vars = array()) - { - $templatePath = parent::templatePath($path, $vars); - $this->checkDuplicates($templatePath, $vars); - - return $templatePath; - } - - /** - * Duplicates search packages. - * - * @param string $path - * @param array $vars - */ - protected function checkDuplicates($path, array $vars = array()) - { - $packageType = substr($vars['type'], strlen('bitrix') + 1); - $localDir = explode('/', $vars['bitrix_dir']); - array_pop($localDir); - $localDir[] = 'local'; - $localDir = implode('/', $localDir); - - $oldPath = str_replace( - array('{$bitrix_dir}', '{$name}'), - array($localDir, $vars['name']), - $this->locations[$packageType] - ); - - if (in_array($oldPath, static::$checkedDuplicates)) { - return; - } - - if ($oldPath !== $path && file_exists($oldPath) && $this->io && $this->io->isInteractive()) { - - $this->io->writeError(' Duplication of packages:'); - $this->io->writeError(' Package ' . $oldPath . ' will be called instead package ' . $path . ''); - - while (true) { - switch ($this->io->ask(' Delete ' . $oldPath . ' [y,n,?]? ', '?')) { - case 'y': - $fs = new Filesystem(); - $fs->removeDirectory($oldPath); - break 2; - - case 'n': - break 2; - - case '?': - default: - $this->io->writeError(array( - ' y - delete package ' . $oldPath . ' and to continue with the installation', - ' n - don\'t delete and to continue with the installation', - )); - $this->io->writeError(' ? - print help'); - break; - } - } - } - - static::$checkedDuplicates[] = $oldPath; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php deleted file mode 100644 index da3aad2a..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'Packages/{$vendor}/{$name}/' - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php deleted file mode 100644 index 6352beb1..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php +++ /dev/null @@ -1,82 +0,0 @@ - 'Plugin/{$name}/', - ); - - /** - * Format package name to CamelCase - */ - public function inflectPackageVars($vars) - { - if ($this->matchesCakeVersion('>=', '3.0.0')) { - return $vars; - } - - $nameParts = explode('/', $vars['name']); - foreach ($nameParts as &$value) { - $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value)); - $value = str_replace(array('-', '_'), ' ', $value); - $value = str_replace(' ', '', ucwords($value)); - } - $vars['name'] = implode('/', $nameParts); - - return $vars; - } - - /** - * Change the default plugin location when cakephp >= 3.0 - */ - public function getLocations() - { - if ($this->matchesCakeVersion('>=', '3.0.0')) { - $this->locations['plugin'] = $this->composer->getConfig()->get('vendor-dir') . '/{$vendor}/{$name}/'; - } - return $this->locations; - } - - /** - * Check if CakePHP version matches against a version - * - * @param string $matcher - * @param string $version - * @return bool - */ - protected function matchesCakeVersion($matcher, $version) - { - if (class_exists('Composer\Semver\Constraint\MultiConstraint')) { - $multiClass = 'Composer\Semver\Constraint\MultiConstraint'; - $constraintClass = 'Composer\Semver\Constraint\Constraint'; - } else { - $multiClass = 'Composer\Package\LinkConstraint\MultiConstraint'; - $constraintClass = 'Composer\Package\LinkConstraint\VersionConstraint'; - } - - $repositoryManager = $this->composer->getRepositoryManager(); - if ($repositoryManager) { - $repos = $repositoryManager->getLocalRepository(); - if (!$repos) { - return false; - } - $cake3 = new $multiClass(array( - new $constraintClass($matcher, $version), - new $constraintClass('!=', '9999999-dev'), - )); - $pool = new Pool('dev'); - $pool->addRepository($repos); - $packages = $pool->whatProvides('cakephp/cakephp'); - foreach ($packages as $package) { - $installed = new $constraintClass('=', $package->getVersion()); - if ($cake3->matches($installed)) { - return true; - } - } - } - return false; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php deleted file mode 100644 index ab2f9aad..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'Chef/{$vendor}/{$name}/', - 'role' => 'Chef/roles/{$name}/', - ); -} - diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php deleted file mode 100644 index 6673aea9..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'ext/{$name}/' - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php deleted file mode 100644 index c887815c..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'CCF/orbit/{$name}/', - 'theme' => 'CCF/app/themes/{$name}/', - ); -} \ No newline at end of file diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php deleted file mode 100644 index c7816dfc..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php +++ /dev/null @@ -1,34 +0,0 @@ - 'cockpit/modules/addons/{$name}/', - ); - - /** - * Format module name. - * - * Strip `module-` prefix from package name. - * - * @param array @vars - * - * @return array - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] == 'cockpit-module') { - return $this->inflectModuleVars($vars); - } - - return $vars; - } - - public function inflectModuleVars($vars) - { - $vars['name'] = ucfirst(preg_replace('/cockpit-/i', '', $vars['name'])); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php deleted file mode 100644 index 3b4a4ece..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'application/libraries/{$name}/', - 'third-party' => 'application/third_party/{$name}/', - 'module' => 'application/modules/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php b/twitter/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php deleted file mode 100644 index 5c01bafd..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php +++ /dev/null @@ -1,13 +0,0 @@ - 'concrete/', - 'block' => 'application/blocks/{$name}/', - 'package' => 'packages/{$name}/', - 'theme' => 'application/themes/{$name}/', - 'update' => 'updates/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php deleted file mode 100644 index d37a77ae..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php +++ /dev/null @@ -1,35 +0,0 @@ - 'craft/plugins/{$name}/', - ); - - /** - * Strip `craft-` prefix and/or `-plugin` suffix from package names - * - * @param array $vars - * - * @return array - */ - final public function inflectPackageVars($vars) - { - return $this->inflectPluginVars($vars); - } - - private function inflectPluginVars($vars) - { - $vars['name'] = preg_replace('/-' . self::NAME_SUFFIX . '$/i', '', $vars['name']); - $vars['name'] = preg_replace('/^' . self::NAME_PREFIX . '-/i', '', $vars['name']); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php deleted file mode 100644 index d94219d3..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php +++ /dev/null @@ -1,21 +0,0 @@ - 'Plugin/{$name}/', - 'theme' => 'View/Themed/{$name}/', - ); - - /** - * Format package name to CamelCase - */ - public function inflectPackageVars($vars) - { - $vars['name'] = strtolower(str_replace(array('-', '_'), ' ', $vars['name'])); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php deleted file mode 100644 index f4837a6c..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'app/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php deleted file mode 100644 index cfd638d5..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php +++ /dev/null @@ -1,50 +0,0 @@ - 'lib/plugins/{$name}/', - 'template' => 'lib/tpl/{$name}/', - ); - - /** - * Format package name. - * - * For package type dokuwiki-plugin, cut off a trailing '-plugin', - * or leading dokuwiki_ if present. - * - * For package type dokuwiki-template, cut off a trailing '-template' if present. - * - */ - public function inflectPackageVars($vars) - { - - if ($vars['type'] === 'dokuwiki-plugin') { - return $this->inflectPluginVars($vars); - } - - if ($vars['type'] === 'dokuwiki-template') { - return $this->inflectTemplateVars($vars); - } - - return $vars; - } - - protected function inflectPluginVars($vars) - { - $vars['name'] = preg_replace('/-plugin$/', '', $vars['name']); - $vars['name'] = preg_replace('/^dokuwiki_?-?/', '', $vars['name']); - - return $vars; - } - - protected function inflectTemplateVars($vars) - { - $vars['name'] = preg_replace('/-template$/', '', $vars['name']); - $vars['name'] = preg_replace('/^dokuwiki_?-?/', '', $vars['name']); - - return $vars; - } - -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php deleted file mode 100644 index 21f7e8e8..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php +++ /dev/null @@ -1,16 +0,0 @@ - - */ -class DolibarrInstaller extends BaseInstaller -{ - //TODO: Add support for scripts and themes - protected $locations = array( - 'module' => 'htdocs/custom/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php deleted file mode 100644 index fef7c525..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php +++ /dev/null @@ -1,16 +0,0 @@ - 'core/', - 'module' => 'modules/{$name}/', - 'theme' => 'themes/{$name}/', - 'library' => 'libraries/{$name}/', - 'profile' => 'profiles/{$name}/', - 'drush' => 'drush/{$name}/', - 'custom-theme' => 'themes/custom/{$name}/', - 'custom-module' => 'modules/custom/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php deleted file mode 100644 index c0bb609f..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'mod/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php deleted file mode 100644 index 6f3dc97b..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php +++ /dev/null @@ -1,12 +0,0 @@ - 'components/{$name}/', - 'module' => 'modules/{$name}/', - 'plugin' => 'plugins/{$name}/', - 'template' => 'templates/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php deleted file mode 100644 index d5321a8c..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php +++ /dev/null @@ -1,29 +0,0 @@ - 'system/expressionengine/third_party/{$name}/', - 'theme' => 'themes/third_party/{$name}/', - ); - - private $ee3Locations = array( - 'addon' => 'system/user/addons/{$name}/', - 'theme' => 'themes/user/{$name}/', - ); - - public function getInstallPath(PackageInterface $package, $frameworkType = '') - { - - $version = "{$frameworkType}Locations"; - $this->locations = $this->$version; - - return parent::getInstallPath($package, $frameworkType); - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php deleted file mode 100644 index f30ebcc7..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'web/assets/ezplatform/', - 'assets' => 'web/assets/ezplatform/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php deleted file mode 100644 index 6eba2e34..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'fuel/app/modules/{$name}/', - 'package' => 'fuel/packages/{$name}/', - 'theme' => 'fuel/app/themes/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php deleted file mode 100644 index 29d980b3..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'components/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/GravInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/GravInstaller.php deleted file mode 100644 index dbe63e07..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/GravInstaller.php +++ /dev/null @@ -1,30 +0,0 @@ - 'user/plugins/{$name}/', - 'theme' => 'user/themes/{$name}/', - ); - - /** - * Format package name - * - * @param array $vars - * - * @return array - */ - public function inflectPackageVars($vars) - { - $restrictedWords = implode('|', array_keys($this->locations)); - - $vars['name'] = strtolower($vars['name']); - $vars['name'] = preg_replace('/^(?:grav-)?(?:(?:'.$restrictedWords.')-)?(.*?)(?:-(?:'.$restrictedWords.'))?$/ui', - '$1', - $vars['name'] - ); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php deleted file mode 100644 index 8fe017f0..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php +++ /dev/null @@ -1,25 +0,0 @@ - 'plugins/{$name}/', - 'theme' => 'plugins/{$name}/', - ); - - /** - * Format package name to CamelCase - */ - public function inflectPackageVars($vars) - { - $nameParts = explode('/', $vars['name']); - foreach ($nameParts as &$value) { - $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value)); - $value = str_replace(array('-', '_'), ' ', $value); - $value = str_replace(' ', '', ucwords($value)); - } - $vars['name'] = implode('/', $nameParts); - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php deleted file mode 100644 index 5e2142ea..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'templates/{$name}/', - 'module' => 'application/modules/{$name}/', - 'library' => 'application/libraries/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/Installer.php b/twitter/vendor/composer/installers/src/Composer/Installers/Installer.php deleted file mode 100644 index 352cb7fa..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/Installer.php +++ /dev/null @@ -1,274 +0,0 @@ - 'AimeosInstaller', - 'asgard' => 'AsgardInstaller', - 'attogram' => 'AttogramInstaller', - 'agl' => 'AglInstaller', - 'annotatecms' => 'AnnotateCmsInstaller', - 'bitrix' => 'BitrixInstaller', - 'bonefish' => 'BonefishInstaller', - 'cakephp' => 'CakePHPInstaller', - 'chef' => 'ChefInstaller', - 'civicrm' => 'CiviCrmInstaller', - 'ccframework' => 'ClanCatsFrameworkInstaller', - 'cockpit' => 'CockpitInstaller', - 'codeigniter' => 'CodeIgniterInstaller', - 'concrete5' => 'Concrete5Installer', - 'craft' => 'CraftInstaller', - 'croogo' => 'CroogoInstaller', - 'dokuwiki' => 'DokuWikiInstaller', - 'dolibarr' => 'DolibarrInstaller', - 'decibel' => 'DecibelInstaller', - 'drupal' => 'DrupalInstaller', - 'elgg' => 'ElggInstaller', - 'eliasis' => 'EliasisInstaller', - 'ee3' => 'ExpressionEngineInstaller', - 'ee2' => 'ExpressionEngineInstaller', - 'ezplatform' => 'EzPlatformInstaller', - 'fuel' => 'FuelInstaller', - 'fuelphp' => 'FuelphpInstaller', - 'grav' => 'GravInstaller', - 'hurad' => 'HuradInstaller', - 'imagecms' => 'ImageCMSInstaller', - 'itop' => 'ItopInstaller', - 'joomla' => 'JoomlaInstaller', - 'kanboard' => 'KanboardInstaller', - 'kirby' => 'KirbyInstaller', - 'kodicms' => 'KodiCMSInstaller', - 'kohana' => 'KohanaInstaller', - 'lms' => 'LanManagementSystemInstaller', - 'laravel' => 'LaravelInstaller', - 'lavalite' => 'LavaLiteInstaller', - 'lithium' => 'LithiumInstaller', - 'magento' => 'MagentoInstaller', - 'majima' => 'MajimaInstaller', - 'mako' => 'MakoInstaller', - 'maya' => 'MayaInstaller', - 'mautic' => 'MauticInstaller', - 'mediawiki' => 'MediaWikiInstaller', - 'microweber' => 'MicroweberInstaller', - 'modulework' => 'MODULEWorkInstaller', - 'modx' => 'ModxInstaller', - 'modxevo' => 'MODXEvoInstaller', - 'moodle' => 'MoodleInstaller', - 'october' => 'OctoberInstaller', - 'ontowiki' => 'OntoWikiInstaller', - 'oxid' => 'OxidInstaller', - 'osclass' => 'OsclassInstaller', - 'pxcms' => 'PxcmsInstaller', - 'phpbb' => 'PhpBBInstaller', - 'pimcore' => 'PimcoreInstaller', - 'piwik' => 'PiwikInstaller', - 'plentymarkets'=> 'PlentymarketsInstaller', - 'ppi' => 'PPIInstaller', - 'puppet' => 'PuppetInstaller', - 'radphp' => 'RadPHPInstaller', - 'phifty' => 'PhiftyInstaller', - 'porto' => 'PortoInstaller', - 'redaxo' => 'RedaxoInstaller', - 'reindex' => 'ReIndexInstaller', - 'roundcube' => 'RoundcubeInstaller', - 'shopware' => 'ShopwareInstaller', - 'sitedirect' => 'SiteDirectInstaller', - 'silverstripe' => 'SilverStripeInstaller', - 'smf' => 'SMFInstaller', - 'sydes' => 'SyDESInstaller', - 'symfony1' => 'Symfony1Installer', - 'thelia' => 'TheliaInstaller', - 'tusk' => 'TuskInstaller', - 'typo3-cms' => 'TYPO3CmsInstaller', - 'typo3-flow' => 'TYPO3FlowInstaller', - 'userfrosting' => 'UserFrostingInstaller', - 'vanilla' => 'VanillaInstaller', - 'whmcs' => 'WHMCSInstaller', - 'wolfcms' => 'WolfCMSInstaller', - 'wordpress' => 'WordPressInstaller', - 'yawik' => 'YawikInstaller', - 'zend' => 'ZendInstaller', - 'zikula' => 'ZikulaInstaller', - 'prestashop' => 'PrestashopInstaller' - ); - - /** - * Installer constructor. - * - * Disables installers specified in main composer extra installer-disable - * list - * - * @param IOInterface $io - * @param Composer $composer - * @param string $type - * @param Filesystem|null $filesystem - * @param BinaryInstaller|null $binaryInstaller - */ - public function __construct( - IOInterface $io, - Composer $composer, - $type = 'library', - Filesystem $filesystem = null, - BinaryInstaller $binaryInstaller = null - ) { - parent::__construct($io, $composer, $type, $filesystem, - $binaryInstaller); - $this->removeDisabledInstallers(); - } - - /** - * {@inheritDoc} - */ - public function getInstallPath(PackageInterface $package) - { - $type = $package->getType(); - $frameworkType = $this->findFrameworkType($type); - - if ($frameworkType === false) { - throw new \InvalidArgumentException( - 'Sorry the package type of this package is not yet supported.' - ); - } - - $class = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType]; - $installer = new $class($package, $this->composer, $this->getIO()); - - return $installer->getInstallPath($package, $frameworkType); - } - - public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) - { - parent::uninstall($repo, $package); - $installPath = $this->getPackageBasePath($package); - $this->io->write(sprintf('Deleting %s - %s', $installPath, !file_exists($installPath) ? 'deleted' : 'not deleted')); - } - - /** - * {@inheritDoc} - */ - public function supports($packageType) - { - $frameworkType = $this->findFrameworkType($packageType); - - if ($frameworkType === false) { - return false; - } - - $locationPattern = $this->getLocationPattern($frameworkType); - - return preg_match('#' . $frameworkType . '-' . $locationPattern . '#', $packageType, $matches) === 1; - } - - /** - * Finds a supported framework type if it exists and returns it - * - * @param string $type - * @return string - */ - protected function findFrameworkType($type) - { - $frameworkType = false; - - krsort($this->supportedTypes); - - foreach ($this->supportedTypes as $key => $val) { - if ($key === substr($type, 0, strlen($key))) { - $frameworkType = substr($type, 0, strlen($key)); - break; - } - } - - return $frameworkType; - } - - /** - * Get the second part of the regular expression to check for support of a - * package type - * - * @param string $frameworkType - * @return string - */ - protected function getLocationPattern($frameworkType) - { - $pattern = false; - if (!empty($this->supportedTypes[$frameworkType])) { - $frameworkClass = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType]; - /** @var BaseInstaller $framework */ - $framework = new $frameworkClass(null, $this->composer, $this->getIO()); - $locations = array_keys($framework->getLocations()); - $pattern = $locations ? '(' . implode('|', $locations) . ')' : false; - } - - return $pattern ? : '(\w+)'; - } - - /** - * Get I/O object - * - * @return IOInterface - */ - private function getIO() - { - return $this->io; - } - - /** - * Look for installers set to be disabled in composer's extra config and - * remove them from the list of supported installers. - * - * Globals: - * - true, "all", and "*" - disable all installers. - * - false - enable all installers (useful with - * wikimedia/composer-merge-plugin or similar) - * - * @return void - */ - protected function removeDisabledInstallers() - { - $extra = $this->composer->getPackage()->getExtra(); - - if (!isset($extra['installer-disable']) || $extra['installer-disable'] === false) { - // No installers are disabled - return; - } - - // Get installers to disable - $disable = $extra['installer-disable']; - - // Ensure $disabled is an array - if (!is_array($disable)) { - $disable = array($disable); - } - - // Check which installers should be disabled - $all = array(true, "all", "*"); - $intersect = array_intersect($all, $disable); - if (!empty($intersect)) { - // Disable all installers - $this->supportedTypes = array(); - } else { - // Disable specified installers - foreach ($disable as $key => $installer) { - if (is_string($installer) && key_exists($installer, $this->supportedTypes)) { - unset($this->supportedTypes[$installer]); - } - } - } - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php deleted file mode 100644 index c6c1b337..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'extensions/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php deleted file mode 100644 index 9ee77596..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php +++ /dev/null @@ -1,15 +0,0 @@ - 'components/{$name}/', - 'module' => 'modules/{$name}/', - 'template' => 'templates/{$name}/', - 'plugin' => 'plugins/{$name}/', - 'library' => 'libraries/{$name}/', - ); - - // TODO: Add inflector for mod_ and com_ names -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php deleted file mode 100644 index 9cb7b8cd..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php +++ /dev/null @@ -1,18 +0,0 @@ - 'plugins/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php deleted file mode 100644 index 36b2f84a..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'site/plugins/{$name}/', - 'field' => 'site/fields/{$name}/', - 'tag' => 'site/tags/{$name}/' - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php deleted file mode 100644 index 7143e232..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'cms/plugins/{$name}/', - 'media' => 'cms/media/vendor/{$name}/' - ); -} \ No newline at end of file diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php deleted file mode 100644 index dcd6d263..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'modules/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php deleted file mode 100644 index 903143a5..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php +++ /dev/null @@ -1,27 +0,0 @@ - 'plugins/{$name}/', - 'template' => 'templates/{$name}/', - 'document-template' => 'documents/templates/{$name}/', - 'userpanel-module' => 'userpanel/modules/{$name}/', - ); - - /** - * Format package name to CamelCase - */ - public function inflectPackageVars($vars) - { - $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } - -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php deleted file mode 100644 index be4d53a7..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'libraries/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php deleted file mode 100644 index 412c0b5c..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'packages/{$vendor}/{$name}/', - 'theme' => 'public/themes/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php deleted file mode 100644 index 47bbd4ca..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'libraries/{$name}/', - 'source' => 'libraries/_source/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php deleted file mode 100644 index 9c2e9fb4..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'modules/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php deleted file mode 100644 index 5a664608..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php +++ /dev/null @@ -1,16 +0,0 @@ - 'assets/snippets/{$name}/', - 'plugin' => 'assets/plugins/{$name}/', - 'module' => 'assets/modules/{$name}/', - 'template' => 'assets/templates/{$name}/', - 'lib' => 'assets/lib/{$name}/' - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php deleted file mode 100644 index cf18e947..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'app/design/frontend/{$name}/', - 'skin' => 'skin/frontend/default/{$name}/', - 'library' => 'lib/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php deleted file mode 100644 index e463756f..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php +++ /dev/null @@ -1,37 +0,0 @@ - 'plugins/{$name}/', - ); - - /** - * Transforms the names - * @param array $vars - * @return array - */ - public function inflectPackageVars($vars) - { - return $this->correctPluginName($vars); - } - - /** - * Change hyphenated names to camelcase - * @param array $vars - * @return array - */ - private function correctPluginName($vars) - { - $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) { - return strtoupper($matches[0][1]); - }, $vars['name']); - $vars['name'] = ucfirst($camelCasedName); - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php deleted file mode 100644 index ca3cfacb..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'app/packages/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php deleted file mode 100644 index 3e1ce2b2..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php +++ /dev/null @@ -1,25 +0,0 @@ - 'plugins/{$name}/', - 'theme' => 'themes/{$name}/', - ); - - /** - * Format package name of mautic-plugins to CamelCase - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] == 'mautic-plugin') { - $vars['name'] = preg_replace_callback('/(-[a-z])/', function ($matches) { - return strtoupper($matches[0][1]); - }, ucfirst($vars['name'])); - } - - return $vars; - } - -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php deleted file mode 100644 index 30a91676..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php +++ /dev/null @@ -1,33 +0,0 @@ - 'modules/{$name}/', - ); - - /** - * Format package name. - * - * For package type maya-module, cut off a trailing '-module' if present. - * - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] === 'maya-module') { - return $this->inflectModuleVars($vars); - } - - return $vars; - } - - protected function inflectModuleVars($vars) - { - $vars['name'] = preg_replace('/-module$/', '', $vars['name']); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php deleted file mode 100644 index f5a8957e..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php +++ /dev/null @@ -1,51 +0,0 @@ - 'core/', - 'extension' => 'extensions/{$name}/', - 'skin' => 'skins/{$name}/', - ); - - /** - * Format package name. - * - * For package type mediawiki-extension, cut off a trailing '-extension' if present and transform - * to CamelCase keeping existing uppercase chars. - * - * For package type mediawiki-skin, cut off a trailing '-skin' if present. - * - */ - public function inflectPackageVars($vars) - { - - if ($vars['type'] === 'mediawiki-extension') { - return $this->inflectExtensionVars($vars); - } - - if ($vars['type'] === 'mediawiki-skin') { - return $this->inflectSkinVars($vars); - } - - return $vars; - } - - protected function inflectExtensionVars($vars) - { - $vars['name'] = preg_replace('/-extension$/', '', $vars['name']); - $vars['name'] = str_replace('-', ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } - - protected function inflectSkinVars($vars) - { - $vars['name'] = preg_replace('/-skin$/', '', $vars['name']); - - return $vars; - } - -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php deleted file mode 100644 index 4bbbec8c..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php +++ /dev/null @@ -1,111 +0,0 @@ - 'userfiles/modules/{$name}/', - 'module-skin' => 'userfiles/modules/{$name}/templates/', - 'template' => 'userfiles/templates/{$name}/', - 'element' => 'userfiles/elements/{$name}/', - 'vendor' => 'vendor/{$name}/', - 'components' => 'components/{$name}/' - ); - - /** - * Format package name. - * - * For package type microweber-module, cut off a trailing '-module' if present - * - * For package type microweber-template, cut off a trailing '-template' if present. - * - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] === 'microweber-template') { - return $this->inflectTemplateVars($vars); - } - if ($vars['type'] === 'microweber-templates') { - return $this->inflectTemplatesVars($vars); - } - if ($vars['type'] === 'microweber-core') { - return $this->inflectCoreVars($vars); - } - if ($vars['type'] === 'microweber-adapter') { - return $this->inflectCoreVars($vars); - } - if ($vars['type'] === 'microweber-module') { - return $this->inflectModuleVars($vars); - } - if ($vars['type'] === 'microweber-modules') { - return $this->inflectModulesVars($vars); - } - if ($vars['type'] === 'microweber-skin') { - return $this->inflectSkinVars($vars); - } - if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') { - return $this->inflectElementVars($vars); - } - - return $vars; - } - - protected function inflectTemplateVars($vars) - { - $vars['name'] = preg_replace('/-template$/', '', $vars['name']); - $vars['name'] = preg_replace('/template-$/', '', $vars['name']); - - return $vars; - } - - protected function inflectTemplatesVars($vars) - { - $vars['name'] = preg_replace('/-templates$/', '', $vars['name']); - $vars['name'] = preg_replace('/templates-$/', '', $vars['name']); - - return $vars; - } - - protected function inflectCoreVars($vars) - { - $vars['name'] = preg_replace('/-providers$/', '', $vars['name']); - $vars['name'] = preg_replace('/-provider$/', '', $vars['name']); - $vars['name'] = preg_replace('/-adapter$/', '', $vars['name']); - - return $vars; - } - - protected function inflectModuleVars($vars) - { - $vars['name'] = preg_replace('/-module$/', '', $vars['name']); - $vars['name'] = preg_replace('/module-$/', '', $vars['name']); - - return $vars; - } - - protected function inflectModulesVars($vars) - { - $vars['name'] = preg_replace('/-modules$/', '', $vars['name']); - $vars['name'] = preg_replace('/modules-$/', '', $vars['name']); - - return $vars; - } - - protected function inflectSkinVars($vars) - { - $vars['name'] = preg_replace('/-skin$/', '', $vars['name']); - $vars['name'] = preg_replace('/skin-$/', '', $vars['name']); - - return $vars; - } - - protected function inflectElementVars($vars) - { - $vars['name'] = preg_replace('/-elements$/', '', $vars['name']); - $vars['name'] = preg_replace('/elements-$/', '', $vars['name']); - $vars['name'] = preg_replace('/-element$/', '', $vars['name']); - $vars['name'] = preg_replace('/element-$/', '', $vars['name']); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php deleted file mode 100644 index 0ee140ab..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php +++ /dev/null @@ -1,12 +0,0 @@ - 'core/packages/{$name}/' - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php deleted file mode 100644 index a89c82f7..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php +++ /dev/null @@ -1,57 +0,0 @@ - 'mod/{$name}/', - 'admin_report' => 'admin/report/{$name}/', - 'atto' => 'lib/editor/atto/plugins/{$name}/', - 'tool' => 'admin/tool/{$name}/', - 'assignment' => 'mod/assignment/type/{$name}/', - 'assignsubmission' => 'mod/assign/submission/{$name}/', - 'assignfeedback' => 'mod/assign/feedback/{$name}/', - 'auth' => 'auth/{$name}/', - 'availability' => 'availability/condition/{$name}/', - 'block' => 'blocks/{$name}/', - 'booktool' => 'mod/book/tool/{$name}/', - 'cachestore' => 'cache/stores/{$name}/', - 'cachelock' => 'cache/locks/{$name}/', - 'calendartype' => 'calendar/type/{$name}/', - 'format' => 'course/format/{$name}/', - 'coursereport' => 'course/report/{$name}/', - 'datafield' => 'mod/data/field/{$name}/', - 'datapreset' => 'mod/data/preset/{$name}/', - 'editor' => 'lib/editor/{$name}/', - 'enrol' => 'enrol/{$name}/', - 'filter' => 'filter/{$name}/', - 'gradeexport' => 'grade/export/{$name}/', - 'gradeimport' => 'grade/import/{$name}/', - 'gradereport' => 'grade/report/{$name}/', - 'gradingform' => 'grade/grading/form/{$name}/', - 'local' => 'local/{$name}/', - 'logstore' => 'admin/tool/log/store/{$name}/', - 'ltisource' => 'mod/lti/source/{$name}/', - 'ltiservice' => 'mod/lti/service/{$name}/', - 'message' => 'message/output/{$name}/', - 'mnetservice' => 'mnet/service/{$name}/', - 'plagiarism' => 'plagiarism/{$name}/', - 'portfolio' => 'portfolio/{$name}/', - 'qbehaviour' => 'question/behaviour/{$name}/', - 'qformat' => 'question/format/{$name}/', - 'qtype' => 'question/type/{$name}/', - 'quizaccess' => 'mod/quiz/accessrule/{$name}/', - 'quiz' => 'mod/quiz/report/{$name}/', - 'report' => 'report/{$name}/', - 'repository' => 'repository/{$name}/', - 'scormreport' => 'mod/scorm/report/{$name}/', - 'search' => 'search/engine/{$name}/', - 'theme' => 'theme/{$name}/', - 'tinymce' => 'lib/editor/tinymce/plugins/{$name}/', - 'profilefield' => 'user/profile/field/{$name}/', - 'webservice' => 'webservice/{$name}/', - 'workshopallocation' => 'mod/workshop/allocation/{$name}/', - 'workshopeval' => 'mod/workshop/eval/{$name}/', - 'workshopform' => 'mod/workshop/form/{$name}/' - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php deleted file mode 100644 index 08d5dc4e..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php +++ /dev/null @@ -1,47 +0,0 @@ - 'modules/{$name}/', - 'plugin' => 'plugins/{$vendor}/{$name}/', - 'theme' => 'themes/{$name}/' - ); - - /** - * Format package name. - * - * For package type october-plugin, cut off a trailing '-plugin' if present. - * - * For package type october-theme, cut off a trailing '-theme' if present. - * - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] === 'october-plugin') { - return $this->inflectPluginVars($vars); - } - - if ($vars['type'] === 'october-theme') { - return $this->inflectThemeVars($vars); - } - - return $vars; - } - - protected function inflectPluginVars($vars) - { - $vars['name'] = preg_replace('/^oc-|-plugin$/', '', $vars['name']); - $vars['vendor'] = preg_replace('/[^a-z0-9_]/i', '', $vars['vendor']); - - return $vars; - } - - protected function inflectThemeVars($vars) - { - $vars['name'] = preg_replace('/^oc-|-theme$/', '', $vars['name']); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php deleted file mode 100644 index 5dd3438d..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php +++ /dev/null @@ -1,24 +0,0 @@ - 'extensions/{$name}/', - 'theme' => 'extensions/themes/{$name}/', - 'translation' => 'extensions/translations/{$name}/', - ); - - /** - * Format package name to lower case and remove ".ontowiki" suffix - */ - public function inflectPackageVars($vars) - { - $vars['name'] = strtolower($vars['name']); - $vars['name'] = preg_replace('/.ontowiki$/', '', $vars['name']); - $vars['name'] = preg_replace('/-theme$/', '', $vars['name']); - $vars['name'] = preg_replace('/-translation$/', '', $vars['name']); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php deleted file mode 100644 index 3ca7954c..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php +++ /dev/null @@ -1,14 +0,0 @@ - 'oc-content/plugins/{$name}/', - 'theme' => 'oc-content/themes/{$name}/', - 'language' => 'oc-content/languages/{$name}/', - ); - -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php deleted file mode 100644 index 49940ff6..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php +++ /dev/null @@ -1,59 +0,0 @@ -.+)\/.+/'; - - protected $locations = array( - 'module' => 'modules/{$name}/', - 'theme' => 'application/views/{$name}/', - 'out' => 'out/{$name}/', - ); - - /** - * getInstallPath - * - * @param PackageInterface $package - * @param string $frameworkType - * @return void - */ - public function getInstallPath(PackageInterface $package, $frameworkType = '') - { - $installPath = parent::getInstallPath($package, $frameworkType); - $type = $this->package->getType(); - if ($type === 'oxid-module') { - $this->prepareVendorDirectory($installPath); - } - return $installPath; - } - - /** - * prepareVendorDirectory - * - * Makes sure there is a vendormetadata.php file inside - * the vendor folder if there is a vendor folder. - * - * @param string $installPath - * @return void - */ - protected function prepareVendorDirectory($installPath) - { - $matches = ''; - $hasVendorDirectory = preg_match(self::VENDOR_PATTERN, $installPath, $matches); - if (!$hasVendorDirectory) { - return; - } - - $vendorDirectory = $matches['vendor']; - $vendorPath = getcwd() . '/modules/' . $vendorDirectory; - if (!file_exists($vendorPath)) { - mkdir($vendorPath, 0755, true); - } - - $vendorMetaDataPath = $vendorPath . '/vendormetadata.php'; - touch($vendorMetaDataPath); - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php deleted file mode 100644 index 170136f9..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'modules/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php deleted file mode 100644 index 4e59a8a7..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'bundles/{$name}/', - 'library' => 'libraries/{$name}/', - 'framework' => 'frameworks/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php deleted file mode 100644 index deb2b77a..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'ext/{$vendor}/{$name}/', - 'language' => 'language/{$name}/', - 'style' => 'styles/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php deleted file mode 100644 index 4781fa6d..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php +++ /dev/null @@ -1,21 +0,0 @@ - 'plugins/{$name}/', - ); - - /** - * Format package name to CamelCase - */ - public function inflectPackageVars($vars) - { - $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php deleted file mode 100644 index c17f4572..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php +++ /dev/null @@ -1,32 +0,0 @@ - 'plugins/{$name}/', - ); - - /** - * Format package name to CamelCase - * @param array $vars - * - * @return array - */ - public function inflectPackageVars($vars) - { - $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php deleted file mode 100644 index 903e55f6..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php +++ /dev/null @@ -1,29 +0,0 @@ - '{$name}/' - ); - - /** - * Remove hyphen, "plugin" and format to camelcase - * @param array $vars - * - * @return array - */ - public function inflectPackageVars($vars) - { - $vars['name'] = explode("-", $vars['name']); - foreach ($vars['name'] as $key => $name) { - $vars['name'][$key] = ucfirst($vars['name'][$key]); - if (strcasecmp($name, "Plugin") == 0) { - unset($vars['name'][$key]); - } - } - $vars['name'] = implode("",$vars['name']); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/Plugin.php b/twitter/vendor/composer/installers/src/Composer/Installers/Plugin.php deleted file mode 100644 index 5eb04af1..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/Plugin.php +++ /dev/null @@ -1,17 +0,0 @@ -getInstallationManager()->addInstaller($installer); - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php deleted file mode 100644 index dbf85e63..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'app/Containers/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php deleted file mode 100644 index 4c8421e3..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'modules/{$name}/', - 'theme' => 'themes/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php deleted file mode 100644 index 77cc3dd8..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'modules/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php deleted file mode 100644 index 65510580..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php +++ /dev/null @@ -1,63 +0,0 @@ - 'app/Modules/{$name}/', - 'theme' => 'themes/{$name}/', - ); - - /** - * Format package name. - * - * @param array $vars - * - * @return array - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] === 'pxcms-module') { - return $this->inflectModuleVars($vars); - } - - if ($vars['type'] === 'pxcms-theme') { - return $this->inflectThemeVars($vars); - } - - return $vars; - } - - /** - * For package type pxcms-module, cut off a trailing '-plugin' if present. - * - * return string - */ - protected function inflectModuleVars($vars) - { - $vars['name'] = str_replace('pxcms-', '', $vars['name']); // strip out pxcms- just incase (legacy) - $vars['name'] = str_replace('module-', '', $vars['name']); // strip out module- - $vars['name'] = preg_replace('/-module$/', '', $vars['name']); // strip out -module - $vars['name'] = str_replace('-', '_', $vars['name']); // make -'s be _'s - $vars['name'] = ucwords($vars['name']); // make module name camelcased - - return $vars; - } - - - /** - * For package type pxcms-module, cut off a trailing '-plugin' if present. - * - * return string - */ - protected function inflectThemeVars($vars) - { - $vars['name'] = str_replace('pxcms-', '', $vars['name']); // strip out pxcms- just incase (legacy) - $vars['name'] = str_replace('theme-', '', $vars['name']); // strip out theme- - $vars['name'] = preg_replace('/-theme$/', '', $vars['name']); // strip out -theme - $vars['name'] = str_replace('-', '_', $vars['name']); // make -'s be _'s - $vars['name'] = ucwords($vars['name']); // make module name camelcased - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php deleted file mode 100644 index 0f78b5ca..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php +++ /dev/null @@ -1,24 +0,0 @@ - 'src/{$name}/' - ); - - /** - * Format package name to CamelCase - */ - public function inflectPackageVars($vars) - { - $nameParts = explode('/', $vars['name']); - foreach ($nameParts as &$value) { - $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value)); - $value = str_replace(array('-', '_'), ' ', $value); - $value = str_replace(' ', '', ucwords($value)); - } - $vars['name'] = implode('/', $nameParts); - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php deleted file mode 100644 index 252c7339..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'themes/{$name}/', - 'plugin' => 'plugins/{$name}/' - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php deleted file mode 100644 index 09544576..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'redaxo/include/addons/{$name}/', - 'bestyle-plugin' => 'redaxo/include/addons/be_style/plugins/{$name}/' - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php deleted file mode 100644 index d8d795be..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php +++ /dev/null @@ -1,22 +0,0 @@ - 'plugins/{$name}/', - ); - - /** - * Lowercase name and changes the name to a underscores - * - * @param array $vars - * @return array - */ - public function inflectPackageVars($vars) - { - $vars['name'] = strtolower(str_replace('-', '_', $vars['name'])); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php deleted file mode 100644 index 1acd3b14..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'Sources/{$name}/', - 'theme' => 'Themes/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php deleted file mode 100644 index 7d20d27a..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php +++ /dev/null @@ -1,60 +0,0 @@ - 'engine/Shopware/Plugins/Local/Backend/{$name}/', - 'core-plugin' => 'engine/Shopware/Plugins/Local/Core/{$name}/', - 'frontend-plugin' => 'engine/Shopware/Plugins/Local/Frontend/{$name}/', - 'theme' => 'templates/{$name}/', - 'plugin' => 'custom/plugins/{$name}/', - 'frontend-theme' => 'themes/Frontend/{$name}/', - ); - - /** - * Transforms the names - * @param array $vars - * @return array - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] === 'shopware-theme') { - return $this->correctThemeName($vars); - } - - return $this->correctPluginName($vars); - } - - /** - * Changes the name to a camelcased combination of vendor and name - * @param array $vars - * @return array - */ - private function correctPluginName($vars) - { - $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) { - return strtoupper($matches[0][1]); - }, $vars['name']); - - $vars['name'] = ucfirst($vars['vendor']) . ucfirst($camelCasedName); - - return $vars; - } - - /** - * Changes the name to a underscore separated name - * @param array $vars - * @return array - */ - private function correctThemeName($vars) - { - $vars['name'] = str_replace('-', '_', $vars['name']); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php deleted file mode 100644 index 81910e9f..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php +++ /dev/null @@ -1,35 +0,0 @@ - '{$name}/', - 'theme' => 'themes/{$name}/', - ); - - /** - * Return the install path based on package type. - * - * Relies on built-in BaseInstaller behaviour with one exception: silverstripe/framework - * must be installed to 'sapphire' and not 'framework' if the version is <3.0.0 - * - * @param PackageInterface $package - * @param string $frameworkType - * @return string - */ - public function getInstallPath(PackageInterface $package, $frameworkType = '') - { - if ( - $package->getName() == 'silverstripe/framework' - && preg_match('/^\d+\.\d+\.\d+/', $package->getVersion()) - && version_compare($package->getVersion(), '2.999.999') < 0 - ) { - return $this->templatePath($this->locations['module'], array('name' => 'sapphire')); - } - - return parent::getInstallPath($package, $frameworkType); - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php deleted file mode 100644 index 762d94c6..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php +++ /dev/null @@ -1,25 +0,0 @@ - 'modules/{$vendor}/{$name}/', - 'plugin' => 'plugins/{$vendor}/{$name}/' - ); - - public function inflectPackageVars($vars) - { - return $this->parseVars($vars); - } - - protected function parseVars($vars) - { - $vars['vendor'] = strtolower($vars['vendor']) == 'sitedirect' ? 'SiteDirect' : $vars['vendor']; - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php deleted file mode 100644 index 83ef9d09..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php +++ /dev/null @@ -1,49 +0,0 @@ - 'app/modules/{$name}/', - 'theme' => 'themes/{$name}/', - ); - - /** - * Format module name. - * - * Strip `sydes-` prefix and a trailing '-theme' or '-module' from package name if present. - * - * @param array @vars - * - * @return array - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] == 'sydes-module') { - return $this->inflectModuleVars($vars); - } - - if ($vars['type'] === 'sydes-theme') { - return $this->inflectThemeVars($vars); - } - - return $vars; - } - - public function inflectModuleVars($vars) - { - $vars['name'] = preg_replace('/(^sydes-|-module$)/i', '', $vars['name']); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } - - protected function inflectThemeVars($vars) - { - $vars['name'] = preg_replace('/(^sydes-|-theme$)/', '', $vars['name']); - $vars['name'] = strtolower($vars['name']); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php b/twitter/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php deleted file mode 100644 index 1675c4f2..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php +++ /dev/null @@ -1,26 +0,0 @@ - - */ -class Symfony1Installer extends BaseInstaller -{ - protected $locations = array( - 'plugin' => 'plugins/{$name}/', - ); - - /** - * Format package name to CamelCase - */ - public function inflectPackageVars($vars) - { - $vars['name'] = preg_replace_callback('/(-[a-z])/', function ($matches) { - return strtoupper($matches[0][1]); - }, $vars['name']); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php deleted file mode 100644 index b1663e84..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php +++ /dev/null @@ -1,16 +0,0 @@ - - */ -class TYPO3CmsInstaller extends BaseInstaller -{ - protected $locations = array( - 'extension' => 'typo3conf/ext/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php deleted file mode 100644 index 42572f44..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php +++ /dev/null @@ -1,38 +0,0 @@ - 'Packages/Application/{$name}/', - 'framework' => 'Packages/Framework/{$name}/', - 'plugin' => 'Packages/Plugins/{$name}/', - 'site' => 'Packages/Sites/{$name}/', - 'boilerplate' => 'Packages/Boilerplates/{$name}/', - 'build' => 'Build/{$name}/', - ); - - /** - * Modify the package name to be a TYPO3 Flow style key. - * - * @param array $vars - * @return array - */ - public function inflectPackageVars($vars) - { - $autoload = $this->package->getAutoload(); - if (isset($autoload['psr-0']) && is_array($autoload['psr-0'])) { - $namespace = key($autoload['psr-0']); - $vars['name'] = str_replace('\\', '.', $namespace); - } - if (isset($autoload['psr-4']) && is_array($autoload['psr-4'])) { - $namespace = key($autoload['psr-4']); - $vars['name'] = rtrim(str_replace('\\', '.', $namespace), '.'); - } - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php deleted file mode 100644 index 158af526..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php +++ /dev/null @@ -1,12 +0,0 @@ - 'local/modules/{$name}/', - 'frontoffice-template' => 'templates/frontOffice/{$name}/', - 'backoffice-template' => 'templates/backOffice/{$name}/', - 'email-template' => 'templates/email/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php deleted file mode 100644 index 7c0113b8..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php +++ /dev/null @@ -1,14 +0,0 @@ - - */ - class TuskInstaller extends BaseInstaller - { - protected $locations = array( - 'task' => '.tusk/tasks/{$name}/', - 'command' => '.tusk/commands/{$name}/', - 'asset' => 'assets/tusk/{$name}/', - ); - } diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php deleted file mode 100644 index fcb414ab..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'app/sprinkles/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php deleted file mode 100644 index 24ca6451..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'plugins/{$name}/', - 'theme' => 'themes/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php deleted file mode 100644 index 7d90c5e6..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php +++ /dev/null @@ -1,49 +0,0 @@ - 'src/{$vendor}/{$name}/', - 'theme' => 'themes/{$name}/' - ); - - /** - * Format package name. - * - * For package type vgmcp-bundle, cut off a trailing '-bundle' if present. - * - * For package type vgmcp-theme, cut off a trailing '-theme' if present. - * - */ - public function inflectPackageVars($vars) - { - if ($vars['type'] === 'vgmcp-bundle') { - return $this->inflectPluginVars($vars); - } - - if ($vars['type'] === 'vgmcp-theme') { - return $this->inflectThemeVars($vars); - } - - return $vars; - } - - protected function inflectPluginVars($vars) - { - $vars['name'] = preg_replace('/-bundle$/', '', $vars['name']); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } - - protected function inflectThemeVars($vars) - { - $vars['name'] = preg_replace('/-theme$/', '', $vars['name']); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php deleted file mode 100644 index 2cbb4a46..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'modules/gateways/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php deleted file mode 100644 index cb387881..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php +++ /dev/null @@ -1,9 +0,0 @@ - 'wolf/plugins/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php deleted file mode 100644 index 91c46ad9..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php +++ /dev/null @@ -1,12 +0,0 @@ - 'wp-content/plugins/{$name}/', - 'theme' => 'wp-content/themes/{$name}/', - 'muplugin' => 'wp-content/mu-plugins/{$name}/', - 'dropin' => 'wp-content/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php deleted file mode 100644 index 27f429ff..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php +++ /dev/null @@ -1,32 +0,0 @@ - 'module/{$name}/', - ); - - /** - * Format package name to CamelCase - * @param array $vars - * - * @return array - */ - public function inflectPackageVars($vars) - { - $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); - $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); - $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); - - return $vars; - } -} \ No newline at end of file diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php deleted file mode 100644 index bde9bc8c..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php +++ /dev/null @@ -1,11 +0,0 @@ - 'library/{$name}/', - 'extra' => 'extras/library/{$name}/', - 'module' => 'module/{$name}/', - ); -} diff --git a/twitter/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php b/twitter/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php deleted file mode 100644 index 56cdf5da..00000000 --- a/twitter/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php +++ /dev/null @@ -1,10 +0,0 @@ - 'modules/{$vendor}-{$name}/', - 'theme' => 'themes/{$vendor}-{$name}/' - ); -} diff --git a/twitter/vendor/composer/installers/src/bootstrap.php b/twitter/vendor/composer/installers/src/bootstrap.php deleted file mode 100644 index 0de276ee..00000000 --- a/twitter/vendor/composer/installers/src/bootstrap.php +++ /dev/null @@ -1,13 +0,0 @@ - - -This program 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 Foundation, either version 3 of the License, or -(at your option) any later version. - -This program 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 this program. If not, see . - -[![Codacy Badge](https://api.codacy.com/project/badge/Grade/3cd81a521d334648b9958327621a3070)](https://www.codacy.com/app/jublonet/codebird-php?utm_source=github.com&utm_medium=referral&utm_content=jublonet/codebird-php&utm_campaign=badger) -[![Coverage Status](https://img.shields.io/coveralls/jublonet/codebird-php/develop.svg)](https://coveralls.io/github/jublonet/codebird-php?branch=develop) -[![Travis Status](https://img.shields.io/travis/jublonet/codebird-php/develop.svg)](https://travis-ci.org/jublonet/codebird-php/branches) - -### Requirements - -- PHP 7.1.0 or higher -- OpenSSL extension - - -Summary -------- - -Use Codebird to connect to the Twitter **REST API, Streaming API, Collections API, TON (Object Nest) API** -and **Twitter Ads API** from your PHP code — all using just one library. -Codebird supports full 3-way OAuth as well as application-only auth. - - -Authentication --------------- - -To authenticate your API requests on behalf of a certain Twitter user -(following OAuth 1.0a), take a look at these steps: - -```php -require_once ('codebird.php'); -\Codebird\Codebird::setConsumerKey('YOURKEY', 'YOURSECRET'); // static, see README - -$cb = \Codebird\Codebird::getInstance(); -``` - -You may either set the OAuth token and secret, if you already have them: -```php -$cb->setToken('YOURTOKEN', 'YOURTOKENSECRET'); -``` - -Or you authenticate, like this: - -```php -session_start(); - -if (! isset($_SESSION['oauth_token'])) { - // get the request token - $reply = $cb->oauth_requestToken([ - 'oauth_callback' => 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] - ]); - - // store the token - $cb->setToken($reply->oauth_token, $reply->oauth_token_secret); - $_SESSION['oauth_token'] = $reply->oauth_token; - $_SESSION['oauth_token_secret'] = $reply->oauth_token_secret; - $_SESSION['oauth_verify'] = true; - - // redirect to auth website - $auth_url = $cb->oauth_authorize(); - header('Location: ' . $auth_url); - die(); - -} elseif (isset($_GET['oauth_verifier']) && isset($_SESSION['oauth_verify'])) { - // verify the token - $cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); - unset($_SESSION['oauth_verify']); - - // get the access token - $reply = $cb->oauth_accessToken([ - 'oauth_verifier' => $_GET['oauth_verifier'] - ]); - - // store the token (which is different from the request token!) - $_SESSION['oauth_token'] = $reply->oauth_token; - $_SESSION['oauth_token_secret'] = $reply->oauth_token_secret; - - // send to same URL, without oauth GET parameters - header('Location: ' . basename(__FILE__)); - die(); -} - -// assign access token on each page load -$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); -``` - -### Logging out - -In case you want to log out the current user (to log in a different user without -creating a new Codebird object), just call the `logout()` method. - -``` -$cb->logout(); -``` - -### Application-only auth - -Some API methods also support authenticating on a per-application level. -This is useful for getting data that are not directly related to a specific -Twitter user, but generic to the Twitter ecosystem (such as ```search/tweets```). - -To obtain an app-only bearer token, call the appropriate API: - -```php -$reply = $cb->oauth2_token(); -$bearer_token = $reply->access_token; -``` - -I strongly recommend that you store the obtained bearer token in your database. -There is no need to re-obtain the token with each page load, as it becomes invalid -only when you call the ```oauth2/invalidate_token``` method. - -If you already have your token, tell Codebird to use it: -```php -\Codebird\Codebird::setBearerToken('YOURBEARERTOKEN'); -``` -In this case, you don't need to set the consumer key and secret. -For sending an API request with app-only auth, see the ‘Usage examples’ section. - - -### A word on your callback URL - -Twitter is very restrictive about which URLs may be used for your callback URL. -For example, even the presence of the ‘www’ subdomain must match with the domain -that you specified in the settings of your app at https://developer.twitter.com/en/apps. - - -Mapping API methods to Codebird function calls ----------------------------------------------- - -As you can see from the last example, there is a general way how Twitter’s API methods -map to Codebird function calls. The general rules are: - -1. For each slash in a Twitter API method, use an underscore in the Codebird function. - - Example: ```statuses/update``` maps to ```Codebird::statuses_update()```. - -2. For each underscore in a Twitter API method, use camelCase in the Codebird function. - - Example: ```statuses/home_timeline``` maps to ```Codebird::statuses_homeTimeline()```. - -3. For each parameter template in method, use UPPERCASE in the Codebird function. - Also don’t forget to include the parameter in your parameter list. - - Examples: - - ```statuses/show/:id``` maps to ```Codebird::statuses_show_ID('id=12345')```. - - ```users/profile_image/:screen_name``` maps to - `Codebird::users_profileImage_SCREEN_NAME('screen_name=jublonet')`. - -Usage examples --------------- - -When you have an access token, calling the API is simple: - -```php -$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); // see above - -$reply = (array) $cb->statuses_homeTimeline(); -print_r($reply); -``` - -Tweeting is as easy as this: - -```php -$reply = $cb->statuses_update('status=Whohoo, I just Tweeted!'); -``` - -:warning: *Make sure to urlencode any parameter values that contain -query-reserved characters, like Tweeting the `&` sign:* - -```php -$reply = $cb->statuses_update('status=' . urlencode('Fish & chips')); -// will result in this: -$reply = $cb->statuses_update('status=Fish+%26+chips'); -``` - -In most cases, giving all parameters in an array is easier, -because no encoding is needed: - -```php -$params = [ - 'status' => 'Fish & chips' -]; -$reply = $cb->statuses_update($params); -``` - -```php -$params = [ - 'status' => 'I love London', - 'lat' => 51.5033, - 'long' => 0.1197 -]; -$reply = $cb->statuses_update($params); -``` - -```php -$params = [ - 'screen_name' => 'jublonet' -]; -$reply = $cb->users_show($params); -``` -This is the [resulting Tweet](https://twitter.com/LarryMcTweet/status/482239971399835648) -sent with the code above. - -### Requests with app-only auth - -To send API requests without an access token for a user (app-only auth), -add a second parameter to your method call, like this: - -```php -$reply = $cb->search_tweets('q=Twitter', true); -``` - -Bear in mind that not all API methods support application-only auth. - - -HTTP methods (GET, POST, DELETE etc.) -------------------------------------- - -Never care about which HTTP method (verb) to use when calling a Twitter API. -Codebird is intelligent enough to find out on its own. - -Response codes --------------- - -The HTTP response code that the API gave is included in any return values. -You can find it within the return object’s ```httpstatus``` property. - -### Dealing with rate-limits - -Basically, Codebird leaves it up to you to handle Twitter’s rate limit. -The library returns the response HTTP status code, so you can detect rate limits. - -I suggest you to check if the ```$reply->httpstatus``` property is ```400``` -and check with the Twitter API to find out if you are currently being -rate-limited. -See the [Rate Limiting FAQ](https://developer.twitter.com/en/docs/basics/rate-limiting) -for more information. - -Unless your return format is JSON, you will receive rate-limiting details -in the returned data’s ```$reply->rate``` property, -if the Twitter API responds with rate-limiting HTTP headers. - -Return formats --------------- -The default return format for API calls is a PHP object. -For API methods returning multiple data (like ```statuses/home_timeline```), -you should cast the reply to array, like this: - -```php -$reply = $cb->statuses_homeTimeline(); -$data = (array) $reply; -``` - -Upon your choice, you may also get PHP arrays directly: - -```php -$cb->setReturnFormat(CODEBIRD_RETURNFORMAT_ARRAY); -``` - -The Twitter API natively responds to API calls in JSON (JS Object Notation). -To get a JSON string, set the corresponding return format: - -```php -$cb->setReturnFormat(CODEBIRD_RETURNFORMAT_JSON); -``` - -Uploading images and videos ---------------------------- - -Twitter will accept the following media types, all of which are supported by Codebird: -- PNG -- JPEG -- BMP -- WebP -- GIF -- Animated GIF -- Video - -Tweet media can be uploaded in a 2-step process: - -**First** you send each media to Twitter. For **images**, it works like this: - -```php -// these files to upload. You can also just upload 1 image! -$media_files = [ - 'bird1.jpg', 'bird2.jpg', 'bird3.jpg' -]; -// will hold the uploaded IDs -$media_ids = []; - -foreach ($media_files as $file) { - // upload all media files - $reply = $cb->media_upload([ - 'media' => $file - ]); - // and collect their IDs - $media_ids[] = $reply->media_id_string; -} -``` - -Uploading **videos** requires you to send the data in chunks. See the next section on this. - -**Second,** you attach the collected media ids for all images to your call -to ```statuses/update```, like this: - -```php -// convert media ids to string list -$media_ids = implode(',', $media_ids); - -// send Tweet with these medias -$reply = $cb->statuses_update([ - 'status' => 'These are some of my relatives.', - 'media_ids' => $media_ids -]); -print_r($reply); -``` - -Here is a [sample Tweet](https://twitter.com/LarryMcTweet/status/475276535386365952) -sent with the code above. - -More [documentation for uploading media](https://developer.twitter.com/en/docs/media/upload-media/overview) is available on the Twitter Developer site. - -### Remote files - -Remote files received from `http` and `https` servers are supported, too: -```php -$reply = $cb->media_upload(array( - 'media' => 'http://www.bing.com/az/hprichbg/rb/BilbaoGuggenheim_EN-US11232447099_1366x768.jpg' -)); -``` - -:warning: *URLs containing Unicode characters should be normalised. A sample normalisation function can be found at http://stackoverflow.com/a/6059053/1816603* - -To circumvent download issues when remote servers are slow to respond, -you may customise the remote download timeout, like this: - -```php -$cb->setRemoteDownloadTimeout(10000); // milliseconds -``` - -### Video files - -Uploading videos to Twitter (≤ 15MB, MP4) requires you to send them in chunks. -You need to perform at least 3 calls to obtain your `media_id` for the video: - -1. Send an `INIT` event to get a `media_id` draft. -2. Upload your chunks with `APPEND` events, each one up to 5MB in size. -3. Send a `FINALIZE` event to convert the draft to a ready-to-Tweet `media_id`. -4. Post your Tweet with video attached. - -Here’s a sample for video uploads: - -```php -$file = 'demo-video.mp4'; -$size_bytes = filesize($file); -$fp = fopen($file, 'r'); - -// INIT the upload - -$reply = $cb->media_upload([ - 'command' => 'INIT', - 'media_type' => 'video/mp4', - 'total_bytes' => $size_bytes -]); - -$media_id = $reply->media_id_string; - -// APPEND data to the upload - -$segment_id = 0; - -while (! feof($fp)) { - $chunk = fread($fp, 1048576); // 1MB per chunk for this sample - - $reply = $cb->media_upload([ - 'command' => 'APPEND', - 'media_id' => $media_id, - 'segment_index' => $segment_id, - 'media' => $chunk - ]); - - $segment_id++; -} - -fclose($fp); - -// FINALIZE the upload - -$reply = $cb->media_upload([ - 'command' => 'FINALIZE', - 'media_id' => $media_id -]); - -var_dump($reply); - -if ($reply->httpstatus < 200 || $reply->httpstatus > 299) { - die(); -} - -// if you have a field `processing_info` in the reply, -// use the STATUS command to check if the video has finished processing. - -// Now use the media_id in a Tweet -$reply = $cb->statuses_update([ - 'status' => 'Twitter now accepts video uploads.', - 'media_ids' => $media_id -]); - -``` - -**Find more information about [accepted media formats](https://developer.twitter.com/en/docs/media/upload-media/uploading-media/media-best-practices) in the Twitter Developer docs.** - -:warning: When uploading a video in multiple chunks, you may run into an error `The validation of media ids failed.` even though the `media_id` is correct. This is known. Please check back in the [Twitter community forums](https://twittercommunity.com/tags/video). - - -Twitter Streaming API ---------------------- - -The Streaming APIs give developers low latency access to Twitter’s global stream of -Tweet data. A proper implementation of a streaming client will be pushed messages -indicating Tweets and other events have occurred, without any of the overhead -associated with polling a REST endpoint. - -To consume one of the available Twitter streams, follow these **two steps:** - -1. Set up a callback function that gets called for every new streaming message that arrives. - - Codebird also calls this function once per second, to allow you to work on any due tasks, and to give you the chance to cancel the stream even if no new messages appear. - -2. After creating the callback, tell Codebird about it using a [callable](http://php.net/manual/en/language.types.callable.php). Then start consuming the stream. - -```php -// First, create a callback function: - -function some_callback($message) -{ - // gets called for every new streamed message - // gets called with $message = NULL once per second - - if ($message !== null) { - print_r($message); - flush(); - } - - // return false to continue streaming - // return true to close the stream - - // close streaming after 1 minute for this simple sample - // don't rely on globals in your code! - if (time() - $GLOBALS['time_start'] >= 60) { - return true; - } - - return false; -} - -// set the streaming callback in Codebird -$cb->setStreamingCallback('some_callback'); - -// any callable is accepted: -// $cb->setStreamingCallback(['MyClass', 'some_callback']); - -// for canceling, see callback function body -// not considered good practice in real world! -$GLOBALS['time_start'] = time(); - -// Second, start consuming the stream: -$reply = $cb->statuses_filter(); - -// See the *Mapping API methods to Codebird function calls* section for method names. -// $reply = $cb->statuses_filter('track=Windows'); -``` - -You should be able to set a timeout for the streaming API using `setTimeout`. -In addition, your callback will receive empty messages if no events occur, -and you should make your function `return true;` in order to cancel the stream. - -Find more information on the [Streaming API](https://developer.twitter.com/en/docs/tweets/filter-realtime/overview) -in the developer documentation website. - - -Twitter Collections, Direct Messages and Account Activity APIs --------------------------------------------------------------- - -Collections are a type of timeline that you control and can be hand curated -and/or programmed using an API. - -Pay close attention to the differences in how collections are presented — -often they will be decomposed, efficient objects with information about users, -Tweets, and timelines grouped, simplified, and stripped of unnecessary repetition. - -Never care about the OAuth signing specialities and the JSON POST body -for POST and PUT calls to these special APIs. Codebird takes off the work for you -and will always send the correct Content-Type automatically. - -Find out more about the [Collections API](https://developer.twitter.com/en/docs/tweets/curate-a-collection/overview/about_collections) in the Twitter API docs. -More information on the [Direct Messages API](https://developer.twitter.com/en/docs/direct-messages/api-features) and the [Account Activity API](https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/overview) is available there as well. - -Here’s a sample for adding a Tweet using the Collections API: - -```php -$reply = $cb->collections_entries_curate([ - 'id' => 'custom-672852634622144512', - 'changes' => [ - ['op' => 'add', 'tweet_id' => '672727928262828032'] - ] -]); - -var_dump($reply); -``` - -TON (Twitter Object Nest) API ------------------------------ - -The [TON (Twitter Object Nest) API](https://developer.twitter.com/en/docs/ads/audiences/overview/ton-upload.html) allows implementers to upload media and various assets to Twitter. -The TON API supports non-resumable and resumable upload methods based on the size of the file. -For files less than 64MB, non-resumable may be used. For files greater than or equal to 64MB, -resumable must be used. Resumable uploads require chunk sizes of less than 64MB. - -For accessing the TON API, please adapt the following code samples for uploading: - -### Single-chunk upload - -```php -// single-chunk upload - -$reply = $cb->ton_bucket_BUCKET([ - 'bucket' => 'ta_partner', - 'Content-Type' => 'image/jpeg', - 'media' => $file -]); - -var_dump($reply); - -// use the Location header now... -echo $reply->Location; -``` - -As you see from that sample, Codebird rewrites the special TON API headers into the reply, -so you can easily access them. This also applies to the `X-TON-Min-Chunk-Size` and -`X-Ton-Max-Chunk-Size` for chunked uploads: - -### Multi-chunk upload - -```php -// multi-chunk upload -$file = 'demo-video.mp4'; -$size_bytes = filesize($file); -$fp = fopen($file, 'r'); - -// INIT the upload - -$reply = $cb->__call( - 'ton/bucket/BUCKET?resumable=true', - [[ // note the double square braces when using __call - 'bucket' => 'ta_partner', - 'Content-Type' => 'video/mp4', - 'X-Ton-Content-Type' => 'video/mp4', - 'X-Ton-Content-Length' => $size_bytes - ]] -); - -$target = $reply->Location; -// something like: '/1.1/ton/bucket/ta_partner/SzFxGfAg_Zj.mp4?resumable=true&resumeId=28401873' -$match = []; - -// match the location parts -preg_match('/ton\/bucket\/.+\/(.+)\?resumable=true&resumeId=(\d+)/', $target, $match); -list ($target, $file, $resumeId) = $match; - -// APPEND data to the upload - -$segment_id = 0; - -while (! feof($fp)) { - $chunk = fread($fp, 1048576); // 1MB per chunk for this sample - - // special way to call Codebird for the upload chunks - $reply = $cb->__call( - 'ton/bucket/BUCKET/FILE?resumable=true&resumeId=RESUMEID', - [[ // note the double square braces when using __call - 'bucket' => 'ta_partner', - 'file' => $file, // you get real filename from INIT, see above - 'Content-Type' => 'image/jpeg', - 'Content-Range' => 'bytes ' - . ($segment_id * 1048576) . '-' . strlen($chunk) . '/' . $size_bytes, - 'resumeId' => $resumeId, - 'media' => $chunk - ]] - ); - - $segment_id++; -} - -fclose($fp); -``` - -Twitter Ads API ---------------- - -The [Twitter Ads API](https://developer.twitter.com/en/docs/ads/general/overview) allows partners to -integrate with the Twitter advertising platform in their own advertising solutions. -Selected partners have the ability to create custom tools to manage and execute -Twitter Ad campaigns. - -When accessing the Ads API or Ads Sandbox API, access it by prefixing your call -with `ads_`. Watch out for the usual replacements for in-url parameters, -particularly `:account_id`. - -**Tip:** For accessing the Ads Sandbox API, use the `ads_sandbox_` prefix, -like shown further down. - -Here is an example for calling the Twitter Ads API: - -```php -$reply = $cb->ads_accounts_ACCOUNT_ID_cards_appDownload([ - 'account_id' => '123456789', - 'name' => 'Test', - 'app_country_code' => 'DE' -]); -``` - -### Multiple-method API calls - -In the Twitter Ads API, there are multiple methods that can be reached by -HTTP `GET`, `POST`, `PUT` and/or `DELETE`. While Codebird does its best to guess -which HTTP verb you’ll want to use, it’s the safest bet to give a hint yourself, -like this: - -```php -$reply = $cb->ads_sandbox_accounts_ACCOUNT_ID_cards_imageConversation_CARD_ID([ - 'httpmethod' => 'DELETE', - 'account_id' => '123456789', - 'card_id' => '2468013579' -]); -``` - -Codebird will remove the `httpmethod` parameter from the parameters list automatically, -and set the corresponding HTTP verb. - - -How Do I…? ----------- - -### …use multiple Codebird instances? - -By default, Codebird works with just one instance. This programming paradigma is -called a *singleton*. - -Getting the main Codebird object is done like this: - -```php -$cb = \Codebird\Codebird::getInstance(); -``` - -If you need to run requests to the Twitter API for multiple users at once, -Codebird supports this as well. Instead of getting the instance like shown above, -create a new object: - -```php -$cb1 = new \Codebird\Codebird; -$cb2 = new \Codebird\Codebird; -``` - -Please note that your OAuth consumer key and secret is shared within -multiple Codebird instances, while the OAuth request and access tokens with their -secrets are *not* shared. - - -### …access a user’s profile image? - -First retrieve the user object using - -```$reply = $cb->users_show("screen_name=$username");``` - - -with ```$username``` being the username of the account you wish to retrieve the profile image from. - -Then get the value from the index ```profile_image_url``` or ```profile_image_url_https``` of the user object previously retrieved. - - -For example: - -```$reply['profile_image_url']``` will then return the profile image url without https. - -### …get user ID, screen name and more details about the current user? - -When the user returns from the authentication screen, you need to trade -the obtained request token for an access token, using the OAuth verifier. -As discussed in the section ‘Usage example,’ you use a call to -```oauth/access_token``` to do that. - -The API reply to this method call tells you details about the user that just logged in. -These details contain the **user ID** and the **screen name.** - -Take a look at the returned data as follows: - -``` -stdClass Object -( - [oauth_token] => 14648265-rPn8EJwfB********************** - [oauth_token_secret] => agvf3L3************************** - [user_id] => 14648265 - [screen_name] => jublonet - [httpstatus] => 200 -) -``` - -If you need to get more details, such as the user’s latest Tweet, -you should fetch the complete User Entity. The simplest way to get the -user entity of the currently authenticated user is to use the -```account/verify_credentials``` API method. In Codebird, it works like this: - -```php -$reply = $cb->account_verifyCredentials(); -print_r($reply); -``` - -I suggest to cache the User Entity after obtaining it, as the -```account/verify_credentials``` method is rate-limited by 15 calls per 15 minutes. - -### …walk through cursored results? - -The Twitter REST API utilizes a technique called ‘cursoring’ to paginate -large result sets. Cursoring separates results into pages of no more than -5000 results at a time, and provides a means to move backwards and -forwards through these pages. - -Here is how you can walk through cursored results with Codebird. - -1. Get the first result set of a cursored method: -```php -$result1 = $cb->followers_list(); -``` - -2. To navigate forth, take the ```next_cursor_str```: -```php -$nextCursor = $result1->next_cursor_str; -``` - -3. If ```$nextCursor``` is not 0, use this cursor to request the next result page: -```php - if ($nextCursor > 0) { - $result2 = $cb->followers_list('cursor=' . $nextCursor); - } -``` - -To navigate back instead of forth, use the field ```$resultX->previous_cursor_str``` -instead of ```next_cursor_str```. - -It might make sense to use the cursors in a loop. Watch out, though, -not to send more than the allowed number of requests to ```followers/list``` -per rate-limit timeframe, or else you will hit your rate-limit. - -### …use xAuth with Codebird? - -Codebird supports xAuth just like every other authentication used at Twitter. -Remember that your application needs to be whitelisted to be able to use xAuth. - -Here’s an example: -```php -$reply = $cb->oauth_accessToken([ - 'x_auth_username' => 'username', - 'x_auth_password' => '4h3_p4$$w0rd', - 'x_auth_mode' => 'client_auth' -]); -``` - -Are you getting a strange error message? If the user is enrolled in -login verification, the server will return a HTTP 401 error with a custom body. -If you are using the ```send_error_codes``` parameter, you will receive the -following error message in the response body: - -```xml - - -User must verify login - -``` - -Otherwise, the response body will contain a plaintext response: -``` -User must verify login -``` - -When this error occurs, advise the user to -[generate a temporary password](https://twitter.com/settings/applications) -on twitter.com and use that to complete signing in to the application. - -### …know what cacert.pem is for? - -Connections to the Twitter API are done over a secured SSL connection. -Codebird-php checks if the Twitter API server has a valid SSL certificate. -Valid certificates have a correct signature-chain. -The cacert.pem file contains a list of all public certificates for root -certificate authorities. You can find more information about this file -at http://curl.haxx.se/docs/caextract.html. - -### …set the timeout for requests to the Twitter API? - -For connecting to Twitter, Codebird uses the cURL library, if available. -You can specify both the connection timeout and the request timeout, -in milliseconds: - -```php -$cb->setConnectionTimeout(2000); -$cb->setTimeout(5000); -``` - -If you don't specify the timeout, codebird uses these values: - -- connection time = 3000 ms = 3 s -- timeout = 10000 ms = 10 s - -### …disable cURL? - -Codebird automatically detects whether you have the PHP cURL extension enabled. -If not, the library will try to connect to Twitter via socket. -For this to work, the PHP setting `allow_url_fopen` must be enabled. - -You may also manually disable cURL. Use the following call: - -```php -$cb->setUseCurl(false); -``` - -### …use a proxy? - -Codebird allows proxy support for both cURL handles and sockets. - -To activate proxy mode, use the following call: - -```php -$cb->setProxy('', ''); -``` - -You may also use an authenticated proxy. Use the following call: - -```php -$cb->setProxy('', ''); -$cb->setProxyAuthentication(':'); -``` - -By default, a HTTP proxy is assumed. To use a different proxy type, -use the corresponding [`CURLPROXY_*` constants](http://php.net/curl_setopt), like this: - -```php -$cb->setProxy('', '', CURLPROXY_SOCKS5); -``` - -### …quote a Tweet? - -Quoting a Tweet is different from a Retweet because you may add your own text. -The original Tweet will appear below your quote. -To quote a Tweet, add a link to the original Tweet to your quote, like in this sample: - -```php -$original_tweet = [ - 'id_str' => '684483801687392256', - 'user' => [ - 'screen_name' => 'LarryMcTweet' - ] -]; -$original_tweet = (object) $original_tweet; // sample, get real Tweet from API - -$id = $original_tweet->id_str; // use the `id_str` field because of long numbers -$screen_name = $original_tweet->user->screen_name; - -// looks like this: https://twitter.com/LarryMcTweet/status/684483801687392256 -$url = "https://twitter.com/$screen_name/status/$id"; -$text = 'I’d like to quote a Tweet.'; // maximum length = 140 minus 24 (link length) minus 1 space - -$reply = $cb->statuses_update([ - 'status' => "$text $url" -]); -``` diff --git a/twitter/vendor/jublonet/codebird-php/bower.json b/twitter/vendor/jublonet/codebird-php/bower.json deleted file mode 100644 index 6c724a2a..00000000 --- a/twitter/vendor/jublonet/codebird-php/bower.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "codebird-php", - "version": "3.1.0", - "homepage": "https://www.jublo.net/projects/codebird/php", - "authors": [ - "Joshua Atkins ", - "J.M. " - ], - "description": "Easy access to the Twitter REST, Direct Messages, Account Activity, TON (Object Nest) and Twitter Ads API — all from one PHP library.", - "main": "src/codebird.php", - "moduleType": [], - "keywords": [ - "Twitter", - "API", - "networking" - ], - "license": "GPL-3.0+", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/twitter/vendor/jublonet/codebird-php/build.xml b/twitter/vendor/jublonet/codebird-php/build.xml deleted file mode 100644 index 7addea7e..00000000 --- a/twitter/vendor/jublonet/codebird-php/build.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/twitter/vendor/jublonet/codebird-php/composer.json b/twitter/vendor/jublonet/codebird-php/composer.json deleted file mode 100644 index 586f39c2..00000000 --- a/twitter/vendor/jublonet/codebird-php/composer.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "jublonet/codebird-php", - "description" : "Easy access to the Twitter REST API, Direct Messages API, Account Activity API, TON (Object Nest) API and Twitter Ads API — all from one PHP library.", - "keywords": [ - "Twitter", - "API", - "networking" - ], - "homepage": "https://www.jublo.net/projects/codebird/php", - "license": "GPL-3.0+", - "authors": [ - { - "name": "Joshua Atkins", - "email": "joshua.atkins@jublo.net", - "homepage": "http://atkins.im/", - "role": "Developer" - }, - { - "name": "J.M.", - "email": "jm@jublo.net", - "homepage": "http://mynetx.net/", - "role": "Developer" - } - ], - "support": { - "email": "support@jublo.net", - "issues": "https://github.com/jublonet/codebird-php/issues", - "source": "https://github.com/jublonet/codebird-php/releases" - }, - "require": { - "php": ">=5.5.0", - "ext-hash": "*", - "ext-json": "*", - "lib-openssl": "*", - "composer/installers": "~1.0" - }, - "autoload": { - "classmap": ["src/"] - }, - "require-dev": { - "php-coveralls/php-coveralls": ">=0.6", - "phpunit/phpunit": ">=7.3", - "squizlabs/php_codesniffer": "2.*" - } -} diff --git a/twitter/vendor/jublonet/codebird-php/phpunit.xml b/twitter/vendor/jublonet/codebird-php/phpunit.xml deleted file mode 100644 index cd28e1c9..00000000 --- a/twitter/vendor/jublonet/codebird-php/phpunit.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - test/environment_test.php - - - test - - - - - - - - - - - src - - - diff --git a/twitter/vendor/jublonet/codebird-php/phpunit.xml.hhvm b/twitter/vendor/jublonet/codebird-php/phpunit.xml.hhvm deleted file mode 100644 index 87e7409c..00000000 --- a/twitter/vendor/jublonet/codebird-php/phpunit.xml.hhvm +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - test/environment_test.php - - - test - - - - - - - diff --git a/twitter/vendor/jublonet/codebird-php/src/cacert.pem b/twitter/vendor/jublonet/codebird-php/src/cacert.pem deleted file mode 100644 index ee25bee1..00000000 --- a/twitter/vendor/jublonet/codebird-php/src/cacert.pem +++ /dev/null @@ -1,3314 +0,0 @@ -## -## Bundle of CA Root Certificates -## -## Certificate data from Mozilla as of: Wed Jun 20 03:12:06 2018 GMT -## -## This is a bundle of X.509 certificates of public Certificate Authorities -## (CA). These were automatically extracted from Mozilla's root certificates -## file (certdata.txt). This file can be found in the mozilla source tree: -## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt -## -## It contains the certificates in PEM format and therefore -## can be directly used with curl / libcurl / php_curl, or with -## an Apache+mod_ssl webserver for SSL client authentication. -## Just configure this file as the SSLCACertificateFile. -## -## Conversion done with mk-ca-bundle.pl version 1.27. -## SHA256: c80f571d9f4ebca4a91e0ad3a546f263153d71afffc845c6f8f52ce9d1a2e8ec -## - - -GlobalSign Root CA -================== ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx -GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds -b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD -VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa -DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc -THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb -Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP -c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX -gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF -AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj -Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG -j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH -hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC -X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 -EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc -cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw -EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj -055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f -j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 -xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa -t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -Entrust.net Premium 2048 Secure Server CA -========================================= ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp -bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 -d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u -ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL -Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr -hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW -nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ -KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy -T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT -J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e -nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -Baltimore CyberTrust Root -========================= ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE -ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li -ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC -SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs -dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME -uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB -UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C -G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 -XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr -l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI -VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB -BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh -cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 -hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa -Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H -RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -AddTrust External Root -====================== ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD -VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw -NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU -cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg -Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 -+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw -Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo -aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy -2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 -7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL -VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk -VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl -j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 -e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u -G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -Entrust Root Certification Authority -==================================== ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw -b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG -A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 -MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu -MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu -Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz -A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww -Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 -j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN -rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 -MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH -hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM -Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa -v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS -W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 -tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -GeoTrust Global CA -================== ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw -MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo -BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet -8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc -T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU -vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk -DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q -zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 -d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 -mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p -XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm -Mw== ------END CERTIFICATE----- - -GeoTrust Universal CA -===================== ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 -MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu -Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t -JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e -RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs -7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d -8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V -qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga -Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB -Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu -KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 -ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 -XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB -hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 -qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL -oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK -xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF -KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 -DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK -xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU -p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI -P/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -GeoTrust Universal CA 2 -======================= ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 -MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg -SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 -DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 -j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q -JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a -QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 -WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP -20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn -ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC -SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG -8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 -+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E -BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ -4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ -mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq -A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg -Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP -pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d -FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp -gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm -X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -Visa eCommerce Root -=================== ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG -EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug -QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 -WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm -VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL -F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b -RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 -TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI -/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs -GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG -MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc -CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW -YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz -zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu -YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -Comodo AAA Services root -======================== ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw -MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl -c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV -BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG -C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs -i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW -Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH -Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK -Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f -BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl -cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz -LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm -7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z -8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C -12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -QuoVadis Root CA -================ ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE -ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz -MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp -cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD -EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk -J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL -F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL -YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen -AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w -PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y -ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 -MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj -YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs -ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW -Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu -BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw -FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 -tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo -fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul -LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x -gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi -5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi -5nrQNiOKSnQ2+Q== ------END CERTIFICATE----- - -QuoVadis Root CA 2 -================== ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx -ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 -XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk -lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB -lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy -lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt -66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn -wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh -D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy -BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie -J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud -DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU -a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv -Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 -UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm -VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK -+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW -IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 -WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X -f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II -4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 -VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -QuoVadis Root CA 3 -================== ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx -OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg -DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij -KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K -DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv -BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp -p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 -nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX -MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM -Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz -uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT -BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj -YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB -BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD -VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 -ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE -AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV -qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s -hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z -POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 -Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp -8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC -bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu -g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p -vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr -qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -Security Communication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw -8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM -DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX -5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd -DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 -JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g -0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a -mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ -s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ -6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi -FL39vmwLAw== ------END CERTIFICATE----- - -Sonera Class 2 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw -NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 -/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT -dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG -f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P -tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH -nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT -XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt -0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI -cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph -Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx -EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH -llpwrN9M ------END CERTIFICATE----- - -XRamp Global CA Root -==================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE -BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj -dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx -HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg -U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu -IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx -foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE -zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs -AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry -xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap -oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC -AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc -/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n -nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz -8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -Go Daddy Class 2 CA -=================== ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY -VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG -A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g -RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD -ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv -2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 -qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j -YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY -vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O -BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o -atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu -MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim -PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt -I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI -Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b -vZ8= ------END CERTIFICATE----- - -Starfield Class 2 CA -==================== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc -U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo -MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG -A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG -SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY -bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ -JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm -epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN -F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF -MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f -hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo -bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs -afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM -PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD -KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 -QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -Taiwan GRCA -=========== ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG -EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X -DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv -dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN -w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 -BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O -1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO -htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov -J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 -Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t -B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB -O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 -lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV -HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 -09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj -Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 -Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU -D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz -DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk -Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk -7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ -CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy -+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS ------END CERTIFICATE----- - -DigiCert Assured ID Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx -MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO -9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy -UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW -/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy -oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf -GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF -66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq -hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc -EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn -SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i -8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -DigiCert Global Root CA -======================= ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw -MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn -TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 -BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H -4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y -7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB -o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm -8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF -BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr -EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt -tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 -UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -DigiCert High Assurance EV Root CA -================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw -KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw -MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ -MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu -Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t -Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS -OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 -MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ -NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe -h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY -JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ -V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp -myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK -mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K ------END CERTIFICATE----- - -Certplus Class 2 Primary CA -=========================== ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE -BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN -OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy -dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR -5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ -Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO -YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e -e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME -CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ -YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t -L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD -P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R -TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ -7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW -//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK -ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X -DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 -cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT -rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 -UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy -xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d -utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ -MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug -dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE -GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw -RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS -fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -SwissSign Gold CA - G2 -====================== ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw -EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN -MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp -c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq -t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C -jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg -vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF -ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR -AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend -jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO -peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR -7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi -GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 -OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm -5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr -44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf -Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m -Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp -mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk -vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf -KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br -NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj -viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -SwissSign Silver CA - G2 -======================== ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X -DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 -aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG -9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 -N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm -+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH -6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu -MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h -qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 -FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs -ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc -celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X -CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB -tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P -4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F -kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L -3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx -/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa -DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP -e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu -WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ -DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub -DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority -======================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx -CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ -cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN -b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 -nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge -RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt -tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI -hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K -Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN -NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa -Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG -1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -thawte Primary Root CA -====================== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 -MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg -SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv -KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT -FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs -oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ -1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc -q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K -aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p -afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF -AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE -uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 -jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH -z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G5 -============================================================ ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln -biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh -dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz -j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD -Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ -Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r -fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv -Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG -SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ -X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE -KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC -Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE -ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -SecureTrust CA -============== ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy -dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe -BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX -OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t -DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH -GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b -01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH -ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj -aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu -SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf -mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ -nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -Secure Global CA -================ ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH -bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg -MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx -YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ -bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g -8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV -HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi -0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn -oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA -MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ -OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn -CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 -3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -COMODO Certification Authority -============================== ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb -MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD -T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH -+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww -xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV -4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA -1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI -rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k -b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC -AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP -OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc -IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN -+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== ------END CERTIFICATE----- - -Network Solutions Certificate Authority -======================================= ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG -EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr -IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx -MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx -jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT -aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT -crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc -/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB -AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv -bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA -A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q -4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ -GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD -ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -COMODO ECC Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix -GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X -4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni -wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG -FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA -U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -OISTE WISeKey Global Root GA CA -=============================== ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE -BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG -A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH -bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD -VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw -IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 -IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 -Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg -Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD -d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ -/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R -LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm -MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 -+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY -okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= ------END CERTIFICATE----- - -Certigna -======== ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw -EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 -MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI -Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q -XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH -GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p -ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg -DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf -Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ -tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ -BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J -SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA -hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ -ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu -PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY -1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -Deutsche Telekom Root CA 2 -========================== ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT -RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG -A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 -MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G -A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS -b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 -bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI -KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY -AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK -Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV -jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV -HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr -E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy -zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 -rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G -dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li -ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 -MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD -ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW -0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL -AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin -89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT -8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 -MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G -A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO -lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi -5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 -hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T -X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -ePKI Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG -EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg -Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx -MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq -MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs -IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi -lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv -qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX -12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O -WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ -ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao -lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ -vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi -Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi -MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 -1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq -KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV -xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP -NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r -GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE -xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx -gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy -sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD -BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -certSIGN ROOT CA -================ ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD -VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa -Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE -CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I -JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH -rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 -ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD -0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 -AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB -AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 -SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 -x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt -vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz -TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G3 -============================================= ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz -NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo -YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT -LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j -K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE -c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C -IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu -dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr -2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 -cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE -Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s -t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -thawte Primary Root CA - G2 -=========================== ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC -VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu -IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg -Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV -MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG -b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt -IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS -LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 -8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU -mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN -G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K -rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -thawte Primary Root CA - G3 -=========================== ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w -ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD -VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG -A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At -P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC -+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY -7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW -vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ -KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK -A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC -8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm -er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G2 -============================================= ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 -OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl -b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG -BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc -KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ -EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m -ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 -npaqBA+K ------END CERTIFICATE----- - -VeriSign Universal Root Certification Authority -=============================================== ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u -IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj -1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP -MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 -9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I -AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR -tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G -CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O -a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 -Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx -Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx -P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P -wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 -mJO37M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G4 -============================================================ ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC -VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 -b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz -ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU -cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo -b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 -Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz -rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw -HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u -Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD -A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx -AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -NetLock Arany (Class Gold) Főtanúsítvány -======================================== ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G -A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 -dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB -cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx -MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO -ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 -c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu -0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw -/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk -H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw -fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 -neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW -qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta -YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna -NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu -dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -Staat der Nederlanden Root CA - G2 -================================== ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC -TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l -ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ -5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn -vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj -CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil -e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR -OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI -CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 -48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi -trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 -qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB -AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC -ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA -A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz -+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj -f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN -kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk -CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF -URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb -CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h -oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV -IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm -66+KAQ== ------END CERTIFICATE----- - -Hongkong Post Root CA 1 -======================= ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT -DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx -NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n -IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 -ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr -auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh -qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY -V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV -HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i -h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio -l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei -IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps -T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT -c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== ------END CERTIFICATE----- - -SecureSign RootCA11 -=================== ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi -SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS -b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw -KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 -cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL -TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO -wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq -g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP -O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA -bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX -t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh -OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r -bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ -Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 -y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 -lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -Microsec e-Szigno Root CA 2009 -============================== ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER -MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv -c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE -BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt -U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA -fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG -0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA -pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm -1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC -AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf -QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE -FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o -lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX -I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 -yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi -LXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -GlobalSign Root CA - R3 -======================= ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt -iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ -0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 -rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl -OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 -xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 -lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 -EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E -bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 -YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r -kpeDMdmztcpHWD9f ------END CERTIFICATE----- - -Autoridad de Certificacion Firmaprofesional CIF A62634068 -========================================================= ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA -BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw -QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB -NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD -Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P -B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY -7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH -ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI -plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX -MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX -LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK -bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU -vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud -EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH -DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA -bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx -ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx -51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk -R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP -T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f -Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl -osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR -crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR -saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD -KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi -6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -Izenpe.com -========== ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG -EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz -MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu -QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ -03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK -ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU -+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC -PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT -OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK -F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK -0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ -0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB -leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID -AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ -SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG -NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l -Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga -kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q -hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs -g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 -aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 -nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC -ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo -Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z -WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -Chambers of Commerce Root - 2008 -================================ ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy -Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl -ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF -EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl -cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA -XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj -h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ -ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk -NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g -D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 -lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ -0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 -EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI -G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ -BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh -bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh -bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC -CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH -AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 -wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH -3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU -RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 -M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 -YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF -9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK -zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG -nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ ------END CERTIFICATE----- - -Global Chambersign Root - 2008 -============================== ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx -NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg -Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ -QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf -VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf -XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 -ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB -/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA -TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M -H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe -Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF -HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB -AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT -BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE -BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm -aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm -aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp -1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 -dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG -/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 -ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s -dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg -9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH -foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du -qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr -P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq -c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -Go Daddy Root Certificate Authority - G2 -======================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu -MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G -A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq -9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD -+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd -fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl -NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 -BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac -vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r -5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV -N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 ------END CERTIFICATE----- - -Starfield Root Certificate Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 -eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw -DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg -VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB -dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv -W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs -bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk -N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf -ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU -JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol -TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx -4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw -F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ -c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -Starfield Services Root Certificate Authority - G2 -================================================== ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl -IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT -dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 -h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa -hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP -LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB -rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG -SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP -E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy -xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza -YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 ------END CERTIFICATE----- - -AffirmTrust Commercial -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw -MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb -DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV -C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 -BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww -MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV -HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG -hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi -qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv -0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh -sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -AffirmTrust Networking -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw -MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE -Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI -dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 -/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb -h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV -HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu -UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 -12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 -WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 -/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -AffirmTrust Premium -=================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy -OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy -dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn -BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV -5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs -+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd -GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R -p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI -S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 -6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 -/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo -+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv -MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC -6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S -L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK -+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV -BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg -IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 -g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb -zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== ------END CERTIFICATE----- - -AffirmTrust Premium ECC -======================= ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV -BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx -MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U -cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ -N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW -BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK -BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X -57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM -eQ== ------END CERTIFICATE----- - -Certum Trusted Network CA -========================= ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy -MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU -ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC -l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J -J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 -fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 -cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB -Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw -DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj -jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 -mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj -Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -TWCA Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ -VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG -EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB -IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx -QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC -oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP -4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r -y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG -9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC -mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW -QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY -T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny -Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -Security Communication RootCA2 -============================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC -SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy -aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ -+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R -3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV -spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K -EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 -QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB -CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj -u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk -3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q -tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 -mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE -BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w -ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD -VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE -CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT -BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 -MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt -SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl -Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh -cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK -w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT -ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 -HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a -E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw -0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD -VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 -Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l -dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ -lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa -Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe -l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 -E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D -5EI= ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2011 -======================================================= ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT -O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y -aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT -AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo -IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI -1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa -71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u -8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH -3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ -MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 -MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu -b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt -XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD -/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N -7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -Actalis Authentication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM -BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE -AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky -MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz -IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ -wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa -by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 -zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f -YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 -oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l -EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 -hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 -EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 -jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY -iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI -WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 -JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx -K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ -Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC -4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo -2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz -lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem -OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 -vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -Trustis FPS Root CA -=================== ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG -EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 -IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV -BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ -RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk -H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa -cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt -o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA -AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd -BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c -GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC -yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P -8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV -l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl -iB6XzCGcKQENZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -Buypass Class 2 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X -DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 -g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn -9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b -/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU -CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff -awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI -zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn -Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX -Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs -M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI -osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S -aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd -DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD -LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 -oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC -wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS -CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN -rJgWVqA= ------END CERTIFICATE----- - -Buypass Class 3 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X -DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH -sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR -5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh -7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ -ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH -2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV -/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ -RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA -Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq -j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G -uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG -Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 -ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 -KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz -6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug -UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe -eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi -Cp/HuZc= ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 3 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx -MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK -9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU -NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF -iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W -0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr -AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb -fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT -ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h -P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== ------END CERTIFICATE----- - -EE Certification Centre Root CA -=============================== ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG -EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy -dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw -MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB -UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy -ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM -TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 -rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw -93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN -P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ -MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF -BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj -xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM -lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU -3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM -dcGWxZ0= ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 2009 -============================== ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe -Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE -LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD -ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA -BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv -KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z -p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC -AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ -4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y -eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw -MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G -PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw -OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm -2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV -dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph -X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 EV 2009 -================================= ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS -egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh -zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T -7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 -sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 -11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv -cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v -ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El -MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp -b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh -c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ -PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX -ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA -NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv -w9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -CA Disig Root R2 -================ ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw -EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp -ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx -EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp -c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC -w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia -xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 -A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S -GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV -g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa -5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE -koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A -Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i -Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u -Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV -sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je -dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 -1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx -mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 -utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 -sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg -UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV -7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -ACCVRAIZ1 -========= ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB -SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 -MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH -UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM -jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 -RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD -aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ -0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG -WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 -8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR -5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J -9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK -Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw -Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu -Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM -Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA -QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh -AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA -YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj -AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA -IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk -aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 -dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 -MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI -hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E -R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN -YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 -nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ -TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 -sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg -Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd -3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p -EfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -TWCA Global Root CA -=================== ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT -CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD -QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK -EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C -nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV -r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR -Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV -tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W -KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 -sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p -yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn -kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI -zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g -cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M -8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg -/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg -lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP -A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m -i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 -EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 -zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= ------END CERTIFICATE----- - -TeliaSonera Root CA v1 -====================== ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE -CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 -MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW -VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ -6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA -3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k -B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn -Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH -oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 -F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ -oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 -gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc -TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB -AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW -DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm -zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW -pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV -G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc -c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT -JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 -qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 -Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems -WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -E-Tugra Certification Authority -=============================== ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w -DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls -ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw -NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx -QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl -cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD -DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd -hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K -CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g -ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ -BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 -E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz -rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq -jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 -dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG -MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK -kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO -XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 -VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo -a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc -dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV -KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT -Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 -8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G -C7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 2 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx -MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ -SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F -vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 -2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV -WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy -YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 -r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf -vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR -3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== ------END CERTIFICATE----- - -Atos TrustedRoot 2011 -===================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU -cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 -MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG -A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV -hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr -54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ -DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 -HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR -z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R -l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ -bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h -k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh -TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 -61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G -3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -QuoVadis Root CA 1 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE -PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm -PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 -Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN -ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l -g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV -7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX -9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f -iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg -t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI -hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 -GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct -Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP -+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh -3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa -wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 -O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 -FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV -hMJKzRwuJIczYOXD ------END CERTIFICATE----- - -QuoVadis Root CA 2 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh -ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY -NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t -oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o -MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l -V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo -L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ -sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD -6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh -lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI -hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K -pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 -x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz -dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X -U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw -mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD -zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN -JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr -O3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -QuoVadis Root CA 3 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 -IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL -Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe -6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 -I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U -VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 -5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi -Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM -dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt -rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI -hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS -t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ -TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du -DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib -Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD -hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX -0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW -dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 -PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -DigiCert Assured ID Root G2 -=========================== ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw -MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH -35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq -bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw -VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP -YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn -lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO -w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv -0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz -d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW -hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M -jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -DigiCert Assured ID Root G3 -=========================== ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD -VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ -BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb -RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs -KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF -UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy -YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy -1vUhZscv6pZjamVFkpUBtA== ------END CERTIFICATE----- - -DigiCert Global Root G2 -======================= ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx -MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ -kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO -3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV -BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM -UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB -o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu -5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr -F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U -WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH -QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ -iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -DigiCert Global Root G3 -======================= ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD -VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw -MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k -aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C -AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O -YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp -Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y -3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 -VOKa5Vt8sycX ------END CERTIFICATE----- - -DigiCert Trusted Root G4 -======================== ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw -HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp -pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o -k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa -vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY -QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 -MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm -mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 -f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH -dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 -oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY -ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr -yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy -7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah -ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN -5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb -/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa -5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK -G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP -82Z+ ------END CERTIFICATE----- - -COMODO RSA Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn -dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ -FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ -5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG -x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX -2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL -OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 -sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C -GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 -WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w -DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt -rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ -nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg -tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW -sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp -pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA -zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq -ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 -7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I -LaZRfyHBNVOFBkpdn627G190 ------END CERTIFICATE----- - -USERTrust RSA Certification Authority -===================================== ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK -ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK -ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz -0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j -Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn -RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O -+T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq -/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE -Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM -lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 -yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ -eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW -FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ -7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ -Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM -8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi -FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi -yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c -J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw -sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx -Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -USERTrust ECC Certification Authority -===================================== ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 -0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez -nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV -HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB -HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu -9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R4 -=========================== ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl -OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV -MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF -JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R5 -=========================== ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 -SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS -h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd -BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx -uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 -yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -Staat der Nederlanden Root CA - G3 -================================== ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC -TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l -ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y -olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t -x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy -EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K -Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur -mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 -1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp -07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo -FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE -41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu -yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD -U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq -KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 -v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA -8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b -8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r -mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq -1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI -JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV -tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= ------END CERTIFICATE----- - -Staat der Nederlanden EV Root CA -================================ ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M -MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl -cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk -SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW -O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r -0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 -Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV -XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr -08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV -0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd -74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx -fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa -ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu -c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq -5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN -b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN -f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi -5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 -WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK -DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy -eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== ------END CERTIFICATE----- - -IdenTrust Commercial Root CA 1 -============================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS -b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES -MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB -IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld -hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ -mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi -1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C -XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl -3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy -NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV -WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg -xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix -uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI -hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg -ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt -ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV -YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX -feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro -kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe -2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz -Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R -cGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -IdenTrust Public Sector Root CA 1 -================================= ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv -ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV -UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS -b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy -P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 -Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI -rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf -qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS -mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn -ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh -LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v -iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL -4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B -Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw -DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A -mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt -GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt -m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx -NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 -Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI -ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC -ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ -3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -Entrust Root Certification Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy -bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug -b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw -HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT -DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx -OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP -/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz -HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU -s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y -TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx -AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 -0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z -iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi -nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ -vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO -e4pIb4tF9g== ------END CERTIFICATE----- - -Entrust Root Certification Authority - EC1 -========================================== ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx -FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn -YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw -FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs -LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg -dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt -IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy -AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef -9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h -vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 -kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -CFCA EV ROOT -============ ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE -CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB -IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw -MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD -DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV -BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD -7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN -uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW -ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 -xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f -py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K -gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol -hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ -tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf -BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q -ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua -4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG -E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX -BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn -aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy -PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX -kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C -ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -Certinomis - Root CA -==================== ------BEGIN CERTIFICATE----- -MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK -Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg -LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx -EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD -ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos -P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo -d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap -z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 -8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x -RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE -6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t -FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV -PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH -i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj -YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I -6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF -AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV -WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw -Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX -lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ -y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 -Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng -DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi -I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM -cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr -hkIGuUE= ------END CERTIFICATE----- - -OISTE WISeKey Global Root GB CA -=============================== ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG -EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw -MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds -b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX -scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP -rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk -9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o -Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg -GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI -hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD -dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 -VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui -HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -SZAFIR ROOT CA2 -=============== ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG -A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV -BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ -BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD -VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q -qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK -DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE -2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ -ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi -ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P -AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC -AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 -O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 -oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul -4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 -+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -Certum Trusted Network CA 2 -=========================== ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE -BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 -bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y -ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ -TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB -IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 -7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o -CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b -Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p -uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 -GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ -9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB -Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye -hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM -BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI -hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW -Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA -L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo -clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM -pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb -w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo -J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm -ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX -is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 -zAYspsbiDrW5viSP ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2015 -======================================================= ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT -BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 -aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx -MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg -QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV -BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw -MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv -bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh -iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ -6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd -FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr -i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F -GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 -fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu -iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI -hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ -D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM -d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y -d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn -82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb -davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F -Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt -J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa -JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q -p/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions ECC RootCA 2015 -=========================================================== ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 -aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u -cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw -MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj -IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD -VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 -Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP -dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK -Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA -GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn -dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -Certplus Root CA G1 -=================== ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV -BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe -Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD -ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN -r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx -Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj -BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv -LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2 -z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc -4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd -4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj -jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+ -ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G -A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY -lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh -66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG -YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/ -2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F -6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX -CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe -tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC -VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/ -+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+ -qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= ------END CERTIFICATE----- - -Certplus Root CA G2 -=================== ------BEGIN CERTIFICATE----- -MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT -AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x -NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0 -cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA -BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN -Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud -IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV -HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl -vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw== ------END CERTIFICATE----- - -OpenTrust Root CA G1 -==================== ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx -MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM -CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa -Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87 -ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO -YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9 -xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO -9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq -3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi -n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9 -URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr -TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px -N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E -PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv -uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK -n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh -X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80 -nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm -GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/ -bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o -4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA -OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx ------END CERTIFICATE----- - -OpenTrust Root CA G2 -==================== ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy -MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM -CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+ -Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz -4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV -eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt -UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz -3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj -3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz -9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0 -0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT -y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59 -M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz -Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI -mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG -S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp -EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ -6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr -gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo -SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0 -YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm -u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK ------END CERTIFICATE----- - -OpenTrust Root CA G3 -==================== ------BEGIN CERTIFICATE----- -MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X -DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w -ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B -ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB -/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf -BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM -BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta -3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB ------END CERTIFICATE----- - -ISRG Root X1 -============ ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE -BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD -EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG -EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT -DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r -Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 -3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K -b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN -Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ -4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf -1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu -hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH -usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r -OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G -A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY -9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV -0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt -hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw -TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx -e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA -JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD -YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n -JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ -m+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -AC RAIZ FNMT-RCM -================ ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT -AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw -MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD -TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf -qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr -btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL -j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou -08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw -WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT -tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ -47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC -ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa -i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o -dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s -D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ -j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT -Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW -+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 -Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d -8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm -5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG -rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -Amazon Root CA 1 -================ ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD -VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 -MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv -bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH -FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ -gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t -dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce -VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 -DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM -CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy -8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa -2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 -xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -Amazon Root CA 2 -================ ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD -VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 -MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv -bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 -kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp -N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 -AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd -fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx -kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS -btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 -Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN -c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ -3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw -DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA -A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE -YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW -xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ -gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW -aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV -Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 -KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi -JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= ------END CERTIFICATE----- - -Amazon Root CA 3 -================ ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG -EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy -NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ -MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB -f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr -Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 -rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc -eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== ------END CERTIFICATE----- - -Amazon Root CA 4 -================ ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG -EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy -NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ -MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN -/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri -83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA -MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 -AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -LuxTrust Global Root 2 -====================== ------BEGIN CERTIFICATE----- -MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG -A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh -bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW -MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm -Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2 -xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC -wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm -1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm -FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF -wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/ -a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U -ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ -MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB -/zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5 -Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT -+Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ -FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN -H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW -7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu -ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA -VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR -TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt -/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc -7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I -iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr ------END CERTIFICATE----- - -TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 -============================================= ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT -D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr -IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g -TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp -ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD -VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt -c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth -bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 -IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 -6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc -wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 -3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 -WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU -ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc -lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R -e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j -q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -GDCA TrustAUTH R5 ROOT -====================== ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw -BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD -DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow -YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs -AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p -OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr -pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ -9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ -xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM -R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ -D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 -oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx -9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 -H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 -6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd -+PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ -HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD -F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ -8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv -/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT -aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -TrustCor RootCert CA-1 -====================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP -MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig -U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx -MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu -YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe -VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy -dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq -jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 -pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 -JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h -gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw -/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j -BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 -mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf -ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C -qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P -3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= ------END CERTIFICATE----- - -TrustCor RootCert CA-2 -====================== ------BEGIN CERTIFICATE----- -MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w -DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT -eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 -eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy -MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h -bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 -IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb -ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk -RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 -oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb -XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 -/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q -jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP -eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg -rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh -8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU -2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h -Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp -kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv -2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 -S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw -PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv -DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU -RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE -xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX -RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ ------END CERTIFICATE----- - -TrustCor ECA-1 -============== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP -MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig -U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw -N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 -MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y -IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR -MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 -xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc -p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ -fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj -YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL -f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF -AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u -/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F -hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs -J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC -jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== ------END CERTIFICATE----- - -SSL.com Root Certification Authority RSA -======================================== ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM -BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x -MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw -MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx -EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM -LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C -Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8 -P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge -oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp -k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z -fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ -gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2 -UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8 -1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s -bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr -dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf -ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl -u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq -erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj -MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ -vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI -Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y -wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI -WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -SSL.com Root Certification Authority ECC -======================================== ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV -BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv -BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy -MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO -BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA -BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ -8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR -hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT -jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW -e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z -5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -SSL.com EV Root Certification Authority RSA R2 -============================================== ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w -DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u -MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI -DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD -VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh -hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w -cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO -Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ -B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh -CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim -9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto -RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm -JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 -+qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp -qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 -++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx -Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G -guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz -OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 -CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq -lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR -rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 -hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX -9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -SSL.com EV Root Certification Authority ECC -=========================================== ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV -BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy -BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw -MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx -EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM -LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy -3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O -BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe -5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ -N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm -m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- diff --git a/twitter/vendor/jublonet/codebird-php/src/codebird.php b/twitter/vendor/jublonet/codebird-php/src/codebird.php deleted file mode 100644 index 52018bde..00000000 --- a/twitter/vendor/jublonet/codebird-php/src/codebird.php +++ /dev/null @@ -1,2720 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Define constants - */ -$constants = explode(' ', 'OBJECT ARRAY JSON'); -foreach ($constants as $i => $id) { - $id = 'CODEBIRD_RETURNFORMAT_' . $id; - defined($id) or define($id, $i); -} -$constants = [ - 'CURLE_SSL_CERTPROBLEM' => 58, - 'CURLE_SSL_CACERT' => 60, - 'CURLE_SSL_CACERT_BADFILE' => 77, - 'CURLE_SSL_CRL_BADFILE' => 82, - 'CURLE_SSL_ISSUER_ERROR' => 83 -]; -foreach ($constants as $id => $i) { - defined($id) or define($id, $i); -} -unset($constants); -unset($i); -unset($id); - -/** - * A Twitter library in PHP. - * - * @package codebird - * @subpackage codebird-php - * @method bool curl_setopt (resource $ch, int $option, mixed $value) - */ -class Codebird -{ - /** - * The current singleton instance - */ - private static $_instance = null; - - /** - * The OAuth consumer key of your registered app - */ - protected static $_consumer_key = null; - - /** - * The corresponding consumer secret - */ - protected static $_consumer_secret = null; - - /** - * The app-only bearer token. Used to authorize app-only requests - */ - protected static $_bearer_token = null; - - /** - * The API endpoints to use - */ - protected static $_endpoints = [ - 'ads' => [ - 'production' => 'https://ads-api.twitter.com/2/', - 'sandbox' => 'https://ads-api-sandbox.twitter.com/2/' - ], - 'media' => 'https://upload.twitter.com/1.1/', - 'publish' => 'https://publish.twitter.com/', - 'oauth' => 'https://api.twitter.com/', - 'rest' => 'https://api.twitter.com/1.1/', - 'streaming' => [ - 'public' => 'https://stream.twitter.com/1.1/' - ], - 'ton' => 'https://ton.twitter.com/1.1/' - ]; - - /** - * Supported API methods - */ - protected static $_api_methods = [ - 'GET' => [ - 'account/settings', - 'account/verify_credentials', - 'account_activity/all/:env_name/subscriptions', - 'account_activity/all/:env_name/subscriptions/list', - 'account_activity/all/:env_name/webhooks', - 'account_activity/all/webhooks', - 'account_activity/subscriptions/count', - 'account_activity/webhooks', - 'account_activity/webhooks/:webhook_id/subscriptions/all', - 'account_activity/webhooks/:webhook_id/subscriptions/all/list', - 'ads/accounts', - 'ads/accounts/:account_id', - 'ads/accounts/:account_id/account_media', - 'ads/accounts/:account_id/app_event_provider_configurations', - 'ads/accounts/:account_id/app_event_provider_configurations/:id', - 'ads/accounts/:account_id/app_event_tags', - 'ads/accounts/:account_id/app_event_tags/:id', - 'ads/accounts/:account_id/app_lists', - 'ads/accounts/:account_id/auction_insights', - 'ads/accounts/:account_id/authenticated_user_access', - 'ads/accounts/:account_id/campaigns', - 'ads/accounts/:account_id/campaigns/:campaign_id', - 'ads/accounts/:account_id/cards/app_download', - 'ads/accounts/:account_id/cards/app_download/:card_id', - 'ads/accounts/:account_id/cards/image_app_download', - 'ads/accounts/:account_id/cards/image_app_download/:card_id', - 'ads/accounts/:account_id/cards/image_conversation', - 'ads/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/accounts/:account_id/cards/lead_gen', - 'ads/accounts/:account_id/cards/lead_gen/:card_id', - 'ads/accounts/:account_id/cards/video_app_download', - 'ads/accounts/:account_id/cards/video_app_download/:id', - 'ads/accounts/:account_id/cards/video_conversation', - 'ads/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/accounts/:account_id/cards/website', - 'ads/accounts/:account_id/cards/website/:card_id', - 'ads/accounts/:account_id/features', - 'ads/accounts/:account_id/funding_instruments', - 'ads/accounts/:account_id/funding_instruments/:id', - 'ads/accounts/:account_id/line_items', - 'ads/accounts/:account_id/line_items/:line_item_id', - 'ads/accounts/:account_id/media_creatives', - 'ads/accounts/:account_id/media_creatives/:id', - 'ads/accounts/:account_id/preroll_call_to_actions', - 'ads/accounts/:account_id/preroll_call_to_actions/:preroll_call_to_action_id', - 'ads/accounts/:account_id/promotable_users', - 'ads/accounts/:account_id/promoted_accounts', - 'ads/accounts/:account_id/promoted_tweets', - 'ads/accounts/:account_id/reach_estimate', - 'ads/accounts/:account_id/recommendations', - 'ads/accounts/:account_id/recommendations/:recommendation_id', - 'ads/accounts/:account_id/scoped_timeline', - 'ads/accounts/:account_id/tailored_audience_changes', - 'ads/accounts/:account_id/tailored_audience_changes/:id', - 'ads/accounts/:account_id/tailored_audiences', - 'ads/accounts/:account_id/tailored_audiences/:id', - 'ads/accounts/:account_id/tailored_audiences/:id/permissions', - 'ads/accounts/:account_id/targeting_criteria', - 'ads/accounts/:account_id/targeting_criteria/:id', - 'ads/accounts/:account_id/targeting_suggestions', - 'ads/accounts/:account_id/tweet/preview', - 'ads/accounts/:account_id/tweet/preview/:tweet_id', - 'ads/accounts/:account_id/videos', - 'ads/accounts/:account_id/videos/:id', - 'ads/accounts/:account_id/web_event_tags', - 'ads/accounts/:account_id/web_event_tags/:web_event_tag_id', - 'ads/bidding_rules', - 'ads/conversion_attribution', - 'ads/iab_categories', - 'ads/insights/accounts/:account_id', - 'ads/insights/accounts/:account_id/available_audiences', - 'ads/insights/keywords/search', - 'ads/line_items/placements', - 'ads/sandbox/accounts', - 'ads/sandbox/accounts/:account_id', - 'ads/sandbox/accounts/:account_id/account_media', - 'ads/sandbox/accounts/:account_id/app_event_provider_configurations', - 'ads/sandbox/accounts/:account_id/app_event_provider_configurations/:id', - 'ads/sandbox/accounts/:account_id/app_event_tags', - 'ads/sandbox/accounts/:account_id/app_event_tags/:id', - 'ads/sandbox/accounts/:account_id/app_lists', - 'ads/sandbox/accounts/:account_id/auction_insights', - 'ads/sandbox/accounts/:account_id/authenticated_user_access', - 'ads/sandbox/accounts/:account_id/campaigns', - 'ads/sandbox/accounts/:account_id/campaigns/:campaign_id', - 'ads/sandbox/accounts/:account_id/cards/app_download', - 'ads/sandbox/accounts/:account_id/cards/app_download/:card_id', - 'ads/sandbox/accounts/:account_id/cards/image_app_download', - 'ads/sandbox/accounts/:account_id/cards/image_app_download/:card_id', - 'ads/sandbox/accounts/:account_id/cards/image_conversation', - 'ads/sandbox/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/lead_gen', - 'ads/sandbox/accounts/:account_id/cards/lead_gen/:card_id', - 'ads/sandbox/accounts/:account_id/cards/video_app_download', - 'ads/sandbox/accounts/:account_id/cards/video_app_download/:id', - 'ads/sandbox/accounts/:account_id/cards/video_conversation', - 'ads/sandbox/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/website', - 'ads/sandbox/accounts/:account_id/cards/website/:card_id', - 'ads/sandbox/accounts/:account_id/features', - 'ads/sandbox/accounts/:account_id/funding_instruments', - 'ads/sandbox/accounts/:account_id/funding_instruments/:id', - 'ads/sandbox/accounts/:account_id/line_items', - 'ads/sandbox/accounts/:account_id/line_items/:line_item_id', - 'ads/sandbox/accounts/:account_id/media_creatives', - 'ads/sandbox/accounts/:account_id/media_creatives/:id', - 'ads/sandbox/accounts/:account_id/preroll_call_to_actions', - 'ads/sandbox/accounts/:account_id/preroll_call_to_actions/:preroll_call_to_action_id', - 'ads/sandbox/accounts/:account_id/promotable_users', - 'ads/sandbox/accounts/:account_id/promoted_accounts', - 'ads/sandbox/accounts/:account_id/promoted_tweets', - 'ads/sandbox/accounts/:account_id/reach_estimate', - 'ads/sandbox/accounts/:account_id/recommendations', - 'ads/sandbox/accounts/:account_id/recommendations/:recommendation_id', - 'ads/sandbox/accounts/:account_id/scoped_timeline', - 'ads/sandbox/accounts/:account_id/tailored_audience_changes', - 'ads/sandbox/accounts/:account_id/tailored_audience_changes/:id', - 'ads/sandbox/accounts/:account_id/tailored_audiences', - 'ads/sandbox/accounts/:account_id/tailored_audiences/:id', - 'ads/sandbox/accounts/:account_id/tailored_audiences/:id/permissions', - 'ads/sandbox/accounts/:account_id/targeting_criteria', - 'ads/sandbox/accounts/:account_id/targeting_criteria/:id', - 'ads/sandbox/accounts/:account_id/targeting_suggestions', - 'ads/sandbox/accounts/:account_id/tweet/preview', - 'ads/sandbox/accounts/:account_id/tweet/preview/:tweet_id', - 'ads/sandbox/accounts/:account_id/videos', - 'ads/sandbox/accounts/:account_id/videos/:id', - 'ads/sandbox/accounts/:account_id/web_event_tags', - 'ads/sandbox/accounts/:account_id/web_event_tags/:web_event_tag_id', - 'ads/sandbox/bidding_rules', - 'ads/sandbox/conversion_attribution', - 'ads/sandbox/iab_categories', - 'ads/sandbox/insights/accounts/:account_id', - 'ads/sandbox/insights/accounts/:account_id/available_audiences', - 'ads/sandbox/insights/keywords/search', - 'ads/sandbox/line_items/placements', - 'ads/sandbox/stats/accounts/:account_id', - 'ads/sandbox/stats/accounts/:account_id/reach/campaigns', - 'ads/sandbox/stats/accounts/:account_id/reach/funding_instruments', - 'ads/sandbox/targeting_criteria/app_store_categories', - 'ads/sandbox/targeting_criteria/behavior_taxonomies', - 'ads/sandbox/targeting_criteria/behaviors', - 'ads/sandbox/targeting_criteria/devices', - 'ads/sandbox/targeting_criteria/events', - 'ads/sandbox/targeting_criteria/interests', - 'ads/sandbox/targeting_criteria/languages', - 'ads/sandbox/targeting_criteria/locations', - 'ads/sandbox/targeting_criteria/network_operators', - 'ads/sandbox/targeting_criteria/platform_versions', - 'ads/sandbox/targeting_criteria/platforms', - 'ads/sandbox/targeting_criteria/tv_channels', - 'ads/sandbox/targeting_criteria/tv_genres', - 'ads/sandbox/targeting_criteria/tv_markets', - 'ads/sandbox/targeting_criteria/tv_shows', - 'ads/stats/accounts/:account_id', - 'ads/stats/accounts/:account_id/reach/campaigns', - 'ads/stats/accounts/:account_id/reach/funding_instruments', - 'ads/targeting_criteria/app_store_categories', - 'ads/targeting_criteria/behavior_taxonomies', - 'ads/targeting_criteria/behaviors', - 'ads/targeting_criteria/devices', - 'ads/targeting_criteria/events', - 'ads/targeting_criteria/interests', - 'ads/targeting_criteria/languages', - 'ads/targeting_criteria/locations', - 'ads/targeting_criteria/network_operators', - 'ads/targeting_criteria/platform_versions', - 'ads/targeting_criteria/platforms', - 'ads/targeting_criteria/tv_channels', - 'ads/targeting_criteria/tv_genres', - 'ads/targeting_criteria/tv_markets', - 'ads/targeting_criteria/tv_shows', - 'application/rate_limit_status', - 'blocks/ids', - 'blocks/list', - 'collections/entries', - 'collections/list', - 'collections/show', - 'custom_profiles/:id', - 'custom_profiles/list', - 'direct_messages/events/list', - 'direct_messages/events/show', - 'direct_messages/welcome_messages/list', - 'direct_messages/welcome_messages/rules/list', - 'direct_messages/welcome_messages/rules/show', - 'direct_messages/welcome_messages/show', - 'favorites/list', - 'feedback/events', - 'feedback/show/:id', - 'followers/ids', - 'followers/list', - 'friends/ids', - 'friends/list', - 'friendships/incoming', - 'friendships/lookup', - 'friendships/no_retweets/ids', - 'friendships/outgoing', - 'friendships/show', - 'geo/id/:place_id', - 'geo/reverse_geocode', - 'geo/search', - 'help/configuration', - 'help/languages', - 'help/privacy', - 'help/tos', - 'lists/list', - 'lists/members', - 'lists/members/show', - 'lists/memberships', - 'lists/ownerships', - 'lists/show', - 'lists/statuses', - 'lists/subscribers', - 'lists/subscribers/show', - 'lists/subscriptions', - 'mutes/users/ids', - 'mutes/users/list', - 'oauth/authenticate', - 'oauth/authorize', - 'saved_searches/list', - 'saved_searches/show/:id', - 'search/tweets', - 'statuses/firehose', - 'statuses/home_timeline', - 'statuses/mentions_timeline', - 'statuses/oembed', - 'statuses/retweeters/ids', - 'statuses/retweets/:id', - 'statuses/retweets_of_me', - 'statuses/sample', - 'statuses/show/:id', - 'statuses/user_timeline', - 'trends/available', - 'trends/closest', - 'trends/place', - 'users/profile_banner', - 'users/search', - 'users/show', - 'users/suggestions', - 'users/suggestions/:slug', - 'users/suggestions/:slug/members' - ], - 'POST' => [ - 'account/remove_profile_banner', - 'account/settings', - 'account/update_profile', - 'account/update_profile_banner', - 'account/update_profile_image', - 'account_activity/all/:env_name/subscriptions', - 'account_activity/all/:env_name/webhooks', - 'account_activity/webhooks', - 'account_activity/webhooks/:webhook_id/subscriptions/all', - 'ads/accounts/:account_id/account_media', - 'ads/accounts/:account_id/app_lists', - 'ads/accounts/:account_id/campaigns', - 'ads/accounts/:account_id/cards/app_download', - 'ads/accounts/:account_id/cards/image_app_download', - 'ads/accounts/:account_id/cards/image_conversation', - 'ads/accounts/:account_id/cards/lead_gen', - 'ads/accounts/:account_id/cards/video_app_download', - 'ads/accounts/:account_id/cards/video_conversation', - 'ads/accounts/:account_id/cards/website', - 'ads/accounts/:account_id/line_items', - 'ads/accounts/:account_id/media_creatives', - 'ads/accounts/:account_id/promoted_accounts', - 'ads/accounts/:account_id/promoted_tweets', - 'ads/accounts/:account_id/tailored_audience_changes', - 'ads/accounts/:account_id/tailored_audiences', - 'ads/accounts/:account_id/tailored_audiences/:id/permissions', - 'ads/accounts/:account_id/targeting_criteria', - 'ads/accounts/:account_id/tweet', - 'ads/accounts/:account_id/videos', - 'ads/accounts/:account_id/web_event_tags', - 'ads/batch/accounts/:account_id/campaigns', - 'ads/batch/accounts/:account_id/line_items', - 'ads/batch/accounts/:account_id/tailored_audiences', - 'ads/batch/accounts/:account_id/targeting_criteria', - 'ads/conversion_event', - 'ads/sandbox/accounts', - 'ads/sandbox/accounts/:account_id/account_media', - 'ads/sandbox/accounts/:account_id/app_lists', - 'ads/sandbox/accounts/:account_id/campaigns', - 'ads/sandbox/accounts/:account_id/cards/app_download', - 'ads/sandbox/accounts/:account_id/cards/image_app_download', - 'ads/sandbox/accounts/:account_id/cards/image_conversation', - 'ads/sandbox/accounts/:account_id/cards/lead_gen', - 'ads/sandbox/accounts/:account_id/cards/video_app_download', - 'ads/sandbox/accounts/:account_id/cards/video_conversation', - 'ads/sandbox/accounts/:account_id/cards/website', - 'ads/sandbox/accounts/:account_id/features', - 'ads/sandbox/accounts/:account_id/funding_instruments', - 'ads/sandbox/accounts/:account_id/line_items', - 'ads/sandbox/accounts/:account_id/media_creatives', - 'ads/sandbox/accounts/:account_id/promoted_accounts', - 'ads/sandbox/accounts/:account_id/promoted_tweets', - 'ads/sandbox/accounts/:account_id/tailored_audience_changes', - 'ads/sandbox/accounts/:account_id/tailored_audiences', - 'ads/sandbox/accounts/:account_id/tailored_audiences/:id/permissions', - 'ads/sandbox/accounts/:account_id/targeting_criteria', - 'ads/sandbox/accounts/:account_id/tweet', - 'ads/sandbox/accounts/:account_id/videos', - 'ads/sandbox/accounts/:account_id/web_event_tags', - 'ads/sandbox/batch/accounts/:account_id/campaigns', - 'ads/sandbox/batch/accounts/:account_id/line_items', - 'ads/sandbox/batch/accounts/:account_id/tailored_audiences', - 'ads/sandbox/batch/accounts/:account_id/targeting_criteria', - 'ads/sandbox/conversion_event', - 'ads/sandbox/stats/jobs/accounts/:account_id', - 'ads/sandbox/tailored_audience_memberships', - 'ads/stats/jobs/accounts/:account_id', - 'ads/tailored_audience_memberships', - 'blocks/create', - 'blocks/destroy', - 'collections/create', - 'collections/destroy', - 'collections/entries/add', - 'collections/entries/curate', - 'collections/entries/move', - 'collections/entries/remove', - 'collections/update', - 'custom_profiles/new', - 'direct_messages/events/new', - 'direct_messages/indicate_typing', - 'direct_messages/mark_read', - 'direct_messages/welcome_messages/new', - 'direct_messages/welcome_messages/rules/new', - 'favorites/create', - 'favorites/destroy', - 'feedback/create', - 'friendships/create', - 'friendships/destroy', - 'friendships/update', - 'lists/create', - 'lists/destroy', - 'lists/members/create', - 'lists/members/create_all', - 'lists/members/destroy', - 'lists/members/destroy_all', - 'lists/subscribers/create', - 'lists/subscribers/destroy', - 'lists/update', - 'media/metadata/create', - 'media/upload', - 'mutes/users/create', - 'mutes/users/destroy', - 'oauth/access_token', - 'oauth/request_token', - 'oauth2/invalidate_token', - 'oauth2/token', - 'saved_searches/create', - 'saved_searches/destroy/:id', - 'statuses/destroy/:id', - 'statuses/filter', - 'statuses/lookup', - 'statuses/retweet/:id', - 'statuses/unretweet/:id', - 'statuses/update', - 'ton/bucket/:bucket', - 'ton/bucket/:bucket?resumable=true', - 'tweets/search/30day/:env', - 'tweets/search/30day/:env/counts', - 'tweets/search/fullarchive/:env', - 'tweets/search/fullarchive/:env/counts', - 'users/lookup', - 'users/report_spam' - ], - 'PUT' => [ - 'account_activity/all/:env_name/webhooks/:webhook_id', - 'account_activity/webhooks/:webhook_id', - 'ads/accounts/:account_id/campaigns/:campaign_id', - 'ads/accounts/:account_id/cards/app_download/:card_id', - 'ads/accounts/:account_id/cards/image_app_download/:card_id', - 'ads/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/accounts/:account_id/cards/lead_gen/:card_id', - 'ads/accounts/:account_id/cards/video_app_download/:id', - 'ads/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/accounts/:account_id/cards/website/:card_id', - 'ads/accounts/:account_id/line_items/:line_item_id', - 'ads/accounts/:account_id/preroll_call_to_actions/:preroll_call_to_action_id', - 'ads/accounts/:account_id/promoted_tweets/:id', - 'ads/accounts/:account_id/tailored_audiences/global_opt_out', - 'ads/accounts/:account_id/targeting_criteria', - 'ads/accounts/:account_id/videos/:id', - 'ads/accounts/:account_id/web_event_tags/:web_event_tag_id', - 'ads/sandbox/accounts/:account_id/campaigns/:campaign_id', - 'ads/sandbox/accounts/:account_id/cards/app_download/:card_id', - 'ads/sandbox/accounts/:account_id/cards/image_app_download/:card_id', - 'ads/sandbox/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/lead_gen/:card_id', - 'ads/sandbox/accounts/:account_id/cards/video_app_download/:id', - 'ads/sandbox/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/website/:card_id', - 'ads/sandbox/accounts/:account_id/line_items/:line_item_id', - 'ads/sandbox/accounts/:account_id/preroll_call_to_actions/:preroll_call_to_action_id', - 'ads/sandbox/accounts/:account_id/promoted_tweets/:id', - 'ads/sandbox/accounts/:account_id/tailored_audiences/global_opt_out', - 'ads/sandbox/accounts/:account_id/targeting_criteria', - 'ads/sandbox/accounts/:account_id/videos/:id', - 'ads/sandbox/accounts/:account_id/web_event_tags/:web_event_tag_id', - 'direct_messages/welcome_messages/update', - 'ton/bucket/:bucket/:file?resumable=true&resumeId=:resumeId' - ], - 'DELETE' => [ - 'account_activity/all/:env_name/subscriptions', - 'account_activity/all/:env_name/webhooks/:webhook_id', - 'account_activity/webhooks/:webhook_id', - 'account_activity/webhooks/:webhook_id/subscriptions/all', - 'ads/accounts/:account_id/campaigns/:campaign_id', - 'ads/accounts/:account_id/cards/app_download/:card_id', - 'ads/accounts/:account_id/cards/image_app_download/:card_id', - 'ads/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/accounts/:account_id/cards/lead_gen/:card_id', - 'ads/accounts/:account_id/cards/video_app_download/:id', - 'ads/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/accounts/:account_id/cards/website/:card_id', - 'ads/accounts/:account_id/line_items/:line_item_id', - 'ads/accounts/:account_id/media_creatives/:id', - 'ads/accounts/:account_id/preroll_call_to_actions/:preroll_call_to_action_id', - 'ads/accounts/:account_id/promoted_tweets/:id', - 'ads/accounts/:account_id/tailored_audiences/:id', - 'ads/accounts/:account_id/targeting_criteria/:id', - 'ads/accounts/:account_id/videos/:id', - 'ads/accounts/:account_id/web_event_tags/:web_event_tag_id', - 'ads/sandbox/accounts/:account_id/campaigns/:campaign_id', - 'ads/sandbox/accounts/:account_id/cards/app_download/:card_id', - 'ads/sandbox/accounts/:account_id/cards/image_app_download/:card_id', - 'ads/sandbox/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/lead_gen/:card_id', - 'ads/sandbox/accounts/:account_id/cards/video_app_download/:id', - 'ads/sandbox/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/website/:card_id', - 'ads/sandbox/accounts/:account_id/line_items/:line_item_id', - 'ads/sandbox/accounts/:account_id/media_creatives/:id', - 'ads/sandbox/accounts/:account_id/preroll_call_to_actions/:preroll_call_to_action_id', - 'ads/sandbox/accounts/:account_id/promoted_tweets/:id', - 'ads/sandbox/accounts/:account_id/tailored_audiences/:id', - 'ads/sandbox/accounts/:account_id/targeting_criteria/:id', - 'ads/sandbox/accounts/:account_id/videos/:id', - 'ads/sandbox/accounts/:account_id/web_event_tags/:web_event_tag_id', - 'custom_profiles/destroy', - 'direct_messages/events/destroy', - 'direct_messages/welcome_messages/destroy', - 'direct_messages/welcome_messages/rules/destroy' - ] - ]; - - /** - * Possible file name parameters - */ - protected static $_possible_files = [ - // Tweets - 'media/upload' => ['media'], - // Accounts - 'account/update_profile_image' => ['image'], - 'account/update_profile_banner' => ['banner'] - ]; - - /** - * The current Codebird version - */ - protected static $_version = '4.0.0-beta.1'; - - /** - * The Request or access token. Used to sign requests - */ - protected $_oauth_token = null; - - /** - * The corresponding request or access token secret - */ - protected $_oauth_token_secret = null; - - /** - * The format of data to return from API calls - */ - protected $_return_format = CODEBIRD_RETURNFORMAT_OBJECT; - - /** - * The callback to call with any new streaming messages - */ - protected $_streaming_callback = null; - - /** - * Auto-detect cURL absence - */ - protected $_use_curl = true; - - /** - * Timeouts - */ - protected $_timeouts = [ - 'request' => 10000, - 'connect' => 3000, - 'remote' => 5000 - ]; - - /** - * Proxy - */ - protected $_proxy = []; - - /** - * - * Class constructor - * - */ - public function __construct() - { - // Pre-define $_use_curl depending on cURL availability - $this->setUseCurl(function_exists('curl_init')); - } - - /** - * Returns singleton class instance - * Always use this method unless you're working with multiple authenticated users at once - * - * @return Codebird The instance - */ - public static function getInstance() - { - if (self::$_instance === null) { - self::$_instance = new self; - } - return self::$_instance; - } - - /** - * Sets the OAuth consumer key and secret (App key) - * - * @param string $key OAuth consumer key - * @param string $secret OAuth consumer secret - * - * @return void - */ - public static function setConsumerKey($key, $secret) - { - self::$_consumer_key = $key; - self::$_consumer_secret = $secret; - } - - /** - * Sets the OAuth2 app-only auth bearer token - * - * @param string $token OAuth2 bearer token - * - * @return void - */ - public static function setBearerToken($token) - { - self::$_bearer_token = $token; - } - - /** - * Gets the current Codebird version - * - * @return string The version number - */ - public function getVersion() - { - return self::$_version; - } - - /** - * Sets the OAuth request or access token and secret (User key) - * - * @param string $token OAuth request or access token - * @param string $secret OAuth request or access token secret - * - * @return void - */ - public function setToken($token, $secret) - { - $this->_oauth_token = $token; - $this->_oauth_token_secret = $secret; - } - - /** - * Forgets the OAuth request or access token and secret (User key) - * - * @return bool - */ - public function logout() - { - $this->_oauth_token = - $this->_oauth_token_secret = null; - - return true; - } - - /** - * Sets if codebird should use cURL - * - * @param bool $use_curl Request uses cURL or not - * - * @return void - * @throws \Exception - */ - public function setUseCurl($use_curl) - { - if ($use_curl && ! function_exists('curl_init')) { - throw new \Exception('To use cURL, the PHP curl extension must be available.'); - } - - $this->_use_curl = (bool) $use_curl; - } - - /** - * Sets request timeout in milliseconds - * - * @param int $timeout Request timeout in milliseconds - * - * @return void - */ - public function setTimeout($timeout) - { - if ($timeout < 0) { - $timeout = 0; - } - $this->_timeouts['request'] = (int) $timeout; - } - - /** - * Sets connection timeout in milliseconds - * - * @param int $timeout Connection timeout in milliseconds - * - * @return void - */ - public function setConnectionTimeout($timeout) - { - if ($timeout < 0) { - $timeout = 0; - } - $this->_timeouts['connect'] = (int) $timeout; - } - - /** - * Sets remote media download timeout in milliseconds - * - * @param int $timeout Remote media timeout in milliseconds - * - * @return void - */ - public function setRemoteDownloadTimeout($timeout) - { - if ($timeout < 0) { - $timeout = 0; - } - $this->_timeouts['remote'] = (int) $timeout; - } - - /** - * Sets the format for API replies - * - * @param int $return_format One of these: - * CODEBIRD_RETURNFORMAT_OBJECT (default) - * CODEBIRD_RETURNFORMAT_ARRAY - * CODEBIRD_RETURNFORMAT_JSON - * - * @return void - */ - public function setReturnFormat($return_format) - { - $this->_return_format = $return_format; - } - - /** - * Sets the proxy - * - * @param string $host Proxy host - * @param int $port Proxy port - * @param int optional $type Proxy type, defaults to HTTP - * - * @return void - * @throws \Exception - */ - public function setProxy($host, $port, $type = CURLPROXY_HTTP) - { - static $types_str = [ - 'HTTP', 'SOCKS4', 'SOCKS5', 'SOCKS4A', 'SOCKS5_HOSTNAME' - ]; - $types = []; - foreach ($types_str as $type_str) { - if (defined('CURLPROXY_' . $type_str)) { - $types[] = constant('CURLPROXY_' . $type_str); - } - } - if (! in_array($type, $types)) { - throw new \Exception('Invalid proxy type specified.'); - } - - $this->_proxy['host'] = $host; - $this->_proxy['port'] = (int) $port; - $this->_proxy['type'] = $type; - } - - /** - * Sets the proxy authentication - * - * @param string $authentication Proxy authentication - * - * @return void - */ - public function setProxyAuthentication($authentication) - { - $this->_proxy['authentication'] = $authentication; - } - - /** - * Sets streaming callback - * - * @param callable $callback The streaming callback - * - * @return void - * @throws \Exception - */ - public function setStreamingCallback($callback) - { - if (!is_callable($callback)) { - throw new \Exception('This is not a proper callback.'); - } - $this->_streaming_callback = $callback; - } - - /** - * Get allowed API methods, sorted by HTTP method - * Watch out for multiple-method API methods! - * - * @return array $apimethods - */ - public function getApiMethods() - { - return self::$_api_methods; - } - - /** - * Main API handler working on any requests you issue - * - * @param string $function The member function you called - * @param array $params The parameters you sent along - * - * @return string The API reply encoded in the set return_format - */ - - public function __call($function, $params) - { - // cURL function? - if (substr($function, 0, 6) === '_curl_' - || $function === '_time' - || $function === '_microtime' - ) { - return call_user_func_array(substr($function, 1), $params); - } - - // parse parameters - $apiparams = $this->_parseApiParams($params); - - // stringify null and boolean parameters - $apiparams = $this->_stringifyNullBoolParams($apiparams); - - $app_only_auth = false; - if (count($params) > 1) { - // convert app_only_auth param to bool - $app_only_auth = !! $params[1]; - } - - // reset token when requesting a new token - // (causes 401 for signature error on subsequent requests) - if ($function === 'oauth_requestToken') { - $this->setToken(null, null); - } - - // map function name to API method - list($method, $method_template) = $this->_mapFnToApiMethod($function, $apiparams); - - $httpmethod = $this->_detectMethod($method_template, $apiparams); - $multipart = $this->_detectMultipart($method_template); - - return $this->_callApi( - $httpmethod, - $method, - $method_template, - $apiparams, - $multipart, - $app_only_auth - ); - } - - - /** - * __call() helpers - */ - - /** - * Parse given params, detect query-style params - * - * @param array|string $params Parameters to parse - * - * @return array $apiparams - */ - protected function _parseApiParams($params) - { - $apiparams = []; - if (count($params) === 0) { - return $apiparams; - } - - if (is_array($params[0])) { - // given parameters are array - $apiparams = $params[0]; - return $apiparams; - } - - // user gave us query-style params - parse_str($params[0], $apiparams); - if (! is_array($apiparams)) { - $apiparams = []; - } - - return $apiparams; - } - - /** - * Replace null and boolean parameters with their string representations - * - * @param array $apiparams Parameter array to replace in - * - * @return array $apiparams - */ - protected function _stringifyNullBoolParams($apiparams) - { - foreach ($apiparams as $key => $value) { - if (! is_scalar($value)) { - // no need to try replacing arrays - continue; - } - if (is_null($value)) { - $apiparams[$key] = 'null'; - } elseif (is_bool($value)) { - $apiparams[$key] = $value ? 'true' : 'false'; - } - } - - return $apiparams; - } - - /** - * Maps called PHP magic method name to Twitter API method - * - * @param string $function Function called - * @param array $apiparams byref API parameters - * - * @return string[] (string method, string method_template) - */ - protected function _mapFnToApiMethod($function, &$apiparams) - { - // replace _ by / - $method = $this->_mapFnInsertSlashes($function); - - // undo replacement for URL parameters - $method = $this->_mapFnRestoreParamUnderscores($method); - - // replace AA by URL parameters - list ($method, $method_template) = $this->_mapFnInlineParams($method, $apiparams); - - if (substr($method, 0, 4) !== 'ton/') { - // replace A-Z by _a-z - for ($i = 0; $i < 26; $i++) { - $method = str_replace(chr(65 + $i), '_' . chr(97 + $i), $method); - $method_template = str_replace(chr(65 + $i), '_' . chr(97 + $i), $method_template); - } - } - - return [$method, $method_template]; - } - - /** - * API method mapping: Replaces _ with / character - * - * @param string $function Function called - * - * @return string API method to call - */ - protected function _mapFnInsertSlashes($function) - { - return str_replace('_', '/', $function); - } - - /** - * API method mapping: Restore _ character in named parameters - * - * @param string $method API method to call - * - * @return string API method with restored underscores - */ - protected function _mapFnRestoreParamUnderscores($method) - { - $params = [ - 'screen_name', 'place_id', - 'account_id', 'campaign_id', 'card_id', 'line_item_id', - 'tweet_id', 'web_event_tag_id' - ]; - foreach ($params as $param) { - $param = strtoupper($param); - $replacement_was = str_replace('_', '/', $param); - $method = str_replace($replacement_was, $param, $method); - } - - return $method; - } - - /** - * Inserts inline parameters into the method name - * - * @param string $method The method to call - * @param array byref $apiparams The parameters to send along - * - * @return string[] (string method, string method_template) - * @throws \Exception - */ - protected function _mapFnInlineParams($method, &$apiparams) - { - $method_template = $method; - $match = []; - if (preg_match_all('/[A-Z_]{2,}/', $method, $match)) { - foreach ($match[0] as $param) { - $param_l = strtolower($param); - if ($param_l === 'resumeid') { - $param_l = 'resumeId'; - } - $method_template = str_replace($param, ':' . $param_l, $method_template); - if (! isset($apiparams[$param_l])) { - for ($i = 0; $i < 26; $i++) { - $method_template = str_replace(chr(65 + $i), '_' . chr(97 + $i), $method_template); - } - throw new \Exception( - 'To call the templated method "' . $method_template - . '", specify the parameter value for "' . $param_l . '".' - ); - } - $method = str_replace($param, $apiparams[$param_l], $method); - unset($apiparams[$param_l]); - } - } - - return [$method, $method_template]; - } - - /** - * Avoids any JSON_BIGINT_AS_STRING errors - * - * @param string $data JSON data to decode - * @param int optional $need_array Decode as array, otherwise as object - * - * @return array|object The decoded object - */ - protected function _json_decode($data, $need_array = false) - { - if (!(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) { - return json_decode($data, $need_array, 512, JSON_BIGINT_AS_STRING); - } - $max_int_length = strlen((string) PHP_INT_MAX) - 1; - $json_without_bigints = preg_replace('/:\s*(-?\d{'.$max_int_length.',})/', ': "$1"', $data); - $obj = json_decode($json_without_bigints, $need_array); - return $obj; - } - - /** - * Uncommon API methods - */ - - /** - * Gets the OAuth authenticate URL for the current request token - * - * @param optional bool $force_login Whether to force the user to enter their login data - * @param optional string $screen_name Screen name to repopulate the user name with - * @param optional string $type 'authenticate' or 'authorize', to avoid duplicate code - * - * @return string The OAuth authenticate/authorize URL - * @throws \Exception - */ - public function oauth_authenticate($force_login = NULL, $screen_name = NULL, $type = 'authenticate') - { - if (! in_array($type, ['authenticate', 'authorize'])) { - throw new \Exception('To get the ' . $type . ' URL, use the correct third parameter, or omit it.'); - } - if ($this->_oauth_token === null) { - throw new CodebirdCredentialsException('To get the ' . $type . ' URL, the OAuth token must be set.'); - } - $url = self::$_endpoints['oauth'] . 'oauth/' . $type . '?oauth_token=' . $this->_url($this->_oauth_token); - if ($force_login) { - $url .= "&force_login=1"; - } - if ($screen_name) { - $url .= "&screen_name=" . $screen_name; - } - return $url; - } - - /** - * Gets the OAuth authorize URL for the current request token - * @param optional bool $force_login Whether to force the user to enter their login data - * @param optional string $screen_name Screen name to repopulate the user name with - * - * @return string The OAuth authorize URL - */ - public function oauth_authorize($force_login = NULL, $screen_name = NULL) - { - return $this->oauth_authenticate($force_login, $screen_name, 'authorize'); - } - - /** - * Gets the OAuth bearer token - * - * @return string The OAuth bearer token - */ - - public function oauth2_token() - { - if ($this->_use_curl) { - return $this->_oauth2TokenCurl(); - } - return $this->_oauth2TokenNoCurl(); - } - - /** - * Gets a cURL handle - * @param string $url the URL for the curl initialization - * @return resource handle - */ - protected function _getCurlInitialization($url) - { - $connection = $this->_curl_init($url); - - $this->_curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1); - $this->_curl_setopt($connection, CURLOPT_FOLLOWLOCATION, 0); - $this->_curl_setopt($connection, CURLOPT_HEADER, 1); - $this->_curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 1); - $this->_curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 2); - $this->_curl_setopt($connection, CURLOPT_CAINFO, __DIR__ . '/cacert.pem'); - $this->_curl_setopt( - $connection, CURLOPT_USERAGENT, - 'codebird-php/' . $this->getVersion() . ' +https://github.com/jublonet/codebird-php' - ); - - if ($this->_hasProxy()) { - $this->_curl_setopt($connection, CURLOPT_PROXYTYPE, $this->_getProxyType()); - $this->_curl_setopt($connection, CURLOPT_PROXY, $this->_getProxyHost()); - $this->_curl_setopt($connection, CURLOPT_PROXYPORT, $this->_getProxyPort()); - - if ($this->_getProxyAuthentication()) { - $this->_curl_setopt($connection, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); - $this->_curl_setopt($connection, CURLOPT_PROXYUSERPWD, $this->_getProxyAuthentication()); - } - } - - return $connection; - } - - /** - * Gets a non cURL initialization - * - * @param string $url the URL for the curl initialization - * @param array $contextOptions the options for the stream context - * @param string $hostname the hostname to verify the SSL FQDN for - * - * @return array the read data - */ - protected function _getNoCurlInitialization($url, $contextOptions, $hostname = '') - { - $httpOptions = []; - - $httpOptions['header'] = [ - 'User-Agent: codebird-php/' . $this->getVersion() . ' +https://github.com/jublonet/codebird-php' - ]; - - $httpOptions['ssl'] = [ - 'verify_peer' => true, - 'cafile' => __DIR__ . '/cacert.pem', - 'verify_depth' => 5, - 'peer_name' => $hostname - ]; - - if ($this->_hasProxy()) { - $httpOptions['request_fulluri'] = true; - $httpOptions['proxy'] = $this->_getProxyHost() . ':' . $this->_getProxyPort(); - - if ($this->_getProxyAuthentication()) { - $httpOptions['header'][] = - 'Proxy-Authorization: Basic ' . base64_encode($this->_getProxyAuthentication()); - } - } - - // merge the http options with the context options - $options = array_merge_recursive( - $contextOptions, - ['http' => $httpOptions] - ); - - // concatenate $options['http']['header'] - $options['http']['header'] = implode("\r\n", $options['http']['header']); - - // silent the file_get_contents function - $content = @file_get_contents($url, false, stream_context_create($options)); - - $headers = []; - // API is responding - if (isset($http_response_header)) { - $headers = $http_response_header; - } - - return [ - $content, - $headers - ]; - } - - protected function _hasProxy() - { - return isset($this->_proxy['host']) || isset($this->_proxy['port']); - } - - /** - * Gets the proxy host - * - * @return string The proxy host - */ - protected function _getProxyHost() - { - return $this->_getProxyData('host'); - } - - /** - * Gets the proxy port - * - * @return string The proxy port - */ - protected function _getProxyPort() - { - return $this->_getProxyData('port'); - } - - /** - * Gets the proxy authentication - * - * @return string The proxy authentication - */ - protected function _getProxyAuthentication() - { - return $this->_getProxyData('authentication'); - } - - /** - * Gets the proxy type - * - * @return string The proxy type - */ - protected function _getProxyType() - { - return $this->_getProxyData('type'); - } - - /** - * Gets data from the proxy configuration - * - * @param string $name - */ - private function _getProxyData($name) - { - return empty($this->_proxy[$name]) ? null : $this->_proxy[$name]; - } - - /** - * Gets the OAuth bearer token, using cURL - * - * @return string The OAuth bearer token - * @throws \Exception - */ - - protected function _oauth2TokenCurl() - { - if (self::$_consumer_key === null) { - throw new CodebirdCredentialsException('To obtain a bearer token, the consumer key must be set.'); - } - $post_fields = [ - 'grant_type' => 'client_credentials' - ]; - $url = self::$_endpoints['oauth'] . 'oauth2/token'; - $connection = $this->_getCurlInitialization($url); - $this->_curl_setopt($connection, CURLOPT_POST, 1); - $this->_curl_setopt($connection, CURLOPT_POSTFIELDS, $post_fields); - - $this->_curl_setopt($connection, CURLOPT_USERPWD, self::$_consumer_key . ':' . self::$_consumer_secret); - $this->_curl_setopt($connection, CURLOPT_HTTPHEADER, [ - 'Expect:' - ]); - $result = $this->_curl_exec($connection); - - // catch request errors - if ($result === false) { - throw new CodebirdAuthException('Request error for bearer token: ' . $this->_curl_error($connection)); - } - - // certificate validation results - $validation_result = $this->_curl_errno($connection); - $this->_validateSslCertificate($validation_result); - - $httpstatus = $this->_curl_getinfo($connection, CURLINFO_HTTP_CODE); - $reply = $this->_parseBearerReply($result, $httpstatus); - return $reply; - } - - /** - * Gets the OAuth bearer token, without cURL - * - * @return string The OAuth bearer token - * @throws \Exception - */ - - protected function _oauth2TokenNoCurl() - { - if (self::$_consumer_key == null) { - throw new CodebirdCredentialsException('To obtain a bearer token, the consumer key must be set.'); - } - - $url = self::$_endpoints['oauth'] . 'oauth2/token'; - $hostname = parse_url($url, PHP_URL_HOST); - - if ($hostname === false) { - throw new CodebirdEndpointException('Incorrect API endpoint host.'); - } - - $contextOptions = [ - 'http' => [ - 'method' => 'POST', - 'protocol_version' => '1.1', - 'header' => "Accept: */*\r\n" - . 'Authorization: Basic ' - . base64_encode( - self::$_consumer_key - . ':' - . self::$_consumer_secret - ), - 'timeout' => $this->_timeouts['request'] / 1000, - 'content' => 'grant_type=client_credentials', - 'ignore_errors' => true - ] - ]; - list($reply, $headers) = $this->_getNoCurlInitialization($url, $contextOptions, $hostname); - $result = ''; - foreach ($headers as $header) { - $result .= $header . "\r\n"; - } - $result .= "\r\n" . $reply; - - // find HTTP status - $httpstatus = $this->_getHttpStatusFromHeaders($headers); - $reply = $this->_parseBearerReply($result, $httpstatus); - return $reply; - } - - - /** - * General helpers to avoid duplicate code - */ - - /** - * Extract HTTP status code from headers - * - * @param array $headers The headers to parse - * - * @return string The HTTP status code - */ - protected function _getHttpStatusFromHeaders($headers) - { - $httpstatus = '500'; - $match = []; - if (!empty($headers[0]) && preg_match('/HTTP\/\d\.\d (\d{3})/', $headers[0], $match)) { - $httpstatus = $match[1]; - } - return $httpstatus; - } - - /** - * Parse oauth2_token reply and set bearer token, if found - * - * @param string $result Raw HTTP response - * @param int $httpstatus HTTP status code - * - * @return string reply - */ - protected function _parseBearerReply($result, $httpstatus) - { - list($headers, $reply) = $this->_parseApiHeaders($result); - $reply = $this->_parseApiReply($reply); - $rate = $this->_getRateLimitInfo($headers); - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - $reply['httpstatus'] = $httpstatus; - $reply['rate'] = $rate; - if ($httpstatus === 200) { - self::setBearerToken($reply['access_token']); - } - break; - case CODEBIRD_RETURNFORMAT_JSON: - if ($httpstatus === 200) { - $parsed = $this->_json_decode($reply); - self::setBearerToken($parsed->access_token); - } - break; - case CODEBIRD_RETURNFORMAT_OBJECT: - $reply->httpstatus = $httpstatus; - $reply->rate = $rate; - if ($httpstatus === 200) { - self::setBearerToken($reply->access_token); - } - break; - } - return $reply; - } - - /** - * Extract rate-limiting data from response headers - * - * @param array $headers The CURL response headers - * - * @return null|array|object The rate-limiting information - */ - protected function _getRateLimitInfo($headers) - { - if (! isset($headers['x-rate-limit-limit'])) { - return null; - } - $rate = [ - 'limit' => $headers['x-rate-limit-limit'], - 'remaining' => $headers['x-rate-limit-remaining'], - 'reset' => $headers['x-rate-limit-reset'] - ]; - if ($this->_return_format === CODEBIRD_RETURNFORMAT_OBJECT) { - return (object) $rate; - } - return $rate; - } - - /** - * Check if there were any SSL certificate errors - * - * @param int $validation_result The curl error number - * - * @return void - * @throws \Exception - */ - protected function _validateSslCertificate($validation_result) - { - if (in_array( - $validation_result, - [ - CURLE_SSL_CERTPROBLEM, - CURLE_SSL_CACERT, - CURLE_SSL_CACERT_BADFILE, - CURLE_SSL_CRL_BADFILE, - CURLE_SSL_ISSUER_ERROR - ] - ) - ) { - throw new \Exception( - 'Error ' . $validation_result - . ' while validating the Twitter API certificate.' - ); - } - } - - /** - * Signing helpers - */ - - /** - * URL-encodes the given data - * - * @param mixed $data - * - * @return mixed The encoded data - */ - protected function _url($data) - { - if (is_array($data)) { - return array_map([ - $this, - '_url' - ], $data); - } elseif (is_scalar($data)) { - return str_replace([ - '+', - '!', - '*', - "'", - '(', - ')' - ], [ - ' ', - '%21', - '%2A', - '%27', - '%28', - '%29' - ], rawurlencode($data)); - } - return ''; - } - - /** - * Gets the base64-encoded SHA1 hash for the given data - * - * @param string $data The data to calculate the hash from - * - * @return string The hash - * @throws \Exception - */ - protected function _sha1($data) - { - if (self::$_consumer_secret === null) { - throw new CodebirdCredentialsException('To generate a hash, the consumer secret must be set.'); - } - if (!function_exists('hash_hmac')) { - throw new \Exception('To generate a hash, the PHP hash extension must be available.'); - } - return base64_encode(hash_hmac( - 'sha1', - $data, - self::$_consumer_secret - . '&' - . ($this->_oauth_token_secret !== null - ? $this->_oauth_token_secret - : '' - ), - true - )); - } - - /** - * Generates a (hopefully) unique random string - * - * @param int optional $length The length of the string to generate - * - * @return string The random string - * @throws \Exception - */ - protected function _nonce($length = 8) - { - if ($length < 1) { - throw new \Exception('Invalid nonce length.'); - } - return substr(md5($this->_microtime(true)), 0, $length); - } - - /** - * Signature helper - * - * @param string $httpmethod Usually either 'GET' or 'POST' or 'DELETE' - * @param string $method The API method to call - * @param array $base_params The signature base parameters - * - * @return string signature - */ - protected function _getSignature($httpmethod, $method, $base_params) - { - // convert params to string - $base_string = ''; - foreach ($base_params as $key => $value) { - $base_string .= $key . '=' . $value . '&'; - } - - // trim last ampersand - $base_string = substr($base_string, 0, -1); - - // hash it - return $this->_sha1( - $httpmethod . '&' . - $this->_url($method) . '&' . - $this->_url($base_string) - ); - } - - /** - * Generates an OAuth signature - * - * @param string $httpmethod Usually either 'GET' or 'POST' or 'DELETE' - * @param string $method The API method to call - * @param array optional $params The API call parameters, associative - * - * @return string Authorization HTTP header - * @throws \Exception - */ - protected function _sign($httpmethod, $method, $params = []) - { - if (self::$_consumer_key === null) { - throw new CodebirdCredentialsException('To generate a signature, the consumer key must be set.'); - } - $sign_base_params = array_map( - [$this, '_url'], - [ - 'oauth_consumer_key' => self::$_consumer_key, - 'oauth_version' => '1.0', - 'oauth_timestamp' => $this->_time(), - 'oauth_nonce' => $this->_nonce(), - 'oauth_signature_method' => 'HMAC-SHA1' - ] - ); - if ($this->_oauth_token !== null) { - $sign_base_params['oauth_token'] = $this->_url($this->_oauth_token); - } - $oauth_params = $sign_base_params; - - // merge in the non-OAuth params - $sign_base_params = array_merge( - $sign_base_params, - array_map([$this, '_url'], $params) - ); - ksort($sign_base_params); - - $signature = $this->_getSignature($httpmethod, $method, $sign_base_params); - - $params = $oauth_params; - $params['oauth_signature'] = $signature; - - ksort($params); - $authorization = 'OAuth '; - foreach ($params as $key => $value) { - $authorization .= $key . "=\"" . $this->_url($value) . "\", "; - } - return substr($authorization, 0, -2); - } - - /** - * Detects HTTP method to use for API call - * - * @param string $method The API method to call - * @param array byref $params The parameters to send along - * - * @return string The HTTP method that should be used - */ - protected function _detectMethod($method, &$params) - { - if (isset($params['httpmethod'])) { - $httpmethod = $params['httpmethod']; - unset($params['httpmethod']); - return $httpmethod; - } - $apimethods = $this->getApiMethods(); - - // multi-HTTP method API methods - // parameter-based detection - $httpmethods_by_param = [ - 'POST' => [ - 'campaign_id' => [ - 'ads/accounts/:account_id/line_items', - 'ads/sandbox/accounts/:account_id/line_items' - ], - 'media_id' => [ - 'ads/accounts/:account_id/account_media', - 'ads/sandbox/accounts/:account_id/account_media' - ], - 'name' => [ - 'ads/accounts/:account_id/app_lists', - 'ads/accounts/:account_id/campaigns', - 'ads/accounts/:account_id/cards/app_download', - 'ads/accounts/:account_id/cards/image_app_download', - 'ads/accounts/:account_id/cards/image_conversation', - 'ads/accounts/:account_id/cards/lead_gen', - 'ads/accounts/:account_id/cards/video_app_download', - 'ads/accounts/:account_id/cards/video_conversation', - 'ads/accounts/:account_id/cards/website', - 'ads/accounts/:account_id/tailored_audiences', - 'ads/accounts/:account_id/web_event_tags', - 'ads/sandbox/accounts/:account_id/app_lists', - 'ads/sandbox/accounts/:account_id/campaigns', - 'ads/sandbox/accounts/:account_id/cards/app_download', - 'ads/sandbox/accounts/:account_id/cards/image_app_download', - 'ads/sandbox/accounts/:account_id/cards/image_conversation', - 'ads/sandbox/accounts/:account_id/cards/lead_gen', - 'ads/sandbox/accounts/:account_id/cards/video_app_download', - 'ads/sandbox/accounts/:account_id/cards/video_conversation', - 'ads/sandbox/accounts/:account_id/cards/website', - 'ads/sandbox/accounts/:account_id/tailored_audiences', - 'ads/sandbox/accounts/:account_id/web_event_tags' - ], - 'permission_level' => [ - 'ads/accounts/:account_id/tailored_audiences/:id/permissions', - 'ads/sandbox/accounts/:account_id/tailored_audiences/:id/permissions' - ], - 'tailored_audience_id' => [ - 'ads/accounts/:account_id/tailored_audience_changes', - 'ads/sandbox/accounts/:account_id/tailored_audience_changes' - ], - 'targeting_value' => [ - 'ads/accounts/:account_id/targeting_criteria', - 'ads/sandbox/accounts/:account_id/targeting_criteria' - ], - 'tweet_ids' => [ - 'ads/accounts/:account_id/promoted_tweets', - 'ads/sandbox/accounts/:account_id/promoted_tweets' - ], - 'type' => [ - 'ads/sandbox/accounts/:account_id/features', - 'ads/sandbox/accounts/:account_id/funding_instruments' - ], - 'url' => [ - 'account_activity/webhooks' - ], - 'user_id' => [ - 'ads/accounts/:account_id/promoted_accounts', - 'ads/sandbox/accounts/:account_id/promoted_accounts' - ], - 'video_media_id' => [ - 'ads/accounts/:account_id/videos', - 'ads/sandbox/accounts/:account_id/videos' - ] - ], - 'PUT' => [ - 'name' => [ - 'ads/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/accounts/:account_id/cards/website/:card_id', - 'ads/sandbox/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/website/:card_id' - ] - ] - ]; - foreach ($httpmethods_by_param as $httpmethod => $methods_by_param) { - foreach ($methods_by_param as $param => $methods) { - if (in_array($method, $methods) && isset($params[$param])) { - return $httpmethod; - } - } - } - - // async media/upload calls may request a status by GET - if ($method === 'media/upload' - && isset($params['command']) - && $params['command'] === 'STATUS' - ) { - return 'GET'; - } - - // prefer POST and PUT if parameters are set - if (count($params) > 0) { - if (in_array($method, $apimethods['POST'])) { - return 'POST'; - } - if (in_array($method, $apimethods['PUT'])) { - return 'PUT'; - } - } - - foreach ($apimethods as $httpmethod => $methods) { - if (in_array($method, $methods)) { - return $httpmethod; - } - } - throw new \Exception('Can\'t find HTTP method to use for "' . $method . '".'); - } - - /** - * Detects if API call should use multipart/form-data - * - * @param string $method The API method to call - * - * @return bool Whether the method should be sent as multipart - */ - protected function _detectMultipart($method) - { - $multiparts = [ - // Tweets - 'media/upload', - - // Users - // no multipart for these, for now: - //'account/update_profile_image', - //'account/update_profile_banner' - ]; - return in_array($method, $multiparts); - } - - /** - * Merge multipart string from parameters array - * - * @param string $method_template The method template to call - * @param string $border The multipart border - * @param array $params The parameters to send along - * - * @return string request - * @throws \Exception - */ - protected function _getMultipartRequestFromParams($method_template, $border, $params) - { - $request = ''; - foreach ($params as $key => $value) { - // is it an array? - if (is_array($value)) { - throw new CodebirdMediaException('Using URL-encoded parameters is not supported for uploading media.'); - } - $request .= - '--' . $border . "\r\n" - . 'Content-Disposition: form-data; name="' . $key . '"'; - - // check for filenames - $data = $this->_checkForFiles($method_template, $key, $value); - if ($data !== false) { - $value = $data; - } - - $request .= "\r\n\r\n" . $value . "\r\n"; - } - - return $request; - } - - /** - * Check for files - * - * @param string $method_template The method template to call - * @param string $key The parameter name - * @param string $value The possible file name or URL - * - * @return mixed - */ - protected function _checkForFiles($method_template, $key, $value) { - if (!array_key_exists($method_template, self::$_possible_files) - || !in_array($key, self::$_possible_files[$method_template]) - ) { - return false; - } - $data = $this->_buildBinaryBody($value); - if ($data === $value) { - return false; - } - return $data; - } - - - /** - * Detect filenames in upload parameters, - * build multipart request from upload params - * - * @param string $method The API method to call - * @param array $params The parameters to send along - * - * @return null|string - */ - protected function _buildMultipart($method, $params) - { - // well, files will only work in multipart methods - if (! $this->_detectMultipart($method)) { - return; - } - - // only check specific parameters - // method might have files? - if (! in_array($method, array_keys(self::$_possible_files))) { - return; - } - - $multipart_border = '--------------------' . $this->_nonce(); - $multipart_request = - $this->_getMultipartRequestFromParams($method, $multipart_border, $params) - . '--' . $multipart_border . '--'; - - return $multipart_request; - } - - /** - * Detect filenames in upload parameters - * - * @param mixed $input The data or file name to parse - * - * @return null|string - */ - protected function _buildBinaryBody($input) - { - if (// is it a file, a readable one? - @file_exists($input) - && @is_readable($input) - ) { - // try to read the file - $data = @file_get_contents($input); - if ($data !== false && strlen($data) !== 0) { - return $data; - } - } elseif (// is it a remote file? - filter_var($input, FILTER_VALIDATE_URL) - && preg_match('/^https?:\/\//', $input) - ) { - $data = $this->_fetchRemoteFile($input); - if ($data !== false) { - return $data; - } - } - return $input; - } - - /** - * Fetches a remote file - * - * @param string $url The URL to download from - * - * @return mixed The file contents or FALSE - * @throws \Exception - */ - protected function _fetchRemoteFile($url) - { - // try to fetch the file - if ($this->_use_curl) { - $connection = $this->_getCurlInitialization($url); - $this->_curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1); - $this->_curl_setopt($connection, CURLOPT_HEADER, 0); - // no SSL validation for downloading media - $this->_curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 1); - $this->_curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 2); - $this->_curl_setopt($connection, CURLOPT_TIMEOUT_MS, $this->_timeouts['remote']); - $this->_curl_setopt($connection, CURLOPT_CONNECTTIMEOUT_MS, $this->_timeouts['remote'] / 2); - // find files that have been redirected - $this->_curl_setopt($connection, CURLOPT_FOLLOWLOCATION, true); - // process compressed images - $this->_curl_setopt($connection, CURLOPT_ENCODING, 'gzip,deflate,sdch'); - $result = $this->_curl_exec($connection); - if ($result !== false - && $this->_curl_getinfo($connection, CURLINFO_HTTP_CODE) === 200 - ) { - return $result; - } - throw new CodebirdMediaException('Downloading a remote media file failed.'); - return false; - } - // no cURL - $contextOptions = [ - 'http' => [ - 'method' => 'GET', - 'protocol_version' => '1.1', - 'timeout' => $this->_timeouts['remote'] - ], - 'ssl' => [ - 'verify_peer' => false - ] - ]; - list($result, $headers) = $this->_getNoCurlInitialization($url, $contextOptions); - if ($result !== false - && preg_match('/^HTTP\/\d\.\d 200 OK$/', $headers[0]) - ) { - return $result; - } - throw new CodebirdMediaException('Downloading a remote media file failed.'); - return false; - } - - /** - * Detects if API call should use media endpoint - * - * @param string $method The API method to call - * - * @return bool Whether the method is defined in media API - */ - protected function _detectMedia($method) { - $medias = [ - 'media/metadata/create', - 'media/upload' - ]; - return in_array($method, $medias); - } - - /** - * Detects if API call should use JSON body - * - * @param string $method_template The API method to call - * - * @return bool Whether the method is defined as accepting JSON body - */ - protected function _detectJsonBody($method_template) { - $json_bodies = [ - 'ads/batch/accounts/:account_id/campaigns', - 'ads/batch/accounts/:account_id/line_items', - 'ads/batch/accounts/:account_id/targeting_criteria', - 'ads/sandbox/batch/accounts/:account_id/campaigns', - 'ads/sandbox/batch/accounts/:account_id/line_items', - 'ads/sandbox/batch/accounts/:account_id/targeting_criteria', - 'collections/entries/curate', - 'custom_profiles/new', - 'direct_messages/events/new', - 'direct_messages/indicate_typing', - 'direct_messages/mark_read', - 'direct_messages/welcome_messages/new', - 'direct_messages/welcome_messages/rules/new', - 'direct_messages/welcome_messages/update', - 'media/metadata/create', - 'tweets/search/30day/:env', - 'tweets/search/fullarchive/:env' - ]; - return in_array($method_template, $json_bodies); - } - - /** - * Detects if API call should use binary body - * - * @param string $method_template The API method to call - * - * @return bool Whether the method is defined as accepting binary body - */ - protected function _detectBinaryBody($method_template) { - $binary = [ - 'ton/bucket/:bucket', - 'ton/bucket/:bucket?resumable=true', - 'ton/bucket/:bucket/:file?resumable=true&resumeId=:resumeId' - ]; - return in_array($method_template, $binary); - } - - /** - * Detects if API call should use streaming endpoint, and if yes, which one - * - * @param string $method The API method to call - * - * @return string|false Variant of streaming API to be used - */ - protected function _detectStreaming($method) { - $streamings = [ - 'public' => [ - 'statuses/sample', - 'statuses/filter' - ] - ]; - foreach ($streamings as $key => $values) { - if (in_array($method, $values)) { - return $key; - } - } - - return false; - } - - /** - * Builds the complete API endpoint url - * - * @param string $method The API method to call - * @param string $method_template The API method to call - * - * @return string The URL to send the request to - */ - protected function _getEndpoint($method, $method_template) - { - $url = self::$_endpoints['rest'] . $method . '.json'; - if (substr($method_template, 0, 5) === 'oauth') { - $url = self::$_endpoints['oauth'] . $method; - } elseif ($this->_detectMedia($method_template)) { - $url = self::$_endpoints['media'] . $method . '.json'; - } elseif ($method_template === 'statuses/oembed') { - $url = self::$_endpoints['publish'] . 'oembed'; - } elseif ($variant = $this->_detectStreaming($method_template)) { - $url = self::$_endpoints['streaming'][$variant] . $method . '.json'; - } elseif ($this->_detectBinaryBody($method_template)) { - $url = self::$_endpoints['ton'] . $method; - } elseif (substr($method_template, 0, 12) === 'ads/sandbox/') { - $url = self::$_endpoints['ads']['sandbox'] . substr($method, 12); - } elseif (substr($method_template, 0, 4) === 'ads/') { - $url = self::$_endpoints['ads']['production'] . substr($method, 4); - } - return $url; - } - - /** - * Calls the API - * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $method The API method to call - * @param string $method_template The API method template to call - * @param array optional $params The parameters to send along - * @param bool optional $multipart Whether to use multipart/form-data - * @param bool optional $app_only_auth Whether to use app-only bearer authentication - * - * @return string The API reply, encoded in the set return_format - * @throws \Exception - */ - - protected function _callApi($httpmethod, $method, $method_template, $params = [], $multipart = false, $app_only_auth = false) - { - if (! $app_only_auth - && $this->_oauth_token === null - && substr($method, 0, 5) !== 'oauth' - ) { - throw new CodebirdCredentialsException('To call this API, the OAuth access token must be set.'); - } - // use separate API access for streaming API - if ($this->_detectStreaming($method) !== false) { - return $this->_callApiStreaming($httpmethod, $method, $method_template, $params, $app_only_auth); - } - - if ($this->_use_curl) { - return $this->_callApiCurl($httpmethod, $method, $method_template, $params, $multipart, $app_only_auth); - } - return $this->_callApiNoCurl($httpmethod, $method, $method_template, $params, $multipart, $app_only_auth); - } - - /** - * Calls the API using cURL - * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $method The API method to call - * @param string $method_template The API method template to call - * @param array optional $params The parameters to send along - * @param bool optional $multipart Whether to use multipart/form-data - * @param bool optional $app_only_auth Whether to use app-only bearer authentication - * - * @return string The API reply, encoded in the set return_format - * @throws \Exception - */ - - protected function _callApiCurl( - $httpmethod, $method, $method_template, $params = [], $multipart = false, $app_only_auth = false - ) - { - list ($authorization, $url, $params, $request_headers) - = $this->_callApiPreparations( - $httpmethod, $method, $method_template, $params, $multipart, $app_only_auth - ); - - $connection = $this->_getCurlInitialization($url); - $request_headers[] = 'Authorization: ' . $authorization; - $request_headers[] = 'Expect:'; - - if ($httpmethod !== 'GET') { - $this->_curl_setopt($connection, CURLOPT_POST, 1); - $this->_curl_setopt($connection, CURLOPT_POSTFIELDS, $params); - if (in_array($httpmethod, ['POST', 'PUT', 'DELETE'])) { - $this->_curl_setopt($connection, CURLOPT_CUSTOMREQUEST, $httpmethod); - } - } - - $this->_curl_setopt($connection, CURLOPT_HTTPHEADER, $request_headers); - $this->_curl_setopt($connection, CURLOPT_TIMEOUT_MS, $this->_timeouts['request']); - $this->_curl_setopt($connection, CURLOPT_CONNECTTIMEOUT_MS, $this->_timeouts['connect']); - - $result = $this->_curl_exec($connection); - - // catch request errors - if ($result === false) { - throw new \Exception('Request error for API call: ' . $this->_curl_error($connection)); - } - - // certificate validation results - $validation_result = $this->_curl_errno($connection); - $this->_validateSslCertificate($validation_result); - - $httpstatus = $this->_curl_getinfo($connection, CURLINFO_HTTP_CODE); - list($headers, $reply) = $this->_parseApiHeaders($result); - // TON API & redirects - $reply = $this->_parseApiReplyPrefillHeaders($headers, $reply); - $reply = $this->_parseApiReply($reply); - $rate = $this->_getRateLimitInfo($headers); - - $reply = $this->_appendHttpStatusAndRate($reply, $httpstatus, $rate); - return $reply; - } - - /** - * Calls the API without cURL - * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $method The API method to call - * @param string $method_template The API method template to call - * @param array optional $params The parameters to send along - * @param bool optional $multipart Whether to use multipart/form-data - * @param bool optional $app_only_auth Whether to use app-only bearer authentication - * - * @return string The API reply, encoded in the set return_format - * @throws \Exception - */ - - protected function _callApiNoCurl( - $httpmethod, $method, $method_template, $params = [], $multipart = false, $app_only_auth = false - ) - { - list ($authorization, $url, $params, $request_headers) - = $this->_callApiPreparations( - $httpmethod, $method, $method_template, $params, $multipart, $app_only_auth - ); - - $hostname = parse_url($url, PHP_URL_HOST); - if ($hostname === false) { - throw new CodebirdEndpointException('Incorrect API endpoint host.'); - } - - $request_headers[] = 'Authorization: ' . $authorization; - $request_headers[] = 'Accept: */*'; - $request_headers[] = 'Connection: Close'; - if ($httpmethod !== 'GET' && ! $multipart) { - $request_headers[] = 'Content-Type: application/x-www-form-urlencoded'; - } - - $contextOptions = [ - 'http' => [ - 'method' => $httpmethod, - 'protocol_version' => '1.1', - 'header' => implode("\r\n", $request_headers), - 'timeout' => $this->_timeouts['request'] / 1000, - 'content' => in_array($httpmethod, ['POST', 'PUT']) ? $params : null, - 'ignore_errors' => true - ] - ]; - - list($reply, $headers) = $this->_getNoCurlInitialization($url, $contextOptions, $hostname); - $result = ''; - foreach ($headers as $header) { - $result .= $header . "\r\n"; - } - $result .= "\r\n" . $reply; - - // find HTTP status - $httpstatus = $this->_getHttpStatusFromHeaders($headers); - list($headers, $reply) = $this->_parseApiHeaders($result); - // TON API & redirects - $reply = $this->_parseApiReplyPrefillHeaders($headers, $reply); - $reply = $this->_parseApiReply($reply); - $rate = $this->_getRateLimitInfo($headers); - - $reply = $this->_appendHttpStatusAndRate($reply, $httpstatus, $rate); - return $reply; - } - - /** - * Do preparations to make the API GET call - * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $url The URL to call - * @param array $params The parameters to send along - * @param bool $app_only_auth Whether to use app-only bearer authentication - * - * @return string[] (string authorization, string url) - */ - protected function _callApiPreparationsGet( - $httpmethod, $url, $params, $app_only_auth - ) { - return [ - $app_only_auth ? null : $this->_sign($httpmethod, $url, $params), - json_encode($params) === '[]' ? $url : $url . '?' . http_build_query($params) - ]; - } - - /** - * Do preparations to make the API POST call - * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $url The URL to call - * @param string $method The API method to call - * @param string $method_template The API method template to call - * @param array $params The parameters to send along - * @param bool $multipart Whether to use multipart/form-data - * @param bool $app_only_auth Whether to use app-only bearer authentication - * - * @return array (string authorization, array params, array request_headers) - */ - protected function _callApiPreparationsPost( - $httpmethod, $url, $method, $method_template, $params, $multipart, $app_only_auth - ) { - $authorization = null; - $request_headers = []; - if ($multipart) { - if (! $app_only_auth) { - $authorization = $this->_sign($httpmethod, $url, []); - } - $params = $this->_buildMultipart($method, $params); - $first_newline = strpos($params, "\r\n"); - $multipart_boundary = substr($params, 2, $first_newline - 2); - $request_headers[] = 'Content-Type: multipart/form-data; boundary=' - . $multipart_boundary; - } elseif ($this->_detectJsonBody($method_template)) { - $authorization = $this->_sign($httpmethod, $url, []); - $params = json_encode($params); - $request_headers[] = 'Content-Type: application/json'; - } elseif ($this->_detectBinaryBody($method_template)) { - // transform parametric headers to real headers - foreach ([ - 'Content-Length', - 'Content-Range', - 'Content-Type', - 'X-TON-Content-Type', - 'X-TON-Content-Length', - 'X-TON-Expires' - ] as $key) { - if (isset($params[$key])) { - $request_headers[] = $key . ': ' . $params[$key]; - unset($params[$key]); - } - } - $sign_params = []; - parse_str(parse_url($method, PHP_URL_QUERY), $sign_params); - if ($sign_params === null) { - $sign_params = []; - } - $authorization = $this->_sign($httpmethod, $url, $sign_params); - if (isset($params['media'])) { - $params = $this->_buildBinaryBody($params['media']); - } else { - // resumable upload - $params = []; - } - } else { - // check for possible files in non-multipart methods - foreach ($params as $key => $value) { - $data = $this->_checkForFiles($method_template, $key, $value); - if ($data !== false) { - $params[$key] = base64_encode($data); - } - } - if (! $app_only_auth) { - $authorization = $this->_sign($httpmethod, $url, $params); - } - $params = http_build_query($params); - } - return [$authorization, $params, $request_headers]; - } - - /** - * Appends HTTP status and rate limiting info to the reply - * - * @param array|object|string $reply The reply to append to - * @param string $httpstatus The HTTP status code to append - * @param mixed $rate The rate limiting info to append - */ - protected function _appendHttpStatusAndRate($reply, $httpstatus, $rate) - { - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - $reply['httpstatus'] = $httpstatus; - $reply['rate'] = $rate; - break; - case CODEBIRD_RETURNFORMAT_OBJECT: - $reply->httpstatus = $httpstatus; - $reply->rate = $rate; - break; - case CODEBIRD_RETURNFORMAT_JSON: - $reply = $this->_json_decode($reply); - $reply->httpstatus = $httpstatus; - $reply->rate = $rate; - $reply = json_encode($reply); - break; - } - return $reply; - } - - /** - * Get Bearer authorization string - * - * @return string authorization - * @throws \Exception - */ - protected function _getBearerAuthorization() - { - if (self::$_consumer_key === null - && self::$_bearer_token === null - ) { - throw new CodebirdCredentialsException('To make an app-only auth API request, consumer key or bearer token must be set.'); - } - // automatically fetch bearer token, if necessary - if (self::$_bearer_token === null) { - $this->oauth2_token(); - } - return 'Bearer ' . self::$_bearer_token; - } - - /** - * Do preparations to make the API call - * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $method The API method to call - * @param string $method_template The API method template to call - * @param array $params The parameters to send along - * @param bool $multipart Whether to use multipart/form-data - * @param bool $app_only_auth Whether to use app-only bearer authentication - * - * @return array (string authorization, string url, array params, array request_headers) - */ - protected function _callApiPreparations( - $httpmethod, $method, $method_template, $params, $multipart, $app_only_auth - ) - { - $url = $this->_getEndpoint($method, $method_template); - $request_headers = []; - if ($httpmethod === 'GET') { - // GET - list ($authorization, $url) = - $this->_callApiPreparationsGet($httpmethod, $url, $params, $app_only_auth); - } else { - // POST - list ($authorization, $params, $request_headers) = - $this->_callApiPreparationsPost($httpmethod, $url, $method, $method_template, $params, $multipart, $app_only_auth); - } - if ($app_only_auth) { - $authorization = $this->_getBearerAuthorization(); - } - - return [ - $authorization, $url, $params, $request_headers - ]; - } - - /** - * Calls the streaming API - * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $method The API method to call - * @param string $method_template The API method template to call - * @param array optional $params The parameters to send along - * @param bool optional $app_only_auth Whether to use app-only bearer authentication - * - * @return void - * @throws \Exception - */ - - protected function _callApiStreaming( - $httpmethod, $method, $method_template, $params = [], $app_only_auth = false - ) - { - if ($this->_streaming_callback === null) { - throw new \Exception('Set streaming callback before consuming a stream.'); - } - - $params['delimited'] = 'length'; - - list ($authorization, $url, $params, $request_headers) - = $this->_callApiPreparations( - $httpmethod, $method, $method_template, $params, false, $app_only_auth - ); - - $hostname = parse_url($url, PHP_URL_HOST); - $path = parse_url($url, PHP_URL_PATH); - $query = parse_url($url, PHP_URL_QUERY); - if ($hostname === false) { - throw new CodebirdEndpointException('Incorrect API endpoint host.'); - } - - $request_headers[] = 'Authorization: ' . $authorization; - $request_headers[] = 'Accept: */*'; - if ($httpmethod !== 'GET') { - $request_headers[] = 'Content-Type: application/x-www-form-urlencoded'; - $request_headers[] = 'Content-Length: ' . strlen($params); - } - - $errno = 0; - $errstr = ''; - $connection = stream_socket_client( - 'ssl://' . $hostname . ':443', - $errno, $errstr, - $this->_timeouts['connect'], - STREAM_CLIENT_CONNECT - ); - - // send request - $request = $httpmethod . ' ' - . $path . ($query ? '?' . $query : '') . " HTTP/1.1\r\n" - . 'Host: ' . $hostname . "\r\n" - . implode("\r\n", $request_headers) - . "\r\n\r\n"; - if ($httpmethod !== 'GET') { - $request .= $params; - } - fputs($connection, $request); - stream_set_blocking($connection, 0); - stream_set_timeout($connection, 0); - - // collect headers - do { - $result = stream_get_line($connection, 1048576, "\r\n\r\n"); - } while(!$result); - $headers = explode("\r\n", $result); - - // find HTTP status - $httpstatus = $this->_getHttpStatusFromHeaders($headers); - list($headers,) = $this->_parseApiHeaders($result); - $rate = $this->_getRateLimitInfo($headers); - - if ($httpstatus !== '200') { - $reply = [ - 'httpstatus' => $httpstatus, - 'rate' => $rate - ]; - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - return $reply; - case CODEBIRD_RETURNFORMAT_OBJECT: - return (object) $reply; - case CODEBIRD_RETURNFORMAT_JSON: - return json_encode($reply); - } - } - - $signal_function = function_exists('pcntl_signal_dispatch'); - $data = ''; - $last_message = $this->_time(); - $message_length = 0; - - while (!feof($connection)) { - // call signal handlers, if any - if ($signal_function) { - pcntl_signal_dispatch(); - } - $connection_array = [$connection]; - $write = $except = null; - if (false === ($num_changed_streams = stream_select($connection_array, $write, $except, 0, 200000))) { - break; - } elseif ($num_changed_streams === 0) { - if ($this->_time() - $last_message >= 1) { - // deliver empty message, allow callback to cancel stream - $cancel_stream = $this->_deliverStreamingMessage(null); - if ($cancel_stream) { - break; - } - $last_message = $this->_time(); - } - continue; - } - $chunk_length = fgets($connection, 10); - if ($chunk_length === '' || !$chunk_length = hexdec($chunk_length)) { - continue; - } - - $chunk = ''; - do { - $chunk .= fread($connection, $chunk_length); - $chunk_length -= strlen($chunk); - } while($chunk_length > 0); - - if(0 === $message_length) { - $message_length = (int) strstr($chunk, "\r\n", true); - if ($message_length) { - $chunk = substr($chunk, strpos($chunk, "\r\n") + 2); - } else { - continue; - } - - $data = $chunk; - } else { - $data .= $chunk; - } - - if (strlen($data) < $message_length) { - continue; - } - - $reply = $this->_parseApiReply($data); - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - $reply['httpstatus'] = $httpstatus; - $reply['rate'] = $rate; - break; - case CODEBIRD_RETURNFORMAT_OBJECT: - $reply->httpstatus = $httpstatus; - $reply->rate = $rate; - break; - } - - $cancel_stream = $this->_deliverStreamingMessage($reply); - if ($cancel_stream) { - fclose($connection); - break; - } - - $data = ''; - $message_length = 0; - $last_message = $this->_time(); - } - - return; - } - - /** - * Calls streaming callback with received message - * - * @param string|array|object message - * - * @return bool Whether to cancel streaming - */ - protected function _deliverStreamingMessage($message) - { - return call_user_func($this->_streaming_callback, $message); - } - - /** - * Parses the API reply to separate headers from the body - * - * @param string $reply The actual raw HTTP request reply - * - * @return array (headers, reply) - */ - protected function _parseApiHeaders($reply) { - // split headers and body - $headers = []; - $reply = explode("\r\n\r\n", $reply, 4); - - // check if using proxy - $proxy_tester = strtolower(substr($reply[0], 0, 35)); - if ($proxy_tester === 'http/1.0 200 connection established' - || $proxy_tester === 'http/1.1 200 connection established' - ) { - array_shift($reply); - } - - $headers_array = explode("\r\n", $reply[0]); - foreach ($headers_array as $header) { - $header_array = explode(': ', $header, 2); - $key = $header_array[0]; - $value = ''; - if (count($header_array) > 1) { - $value = $header_array[1]; - } - $headers[$key] = $value; - } - - if (count($reply) > 1) { - $reply = $reply[1]; - } else { - $reply = ''; - } - - return [$headers, $reply]; - } - - /** - * Parses the API headers to return Location and Ton API headers - * - * @param array $headers The headers list - * @param string $reply The actual HTTP body - * - * @return string $reply - */ - protected function _parseApiReplyPrefillHeaders($headers, $reply) - { - if ($reply === '' && (isset($headers['Location']) || isset($headers['location']))) { - $reply = [ - 'Location' => isset($headers['Location']) ? $headers['Location'] : $headers['location'] - ]; - if (isset($headers['X-TON-Min-Chunk-Size'])) { - $reply['X-TON-Min-Chunk-Size'] = $headers['X-TON-Min-Chunk-Size']; - } - if (isset($headers['X-TON-Max-Chunk-Size'])) { - $reply['X-TON-Max-Chunk-Size'] = $headers['X-TON-Max-Chunk-Size']; - } - if (isset($headers['Range'])) { - $reply['Range'] = $headers['Range']; - } - $reply = json_encode($reply); - } - return $reply; - } - - /** - * Parses the API reply to encode it in the set return_format - * - * @param string $reply The actual HTTP body, JSON-encoded or URL-encoded - * - * @return array|string|object The parsed reply - */ - protected function _parseApiReply($reply) - { - $need_array = $this->_return_format === CODEBIRD_RETURNFORMAT_ARRAY; - if ($reply === '[]') { - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - return []; - case CODEBIRD_RETURNFORMAT_JSON: - return '{}'; - case CODEBIRD_RETURNFORMAT_OBJECT: - return new \stdClass; - } - } - if (! $parsed = $this->_json_decode($reply, $need_array)) { - if ($reply) { - // assume query format - $reply = explode('&', $reply); - foreach ($reply as $element) { - if (stristr($element, '=')) { - list($key, $value) = explode('=', $element, 2); - $parsed[$key] = $value; - } else { - $parsed['message'] = $element; - } - } - } - $reply = json_encode($parsed); - } - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - return $parsed; - case CODEBIRD_RETURNFORMAT_JSON: - return $reply; - case CODEBIRD_RETURNFORMAT_OBJECT: - return (object) $parsed; - } - return $parsed; - } - -} - -/** - * Catch errors when authtoken is expired - */ -class CodebirdAuthException extends \Exception { - -} - - -/** - * Catch error when credentials are not set correclty - */ -class CodebirdCredentialsException extends \Exception { - -} - -/** - * Catch errors r elated to bad endpoi ts - */ -class CodebirdEndpointException extends \Exception { - -} - -/* - * Catch errors relatedto media - */ - -class CodebirdMediaException extends \Exception { - -} - diff --git a/twitter/vendor/jublonet/codebird-php/test/README b/twitter/vendor/jublonet/codebird-php/test/README deleted file mode 100644 index fd344c4a..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/README +++ /dev/null @@ -1,16 +0,0 @@ -The following methods are not covered by unit tests yet: - -_getMultipartRequestFromParams -_checkForFiles -_buildMultipart -_buildBinaryBody - -_callApi -_callApiCurl -_callApiNoCurl -_callApiPreparationsGet -_callApiPreparationsPost -_callApiPreparations - -_callApiStreaming -_deliverStreamingMessage diff --git a/twitter/vendor/jublonet/codebird-php/test/codebirdm.php b/twitter/vendor/jublonet/codebird-php/test/codebirdm.php deleted file mode 100644 index 6cbae4a5..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/codebirdm.php +++ /dev/null @@ -1,204 +0,0 @@ - - * @copyright 2010-2016 Jublo Solutions - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Codebird testing class with mock data source - * - * @package codebird-test - */ -class CodebirdM extends CodebirdT -{ - /** - * Stores the request data - */ - protected $_requests = []; - - /** - * Mock API replies - */ - protected static $_mock_replies = [ - 'default' => [ - 'httpstatus' => 404, - 'reply' => "HTTP/1.1 404 Not Found\r\ncontent-length: 68\r\ncontent-type: application/json;charset=utf-8\r\ndate: Sun, 06 Dec 2015 14:43:28 GMT\r\nserver: tsa_b\r\nset-cookie: guest_id=v1%3A144941300885288055; Domain=.twitter.com; Path=/; Expires=Tue, 05-Dec-2017 14:43:28 UTC\r\nstrict-transport-security: max-age=631138519\r\nx-connection-hash: 12218aef9e9757609afb08e661fa3b9b\r\nx-response-time: 2\r\n\r\n{\"errors\":[{\"message\":\"Sorry, that page does not exist\",\"code\":34}]}" - ], - 'proxy1' => [ - 'httpstatus' => 404, - 'reply' => "HTTP/1.1 200 Connection Established\r\n\r\nHTTP/1.1 404 Not Found\r\ncontent-length: 68\r\ncontent-type: application/json;charset=utf-8\r\ndate: Sun, 06 Dec 2015 14:43:28 GMT\r\nserver: tsa_b\r\nset-cookie: guest_id=v1%3A144941300885288055; Domain=.twitter.com; Path=/; Expires=Tue, 05-Dec-2017 14:43:28 UTC\r\nstrict-transport-security: max-age=631138519\r\nx-connection-hash: 12218aef9e9757609afb08e661fa3b9b\r\nx-response-time: 2\r\n\r\n{\"errors\":[{\"message\":\"Sorry, that page does not exist\",\"code\":34}]}" - ], - 'GET http://www.example.org/found.txt' => [ - 'httpstatus' => 200, - 'reply' => "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nA test file." - ], - 'GET https://api.twitter.com/1.1/users/show.json?screen_name=TwitterAPI' => [ - 'httpstatus' => 200, - 'reply' => "HTTP/1.1 200 OK\r\ncache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0\r\ncontent-disposition: attachment; filename=json.json\r\ncontent-length: 2801\r\ncontent-type: application/json;charset=utf-8\r\ndate: Sun, 06 Dec 2015 14:55:46 GMT\r\nexpires: Tue, 31 Mar 1981 05:00:00 GMT\r\nlast-modified: Sun, 06 Dec 2015 14:55:46 GMT\r\npragma: no-cache\r\nserver: tsa_b\r\nset-cookie: lang=en-gb; Path=/\r\nset-cookie: guest_id=v1%3A144941374684866365; Domain=.twitter.com; Path=/; Expires=Tue, 05-Dec-2017 14:55:46 UTC\r\nstatus: 200 OK\r\nstrict-transport-security: max-age=631138519\r\nx-access-level: read-write-directmessages\r\nx-connection-hash: 1906b689730b92318bccf65b496f74d0\r\nx-content-type-options: nosniff\r\nx-frame-options: SAMEORIGIN\r\nx-rate-limit-limit: 181\r\nx-rate-limit-remaining: 177\r\nx-rate-limit-reset: 1449414513\r\nx-response-time: 44\r\nx-transaction: 663cc05c64857ba0\r\nx-twitter-response-tags: BouncerCompliant\r\nx-xss-protection: 1; mode=block\r\n\r\n{\"id\":6253282,\"id_str\":\"6253282\",\"name\":\"Twitter API\",\"screen_name\":\"twitterapi\",\"location\":\"San Francisco, CA\",\"profile_location\":null,\"description\":\"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\",\"url\":\"http:\/\/t.co\/78pYTvWfJd\",\"entities\":{\"url\":{\"urls\":[{\"url\":\"http:\/\/t.co\/78pYTvWfJd\",\"expanded_url\":\"http:\/\/dev.twitter.com\",\"display_url\":\"dev.twitter.com\",\"indices\":[0,22]}]},\"description\":{\"urls\":[]}},\"protected\":false,\"followers_count\":4993679,\"friends_count\":48,\"listed_count\":13001,\"created_at\":\"Wed May 23 06:01:13 +0000 2007\",\"favourites_count\":27,\"utc_offset\":-28800,\"time_zone\":\"Pacific Time (US & Canada)\",\"geo_enabled\":true,\"verified\":true,\"statuses_count\":3553,\"lang\":\"en\",\"status\":{\"created_at\":\"Tue Nov 24 08:56:07 +0000 2015\",\"id\":669077021138493440,\"id_str\":\"669077021138493440\",\"text\":\"Additional 64-bit entity ID migration coming in Feb 2016 https:\/\/t.co\/eQIGvw1rsJ\",\"source\":\"\u003ca href=\\\"https:\/\/about.twitter.com\/products\/tweetdeck\\\" rel=\\\"nofollow\\\"\u003eTweetDeck\u003c\/a\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweet_count\":67,\"favorite_count\":79,\"entities\":{\"hashtags\":[],\"symbols\":[],\"user_mentions\":[],\"urls\":[{\"url\":\"https:\/\/t.co\/eQIGvw1rsJ\",\"expanded_url\":\"https:\/\/twittercommunity.com\/t\/migration-of-twitter-core-entities-to-64-bit-ids\/56881\",\"display_url\":\"twittercommunity.com\/t\/migration-of\u2026\",\"indices\":[57,80]}]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"contributors_enabled\":false,\"is_translator\":false,\"is_translation_enabled\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\/\/pbs.twimg.com\/profile_background_images\/656927849\/miyt9dpjz77sc0w3d4vj.png\",\"profile_background_image_url_https\":\"https:\/\/pbs.twimg.com\/profile_background_images\/656927849\/miyt9dpjz77sc0w3d4vj.png\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\/\/pbs.twimg.com\/profile_images\/2284174872\/7df3h38zabcvjylnyfe3_normal.png\",\"profile_image_url_https\":\"https:\/\/pbs.twimg.com\/profile_images\/2284174872\/7df3h38zabcvjylnyfe3_normal.png\",\"profile_banner_url\":\"https:\/\/pbs.twimg.com\/profile_banners\/6253282\/1431474710\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"has_extended_profile\":false,\"default_profile\":false,\"default_profile_image\":false,\"following\":true,\"follow_request_sent\":false,\"notifications\":false}" - ], - 'POST https://api.twitter.com/oauth2/token' => [ - 'httpstatus' => 200, - 'reply' => "HTTP/1.1 200 OK\r\ncache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0\r\ncontent-disposition: attachment; filename=json.json\r\ncontent-length: 52\r\ncontent-type: application/json;charset=utf-8\r\ndate: Sun, 06 Dec 2015 15:53:02 GMT\r\nexpires: Tue, 31 Mar 1981 05:00:00 GMT\r\nlast-modified: Sun, 06 Dec 2015 15:53:01 GMT\r\nml: S\r\npragma: no-cache\r\nserver: tsa_b\r\nset-cookie: guest_id=v1%3A144941718194388038; Domain=.twitter.com; Path=/; Expires=Tue, 05-Dec-2017 15:53:02 UTC\r\nstatus: 200 OK\r\nstrict-transport-security: max-age=631138519\r\nx-connection-hash: 97f4d4e6a33433b477510d8c58a0b026\r\nx-content-type-options: nosniff\r\nx-frame-options: DENY\r\nx-response-time: 87\r\nx-transaction: 6a0e5e8144d7e6df\r\nx-tsa-request-body-time: 164\r\nx-twitter-response-tags: BouncerCompliant\r\nx-ua-compatible: IE=edge,chrome=1\r\nx-xss-protection: 1; mode=block\r\n\r\n{\"token_type\":\"bearer\",\"access_token\":\"VqiO0n2HrKE\"}" - ] - ]; - - /** - * Gets a mock cURL handle - * @param string $url the URL for the curl initialization - * @return string connection ID - */ - protected function _curl_init($url = null) - { - $request = [ - 'url' => $url, - CURLOPT_RETURNTRANSFER => false - ]; - $id = mt_rand(); - $this->_requests[$id] = $request; - - return $id; - } - - /** - * Sets mock cURL parameters - * @param string $id connection ID - * @param int $option cURL option to set - * @param mixed $value Value to set for the option - * @return bool - */ - protected function _curl_setopt($id, $option, $value) - { - if (!isset($this->_requests[$id])) { - return false; - } - - $this->_requests[$id][$option] = $value; - - return true; - } - - /** - * Executes mock cURL transfer - * @param string $id connection ID - * @return bool|string - */ - protected function _curl_exec($id) - { - if (!isset($this->_requests[$id])) { - return false; - } - - $request = $this->_requests[$id]; - $url = $this->_requests[$id]['url']; - $reply = self::$_mock_replies['default']; - - $httpmethod = 'GET'; - if (isset($request[CURLOPT_POST]) && $request[CURLOPT_POST]) { - $httpmethod = 'POST'; - } - if (isset($request[CURLOPT_CUSTOMREQUEST])) { - $httpmethod = $request[CURLOPT_CUSTOMREQUEST]; - } - - $index = $httpmethod . ' ' . $url; - - if (isset(self::$_mock_replies[$index])) { - $reply = self::$_mock_replies[$index]; - } - - $this->_requests[$id][CURLINFO_HTTP_CODE] = $reply['httpstatus']; - $this->_requests[$id]['reply'] = $reply['reply']; - - if (! $this->_requests[$id][CURLOPT_HEADER] - && stristr($reply['reply'], "\r\n\r\n") - ) { - $reply_parts = explode("\r\n\r\n", $reply['reply'], 2); - $reply['reply'] = $reply_parts[1]; - } - - if ($this->_requests[$id][CURLOPT_RETURNTRANSFER]) { - return $reply['reply']; - } - - return true; - } - - /** - * Gets cURL error - * @param string $id connection ID - * @return string - */ - protected function _curl_error($id) - { - return ''; - } - - /** - * Gets cURL error - * @param string $id connection ID - * @return int - */ - protected function _curl_errno($id) - { - return 0; - } - - /** - * Gets info about cURL connection - * @param string $id connection ID - * @param int $opt option to get - * @return mixed - */ - protected function _curl_getinfo($id, $opt = 0) - { - if (!isset($this->_requests[$id])) { - return false; - } - - $request = $this->_requests[$id]; - - if (!$opt) { - return [ - 'url' => $request['url'], - 'http_code' => $request[CURLINFO_HTTP_CODE] - ]; - } - - if (isset($request[$opt])) { - return $request[$opt]; - } - - return false; - } - - /** - * Gets fake time - * @return int Timestamp - */ - protected function _time() - { - return 1412345678; - } - - /** - * Gets fake time - * @param bool $get_as_float - * @return int Timestamp - */ - protected function _microtime($get_as_float = false) - { - if ($get_as_float) { - return 1412345678.777; - } - return '777 1412345678'; - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/codebirdt.php b/twitter/vendor/jublonet/codebird-php/test/codebirdt.php deleted file mode 100644 index dd54dfc4..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/codebirdt.php +++ /dev/null @@ -1,97 +0,0 @@ - - * @copyright 2010-2016 Jublo Solutions - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Codebird testing class - * - * @package codebird-test - */ -class CodebirdT extends Codebird -{ - /** - * Returns properties - * - * @param string $property The property to get - * - * @return mixed Property - */ - public function get($property) - { - if (property_exists($this, $property)) { - return $this->$property; - } - throw new \Exception('Property ' . $property . ' is not defined.'); - } - - /** - * Returns static properties - * - * @param string $property The property to get - * - * @return mixed Property - */ - public function getStatic($property) - { - if (property_exists($this, $property)) { - return static::$$property; - } - throw new \Exception('Static property ' . $property . ' is not defined.'); - } - - /** - * Calls methods - * - * @param string $property The property to get - * - * @return mixed Property - */ - public function call($method, $params = [], &$params2 = null) - { - $methods_byref = [ - '_mapFnToApiMethod', - '_mapFnInlineParams', - '_detectMethod' - ]; - if (in_array($method, $methods_byref)) { - return $this->$method($params, $params2); - } - if (method_exists($this, $method)) { - return call_user_func_array([$this, $method], $params); - } - throw new \Exception('Method ' . $method . ' is not defined.'); - } - - /** - * Calls methods - * - * @param string $property The property to get - * - * @return mixed Property - */ - public function callStatic($method, $params = []) - { - if (function_exists([self, $method])) { - return call_user_func_array([self, $method], $params); - } - throw new \Exception('Static method ' . $method . ' is not defined.'); - } - - /** - * Streaming callback test - */ - public static function streamingCallbackTest() - { - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/constant_tests.php b/twitter/vendor/jublonet/codebird-php/test/constant_tests.php deleted file mode 100644 index 2017e1c6..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/constant_tests.php +++ /dev/null @@ -1,40 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Constant tests - * - * @package codebird-test - */ -class Constant_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Tests if constants defined - */ - public function testConstants() - { - $constants = [ - 'CODEBIRD_RETURNFORMAT_OBJECT', - 'CODEBIRD_RETURNFORMAT_ARRAY', - 'CODEBIRD_RETURNFORMAT_JSON' - ]; - foreach ($constants as $constant) { - $this->assertTrue( - defined($constant), - $constant - ); - } - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/curl_tests.php b/twitter/vendor/jublonet/codebird-php/test/curl_tests.php deleted file mode 100644 index 3f49661b..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/curl_tests.php +++ /dev/null @@ -1,57 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * cURL tests - * - * @package codebird-test - */ -class Curl_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Initialise Codebird class - * - * @return \Codebird\Codebird The Codebird class - */ - protected function getCB() - { - $cb = new CodebirdM(); - - return $cb; - } - - /** - * Tests _getCurlInitialization - */ - public function testGetCurlInitialization() - { - $cb = $this->getCB(); - $id = $cb->call('_getCurlInitialization', ['https://test']); - $this->assertEquals( - [ - 'url' => 'https://test', - CURLOPT_RETURNTRANSFER => 1, - CURLOPT_FOLLOWLOCATION => 0, - CURLOPT_HEADER => 1, - CURLOPT_SSL_VERIFYPEER => 1, - CURLOPT_SSL_VERIFYHOST => 2, - CURLOPT_CAINFO => substr(__DIR__, 0, -strlen(basename(__DIR__))) . 'src/cacert.pem', - CURLOPT_USERAGENT => 'codebird-php/' . $cb->getStatic('_version') - . ' +https://github.com/jublonet/codebird-php' - ], - $cb->get('_requests')[$id] - ); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/detection_tests.php b/twitter/vendor/jublonet/codebird-php/test/detection_tests.php deleted file mode 100644 index 9114a2d7..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/detection_tests.php +++ /dev/null @@ -1,288 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Detection tests - * - * @package codebird-test - */ -class Detection_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Initialise Codebird class - * - * @return \Codebird\Codebird The Codebird class - */ - protected function getCB() - { - $cb = new CodebirdM(); - - return $cb; - } - - /** - * Tests _detectMethod - * @expectedException \Exception - * @expectedExceptionMessage Can't find HTTP method to use for "non-existent". - */ - public function testDetectMethod1() - { - $cb = $this->getCB(); - $params = []; - $cb->call('_detectMethod', 'non-existent', $params); - } - - /** - * Tests _detectMethod - */ - public function testDetectMethod2() - { - $cb = $this->getCB(); - - // forced httpmethod - $params = ['httpmethod' => 'DELETE']; - $this->assertEquals( - 'DELETE', - $cb->call('_detectMethod', 'doesnt-matter', $params) - ); - - // normal detection - $params = []; - $post = ['httpmethod' => 'POST']; - $this->assertEquals('GET', $cb->call('_detectMethod', 'search/tweets', $params)); - $this->assertEquals('POST', $cb->call('_detectMethod', 'statuses/update', $params)); - $this->assertEquals('POST', $cb->call('_detectMethod', 'ads/sandbox/accounts', $post)); - $this->assertEquals( - 'PUT', - $cb->call( - '_detectMethod', - 'ton/bucket/:bucket/:file?resumable=true&resumeId=:resumeId', - $params - ) - ); - - // parameter-based detection - $this->assertEquals('GET', $cb->call('_detectMethod', 'account/settings', $params)); - $params = ['test' => 12]; - $this->assertEquals('POST', $cb->call('_detectMethod', 'account/settings', $params)); - - $params = []; - $this->assertEquals('POST', $cb->call('_detectMethod', 'media/upload', $params)); - $params = ['command' => 'STATUS']; - $this->assertEquals('GET', $cb->call('_detectMethod', 'media/upload', $params)); - - $httpmethods_by_param = [ - 'POST' => [ - 'campaign_id' => [ - 'ads/accounts/:account_id/line_items', - 'ads/sandbox/accounts/:account_id/line_items' - ], - 'name' => [ - 'ads/accounts/:account_id/app_lists', - 'ads/accounts/:account_id/campaigns', - 'ads/accounts/:account_id/cards/app_download', - 'ads/accounts/:account_id/cards/image_app_download', - 'ads/accounts/:account_id/cards/image_conversation', - 'ads/accounts/:account_id/cards/lead_gen', - 'ads/accounts/:account_id/cards/video_app_download', - 'ads/accounts/:account_id/cards/video_conversation', - 'ads/accounts/:account_id/cards/website', - 'ads/accounts/:account_id/tailored_audiences', - 'ads/accounts/:account_id/web_event_tags', - 'ads/sandbox/accounts/:account_id/app_lists', - 'ads/sandbox/accounts/:account_id/campaigns', - 'ads/sandbox/accounts/:account_id/cards/app_download', - 'ads/sandbox/accounts/:account_id/cards/image_app_download', - 'ads/sandbox/accounts/:account_id/cards/image_conversation', - 'ads/sandbox/accounts/:account_id/cards/lead_gen', - 'ads/sandbox/accounts/:account_id/cards/video_app_download', - 'ads/sandbox/accounts/:account_id/cards/video_conversation', - 'ads/sandbox/accounts/:account_id/cards/website', - 'ads/sandbox/accounts/:account_id/tailored_audiences', - 'ads/sandbox/accounts/:account_id/web_event_tags' - ], - 'tailored_audience_id' => [ - 'ads/accounts/:account_id/tailored_audience_changes', - 'ads/sandbox/accounts/:account_id/tailored_audience_changes' - ], - 'targeting_value' => [ - 'ads/accounts/:account_id/targeting_criteria', - 'ads/sandbox/accounts/:account_id/targeting_criteria' - ], - 'tweet_ids' => [ - 'ads/accounts/:account_id/promoted_tweets', - 'ads/sandbox/accounts/:account_id/promoted_tweets' - ], - 'user_id' => [ - 'ads/accounts/:account_id/promoted_accounts', - 'ads/sandbox/accounts/:account_id/promoted_accounts' - ], - 'video_media_id' => [ - 'ads/accounts/:account_id/videos', - 'ads/sandbox/accounts/:account_id/videos' - ] - ], - 'PUT' => [ - 'name' => [ - 'ads/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/accounts/:account_id/cards/website/:card_id', - 'ads/sandbox/accounts/:account_id/cards/image_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/video_conversation/:card_id', - 'ads/sandbox/accounts/:account_id/cards/website/:card_id' - ] - ] - ]; - foreach ($httpmethods_by_param as $httpmethod => $methods_by_param) { - foreach ($methods_by_param as $param => $methods) { - foreach ($methods as $method) { - $params = []; - $this->assertEquals( - 'GET', - $cb->call('_detectMethod', $method, $params), - $method - ); - $params[$param] = '123'; - $this->assertEquals( - $httpmethod, - $cb->call('_detectMethod', $method, $params), - $method - ); - } - } - } - } - - /** - * Tests _detectMultipart - */ - public function testDetectMultipart() - { - $cb = $this->getCB(); - $this->assertFalse($cb->call('_detectMultipart', ['statuses/update'])); - $this->assertTrue($cb->call('_detectMultipart', ['media/upload'])); - } - - /** - * Tests _detectMedia - */ - public function testDetectMedia() - { - $cb = $this->getCB(); - $this->assertFalse($cb->call('_detectMedia', ['statuses/update'])); - $this->assertTrue($cb->call('_detectMedia', ['media/upload'])); - } - - /** - * Tests _detectJsonBody - */ - public function testDetectJsonBody() - { - $cb = $this->getCB(); - $this->assertFalse($cb->call('_detectJsonBody', ['statuses/update'])); - $this->assertTrue($cb->call('_detectJsonBody', ['collections/entries/curate'])); - $this->assertTrue($cb->call('_detectJsonBody', ['ads/batch/accounts/:account_id/targeting_criteria'])); - } - - /** - * Tests _detectBinaryBody - */ - public function testDetectBinaryBody() - { - $cb = $this->getCB(); - $this->assertFalse($cb->call('_detectBinaryBody', ['statuses/update'])); - $this->assertTrue($cb->call('_detectBinaryBody', ['ton/bucket/:bucket'])); - $this->assertTrue($cb->call('_detectBinaryBody', ['ton/bucket/:bucket?resumable=true'])); - $this->assertTrue($cb->call( - '_detectBinaryBody', - ['ton/bucket/:bucket/:file?resumable=true&resumeId=:resumeId'] - )); - } - - /** - * Tests _detectStreaming - */ - public function testDetectStreaming() - { - $cb = $this->getCB(); - $this->assertFalse($cb->call('_detectStreaming', ['statuses/update'])); - $this->assertEquals('public', $cb->call('_detectStreaming', ['statuses/sample'])); - $this->assertEquals('public', $cb->call('_detectStreaming', ['statuses/filter'])); - } - - /** - * Tests _getEndpoint - */ - public function testGetEndpoint() - { - $cb = $this->getCB(); - $this->assertEquals( - 'https://api.twitter.com/1.1/statuses/update.json', - $cb->call('_getEndpoint', ['statuses/update', 'statuses/update']), - 'statuses/update' - ); - $this->assertEquals( - 'https://api.twitter.com/oauth/authenticate', - $cb->call('_getEndpoint', ['oauth/authenticate', 'oauth/authenticate']), - 'oauth/authenticate' - ); - $this->assertEquals( - 'https://api.twitter.com/oauth2/token', - $cb->call('_getEndpoint', ['oauth2/token', 'oauth2/token']), - 'oauth2/token' - ); - $this->assertEquals( - 'https://upload.twitter.com/1.1/media/upload.json', - $cb->call('_getEndpoint', ['media/upload', 'media/upload']), - 'media/upload' - ); - $this->assertEquals( - 'https://upload.twitter.com/1.1/media/metadata/create.json', - $cb->call('_getEndpoint', ['media/metadata/create', 'media/metadata/create']), - 'media/metadata/create' - ); - $this->assertEquals( - 'https://publish.twitter.com/oembed', - $cb->call('_getEndpoint', ['statuses/oembed', 'statuses/oembed']), - 'statuses/oembed' - ); - $this->assertEquals( - 'https://stream.twitter.com/1.1/statuses/filter.json', - $cb->call('_getEndpoint', ['statuses/filter', 'statuses/filter']), - 'statuses/filter' - ); - $this->assertEquals( - 'https://ton.twitter.com/1.1/ton/bucket/ta_partner', - $cb->call('_getEndpoint', ['ton/bucket/ta_partner', 'ton/bucket/:bucket']), - 'ton/bucket/:bucket' - ); - $this->assertEquals( - 'https://ads-api.twitter.com/2/accounts/1234/campaigns', - $cb->call( - '_getEndpoint', - ['ads/accounts/1234/campaigns', 'ads/accounts/:account_id/campaigns'] - ), - 'ads/accounts/:account_id/campaigns' - ); - $this->assertEquals( - 'https://ads-api-sandbox.twitter.com/2/accounts/1234/campaigns', - $cb->call( - '_getEndpoint', - ['ads/sandbox/accounts/1234/campaigns', 'ads/sandbox/accounts/:account_id/campaigns'] - ), - 'ads/sandbox/accounts/:account_id/campaigns' - ); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/environment_test.php b/twitter/vendor/jublonet/codebird-php/test/environment_test.php deleted file mode 100644 index b5d6d043..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/environment_test.php +++ /dev/null @@ -1,40 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Environment tests - * - * @package codebird-test - */ -class Environment_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Tests PHP version - */ - public function testPhpVersion() - { - $this->assertTrue( - version_compare('7.1', phpversion(), '<='), - 'Codebird requires PHP 7.1 or above' - ); - } - - /** - * Tests OpenSSL module availability - */ - public function testOpenssl() - { - $this->assertTrue(function_exists('openssl_open')); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/media_tests.php b/twitter/vendor/jublonet/codebird-php/test/media_tests.php deleted file mode 100644 index f4ab9261..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/media_tests.php +++ /dev/null @@ -1,56 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Media tests - * - * @package codebird-test - */ -class Media_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Initialise Codebird class - * - * @return \Codebird\Codebird The Codebird class - */ - protected function getCB() - { - Codebird::setConsumerKey('123', '456'); - $cb = new CodebirdM(); - - return $cb; - } - - /** - * Tests _fetchRemoteFile - */ - public function testFetchRemoteFile() - { - $cb = $this->getCB(); - $expected = $cb->call('_fetchRemoteFile', ['http://www.example.org/found.txt']); - $this->assertEquals($expected, 'A test file.'); - } - - /** - * Tests _fetchRemoteFile - * @expectedException \Exception - * @expectedExceptionMessage Downloading a remote media file failed. - */ - public function testFetchRemoteFile1() - { - $cb = $this->getCB(); - $reply = $cb->call('_fetchRemoteFile', ['http://www.example.org/not-found.jpg']); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/oauth_tests.php b/twitter/vendor/jublonet/codebird-php/test/oauth_tests.php deleted file mode 100644 index 086dfa2e..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/oauth_tests.php +++ /dev/null @@ -1,130 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * OAuth tests - * - * @package codebird-test - */ -class Oauth_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Initialise Codebird class - * - * @return \Codebird\Codebird The Codebird class - */ - protected function getCB() - { - Codebird::setConsumerKey('123', '456'); - $cb = new CodebirdM(); - - return $cb; - } - - /** - * Tests oauth_authenticate - */ - public function testOauthAuthenticate() - { - $cb = $this->getCB(); - $cb->setToken('123', '456'); - $this->assertEquals( - 'https://api.twitter.com/oauth/authenticate?oauth_token=123', - $cb->oauth_authenticate() - ); - $this->assertEquals( - 'https://api.twitter.com/oauth/authenticate?oauth_token=123&force_login=1', - $cb->oauth_authenticate($force_login = true) - ); - $this->assertEquals( - 'https://api.twitter.com/oauth/authenticate?' - . 'oauth_token=123&force_login=1&screen_name=TwitterAPI', - $cb->oauth_authenticate($force_login = true, $screen_name = 'TwitterAPI') - ); - $this->assertEquals( - 'https://api.twitter.com/oauth/authenticate?' - . 'oauth_token=123&screen_name=TwitterAPI', - $cb->oauth_authenticate($force_login = false, $screen_name = 'TwitterAPI') - ); - } - - /** - * Tests oauth_authorize - */ - public function testOauthAuthorize() - { - $cb = $this->getCB(); - $cb->setToken('123', '456'); - $this->assertEquals( - 'https://api.twitter.com/oauth/authorize?oauth_token=123', - $cb->oauth_authorize() - ); - $this->assertEquals( - 'https://api.twitter.com/oauth/authorize?oauth_token=123&force_login=1', - $cb->oauth_authorize($force_login = true) - ); - $this->assertEquals( - 'https://api.twitter.com/oauth/authorize?' - . 'oauth_token=123&force_login=1&screen_name=TwitterAPI', - $cb->oauth_authorize($force_login = true, $screen_name = 'TwitterAPI') - ); - $this->assertEquals( - 'https://api.twitter.com/oauth/authorize?' - . 'oauth_token=123&screen_name=TwitterAPI', - $cb->oauth_authorize($force_login = false, $screen_name = 'TwitterAPI') - ); - } - - /** - * Tests oauth2_token - */ - public function testOauth2Token() - { - $cb = $this->getCB(); - $expected = new \stdClass; - $expected->token_type = 'bearer'; - $expected->access_token = 'VqiO0n2HrKE'; - $expected->httpstatus = '200'; - $expected->rate = null; - $this->assertEquals($expected, $cb->oauth2_token()); - } - - /** - * Tests _getBearerAuthorization - * @expectedException \Exception - * @expectedExceptionMessage To make an app-only auth API request, consumer key or bearer token must be set. - */ - public function testGetBearerAuthorization1() - { - $cb = $this->getCB(); - Codebird::setConsumerKey(null, null); - $cb->setBearerToken(null); - $cb->call('_getBearerAuthorization', []); - } - - /** - * Tests _getBearerAuthorization - */ - public function testGetBearerAuthorization2() - { - $cb = $this->getCB(); - $cb->setBearerToken('12345678'); - $this->assertEquals('Bearer 12345678', $cb->call('_getBearerAuthorization', [])); - - // automatic fetching - $cb->setBearerToken(null); - $this->assertEquals('Bearer VqiO0n2HrKE', $cb->call('_getBearerAuthorization', [])); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/replyparse_tests.php b/twitter/vendor/jublonet/codebird-php/test/replyparse_tests.php deleted file mode 100644 index f316cd16..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/replyparse_tests.php +++ /dev/null @@ -1,361 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Reply parsing tests - * - * @package codebird-test - */ -class Replyparse_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Initialise Codebird class - * - * @return \Codebird\Codebird The Codebird class - */ - protected function getCB() - { - Codebird::setConsumerKey('123', '456'); - $cb = new CodebirdM(); - - return $cb; - } - - /** - * Tests _getHttpStatusFromHeaders - */ - public function testGetHttpStatusFromHeaders() - { - $cb = $this->getCB(); - $this->assertEquals( - '500', - $cb->call('_getHttpStatusFromHeaders', [['']]) - ); - $this->assertEquals( - '200', - $cb->call('_getHttpStatusFromHeaders', [ - ['HTTP/1.1 200 OK'], - ['X-Some-Data: test'] - ]) - ); - $this->assertEquals( - '404', - $cb->call('_getHttpStatusFromHeaders', [ - ['HTTP/1.1 404 Not Found'], - ['X-Some-Data: test'] - ]) - ); - } - - /** - * Tests _parseBearerReply - */ - public function testParseBearerReply() - { - $cb = $this->getCB(); - $cb->setBearerToken(null); - // get raw reply from mock collection - $reply = $cb->getStatic('_mock_replies')['POST https://api.twitter.com/oauth2/token']; - // check that bearer token is not yet set - $this->assertNull($cb->getStatic('_bearer_token')); - // parse it as object - $result = $cb->call( - '_parseBearerReply', - [ - $reply['reply'], - $reply['httpstatus'] - ] - ); - $expected = new \stdClass; - $expected->token_type = 'bearer'; - $expected->access_token = 'VqiO0n2HrKE'; - $expected->httpstatus = 200; - $expected->rate = null; - $this->assertEquals($expected, $result); - // check that bearer token was actually set - $this->assertNotNull($cb->getStatic('_bearer_token')); - - // array - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_ARRAY); - $cb->setBearerToken(null); - $result = $cb->call( - '_parseBearerReply', - [ - $reply['reply'], - $reply['httpstatus'] - ] - ); - $expected = [ - 'token_type' => 'bearer', - 'access_token' => 'VqiO0n2HrKE', - 'httpstatus' => 200, - 'rate' => null - ]; - $this->assertEquals($expected, $result); - // check that bearer token was actually set - $this->assertNotNull($cb->getStatic('_bearer_token')); - - // JSON - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_JSON); - $cb->setBearerToken(null); - $result = $cb->call( - '_parseBearerReply', - [ - $reply['reply'], - $reply['httpstatus'] - ] - ); - $expected = '{"token_type":"bearer","access_token":"VqiO0n2HrKE"}'; - $this->assertEquals($expected, $result); - // check that bearer token was actually set - $this->assertNotNull($cb->getStatic('_bearer_token')); - } - - /** - * Tests _getRateLimitInfo - */ - public function testGetRateLimitInfo() - { - $cb = $this->getCB(); - $headers = [ - 'content-length' => 68, - 'content-type' => 'application/json;charset=utf-8', - 'date' => 'Sun, 06 Dec 2015 14:43:28 GMT' - ]; - $this->assertNull($cb->call('_getRateLimitInfo', [$headers])); - - // set rate-limit headers - $headers['x-rate-limit-limit'] = 180; - $headers['x-rate-limit-remaining'] = 123; - $headers['x-rate-limit-reset'] = time() + 234; - $rate = $cb->call('_getRateLimitInfo', [$headers]); - $expected = new \stdClass; - $expected->limit = $headers['x-rate-limit-limit']; - $expected->remaining = $headers['x-rate-limit-remaining']; - $expected->reset = $headers['x-rate-limit-reset']; - $this->assertEquals($expected, $rate); - - // array - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_ARRAY); - $rate = $cb->call('_getRateLimitInfo', [$headers]); - $expected = [ - 'limit' => $headers['x-rate-limit-limit'], - 'remaining' => $headers['x-rate-limit-remaining'], - 'reset' => $headers['x-rate-limit-reset'] - ]; - $this->assertEquals($expected, $rate); - } - - /** - * Tests _validateSslCertificate - */ - public function testValidateSslCertificate1() - { - $cb = $this->getCB(); - $cb->call('_validateSslCertificate', [0]); - } - - /** - * Tests _validateSslCertificate - * @expectedException \Exception - * @expectedExceptionMessage Error 58 while validating the Twitter API certificate. - */ - public function testValidateSslCertificate2() - { - $cb = $this->getCB(); - $cb->call('_validateSslCertificate', [CURLE_SSL_CERTPROBLEM]); - } - - /** - * Tests _appendHttpStatusAndRate - */ - public function testAppendHttpStatusAndRate() - { - $cb = $this->getCB(); - - // object - $reply = new \stdClass; - $reply->somedata = 123; - $reply->moredata = '456'; - $rate = new \stdClass; - $rate->field1 = 180; - $rate->field2 = 177; - $expected = new \stdClass; - $expected->somedata = 123; - $expected->moredata = '456'; - $expected->httpstatus = 409; - $expected->rate = new \stdClass; - $expected->rate->field1 = 180; - $expected->rate->field2 = 177; - $this->assertEquals( - $expected, - $cb->call('_appendHttpStatusAndRate', [$reply, 409, $rate]) - ); - - // array - $reply = (array) $reply; - $rate = (array) $rate; - $expected = (array) $expected; - $expected['rate'] = (array) $expected['rate']; - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_ARRAY); - $this->assertEquals( - $expected, - $cb->call('_appendHttpStatusAndRate', [$reply, 409, $rate]) - ); - - // JSON - $reply = '{"somedata":123,"moredata":"456"}'; - $expected = '{"somedata":123,"moredata":"456","httpstatus":409,' - . '"rate":{"field1":180,"field2":177}}'; - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_JSON); - $this->assertEquals( - $expected, - $cb->call('_appendHttpStatusAndRate', [$reply, 409, $rate]) - ); - } - - /** - * Tests _parseApiHeaders - */ - public function testParseApiHeaders() - { - $cb = $this->getCB(); - $data = $cb->getStatic('_mock_replies')['default']['reply']; - list($headers, $reply) = $cb->call('_parseApiHeaders', [$data]); - $expected_headers = [ - 'HTTP/1.1 404 Not Found' => '', - 'content-length' => '68', - 'content-type' => 'application/json;charset=utf-8', - 'date' => 'Sun, 06 Dec 2015 14:43:28 GMT', - 'server' => 'tsa_b', - 'set-cookie' => 'guest_id=v1%3A144941300885288055; Domain=.twitter.com' - . '; Path=/; Expires=Tue, 05-Dec-2017 14:43:28 UTC', - 'strict-transport-security' => 'max-age=631138519', - 'x-connection-hash' => '12218aef9e9757609afb08e661fa3b9b', - 'x-response-time' => '2' - ]; - $expected_reply = '{"errors":[{"message":"Sorry, that page does not exist","code":34}]}'; - $this->assertEquals($expected_headers, $headers); - $this->assertEquals($expected_reply, $reply); - - // proxy - $data = $cb->getStatic('_mock_replies')['proxy1']['reply']; - list($headers, $reply) = $cb->call('_parseApiHeaders', [$data]); - $this->assertEquals($expected_headers, $headers); - $this->assertEquals($expected_reply, $reply); - } - - /** - * Tests _parseApiReplyPrefillHeaders - */ - public function testParseApiReplyPrefillHeaders() - { - $cb = $this->getCB(); - $headers = [ - 'X-TON-Min-Chunk-Size' => '12345', - 'X-TON-Max-Chunk-Size' => '23456', - 'Range' => 'bytes 0-1234567/2345678' - ]; - - // non-empty reply: no touching - $this->assertEquals( - '123', - $cb->call('_parseApiReplyPrefillHeaders', [$headers, '123']) - ); - - // no location header: no touching - $this->assertEquals( - '', - $cb->call('_parseApiReplyPrefillHeaders', [$headers, '']) - ); - - $headers['Location'] = 'https://twitter.com'; - $this->assertEquals( - '{"Location":"https:\/\/twitter.com","X-TON-Min-Chunk-Size":"12345",' - . '"X-TON-Max-Chunk-Size":"23456","Range":"bytes 0-1234567\/2345678"}', - $cb->call('_parseApiReplyPrefillHeaders', [$headers, '']) - ); - } - - /** - * Tests _parseApiReply - */ - public function testParseApiReply1() - { - $cb = $this->getCB(); - - // object - $this->assertEquals(new \stdClass, $cb->call('_parseApiReply', ['[]'])); - - // array - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_ARRAY); - $this->assertEquals([], $cb->call('_parseApiReply', ['[]'])); - - // JSON - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_JSON); - $this->assertEquals('{}', $cb->call('_parseApiReply', ['[]'])); - } - - /** - * Tests _parseApiReply - */ - public function testParseApiReply2() - { - $cb = $this->getCB(); - $reply = '{"id_str":"6253282","profile_location":null,' - . '"status":{"created_at":"Tue Nov 24 08:56:07 +0000 2015","id":669077021138493440}}'; - - // object - $expected = new \stdClass; - $expected->id_str = '6253282'; - $expected->profile_location = null; - $expected->status = new \stdClass; - $expected->status->created_at = 'Tue Nov 24 08:56:07 +0000 2015'; - $expected->status->id = 669077021138493440; - $result = $cb->call('_parseApiReply', [$reply]); - $this->assertEquals($expected, $result); - $this->assertSame($expected->status->id, $result->status->id); - - // array - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_ARRAY); - $expected = (array) $expected; - $expected['status'] = (array) $expected['status']; - $this->assertEquals($expected, $cb->call('_parseApiReply', [$reply])); - - // JSON - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_JSON); - $this->assertEquals($reply, $cb->call('_parseApiReply', [$reply])); - - // query-string format - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_ARRAY); - $this->assertEquals( - [ - 'oauth_token' => 'ABC', - 'oauth_token_secret' => 'def', - 'oauth_callback_confirmed' => 'true' - ], - $cb->call( - '_parseApiReply', - ['oauth_token=ABC&oauth_token_secret=def&oauth_callback_confirmed=true'] - ) - ); - - // message - $this->assertEquals( - ['message' => 'This is just a message.'], - $cb->call('_parseApiReply', ['This is just a message.']) - ); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/requestparse_tests.php b/twitter/vendor/jublonet/codebird-php/test/requestparse_tests.php deleted file mode 100644 index 1656f3d2..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/requestparse_tests.php +++ /dev/null @@ -1,212 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Request parsing tests - * - * @package codebird-test - */ -class Requestparse_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Initialise Codebird class - * - * @return \Codebird\Codebird The Codebird class - */ - protected function getCB() - { - Codebird::setConsumerKey('123', '456'); - $cb = new CodebirdM(); - $cb->setToken('234', '567'); - - return $cb; - } - - /** - * Tests _parseApiParams - */ - public function testParseApiParams() - { - $cb = $this->getCB(); - // empty list - $this->assertEquals([], $cb->call('_parseApiParams', [[]])); - // arrays - $this->assertEquals(['test' => 1], $cb->call('_parseApiParams', [[['test' => 1]]])); - $this->assertEquals( - ['media[]' => '123'], - $cb->call('_parseApiParams', [[['media[]' => 123]]]) - ); - // urlencoded strings - $this->assertEquals(['testdata' => ''], $cb->call('_parseApiParams', [['testdata']])); - $this->assertEquals( - ['param1' => '12', 'param2' => 'ab'], - $cb->call('_parseApiParams', [['param1=12¶m2=ab']]) - ); - $this->assertEquals( - ['media' => ['123', '456']], - $cb->call('_parseApiParams', [['media[]=123&media[]=456']]) - ); - } - - /** - * Tests _stringifyNullBoolParams - */ - public function testStringifyNullBoolParams() - { - $cb = $this->getCB(); - $result = $cb->call( - '_stringifyNullBoolParams', - [['a' => 123, 'b' => null, 'c' => true, 'd' => false, 'e' => 'x']] - ); - $this->assertEquals('123', $result['a']); - $this->assertNull($result['b']); - $this->assertEquals('true', $result['c']); - $this->assertEquals('false', $result['d']); - } - - /** - * Tests _mapFnToApiMethod - */ - public function testMapFnToApiMethod() - { - $cb = $this->getCB(); - $apiparams = [ - 'test' => 1, - 'account_id' => '1234' - ]; - $result = $cb->call( - '_mapFnToApiMethod', - 'ads_accounts_ACCOUNT_ID_cards_appDownload', - $apiparams - ); - $this->assertEquals([ - 'ads/accounts/1234/cards/app_download', - 'ads/accounts/:account_id/cards/app_download' - ], $result); - // check that inline parameter was removed from array - $this->assertArrayNotHasKey('account_id', $apiparams); - } - - /** - * Tests _mapFnInsertSlashes - */ - public function testMapFnInsertSlashes() - { - $cb = $this->getCB(); - $result = $cb->call( - '_mapFnInsertSlashes', - ['ads_accounts_ACCOUNT_ID_cards_appDownload'] - ); - $this->assertEquals( - 'ads/accounts/ACCOUNT/ID/cards/appDownload', - $result - ); - } - - /** - * Tests _mapFnRestoreParamUnderscores - */ - public function testMapFnRestoreParamUnderscores() - { - $cb = $this->getCB(); - $params_underscore = [ - 'screen_name', 'place_id', - 'account_id', 'campaign_id', 'card_id', 'line_item_id', - 'tweet_id', 'web_event_tag_id' - ]; - $params_slash = []; - foreach ($params_underscore as $param) { - $params_slash[] = str_replace('_', '/', $param); - } - for ($i = 0; $i < count($params_underscore); $i++) { - $result = $cb->call( - '_mapFnRestoreParamUnderscores', - ['ads/accounts/' . strtoupper($params_slash[$i]) . '/cards/appDownload'] - ); - $this->assertEquals( - 'ads/accounts/' . strtoupper($params_underscore[$i]) . '/cards/appDownload', - $result - ); - } - } - - /** - * Tests _mapFnInlineParams - */ - public function testMapFnInlineParams() - { - $cb = $this->getCB(); - // normal parameters - $apiparams = [ - 'test' => 1, - 'account_id' => '1234' - ]; - $result = $cb->call( - '_mapFnInlineParams', - 'ads/accounts/ACCOUNT_ID/cards/app_download', - $apiparams - ); - $this->assertEquals([ - 'ads/accounts/1234/cards/app_download', - 'ads/accounts/:account_id/cards/app_download' - ], - $result - ); - // check that inline parameter was removed from array - $this->assertArrayNotHasKey('account_id', $apiparams); - - // special parameters (TON API) - $apiparams = [ - 'test' => 1, - 'bucket' => 'ta_partner', - 'file' => 'test_Ab.mp4', - 'resumeId' => '56789' - ]; - $result = $cb->call( - '_mapFnInlineParams', - 'ton/bucket/BUCKET/FILE?resumable=true&resumeId=RESUMEID', - $apiparams - ); - $this->assertEquals([ - 'ton/bucket/ta_partner/test_Ab.mp4?resumable=true&resumeId=56789', - 'ton/bucket/:bucket/:file?resumable=true&resumeId=:resumeId' - ], - $result - ); - $this->assertArrayNotHasKey('bucket', $apiparams); - $this->assertArrayNotHasKey('file', $apiparams); - $this->assertArrayNotHasKey('resumeId', $apiparams); - $this->assertEquals(['test' => 1], $apiparams); - } - - /** - * Tests _json_decode - */ - public function testJsonDecode() - { - $json = '{"id": 123456789123456789, "id_str": "123456789123456789"}'; - $array = [ - 'id' => 123456789123456789, - 'id_str' => '123456789123456789' - ]; - $object = (object) $array; - - $cb = $this->getCB(); - $result = $cb->call('_json_decode', [$json]); - $this->assertEquals($object, $result); - $result = $cb->call('_json_decode', [$json, true]); - $this->assertEquals($array, $result); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/returnformat_tests.php b/twitter/vendor/jublonet/codebird-php/test/returnformat_tests.php deleted file mode 100644 index 321c2ee3..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/returnformat_tests.php +++ /dev/null @@ -1,70 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Return format tests - * - * @package codebird-test - */ -class Returnformat_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Initialise Codebird class - * - * @return \Codebird\Codebird The Codebird class - */ - protected function getCB() - { - Codebird::setConsumerKey('123', '456'); - $cb = new CodebirdM(); - $cb->setToken('234', '567'); - - return $cb; - } - - /** - * Tests array return format - */ - public function testArrayFormat() - { - $cb = $this->getCB(); - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_ARRAY); - $reply = $cb->users_show(['screen_name' => 'TwitterAPI']); - $this->assertTrue(is_array($reply)); - } - - /** - * Tests object return format - */ - public function testObjectFormat() - { - $cb = $this->getCB(); - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_OBJECT); - $reply = $cb->users_show(['screen_name' => 'TwitterAPI']); - $this->assertInstanceOf('stdClass', $reply); - } - - /** - * Tests JSON return format - */ - public function testJsonFormat() - { - $cb = $this->getCB(); - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_JSON); - $reply = $cb->users_show(['screen_name' => 'TwitterAPI']); - $data = json_decode($reply); - $this->assertNotFalse($data); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/setter_tests.php b/twitter/vendor/jublonet/codebird-php/test/setter_tests.php deleted file mode 100644 index 4c2cd094..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/setter_tests.php +++ /dev/null @@ -1,253 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Setter function tests - * - * @package codebird-test - */ -class Setter_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Tests setConsumerKey - */ - public function testSetConsumerKey() - { - $cb = new CodebirdT(); - $cb->setConsumerKey('123', '456'); - $this->assertEquals('123', $cb->getStatic('_consumer_key')); - $this->assertEquals('456', $cb->getStatic('_consumer_secret')); - } - - /** - * Tests setBearerToken - */ - public function testSetBearerToken() - { - $cb = new CodebirdT(); - $cb->setBearerToken('789'); - $this->assertEquals('789', $cb->getStatic('_bearer_token')); - } - - /** - * Tests getVersion - */ - public function testGetVersion() - { - $cb = new CodebirdT(); - $version = $cb->getVersion(); - $this->assertEquals($version, $cb->getStatic('_version')); - $this->assertRegexp('/^[1-9]\d*\.\d+\.\d+(-([a-z]+\.[1-9]\d*|dev))?$/', $version); - } - - /** - * Tests setToken - */ - public function testSetToken() - { - $cb = new CodebirdT(); - $cb->setToken('123', '456'); - $this->assertEquals('123', $cb->get('_oauth_token')); - $this->assertEquals('456', $cb->get('_oauth_token_secret')); - } - - /** - * Tests logout - */ - public function testLogout() - { - $cb = new CodebirdT(); - $cb->setToken('123', '456'); - $cb->logout(); - $this->assertNull($cb->get('_oauth_token')); - $this->assertNull($cb->get('_oauth_token_secret')); - } - - /** - * Tests setUseCurl - */ - public function testSetUseCurl() - { - $cb = new CodebirdT(); - $cb->setUseCurl(true); - $this->assertTrue($cb->get('_use_curl')); - $cb->setUseCurl(false); - $this->assertFalse($cb->get('_use_curl')); - $cb->setUseCurl('123'); - $this->assertTrue($cb->get('_use_curl')); - } - - /** - * Tests setTimeout - */ - public function testSetTimeout() - { - $cb = new CodebirdT(); - $cb->setTimeout(123); - $this->assertEquals(123, $cb->get('_timeouts')['request']); - $cb->setTimeout(0); - $this->assertEquals(0, $cb->get('_timeouts')['request']); - $cb->setTimeout(-123); - $this->assertEquals(0, $cb->get('_timeouts')['request']); - } - - /** - * Tests setConnectionTimeout - */ - public function testSetConnectionTimeout() - { - $cb = new CodebirdT(); - $cb->setConnectionTimeout(123); - $this->assertEquals(123, $cb->get('_timeouts')['connect']); - $cb->setConnectionTimeout(0); - $this->assertEquals(0, $cb->get('_timeouts')['connect']); - $cb->setConnectionTimeout(-123); - $this->assertEquals(0, $cb->get('_timeouts')['connect']); - } - - /** - * Tests setConnectionTimeout - */ - public function testSetRemoteDownloadTimeout() - { - $cb = new CodebirdT(); - $cb->setRemoteDownloadTimeout(123); - $this->assertEquals(123, $cb->get('_timeouts')['remote']); - $cb->setRemoteDownloadTimeout(0); - $this->assertEquals(0, $cb->get('_timeouts')['remote']); - $cb->setRemoteDownloadTimeout(-123); - $this->assertEquals(0, $cb->get('_timeouts')['remote']); - } - - /** - * Tests setReturnFormat - */ - public function testSetReturnFormat() - { - $cb = new CodebirdT(); - $cb->setReturnFormat(CODEBIRD_RETURNFORMAT_JSON); - $this->assertEquals($cb->get('_return_format'), CODEBIRD_RETURNFORMAT_JSON); - } - - /** - * Tests setProxy - */ - public function testSetProxy() - { - $cb = new CodebirdT(); - $cb->setProxy('127.0.0.1', '8888'); - $this->assertEquals('127.0.0.1', $cb->get('_proxy')['host']); - $this->assertEquals('8888', $cb->get('_proxy')['port']); - $this->assertEquals(CURLPROXY_HTTP, $cb->get('_proxy')['type']); - - $cb->setProxy('127.0.0.1', '8888', CURLPROXY_SOCKS5); - $this->assertEquals('127.0.0.1', $cb->get('_proxy')['host']); - $this->assertEquals('8888', $cb->get('_proxy')['port']); - $this->assertEquals(CURLPROXY_SOCKS5, $cb->get('_proxy')['type']); - } - - /** - * Tests setProxy - * @expectedException \Exception - * @expectedExceptionMessage Invalid proxy type specified. - */ - public function testSetProxy2() - { - $cb = new CodebirdT(); - $cb->setProxy('127.0.0.1', '8888', 1); - } - - /** - * Tests setProxyAuthentication - */ - public function testSetProxyAuthentication() - { - $cb = new CodebirdT(); - $cb->setProxyAuthentication('ABCDEF'); - $this->assertEquals('ABCDEF', $cb->get('_proxy')['authentication']); - } - - /** - * Tests setStreamingCallback - */ - public function testSetStreamingCallback1() - { - $callback = ['\Codebird\CodebirdT', 'streamingCallbackTest']; - $cb = new CodebirdT(); - $cb->setStreamingCallback($callback); - $this->assertSame( - array_diff($callback, $cb->get('_streaming_callback')), - array_diff($cb->get('_streaming_callback'), $callback) - ); - } - - /** - * Tests setStreamingCallback - * @expectedException \Exception - * @expectedExceptionMessage This is not a proper callback. - */ - public function testSetStreamingCallback2() - { - $cb = new CodebirdT(); - $cb->setStreamingCallback(['\Codebird\CodebirdTX', 'somewhere']); - } - - /** - * Tests getApiMethods - */ - public function testGetApiMethods() - { - $cb = new CodebirdT(); - $methods = $cb->getApiMethods(); - $this->assertArrayHasKey('GET', $cb->getStatic('_api_methods')); - $this->assertArrayHasKey('POST', $cb->getStatic('_api_methods')); - $this->assertArrayHasKey('PUT', $cb->getStatic('_api_methods')); - $this->assertArrayHasKey('DELETE', $cb->getStatic('_api_methods')); - $this->assertEquals($methods, $cb->getStatic('_api_methods')); - } - - /** - * Tests hasProxy - */ - public function testHasProxy() - { - $cb = new CodebirdT(); - $this->assertFalse($cb->call('_hasProxy')); - $cb->setProxy('127.0.0.1', '8888'); - $this->assertTrue($cb->call('_hasProxy')); - } - - /** - * Tests getProxyHost - */ - public function testGetProxyHost() - { - $cb = new CodebirdT(); - $this->assertNull($cb->call('_getProxyHost')); - $cb->setProxy('127.0.0.1', '8888'); - $this->assertEquals('127.0.0.1', $cb->call('_getProxyHost')); - } - - /** - * Tests getProxyPort - */ - public function testGetProxyPort() - { - $cb = new CodebirdT(); - $this->assertNull($cb->call('_getProxyPort')); - $cb->setProxy('127.0.0.1', '8888'); - $this->assertEquals('8888', $cb->call('_getProxyPort')); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/signing_tests.php b/twitter/vendor/jublonet/codebird-php/test/signing_tests.php deleted file mode 100644 index 3a4f5fb3..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/signing_tests.php +++ /dev/null @@ -1,166 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * OAuth signing tests - * - * @package codebird-test - */ -class Signing_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Initialise Codebird class - * - * @return \Codebird\Codebird The Codebird class - */ - protected function getCB() - { - Codebird::setConsumerKey('123', '456'); - $cb = new CodebirdM(); - - return $cb; - } - - /** - * Tests _url - */ - public function testUrl() - { - $cb = $this->getCB(); - // string - $this->assertEquals( - 'q%20%2B%20b%21%22%C2%A7%24%25%26%2F%28%29%3D%3F%23%2A13%2C3%C3%A4.', - $cb->call('_url', ['q + b!"§$%&/()=?#*13,3ä.']) - ); - // array - $this->assertEquals( - [ - 'q%20%2B%20b%21%22%C2%A7%24%25%26%2F%28%29%3D%3F%23%2A13%2C3%C3%A4.', - 'test123' - ], - $cb->call('_url', [[ - 'q + b!"§$%&/()=?#*13,3ä.', - 'test123' - ]]) - ); - } - - /** - * Tests _sha1 - */ - public function testSha1() - { - $cb = $this->getCB(); - $this->assertEquals( - 'ydAlpYjrGHU7psDQ9HPgHTcwEuw=', - $cb->call('_sha1', ['q + b!"§$%&/()=?#*13,3ä.']) - ); - - // with access token secret - $cb->setToken('678', '789'); - $this->assertEquals( - 'CtivZhAHiX49ZMUuHXtKabLAuo0=', - $cb->call('_sha1', ['q + b!"§$%&/()=?#*13,3ä.']) - ); - } - - /** - * Tests _nonce - */ - public function testNonce1() - { - $cb = $this->getCB(); - // default length - $this->assertEquals( - '4247c524', - $cb->call('_nonce', []) - ); - // custom length - $this->assertEquals( - '4247c5248da', - $cb->call('_nonce', [11]) - ); - } - - /** - * Tests _nonce - * @expectedException \Exception - * @expectedExceptionMessage Invalid nonce length. - */ - public function testNonce2() - { - $cb = $this->getCB(); - // invalid length - $cb->call('_nonce', [0]); - } - - /** - * Tests _getSignature - */ - public function testGetSignature() - { - $cb = $this->getCB(); - $base_params = [ - 'oauth_consumer_key' => '123', - 'oauth_nonce' => '12345678', - 'oauth_signature_method' => 'HMAC-SHA1', - 'oauth_timestamp' => '1400000000', - 'oauth_token' => '567', - 'oauth_version' => '1.0', - 'q' => 'Test search.' - ]; - $this->assertEquals( - 'ZON/m9bHvciPdtyK9BlokjeiW4M=', - $cb->call('_getSignature', ['GET', 'search/tweets', $base_params]) - ); - } - - /** - * Tests _sign - * @expectedException \Exception - * @expectedExceptionMessage To generate a signature, the consumer key must be set. - */ - public function testSign1() - { - $cb = $this->getCB(); - $cb->setConsumerKey(null, null); - $params = ['q' => 'Test search.']; - $cb->call('_sign', ['GET', 'search/tweets', $params]); - } - - /** - * Tests _sign - */ - public function testSign2() - { - $cb = $this->getCB(); - $params = ['q' => 'Test search.']; - $this->assertEquals( - 'OAuth oauth_consumer_key="123", oauth_nonce="4247c524", oauth_signature' - . '="lOLNd5l6cGB9kWACxWLNKJwSD%2FI%3D", oauth_signature_method="HMAC-SHA' - . '1", oauth_timestamp="1412345678", oauth_version="1.0"', - $cb->call('_sign', ['GET', 'search/tweets', $params]) - ); - - // with oauth token - $cb->setToken('678', '789'); - $this->assertEquals( - 'OAuth oauth_consumer_key="123", oauth_nonce="4247c524", oauth_signature' - . '="XzegzFKEqs2PpUMym5T%2BwhEmTz4%3D", oauth_signature_method="HMAC-SHA' - . '1", oauth_timestamp="1412345678", oauth_token="678", oauth_version="1.0"', - $cb->call('_sign', ['GET', 'search/tweets', $params]) - ); - } -} diff --git a/twitter/vendor/jublonet/codebird-php/test/singleton_tests.php b/twitter/vendor/jublonet/codebird-php/test/singleton_tests.php deleted file mode 100644 index b47da416..00000000 --- a/twitter/vendor/jublonet/codebird-php/test/singleton_tests.php +++ /dev/null @@ -1,31 +0,0 @@ - - * @copyright 2010-2018 Jublo Limited - * @license https://opensource.org/licenses/GPL-3.0 GNU General Public License 3.0 - * @link https://github.com/jublonet/codebird-php - */ - -/** - * Singleton tests - * - * @package codebird-test - */ -class Singleton_Test extends \PHPUnit\Framework\TestCase -{ - /** - * Tests getInstance - */ - public function testGetInstance() - { - $cb = CodebirdT::getInstance(); - $this->assertInstanceOf('\Codebird\Codebird', $cb); - } -} diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index 3bd30644..8ec47175 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -2,12 +2,11 @@ /* * Name: Unicode Smilies * Description: Smilies based on the unicode emojis - On Linux use https://github.com/eosrei/emojione-color-font to see them in color and http://www.unicode.org/emoji/charts/full-emoji-list.html - * Version: 1.1.2 + * Version: 1.1.3 * Author: Michael Vogel * Author: Matthias Ebers */ -use Friendica\App; use Friendica\Content\Smilies; use Friendica\Core\Hook; @@ -25,7 +24,7 @@ function unicode_smilies_smilies(array &$b) Smilies::add($b, ':-D', '😁'); Smilies::add($b, ':D', '😁'); Smilies::add($b, ';-)', '😉'); - // Smilies::add($b, ';)', '😉'); // Deactivated since this leads to disturbed html entities +// Smilies::add($b, ';)', '😉'); // Deactivated since this leads to disturbed html entities Smilies::add($b, ':-P', '😛'); Smilies::add($b, ':-p', '😛'); Smilies::add($b, ':P', '😛'); @@ -54,353 +53,350 @@ function unicode_smilies_smilies(array &$b) // Smilies::add($b, 'O_o', '&#x;'); // face-smiling - Smilies::add($b, ':grinning face:', '😀'); - Smilies::add($b, ':grinning face with big eyes:', '😃'); - Smilies::add($b, ':grinning face with smiling eyes:', '😄'); - Smilies::add($b, ':beaming face with smiling eyes:', '😁'); - Smilies::add($b, ':grinning squinting face:', '😆'); - Smilies::add($b, ':laughing:', '😆'); - Smilies::add($b, ':grinning face with sweat:', '😅'); - Smilies::add($b, ':rolling on the floor laughing:', '🤣'); + Smilies::add($b, ':grinning face:', '😀'); + Smilies::add($b, ':grinning face with big eyes:', '😃'); + Smilies::add($b, ':grinning face with smiling eyes:', '😄'); + Smilies::add($b, ':beaming face with smiling eyes:', '😁'); + Smilies::add($b, ':grinning squinting face:', '😆'); + Smilies::add($b, ':laughing:', '😆'); + Smilies::add($b, ':grinning face with sweat:', '😅'); + Smilies::add($b, ':rolling on the floor laughing:', '🤣'); Smilies::add($b, ':rofl:', '🤣'); - Smilies::add($b, ':face with tears of joy:', '😂'); + Smilies::add($b, ':face with tears of joy:', '😂'); Smilies::add($b, ':tearsofjoy:', '😂'); - Smilies::add($b, ':slightly smiling face:', '🙂'); - Smilies::add($b, ':upside-down face:', '🙃'); - Smilies::add($b, ':winking face:', '😉'); - Smilies::add($b, ':smiling face with smiling eyes:', '😊'); - Smilies::add($b, ':smiling face with halo:', '😇'); + Smilies::add($b, ':slightly smiling face:', '🙂'); + Smilies::add($b, ':upside-down face:', '🙃'); + Smilies::add($b, ':winking face:', '😉'); + Smilies::add($b, ':smiling face with smiling eyes:', '😊'); + Smilies::add($b, ':smiling face with halo:', '😇'); // face-affection - Smilies::add($b, ':smiling face with hearts:', '🥰'); - Smilies::add($b, ':smiling face with heart-eyes:', '😍'); - Smilies::add($b, ':star-struck:', '🤩'); - Smilies::add($b, ':face blowing a kiss:', '😘'); - Smilies::add($b, ':kissing face:', '😗'); - Smilies::add($b, ':smiling face:', '☺'); - Smilies::add($b, ':kissing face with closed eyes:', '😚'); - Smilies::add($b, ':kissing face with smiling eyes:', '😙'); + Smilies::add($b, ':smiling face with hearts:', '🥰'); + Smilies::add($b, ':smiling face with heart-eyes:', '😍'); + Smilies::add($b, ':star-struck:', '🤩'); + Smilies::add($b, ':face blowing a kiss:', '😘'); + Smilies::add($b, ':kissing face:', '😗'); + Smilies::add($b, ':smiling face:', '☺'); + Smilies::add($b, ':kissing face with closed eyes:', '😚'); + Smilies::add($b, ':kissing face with smiling eyes:', '😙'); // face-tongue - Smilies::add($b, ':face savoring food:', '😋'); - Smilies::add($b, ':face with tongue:', '😛'); - Smilies::add($b, ':winking face with tongue:', '😜'); - Smilies::add($b, ':zany face:', '🤪'); - Smilies::add($b, ':squinting face with tongue:', '😝'); - Smilies::add($b, ':money-mouth face:', '🤑'); + Smilies::add($b, ':face savoring food:', '😋'); + Smilies::add($b, ':face with tongue:', '😛'); + Smilies::add($b, ':winking face with tongue:', '😜'); + Smilies::add($b, ':zany face:', '🤪'); + Smilies::add($b, ':squinting face with tongue:', '😝'); + Smilies::add($b, ':money-mouth face:', '🤑'); // face-hand - Smilies::add($b, ':hugging face:', '🤗'); - Smilies::add($b, ':face with hand over mouth:', '🤭'); - Smilies::add($b, ':shushing face:', '🤫'); - Smilies::add($b, ':thinking face:', '🤔'); + Smilies::add($b, ':hugging face:', '🤗'); + Smilies::add($b, ':face with hand over mouth:', '🤭'); + Smilies::add($b, ':shushing face:', '🤫'); + Smilies::add($b, ':thinking face:', '🤔'); // face-neutral-skeptical - Smilies::add($b, ':zipper-mouth face:', '🤐'); - Smilies::add($b, ':face with raised eyebrow:', '🤨'); - Smilies::add($b, ':neutral face:', '😐'); - Smilies::add($b, ':expressionless face:', '😑'); - Smilies::add($b, ':face without mouth:', '😶'); - Smilies::add($b, ':smirking face:', '😏'); - Smilies::add($b, ':unamused face:', '😒'); - Smilies::add($b, ':face with rolling eyes:', '🙄'); - Smilies::add($b, ':grimacing face:', '😬'); - Smilies::add($b, ':lying face:', '🤥'); + Smilies::add($b, ':zipper-mouth face:', '🤐'); + Smilies::add($b, ':face with raised eyebrow:', '🤨'); + Smilies::add($b, ':neutral face:', '😐'); + Smilies::add($b, ':expressionless face:', '😑'); + Smilies::add($b, ':face without mouth:', '😶'); + Smilies::add($b, ':smirking face:', '😏'); + Smilies::add($b, ':unamused face:', '😒'); + Smilies::add($b, ':face with rolling eyes:', '🙄'); + Smilies::add($b, ':grimacing face:', '😬'); + Smilies::add($b, ':lying face:', '🤥'); // face-sleepy - Smilies::add($b, ':relieved face:', '😌'); - Smilies::add($b, ':pensive face:', '😔'); - Smilies::add($b, ':sleepy face:', '😪'); - Smilies::add($b, ':drooling face:', '🤤'); + Smilies::add($b, ':relieved face:', '😌'); + Smilies::add($b, ':pensive face:', '😔'); + Smilies::add($b, ':sleepy face:', '😪'); + Smilies::add($b, ':drooling face:', '🤤'); Smilies::add($b, ':drool:', '🤤'); - Smilies::add($b, ':sleeping face:', '😴'); + Smilies::add($b, ':sleeping face:', '😴'); // face-unwell - Smilies::add($b, ':face with medical mask:', '😷'); - Smilies::add($b, ':face with thermometer:', '🤒'); - Smilies::add($b, ':face with head-bandage:', '🤕'); - Smilies::add($b, ':nauseated face:', '🤢'); - Smilies::add($b, ':face vomiting:', '🤮'); + Smilies::add($b, ':face with medical mask:', '😷'); + Smilies::add($b, ':face with thermometer:', '🤒'); + Smilies::add($b, ':face with head-bandage:', '🤕'); + Smilies::add($b, ':nauseated face:', '🤢'); + Smilies::add($b, ':face vomiting:', '🤮'); Smilies::add($b, ':vomit:', '🤮'); - Smilies::add($b, ':sneezing face:', '🤧'); - Smilies::add($b, ':hot face:', '🥵'); - Smilies::add($b, ':cold face:', '🥶'); - Smilies::add($b, ':woozy face:', '🥴'); - Smilies::add($b, ':dizzy face:', '😵'); + Smilies::add($b, ':sneezing face:', '🤧'); + Smilies::add($b, ':hot face:', '🥵'); + Smilies::add($b, ':cold face:', '🥶'); + Smilies::add($b, ':woozy face:', '🥴'); + Smilies::add($b, ':dizzy face:', '😵'); Smilies::add($b, ':dead:', '😵'); - Smilies::add($b, ':exploding head:', '🤯'); + Smilies::add($b, ':exploding head:', '🤯'); // face-hat - Smilies::add($b, ':cowboy hat face:', '🤠'); - Smilies::add($b, ':partying face:', '🥳'); + Smilies::add($b, ':cowboy hat face:', '🤠'); + Smilies::add($b, ':partying face:', '🥳'); // face-glasses - Smilies::add($b, ':smiling face with sunglasses:', '😎'); - Smilies::add($b, ':nerd face:', '🤓'); - Smilies::add($b, ':face with monocle:', '🧐'); + Smilies::add($b, ':smiling face with sunglasses:', '😎'); + Smilies::add($b, ':nerd face:', '🤓'); + Smilies::add($b, ':face with monocle:', '🧐'); // face-concerned - Smilies::add($b, ':confused face:', '😕'); - Smilies::add($b, ':worried face:', '😟'); - Smilies::add($b, ':slightly frowning face:', '🙁'); - Smilies::add($b, ':frowning face:', '☹'); - Smilies::add($b, ':face with open mouth:', '😮'); - Smilies::add($b, ':hushed face:', '😯'); - Smilies::add($b, ':astonished face:', '😲'); - Smilies::add($b, ':flushed face:', '😳'); + Smilies::add($b, ':confused face:', '😕'); + Smilies::add($b, ':worried face:', '😟'); + Smilies::add($b, ':slightly frowning face:', '🙁'); + Smilies::add($b, ':frowning face:', '☹'); + Smilies::add($b, ':face with open mouth:', '😮'); + Smilies::add($b, ':hushed face:', '😯'); + Smilies::add($b, ':astonished face:', '😲'); + Smilies::add($b, ':flushed face:', '😳'); Smilies::add($b, ':dazed:', '😳'); - Smilies::add($b, ':pleading face:', '🥺'); - Smilies::add($b, ':frowning face with open mouth:', '😦'); - Smilies::add($b, ':anguished face:', '😧'); - Smilies::add($b, ':fearful face:', '😨'); - Smilies::add($b, ':anxious face with sweat:', '😰'); - Smilies::add($b, ':sad but relieved face:', '😥'); - Smilies::add($b, ':crying face:', '😢'); - Smilies::add($b, ':loudly crying face:', '😭'); - Smilies::add($b, ':face screaming in fear:', '😱'); - Smilies::add($b, ':confounded face:', '😖'); - Smilies::add($b, ':persevering face:', '😣'); - Smilies::add($b, ':disappointed face:', '😞'); + Smilies::add($b, ':pleading face:', '🥺'); + Smilies::add($b, ':frowning face with open mouth:', '😦'); + Smilies::add($b, ':anguished face:', '😧'); + Smilies::add($b, ':fearful face:', '😨'); + Smilies::add($b, ':anxious face with sweat:', '😰'); + Smilies::add($b, ':sad but relieved face:', '😥'); + Smilies::add($b, ':crying face:', '😢'); + Smilies::add($b, ':loudly crying face:', '😭'); + Smilies::add($b, ':face screaming in fear:', '😱'); + Smilies::add($b, ':confounded face:', '😖'); + Smilies::add($b, ':persevering face:', '😣'); + Smilies::add($b, ':disappointed face:', '😞'); // face-negative - Smilies::add($b, ':face with steam from nose:', '😤'); - Smilies::add($b, ':pouting face:', '😡'); - Smilies::add($b, ':angry face:', '😠'); - Smilies::add($b, ':face with symbols on mouth:', '🤬'); - Smilies::add($b, ':smiling face with horns:', '😈'); - Smilies::add($b, ':angry face with horns:', '👿'); - Smilies::add($b, ':skull:', '💀'); - Smilies::add($b, ':skull and crossbones:', '☠'); + Smilies::add($b, ':face with steam from nose:', '😤'); + Smilies::add($b, ':pouting face:', '😡'); + Smilies::add($b, ':angry face:', '😠'); + Smilies::add($b, ':face with symbols on mouth:', '🤬'); + Smilies::add($b, ':smiling face with horns:', '😈'); + Smilies::add($b, ':angry face with horns:', '👿'); + Smilies::add($b, ':skull:', '💀'); + Smilies::add($b, ':skull and crossbones:', '☠'); // face-costume - Smilies::add($b, ':pile of poo:', '💩'); - Smilies::add($b, ':clown face:', '🤡'); - Smilies::add($b, ':ogre:', '👹'); - Smilies::add($b, ':goblin:', '👺'); - Smilies::add($b, ':ghost:', '👻'); - Smilies::add($b, ':alien:', '👽'); - Smilies::add($b, ':alien monster:', '👾'); - Smilies::add($b, ':robot:', '🤖'); + Smilies::add($b, ':pile of poo:', '💩'); + Smilies::add($b, ':clown face:', '🤡'); + Smilies::add($b, ':ogre:', '👹'); + Smilies::add($b, ':goblin:', '👺'); + Smilies::add($b, ':ghost:', '👻'); + Smilies::add($b, ':alien:', '👽'); + Smilies::add($b, ':alien monster:', '👾'); + Smilies::add($b, ':robot:', '🤖'); // cat-face - Smilies::add($b, ':grinning cat:', '😺'); - Smilies::add($b, ':grinning cat with smiling eyes:', '😸'); - Smilies::add($b, ':cat with tears of joy:', '😹'); - Smilies::add($b, ':smiling cat with heart-eyes:', '😻'); - Smilies::add($b, ':cat with wry smile:', '😼'); - Smilies::add($b, ':kissing cat:', '😽'); - Smilies::add($b, ':weary cat:', '🙀'); - Smilies::add($b, ':crying cat:', '😿'); - Smilies::add($b, ':pouting cat:', '😾'); + Smilies::add($b, ':grinning cat:', '😺'); + Smilies::add($b, ':grinning cat with smiling eyes:', '😸'); + Smilies::add($b, ':cat with tears of joy:', '😹'); + Smilies::add($b, ':smiling cat with heart-eyes:', '😻'); + Smilies::add($b, ':cat with wry smile:', '😼'); + Smilies::add($b, ':kissing cat:', '😽'); + Smilies::add($b, ':weary cat:', '🙀'); + Smilies::add($b, ':crying cat:', '😿'); + Smilies::add($b, ':pouting cat:', '😾'); // monkey-face - Smilies::add($b, ':see-no-evil monkey:', '🙈'); - Smilies::add($b, ':hear-no-evil monkey:', '🙉'); - Smilies::add($b, ':speak-no-evil monkey:', '🙊'); + Smilies::add($b, ':see-no-evil monkey:', '🙈'); + Smilies::add($b, ':hear-no-evil monkey:', '🙉'); + Smilies::add($b, ':speak-no-evil monkey:', '🙊'); //emotion - Smilies::add($b, ':kiss mark:', '💋'); - Smilies::add($b, ':love letter:', '💌'); - Smilies::add($b, ':heart with arrow:', '💘'); - Smilies::add($b, ':heart with ribbon:', '💝'); - Smilies::add($b, ':sparkling heart:', '💖'); - Smilies::add($b, ':loveheart:', '💖'); - Smilies::add($b, ':growing heart:', '💗'); - Smilies::add($b, ':beating heart:', '💓'); - Smilies::add($b, ':revolving hearts:', '💞'); - Smilies::add($b, ':two hearts:', '💕'); - Smilies::add($b, ':heart decoration:', '💟'); - Smilies::add($b, ':heart exclamation:', '❣'); - Smilies::add($b, ':broken heart:', '💔'); - Smilies::add($b, ':red heart:', '❤'); - Smilies::add($b, ':orange heart:', '🧡'); - Smilies::add($b, ':yellow heart:', '💛'); - Smilies::add($b, ':green heart:', '💚'); - Smilies::add($b, ':blue heart:', '💙'); - Smilies::add($b, ':purple heart:', '💜'); - Smilies::add($b, ':brown heart:', '🤎'); - Smilies::add($b, ':black heart:', '🖤'); - Smilies::add($b, ':white heart:', '🤍'); - Smilies::add($b, ':hundred points:', '💯'); - Smilies::add($b, ':anger symbol:', '💢'); - Smilies::add($b, ':collision:', '💥'); - Smilies::add($b, ':dizzy:', '💫'); - Smilies::add($b, ':sweat droplets:', '💦'); - Smilies::add($b, ':dashing away:', '💨'); - Smilies::add($b, ':hole:', '🕳'); - Smilies::add($b, ':bomb:', '💣'); - Smilies::add($b, ':speech balloon:', '💬'); - Smilies::add($b, ':left speech bubble:', '🗨'); - Smilies::add($b, ':right anger bubble:', '🗯'); - Smilies::add($b, ':thought balloon:', '💭'); - Smilies::add($b, ':zzz:', '💤'); + Smilies::add($b, ':kiss mark:', '💋'); + Smilies::add($b, ':love letter:', '💌'); + Smilies::add($b, ':heart with arrow:', '💘'); + Smilies::add($b, ':heart with ribbon:', '💝'); + Smilies::add($b, ':sparkling heart:', '💖'); + Smilies::add($b, ':loveheart:', '💖'); + Smilies::add($b, ':growing heart:', '💗'); + Smilies::add($b, ':beating heart:', '💓'); + Smilies::add($b, ':revolving hearts:', '💞'); + Smilies::add($b, ':two hearts:', '💕'); + Smilies::add($b, ':heart decoration:', '💟'); + Smilies::add($b, ':heart exclamation:', '❣'); + Smilies::add($b, ':broken heart:', '💔'); + Smilies::add($b, ':red heart:', '❤'); + Smilies::add($b, ':orange heart:', '🧡'); + Smilies::add($b, ':yellow heart:', '💛'); + Smilies::add($b, ':green heart:', '💚'); + Smilies::add($b, ':blue heart:', '💙'); + Smilies::add($b, ':purple heart:', '💜'); + Smilies::add($b, ':brown heart:', '🤎'); + Smilies::add($b, ':black heart:', '🖤'); + Smilies::add($b, ':white heart:', '🤍'); + Smilies::add($b, ':hundred points:', '💯'); + Smilies::add($b, ':anger symbol:', '💢'); + Smilies::add($b, ':collision:', '💥'); + Smilies::add($b, ':dizzy:', '💫'); + Smilies::add($b, ':sweat droplets:', '💦'); + Smilies::add($b, ':dashing away:', '💨'); + Smilies::add($b, ':hole:', '🕳'); + Smilies::add($b, ':bomb:', '💣'); + Smilies::add($b, ':speech balloon:', '💬'); + Smilies::add($b, ':left speech bubble:', '🗨'); + Smilies::add($b, ':right anger bubble:', '🗯'); + Smilies::add($b, ':thought balloon:', '💭'); + Smilies::add($b, ':zzz:', '💤'); // People & Body // hand-fingers-open - Smilies::add($b, ':waving hand:', '👋'); - Smilies::add($b, ':raised back of hand:', '🤚'); - Smilies::add($b, ':hand with fingers splayed:', '🖐'); - Smilies::add($b, ':raised hand:', '✋'); - Smilies::add($b, ':vulcan salute:', '🖖'); + Smilies::add($b, ':waving hand:', '👋'); + Smilies::add($b, ':raised back of hand:', '🤚'); + Smilies::add($b, ':hand with fingers splayed:', '🖐'); + Smilies::add($b, ':raised hand:', '✋'); + Smilies::add($b, ':vulcan salute:', '🖖'); // hand-fingers-partial - Smilies::add($b, ':OK hand:', '👌'); -// Smilies::add($b, ':pinching hand:', '🤏'); - Smilies::add($b, ':victory hand:', '✌'); - Smilies::add($b, ':crossed fingers:', '🤞'); - Smilies::add($b, ':love-you gesture:', '🤟'); - Smilies::add($b, ':sign of the horns:', '🤘'); - Smilies::add($b, ':call me hand:', '🤙'); + Smilies::add($b, ':OK hand:', '👌'); + Smilies::add($b, ':victory hand:', '✌'); + Smilies::add($b, ':crossed fingers:', '🤞'); + Smilies::add($b, ':love-you gesture:', '🤟'); + Smilies::add($b, ':sign of the horns:', '🤘'); + Smilies::add($b, ':call me hand:', '🤙'); // hand-single-finger - Smilies::add($b, ':backhand index pointing left:', '👈'); - Smilies::add($b, ':backhand index pointing right:', '👉'); - Smilies::add($b, ':backhand index pointing up:', '👆'); - Smilies::add($b, ':middle finger:', '🖕'); - Smilies::add($b, ':backhand index pointing down:', '👇'); - Smilies::add($b, ':index pointing up:', '☝'); + Smilies::add($b, ':backhand index pointing left:', '👈'); + Smilies::add($b, ':backhand index pointing right:', '👉'); + Smilies::add($b, ':backhand index pointing up:', '👆'); + Smilies::add($b, ':middle finger:', '🖕'); + Smilies::add($b, ':backhand index pointing down:', '👇'); + Smilies::add($b, ':index pointing up:', '☝'); // hand-fingers-closed - Smilies::add($b, ':thumbs up:', '👍'); + Smilies::add($b, ':thumbs up:', '👍'); Smilies::add($b, ':like:', '👍'); Smilies::add($b, '\\o/', '👍'); - Smilies::add($b, ':thumbs down:', '👎'); + Smilies::add($b, ':thumbs down:', '👎'); Smilies::add($b, ':dislike:', '👎'); - Smilies::add($b, ':raised fist:', '✊'); - Smilies::add($b, ':oncoming fist:', '👊'); - Smilies::add($b, ':left-facing fist:', '🤛'); - Smilies::add($b, ':right-facing fist:', '🤜'); + Smilies::add($b, ':raised fist:', '✊'); + Smilies::add($b, ':oncoming fist:', '👊'); + Smilies::add($b, ':left-facing fist:', '🤛'); + Smilies::add($b, ':right-facing fist:', '🤜'); // hands - Smilies::add($b, ':clapping hands:', '👏'); - Smilies::add($b, ':raising hands:', '🙌'); - Smilies::add($b, ':open hands:', '👐'); - Smilies::add($b, ':palms up together:', '🤲'); - Smilies::add($b, ':handshake:', '🤝'); - Smilies::add($b, ':folded hands:', '🙏'); + Smilies::add($b, ':clapping hands:', '👏'); + Smilies::add($b, ':raising hands:', '🙌'); + Smilies::add($b, ':open hands:', '👐'); + Smilies::add($b, ':palms up together:', '🤲'); + Smilies::add($b, ':handshake:', '🤝'); + Smilies::add($b, ':folded hands:', '🙏'); // hand-prop - Smilies::add($b, ':writing hand:', '✍'); - Smilies::add($b, ':nail polish:', '💅'); - Smilies::add($b, ':selfie:', '🤳'); + Smilies::add($b, ':writing hand:', '✍'); + Smilies::add($b, ':nail polish:', '💅'); + Smilies::add($b, ':selfie:', '🤳'); // body-parts - Smilies::add($b, ':flexed biceps:', '💪'); - Smilies::add($b, ':mechanical arm:', '🦾'); - Smilies::add($b, ':mechanical leg:', '🦿'); - Smilies::add($b, ':leg:', '🦵'); - Smilies::add($b, ':foot:', '🦶'); - Smilies::add($b, ':ear:', '👂'); -// Smilies::add($b, ':ear with hearing aid:', '🦻'); - Smilies::add($b, ':nose:', '👃'); - Smilies::add($b, ':brain:', '🧠'); - Smilies::add($b, ':tooth:', '🦷'); - Smilies::add($b, ':bone:', '🦴'); - Smilies::add($b, ':eyes:', '👀'); - Smilies::add($b, ':eye:', '👁'); - Smilies::add($b, ':tongue:', '👅'); - Smilies::add($b, ':mouth:', '👄'); + Smilies::add($b, ':flexed biceps:', '💪'); + Smilies::add($b, ':mechanical arm:', '🦾'); + Smilies::add($b, ':mechanical leg:', '🦿'); + Smilies::add($b, ':leg:', '🦵'); + Smilies::add($b, ':foot:', '🦶'); + Smilies::add($b, ':ear:', '👂'); + Smilies::add($b, ':brain:', '🧠'); + Smilies::add($b, ':tooth:', '🦷'); + Smilies::add($b, ':bone:', '🦴'); + Smilies::add($b, ':eyes:', '👀'); + Smilies::add($b, ':eye:', '👁'); + Smilies::add($b, ':tongue:', '👅'); + Smilies::add($b, ':mouth:', '👄'); // person - Smilies::add($b, ':baby:', '👶'); - Smilies::add($b, ':child:', '🧒'); - Smilies::add($b, ':boy:', '👦'); - Smilies::add($b, ':girl:', '👧'); - Smilies::add($b, ':person:', '🧑'); - Smilies::add($b, ':person: blond hair:', '👱'); - Smilies::add($b, ':man:', '👨'); - Smilies::add($b, ':man: beard:', '🧔'); + Smilies::add($b, ':baby:', '👶'); + Smilies::add($b, ':child:', '🧒'); + Smilies::add($b, ':boy:', '👦'); + Smilies::add($b, ':girl:', '👧'); + Smilies::add($b, ':person:', '🧑'); + Smilies::add($b, ':person: blond hair:', '👱'); + Smilies::add($b, ':man:', '👨'); + Smilies::add($b, ':man: beard:', '🧔'); Smilies::add($b, ':beard:', '🧔'); - Smilies::add($b, ':man: red hair:', '👨‍🦰'); - Smilies::add($b, ':man: curly hair:', '👨‍🦱'); - Smilies::add($b, ':man: white hair:', '👨‍🦳'); - Smilies::add($b, ':man: bald:', '👨‍🦲'); - Smilies::add($b, ':woman:', '👩'); - Smilies::add($b, ':woman: red hair:', '👩‍🦰'); - Smilies::add($b, ':person: red hair:', '🧑‍🦰'); - Smilies::add($b, ':woman: curly hair:', '👩‍🦱'); - Smilies::add($b, ':person: curly hair:', '🧑‍🦱'); - Smilies::add($b, ':woman: white hair:', '👩‍🦳'); - Smilies::add($b, ':person: white hair:', '🧑‍🦳'); - Smilies::add($b, ':woman: bald:', '👩‍🦲'); - Smilies::add($b, ':bald::', '🧑‍🦲'); - Smilies::add($b, ':woman: blond hair:', '👱‍♀️'); - Smilies::add($b, ':man: blond hair:', '👱‍♂️'); - Smilies::add($b, ':older person:', '🧓'); - Smilies::add($b, ':old man:', '👴'); - Smilies::add($b, ':old woman:', '👵'); + Smilies::add($b, ':man: red hair:', '👨‍🦰'); + Smilies::add($b, ':man: curly hair:', '👨‍🦱'); + Smilies::add($b, ':man: white hair:', '👨‍🦳'); + Smilies::add($b, ':man: bald:', '👨‍🦲'); + Smilies::add($b, ':woman:', '👩'); + Smilies::add($b, ':woman: red hair:', '👩‍🦰'); + Smilies::add($b, ':person: red hair:', '🧑‍🦰'); + Smilies::add($b, ':woman: curly hair:', '👩‍🦱'); + Smilies::add($b, ':person: curly hair:', '🧑‍🦱'); + Smilies::add($b, ':woman: white hair:', '👩‍🦳'); + Smilies::add($b, ':person: white hair:', '🧑‍🦳'); + Smilies::add($b, ':woman: bald:', '👩‍🦲'); + Smilies::add($b, ':bald::', '🧑‍🦲'); + Smilies::add($b, ':woman: blond hair:', '👱‍♀️'); + Smilies::add($b, ':man: blond hair:', '👱‍♂️'); + Smilies::add($b, ':older person:', '🧓'); + Smilies::add($b, ':old man:', '👴'); + Smilies::add($b, ':old woman:', '👵'); Smilies::add($b, ':pregnant:', '🤰'); // person-gesture - Smilies::add($b, ':person frowning:', '🙍'); - Smilies::add($b, ':man frowning:', '🙍‍♂️'); - Smilies::add($b, ':woman frowning:', '🙍‍♀️'); - Smilies::add($b, ':person pouting:', '🙎'); - Smilies::add($b, ':man pouting:', '🙎‍♂️'); - Smilies::add($b, ':woman pouting:', '🙎‍♀️'); - Smilies::add($b, ':person gesturing NO:', '🙅'); - Smilies::add($b, ':man gesturing NO:', '🙅‍♂️'); - Smilies::add($b, ':woman gesturing NO:', '🙅‍♀️'); - Smilies::add($b, ':person gesturing OK:', '🙆'); - Smilies::add($b, ':man gesturing OK:', '🙆‍♂️'); - Smilies::add($b, ':woman gesturing OK:', '🙆‍♀️'); - Smilies::add($b, ':person tipping hand:', '💁'); - Smilies::add($b, ':man tipping hand:', '💁‍♂️'); - Smilies::add($b, ':woman tipping hand:', '💁‍♀️'); - Smilies::add($b, ':person raising hand:', '🙋'); - Smilies::add($b, ':man raising hand:', '🙋‍♂️'); - Smilies::add($b, ':woman raising hand', '🙋‍♀️'); -// Smilies::add($b, ':deaf person:', '🧏'); -// Smilies::add($b, ':deaf man:', '🧏‍♂️'); -// Smilies::add($b, ':deaf woman:', '🧏‍♀️'); - Smilies::add($b, ':person bowing:', '🙇'); + Smilies::add($b, ':person frowning:', '🙍'); + Smilies::add($b, ':man frowning:', '🙍‍♂️'); + Smilies::add($b, ':woman frowning:', '🙍‍♀️'); + Smilies::add($b, ':person pouting:', '🙎'); + Smilies::add($b, ':man pouting:', '🙎‍♂️'); + Smilies::add($b, ':woman pouting:', '🙎‍♀️'); + Smilies::add($b, ':person gesturing NO:', '🙅'); + Smilies::add($b, ':man gesturing NO:', '🙅‍♂️'); + Smilies::add($b, ':woman gesturing NO:', '🙅‍♀️'); + Smilies::add($b, ':person gesturing OK:', '🙆'); + Smilies::add($b, ':man gesturing OK:', '🙆‍♂️'); + Smilies::add($b, ':woman gesturing OK:', '🙆‍♀️'); + Smilies::add($b, ':person tipping hand:', '💁'); + Smilies::add($b, ':man tipping hand:', '💁‍♂️'); + Smilies::add($b, ':woman tipping hand:', '💁‍♀️'); + Smilies::add($b, ':person raising hand:', '🙋'); + Smilies::add($b, ':man raising hand:', '🙋‍♂️'); + Smilies::add($b, ':woman raising hand', '🙋‍♀️'); +// Smilies::add($b, ':deaf person:', '🧏'); +// Smilies::add($b, ':deaf man:', '🧏‍♂️'); +// Smilies::add($b, ':deaf woman:', '🧏‍♀️'); + Smilies::add($b, ':person bowing:', '🙇'); Smilies::add($b, ':bow:', '🙇'); - Smilies::add($b, ':man bowing:', '🙇‍♂️'); - Smilies::add($b, ':woman bowing:', '🙇‍♀️'); - Smilies::add($b, ':person facepalming:', '🤦'); + Smilies::add($b, ':man bowing:', '🙇‍♂️'); + Smilies::add($b, ':woman bowing:', '🙇‍♀️'); + Smilies::add($b, ':person facepalming:', '🤦'); Smilies::add($b, ':facepalm:', '🤦'); - Smilies::add($b, ':man facepalming:', '🤦‍♂️'); - Smilies::add($b, ':woman facepalming:', '🤦‍♀️'); - Smilies::add($b, ':person shrugging:', '🤷'); + Smilies::add($b, ':man facepalming:', '🤦‍♂️'); + Smilies::add($b, ':woman facepalming:', '🤦‍♀️'); + Smilies::add($b, ':person shrugging:', '🤷'); Smilies::add($b, ':shrug:', '🤷'); - Smilies::add($b, ':man shrugging:', '🤷‍♂️'); - Smilies::add($b, ':woman shrugging:', '🤷‍♀️'); + Smilies::add($b, ':man shrugging:', '🤷‍♂️'); + Smilies::add($b, ':woman shrugging:', '🤷‍♀️'); // person-role // person-fantasy - Smilies::add($b, ':baby angel:', '👼'); + Smilies::add($b, ':baby angel:', '👼'); Smilies::add($b, ':angel:', '👼'); Smilies::add($b, ':cherub:', '👼'); - Smilies::add($b, ':Santa Claus:', '🎅'); - Smilies::add($b, ':Mrs. Claus:', '🤶'); - Smilies::add($b, ':superhero:', '🦸'); - Smilies::add($b, ':man superhero:', '🦸‍♂️'); - Smilies::add($b, ':woman superhero:', '🦸‍♀️'); - Smilies::add($b, ':supervillain:', '🦹'); - Smilies::add($b, ':man supervillain:', '🦹‍♂️'); - Smilies::add($b, ':woman supervillain:', '🦹‍♀️'); - Smilies::add($b, ':mage:', '🧙'); - Smilies::add($b, ':man mage:', '🧙‍♂️'); - Smilies::add($b, ':woman mage:', '🧙‍♀️'); - Smilies::add($b, ':fairy:', '🧚'); - Smilies::add($b, ':man fairy:', '🧚‍♂️'); - Smilies::add($b, ':woman fairy:', '🧚‍♀️'); - Smilies::add($b, ':vampire:', '🧛'); - Smilies::add($b, ':man vampire:', '🧛‍♂️'); - Smilies::add($b, ':woman vampire:', '🧛‍♀️'); - Smilies::add($b, ':merperson:', '🧜'); - Smilies::add($b, ':merman:', '🧜‍♂️'); - Smilies::add($b, ':mermaid:', '🧜‍♀️'); - Smilies::add($b, ':elf:', '🧝'); - Smilies::add($b, ':man elf:', '🧝‍♂️'); - Smilies::add($b, ':woman elf:', '🧝‍♀️'); - Smilies::add($b, ':genie:', '🧞'); - Smilies::add($b, ':man genie:', '🧞‍♂️'); - Smilies::add($b, ':woman genie:', '🧞‍♀️'); - Smilies::add($b, ':zombie:', '🧟'); - Smilies::add($b, ':man zombie:', '🧟‍♂️'); - Smilies::add($b, ':woman zombie:', '🧟‍♀️'); + Smilies::add($b, ':Santa Claus:', '🎅'); + Smilies::add($b, ':Mrs. Claus:', '🤶'); + Smilies::add($b, ':superhero:', '🦸'); + Smilies::add($b, ':man superhero:', '🦸‍♂️'); + Smilies::add($b, ':woman superhero:', '🦸‍♀️'); + Smilies::add($b, ':supervillain:', '🦹'); + Smilies::add($b, ':man supervillain:', '🦹‍♂️'); + Smilies::add($b, ':woman supervillain:', '🦹‍♀️'); + Smilies::add($b, ':mage:', '🧙'); + Smilies::add($b, ':man mage:', '🧙‍♂️'); + Smilies::add($b, ':woman mage:', '🧙‍♀️'); + Smilies::add($b, ':fairy:', '🧚'); + Smilies::add($b, ':man fairy:', '🧚‍♂️'); + Smilies::add($b, ':woman fairy:', '🧚‍♀️'); + Smilies::add($b, ':vampire:', '🧛'); + Smilies::add($b, ':man vampire:', '🧛‍♂️'); + Smilies::add($b, ':woman vampire:', '🧛‍♀️'); + Smilies::add($b, ':merperson:', '🧜'); + Smilies::add($b, ':merman:', '🧜‍♂️'); + Smilies::add($b, ':mermaid:', '🧜‍♀️'); + Smilies::add($b, ':elf:', '🧝'); + Smilies::add($b, ':man elf:', '🧝‍♂️'); + Smilies::add($b, ':woman elf:', '🧝‍♀️'); + Smilies::add($b, ':genie:', '🧞'); + Smilies::add($b, ':man genie:', '🧞‍♂️'); + Smilies::add($b, ':woman genie:', '🧞‍♀️'); + Smilies::add($b, ':zombie:', '🧟'); + Smilies::add($b, ':man zombie:', '🧟‍♂️'); + Smilies::add($b, ':woman zombie:', '🧟‍♀️'); // person-activity @@ -411,83 +407,83 @@ function unicode_smilies_smilies(array &$b) // person-resting // family - Smilies::add($b, ':people holding hands:', '🧑‍🤝‍🧑'); - Smilies::add($b, ':women holding hands:', '👭'); - Smilies::add($b, ':woman and man holding hands:', '👫'); - Smilies::add($b, ':men holding hands:', '👬'); - Smilies::add($b, ':kiss:', '💏'); - Smilies::add($b, ':couple with heart:', '💑'); - Smilies::add($b, ':family:', '👪'); + Smilies::add($b, ':people holding hands:', '🧑‍🤝‍🧑'); + Smilies::add($b, ':women holding hands:', '👭'); + Smilies::add($b, ':woman and man holding hands:', '👫'); + Smilies::add($b, ':men holding hands:', '👬'); + Smilies::add($b, ':kiss:', '💏'); + Smilies::add($b, ':couple with heart:', '💑'); + Smilies::add($b, ':family:', '👪'); // person-symbol - Smilies::add($b, ':speaking head:', '🗣'); - Smilies::add($b, ':bust in silhouette:', '👤'); - Smilies::add($b, ':busts in silhouette:', '👥'); - Smilies::add($b, ':footprints:', '👣'); + Smilies::add($b, ':speaking head:', '🗣'); + Smilies::add($b, ':bust in silhouette:', '👤'); + Smilies::add($b, ':busts in silhouette:', '👥'); + Smilies::add($b, ':footprints:', '👣'); // Component // hair-style // Animals & Nature // animal-mammal - Smilies::add($b, ':monkey face:', '🐵'); - Smilies::add($b, ':monkey:', '🐒'); - Smilies::add($b, ':gorilla:', '🦍'); - Smilies::add($b, ':orangutan:', '🦧'); - Smilies::add($b, ':dog face:', '🐶'); - Smilies::add($b, ':dog:', '🐕'); - Smilies::add($b, ':guide dog:', '🦮'); - Smilies::add($b, ':poodle:', '🐩'); - Smilies::add($b, ':wolf:', '🐺'); - Smilies::add($b, ':fox:', '🦊'); - Smilies::add($b, ':raccoon:', '🦝'); - Smilies::add($b, ':cat face:', '🐱'); - Smilies::add($b, ':cat:', '🐈'); - Smilies::add($b, ':lion:', '🦁'); - Smilies::add($b, ':tiger face:', '🐯'); - Smilies::add($b, ':tiger:', '🐅'); - Smilies::add($b, ':leopard:', '🐆'); - Smilies::add($b, ':horse face:', '🐴'); - Smilies::add($b, ':horse:', '🐎'); - Smilies::add($b, ':unicorn:', '🦄'); - Smilies::add($b, ':zebra:', '🦓'); - Smilies::add($b, ':deer:', '🦌'); - Smilies::add($b, ':cow face:', '🐮'); - Smilies::add($b, ':ox:', '🐂'); - Smilies::add($b, ':water buffalo:', '🐃'); - Smilies::add($b, ':cow:', '🐄'); - Smilies::add($b, ':pig face:', '🐷'); - Smilies::add($b, ':pig:', '🐖'); + Smilies::add($b, ':monkey face:', '🐵'); + Smilies::add($b, ':monkey:', '🐒'); + Smilies::add($b, ':gorilla:', '🦍'); + Smilies::add($b, ':orangutan:', '🦧'); + Smilies::add($b, ':dog face:', '🐶'); + Smilies::add($b, ':dog:', '🐕'); + Smilies::add($b, ':guide dog:', '🦮'); + Smilies::add($b, ':poodle:', '🐩'); + Smilies::add($b, ':wolf:', '🐺'); + Smilies::add($b, ':fox:', '🦊'); + Smilies::add($b, ':raccoon:', '🦝'); + Smilies::add($b, ':cat face:', '🐱'); + Smilies::add($b, ':cat:', '🐈'); + Smilies::add($b, ':lion:', '🦁'); + Smilies::add($b, ':tiger face:', '🐯'); + Smilies::add($b, ':tiger:', '🐅'); + Smilies::add($b, ':leopard:', '🐆'); + Smilies::add($b, ':horse face:', '🐴'); + Smilies::add($b, ':horse:', '🐎'); + Smilies::add($b, ':unicorn:', '🦄'); + Smilies::add($b, ':zebra:', '🦓'); + Smilies::add($b, ':deer:', '🦌'); + Smilies::add($b, ':cow face:', '🐮'); + Smilies::add($b, ':ox:', '🐂'); + Smilies::add($b, ':water buffalo:', '🐃'); + Smilies::add($b, ':cow:', '🐄'); + Smilies::add($b, ':pig face:', '🐷'); + Smilies::add($b, ':pig:', '🐖'); Smilies::add($b, ':boar:', '🐗'); - Smilies::add($b, ':pig nose:', '🐽'); - Smilies::add($b, ':ram:', '🐏'); - Smilies::add($b, ':sheep:', '🐑'); - Smilies::add($b, ':goat:', '🐐'); + Smilies::add($b, ':pig nose:', '🐽'); + Smilies::add($b, ':ram:', '🐏'); + Smilies::add($b, ':sheep:', '🐑'); + Smilies::add($b, ':goat:', '🐐'); Smilies::add($b, ':camel:', '🐪'); - Smilies::add($b, ':two-hump camel:', '🐫'); - Smilies::add($b, ':llama:', '🦙'); - Smilies::add($b, ':giraffe:', '🦒'); - Smilies::add($b, ':elephant:', '🐘'); - Smilies::add($b, ':rhinoceros:', '🦏'); - Smilies::add($b, ':hippopotamus:', '🦛'); - Smilies::add($b, ':mouse face:', '🐭'); - Smilies::add($b, ':mouse:', '🐁'); - Smilies::add($b, ':rat:', '🐀'); - Smilies::add($b, ':hamster:', '🐹'); - Smilies::add($b, ':rabbit face:', '🐰'); - Smilies::add($b, ':rabbit:', '🐇'); - Smilies::add($b, ':chipmunk:', '🐿'); - Smilies::add($b, ':hedgehog:', '🦔'); - Smilies::add($b, ':bat:', '🦇'); - Smilies::add($b, ':bear:', '🐻'); - Smilies::add($b, ':koala:', '🐨'); - Smilies::add($b, ':panda:', '🐼'); - Smilies::add($b, ':sloth:', '🦥'); - Smilies::add($b, ':otter:', '🦦'); - Smilies::add($b, ':skunk:', '🦨'); - Smilies::add($b, ':kangaroo:', '🦘'); - Smilies::add($b, ':badger:', '🦡'); - Smilies::add($b, ':paw prints:', '🐾'); + Smilies::add($b, ':two-hump camel:', '🐫'); + Smilies::add($b, ':llama:', '🦙'); + Smilies::add($b, ':giraffe:', '🦒'); + Smilies::add($b, ':elephant:', '🐘'); + Smilies::add($b, ':rhinoceros:', '🦏'); + Smilies::add($b, ':hippopotamus:', '🦛'); + Smilies::add($b, ':mouse face:', '🐭'); + Smilies::add($b, ':mouse:', '🐁'); + Smilies::add($b, ':rat:', '🐀'); + Smilies::add($b, ':hamster:', '🐹'); + Smilies::add($b, ':rabbit face:', '🐰'); + Smilies::add($b, ':rabbit:', '🐇'); + Smilies::add($b, ':chipmunk:', '🐿'); + Smilies::add($b, ':hedgehog:', '🦔'); + Smilies::add($b, ':bat:', '🦇'); + Smilies::add($b, ':bear:', '🐻'); + Smilies::add($b, ':koala:', '🐨'); + Smilies::add($b, ':panda:', '🐼'); + Smilies::add($b, ':sloth:', '🦥'); + Smilies::add($b, ':otter:', '🦦'); + Smilies::add($b, ':skunk:', '🦨'); + Smilies::add($b, ':kangaroo:', '🦘'); + Smilies::add($b, ':badger:', '🦡'); + Smilies::add($b, ':paw prints:', '🐾'); // Smilies::add($b, ':bunnyflowers:', '&#x;'); Smilies::add($b, ':chick:', '🐤'); Smilies::add($b, ':ladybird:', '🐞'); @@ -495,957 +491,958 @@ function unicode_smilies_smilies(array &$b) // Smilies::add($b, ':dragonfly:', '&#x;'); // animal-bird - Smilies::add($b, ':turkey:', '🦃'); - Smilies::add($b, ':chicken:', '🐔'); - Smilies::add($b, ':rooster:', '🐓'); - Smilies::add($b, ':hatching chick:', '🐣'); - Smilies::add($b, ':baby chick:', '🐤'); - Smilies::add($b, ':front-facing baby chick:', '🐥'); - Smilies::add($b, ':bird:', '🐦'); - Smilies::add($b, ':tux:', '🐧'); - Smilies::add($b, ':dove:', '🕊'); - Smilies::add($b, ':eagle:', '🦅'); - Smilies::add($b, ':duck:', '🦆'); - Smilies::add($b, ':swan:', '🦢'); - Smilies::add($b, ':owl:', '🦉'); - Smilies::add($b, ':flamingo:', '🦩'); - Smilies::add($b, ':peacock:', '🦚'); - Smilies::add($b, ':parrot:', '🦜'); + Smilies::add($b, ':turkey:', '🦃'); + Smilies::add($b, ':chicken:', '🐔'); + Smilies::add($b, ':rooster:', '🐓'); + Smilies::add($b, ':hatching chick:', '🐣'); + Smilies::add($b, ':baby chick:', '🐤'); + Smilies::add($b, ':front-facing baby chick:', '🐥'); + Smilies::add($b, ':bird:', '🐦'); + Smilies::add($b, ':tux:', '🐧'); + Smilies::add($b, ':dove:', '🕊'); + Smilies::add($b, ':eagle:', '🦅'); + Smilies::add($b, ':duck:', '🦆'); + Smilies::add($b, ':swan:', '🦢'); + Smilies::add($b, ':owl:', '🦉'); + Smilies::add($b, ':flamingo:', '🦩'); + Smilies::add($b, ':peacock:', '🦚'); + Smilies::add($b, ':parrot:', '🦜'); // animal-amphibian - Smilies::add($b, ':frog:', '🐸'); + Smilies::add($b, ':frog:', '🐸'); // animal-reptile - Smilies::add($b, ':crocodile:', '🐊'); - Smilies::add($b, ':turtle:', '🐢'); - Smilies::add($b, ':lizard:', '🦎'); - Smilies::add($b, ':snake:', '🐍'); - Smilies::add($b, ':dragon face:', '🐲'); - Smilies::add($b, ':dragon:', '🐉'); + Smilies::add($b, ':crocodile:', '🐊'); + Smilies::add($b, ':turtle:', '🐢'); + Smilies::add($b, ':lizard:', '🦎'); + Smilies::add($b, ':snake:', '🐍'); + Smilies::add($b, ':dragon face:', '🐲'); + Smilies::add($b, ':dragon:', '🐉'); Smilies::add($b, ':draco:', '🐉'); - Smilies::add($b, ':sauropod:', '🦕'); - Smilies::add($b, ':T-Rex:', '🦖'); + Smilies::add($b, ':sauropod:', '🦕'); + Smilies::add($b, ':T-Rex:', '🦖'); // animal-marine - Smilies::add($b, ':spouting whale:', '🐳'); - Smilies::add($b, ':whale:', '🐋'); - Smilies::add($b, ':dolphin:', '🐬'); - Smilies::add($b, ':fish:', '🐟'); - Smilies::add($b, ':tropical fish:', '🐠'); - Smilies::add($b, ':blowfish:', '🐡'); - Smilies::add($b, ':shark:', '🦈'); - Smilies::add($b, ':octopus:', '🐙'); - Smilies::add($b, ':spiral shell:', '🐚'); + Smilies::add($b, ':spouting whale:', '🐳'); + Smilies::add($b, ':whale:', '🐋'); + Smilies::add($b, ':dolphin:', '🐬'); + Smilies::add($b, ':fish:', '🐟'); + Smilies::add($b, ':tropical fish:', '🐠'); + Smilies::add($b, ':blowfish:', '🐡'); + Smilies::add($b, ':shark:', '🦈'); + Smilies::add($b, ':octopus:', '🐙'); + Smilies::add($b, ':spiral shell:', '🐚'); // animal-bug - Smilies::add($b, ':snail:', '🐌'); - Smilies::add($b, ':butterfly:', '🦋'); - Smilies::add($b, ':bug:', '🐛'); - Smilies::add($b, ':ant:', '🐜'); - Smilies::add($b, ':honeybee:', '🐝'); - Smilies::add($b, ':lady beetle:', '🐞'); - Smilies::add($b, ':cricket:', '🦗'); - Smilies::add($b, ':spider:', '🕷'); - Smilies::add($b, ':spider web:', '🕸'); - Smilies::add($b, ':scorpion:', '🦂'); - Smilies::add($b, ':mosquito:', '🦟'); - Smilies::add($b, ':microbe:', '🦠'); + Smilies::add($b, ':snail:', '🐌'); + Smilies::add($b, ':butterfly:', '🦋'); + Smilies::add($b, ':bug:', '🐛'); + Smilies::add($b, ':ant:', '🐜'); + Smilies::add($b, ':honeybee:', '🐝'); + Smilies::add($b, ':lady beetle:', '🐞'); + Smilies::add($b, ':cricket:', '🦗'); + Smilies::add($b, ':spider:', '🕷'); + Smilies::add($b, ':spider web:', '🕸'); + Smilies::add($b, ':scorpion:', '🦂'); + Smilies::add($b, ':mosquito:', '🦟'); + Smilies::add($b, ':microbe:', '🦠'); // plant-flower - Smilies::add($b, ':bouquet:', '💐'); - Smilies::add($b, ':cherry blossom:', '🌸'); - Smilies::add($b, ':white flower:', '💮'); - Smilies::add($b, ':rosette:', '🏵'); - Smilies::add($b, ':rose:', '🌹'); - Smilies::add($b, ':wilted flower:', '🥀'); - Smilies::add($b, ':hibiscus:', '🌺'); - Smilies::add($b, ':sunflower:', '🌻'); - Smilies::add($b, ':blossom:', '🌼'); - Smilies::add($b, ':tulip:', '🌷'); + Smilies::add($b, ':bouquet:', '💐'); + Smilies::add($b, ':cherry blossom:', '🌸'); + Smilies::add($b, ':white flower:', '💮'); + Smilies::add($b, ':rosette:', '🏵'); + Smilies::add($b, ':rose:', '🌹'); + Smilies::add($b, ':wilted flower:', '🥀'); + Smilies::add($b, ':hibiscus:', '🌺'); + Smilies::add($b, ':sunflower:', '🌻'); + Smilies::add($b, ':blossom:', '🌼'); + Smilies::add($b, ':tulip:', '🌷'); // plant-other - Smilies::add($b, ':seedling:', '🌱'); - Smilies::add($b, ':evergreen tree:', '🌲'); - Smilies::add($b, ':deciduous tree:', '🌳'); - Smilies::add($b, ':palm tree:', '🌴'); - Smilies::add($b, ':cactus:', '🌵'); - Smilies::add($b, ':sheaf of rice:', '🌾'); - Smilies::add($b, ':herb:', '🌿'); - Smilies::add($b, ':shamrock:', '☘'); - Smilies::add($b, ':four leaf clover:', '🍀'); - Smilies::add($b, ':maple leaf:', '🍁'); - Smilies::add($b, ':fallen leaf:', '🍂'); - Smilies::add($b, ':leaf fluttering in wind:', '🍃'); + Smilies::add($b, ':seedling:', '🌱'); + Smilies::add($b, ':evergreen tree:', '🌲'); + Smilies::add($b, ':deciduous tree:', '🌳'); + Smilies::add($b, ':palm tree:', '🌴'); + Smilies::add($b, ':cactus:', '🌵'); + Smilies::add($b, ':sheaf of rice:', '🌾'); + Smilies::add($b, ':herb:', '🌿'); + Smilies::add($b, ':shamrock:', '☘'); + Smilies::add($b, ':four leaf clover:', '🍀'); + Smilies::add($b, ':maple leaf:', '🍁'); + Smilies::add($b, ':fallen leaf:', '🍂'); + Smilies::add($b, ':leaf fluttering in wind:', '🍃'); // Food & Drink // food-fruit - Smilies::add($b, ':grapes:', '🍇'); - Smilies::add($b, ':melon:', '🍈'); - Smilies::add($b, ':watermelon:', '🍉'); - Smilies::add($b, ':tangerine:', '🍊'); - Smilies::add($b, ':lemon:', '🍋'); - Smilies::add($b, ':banana:', '🍌'); - Smilies::add($b, ':pineapple:', '🍍'); - Smilies::add($b, ':mango:', '🥭'); - Smilies::add($b, ':red apple:', '🍎'); + Smilies::add($b, ':grapes:', '🍇'); + Smilies::add($b, ':melon:', '🍈'); + Smilies::add($b, ':watermelon:', '🍉'); + Smilies::add($b, ':tangerine:', '🍊'); + Smilies::add($b, ':lemon:', '🍋'); + Smilies::add($b, ':banana:', '🍌'); + Smilies::add($b, ':pineapple:', '🍍'); + Smilies::add($b, ':mango:', '🥭'); + Smilies::add($b, ':red apple:', '🍎'); Smilies::add($b, ':apple:', '🍎'); - Smilies::add($b, ':green apple:', '🍏'); - Smilies::add($b, ':pear:', '🍐'); - Smilies::add($b, ':peach:', '🍑'); - Smilies::add($b, ':cherries:', '🍒'); - Smilies::add($b, ':strawberry:', '🍓'); - Smilies::add($b, ':kiwi fruit:', '🥝'); - Smilies::add($b, ':tomato:', '🍅'); - Smilies::add($b, ':coconut:', '🥥'); + Smilies::add($b, ':green apple:', '🍏'); + Smilies::add($b, ':pear:', '🍐'); + Smilies::add($b, ':peach:', '🍑'); + Smilies::add($b, ':cherries:', '🍒'); + Smilies::add($b, ':strawberry:', '🍓'); + Smilies::add($b, ':kiwi fruit:', '🥝'); + Smilies::add($b, ':tomato:', '🍅'); + Smilies::add($b, ':coconut:', '🥥'); // food-vegetable - Smilies::add($b, ':avocado:', '🥑'); - Smilies::add($b, ':eggplant:', '🍆'); - Smilies::add($b, ':potato:', '🥔'); - Smilies::add($b, ':carrot:', '🥕'); - Smilies::add($b, ':ear of corn:', '🌽'); - Smilies::add($b, ':hot pepper:', '🌶'); - Smilies::add($b, ':cucumber:', '🥒'); - Smilies::add($b, ':leafy green:', '🥬'); - Smilies::add($b, ':broccoli:', '🥦'); - Smilies::add($b, ':garlic:', '🧄'); - Smilies::add($b, ':onion:', '🧅'); - Smilies::add($b, ':mushroom:', '🍄'); - Smilies::add($b, ':peanuts:', '🥜'); - Smilies::add($b, ':chestnut:', '🌰'); + Smilies::add($b, ':avocado:', '🥑'); + Smilies::add($b, ':eggplant:', '🍆'); + Smilies::add($b, ':potato:', '🥔'); + Smilies::add($b, ':carrot:', '🥕'); + Smilies::add($b, ':ear of corn:', '🌽'); + Smilies::add($b, ':hot pepper:', '🌶'); + Smilies::add($b, ':cucumber:', '🥒'); + Smilies::add($b, ':leafy green:', '🥬'); + Smilies::add($b, ':broccoli:', '🥦'); + Smilies::add($b, ':garlic:', '🧄'); + Smilies::add($b, ':onion:', '🧅'); + Smilies::add($b, ':mushroom:', '🍄'); + Smilies::add($b, ':peanuts:', '🥜'); + Smilies::add($b, ':chestnut:', '🌰'); // food-prepared - Smilies::add($b, ':bread:', '🍞'); - Smilies::add($b, ':croissant:', '🥐'); - Smilies::add($b, ':baguette bread:', '🥖'); - Smilies::add($b, ':pretzel:', '🥨'); - Smilies::add($b, ':bagel:', '🥯'); - Smilies::add($b, ':pancakes:', '🥞'); - Smilies::add($b, ':waffle:', '🧇'); - Smilies::add($b, ':cheese wedge:', '🧀'); - Smilies::add($b, ':meat on bone:', '🍖'); - Smilies::add($b, ':poultry leg:', '🍗'); - Smilies::add($b, ':cut of meat:', '🥩'); - Smilies::add($b, ':bacon:', '🥓'); - Smilies::add($b, ':hamburger:', '🍔'); - Smilies::add($b, ':french fries:', '🍟'); - Smilies::add($b, ':pizza:', '🍕'); - Smilies::add($b, ':hot dog:', '🌭'); - Smilies::add($b, ':sandwich:', '🥪'); - Smilies::add($b, ':taco:', '🌮'); - Smilies::add($b, ':burrito:', '🌯'); - Smilies::add($b, ':stuffed flatbread:', '🥙'); - Smilies::add($b, ':falafel:', '🧆'); - Smilies::add($b, ':egg:', '🥚'); - Smilies::add($b, ':cooking:', '🍳'); + Smilies::add($b, ':bread:', '🍞'); + Smilies::add($b, ':croissant:', '🥐'); + Smilies::add($b, ':baguette bread:', '🥖'); + Smilies::add($b, ':pretzel:', '🥨'); + Smilies::add($b, ':bagel:', '🥯'); + Smilies::add($b, ':pancakes:', '🥞'); + Smilies::add($b, ':waffle:', '🧇'); + Smilies::add($b, ':cheese wedge:', '🧀'); + Smilies::add($b, ':meat on bone:', '🍖'); + Smilies::add($b, ':poultry leg:', '🍗'); + Smilies::add($b, ':cut of meat:', '🥩'); + Smilies::add($b, ':bacon:', '🥓'); + Smilies::add($b, ':hamburger:', '🍔'); + Smilies::add($b, ':french fries:', '🍟'); + Smilies::add($b, ':pizza:', '🍕'); + Smilies::add($b, ':hot dog:', '🌭'); + Smilies::add($b, ':sandwich:', '🥪'); + Smilies::add($b, ':taco:', '🌮'); + Smilies::add($b, ':burrito:', '🌯'); + Smilies::add($b, ':stuffed flatbread:', '🥙'); + Smilies::add($b, ':falafel:', '🧆'); + Smilies::add($b, ':egg:', '🥚'); + Smilies::add($b, ':cooking:', '🍳'); Smilies::add($b, ':fryegg:', '🍳'); - Smilies::add($b, ':shallow pan of food:', '🥘'); - Smilies::add($b, ':pot of food:', '🍲'); - Smilies::add($b, ':bowl with spoon:', '🥣'); - Smilies::add($b, ':green salad:', '🥗'); - Smilies::add($b, ':popcorn:', '🍿'); - Smilies::add($b, ':butter:', '🧈'); - Smilies::add($b, ':salt:', '🧂'); - Smilies::add($b, ':canned food:', '🥫'); + Smilies::add($b, ':shallow pan of food:', '🥘'); + Smilies::add($b, ':pot of food:', '🍲'); + Smilies::add($b, ':bowl with spoon:', '🥣'); + Smilies::add($b, ':green salad:', '🥗'); + Smilies::add($b, ':popcorn:', '🍿'); + Smilies::add($b, ':butter:', '🧈'); + Smilies::add($b, ':salt:', '🧂'); + Smilies::add($b, ':canned food:', '🥫'); // food-asian - Smilies::add($b, ':bento box:', '🍱'); - Smilies::add($b, ':rice cracker:', '🍘'); - Smilies::add($b, ':rice ball:', '🍙'); - Smilies::add($b, ':cooked rice:', '🍚'); - Smilies::add($b, ':curry rice:', '🍛'); - Smilies::add($b, ':steaming bowl:', '🍜'); - Smilies::add($b, ':spaghetti:', '🍝'); - Smilies::add($b, ':roasted sweet potato:', '🍠'); - Smilies::add($b, ':oden:', '🍢'); - Smilies::add($b, ':sushi:', '🍣'); - Smilies::add($b, ':fried shrimp:', '🍤'); - Smilies::add($b, ':fish cake with swirl:', '🍥'); - Smilies::add($b, ':moon cake:', '🥮'); - Smilies::add($b, ':dango:', '🍡'); - Smilies::add($b, ':dumpling:', '🥟'); - Smilies::add($b, ':fortune cookie:', '🥠'); - Smilies::add($b, ':takeout box:', '🥡'); + Smilies::add($b, ':bento box:', '🍱'); + Smilies::add($b, ':rice cracker:', '🍘'); + Smilies::add($b, ':rice ball:', '🍙'); + Smilies::add($b, ':cooked rice:', '🍚'); + Smilies::add($b, ':curry rice:', '🍛'); + Smilies::add($b, ':steaming bowl:', '🍜'); + Smilies::add($b, ':spaghetti:', '🍝'); + Smilies::add($b, ':roasted sweet potato:', '🍠'); + Smilies::add($b, ':oden:', '🍢'); + Smilies::add($b, ':sushi:', '🍣'); + Smilies::add($b, ':fried shrimp:', '🍤'); + Smilies::add($b, ':fish cake with swirl:', '🍥'); + Smilies::add($b, ':moon cake:', '🥮'); + Smilies::add($b, ':dango:', '🍡'); + Smilies::add($b, ':dumpling:', '🥟'); + Smilies::add($b, ':fortune cookie:', '🥠'); + Smilies::add($b, ':takeout box:', '🥡'); // food-marine - Smilies::add($b, ':crab:', '🦀'); - Smilies::add($b, ':lobster:', '🦞'); - Smilies::add($b, ':shrimp:', '🦐'); - Smilies::add($b, ':squid:', '🦑'); -// Smilies::add($b, ':oyster:', '🦪'); + Smilies::add($b, ':crab:', '🦀'); + Smilies::add($b, ':lobster:', '🦞'); + Smilies::add($b, ':shrimp:', '🦐'); + Smilies::add($b, ':squid:', '🦑'); +// Smilies::add($b, ':oyster:', '🦪'); // food-sweet - Smilies::add($b, ':soft ice cream:', '🍦'); - Smilies::add($b, ':shaved ice:', '🍧'); - Smilies::add($b, ':ice cream:', '🍨'); - Smilies::add($b, ':doughnut:', '🍩'); - Smilies::add($b, ':cookie:', '🍪'); - Smilies::add($b, ':birthday cake:', '🎂'); - Smilies::add($b, ':shortcake:', '🍰'); + Smilies::add($b, ':soft ice cream:', '🍦'); + Smilies::add($b, ':shaved ice:', '🍧'); + Smilies::add($b, ':ice cream:', '🍨'); + Smilies::add($b, ':doughnut:', '🍩'); + Smilies::add($b, ':cookie:', '🍪'); + Smilies::add($b, ':birthday cake:', '🎂'); + Smilies::add($b, ':shortcake:', '🍰'); Smilies::add($b, ':cake:', '🍰'); - Smilies::add($b, ':cupcake:', '🧁'); - Smilies::add($b, ':pie:', '🥧'); - Smilies::add($b, ':chocolate bar:', '🍫'); - Smilies::add($b, ':candy:', '🍬'); - Smilies::add($b, ':lollipop:', '🍭'); - Smilies::add($b, ':custard:', '🍮'); - Smilies::add($b, ':honey pot:', '🍯'); + Smilies::add($b, ':cupcake:', '🧁'); + Smilies::add($b, ':pie:', '🥧'); + Smilies::add($b, ':chocolate bar:', '🍫'); + Smilies::add($b, ':candy:', '🍬'); + Smilies::add($b, ':lollipop:', '🍭'); + Smilies::add($b, ':custard:', '🍮'); + Smilies::add($b, ':honey pot:', '🍯'); -// drink - Smilies::add($b, ':baby bottle:', '🍼'); - Smilies::add($b, ':glass of milk:', '🥛'); - Smilies::add($b, ':hot beverage:', '☕'); +// drink + Smilies::add($b, ':baby bottle:', '🍼'); + Smilies::add($b, ':glass of milk:', '🥛'); + Smilies::add($b, ':hot beverage:', '☕'); Smilies::add($b, ':coffee:', '☕'); Smilies::add($b, ':tea:', '☕'); Smilies::add($b, ':tee:', '☕'); - Smilies::add($b, ':teacup without handle:', '🍵'); - Smilies::add($b, ':sake:', '🍶'); - Smilies::add($b, ':bottle with popping cork:', '🍾'); - Smilies::add($b, ':wine glass:', '🍷'); - Smilies::add($b, ':cocktail glass:', '🍸'); - Smilies::add($b, ':tropical drink:', '🍹'); - Smilies::add($b, ':beer mug:', '🍺'); + Smilies::add($b, ':teacup without handle:', '🍵'); + Smilies::add($b, ':sake:', '🍶'); + Smilies::add($b, ':bottle with popping cork:', '🍾'); + Smilies::add($b, ':wine glass:', '🍷'); + Smilies::add($b, ':cocktail glass:', '🍸'); + Smilies::add($b, ':tropical drink:', '🍹'); + Smilies::add($b, ':beer mug:', '🍺'); Smilies::add($b, ':beer:', '🍺'); Smilies::add($b, ':homebrew:', '🍺'); - Smilies::add($b, ':clinking beer mugs:', '🍻'); - Smilies::add($b, ':clinking glasses:', '🥂'); - Smilies::add($b, ':tumbler glass:', '🥃'); - Smilies::add($b, ':cup with straw:', '🥤'); -// Smilies::add($b, ':beverage box:', '🧃'); - Smilies::add($b, ':mate:', '🧉'); - Smilies::add($b, ':ice:', '🧊'); + Smilies::add($b, ':clinking beer mugs:', '🍻'); + Smilies::add($b, ':clinking glasses:', '🥂'); + Smilies::add($b, ':tumbler glass:', '🥃'); + Smilies::add($b, ':cup with straw:', '🥤'); +// Smilies::add($b, ':beverage box:', '🧃'); + Smilies::add($b, ':mate:', '🧉'); + Smilies::add($b, ':ice:', '🧊'); // dishware - Smilies::add($b, ':chopsticks:', '🥢'); - Smilies::add($b, ':fork and knife with plate:', '🍽'); - Smilies::add($b, ':fork and knife:', '🍴'); - Smilies::add($b, ':spoon:', '🥄'); - Smilies::add($b, ':kitchen knife:', '🔪'); - Smilies::add($b, ':amphora:', '🏺'); + Smilies::add($b, ':chopsticks:', '🥢'); + Smilies::add($b, ':fork and knife with plate:', '🍽'); + Smilies::add($b, ':fork and knife:', '🍴'); + Smilies::add($b, ':spoon:', '🥄'); + Smilies::add($b, ':kitchen knife:', '🔪'); + Smilies::add($b, ':amphora:', '🏺'); // Travel & Places // place-map - Smilies::add($b, ':globe showing Europe-Africa:', '🌍'); - Smilies::add($b, ':globe showing Americas:', '🌎'); - Smilies::add($b, ':globe showing Asia-Australia:', '🌏'); - Smilies::add($b, ':globe with meridians:', '🌐'); - Smilies::add($b, ':world map:', '🗺'); - Smilies::add($b, ':map of Japan:', '🗾'); - Smilies::add($b, ':compass:', '🧭'); + Smilies::add($b, ':globe showing Europe-Africa:', '🌍'); + Smilies::add($b, ':globe showing Americas:', '🌎'); + Smilies::add($b, ':globe showing Asia-Australia:', '🌏'); + Smilies::add($b, ':globe with meridians:', '🌐'); + Smilies::add($b, ':world map:', '🗺'); + Smilies::add($b, ':map of Japan:', '🗾'); + Smilies::add($b, ':compass:', '🧭'); // place-geographic - Smilies::add($b, ':snow-capped mountain:', '🏔'); - Smilies::add($b, ':mountain:', '⛰'); - Smilies::add($b, ':volcano:', '🌋'); - Smilies::add($b, ':mount fuji:', '🗻'); - Smilies::add($b, ':camping:', '🏕'); - Smilies::add($b, ':beach with umbrella:', '🏖'); - Smilies::add($b, ':desert:', '🏜'); - Smilies::add($b, ':desert island:', '🏝'); - Smilies::add($b, ':national park:', '🏞'); + Smilies::add($b, ':snow-capped mountain:', '🏔'); + Smilies::add($b, ':mountain:', '⛰'); + Smilies::add($b, ':volcano:', '🌋'); + Smilies::add($b, ':mount fuji:', '🗻'); + Smilies::add($b, ':camping:', '🏕'); + Smilies::add($b, ':beach with umbrella:', '🏖'); + Smilies::add($b, ':desert:', '🏜'); + Smilies::add($b, ':desert island:', '🏝'); + Smilies::add($b, ':national park:', '🏞'); // place-building - Smilies::add($b, ':stadium:', '🏟'); - Smilies::add($b, ':classical building:', '🏛'); - Smilies::add($b, ':building construction:', '🏗'); - Smilies::add($b, ':brick:', '🧱'); - Smilies::add($b, ':houses:', '🏘'); - Smilies::add($b, ':derelict house:', '🏚'); - Smilies::add($b, ':house:', '🏠'); - Smilies::add($b, ':house with garden:', '🏡'); - Smilies::add($b, ':office building:', '🏢'); - Smilies::add($b, ':Japanese post office:', '🏣'); - Smilies::add($b, ':post office:', '🏤'); - Smilies::add($b, ':hospital:', '🏥'); - Smilies::add($b, ':bank:', '🏦'); - Smilies::add($b, ':hotel:', '🏨'); - Smilies::add($b, ':love hotel:', '🏩'); - Smilies::add($b, ':convenience store:', '🏪'); - Smilies::add($b, ':school:', '🏫'); - Smilies::add($b, ':department store:', '🏬'); - Smilies::add($b, ':factory:', '🏭'); - Smilies::add($b, ':Japanese castle:', '🏯'); - Smilies::add($b, ':castle:', '🏰'); - Smilies::add($b, ':wedding:', '💒'); - Smilies::add($b, ':Tokyo tower:', '🗼'); - Smilies::add($b, ':Statue of Liberty:', '🗽'); - + Smilies::add($b, ':stadium:', '🏟'); + Smilies::add($b, ':classical building:', '🏛'); + Smilies::add($b, ':building construction:', '🏗'); + Smilies::add($b, ':brick:', '🧱'); + Smilies::add($b, ':houses:', '🏘'); + Smilies::add($b, ':derelict house:', '🏚'); + Smilies::add($b, ':house:', '🏠'); + Smilies::add($b, ':house with garden:', '🏡'); + Smilies::add($b, ':office building:', '🏢'); + Smilies::add($b, ':Japanese post office:', '🏣'); + Smilies::add($b, ':post office:', '🏤'); + Smilies::add($b, ':hospital:', '🏥'); + Smilies::add($b, ':bank:', '🏦'); + Smilies::add($b, ':hotel:', '🏨'); + Smilies::add($b, ':love hotel:', '🏩'); + Smilies::add($b, ':convenience store:', '🏪'); + Smilies::add($b, ':school:', '🏫'); + Smilies::add($b, ':department store:', '🏬'); + Smilies::add($b, ':factory:', '🏭'); + Smilies::add($b, ':Japanese castle:', '🏯'); + Smilies::add($b, ':castle:', '🏰'); + Smilies::add($b, ':wedding:', '💒'); + Smilies::add($b, ':Tokyo tower:', '🗼'); + Smilies::add($b, ':Statue of Liberty:', '🗽'); // place-religious - Smilies::add($b, ':church:', '⛪'); - Smilies::add($b, ':mosque:', '🕌'); -// Smilies::add($b, ':hindu temple:', '🛕'); - Smilies::add($b, ':synagogue:', '🕍'); - Smilies::add($b, ':shinto shrine:', '⛩'); - Smilies::add($b, ':kaaba:', '🕋'); + Smilies::add($b, ':church:', '⛪'); + Smilies::add($b, ':mosque:', '🕌'); +// Smilies::add($b, ':hindu temple:', '🛕'); + Smilies::add($b, ':synagogue:', '🕍'); + Smilies::add($b, ':shinto shrine:', '⛩'); + Smilies::add($b, ':kaaba:', '🕋'); // place-other - Smilies::add($b, ':fountain:', '⛲'); - Smilies::add($b, ':tent:', '⛺'); - Smilies::add($b, ':foggy:', '🌁'); - Smilies::add($b, ':night with stars:', '🌃'); - Smilies::add($b, ':cityscape:', '🏙'); - Smilies::add($b, ':sunrise over mountains:', '🌄'); - Smilies::add($b, ':sunrise:', '🌅'); - Smilies::add($b, ':cityscape at dusk:', '🌆'); - Smilies::add($b, ':sunset:', '🌇'); - Smilies::add($b, ':bridge at night:', '🌉'); - Smilies::add($b, ':hot springs:', '♨'); - Smilies::add($b, ':carousel horse:', '🎠'); - Smilies::add($b, ':ferris wheel:', '🎡'); - Smilies::add($b, ':roller coaster:', '🎢'); - Smilies::add($b, ':barber pole:', '💈'); - Smilies::add($b, ':circus tent:', '🎪'); + Smilies::add($b, ':fountain:', '⛲'); + Smilies::add($b, ':tent:', '⛺'); + Smilies::add($b, ':foggy:', '🌁'); + Smilies::add($b, ':night with stars:', '🌃'); + Smilies::add($b, ':cityscape:', '🏙'); + Smilies::add($b, ':sunrise over mountains:', '🌄'); + Smilies::add($b, ':sunrise:', '🌅'); + Smilies::add($b, ':cityscape at dusk:', '🌆'); + Smilies::add($b, ':sunset:', '🌇'); + Smilies::add($b, ':bridge at night:', '🌉'); + Smilies::add($b, ':hot springs:', '♨'); + Smilies::add($b, ':carousel horse:', '🎠'); + Smilies::add($b, ':ferris wheel:', '🎡'); + Smilies::add($b, ':roller coaster:', '🎢'); + Smilies::add($b, ':barber pole:', '💈'); + Smilies::add($b, ':circus tent:', '🎪'); // transport-ground - Smilies::add($b, ':locomotive:', '🚂'); - Smilies::add($b, ':railway car:', '🚃'); - Smilies::add($b, ':high-speed train:', '🚄'); - Smilies::add($b, ':bullet train:', '🚅'); - Smilies::add($b, ':train:', '🚆'); - Smilies::add($b, ':metro:', '🚇'); - Smilies::add($b, ':light rail:', '🚈'); - Smilies::add($b, ':station:', '🚉'); - Smilies::add($b, ':tram:', '🚊'); - Smilies::add($b, ':monorail:', '🚝'); - Smilies::add($b, ':mountain railway:', '🚞'); - Smilies::add($b, ':tram car:', '🚋'); - Smilies::add($b, ':bus:', '🚌'); - Smilies::add($b, ':oncoming bus:', '🚍'); - Smilies::add($b, ':trolleybus:', '🚎'); - Smilies::add($b, ':minibus:', '🚐'); - Smilies::add($b, ':ambulance:', '🚑'); - Smilies::add($b, ':fire engine:', '🚒'); - Smilies::add($b, ':police car:', '🚓'); - Smilies::add($b, ':oncoming police car:', '🚔'); - Smilies::add($b, ':taxi:', '🚕'); - Smilies::add($b, ':oncoming taxi:', '🚖'); - Smilies::add($b, ':automobile:', '🚗'); - Smilies::add($b, ':oncoming automobile:', '🚘'); - Smilies::add($b, ':sport utility vehicle:', '🚙'); - Smilies::add($b, ':delivery truck:', '🚚'); - Smilies::add($b, ':articulated lorry:', '🚛'); - Smilies::add($b, ':tractor:', '🚜'); - Smilies::add($b, ':racing car:', '🏎'); - Smilies::add($b, ':motorcycle:', '🏍'); - Smilies::add($b, ':motor scooter:', '🛵'); -// Smilies::add($b, ':manual wheelchair:', '🦽'); -// Smilies::add($b, ':motorized wheelchair:', '🦼'); -// Smilies::add($b, ':auto rickshaw:', '🛺'); - Smilies::add($b, ':bicycle:', '🚲'); - Smilies::add($b, ':kick scooter:', '🛴'); - Smilies::add($b, ':skateboard:', '🛹'); - Smilies::add($b, ':bus stop:', '🚏'); - Smilies::add($b, ':motorway:', '🛣'); - Smilies::add($b, ':railway track:', '🛤'); - Smilies::add($b, ':oil drum:', '🛢'); - Smilies::add($b, ':fuel pump:', '⛽'); - Smilies::add($b, ':police car light:', '🚨'); - Smilies::add($b, ':horizontal traffic light:', '🚥'); - Smilies::add($b, ':vertical traffic light:', '🚦'); - Smilies::add($b, ':stop sign:', '🛑'); - Smilies::add($b, ':construction:', '🚧'); + Smilies::add($b, ':locomotive:', '🚂'); + Smilies::add($b, ':railway car:', '🚃'); + Smilies::add($b, ':high-speed train:', '🚄'); + Smilies::add($b, ':bullet train:', '🚅'); + Smilies::add($b, ':train:', '🚆'); + Smilies::add($b, ':metro:', '🚇'); + Smilies::add($b, ':light rail:', '🚈'); + Smilies::add($b, ':station:', '🚉'); + Smilies::add($b, ':tram:', '🚊'); + Smilies::add($b, ':monorail:', '🚝'); + Smilies::add($b, ':mountain railway:', '🚞'); + Smilies::add($b, ':tram car:', '🚋'); + Smilies::add($b, ':bus:', '🚌'); + Smilies::add($b, ':oncoming bus:', '🚍'); + Smilies::add($b, ':trolleybus:', '🚎'); + Smilies::add($b, ':minibus:', '🚐'); + Smilies::add($b, ':ambulance:', '🚑'); + Smilies::add($b, ':fire engine:', '🚒'); + Smilies::add($b, ':police car:', '🚓'); + Smilies::add($b, ':oncoming police car:', '🚔'); + Smilies::add($b, ':taxi:', '🚕'); + Smilies::add($b, ':oncoming taxi:', '🚖'); + Smilies::add($b, ':automobile:', '🚗'); + Smilies::add($b, ':oncoming automobile:', '🚘'); + Smilies::add($b, ':sport utility vehicle:', '🚙'); + Smilies::add($b, ':delivery truck:', '🚚'); + Smilies::add($b, ':articulated lorry:', '🚛'); + Smilies::add($b, ':tractor:', '🚜'); + Smilies::add($b, ':racing car:', '🏎'); + Smilies::add($b, ':motorcycle:', '🏍'); + Smilies::add($b, ':motor scooter:', '🛵'); +// Smilies::add($b, ':manual wheelchair:', '🦽'); +// Smilies::add($b, ':motorized wheelchair:', '🦼'); +// Smilies::add($b, ':auto rickshaw:', '🛺'); + Smilies::add($b, ':bicycle:', '🚲'); + Smilies::add($b, ':kick scooter:', '🛴'); + Smilies::add($b, ':skateboard:', '🛹'); + Smilies::add($b, ':bus stop:', '🚏'); + Smilies::add($b, ':motorway:', '🛣'); + Smilies::add($b, ':railway track:', '🛤'); + Smilies::add($b, ':oil drum:', '🛢'); + Smilies::add($b, ':fuel pump:', '⛽'); + Smilies::add($b, ':police car light:', '🚨'); + Smilies::add($b, ':horizontal traffic light:', '🚥'); + Smilies::add($b, ':vertical traffic light:', '🚦'); + Smilies::add($b, ':stop sign:', '🛑'); + Smilies::add($b, ':construction:', '🚧'); // transport-water - Smilies::add($b, ':anchor:', '⚓'); - Smilies::add($b, ':sailboat:', '⛵'); - Smilies::add($b, ':canoe:', '🛶'); - Smilies::add($b, ':speedboat:', '🚤'); - Smilies::add($b, ':passenger ship:', '🛳'); - Smilies::add($b, ':ferry:', '⛴'); - Smilies::add($b, ':motor boat:', '🛥'); - Smilies::add($b, ':ship:', '🚢'); + Smilies::add($b, ':anchor:', '⚓'); + Smilies::add($b, ':sailboat:', '⛵'); + Smilies::add($b, ':canoe:', '🛶'); + Smilies::add($b, ':speedboat:', '🚤'); + Smilies::add($b, ':passenger ship:', '🛳'); + Smilies::add($b, ':ferry:', '⛴'); + Smilies::add($b, ':motor boat:', '🛥'); + Smilies::add($b, ':ship:', '🚢'); // transport-air - Smilies::add($b, ':airplane:', '✈'); - Smilies::add($b, ':small airplane:', '🛩'); - Smilies::add($b, ':airplane departure:', '🛫'); - Smilies::add($b, ':airplane arrival:', '🛬'); - Smilies::add($b, ':parachute:', '🪂'); - Smilies::add($b, ':seat:', '💺'); - Smilies::add($b, ':helicopter:', '🚁'); - Smilies::add($b, ':suspension railway:', '🚟'); - Smilies::add($b, ':mountain cableway:', '🚠'); - Smilies::add($b, ':aerial tramway:', '🚡'); - Smilies::add($b, ':satellite:', '🛰'); - Smilies::add($b, ':rocket:', '🚀'); - Smilies::add($b, ':flying saucer:', '🛸'); + Smilies::add($b, ':airplane:', '✈'); + Smilies::add($b, ':small airplane:', '🛩'); + Smilies::add($b, ':airplane departure:', '🛫'); + Smilies::add($b, ':airplane arrival:', '🛬'); + Smilies::add($b, ':parachute:', '🪂'); + Smilies::add($b, ':seat:', '💺'); + Smilies::add($b, ':helicopter:', '🚁'); + Smilies::add($b, ':suspension railway:', '🚟'); + Smilies::add($b, ':mountain cableway:', '🚠'); + Smilies::add($b, ':aerial tramway:', '🚡'); + Smilies::add($b, ':satellite:', '🛰'); + Smilies::add($b, ':rocket:', '🚀'); + Smilies::add($b, ':flying saucer:', '🛸'); // hotel - Smilies::add($b, ':bellhop bell:', '🛎'); - Smilies::add($b, ':luggage:', '🧳'); + Smilies::add($b, ':bellhop bell:', '🛎'); + Smilies::add($b, ':luggage:', '🧳'); // time - Smilies::add($b, ':hourglass done:', '⌛'); - Smilies::add($b, ':hourglass not done:', '⏳'); - Smilies::add($b, ':watch:', '⌚'); - Smilies::add($b, ':alarm clock:', '⏰'); - Smilies::add($b, ':stopwatch:', '⏱'); - Smilies::add($b, ':timer clock:', '⏲'); - Smilies::add($b, ':mantelpiece clock:', '🕰'); - Smilies::add($b, ':twelve o’clock:', '🕛'); - Smilies::add($b, ':twelve-thirty:', '🕧'); - Smilies::add($b, ':one o’clock:', '🕐'); - Smilies::add($b, ':one-thirty:', '🕜'); - Smilies::add($b, ':two o’clock:', '🕑'); - Smilies::add($b, ':two-thirty:', '🕝'); - Smilies::add($b, ':three o’clock:', '🕒'); - Smilies::add($b, ':three-thirty:', '🕞'); - Smilies::add($b, ':four o’clock:', '🕓'); - Smilies::add($b, ':four-thirty:', '🕟'); - Smilies::add($b, ':five o’clock:', '🕔'); - Smilies::add($b, ':five-thirty:', '🕠'); - Smilies::add($b, ':six o’clock:', '🕕'); - Smilies::add($b, ':six-thirty:', '🕡'); - Smilies::add($b, ':seven o’clock:', '🕖'); - Smilies::add($b, ':seven-thirty:', '🕢'); - Smilies::add($b, ':eight o’clock:', '🕗'); - Smilies::add($b, ':eight-thirty:', '🕣'); - Smilies::add($b, ':nine o’clock:', '🕘'); - Smilies::add($b, ':nine-thirty:', '🕤'); - Smilies::add($b, ':ten o’clock:', '🕙'); - Smilies::add($b, ':ten-thirty:', '🕥'); - Smilies::add($b, ':eleven o’clock:', '🕚'); - Smilies::add($b, ':eleven-thirty:', '🕦'); + Smilies::add($b, ':hourglass done:', '⌛'); + Smilies::add($b, ':hourglass not done:', '⏳'); + Smilies::add($b, ':watch:', '⌚'); + Smilies::add($b, ':alarm clock:', '⏰'); + Smilies::add($b, ':stopwatch:', '⏱'); + Smilies::add($b, ':timer clock:', '⏲'); + Smilies::add($b, ':mantelpiece clock:', '🕰'); + Smilies::add($b, ':twelve o’clock:', '🕛'); + Smilies::add($b, ':twelve-thirty:', '🕧'); + Smilies::add($b, ':one o’clock:', '🕐'); + Smilies::add($b, ':one-thirty:', '🕜'); + Smilies::add($b, ':two o’clock:', '🕑'); + Smilies::add($b, ':two-thirty:', '🕝'); + Smilies::add($b, ':three o’clock:', '🕒'); + Smilies::add($b, ':three-thirty:', '🕞'); + Smilies::add($b, ':four o’clock:', '🕓'); + Smilies::add($b, ':four-thirty:', '🕟'); + Smilies::add($b, ':five o’clock:', '🕔'); + Smilies::add($b, ':five-thirty:', '🕠'); + Smilies::add($b, ':six o’clock:', '🕕'); + Smilies::add($b, ':six-thirty:', '🕡'); + Smilies::add($b, ':seven o’clock:', '🕖'); + Smilies::add($b, ':seven-thirty:', '🕢'); + Smilies::add($b, ':eight o’clock:', '🕗'); + Smilies::add($b, ':eight-thirty:', '🕣'); + Smilies::add($b, ':nine o’clock:', '🕘'); + Smilies::add($b, ':nine-thirty:', '🕤'); + Smilies::add($b, ':ten o’clock:', '🕙'); + Smilies::add($b, ':ten-thirty:', '🕥'); + Smilies::add($b, ':eleven o’clock:', '🕚'); + Smilies::add($b, ':eleven-thirty:', '🕦'); // sky & weather - Smilies::add($b, ':new moon:', '🌑'); - Smilies::add($b, ':waxing crescent moon:', '🌒'); - Smilies::add($b, ':first quarter moon:', '🌓'); - Smilies::add($b, ':waxing gibbous moon:', '🌔'); - Smilies::add($b, ':full moon:', '🌕'); - Smilies::add($b, ':waning gibbous moon:', '🌖'); - Smilies::add($b, ':last quarter moon:', '🌗'); - Smilies::add($b, ':waning crescent moon:', '🌘'); - Smilies::add($b, ':crescent moon:', '🌙'); - Smilies::add($b, ':new moon face:', '🌚'); - Smilies::add($b, ':first quarter moon face:', '🌛'); - Smilies::add($b, ':last quarter moon face:', '🌜'); - Smilies::add($b, ':thermometer:', '🌡'); - Smilies::add($b, ':sun:', '☀'); - Smilies::add($b, ':full moon face:', '🌝'); - Smilies::add($b, ':sun with face:', '🌞'); - Smilies::add($b, ':ringed planet:', '🪐'); - Smilies::add($b, ':star:', '⭐'); - Smilies::add($b, ':glowing star:', '🌟'); - Smilies::add($b, ':shooting star:', '🌠'); - Smilies::add($b, ':milky way:', '🌌'); - Smilies::add($b, ':cloud:', '☁'); - Smilies::add($b, ':sun behind cloud:', '⛅'); - Smilies::add($b, ':cloud with lightning and rain:', '⛈'); - Smilies::add($b, ':sun behind small cloud:', '🌤'); - Smilies::add($b, ':sun behind large cloud:', '🌥'); - Smilies::add($b, ':sun behind rain cloud:', '🌦'); - Smilies::add($b, ':cloud with rain:', '🌧'); - Smilies::add($b, ':cloud with snow:', '🌨'); - Smilies::add($b, ':cloud with lightning:', '🌩'); - Smilies::add($b, ':tornado:', '🌪'); - Smilies::add($b, ':fog:', '🌫'); - Smilies::add($b, ':wind face:', '🌬'); - Smilies::add($b, ':cyclone:', '🌀'); - Smilies::add($b, ':rainbow:', '🌈'); - Smilies::add($b, ':closed umbrella:', '🌂'); - Smilies::add($b, ':umbrella:', '☂'); - Smilies::add($b, ':umbrella with rain drops:', '☔'); - Smilies::add($b, ':umbrella on ground:', '⛱'); - Smilies::add($b, ':high voltage:', '⚡'); - Smilies::add($b, ':snowflake:', '❄'); - Smilies::add($b, ':snowman:', '☃'); - Smilies::add($b, ':snowman without snow:', '⛄'); - Smilies::add($b, ':comet:', '☄'); - Smilies::add($b, ':fire:', '🔥'); - Smilies::add($b, ':droplet:', '💧'); - Smilies::add($b, ':water wave:', '🌊'); + Smilies::add($b, ':new moon:', '🌑'); + Smilies::add($b, ':waxing crescent moon:', '🌒'); + Smilies::add($b, ':first quarter moon:', '🌓'); + Smilies::add($b, ':waxing gibbous moon:', '🌔'); + Smilies::add($b, ':full moon:', '🌕'); + Smilies::add($b, ':waning gibbous moon:', '🌖'); + Smilies::add($b, ':last quarter moon:', '🌗'); + Smilies::add($b, ':waning crescent moon:', '🌘'); + Smilies::add($b, ':crescent moon:', '🌙'); + Smilies::add($b, ':new moon face:', '🌚'); + Smilies::add($b, ':first quarter moon face:', '🌛'); + Smilies::add($b, ':last quarter moon face:', '🌜'); + Smilies::add($b, ':thermometer:', '🌡'); + Smilies::add($b, ':sun:', '☀'); + Smilies::add($b, ':full moon face:', '🌝'); + Smilies::add($b, ':sun with face:', '🌞'); + Smilies::add($b, ':ringed planet:', '🪐'); + Smilies::add($b, ':star:', '⭐'); + Smilies::add($b, ':glowing star:', '🌟'); + Smilies::add($b, ':shooting star:', '🌠'); + Smilies::add($b, ':milky way:', '🌌'); + Smilies::add($b, ':cloud:', '☁'); + Smilies::add($b, ':sun behind cloud:', '⛅'); + Smilies::add($b, ':cloud with lightning and rain:', '⛈'); + Smilies::add($b, ':sun behind small cloud:', '🌤'); + Smilies::add($b, ':sun behind large cloud:', '🌥'); + Smilies::add($b, ':sun behind rain cloud:', '🌦'); + Smilies::add($b, ':cloud with rain:', '🌧'); + Smilies::add($b, ':cloud with snow:', '🌨'); + Smilies::add($b, ':cloud with lightning:', '🌩'); + Smilies::add($b, ':tornado:', '🌪'); + Smilies::add($b, ':fog:', '🌫'); + Smilies::add($b, ':wind face:', '🌬'); + Smilies::add($b, ':cyclone:', '🌀'); + Smilies::add($b, ':rainbow:', '🌈'); + Smilies::add($b, ':closed umbrella:', '🌂'); + Smilies::add($b, ':umbrella:', '☂'); + Smilies::add($b, ':umbrella with rain drops:', '☔'); + Smilies::add($b, ':umbrella on ground:', '⛱'); + Smilies::add($b, ':high voltage:', '⚡'); + Smilies::add($b, ':snowflake:', '❄'); + Smilies::add($b, ':snowman:', '☃'); + Smilies::add($b, ':snowman without snow:', '⛄'); + Smilies::add($b, ':comet:', '☄'); + Smilies::add($b, ':fire:', '🔥'); + Smilies::add($b, ':droplet:', '💧'); + Smilies::add($b, ':water wave:', '🌊'); // Activities // event - Smilies::add($b, ':jack-o-lantern:', '🎃'); - Smilies::add($b, ':Christmas tree:', '🎄'); - Smilies::add($b, ':fireworks:', '🎆'); - Smilies::add($b, ':sparkler:', '🎇'); - Smilies::add($b, ':firecracker:', '🧨'); - Smilies::add($b, ':sparkles:', '✨'); - Smilies::add($b, ':balloon:', '🎈'); - Smilies::add($b, ':party popper:', '🎉'); - Smilies::add($b, ':confetti ball:', '🎊'); - Smilies::add($b, ':tanabata tree:', '🎋'); - Smilies::add($b, ':pine decoration:', '🎍'); - Smilies::add($b, ':Japanese dolls:', '🎎'); - Smilies::add($b, ':carp streamer:', '🎏'); - Smilies::add($b, ':wind chime:', '🎐'); - Smilies::add($b, ':moon viewing ceremony:', '🎑'); - Smilies::add($b, ':red envelope:', '🧧'); - Smilies::add($b, ':ribbon:', '🎀'); - Smilies::add($b, ':wrapped gift:', '🎁'); - Smilies::add($b, ':reminder ribbon:', '🎗'); - Smilies::add($b, ':admission tickets:', '🎟'); - Smilies::add($b, ':ticket:', '🎫'); + Smilies::add($b, ':jack-o-lantern:', '🎃'); + Smilies::add($b, ':Christmas tree:', '🎄'); + Smilies::add($b, ':fireworks:', '🎆'); + Smilies::add($b, ':sparkler:', '🎇'); + Smilies::add($b, ':firecracker:', '🧨'); + Smilies::add($b, ':sparkles:', '✨'); + Smilies::add($b, ':balloon:', '🎈'); + Smilies::add($b, ':party popper:', '🎉'); + Smilies::add($b, ':confetti ball:', '🎊'); + Smilies::add($b, ':tanabata tree:', '🎋'); + Smilies::add($b, ':pine decoration:', '🎍'); + Smilies::add($b, ':Japanese dolls:', '🎎'); + Smilies::add($b, ':carp streamer:', '🎏'); + Smilies::add($b, ':wind chime:', '🎐'); + Smilies::add($b, ':moon viewing ceremony:', '🎑'); + Smilies::add($b, ':red envelope:', '🧧'); + Smilies::add($b, ':ribbon:', '🎀'); + Smilies::add($b, ':wrapped gift:', '🎁'); + Smilies::add($b, ':reminder ribbon:', '🎗'); + Smilies::add($b, ':admission tickets:', '🎟'); + Smilies::add($b, ':ticket:', '🎫'); // award-medal - Smilies::add($b, ':military medal:', '🎖'); - Smilies::add($b, ':trophy:', '🏆'); - Smilies::add($b, ':sports medal:', '🏅'); - Smilies::add($b, ':1st place medal:', '🥇'); - Smilies::add($b, ':2nd place medal:', '🥈'); - Smilies::add($b, ':3rd place medal:', '🥉'); + Smilies::add($b, ':military medal:', '🎖'); + Smilies::add($b, ':trophy:', '🏆'); + Smilies::add($b, ':sports medal:', '🏅'); + Smilies::add($b, ':1st place medal:', '🥇'); + Smilies::add($b, ':2nd place medal:', '🥈'); + Smilies::add($b, ':3rd place medal:', '🥉'); // sport - Smilies::add($b, ':soccer ball:', '⚽'); - Smilies::add($b, ':baseball:', '⚾'); - Smilies::add($b, ':softball:', '🥎'); - Smilies::add($b, ':basketball:', '🏀'); - Smilies::add($b, ':volleyball:', '🏐'); - Smilies::add($b, ':american football:', '🏈'); + Smilies::add($b, ':soccer ball:', '⚽'); + Smilies::add($b, ':baseball:', '⚾'); + Smilies::add($b, ':softball:', '🥎'); + Smilies::add($b, ':basketball:', '🏀'); + Smilies::add($b, ':volleyball:', '🏐'); + Smilies::add($b, ':american football:', '🏈'); Smilies::add($b, ':football:', '🏈'); - Smilies::add($b, ':rugby football:', '🏉'); - Smilies::add($b, ':tennis:', '🎾'); - Smilies::add($b, ':flying disc:', '🥏'); - Smilies::add($b, ':bowling:', '🎳'); - Smilies::add($b, ':cricket game:', '🏏'); - Smilies::add($b, ':field hockey:', '🏑'); - Smilies::add($b, ':ice hockey:', '🏒'); - Smilies::add($b, ':lacrosse:', '🥍'); - Smilies::add($b, ':ping pong:', '🏓'); - Smilies::add($b, ':badminton:', '🏸'); - Smilies::add($b, ':boxing glove:', '🥊'); - Smilies::add($b, ':martial arts uniform:', '🥋'); - Smilies::add($b, ':goal net:', '🥅'); - Smilies::add($b, ':flag in hole:', '⛳'); - Smilies::add($b, ':ice skate:', '⛸'); - Smilies::add($b, ':fishing pole:', '🎣'); -// Smilies::add($b, ':diving mask:', '🤿'); - Smilies::add($b, ':running shirt:', '🎽'); - Smilies::add($b, ':skis:', '🎿'); - Smilies::add($b, ':sled:', '🛷'); - Smilies::add($b, ':curling stone:', '🥌'); + Smilies::add($b, ':rugby football:', '🏉'); + Smilies::add($b, ':tennis:', '🎾'); + Smilies::add($b, ':flying disc:', '🥏'); + Smilies::add($b, ':bowling:', '🎳'); + Smilies::add($b, ':cricket game:', '🏏'); + Smilies::add($b, ':field hockey:', '🏑'); + Smilies::add($b, ':ice hockey:', '🏒'); + Smilies::add($b, ':lacrosse:', '🥍'); + Smilies::add($b, ':ping pong:', '🏓'); + Smilies::add($b, ':badminton:', '🏸'); + Smilies::add($b, ':boxing glove:', '🥊'); + Smilies::add($b, ':martial arts uniform:', '🥋'); + Smilies::add($b, ':goal net:', '🥅'); + Smilies::add($b, ':flag in hole:', '⛳'); + Smilies::add($b, ':ice skate:', '⛸'); + Smilies::add($b, ':fishing pole:', '🎣'); +// Smilies::add($b, ':diving mask:', '🤿'); + Smilies::add($b, ':running shirt:', '🎽'); + Smilies::add($b, ':skis:', '🎿'); + Smilies::add($b, ':sled:', '🛷'); + Smilies::add($b, ':curling stone:', '🥌'); Smilies::add($b, ':cycling:', '🚴'); Smilies::add($b, ':darts:', '🎯'); Smilies::add($b, ':fencing:', '🤺'); Smilies::add($b, ':juggling:', '🤹'); -// Smilies::add($b, ':skipping:', '&#x;'); -// Smilies::add($b, ':archery:', '&#x;'); +// Smilies::add($b, ':skipping:', '&#x;'); +// Smilies::add($b, ':archery:', '&#x;'); Smilies::add($b, ':surfing:', '🏄'); Smilies::add($b, ':snooker:', '🎱'); Smilies::add($b, ':horseriding:', '🏇'); // game - Smilies::add($b, ':direct hit:', '🎯'); - Smilies::add($b, ':yo-yo:', '🪀'); - Smilies::add($b, ':kite:', '🪁'); - Smilies::add($b, ':pool 8 ball:', '🎱'); - Smilies::add($b, ':crystal ball:', '🔮'); - Smilies::add($b, ':nazar amulet:', '🧿'); - Smilies::add($b, ':video game:', '🎮'); - Smilies::add($b, ':joystick:', '🕹'); - Smilies::add($b, ':slot machine:', '🎰'); - Smilies::add($b, ':game die:', '🎲'); - Smilies::add($b, ':puzzle piece:', '🧩'); - Smilies::add($b, ':teddy bear:', '🧸'); - Smilies::add($b, ':spade suit:', '♠'); - Smilies::add($b, ':heart suit:', '♥'); - Smilies::add($b, ':diamond suit:', '♦'); - Smilies::add($b, ':club suit:', '♣'); - Smilies::add($b, ':chess pawn:', '♟'); - Smilies::add($b, ':joker:', '🃏'); - Smilies::add($b, ':mahjong red dragon:', '🀄'); - Smilies::add($b, ':flower playing cards:', '🎴'); + Smilies::add($b, ':direct hit:', '🎯'); + Smilies::add($b, ':yo-yo:', '🪀'); + Smilies::add($b, ':kite:', '🪁'); + Smilies::add($b, ':pool 8 ball:', '🎱'); + Smilies::add($b, ':crystal ball:', '🔮'); + Smilies::add($b, ':nazar amulet:', '🧿'); + Smilies::add($b, ':video game:', '🎮'); + Smilies::add($b, ':joystick:', '🕹'); + Smilies::add($b, ':slot machine:', '🎰'); + Smilies::add($b, ':game die:', '🎲'); + Smilies::add($b, ':puzzle piece:', '🧩'); + Smilies::add($b, ':teddy bear:', '🧸'); + Smilies::add($b, ':spade suit:', '♠'); + Smilies::add($b, ':heart suit:', '♥'); + Smilies::add($b, ':diamond suit:', '♦'); + Smilies::add($b, ':club suit:', '♣'); + Smilies::add($b, ':chess pawn:', '♟'); + Smilies::add($b, ':joker:', '🃏'); + Smilies::add($b, ':mahjong red dragon:', '🀄'); + Smilies::add($b, ':flower playing cards:', '🎴'); // arts & crafts - Smilies::add($b, ':performing arts:', '🎭'); - Smilies::add($b, ':framed picture:', '🖼'); - Smilies::add($b, ':artist palette:', '🎨'); - Smilies::add($b, ':thread:', '🧵'); - Smilies::add($b, ':yarn:', '🧶'); + Smilies::add($b, ':performing arts:', '🎭'); + Smilies::add($b, ':framed picture:', '🖼'); + Smilies::add($b, ':artist palette:', '🎨'); + Smilies::add($b, ':thread:', '🧵'); + Smilies::add($b, ':yarn:', '🧶'); // Objects // clothing - Smilies::add($b, ':glasses:', '👓'); - Smilies::add($b, ':sunglasses:', '🕶'); - Smilies::add($b, ':goggles:', '🥽'); - Smilies::add($b, ':lab coat:', '🥼'); - Smilies::add($b, ':safety vest:', '🦺'); - Smilies::add($b, ':necktie:', '👔'); - Smilies::add($b, ':t-shirt:', '👕'); - Smilies::add($b, ':jeans:', '👖'); - Smilies::add($b, ':scarf:', '🧣'); - Smilies::add($b, ':gloves:', '🧤'); - Smilies::add($b, ':coat:', '🧥'); - Smilies::add($b, ':socks:', '🧦'); - Smilies::add($b, ':dress:', '👗'); - Smilies::add($b, ':kimono:', '👘'); - Smilies::add($b, ':sari:', '🥻'); - Smilies::add($b, ':one-piece swimsuit:', '🩱'); - Smilies::add($b, ':briefs:', '🩲'); - Smilies::add($b, ':shorts:', '🩳'); - Smilies::add($b, ':bikini:', '👙'); - Smilies::add($b, ':woman’s clothes:', '👚'); - Smilies::add($b, ':purse:', '👛'); - Smilies::add($b, ':handbag:', '👜'); - Smilies::add($b, ':clutch bag:', '👝'); - Smilies::add($b, ':shopping bags:', '🛍'); - Smilies::add($b, ':backpack:', '🎒'); - Smilies::add($b, ':man’s shoe:', '👞'); - Smilies::add($b, ':running shoe:', '👟'); - Smilies::add($b, ':hiking boot:', '🥾'); - Smilies::add($b, ':flat shoe:', '🥿'); - Smilies::add($b, ':high-heeled shoe:', '👠'); - Smilies::add($b, ':woman’s sandal:', '👡'); -// Smilies::add($b, ':ballet shoes:', '🩰'); - Smilies::add($b, ':woman’s boot:', '👢'); - Smilies::add($b, ':crown:', '👑'); - Smilies::add($b, ':woman’s hat:', '👒'); - Smilies::add($b, ':top hat:', '🎩'); - Smilies::add($b, ':graduation cap:', '🎓'); - Smilies::add($b, ':billed cap:', '🧢'); - Smilies::add($b, ':rescue worker’s helmet:', '⛑'); - Smilies::add($b, ':prayer beads:', '📿'); - Smilies::add($b, ':lipstick:', '💄'); - Smilies::add($b, ':ring:', '💍'); - Smilies::add($b, ':gem stone:', '💎'); + Smilies::add($b, ':glasses:', '👓'); + Smilies::add($b, ':sunglasses:', '🕶'); + Smilies::add($b, ':goggles:', '🥽'); + Smilies::add($b, ':lab coat:', '🥼'); + Smilies::add($b, ':safety vest:', '🦺'); + Smilies::add($b, ':necktie:', '👔'); + Smilies::add($b, ':t-shirt:', '👕'); + Smilies::add($b, ':jeans:', '👖'); + Smilies::add($b, ':scarf:', '🧣'); + Smilies::add($b, ':gloves:', '🧤'); + Smilies::add($b, ':coat:', '🧥'); + Smilies::add($b, ':socks:', '🧦'); + Smilies::add($b, ':dress:', '👗'); + Smilies::add($b, ':kimono:', '👘'); + Smilies::add($b, ':sari:', '🥻'); + Smilies::add($b, ':one-piece swimsuit:', '🩱'); + Smilies::add($b, ':briefs:', '🩲'); + Smilies::add($b, ':shorts:', '🩳'); + Smilies::add($b, ':bikini:', '👙'); + Smilies::add($b, ':woman’s clothes:', '👚'); + Smilies::add($b, ':purse:', '👛'); + Smilies::add($b, ':handbag:', '👜'); + Smilies::add($b, ':clutch bag:', '👝'); + Smilies::add($b, ':shopping bags:', '🛍'); + Smilies::add($b, ':backpack:', '🎒'); + Smilies::add($b, ':man’s shoe:', '👞'); + Smilies::add($b, ':running shoe:', '👟'); + Smilies::add($b, ':hiking boot:', '🥾'); + Smilies::add($b, ':flat shoe:', '🥿'); + Smilies::add($b, ':high-heeled shoe:', '👠'); + Smilies::add($b, ':woman’s sandal:', '👡'); +// Smilies::add($b, ':ballet shoes:', '🩰'); + Smilies::add($b, ':woman’s boot:', '👢'); + Smilies::add($b, ':crown:', '👑'); + Smilies::add($b, ':woman’s hat:', '👒'); + Smilies::add($b, ':top hat:', '🎩'); + Smilies::add($b, ':graduation cap:', '🎓'); + Smilies::add($b, ':billed cap:', '🧢'); + Smilies::add($b, ':rescue worker’s helmet:', '⛑'); + Smilies::add($b, ':prayer beads:', '📿'); + Smilies::add($b, ':lipstick:', '💄'); + Smilies::add($b, ':ring:', '💍'); + Smilies::add($b, ':gem stone:', '💎'); // sound - Smilies::add($b, ':muted speaker:', '🔇'); - Smilies::add($b, ':speaker low volume:', '🔈'); - Smilies::add($b, ':speaker medium volume:', '🔉'); - Smilies::add($b, ':speaker high volume:', '🔊'); - Smilies::add($b, ':loudspeaker:', '📢'); - Smilies::add($b, ':megaphone:', '📣'); - Smilies::add($b, ':postal horn:', '📯'); - Smilies::add($b, ':bell:', '🔔'); - Smilies::add($b, ':bell with slash:', '🔕'); + Smilies::add($b, ':muted speaker:', '🔇'); + Smilies::add($b, ':speaker low volume:', '🔈'); + Smilies::add($b, ':speaker medium volume:', '🔉'); + Smilies::add($b, ':speaker high volume:', '🔊'); + Smilies::add($b, ':loudspeaker:', '📢'); + Smilies::add($b, ':megaphone:', '📣'); + Smilies::add($b, ':postal horn:', '📯'); + Smilies::add($b, ':bell:', '🔔'); + Smilies::add($b, ':bell with slash:', '🔕'); // musik - Smilies::add($b, ':musical score:', '🎼'); - Smilies::add($b, ':musical note:', '🎵'); - Smilies::add($b, ':musical notes:', '🎶'); - Smilies::add($b, ':studio microphone:', '🎙'); - Smilies::add($b, ':level slider:', '🎚'); - Smilies::add($b, ':control knobs:', '🎛'); - Smilies::add($b, ':microphone:', '🎤'); - Smilies::add($b, ':headphone:', '🎧'); - Smilies::add($b, ':radio:', '📻'); + Smilies::add($b, ':musical score:', '🎼'); + Smilies::add($b, ':musical note:', '🎵'); + Smilies::add($b, ':musical notes:', '🎶'); + Smilies::add($b, ':studio microphone:', '🎙'); + Smilies::add($b, ':level slider:', '🎚'); + Smilies::add($b, ':control knobs:', '🎛'); + Smilies::add($b, ':microphone:', '🎤'); + Smilies::add($b, ':headphone:', '🎧'); + Smilies::add($b, ':radio:', '📻'); // musical-instrument - Smilies::add($b, ':saxophone:', '🎷'); - Smilies::add($b, ':guitar:', '🎸'); - Smilies::add($b, ':musical keyboard:', '🎹'); - Smilies::add($b, ':trumpet:', '🎺'); - Smilies::add($b, ':violin:', '🎻'); -// Smilies::add($b, ':banjo:', '🪕'); - Smilies::add($b, ':drum:', '🥁'); + Smilies::add($b, ':saxophone:', '🎷'); + Smilies::add($b, ':guitar:', '🎸'); + Smilies::add($b, ':musical keyboard:', '🎹'); + Smilies::add($b, ':trumpet:', '🎺'); + Smilies::add($b, ':violin:', '🎻'); +// Smilies::add($b, ':banjo:', '🪕'); + Smilies::add($b, ':drum:', '🥁'); // phone - Smilies::add($b, ':mobile phone:', '📱'); - Smilies::add($b, ':mobile phone with arrow:', '📲'); - Smilies::add($b, ':telephone:', '☎'); - Smilies::add($b, ':telephone receiver:', '📞'); - Smilies::add($b, ':pager:', '📟'); - Smilies::add($b, ':fax machine:', '📠'); + Smilies::add($b, ':mobile phone:', '📱'); + Smilies::add($b, ':mobile phone with arrow:', '📲'); + Smilies::add($b, ':telephone:', '☎'); + Smilies::add($b, ':telephone receiver:', '📞'); + Smilies::add($b, ':pager:', '📟'); + Smilies::add($b, ':fax machine:', '📠'); // computer - Smilies::add($b, ':battery:', '🔋'); - Smilies::add($b, ':electric plug:', '🔌'); - Smilies::add($b, ':laptop:', '💻'); - Smilies::add($b, ':desktop computer:', '🖥'); - Smilies::add($b, ':printer:', '🖨'); - Smilies::add($b, ':keyboard:', '⌨'); - Smilies::add($b, ':computer mouse:', '🖱'); - Smilies::add($b, ':trackball:', '🖲'); - Smilies::add($b, ':computer disk:', '💽'); - Smilies::add($b, ':floppy disk:', '💾'); - Smilies::add($b, ':optical disk:', '💿'); - Smilies::add($b, ':dvd:', '📀'); - Smilies::add($b, ':abacus:', '🧮'); + Smilies::add($b, ':battery:', '🔋'); + Smilies::add($b, ':electric plug:', '🔌'); + Smilies::add($b, ':laptop:', '💻'); + Smilies::add($b, ':desktop computer:', '🖥'); + Smilies::add($b, ':printer:', '🖨'); + Smilies::add($b, ':keyboard:', '⌨'); + Smilies::add($b, ':computer mouse:', '🖱'); + Smilies::add($b, ':trackball:', '🖲'); + Smilies::add($b, ':computer disk:', '💽'); + Smilies::add($b, ':floppy disk:', '💾'); + Smilies::add($b, ':optical disk:', '💿'); + Smilies::add($b, ':dvd:', '📀'); + Smilies::add($b, ':abacus:', '🧮'); // light & video - Smilies::add($b, ':movie camera:', '🎥'); - Smilies::add($b, ':film frames:', '🎞'); - Smilies::add($b, ':film projector:', '📽'); - Smilies::add($b, ':clapper board:', '🎬'); - Smilies::add($b, ':television:', '📺'); - Smilies::add($b, ':camera:', '📷'); - Smilies::add($b, ':camera with flash:', '📸'); - Smilies::add($b, ':video camera:', '📹'); - Smilies::add($b, ':videocassette:', '📼'); - Smilies::add($b, ':magnifying glass tilted left:', '🔍'); - Smilies::add($b, ':magnifying glass tilted right:', '🔎'); - Smilies::add($b, ':candle:', '🕯'); - Smilies::add($b, ':light bulb:', '💡'); - Smilies::add($b, ':flashlight:', '🔦'); - Smilies::add($b, ':red paper lantern:', '🏮'); -// Smilies::add($b, ':diya lamp:', '🪔'); + Smilies::add($b, ':movie camera:', '🎥'); + Smilies::add($b, ':film frames:', '🎞'); + Smilies::add($b, ':film projector:', '📽'); + Smilies::add($b, ':clapper board:', '🎬'); + Smilies::add($b, ':television:', '📺'); + Smilies::add($b, ':camera:', '📷'); + Smilies::add($b, ':camera with flash:', '📸'); + Smilies::add($b, ':video camera:', '📹'); + Smilies::add($b, ':videocassette:', '📼'); + Smilies::add($b, ':magnifying glass tilted left:', '🔍'); + Smilies::add($b, ':magnifying glass tilted right:', '🔎'); + Smilies::add($b, ':candle:', '🕯'); + Smilies::add($b, ':light bulb:', '💡'); + Smilies::add($b, ':flashlight:', '🔦'); + Smilies::add($b, ':red paper lantern:', '🏮'); +// Smilies::add($b, ':diya lamp:', '🪔'); // book-paper - Smilies::add($b, ':notebook with decorative cover:', '📔'); - Smilies::add($b, ':closed book:', '📕'); - Smilies::add($b, ':open book:', '📖'); - Smilies::add($b, ':green book:', '📗'); - Smilies::add($b, ':blue book:', '📘'); - Smilies::add($b, ':orange book:', '📙'); - Smilies::add($b, ':books:', '📚'); - Smilies::add($b, ':notebook:', '📓'); - Smilies::add($b, ':ledger:', '📒'); - Smilies::add($b, ':page with curl:', '📃'); - Smilies::add($b, ':scroll:', '📜'); - Smilies::add($b, ':page facing up:', '📄'); - Smilies::add($b, ':newspaper:', '📰'); - Smilies::add($b, ':rolled-up newspaper:', '🗞'); - Smilies::add($b, ':bookmark tabs:', '📑'); - Smilies::add($b, ':bookmark:', '🔖'); - Smilies::add($b, ':label:', '🏷'); + Smilies::add($b, ':notebook with decorative cover:', '📔'); + Smilies::add($b, ':closed book:', '📕'); + Smilies::add($b, ':open book:', '📖'); + Smilies::add($b, ':green book:', '📗'); + Smilies::add($b, ':blue book:', '📘'); + Smilies::add($b, ':orange book:', '📙'); + Smilies::add($b, ':books:', '📚'); + Smilies::add($b, ':notebook:', '📓'); + Smilies::add($b, ':ledger:', '📒'); + Smilies::add($b, ':page with curl:', '📃'); + Smilies::add($b, ':scroll:', '📜'); + Smilies::add($b, ':page facing up:', '📄'); + Smilies::add($b, ':newspaper:', '📰'); + Smilies::add($b, ':rolled-up newspaper:', '🗞'); + Smilies::add($b, ':bookmark tabs:', '📑'); + Smilies::add($b, ':bookmark:', '🔖'); + Smilies::add($b, ':label:', '🏷'); // money - Smilies::add($b, ':money bag:', '💰'); - Smilies::add($b, ':yen banknote:', '💴'); - Smilies::add($b, ':dollar banknote:', '💵'); - Smilies::add($b, ':euro banknote:', '💶'); - Smilies::add($b, ':pound banknote:', '💷'); - Smilies::add($b, ':money with wings:', '💸'); - Smilies::add($b, ':credit card:', '💳'); - Smilies::add($b, ':receipt:', '🧾'); - Smilies::add($b, ':chart increasing with yen:', '💹'); + Smilies::add($b, ':money bag:', '💰'); + Smilies::add($b, ':yen banknote:', '💴'); + Smilies::add($b, ':dollar banknote:', '💵'); + Smilies::add($b, ':euro banknote:', '💶'); + Smilies::add($b, ':pound banknote:', '💷'); + Smilies::add($b, ':money with wings:', '💸'); + Smilies::add($b, ':credit card:', '💳'); + Smilies::add($b, ':receipt:', '🧾'); + Smilies::add($b, ':chart increasing with yen:', '💹'); // mail - Smilies::add($b, ':envelope:', '✉'); - Smilies::add($b, ':e-mail:', '📧'); - Smilies::add($b, ':incoming envelope:', '📨'); - Smilies::add($b, ':envelope with arrow:', '📩'); - Smilies::add($b, ':outbox tray:', '📤'); - Smilies::add($b, ':inbox tray:', '📥'); - Smilies::add($b, ':package:', '📦'); - Smilies::add($b, ':closed mailbox with raised flag:', '📫'); - Smilies::add($b, ':closed mailbox with lowered flag:', '📪'); - Smilies::add($b, ':open mailbox with raised flag:', '📬'); - Smilies::add($b, ':open mailbox with lowered flag:', '📭'); - Smilies::add($b, ':postbox:', '📮'); - Smilies::add($b, ':ballot box with ballot:', '🗳'); + Smilies::add($b, ':envelope:', '✉'); + Smilies::add($b, ':e-mail:', '📧'); + Smilies::add($b, ':incoming envelope:', '📨'); + Smilies::add($b, ':envelope with arrow:', '📩'); + Smilies::add($b, ':outbox tray:', '📤'); + Smilies::add($b, ':inbox tray:', '📥'); + Smilies::add($b, ':package:', '📦'); + Smilies::add($b, ':closed mailbox with raised flag:', '📫'); + Smilies::add($b, ':closed mailbox with lowered flag:', '📪'); + Smilies::add($b, ':open mailbox with raised flag:', '📬'); + Smilies::add($b, ':open mailbox with lowered flag:', '📭'); + Smilies::add($b, ':postbox:', '📮'); + Smilies::add($b, ':ballot box with ballot:', '🗳'); // writing - Smilies::add($b, ':pencil:', '✏'); - Smilies::add($b, ':black nib:', '✒'); - Smilies::add($b, ':fountain pen:', '🖋'); - Smilies::add($b, ':pen:', '🖊'); - Smilies::add($b, ':paintbrush:', '🖌'); - Smilies::add($b, ':crayon:', '🖍'); - Smilies::add($b, ':memo:', '📝'); + Smilies::add($b, ':pencil:', '✏'); + Smilies::add($b, ':black nib:', '✒'); + Smilies::add($b, ':fountain pen:', '🖋'); + Smilies::add($b, ':pen:', '🖊'); + Smilies::add($b, ':paintbrush:', '🖌'); + Smilies::add($b, ':crayon:', '🖍'); + Smilies::add($b, ':memo:', '📝'); // office - Smilies::add($b, ':briefcase:', '💼'); - Smilies::add($b, ':file folder:', '📁'); - Smilies::add($b, ':open file folder:', '📂'); - Smilies::add($b, ':card index dividers:', '🗂'); - Smilies::add($b, ':calendar:', '📅'); - Smilies::add($b, ':tear-off calendar:', '📆'); - Smilies::add($b, ':spiral notepad:', '🗒'); - Smilies::add($b, ':spiral calendar:', '🗓'); - Smilies::add($b, ':card index:', '📇'); - Smilies::add($b, ':chart increasing:', '📈'); - Smilies::add($b, ':chart decreasing:', '📉'); - Smilies::add($b, ':bar chart:', '📊'); - Smilies::add($b, ':clipboard:', '📋'); - Smilies::add($b, ':pushpin:', '📌'); - Smilies::add($b, ':round pushpin:', '📍'); - Smilies::add($b, ':paperclip:', '📎'); - Smilies::add($b, ':linked paperclips:', '🖇'); - Smilies::add($b, ':straight ruler:', '📏'); - Smilies::add($b, ':triangular ruler:', '📐'); - Smilies::add($b, ':scissors:', '✂'); - Smilies::add($b, ':card file box:', '🗃'); - Smilies::add($b, ':file cabinet:', '🗄'); - Smilies::add($b, ':wastebasket:', '🗑'); + Smilies::add($b, ':briefcase:', '💼'); + Smilies::add($b, ':file folder:', '📁'); + Smilies::add($b, ':open file folder:', '📂'); + Smilies::add($b, ':card index dividers:', '🗂'); + Smilies::add($b, ':calendar:', '📅'); + Smilies::add($b, ':tear-off calendar:', '📆'); + Smilies::add($b, ':spiral notepad:', '🗒'); + Smilies::add($b, ':spiral calendar:', '🗓'); + Smilies::add($b, ':card index:', '📇'); + Smilies::add($b, ':chart increasing:', '📈'); + Smilies::add($b, ':chart decreasing:', '📉'); + Smilies::add($b, ':bar chart:', '📊'); + Smilies::add($b, ':clipboard:', '📋'); + Smilies::add($b, ':pushpin:', '📌'); + Smilies::add($b, ':round pushpin:', '📍'); + Smilies::add($b, ':paperclip:', '📎'); + Smilies::add($b, ':linked paperclips:', '🖇'); + Smilies::add($b, ':straight ruler:', '📏'); + Smilies::add($b, ':triangular ruler:', '📐'); + Smilies::add($b, ':scissors:', '✂'); + Smilies::add($b, ':card file box:', '🗃'); + Smilies::add($b, ':file cabinet:', '🗄'); + Smilies::add($b, ':wastebasket:', '🗑'); // lock - Smilies::add($b, ':locked:', '🔒'); - Smilies::add($b, ':unlocked:', '🔓'); - Smilies::add($b, ':locked with pen:', '🔏'); - Smilies::add($b, ':locked with key:', '🔐'); - Smilies::add($b, ':key:', '🔑'); - Smilies::add($b, ':old key:', '🗝'); + Smilies::add($b, ':locked:', '🔒'); + Smilies::add($b, ':unlocked:', '🔓'); + Smilies::add($b, ':locked with pen:', '🔏'); + Smilies::add($b, ':locked with key:', '🔐'); + Smilies::add($b, ':key:', '🔑'); + Smilies::add($b, ':old key:', '🗝'); // tool - Smilies::add($b, ':hammer:', '🔨'); -// Smilies::add($b, ':axe:', '🪓'); - Smilies::add($b, ':pick:', '⛏'); - Smilies::add($b, ':hammer and pick:', '⚒'); - Smilies::add($b, ':hammer and wrench:', '🛠'); - Smilies::add($b, ':dagger:', '🗡'); + Smilies::add($b, ':hammer:', '🔨'); +// Smilies::add($b, ':axe:', '🪓'); + Smilies::add($b, ':pick:', '⛏'); + Smilies::add($b, ':hammer and pick:', '⚒'); + Smilies::add($b, ':hammer and wrench:', '🛠'); + Smilies::add($b, ':dagger:', '🗡'); Smilies::add($b, ':sabre:', '🗡'); - Smilies::add($b, ':crossed swords:', '⚔'); - Smilies::add($b, ':pistol:', '🔫'); - Smilies::add($b, ':bow and arrow:', '🏹'); - Smilies::add($b, ':shield:', '🛡'); - Smilies::add($b, ':wrench:', '🔧'); - Smilies::add($b, ':nut and bolt:', '🔩'); - Smilies::add($b, ':gear:', '⚙'); - Smilies::add($b, ':clamp:', '🗜'); - Smilies::add($b, ':balance scale:', '⚖'); - Smilies::add($b, ':white cane:', '🦯'); - Smilies::add($b, ':link:', '🔗'); - Smilies::add($b, ':chains:', '⛓'); - Smilies::add($b, ':toolbox:', '🧰'); - Smilies::add($b, ':magnet:', '🧲'); + Smilies::add($b, ':crossed swords:', '⚔'); + Smilies::add($b, ':pistol:', '🔫'); + Smilies::add($b, ':bow and arrow:', '🏹'); + Smilies::add($b, ':shield:', '🛡'); + Smilies::add($b, ':wrench:', '🔧'); + Smilies::add($b, ':nut and bolt:', '🔩'); + Smilies::add($b, ':gear:', '⚙'); + Smilies::add($b, ':clamp:', '🗜'); + Smilies::add($b, ':balance scale:', '⚖'); + Smilies::add($b, ':white cane:', '🦯'); + Smilies::add($b, ':link:', '🔗'); + Smilies::add($b, ':chains:', '⛓'); + Smilies::add($b, ':toolbox:', '🧰'); + Smilies::add($b, ':magnet:', '🧲'); // science - Smilies::add($b, ':alembic:', '⚗'); - Smilies::add($b, ':test tube:', '🧪'); - Smilies::add($b, ':petri dish:', '🧫'); - Smilies::add($b, ':dna:', '🧬'); - Smilies::add($b, ':microscope:', '🔬'); - Smilies::add($b, ':telescope:', '🔭'); - Smilies::add($b, ':satellite antenna:', '📡'); + Smilies::add($b, ':alembic:', '⚗'); + Smilies::add($b, ':test tube:', '🧪'); + Smilies::add($b, ':petri dish:', '🧫'); + Smilies::add($b, ':dna:', '🧬'); + Smilies::add($b, ':microscope:', '🔬'); + Smilies::add($b, ':telescope:', '🔭'); + Smilies::add($b, ':satellite antenna:', '📡'); + Smilies::add($b, ':asterism:', '⁂'); + Smilies::add($b, ':outlines white star:', '颅'); // medical - Smilies::add($b, ':syringe:', '💉'); - Smilies::add($b, ':drop of blood:', '🩸'); - Smilies::add($b, ':pill:', '💊'); - Smilies::add($b, ':adhesive bandage:', '🩹'); - Smilies::add($b, ':stethoscope:', '🩺'); + Smilies::add($b, ':syringe:', '💉'); + Smilies::add($b, ':drop of blood:', '🩸'); + Smilies::add($b, ':pill:', '💊'); + Smilies::add($b, ':adhesive bandage:', '🩹'); + Smilies::add($b, ':stethoscope:', '🩺'); // household - Smilies::add($b, ':door:', '🚪'); - Smilies::add($b, ':bed:', '🛏'); - Smilies::add($b, ':couch and lamp:', '🛋'); -// Smilies::add($b, ':chair:', '🪑'); - Smilies::add($b, ':toilet:', '🚽'); - Smilies::add($b, ':shower:', '🚿'); - Smilies::add($b, ':bathtub:', '🛁'); - Smilies::add($b, ':razor:', '🪒'); - Smilies::add($b, ':lotion bottle:', '🧴'); - Smilies::add($b, ':safety pin:', '🧷'); - Smilies::add($b, ':broom:', '🧹'); - Smilies::add($b, ':basket:', '🧺'); - Smilies::add($b, ':roll of paper:', '🧻'); - Smilies::add($b, ':soap:', '🧼'); - Smilies::add($b, ':sponge:', '🧽'); - Smilies::add($b, ':fire extinguisher:', '🧯'); - Smilies::add($b, ':shopping cart:', '🛒'); + Smilies::add($b, ':door:', '🚪'); + Smilies::add($b, ':bed:', '🛏'); + Smilies::add($b, ':couch and lamp:', '🛋'); +// Smilies::add($b, ':chair:', '🪑'); + Smilies::add($b, ':toilet:', '🚽'); + Smilies::add($b, ':shower:', '🚿'); + Smilies::add($b, ':bathtub:', '🛁'); + Smilies::add($b, ':razor:', '🪒'); + Smilies::add($b, ':lotion bottle:', '🧴'); + Smilies::add($b, ':safety pin:', '🧷'); + Smilies::add($b, ':broom:', '🧹'); + Smilies::add($b, ':basket:', '🧺'); + Smilies::add($b, ':roll of paper:', '🧻'); + Smilies::add($b, ':soap:', '🧼'); + Smilies::add($b, ':sponge:', '🧽'); + Smilies::add($b, ':fire extinguisher:', '🧯'); + Smilies::add($b, ':shopping cart:', '🛒'); // other-object - Smilies::add($b, ':cigarette:', '🚬'); - Smilies::add($b, ':coffin:', '⚰'); - Smilies::add($b, ':funeral urn:', '⚱'); - Smilies::add($b, ':moai:', '🗿'); + Smilies::add($b, ':cigarette:', '🚬'); + Smilies::add($b, ':coffin:', '⚰'); + Smilies::add($b, ':funeral urn:', '⚱'); + Smilies::add($b, ':moai:', '🗿'); // Symbols // transport-sign - Smilies::add($b, ':atm sign:', '🏧'); - Smilies::add($b, ':litter in bin sign:', '🚮'); - Smilies::add($b, ':potable water:', '🚰'); - Smilies::add($b, ':wheelchair symbol:', '♿'); - Smilies::add($b, ':men’s room:', '🚹'); - Smilies::add($b, ':women’s room:', '🚺'); - Smilies::add($b, ':restroom:', '🚻'); - Smilies::add($b, ':baby symbol:', '🚼'); - Smilies::add($b, ':water closet:', '🚾'); - Smilies::add($b, ':passport control:', '🛂'); - Smilies::add($b, ':customs:', '🛃'); - Smilies::add($b, ':baggage claim:', '🛄'); - Smilies::add($b, ':left luggage:', '🛅'); + Smilies::add($b, ':atm sign:', '🏧'); + Smilies::add($b, ':litter in bin sign:', '🚮'); + Smilies::add($b, ':potable water:', '🚰'); + Smilies::add($b, ':wheelchair symbol:', '♿'); + Smilies::add($b, ':men’s room:', '🚹'); + Smilies::add($b, ':women’s room:', '🚺'); + Smilies::add($b, ':restroom:', '🚻'); + Smilies::add($b, ':baby symbol:', '🚼'); + Smilies::add($b, ':water closet:', '🚾'); + Smilies::add($b, ':passport control:', '🛂'); + Smilies::add($b, ':customs:', '🛃'); + Smilies::add($b, ':baggage claim:', '🛄'); + Smilies::add($b, ':left luggage:', '🛅'); // warning - Smilies::add($b, ':warning:', '⚠'); - Smilies::add($b, ':children crossing:', '🚸'); - Smilies::add($b, ':no entry:', '⛔'); - Smilies::add($b, ':prohibited:', '🚫'); - Smilies::add($b, ':no bicycles:', '🚳'); - Smilies::add($b, ':no smoking:', '🚭'); - Smilies::add($b, ':no littering:', '🚯'); - Smilies::add($b, ':non-potable water:', '🚱'); - Smilies::add($b, ':no pedestrians:', '🚷'); - Smilies::add($b, ':no mobile phones:', '📵'); - Smilies::add($b, ':no one under eighteen:', '🔞'); - Smilies::add($b, ':radioactive:', '☢'); - Smilies::add($b, ':biohazard:', '☣'); + Smilies::add($b, ':warning:', '⚠'); + Smilies::add($b, ':children crossing:', '🚸'); + Smilies::add($b, ':no entry:', '⛔'); + Smilies::add($b, ':prohibited:', '🚫'); + Smilies::add($b, ':no bicycles:', '🚳'); + Smilies::add($b, ':no smoking:', '🚭'); + Smilies::add($b, ':no littering:', '🚯'); + Smilies::add($b, ':non-potable water:', '🚱'); + Smilies::add($b, ':no pedestrians:', '🚷'); + Smilies::add($b, ':no mobile phones:', '📵'); + Smilies::add($b, ':no one under eighteen:', '🔞'); + Smilies::add($b, ':radioactive:', '☢'); + Smilies::add($b, ':biohazard:', '☣'); Smilies::add($b, ':army:', '🪖'); // arrow - Smilies::add($b, ':up arrow:', '⬆'); - Smilies::add($b, ':up-right arrow:', '↗'); - Smilies::add($b, ':right arrow:', '➡'); - Smilies::add($b, ':down-right arrow:', '↘'); - Smilies::add($b, ':down arrow:', '⬇'); - Smilies::add($b, ':down-left arrow:', '↙'); - Smilies::add($b, ':left arrow:', '⬅'); - Smilies::add($b, ':up-left arrow:', '↖'); - Smilies::add($b, ':up-down arrow:', '↕'); - Smilies::add($b, ':left-right arrow:', '↔'); - Smilies::add($b, ':right arrow curving left:', '↩'); - Smilies::add($b, ':left arrow curving right:', '↪'); - Smilies::add($b, ':right arrow curving up:', '⤴'); - Smilies::add($b, ':right arrow curving down:', '⤵'); - Smilies::add($b, ':clockwise vertical arrows:', '🔃'); - Smilies::add($b, ':counterclockwise arrows button:', '🔄'); - Smilies::add($b, ':BACK arrow:', '🔙'); - Smilies::add($b, ':END arrow:', '🔚'); - Smilies::add($b, ':ON! arrow:', '🔛'); - Smilies::add($b, ':SOON arrow:', '🔜'); - Smilies::add($b, ':TOP arrow:', '🔝'); + Smilies::add($b, ':up arrow:', '⬆'); + Smilies::add($b, ':up-right arrow:', '↗'); + Smilies::add($b, ':right arrow:', '➡'); + Smilies::add($b, ':down-right arrow:', '↘'); + Smilies::add($b, ':down arrow:', '⬇'); + Smilies::add($b, ':down-left arrow:', '↙'); + Smilies::add($b, ':left arrow:', '⬅'); + Smilies::add($b, ':up-left arrow:', '↖'); + Smilies::add($b, ':up-down arrow:', '↕'); + Smilies::add($b, ':left-right arrow:', '↔'); + Smilies::add($b, ':right arrow curving left:', '↩'); + Smilies::add($b, ':left arrow curving right:', '↪'); + Smilies::add($b, ':right arrow curving up:', '⤴'); + Smilies::add($b, ':right arrow curving down:', '⤵'); + Smilies::add($b, ':clockwise vertical arrows:', '🔃'); + Smilies::add($b, ':counterclockwise arrows button:', '🔄'); + Smilies::add($b, ':BACK arrow:', '🔙'); + Smilies::add($b, ':END arrow:', '🔚'); + Smilies::add($b, ':ON! arrow:', '🔛'); + Smilies::add($b, ':SOON arrow:', '🔜'); + Smilies::add($b, ':TOP arrow:', '🔝'); // religion - Smilies::add($b, ':place of worship:', '🛐'); - Smilies::add($b, ':atom symbol:', '⚛'); - Smilies::add($b, ':om:', '🕉'); - Smilies::add($b, ':star of David:', '✡'); - Smilies::add($b, ':wheel of dharma:', '☸'); - Smilies::add($b, ':yin yang:', '☯'); - Smilies::add($b, ':latin cross:', '✝'); - Smilies::add($b, ':orthodox cross:', '☦'); - Smilies::add($b, ':star and crescent:', '☪'); - Smilies::add($b, ':peace symbol:', '☮'); - Smilies::add($b, ':menorah:', '🕎'); - Smilies::add($b, ':dotted six-pointed star:', '🔯'); + Smilies::add($b, ':place of worship:', '🛐'); + Smilies::add($b, ':atom symbol:', '⚛'); + Smilies::add($b, ':om:', '🕉'); + Smilies::add($b, ':star of David:', '✡'); + Smilies::add($b, ':wheel of dharma:', '☸'); + Smilies::add($b, ':yin yang:', '☯'); + Smilies::add($b, ':latin cross:', '✝'); + Smilies::add($b, ':orthodox cross:', '☦'); + Smilies::add($b, ':star and crescent:', '☪'); + Smilies::add($b, ':peace symbol:', '☮'); + Smilies::add($b, ':menorah:', '🕎'); + Smilies::add($b, ':dotted six-pointed star:', '🔯'); // zodiac - Smilies::add($b, ':Aries:', '♈'); - Smilies::add($b, ':Taurus:', '♉'); - Smilies::add($b, ':Gemini:', '♊'); - Smilies::add($b, ':Cancer:', '♋'); - Smilies::add($b, ':Leo:', '♌'); - Smilies::add($b, ':Virgo:', '♍'); - Smilies::add($b, ':Libra:', '♎'); - Smilies::add($b, ':Scorpio:', '♏'); - Smilies::add($b, ':Sagittarius:', '♐'); - Smilies::add($b, ':Capricorn:', '♑'); - Smilies::add($b, ':Aquarius:', '♒'); - Smilies::add($b, ':Pisces:', '♓'); - Smilies::add($b, ':Ophiuchus:', '⛎'); + Smilies::add($b, ':Aries:', '♈'); + Smilies::add($b, ':Taurus:', '♉'); + Smilies::add($b, ':Gemini:', '♊'); + Smilies::add($b, ':Cancer:', '♋'); + Smilies::add($b, ':Leo:', '♌'); + Smilies::add($b, ':Virgo:', '♍'); + Smilies::add($b, ':Libra:', '♎'); + Smilies::add($b, ':Scorpio:', '♏'); + Smilies::add($b, ':Sagittarius:', '♐'); + Smilies::add($b, ':Capricorn:', '♑'); + Smilies::add($b, ':Aquarius:', '♒'); + Smilies::add($b, ':Pisces:', '♓'); + Smilies::add($b, ':Ophiuchus:', '⛎'); // av-symbol - Smilies::add($b, ':shuffle tracks button:', '🔀'); - Smilies::add($b, ':repeat button:', '🔁'); - Smilies::add($b, ':repeat single button:', '🔂'); - Smilies::add($b, ':play button:', '▶'); - Smilies::add($b, ':fast-forward button:', '⏩'); - Smilies::add($b, ':next track button:', '⏭'); - Smilies::add($b, ':play or pause button:', '⏯'); - Smilies::add($b, ':reverse button:', '◀'); - Smilies::add($b, ':fast reverse button:', '⏪'); - Smilies::add($b, ':last track button:', '⏮'); - Smilies::add($b, ':upwards button:', '🔼'); - Smilies::add($b, ':fast up button:', '⏫'); - Smilies::add($b, ':downwards button:', '🔽'); - Smilies::add($b, ':fast down button:', '⏬'); - Smilies::add($b, ':pause button:', '⏸'); - Smilies::add($b, ':stop button:', '⏹'); - Smilies::add($b, ':record button:', '⏺'); - Smilies::add($b, ':eject button:', '⏏'); - Smilies::add($b, ':cinema:', '🎦'); - Smilies::add($b, ':dim button:', '🔅'); - Smilies::add($b, ':bright button:', '🔆'); - Smilies::add($b, ':antenna bars:', '📶'); - Smilies::add($b, ':vibration mode:', '📳'); - Smilies::add($b, ':mobile phone off:', '📴'); + Smilies::add($b, ':shuffle tracks button:', '🔀'); + Smilies::add($b, ':repeat button:', '🔁'); + Smilies::add($b, ':repeat single button:', '🔂'); + Smilies::add($b, ':play button:', '▶'); + Smilies::add($b, ':fast-forward button:', '⏩'); + Smilies::add($b, ':next track button:', '⏭'); + Smilies::add($b, ':play or pause button:', '⏯'); + Smilies::add($b, ':reverse button:', '◀'); + Smilies::add($b, ':fast reverse button:', '⏪'); + Smilies::add($b, ':last track button:', '⏮'); + Smilies::add($b, ':upwards button:', '🔼'); + Smilies::add($b, ':fast up button:', '⏫'); + Smilies::add($b, ':downwards button:', '🔽'); + Smilies::add($b, ':fast down button:', '⏬'); + Smilies::add($b, ':pause button:', '⏸'); + Smilies::add($b, ':stop button:', '⏹'); + Smilies::add($b, ':record button:', '⏺'); + Smilies::add($b, ':eject button:', '⏏'); + Smilies::add($b, ':cinema:', '🎦'); + Smilies::add($b, ':dim button:', '🔅'); + Smilies::add($b, ':bright button:', '🔆'); + Smilies::add($b, ':antenna bars:', '📶'); + Smilies::add($b, ':vibration mode:', '📳'); + Smilies::add($b, ':mobile phone off:', '📴'); // gender - Smilies::add($b, ':female sign:', '♀'); - Smilies::add($b, ':male sign:', '♂'); + Smilies::add($b, ':female sign:', '♀'); + Smilies::add($b, ':male sign:', '♂'); // math - Smilies::add($b, ':multiply:', '✖'); - Smilies::add($b, ':plus:', '➕'); - Smilies::add($b, ':minus:', '➖'); - Smilies::add($b, ':divide:', '➗'); - Smilies::add($b, ':infinity:', '♾'); + Smilies::add($b, ':multiply:', '✖'); + Smilies::add($b, ':plus:', '➕'); + Smilies::add($b, ':minus:', '➖'); + Smilies::add($b, ':divide:', '➗'); + Smilies::add($b, ':infinity:', '♾'); Smilies::add($b, ':kreisoperator:', '∘'); Smilies::add($b, ':leere menge:', '∅'); Smilies::add($b, ':rundung:', '≈'); @@ -1456,407 +1453,408 @@ function unicode_smilies_smilies(array &$b) Smilies::add($b, ':prozent:', '%'); // punctuation - Smilies::add($b, ':double exclamation mark:', '‼'); - Smilies::add($b, ':exclamation question mark:', '⁉'); - Smilies::add($b, ':question mark:', '❓'); - Smilies::add($b, ':white question mark:', '❔'); - Smilies::add($b, ':white exclamation mark:', '❕'); - Smilies::add($b, ':exclamation mark:', '❗'); - Smilies::add($b, ':wavy dash:', '〰'); + Smilies::add($b, ':double exclamation mark:', '‼'); + Smilies::add($b, ':exclamation question mark:', '⁉'); + Smilies::add($b, ':question mark:', '❓'); + Smilies::add($b, ':white question mark:', '❔'); + Smilies::add($b, ':white exclamation mark:', '❕'); + Smilies::add($b, ':exclamation mark:', '❗'); + Smilies::add($b, ':wavy dash:', '〰'); // currency - Smilies::add($b, ':currency exchange:', '💱'); - Smilies::add($b, ':heavy dollar sign:', '💲'); + Smilies::add($b, ':currency exchange:', '💱'); + Smilies::add($b, ':heavy dollar sign:', '💲'); // other-symbol - Smilies::add($b, ':medical symbol:', '⚕'); - Smilies::add($b, ':recycling symbol:', '♻'); - Smilies::add($b, ':fleur-de-lis:', '⚜'); - Smilies::add($b, ':trident emblem:', '🔱'); - Smilies::add($b, ':name badge:', '📛'); - Smilies::add($b, ':Japanese symbol for beginner:', '🔰'); - Smilies::add($b, ':hollow red circle:', '⭕'); - Smilies::add($b, ':check mark button:', '✅'); - Smilies::add($b, ':check box with check:', '☑'); - Smilies::add($b, ':check mark:', '✔'); - Smilies::add($b, ':cross mark:', '❌'); - Smilies::add($b, ':cross mark button:', '❎'); - Smilies::add($b, ':curly loop:', '➰'); - Smilies::add($b, ':double curly loop:', '➿'); - Smilies::add($b, ':part alternation mark:', '〽'); - Smilies::add($b, ':eight-spoked asterisk:', '✳'); - Smilies::add($b, ':eight-pointed star:', '✴'); - Smilies::add($b, ':sparkle:', '❇'); - Smilies::add($b, ':copyright:', '©'); - Smilies::add($b, ':registered:', '®'); - Smilies::add($b, ':trade mark:', '™'); + Smilies::add($b, ':medical symbol:', '⚕'); + Smilies::add($b, ':recycling symbol:', '♻'); + Smilies::add($b, ':fleur-de-lis:', '⚜'); + Smilies::add($b, ':trident emblem:', '🔱'); + Smilies::add($b, ':name badge:', '📛'); + Smilies::add($b, ':Japanese symbol for beginner:', '🔰'); + Smilies::add($b, ':hollow red circle:', '⭕'); + Smilies::add($b, ':check mark button:', '✅'); + Smilies::add($b, ':check box with check:', '☑'); + Smilies::add($b, ':check mark:', '✔'); + Smilies::add($b, ':cross mark:', '❌'); + Smilies::add($b, ':cross mark button:', '❎'); + Smilies::add($b, ':curly loop:', '➰'); + Smilies::add($b, ':double curly loop:', '➿'); + Smilies::add($b, ':part alternation mark:', '〽'); + Smilies::add($b, ':eight-spoked asterisk:', '✳'); + Smilies::add($b, ':eight-pointed star:', '✴'); + Smilies::add($b, ':sparkle:', '❇'); + Smilies::add($b, ':copyright:', '©'); + Smilies::add($b, ':registered:', '®'); + Smilies::add($b, ':trade mark:', '™'); // keycap - Smilies::add($b, ':keycap: #:', '#️⃣'); - Smilies::add($b, ':keycap: *:', '*️⃣'); - Smilies::add($b, ':keycap: 0:', '0️⃣'); - Smilies::add($b, ':keycap: 1:', '1️⃣'); - Smilies::add($b, ':keycap: 2:', '2️⃣'); - Smilies::add($b, ':keycap: 3:', '3️⃣'); - Smilies::add($b, ':keycap: 4:', '4️⃣'); - Smilies::add($b, ':keycap: 5:', '5️⃣'); - Smilies::add($b, ':keycap: 6:', '6️⃣'); - Smilies::add($b, ':keycap: 7:', '7️⃣'); - Smilies::add($b, ':keycap: 8:', '8️⃣'); - Smilies::add($b, ':keycap: 9:', '9️⃣'); - Smilies::add($b, ':keycap: 10:', '🔟'); + Smilies::add($b, ':keycap: #:', '#️⃣'); + Smilies::add($b, ':keycap: *:', '*️⃣'); + Smilies::add($b, ':keycap: 0:', '0️⃣'); + Smilies::add($b, ':keycap: 1:', '1️⃣'); + Smilies::add($b, ':keycap: 2:', '2️⃣'); + Smilies::add($b, ':keycap: 3:', '3️⃣'); + Smilies::add($b, ':keycap: 4:', '4️⃣'); + Smilies::add($b, ':keycap: 5:', '5️⃣'); + Smilies::add($b, ':keycap: 6:', '6️⃣'); + Smilies::add($b, ':keycap: 7:', '7️⃣'); + Smilies::add($b, ':keycap: 8:', '8️⃣'); + Smilies::add($b, ':keycap: 9:', '9️⃣'); + Smilies::add($b, ':keycap: 10:', '🔟'); // alphanum - Smilies::add($b, ':input latin uppercase:', '🔠'); - Smilies::add($b, ':input latin lowercase:', '🔡'); - Smilies::add($b, ':input numbers:', '🔢'); - Smilies::add($b, ':input symbols:', '🔣'); - Smilies::add($b, ':input latin letters:', '🔤'); - Smilies::add($b, ':A button (blood type):', '🅰'); - Smilies::add($b, ':AB button (blood type):', '🆎'); - Smilies::add($b, ':B button (blood type):', '🅱'); - Smilies::add($b, ':CL button:', '🆑'); - Smilies::add($b, ':COOL button:', '🆒'); + Smilies::add($b, ':input latin uppercase:', '🔠'); + Smilies::add($b, ':input latin lowercase:', '🔡'); + Smilies::add($b, ':input numbers:', '🔢'); + Smilies::add($b, ':input symbols:', '🔣'); + Smilies::add($b, ':input latin letters:', '🔤'); + Smilies::add($b, ':A button (blood type):', '🅰'); + Smilies::add($b, ':AB button (blood type):', '🆎'); + Smilies::add($b, ':B button (blood type):', '🅱'); + Smilies::add($b, ':CL button:', '🆑'); + Smilies::add($b, ':COOL button:', '🆒'); Smilies::add($b, ':cool:', '🆒'); - Smilies::add($b, ':FREE button:', '🆓'); - Smilies::add($b, ':information:', 'ℹ'); - Smilies::add($b, ':ID button:', '🆔'); - Smilies::add($b, ':circled M:', 'Ⓜ'); - Smilies::add($b, ':NEW button:', '🆕'); - Smilies::add($b, ':NG button:', '🆖'); - Smilies::add($b, ':O button (blood type):', '🅾'); - Smilies::add($b, ':OK button:', '🆗'); - Smilies::add($b, ':P button:', '🅿'); - Smilies::add($b, ':SOS button:', '🆘'); - Smilies::add($b, ':UP! button:', '🆙'); - Smilies::add($b, ':VS button:', '🆚'); - Smilies::add($b, ':Japanese “here” button:', '🈁'); - Smilies::add($b, ':Japanese “service charge” button:', '🈂'); - Smilies::add($b, ':Japanese “monthly amount” button:', '🈷'); - Smilies::add($b, ':Japanese “not free of charge” button:', '🈶'); - Smilies::add($b, ':Japanese “reserved” button:', '🈯'); - Smilies::add($b, ':Japanese “bargain” button:', '🉐'); - Smilies::add($b, ':Japanese “discount” button:', '🈹'); - Smilies::add($b, ':Japanese “free of charge” button:', '🈚'); - Smilies::add($b, ':Japanese “prohibited” button:', '🈲'); - Smilies::add($b, ':Japanese “acceptable” button:', '🉑'); - Smilies::add($b, ':Japanese “application” button:', '🈸'); - Smilies::add($b, ':Japanese “passing grade” button:', '🈴'); - Smilies::add($b, ':Japanese “vacancy” button:', '🈳'); - Smilies::add($b, ':Japanese “congratulations” button:', '㊗'); - Smilies::add($b, ':Japanese “secret” button:', '㊙'); - Smilies::add($b, ':Japanese “open for business” button:', '🈺'); - Smilies::add($b, ':Japanese “no vacancy” button:', '🈵'); + Smilies::add($b, ':FREE button:', '🆓'); + Smilies::add($b, ':information:', 'ℹ'); + Smilies::add($b, ':ID button:', '🆔'); + Smilies::add($b, ':circled M:', 'Ⓜ'); + Smilies::add($b, ':NEW button:', '🆕'); + Smilies::add($b, ':NG button:', '🆖'); + Smilies::add($b, ':O button (blood type):', '🅾'); + Smilies::add($b, ':OK button:', '🆗'); + Smilies::add($b, ':P button:', '🅿'); + Smilies::add($b, ':SOS button:', '🆘'); + Smilies::add($b, ':UP! button:', '🆙'); + Smilies::add($b, ':VS button:', '🆚'); + Smilies::add($b, ':Japanese “here” button:', '🈁'); + Smilies::add($b, ':Japanese “service charge” button:', '🈂'); + Smilies::add($b, ':Japanese “monthly amount” button:', '🈷'); + Smilies::add($b, ':Japanese “not free of charge” button:', '🈶'); + Smilies::add($b, ':Japanese “reserved” button:', '🈯'); + Smilies::add($b, ':Japanese “bargain” button:', '🉐'); + Smilies::add($b, ':Japanese “discount” button:', '🈹'); + Smilies::add($b, ':Japanese “free of charge” button:', '🈚'); + Smilies::add($b, ':Japanese “prohibited” button:', '🈲'); + Smilies::add($b, ':Japanese “acceptable” button:', '🉑'); + Smilies::add($b, ':Japanese “application” button:', '🈸'); + Smilies::add($b, ':Japanese “passing grade” button:', '🈴'); + Smilies::add($b, ':Japanese “vacancy” button:', '🈳'); + Smilies::add($b, ':Japanese “congratulations” button:', '㊗'); + Smilies::add($b, ':Japanese “secret” button:', '㊙'); + Smilies::add($b, ':Japanese “open for business” button:', '🈺'); + Smilies::add($b, ':Japanese “no vacancy” button:', '🈵'); // geometric - Smilies::add($b, ':red circle:', '🔴'); -// Smilies::add($b, ':orange circle:', '🟠'); -// Smilies::add($b, ':yellow circle:', '🟡'); -// Smilies::add($b, ':green circle:', '🟢'); - Smilies::add($b, ':blue circle:', '🔵'); -// Smilies::add($b, ':purple circle:', '🟣'); -// Smilies::add($b, ':brown circle:', '🟤'); - Smilies::add($b, ':black circle:', '⚫'); - Smilies::add($b, ':white circle:', '⚪'); -// Smilies::add($b, ':red square:', '🟥'); -// Smilies::add($b, ':orange square:', '🟧'); -// Smilies::add($b, ':yellow square:', '🟨'); -// Smilies::add($b, ':green square:', '🟩'); -// Smilies::add($b, ':blue square:', '🟦'); -// Smilies::add($b, ':purple square:', '🟪'); -// Smilies::add($b, ':brown square:', '🟫'); - Smilies::add($b, ':black large square:', '⬛'); - Smilies::add($b, ':white large square:', '⬜'); - Smilies::add($b, ':black medium square:', '◼'); - Smilies::add($b, ':white medium square:', '◻'); - Smilies::add($b, ':black medium-small square:', '◾'); - Smilies::add($b, ':white medium-small square:', '◽'); - Smilies::add($b, ':black small square:', '▪'); - Smilies::add($b, ':white small square:', '▫'); - Smilies::add($b, ':large orange diamond:', '🔶'); - Smilies::add($b, ':large blue diamond:', '🔷'); - Smilies::add($b, ':small orange diamond:', '🔸'); - Smilies::add($b, ':small blue diamond:', '🔹'); - Smilies::add($b, ':red triangle pointed up:', '🔺'); - Smilies::add($b, ':red triangle pointed down:', '🔻'); - Smilies::add($b, ':diamond with a dot:', '💠'); - Smilies::add($b, ':radio button:', '🔘'); - Smilies::add($b, ':white square button:', '🔳'); - Smilies::add($b, ':black square button:', '🔲'); + Smilies::add($b, ':red circle:', '🔴'); +// Smilies::add($b, ':orange circle:', '🟠'); +// Smilies::add($b, ':yellow circle:', '🟡'); +// Smilies::add($b, ':green circle:', '🟢'); + Smilies::add($b, ':blue circle:', '🔵'); +// Smilies::add($b, ':purple circle:', '🟣'); +// Smilies::add($b, ':brown circle:', '🟤'); + Smilies::add($b, ':black circle:', '⚫'); + Smilies::add($b, ':white circle:', '⚪'); +// Smilies::add($b, ':red square:', '🟥'); +// Smilies::add($b, ':orange square:', '🟧'); +// Smilies::add($b, ':yellow square:', '🟨'); +// Smilies::add($b, ':green square:', '🟩'); +// Smilies::add($b, ':blue square:', '🟦'); +// Smilies::add($b, ':purple square:', '🟪'); +// Smilies::add($b, ':brown square:', '🟫'); + Smilies::add($b, ':black large square:', '⬛'); + Smilies::add($b, ':white large square:', '⬜'); + Smilies::add($b, ':black medium square:', '◼'); + Smilies::add($b, ':white medium square:', '◻'); + Smilies::add($b, ':black medium-small square:', '◾'); + Smilies::add($b, ':white medium-small square:', '◽'); + Smilies::add($b, ':black small square:', '▪'); + Smilies::add($b, ':white small square:', '▫'); + Smilies::add($b, ':large orange diamond:', '🔶'); + Smilies::add($b, ':large blue diamond:', '🔷'); + Smilies::add($b, ':small orange diamond:', '🔸'); + Smilies::add($b, ':small blue diamond:', '🔹'); + Smilies::add($b, ':red triangle pointed up:', '🔺'); + Smilies::add($b, ':red triangle pointed down:', '🔻'); + Smilies::add($b, ':diamond with a dot:', '💠'); + Smilies::add($b, ':radio button:', '🔘'); + Smilies::add($b, ':white square button:', '🔳'); + Smilies::add($b, ':black square button:', '🔲'); // Flags // flag - Smilies::add($b, ':chequered flag:', '🏁'); - Smilies::add($b, ':triangular flag:', '🚩'); - Smilies::add($b, ':crossed flags:', '🎌'); - Smilies::add($b, ':black flag:', '🏴'); - Smilies::add($b, ':white flag:', '🏳'); - Smilies::add($b, ':rainbow flag:', '🏳️‍🌈'); - Smilies::add($b, ':pirate flag:', '🏴‍☠️'); + Smilies::add($b, ':chequered flag:', '🏁'); + Smilies::add($b, ':triangular flag:', '🚩'); + Smilies::add($b, ':crossed flags:', '🎌'); + Smilies::add($b, ':black flag:', '🏴'); + Smilies::add($b, ':white flag:', '🏳'); + Smilies::add($b, ':rainbow flag:', '🏳️‍🌈'); + Smilies::add($b, ':pirate flag:', '🏴‍☠️'); // country-flag - Smilies::add($b, ':ascension island:', '🇦🇨'); - Smilies::add($b, ':andorra:', '🇦🇩'); - Smilies::add($b, ':united arab emirates:', '🇦🇪'); - Smilies::add($b, ':afghanistan:', '🇦🇫'); - Smilies::add($b, ':antigua & barbuda:', '🇦🇬'); - Smilies::add($b, ':anguilla:', '🇦🇮'); - Smilies::add($b, ':albania:', '🇦🇱'); - Smilies::add($b, ':armenia:', '🇦🇲'); - Smilies::add($b, ':angola:', '🇦🇴'); - Smilies::add($b, ':antarctica:', '🇦🇶'); - Smilies::add($b, ':argentina:', '🇦🇷'); - Smilies::add($b, ':americansamoa:', '🇦🇸'); - Smilies::add($b, ':austria:', '🇦🇹'); - Smilies::add($b, ':australia:', '🇦🇺'); - Smilies::add($b, ':aruba:', '🇦🇼'); - Smilies::add($b, ':ålandislands:', '🇦🇽'); - Smilies::add($b, ':azerbaijan:', '🇦🇿'); - Smilies::add($b, ':bosnia&herzegovina:', '🇧🇦'); - Smilies::add($b, ':barbados:', '🇧🇧'); - Smilies::add($b, ':bangladesh:', '🇧🇩'); - Smilies::add($b, ':belgium:', '🇧🇪'); - Smilies::add($b, ':burkinafaso:', '🇧🇫'); - Smilies::add($b, ':bulgaria:', '🇧🇬'); - Smilies::add($b, ':bahrain:', '🇧🇭'); - Smilies::add($b, ':burundi:', '🇧🇮'); - Smilies::add($b, ':benin:', '🇧🇯'); - Smilies::add($b, ':st.barthélemy:', '🇧🇱'); - Smilies::add($b, ':bermuda:', '🇧🇲'); - Smilies::add($b, ':brunei:', '🇧🇳'); - Smilies::add($b, ':bolivia:', '🇧🇴'); - Smilies::add($b, ':caribbeannetherlands:', '🇧🇶'); - Smilies::add($b, ':brazil:', '🇧🇷'); - Smilies::add($b, ':bahamas:', '🇧🇸'); - Smilies::add($b, ':bhutan:', '🇧🇹'); - Smilies::add($b, ':bouvetisland:', '🇧🇻'); - Smilies::add($b, ':botswana:', '🇧🇼'); - Smilies::add($b, ':belarus:', '🇧🇾'); - Smilies::add($b, ':belize:', '🇧🇿'); - Smilies::add($b, ':canada:', '🇨🇦'); - Smilies::add($b, ':cocos(keeling)islands:', '🇨🇨'); - Smilies::add($b, ':congo-kinshasa:', '🇨🇩'); - Smilies::add($b, ':centralafricanrepublic:', '🇨🇫'); - Smilies::add($b, ':congo-brazzaville:', '🇨🇬'); - Smilies::add($b, ':switzerland:', '🇨🇭'); - Smilies::add($b, ':côted’ivoire:', '🇨🇮'); - Smilies::add($b, ':cookislands:', '🇨🇰'); - Smilies::add($b, ':chile:', '🇨🇱'); - Smilies::add($b, ':cameroon:', '🇨🇲'); - Smilies::add($b, ':china:', '🇨🇳'); - Smilies::add($b, ':colombia:', '🇨🇴'); - Smilies::add($b, ':clippertonisland:', '🇨🇵'); - Smilies::add($b, ':costarica:', '🇨🇷'); - Smilies::add($b, ':cuba:', '🇨🇺'); - Smilies::add($b, ':capeverde:', '🇨🇻'); - Smilies::add($b, ':curaçao:', '🇨🇼'); - Smilies::add($b, ':christmasisland:', '🇨🇽'); - Smilies::add($b, ':cyprus:', '🇨🇾'); - Smilies::add($b, ':czechia:', '🇨🇿'); - Smilies::add($b, ':germany:', '🇩🇪'); - Smilies::add($b, ':diegogarcia:', '🇩🇬'); - Smilies::add($b, ':djibouti:', '🇩🇯'); - Smilies::add($b, ':denmark:', '🇩🇰'); - Smilies::add($b, ':dominica:', '🇩🇲'); - Smilies::add($b, ':dominicanrepublic:', '🇩🇴'); - Smilies::add($b, ':algeria:', '🇩🇿'); - Smilies::add($b, ':ceuta&melilla:', '🇪🇦'); - Smilies::add($b, ':ecuador:', '🇪🇨'); - Smilies::add($b, ':estonia:', '🇪🇪'); - Smilies::add($b, ':egypt:', '🇪🇬'); - Smilies::add($b, ':westernsahara:', '🇪🇭'); - Smilies::add($b, ':eritrea:', '🇪🇷'); - Smilies::add($b, ':spain:', '🇪🇸'); - Smilies::add($b, ':ethiopia:', '🇪🇹'); - Smilies::add($b, ':europeanunion:', '🇪🇺'); - Smilies::add($b, ':finland:', '🇫🇮'); - Smilies::add($b, ':fiji:', '🇫🇯'); - Smilies::add($b, ':falklandislands:', '🇫🇰'); - Smilies::add($b, ':micronesia:', '🇫🇲'); - Smilies::add($b, ':faroeislands:', '🇫🇴'); - Smilies::add($b, ':france:', '🇫🇷'); - Smilies::add($b, ':gabon:', '🇬🇦'); - Smilies::add($b, ':unitedkingdom:', '🇬🇧'); - Smilies::add($b, ':grenada:', '🇬🇩'); - Smilies::add($b, ':georgia:', '🇬🇪'); - Smilies::add($b, ':frenchguiana:', '🇬🇫'); - Smilies::add($b, ':guernsey:', '🇬🇬'); - Smilies::add($b, ':ghana:', '🇬🇭'); - Smilies::add($b, ':gibraltar:', '🇬🇮'); - Smilies::add($b, ':greenland:', '🇬🇱'); - Smilies::add($b, ':gambia:', '🇬🇲'); - Smilies::add($b, ':guinea:', '🇬🇳'); - Smilies::add($b, ':guadeloupe:', '🇬🇵'); - Smilies::add($b, ':equatorialguinea:', '🇬🇶'); - Smilies::add($b, ':greece:', '🇬🇷'); - Smilies::add($b, ':southgeorgia&southsandwichislands:', '🇬🇸'); - Smilies::add($b, ':guatemala:', '🇬🇹'); - Smilies::add($b, ':guam:', '🇬🇺'); - Smilies::add($b, ':guinea-bissau:', '🇬🇼'); - Smilies::add($b, ':guyana:', '🇬🇾'); - Smilies::add($b, ':hongkongsarchina:', '🇭🇰'); - Smilies::add($b, ':heard&mcdonaldislands:', '🇭🇲'); - Smilies::add($b, ':honduras:', '🇭🇳'); - Smilies::add($b, ':croatia:', '🇭🇷'); - Smilies::add($b, ':haiti:', '🇭🇹'); - Smilies::add($b, ':hungary:', '🇭🇺'); - Smilies::add($b, ':canaryislands:', '🇮🇨'); - Smilies::add($b, ':indonesia:', '🇮🇩'); - Smilies::add($b, ':ireland:', '🇮🇪'); - Smilies::add($b, ':israel:', '🇮🇱'); - Smilies::add($b, ':isleofman:', '🇮🇲'); - Smilies::add($b, ':india:', '🇮🇳'); - Smilies::add($b, ':britishindianoceanterritory:', '🇮🇴'); - Smilies::add($b, ':iraq:', '🇮🇶'); - Smilies::add($b, ':iran:', '🇮🇷'); - Smilies::add($b, ':iceland:', '🇮🇸'); - Smilies::add($b, ':italy:', '🇮🇹'); - Smilies::add($b, ':jersey:', '🇯🇪'); - Smilies::add($b, ':jamaica:', '🇯🇲'); - Smilies::add($b, ':jordan:', '🇯🇴'); - Smilies::add($b, ':japan:', '🇯🇵'); - Smilies::add($b, ':kenya:', '🇰🇪'); - Smilies::add($b, ':kyrgyzstan:', '🇰🇬'); - Smilies::add($b, ':cambodia:', '🇰🇭'); - Smilies::add($b, ':kiribati:', '🇰🇮'); - Smilies::add($b, ':comoros:', '🇰🇲'); - Smilies::add($b, ':st.kitts&nevis:', '🇰🇳'); - Smilies::add($b, ':northkorea:', '🇰🇵'); - Smilies::add($b, ':southkorea:', '🇰🇷'); - Smilies::add($b, ':kuwait:', '🇰🇼'); - Smilies::add($b, ':caymanislands:', '🇰🇾'); - Smilies::add($b, ':kazakhstan:', '🇰🇿'); - Smilies::add($b, ':laos:', '🇱🇦'); - Smilies::add($b, ':lebanon:', '🇱🇧'); - Smilies::add($b, ':st.lucia:', '🇱🇨'); - Smilies::add($b, ':liechtenstein:', '🇱🇮'); - Smilies::add($b, ':srilanka:', '🇱🇰'); - Smilies::add($b, ':liberia:', '🇱🇷'); - Smilies::add($b, ':lesotho:', '🇱🇸'); - Smilies::add($b, ':lithuania:', '🇱🇹'); - Smilies::add($b, ':luxembourg:', '🇱🇺'); - Smilies::add($b, ':latvia:', '🇱🇻'); - Smilies::add($b, ':libya:', '🇱🇾'); - Smilies::add($b, ':morocco:', '🇲🇦'); - Smilies::add($b, ':monaco:', '🇲🇨'); - Smilies::add($b, ':moldova:', '🇲🇩'); - Smilies::add($b, ':montenegro:', '🇲🇪'); - Smilies::add($b, ':st.martin:', '🇲🇫'); - Smilies::add($b, ':madagascar:', '🇲🇬'); - Smilies::add($b, ':marshallislands:', '🇲🇭'); - Smilies::add($b, ':northmacedonia:', '🇲🇰'); - Smilies::add($b, ':mali:', '🇲🇱'); - Smilies::add($b, ':myanmar(burma):', '🇲🇲'); - Smilies::add($b, ':mongolia:', '🇲🇳'); - Smilies::add($b, ':macaosarchina:', '🇲🇴'); - Smilies::add($b, ':northernmarianaislands:', '🇲🇵'); - Smilies::add($b, ':martinique:', '🇲🇶'); - Smilies::add($b, ':mauritania:', '🇲🇷'); - Smilies::add($b, ':montserrat:', '🇲🇸'); - Smilies::add($b, ':malta:', '🇲🇹'); - Smilies::add($b, ':mauritius:', '🇲🇺'); - Smilies::add($b, ':maldives:', '🇲🇻'); - Smilies::add($b, ':malawi:', '🇲🇼'); - Smilies::add($b, ':mexico:', '🇲🇽'); - Smilies::add($b, ':malaysia:', '🇲🇾'); - Smilies::add($b, ':mozambique:', '🇲🇿'); - Smilies::add($b, ':namibia:', '🇳🇦'); - Smilies::add($b, ':newcaledonia:', '🇳🇨'); - Smilies::add($b, ':niger:', '🇳🇪'); - Smilies::add($b, ':norfolkisland:', '🇳🇫'); - Smilies::add($b, ':nigeria:', '🇳🇬'); - Smilies::add($b, ':nicaragua:', '🇳🇮'); - Smilies::add($b, ':netherlands:', '🇳🇱'); - Smilies::add($b, ':norway:', '🇳🇴'); - Smilies::add($b, ':nepal:', '🇳🇵'); - Smilies::add($b, ':nauru:', '🇳🇷'); - Smilies::add($b, ':niue:', '🇳🇺'); - Smilies::add($b, ':newzealand:', '🇳🇿'); - Smilies::add($b, ':oman:', '🇴🇲'); - Smilies::add($b, ':panama:', '🇵🇦'); - Smilies::add($b, ':peru:', '🇵🇪'); - Smilies::add($b, ':frenchpolynesia:', '🇵🇫'); - Smilies::add($b, ':papuanewguinea:', '🇵🇬'); - Smilies::add($b, ':philippines:', '🇵🇭'); - Smilies::add($b, ':pakistan:', '🇵🇰'); - Smilies::add($b, ':poland:', '🇵🇱'); - Smilies::add($b, ':st.pierre&miquelon:', '🇵🇲'); - Smilies::add($b, ':pitcairnislands:', '🇵🇳'); - Smilies::add($b, ':puertorico:', '🇵🇷'); - Smilies::add($b, ':palestinianterritories:', '🇵🇸'); - Smilies::add($b, ':portugal:', '🇵🇹'); - Smilies::add($b, ':palau:', '🇵🇼'); - Smilies::add($b, ':paraguay:', '🇵🇾'); - Smilies::add($b, ':qatar:', '🇶🇦'); - Smilies::add($b, ':réunion:', '🇷🇪'); - Smilies::add($b, ':romania:', '🇷🇴'); - Smilies::add($b, ':serbia:', '🇷🇸'); - Smilies::add($b, ':russia:', '🇷🇺'); - Smilies::add($b, ':rwanda:', '🇷🇼'); - Smilies::add($b, ':saudiarabia:', '🇸🇦'); - Smilies::add($b, ':solomonislands:', '🇸🇧'); - Smilies::add($b, ':seychelles:', '🇸🇨'); - Smilies::add($b, ':sudan:', '🇸🇩'); - Smilies::add($b, ':sweden:', '🇸🇪'); - Smilies::add($b, ':singapore:', '🇸🇬'); - Smilies::add($b, ':st.helena:', '🇸🇭'); - Smilies::add($b, ':slovenia:', '🇸🇮'); - Smilies::add($b, ':svalbard&janmayen:', '🇸🇯'); - Smilies::add($b, ':slovakia:', '🇸🇰'); - Smilies::add($b, ':sierraleone:', '🇸🇱'); - Smilies::add($b, ':sanmarino:', '🇸🇲'); - Smilies::add($b, ':senegal:', '🇸🇳'); - Smilies::add($b, ':somalia:', '🇸🇴'); - Smilies::add($b, ':suriname:', '🇸🇷'); - Smilies::add($b, ':southsudan:', '🇸🇸'); - Smilies::add($b, ':sãotomé&príncipe:', '🇸🇹'); - Smilies::add($b, ':elsalvador:', '🇸🇻'); - Smilies::add($b, ':sintmaarten:', '🇸🇽'); - Smilies::add($b, ':syria:', '🇸🇾'); - Smilies::add($b, ':eswatini:', '🇸🇿'); - Smilies::add($b, ':tristandacunha:', '🇹🇦'); - Smilies::add($b, ':turks&caicosislands:', '🇹🇨'); - Smilies::add($b, ':chad:', '🇹🇩'); - Smilies::add($b, ':frenchsouthernterritories:', '🇹🇫'); - Smilies::add($b, ':togo:', '🇹🇬'); - Smilies::add($b, ':thailand:', '🇹🇭'); - Smilies::add($b, ':tajikistan:', '🇹🇯'); - Smilies::add($b, ':tokelau:', '🇹🇰'); - Smilies::add($b, ':timor-leste:', '🇹🇱'); - Smilies::add($b, ':turkmenistan:', '🇹🇲'); - Smilies::add($b, ':tunisia:', '🇹🇳'); - Smilies::add($b, ':tonga:', '🇹🇴'); - Smilies::add($b, ':turkey:', '🇹🇷'); - Smilies::add($b, ':trinidad&tobago:', '🇹🇹'); - Smilies::add($b, ':tuvalu:', '🇹🇻'); - Smilies::add($b, ':taiwan:', '🇹🇼'); - Smilies::add($b, ':tanzania:', '🇹🇿'); - Smilies::add($b, ':ukraine:', '🇺🇦'); - Smilies::add($b, ':uganda:', '🇺🇬'); - Smilies::add($b, ':u.s.outlyingislands:', '🇺🇲'); - Smilies::add($b, ':unitednations:', '🇺🇳'); - Smilies::add($b, ':unitedstates:', '🇺🇸'); - Smilies::add($b, ':uruguay:', '🇺🇾'); - Smilies::add($b, ':uzbekistan:', '🇺🇿'); - Smilies::add($b, ':vaticancity:', '🇻🇦'); - Smilies::add($b, ':st.vincent&grenadines:', '🇻🇨'); - Smilies::add($b, ':venezuela:', '🇻🇪'); - Smilies::add($b, ':britishvirginislands:', '🇻🇬'); - Smilies::add($b, ':u.s.virginislands:', '🇻🇮'); - Smilies::add($b, ':vietnam:', '🇻🇳'); - Smilies::add($b, ':vanuatu:', '🇻🇺'); - Smilies::add($b, ':wallis&futuna:', '🇼🇫'); - Smilies::add($b, ':samoa:', '🇼🇸'); - Smilies::add($b, ':kosovo:', '🇽🇰'); - Smilies::add($b, ':yemen:', '🇾🇪'); - Smilies::add($b, ':mayotte:', '🇾🇹'); - Smilies::add($b, ':southafrica:', '🇿🇦'); - Smilies::add($b, ':zambia:', '🇿🇲'); - Smilies::add($b, ':zimbabwe:', '🇿🇼'); + Smilies::add($b, ':ascension island:', '🇦🇨'); + Smilies::add($b, ':andorra:', '🇦🇩'); + Smilies::add($b, ':united arab emirates:', '🇦🇪'); + Smilies::add($b, ':afghanistan:', '🇦🇫'); + Smilies::add($b, ':antigua & barbuda:', '🇦🇬'); + Smilies::add($b, ':anguilla:', '🇦🇮'); + Smilies::add($b, ':albania:', '🇦🇱'); + Smilies::add($b, ':armenia:', '🇦🇲'); + Smilies::add($b, ':angola:', '🇦🇴'); + Smilies::add($b, ':antarctica:', '🇦🇶'); + Smilies::add($b, ':argentina:', '🇦🇷'); + Smilies::add($b, ':americansamoa:', '🇦🇸'); + Smilies::add($b, ':austria:', '🇦🇹'); + Smilies::add($b, ':australia:', '🇦🇺'); + Smilies::add($b, ':aruba:', '🇦🇼'); + Smilies::add($b, ':ålandislands:', '🇦🇽'); + Smilies::add($b, ':azerbaijan:', '🇦🇿'); + Smilies::add($b, ':bosnia&herzegovina:', '🇧🇦'); + Smilies::add($b, ':barbados:', '🇧🇧'); + Smilies::add($b, ':bangladesh:', '🇧🇩'); + Smilies::add($b, ':belgium:', '🇧🇪'); + Smilies::add($b, ':burkinafaso:', '🇧🇫'); + Smilies::add($b, ':bulgaria:', '🇧🇬'); + Smilies::add($b, ':bahrain:', '🇧🇭'); + Smilies::add($b, ':burundi:', '🇧🇮'); + Smilies::add($b, ':benin:', '🇧🇯'); + Smilies::add($b, ':st.barthélemy:', '🇧🇱'); + Smilies::add($b, ':bermuda:', '🇧🇲'); + Smilies::add($b, ':brunei:', '🇧🇳'); + Smilies::add($b, ':bolivia:', '🇧🇴'); + Smilies::add($b, ':caribbeannetherlands:', '🇧🇶'); + Smilies::add($b, ':brazil:', '🇧🇷'); + Smilies::add($b, ':bahamas:', '🇧🇸'); + Smilies::add($b, ':bhutan:', '🇧🇹'); + Smilies::add($b, ':bouvetisland:', '🇧🇻'); + Smilies::add($b, ':botswana:', '🇧🇼'); + Smilies::add($b, ':belarus:', '🇧🇾'); + Smilies::add($b, ':belize:', '🇧🇿'); + Smilies::add($b, ':canada:', '🇨🇦'); + Smilies::add($b, ':cocos(keeling)islands:', '🇨🇨'); + Smilies::add($b, ':congo-kinshasa:', '🇨🇩'); + Smilies::add($b, ':centralafricanrepublic:', '🇨🇫'); + Smilies::add($b, ':congo-brazzaville:', '🇨🇬'); + Smilies::add($b, ':switzerland:', '🇨🇭'); + Smilies::add($b, ':côted’ivoire:', '🇨🇮'); + Smilies::add($b, ':cookislands:', '🇨🇰'); + Smilies::add($b, ':chile:', '🇨🇱'); + Smilies::add($b, ':cameroon:', '🇨🇲'); + Smilies::add($b, ':china:', '🇨🇳'); + Smilies::add($b, ':colombia:', '🇨🇴'); + Smilies::add($b, ':clippertonisland:', '🇨🇵'); + Smilies::add($b, ':costarica:', '🇨🇷'); + Smilies::add($b, ':cuba:', '🇨🇺'); + Smilies::add($b, ':capeverde:', '🇨🇻'); + Smilies::add($b, ':curaçao:', '🇨🇼'); + Smilies::add($b, ':christmasisland:', '🇨🇽'); + Smilies::add($b, ':cyprus:', '🇨🇾'); + Smilies::add($b, ':czechia:', '🇨🇿'); + Smilies::add($b, ':germany:', '🇩🇪'); + Smilies::add($b, ':diegogarcia:', '🇩🇬'); + Smilies::add($b, ':djibouti:', '🇩🇯'); + Smilies::add($b, ':denmark:', '🇩🇰'); + Smilies::add($b, ':dominica:', '🇩🇲'); + Smilies::add($b, ':dominicanrepublic:', '🇩🇴'); + Smilies::add($b, ':algeria:', '🇩🇿'); + Smilies::add($b, ':ceuta&melilla:', '🇪🇦'); + Smilies::add($b, ':ecuador:', '🇪🇨'); + Smilies::add($b, ':estonia:', '🇪🇪'); + Smilies::add($b, ':egypt:', '🇪🇬'); + Smilies::add($b, ':westernsahara:', '🇪🇭'); + Smilies::add($b, ':eritrea:', '🇪🇷'); + Smilies::add($b, ':spain:', '🇪🇸'); + Smilies::add($b, ':ethiopia:', '🇪🇹'); + Smilies::add($b, ':europeanunion:', '🇪🇺'); + Smilies::add($b, ':finland:', '🇫🇮'); + Smilies::add($b, ':fiji:', '🇫🇯'); + Smilies::add($b, ':falklandislands:', '🇫🇰'); + Smilies::add($b, ':micronesia:', '🇫🇲'); + Smilies::add($b, ':faroeislands:', '🇫🇴'); + Smilies::add($b, ':france:', '🇫🇷'); + Smilies::add($b, ':gabon:', '🇬🇦'); + Smilies::add($b, ':unitedkingdom:', '🇬🇧'); + Smilies::add($b, ':grenada:', '🇬🇩'); + Smilies::add($b, ':georgia:', '🇬🇪'); + Smilies::add($b, ':frenchguiana:', '🇬🇫'); + Smilies::add($b, ':guernsey:', '🇬🇬'); + Smilies::add($b, ':ghana:', '🇬🇭'); + Smilies::add($b, ':gibraltar:', '🇬🇮'); + Smilies::add($b, ':greenland:', '🇬🇱'); + Smilies::add($b, ':gambia:', '🇬🇲'); + Smilies::add($b, ':guinea:', '🇬🇳'); + Smilies::add($b, ':guadeloupe:', '🇬🇵'); + Smilies::add($b, ':equatorialguinea:', '🇬🇶'); + Smilies::add($b, ':greece:', '🇬,;🇷'); + Smilies::add($b, ':southgeorgia&southsandwichislands:', '🇬🇸'); + Smilies::add($b, ':guatemala:', '🇬🇹'); + Smilies::add($b, ':guam:', '🇬🇺'); + Smilies::add($b, ':guinea-bissau:', '🇬🇼'); + Smilies::add($b, ':guyana:', '🇬🇾'); + Smilies::add($b, ':hongkongsarchina:', '🇭🇰'); + Smilies::add($b, ':heard&mcdonaldislands:', '🇭🇲'); + Smilies::add($b, ':honduras:', '🇭🇳'); + Smilies::add($b, ':croatia:', '🇭🇷'); + Smilies::add($b, ':haiti:', '🇭🇹'); + Smilies::add($b, ':hungary:', '🇭🇺'); + Smilies::add($b, ':canaryislands:', '🇮🇨'); + Smilies::add($b, ':indonesia:', '🇮🇩'); + Smilies::add($b, ':ireland:', '🇮🇪'); + Smilies::add($b, ':israel:', '🇮🇱'); + Smilies::add($b, ':isleofman:', '🇮🇲'); + Smilies::add($b, ':india:', '🇮🇳'); + Smilies::add($b, ':britishindianoceanterritory:', '🇮🇴'); + Smilies::add($b, ':iraq:', '🇮🇶'); + Smilies::add($b, ':iran:', '🇮🇷'); + Smilies::add($b, ':iceland:', '🇮🇸'); + Smilies::add($b, ':italy:', '🇮🇹'); + Smilies::add($b, ':jersey:', '🇯🇪'); + Smilies::add($b, ':jamaica:', '🇯🇲'); + Smilies::add($b, ':jordan:', '🇯🇴'); + Smilies::add($b, ':japan:', '🇯🇵'); + Smilies::add($b, ':kenya:', '🇰🇪'); + Smilies::add($b, ':kyrgyzstan:', '🇰🇬'); + Smilies::add($b, ':cambodia:', '🇰🇭'); + Smilies::add($b, ':kiribati:', '🇰🇮'); + Smilies::add($b, ':comoros:', '🇰🇲'); + Smilies::add($b, ':st.kitts&nevis:', '🇰🇳'); + Smilies::add($b, ':northkorea:', '🇰🇵'); + Smilies::add($b, ':southkorea:', '🇰🇷'); + Smilies::add($b, ':kuwait:', '🇰🇼'); + Smilies::add($b, ':caymanislands:', '🇰🇾'); + Smilies::add($b, ':kazakhstan:', '🇰🇿'); + Smilies::add($b, ':laos:', '🇱🇦'); + Smilies::add($b, ':lebanon:', '🇱🇧'); + Smilies::add($b, ':st.lucia:', '🇱🇨'); + Smilies::add($b, ':liechtenstein:', '🇱🇮'); + Smilies::add($b, ':srilanka:', '🇱🇰'); + Smilies::add($b, ':liberia:', '🇱🇷'); + Smilies::add($b, ':lesotho:', '🇱🇸'); + Smilies::add($b, ':lithuania:', '🇱🇹'); + Smilies::add($b, ':luxembourg:', '🇱🇺'); + Smilies::add($b, ':latvia:', '🇱🇻'); + Smilies::add($b, ':libya:', '🇱🇾'); + Smilies::add($b, ':morocco:', '🇲🇦'); + Smilies::add($b, ':monaco:', '🇲🇨'); + Smilies::add($b, ':moldova:', '🇲🇩'); + Smilies::add($b, ':montenegro:', '🇲🇪'); + Smilies::add($b, ':st.martin:', '🇲🇫'); + Smilies::add($b, ':madagascar:', '🇲🇬'); + Smilies::add($b, ':marshallislands:', '🇲🇭'); + Smilies::add($b, ':northmacedonia:', '🇲🇰'); + Smilies::add($b, ':mali:', '🇲🇱'); + Smilies::add($b, ':myanmar(burma):', '🇲🇲'); + Smilies::add($b, ':mongolia:', '🇲🇳'); + Smilies::add($b, ':macaosarchina:', '🇲🇴'); + Smilies::add($b, ':northernmarianaislands:', '🇲🇵'); + Smilies::add($b, ':martinique:', '🇲🇶'); + Smilies::add($b, ':mauritania:', '🇲🇷'); + Smilies::add($b, ':montserrat:', '🇲🇸'); + Smilies::add($b, ':malta:', '🇲🇹'); + Smilies::add($b, ':mauritius:', '🇲🇺'); + Smilies::add($b, ':maldives:', '🇲🇻'); + Smilies::add($b, ':malawi:', '🇲🇼'); + Smilies::add($b, ':mexico:', '🇲🇽'); + Smilies::add($b, ':malaysia:', '🇲🇾'); + Smilies::add($b, ':mozambique:', '🇲🇿'); + Smilies::add($b, ':namibia:', '🇳🇦'); + Smilies::add($b, ':newcaledonia:', '🇳🇨'); + Smilies::add($b, ':niger:', '🇳🇪'); + Smilies::add($b, ':norfolkisland:', '🇳🇫'); + Smilies::add($b, ':nigeria:', '🇳🇬'); + Smilies::add($b, ':nicaragua:', '🇳🇮'); + Smilies::add($b, ':netherlands:', '🇳🇱'); + Smilies::add($b, ':norway:', '🇳🇴'); + Smilies::add($b, ':nepal:', '🇳🇵'); + Smilies::add($b, ':nauru:', '🇳🇷'); + Smilies::add($b, ':niue:', '🇳🇺'); + Smilies::add($b, ':newzealand:', '🇳🇿'); + Smilies::add($b, ':oman:', '🇴🇲'); + Smilies::add($b, ':panama:', '🇵🇦'); + Smilies::add($b, ':peru:', '🇵🇪'); + Smilies::add($b, ':frenchpolynesia:', '🇵🇫'); + Smilies::add($b, ':papuanewguinea:', '🇵🇬'); + Smilies::add($b, ':philippines:', '🇵🇭'); + Smilies::add($b, ':pakistan:', '🇵🇰'); + Smilies::add($b, ':poland:', '🇵🇱'); + Smilies::add($b, ':st.pierre&miquelon:', '🇵🇲'); + Smilies::add($b, ':pitcairnislands:', '🇵🇳'); + Smilies::add($b, ':puertorico:', '🇵🇷'); + Smilies::add($b, ':palestinianterritories:', '🇵🇸'); + Smilies::add($b, ':portugal:', '🇵🇹'); + Smilies::add($b, ':palau:', '🇵🇼'); + Smilies::add($b, ':paraguay:', '🇵🇾'); + Smilies::add($b, ':qatar:', '🇶🇦'); + Smilies::add($b, ':réunion:', '🇷🇪'); + Smilies::add($b, ':romania:', '🇷🇴'); + Smilies::add($b, ':serbia:', '🇷🇸'); + Smilies::add($b, ':russia:', '🇷🇺'); + Smilies::add($b, ':rwanda:', '🇷🇼'); + Smilies::add($b, ':saudiarabia:', '🇸🇦'); + Smilies::add($b, ':solomonislands:', '🇸🇧'); + Smilies::add($b, ':seychelles:', '🇸🇨'); + Smilies::add($b, ':sudan:', '🇸🇩'); + Smilies::add($b, ':sweden:', '🇸🇪'); + Smilies::add($b, ':singapore:', '🇸🇬'); + Smilies::add($b, ':st.helena:', '🇸🇭'); + Smilies::add($b, ':slovenia:', '🇸🇮'); + Smilies::add($b, ':svalbard&janmayen:', '🇸🇯'); + Smilies::add($b, ':slovakia:', '🇸🇰'); + Smilies::add($b, ':sierraleone:', '🇸🇱'); + Smilies::add($b, ':sanmarino:', '🇸🇲'); + Smilies::add($b, ':senegal:', '🇸🇳'); + Smilies::add($b, ':somalia:', '🇸🇴'); + Smilies::add($b, ':suriname:', '🇸🇷'); + Smilies::add($b, ':southsudan:', '🇸🇸'); + Smilies::add($b, ':sãotomé&príncipe:', '🇸🇹'); + Smilies::add($b, ':elsalvador:', '🇸🇻'); + Smilies::add($b, ':sintmaarten:', '🇸🇽'); + Smilies::add($b, ':syria:', '🇸🇾'); + Smilies::add($b, ':eswatini:', '🇸🇿'); + Smilies::add($b, ':tristandacunha:', '🇹🇦'); + Smilies::add($b, ':turks&caicosislands:', '🇹🇨'); + Smilies::add($b, ':chad:', '🇹🇩'); + Smilies::add($b, ':frenchsouthernterritories:', '🇹🇫'); + Smilies::add($b, ':togo:', '🇹🇬'); + Smilies::add($b, ':thailand:', '🇹🇭'); + Smilies::add($b, ':tajikistan:', '🇹🇯'); + Smilies::add($b, ':tokelau:', '🇹🇰'); + Smilies::add($b, ':timor-leste:', '🇹🇱'); + Smilies::add($b, ':turkmenistan:', '🇹🇲'); + Smilies::add($b, ':tunisia:', '🇹🇳'); + Smilies::add($b, ':tonga:', '🇹🇴'); + Smilies::add($b, ':turkey:', '🇹🇷'); + Smilies::add($b, ':trinidad&tobago:', '🇹🇹'); + Smilies::add($b, ':tuvalu:', '🇹🇻'); + Smilies::add($b, ':taiwan:', '🇹🇼'); + Smilies::add($b, ':tanzania:', '🇹🇿'); + Smilies::add($b, ':ukraine:', '🇺🇦'); + Smilies::add($b, ':uganda:', '🇺🇬'); + Smilies::add($b, ':u.s.outlyingislands:', '🇺🇲'); + Smilies::add($b, ':unitednations:', '🇺🇳'); + Smilies::add($b, ':unitedstates:', '🇺🇸'); + Smilies::add($b, ':uruguay:', '🇺🇾'); + Smilies::add($b, ':uzbekistan:', '🇺🇿'); + Smilies::add($b, ':vaticancity:', '🇻🇦'); + Smilies::add($b, ':st.vincent&grenadines:', '🇻🇨'); + Smilies::add($b, ':venezuela:', '🇻🇪'); + Smilies::add($b, ':britishvirginislands:', '🇻🇬'); + Smilies::add($b, ':u.s.virginislands:', '🇻🇮'); + Smilies::add($b, ':vietnam:', '🇻🇳'); + Smilies::add($b, ':vanuatu:', '🇻🇺'); + Smilies::add($b, ':wallis&futuna:', '🇼🇫'); + Smilies::add($b, ':samoa:', '🇼🇸'); + Smilies::add($b, ':kosovo:', '🇽🇰'); + Smilies::add($b, ':yemen:', '🇾🇪'); + Smilies::add($b, ':mayotte:', '🇾🇹'); + Smilies::add($b, ':southafrica:', '🇿🇦'); + Smilies::add($b, ':zambia:', '🇿🇲'); + Smilies::add($b, ':zimbabwe:', '🇿🇼'); // subdivision-flag - Smilies::add($b, ':england:', '🏴󠁧󠁢󠁥󠁮󠁧󠁿'); - Smilies::add($b, ':scotland:', '🏴󠁧󠁢󠁳󠁴󠁿'); - Smilies::add($b, ':wales:', '🏴󠁧󠁢󠁷󠁬󠁳󠁿'); + Smilies::add($b, ':england:', '🏴󠁧󠁢󠁥󠁮󠁧󠁿'); + Smilies::add($b, ':scotland:', '🏴󠁧󠁢󠁳󠁴󠁿'); + Smilies::add($b, ':wales:', '🏴󠁧󠁢󠁷󠁬󠁳󠁿'); } + diff --git a/url_replace/LICENSE.md b/url_replace/LICENSE.md new file mode 100644 index 00000000..09dc8f64 --- /dev/null +++ b/url_replace/LICENSE.md @@ -0,0 +1,21 @@ +# MIT License + +Copyright © 2024 Dr. Tobias Quathamer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/url_replace/README.md b/url_replace/README.md new file mode 100644 index 00000000..348c4426 --- /dev/null +++ b/url_replace/README.md @@ -0,0 +1,18 @@ +# URL replace + +This addon will replace all occurrences of specified URLs with the address of +alternative servers in all displayed postings on a Friendica node. + +You can use this to switch from Twitter (or X) to a nitter instance, from +YouTube to an invidious instance, from Instagram to a proxigram instance, +or from some news sites to 12ft.io. + +Note: If you are using the twitter connector on your server, the links to the +contacts profile pages will not be replaced by this addon. Only links in the +body of the postings are affected. + +## Why + +- Access a website without JavaScript enabled to prevent JavaScript analytics + and potential IP-based tracking +- Avoid seeing ads on YouTube videos diff --git a/url_replace/lang/C/messages.po b/url_replace/lang/C/messages.po new file mode 100644 index 00000000..e8dbb04c --- /dev/null +++ b/url_replace/lang/C/messages.po @@ -0,0 +1,64 @@ +# ADDON url_replace +# Copyright (C) +# This file is distributed under the same license as the Friendica url_replace addon package. +# +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-03-14 09:05+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: url_replace.php:68 +msgid "Replace links to X." +msgstr "" + +#: url_replace.php:73 +msgid "Nitter server" +msgstr "" + +#: url_replace.php:75 url_replace.php:88 url_replace.php:101 +#, php-format +msgid "Specify the URL with protocol. The default is %s." +msgstr "" + +#: url_replace.php:81 +msgid "Replace links to YouTube." +msgstr "" + +#: url_replace.php:86 +msgid "Invidious server" +msgstr "" + +#: url_replace.php:94 +msgid "Replace links to Instagram." +msgstr "" + +#: url_replace.php:99 +msgid "Proxigram server" +msgstr "" + +#: url_replace.php:107 +msgid "Sites which are accessed through 12ft.io" +msgstr "" + +#: url_replace.php:109 +msgid "Specify the URLs with protocol, one per line." +msgstr "" + +#: url_replace.php:113 +msgid "Save settings" +msgstr "" + +#: url_replace.php:179 +msgid "" +"(URL replace addon enabled for X, YouTube, Instagram and some news sites.)" +msgstr "" diff --git a/url_replace/templates/admin.tpl b/url_replace/templates/admin.tpl new file mode 100644 index 00000000..fec5a253 --- /dev/null +++ b/url_replace/templates/admin.tpl @@ -0,0 +1,9 @@ +{{include file="field_checkbox.tpl" field=$nitter_server_enabled}} +{{include file="field_input.tpl" field=$nitter_server}} +{{include file="field_checkbox.tpl" field=$invidious_server_enabled}} +{{include file="field_input.tpl" field=$invidious_server}} +{{include file="field_checkbox.tpl" field=$proxigram_server_enabled}} +{{include file="field_input.tpl" field=$proxigram_server}} +{{include file="field_textarea.tpl" field=$twelvefeet_sites}} + +
diff --git a/url_replace/url_replace.php b/url_replace/url_replace.php new file mode 100644 index 00000000..cd3b60b4 --- /dev/null +++ b/url_replace/url_replace.php @@ -0,0 +1,190 @@ + + * Maintainer: Dr. Tobias Quathamer + */ + +use Friendica\Core\Hook; +use Friendica\Core\Renderer; +use Friendica\DI; + +const URL_REPLACE_NITTER_DEFAULT = 'https://nitter.net'; +const URL_REPLACE_INVIDIOUS_DEFAULT = 'https://invidio.us'; +const URL_REPLACE_PROXIGRAM_DEFAULT = 'https://proxigram.lunar.icu'; + +function url_replace_install() +{ + Hook::register('prepare_body_final', 'addon/url_replace/url_replace.php', 'url_replace_render'); +} + +/** + * Handle sent data from admin settings + */ +function url_replace_addon_admin_post() +{ + DI::config()->set('url_replace', 'nitter_server_enabled', !empty($_POST['nitter_server_enabled'])); + $nitter_server = rtrim(trim($_POST['nitter_server']), '/'); + if ($nitter_server) { + DI::config()->set('url_replace', 'nitter_server', $nitter_server); + } else { + DI::config()->delete('url_replace', 'nitter_server'); + } + DI::config()->set('url_replace', 'invidious_server_enabled', !empty($_POST['invidious_server_enabled'])); + $invidious_server = rtrim(trim($_POST['invidious_server']), '/'); + if ($invidious_server) { + DI::config()->set('url_replace', 'invidious_server', $invidious_server); + } else { + DI::config()->delete('url_replace', 'invidious_server'); + } + DI::config()->set('url_replace', 'proxigram_server_enabled', !empty($_POST['proxigram_server_enabled'])); + $proxigram_server = rtrim(trim($_POST['proxigram_server']), '/'); + if ($proxigram_server) { + DI::config()->set('url_replace', 'proxigram_server', $proxigram_server); + } else { + DI::config()->delete('url_replace', 'proxigram_server'); + } + // Convert twelvefeet_sites into an array before setting the new value + $twelvefeet_sites = explode(PHP_EOL, $_POST['twelvefeet_sites']); + // Normalize URLs by using lower case, removing a trailing slash and whitespace + $twelvefeet_sites = array_map(fn ($value): string => rtrim(trim(strtolower($value)), '/'), $twelvefeet_sites); + // Do not store empty lines or duplicates + $twelvefeet_sites = array_filter($twelvefeet_sites, fn ($value): bool => !empty($value)); + $twelvefeet_sites = array_unique($twelvefeet_sites); + // Ensure a protocol and default to HTTPS + $twelvefeet_sites = array_map( + fn ($value): string => substr($value, 0, 4) !== 'http' ? 'https://' . $value : $value, + $twelvefeet_sites + ); + asort($twelvefeet_sites); + DI::config()->set('url_replace', 'twelvefeet_sites', $twelvefeet_sites); +} + +/** + * Hook into admin settings to enable choosing a different server + * for Twitter, YouTube, Instagram, and news sites. + */ +function url_replace_addon_admin(string &$o) +{ + $nitter_server_enabled = DI::config()->get('url_replace', 'nitter_server_enabled') ?? true; + $nitter_server = DI::config()->get('url_replace', 'nitter_server') ?? ''; + $invidious_server_enabled = DI::config()->get('url_replace', 'invidious_server_enabled') ?? true; + $invidious_server = DI::config()->get('url_replace', 'invidious_server') ?? ''; + $proxigram_server_enabled = DI::config()->get('url_replace', 'proxigram_server_enabled') ?? true; + $proxigram_server = DI::config()->get('url_replace', 'proxigram_server') ?? ''; + $twelvefeet_sites = implode(PHP_EOL, DI::config()->get('url_replace', 'twelvefeet_sites') ?? []); + + $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/url_replace/'); + $o = Renderer::replaceMacros($t, [ + '$nitter_server_enabled' => [ + 'nitter_server_enabled', + DI::l10n()->t('Replace links to X.'), + $nitter_server_enabled, + ], + '$nitter_server' => [ + 'nitter_server', + DI::l10n()->t('Nitter server'), + $nitter_server, + DI::l10n()->t('Specify the URL with protocol. The default is %s.', URL_REPLACE_NITTER_DEFAULT), + null, + 'placeholder="' . URL_REPLACE_NITTER_DEFAULT . '"', + ], + '$invidious_server_enabled' => [ + 'invidious_server_enabled', + DI::l10n()->t('Replace links to YouTube.'), + $invidious_server_enabled, + ], + '$invidious_server' => [ + 'invidious_server', + DI::l10n()->t('Invidious server'), + $invidious_server, + DI::l10n()->t('Specify the URL with protocol. The default is %s.', URL_REPLACE_INVIDIOUS_DEFAULT), + null, + 'placeholder="' . URL_REPLACE_INVIDIOUS_DEFAULT . '"', + ], + '$proxigram_server_enabled' => [ + 'proxigram_server_enabled', + DI::l10n()->t('Replace links to Instagram.'), + $proxigram_server_enabled, + ], + '$proxigram_server' => [ + 'proxigram_server', + DI::l10n()->t('Proxigram server'), + $proxigram_server, + DI::l10n()->t('Specify the URL with protocol. The default is %s.', URL_REPLACE_PROXIGRAM_DEFAULT), + null, + 'placeholder="' . URL_REPLACE_PROXIGRAM_DEFAULT . '"', + ], + '$twelvefeet_sites' => [ + 'twelvefeet_sites', + DI::l10n()->t('Sites which are accessed through 12ft.io'), + $twelvefeet_sites, + DI::l10n()->t('Specify the URLs with protocol, one per line.'), + null, + 'rows="6"' + ], + '$submit' => DI::l10n()->t('Save settings'), + ]); +} + +/** + * Replace proprietary URLs with their specified counterpart + */ +function url_replace_render(array &$b) +{ + $replaced = false; + $replacements = []; + + $nitter_server = DI::config()->get('url_replace', 'nitter_server') ?? URL_REPLACE_NITTER_DEFAULT; + $nitter_server_enabled = DI::config()->get('url_replace', 'nitter_server_enabled') ?? true; + if ($nitter_server_enabled) { + $replacements = array_merge($replacements, [ + 'https://mobile.twitter.com' => $nitter_server, + 'https://twitter.com' => $nitter_server, + 'https://mobile.x.com' => $nitter_server, + 'https://x.com' => $nitter_server, + ]); + } + + $invidious_server = DI::config()->get('url_replace', 'invidious_server') ?? URL_REPLACE_INVIDIOUS_DEFAULT; + $invidious_server_enabled = DI::config()->get('url_replace', 'invidious_server_enabled') ?? true; + if ($invidious_server_enabled) { + $replacements = array_merge($replacements, [ + 'https://www.youtube.com' => $invidious_server, + 'https://youtube.com' => $invidious_server, + 'https://m.youtube.com' => $invidious_server, + 'https://youtu.be' => $invidious_server, + ]); + } + + $proxigram_server = DI::config()->get('url_replace', 'proxigram_server') ?? URL_REPLACE_PROXIGRAM_DEFAULT; + $proxigram_server_enabled = DI::config()->get('url_replace', 'proxigram_server_enabled') ?? true; + if ($proxigram_server_enabled) { + $replacements = array_merge($replacements, [ + 'https://www.instagram.com' => $proxigram_server, + 'https://instagram.com' => $proxigram_server, + 'https://ig.me' => $proxigram_server, + ]); + } + + foreach ($replacements as $server => $replacement) { + if (strpos($b['html'], $server) !== false) { + $b['html'] = str_replace($server, $replacement, $b['html']); + $replaced = true; + } + } + + $twelvefeet_sites = DI::config()->get('url_replace', 'twelvefeet_sites') ?? []; + foreach ($twelvefeet_sites as $twelvefeet_site) { + if (strpos($b['html'], $twelvefeet_site) !== false) { + $b['html'] = str_replace($twelvefeet_site, 'https://12ft.io/' . $twelvefeet_site, $b['html']); + $replaced = true; + } + } + + if ($replaced) { + $b['html'] .= '

' . DI::l10n()->t('(URL replace addon enabled for X, YouTube, Instagram and some news sites.)') . '

'; + } +} diff --git a/viewsrc/lang/de/messages.po b/viewsrc/lang/de/messages.po index b397c392..7cd70c0c 100644 --- a/viewsrc/lang/de/messages.po +++ b/viewsrc/lang/de/messages.po @@ -14,7 +14,7 @@ msgstr "" "POT-Creation-Date: 2021-02-01 18:16+0100\n" "PO-Revision-Date: 2018-03-20 07:26+0000\n" "Last-Translator: Tobias Diekershoff , 2018\n" -"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n" +"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/viewsrc/lang/it/messages.po b/viewsrc/lang/it/messages.po index 0b9f3f93..e063ba17 100644 --- a/viewsrc/lang/it/messages.po +++ b/viewsrc/lang/it/messages.po @@ -3,21 +3,24 @@ # This file is distributed under the same license as the Friendica viewsrc addon package. # # +# Translators: +# fabrixxm , 2018 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"POT-Creation-Date: 2021-02-01 18:16+0100\n" +"PO-Revision-Date: 2018-03-20 07:26+0000\n" "Last-Translator: fabrixxm , 2018\n" -"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n" +"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: viewsrc.php:39 +#: viewsrc.php:49 msgid "View Source" msgstr "Vedi Sorgente" diff --git a/viewsrc/lang/it/strings.php b/viewsrc/lang/it/strings.php index 348cfe7b..b0b07861 100644 --- a/viewsrc/lang/it/strings.php +++ b/viewsrc/lang/it/strings.php @@ -3,6 +3,6 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['View Source'] = 'Vedi Sorgente'; diff --git a/viewsrc/viewsrc.php b/viewsrc/viewsrc.php index eefb7105..bd07b541 100644 --- a/viewsrc/viewsrc.php +++ b/viewsrc/viewsrc.php @@ -7,7 +7,6 @@ * */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; @@ -36,5 +35,5 @@ function viewsrc_item_photo_menu(array &$b) return; } - $b['menu'] = array_merge([DI::l10n()->t('View Source') => DI::baseUrl()->get() . '/viewsrc/'. $b['item']['uri-id']], $b['menu']); + $b['menu'] = array_merge([DI::l10n()->t('View Source') => DI::baseUrl() . '/viewsrc/'. $b['item']['uri-id']], $b['menu']); } diff --git a/webdav_storage/src/WebDav.php b/webdav_storage/src/WebDav.php index de9fc476..ddf2dae0 100644 --- a/webdav_storage/src/WebDav.php +++ b/webdav_storage/src/WebDav.php @@ -113,7 +113,7 @@ class WebDav implements ICanWriteToStorage $response = $this->client->request('propfind', $uri, $opts); $responseDoc = new \DOMDocument(); - $responseDoc->loadXML($response->getBody()); + $responseDoc->loadXML($response->getBodyString()); $responseDoc->formatOutput = true; $xpath = new \DOMXPath($responseDoc); @@ -205,7 +205,7 @@ class WebDav implements ICanWriteToStorage throw new ReferenceStorageException(sprintf('Invalid reference %s', $reference)); } - return $response->getBody(); + return $response->getBodyString(); } /** diff --git a/webdav_storage/src/WebDavConfig.php b/webdav_storage/src/WebDavConfig.php index 2236e97a..320b06a2 100644 --- a/webdav_storage/src/WebDavConfig.php +++ b/webdav_storage/src/WebDavConfig.php @@ -52,7 +52,7 @@ class WebDavConfig implements ICanConfigureStorage $this->config = $config; $this->client = $client; - $this->authOptions = null; + $this->authOptions = []; if (!empty($this->config->get('webdav', 'username'))) { $this->authOptions = [ diff --git a/webdav_storage/webdav_storage.php b/webdav_storage/webdav_storage.php index adcbea29..fd2eb0d9 100644 --- a/webdav_storage/webdav_storage.php +++ b/webdav_storage/webdav_storage.php @@ -8,11 +8,10 @@ use Friendica\Addon\webdav_storage\src\WebDav; use Friendica\Addon\webdav_storage\src\WebDavConfig; -use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; -function webdav_storage_install($a) +function webdav_storage_install() { Hook::register('storage_instance' , __FILE__, 'webdav_storage_instance'); Hook::register('storage_config' , __FILE__, 'webdav_storage_config'); diff --git a/webrtc/lang/cs/messages.po b/webrtc/lang/cs/messages.po index 217385f8..9485b565 100644 --- a/webrtc/lang/cs/messages.po +++ b/webrtc/lang/cs/messages.po @@ -4,56 +4,53 @@ # # # Translators: -# Michal Šupler , 2014 +# Aditoo, 2018 +# michal_s , 2014 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2014-07-02 15:10+0000\n" -"Last-Translator: Michal Šupler \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n" +"POT-Creation-Date: 2022-04-29 15:56+0200\n" +"PO-Revision-Date: 2014-06-23 13:05+0000\n" +"Last-Translator: Aditoo, 2018\n" +"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: webrtc.php:20 +#: webrtc.php:18 msgid "WebRTC Videochat" msgstr "WebRTC Videochat" -#: webrtc.php:26 +#: webrtc.php:24 msgid "Save Settings" msgstr "Uložit Nastavení" -#: webrtc.php:27 +#: webrtc.php:25 msgid "WebRTC Base URL" -msgstr "WebRTC Base adresa URL" +msgstr "Základní adresa URL WebRTC" -#: webrtc.php:27 +#: webrtc.php:25 msgid "" "Page your users will create a WebRTC chat room on. For example you could use" " https://live.mayfirst.org ." -msgstr "Stránka, na které budou vaši uživatelé vytvářet WebRTC chatovací místnosti. Například můžete zadat https://live.mayfirst.org." +msgstr "Stránka, na které budou vaši uživatelé vytvářet chatovací místnosti WebRTC. Například můžete zadat https://live.mayfirst.org." -#: webrtc.php:33 -msgid "Settings updated." -msgstr "Nastavení aktualizováno." - -#: webrtc.php:47 +#: webrtc.php:44 msgid "Video Chat" msgstr "Video Chat" -#: webrtc.php:48 +#: webrtc.php:45 msgid "" -"WebRTC is a video and audio conferencing tool that works with Firefox " -"(version 21 and above) and Chrome/Chromium (version 25 and above). Just " -"create a new chat room and send the link to someone you want to chat with." -msgstr "WebRTC je video a audio konferenční nástroj který funguje s prohlížeči Firefox (verze 21 a vyšší) a Chrome/Chromium (verze 25 a vyšší). Stačí vytvořit novou chatovací místnost a poslat link někomu, se kterým chcete chatovat." +"WebRTC is a video and audio conferencing tool that works in all modern " +"browsers. Just create a new chat room and send the link to someone you want " +"to chat with." +msgstr "" -#: webrtc.php:50 +#: webrtc.php:47 msgid "" "Please contact your friendica admin and send a reminder to configure the " "WebRTC addon." -msgstr "Prosím kontaktujte vašeho administrátora serveru friendica a požádejte ho o konfiguraci WebRTC rozšíření." +msgstr "Prosím kontaktujte administrátora Vašeho serveru Friendica a požádejte ho o konfiguraci doplňku WebRTC." diff --git a/webrtc/lang/cs/strings.php b/webrtc/lang/cs/strings.php index 23a7a6cc..5ab781bf 100644 --- a/webrtc/lang/cs/strings.php +++ b/webrtc/lang/cs/strings.php @@ -3,13 +3,11 @@ if(! function_exists("string_plural_select_cs")) { function string_plural_select_cs($n){ $n = intval($n); - if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; } + if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; } }} $a->strings['WebRTC Videochat'] = 'WebRTC Videochat'; $a->strings['Save Settings'] = 'Uložit Nastavení'; -$a->strings['WebRTC Base URL'] = 'WebRTC Base adresa URL'; -$a->strings['Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .'] = 'Stránka, na které budou vaši uživatelé vytvářet WebRTC chatovací místnosti. Například můžete zadat https://live.mayfirst.org.'; -$a->strings['Settings updated.'] = 'Nastavení aktualizováno.'; +$a->strings['WebRTC Base URL'] = 'Základní adresa URL WebRTC'; +$a->strings['Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .'] = 'Stránka, na které budou vaši uživatelé vytvářet chatovací místnosti WebRTC. Například můžete zadat https://live.mayfirst.org.'; $a->strings['Video Chat'] = 'Video Chat'; -$a->strings['WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC je video a audio konferenční nástroj který funguje s prohlížeči Firefox (verze 21 a vyšší) a Chrome/Chromium (verze 25 a vyšší). Stačí vytvořit novou chatovací místnost a poslat link někomu, se kterým chcete chatovat.'; -$a->strings['Please contact your friendica admin and send a reminder to configure the WebRTC addon.'] = 'Prosím kontaktujte vašeho administrátora serveru friendica a požádejte ho o konfiguraci WebRTC rozšíření.'; +$a->strings['Please contact your friendica admin and send a reminder to configure the WebRTC addon.'] = 'Prosím kontaktujte administrátora Vašeho serveru Friendica a požádejte ho o konfiguraci doplňku WebRTC.'; diff --git a/webrtc/lang/de/messages.po b/webrtc/lang/de/messages.po index a8b153d0..e5e37294 100644 --- a/webrtc/lang/de/messages.po +++ b/webrtc/lang/de/messages.po @@ -5,51 +5,52 @@ # # Translators: # Tobias Diekershoff , 2014 +# Tobias Diekershoff , 2022 # Ulf Rompe , 2019 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:16+0100\n" -"PO-Revision-Date: 2021-02-01 20:17+0000\n" -"Last-Translator: Transifex Bot <>\n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"POT-Creation-Date: 2022-04-29 15:56+0200\n" +"PO-Revision-Date: 2014-06-23 13:05+0000\n" +"Last-Translator: Tobias Diekershoff , 2022\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: webrtc.php:19 +#: webrtc.php:18 msgid "WebRTC Videochat" msgstr "WebRTC Videochat" -#: webrtc.php:25 +#: webrtc.php:24 msgid "Save Settings" msgstr "Einstellungen speichern" -#: webrtc.php:26 +#: webrtc.php:25 msgid "WebRTC Base URL" msgstr "Basis-URL des WebRTC-Servers" -#: webrtc.php:26 +#: webrtc.php:25 msgid "" "Page your users will create a WebRTC chat room on. For example you could use" " https://live.mayfirst.org ." msgstr "Auf welcher Seite sollten deine Nutzer einen WebRTC-Chatraum anlegen? Du könntest bspw. https://live.mayfirst.org verwenden." -#: webrtc.php:45 +#: webrtc.php:44 msgid "Video Chat" msgstr "Video Chat" -#: webrtc.php:46 +#: webrtc.php:45 msgid "" -"WebRTC is a video and audio conferencing tool that works with Firefox " -"(version 21 and above) and Chrome/Chromium (version 25 and above). Just " -"create a new chat room and send the link to someone you want to chat with." -msgstr "WebRTC ist ein Werkzeug für Audio- und Videokonferenzen, das mit Firefox (Version 21 und höher) und Chrome/Chromium (Versionen 25 und höher) funktioniert. Lege einfach einen neuen Chatraum an und sende den Link an die Personen, mit denen du chatten willst." +"WebRTC is a video and audio conferencing tool that works in all modern " +"browsers. Just create a new chat room and send the link to someone you want " +"to chat with." +msgstr "WebRTC ist ein Standart für Audio und Video Konferenzen der von allen modernen Browser unterstützt wird, Öffne einfach einen neuen Chatraum und sende den Link an diejenige Person, mit der du dich unterhalten möchtest." -#: webrtc.php:48 +#: webrtc.php:47 msgid "" "Please contact your friendica admin and send a reminder to configure the " "WebRTC addon." diff --git a/webrtc/lang/de/strings.php b/webrtc/lang/de/strings.php index 0f5f0a1e..207bedf3 100644 --- a/webrtc/lang/de/strings.php +++ b/webrtc/lang/de/strings.php @@ -10,5 +10,5 @@ $a->strings['Save Settings'] = 'Einstellungen speichern'; $a->strings['WebRTC Base URL'] = 'Basis-URL des WebRTC-Servers'; $a->strings['Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .'] = 'Auf welcher Seite sollten deine Nutzer einen WebRTC-Chatraum anlegen? Du könntest bspw. https://live.mayfirst.org verwenden.'; $a->strings['Video Chat'] = 'Video Chat'; -$a->strings['WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC ist ein Werkzeug für Audio- und Videokonferenzen, das mit Firefox (Version 21 und höher) und Chrome/Chromium (Versionen 25 und höher) funktioniert. Lege einfach einen neuen Chatraum an und sende den Link an die Personen, mit denen du chatten willst.'; +$a->strings['WebRTC is a video and audio conferencing tool that works in all modern browsers. Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC ist ein Standart für Audio und Video Konferenzen der von allen modernen Browser unterstützt wird, Öffne einfach einen neuen Chatraum und sende den Link an diejenige Person, mit der du dich unterhalten möchtest.'; $a->strings['Please contact your friendica admin and send a reminder to configure the WebRTC addon.'] = 'Bitte schicke eine Erinnerung an deinen Friendica-Admin, dass WebRTC noch nicht richtig konfiguriert ist.'; diff --git a/webrtc/lang/es/messages.po b/webrtc/lang/es/messages.po index ae877e03..f1113ada 100644 --- a/webrtc/lang/es/messages.po +++ b/webrtc/lang/es/messages.po @@ -9,50 +9,46 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2016-04-18 19:15+0000\n" -"Last-Translator: Tupambae.org\n" -"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n" +"POT-Creation-Date: 2022-04-29 15:56+0200\n" +"PO-Revision-Date: 2014-06-23 13:05+0000\n" +"Last-Translator: Tupambae.org, 2016\n" +"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: webrtc.php:20 +#: webrtc.php:18 msgid "WebRTC Videochat" msgstr "WebRTC Videochat" -#: webrtc.php:26 +#: webrtc.php:24 msgid "Save Settings" msgstr "Guardar ajustes" -#: webrtc.php:27 +#: webrtc.php:25 msgid "WebRTC Base URL" msgstr "WebRTC URL Base" -#: webrtc.php:27 +#: webrtc.php:25 msgid "" "Page your users will create a WebRTC chat room on. For example you could use" " https://live.mayfirst.org ." msgstr "Pagina donde el usuario creara una habitación de chat.\nPor ejemplo podría usar https://live.mayfirst.org ." -#: webrtc.php:33 -msgid "Settings updated." -msgstr "Ajustes actualizados." - -#: webrtc.php:47 +#: webrtc.php:44 msgid "Video Chat" msgstr "Video Chat" -#: webrtc.php:48 +#: webrtc.php:45 msgid "" -"WebRTC is a video and audio conferencing tool that works with Firefox " -"(version 21 and above) and Chrome/Chromium (version 25 and above). Just " -"create a new chat room and send the link to someone you want to chat with." -msgstr "WebRTC es una herramienta de vídeo conferencia que funciona con Firefox (versión 21 y arriba) y Chrome/Chromium (versión 25 y arriba). " +"WebRTC is a video and audio conferencing tool that works in all modern " +"browsers. Just create a new chat room and send the link to someone you want " +"to chat with." +msgstr "" -#: webrtc.php:50 +#: webrtc.php:47 msgid "" "Please contact your friendica admin and send a reminder to configure the " "WebRTC addon." diff --git a/webrtc/lang/es/strings.php b/webrtc/lang/es/strings.php index aeaf7ee0..797567fa 100644 --- a/webrtc/lang/es/strings.php +++ b/webrtc/lang/es/strings.php @@ -3,14 +3,12 @@ if(! function_exists("string_plural_select_es")) { function string_plural_select_es($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['WebRTC Videochat'] = 'WebRTC Videochat'; $a->strings['Save Settings'] = 'Guardar ajustes'; $a->strings['WebRTC Base URL'] = 'WebRTC URL Base'; $a->strings['Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .'] = 'Pagina donde el usuario creara una habitación de chat. Por ejemplo podría usar https://live.mayfirst.org .'; -$a->strings['Settings updated.'] = 'Ajustes actualizados.'; $a->strings['Video Chat'] = 'Video Chat'; -$a->strings['WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC es una herramienta de vídeo conferencia que funciona con Firefox (versión 21 y arriba) y Chrome/Chromium (versión 25 y arriba). '; $a->strings['Please contact your friendica admin and send a reminder to configure the WebRTC addon.'] = 'Por favor contacta a tu administrador de friendica y envíale un recordatorio para configurar el accesorio (addon) WebRTC.'; diff --git a/webrtc/lang/it/messages.po b/webrtc/lang/it/messages.po index df0903f2..f018cb6e 100644 --- a/webrtc/lang/it/messages.po +++ b/webrtc/lang/it/messages.po @@ -5,55 +5,51 @@ # # Translators: # fabrixxm , 2014 -# Sylke Vicious , 2020 +# Sylke Vicious , 2020,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2020-09-17 11:39+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2022-04-29 15:56+0200\n" +"PO-Revision-Date: 2014-06-23 13:05+0000\n" +"Last-Translator: Sylke Vicious , 2020,2023\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: webrtc.php:20 +#: webrtc.php:18 msgid "WebRTC Videochat" msgstr "Chat video WebRTC" -#: webrtc.php:26 +#: webrtc.php:24 msgid "Save Settings" msgstr "Salva Impostazioni" -#: webrtc.php:27 +#: webrtc.php:25 msgid "WebRTC Base URL" msgstr "Indirizzo base WebRTC" -#: webrtc.php:27 +#: webrtc.php:25 msgid "" "Page your users will create a WebRTC chat room on. For example you could use" " https://live.mayfirst.org ." msgstr "Indirizzo della pagina che i tuoi utenti utilizzeranno per creare una chat rom WebRTC. Per esempio potresti usare https://live.mayfirst.org ." -#: webrtc.php:33 -msgid "Settings updated." -msgstr "Impostazioni aggiornate." - -#: webrtc.php:47 +#: webrtc.php:44 msgid "Video Chat" msgstr "Chat Video" -#: webrtc.php:48 +#: webrtc.php:45 msgid "" -"WebRTC is a video and audio conferencing tool that works with Firefox " -"(version 21 and above) and Chrome/Chromium (version 25 and above). Just " -"create a new chat room and send the link to someone you want to chat with." -msgstr "WebRTC è un sistema di conferenza audio/video che funziona con Firefox (dalla versione 21) e Chrome/Chromium (dalla versione 25).\nCrea semplicemente una nuova stanza e invia il collegamento alla persona con cui vuoi parlare." +"WebRTC is a video and audio conferencing tool that works in all modern " +"browsers. Just create a new chat room and send the link to someone you want " +"to chat with." +msgstr "WebRTC è uno strumento di conferenza video e audio che funziona in tutti i browser moderni. Ti basta creare una nuova stanza di conversazione e inviare il collegamento a qualcuno con il quale vuoi parlare." -#: webrtc.php:50 +#: webrtc.php:47 msgid "" "Please contact your friendica admin and send a reminder to configure the " "WebRTC addon." diff --git a/webrtc/lang/it/strings.php b/webrtc/lang/it/strings.php index 42649337..0e1bb5b8 100644 --- a/webrtc/lang/it/strings.php +++ b/webrtc/lang/it/strings.php @@ -3,14 +3,12 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['WebRTC Videochat'] = 'Chat video WebRTC'; $a->strings['Save Settings'] = 'Salva Impostazioni'; $a->strings['WebRTC Base URL'] = 'Indirizzo base WebRTC'; $a->strings['Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .'] = 'Indirizzo della pagina che i tuoi utenti utilizzeranno per creare una chat rom WebRTC. Per esempio potresti usare https://live.mayfirst.org .'; -$a->strings['Settings updated.'] = 'Impostazioni aggiornate.'; $a->strings['Video Chat'] = 'Chat Video'; -$a->strings['WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC è un sistema di conferenza audio/video che funziona con Firefox (dalla versione 21) e Chrome/Chromium (dalla versione 25). -Crea semplicemente una nuova stanza e invia il collegamento alla persona con cui vuoi parlare.'; +$a->strings['WebRTC is a video and audio conferencing tool that works in all modern browsers. Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC è uno strumento di conferenza video e audio che funziona in tutti i browser moderni. Ti basta creare una nuova stanza di conversazione e inviare il collegamento a qualcuno con il quale vuoi parlare.'; $a->strings['Please contact your friendica admin and send a reminder to configure the WebRTC addon.'] = 'Contatta il tuo amministratore Friendica e ricordagli di configurare il plugin WebRTC.'; diff --git a/webrtc/webrtc.php b/webrtc/webrtc.php index e142b374..e5d4ce6e 100644 --- a/webrtc/webrtc.php +++ b/webrtc/webrtc.php @@ -7,7 +7,6 @@ * Author: Tobias Diekershoff */ -use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; diff --git a/wppost/lang/C/messages.po b/wppost/lang/C/messages.po index fea16eee..187b0316 100644 --- a/wppost/lang/C/messages.po +++ b/wppost/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:18-0500\n" +"POT-Creation-Date: 2023-06-03 15:51-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -59,10 +59,10 @@ msgstr "" msgid "Wordpress Export" msgstr "" -#: wppost.php:182 +#: wppost.php:185 msgid "Read the orig­i­nal post and com­ment stream on Friendica" msgstr "" -#: wppost.php:240 +#: wppost.php:235 msgid "Post from Friendica" msgstr "" diff --git a/wppost/lang/de/messages.po b/wppost/lang/de/messages.po index 6d2b1863..b3f1e38e 100644 --- a/wppost/lang/de/messages.po +++ b/wppost/lang/de/messages.po @@ -13,9 +13,9 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:18-0500\n" -"PO-Revision-Date: 2022-01-22 17:45+0000\n" -"Last-Translator: Tobias Diekershoff \n" -"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" +"PO-Revision-Date: 2014-06-23 13:07+0000\n" +"Last-Translator: Tobias Diekershoff , 2017-2018,2022\n" +"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/wppost/lang/it/messages.po b/wppost/lang/it/messages.po index 204bf67c..efd90e1f 100644 --- a/wppost/lang/it/messages.po +++ b/wppost/lang/it/messages.po @@ -5,71 +5,67 @@ # # Translators: # fabrixxm , 2014-2015,2017-2018 -# Sylke Vicious , 2020 +# Sylke Vicious , 2020,2023 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:16+0100\n" -"PO-Revision-Date: 2020-09-17 11:42+0000\n" -"Last-Translator: Sylke Vicious \n" -"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" +"POT-Creation-Date: 2021-11-21 19:18-0500\n" +"PO-Revision-Date: 2014-06-23 13:07+0000\n" +"Last-Translator: Sylke Vicious , 2020,2023\n" +"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: wppost.php:39 +#: wppost.php:41 msgid "Post to Wordpress" msgstr "Invia a Wordpress" -#: wppost.php:80 wppost.php:84 -msgid "Wordpress Export" -msgstr "Esporta a Wordpress" +#: wppost.php:65 +msgid "Enable Wordpress Post Addon" +msgstr "Abilita Componente Aggiuntivo di Pubblicazione Wordpress" -#: wppost.php:87 -msgid "Enable WordPress Post Addon" -msgstr "Abilita il componente aggiuntivo di invio a Wordpress" - -#: wppost.php:93 -msgid "WordPress username" +#: wppost.php:66 +msgid "Wordpress username" msgstr "Nome utente Wordpress" -#: wppost.php:98 -msgid "WordPress password" +#: wppost.php:67 +msgid "Wordpress password" msgstr "Password Wordpress" -#: wppost.php:103 +#: wppost.php:68 msgid "WordPress API URL" msgstr "Indirizzo API Wordpress" -#: wppost.php:108 -msgid "Post to WordPress by default" -msgstr "Invia sempre a Wordpress" +#: wppost.php:69 +msgid "Post to Wordpress by default" +msgstr "Pubblica su Wordpress per impostazione predefinita" -#: wppost.php:114 +#: wppost.php:70 msgid "Provide a backlink to the Friendica post" msgstr "Inserisci un collegamento al messaggio originale su Friendica" -#: wppost.php:119 +#: wppost.php:71 msgid "" "Text for the backlink, e.g. Read the original post and comment stream on " "Friendica." msgstr "Testo per il collegamento al messaggio originale, p.e. Leggi il messaggio originale e i commenti su Friendica." -#: wppost.php:124 +#: wppost.php:72 msgid "Don't post messages that are too short" msgstr "Non inviare messaggi troppo corti" -#: wppost.php:131 -msgid "Save Settings" -msgstr "Salva Impostazioni" +#: wppost.php:77 +msgid "Wordpress Export" +msgstr "Esporta a Wordpress" -#: wppost.php:231 +#: wppost.php:182 msgid "Read the orig­i­nal post and com­ment stream on Friendica" msgstr "Leggi il messaggio originale e i commenti su Friendica" -#: wppost.php:289 +#: wppost.php:240 msgid "Post from Friendica" msgstr "Messaggio da Friendica" diff --git a/wppost/lang/it/strings.php b/wppost/lang/it/strings.php index 94885848..504a077c 100644 --- a/wppost/lang/it/strings.php +++ b/wppost/lang/it/strings.php @@ -3,18 +3,17 @@ if(! function_exists("string_plural_select_it")) { function string_plural_select_it($n){ $n = intval($n); - return intval($n != 1); + if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Post to Wordpress'] = 'Invia a Wordpress'; -$a->strings['Wordpress Export'] = 'Esporta a Wordpress'; -$a->strings['Enable WordPress Post Addon'] = 'Abilita il componente aggiuntivo di invio a Wordpress'; -$a->strings['WordPress username'] = 'Nome utente Wordpress'; -$a->strings['WordPress password'] = 'Password Wordpress'; +$a->strings['Enable Wordpress Post Addon'] = 'Abilita Componente Aggiuntivo di Pubblicazione Wordpress'; +$a->strings['Wordpress username'] = 'Nome utente Wordpress'; +$a->strings['Wordpress password'] = 'Password Wordpress'; $a->strings['WordPress API URL'] = 'Indirizzo API Wordpress'; -$a->strings['Post to WordPress by default'] = 'Invia sempre a Wordpress'; +$a->strings['Post to Wordpress by default'] = 'Pubblica su Wordpress per impostazione predefinita'; $a->strings['Provide a backlink to the Friendica post'] = 'Inserisci un collegamento al messaggio originale su Friendica'; $a->strings['Text for the backlink, e.g. Read the original post and comment stream on Friendica.'] = 'Testo per il collegamento al messaggio originale, p.e. Leggi il messaggio originale e i commenti su Friendica.'; $a->strings['Don\'t post messages that are too short'] = 'Non inviare messaggi troppo corti'; -$a->strings['Save Settings'] = 'Salva Impostazioni'; +$a->strings['Wordpress Export'] = 'Esporta a Wordpress'; $a->strings['Read the orig­i­nal post and com­ment stream on Friendica'] = 'Leggi il messaggio originale e i commenti su Friendica'; $a->strings['Post from Friendica'] = 'Messaggio da Friendica'; diff --git a/wppost/wppost.php b/wppost/wppost.php index 7f96bfea..de216806 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -6,15 +6,15 @@ * Author: Mike Macgirvin */ -use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; use Friendica\Core\Hook; -use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Model\Item; use Friendica\Model\Post; +use Friendica\Model\User; use Friendica\Util\XML; function wppost_install() @@ -33,13 +33,13 @@ function wppost_jot_nets(array &$jotnets_fields) return; } - if (DI::pConfig()->get(DI::userSession()->getLocalUserId(),'wppost','post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'wppost_enable', DI::l10n()->t('Post to Wordpress'), - DI::pConfig()->get(DI::userSession()->getLocalUserId(),'wppost','post_by_default') + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'post_by_default') ] ]; } @@ -84,15 +84,15 @@ function wppost_settings(array &$data) function wppost_settings_post(array &$b) { - if(!empty($_POST['wppost-submit'])) { - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'post' , intval($_POST['wppost'])); + if (!empty($_POST['wppost-submit'])) { + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'post', intval($_POST['wppost'])); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'post_by_default', intval($_POST['wp_bydefault'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_username' , trim($_POST['wp_username'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_password' , trim($_POST['wp_password'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_blog' , trim($_POST['wp_blog'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'backlink' , intval($_POST['wp_backlink'])); - DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'shortcheck' , intval($_POST['wp_shortcheck'])); - $wp_backlink_text = BBCode::convert(trim($_POST['wp_backlink_text']), false, BBCode::BACKLINK); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_username', trim($_POST['wp_username'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_password', trim($_POST['wp_password'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_blog', trim($_POST['wp_blog'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'backlink', intval($_POST['wp_backlink'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'shortcheck', intval($_POST['wp_shortcheck'])); + $wp_backlink_text = BBCode::convertForUriId(User::getSystemUriId(), trim($_POST['wp_backlink_text']), BBCode::BACKLINK); $wp_backlink_text = HTML::toPlaintext($wp_backlink_text, 0, true); DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_backlink_text', $wp_backlink_text); } @@ -106,26 +106,23 @@ function wppost_hook_fork(array &$b) $post = $b['data']; - if ($post['deleted'] || $post['private'] || ($post['created'] !== $post['edited']) || - !strstr($post['postopts'] ?? '', 'wppost') || ($post['parent'] != $post['id'])) { + if ( + $post['deleted'] || ($post['private'] == Item::PRIVATE) || ($post['created'] !== $post['edited']) || + !strstr($post['postopts'] ?? '', 'wppost') || ($post['gravity'] != Item::GRAVITY_PARENT) + ) { $b['execute'] = false; return; } } -function wppost_post_local(array &$b) { - - // This can probably be changed to allow editing by pointing to a different API endpoint - - if ($b['edit']) { - return; - } - +function wppost_post_local(array &$b) +{ if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } - if ($b['private'] || $b['parent']) { + // This can probably be changed to allow editing by pointing to a different API endpoint + if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) { return; } @@ -148,25 +145,22 @@ function wppost_post_local(array &$b) { $b['postopts'] .= 'wppost'; } - - - function wppost_send(array &$b) { - if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) { + if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) { return; } - if(! strstr($b['postopts'],'wppost')) { + if (!strstr($b['postopts'], 'wppost')) { return; } - if($b['parent'] != $b['id']) { + if ($b['gravity'] != Item::GRAVITY_PARENT) { return; } // Dont't post if the post doesn't belong to us. - // This is a check for forum postings + // This is a check for group postings $self = DBA::selectFirst('contact', ['id'], ['uid' => $b['uid'], 'self' => true]); if ($b['contact-id'] != $self['id']) { return; @@ -176,8 +170,8 @@ function wppost_send(array &$b) $wp_username = XML::escape(DI::pConfig()->get($b['uid'], 'wppost', 'wp_username')); $wp_password = XML::escape(DI::pConfig()->get($b['uid'], 'wppost', 'wp_password')); - $wp_blog = DI::pConfig()->get($b['uid'],'wppost','wp_blog'); - $wp_backlink_text = DI::pConfig()->get($b['uid'],'wppost','wp_backlink_text'); + $wp_blog = DI::pConfig()->get($b['uid'], 'wppost', 'wp_blog'); + $wp_backlink_text = DI::pConfig()->get($b['uid'], 'wppost', 'wp_backlink_text'); if ($wp_backlink_text == '') { $wp_backlink_text = DI::l10n()->t('Read the orig­i­nal post and com­ment stream on Friendica'); } @@ -187,15 +181,7 @@ function wppost_send(array &$b) if (intval(DI::pConfig()->get($b['uid'], 'wppost', 'shortcheck'))) { // Checking, if its a post that is worth a blog post - $postentry = false; - $siteinfo = BBCode::getAttachedData($b["body"]); - - // Is it a link to an aricle, a video or a photo? - if (isset($siteinfo["type"])) { - if (in_array($siteinfo["type"], ["link", "audio", "video", "photo"])) { - $postentry = true; - } - } + $postentry = (bool)Post\Media::getByURIId($b['uri-id'], [Post\Media::HTML, Post\Media::AUDIO, Post\Media::VIDEO, Post\Media::IMAGE]); // Does it have a title? if ($wptitle != "") { @@ -215,9 +201,9 @@ function wppost_send(array &$b) // If the title is empty then try to guess if ($wptitle == '') { // Fetch information about the post - $siteinfo = BBCode::getAttachedData($b["body"]); - if (isset($siteinfo["title"])) { - $wptitle = $siteinfo["title"]; + $media = Post\Media::getByURIId($b['uri-id'], [Post\Media::HTML]); + if (!empty($media) && !empty($media[0]['name']) && ($media[0]['name'] != $media[0]['url'])) { + $wptitle = $media[0]['name']; } // If no bookmark is found then take the first line @@ -225,7 +211,7 @@ function wppost_send(array &$b) // Remove the share element before fetching the first line $title = trim(preg_replace("/\[share.*?\](.*?)\[\/share\]/ism", "\n$1\n", $b['body'])); - $title = BBCode::toPlaintext($title)."\n"; + $title = BBCode::toPlaintext($title) . "\n"; $pos = strpos($title, "\n"); $trailer = ""; if (($pos == 0) || ($pos > 100)) { @@ -233,7 +219,7 @@ function wppost_send(array &$b) $trailer = "..."; } - $wptitle = substr($title, 0, $pos).$trailer; + $wptitle = substr($title, 0, $pos) . $trailer; } } @@ -244,10 +230,10 @@ function wppost_send(array &$b) $post = preg_replace('/(.*?)<\/a>/ism', "\n$1\n", $post); $post = preg_replace('/(.*?)<\/a>/ism', "\n$1\n", $post); - $post = $title.$post; + $post = $title . $post; - $wp_backlink = intval(DI::pConfig()->get($b['uid'],'wppost','backlink')); - if($wp_backlink && $b['plink']) { + $wp_backlink = intval(DI::pConfig()->get($b['uid'], 'wppost', 'backlink')); + if ($wp_backlink && $b['plink']) { $post .= '

' . $wp_backlink_text . '

'; } @@ -270,11 +256,13 @@ function wppost_send(array &$b) EOT; - Logger::debug('wppost: data: ' . $xml); + DI::logger()->debug('wppost: data: ' . $xml); + + $x = ''; if ($wp_blog !== 'test') { - $x = DI::httpClient()->post($wp_blog, $xml)->getBody(); + $x = DI::httpClient()->post($wp_blog, $xml)->getBodyString(); } - Logger::info('posted to wordpress: ' . (($x) ? $x : '')); + DI::logger()->info('posted to wordpress: ' . $x); } }